From a4b62da0ba395c9f541d49d3e368597735504bf7 Mon Sep 17 00:00:00 2001 From: s2 Date: Thu, 13 Feb 2020 15:39:37 +0100 Subject: [PATCH] use terser and clean-css directly create a sourcemap as well by default --- minifyfromhtml.js | 55 +- node_modules/.bin/acorn | 2 +- node_modules/.bin/acorn.cmd | 22 +- node_modules/.bin/acorn.ps1 | 18 + node_modules/.bin/css-b64-images | 15 - node_modules/.bin/css-b64-images.cmd | 7 - node_modules/.bin/escodegen | 2 +- node_modules/.bin/escodegen.cmd | 22 +- node_modules/.bin/escodegen.ps1 | 18 + node_modules/.bin/esgenerate | 2 +- node_modules/.bin/esgenerate.cmd | 22 +- node_modules/.bin/esgenerate.ps1 | 18 + node_modules/.bin/esparse | 2 +- node_modules/.bin/esparse.cmd | 22 +- node_modules/.bin/esparse.ps1 | 18 + node_modules/.bin/esvalidate | 2 +- node_modules/.bin/esvalidate.cmd | 22 +- node_modules/.bin/esvalidate.ps1 | 18 + node_modules/.bin/he | 15 - node_modules/.bin/he.cmd | 7 - node_modules/.bin/html-minifier | 1 - node_modules/.bin/html-minifier.cmd | 7 - node_modules/.bin/minify | 1 - node_modules/.bin/minify.cmd | 7 - node_modules/.bin/sshpk-conv | 2 +- node_modules/.bin/sshpk-conv.cmd | 22 +- node_modules/.bin/sshpk-conv.ps1 | 18 + node_modules/.bin/sshpk-sign | 2 +- node_modules/.bin/sshpk-sign.cmd | 22 +- node_modules/.bin/sshpk-sign.ps1 | 18 + node_modules/.bin/sshpk-verify | 2 +- node_modules/.bin/sshpk-verify.cmd | 22 +- node_modules/.bin/sshpk-verify.ps1 | 18 + node_modules/.bin/terser | 16 +- node_modules/.bin/terser.cmd | 22 +- node_modules/.bin/terser.ps1 | 18 + node_modules/.bin/uglifyjs | 1 - node_modules/.bin/uglifyjs.cmd | 7 - node_modules/.bin/uuid | 2 +- node_modules/.bin/uuid.cmd | 22 +- node_modules/.bin/uuid.ps1 | 18 + node_modules/abab/CHANGELOG.md | 34 +- node_modules/abab/LICENSE.md | 14 +- node_modules/abab/index.d.ts | 2 + node_modules/abab/package.json | 13 +- node_modules/acorn-globals/README.md | 5 + node_modules/acorn-globals/index.js | 26 +- node_modules/acorn-globals/package.json | 10 +- node_modules/acorn-walk/CHANGELOG.md | 6 + node_modules/acorn-walk/README.md | 2 +- node_modules/acorn-walk/dist/walk.js | 858 +- node_modules/acorn-walk/dist/walk.mjs | 22 +- node_modules/acorn-walk/package.json | 10 +- node_modules/acorn/CHANGELOG.md | 36 + node_modules/acorn/README.md | 8 +- node_modules/acorn/dist/acorn.d.ts | 12 +- node_modules/acorn/dist/acorn.js | 9408 ++++++++------- node_modules/acorn/dist/acorn.mjs | 866 +- node_modules/acorn/dist/bin.js | 12 +- node_modules/acorn/package.json | 12 +- node_modules/ajv/README.md | 52 +- node_modules/ajv/dist/ajv.bundle.js | 222 +- node_modules/ajv/dist/ajv.min.js | 4 +- node_modules/ajv/dist/ajv.min.js.map | 2 +- node_modules/ajv/lib/.DS_Store | Bin 6148 -> 0 bytes node_modules/ajv/lib/ajv.d.ts | 4 +- node_modules/ajv/lib/compile/formats.js | 6 +- node_modules/ajv/lib/definition_schema.js | 37 + node_modules/ajv/lib/dot/definitions.def | 4 +- node_modules/ajv/lib/dotjs/allOf.js | 2 +- node_modules/ajv/lib/dotjs/anyOf.js | 2 +- node_modules/ajv/lib/dotjs/contains.js | 2 +- node_modules/ajv/lib/dotjs/dependencies.js | 2 +- node_modules/ajv/lib/dotjs/if.js | 4 +- node_modules/ajv/lib/dotjs/items.js | 6 +- node_modules/ajv/lib/dotjs/not.js | 2 +- node_modules/ajv/lib/dotjs/oneOf.js | 2 +- node_modules/ajv/lib/dotjs/properties.js | 4 +- node_modules/ajv/lib/dotjs/propertyNames.js | 2 +- node_modules/ajv/lib/dotjs/required.js | 2 +- node_modules/ajv/lib/keyword.js | 34 +- node_modules/ajv/package.json | 28 +- node_modules/async-limiter/.eslintignore | 2 + node_modules/async-limiter/.nycrc | 10 + node_modules/async-limiter/.travis.yml | 2 + .../async-limiter/coverage/coverage.json | 1 - .../lcov-report/async-throttle/index.html | 73 - .../lcov-report/async-throttle/index.js.html | 246 - .../coverage/lcov-report/base.css | 182 - .../coverage/lcov-report/index.html | 73 - .../coverage/lcov-report/prettify.css | 1 - .../coverage/lcov-report/prettify.js | 1 - .../lcov-report/sort-arrow-sprite.png | Bin 209 -> 0 bytes .../coverage/lcov-report/sorter.js | 156 - node_modules/async-limiter/coverage/lcov.info | 74 - node_modules/async-limiter/package.json | 28 +- node_modules/async-limiter/readme.md | 16 +- node_modules/aws4/.travis.yml | 6 +- node_modules/aws4/README.md | 4 +- node_modules/aws4/aws4.js | 47 +- node_modules/aws4/package.json | 13 +- node_modules/camel-case/camel-case.d.ts | 3 - node_modules/camel-case/camel-case.js | 23 - node_modules/camel-case/package.json | 81 - node_modules/clean-css/package.json | 15 +- .../combined-stream/lib/combined_stream.js | 23 +- node_modules/combined-stream/lib/defer.js | 26 - node_modules/combined-stream/package.json | 10 +- node_modules/combined-stream/yarn.lock | 17 + node_modules/commander/package.json | 16 +- node_modules/css-b64-images/.npmignore | 15 - node_modules/css-b64-images/.travis.yml | 5 - node_modules/css-b64-images/README.md | 78 - .../css-b64-images/bin/css-b64-images | 13 - node_modules/css-b64-images/draft.png | Bin 267269 -> 0 bytes node_modules/css-b64-images/draft.xcf | Bin 477539 -> 0 bytes .../css-b64-images/lib/css-b64-images.js | 116 - node_modules/css-b64-images/package.json | 64 - .../test/css-b64-images-test.js | 38 - .../css-b64-images/test/fixture/css/style.css | 52 - .../fonts/callunasansregular-webfont.eot | Bin 28462 -> 0 bytes .../fonts/callunasansregular-webfont.svg | 248 - .../fonts/callunasansregular-webfont.ttf | Bin 63460 -> 0 bytes .../fonts/callunasansregular-webfont.woff | Bin 31820 -> 0 bytes .../fonts/maven_pro_medium-webfont.eot | Bin 35453 -> 0 bytes .../fonts/maven_pro_medium-webfont.svg | 245 - .../fonts/maven_pro_medium-webfont.ttf | Bin 90548 -> 0 bytes .../fonts/maven_pro_medium-webfont.woff | Bin 36520 -> 0 bytes .../test/fixture/img/background-pattern.gif | Bin 1103 -> 0 bytes .../css-b64-images/test/fixture/img/dots.svg | 6 - .../test/fixture/img/mixit-banner.png | Bin 4821 -> 0 bytes node_modules/cssom/README.mdown | 16 +- node_modules/cssom/lib/Parser.js | 362 - node_modules/cssom/lib/snapshot.js | 76 - node_modules/cssom/package.json | 16 +- .../cssstyle/lib/implementedProperties.js | 2 +- node_modules/cssstyle/lib/properties.js | 2 +- node_modules/cssstyle/package.json | 10 +- node_modules/debug/CHANGELOG.md | 395 - node_modules/debug/LICENSE | 19 - node_modules/debug/README.md | 455 - node_modules/debug/dist/debug.js | 912 -- node_modules/debug/package.json | 102 - node_modules/debug/src/browser.js | 264 - node_modules/debug/src/common.js | 266 - node_modules/debug/src/index.js | 10 - node_modules/debug/src/node.js | 257 - node_modules/escodegen/escodegen.js | 71 +- node_modules/escodegen/package.json | 18 +- node_modules/esprima/ChangeLog | 26 + node_modules/esprima/README.md | 8 +- node_modules/esprima/bin/esvalidate.js | 2 +- node_modules/esprima/dist/esprima.js | 10006 ++++++++-------- node_modules/esprima/package.json | 49 +- node_modules/estraverse/.babelrc | 3 - node_modules/estraverse/README.md | 153 + node_modules/estraverse/estraverse.js | 83 +- node_modules/estraverse/package.json | 16 +- node_modules/esutils/README.md | 17 +- node_modules/esutils/lib/code.js | 18 +- node_modules/esutils/package.json | 21 +- node_modules/fast-deep-equal/README.md | 68 +- node_modules/fast-deep-equal/es6/index.d.ts | 2 + node_modules/fast-deep-equal/es6/index.js | 72 + node_modules/fast-deep-equal/es6/react.d.ts | 2 + node_modules/fast-deep-equal/es6/react.js | 79 + node_modules/fast-deep-equal/index.js | 39 +- node_modules/fast-deep-equal/package.json | 46 +- node_modules/fast-deep-equal/react.d.ts | 2 + node_modules/fast-deep-equal/react.js | 53 + .../.github/FUNDING.yml | 1 + .../fast-json-stable-stringify/.npmignore | 4 - .../fast-json-stable-stringify/.travis.yml | 6 +- .../fast-json-stable-stringify/LICENSE | 3 + .../fast-json-stable-stringify/README.md | 12 + .../fast-json-stable-stringify/index.d.ts | 4 + .../fast-json-stable-stringify/package.json | 18 +- node_modules/fast-levenshtein/package.json | 10 +- node_modules/har-validator/package.json | 10 +- node_modules/he/LICENSE-MIT.txt | 20 - node_modules/he/README.md | 379 - node_modules/he/bin/he | 148 - node_modules/he/he.js | 345 - node_modules/he/man/he.1 | 78 - node_modules/he/package.json | 90 - node_modules/html-minifier/LICENSE | 22 - node_modules/html-minifier/README.md | 160 - node_modules/html-minifier/cli.js | 311 - node_modules/html-minifier/package.json | 129 - .../html-minifier/sample-cli-config-file.conf | 40 - .../html-minifier/src/htmlminifier.js | 1344 --- node_modules/html-minifier/src/htmlparser.js | 567 - node_modules/html-minifier/src/tokenchain.js | 71 - node_modules/html-minifier/src/utils.js | 18 - node_modules/jsdom/Changelog.md | 48 +- node_modules/jsdom/README.md | 8 +- node_modules/jsdom/lib/api.js | 5 +- .../jsdom/lib/jsdom/browser/Window.js | 22 +- .../jsdom/lib/jsdom/browser/htmltodom.js | 191 - .../html.js} | 59 +- .../jsdom/lib/jsdom/browser/parser/index.js | 37 + .../jsdom/lib/jsdom/browser/parser/xml.js | 192 + .../resources/per-document-resource-loader.js | 4 +- .../jsdom/lib/jsdom/living/attributes.js | 2 + .../living/attributes/NamedNodeMap-impl.js | 2 + .../jsdom/living/domparsing/DOMParser-impl.js | 8 +- .../living/events/PageTransitionEvent-impl.js | 20 + .../lib/jsdom/living/generated/Element.js | 12 +- .../lib/jsdom/living/generated/External.js | 4 +- .../living/generated/HTMLAnchorElement.js | 40 +- .../jsdom/living/generated/HTMLAreaElement.js | 26 +- .../jsdom/living/generated/HTMLBRElement.js | 4 +- .../jsdom/living/generated/HTMLBaseElement.js | 4 +- .../jsdom/living/generated/HTMLBodyElement.js | 24 +- .../living/generated/HTMLButtonElement.js | 30 +- .../living/generated/HTMLDListElement.js | 6 +- .../jsdom/living/generated/HTMLDataElement.js | 4 +- .../living/generated/HTMLDataListElement.js | 11 + .../living/generated/HTMLDetailsElement.js | 6 +- .../living/generated/HTMLDialogElement.js | 6 +- .../living/generated/HTMLDirectoryElement.js | 6 +- .../jsdom/living/generated/HTMLDivElement.js | 4 +- .../lib/jsdom/living/generated/HTMLElement.js | 18 +- .../living/generated/HTMLEmbedElement.js | 20 +- .../living/generated/HTMLFieldSetElement.js | 10 +- .../jsdom/living/generated/HTMLFontElement.js | 12 +- .../jsdom/living/generated/HTMLFormElement.js | 18 +- .../living/generated/HTMLFrameElement.js | 26 +- .../living/generated/HTMLFrameSetElement.js | 8 +- .../jsdom/living/generated/HTMLHRElement.js | 22 +- .../living/generated/HTMLHeadingElement.js | 4 +- .../jsdom/living/generated/HTMLHtmlElement.js | 4 +- .../living/generated/HTMLIFrameElement.js | 42 +- .../living/generated/HTMLImageElement.js | 42 +- .../living/generated/HTMLInputElement.js | 111 +- .../jsdom/living/generated/HTMLLIElement.js | 8 +- .../living/generated/HTMLLabelElement.js | 4 +- .../living/generated/HTMLLegendElement.js | 4 +- .../jsdom/living/generated/HTMLLinkElement.js | 32 +- .../jsdom/living/generated/HTMLMapElement.js | 4 +- .../living/generated/HTMLMarqueeElement.js | 42 +- .../living/generated/HTMLMediaElement.js | 32 +- .../jsdom/living/generated/HTMLMenuElement.js | 6 +- .../jsdom/living/generated/HTMLMetaElement.js | 16 +- .../jsdom/living/generated/HTMLModElement.js | 4 +- .../living/generated/HTMLOListElement.js | 16 +- .../living/generated/HTMLObjectElement.js | 58 +- .../living/generated/HTMLOptGroupElement.js | 10 +- .../living/generated/HTMLOptionElement.js | 12 +- .../living/generated/HTMLOutputElement.js | 4 +- .../living/generated/HTMLParagraphElement.js | 4 +- .../living/generated/HTMLParamElement.js | 16 +- .../jsdom/living/generated/HTMLPreElement.js | 4 +- .../living/generated/HTMLScriptElement.js | 30 +- .../living/generated/HTMLSelectElement.js | 32 +- .../jsdom/living/generated/HTMLSlotElement.js | 4 +- .../living/generated/HTMLSourceElement.js | 12 +- .../living/generated/HTMLStyleElement.js | 12 +- .../generated/HTMLTableCaptionElement.js | 4 +- .../living/generated/HTMLTableCellElement.js | 46 +- .../living/generated/HTMLTableColElement.js | 24 +- .../living/generated/HTMLTableElement.js | 36 +- .../living/generated/HTMLTableRowElement.js | 20 +- .../generated/HTMLTableSectionElement.js | 16 +- .../living/generated/HTMLTextAreaElement.js | 56 +- .../jsdom/living/generated/HTMLTimeElement.js | 4 +- .../living/generated/HTMLTrackElement.js | 18 +- .../living/generated/HTMLUListElement.js | 10 +- .../living/generated/HTMLVideoElement.js | 14 +- .../living/generated/PageTransitionEvent.js | 122 + .../generated/PageTransitionEventInit.js | 34 + .../jsdom/living/helpers/document-base-url.js | 2 +- .../lib/jsdom/living/helpers/focusing.js | 4 +- .../lib/jsdom/living/helpers/form-controls.js | 10 +- .../jsdom/lib/jsdom/living/helpers/html.js | 28 - .../lib/jsdom/living/helpers/stylesheets.js | 4 +- node_modules/jsdom/lib/jsdom/living/index.js | 2 + .../jsdom/living/named-properties-window.js | 18 +- .../lib/jsdom/living/nodes/Document-impl.js | 16 +- .../lib/jsdom/living/nodes/Element-impl.js | 81 +- .../nodes/ElementCSSInlineStyle-impl.js | 2 +- .../living/nodes/GlobalEventHandlers-impl.js | 2 +- .../living/nodes/HTMLAnchorElement-impl.js | 6 + .../nodes/HTMLAndSVGElementShared-impl.js | 6 +- .../living/nodes/HTMLAreaElement-impl.js | 6 + .../living/nodes/HTMLBaseElement-impl.js | 4 +- .../living/nodes/HTMLButtonElement-impl.js | 8 +- .../living/nodes/HTMLCanvasElement-impl.js | 10 +- .../jsdom/living/nodes/HTMLCollection-impl.js | 8 +- .../living/nodes/HTMLDataListElement-impl.js | 13 +- .../jsdom/living/nodes/HTMLElement-impl.js | 38 +- .../living/nodes/HTMLEmbedElement-impl.js | 2 +- .../living/nodes/HTMLFormElement-impl.js | 12 +- .../living/nodes/HTMLFrameElement-impl.js | 38 +- .../nodes/HTMLHyperlinkElementUtils-impl.js | 83 +- .../living/nodes/HTMLImageElement-impl.js | 24 +- .../living/nodes/HTMLInputElement-impl.js | 72 +- .../living/nodes/HTMLLabelElement-impl.js | 6 +- .../living/nodes/HTMLLinkElement-impl.js | 4 +- .../living/nodes/HTMLMediaElement-impl.js | 8 +- .../living/nodes/HTMLMeterElement-impl.js | 24 +- .../jsdom/living/nodes/HTMLModElement-impl.js | 4 +- .../living/nodes/HTMLOListElement-impl.js | 4 +- .../living/nodes/HTMLObjectElement-impl.js | 4 +- .../living/nodes/HTMLOptionElement-impl.js | 47 +- .../nodes/HTMLOptionsCollection-impl.js | 4 +- .../living/nodes/HTMLProgressElement-impl.js | 10 +- .../living/nodes/HTMLQuoteElement-impl.js | 4 +- .../living/nodes/HTMLScriptElement-impl.js | 12 +- .../living/nodes/HTMLSelectElement-impl.js | 22 +- .../living/nodes/HTMLSlotElement-impl.js | 2 +- .../living/nodes/HTMLSourceElement-impl.js | 6 +- .../living/nodes/HTMLStyleElement-impl.js | 5 +- .../living/nodes/HTMLTableCellElement-impl.js | 12 +- .../living/nodes/HTMLTextAreaElement-impl.js | 18 +- .../living/nodes/HTMLTrackElement-impl.js | 2 +- .../living/nodes/HTMLVideoElement-impl.js | 2 +- .../jsdom/living/nodes/SVGSVGElement-impl.js | 2 +- .../lib/jsdom/living/nodes/ShadowRoot-impl.js | 22 +- .../living/svg/SVGAnimatedString-impl.js | 16 +- .../jsdom/lib/jsdom/living/svg/SVGListBase.js | 6 +- .../lib/jsdom/living/window/navigation.js | 5 +- .../lib/jsdom/living/xhr/FormData-impl.js | 8 +- .../jsdom/lib/jsdom/living/xmlhttprequest.js | 3 +- node_modules/jsdom/lib/jsdom/utils.js | 2 +- node_modules/jsdom/package.json | 19 +- node_modules/lodash/package.json | 14 +- node_modules/lower-case/LICENSE | 21 - node_modules/lower-case/README.md | 45 - node_modules/lower-case/lower-case.d.ts | 3 - node_modules/lower-case/lower-case.js | 54 - node_modules/lower-case/package.json | 77 - node_modules/mime-db/HISTORY.md | 34 + node_modules/mime-db/README.md | 8 +- node_modules/mime-db/db.json | 353 +- node_modules/mime-db/package.json | 44 +- node_modules/mime-types/HISTORY.md | 31 + node_modules/mime-types/package.json | 28 +- node_modules/minify/ChangeLog | 1045 -- node_modules/minify/HELP.md | 114 - node_modules/minify/LICENSE | 22 - node_modules/minify/README.md | 127 - node_modules/minify/bin/minify.js | 101 - node_modules/minify/help.json | 7 - node_modules/minify/lib/css.js | 31 - node_modules/minify/lib/html.js | 47 - node_modules/minify/lib/img.js | 37 - node_modules/minify/lib/js.js | 27 - node_modules/minify/lib/minify.js | 84 - node_modules/minify/package.json | 93 - node_modules/ms/index.js | 162 - node_modules/ms/license.md | 21 - node_modules/ms/package.json | 69 - node_modules/ms/readme.md | 60 - node_modules/no-case/LICENSE | 21 - node_modules/no-case/README.md | 50 - node_modules/no-case/no-case.d.ts | 3 - node_modules/no-case/no-case.js | 40 - node_modules/no-case/package.json | 82 - .../no-case/vendor/camel-case-regexp.js | 1 - .../no-case/vendor/camel-case-upper-regexp.js | 1 - .../no-case/vendor/non-word-regexp.js | 1 - node_modules/nwsapi/LICENSE | 4 +- node_modules/nwsapi/package.json | 23 +- node_modules/nwsapi/src/nwsapi.js | 147 +- node_modules/optionator/CHANGELOG.md | 4 + node_modules/optionator/README.md | 6 +- node_modules/optionator/lib/help.js | 19 +- node_modules/optionator/lib/index.js | 12 +- node_modules/optionator/lib/util.js | 4 +- node_modules/optionator/package.json | 20 +- node_modules/param-case/LICENSE | 21 - node_modules/param-case/README.md | 45 - node_modules/param-case/package.json | 71 - node_modules/param-case/param-case.d.ts | 3 - node_modules/param-case/param-case.js | 12 - node_modules/psl/.eslintignore | 1 - node_modules/psl/.eslintrc | 11 - node_modules/psl/.travis.yml | 6 - node_modules/psl/README.md | 10 +- node_modules/psl/browserstack-logo.svg | 90 + node_modules/psl/data/rules.json | 8813 +++++++++++++- node_modules/psl/dist/psl.js | 8813 +++++++++++++- node_modules/psl/dist/psl.min.js | 2 +- node_modules/psl/karma.conf.js | 38 - node_modules/psl/package.json | 53 +- node_modules/psl/yarn.lock | 3955 ------ node_modules/relateurl/README.md | 159 - node_modules/relateurl/lib/constants.js | 10 - node_modules/relateurl/lib/format.js | 174 - node_modules/relateurl/lib/index.js | 94 - node_modules/relateurl/lib/options.js | 57 - node_modules/relateurl/lib/parse/host.js | 26 - node_modules/relateurl/lib/parse/hrefInfo.js | 20 - node_modules/relateurl/lib/parse/index.js | 58 - node_modules/relateurl/lib/parse/path.js | 100 - node_modules/relateurl/lib/parse/port.js | 32 - node_modules/relateurl/lib/parse/query.js | 53 - node_modules/relateurl/lib/parse/urlstring.js | 146 - .../relateurl/lib/relate/absolutize.js | 89 - .../relateurl/lib/relate/findRelation.js | 79 - node_modules/relateurl/lib/relate/index.js | 18 - .../relateurl/lib/relate/relativize.js | 67 - node_modules/relateurl/lib/util/devlog.js | 25 - node_modules/relateurl/lib/util/object.js | 64 - node_modules/relateurl/lib/util/path.js | 49 - node_modules/relateurl/license | 21 - node_modules/relateurl/package.json | 71 - node_modules/request-promise-core/LICENSE | 2 +- node_modules/request-promise-core/README.md | 3 + .../request-promise-core/package.json | 24 +- .../request-promise-native/.npmignore | 13 - node_modules/request-promise-native/LICENSE | 2 +- node_modules/request-promise-native/README.md | 9 +- .../request-promise-native/package.json | 12 +- node_modules/request/CHANGELOG.md | 8 + node_modules/request/README.md | 126 +- node_modules/request/index.js | 2 +- node_modules/request/lib/auth.js | 2 +- node_modules/request/lib/getProxyFromURI.js | 2 +- node_modules/request/lib/har.js | 2 +- .../node_modules/punycode/LICENSE-MIT.txt | 20 - .../request/node_modules/punycode/README.md | 176 - .../node_modules/punycode/package.json | 87 - .../request/node_modules/punycode/punycode.js | 533 - .../request/node_modules/tough-cookie/LICENSE | 12 - .../node_modules/tough-cookie/README.md | 507 - .../node_modules/tough-cookie/lib/cookie.js | 1431 --- .../node_modules/tough-cookie/lib/memstore.js | 176 - .../tough-cookie/lib/pathMatch.js | 61 - .../tough-cookie/lib/permuteDomain.js | 56 - .../tough-cookie/lib/pubsuffix-psl.js | 38 - .../node_modules/tough-cookie/lib/store.js | 71 - .../node_modules/tough-cookie/package.json | 94 - node_modules/request/package.json | 26 +- node_modules/request/request.js | 24 +- node_modules/safe-buffer/README.md | 2 + node_modules/safe-buffer/index.js | 2 + node_modules/safe-buffer/package.json | 10 +- node_modules/saxes/CHANGELOG.md | 29 + node_modules/saxes/lib/saxes.js | 564 +- node_modules/saxes/package.json | 38 +- node_modules/source-map-support/package.json | 2 +- node_modules/source-map/package.json | 15 +- node_modules/symbol-tree/README.md | 142 +- node_modules/symbol-tree/lib/SymbolTree.js | 2 + node_modules/symbol-tree/package.json | 21 +- .../node_modules/commander/CHANGELOG.md | 408 - .../terser/node_modules/commander/LICENSE | 22 - .../terser/node_modules/commander/Readme.md | 428 - .../terser/node_modules/commander/index.js | 1224 -- .../node_modules/commander/package.json | 70 - .../node_modules/commander/typings/index.d.ts | 310 - node_modules/terser/package.json | 14 +- node_modules/tough-cookie/package.json | 1 + node_modules/try-catch/ChangeLog | 34 - node_modules/try-catch/LICENSE | 21 - node_modules/try-catch/README.md | 42 - node_modules/try-catch/lib/try-catch.js | 12 - node_modules/try-catch/package.json | 66 - node_modules/try-to-catch/ChangeLog | 49 - node_modules/try-to-catch/LICENSE | 21 - node_modules/try-to-catch/README.md | 78 - node_modules/try-to-catch/lib/try-to-catch.js | 21 - node_modules/try-to-catch/package.json | 81 - node_modules/uglify-js/LICENSE | 29 - node_modules/uglify-js/README.md | 1146 -- node_modules/uglify-js/bin/uglifyjs | 424 - node_modules/uglify-js/lib/ast.js | 995 -- node_modules/uglify-js/lib/compress.js | 7863 ------------ node_modules/uglify-js/lib/minify.js | 264 - node_modules/uglify-js/lib/mozilla-ast.js | 629 - node_modules/uglify-js/lib/output.js | 1501 --- node_modules/uglify-js/lib/parse.js | 1613 --- node_modules/uglify-js/lib/propmangle.js | 234 - node_modules/uglify-js/lib/scope.js | 621 - node_modules/uglify-js/lib/sourcemap.js | 104 - node_modules/uglify-js/lib/transform.js | 185 - node_modules/uglify-js/lib/utils.js | 275 - .../node_modules/commander/CHANGELOG.md | 396 - .../uglify-js/node_modules/commander/LICENSE | 22 - .../node_modules/commander/Readme.md | 417 - .../uglify-js/node_modules/commander/index.js | 1227 -- .../node_modules/commander/package.json | 70 - .../node_modules/commander/typings/index.d.ts | 309 - node_modules/uglify-js/package.json | 103 - node_modules/uglify-js/tools/domprops.json | 6850 ----------- node_modules/uglify-js/tools/exit.js | 15 - node_modules/uglify-js/tools/exports.js | 6 - node_modules/uglify-js/tools/node.js | 78 - node_modules/uglify-js/tools/props.html | 540 - node_modules/upper-case/LICENSE | 21 - node_modules/upper-case/README.md | 45 - node_modules/upper-case/package.json | 76 - node_modules/upper-case/upper-case.d.ts | 3 - node_modules/upper-case/upper-case.js | 50 - node_modules/uuid/.eslintrc.json | 47 - node_modules/uuid/CHANGELOG.md | 45 +- node_modules/uuid/README.md | 77 +- node_modules/uuid/README_js.md | 280 - node_modules/uuid/lib/bytesToUuid.js | 18 +- node_modules/uuid/package.json | 41 +- node_modules/uuid/v1.js | 2 +- node_modules/w3c-xmlserializer/package.json | 10 +- node_modules/whatwg-url/README.md | 9 +- .../whatwg-url/lib/url-state-machine.js | 2 - node_modules/whatwg-url/package.json | 13 +- .../{camel-case => word-wrap}/LICENSE | 2 +- node_modules/word-wrap/README.md | 182 + node_modules/word-wrap/index.d.ts | 50 + node_modules/word-wrap/index.js | 46 + node_modules/word-wrap/package.json | 137 + 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 | 63 - node_modules/wordwrap/test/break.js | 32 - node_modules/wordwrap/test/idleness.txt | 63 - node_modules/wordwrap/test/wrap.js | 33 - node_modules/xmlchars/README.md | 5 +- node_modules/xmlchars/package.json | 50 +- node_modules/xmlchars/xml/1.0/ed5.d.ts | 2 +- node_modules/xmlchars/xml/1.0/ed5.js | 34 +- node_modules/xmlchars/xml/1.0/ed5.js.map | 2 +- node_modules/xmlchars/xml/1.1/ed2.d.ts | 73 + node_modules/xmlchars/xml/1.1/ed2.js | 145 + node_modules/xmlchars/xml/1.1/ed2.js.map | 1 + node_modules/xmlchars/xmlchars.d.ts | 2 +- node_modules/xmlchars/xmlchars.js | 3 + node_modules/xmlchars/xmlchars.js.map | 2 +- node_modules/xmlchars/xmlns/1.0/ed3.js.map | 2 +- package-lock.json | 346 +- package.json | 5 +- 535 files changed, 33708 insertions(+), 63052 deletions(-) create mode 100644 node_modules/.bin/acorn.ps1 delete mode 100644 node_modules/.bin/css-b64-images delete mode 100644 node_modules/.bin/css-b64-images.cmd create mode 100644 node_modules/.bin/escodegen.ps1 create mode 100644 node_modules/.bin/esgenerate.ps1 create mode 100644 node_modules/.bin/esparse.ps1 create mode 100644 node_modules/.bin/esvalidate.ps1 delete mode 100644 node_modules/.bin/he delete mode 100644 node_modules/.bin/he.cmd delete mode 120000 node_modules/.bin/html-minifier delete mode 100644 node_modules/.bin/html-minifier.cmd delete mode 120000 node_modules/.bin/minify delete mode 100644 node_modules/.bin/minify.cmd create mode 100644 node_modules/.bin/sshpk-conv.ps1 create mode 100644 node_modules/.bin/sshpk-sign.ps1 create mode 100644 node_modules/.bin/sshpk-verify.ps1 create mode 100644 node_modules/.bin/terser.ps1 delete mode 120000 node_modules/.bin/uglifyjs delete mode 100644 node_modules/.bin/uglifyjs.cmd create mode 100644 node_modules/.bin/uuid.ps1 create mode 100644 node_modules/abab/index.d.ts delete mode 100644 node_modules/ajv/lib/.DS_Store create mode 100644 node_modules/ajv/lib/definition_schema.js create mode 100644 node_modules/async-limiter/.eslintignore create mode 100644 node_modules/async-limiter/.nycrc delete mode 100644 node_modules/async-limiter/coverage/coverage.json delete mode 100644 node_modules/async-limiter/coverage/lcov-report/async-throttle/index.html delete mode 100644 node_modules/async-limiter/coverage/lcov-report/async-throttle/index.js.html delete mode 100644 node_modules/async-limiter/coverage/lcov-report/base.css delete mode 100644 node_modules/async-limiter/coverage/lcov-report/index.html delete mode 100644 node_modules/async-limiter/coverage/lcov-report/prettify.css delete mode 100644 node_modules/async-limiter/coverage/lcov-report/prettify.js delete mode 100644 node_modules/async-limiter/coverage/lcov-report/sort-arrow-sprite.png delete mode 100644 node_modules/async-limiter/coverage/lcov-report/sorter.js delete mode 100644 node_modules/async-limiter/coverage/lcov.info delete mode 100644 node_modules/camel-case/camel-case.d.ts delete mode 100644 node_modules/camel-case/camel-case.js delete mode 100644 node_modules/camel-case/package.json delete mode 100644 node_modules/combined-stream/lib/defer.js create mode 100644 node_modules/combined-stream/yarn.lock delete mode 100644 node_modules/css-b64-images/.npmignore delete mode 100644 node_modules/css-b64-images/.travis.yml delete mode 100644 node_modules/css-b64-images/README.md delete mode 100644 node_modules/css-b64-images/bin/css-b64-images delete mode 100644 node_modules/css-b64-images/draft.png delete mode 100644 node_modules/css-b64-images/draft.xcf delete mode 100644 node_modules/css-b64-images/lib/css-b64-images.js delete mode 100644 node_modules/css-b64-images/package.json delete mode 100644 node_modules/css-b64-images/test/css-b64-images-test.js delete mode 100644 node_modules/css-b64-images/test/fixture/css/style.css delete mode 100644 node_modules/css-b64-images/test/fixture/fonts/callunasansregular-webfont.eot delete mode 100644 node_modules/css-b64-images/test/fixture/fonts/callunasansregular-webfont.svg delete mode 100644 node_modules/css-b64-images/test/fixture/fonts/callunasansregular-webfont.ttf delete mode 100644 node_modules/css-b64-images/test/fixture/fonts/callunasansregular-webfont.woff delete mode 100644 node_modules/css-b64-images/test/fixture/fonts/maven_pro_medium-webfont.eot delete mode 100644 node_modules/css-b64-images/test/fixture/fonts/maven_pro_medium-webfont.svg delete mode 100644 node_modules/css-b64-images/test/fixture/fonts/maven_pro_medium-webfont.ttf delete mode 100644 node_modules/css-b64-images/test/fixture/fonts/maven_pro_medium-webfont.woff delete mode 100644 node_modules/css-b64-images/test/fixture/img/background-pattern.gif delete mode 100644 node_modules/css-b64-images/test/fixture/img/dots.svg delete mode 100644 node_modules/css-b64-images/test/fixture/img/mixit-banner.png delete mode 100644 node_modules/cssom/lib/Parser.js delete mode 100644 node_modules/cssom/lib/snapshot.js delete mode 100644 node_modules/debug/CHANGELOG.md delete mode 100644 node_modules/debug/LICENSE delete mode 100644 node_modules/debug/README.md delete mode 100644 node_modules/debug/dist/debug.js delete mode 100644 node_modules/debug/package.json delete mode 100644 node_modules/debug/src/browser.js delete mode 100644 node_modules/debug/src/common.js delete mode 100644 node_modules/debug/src/index.js delete mode 100644 node_modules/debug/src/node.js delete mode 100644 node_modules/estraverse/.babelrc create mode 100644 node_modules/estraverse/README.md create mode 100644 node_modules/fast-deep-equal/es6/index.d.ts create mode 100644 node_modules/fast-deep-equal/es6/index.js create mode 100644 node_modules/fast-deep-equal/es6/react.d.ts create mode 100644 node_modules/fast-deep-equal/es6/react.js create mode 100644 node_modules/fast-deep-equal/react.d.ts create mode 100644 node_modules/fast-deep-equal/react.js create mode 100644 node_modules/fast-json-stable-stringify/.github/FUNDING.yml delete mode 100644 node_modules/fast-json-stable-stringify/.npmignore create mode 100644 node_modules/fast-json-stable-stringify/index.d.ts delete mode 100644 node_modules/he/LICENSE-MIT.txt delete mode 100644 node_modules/he/README.md delete mode 100644 node_modules/he/bin/he delete mode 100644 node_modules/he/he.js delete mode 100644 node_modules/he/man/he.1 delete mode 100644 node_modules/he/package.json delete mode 100644 node_modules/html-minifier/LICENSE delete mode 100644 node_modules/html-minifier/README.md delete mode 100755 node_modules/html-minifier/cli.js delete mode 100644 node_modules/html-minifier/package.json delete mode 100644 node_modules/html-minifier/sample-cli-config-file.conf delete mode 100644 node_modules/html-minifier/src/htmlminifier.js delete mode 100644 node_modules/html-minifier/src/htmlparser.js delete mode 100644 node_modules/html-minifier/src/tokenchain.js delete mode 100644 node_modules/html-minifier/src/utils.js delete mode 100644 node_modules/jsdom/lib/jsdom/browser/htmltodom.js rename node_modules/jsdom/lib/jsdom/browser/{parse5-adapter-parsing.js => parser/html.js} (77%) create mode 100644 node_modules/jsdom/lib/jsdom/browser/parser/index.js create mode 100644 node_modules/jsdom/lib/jsdom/browser/parser/xml.js create mode 100644 node_modules/jsdom/lib/jsdom/living/events/PageTransitionEvent-impl.js create mode 100644 node_modules/jsdom/lib/jsdom/living/generated/PageTransitionEvent.js create mode 100644 node_modules/jsdom/lib/jsdom/living/generated/PageTransitionEventInit.js delete mode 100644 node_modules/jsdom/lib/jsdom/living/helpers/html.js delete mode 100644 node_modules/lower-case/LICENSE delete mode 100644 node_modules/lower-case/README.md delete mode 100644 node_modules/lower-case/lower-case.d.ts delete mode 100644 node_modules/lower-case/lower-case.js delete mode 100644 node_modules/lower-case/package.json delete mode 100644 node_modules/minify/ChangeLog delete mode 100644 node_modules/minify/HELP.md delete mode 100644 node_modules/minify/LICENSE delete mode 100644 node_modules/minify/README.md delete mode 100755 node_modules/minify/bin/minify.js delete mode 100644 node_modules/minify/help.json delete mode 100644 node_modules/minify/lib/css.js delete mode 100644 node_modules/minify/lib/html.js delete mode 100644 node_modules/minify/lib/img.js delete mode 100644 node_modules/minify/lib/js.js delete mode 100644 node_modules/minify/lib/minify.js delete mode 100644 node_modules/minify/package.json delete mode 100644 node_modules/ms/index.js delete mode 100644 node_modules/ms/license.md delete mode 100644 node_modules/ms/package.json delete mode 100644 node_modules/ms/readme.md delete mode 100644 node_modules/no-case/LICENSE delete mode 100644 node_modules/no-case/README.md delete mode 100644 node_modules/no-case/no-case.d.ts delete mode 100644 node_modules/no-case/no-case.js delete mode 100644 node_modules/no-case/package.json delete mode 100644 node_modules/no-case/vendor/camel-case-regexp.js delete mode 100644 node_modules/no-case/vendor/camel-case-upper-regexp.js delete mode 100644 node_modules/no-case/vendor/non-word-regexp.js delete mode 100644 node_modules/param-case/LICENSE delete mode 100644 node_modules/param-case/README.md delete mode 100644 node_modules/param-case/package.json delete mode 100644 node_modules/param-case/param-case.d.ts delete mode 100644 node_modules/param-case/param-case.js delete mode 100644 node_modules/psl/.eslintignore delete mode 100644 node_modules/psl/.eslintrc delete mode 100644 node_modules/psl/.travis.yml create mode 100644 node_modules/psl/browserstack-logo.svg delete mode 100644 node_modules/psl/karma.conf.js delete mode 100644 node_modules/psl/yarn.lock delete mode 100644 node_modules/relateurl/README.md delete mode 100644 node_modules/relateurl/lib/constants.js delete mode 100644 node_modules/relateurl/lib/format.js delete mode 100644 node_modules/relateurl/lib/index.js delete mode 100644 node_modules/relateurl/lib/options.js delete mode 100644 node_modules/relateurl/lib/parse/host.js delete mode 100644 node_modules/relateurl/lib/parse/hrefInfo.js delete mode 100644 node_modules/relateurl/lib/parse/index.js delete mode 100644 node_modules/relateurl/lib/parse/path.js delete mode 100644 node_modules/relateurl/lib/parse/port.js delete mode 100644 node_modules/relateurl/lib/parse/query.js delete mode 100644 node_modules/relateurl/lib/parse/urlstring.js delete mode 100644 node_modules/relateurl/lib/relate/absolutize.js delete mode 100644 node_modules/relateurl/lib/relate/findRelation.js delete mode 100644 node_modules/relateurl/lib/relate/index.js delete mode 100644 node_modules/relateurl/lib/relate/relativize.js delete mode 100644 node_modules/relateurl/lib/util/devlog.js delete mode 100644 node_modules/relateurl/lib/util/object.js delete mode 100644 node_modules/relateurl/lib/util/path.js delete mode 100644 node_modules/relateurl/license delete mode 100644 node_modules/relateurl/package.json delete mode 100644 node_modules/request-promise-native/.npmignore delete mode 100644 node_modules/request/node_modules/punycode/LICENSE-MIT.txt delete mode 100644 node_modules/request/node_modules/punycode/README.md delete mode 100644 node_modules/request/node_modules/punycode/package.json delete mode 100644 node_modules/request/node_modules/punycode/punycode.js delete mode 100644 node_modules/request/node_modules/tough-cookie/LICENSE delete mode 100644 node_modules/request/node_modules/tough-cookie/README.md delete mode 100644 node_modules/request/node_modules/tough-cookie/lib/cookie.js delete mode 100644 node_modules/request/node_modules/tough-cookie/lib/memstore.js delete mode 100644 node_modules/request/node_modules/tough-cookie/lib/pathMatch.js delete mode 100644 node_modules/request/node_modules/tough-cookie/lib/permuteDomain.js delete mode 100644 node_modules/request/node_modules/tough-cookie/lib/pubsuffix-psl.js delete mode 100644 node_modules/request/node_modules/tough-cookie/lib/store.js delete mode 100644 node_modules/request/node_modules/tough-cookie/package.json delete mode 100644 node_modules/terser/node_modules/commander/CHANGELOG.md delete mode 100644 node_modules/terser/node_modules/commander/LICENSE delete mode 100644 node_modules/terser/node_modules/commander/Readme.md delete mode 100644 node_modules/terser/node_modules/commander/index.js delete mode 100644 node_modules/terser/node_modules/commander/package.json delete mode 100644 node_modules/terser/node_modules/commander/typings/index.d.ts delete mode 100644 node_modules/try-catch/ChangeLog delete mode 100644 node_modules/try-catch/LICENSE delete mode 100644 node_modules/try-catch/README.md delete mode 100644 node_modules/try-catch/lib/try-catch.js delete mode 100644 node_modules/try-catch/package.json delete mode 100644 node_modules/try-to-catch/ChangeLog delete mode 100644 node_modules/try-to-catch/LICENSE delete mode 100644 node_modules/try-to-catch/README.md delete mode 100644 node_modules/try-to-catch/lib/try-to-catch.js delete mode 100644 node_modules/try-to-catch/package.json delete mode 100644 node_modules/uglify-js/LICENSE delete mode 100644 node_modules/uglify-js/README.md delete mode 100755 node_modules/uglify-js/bin/uglifyjs delete mode 100644 node_modules/uglify-js/lib/ast.js delete mode 100644 node_modules/uglify-js/lib/compress.js delete mode 100644 node_modules/uglify-js/lib/minify.js delete mode 100644 node_modules/uglify-js/lib/mozilla-ast.js delete mode 100644 node_modules/uglify-js/lib/output.js delete mode 100644 node_modules/uglify-js/lib/parse.js delete mode 100644 node_modules/uglify-js/lib/propmangle.js delete mode 100644 node_modules/uglify-js/lib/scope.js delete mode 100644 node_modules/uglify-js/lib/sourcemap.js delete mode 100644 node_modules/uglify-js/lib/transform.js delete mode 100644 node_modules/uglify-js/lib/utils.js delete mode 100644 node_modules/uglify-js/node_modules/commander/CHANGELOG.md delete mode 100644 node_modules/uglify-js/node_modules/commander/LICENSE delete mode 100644 node_modules/uglify-js/node_modules/commander/Readme.md delete mode 100644 node_modules/uglify-js/node_modules/commander/index.js delete mode 100644 node_modules/uglify-js/node_modules/commander/package.json delete mode 100644 node_modules/uglify-js/node_modules/commander/typings/index.d.ts delete mode 100644 node_modules/uglify-js/package.json delete mode 100644 node_modules/uglify-js/tools/domprops.json delete mode 100644 node_modules/uglify-js/tools/exit.js delete mode 100644 node_modules/uglify-js/tools/exports.js delete mode 100644 node_modules/uglify-js/tools/node.js delete mode 100644 node_modules/uglify-js/tools/props.html delete mode 100644 node_modules/upper-case/LICENSE delete mode 100644 node_modules/upper-case/README.md delete mode 100644 node_modules/upper-case/package.json delete mode 100644 node_modules/upper-case/upper-case.d.ts delete mode 100644 node_modules/upper-case/upper-case.js delete mode 100644 node_modules/uuid/.eslintrc.json delete mode 100644 node_modules/uuid/README_js.md rename node_modules/{camel-case => word-wrap}/LICENSE (94%) create mode 100644 node_modules/word-wrap/README.md create mode 100644 node_modules/word-wrap/index.d.ts create mode 100644 node_modules/word-wrap/index.js create mode 100644 node_modules/word-wrap/package.json delete mode 100644 node_modules/wordwrap/LICENSE delete mode 100644 node_modules/wordwrap/README.markdown delete mode 100644 node_modules/wordwrap/example/center.js delete mode 100644 node_modules/wordwrap/example/meat.js delete mode 100644 node_modules/wordwrap/index.js delete mode 100644 node_modules/wordwrap/package.json delete mode 100644 node_modules/wordwrap/test/break.js delete mode 100644 node_modules/wordwrap/test/idleness.txt delete mode 100644 node_modules/wordwrap/test/wrap.js create mode 100644 node_modules/xmlchars/xml/1.1/ed2.d.ts create mode 100644 node_modules/xmlchars/xml/1.1/ed2.js create mode 100644 node_modules/xmlchars/xml/1.1/ed2.js.map diff --git a/minifyfromhtml.js b/minifyfromhtml.js index bbf57cc..e2c0dcc 100644 --- a/minifyfromhtml.js +++ b/minifyfromhtml.js @@ -1,9 +1,9 @@ let argv = require('minimist')(process.argv.slice(2)); let fs = require('fs'); -let path = require('path'); +let Terser = require('terser'); +let CleanCSS = require('clean-css'); let jsdom = require('jsdom'); let JSDOM = jsdom.JSDOM; -let minify = require('minify'); process.on('unhandledRejection', up => { throw up; }); @@ -65,8 +65,17 @@ readStdin(function(html) { return elements; }; + let processJs = function(things, outFile) { + let terserOptions = { + output: { + comments: false + }, + sourceMap: { + filename: argv.js, + url: argv.js + '.map' + } + }; - let processThings = function(things, outFile) { //remove exluded excludeFiles.forEach(i => { let index = things.indexOf(i); @@ -75,37 +84,35 @@ readStdin(function(html) { } }); - let processedThings = {}; + let code = {}; for (let i = 0; i < things.length; i++) { let thing = things[i]; + code[thing] = fs.readFileSync(thing, 'utf8'); + console.log(thing + ' -> ' + outFile); + } - minify(thing) - .then(function(data) { - processedThings[thing] = data; + const data = Terser.minify(code, terserOptions); + fs.writeFileSync(outFile, data.code); + if (data.map) { + fs.writeFileSync(outFile + '.map', data.map); + } + }; - if (Object.keys(processedThings).length === things.length) { - //write things - - //clear out dist file - fs.writeFileSync(outFile, ''); - - //write files - for (let i = 0; i < things.length; i++) { - const thing = things[i]; - - console.log(thing + ' -> ' + outFile); - fs.appendFileSync(outFile, processedThings[thing] + '\n'); - } - } - }); + let processCss = function(things, outFile) { + fs.writeFileSync(outFile, ''); + for (let i = 0; i < things.length; i++) { + let thing = things[i]; + console.log(thing + ' -> ' + outFile); + let minified = new CleanCSS().minify(fs.readFileSync(thing, 'utf8')); + fs.appendFileSync(outFile, minified.styles); } }; if (argv.js) { - processThings(getTagAttrs(dom, 'script', 'src'), argv.js); + processJs(getTagAttrs(dom, 'script', 'src'), argv.js); } if (argv.css) { - processThings(getTagAttrs(dom, 'link', 'href', {rel: 'stylesheet'}), argv.css); + processCss(getTagAttrs(dom, 'link', 'href', {rel: 'stylesheet'}), argv.css); } }); diff --git a/node_modules/.bin/acorn b/node_modules/.bin/acorn index 558ebb9..c31c430 120000 --- a/node_modules/.bin/acorn +++ b/node_modules/.bin/acorn @@ -2,7 +2,7 @@ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; esac if [ -x "$basedir/node" ]; then diff --git a/node_modules/.bin/acorn.cmd b/node_modules/.bin/acorn.cmd index 45c0c3d..3c863f5 100644 --- a/node_modules/.bin/acorn.cmd +++ b/node_modules/.bin/acorn.cmd @@ -1,7 +1,17 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\acorn\bin\acorn" %* +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" ) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\acorn\bin\acorn" %* -) \ No newline at end of file + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\acorn\bin\acorn" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/acorn.ps1 b/node_modules/.bin/acorn.ps1 new file mode 100644 index 0000000..759f820 --- /dev/null +++ b/node_modules/.bin/acorn.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../acorn/bin/acorn" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../acorn/bin/acorn" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/css-b64-images b/node_modules/.bin/css-b64-images deleted file mode 100644 index c721649..0000000 --- a/node_modules/.bin/css-b64-images +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../css-b64-images/bin/css-b64-images" "$@" - ret=$? -else - node "$basedir/../css-b64-images/bin/css-b64-images" "$@" - ret=$? -fi -exit $ret diff --git a/node_modules/.bin/css-b64-images.cmd b/node_modules/.bin/css-b64-images.cmd deleted file mode 100644 index fbeae54..0000000 --- a/node_modules/.bin/css-b64-images.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\css-b64-images\bin\css-b64-images" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\css-b64-images\bin\css-b64-images" %* -) \ No newline at end of file diff --git a/node_modules/.bin/escodegen b/node_modules/.bin/escodegen index 4e46a48..aa70e8b 120000 --- a/node_modules/.bin/escodegen +++ b/node_modules/.bin/escodegen @@ -2,7 +2,7 @@ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; esac if [ -x "$basedir/node" ]; then diff --git a/node_modules/.bin/escodegen.cmd b/node_modules/.bin/escodegen.cmd index 8ffe393..6b7adbf 100644 --- a/node_modules/.bin/escodegen.cmd +++ b/node_modules/.bin/escodegen.cmd @@ -1,7 +1,17 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\escodegen\bin\escodegen.js" %* +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" ) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\escodegen\bin\escodegen.js" %* -) \ No newline at end of file + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\escodegen\bin\escodegen.js" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/escodegen.ps1 b/node_modules/.bin/escodegen.ps1 new file mode 100644 index 0000000..d4614ac --- /dev/null +++ b/node_modules/.bin/escodegen.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../escodegen/bin/escodegen.js" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../escodegen/bin/escodegen.js" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/esgenerate b/node_modules/.bin/esgenerate index 5d097c3..4a2495a 120000 --- a/node_modules/.bin/esgenerate +++ b/node_modules/.bin/esgenerate @@ -2,7 +2,7 @@ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; esac if [ -x "$basedir/node" ]; then diff --git a/node_modules/.bin/esgenerate.cmd b/node_modules/.bin/esgenerate.cmd index 39593ad..4ad231e 100644 --- a/node_modules/.bin/esgenerate.cmd +++ b/node_modules/.bin/esgenerate.cmd @@ -1,7 +1,17 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\escodegen\bin\esgenerate.js" %* +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" ) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\escodegen\bin\esgenerate.js" %* -) \ No newline at end of file + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\escodegen\bin\esgenerate.js" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/esgenerate.ps1 b/node_modules/.bin/esgenerate.ps1 new file mode 100644 index 0000000..eb4fc38 --- /dev/null +++ b/node_modules/.bin/esgenerate.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../escodegen/bin/esgenerate.js" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../escodegen/bin/esgenerate.js" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/esparse b/node_modules/.bin/esparse index 2525527..735d854 120000 --- a/node_modules/.bin/esparse +++ b/node_modules/.bin/esparse @@ -2,7 +2,7 @@ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; esac if [ -x "$basedir/node" ]; then diff --git a/node_modules/.bin/esparse.cmd b/node_modules/.bin/esparse.cmd index 064f58e..b8c6a63 100644 --- a/node_modules/.bin/esparse.cmd +++ b/node_modules/.bin/esparse.cmd @@ -1,7 +1,17 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\esprima\bin\esparse.js" %* +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" ) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\esprima\bin\esparse.js" %* -) \ No newline at end of file + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\esprima\bin\esparse.js" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/esparse.ps1 b/node_modules/.bin/esparse.ps1 new file mode 100644 index 0000000..567aea3 --- /dev/null +++ b/node_modules/.bin/esparse.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../esprima/bin/esparse.js" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../esprima/bin/esparse.js" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/esvalidate b/node_modules/.bin/esvalidate index 2137cd5..d278bc7 120000 --- a/node_modules/.bin/esvalidate +++ b/node_modules/.bin/esvalidate @@ -2,7 +2,7 @@ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; esac if [ -x "$basedir/node" ]; then diff --git a/node_modules/.bin/esvalidate.cmd b/node_modules/.bin/esvalidate.cmd index 8dfaec0..74859bd 100644 --- a/node_modules/.bin/esvalidate.cmd +++ b/node_modules/.bin/esvalidate.cmd @@ -1,7 +1,17 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\esprima\bin\esvalidate.js" %* +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" ) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\esprima\bin\esvalidate.js" %* -) \ No newline at end of file + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\esprima\bin\esvalidate.js" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/esvalidate.ps1 b/node_modules/.bin/esvalidate.ps1 new file mode 100644 index 0000000..b1ed174 --- /dev/null +++ b/node_modules/.bin/esvalidate.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../esprima/bin/esvalidate.js" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../esprima/bin/esvalidate.js" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/he b/node_modules/.bin/he deleted file mode 100644 index e3e6a0a..0000000 --- a/node_modules/.bin/he +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../he/bin/he" "$@" - ret=$? -else - node "$basedir/../he/bin/he" "$@" - ret=$? -fi -exit $ret diff --git a/node_modules/.bin/he.cmd b/node_modules/.bin/he.cmd deleted file mode 100644 index 1630c8e..0000000 --- a/node_modules/.bin/he.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\he\bin\he" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\he\bin\he" %* -) \ No newline at end of file diff --git a/node_modules/.bin/html-minifier b/node_modules/.bin/html-minifier deleted file mode 120000 index fdff598..0000000 --- a/node_modules/.bin/html-minifier +++ /dev/null @@ -1 +0,0 @@ -../html-minifier/cli.js \ No newline at end of file diff --git a/node_modules/.bin/html-minifier.cmd b/node_modules/.bin/html-minifier.cmd deleted file mode 100644 index 491b26b..0000000 --- a/node_modules/.bin/html-minifier.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\html-minifier\cli.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\html-minifier\cli.js" %* -) \ No newline at end of file diff --git a/node_modules/.bin/minify b/node_modules/.bin/minify deleted file mode 120000 index 5ddff7c..0000000 --- a/node_modules/.bin/minify +++ /dev/null @@ -1 +0,0 @@ -../minify/bin/minify.js \ No newline at end of file diff --git a/node_modules/.bin/minify.cmd b/node_modules/.bin/minify.cmd deleted file mode 100644 index a9d54f6..0000000 --- a/node_modules/.bin/minify.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\minify\bin\minify.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\minify\bin\minify.js" %* -) \ No newline at end of file diff --git a/node_modules/.bin/sshpk-conv b/node_modules/.bin/sshpk-conv index c9c2987..91957fa 120000 --- a/node_modules/.bin/sshpk-conv +++ b/node_modules/.bin/sshpk-conv @@ -2,7 +2,7 @@ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; esac if [ -x "$basedir/node" ]; then diff --git a/node_modules/.bin/sshpk-conv.cmd b/node_modules/.bin/sshpk-conv.cmd index dde70b0..42f9ce4 100644 --- a/node_modules/.bin/sshpk-conv.cmd +++ b/node_modules/.bin/sshpk-conv.cmd @@ -1,7 +1,17 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\sshpk\bin\sshpk-conv" %* +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" ) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\sshpk\bin\sshpk-conv" %* -) \ No newline at end of file + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\sshpk\bin\sshpk-conv" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/sshpk-conv.ps1 b/node_modules/.bin/sshpk-conv.ps1 new file mode 100644 index 0000000..d27c311 --- /dev/null +++ b/node_modules/.bin/sshpk-conv.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../sshpk/bin/sshpk-conv" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../sshpk/bin/sshpk-conv" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/sshpk-sign b/node_modules/.bin/sshpk-sign index 1a92124..0dd7644 120000 --- a/node_modules/.bin/sshpk-sign +++ b/node_modules/.bin/sshpk-sign @@ -2,7 +2,7 @@ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; esac if [ -x "$basedir/node" ]; then diff --git a/node_modules/.bin/sshpk-sign.cmd b/node_modules/.bin/sshpk-sign.cmd index 45025ec..17f60de 100644 --- a/node_modules/.bin/sshpk-sign.cmd +++ b/node_modules/.bin/sshpk-sign.cmd @@ -1,7 +1,17 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\sshpk\bin\sshpk-sign" %* +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" ) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\sshpk\bin\sshpk-sign" %* -) \ No newline at end of file + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\sshpk\bin\sshpk-sign" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/sshpk-sign.ps1 b/node_modules/.bin/sshpk-sign.ps1 new file mode 100644 index 0000000..10d9186 --- /dev/null +++ b/node_modules/.bin/sshpk-sign.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../sshpk/bin/sshpk-sign" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../sshpk/bin/sshpk-sign" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/sshpk-verify b/node_modules/.bin/sshpk-verify index 597a66b..04f5d05 120000 --- a/node_modules/.bin/sshpk-verify +++ b/node_modules/.bin/sshpk-verify @@ -2,7 +2,7 @@ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; esac if [ -x "$basedir/node" ]; then diff --git a/node_modules/.bin/sshpk-verify.cmd b/node_modules/.bin/sshpk-verify.cmd index 1b5fc0c..4b81f35 100644 --- a/node_modules/.bin/sshpk-verify.cmd +++ b/node_modules/.bin/sshpk-verify.cmd @@ -1,7 +1,17 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\sshpk\bin\sshpk-verify" %* +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" ) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\sshpk\bin\sshpk-verify" %* -) \ No newline at end of file + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\sshpk\bin\sshpk-verify" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/sshpk-verify.ps1 b/node_modules/.bin/sshpk-verify.ps1 new file mode 100644 index 0000000..d5a23e2 --- /dev/null +++ b/node_modules/.bin/sshpk-verify.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../sshpk/bin/sshpk-verify" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../sshpk/bin/sshpk-verify" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/terser b/node_modules/.bin/terser index 0792ff4..a19ab59 120000 --- a/node_modules/.bin/terser +++ b/node_modules/.bin/terser @@ -1 +1,15 @@ -../terser/bin/terser \ No newline at end of file +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../terser/bin/terser" "$@" + ret=$? +else + node "$basedir/../terser/bin/terser" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/terser.cmd b/node_modules/.bin/terser.cmd index 31a4723..4f0fcb1 100644 --- a/node_modules/.bin/terser.cmd +++ b/node_modules/.bin/terser.cmd @@ -1,7 +1,17 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\terser\bin\uglifyjs" %* +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" ) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\terser\bin\uglifyjs" %* -) \ No newline at end of file + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\terser\bin\terser" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/terser.ps1 b/node_modules/.bin/terser.ps1 new file mode 100644 index 0000000..c80f9df --- /dev/null +++ b/node_modules/.bin/terser.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../terser/bin/terser" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../terser/bin/terser" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/uglifyjs b/node_modules/.bin/uglifyjs deleted file mode 120000 index fef3468..0000000 --- a/node_modules/.bin/uglifyjs +++ /dev/null @@ -1 +0,0 @@ -../uglify-js/bin/uglifyjs \ No newline at end of file diff --git a/node_modules/.bin/uglifyjs.cmd b/node_modules/.bin/uglifyjs.cmd deleted file mode 100644 index 3306013..0000000 --- a/node_modules/.bin/uglifyjs.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\uglify-js\bin\uglifyjs" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\uglify-js\bin\uglifyjs" %* -) \ No newline at end of file diff --git a/node_modules/.bin/uuid b/node_modules/.bin/uuid index f3bfcf4..9af3844 120000 --- a/node_modules/.bin/uuid +++ b/node_modules/.bin/uuid @@ -2,7 +2,7 @@ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; esac if [ -x "$basedir/node" ]; then diff --git a/node_modules/.bin/uuid.cmd b/node_modules/.bin/uuid.cmd index da52d68..8154f4e 100644 --- a/node_modules/.bin/uuid.cmd +++ b/node_modules/.bin/uuid.cmd @@ -1,7 +1,17 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\uuid\bin\uuid" %* +@ECHO off +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" ) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\uuid\bin\uuid" %* -) \ No newline at end of file + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +"%_prog%" "%dp0%\..\uuid\bin\uuid" %* +ENDLOCAL +EXIT /b %errorlevel% +:find_dp0 +SET dp0=%~dp0 +EXIT /b diff --git a/node_modules/.bin/uuid.ps1 b/node_modules/.bin/uuid.ps1 new file mode 100644 index 0000000..3fcb264 --- /dev/null +++ b/node_modules/.bin/uuid.ps1 @@ -0,0 +1,18 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + & "$basedir/node$exe" "$basedir/../uuid/bin/uuid" $args + $ret=$LASTEXITCODE +} else { + & "node$exe" "$basedir/../uuid/bin/uuid" $args + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/abab/CHANGELOG.md b/node_modules/abab/CHANGELOG.md index 4f5eb56..94489d7 100644 --- a/node_modules/abab/CHANGELOG.md +++ b/node_modules/abab/CHANGELOG.md @@ -1,24 +1,36 @@ +## 2.0.3 + +- Use standard wording for BSD-3-Clause license (@PhilippWendler) + +## 2.0.2 + +- Correct license in `package.json` (@Haegin) + +## 2.0.1 + +- Add TypeScript type definitions, thanks to @LinusU + ## 2.0.0 Modernization updates thanks to @TimothyGu: -- Use jsdom's eslint config, remove jscs -- Move syntax to ES6 -- Remove Babel -- Via: https://github.com/jsdom/abab/pull/26 +- Use jsdom's eslint config, remove jscs +- Move syntax to ES6 +- Remove Babel +- Via: https://github.com/jsdom/abab/pull/26 ## 1.0.4 -- Added license file +- Added license file ## 1.0.3 -- Replaced `let` with `var` in `lib/btoa.js` - - Follow up from `1.0.2` - - Resolves https://github.com/jsdom/abab/issues/18 +- Replaced `let` with `var` in `lib/btoa.js` + - Follow up from `1.0.2` + - Resolves https://github.com/jsdom/abab/issues/18 ## 1.0.2 -- Replaced `const` with `var` in `index.js` - - Allows use of `abab` in the browser without a transpilation step - - Resolves https://github.com/jsdom/abab/issues/15 +- Replaced `const` with `var` in `index.js` + - Allows use of `abab` in the browser without a transpilation step + - Resolves https://github.com/jsdom/abab/issues/15 diff --git a/node_modules/abab/LICENSE.md b/node_modules/abab/LICENSE.md index 5b59a83..aac4aac 100644 --- a/node_modules/abab/LICENSE.md +++ b/node_modules/abab/LICENSE.md @@ -1,11 +1,13 @@ -Both the original source code and new contributions in this repository are released under the [W3C 3-clause BSD license](https://github.com/w3c/web-platform-tests/blob/master/LICENSE.md#w3c-3-clause-bsd-license). +Copyright © 2019 W3C and Jeff Carpenter \ -# W3C 3-clause BSD License +Both the original source code and new contributions in this repository are released under the [3-Clause BSD license](https://opensource.org/licenses/BSD-3-Clause). + +# The 3-Clause BSD License Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -* Redistributions of works must retain the original copyright notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the original copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -* Neither the name of the W3C nor the names of its contributors may be used to endorse or promote products derived from this work without specific prior written permission. +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holder 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. +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/abab/index.d.ts b/node_modules/abab/index.d.ts new file mode 100644 index 0000000..665a6ad --- /dev/null +++ b/node_modules/abab/index.d.ts @@ -0,0 +1,2 @@ +export function atob(encodedData: string): string | null +export function btoa(stringToEncode: string): string | null diff --git a/node_modules/abab/package.json b/node_modules/abab/package.json index 5d89f78..aea35bb 100644 --- a/node_modules/abab/package.json +++ b/node_modules/abab/package.json @@ -1,8 +1,8 @@ { "_from": "abab@^2.0.0", - "_id": "abab@2.0.0", + "_id": "abab@2.0.3", "_inBundle": false, - "_integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", + "_integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", "_location": "/abab", "_phantomChildren": {}, "_requested": { @@ -19,8 +19,8 @@ "/data-urls", "/jsdom" ], - "_resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", - "_shasum": "aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f", + "_resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", + "_shasum": "623e2075e02eb2d3f2475e49f99c91846467907a", "_spec": "abab@^2.0.0", "_where": "F:\\projects\\p\\minifyfromhtml\\node_modules\\jsdom", "author": { @@ -44,6 +44,7 @@ "webpack": "^4.5.0" }, "files": [ + "index.d.ts", "index.js", "lib/" ], @@ -53,7 +54,7 @@ "btoa", "browser" ], - "license": "SEE LICENSE IN LICENSE.md", + "license": "BSD-3-Clause", "main": "index.js", "name": "abab", "repository": { @@ -66,5 +67,5 @@ "mocha": "mocha test/node", "test": "npm run lint && npm run mocha && npm run karma" }, - "version": "2.0.0" + "version": "2.0.3" } diff --git a/node_modules/acorn-globals/README.md b/node_modules/acorn-globals/README.md index d8cd372..5f7326f 100644 --- a/node_modules/acorn-globals/README.md +++ b/node_modules/acorn-globals/README.md @@ -2,6 +2,8 @@ Detect global variables in JavaScript using acorn +[Get supported acorn-globals with the Tidelift Subscription](https://tidelift.com/subscription/pkg/npm-acorn_globals?utm_source=npm-acorn-globals&utm_medium=referral&utm_campaign=readme) + [![Build Status](https://img.shields.io/travis/ForbesLindesay/acorn-globals/master.svg)](https://travis-ci.org/ForbesLindesay/acorn-globals) [![Dependency Status](https://img.shields.io/david/ForbesLindesay/acorn-globals.svg)](https://david-dm.org/ForbesLindesay/acorn-globals) [![NPM version](https://img.shields.io/npm/v/acorn-globals.svg)](https://www.npmjs.org/package/acorn-globals) @@ -70,6 +72,9 @@ $ node example/detect.js { name: 'xyz', nodes: [ [Object] ] } ] ``` +## Security contact information + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. ## License diff --git a/node_modules/acorn-globals/index.js b/node_modules/acorn-globals/index.js index 2410b2d..232cbe4 100644 --- a/node_modules/acorn-globals/index.js +++ b/node_modules/acorn-globals/index.js @@ -46,7 +46,7 @@ function findGlobals(source, options) { } var declareFunction = function (node) { var fn = node; - fn.locals = fn.locals || {}; + fn.locals = fn.locals || Object.create(null); node.params.forEach(function (node) { declarePattern(node, fn); }); @@ -54,6 +54,12 @@ function findGlobals(source, options) { fn.locals[node.id.name] = true; } }; + var declareClass = function (node) { + node.locals = node.locals || Object.create(null); + if (node.id) { + node.locals[node.id.name] = true; + } + }; var declarePattern = function (node, parent) { switch (node.type) { case 'Identifier': @@ -81,7 +87,7 @@ function findGlobals(source, options) { } }; var declareModuleSpecifier = function (node, parents) { - ast.locals = ast.locals || {}; + ast.locals = ast.locals || Object.create(null); ast.locals[node.local.name] = true; }; walk.ancestor(ast, { @@ -92,7 +98,7 @@ function findGlobals(source, options) { parent = parents[i]; } } - parent.locals = parent.locals || {}; + parent.locals = parent.locals || Object.create(null); node.declarations.forEach(function (declaration) { declarePattern(declaration.id, parent); }); @@ -104,7 +110,7 @@ function findGlobals(source, options) { parent = parents[i]; } } - parent.locals = parent.locals || {}; + parent.locals = parent.locals || Object.create(null); if (node.id) { parent.locals[node.id.name] = true; } @@ -114,19 +120,21 @@ function findGlobals(source, options) { 'ClassDeclaration': function (node, parents) { var parent = null; for (var i = parents.length - 2; i >= 0 && parent === null; i--) { - if (isScope(parents[i])) { + if (isBlockScope(parents[i])) { parent = parents[i]; } } - parent.locals = parent.locals || {}; + parent.locals = parent.locals || Object.create(null); if (node.id) { parent.locals[node.id.name] = true; } + declareClass(node); }, + 'Class': declareClass, 'TryStatement': function (node) { if (node.handler === null) return; - node.handler.locals = node.handler.locals || {}; - node.handler.locals[node.handler.param.name] = true; + node.handler.locals = node.handler.locals || Object.create(null); + declarePattern(node.handler.param, node.handler); }, 'ImportDefaultSpecifier': declareModuleSpecifier, 'ImportSpecifier': declareModuleSpecifier, @@ -159,7 +167,7 @@ function findGlobals(source, options) { globals.push(node); } }); - var groupedGlobals = {}; + var groupedGlobals = Object.create(null); globals.forEach(function (node) { var name = node.type === 'ThisExpression' ? 'this' : node.name; groupedGlobals[name] = (groupedGlobals[name] || []); diff --git a/node_modules/acorn-globals/package.json b/node_modules/acorn-globals/package.json index bcd533f..47887d2 100644 --- a/node_modules/acorn-globals/package.json +++ b/node_modules/acorn-globals/package.json @@ -1,8 +1,8 @@ { "_from": "acorn-globals@^4.3.0", - "_id": "acorn-globals@4.3.1", + "_id": "acorn-globals@4.3.4", "_inBundle": false, - "_integrity": "sha512-gJSiKY8dBIjV/0jagZIFBdVMtfQyA5QHCvAT48H2q8REQoW8Fs5AOjqBql1LgSXgrMWdevcE+8cdZ33NtVbIBA==", + "_integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", "_location": "/acorn-globals", "_phantomChildren": {}, "_requested": { @@ -18,8 +18,8 @@ "_requiredBy": [ "/jsdom" ], - "_resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.1.tgz", - "_shasum": "deb149c59276657ebd40ba2ba849ddd529763ccf", + "_resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "_shasum": "9fa1926addc11c97308c4e66d7add0d40c3272e7", "_spec": "acorn-globals@^4.3.0", "_where": "F:\\projects\\p\\minifyfromhtml\\node_modules\\jsdom", "author": { @@ -62,5 +62,5 @@ "scripts": { "test": "node test" }, - "version": "4.3.1" + "version": "4.3.4" } diff --git a/node_modules/acorn-walk/CHANGELOG.md b/node_modules/acorn-walk/CHANGELOG.md index 525950b..c02dbd7 100644 --- a/node_modules/acorn-walk/CHANGELOG.md +++ b/node_modules/acorn-walk/CHANGELOG.md @@ -1,3 +1,9 @@ +## 6.2.0 (2017-07-04) + +### New features + +Add support for `Import` nodes. + ## 6.1.0 (2018-09-28) ### New features diff --git a/node_modules/acorn-walk/README.md b/node_modules/acorn-walk/README.md index 2b94bec..e192bac 100644 --- a/node_modules/acorn-walk/README.md +++ b/node_modules/acorn-walk/README.md @@ -6,7 +6,7 @@ An abstract syntax tree walker for the ## Community Acorn is open source software released under an -[MIT license](https://github.com/acornjs/acorn/blob/master/LICENSE). +[MIT license](https://github.com/acornjs/acorn/blob/master/acorn-walk/LICENSE). You are welcome to [report bugs](https://github.com/acornjs/acorn/issues) or create pull diff --git a/node_modules/acorn-walk/dist/walk.js b/node_modules/acorn-walk/dist/walk.js index 322a58d..398a003 100644 --- a/node_modules/acorn-walk/dist/walk.js +++ b/node_modules/acorn-walk/dist/walk.js @@ -1,456 +1,458 @@ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (factory((global.acorn = global.acorn || {}, global.acorn.walk = {}))); -}(this, (function (exports) { 'use strict'; + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory((global.acorn = global.acorn || {}, global.acorn.walk = {}))); +}(this, function (exports) { 'use strict'; -// AST walker module for Mozilla Parser API compatible trees + // AST walker module for Mozilla Parser API compatible trees -// A simple walk is one where you simply specify callbacks to be -// called on specific nodes. The last two arguments are optional. A -// simple use would be -// -// walk.simple(myTree, { -// Expression: function(node) { ... } -// }); -// -// to do something with all expressions. All Parser API node types -// can be used to identify node types, as well as Expression and -// Statement, which denote categories of nodes. -// -// The base argument can be used to pass a custom (recursive) -// walker, and state can be used to give this walked an initial -// state. + // A simple walk is one where you simply specify callbacks to be + // called on specific nodes. The last two arguments are optional. A + // simple use would be + // + // walk.simple(myTree, { + // Expression: function(node) { ... } + // }); + // + // to do something with all expressions. All Parser API node types + // can be used to identify node types, as well as Expression and + // Statement, which denote categories of nodes. + // + // The base argument can be used to pass a custom (recursive) + // walker, and state can be used to give this walked an initial + // state. -function simple(node, visitors, baseVisitor, state, override) { - if (!baseVisitor) { baseVisitor = base - ; }(function c(node, st, override) { - var type = override || node.type, found = visitors[type]; - baseVisitor[type](node, st, c); - if (found) { found(node, st); } - })(node, state, override); -} - -// An ancestor walk keeps an array of ancestor nodes (including the -// current node) and passes them to the callback as third parameter -// (and also as state parameter when no other state is present). -function ancestor(node, visitors, baseVisitor, state) { - var ancestors = []; - if (!baseVisitor) { baseVisitor = base - ; }(function c(node, st, override) { - var type = override || node.type, found = visitors[type]; - var isNew = node !== ancestors[ancestors.length - 1]; - if (isNew) { ancestors.push(node); } - baseVisitor[type](node, st, c); - if (found) { found(node, st || ancestors, ancestors); } - if (isNew) { ancestors.pop(); } - })(node, state); -} - -// A recursive walk is one where your functions override the default -// walkers. They can modify and replace the state parameter that's -// threaded through the walk, and can opt how and whether to walk -// their child nodes (by calling their third argument on these -// nodes). -function recursive(node, state, funcs, baseVisitor, override) { - var visitor = funcs ? make(funcs, baseVisitor || undefined) : baseVisitor;(function c(node, st, override) { - visitor[override || node.type](node, st, c); - })(node, state, override); -} - -function makeTest(test) { - if (typeof test === "string") - { return function (type) { return type === test; } } - else if (!test) - { return function () { return true; } } - else - { return test } -} - -var Found = function Found(node, state) { this.node = node; this.state = state; }; - -// A full walk triggers the callback on each node -function full(node, callback, baseVisitor, state, override) { - if (!baseVisitor) { baseVisitor = base - ; }(function c(node, st, override) { - var type = override || node.type; - baseVisitor[type](node, st, c); - if (!override) { callback(node, st, type); } - })(node, state, override); -} - -// An fullAncestor walk is like an ancestor walk, but triggers -// the callback on each node -function fullAncestor(node, callback, baseVisitor, state) { - if (!baseVisitor) { baseVisitor = base; } - var ancestors = [];(function c(node, st, override) { - var type = override || node.type; - var isNew = node !== ancestors[ancestors.length - 1]; - if (isNew) { ancestors.push(node); } - baseVisitor[type](node, st, c); - if (!override) { callback(node, st || ancestors, ancestors, type); } - if (isNew) { ancestors.pop(); } - })(node, state); -} - -// Find a node with a given start, end, and type (all are optional, -// null can be used as wildcard). Returns a {node, state} object, or -// undefined when it doesn't find a matching node. -function findNodeAt(node, start, end, test, baseVisitor, state) { - if (!baseVisitor) { baseVisitor = base; } - test = makeTest(test); - try { - (function c(node, st, override) { - var type = override || node.type; - if ((start == null || node.start <= start) && - (end == null || node.end >= end)) - { baseVisitor[type](node, st, c); } - if ((start == null || node.start === start) && - (end == null || node.end === end) && - test(type, node)) - { throw new Found(node, st) } - })(node, state); - } catch (e) { - if (e instanceof Found) { return e } - throw e - } -} - -// Find the innermost node of a given type that contains the given -// position. Interface similar to findNodeAt. -function findNodeAround(node, pos, test, baseVisitor, state) { - test = makeTest(test); - if (!baseVisitor) { baseVisitor = base; } - try { - (function c(node, st, override) { - var type = override || node.type; - if (node.start > pos || node.end < pos) { return } + function simple(node, visitors, baseVisitor, state, override) { + if (!baseVisitor) { baseVisitor = base + ; }(function c(node, st, override) { + var type = override || node.type, found = visitors[type]; baseVisitor[type](node, st, c); - if (test(type, node)) { throw new Found(node, st) } - })(node, state); - } catch (e) { - if (e instanceof Found) { return e } - throw e + if (found) { found(node, st); } + })(node, state, override); } -} -// Find the outermost matching node after a given position. -function findNodeAfter(node, pos, test, baseVisitor, state) { - test = makeTest(test); - if (!baseVisitor) { baseVisitor = base; } - try { - (function c(node, st, override) { - if (node.end < pos) { return } + // An ancestor walk keeps an array of ancestor nodes (including the + // current node) and passes them to the callback as third parameter + // (and also as state parameter when no other state is present). + function ancestor(node, visitors, baseVisitor, state) { + var ancestors = []; + if (!baseVisitor) { baseVisitor = base + ; }(function c(node, st, override) { + var type = override || node.type, found = visitors[type]; + var isNew = node !== ancestors[ancestors.length - 1]; + if (isNew) { ancestors.push(node); } + baseVisitor[type](node, st, c); + if (found) { found(node, st || ancestors, ancestors); } + if (isNew) { ancestors.pop(); } + })(node, state); + } + + // A recursive walk is one where your functions override the default + // walkers. They can modify and replace the state parameter that's + // threaded through the walk, and can opt how and whether to walk + // their child nodes (by calling their third argument on these + // nodes). + function recursive(node, state, funcs, baseVisitor, override) { + var visitor = funcs ? make(funcs, baseVisitor || undefined) : baseVisitor + ;(function c(node, st, override) { + visitor[override || node.type](node, st, c); + })(node, state, override); + } + + function makeTest(test) { + if (typeof test === "string") + { return function (type) { return type === test; } } + else if (!test) + { return function () { return true; } } + else + { return test } + } + + var Found = function Found(node, state) { this.node = node; this.state = state; }; + + // A full walk triggers the callback on each node + function full(node, callback, baseVisitor, state, override) { + if (!baseVisitor) { baseVisitor = base + ; }(function c(node, st, override) { var type = override || node.type; - if (node.start >= pos && test(type, node)) { throw new Found(node, st) } + baseVisitor[type](node, st, c); + if (!override) { callback(node, st, type); } + })(node, state, override); + } + + // An fullAncestor walk is like an ancestor walk, but triggers + // the callback on each node + function fullAncestor(node, callback, baseVisitor, state) { + if (!baseVisitor) { baseVisitor = base; } + var ancestors = [] + ;(function c(node, st, override) { + var type = override || node.type; + var isNew = node !== ancestors[ancestors.length - 1]; + if (isNew) { ancestors.push(node); } + baseVisitor[type](node, st, c); + if (!override) { callback(node, st || ancestors, ancestors, type); } + if (isNew) { ancestors.pop(); } + })(node, state); + } + + // Find a node with a given start, end, and type (all are optional, + // null can be used as wildcard). Returns a {node, state} object, or + // undefined when it doesn't find a matching node. + function findNodeAt(node, start, end, test, baseVisitor, state) { + if (!baseVisitor) { baseVisitor = base; } + test = makeTest(test); + try { + (function c(node, st, override) { + var type = override || node.type; + if ((start == null || node.start <= start) && + (end == null || node.end >= end)) + { baseVisitor[type](node, st, c); } + if ((start == null || node.start === start) && + (end == null || node.end === end) && + test(type, node)) + { throw new Found(node, st) } + })(node, state); + } catch (e) { + if (e instanceof Found) { return e } + throw e + } + } + + // Find the innermost node of a given type that contains the given + // position. Interface similar to findNodeAt. + function findNodeAround(node, pos, test, baseVisitor, state) { + test = makeTest(test); + if (!baseVisitor) { baseVisitor = base; } + try { + (function c(node, st, override) { + var type = override || node.type; + if (node.start > pos || node.end < pos) { return } + baseVisitor[type](node, st, c); + if (test(type, node)) { throw new Found(node, st) } + })(node, state); + } catch (e) { + if (e instanceof Found) { return e } + throw e + } + } + + // Find the outermost matching node after a given position. + function findNodeAfter(node, pos, test, baseVisitor, state) { + test = makeTest(test); + if (!baseVisitor) { baseVisitor = base; } + try { + (function c(node, st, override) { + if (node.end < pos) { return } + var type = override || node.type; + if (node.start >= pos && test(type, node)) { throw new Found(node, st) } + baseVisitor[type](node, st, c); + })(node, state); + } catch (e) { + if (e instanceof Found) { return e } + throw e + } + } + + // Find the outermost matching node before a given position. + function findNodeBefore(node, pos, test, baseVisitor, state) { + test = makeTest(test); + if (!baseVisitor) { baseVisitor = base; } + var max + ;(function c(node, st, override) { + if (node.start > pos) { return } + var type = override || node.type; + if (node.end <= pos && (!max || max.node.end < node.end) && test(type, node)) + { max = new Found(node, st); } baseVisitor[type](node, st, c); })(node, state); - } catch (e) { - if (e instanceof Found) { return e } - throw e + return max } -} -// Find the outermost matching node before a given position. -function findNodeBefore(node, pos, test, baseVisitor, state) { - test = makeTest(test); - if (!baseVisitor) { baseVisitor = base; } - var max;(function c(node, st, override) { - if (node.start > pos) { return } - var type = override || node.type; - if (node.end <= pos && (!max || max.node.end < node.end) && test(type, node)) - { max = new Found(node, st); } - baseVisitor[type](node, st, c); - })(node, state); - return max -} + // Fallback to an Object.create polyfill for older environments. + var create = Object.create || function(proto) { + function Ctor() {} + Ctor.prototype = proto; + return new Ctor + }; -// Fallback to an Object.create polyfill for older environments. -var create = Object.create || function(proto) { - function Ctor() {} - Ctor.prototype = proto; - return new Ctor -}; - -// Used to create a custom walker. Will fill in all missing node -// type properties with the defaults. -function make(funcs, baseVisitor) { - var visitor = create(baseVisitor || base); - for (var type in funcs) { visitor[type] = funcs[type]; } - return visitor -} - -function skipThrough(node, st, c) { c(node, st); } -function ignore(_node, _st, _c) {} - -// Node walkers. - -var base = {}; - -base.Program = base.BlockStatement = function (node, st, c) { - for (var i = 0, list = node.body; i < list.length; i += 1) - { - var stmt = list[i]; - - c(stmt, st, "Statement"); + // Used to create a custom walker. Will fill in all missing node + // type properties with the defaults. + function make(funcs, baseVisitor) { + var visitor = create(baseVisitor || base); + for (var type in funcs) { visitor[type] = funcs[type]; } + return visitor } -}; -base.Statement = skipThrough; -base.EmptyStatement = ignore; -base.ExpressionStatement = base.ParenthesizedExpression = - function (node, st, c) { return c(node.expression, st, "Expression"); }; -base.IfStatement = function (node, st, c) { - c(node.test, st, "Expression"); - c(node.consequent, st, "Statement"); - if (node.alternate) { c(node.alternate, st, "Statement"); } -}; -base.LabeledStatement = function (node, st, c) { return c(node.body, st, "Statement"); }; -base.BreakStatement = base.ContinueStatement = ignore; -base.WithStatement = function (node, st, c) { - c(node.object, st, "Expression"); - c(node.body, st, "Statement"); -}; -base.SwitchStatement = function (node, st, c) { - c(node.discriminant, st, "Expression"); - for (var i = 0, list = node.cases; i < list.length; i += 1) { - var cs = list[i]; - if (cs.test) { c(cs.test, st, "Expression"); } - for (var i$1 = 0, list$1 = cs.consequent; i$1 < list$1.length; i$1 += 1) + function skipThrough(node, st, c) { c(node, st); } + function ignore(_node, _st, _c) {} + + // Node walkers. + + var base = {}; + + base.Program = base.BlockStatement = function (node, st, c) { + for (var i = 0, list = node.body; i < list.length; i += 1) { - var cons = list$1[i$1]; + var stmt = list[i]; + + c(stmt, st, "Statement"); + } + }; + base.Statement = skipThrough; + base.EmptyStatement = ignore; + base.ExpressionStatement = base.ParenthesizedExpression = + function (node, st, c) { return c(node.expression, st, "Expression"); }; + base.IfStatement = function (node, st, c) { + c(node.test, st, "Expression"); + c(node.consequent, st, "Statement"); + if (node.alternate) { c(node.alternate, st, "Statement"); } + }; + base.LabeledStatement = function (node, st, c) { return c(node.body, st, "Statement"); }; + base.BreakStatement = base.ContinueStatement = ignore; + base.WithStatement = function (node, st, c) { + c(node.object, st, "Expression"); + c(node.body, st, "Statement"); + }; + base.SwitchStatement = function (node, st, c) { + c(node.discriminant, st, "Expression"); + for (var i$1 = 0, list$1 = node.cases; i$1 < list$1.length; i$1 += 1) { + var cs = list$1[i$1]; + + if (cs.test) { c(cs.test, st, "Expression"); } + for (var i = 0, list = cs.consequent; i < list.length; i += 1) + { + var cons = list[i]; + + c(cons, st, "Statement"); + } + } + }; + base.SwitchCase = function (node, st, c) { + if (node.test) { c(node.test, st, "Expression"); } + for (var i = 0, list = node.consequent; i < list.length; i += 1) + { + var cons = list[i]; c(cons, st, "Statement"); } - } -}; -base.SwitchCase = function (node, st, c) { - if (node.test) { c(node.test, st, "Expression"); } - for (var i = 0, list = node.consequent; i < list.length; i += 1) - { - var cons = list[i]; + }; + base.ReturnStatement = base.YieldExpression = base.AwaitExpression = function (node, st, c) { + if (node.argument) { c(node.argument, st, "Expression"); } + }; + base.ThrowStatement = base.SpreadElement = + function (node, st, c) { return c(node.argument, st, "Expression"); }; + base.TryStatement = function (node, st, c) { + c(node.block, st, "Statement"); + if (node.handler) { c(node.handler, st); } + if (node.finalizer) { c(node.finalizer, st, "Statement"); } + }; + base.CatchClause = function (node, st, c) { + if (node.param) { c(node.param, st, "Pattern"); } + c(node.body, st, "Statement"); + }; + base.WhileStatement = base.DoWhileStatement = function (node, st, c) { + c(node.test, st, "Expression"); + c(node.body, st, "Statement"); + }; + base.ForStatement = function (node, st, c) { + if (node.init) { c(node.init, st, "ForInit"); } + if (node.test) { c(node.test, st, "Expression"); } + if (node.update) { c(node.update, st, "Expression"); } + c(node.body, st, "Statement"); + }; + base.ForInStatement = base.ForOfStatement = function (node, st, c) { + c(node.left, st, "ForInit"); + c(node.right, st, "Expression"); + c(node.body, st, "Statement"); + }; + base.ForInit = function (node, st, c) { + if (node.type === "VariableDeclaration") { c(node, st); } + else { c(node, st, "Expression"); } + }; + base.DebuggerStatement = ignore; - c(cons, st, "Statement"); - } -}; -base.ReturnStatement = base.YieldExpression = base.AwaitExpression = function (node, st, c) { - if (node.argument) { c(node.argument, st, "Expression"); } -}; -base.ThrowStatement = base.SpreadElement = - function (node, st, c) { return c(node.argument, st, "Expression"); }; -base.TryStatement = function (node, st, c) { - c(node.block, st, "Statement"); - if (node.handler) { c(node.handler, st); } - if (node.finalizer) { c(node.finalizer, st, "Statement"); } -}; -base.CatchClause = function (node, st, c) { - if (node.param) { c(node.param, st, "Pattern"); } - c(node.body, st, "Statement"); -}; -base.WhileStatement = base.DoWhileStatement = function (node, st, c) { - c(node.test, st, "Expression"); - c(node.body, st, "Statement"); -}; -base.ForStatement = function (node, st, c) { - if (node.init) { c(node.init, st, "ForInit"); } - if (node.test) { c(node.test, st, "Expression"); } - if (node.update) { c(node.update, st, "Expression"); } - c(node.body, st, "Statement"); -}; -base.ForInStatement = base.ForOfStatement = function (node, st, c) { - c(node.left, st, "ForInit"); - c(node.right, st, "Expression"); - c(node.body, st, "Statement"); -}; -base.ForInit = function (node, st, c) { - if (node.type === "VariableDeclaration") { c(node, st); } - else { c(node, st, "Expression"); } -}; -base.DebuggerStatement = ignore; - -base.FunctionDeclaration = function (node, st, c) { return c(node, st, "Function"); }; -base.VariableDeclaration = function (node, st, c) { - for (var i = 0, list = node.declarations; i < list.length; i += 1) - { - var decl = list[i]; - - c(decl, st); - } -}; -base.VariableDeclarator = function (node, st, c) { - c(node.id, st, "Pattern"); - if (node.init) { c(node.init, st, "Expression"); } -}; - -base.Function = function (node, st, c) { - if (node.id) { c(node.id, st, "Pattern"); } - for (var i = 0, list = node.params; i < list.length; i += 1) - { - var param = list[i]; - - c(param, st, "Pattern"); - } - c(node.body, st, node.expression ? "Expression" : "Statement"); -}; - -base.Pattern = function (node, st, c) { - if (node.type === "Identifier") - { c(node, st, "VariablePattern"); } - else if (node.type === "MemberExpression") - { c(node, st, "MemberPattern"); } - else - { c(node, st); } -}; -base.VariablePattern = ignore; -base.MemberPattern = skipThrough; -base.RestElement = function (node, st, c) { return c(node.argument, st, "Pattern"); }; -base.ArrayPattern = function (node, st, c) { - for (var i = 0, list = node.elements; i < list.length; i += 1) { - var elt = list[i]; - - if (elt) { c(elt, st, "Pattern"); } - } -}; -base.ObjectPattern = function (node, st, c) { - for (var i = 0, list = node.properties; i < list.length; i += 1) { - var prop = list[i]; - - if (prop.type === "Property") { - if (prop.computed) { c(prop.key, st, "Expression"); } - c(prop.value, st, "Pattern"); - } else if (prop.type === "RestElement") { - c(prop.argument, st, "Pattern"); - } - } -}; - -base.Expression = skipThrough; -base.ThisExpression = base.Super = base.MetaProperty = ignore; -base.ArrayExpression = function (node, st, c) { - for (var i = 0, list = node.elements; i < list.length; i += 1) { - var elt = list[i]; - - if (elt) { c(elt, st, "Expression"); } - } -}; -base.ObjectExpression = function (node, st, c) { - for (var i = 0, list = node.properties; i < list.length; i += 1) - { - var prop = list[i]; - - c(prop, st); - } -}; -base.FunctionExpression = base.ArrowFunctionExpression = base.FunctionDeclaration; -base.SequenceExpression = function (node, st, c) { - for (var i = 0, list = node.expressions; i < list.length; i += 1) - { - var expr = list[i]; - - c(expr, st, "Expression"); - } -}; -base.TemplateLiteral = function (node, st, c) { - for (var i = 0, list = node.quasis; i < list.length; i += 1) - { - var quasi = list[i]; - - c(quasi, st); - } - - for (var i$1 = 0, list$1 = node.expressions; i$1 < list$1.length; i$1 += 1) - { - var expr = list$1[i$1]; - - c(expr, st, "Expression"); - } -}; -base.TemplateElement = ignore; -base.UnaryExpression = base.UpdateExpression = function (node, st, c) { - c(node.argument, st, "Expression"); -}; -base.BinaryExpression = base.LogicalExpression = function (node, st, c) { - c(node.left, st, "Expression"); - c(node.right, st, "Expression"); -}; -base.AssignmentExpression = base.AssignmentPattern = function (node, st, c) { - c(node.left, st, "Pattern"); - c(node.right, st, "Expression"); -}; -base.ConditionalExpression = function (node, st, c) { - c(node.test, st, "Expression"); - c(node.consequent, st, "Expression"); - c(node.alternate, st, "Expression"); -}; -base.NewExpression = base.CallExpression = function (node, st, c) { - c(node.callee, st, "Expression"); - if (node.arguments) - { for (var i = 0, list = node.arguments; i < list.length; i += 1) + base.FunctionDeclaration = function (node, st, c) { return c(node, st, "Function"); }; + base.VariableDeclaration = function (node, st, c) { + for (var i = 0, list = node.declarations; i < list.length; i += 1) { - var arg = list[i]; + var decl = list[i]; - c(arg, st, "Expression"); - } } -}; -base.MemberExpression = function (node, st, c) { - c(node.object, st, "Expression"); - if (node.computed) { c(node.property, st, "Expression"); } -}; -base.ExportNamedDeclaration = base.ExportDefaultDeclaration = function (node, st, c) { - if (node.declaration) - { c(node.declaration, st, node.type === "ExportNamedDeclaration" || node.declaration.id ? "Statement" : "Expression"); } - if (node.source) { c(node.source, st, "Expression"); } -}; -base.ExportAllDeclaration = function (node, st, c) { - c(node.source, st, "Expression"); -}; -base.ImportDeclaration = function (node, st, c) { - for (var i = 0, list = node.specifiers; i < list.length; i += 1) - { - var spec = list[i]; + c(decl, st); + } + }; + base.VariableDeclarator = function (node, st, c) { + c(node.id, st, "Pattern"); + if (node.init) { c(node.init, st, "Expression"); } + }; - c(spec, st); - } - c(node.source, st, "Expression"); -}; -base.ImportSpecifier = base.ImportDefaultSpecifier = base.ImportNamespaceSpecifier = base.Identifier = base.Literal = ignore; + base.Function = function (node, st, c) { + if (node.id) { c(node.id, st, "Pattern"); } + for (var i = 0, list = node.params; i < list.length; i += 1) + { + var param = list[i]; -base.TaggedTemplateExpression = function (node, st, c) { - c(node.tag, st, "Expression"); - c(node.quasi, st, "Expression"); -}; -base.ClassDeclaration = base.ClassExpression = function (node, st, c) { return c(node, st, "Class"); }; -base.Class = function (node, st, c) { - if (node.id) { c(node.id, st, "Pattern"); } - if (node.superClass) { c(node.superClass, st, "Expression"); } - c(node.body, st); -}; -base.ClassBody = function (node, st, c) { - for (var i = 0, list = node.body; i < list.length; i += 1) - { - var elt = list[i]; + c(param, st, "Pattern"); + } + c(node.body, st, node.expression ? "Expression" : "Statement"); + }; - c(elt, st); - } -}; -base.MethodDefinition = base.Property = function (node, st, c) { - if (node.computed) { c(node.key, st, "Expression"); } - c(node.value, st, "Expression"); -}; + base.Pattern = function (node, st, c) { + if (node.type === "Identifier") + { c(node, st, "VariablePattern"); } + else if (node.type === "MemberExpression") + { c(node, st, "MemberPattern"); } + else + { c(node, st); } + }; + base.VariablePattern = ignore; + base.MemberPattern = skipThrough; + base.RestElement = function (node, st, c) { return c(node.argument, st, "Pattern"); }; + base.ArrayPattern = function (node, st, c) { + for (var i = 0, list = node.elements; i < list.length; i += 1) { + var elt = list[i]; -exports.simple = simple; -exports.ancestor = ancestor; -exports.recursive = recursive; -exports.full = full; -exports.fullAncestor = fullAncestor; -exports.findNodeAt = findNodeAt; -exports.findNodeAround = findNodeAround; -exports.findNodeAfter = findNodeAfter; -exports.findNodeBefore = findNodeBefore; -exports.make = make; -exports.base = base; + if (elt) { c(elt, st, "Pattern"); } + } + }; + base.ObjectPattern = function (node, st, c) { + for (var i = 0, list = node.properties; i < list.length; i += 1) { + var prop = list[i]; -Object.defineProperty(exports, '__esModule', { value: true }); + if (prop.type === "Property") { + if (prop.computed) { c(prop.key, st, "Expression"); } + c(prop.value, st, "Pattern"); + } else if (prop.type === "RestElement") { + c(prop.argument, st, "Pattern"); + } + } + }; -}))); -//# sourceMappingURL=walk.js.map + base.Expression = skipThrough; + base.ThisExpression = base.Super = base.MetaProperty = ignore; + base.ArrayExpression = function (node, st, c) { + for (var i = 0, list = node.elements; i < list.length; i += 1) { + var elt = list[i]; + + if (elt) { c(elt, st, "Expression"); } + } + }; + base.ObjectExpression = function (node, st, c) { + for (var i = 0, list = node.properties; i < list.length; i += 1) + { + var prop = list[i]; + + c(prop, st); + } + }; + base.FunctionExpression = base.ArrowFunctionExpression = base.FunctionDeclaration; + base.SequenceExpression = function (node, st, c) { + for (var i = 0, list = node.expressions; i < list.length; i += 1) + { + var expr = list[i]; + + c(expr, st, "Expression"); + } + }; + base.TemplateLiteral = function (node, st, c) { + for (var i = 0, list = node.quasis; i < list.length; i += 1) + { + var quasi = list[i]; + + c(quasi, st); + } + + for (var i$1 = 0, list$1 = node.expressions; i$1 < list$1.length; i$1 += 1) + { + var expr = list$1[i$1]; + + c(expr, st, "Expression"); + } + }; + base.TemplateElement = ignore; + base.UnaryExpression = base.UpdateExpression = function (node, st, c) { + c(node.argument, st, "Expression"); + }; + base.BinaryExpression = base.LogicalExpression = function (node, st, c) { + c(node.left, st, "Expression"); + c(node.right, st, "Expression"); + }; + base.AssignmentExpression = base.AssignmentPattern = function (node, st, c) { + c(node.left, st, "Pattern"); + c(node.right, st, "Expression"); + }; + base.ConditionalExpression = function (node, st, c) { + c(node.test, st, "Expression"); + c(node.consequent, st, "Expression"); + c(node.alternate, st, "Expression"); + }; + base.NewExpression = base.CallExpression = function (node, st, c) { + c(node.callee, st, "Expression"); + if (node.arguments) + { for (var i = 0, list = node.arguments; i < list.length; i += 1) + { + var arg = list[i]; + + c(arg, st, "Expression"); + } } + }; + base.MemberExpression = function (node, st, c) { + c(node.object, st, "Expression"); + if (node.computed) { c(node.property, st, "Expression"); } + }; + base.ExportNamedDeclaration = base.ExportDefaultDeclaration = function (node, st, c) { + if (node.declaration) + { c(node.declaration, st, node.type === "ExportNamedDeclaration" || node.declaration.id ? "Statement" : "Expression"); } + if (node.source) { c(node.source, st, "Expression"); } + }; + base.ExportAllDeclaration = function (node, st, c) { + c(node.source, st, "Expression"); + }; + base.ImportDeclaration = function (node, st, c) { + for (var i = 0, list = node.specifiers; i < list.length; i += 1) + { + var spec = list[i]; + + c(spec, st); + } + c(node.source, st, "Expression"); + }; + base.ImportSpecifier = base.ImportDefaultSpecifier = base.ImportNamespaceSpecifier = base.Identifier = base.Literal = base.Import = ignore; + + base.TaggedTemplateExpression = function (node, st, c) { + c(node.tag, st, "Expression"); + c(node.quasi, st, "Expression"); + }; + base.ClassDeclaration = base.ClassExpression = function (node, st, c) { return c(node, st, "Class"); }; + base.Class = function (node, st, c) { + if (node.id) { c(node.id, st, "Pattern"); } + if (node.superClass) { c(node.superClass, st, "Expression"); } + c(node.body, st); + }; + base.ClassBody = function (node, st, c) { + for (var i = 0, list = node.body; i < list.length; i += 1) + { + var elt = list[i]; + + c(elt, st); + } + }; + base.MethodDefinition = base.Property = function (node, st, c) { + if (node.computed) { c(node.key, st, "Expression"); } + c(node.value, st, "Expression"); + }; + + exports.ancestor = ancestor; + exports.base = base; + exports.findNodeAfter = findNodeAfter; + exports.findNodeAround = findNodeAround; + exports.findNodeAt = findNodeAt; + exports.findNodeBefore = findNodeBefore; + exports.full = full; + exports.fullAncestor = fullAncestor; + exports.make = make; + exports.recursive = recursive; + exports.simple = simple; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/node_modules/acorn-walk/dist/walk.mjs b/node_modules/acorn-walk/dist/walk.mjs index 0f4100b..2154f48 100644 --- a/node_modules/acorn-walk/dist/walk.mjs +++ b/node_modules/acorn-walk/dist/walk.mjs @@ -47,7 +47,8 @@ function ancestor(node, visitors, baseVisitor, state) { // their child nodes (by calling their third argument on these // nodes). function recursive(node, state, funcs, baseVisitor, override) { - var visitor = funcs ? make(funcs, baseVisitor || undefined) : baseVisitor;(function c(node, st, override) { + var visitor = funcs ? make(funcs, baseVisitor || undefined) : baseVisitor + ;(function c(node, st, override) { visitor[override || node.type](node, st, c); })(node, state, override); } @@ -77,7 +78,8 @@ function full(node, callback, baseVisitor, state, override) { // the callback on each node function fullAncestor(node, callback, baseVisitor, state) { if (!baseVisitor) { baseVisitor = base; } - var ancestors = [];(function c(node, st, override) { + var ancestors = [] + ;(function c(node, st, override) { var type = override || node.type; var isNew = node !== ancestors[ancestors.length - 1]; if (isNew) { ancestors.push(node); } @@ -149,7 +151,8 @@ function findNodeAfter(node, pos, test, baseVisitor, state) { function findNodeBefore(node, pos, test, baseVisitor, state) { test = makeTest(test); if (!baseVisitor) { baseVisitor = base; } - var max;(function c(node, st, override) { + var max + ;(function c(node, st, override) { if (node.start > pos) { return } var type = override || node.type; if (node.end <= pos && (!max || max.node.end < node.end) && test(type, node)) @@ -206,13 +209,13 @@ base.WithStatement = function (node, st, c) { }; base.SwitchStatement = function (node, st, c) { c(node.discriminant, st, "Expression"); - for (var i = 0, list = node.cases; i < list.length; i += 1) { - var cs = list[i]; + for (var i$1 = 0, list$1 = node.cases; i$1 < list$1.length; i$1 += 1) { + var cs = list$1[i$1]; if (cs.test) { c(cs.test, st, "Expression"); } - for (var i$1 = 0, list$1 = cs.consequent; i$1 < list$1.length; i$1 += 1) + for (var i = 0, list = cs.consequent; i < list.length; i += 1) { - var cons = list$1[i$1]; + var cons = list[i]; c(cons, st, "Statement"); } @@ -407,7 +410,7 @@ base.ImportDeclaration = function (node, st, c) { } c(node.source, st, "Expression"); }; -base.ImportSpecifier = base.ImportDefaultSpecifier = base.ImportNamespaceSpecifier = base.Identifier = base.Literal = ignore; +base.ImportSpecifier = base.ImportDefaultSpecifier = base.ImportNamespaceSpecifier = base.Identifier = base.Literal = base.Import = ignore; base.TaggedTemplateExpression = function (node, st, c) { c(node.tag, st, "Expression"); @@ -432,5 +435,4 @@ base.MethodDefinition = base.Property = function (node, st, c) { c(node.value, st, "Expression"); }; -export { simple, ancestor, recursive, full, fullAncestor, findNodeAt, findNodeAround, findNodeAfter, findNodeBefore, make, base }; -//# sourceMappingURL=walk.mjs.map +export { ancestor, base, findNodeAfter, findNodeAround, findNodeAt, findNodeBefore, full, fullAncestor, make, recursive, simple }; diff --git a/node_modules/acorn-walk/package.json b/node_modules/acorn-walk/package.json index f619722..ba4c626 100644 --- a/node_modules/acorn-walk/package.json +++ b/node_modules/acorn-walk/package.json @@ -1,8 +1,8 @@ { "_from": "acorn-walk@^6.0.1", - "_id": "acorn-walk@6.1.1", + "_id": "acorn-walk@6.2.0", "_inBundle": false, - "_integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", + "_integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", "_location": "/acorn-walk", "_phantomChildren": {}, "_requested": { @@ -18,8 +18,8 @@ "_requiredBy": [ "/acorn-globals" ], - "_resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "_shasum": "d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913", + "_resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "_shasum": "123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c", "_spec": "acorn-walk@^6.0.1", "_where": "F:\\projects\\p\\minifyfromhtml\\node_modules\\acorn-globals", "bugs": { @@ -59,5 +59,5 @@ "scripts": { "prepare": "cd ..; npm run build:walk" }, - "version": "6.1.1" + "version": "6.2.0" } diff --git a/node_modules/acorn/CHANGELOG.md b/node_modules/acorn/CHANGELOG.md index 1c8f79c..1438da6 100644 --- a/node_modules/acorn/CHANGELOG.md +++ b/node_modules/acorn/CHANGELOG.md @@ -1,3 +1,39 @@ +## 6.4.0 (2019-11-26) + +### New features + +Add a static `acorn` property to the `Parser` class that contains the entire module interface, to allow plugins to access the instance of the library that they are acting on. + +## 6.3.0 (2019-08-12) + +### New features + +`sourceType: "module"` can now be used even when `ecmaVersion` is less than 6, to parse module-style code that otherwise conforms to an older standard. + +## 6.2.1 (2019-07-21) + +### Bug fixes + +Fix bug causing Acorn to treat some characters as identifier characters that shouldn't be treated as such. + +Fix issue where setting the `allowReserved` option to `"never"` allowed reserved words in some circumstances. + +## 6.2.0 (2019-07-04) + +### Bug fixes + +Improve valid assignment checking in `for`/`in` and `for`/`of` loops. + +Disallow binding `let` in patterns. + +### New features + +Support bigint syntax with `ecmaVersion` >= 10. + +Support dynamic `import` syntax with `ecmaVersion` >= 10. + +Upgrade to Unicode version 12. + ## 6.1.1 (2019-02-27) ### Bug fixes diff --git a/node_modules/acorn/README.md b/node_modules/acorn/README.md index 3e5f58d..bcf85cc 100644 --- a/node_modules/acorn/README.md +++ b/node_modules/acorn/README.md @@ -54,7 +54,7 @@ an object containing any of these fields: - **ecmaVersion**: Indicates the ECMAScript version to parse. Must be either 3, 5, 6 (2015), 7 (2016), 8 (2017), 9 (2018) or 10 (2019, partial support). This influences support for strict mode, the set of - reserved words, and support for new syntax features. Default is 7. + reserved words, and support for new syntax features. Default is 9. **NOTE**: Only 'stage 4' (finalized) ECMAScript features are being implemented by Acorn. Other proposed new features can be implemented @@ -64,6 +64,9 @@ an object containing any of these fields: either `"script"` or `"module"`. This influences global strict mode and parsing of `import` and `export` declarations. + **NOTE**: If set to `"module"`, then static `import` / `export` syntax + will be valid, even if `ecmaVersion` is less than 6. + - **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 @@ -260,10 +263,7 @@ The utility spits out the syntax tree as JSON data. Plugins for ECMAScript proposals: - [`acorn-stage3`](https://github.com/acornjs/acorn-stage3): Parse most stage 3 proposals, bundling: - - [`acorn-async-iteration`](https://github.com/acornjs/acorn-async-iteration): Parse [async iteration proposal](https://github.com/tc39/proposal-async-iteration) - - [`acorn-bigint`](https://github.com/acornjs/acorn-bigint): Parse [BigInt proposal](https://github.com/tc39/proposal-bigint) - [`acorn-class-fields`](https://github.com/acornjs/acorn-class-fields): Parse [class fields proposal](https://github.com/tc39/proposal-class-fields) - - [`acorn-dynamic-import`](https://github.com/kesne/acorn-dynamic-import): Parse [import() proposal](https://github.com/tc39/proposal-dynamic-import) - [`acorn-import-meta`](https://github.com/acornjs/acorn-import-meta): Parse [import.meta proposal](https://github.com/tc39/proposal-import-meta) - [`acorn-numeric-separator`](https://github.com/acornjs/acorn-numeric-separator): Parse [numeric separator proposal](https://github.com/tc39/proposal-numeric-separator) - [`acorn-private-methods`](https://github.com/acornjs/acorn-private-methods): parse [private methods, getters and setters proposal](https://github.com/tc39/proposal-private-methods)n diff --git a/node_modules/acorn/dist/acorn.d.ts b/node_modules/acorn/dist/acorn.d.ts index c6f9841..c68e239 100644 --- a/node_modules/acorn/dist/acorn.d.ts +++ b/node_modules/acorn/dist/acorn.d.ts @@ -16,7 +16,7 @@ declare namespace acorn { sourceType?: 'script' | 'module' onInsertedSemicolon?: (lastTokEnd: number, lastTokEndLoc?: Position) => void onTrailingComma?: (lastTokEnd: number, lastTokEndLoc?: Position) => void - allowReserved?: boolean + allowReserved?: boolean | 'never' allowReturnOutsideFunction?: boolean allowImportExportEverywhere?: boolean allowAwaitOutsideFunction?: boolean @@ -36,14 +36,14 @@ declare namespace acorn { class Parser { constructor(options: Options, input: string, startPos?: number) - parse(): Node - static parse(input: string, options?: Options): Node - static parseExpressionAt(input: string, pos: number, options?: Options): Node - static tokenizer(input: string, options?: Options): { + parse(this: Parser): Node + static parse(this: typeof Parser, input: string, options?: Options): Node + static parseExpressionAt(this: typeof Parser, input: string, pos: number, options?: Options): Node + static tokenizer(this: typeof Parser, input: string, options?: Options): { getToken(): Token [Symbol.iterator](): Iterator } - static extend(...plugins: ((BaseParser: typeof Parser) => typeof Parser)[]): typeof Parser + static extend(this: typeof Parser, ...plugins: ((BaseParser: typeof Parser) => typeof Parser)[]): typeof Parser } interface Position { line: number; column: number; offset: number } diff --git a/node_modules/acorn/dist/acorn.js b/node_modules/acorn/dist/acorn.js index 0f5bce2..5bad54b 100644 --- a/node_modules/acorn/dist/acorn.js +++ b/node_modules/acorn/dist/acorn.js @@ -1,5018 +1,4990 @@ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (factory((global.acorn = {}))); -}(this, (function (exports) { 'use strict'; + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.acorn = {})); +}(this, function (exports) { 'use strict'; -// Reserved word lists for various dialects of the language + // 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" -}; + 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 + // 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 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" -}; + var keywords = { + 5: ecma5AndLessKeywords, + "5module": ecma5AndLessKeywords + " export import", + 6: ecma5AndLessKeywords + " const class extends export import super" + }; -var keywordRelationalOperator = /^in(stanceof)?$/; + var keywordRelationalOperator = /^in(stanceof)?$/; -// ## Character categories + // ## 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`. + // 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\u0560-\u0588\u05d0-\u05ea\u05ef-\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\u0860-\u086a\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\u09fc\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\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\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-\u1878\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\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\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-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7c6\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\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-\uab67\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\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d3-\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\u09fe\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\u0afa-\u0aff\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-\u0c04\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\u0d00-\u0d03\u0d3b\u0d3c\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-\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\u1cf4\u1cf7-\u1cf9\u1dc0-\u1df9\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\ua8ff-\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 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\u0560-\u0588\u05d0-\u05ea\u05ef-\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\u0860-\u086a\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\u09fc\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-\u1878\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\u1c90-\u1cba\u1cbd-\u1cbf\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-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7b9\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\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\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d3-\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\u09fe\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\u0afa-\u0aff\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-\u0c04\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\u0d00-\u0d03\u0d3b\u0d3c\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\u1cf7-\u1cf9\u1dc0-\u1df9\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\ua8ff-\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 + "]"); -var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); -var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]"); + nonASCIIidentifierStartChars = nonASCIIidentifierChars = null; -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 -// 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,14,29,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,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,477,28,11,0,9,21,155,22,13,52,76,44,33,24,27,35,30,0,12,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,21,0,33,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,230,43,117,63,32,0,161,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,270,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,754,9486,286,50,2,18,3,9,395,2309,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,2357,44,11,6,17,0,370,43,1301,196,60,67,8,0,1205,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,15,7472,3104,541]; -// 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,14,29,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,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,477,28,11,0,9,21,190,52,76,44,33,24,27,35,30,0,12,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,26,230,43,117,63,32,0,257,0,11,39,8,0,22,0,12,39,3,3,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,270,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,68,12,0,67,12,65,1,31,6129,15,754,9486,286,82,395,2309,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,15,7472,3104,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,574,3,9,9,525,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,4,9,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,232,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,135,4,60,6,26,9,1014,0,2,54,8,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,262,6,10,9,419,13,1495,6,110,6,6,9,792487,239]; -// 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,574,3,9,9,525,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,4,9,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,280,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,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 } + // 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. + // 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) -} + 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. + // 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) -} + 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 + // ## 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. + // 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. + // 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 keywords$1 = {}; - -// Succinct definitions of keyword token types -function kw(name, options) { - if ( options === void 0 ) options = {}; - - options.keyword = name; - return keywords$1[name] = new TokenType(name, options) -} - -var types = { - num: new TokenType("num", startsExpr), - regexp: new TokenType("regexp", startsExpr), - string: new TokenType("string", startsExpr), - name: new TokenType("name", startsExpr), - eof: new TokenType("eof"), - - // Punctuation token types. - bracketL: new TokenType("[", {beforeExpr: true, startsExpr: true}), - bracketR: new TokenType("]"), - braceL: new TokenType("{", {beforeExpr: true, startsExpr: true}), - 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"), - invalidTemplate: new TokenType("invalidTemplate"), - 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). + // 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). // - // `binop`, when present, specifies that this operator is a binary - // operator, and will refer to its precedence. + // 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). // - // `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. + // `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. - 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("!/~", {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}), + var TokenType = function TokenType(label, conf) { + if ( conf === void 0 ) conf = {}; - // 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", startsExpr), - _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}) -}; + 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; + }; -// Matches a whole line break (where CRLF is considered a single -// line break). Used to count lines. + function binop(name, prec) { + return new TokenType(name, {beforeExpr: true, binop: prec}) + } + var beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true}; -var lineBreak = /\r\n?|\n|\u2028|\u2029/; -var lineBreakG = new RegExp(lineBreak.source, "g"); + // Map keyword names to token types. -function isNewLine(code, ecma2019String) { - return code === 10 || code === 13 || (!ecma2019String && (code === 0x2028 || code === 0x2029)) -} + var keywords$1 = {}; -var nonASCIIwhitespace = /[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/; + // Succinct definitions of keyword token types + function kw(name, options) { + if ( options === void 0 ) options = {}; -var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g; + options.keyword = name; + return keywords$1[name] = new TokenType(name, options) + } -var ref = Object.prototype; -var hasOwnProperty = ref.hasOwnProperty; -var toString = ref.toString; + var types = { + num: new TokenType("num", startsExpr), + regexp: new TokenType("regexp", startsExpr), + string: new TokenType("string", startsExpr), + name: new TokenType("name", startsExpr), + eof: new TokenType("eof"), -// Checks if an object has a property. + // 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"), + invalidTemplate: new TokenType("invalidTemplate"), + ellipsis: new TokenType("...", beforeExpr), + backQuote: new TokenType("`", startsExpr), + dollarBraceL: new TokenType("${", {beforeExpr: true, startsExpr: true}), -function has(obj, propName) { - return hasOwnProperty.call(obj, propName) -} + // 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. -var isArray = Array.isArray || (function (obj) { return ( - toString.call(obj) === "[object Array]" -); }); + 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("!/~", {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}), -function wordsRegexp(words) { - return new RegExp("^(?:" + words.replace(/ /g, "|") + ")$") -} + // 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", startsExpr), + _extends: kw("extends", beforeExpr), + _export: kw("export"), + _import: kw("import", startsExpr), + _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}) + }; -// These are used when `options.locations` is on, for the -// `startLoc` and `endLoc` properties. + // Matches a whole line break (where CRLF is considered a single + // line break). Used to count lines. -var Position = function Position(line, col) { - this.line = line; - this.column = col; -}; + var lineBreak = /\r\n?|\n|\u2028|\u2029/; + var lineBreakG = new RegExp(lineBreak.source, "g"); -Position.prototype.offset = function offset (n) { - return new Position(this.line, this.column + n) -}; + function isNewLine(code, ecma2019String) { + return code === 10 || code === 13 || (!ecma2019String && (code === 0x2028 || code === 0x2029)) + } -var SourceLocation = function SourceLocation(p, start, end) { - this.start = start; - this.end = end; - if (p.sourceFile !== null) { this.source = p.sourceFile; } -}; + var nonASCIIwhitespace = /[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/; -// 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. + var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g; -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; + var ref = Object.prototype; + var hasOwnProperty = ref.hasOwnProperty; + var toString = ref.toString; + + // Checks if an object has a property. + + function has(obj, propName) { + return hasOwnProperty.call(obj, propName) + } + + var isArray = Array.isArray || (function (obj) { return ( + toString.call(obj) === "[object Array]" + ); }); + + function wordsRegexp(words) { + return new RegExp("^(?:" + words.replace(/ /g, "|") + ")$") + } + + // 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), 8 (2017), 9 (2018), or 10 + // (2019). This influences support for strict mode, the set of + // reserved words, and support for new syntax features. The default + // is 9. + ecmaVersion: 9, + // `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 + // the 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, await identifiers are allowed to appear at the top-level scope, + // but they are still not allowed in non-async functions. + allowAwaitOutsideFunction: 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 + }; + + // 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); + } + } + + // Each scope gets a bitset that may contain these flags + var + SCOPE_TOP = 1, + SCOPE_FUNCTION = 2, + SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION, + SCOPE_ASYNC = 4, + SCOPE_GENERATOR = 8, + SCOPE_ARROW = 16, + SCOPE_SIMPLE_CATCH = 32, + SCOPE_SUPER = 64, + SCOPE_DIRECT_SUPER = 128; + + function functionFlags(async, generator) { + return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0) + } + + // Used in checkLVal and declareName to determine the type of a binding + var + BIND_NONE = 0, // Not a binding + BIND_VAR = 1, // Var-style binding + BIND_LEXICAL = 2, // Let- or const-style binding + BIND_FUNCTION = 3, // Function declaration + BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding + BIND_OUTSIDE = 5; // Special case for function names as bound inside the function + + var Parser = function Parser(options, input, startPos) { + this.options = options = getOptions(options); + this.sourceFile = options.sourceFile; + this.keywords = wordsRegexp(keywords[options.ecmaVersion >= 6 ? 6 : options.sourceType === "module" ? "5module" : 5]); + var reserved = ""; + if (options.allowReserved !== true) { + for (var v = options.ecmaVersion;; v--) + { if (reserved = reservedWords[v]) { break } } + if (options.sourceType === "module") { reserved += " await"; } + } + this.reservedWords = wordsRegexp(reserved); + var reservedStrict = (reserved ? reserved + " " : "") + reservedWords.strict; + this.reservedWordsStrict = wordsRegexp(reservedStrict); + this.reservedWordsStrictBind = wordsRegexp(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; + + // 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 { - return new Position(line, offset - cur) + this.pos = this.lineStart = 0; + this.curLine = 1; } - } -} -// 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), 8 (2017), 9 (2018), or 10 - // (2019). This influences support for strict mode, the set of - // reserved words, and support for new syntax features. The default - // is 9. - ecmaVersion: 9, - // `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 - // the 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, await identifiers are allowed to appear at the top-level scope, - // but they are still not allowed in non-async functions. - allowAwaitOutsideFunction: 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 -}; - -// 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); - } -} - -// Each scope gets a bitset that may contain these flags -var SCOPE_TOP = 1; -var SCOPE_FUNCTION = 2; -var SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION; -var SCOPE_ASYNC = 4; -var SCOPE_GENERATOR = 8; -var SCOPE_ARROW = 16; -var SCOPE_SIMPLE_CATCH = 32; -var SCOPE_SUPER = 64; -var SCOPE_DIRECT_SUPER = 128; - -function functionFlags(async, generator) { - return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0) -} - -// Used in checkLVal and declareName to determine the type of a binding -var BIND_NONE = 0; -var BIND_VAR = 1; -var BIND_LEXICAL = 2; -var BIND_FUNCTION = 3; -var BIND_SIMPLE_CATCH = 4; -var BIND_OUTSIDE = 5; // Special case for function names as bound inside the function - -var Parser = function Parser(options, input, startPos) { - this.options = options = getOptions(options); - this.sourceFile = options.sourceFile; - this.keywords = wordsRegexp(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 = wordsRegexp(reserved); - var reservedStrict = (reserved ? reserved + " " : "") + reservedWords.strict; - this.reservedWordsStrict = wordsRegexp(reservedStrict); - this.reservedWordsStrictBind = wordsRegexp(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; - - // 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 = types.eof; - // For tokens that include more information than their type, the value - this.value = null; - // Its start and end offset - this.start = this.end = this.pos; - // And, if locations are used, the {line, column} object - // corresponding to those offsets - this.startLoc = this.endLoc = this.curPosition(); - - // Position information for the previous token - this.lastTokEndLoc = this.lastTokStartLoc = null; - this.lastTokStart = this.lastTokEnd = this.pos; - - // The context stack is used to superficially track syntactic - // context to predict whether a regular expression is allowed in a - // given position. - this.context = this.initialContext(); - this.exprAllowed = true; - - // Figure out if it's a module code. - this.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; - - // Positions to delayed-check that yield/await does not exist in default parameters. - this.yieldPos = this.awaitPos = this.awaitIdentPos = 0; - // Labels in scope. - this.labels = []; - // Thus-far undefined exports. - this.undefinedExports = {}; - - // If enabled, skip leading hashbang line. - if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === "#!") - { this.skipLineComment(2); } - - // Scope tracking for duplicate variable names (see scope.js) - this.scopeStack = []; - this.enterScope(SCOPE_TOP); - - // For RegExp validation - this.regexpState = null; -}; - -var prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true } }; - -Parser.prototype.parse = function parse () { - var node = this.options.program || this.startNode(); - this.nextToken(); - return this.parseTopLevel(node) -}; - -prototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 }; -prototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 }; -prototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 }; -prototypeAccessors.allowSuper.get = function () { return (this.currentThisScope().flags & SCOPE_SUPER) > 0 }; -prototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 }; -prototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) }; - -// Switch to a getter for 7.0.0. -Parser.prototype.inNonArrowFunction = function inNonArrowFunction () { return (this.currentThisScope().flags & SCOPE_FUNCTION) > 0 }; - -Parser.extend = function extend () { - var plugins = [], len = arguments.length; - while ( len-- ) plugins[ len ] = arguments[ len ]; - - var cls = this; - for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); } - return cls -}; - -Parser.parse = function parse (input, options) { - return new this(options, input).parse() -}; - -Parser.parseExpressionAt = function parseExpressionAt (input, pos, options) { - var parser = new this(options, input, pos); - parser.nextToken(); - return parser.parseExpression() -}; - -Parser.tokenizer = function tokenizer (input, options) { - return new this(options, input) -}; - -Object.defineProperties( Parser.prototype, prototypeAccessors ); - -var pp = Parser.prototype; - -// ## Parser utilities - -var literal = /^(?:'((?:\\.|[^'])*?)'|"((?:\\.|[^"])*?)")/; -pp.strictDirective = function(start) { - var this$1 = this; - - for (;;) { - // Try to find string literal. - 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; - - // Skip semicolon, if any. - skipWhiteSpace.lastIndex = start; - start += skipWhiteSpace.exec(this$1.input)[0].length; - if (this$1.input[start] === ";") - { start++; } - } -}; - -// 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 === types.name && this.value === name && !this.containsEsc -}; - -// Consumes contextual keyword if possible. - -pp.eatContextual = function(name) { - if (!this.isContextual(name)) { return false } - this.next(); - return true -}; - -// 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 === types.eof || - this.type === types.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(types.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"); -}; - -function DestructuringErrors() { - this.shorthandAssign = - this.trailingComma = - this.parenthesizedAssign = - this.parenthesizedBind = - this.doubleProto = - -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) { - if (!refDestructuringErrors) { return false } - var shorthandAssign = refDestructuringErrors.shorthandAssign; - var doubleProto = refDestructuringErrors.doubleProto; - if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 } - if (shorthandAssign >= 0) - { this.raise(shorthandAssign, "Shorthand property assignments are valid only in destructuring patterns"); } - if (doubleProto >= 0) - { this.raiseRecoverable(doubleProto, "Redefinition of __proto__ property"); } -}; - -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 !== types.eof) { - var stmt = this$1.parseStatement(null, true, exports); - node.body.push(stmt); - } - if (this.inModule) - { for (var i = 0, list = Object.keys(this$1.undefinedExports); i < list.length; i += 1) - { - var name = list[i]; - - this$1.raiseRecoverable(this$1.undefinedExports[name].start, ("Export '" + name + "' is not defined")); - } } - this.adaptDirectivePrologue(node.body); - 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(context) { - if (this.options.ecmaVersion < 6 || !this.isContextual("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); - // For ambiguous cases, determine if a LexicalDeclaration (or only a - // Statement) is allowed here. If context is not empty then only a Statement - // is allowed. However, `let [` is an explicit negative lookahead for - // ExpressionStatement, so special-case it first. - if (nextCh === 91) { return true } // '[' - if (context) { return false } - - if (nextCh === 123) { return true } // '{' - if (isIdentifierStart(nextCh, true)) { - var pos = next + 1; - while (isIdentifierChar(this.input.charCodeAt(pos), true)) { ++pos; } - var ident = this.input.slice(next, pos); - if (!keywordRelationalOperator.test(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.options.ecmaVersion < 8 || !this.isContextual("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(context, topLevel, exports) { - var starttype = this.type, node = this.startNode(), kind; - - if (this.isLet(context)) { - starttype = types._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 types._break: case types._continue: return this.parseBreakContinueStatement(node, starttype.keyword) - case types._debugger: return this.parseDebuggerStatement(node) - case types._do: return this.parseDoStatement(node) - case types._for: return this.parseForStatement(node) - case types._function: - // Function as sole body of either an if statement or a labeled statement - // works, but not when it is part of a labeled statement that is the sole - // body of an if statement. - if ((context && (this.strict || context !== "if" && context !== "label")) && this.options.ecmaVersion >= 6) { this.unexpected(); } - return this.parseFunctionStatement(node, false, !context) - case types._class: - if (context) { this.unexpected(); } - return this.parseClass(node, true) - case types._if: return this.parseIfStatement(node) - case types._return: return this.parseReturnStatement(node) - case types._switch: return this.parseSwitchStatement(node) - case types._throw: return this.parseThrowStatement(node) - case types._try: return this.parseTryStatement(node) - case types._const: case types._var: - kind = kind || this.value; - if (context && kind !== "var") { this.unexpected(); } - return this.parseVarStatement(node, kind) - case types._while: return this.parseWhileStatement(node) - case types._with: return this.parseWithStatement(node) - case types.braceL: return this.parseBlock(true, node) - case types.semi: return this.parseEmptyStatement(node) - case types._export: - case types._import: - if (!this.options.allowImportExportEverywhere) { - if (!topLevel) - { this.raise(this.start, "'import' and 'export' may only appear at the top level"); } - if (!this.inModule) - { this.raise(this.start, "'import' and 'export' may appear only with 'sourceType: module'"); } + // Properties of the current token: + // Its type + this.type = types.eof; + // For tokens that include more information than their type, the value + this.value = null; + // Its start and end offset + this.start = this.end = this.pos; + // And, if locations are used, the {line, column} object + // corresponding to those offsets + this.startLoc = this.endLoc = this.curPosition(); + + // Position information for the previous token + this.lastTokEndLoc = this.lastTokStartLoc = null; + this.lastTokStart = this.lastTokEnd = this.pos; + + // The context stack is used to superficially track syntactic + // context to predict whether a regular expression is allowed in a + // given position. + this.context = this.initialContext(); + this.exprAllowed = true; + + // Figure out if it's a module code. + this.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; + + // Positions to delayed-check that yield/await does not exist in default parameters. + this.yieldPos = this.awaitPos = this.awaitIdentPos = 0; + // Labels in scope. + this.labels = []; + // Thus-far undefined exports. + this.undefinedExports = {}; + + // If enabled, skip leading hashbang line. + if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === "#!") + { this.skipLineComment(2); } + + // Scope tracking for duplicate variable names (see scope.js) + this.scopeStack = []; + this.enterScope(SCOPE_TOP); + + // For RegExp validation + this.regexpState = null; + }; + + var prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true } }; + + Parser.prototype.parse = function parse () { + var node = this.options.program || this.startNode(); + this.nextToken(); + return this.parseTopLevel(node) + }; + + prototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 }; + prototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 }; + prototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 }; + prototypeAccessors.allowSuper.get = function () { return (this.currentThisScope().flags & SCOPE_SUPER) > 0 }; + prototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 }; + prototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) }; + + // Switch to a getter for 7.0.0. + Parser.prototype.inNonArrowFunction = function inNonArrowFunction () { return (this.currentThisScope().flags & SCOPE_FUNCTION) > 0 }; + + Parser.extend = function extend () { + var plugins = [], len = arguments.length; + while ( len-- ) plugins[ len ] = arguments[ len ]; + + var cls = this; + for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); } + return cls + }; + + Parser.parse = function parse (input, options) { + return new this(options, input).parse() + }; + + Parser.parseExpressionAt = function parseExpressionAt (input, pos, options) { + var parser = new this(options, input, pos); + parser.nextToken(); + return parser.parseExpression() + }; + + Parser.tokenizer = function tokenizer (input, options) { + return new this(options, input) + }; + + Object.defineProperties( Parser.prototype, prototypeAccessors ); + + var pp = Parser.prototype; + + // ## Parser utilities + + var literal = /^(?:'((?:\\.|[^'])*?)'|"((?:\\.|[^"])*?)")/; + pp.strictDirective = function(start) { + for (;;) { + // Try to find string literal. + skipWhiteSpace.lastIndex = start; + start += skipWhiteSpace.exec(this.input)[0].length; + var match = literal.exec(this.input.slice(start)); + if (!match) { return false } + if ((match[1] || match[2]) === "use strict") { return true } + start += match[0].length; + + // Skip semicolon, if any. + skipWhiteSpace.lastIndex = start; + start += skipWhiteSpace.exec(this.input)[0].length; + if (this.input[start] === ";") + { start++; } } - return starttype === types._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()) { - if (context) { this.unexpected(); } + // 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 this.parseFunctionStatement(node, true, !context) + return true + } else { + return false } + }; - var maybeName = this.value, expr = this.parseExpression(); - if (starttype === types.name && expr.type === "Identifier" && this.eat(types.colon)) - { return this.parseLabeledStatement(node, maybeName, expr, context) } - else { return this.parseExpressionStatement(node, expr) } - } -}; + // Tests whether parsed token is a contextual keyword. -pp$1.parseBreakContinueStatement = function(node, keyword) { - var this$1 = this; + pp.isContextual = function(name) { + return this.type === types.name && this.value === name && !this.containsEsc + }; - var isBreak = keyword === "break"; - this.next(); - if (this.eat(types.semi) || this.insertSemicolon()) { node.label = null; } - else if (this.type !== types.name) { this.unexpected(); } - else { - node.label = this.parseIdent(); - this.semicolon(); - } + // Consumes contextual keyword if possible. - // Verify that there is an actual destination to break or - // continue to. - var i = 0; - for (; 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("do"); - this.labels.pop(); - this.expect(types._while); - node.test = this.parseParenExpression(); - if (this.options.ecmaVersion >= 6) - { this.eat(types.semi); } - else - { this.semicolon(); } - return this.finishNode(node, "DoWhileStatement") -}; - -// Disambiguating between a `for` and a `for`/`in` or `for`/`of` -// loop is non-trivial. Basically, we have to parse the init `var` -// statement or expression, disallowing the `in` operator (see -// the second parameter to `parseExpression`), and then check -// whether the next token is `in` or `of`. When there is no init -// part (semicolon immediately after the opening parenthesis), it -// is a regular `for` loop. - -pp$1.parseForStatement = function(node) { - this.next(); - var awaitAt = (this.options.ecmaVersion >= 9 && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction)) && this.eatContextual("await")) ? this.lastTokStart : -1; - this.labels.push(loopLabel); - this.enterScope(0); - this.expect(types.parenL); - if (this.type === types.semi) { - if (awaitAt > -1) { this.unexpected(awaitAt); } - return this.parseFor(node, null) - } - var isLet = this.isLet(); - if (this.type === types._var || this.type === types._const || isLet) { - var init$1 = this.startNode(), kind = isLet ? "let" : this.value; + pp.eatContextual = function(name) { + if (!this.isContextual(name)) { return false } this.next(); - this.parseVar(init$1, true, kind); - this.finishNode(init$1, "VariableDeclaration"); - if ((this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) && init$1.declarations.length === 1 && - !(kind !== "var" && init$1.declarations[0].init)) { + return true + }; + + // 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 === types.eof || + this.type === types.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(types.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"); + }; + + function DestructuringErrors() { + this.shorthandAssign = + this.trailingComma = + this.parenthesizedAssign = + this.parenthesizedBind = + this.doubleProto = + -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) { + if (!refDestructuringErrors) { return false } + var shorthandAssign = refDestructuringErrors.shorthandAssign; + var doubleProto = refDestructuringErrors.doubleProto; + if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 } + if (shorthandAssign >= 0) + { this.raise(shorthandAssign, "Shorthand property assignments are valid only in destructuring patterns"); } + if (doubleProto >= 0) + { this.raiseRecoverable(doubleProto, "Redefinition of __proto__ property"); } + }; + + 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 exports = {}; + if (!node.body) { node.body = []; } + while (this.type !== types.eof) { + var stmt = this.parseStatement(null, true, exports); + node.body.push(stmt); + } + if (this.inModule) + { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1) + { + var name = list[i]; + + this.raiseRecoverable(this.undefinedExports[name].start, ("Export '" + name + "' is not defined")); + } } + this.adaptDirectivePrologue(node.body); + this.next(); + node.sourceType = this.options.sourceType; + return this.finishNode(node, "Program") + }; + + var loopLabel = {kind: "loop"}, switchLabel = {kind: "switch"}; + + pp$1.isLet = function(context) { + if (this.options.ecmaVersion < 6 || !this.isContextual("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); + // For ambiguous cases, determine if a LexicalDeclaration (or only a + // Statement) is allowed here. If context is not empty then only a Statement + // is allowed. However, `let [` is an explicit negative lookahead for + // ExpressionStatement, so special-case it first. + if (nextCh === 91) { return true } // '[' + if (context) { return false } + + if (nextCh === 123) { return true } // '{' + if (isIdentifierStart(nextCh, true)) { + var pos = next + 1; + while (isIdentifierChar(this.input.charCodeAt(pos), true)) { ++pos; } + var ident = this.input.slice(next, pos); + if (!keywordRelationalOperator.test(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.options.ecmaVersion < 8 || !this.isContextual("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(context, topLevel, exports) { + var starttype = this.type, node = this.startNode(), kind; + + if (this.isLet(context)) { + starttype = types._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 types._break: case types._continue: return this.parseBreakContinueStatement(node, starttype.keyword) + case types._debugger: return this.parseDebuggerStatement(node) + case types._do: return this.parseDoStatement(node) + case types._for: return this.parseForStatement(node) + case types._function: + // Function as sole body of either an if statement or a labeled statement + // works, but not when it is part of a labeled statement that is the sole + // body of an if statement. + if ((context && (this.strict || context !== "if" && context !== "label")) && this.options.ecmaVersion >= 6) { this.unexpected(); } + return this.parseFunctionStatement(node, false, !context) + case types._class: + if (context) { this.unexpected(); } + return this.parseClass(node, true) + case types._if: return this.parseIfStatement(node) + case types._return: return this.parseReturnStatement(node) + case types._switch: return this.parseSwitchStatement(node) + case types._throw: return this.parseThrowStatement(node) + case types._try: return this.parseTryStatement(node) + case types._const: case types._var: + kind = kind || this.value; + if (context && kind !== "var") { this.unexpected(); } + return this.parseVarStatement(node, kind) + case types._while: return this.parseWhileStatement(node) + case types._with: return this.parseWithStatement(node) + case types.braceL: return this.parseBlock(true, node) + case types.semi: return this.parseEmptyStatement(node) + case types._export: + case types._import: + if (this.options.ecmaVersion > 10 && starttype === types._import) { + skipWhiteSpace.lastIndex = this.pos; + var skip = skipWhiteSpace.exec(this.input); + var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next); + if (nextCh === 40) // '(' + { return this.parseExpressionStatement(node, this.parseExpression()) } + } + + 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 === types._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()) { + if (context) { this.unexpected(); } + this.next(); + return this.parseFunctionStatement(node, true, !context) + } + + var maybeName = this.value, expr = this.parseExpression(); + if (starttype === types.name && expr.type === "Identifier" && this.eat(types.colon)) + { return this.parseLabeledStatement(node, maybeName, expr, context) } + else { return this.parseExpressionStatement(node, expr) } + } + }; + + pp$1.parseBreakContinueStatement = function(node, keyword) { + var isBreak = keyword === "break"; + this.next(); + if (this.eat(types.semi) || this.insertSemicolon()) { node.label = null; } + else if (this.type !== types.name) { this.unexpected(); } + else { + node.label = this.parseIdent(); + this.semicolon(); + } + + // Verify that there is an actual destination to break or + // continue to. + var i = 0; + for (; i < this.labels.length; ++i) { + var lab = this.labels[i]; + if (node.label == null || lab.name === node.label.name) { + if (lab.kind != null && (isBreak || lab.kind === "loop")) { break } + if (node.label && isBreak) { break } + } + } + if (i === this.labels.length) { this.raise(node.start, "Unsyntactic " + keyword); } + return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement") + }; + + pp$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("do"); + this.labels.pop(); + this.expect(types._while); + node.test = this.parseParenExpression(); + if (this.options.ecmaVersion >= 6) + { this.eat(types.semi); } + else + { this.semicolon(); } + return this.finishNode(node, "DoWhileStatement") + }; + + // Disambiguating between a `for` and a `for`/`in` or `for`/`of` + // loop is non-trivial. Basically, we have to parse the init `var` + // statement or expression, disallowing the `in` operator (see + // the second parameter to `parseExpression`), and then check + // whether the next token is `in` or `of`. When there is no init + // part (semicolon immediately after the opening parenthesis), it + // is a regular `for` loop. + + pp$1.parseForStatement = function(node) { + this.next(); + var awaitAt = (this.options.ecmaVersion >= 9 && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction)) && this.eatContextual("await")) ? this.lastTokStart : -1; + this.labels.push(loopLabel); + this.enterScope(0); + this.expect(types.parenL); + if (this.type === types.semi) { + if (awaitAt > -1) { this.unexpected(awaitAt); } + return this.parseFor(node, null) + } + var isLet = this.isLet(); + if (this.type === types._var || this.type === types._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 === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) && init$1.declarations.length === 1) { + if (this.options.ecmaVersion >= 9) { + if (this.type === types._in) { + if (awaitAt > -1) { this.unexpected(awaitAt); } + } else { node.await = awaitAt > -1; } + } + return this.parseForIn(node, init$1) + } + if (awaitAt > -1) { this.unexpected(awaitAt); } + return this.parseFor(node, init$1) + } + var refDestructuringErrors = new DestructuringErrors; + var init = this.parseExpression(true, refDestructuringErrors); + if (this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) { if (this.options.ecmaVersion >= 9) { if (this.type === types._in) { if (awaitAt > -1) { this.unexpected(awaitAt); } } else { node.await = awaitAt > -1; } } - return this.parseForIn(node, init$1) + this.toAssignable(init, false, refDestructuringErrors); + this.checkLVal(init); + return this.parseForIn(node, init) + } else { + this.checkExpressionErrors(refDestructuringErrors, true); } if (awaitAt > -1) { this.unexpected(awaitAt); } - return this.parseFor(node, init$1) - } - var refDestructuringErrors = new DestructuringErrors; - var init = this.parseExpression(true, refDestructuringErrors); - if (this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) { - if (this.options.ecmaVersion >= 9) { - if (this.type === types._in) { - if (awaitAt > -1) { this.unexpected(awaitAt); } - } else { node.await = awaitAt > -1; } - } - this.toAssignable(init, false, refDestructuringErrors); - this.checkLVal(init); - return this.parseForIn(node, init) - } else { - this.checkExpressionErrors(refDestructuringErrors, true); - } - if (awaitAt > -1) { this.unexpected(awaitAt); } - return this.parseFor(node, init) -}; - -pp$1.parseFunctionStatement = function(node, isAsync, declarationPosition) { - this.next(); - return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync) -}; - -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("if"); - node.alternate = this.eat(types._else) ? this.parseStatement("if") : 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(types.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(types.braceL); - this.labels.push(switchLabel); - this.enterScope(0); - - // Statements under must be grouped (by label) in SwitchCase - // nodes. `cur` is used to keep the node that we are currently - // adding statements to. - - var cur; - for (var sawDefault = false; this.type !== types.braceR;) { - if (this$1.type === types._case || this$1.type === types._default) { - var isCase = this$1.type === types._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(types.colon); - } else { - if (!cur) { this$1.unexpected(); } - cur.consequent.push(this$1.parseStatement(null)); - } - } - this.exitScope(); - 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 === types._catch) { - var clause = this.startNode(); - this.next(); - if (this.eat(types.parenL)) { - clause.param = this.parseBindingAtom(); - var simple = clause.param.type === "Identifier"; - this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0); - this.checkLVal(clause.param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL); - this.expect(types.parenR); - } else { - if (this.options.ecmaVersion < 10) { this.unexpected(); } - clause.param = null; - this.enterScope(0); - } - clause.body = this.parseBlock(false); - this.exitScope(); - node.handler = this.finishNode(clause, "CatchClause"); - } - node.finalizer = this.eat(types._finally) ? this.parseBlock() : null; - if (!node.handler && !node.finalizer) - { this.raise(node.start, "Missing catch or finally clause"); } - return this.finishNode(node, "TryStatement") -}; - -pp$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("while"); - 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("with"); - return this.finishNode(node, "WithStatement") -}; - -pp$1.parseEmptyStatement = function(node) { - this.next(); - return this.finishNode(node, "EmptyStatement") -}; - -pp$1.parseLabeledStatement = function(node, maybeName, expr, context) { - var this$1 = this; - - for (var i$1 = 0, list = this$1.labels; i$1 < list.length; i$1 += 1) - { - var label = list[i$1]; - - if (label.name === maybeName) - { this$1.raise(expr.start, "Label '" + maybeName + "' is already declared"); - } } - var kind = this.type.isLoop ? "loop" : this.type === types._switch ? "switch" : null; - for (var i = this.labels.length - 1; i >= 0; i--) { - var label$1 = this$1.labels[i]; - if (label$1.statementStart === node.start) { - // Update information about previous labels on this node - label$1.statementStart = this$1.start; - label$1.kind = kind; - } else { break } - } - this.labels.push({name: maybeName, kind: kind, statementStart: this.start}); - node.body = this.parseStatement(context ? context.indexOf("label") === -1 ? context + "label" : context : "label"); - 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(createNewLexicalScope, node) { - var this$1 = this; - if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true; - if ( node === void 0 ) node = this.startNode(); - - node.body = []; - this.expect(types.braceL); - if (createNewLexicalScope) { this.enterScope(0); } - while (!this.eat(types.braceR)) { - var stmt = this$1.parseStatement(null); - node.body.push(stmt); - } - if (createNewLexicalScope) { this.exitScope(); } - 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(types.semi); - node.test = this.type === types.semi ? null : this.parseExpression(); - this.expect(types.semi); - node.update = this.type === types.parenR ? null : this.parseExpression(); - this.expect(types.parenR); - node.body = this.parseStatement("for"); - this.exitScope(); - 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 === types._in ? "ForInStatement" : "ForOfStatement"; - this.next(); - if (type === "ForInStatement") { - if (init.type === "AssignmentPattern" || - (init.type === "VariableDeclaration" && init.declarations[0].init != null && - (this.strict || init.declarations[0].id.type !== "Identifier"))) - { this.raise(init.start, "Invalid assignment in for-in loop head"); } - } - node.left = init; - node.right = type === "ForInStatement" ? this.parseExpression() : this.parseMaybeAssign(); - this.expect(types.parenR); - node.body = this.parseStatement("for"); - this.exitScope(); - 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, kind); - if (this$1.eat(types.eq)) { - decl.init = this$1.parseMaybeAssign(isFor); - } else if (kind === "const" && !(this$1.type === types._in || (this$1.options.ecmaVersion >= 6 && this$1.isContextual("of")))) { - this$1.unexpected(); - } else if (decl.id.type !== "Identifier" && !(isFor && (this$1.type === types._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(types.comma)) { break } - } - return node -}; - -pp$1.parseVarId = function(decl, kind) { - if ((kind === "const" || kind === "let") && this.isContextual("let")) { - this.raiseRecoverable(this.start, "let is disallowed as a lexically bound name"); - } - decl.id = this.parseBindingAtom(); - this.checkLVal(decl.id, kind === "var" ? BIND_VAR : BIND_LEXICAL, false); -}; - -var FUNC_STATEMENT = 1; -var FUNC_HANGING_STATEMENT = 2; -var FUNC_NULLABLE_ID = 4; - -// Parse a function declaration or literal (depending on the -// `statement & FUNC_STATEMENT`). - -// Remove `allowExpressionBody` for 7.0.0, as it is only called with false -pp$1.parseFunction = function(node, statement, allowExpressionBody, isAsync) { - this.initFunction(node); - if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) { - if (this.type === types.star && (statement & FUNC_HANGING_STATEMENT)) - { this.unexpected(); } - node.generator = this.eat(types.star); - } - if (this.options.ecmaVersion >= 8) - { node.async = !!isAsync; } - - if (statement & FUNC_STATEMENT) { - node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types.name ? null : this.parseIdent(); - if (node.id && !(statement & FUNC_HANGING_STATEMENT)) - // If it is a regular function declaration in sloppy mode, then it is - // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding - // mode depends on properties of the current scope (see - // treatFunctionsAsVar). - { this.checkLVal(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); } - } - - var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos; - this.yieldPos = 0; - this.awaitPos = 0; - this.awaitIdentPos = 0; - this.enterScope(functionFlags(node.async, node.generator)); - - if (!(statement & FUNC_STATEMENT)) - { node.id = this.type === types.name ? this.parseIdent() : null; } - - this.parseFunctionParams(node); - this.parseFunctionBody(node, allowExpressionBody, false); - - this.yieldPos = oldYieldPos; - this.awaitPos = oldAwaitPos; - this.awaitIdentPos = oldAwaitIdentPos; - return this.finishNode(node, (statement & FUNC_STATEMENT) ? "FunctionDeclaration" : "FunctionExpression") -}; - -pp$1.parseFunctionParams = function(node) { - this.expect(types.parenL); - node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8); - 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(); - - // ecma-262 14.6 Class Definitions - // A class definition is always strict mode code. - var oldStrict = this.strict; - this.strict = true; - - this.parseClassId(node, isStatement); - this.parseClassSuper(node); - var classBody = this.startNode(); - var hadConstructor = false; - classBody.body = []; - this.expect(types.braceL); - while (!this.eat(types.braceR)) { - var element = this$1.parseClassElement(node.superClass !== null); - if (element) { - classBody.body.push(element); - if (element.type === "MethodDefinition" && element.kind === "constructor") { - if (hadConstructor) { this$1.raise(element.start, "Duplicate constructor in the same class"); } - hadConstructor = true; - } - } - } - node.body = this.finishNode(classBody, "ClassBody"); - this.strict = oldStrict; - return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression") -}; - -pp$1.parseClassElement = function(constructorAllowsSuper) { - var this$1 = this; - - if (this.eat(types.semi)) { return null } - - var method = this.startNode(); - var tryContextual = function (k, noLineBreak) { - if ( noLineBreak === void 0 ) noLineBreak = false; - - var start = this$1.start, startLoc = this$1.startLoc; - if (!this$1.eatContextual(k)) { return false } - if (this$1.type !== types.parenL && (!noLineBreak || !this$1.canInsertSemicolon())) { return true } - if (method.key) { this$1.unexpected(); } - method.computed = false; - method.key = this$1.startNodeAt(start, startLoc); - method.key.name = k; - this$1.finishNode(method.key, "Identifier"); - return false + return this.parseFor(node, init) }; - method.kind = "method"; - method.static = tryContextual("static"); - var isGenerator = this.eat(types.star); - var isAsync = false; - if (!isGenerator) { - if (this.options.ecmaVersion >= 8 && tryContextual("async", true)) { - isAsync = true; - isGenerator = this.options.ecmaVersion >= 9 && this.eat(types.star); - } else if (tryContextual("get")) { - method.kind = "get"; - } else if (tryContextual("set")) { - method.kind = "set"; + pp$1.parseFunctionStatement = function(node, isAsync, declarationPosition) { + this.next(); + return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync) + }; + + 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("if"); + node.alternate = this.eat(types._else) ? this.parseStatement("if") : 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(types.semi) || this.insertSemicolon()) { node.argument = null; } + else { node.argument = this.parseExpression(); this.semicolon(); } + return this.finishNode(node, "ReturnStatement") + }; + + pp$1.parseSwitchStatement = function(node) { + this.next(); + node.discriminant = this.parseParenExpression(); + node.cases = []; + this.expect(types.braceL); + this.labels.push(switchLabel); + this.enterScope(0); + + // Statements under must be grouped (by label) in SwitchCase + // nodes. `cur` is used to keep the node that we are currently + // adding statements to. + + var cur; + for (var sawDefault = false; this.type !== types.braceR;) { + if (this.type === types._case || this.type === types._default) { + var isCase = this.type === types._case; + if (cur) { this.finishNode(cur, "SwitchCase"); } + node.cases.push(cur = this.startNode()); + cur.consequent = []; + this.next(); + if (isCase) { + cur.test = this.parseExpression(); + } else { + if (sawDefault) { this.raiseRecoverable(this.lastTokStart, "Multiple default clauses"); } + sawDefault = true; + cur.test = null; + } + this.expect(types.colon); + } else { + if (!cur) { this.unexpected(); } + cur.consequent.push(this.parseStatement(null)); + } } - } - if (!method.key) { this.parsePropertyName(method); } - var key = method.key; - var allowsDirectSuper = false; - if (!method.computed && !method.static && (key.type === "Identifier" && key.name === "constructor" || - key.type === "Literal" && key.value === "constructor")) { - if (method.kind !== "method") { this.raise(key.start, "Constructor can't have get/set modifier"); } - if (isGenerator) { this.raise(key.start, "Constructor can't be a generator"); } - if (isAsync) { this.raise(key.start, "Constructor can't be an async method"); } - method.kind = "constructor"; - allowsDirectSuper = constructorAllowsSuper; - } else if (method.static && key.type === "Identifier" && key.name === "prototype") { - this.raise(key.start, "Classes may not have a static property named prototype"); - } - this.parseClassMethod(method, isGenerator, isAsync, allowsDirectSuper); - if (method.kind === "get" && method.value.params.length !== 0) - { this.raiseRecoverable(method.value.start, "getter should have no params"); } - if (method.kind === "set" && method.value.params.length !== 1) - { this.raiseRecoverable(method.value.start, "setter should have exactly one param"); } - if (method.kind === "set" && method.value.params[0].type === "RestElement") - { this.raiseRecoverable(method.value.params[0].start, "Setter cannot use rest params"); } - return method -}; + this.exitScope(); + if (cur) { this.finishNode(cur, "SwitchCase"); } + this.next(); // Closing brace + this.labels.pop(); + return this.finishNode(node, "SwitchStatement") + }; -pp$1.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) { - method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper); - return this.finishNode(method, "MethodDefinition") -}; - -pp$1.parseClassId = function(node, isStatement) { - if (this.type === types.name) { - node.id = this.parseIdent(); - if (isStatement) - { this.checkLVal(node.id, BIND_LEXICAL, false); } - } else { - if (isStatement === true) - { this.unexpected(); } - node.id = null; - } -}; - -pp$1.parseClassSuper = function(node) { - node.superClass = this.eat(types._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(types.star)) { - this.expectContextual("from"); - if (this.type !== types.string) { this.unexpected(); } - node.source = this.parseExprAtom(); + 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, "ExportAllDeclaration") - } - if (this.eat(types._default)) { // export default ... - this.checkExport(exports, "default", this.lastTokStart); - var isAsync; - if (this.type === types._function || (isAsync = this.isAsyncFunction())) { - var fNode = this.startNode(); + 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 === types._catch) { + var clause = this.startNode(); this.next(); - if (isAsync) { this.next(); } - node.declaration = this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync); - } else if (this.type === types._class) { - var cNode = this.startNode(); - node.declaration = this.parseClass(cNode, "nullableID"); - } else { - node.declaration = this.parseMaybeAssign(); - this.semicolon(); + if (this.eat(types.parenL)) { + clause.param = this.parseBindingAtom(); + var simple = clause.param.type === "Identifier"; + this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0); + this.checkLVal(clause.param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL); + this.expect(types.parenR); + } else { + if (this.options.ecmaVersion < 10) { this.unexpected(); } + clause.param = null; + this.enterScope(0); + } + clause.body = this.parseBlock(false); + this.exitScope(); + node.handler = this.finishNode(clause, "CatchClause"); } - return this.finishNode(node, "ExportDefaultDeclaration") - } - // export var|const|let|function|class ... - if (this.shouldParseExportStatement()) { - node.declaration = this.parseStatement(null); - 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.finalizer = this.eat(types._finally) ? this.parseBlock() : null; + if (!node.handler && !node.finalizer) + { this.raise(node.start, "Missing catch or finally clause"); } + return this.finishNode(node, "TryStatement") + }; + + pp$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("while"); + 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("with"); + return this.finishNode(node, "WithStatement") + }; + + pp$1.parseEmptyStatement = function(node) { + this.next(); + return this.finishNode(node, "EmptyStatement") + }; + + pp$1.parseLabeledStatement = function(node, maybeName, expr, context) { + for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1) + { + var label = list[i$1]; + + if (label.name === maybeName) + { this.raise(expr.start, "Label '" + maybeName + "' is already declared"); + } } + var kind = this.type.isLoop ? "loop" : this.type === types._switch ? "switch" : null; + for (var i = this.labels.length - 1; i >= 0; i--) { + var label$1 = this.labels[i]; + if (label$1.statementStart === node.start) { + // Update information about previous labels on this node + label$1.statementStart = this.start; + label$1.kind = kind; + } else { break } + } + this.labels.push({name: maybeName, kind: kind, statementStart: this.start}); + node.body = this.parseStatement(context ? context.indexOf("label") === -1 ? context + "label" : context : "label"); + 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(createNewLexicalScope, node) { + if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true; + if ( node === void 0 ) node = this.startNode(); + + node.body = []; + this.expect(types.braceL); + if (createNewLexicalScope) { this.enterScope(0); } + while (!this.eat(types.braceR)) { + var stmt = this.parseStatement(null); + node.body.push(stmt); + } + if (createNewLexicalScope) { this.exitScope(); } + 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(types.semi); + node.test = this.type === types.semi ? null : this.parseExpression(); + this.expect(types.semi); + node.update = this.type === types.parenR ? null : this.parseExpression(); + this.expect(types.parenR); + node.body = this.parseStatement("for"); + this.exitScope(); + 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 isForIn = this.type === types._in; + this.next(); + + if ( + init.type === "VariableDeclaration" && + init.declarations[0].init != null && + ( + !isForIn || + this.options.ecmaVersion < 8 || + this.strict || + init.kind !== "var" || + init.declarations[0].id.type !== "Identifier" + ) + ) { + this.raise( + init.start, + ((isForIn ? "for-in" : "for-of") + " loop variable declaration may not have an initializer") + ); + } else if (init.type === "AssignmentPattern") { + this.raise(init.start, "Invalid left-hand side in for-loop"); + } + node.left = init; + node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign(); + this.expect(types.parenR); + node.body = this.parseStatement("for"); + this.exitScope(); + this.labels.pop(); + return this.finishNode(node, isForIn ? "ForInStatement" : "ForOfStatement") + }; + + // Parse a list of variable declarations. + + pp$1.parseVar = function(node, isFor, kind) { + node.declarations = []; + node.kind = kind; + for (;;) { + var decl = this.startNode(); + this.parseVarId(decl, kind); + if (this.eat(types.eq)) { + decl.init = this.parseMaybeAssign(isFor); + } else if (kind === "const" && !(this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of")))) { + this.unexpected(); + } else if (decl.id.type !== "Identifier" && !(isFor && (this.type === types._in || this.isContextual("of")))) { + this.raise(this.lastTokEnd, "Complex binding patterns require an initialization value"); + } else { + decl.init = null; + } + node.declarations.push(this.finishNode(decl, "VariableDeclarator")); + if (!this.eat(types.comma)) { break } + } + return node + }; + + pp$1.parseVarId = function(decl, kind) { + decl.id = this.parseBindingAtom(); + this.checkLVal(decl.id, kind === "var" ? BIND_VAR : BIND_LEXICAL, false); + }; + + var FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4; + + // Parse a function declaration or literal (depending on the + // `statement & FUNC_STATEMENT`). + + // Remove `allowExpressionBody` for 7.0.0, as it is only called with false + pp$1.parseFunction = function(node, statement, allowExpressionBody, isAsync) { + this.initFunction(node); + if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) { + if (this.type === types.star && (statement & FUNC_HANGING_STATEMENT)) + { this.unexpected(); } + node.generator = this.eat(types.star); + } + if (this.options.ecmaVersion >= 8) + { node.async = !!isAsync; } + + if (statement & FUNC_STATEMENT) { + node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types.name ? null : this.parseIdent(); + if (node.id && !(statement & FUNC_HANGING_STATEMENT)) + // If it is a regular function declaration in sloppy mode, then it is + // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding + // mode depends on properties of the current scope (see + // treatFunctionsAsVar). + { this.checkLVal(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); } + } + + var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos; + this.yieldPos = 0; + this.awaitPos = 0; + this.awaitIdentPos = 0; + this.enterScope(functionFlags(node.async, node.generator)); + + if (!(statement & FUNC_STATEMENT)) + { node.id = this.type === types.name ? this.parseIdent() : null; } + + this.parseFunctionParams(node); + this.parseFunctionBody(node, allowExpressionBody, false); + + this.yieldPos = oldYieldPos; + this.awaitPos = oldAwaitPos; + this.awaitIdentPos = oldAwaitIdentPos; + return this.finishNode(node, (statement & FUNC_STATEMENT) ? "FunctionDeclaration" : "FunctionExpression") + }; + + pp$1.parseFunctionParams = function(node) { + this.expect(types.parenL); + node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8); + this.checkYieldAwaitInDefaultParams(); + }; + + // Parse a class declaration or literal (depending on the + // `isStatement` parameter). + + pp$1.parseClass = function(node, isStatement) { + this.next(); + + // ecma-262 14.6 Class Definitions + // A class definition is always strict mode code. + var oldStrict = this.strict; + this.strict = true; + + this.parseClassId(node, isStatement); + this.parseClassSuper(node); + var classBody = this.startNode(); + var hadConstructor = false; + classBody.body = []; + this.expect(types.braceL); + while (!this.eat(types.braceR)) { + var element = this.parseClassElement(node.superClass !== null); + if (element) { + classBody.body.push(element); + if (element.type === "MethodDefinition" && element.kind === "constructor") { + if (hadConstructor) { this.raise(element.start, "Duplicate constructor in the same class"); } + hadConstructor = true; + } + } + } + node.body = this.finishNode(classBody, "ClassBody"); + this.strict = oldStrict; + return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression") + }; + + pp$1.parseClassElement = function(constructorAllowsSuper) { + var this$1 = this; + + if (this.eat(types.semi)) { return null } + + var method = this.startNode(); + var tryContextual = function (k, noLineBreak) { + if ( noLineBreak === void 0 ) noLineBreak = false; + + var start = this$1.start, startLoc = this$1.startLoc; + if (!this$1.eatContextual(k)) { return false } + if (this$1.type !== types.parenL && (!noLineBreak || !this$1.canInsertSemicolon())) { return true } + if (method.key) { this$1.unexpected(); } + method.computed = false; + method.key = this$1.startNodeAt(start, startLoc); + method.key.name = k; + this$1.finishNode(method.key, "Identifier"); + return false + }; + + method.kind = "method"; + method.static = tryContextual("static"); + var isGenerator = this.eat(types.star); + var isAsync = false; + if (!isGenerator) { + if (this.options.ecmaVersion >= 8 && tryContextual("async", true)) { + isAsync = true; + isGenerator = this.options.ecmaVersion >= 9 && this.eat(types.star); + } else if (tryContextual("get")) { + method.kind = "get"; + } else if (tryContextual("set")) { + method.kind = "set"; + } + } + if (!method.key) { this.parsePropertyName(method); } + var key = method.key; + var allowsDirectSuper = false; + if (!method.computed && !method.static && (key.type === "Identifier" && key.name === "constructor" || + key.type === "Literal" && key.value === "constructor")) { + if (method.kind !== "method") { this.raise(key.start, "Constructor can't have get/set modifier"); } + if (isGenerator) { this.raise(key.start, "Constructor can't be a generator"); } + if (isAsync) { this.raise(key.start, "Constructor can't be an async method"); } + method.kind = "constructor"; + allowsDirectSuper = constructorAllowsSuper; + } else if (method.static && key.type === "Identifier" && key.name === "prototype") { + this.raise(key.start, "Classes may not have a static property named prototype"); + } + this.parseClassMethod(method, isGenerator, isAsync, allowsDirectSuper); + if (method.kind === "get" && method.value.params.length !== 0) + { this.raiseRecoverable(method.value.start, "getter should have no params"); } + if (method.kind === "set" && method.value.params.length !== 1) + { this.raiseRecoverable(method.value.start, "setter should have exactly one param"); } + if (method.kind === "set" && method.value.params[0].type === "RestElement") + { this.raiseRecoverable(method.value.params[0].start, "Setter cannot use rest params"); } + return method + }; + + pp$1.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) { + method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper); + return this.finishNode(method, "MethodDefinition") + }; + + pp$1.parseClassId = function(node, isStatement) { + if (this.type === types.name) { + node.id = this.parseIdent(); + if (isStatement) + { this.checkLVal(node.id, BIND_LEXICAL, false); } + } else { + if (isStatement === true) + { this.unexpected(); } + node.id = null; + } + }; + + pp$1.parseClassSuper = function(node) { + node.superClass = this.eat(types._extends) ? this.parseExprSubscripts() : null; + }; + + // Parses module export declaration. + + pp$1.parseExport = function(node, exports) { + this.next(); + // export * from '...' + if (this.eat(types.star)) { + this.expectContextual("from"); if (this.type !== types.string) { this.unexpected(); } node.source = this.parseExprAtom(); - } else { - for (var i = 0, list = node.specifiers; i < list.length; i += 1) { - // check for keywords used as local names - var spec = list[i]; - - this$1.checkUnreserved(spec.local); - // check if export is defined - this$1.checkLocalExport(spec.local); + this.semicolon(); + return this.finishNode(node, "ExportAllDeclaration") + } + if (this.eat(types._default)) { // export default ... + this.checkExport(exports, "default", this.lastTokStart); + var isAsync; + if (this.type === types._function || (isAsync = this.isAsyncFunction())) { + var fNode = this.startNode(); + this.next(); + if (isAsync) { this.next(); } + node.declaration = this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync); + } else if (this.type === types._class) { + var cNode = this.startNode(); + node.declaration = this.parseClass(cNode, "nullableID"); + } 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(null); + 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")) { + if (this.type !== types.string) { this.unexpected(); } + node.source = this.parseExprAtom(); + } else { + for (var i = 0, list = node.specifiers; i < list.length; i += 1) { + // check for keywords used as local names + var spec = list[i]; + + this.checkUnreserved(spec.local); + // check if export is defined + this.checkLocalExport(spec.local); + } + + node.source = null; + } + this.semicolon(); + } + return this.finishNode(node, "ExportNamedDeclaration") + }; + + pp$1.checkExport = function(exports, name, pos) { + if (!exports) { return } + if (has(exports, name)) + { this.raiseRecoverable(pos, "Duplicate export '" + name + "'"); } + exports[name] = true; + }; + + pp$1.checkPatternExport = function(exports, pat) { + var type = pat.type; + if (type === "Identifier") + { this.checkExport(exports, pat.name, pat.start); } + else if (type === "ObjectPattern") + { for (var i = 0, list = pat.properties; i < list.length; i += 1) + { + var prop = list[i]; + + this.checkPatternExport(exports, prop); + } } + else if (type === "ArrayPattern") + { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) { + var elt = list$1[i$1]; + + if (elt) { this.checkPatternExport(exports, elt); } + } } + else if (type === "Property") + { this.checkPatternExport(exports, pat.value); } + else if (type === "AssignmentPattern") + { this.checkPatternExport(exports, pat.left); } + else if (type === "RestElement") + { this.checkPatternExport(exports, pat.argument); } + else if (type === "ParenthesizedExpression") + { this.checkPatternExport(exports, pat.expression); } + }; + + pp$1.checkVariableExport = function(exports, decls) { + if (!exports) { return } + for (var i = 0, list = decls; i < list.length; i += 1) + { + var decl = list[i]; + + this.checkPatternExport(exports, decl.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 nodes = [], first = true; + // export { x, y as z } [from '...'] + this.expect(types.braceL); + while (!this.eat(types.braceR)) { + if (!first) { + this.expect(types.comma); + if (this.afterTrailingComma(types.braceR)) { break } + } else { first = false; } + + var node = this.startNode(); + node.local = this.parseIdent(true); + node.exported = this.eatContextual("as") ? this.parseIdent(true) : node.local; + this.checkExport(exports, node.exported.name, node.exported.start); + nodes.push(this.finishNode(node, "ExportSpecifier")); + } + return nodes + }; + + // Parses import declaration. + + pp$1.parseImport = function(node) { + this.next(); + // import '...' + if (this.type === types.string) { + node.specifiers = empty; + node.source = this.parseExprAtom(); + } else { + node.specifiers = this.parseImportSpecifiers(); + this.expectContextual("from"); + node.source = this.type === types.string ? this.parseExprAtom() : this.unexpected(); } this.semicolon(); - } - return this.finishNode(node, "ExportNamedDeclaration") -}; + return this.finishNode(node, "ImportDeclaration") + }; -pp$1.checkExport = function(exports, name, pos) { - if (!exports) { return } - if (has(exports, name)) - { this.raiseRecoverable(pos, "Duplicate export '" + name + "'"); } - exports[name] = true; -}; + // Parses a comma-separated list of module imports. -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, list = pat.properties; i < list.length; i += 1) - { - var prop = list[i]; - - this$1.checkPatternExport(exports, prop); - } } - else if (type === "ArrayPattern") - { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) { - var elt = list$1[i$1]; - - if (elt) { this$1.checkPatternExport(exports, elt); } - } } - else if (type === "Property") - { this.checkPatternExport(exports, pat.value); } - else if (type === "AssignmentPattern") - { this.checkPatternExport(exports, pat.left); } - else if (type === "RestElement") - { this.checkPatternExport(exports, pat.argument); } - 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, list = decls; i < list.length; i += 1) - { - var decl = list[i]; - - this$1.checkPatternExport(exports, decl.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(types.braceL); - while (!this.eat(types.braceR)) { - if (!first) { - this$1.expect(types.comma); - if (this$1.afterTrailingComma(types.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 === types.string) { - node.specifiers = empty; - node.source = this.parseExprAtom(); - } else { - node.specifiers = this.parseImportSpecifiers(); - this.expectContextual("from"); - node.source = this.type === types.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 === types.name) { - // import defaultObj, { x, y as z } from '...' - var node = this.startNode(); - node.local = this.parseIdent(); - this.checkLVal(node.local, BIND_LEXICAL); - nodes.push(this.finishNode(node, "ImportDefaultSpecifier")); - if (!this.eat(types.comma)) { return nodes } - } - if (this.type === types.star) { - var node$1 = this.startNode(); - this.next(); - this.expectContextual("as"); - node$1.local = this.parseIdent(); - this.checkLVal(node$1.local, BIND_LEXICAL); - nodes.push(this.finishNode(node$1, "ImportNamespaceSpecifier")); - return nodes - } - this.expect(types.braceL); - while (!this.eat(types.braceR)) { - if (!first) { - this$1.expect(types.comma); - if (this$1.afterTrailingComma(types.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 { - this$1.checkUnreserved(node$2.imported); - node$2.local = node$2.imported; + pp$1.parseImportSpecifiers = function() { + var nodes = [], first = true; + if (this.type === types.name) { + // import defaultObj, { x, y as z } from '...' + var node = this.startNode(); + node.local = this.parseIdent(); + this.checkLVal(node.local, BIND_LEXICAL); + nodes.push(this.finishNode(node, "ImportDefaultSpecifier")); + if (!this.eat(types.comma)) { return nodes } } - this$1.checkLVal(node$2.local, BIND_LEXICAL); - nodes.push(this$1.finishNode(node$2, "ImportSpecifier")); - } - return nodes -}; + if (this.type === types.star) { + var node$1 = this.startNode(); + this.next(); + this.expectContextual("as"); + node$1.local = this.parseIdent(); + this.checkLVal(node$1.local, BIND_LEXICAL); + nodes.push(this.finishNode(node$1, "ImportNamespaceSpecifier")); + return nodes + } + this.expect(types.braceL); + while (!this.eat(types.braceR)) { + if (!first) { + this.expect(types.comma); + if (this.afterTrailingComma(types.braceR)) { break } + } else { first = false; } -// Set `ExpressionStatement#directive` property for directive prologues. -pp$1.adaptDirectivePrologue = function(statements) { - for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) { - statements[i].directive = statements[i].expression.raw.slice(1, -1); - } -}; -pp$1.isDirectiveCandidate = function(statement) { - return ( - statement.type === "ExpressionStatement" && - statement.expression.type === "Literal" && - typeof statement.expression.value === "string" && - // Reject parenthesized strings. - (this.input[statement.start] === "\"" || this.input[statement.start] === "'") - ) -}; + var node$2 = this.startNode(); + node$2.imported = this.parseIdent(true); + if (this.eatContextual("as")) { + node$2.local = this.parseIdent(); + } else { + this.checkUnreserved(node$2.imported); + node$2.local = node$2.imported; + } + this.checkLVal(node$2.local, BIND_LEXICAL); + nodes.push(this.finishNode(node$2, "ImportSpecifier")); + } + return nodes + }; -var pp$2 = Parser.prototype; + // Set `ExpressionStatement#directive` property for directive prologues. + pp$1.adaptDirectivePrologue = function(statements) { + for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) { + statements[i].directive = statements[i].expression.raw.slice(1, -1); + } + }; + pp$1.isDirectiveCandidate = function(statement) { + return ( + statement.type === "ExpressionStatement" && + statement.expression.type === "Literal" && + typeof statement.expression.value === "string" && + // Reject parenthesized strings. + (this.input[statement.start] === "\"" || this.input[statement.start] === "'") + ) + }; -// Convert existing expression atom to assignable pattern -// if possible. + var pp$2 = Parser.prototype; -pp$2.toAssignable = function(node, isBinding, refDestructuringErrors) { - var this$1 = this; + // Convert existing expression atom to assignable pattern + // if possible. - if (this.options.ecmaVersion >= 6 && node) { - switch (node.type) { + pp$2.toAssignable = function(node, isBinding, refDestructuringErrors) { + if (this.options.ecmaVersion >= 6 && node) { + switch (node.type) { + case "Identifier": + if (this.inAsync && node.name === "await") + { this.raise(node.start, "Cannot use 'await' as identifier inside an async function"); } + break + + case "ObjectPattern": + case "ArrayPattern": + case "RestElement": + break + + case "ObjectExpression": + node.type = "ObjectPattern"; + if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); } + for (var i = 0, list = node.properties; i < list.length; i += 1) { + var prop = list[i]; + + this.toAssignable(prop, isBinding); + // Early error: + // AssignmentRestProperty[Yield, Await] : + // `...` DestructuringAssignmentTarget[Yield, Await] + // + // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|. + if ( + prop.type === "RestElement" && + (prop.argument.type === "ArrayPattern" || prop.argument.type === "ObjectPattern") + ) { + this.raise(prop.argument.start, "Unexpected token"); + } + } + break + + case "Property": + // AssignmentProperty has type === "Property" + if (node.kind !== "init") { this.raise(node.key.start, "Object pattern can't contain getter or setter"); } + this.toAssignable(node.value, isBinding); + break + + case "ArrayExpression": + node.type = "ArrayPattern"; + if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); } + this.toAssignableList(node.elements, isBinding); + break + + case "SpreadElement": + node.type = "RestElement"; + this.toAssignable(node.argument, isBinding); + if (node.argument.type === "AssignmentPattern") + { this.raise(node.argument.start, "Rest elements cannot have a default value"); } + break + + case "AssignmentExpression": + if (node.operator !== "=") { this.raise(node.left.end, "Only '=' operator can be used for specifying default value."); } + node.type = "AssignmentPattern"; + delete node.operator; + this.toAssignable(node.left, isBinding); + // falls through to AssignmentPattern + + case "AssignmentPattern": + break + + case "ParenthesizedExpression": + this.toAssignable(node.expression, isBinding, refDestructuringErrors); + break + + case "MemberExpression": + if (!isBinding) { break } + + default: + this.raise(node.start, "Assigning to rvalue"); + } + } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); } + return node + }; + + // Convert list of expression atoms to binding list. + + pp$2.toAssignableList = function(exprList, isBinding) { + var end = exprList.length; + for (var i = 0; i < end; i++) { + var elt = exprList[i]; + if (elt) { this.toAssignable(elt, isBinding); } + } + if (end) { + var last = exprList[end - 1]; + if (this.options.ecmaVersion === 6 && isBinding && last && last.type === "RestElement" && last.argument.type !== "Identifier") + { this.unexpected(last.argument.start); } + } + 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.parseRestBinding = function() { + var node = this.startNode(); + this.next(); + + // RestElement inside of a function parameter must be an identifier + if (this.options.ecmaVersion === 6 && this.type !== types.name) + { this.unexpected(); } + + node.argument = this.parseBindingAtom(); + + return this.finishNode(node, "RestElement") + }; + + // Parses lvalue (assignable) atom. + + pp$2.parseBindingAtom = function() { + if (this.options.ecmaVersion >= 6) { + switch (this.type) { + case types.bracketL: + var node = this.startNode(); + this.next(); + node.elements = this.parseBindingList(types.bracketR, true, true); + return this.finishNode(node, "ArrayPattern") + + case types.braceL: + return this.parseObj(true) + } + } + return this.parseIdent() + }; + + pp$2.parseBindingList = function(close, allowEmpty, allowTrailingComma) { + var elts = [], first = true; + while (!this.eat(close)) { + if (first) { first = false; } + else { this.expect(types.comma); } + if (allowEmpty && this.type === types.comma) { + elts.push(null); + } else if (allowTrailingComma && this.afterTrailingComma(close)) { + break + } else if (this.type === types.ellipsis) { + var rest = this.parseRestBinding(); + this.parseBindingListItem(rest); + elts.push(rest); + if (this.type === types.comma) { this.raise(this.start, "Comma is not permitted after the rest element"); } + this.expect(close); + break + } else { + var elem = this.parseMaybeDefault(this.start, this.startLoc); + this.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(types.eq)) { return left } + var node = this.startNodeAt(startPos, startLoc); + node.left = left; + node.right = this.parseMaybeAssign(); + return this.finishNode(node, "AssignmentPattern") + }; + + // Verify that a node is an lval — something that can be assigned + // to. + // bindingType can be either: + // 'var' indicating that the lval creates a 'var' binding + // 'let' indicating that the lval creates a lexical ('let' or 'const') binding + // 'none' indicating that the binding should be checked for illegal identifiers, but not for duplicate references + + pp$2.checkLVal = function(expr, bindingType, checkClashes) { + if ( bindingType === void 0 ) bindingType = BIND_NONE; + + switch (expr.type) { case "Identifier": - if (this.inAsync && node.name === "await") - { this.raise(node.start, "Cannot use 'await' as identifier inside an async function"); } + if (bindingType === BIND_LEXICAL && expr.name === "let") + { this.raiseRecoverable(expr.start, "let is disallowed as a lexically bound name"); } + if (this.strict && this.reservedWordsStrictBind.test(expr.name)) + { this.raiseRecoverable(expr.start, (bindingType ? "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; + } + if (bindingType !== BIND_NONE && bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); } + break + + case "MemberExpression": + if (bindingType) { this.raiseRecoverable(expr.start, "Binding member expression"); } break case "ObjectPattern": - case "ArrayPattern": - case "RestElement": - break + for (var i = 0, list = expr.properties; i < list.length; i += 1) + { + var prop = list[i]; - case "ObjectExpression": - node.type = "ObjectPattern"; - if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); } - for (var i = 0, list = node.properties; i < list.length; i += 1) { - var prop = list[i]; - - this$1.toAssignable(prop, isBinding); - // Early error: - // AssignmentRestProperty[Yield, Await] : - // `...` DestructuringAssignmentTarget[Yield, Await] - // - // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|. - if ( - prop.type === "RestElement" && - (prop.argument.type === "ArrayPattern" || prop.argument.type === "ObjectPattern") - ) { - this$1.raise(prop.argument.start, "Unexpected token"); - } - } + this.checkLVal(prop, bindingType, checkClashes); + } break case "Property": // AssignmentProperty has type === "Property" - if (node.kind !== "init") { this.raise(node.key.start, "Object pattern can't contain getter or setter"); } - this.toAssignable(node.value, isBinding); + this.checkLVal(expr.value, bindingType, checkClashes); break - case "ArrayExpression": - node.type = "ArrayPattern"; - if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); } - this.toAssignableList(node.elements, isBinding); - break + case "ArrayPattern": + for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) { + var elem = list$1[i$1]; - case "SpreadElement": - node.type = "RestElement"; - this.toAssignable(node.argument, isBinding); - if (node.argument.type === "AssignmentPattern") - { this.raise(node.argument.start, "Rest elements cannot have a default value"); } + if (elem) { this.checkLVal(elem, bindingType, checkClashes); } + } break - case "AssignmentExpression": - if (node.operator !== "=") { this.raise(node.left.end, "Only '=' operator can be used for specifying default value."); } - node.type = "AssignmentPattern"; - delete node.operator; - this.toAssignable(node.left, isBinding); - // falls through to AssignmentPattern - case "AssignmentPattern": + this.checkLVal(expr.left, bindingType, checkClashes); + break + + case "RestElement": + this.checkLVal(expr.argument, bindingType, checkClashes); break case "ParenthesizedExpression": - this.toAssignable(node.expression, isBinding, refDestructuringErrors); + this.checkLVal(expr.expression, bindingType, checkClashes); break - case "MemberExpression": - if (!isBinding) { break } - default: - this.raise(node.start, "Assigning to rvalue"); + this.raise(expr.start, (bindingType ? "Binding" : "Assigning to") + " rvalue"); } - } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); } - return node -}; + }; -// Convert list of expression atoms to binding list. + // A recursive descent parser operates by defining functions for all -pp$2.toAssignableList = function(exprList, isBinding) { - var this$1 = this; + var pp$3 = Parser.prototype; - var end = exprList.length; - for (var i = 0; i < end; i++) { - var elt = exprList[i]; - if (elt) { this$1.toAssignable(elt, isBinding); } - } - if (end) { - var last = exprList[end - 1]; - if (this.options.ecmaVersion === 6 && isBinding && last && last.type === "RestElement" && last.argument.type !== "Identifier") - { this.unexpected(last.argument.start); } - } - return exprList -}; + // 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. -// Parses spread element. + pp$3.checkPropClash = function(prop, propHash, refDestructuringErrors) { + if (this.options.ecmaVersion >= 9 && prop.type === "SpreadElement") + { return } + 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) { + if (refDestructuringErrors && refDestructuringErrors.doubleProto < 0) { refDestructuringErrors.doubleProto = key.start; } + // Backwards-compat kludge. Can be removed in version 6.0 + else { this.raiseRecoverable(key.start, "Redefinition of __proto__ property"); } + } + propHash.proto = true; + } + return + } + name = "$" + name; + var other = propHash[name]; + if (other) { + var redefinition; + if (kind === "init") { + redefinition = this.strict && other.init || other.get || other.set; + } else { + redefinition = other.init || other[kind]; + } + if (redefinition) + { this.raiseRecoverable(key.start, "Redefinition of property"); } + } else { + other = propHash[name] = { + init: false, + get: false, + set: false + }; + } + other[kind] = true; + }; -pp$2.parseSpread = function(refDestructuringErrors) { - var node = this.startNode(); - this.next(); - node.argument = this.parseMaybeAssign(false, refDestructuringErrors); - return this.finishNode(node, "SpreadElement") -}; + // ### Expression parsing -pp$2.parseRestBinding = function() { - var node = this.startNode(); - this.next(); + // 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. - // RestElement inside of a function parameter must be an identifier - if (this.options.ecmaVersion === 6 && this.type !== types.name) - { this.unexpected(); } + // 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). - node.argument = this.parseBindingAtom(); + pp$3.parseExpression = function(noIn, refDestructuringErrors) { + var startPos = this.start, startLoc = this.startLoc; + var expr = this.parseMaybeAssign(noIn, refDestructuringErrors); + if (this.type === types.comma) { + var node = this.startNodeAt(startPos, startLoc); + node.expressions = [expr]; + while (this.eat(types.comma)) { node.expressions.push(this.parseMaybeAssign(noIn, refDestructuringErrors)); } + return this.finishNode(node, "SequenceExpression") + } + return expr + }; - return this.finishNode(node, "RestElement") -}; + // Parse an assignment expression. This includes applications of + // operators like `+=`. -// Parses lvalue (assignable) atom. + pp$3.parseMaybeAssign = function(noIn, refDestructuringErrors, afterLeftParse) { + if (this.isContextual("yield")) { + if (this.inGenerator) { return this.parseYield(noIn) } + // The tokenizer will assume an expression is allowed after + // `yield`, but this isn't that kind of yield + else { this.exprAllowed = false; } + } -pp$2.parseBindingAtom = function() { - if (this.options.ecmaVersion >= 6) { - switch (this.type) { - case types.bracketL: - var node = this.startNode(); + var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldShorthandAssign = -1; + if (refDestructuringErrors) { + oldParenAssign = refDestructuringErrors.parenthesizedAssign; + oldTrailingComma = refDestructuringErrors.trailingComma; + oldShorthandAssign = refDestructuringErrors.shorthandAssign; + refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.shorthandAssign = -1; + } else { + refDestructuringErrors = new DestructuringErrors; + ownDestructuringErrors = true; + } + + var startPos = this.start, startLoc = this.startLoc; + if (this.type === types.parenL || this.type === types.name) + { this.potentialArrowAt = this.start; } + var left = this.parseMaybeConditional(noIn, refDestructuringErrors); + if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); } + if (this.type.isAssign) { + var node = this.startNodeAt(startPos, startLoc); + node.operator = this.value; + node.left = this.type === types.eq ? this.toAssignable(left, false, refDestructuringErrors) : left; + if (!ownDestructuringErrors) { DestructuringErrors.call(refDestructuringErrors); } + refDestructuringErrors.shorthandAssign = -1; // reset because shorthand default was used correctly + this.checkLVal(left); this.next(); - node.elements = this.parseBindingList(types.bracketR, true, true); - return this.finishNode(node, "ArrayPattern") + node.right = this.parseMaybeAssign(noIn); + return this.finishNode(node, "AssignmentExpression") + } else { + if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); } + } + if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; } + if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; } + if (oldShorthandAssign > -1) { refDestructuringErrors.shorthandAssign = oldShorthandAssign; } + 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(types.question)) { + var node = this.startNodeAt(startPos, startLoc); + node.test = expr; + node.consequent = this.parseMaybeAssign(); + this.expect(types.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 expr.start === startPos && expr.type === "ArrowFunctionExpression" ? expr : 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 !== types._in)) { + if (prec > minPrec) { + var logical = this.type === types.logicalOR || this.type === types.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 startPos = this.start, startLoc = this.startLoc, expr; + if (this.isContextual("await") && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction))) { + expr = this.parseAwait(); + sawUnary = true; + } else if (this.type.prefix) { + var node = this.startNode(), update = this.type === types.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.startNodeAt(startPos, startLoc); + node$1.operator = this.value; + node$1.prefix = false; + node$1.argument = expr; + this.checkLVal(expr); + this.next(); + expr = this.finishNode(node$1, "UpdateExpression"); + } + } + + if (!sawUnary && this.eat(types.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 maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === "Identifier" && base.name === "async" && + this.lastTokEnd === base.end && !this.canInsertSemicolon() && this.input.slice(base.start, base.end) === "async"; + while (true) { + var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow); + if (element === base || element.type === "ArrowFunctionExpression") { return element } + base = element; + } + }; + + pp$3.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow) { + var computed = this.eat(types.bracketL); + if (computed || this.eat(types.dot)) { + var node = this.startNodeAt(startPos, startLoc); + node.object = base; + node.property = computed ? this.parseExpression() : this.parseIdent(this.options.allowReserved !== "never"); + node.computed = !!computed; + if (computed) { this.expect(types.bracketR); } + base = this.finishNode(node, "MemberExpression"); + } else if (!noCalls && this.eat(types.parenL)) { + var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos; + this.yieldPos = 0; + this.awaitPos = 0; + this.awaitIdentPos = 0; + var exprList = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8 && base.type !== "Import", false, refDestructuringErrors); + if (maybeAsyncArrow && !this.canInsertSemicolon() && this.eat(types.arrow)) { + this.checkPatternErrors(refDestructuringErrors, false); + this.checkYieldAwaitInDefaultParams(); + if (this.awaitIdentPos > 0) + { this.raise(this.awaitIdentPos, "Cannot use 'await' as identifier inside an async function"); } + this.yieldPos = oldYieldPos; + this.awaitPos = oldAwaitPos; + this.awaitIdentPos = oldAwaitIdentPos; + return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true) + } + this.checkExpressionErrors(refDestructuringErrors, true); + this.yieldPos = oldYieldPos || this.yieldPos; + this.awaitPos = oldAwaitPos || this.awaitPos; + this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos; + var node$1 = this.startNodeAt(startPos, startLoc); + node$1.callee = base; + node$1.arguments = exprList; + if (node$1.callee.type === "Import") { + if (node$1.arguments.length !== 1) { + this.raise(node$1.start, "import() requires exactly one argument"); + } + + var importArg = node$1.arguments[0]; + if (importArg && importArg.type === "SpreadElement") { + this.raise(importArg.start, "... is not allowed in import()"); + } + } + base = this.finishNode(node$1, "CallExpression"); + } else if (this.type === types.backQuote) { + var node$2 = this.startNodeAt(startPos, startLoc); + node$2.tag = base; + node$2.quasi = this.parseTemplate({isTagged: true}); + base = this.finishNode(node$2, "TaggedTemplateExpression"); + } + 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) { + // If a division operator appears in an expression position, the + // tokenizer got confused, and we force it to read a regexp instead. + if (this.type === types.slash) { this.readRegexp(); } + + var node, canBeArrow = this.potentialArrowAt === this.start; + switch (this.type) { + case types._super: + if (!this.allowSuper) + { this.raise(this.start, "'super' keyword outside a method"); } + node = this.startNode(); + this.next(); + if (this.type === types.parenL && !this.allowDirectSuper) + { this.raise(node.start, "super() call outside constructor of a subclass"); } + // The `super` keyword can appear at below: + // SuperProperty: + // super [ Expression ] + // super . IdentifierName + // SuperCall: + // super Arguments + if (this.type !== types.dot && this.type !== types.bracketL && this.type !== types.parenL) + { this.unexpected(); } + return this.finishNode(node, "Super") + + case types._this: + node = this.startNode(); + this.next(); + return this.finishNode(node, "ThisExpression") + + case types.name: + var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc; + var id = this.parseIdent(false); + if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === "async" && !this.canInsertSemicolon() && this.eat(types._function)) + { return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true) } + if (canBeArrow && !this.canInsertSemicolon()) { + if (this.eat(types.arrow)) + { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false) } + if (this.options.ecmaVersion >= 8 && id.name === "async" && this.type === types.name && !containsEsc) { + id = this.parseIdent(false); + if (this.canInsertSemicolon() || !this.eat(types.arrow)) + { this.unexpected(); } + return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true) + } + } + return id + + case types.regexp: + var value = this.value; + node = this.parseLiteral(value.value); + node.regex = {pattern: value.pattern, flags: value.flags}; + return node + + case types.num: case types.string: + return this.parseLiteral(this.value) + + case types._null: case types._true: case types._false: + node = this.startNode(); + node.value = this.type === types._null ? null : this.type === types._true; + node.raw = this.type.keyword; + this.next(); + return this.finishNode(node, "Literal") + + case types.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 types.bracketL: + node = this.startNode(); + this.next(); + node.elements = this.parseExprList(types.bracketR, true, true, refDestructuringErrors); + return this.finishNode(node, "ArrayExpression") case types.braceL: - return this.parseObj(true) - } - } - return this.parseIdent() -}; + return this.parseObj(false, refDestructuringErrors) -pp$2.parseBindingList = function(close, allowEmpty, allowTrailingComma) { - var this$1 = this; - - var elts = [], first = true; - while (!this.eat(close)) { - if (first) { first = false; } - else { this$1.expect(types.comma); } - if (allowEmpty && this$1.type === types.comma) { - elts.push(null); - } else if (allowTrailingComma && this$1.afterTrailingComma(close)) { - break - } else if (this$1.type === types.ellipsis) { - var rest = this$1.parseRestBinding(); - this$1.parseBindingListItem(rest); - elts.push(rest); - if (this$1.type === types.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(types.eq)) { return left } - var node = this.startNodeAt(startPos, startLoc); - node.left = left; - node.right = this.parseMaybeAssign(); - return this.finishNode(node, "AssignmentPattern") -}; - -// Verify that a node is an lval — something that can be assigned -// to. -// bindingType can be either: -// 'var' indicating that the lval creates a 'var' binding -// 'let' indicating that the lval creates a lexical ('let' or 'const') binding -// 'none' indicating that the binding should be checked for illegal identifiers, but not for duplicate references - -pp$2.checkLVal = function(expr, bindingType, checkClashes) { - var this$1 = this; - if ( bindingType === void 0 ) bindingType = BIND_NONE; - - switch (expr.type) { - case "Identifier": - if (this.strict && this.reservedWordsStrictBind.test(expr.name)) - { this.raiseRecoverable(expr.start, (bindingType ? "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; - } - if (bindingType !== BIND_NONE && bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); } - break - - case "MemberExpression": - if (bindingType) { this.raiseRecoverable(expr.start, "Binding member expression"); } - break - - case "ObjectPattern": - for (var i = 0, list = expr.properties; i < list.length; i += 1) - { - var prop = list[i]; - - this$1.checkLVal(prop, bindingType, checkClashes); - } - break - - case "Property": - // AssignmentProperty has type === "Property" - this.checkLVal(expr.value, bindingType, checkClashes); - break - - case "ArrayPattern": - for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) { - var elem = list$1[i$1]; - - if (elem) { this$1.checkLVal(elem, bindingType, checkClashes); } - } - break - - case "AssignmentPattern": - this.checkLVal(expr.left, bindingType, checkClashes); - break - - case "RestElement": - this.checkLVal(expr.argument, bindingType, checkClashes); - break - - case "ParenthesizedExpression": - this.checkLVal(expr.expression, bindingType, checkClashes); - break - - default: - this.raise(expr.start, (bindingType ? "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, refDestructuringErrors) { - if (this.options.ecmaVersion >= 9 && prop.type === "SpreadElement") - { return } - 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) { - if (refDestructuringErrors && refDestructuringErrors.doubleProto < 0) { refDestructuringErrors.doubleProto = key.start; } - // Backwards-compat kludge. Can be removed in version 6.0 - else { this.raiseRecoverable(key.start, "Redefinition of __proto__ property"); } - } - propHash.proto = true; - } - return - } - name = "$" + name; - var other = propHash[name]; - if (other) { - var redefinition; - if (kind === "init") { - redefinition = this.strict && other.init || other.get || other.set; - } else { - redefinition = other.init || other[kind]; - } - if (redefinition) - { 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 === types.comma) { - var node = this.startNodeAt(startPos, startLoc); - node.expressions = [expr]; - while (this.eat(types.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.isContextual("yield")) { - if (this.inGenerator) { return this.parseYield(noIn) } - // The tokenizer will assume an expression is allowed after - // `yield`, but this isn't that kind of yield - else { this.exprAllowed = false; } - } - - var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldShorthandAssign = -1; - if (refDestructuringErrors) { - oldParenAssign = refDestructuringErrors.parenthesizedAssign; - oldTrailingComma = refDestructuringErrors.trailingComma; - oldShorthandAssign = refDestructuringErrors.shorthandAssign; - refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.shorthandAssign = -1; - } else { - refDestructuringErrors = new DestructuringErrors; - ownDestructuringErrors = true; - } - - var startPos = this.start, startLoc = this.startLoc; - if (this.type === types.parenL || this.type === types.name) - { this.potentialArrowAt = this.start; } - var left = this.parseMaybeConditional(noIn, refDestructuringErrors); - if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); } - if (this.type.isAssign) { - var node = this.startNodeAt(startPos, startLoc); - node.operator = this.value; - node.left = this.type === types.eq ? this.toAssignable(left, false, refDestructuringErrors) : left; - if (!ownDestructuringErrors) { DestructuringErrors.call(refDestructuringErrors); } - 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; } - if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; } - if (oldShorthandAssign > -1) { refDestructuringErrors.shorthandAssign = oldShorthandAssign; } - 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(types.question)) { - var node = this.startNodeAt(startPos, startLoc); - node.test = expr; - node.consequent = this.parseMaybeAssign(); - this.expect(types.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 expr.start === startPos && expr.type === "ArrowFunctionExpression" ? expr : 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 !== types._in)) { - if (prec > minPrec) { - var logical = this.type === types.logicalOR || this.type === types.logicalAND; - var op = this.value; + case types._function: + node = this.startNode(); 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 this.parseFunction(node, 0) + + case types._class: + return this.parseClass(this.startNode(), false) + + case types._new: + return this.parseNew() + + case types.backQuote: + return this.parseTemplate() + + case types._import: + if (this.options.ecmaVersion > 10) { + return this.parseDynamicImport() + } else { + return this.unexpected() + } + + default: + this.unexpected(); } - } - 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.isContextual("await") && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction))) { - expr = this.parseAwait(); - sawUnary = true; - } else if (this.type.prefix) { - var node = this.startNode(), update = this.type === types.incDec; - node.operator = this.value; - node.prefix = true; + pp$3.parseDynamicImport = function() { + var node = this.startNode(); 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 (this.type !== types.parenL) { + this.unexpected(); } - } + return this.finishNode(node, "Import") + }; - if (!sawUnary && this.eat(types.starstar)) - { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false), "**", false) } - else - { return expr } -}; + pp$3.parseLiteral = function(value) { + var node = this.startNode(); + node.value = value; + node.raw = this.input.slice(this.start, this.end); + if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1); } + this.next(); + return this.finishNode(node, "Literal") + }; -// Parse call, dot, and `[]`-subscript expressions. + pp$3.parseParenExpression = function() { + this.expect(types.parenL); + var val = this.parseExpression(); + this.expect(types.parenR); + return val + }; -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.parseParenAndDistinguishExpression = function(canBeArrow) { + var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8; + if (this.options.ecmaVersion >= 6) { + this.next(); -pp$3.parseSubscripts = function(base, startPos, startLoc, noCalls) { - var this$1 = this; + var innerStartPos = this.start, innerStartLoc = this.startLoc; + var exprList = [], first = true, lastIsComma = false; + var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart; + this.yieldPos = 0; + this.awaitPos = 0; + // Do not save awaitIdentPos to allow checking awaits nested in parameters + while (this.type !== types.parenR) { + first ? first = false : this.expect(types.comma); + if (allowTrailingComma && this.afterTrailingComma(types.parenR, true)) { + lastIsComma = true; + break + } else if (this.type === types.ellipsis) { + spreadStart = this.start; + exprList.push(this.parseParenItem(this.parseRestBinding())); + if (this.type === types.comma) { this.raise(this.start, "Comma is not permitted after the rest element"); } + break + } else { + exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem)); + } + } + var innerEndPos = this.start, innerEndLoc = this.startLoc; + this.expect(types.parenR); - var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === "Identifier" && base.name === "async" && - this.lastTokEnd === base.end && !this.canInsertSemicolon() && this.input.slice(base.start, base.end) === "async"; - while (true) { - var element = this$1.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow); - if (element === base || element.type === "ArrowFunctionExpression") { return element } - base = element; - } -}; + if (canBeArrow && !this.canInsertSemicolon() && this.eat(types.arrow)) { + this.checkPatternErrors(refDestructuringErrors, false); + this.checkYieldAwaitInDefaultParams(); + 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(types.dot)) { + node.meta = meta; + var containsEsc = this.containsEsc; + node.property = this.parseIdent(true); + if (node.property.name !== "target" || containsEsc) + { this.raiseRecoverable(node.property.start, "The only valid meta property for new is new.target"); } + if (!this.inNonArrowFunction()) + { 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.options.ecmaVersion > 10 && node.callee.type === "Import") { + this.raise(node.callee.start, "Cannot use new with import(...)"); + } + if (this.eat(types.parenL)) { node.arguments = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8 && node.callee.type !== "Import", false); } + else { node.arguments = empty$1; } + return this.finishNode(node, "NewExpression") + }; + + // Parse template expression. + + pp$3.parseTemplateElement = function(ref) { + var isTagged = ref.isTagged; + + var elem = this.startNode(); + if (this.type === types.invalidTemplate) { + if (!isTagged) { + this.raiseRecoverable(this.start, "Bad escape sequence in untagged template literal"); + } + elem.value = { + raw: this.value, + cooked: null + }; + } else { + elem.value = { + raw: this.input.slice(this.start, this.end).replace(/\r\n?/g, "\n"), + cooked: this.value + }; + } + this.next(); + elem.tail = this.type === types.backQuote; + return this.finishNode(elem, "TemplateElement") + }; + + pp$3.parseTemplate = function(ref) { + if ( ref === void 0 ) ref = {}; + var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false; + + var node = this.startNode(); + this.next(); + node.expressions = []; + var curElt = this.parseTemplateElement({isTagged: isTagged}); + node.quasis = [curElt]; + while (!curElt.tail) { + if (this.type === types.eof) { this.raise(this.pos, "Unterminated template literal"); } + this.expect(types.dollarBraceL); + node.expressions.push(this.parseExpression()); + this.expect(types.braceR); + node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged})); + } + this.next(); + return this.finishNode(node, "TemplateLiteral") + }; + + pp$3.isAsyncProp = function(prop) { + return !prop.computed && prop.key.type === "Identifier" && prop.key.name === "async" && + (this.type === types.name || this.type === types.num || this.type === types.string || this.type === types.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types.star)) && + !lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) + }; + + // Parse an object literal or binding pattern. + + pp$3.parseObj = function(isPattern, refDestructuringErrors) { + var node = this.startNode(), first = true, propHash = {}; + node.properties = []; + this.next(); + while (!this.eat(types.braceR)) { + if (!first) { + this.expect(types.comma); + if (this.afterTrailingComma(types.braceR)) { break } + } else { first = false; } + + var prop = this.parseProperty(isPattern, refDestructuringErrors); + if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); } + node.properties.push(prop); + } + return this.finishNode(node, isPattern ? "ObjectPattern" : "ObjectExpression") + }; + + pp$3.parseProperty = function(isPattern, refDestructuringErrors) { + var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc; + if (this.options.ecmaVersion >= 9 && this.eat(types.ellipsis)) { + if (isPattern) { + prop.argument = this.parseIdent(false); + if (this.type === types.comma) { + this.raise(this.start, "Comma is not permitted after the rest element"); + } + return this.finishNode(prop, "RestElement") + } + // To disallow parenthesized identifier via `this.toAssignable()`. + if (this.type === types.parenL && refDestructuringErrors) { + if (refDestructuringErrors.parenthesizedAssign < 0) { + refDestructuringErrors.parenthesizedAssign = this.start; + } + if (refDestructuringErrors.parenthesizedBind < 0) { + refDestructuringErrors.parenthesizedBind = this.start; + } + } + // Parse argument. + prop.argument = this.parseMaybeAssign(false, refDestructuringErrors); + // To disallow trailing comma via `this.toAssignable()`. + if (this.type === types.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) { + refDestructuringErrors.trailingComma = this.start; + } + // Finish + return this.finishNode(prop, "SpreadElement") + } + if (this.options.ecmaVersion >= 6) { + prop.method = false; + prop.shorthand = false; + if (isPattern || refDestructuringErrors) { + startPos = this.start; + startLoc = this.startLoc; + } + if (!isPattern) + { isGenerator = this.eat(types.star); } + } + var containsEsc = this.containsEsc; + this.parsePropertyName(prop); + if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) { + isAsync = true; + isGenerator = this.options.ecmaVersion >= 9 && this.eat(types.star); + this.parsePropertyName(prop, refDestructuringErrors); + } else { + isAsync = false; + } + this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc); + return this.finishNode(prop, "Property") + }; + + pp$3.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) { + if ((isGenerator || isAsync) && this.type === types.colon) + { this.unexpected(); } + + if (this.eat(types.colon)) { + prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors); + prop.kind = "init"; + } else if (this.options.ecmaVersion >= 6 && this.type === types.parenL) { + if (isPattern) { this.unexpected(); } + prop.kind = "init"; + prop.method = true; + prop.value = this.parseMethod(isGenerator, isAsync); + } else if (!isPattern && !containsEsc && + this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === "Identifier" && + (prop.key.name === "get" || prop.key.name === "set") && + (this.type !== types.comma && this.type !== types.braceR)) { + if (isGenerator || isAsync) { 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 (isGenerator || isAsync) { this.unexpected(); } + this.checkUnreserved(prop.key); + if (prop.key.name === "await" && !this.awaitIdentPos) + { this.awaitIdentPos = startPos; } + prop.kind = "init"; + if (isPattern) { + prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key); + } else if (this.type === types.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(types.bracketL)) { + prop.computed = true; + prop.key = this.parseMaybeAssign(); + this.expect(types.bracketR); + return prop.key + } else { + prop.computed = false; + } + } + return prop.key = this.type === types.num || this.type === types.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== "never") + }; + + // Initialize empty function node. + + pp$3.initFunction = function(node) { + node.id = null; + if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; } + if (this.options.ecmaVersion >= 8) { node.async = false; } + }; + + // Parse object or class method. + + pp$3.parseMethod = function(isGenerator, isAsync, allowDirectSuper) { + var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos; + + this.initFunction(node); + if (this.options.ecmaVersion >= 6) + { node.generator = isGenerator; } + if (this.options.ecmaVersion >= 8) + { node.async = !!isAsync; } -pp$3.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow) { - var computed = this.eat(types.bracketL); - if (computed || this.eat(types.dot)) { - var node = this.startNodeAt(startPos, startLoc); - node.object = base; - node.property = computed ? this.parseExpression() : this.parseIdent(true); - node.computed = !!computed; - if (computed) { this.expect(types.bracketR); } - base = this.finishNode(node, "MemberExpression"); - } else if (!noCalls && this.eat(types.parenL)) { - var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos; this.yieldPos = 0; this.awaitPos = 0; this.awaitIdentPos = 0; - var exprList = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors); - if (maybeAsyncArrow && !this.canInsertSemicolon() && this.eat(types.arrow)) { - this.checkPatternErrors(refDestructuringErrors, false); - this.checkYieldAwaitInDefaultParams(); - if (this.awaitIdentPos > 0) - { this.raise(this.awaitIdentPos, "Cannot use 'await' as identifier inside an async function"); } - this.yieldPos = oldYieldPos; - this.awaitPos = oldAwaitPos; - this.awaitIdentPos = oldAwaitIdentPos; - return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true) - } - this.checkExpressionErrors(refDestructuringErrors, true); - this.yieldPos = oldYieldPos || this.yieldPos; - this.awaitPos = oldAwaitPos || this.awaitPos; - this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos; - var node$1 = this.startNodeAt(startPos, startLoc); - node$1.callee = base; - node$1.arguments = exprList; - base = this.finishNode(node$1, "CallExpression"); - } else if (this.type === types.backQuote) { - var node$2 = this.startNodeAt(startPos, startLoc); - node$2.tag = base; - node$2.quasi = this.parseTemplate({isTagged: true}); - base = this.finishNode(node$2, "TaggedTemplateExpression"); - } - return base -}; + this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0)); -// 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 `{}`. + this.expect(types.parenL); + node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8); + this.checkYieldAwaitInDefaultParams(); + this.parseFunctionBody(node, false, true); -pp$3.parseExprAtom = function(refDestructuringErrors) { - // If a division operator appears in an expression position, the - // tokenizer got confused, and we force it to read a regexp instead. - if (this.type === types.slash) { this.readRegexp(); } + this.yieldPos = oldYieldPos; + this.awaitPos = oldAwaitPos; + this.awaitIdentPos = oldAwaitIdentPos; + return this.finishNode(node, "FunctionExpression") + }; - var node, canBeArrow = this.potentialArrowAt === this.start; - switch (this.type) { - case types._super: - if (!this.allowSuper) - { this.raise(this.start, "'super' keyword outside a method"); } - node = this.startNode(); - this.next(); - if (this.type === types.parenL && !this.allowDirectSuper) - { this.raise(node.start, "super() call outside constructor of a subclass"); } - // The `super` keyword can appear at below: - // SuperProperty: - // super [ Expression ] - // super . IdentifierName - // SuperCall: - // super Arguments - if (this.type !== types.dot && this.type !== types.bracketL && this.type !== types.parenL) - { this.unexpected(); } - return this.finishNode(node, "Super") + // Parse arrow function expression with given parameters. - case types._this: - node = this.startNode(); - this.next(); - return this.finishNode(node, "ThisExpression") + pp$3.parseArrowExpression = function(node, params, isAsync) { + var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos; - case types.name: - var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc; - var id = this.parseIdent(false); - if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === "async" && !this.canInsertSemicolon() && this.eat(types._function)) - { return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true) } - if (canBeArrow && !this.canInsertSemicolon()) { - if (this.eat(types.arrow)) - { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false) } - if (this.options.ecmaVersion >= 8 && id.name === "async" && this.type === types.name && !containsEsc) { - id = this.parseIdent(false); - if (this.canInsertSemicolon() || !this.eat(types.arrow)) - { this.unexpected(); } - return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true) - } - } - return id + this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW); + this.initFunction(node); + if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; } - case types.regexp: - var value = this.value; - node = this.parseLiteral(value.value); - node.regex = {pattern: value.pattern, flags: value.flags}; - return node - - case types.num: case types.string: - return this.parseLiteral(this.value) - - case types._null: case types._true: case types._false: - node = this.startNode(); - node.value = this.type === types._null ? null : this.type === types._true; - node.raw = this.type.keyword; - this.next(); - return this.finishNode(node, "Literal") - - case types.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 types.bracketL: - node = this.startNode(); - this.next(); - node.elements = this.parseExprList(types.bracketR, true, true, refDestructuringErrors); - return this.finishNode(node, "ArrayExpression") - - case types.braceL: - return this.parseObj(false, refDestructuringErrors) - - case types._function: - node = this.startNode(); - this.next(); - return this.parseFunction(node, 0) - - case types._class: - return this.parseClass(this.startNode(), false) - - case types._new: - return this.parseNew() - - case types.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(types.parenL); - var val = this.parseExpression(); - this.expect(types.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; this.yieldPos = 0; this.awaitPos = 0; - // Do not save awaitIdentPos to allow checking awaits nested in parameters - while (this.type !== types.parenR) { - first ? first = false : this$1.expect(types.comma); - if (allowTrailingComma && this$1.afterTrailingComma(types.parenR, true)) { - lastIsComma = true; - break - } else if (this$1.type === types.ellipsis) { - spreadStart = this$1.start; - exprList.push(this$1.parseParenItem(this$1.parseRestBinding())); - if (this$1.type === types.comma) { this$1.raise(this$1.start, "Comma is not permitted after the rest element"); } - break - } else { - exprList.push(this$1.parseMaybeAssign(false, refDestructuringErrors, this$1.parseParenItem)); - } - } - var innerEndPos = this.start, innerEndLoc = this.startLoc; - this.expect(types.parenR); + this.awaitIdentPos = 0; - if (canBeArrow && !this.canInsertSemicolon() && this.eat(types.arrow)) { - this.checkPatternErrors(refDestructuringErrors, false); - this.checkYieldAwaitInDefaultParams(); - this.yieldPos = oldYieldPos; - this.awaitPos = oldAwaitPos; - return this.parseParenArrowList(startPos, startLoc, exprList) - } + node.params = this.toAssignableList(params, true); + this.parseFunctionBody(node, true, false); - 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; + this.yieldPos = oldYieldPos; + this.awaitPos = oldAwaitPos; + this.awaitIdentPos = oldAwaitIdentPos; + return this.finishNode(node, "ArrowFunctionExpression") + }; - if (exprList.length > 1) { - val = this.startNodeAt(innerStartPos, innerStartLoc); - val.expressions = exprList; - this.finishNodeAt(val, "SequenceExpression", innerEndPos, innerEndLoc); + // Parse function body and check parameters. + + pp$3.parseFunctionBody = function(node, isArrowFunction, isMethod) { + var isExpression = isArrowFunction && this.type !== types.braceL; + var oldStrict = this.strict, useStrict = false; + + if (isExpression) { + node.body = this.parseMaybeAssign(); + node.expression = true; + this.checkParams(node, false); } 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(types.dot)) { - node.meta = meta; - var containsEsc = this.containsEsc; - node.property = this.parseIdent(true); - if (node.property.name !== "target" || containsEsc) - { this.raiseRecoverable(node.property.start, "The only valid meta property for new is new.target"); } - if (!this.inNonArrowFunction()) - { 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(types.parenL)) { node.arguments = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8, false); } - else { node.arguments = empty$1; } - return this.finishNode(node, "NewExpression") -}; - -// Parse template expression. - -pp$3.parseTemplateElement = function(ref) { - var isTagged = ref.isTagged; - - var elem = this.startNode(); - if (this.type === types.invalidTemplate) { - if (!isTagged) { - this.raiseRecoverable(this.start, "Bad escape sequence in untagged template literal"); - } - elem.value = { - raw: this.value, - cooked: null - }; - } else { - elem.value = { - raw: this.input.slice(this.start, this.end).replace(/\r\n?/g, "\n"), - cooked: this.value - }; - } - this.next(); - elem.tail = this.type === types.backQuote; - return this.finishNode(elem, "TemplateElement") -}; - -pp$3.parseTemplate = function(ref) { - var this$1 = this; - if ( ref === void 0 ) ref = {}; - var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false; - - var node = this.startNode(); - this.next(); - node.expressions = []; - var curElt = this.parseTemplateElement({isTagged: isTagged}); - node.quasis = [curElt]; - while (!curElt.tail) { - if (this$1.type === types.eof) { this$1.raise(this$1.pos, "Unterminated template literal"); } - this$1.expect(types.dollarBraceL); - node.expressions.push(this$1.parseExpression()); - this$1.expect(types.braceR); - node.quasis.push(curElt = this$1.parseTemplateElement({isTagged: isTagged})); - } - this.next(); - return this.finishNode(node, "TemplateLiteral") -}; - -pp$3.isAsyncProp = function(prop) { - return !prop.computed && prop.key.type === "Identifier" && prop.key.name === "async" && - (this.type === types.name || this.type === types.num || this.type === types.string || this.type === types.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types.star)) && - !lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) -}; - -// 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(types.braceR)) { - if (!first) { - this$1.expect(types.comma); - if (this$1.afterTrailingComma(types.braceR)) { break } - } else { first = false; } - - var prop = this$1.parseProperty(isPattern, refDestructuringErrors); - if (!isPattern) { this$1.checkPropClash(prop, propHash, refDestructuringErrors); } - node.properties.push(prop); - } - return this.finishNode(node, isPattern ? "ObjectPattern" : "ObjectExpression") -}; - -pp$3.parseProperty = function(isPattern, refDestructuringErrors) { - var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc; - if (this.options.ecmaVersion >= 9 && this.eat(types.ellipsis)) { - if (isPattern) { - prop.argument = this.parseIdent(false); - if (this.type === types.comma) { - this.raise(this.start, "Comma is not permitted after the rest element"); + 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"); } } - return this.finishNode(prop, "RestElement") + // 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; } + + // Add the params to varDeclaredNames to ensure that an error is thrown + // if a let/const declaration in the function clashes with one of the params. + this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params)); + node.body = this.parseBlock(false); + node.expression = false; + this.adaptDirectivePrologue(node.body.body); + this.labels = oldLabels; } - // To disallow parenthesized identifier via `this.toAssignable()`. - if (this.type === types.parenL && refDestructuringErrors) { - if (refDestructuringErrors.parenthesizedAssign < 0) { - refDestructuringErrors.parenthesizedAssign = this.start; - } - if (refDestructuringErrors.parenthesizedBind < 0) { - refDestructuringErrors.parenthesizedBind = this.start; - } - } - // Parse argument. - prop.argument = this.parseMaybeAssign(false, refDestructuringErrors); - // To disallow trailing comma via `this.toAssignable()`. - if (this.type === types.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) { - refDestructuringErrors.trailingComma = this.start; - } - // Finish - return this.finishNode(prop, "SpreadElement") - } - if (this.options.ecmaVersion >= 6) { - prop.method = false; - prop.shorthand = false; - if (isPattern || refDestructuringErrors) { - startPos = this.start; - startLoc = this.startLoc; - } - if (!isPattern) - { isGenerator = this.eat(types.star); } - } - var containsEsc = this.containsEsc; - this.parsePropertyName(prop); - if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) { - isAsync = true; - isGenerator = this.options.ecmaVersion >= 9 && this.eat(types.star); - this.parsePropertyName(prop, refDestructuringErrors); - } else { - isAsync = false; - } - this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc); - return this.finishNode(prop, "Property") -}; + this.exitScope(); -pp$3.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) { - if ((isGenerator || isAsync) && this.type === types.colon) - { this.unexpected(); } + // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval' + if (this.strict && node.id) { this.checkLVal(node.id, BIND_OUTSIDE); } + this.strict = oldStrict; + }; - if (this.eat(types.colon)) { - prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors); - prop.kind = "init"; - } else if (this.options.ecmaVersion >= 6 && this.type === types.parenL) { - if (isPattern) { this.unexpected(); } - prop.kind = "init"; - prop.method = true; - prop.value = this.parseMethod(isGenerator, isAsync); - } else if (!isPattern && !containsEsc && - this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === "Identifier" && - (prop.key.name === "get" || prop.key.name === "set") && - (this.type !== types.comma && this.type !== types.braceR)) { - if (isGenerator || isAsync) { 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 (isGenerator || isAsync) { this.unexpected(); } - this.checkUnreserved(prop.key); - if (prop.key.name === "await" && !this.awaitIdentPos) - { this.awaitIdentPos = startPos; } - prop.kind = "init"; - if (isPattern) { - prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key); - } else if (this.type === types.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.isSimpleParamList = function(params) { + for (var i = 0, list = params; i < list.length; i += 1) + { + var param = list[i]; -pp$3.parsePropertyName = function(prop) { - if (this.options.ecmaVersion >= 6) { - if (this.eat(types.bracketL)) { - prop.computed = true; - prop.key = this.parseMaybeAssign(); - this.expect(types.bracketR); - return prop.key - } else { - prop.computed = false; - } - } - return prop.key = this.type === types.num || this.type === types.string ? this.parseExprAtom() : this.parseIdent(true) -}; + if (param.type !== "Identifier") { return false + } } + return true + }; -// Initialize empty function node. + // Checks function params for various disallowed patterns such as using "eval" + // or "arguments" and duplicate parameters. -pp$3.initFunction = function(node) { - node.id = null; - if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; } - if (this.options.ecmaVersion >= 8) { node.async = false; } -}; + pp$3.checkParams = function(node, allowDuplicates) { + var nameHash = {}; + for (var i = 0, list = node.params; i < list.length; i += 1) + { + var param = list[i]; -// Parse object or class method. - -pp$3.parseMethod = function(isGenerator, isAsync, allowDirectSuper) { - var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos; - - this.initFunction(node); - if (this.options.ecmaVersion >= 6) - { node.generator = isGenerator; } - if (this.options.ecmaVersion >= 8) - { node.async = !!isAsync; } - - this.yieldPos = 0; - this.awaitPos = 0; - this.awaitIdentPos = 0; - this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0)); - - this.expect(types.parenL); - node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8); - this.checkYieldAwaitInDefaultParams(); - this.parseFunctionBody(node, false, true); - - this.yieldPos = oldYieldPos; - this.awaitPos = oldAwaitPos; - this.awaitIdentPos = oldAwaitIdentPos; - return this.finishNode(node, "FunctionExpression") -}; - -// Parse arrow function expression with given parameters. - -pp$3.parseArrowExpression = function(node, params, isAsync) { - var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos; - - this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW); - this.initFunction(node); - if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; } - - this.yieldPos = 0; - this.awaitPos = 0; - this.awaitIdentPos = 0; - - node.params = this.toAssignableList(params, true); - this.parseFunctionBody(node, true, false); - - this.yieldPos = oldYieldPos; - this.awaitPos = oldAwaitPos; - this.awaitIdentPos = oldAwaitIdentPos; - return this.finishNode(node, "ArrowFunctionExpression") -}; - -// Parse function body and check parameters. - -pp$3.parseFunctionBody = function(node, isArrowFunction, isMethod) { - var isExpression = isArrowFunction && this.type !== types.braceL; - var oldStrict = this.strict, useStrict = false; - - if (isExpression) { - node.body = this.parseMaybeAssign(); - node.expression = true; - this.checkParams(node, false); - } 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; } - - // Add the params to varDeclaredNames to ensure that an error is thrown - // if a let/const declaration in the function clashes with one of the params. - this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params)); - node.body = this.parseBlock(false); - node.expression = false; - this.adaptDirectivePrologue(node.body.body); - this.labels = oldLabels; - } - this.exitScope(); - - // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval' - if (this.strict && node.id) { this.checkLVal(node.id, BIND_OUTSIDE); } - this.strict = oldStrict; -}; - -pp$3.isSimpleParamList = function(params) { - for (var i = 0, list = params; i < list.length; i += 1) - { - var param = list[i]; - - if (param.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, allowDuplicates) { - var this$1 = this; - - var nameHash = {}; - for (var i = 0, list = node.params; i < list.length; i += 1) - { - var param = list[i]; - - this$1.checkLVal(param, BIND_VAR, allowDuplicates ? null : 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(types.comma); - if (allowTrailingComma && this$1.afterTrailingComma(close)) { break } - } else { first = false; } - - var elt = (void 0); - if (allowEmpty && this$1.type === types.comma) - { elt = null; } - else if (this$1.type === types.ellipsis) { - elt = this$1.parseSpread(refDestructuringErrors); - if (refDestructuringErrors && this$1.type === types.comma && refDestructuringErrors.trailingComma < 0) - { refDestructuringErrors.trailingComma = this$1.start; } - } else { - elt = this$1.parseMaybeAssign(false, refDestructuringErrors); - } - elts.push(elt); - } - return elts -}; - -pp$3.checkUnreserved = function(ref) { - var start = ref.start; - var end = ref.end; - var name = ref.name; - - if (this.inGenerator && name === "yield") - { this.raiseRecoverable(start, "Cannot use 'yield' as identifier inside a generator"); } - if (this.inAsync && name === "await") - { this.raiseRecoverable(start, "Cannot use 'await' as identifier inside an async function"); } - if (this.keywords.test(name)) - { this.raise(start, ("Unexpected keyword '" + name + "'")); } - if (this.options.ecmaVersion < 6 && - this.input.slice(start, end).indexOf("\\") !== -1) { return } - var re = this.strict ? this.reservedWordsStrict : this.reservedWords; - if (re.test(name)) { - if (!this.inAsync && name === "await") - { this.raiseRecoverable(start, "Cannot use keyword 'await' outside an async function"); } - this.raiseRecoverable(start, ("The keyword '" + name + "' is reserved")); - } -}; - -// 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, isBinding) { - var node = this.startNode(); - if (liberal && this.options.allowReserved === "never") { liberal = false; } - if (this.type === types.name) { - node.name = this.value; - } else if (this.type.keyword) { - node.name = this.type.keyword; - - // To fix https://github.com/acornjs/acorn/issues/575 - // `class` and `function` keywords push new context into this.context. - // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name. - // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword - if ((node.name === "class" || node.name === "function") && - (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) { - this.context.pop(); - } - } else { - this.unexpected(); - } - this.next(); - this.finishNode(node, "Identifier"); - if (!liberal) { - this.checkUnreserved(node); - if (node.name === "await" && !this.awaitIdentPos) - { this.awaitIdentPos = node.start; } - } - return node -}; - -// Parses yield expression inside generator. - -pp$3.parseYield = function(noIn) { - if (!this.yieldPos) { this.yieldPos = this.start; } - - var node = this.startNode(); - this.next(); - if (this.type === types.semi || this.canInsertSemicolon() || (this.type !== types.star && !this.type.startsExpr)) { - node.delegate = false; - node.argument = null; - } else { - node.delegate = this.eat(types.star); - node.argument = this.parseMaybeAssign(noIn); - } - 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 pp$5 = Parser.prototype; - -var Scope = function Scope(flags) { - this.flags = flags; - // A list of var-declared names in the current lexical scope - this.var = []; - // A list of lexically-declared names in the current lexical scope - this.lexical = []; - // A list of lexically-declared FunctionDeclaration names in the current lexical scope - this.functions = []; -}; - -// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names. - -pp$5.enterScope = function(flags) { - this.scopeStack.push(new Scope(flags)); -}; - -pp$5.exitScope = function() { - this.scopeStack.pop(); -}; - -// The spec says: -// > At the top level of a function, or script, function declarations are -// > treated like var declarations rather than like lexical declarations. -pp$5.treatFunctionsAsVarInScope = function(scope) { - return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP) -}; - -pp$5.declareName = function(name, bindingType, pos) { - var this$1 = this; - - var redeclared = false; - if (bindingType === BIND_LEXICAL) { - var scope = this.currentScope(); - redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1; - scope.lexical.push(name); - if (this.inModule && (scope.flags & SCOPE_TOP)) - { delete this.undefinedExports[name]; } - } else if (bindingType === BIND_SIMPLE_CATCH) { - var scope$1 = this.currentScope(); - scope$1.lexical.push(name); - } else if (bindingType === BIND_FUNCTION) { - var scope$2 = this.currentScope(); - if (this.treatFunctionsAsVar) - { redeclared = scope$2.lexical.indexOf(name) > -1; } - else - { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; } - scope$2.functions.push(name); - } else { - for (var i = this.scopeStack.length - 1; i >= 0; --i) { - var scope$3 = this$1.scopeStack[i]; - if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) || - !this$1.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) { - redeclared = true; - break - } - scope$3.var.push(name); - if (this$1.inModule && (scope$3.flags & SCOPE_TOP)) - { delete this$1.undefinedExports[name]; } - if (scope$3.flags & SCOPE_VAR) { break } - } - } - if (redeclared) { this.raiseRecoverable(pos, ("Identifier '" + name + "' has already been declared")); } -}; - -pp$5.checkLocalExport = function(id) { - // scope.functions must be empty as Module code is always strict. - if (this.scopeStack[0].lexical.indexOf(id.name) === -1 && - this.scopeStack[0].var.indexOf(id.name) === -1) { - this.undefinedExports[id.name] = id; - } -}; - -pp$5.currentScope = function() { - return this.scopeStack[this.scopeStack.length - 1] -}; - -pp$5.currentVarScope = function() { - var this$1 = this; - - for (var i = this.scopeStack.length - 1;; i--) { - var scope = this$1.scopeStack[i]; - if (scope.flags & SCOPE_VAR) { return scope } - } -}; - -// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`. -pp$5.currentThisScope = function() { - var this$1 = this; - - for (var i = this.scopeStack.length - 1;; i--) { - var scope = this$1.scopeStack[i]; - if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope } - } -}; - -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$6 = Parser.prototype; - -pp$6.startNode = function() { - return new Node(this, this.start, this.startLoc) -}; - -pp$6.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$6.finishNode = function(node, type) { - return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc) -}; - -// Finish node at given position - -pp$6.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, generator) { - this.token = token; - this.isExpr = !!isExpr; - this.preserveSpace = !!preserveSpace; - this.override = override; - this.generator = !!generator; -}; - -var types$1 = { - b_stat: new TokContext("{", false), - b_expr: new TokContext("{", true), - b_tmpl: new TokContext("${", false), - p_stat: new TokContext("(", false), - p_expr: new TokContext("(", true), - q_tmpl: new TokContext("`", true, true, function (p) { return p.tryReadTemplateToken(); }), - f_stat: new TokContext("function", false), - f_expr: new TokContext("function", true), - f_expr_gen: new TokContext("function", true, false, null, true), - f_gen: new TokContext("function", false, false, null, true) -}; - -var pp$7 = Parser.prototype; - -pp$7.initialContext = function() { - return [types$1.b_stat] -}; - -pp$7.braceIsBlock = function(prevType) { - var parent = this.curContext(); - if (parent === types$1.f_expr || parent === types$1.f_stat) - { return true } - if (prevType === types.colon && (parent === types$1.b_stat || parent === types$1.b_expr)) - { return !parent.isExpr } - - // The check for `tt.name && exprAllowed` detects whether we are - // after a `yield` or `of` construct. See the `updateContext` for - // `tt.name`. - if (prevType === types._return || prevType === types.name && this.exprAllowed) - { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) } - if (prevType === types._else || prevType === types.semi || prevType === types.eof || prevType === types.parenR || prevType === types.arrow) - { return true } - if (prevType === types.braceL) - { return parent === types$1.b_stat } - if (prevType === types._var || prevType === types._const || prevType === types.name) - { return false } - return !this.exprAllowed -}; - -pp$7.inGeneratorContext = function() { - var this$1 = this; - - for (var i = this.context.length - 1; i >= 1; i--) { - var context = this$1.context[i]; - if (context.token === "function") - { return context.generator } - } - return false -}; - -pp$7.updateContext = function(prevType) { - var update, type = this.type; - if (type.keyword && prevType === types.dot) - { this.exprAllowed = false; } - else if (update = type.updateContext) - { update.call(this, prevType); } - else - { this.exprAllowed = type.beforeExpr; } -}; - -// Token-specific context update code - -types.parenR.updateContext = types.braceR.updateContext = function() { - if (this.context.length === 1) { - this.exprAllowed = true; - return - } - var out = this.context.pop(); - if (out === types$1.b_stat && this.curContext().token === "function") { - out = this.context.pop(); - } - this.exprAllowed = !out.isExpr; -}; - -types.braceL.updateContext = function(prevType) { - this.context.push(this.braceIsBlock(prevType) ? types$1.b_stat : types$1.b_expr); - this.exprAllowed = true; -}; - -types.dollarBraceL.updateContext = function() { - this.context.push(types$1.b_tmpl); - this.exprAllowed = true; -}; - -types.parenL.updateContext = function(prevType) { - var statementParens = prevType === types._if || prevType === types._for || prevType === types._with || prevType === types._while; - this.context.push(statementParens ? types$1.p_stat : types$1.p_expr); - this.exprAllowed = true; -}; - -types.incDec.updateContext = function() { - // tokExprAllowed stays unchanged -}; - -types._function.updateContext = types._class.updateContext = function(prevType) { - if (prevType.beforeExpr && prevType !== types.semi && prevType !== types._else && - !(prevType === types._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) && - !((prevType === types.colon || prevType === types.braceL) && this.curContext() === types$1.b_stat)) - { this.context.push(types$1.f_expr); } - else - { this.context.push(types$1.f_stat); } - this.exprAllowed = false; -}; - -types.backQuote.updateContext = function() { - if (this.curContext() === types$1.q_tmpl) - { this.context.pop(); } - else - { this.context.push(types$1.q_tmpl); } - this.exprAllowed = false; -}; - -types.star.updateContext = function(prevType) { - if (prevType === types._function) { - var index = this.context.length - 1; - if (this.context[index] === types$1.f_expr) - { this.context[index] = types$1.f_expr_gen; } - else - { this.context[index] = types$1.f_gen; } - } - this.exprAllowed = true; -}; - -types.name.updateContext = function(prevType) { - var allowed = false; - if (this.options.ecmaVersion >= 6 && prevType !== types.dot) { - if (this.value === "of" && !this.exprAllowed || - this.value === "yield" && this.inGeneratorContext()) - { allowed = true; } - } - this.exprAllowed = allowed; -}; - -// This file contains Unicode properties extracted from the ECMAScript -// specification. The lists are extracted like so: -// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText) - -// #table-binary-unicode-properties -var ecma9BinaryProperties = "ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS"; -var unicodeBinaryProperties = { - 9: ecma9BinaryProperties, - 10: ecma9BinaryProperties + " Extended_Pictographic" -}; - -// #table-unicode-general-category-values -var unicodeGeneralCategoryValues = "Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu"; - -// #table-unicode-script-values -var ecma9ScriptValues = "Adlam Adlm Ahom Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb"; -var unicodeScriptValues = { - 9: ecma9ScriptValues, - 10: ecma9ScriptValues + " Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd" -}; - -var data = {}; -function buildUnicodeData(ecmaVersion) { - var d = data[ecmaVersion] = { - binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + " " + unicodeGeneralCategoryValues), - nonBinary: { - General_Category: wordsRegexp(unicodeGeneralCategoryValues), - Script: wordsRegexp(unicodeScriptValues[ecmaVersion]) + this.checkLVal(param, BIND_VAR, allowDuplicates ? null : nameHash); } }; - d.nonBinary.Script_Extensions = d.nonBinary.Script; - d.nonBinary.gc = d.nonBinary.General_Category; - d.nonBinary.sc = d.nonBinary.Script; - d.nonBinary.scx = d.nonBinary.Script_Extensions; -} -buildUnicodeData(9); -buildUnicodeData(10); + // 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). -var pp$9 = Parser.prototype; + pp$3.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) { + var elts = [], first = true; + while (!this.eat(close)) { + if (!first) { + this.expect(types.comma); + if (allowTrailingComma && this.afterTrailingComma(close)) { break } + } else { first = false; } -var RegExpValidationState = function RegExpValidationState(parser) { - this.parser = parser; - this.validFlags = "gim" + (parser.options.ecmaVersion >= 6 ? "uy" : "") + (parser.options.ecmaVersion >= 9 ? "s" : ""); - this.unicodeProperties = data[parser.options.ecmaVersion >= 10 ? 10 : parser.options.ecmaVersion]; - this.source = ""; - this.flags = ""; - this.start = 0; - this.switchU = false; - this.switchN = false; - this.pos = 0; - this.lastIntValue = 0; - this.lastStringValue = ""; - this.lastAssertionIsQuantifiable = false; - this.numCapturingParens = 0; - this.maxBackReference = 0; - this.groupNames = []; - this.backReferenceNames = []; -}; - -RegExpValidationState.prototype.reset = function reset (start, pattern, flags) { - var unicode = flags.indexOf("u") !== -1; - this.start = start | 0; - this.source = pattern + ""; - this.flags = flags; - this.switchU = unicode && this.parser.options.ecmaVersion >= 6; - this.switchN = unicode && this.parser.options.ecmaVersion >= 9; -}; - -RegExpValidationState.prototype.raise = function raise (message) { - this.parser.raiseRecoverable(this.start, ("Invalid regular expression: /" + (this.source) + "/: " + message)); -}; - -// If u flag is given, this returns the code point at the index (it combines a surrogate pair). -// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair). -RegExpValidationState.prototype.at = function at (i) { - var s = this.source; - var l = s.length; - if (i >= l) { - return -1 - } - var c = s.charCodeAt(i); - if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) { - return c - } - return (c << 10) + s.charCodeAt(i + 1) - 0x35FDC00 -}; - -RegExpValidationState.prototype.nextIndex = function nextIndex (i) { - var s = this.source; - var l = s.length; - if (i >= l) { - return l - } - var c = s.charCodeAt(i); - if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) { - return i + 1 - } - return i + 2 -}; - -RegExpValidationState.prototype.current = function current () { - return this.at(this.pos) -}; - -RegExpValidationState.prototype.lookahead = function lookahead () { - return this.at(this.nextIndex(this.pos)) -}; - -RegExpValidationState.prototype.advance = function advance () { - this.pos = this.nextIndex(this.pos); -}; - -RegExpValidationState.prototype.eat = function eat (ch) { - if (this.current() === ch) { - this.advance(); - return true - } - return false -}; - -function codePointToString$1(ch) { - if (ch <= 0xFFFF) { return String.fromCharCode(ch) } - ch -= 0x10000; - return String.fromCharCode((ch >> 10) + 0xD800, (ch & 0x03FF) + 0xDC00) -} - -/** - * Validate the flags part of a given RegExpLiteral. - * - * @param {RegExpValidationState} state The state to validate RegExp. - * @returns {void} - */ -pp$9.validateRegExpFlags = function(state) { - var this$1 = this; - - var validFlags = state.validFlags; - var flags = state.flags; - - for (var i = 0; i < flags.length; i++) { - var flag = flags.charAt(i); - if (validFlags.indexOf(flag) === -1) { - this$1.raise(state.start, "Invalid regular expression flag"); + var elt = (void 0); + if (allowEmpty && this.type === types.comma) + { elt = null; } + else if (this.type === types.ellipsis) { + elt = this.parseSpread(refDestructuringErrors); + if (refDestructuringErrors && this.type === types.comma && refDestructuringErrors.trailingComma < 0) + { refDestructuringErrors.trailingComma = this.start; } + } else { + elt = this.parseMaybeAssign(false, refDestructuringErrors); + } + elts.push(elt); } - if (flags.indexOf(flag, i + 1) > -1) { - this$1.raise(state.start, "Duplicate regular expression flag"); + return elts + }; + + pp$3.checkUnreserved = function(ref) { + var start = ref.start; + var end = ref.end; + var name = ref.name; + + if (this.inGenerator && name === "yield") + { this.raiseRecoverable(start, "Cannot use 'yield' as identifier inside a generator"); } + if (this.inAsync && name === "await") + { this.raiseRecoverable(start, "Cannot use 'await' as identifier inside an async function"); } + if (this.keywords.test(name)) + { this.raise(start, ("Unexpected keyword '" + name + "'")); } + if (this.options.ecmaVersion < 6 && + this.input.slice(start, end).indexOf("\\") !== -1) { return } + var re = this.strict ? this.reservedWordsStrict : this.reservedWords; + if (re.test(name)) { + if (!this.inAsync && name === "await") + { this.raiseRecoverable(start, "Cannot use keyword 'await' outside an async function"); } + this.raiseRecoverable(start, ("The keyword '" + name + "' is reserved")); } + }; + + // 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, isBinding) { + var node = this.startNode(); + if (this.type === types.name) { + node.name = this.value; + } else if (this.type.keyword) { + node.name = this.type.keyword; + + // To fix https://github.com/acornjs/acorn/issues/575 + // `class` and `function` keywords push new context into this.context. + // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name. + // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword + if ((node.name === "class" || node.name === "function") && + (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) { + this.context.pop(); + } + } else { + this.unexpected(); + } + this.next(); + this.finishNode(node, "Identifier"); + if (!liberal) { + this.checkUnreserved(node); + if (node.name === "await" && !this.awaitIdentPos) + { this.awaitIdentPos = node.start; } + } + return node + }; + + // Parses yield expression inside generator. + + pp$3.parseYield = function(noIn) { + if (!this.yieldPos) { this.yieldPos = this.start; } + + var node = this.startNode(); + this.next(); + if (this.type === types.semi || this.canInsertSemicolon() || (this.type !== types.star && !this.type.startsExpr)) { + node.delegate = false; + node.argument = null; + } else { + node.delegate = this.eat(types.star); + node.argument = this.parseMaybeAssign(noIn); + } + 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 pp$5 = Parser.prototype; + + var Scope = function Scope(flags) { + this.flags = flags; + // A list of var-declared names in the current lexical scope + this.var = []; + // A list of lexically-declared names in the current lexical scope + this.lexical = []; + // A list of lexically-declared FunctionDeclaration names in the current lexical scope + this.functions = []; + }; + + // The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names. + + pp$5.enterScope = function(flags) { + this.scopeStack.push(new Scope(flags)); + }; + + pp$5.exitScope = function() { + this.scopeStack.pop(); + }; + + // The spec says: + // > At the top level of a function, or script, function declarations are + // > treated like var declarations rather than like lexical declarations. + pp$5.treatFunctionsAsVarInScope = function(scope) { + return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP) + }; + + pp$5.declareName = function(name, bindingType, pos) { + var redeclared = false; + if (bindingType === BIND_LEXICAL) { + var scope = this.currentScope(); + redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1; + scope.lexical.push(name); + if (this.inModule && (scope.flags & SCOPE_TOP)) + { delete this.undefinedExports[name]; } + } else if (bindingType === BIND_SIMPLE_CATCH) { + var scope$1 = this.currentScope(); + scope$1.lexical.push(name); + } else if (bindingType === BIND_FUNCTION) { + var scope$2 = this.currentScope(); + if (this.treatFunctionsAsVar) + { redeclared = scope$2.lexical.indexOf(name) > -1; } + else + { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; } + scope$2.functions.push(name); + } else { + for (var i = this.scopeStack.length - 1; i >= 0; --i) { + var scope$3 = this.scopeStack[i]; + if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) || + !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) { + redeclared = true; + break + } + scope$3.var.push(name); + if (this.inModule && (scope$3.flags & SCOPE_TOP)) + { delete this.undefinedExports[name]; } + if (scope$3.flags & SCOPE_VAR) { break } + } + } + if (redeclared) { this.raiseRecoverable(pos, ("Identifier '" + name + "' has already been declared")); } + }; + + pp$5.checkLocalExport = function(id) { + // scope.functions must be empty as Module code is always strict. + if (this.scopeStack[0].lexical.indexOf(id.name) === -1 && + this.scopeStack[0].var.indexOf(id.name) === -1) { + this.undefinedExports[id.name] = id; + } + }; + + pp$5.currentScope = function() { + return this.scopeStack[this.scopeStack.length - 1] + }; + + pp$5.currentVarScope = function() { + for (var i = this.scopeStack.length - 1;; i--) { + var scope = this.scopeStack[i]; + if (scope.flags & SCOPE_VAR) { return scope } + } + }; + + // Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`. + pp$5.currentThisScope = function() { + for (var i = this.scopeStack.length - 1;; i--) { + var scope = this.scopeStack[i]; + if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope } + } + }; + + 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$6 = Parser.prototype; + + pp$6.startNode = function() { + return new Node(this, this.start, this.startLoc) + }; + + pp$6.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 } -}; -/** - * Validate the pattern part of a given RegExpLiteral. - * - * @param {RegExpValidationState} state The state to validate RegExp. - * @returns {void} - */ -pp$9.validateRegExpPattern = function(state) { - this.regexp_pattern(state); + pp$6.finishNode = function(node, type) { + return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc) + }; - // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of - // parsing contains a |GroupName|, reparse with the goal symbol - // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError* - // exception if _P_ did not conform to the grammar, if any elements of _P_ - // were not matched by the parse, or if any Early Error conditions exist. - if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) { - state.switchN = true; + // Finish node at given position + + pp$6.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 + + var TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) { + this.token = token; + this.isExpr = !!isExpr; + this.preserveSpace = !!preserveSpace; + this.override = override; + this.generator = !!generator; + }; + + var types$1 = { + b_stat: new TokContext("{", false), + b_expr: new TokContext("{", true), + b_tmpl: new TokContext("${", false), + p_stat: new TokContext("(", false), + p_expr: new TokContext("(", true), + q_tmpl: new TokContext("`", true, true, function (p) { return p.tryReadTemplateToken(); }), + f_stat: new TokContext("function", false), + f_expr: new TokContext("function", true), + f_expr_gen: new TokContext("function", true, false, null, true), + f_gen: new TokContext("function", false, false, null, true) + }; + + var pp$7 = Parser.prototype; + + pp$7.initialContext = function() { + return [types$1.b_stat] + }; + + pp$7.braceIsBlock = function(prevType) { + var parent = this.curContext(); + if (parent === types$1.f_expr || parent === types$1.f_stat) + { return true } + if (prevType === types.colon && (parent === types$1.b_stat || parent === types$1.b_expr)) + { return !parent.isExpr } + + // The check for `tt.name && exprAllowed` detects whether we are + // after a `yield` or `of` construct. See the `updateContext` for + // `tt.name`. + if (prevType === types._return || prevType === types.name && this.exprAllowed) + { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) } + if (prevType === types._else || prevType === types.semi || prevType === types.eof || prevType === types.parenR || prevType === types.arrow) + { return true } + if (prevType === types.braceL) + { return parent === types$1.b_stat } + if (prevType === types._var || prevType === types._const || prevType === types.name) + { return false } + return !this.exprAllowed + }; + + pp$7.inGeneratorContext = function() { + for (var i = this.context.length - 1; i >= 1; i--) { + var context = this.context[i]; + if (context.token === "function") + { return context.generator } + } + return false + }; + + pp$7.updateContext = function(prevType) { + var update, type = this.type; + if (type.keyword && prevType === types.dot) + { this.exprAllowed = false; } + else if (update = type.updateContext) + { update.call(this, prevType); } + else + { this.exprAllowed = type.beforeExpr; } + }; + + // Token-specific context update code + + types.parenR.updateContext = types.braceR.updateContext = function() { + if (this.context.length === 1) { + this.exprAllowed = true; + return + } + var out = this.context.pop(); + if (out === types$1.b_stat && this.curContext().token === "function") { + out = this.context.pop(); + } + this.exprAllowed = !out.isExpr; + }; + + types.braceL.updateContext = function(prevType) { + this.context.push(this.braceIsBlock(prevType) ? types$1.b_stat : types$1.b_expr); + this.exprAllowed = true; + }; + + types.dollarBraceL.updateContext = function() { + this.context.push(types$1.b_tmpl); + this.exprAllowed = true; + }; + + types.parenL.updateContext = function(prevType) { + var statementParens = prevType === types._if || prevType === types._for || prevType === types._with || prevType === types._while; + this.context.push(statementParens ? types$1.p_stat : types$1.p_expr); + this.exprAllowed = true; + }; + + types.incDec.updateContext = function() { + // tokExprAllowed stays unchanged + }; + + types._function.updateContext = types._class.updateContext = function(prevType) { + if (prevType.beforeExpr && prevType !== types.semi && prevType !== types._else && + !(prevType === types._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) && + !((prevType === types.colon || prevType === types.braceL) && this.curContext() === types$1.b_stat)) + { this.context.push(types$1.f_expr); } + else + { this.context.push(types$1.f_stat); } + this.exprAllowed = false; + }; + + types.backQuote.updateContext = function() { + if (this.curContext() === types$1.q_tmpl) + { this.context.pop(); } + else + { this.context.push(types$1.q_tmpl); } + this.exprAllowed = false; + }; + + types.star.updateContext = function(prevType) { + if (prevType === types._function) { + var index = this.context.length - 1; + if (this.context[index] === types$1.f_expr) + { this.context[index] = types$1.f_expr_gen; } + else + { this.context[index] = types$1.f_gen; } + } + this.exprAllowed = true; + }; + + types.name.updateContext = function(prevType) { + var allowed = false; + if (this.options.ecmaVersion >= 6 && prevType !== types.dot) { + if (this.value === "of" && !this.exprAllowed || + this.value === "yield" && this.inGeneratorContext()) + { allowed = true; } + } + this.exprAllowed = allowed; + }; + + // This file contains Unicode properties extracted from the ECMAScript + // specification. The lists are extracted like so: + // $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText) + + // #table-binary-unicode-properties + var ecma9BinaryProperties = "ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS"; + var ecma10BinaryProperties = ecma9BinaryProperties + " Extended_Pictographic"; + var ecma11BinaryProperties = ecma10BinaryProperties; + var unicodeBinaryProperties = { + 9: ecma9BinaryProperties, + 10: ecma10BinaryProperties, + 11: ecma11BinaryProperties + }; + + // #table-unicode-general-category-values + var unicodeGeneralCategoryValues = "Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu"; + + // #table-unicode-script-values + var ecma9ScriptValues = "Adlam Adlm Ahom Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb"; + var ecma10ScriptValues = ecma9ScriptValues + " Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd"; + var ecma11ScriptValues = ecma10ScriptValues + " Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho"; + var unicodeScriptValues = { + 9: ecma9ScriptValues, + 10: ecma10ScriptValues, + 11: ecma11ScriptValues + }; + + var data = {}; + function buildUnicodeData(ecmaVersion) { + var d = data[ecmaVersion] = { + binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + " " + unicodeGeneralCategoryValues), + nonBinary: { + General_Category: wordsRegexp(unicodeGeneralCategoryValues), + Script: wordsRegexp(unicodeScriptValues[ecmaVersion]) + } + }; + d.nonBinary.Script_Extensions = d.nonBinary.Script; + + d.nonBinary.gc = d.nonBinary.General_Category; + d.nonBinary.sc = d.nonBinary.Script; + d.nonBinary.scx = d.nonBinary.Script_Extensions; + } + buildUnicodeData(9); + buildUnicodeData(10); + buildUnicodeData(11); + + var pp$8 = Parser.prototype; + + var RegExpValidationState = function RegExpValidationState(parser) { + this.parser = parser; + this.validFlags = "gim" + (parser.options.ecmaVersion >= 6 ? "uy" : "") + (parser.options.ecmaVersion >= 9 ? "s" : ""); + this.unicodeProperties = data[parser.options.ecmaVersion >= 11 ? 11 : parser.options.ecmaVersion]; + this.source = ""; + this.flags = ""; + this.start = 0; + this.switchU = false; + this.switchN = false; + this.pos = 0; + this.lastIntValue = 0; + this.lastStringValue = ""; + this.lastAssertionIsQuantifiable = false; + this.numCapturingParens = 0; + this.maxBackReference = 0; + this.groupNames = []; + this.backReferenceNames = []; + }; + + RegExpValidationState.prototype.reset = function reset (start, pattern, flags) { + var unicode = flags.indexOf("u") !== -1; + this.start = start | 0; + this.source = pattern + ""; + this.flags = flags; + this.switchU = unicode && this.parser.options.ecmaVersion >= 6; + this.switchN = unicode && this.parser.options.ecmaVersion >= 9; + }; + + RegExpValidationState.prototype.raise = function raise (message) { + this.parser.raiseRecoverable(this.start, ("Invalid regular expression: /" + (this.source) + "/: " + message)); + }; + + // If u flag is given, this returns the code point at the index (it combines a surrogate pair). + // Otherwise, this returns the code unit of the index (can be a part of a surrogate pair). + RegExpValidationState.prototype.at = function at (i) { + var s = this.source; + var l = s.length; + if (i >= l) { + return -1 + } + var c = s.charCodeAt(i); + if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) { + return c + } + return (c << 10) + s.charCodeAt(i + 1) - 0x35FDC00 + }; + + RegExpValidationState.prototype.nextIndex = function nextIndex (i) { + var s = this.source; + var l = s.length; + if (i >= l) { + return l + } + var c = s.charCodeAt(i); + if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) { + return i + 1 + } + return i + 2 + }; + + RegExpValidationState.prototype.current = function current () { + return this.at(this.pos) + }; + + RegExpValidationState.prototype.lookahead = function lookahead () { + return this.at(this.nextIndex(this.pos)) + }; + + RegExpValidationState.prototype.advance = function advance () { + this.pos = this.nextIndex(this.pos); + }; + + RegExpValidationState.prototype.eat = function eat (ch) { + if (this.current() === ch) { + this.advance(); + return true + } + return false + }; + + function codePointToString(ch) { + if (ch <= 0xFFFF) { return String.fromCharCode(ch) } + ch -= 0x10000; + return String.fromCharCode((ch >> 10) + 0xD800, (ch & 0x03FF) + 0xDC00) + } + + /** + * Validate the flags part of a given RegExpLiteral. + * + * @param {RegExpValidationState} state The state to validate RegExp. + * @returns {void} + */ + pp$8.validateRegExpFlags = function(state) { + var validFlags = state.validFlags; + var flags = state.flags; + + for (var i = 0; i < flags.length; i++) { + var flag = flags.charAt(i); + if (validFlags.indexOf(flag) === -1) { + this.raise(state.start, "Invalid regular expression flag"); + } + if (flags.indexOf(flag, i + 1) > -1) { + this.raise(state.start, "Duplicate regular expression flag"); + } + } + }; + + /** + * Validate the pattern part of a given RegExpLiteral. + * + * @param {RegExpValidationState} state The state to validate RegExp. + * @returns {void} + */ + pp$8.validateRegExpPattern = function(state) { this.regexp_pattern(state); - } -}; -// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern -pp$9.regexp_pattern = function(state) { - state.pos = 0; - state.lastIntValue = 0; - state.lastStringValue = ""; - state.lastAssertionIsQuantifiable = false; - state.numCapturingParens = 0; - state.maxBackReference = 0; - state.groupNames.length = 0; - state.backReferenceNames.length = 0; - - this.regexp_disjunction(state); - - if (state.pos !== state.source.length) { - // Make the same messages as V8. - if (state.eat(0x29 /* ) */)) { - state.raise("Unmatched ')'"); + // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of + // parsing contains a |GroupName|, reparse with the goal symbol + // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError* + // exception if _P_ did not conform to the grammar, if any elements of _P_ + // were not matched by the parse, or if any Early Error conditions exist. + if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) { + state.switchN = true; + this.regexp_pattern(state); } - if (state.eat(0x5D /* [ */) || state.eat(0x7D /* } */)) { + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern + pp$8.regexp_pattern = function(state) { + state.pos = 0; + state.lastIntValue = 0; + state.lastStringValue = ""; + state.lastAssertionIsQuantifiable = false; + state.numCapturingParens = 0; + state.maxBackReference = 0; + state.groupNames.length = 0; + state.backReferenceNames.length = 0; + + this.regexp_disjunction(state); + + if (state.pos !== state.source.length) { + // Make the same messages as V8. + if (state.eat(0x29 /* ) */)) { + state.raise("Unmatched ')'"); + } + if (state.eat(0x5D /* [ */) || state.eat(0x7D /* } */)) { + state.raise("Lone quantifier brackets"); + } + } + if (state.maxBackReference > state.numCapturingParens) { + state.raise("Invalid escape"); + } + for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) { + var name = list[i]; + + if (state.groupNames.indexOf(name) === -1) { + state.raise("Invalid named capture referenced"); + } + } + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction + pp$8.regexp_disjunction = function(state) { + this.regexp_alternative(state); + while (state.eat(0x7C /* | */)) { + this.regexp_alternative(state); + } + + // Make the same message as V8. + if (this.regexp_eatQuantifier(state, true)) { + state.raise("Nothing to repeat"); + } + if (state.eat(0x7B /* { */)) { state.raise("Lone quantifier brackets"); } - } - if (state.maxBackReference > state.numCapturingParens) { - state.raise("Invalid escape"); - } - for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) { - var name = list[i]; + }; - if (state.groupNames.indexOf(name) === -1) { - state.raise("Invalid named capture referenced"); - } - } -}; + // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative + pp$8.regexp_alternative = function(state) { + while (state.pos < state.source.length && this.regexp_eatTerm(state)) + { } + }; -// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction -pp$9.regexp_disjunction = function(state) { - var this$1 = this; - - this.regexp_alternative(state); - while (state.eat(0x7C /* | */)) { - this$1.regexp_alternative(state); - } - - // Make the same message as V8. - if (this.regexp_eatQuantifier(state, true)) { - state.raise("Nothing to repeat"); - } - if (state.eat(0x7B /* { */)) { - state.raise("Lone quantifier brackets"); - } -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative -pp$9.regexp_alternative = function(state) { - while (state.pos < state.source.length && this.regexp_eatTerm(state)) - { } -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term -pp$9.regexp_eatTerm = function(state) { - if (this.regexp_eatAssertion(state)) { - // Handle `QuantifiableAssertion Quantifier` alternative. - // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion - // is a QuantifiableAssertion. - if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) { - // Make the same message as V8. - if (state.switchU) { - state.raise("Invalid quantifier"); - } - } - return true - } - - if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) { - this.regexp_eatQuantifier(state); - return true - } - - return false -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion -pp$9.regexp_eatAssertion = function(state) { - var start = state.pos; - state.lastAssertionIsQuantifiable = false; - - // ^, $ - if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) { - return true - } - - // \b \B - if (state.eat(0x5C /* \ */)) { - if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) { - return true - } - state.pos = start; - } - - // Lookahead / Lookbehind - if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) { - var lookbehind = false; - if (this.options.ecmaVersion >= 9) { - lookbehind = state.eat(0x3C /* < */); - } - if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) { - this.regexp_disjunction(state); - if (!state.eat(0x29 /* ) */)) { - state.raise("Unterminated group"); - } - state.lastAssertionIsQuantifiable = !lookbehind; - return true - } - } - - state.pos = start; - return false -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier -pp$9.regexp_eatQuantifier = function(state, noError) { - if ( noError === void 0 ) noError = false; - - if (this.regexp_eatQuantifierPrefix(state, noError)) { - state.eat(0x3F /* ? */); - return true - } - return false -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix -pp$9.regexp_eatQuantifierPrefix = function(state, noError) { - return ( - state.eat(0x2A /* * */) || - state.eat(0x2B /* + */) || - state.eat(0x3F /* ? */) || - this.regexp_eatBracedQuantifier(state, noError) - ) -}; -pp$9.regexp_eatBracedQuantifier = function(state, noError) { - var start = state.pos; - if (state.eat(0x7B /* { */)) { - var min = 0, max = -1; - if (this.regexp_eatDecimalDigits(state)) { - min = state.lastIntValue; - if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) { - max = state.lastIntValue; - } - if (state.eat(0x7D /* } */)) { - // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term - if (max !== -1 && max < min && !noError) { - state.raise("numbers out of order in {} quantifier"); + // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term + pp$8.regexp_eatTerm = function(state) { + if (this.regexp_eatAssertion(state)) { + // Handle `QuantifiableAssertion Quantifier` alternative. + // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion + // is a QuantifiableAssertion. + if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) { + // Make the same message as V8. + if (state.switchU) { + state.raise("Invalid quantifier"); } + } + return true + } + + if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) { + this.regexp_eatQuantifier(state); + return true + } + + return false + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion + pp$8.regexp_eatAssertion = function(state) { + var start = state.pos; + state.lastAssertionIsQuantifiable = false; + + // ^, $ + if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) { + return true + } + + // \b \B + if (state.eat(0x5C /* \ */)) { + if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) { + return true + } + state.pos = start; + } + + // Lookahead / Lookbehind + if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) { + var lookbehind = false; + if (this.options.ecmaVersion >= 9) { + lookbehind = state.eat(0x3C /* < */); + } + if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) { + this.regexp_disjunction(state); + if (!state.eat(0x29 /* ) */)) { + state.raise("Unterminated group"); + } + state.lastAssertionIsQuantifiable = !lookbehind; return true } } - if (state.switchU && !noError) { - state.raise("Incomplete quantifier"); - } - state.pos = start; - } - return false -}; -// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom -pp$9.regexp_eatAtom = function(state) { - return ( - this.regexp_eatPatternCharacters(state) || - state.eat(0x2E /* . */) || - this.regexp_eatReverseSolidusAtomEscape(state) || - this.regexp_eatCharacterClass(state) || - this.regexp_eatUncapturingGroup(state) || - this.regexp_eatCapturingGroup(state) - ) -}; -pp$9.regexp_eatReverseSolidusAtomEscape = function(state) { - var start = state.pos; - if (state.eat(0x5C /* \ */)) { - if (this.regexp_eatAtomEscape(state)) { + state.pos = start; + return false + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier + pp$8.regexp_eatQuantifier = function(state, noError) { + if ( noError === void 0 ) noError = false; + + if (this.regexp_eatQuantifierPrefix(state, noError)) { + state.eat(0x3F /* ? */); return true } - state.pos = start; - } - return false -}; -pp$9.regexp_eatUncapturingGroup = function(state) { - var start = state.pos; - if (state.eat(0x28 /* ( */)) { - if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) { + return false + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix + pp$8.regexp_eatQuantifierPrefix = function(state, noError) { + return ( + state.eat(0x2A /* * */) || + state.eat(0x2B /* + */) || + state.eat(0x3F /* ? */) || + this.regexp_eatBracedQuantifier(state, noError) + ) + }; + pp$8.regexp_eatBracedQuantifier = function(state, noError) { + var start = state.pos; + if (state.eat(0x7B /* { */)) { + var min = 0, max = -1; + if (this.regexp_eatDecimalDigits(state)) { + min = state.lastIntValue; + if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) { + max = state.lastIntValue; + } + if (state.eat(0x7D /* } */)) { + // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term + if (max !== -1 && max < min && !noError) { + state.raise("numbers out of order in {} quantifier"); + } + return true + } + } + if (state.switchU && !noError) { + state.raise("Incomplete quantifier"); + } + state.pos = start; + } + return false + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom + pp$8.regexp_eatAtom = function(state) { + return ( + this.regexp_eatPatternCharacters(state) || + state.eat(0x2E /* . */) || + this.regexp_eatReverseSolidusAtomEscape(state) || + this.regexp_eatCharacterClass(state) || + this.regexp_eatUncapturingGroup(state) || + this.regexp_eatCapturingGroup(state) + ) + }; + pp$8.regexp_eatReverseSolidusAtomEscape = function(state) { + var start = state.pos; + if (state.eat(0x5C /* \ */)) { + if (this.regexp_eatAtomEscape(state)) { + return true + } + state.pos = start; + } + return false + }; + pp$8.regexp_eatUncapturingGroup = function(state) { + var start = state.pos; + if (state.eat(0x28 /* ( */)) { + if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) { + this.regexp_disjunction(state); + if (state.eat(0x29 /* ) */)) { + return true + } + state.raise("Unterminated group"); + } + state.pos = start; + } + return false + }; + pp$8.regexp_eatCapturingGroup = function(state) { + if (state.eat(0x28 /* ( */)) { + if (this.options.ecmaVersion >= 9) { + this.regexp_groupSpecifier(state); + } else if (state.current() === 0x3F /* ? */) { + state.raise("Invalid group"); + } this.regexp_disjunction(state); if (state.eat(0x29 /* ) */)) { + state.numCapturingParens += 1; return true } state.raise("Unterminated group"); } - state.pos = start; - } - return false -}; -pp$9.regexp_eatCapturingGroup = function(state) { - if (state.eat(0x28 /* ( */)) { - if (this.options.ecmaVersion >= 9) { - this.regexp_groupSpecifier(state); - } else if (state.current() === 0x3F /* ? */) { - state.raise("Invalid group"); + return false + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom + pp$8.regexp_eatExtendedAtom = function(state) { + return ( + state.eat(0x2E /* . */) || + this.regexp_eatReverseSolidusAtomEscape(state) || + this.regexp_eatCharacterClass(state) || + this.regexp_eatUncapturingGroup(state) || + this.regexp_eatCapturingGroup(state) || + this.regexp_eatInvalidBracedQuantifier(state) || + this.regexp_eatExtendedPatternCharacter(state) + ) + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier + pp$8.regexp_eatInvalidBracedQuantifier = function(state) { + if (this.regexp_eatBracedQuantifier(state, true)) { + state.raise("Nothing to repeat"); } - this.regexp_disjunction(state); - if (state.eat(0x29 /* ) */)) { - state.numCapturingParens += 1; - return true - } - state.raise("Unterminated group"); - } - return false -}; + return false + }; -// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom -pp$9.regexp_eatExtendedAtom = function(state) { - return ( - state.eat(0x2E /* . */) || - this.regexp_eatReverseSolidusAtomEscape(state) || - this.regexp_eatCharacterClass(state) || - this.regexp_eatUncapturingGroup(state) || - this.regexp_eatCapturingGroup(state) || - this.regexp_eatInvalidBracedQuantifier(state) || - this.regexp_eatExtendedPatternCharacter(state) - ) -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier -pp$9.regexp_eatInvalidBracedQuantifier = function(state) { - if (this.regexp_eatBracedQuantifier(state, true)) { - state.raise("Nothing to repeat"); - } - return false -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter -pp$9.regexp_eatSyntaxCharacter = function(state) { - var ch = state.current(); - if (isSyntaxCharacter(ch)) { - state.lastIntValue = ch; - state.advance(); - return true - } - return false -}; -function isSyntaxCharacter(ch) { - return ( - ch === 0x24 /* $ */ || - ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ || - ch === 0x2E /* . */ || - ch === 0x3F /* ? */ || - ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ || - ch >= 0x7B /* { */ && ch <= 0x7D /* } */ - ) -} - -// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter -// But eat eager. -pp$9.regexp_eatPatternCharacters = function(state) { - var start = state.pos; - var ch = 0; - while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) { - state.advance(); - } - return state.pos !== start -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter -pp$9.regexp_eatExtendedPatternCharacter = function(state) { - var ch = state.current(); - if ( - ch !== -1 && - ch !== 0x24 /* $ */ && - !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) && - ch !== 0x2E /* . */ && - ch !== 0x3F /* ? */ && - ch !== 0x5B /* [ */ && - ch !== 0x5E /* ^ */ && - ch !== 0x7C /* | */ - ) { - state.advance(); - return true - } - return false -}; - -// GroupSpecifier[U] :: -// [empty] -// `?` GroupName[?U] -pp$9.regexp_groupSpecifier = function(state) { - if (state.eat(0x3F /* ? */)) { - if (this.regexp_eatGroupName(state)) { - if (state.groupNames.indexOf(state.lastStringValue) !== -1) { - state.raise("Duplicate capture group name"); - } - state.groupNames.push(state.lastStringValue); - return - } - state.raise("Invalid group"); - } -}; - -// GroupName[U] :: -// `<` RegExpIdentifierName[?U] `>` -// Note: this updates `state.lastStringValue` property with the eaten name. -pp$9.regexp_eatGroupName = function(state) { - state.lastStringValue = ""; - if (state.eat(0x3C /* < */)) { - if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) { - return true - } - state.raise("Invalid capture group name"); - } - return false -}; - -// RegExpIdentifierName[U] :: -// RegExpIdentifierStart[?U] -// RegExpIdentifierName[?U] RegExpIdentifierPart[?U] -// Note: this updates `state.lastStringValue` property with the eaten name. -pp$9.regexp_eatRegExpIdentifierName = function(state) { - state.lastStringValue = ""; - if (this.regexp_eatRegExpIdentifierStart(state)) { - state.lastStringValue += codePointToString$1(state.lastIntValue); - while (this.regexp_eatRegExpIdentifierPart(state)) { - state.lastStringValue += codePointToString$1(state.lastIntValue); - } - return true - } - return false -}; - -// RegExpIdentifierStart[U] :: -// UnicodeIDStart -// `$` -// `_` -// `\` RegExpUnicodeEscapeSequence[?U] -pp$9.regexp_eatRegExpIdentifierStart = function(state) { - var start = state.pos; - var ch = state.current(); - state.advance(); - - if (ch === 0x5C /* \ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state)) { - ch = state.lastIntValue; - } - if (isRegExpIdentifierStart(ch)) { - state.lastIntValue = ch; - return true - } - - state.pos = start; - return false -}; -function isRegExpIdentifierStart(ch) { - return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ -} - -// RegExpIdentifierPart[U] :: -// UnicodeIDContinue -// `$` -// `_` -// `\` RegExpUnicodeEscapeSequence[?U] -// -// -pp$9.regexp_eatRegExpIdentifierPart = function(state) { - var start = state.pos; - var ch = state.current(); - state.advance(); - - if (ch === 0x5C /* \ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state)) { - ch = state.lastIntValue; - } - if (isRegExpIdentifierPart(ch)) { - state.lastIntValue = ch; - return true - } - - state.pos = start; - return false -}; -function isRegExpIdentifierPart(ch) { - return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* */ || ch === 0x200D /* */ -} - -// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape -pp$9.regexp_eatAtomEscape = function(state) { - if ( - this.regexp_eatBackReference(state) || - this.regexp_eatCharacterClassEscape(state) || - this.regexp_eatCharacterEscape(state) || - (state.switchN && this.regexp_eatKGroupName(state)) - ) { - return true - } - if (state.switchU) { - // Make the same message as V8. - if (state.current() === 0x63 /* c */) { - state.raise("Invalid unicode escape"); - } - state.raise("Invalid escape"); - } - return false -}; -pp$9.regexp_eatBackReference = function(state) { - var start = state.pos; - if (this.regexp_eatDecimalEscape(state)) { - var n = state.lastIntValue; - if (state.switchU) { - // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape - if (n > state.maxBackReference) { - state.maxBackReference = n; - } - return true - } - if (n <= state.numCapturingParens) { - return true - } - state.pos = start; - } - return false -}; -pp$9.regexp_eatKGroupName = function(state) { - if (state.eat(0x6B /* k */)) { - if (this.regexp_eatGroupName(state)) { - state.backReferenceNames.push(state.lastStringValue); - return true - } - state.raise("Invalid named reference"); - } - return false -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape -pp$9.regexp_eatCharacterEscape = function(state) { - return ( - this.regexp_eatControlEscape(state) || - this.regexp_eatCControlLetter(state) || - this.regexp_eatZero(state) || - this.regexp_eatHexEscapeSequence(state) || - this.regexp_eatRegExpUnicodeEscapeSequence(state) || - (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) || - this.regexp_eatIdentityEscape(state) - ) -}; -pp$9.regexp_eatCControlLetter = function(state) { - var start = state.pos; - if (state.eat(0x63 /* c */)) { - if (this.regexp_eatControlLetter(state)) { - return true - } - state.pos = start; - } - return false -}; -pp$9.regexp_eatZero = function(state) { - if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) { - state.lastIntValue = 0; - state.advance(); - return true - } - return false -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape -pp$9.regexp_eatControlEscape = function(state) { - var ch = state.current(); - if (ch === 0x74 /* t */) { - state.lastIntValue = 0x09; /* \t */ - state.advance(); - return true - } - if (ch === 0x6E /* n */) { - state.lastIntValue = 0x0A; /* \n */ - state.advance(); - return true - } - if (ch === 0x76 /* v */) { - state.lastIntValue = 0x0B; /* \v */ - state.advance(); - return true - } - if (ch === 0x66 /* f */) { - state.lastIntValue = 0x0C; /* \f */ - state.advance(); - return true - } - if (ch === 0x72 /* r */) { - state.lastIntValue = 0x0D; /* \r */ - state.advance(); - return true - } - return false -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter -pp$9.regexp_eatControlLetter = function(state) { - var ch = state.current(); - if (isControlLetter(ch)) { - state.lastIntValue = ch % 0x20; - state.advance(); - return true - } - return false -}; -function isControlLetter(ch) { - return ( - (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) || - (ch >= 0x61 /* a */ && ch <= 0x7A /* z */) - ) -} - -// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence -pp$9.regexp_eatRegExpUnicodeEscapeSequence = function(state) { - var start = state.pos; - - if (state.eat(0x75 /* u */)) { - if (this.regexp_eatFixedHexDigits(state, 4)) { - var lead = state.lastIntValue; - if (state.switchU && lead >= 0xD800 && lead <= 0xDBFF) { - var leadSurrogateEnd = state.pos; - if (state.eat(0x5C /* \ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) { - var trail = state.lastIntValue; - if (trail >= 0xDC00 && trail <= 0xDFFF) { - state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; - return true - } - } - state.pos = leadSurrogateEnd; - state.lastIntValue = lead; - } - return true - } - if ( - state.switchU && - state.eat(0x7B /* { */) && - this.regexp_eatHexDigits(state) && - state.eat(0x7D /* } */) && - isValidUnicode(state.lastIntValue) - ) { - return true - } - if (state.switchU) { - state.raise("Invalid unicode escape"); - } - state.pos = start; - } - - return false -}; -function isValidUnicode(ch) { - return ch >= 0 && ch <= 0x10FFFF -} - -// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape -pp$9.regexp_eatIdentityEscape = function(state) { - if (state.switchU) { - if (this.regexp_eatSyntaxCharacter(state)) { - return true - } - if (state.eat(0x2F /* / */)) { - state.lastIntValue = 0x2F; /* / */ + // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter + pp$8.regexp_eatSyntaxCharacter = function(state) { + var ch = state.current(); + if (isSyntaxCharacter(ch)) { + state.lastIntValue = ch; + state.advance(); return true } return false + }; + function isSyntaxCharacter(ch) { + return ( + ch === 0x24 /* $ */ || + ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ || + ch === 0x2E /* . */ || + ch === 0x3F /* ? */ || + ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ || + ch >= 0x7B /* { */ && ch <= 0x7D /* } */ + ) } - var ch = state.current(); - if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) { - state.lastIntValue = ch; - state.advance(); - return true - } - - return false -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape -pp$9.regexp_eatDecimalEscape = function(state) { - state.lastIntValue = 0; - var ch = state.current(); - if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) { - do { - state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */); + // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter + // But eat eager. + pp$8.regexp_eatPatternCharacters = function(state) { + var start = state.pos; + var ch = 0; + while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) { state.advance(); - } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) - return true - } - return false -}; + } + return state.pos !== start + }; -// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape -pp$9.regexp_eatCharacterClassEscape = function(state) { - var ch = state.current(); - - if (isCharacterClassEscape(ch)) { - state.lastIntValue = -1; - state.advance(); - return true - } - - if ( - state.switchU && - this.options.ecmaVersion >= 9 && - (ch === 0x50 /* P */ || ch === 0x70 /* p */) - ) { - state.lastIntValue = -1; - state.advance(); + // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter + pp$8.regexp_eatExtendedPatternCharacter = function(state) { + var ch = state.current(); if ( - state.eat(0x7B /* { */) && - this.regexp_eatUnicodePropertyValueExpression(state) && - state.eat(0x7D /* } */) + ch !== -1 && + ch !== 0x24 /* $ */ && + !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) && + ch !== 0x2E /* . */ && + ch !== 0x3F /* ? */ && + ch !== 0x5B /* [ */ && + ch !== 0x5E /* ^ */ && + ch !== 0x7C /* | */ ) { + state.advance(); return true } - state.raise("Invalid property name"); - } + return false + }; - return false -}; -function isCharacterClassEscape(ch) { - return ( - ch === 0x64 /* d */ || - ch === 0x44 /* D */ || - ch === 0x73 /* s */ || - ch === 0x53 /* S */ || - ch === 0x77 /* w */ || - ch === 0x57 /* W */ - ) -} - -// UnicodePropertyValueExpression :: -// UnicodePropertyName `=` UnicodePropertyValue -// LoneUnicodePropertyNameOrValue -pp$9.regexp_eatUnicodePropertyValueExpression = function(state) { - var start = state.pos; - - // UnicodePropertyName `=` UnicodePropertyValue - if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) { - var name = state.lastStringValue; - if (this.regexp_eatUnicodePropertyValue(state)) { - var value = state.lastStringValue; - this.regexp_validateUnicodePropertyNameAndValue(state, name, value); - return true - } - } - state.pos = start; - - // LoneUnicodePropertyNameOrValue - if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) { - var nameOrValue = state.lastStringValue; - this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue); - return true - } - return false -}; -pp$9.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) { - if (!has(state.unicodeProperties.nonBinary, name)) - { state.raise("Invalid property name"); } - if (!state.unicodeProperties.nonBinary[name].test(value)) - { state.raise("Invalid property value"); } -}; -pp$9.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) { - if (!state.unicodeProperties.binary.test(nameOrValue)) - { state.raise("Invalid property name"); } -}; - -// UnicodePropertyName :: -// UnicodePropertyNameCharacters -pp$9.regexp_eatUnicodePropertyName = function(state) { - var ch = 0; - state.lastStringValue = ""; - while (isUnicodePropertyNameCharacter(ch = state.current())) { - state.lastStringValue += codePointToString$1(ch); - state.advance(); - } - return state.lastStringValue !== "" -}; -function isUnicodePropertyNameCharacter(ch) { - return isControlLetter(ch) || ch === 0x5F /* _ */ -} - -// UnicodePropertyValue :: -// UnicodePropertyValueCharacters -pp$9.regexp_eatUnicodePropertyValue = function(state) { - var ch = 0; - state.lastStringValue = ""; - while (isUnicodePropertyValueCharacter(ch = state.current())) { - state.lastStringValue += codePointToString$1(ch); - state.advance(); - } - return state.lastStringValue !== "" -}; -function isUnicodePropertyValueCharacter(ch) { - return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch) -} - -// LoneUnicodePropertyNameOrValue :: -// UnicodePropertyValueCharacters -pp$9.regexp_eatLoneUnicodePropertyNameOrValue = function(state) { - return this.regexp_eatUnicodePropertyValue(state) -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass -pp$9.regexp_eatCharacterClass = function(state) { - if (state.eat(0x5B /* [ */)) { - state.eat(0x5E /* ^ */); - this.regexp_classRanges(state); - if (state.eat(0x5D /* [ */)) { - return true - } - // Unreachable since it threw "unterminated regular expression" error before. - state.raise("Unterminated character class"); - } - return false -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges -// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges -// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash -pp$9.regexp_classRanges = function(state) { - var this$1 = this; - - while (this.regexp_eatClassAtom(state)) { - var left = state.lastIntValue; - if (state.eat(0x2D /* - */) && this$1.regexp_eatClassAtom(state)) { - var right = state.lastIntValue; - if (state.switchU && (left === -1 || right === -1)) { - state.raise("Invalid character class"); - } - if (left !== -1 && right !== -1 && left > right) { - state.raise("Range out of order in character class"); + // GroupSpecifier[U] :: + // [empty] + // `?` GroupName[?U] + pp$8.regexp_groupSpecifier = function(state) { + if (state.eat(0x3F /* ? */)) { + if (this.regexp_eatGroupName(state)) { + if (state.groupNames.indexOf(state.lastStringValue) !== -1) { + state.raise("Duplicate capture group name"); + } + state.groupNames.push(state.lastStringValue); + return } + state.raise("Invalid group"); } + }; + + // GroupName[U] :: + // `<` RegExpIdentifierName[?U] `>` + // Note: this updates `state.lastStringValue` property with the eaten name. + pp$8.regexp_eatGroupName = function(state) { + state.lastStringValue = ""; + if (state.eat(0x3C /* < */)) { + if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) { + return true + } + state.raise("Invalid capture group name"); + } + return false + }; + + // RegExpIdentifierName[U] :: + // RegExpIdentifierStart[?U] + // RegExpIdentifierName[?U] RegExpIdentifierPart[?U] + // Note: this updates `state.lastStringValue` property with the eaten name. + pp$8.regexp_eatRegExpIdentifierName = function(state) { + state.lastStringValue = ""; + if (this.regexp_eatRegExpIdentifierStart(state)) { + state.lastStringValue += codePointToString(state.lastIntValue); + while (this.regexp_eatRegExpIdentifierPart(state)) { + state.lastStringValue += codePointToString(state.lastIntValue); + } + return true + } + return false + }; + + // RegExpIdentifierStart[U] :: + // UnicodeIDStart + // `$` + // `_` + // `\` RegExpUnicodeEscapeSequence[?U] + pp$8.regexp_eatRegExpIdentifierStart = function(state) { + var start = state.pos; + var ch = state.current(); + state.advance(); + + if (ch === 0x5C /* \ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state)) { + ch = state.lastIntValue; + } + if (isRegExpIdentifierStart(ch)) { + state.lastIntValue = ch; + return true + } + + state.pos = start; + return false + }; + function isRegExpIdentifierStart(ch) { + return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ } -}; -// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom -// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash -pp$9.regexp_eatClassAtom = function(state) { - var start = state.pos; + // RegExpIdentifierPart[U] :: + // UnicodeIDContinue + // `$` + // `_` + // `\` RegExpUnicodeEscapeSequence[?U] + // + // + pp$8.regexp_eatRegExpIdentifierPart = function(state) { + var start = state.pos; + var ch = state.current(); + state.advance(); - if (state.eat(0x5C /* \ */)) { - if (this.regexp_eatClassEscape(state)) { + if (ch === 0x5C /* \ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state)) { + ch = state.lastIntValue; + } + if (isRegExpIdentifierPart(ch)) { + state.lastIntValue = ch; + return true + } + + state.pos = start; + return false + }; + function isRegExpIdentifierPart(ch) { + return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* */ || ch === 0x200D /* */ + } + + // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape + pp$8.regexp_eatAtomEscape = function(state) { + if ( + this.regexp_eatBackReference(state) || + this.regexp_eatCharacterClassEscape(state) || + this.regexp_eatCharacterEscape(state) || + (state.switchN && this.regexp_eatKGroupName(state)) + ) { return true } if (state.switchU) { // Make the same message as V8. - var ch$1 = state.current(); - if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) { - state.raise("Invalid class escape"); + if (state.current() === 0x63 /* c */) { + state.raise("Invalid unicode escape"); } state.raise("Invalid escape"); } - state.pos = start; - } - - var ch = state.current(); - if (ch !== 0x5D /* [ */) { - state.lastIntValue = ch; - state.advance(); - return true - } - - return false -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape -pp$9.regexp_eatClassEscape = function(state) { - var start = state.pos; - - if (state.eat(0x62 /* b */)) { - state.lastIntValue = 0x08; /* */ - return true - } - - if (state.switchU && state.eat(0x2D /* - */)) { - state.lastIntValue = 0x2D; /* - */ - return true - } - - if (!state.switchU && state.eat(0x63 /* c */)) { - if (this.regexp_eatClassControlLetter(state)) { - return true - } - state.pos = start; - } - - return ( - this.regexp_eatCharacterClassEscape(state) || - this.regexp_eatCharacterEscape(state) - ) -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter -pp$9.regexp_eatClassControlLetter = function(state) { - var ch = state.current(); - if (isDecimalDigit(ch) || ch === 0x5F /* _ */) { - state.lastIntValue = ch % 0x20; - state.advance(); - return true - } - return false -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence -pp$9.regexp_eatHexEscapeSequence = function(state) { - var start = state.pos; - if (state.eat(0x78 /* x */)) { - if (this.regexp_eatFixedHexDigits(state, 2)) { - return true - } - if (state.switchU) { - state.raise("Invalid escape"); - } - state.pos = start; - } - return false -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits -pp$9.regexp_eatDecimalDigits = function(state) { - var start = state.pos; - var ch = 0; - state.lastIntValue = 0; - while (isDecimalDigit(ch = state.current())) { - state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */); - state.advance(); - } - return state.pos !== start -}; -function isDecimalDigit(ch) { - return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */ -} - -// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits -pp$9.regexp_eatHexDigits = function(state) { - var start = state.pos; - var ch = 0; - state.lastIntValue = 0; - while (isHexDigit(ch = state.current())) { - state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch); - state.advance(); - } - return state.pos !== start -}; -function isHexDigit(ch) { - return ( - (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) || - (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) || - (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) - ) -} -function hexToInt(ch) { - if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) { - return 10 + (ch - 0x41 /* A */) - } - if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) { - return 10 + (ch - 0x61 /* a */) - } - return ch - 0x30 /* 0 */ -} - -// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence -// Allows only 0-377(octal) i.e. 0-255(decimal). -pp$9.regexp_eatLegacyOctalEscapeSequence = function(state) { - if (this.regexp_eatOctalDigit(state)) { - var n1 = state.lastIntValue; - if (this.regexp_eatOctalDigit(state)) { - var n2 = state.lastIntValue; - if (n1 <= 3 && this.regexp_eatOctalDigit(state)) { - state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue; - } else { - state.lastIntValue = n1 * 8 + n2; + return false + }; + pp$8.regexp_eatBackReference = function(state) { + var start = state.pos; + if (this.regexp_eatDecimalEscape(state)) { + var n = state.lastIntValue; + if (state.switchU) { + // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape + if (n > state.maxBackReference) { + state.maxBackReference = n; + } + return true + } + if (n <= state.numCapturingParens) { + return true } - } else { - state.lastIntValue = n1; - } - return true - } - return false -}; - -// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit -pp$9.regexp_eatOctalDigit = function(state) { - var ch = state.current(); - if (isOctalDigit(ch)) { - state.lastIntValue = ch - 0x30; /* 0 */ - state.advance(); - return true - } - state.lastIntValue = 0; - return false -}; -function isOctalDigit(ch) { - return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */ -} - -// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits -// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit -// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence -pp$9.regexp_eatFixedHexDigits = function(state, length) { - var start = state.pos; - state.lastIntValue = 0; - for (var i = 0; i < length; ++i) { - var ch = state.current(); - if (!isHexDigit(ch)) { state.pos = start; + } + return false + }; + pp$8.regexp_eatKGroupName = function(state) { + if (state.eat(0x6B /* k */)) { + if (this.regexp_eatGroupName(state)) { + state.backReferenceNames.push(state.lastStringValue); + return true + } + state.raise("Invalid named reference"); + } + return false + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape + pp$8.regexp_eatCharacterEscape = function(state) { + return ( + this.regexp_eatControlEscape(state) || + this.regexp_eatCControlLetter(state) || + this.regexp_eatZero(state) || + this.regexp_eatHexEscapeSequence(state) || + this.regexp_eatRegExpUnicodeEscapeSequence(state) || + (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) || + this.regexp_eatIdentityEscape(state) + ) + }; + pp$8.regexp_eatCControlLetter = function(state) { + var start = state.pos; + if (state.eat(0x63 /* c */)) { + if (this.regexp_eatControlLetter(state)) { + return true + } + state.pos = start; + } + return false + }; + pp$8.regexp_eatZero = function(state) { + if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) { + state.lastIntValue = 0; + state.advance(); + return true + } + return false + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape + pp$8.regexp_eatControlEscape = function(state) { + var ch = state.current(); + if (ch === 0x74 /* t */) { + state.lastIntValue = 0x09; /* \t */ + state.advance(); + return true + } + if (ch === 0x6E /* n */) { + state.lastIntValue = 0x0A; /* \n */ + state.advance(); + return true + } + if (ch === 0x76 /* v */) { + state.lastIntValue = 0x0B; /* \v */ + state.advance(); + return true + } + if (ch === 0x66 /* f */) { + state.lastIntValue = 0x0C; /* \f */ + state.advance(); + return true + } + if (ch === 0x72 /* r */) { + state.lastIntValue = 0x0D; /* \r */ + state.advance(); + return true + } + return false + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter + pp$8.regexp_eatControlLetter = function(state) { + var ch = state.current(); + if (isControlLetter(ch)) { + state.lastIntValue = ch % 0x20; + state.advance(); + return true + } + return false + }; + function isControlLetter(ch) { + return ( + (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) || + (ch >= 0x61 /* a */ && ch <= 0x7A /* z */) + ) + } + + // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence + pp$8.regexp_eatRegExpUnicodeEscapeSequence = function(state) { + var start = state.pos; + + if (state.eat(0x75 /* u */)) { + if (this.regexp_eatFixedHexDigits(state, 4)) { + var lead = state.lastIntValue; + if (state.switchU && lead >= 0xD800 && lead <= 0xDBFF) { + var leadSurrogateEnd = state.pos; + if (state.eat(0x5C /* \ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) { + var trail = state.lastIntValue; + if (trail >= 0xDC00 && trail <= 0xDFFF) { + state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; + return true + } + } + state.pos = leadSurrogateEnd; + state.lastIntValue = lead; + } + return true + } + if ( + state.switchU && + state.eat(0x7B /* { */) && + this.regexp_eatHexDigits(state) && + state.eat(0x7D /* } */) && + isValidUnicode(state.lastIntValue) + ) { + return true + } + if (state.switchU) { + state.raise("Invalid unicode escape"); + } + state.pos = start; + } + + return false + }; + function isValidUnicode(ch) { + return ch >= 0 && ch <= 0x10FFFF + } + + // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape + pp$8.regexp_eatIdentityEscape = function(state) { + if (state.switchU) { + if (this.regexp_eatSyntaxCharacter(state)) { + return true + } + if (state.eat(0x2F /* / */)) { + state.lastIntValue = 0x2F; /* / */ + return true + } return false } - state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch); - state.advance(); + + var ch = state.current(); + if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) { + state.lastIntValue = ch; + state.advance(); + return true + } + + return false + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape + pp$8.regexp_eatDecimalEscape = function(state) { + state.lastIntValue = 0; + var ch = state.current(); + if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) { + do { + state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */); + state.advance(); + } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) + return true + } + return false + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape + pp$8.regexp_eatCharacterClassEscape = function(state) { + var ch = state.current(); + + if (isCharacterClassEscape(ch)) { + state.lastIntValue = -1; + state.advance(); + return true + } + + if ( + state.switchU && + this.options.ecmaVersion >= 9 && + (ch === 0x50 /* P */ || ch === 0x70 /* p */) + ) { + state.lastIntValue = -1; + state.advance(); + if ( + state.eat(0x7B /* { */) && + this.regexp_eatUnicodePropertyValueExpression(state) && + state.eat(0x7D /* } */) + ) { + return true + } + state.raise("Invalid property name"); + } + + return false + }; + function isCharacterClassEscape(ch) { + return ( + ch === 0x64 /* d */ || + ch === 0x44 /* D */ || + ch === 0x73 /* s */ || + ch === 0x53 /* S */ || + ch === 0x77 /* w */ || + ch === 0x57 /* W */ + ) } - return true -}; -// 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. + // UnicodePropertyValueExpression :: + // UnicodePropertyName `=` UnicodePropertyValue + // LoneUnicodePropertyNameOrValue + pp$8.regexp_eatUnicodePropertyValueExpression = function(state) { + var start = state.pos; -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]; } -}; + // UnicodePropertyName `=` UnicodePropertyValue + if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) { + var name = state.lastStringValue; + if (this.regexp_eatUnicodePropertyValue(state)) { + var value = state.lastStringValue; + this.regexp_validateUnicodePropertyNameAndValue(state, name, value); + return true + } + } + state.pos = start; -// ## Tokenizer + // LoneUnicodePropertyNameOrValue + if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) { + var nameOrValue = state.lastStringValue; + this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue); + return true + } + return false + }; + pp$8.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) { + if (!has(state.unicodeProperties.nonBinary, name)) + { state.raise("Invalid property name"); } + if (!state.unicodeProperties.nonBinary[name].test(value)) + { state.raise("Invalid property value"); } + }; + pp$8.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) { + if (!state.unicodeProperties.binary.test(nameOrValue)) + { state.raise("Invalid property name"); } + }; -var pp$8 = Parser.prototype; + // UnicodePropertyName :: + // UnicodePropertyNameCharacters + pp$8.regexp_eatUnicodePropertyName = function(state) { + var ch = 0; + state.lastStringValue = ""; + while (isUnicodePropertyNameCharacter(ch = state.current())) { + state.lastStringValue += codePointToString(ch); + state.advance(); + } + return state.lastStringValue !== "" + }; + function isUnicodePropertyNameCharacter(ch) { + return isControlLetter(ch) || ch === 0x5F /* _ */ + } -// Move to the next token + // UnicodePropertyValue :: + // UnicodePropertyValueCharacters + pp$8.regexp_eatUnicodePropertyValue = function(state) { + var ch = 0; + state.lastStringValue = ""; + while (isUnicodePropertyValueCharacter(ch = state.current())) { + state.lastStringValue += codePointToString(ch); + state.advance(); + } + return state.lastStringValue !== "" + }; + function isUnicodePropertyValueCharacter(ch) { + return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch) + } -pp$8.next = function() { - if (this.options.onToken) - { this.options.onToken(new Token(this)); } + // LoneUnicodePropertyNameOrValue :: + // UnicodePropertyValueCharacters + pp$8.regexp_eatLoneUnicodePropertyNameOrValue = function(state) { + return this.regexp_eatUnicodePropertyValue(state) + }; - this.lastTokEnd = this.end; - this.lastTokStart = this.start; - this.lastTokEndLoc = this.endLoc; - this.lastTokStartLoc = this.startLoc; - this.nextToken(); -}; + // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass + pp$8.regexp_eatCharacterClass = function(state) { + if (state.eat(0x5B /* [ */)) { + state.eat(0x5E /* ^ */); + this.regexp_classRanges(state); + if (state.eat(0x5D /* [ */)) { + return true + } + // Unreachable since it threw "unterminated regular expression" error before. + state.raise("Unterminated character class"); + } + return false + }; -pp$8.getToken = function() { - this.next(); - return new Token(this) -}; - -// If we're in an ES6 environment, make parsers iterable -if (typeof Symbol !== "undefined") - { pp$8[Symbol.iterator] = function() { - var this$1 = this; - - return { - next: function () { - var token = this$1.getToken(); - return { - done: token.type === types.eof, - value: token + // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges + // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges + // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash + pp$8.regexp_classRanges = function(state) { + while (this.regexp_eatClassAtom(state)) { + var left = state.lastIntValue; + if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) { + var right = state.lastIntValue; + if (state.switchU && (left === -1 || right === -1)) { + state.raise("Invalid character class"); + } + if (left !== -1 && right !== -1 && left > right) { + state.raise("Range out of order in character class"); } } } - }; } + }; -// Toggle strict mode. Re-reads the next number or string to please -// pedantic tests (`"use strict"; 010;` should fail). + // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom + // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash + pp$8.regexp_eatClassAtom = function(state) { + var start = state.pos; -pp$8.curContext = function() { - return this.context[this.context.length - 1] -}; - -// Read a single token, updating the parser object's token-related -// properties. - -pp$8.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(types.eof) } - - if (curContext.override) { return curContext.override(this) } - else { this.readToken(this.fullCharCodeAtPos()); } -}; - -pp$8.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$8.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$8.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 (state.eat(0x5C /* \ */)) { + if (this.regexp_eatClassEscape(state)) { + return true + } + if (state.switchU) { + // Make the same message as V8. + var ch$1 = state.current(); + if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) { + state.raise("Invalid class escape"); + } + state.raise("Invalid escape"); + } + state.pos = start; } - } - if (this.options.onComment) - { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos, - startLoc, this.curPosition()); } -}; -pp$8.skipLineComment = function(startSkip) { - var this$1 = this; + var ch = state.current(); + if (ch !== 0x5D /* [ */) { + state.lastIntValue = ch; + state.advance(); + return true + } - 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 && !isNewLine(ch)) { - 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()); } -}; + return false + }; -// Called at the start of the parse and after every token. Skips -// whitespace and comments, and. + // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape + pp$8.regexp_eatClassEscape = function(state) { + var start = state.pos; -pp$8.skipSpace = function() { - var this$1 = this; + if (state.eat(0x62 /* b */)) { + state.lastIntValue = 0x08; /* */ + return true + } - 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; + if (state.switchU && state.eat(0x2D /* - */)) { + state.lastIntValue = 0x2D; /* - */ + return true + } + + if (!state.switchU && state.eat(0x63 /* c */)) { + if (this.regexp_eatClassControlLetter(state)) { + return true } - case 10: case 8232: case 8233: - ++this$1.pos; - if (this$1.options.locations) { - ++this$1.curLine; - this$1.lineStart = this$1.pos; + state.pos = start; + } + + return ( + this.regexp_eatCharacterClassEscape(state) || + this.regexp_eatCharacterEscape(state) + ) + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter + pp$8.regexp_eatClassControlLetter = function(state) { + var ch = state.current(); + if (isDecimalDigit(ch) || ch === 0x5F /* _ */) { + state.lastIntValue = ch % 0x20; + state.advance(); + return true + } + return false + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence + pp$8.regexp_eatHexEscapeSequence = function(state) { + var start = state.pos; + if (state.eat(0x78 /* x */)) { + if (this.regexp_eatFixedHexDigits(state, 2)) { + return true } - break - case 47: // '/' - switch (this$1.input.charCodeAt(this$1.pos + 1)) { - case 42: // '*' - this$1.skipBlockComment(); + if (state.switchU) { + state.raise("Invalid escape"); + } + state.pos = start; + } + return false + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits + pp$8.regexp_eatDecimalDigits = function(state) { + var start = state.pos; + var ch = 0; + state.lastIntValue = 0; + while (isDecimalDigit(ch = state.current())) { + state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */); + state.advance(); + } + return state.pos !== start + }; + function isDecimalDigit(ch) { + return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */ + } + + // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits + pp$8.regexp_eatHexDigits = function(state) { + var start = state.pos; + var ch = 0; + state.lastIntValue = 0; + while (isHexDigit(ch = state.current())) { + state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch); + state.advance(); + } + return state.pos !== start + }; + function isHexDigit(ch) { + return ( + (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) || + (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) || + (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) + ) + } + function hexToInt(ch) { + if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) { + return 10 + (ch - 0x41 /* A */) + } + if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) { + return 10 + (ch - 0x61 /* a */) + } + return ch - 0x30 /* 0 */ + } + + // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence + // Allows only 0-377(octal) i.e. 0-255(decimal). + pp$8.regexp_eatLegacyOctalEscapeSequence = function(state) { + if (this.regexp_eatOctalDigit(state)) { + var n1 = state.lastIntValue; + if (this.regexp_eatOctalDigit(state)) { + var n2 = state.lastIntValue; + if (n1 <= 3 && this.regexp_eatOctalDigit(state)) { + state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue; + } else { + state.lastIntValue = n1 * 8 + n2; + } + } else { + state.lastIntValue = n1; + } + return true + } + return false + }; + + // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit + pp$8.regexp_eatOctalDigit = function(state) { + var ch = state.current(); + if (isOctalDigit(ch)) { + state.lastIntValue = ch - 0x30; /* 0 */ + state.advance(); + return true + } + state.lastIntValue = 0; + return false + }; + function isOctalDigit(ch) { + return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */ + } + + // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits + // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit + // And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence + pp$8.regexp_eatFixedHexDigits = function(state, length) { + var start = state.pos; + state.lastIntValue = 0; + for (var i = 0; i < length; ++i) { + var ch = state.current(); + if (!isHexDigit(ch)) { + state.pos = start; + return false + } + state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch); + state.advance(); + } + return true + }; + + // 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$9 = Parser.prototype; + + // Move to the next token + + pp$9.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$9.getToken = function() { + this.next(); + return new Token(this) + }; + + // If we're in an ES6 environment, make parsers iterable + if (typeof Symbol !== "undefined") + { pp$9[Symbol.iterator] = function() { + var this$1 = this; + + return { + next: function () { + var token = this$1.getToken(); + return { + done: token.type === types.eof, + value: token + } + } + } + }; } + + // Toggle strict mode. Re-reads the next number or string to please + // pedantic tests (`"use strict"; 010;` should fail). + + pp$9.curContext = function() { + return this.context[this.context.length - 1] + }; + + // Read a single token, updating the parser object's token-related + // properties. + + pp$9.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(types.eof) } + + if (curContext.override) { return curContext.override(this) } + else { this.readToken(this.fullCharCodeAtPos()); } + }; + + pp$9.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$9.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$9.skipBlockComment = function() { + var startLoc = this.options.onComment && this.curPosition(); + var start = this.pos, end = this.input.indexOf("*/", this.pos += 2); + if (end === -1) { this.raise(this.pos - 2, "Unterminated comment"); } + this.pos = end + 2; + if (this.options.locations) { + lineBreakG.lastIndex = start; + var match; + while ((match = lineBreakG.exec(this.input)) && match.index < this.pos) { + ++this.curLine; + this.lineStart = match.index + match[0].length; + } + } + if (this.options.onComment) + { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos, + startLoc, this.curPosition()); } + }; + + pp$9.skipLineComment = function(startSkip) { + var start = this.pos; + var startLoc = this.options.onComment && this.curPosition(); + var ch = this.input.charCodeAt(this.pos += startSkip); + while (this.pos < this.input.length && !isNewLine(ch)) { + ch = this.input.charCodeAt(++this.pos); + } + if (this.options.onComment) + { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos, + startLoc, this.curPosition()); } + }; + + // Called at the start of the parse and after every token. Skips + // whitespace and comments, and. + + pp$9.skipSpace = function() { + loop: while (this.pos < this.input.length) { + var ch = this.input.charCodeAt(this.pos); + switch (ch) { + case 32: case 160: // ' ' + ++this.pos; break - case 47: - this$1.skipLineComment(2); + case 13: + if (this.input.charCodeAt(this.pos + 1) === 10) { + ++this.pos; + } + case 10: case 8232: case 8233: + ++this.pos; + if (this.options.locations) { + ++this.curLine; + this.lineStart = this.pos; + } + break + case 47: // '/' + switch (this.input.charCodeAt(this.pos + 1)) { + case 42: // '*' + this.skipBlockComment(); + break + case 47: + this.skipLineComment(2); + break + default: + break loop + } break default: - break loop - } - break - default: - if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) { - ++this$1.pos; - } else { - break loop + if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) { + ++this.pos; + } else { + break loop + } } } - } -}; + }; -// Called at the end of every token. Sets `end`, `val`, and -// maintains `context` and `exprAllowed`, and skips the space after -// the token, so that the next one's `start` will point at the -// right position. + // 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$8.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; + pp$9.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); -}; + this.updateContext(prevType); + }; -// ### Token reading + // ### 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$8.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(types.ellipsis) - } else { - ++this.pos; - return this.finishToken(types.dot) - } -}; + // 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$9.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(types.ellipsis) + } else { + ++this.pos; + return this.finishToken(types.dot) + } + }; -pp$8.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(types.assign, 2) } - return this.finishOp(types.slash, 1) -}; + pp$9.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(types.assign, 2) } + return this.finishOp(types.slash, 1) + }; -pp$8.readToken_mult_modulo_exp = function(code) { // '%*' - var next = this.input.charCodeAt(this.pos + 1); - var size = 1; - var tokentype = code === 42 ? types.star : types.modulo; + pp$9.readToken_mult_modulo_exp = function(code) { // '%*' + var next = this.input.charCodeAt(this.pos + 1); + var size = 1; + var tokentype = code === 42 ? types.star : types.modulo; - // exponentiation operator ** and **= - if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) { - ++size; - tokentype = types.starstar; - next = this.input.charCodeAt(this.pos + 2); - } + // exponentiation operator ** and **= + if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) { + ++size; + tokentype = types.starstar; + next = this.input.charCodeAt(this.pos + 2); + } - if (next === 61) { return this.finishOp(types.assign, size + 1) } - return this.finishOp(tokentype, size) -}; + if (next === 61) { return this.finishOp(types.assign, size + 1) } + return this.finishOp(tokentype, size) + }; -pp$8.readToken_pipe_amp = function(code) { // '|&' - var next = this.input.charCodeAt(this.pos + 1); - if (next === code) { return this.finishOp(code === 124 ? types.logicalOR : types.logicalAND, 2) } - if (next === 61) { return this.finishOp(types.assign, 2) } - return this.finishOp(code === 124 ? types.bitwiseOR : types.bitwiseAND, 1) -}; + pp$9.readToken_pipe_amp = function(code) { // '|&' + var next = this.input.charCodeAt(this.pos + 1); + if (next === code) { return this.finishOp(code === 124 ? types.logicalOR : types.logicalAND, 2) } + if (next === 61) { return this.finishOp(types.assign, 2) } + return this.finishOp(code === 124 ? types.bitwiseOR : types.bitwiseAND, 1) + }; -pp$8.readToken_caret = function() { // '^' - var next = this.input.charCodeAt(this.pos + 1); - if (next === 61) { return this.finishOp(types.assign, 2) } - return this.finishOp(types.bitwiseXOR, 1) -}; + pp$9.readToken_caret = function() { // '^' + var next = this.input.charCodeAt(this.pos + 1); + if (next === 61) { return this.finishOp(types.assign, 2) } + return this.finishOp(types.bitwiseXOR, 1) + }; -pp$8.readToken_plus_min = function(code) { // '+-' - var next = this.input.charCodeAt(this.pos + 1); - if (next === code) { - if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 && - (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) { - // A `-->` line comment - this.skipLineComment(3); + pp$9.readToken_plus_min = function(code) { // '+-' + var next = this.input.charCodeAt(this.pos + 1); + if (next === code) { + if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 && + (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.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) } + return this.finishOp(types.plusMin, 1) + }; + + pp$9.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) { + // `)/],[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/async-limiter/coverage/lcov-report/sort-arrow-sprite.png b/node_modules/async-limiter/coverage/lcov-report/sort-arrow-sprite.png deleted file mode 100644 index 03f704a609c6fd0dbfdac63466a7d7c958b5cbf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb z6^}Hx2)'; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function (a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function (a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function () { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i =0 ; i < cols.length; i += 1) { - if (cols[i].sortable) { - el = getNthColumn(i).querySelector('.sorter'); - 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/async-limiter/coverage/lcov.info b/node_modules/async-limiter/coverage/lcov.info deleted file mode 100644 index fbf36aa..0000000 --- a/node_modules/async-limiter/coverage/lcov.info +++ /dev/null @@ -1,74 +0,0 @@ -TN: -SF:/Users/samuelreed/git/forks/async-throttle/index.js -FN:3,Queue -FN:22,(anonymous_2) -FN:23,(anonymous_3) -FN:31,(anonymous_4) -FN:36,(anonymous_5) -FN:55,(anonymous_6) -FN:62,done -FNF:7 -FNH:7 -FNDA:7,Queue -FNDA:3,(anonymous_2) -FNDA:13,(anonymous_3) -FNDA:19,(anonymous_4) -FNDA:45,(anonymous_5) -FNDA:6,(anonymous_6) -FNDA:13,done -DA:3,1 -DA:4,7 -DA:5,1 -DA:8,6 -DA:9,6 -DA:10,6 -DA:11,6 -DA:12,6 -DA:13,6 -DA:16,1 -DA:22,1 -DA:23,3 -DA:24,13 -DA:25,13 -DA:26,13 -DA:30,1 -DA:32,19 -DA:36,1 -DA:37,45 -DA:38,6 -DA:40,39 -DA:41,13 -DA:42,13 -DA:43,13 -DA:44,13 -DA:47,39 -DA:48,18 -DA:49,6 -DA:50,6 -DA:55,1 -DA:56,6 -DA:57,6 -DA:58,6 -DA:62,1 -DA:63,13 -DA:64,13 -DA:67,1 -LF:37 -LH:37 -BRDA:4,1,0,1 -BRDA:4,1,1,6 -BRDA:8,2,0,6 -BRDA:8,2,1,5 -BRDA:9,3,0,6 -BRDA:9,3,1,5 -BRDA:37,4,0,6 -BRDA:37,4,1,39 -BRDA:40,5,0,13 -BRDA:40,5,1,26 -BRDA:47,6,0,18 -BRDA:47,6,1,21 -BRDA:56,7,0,6 -BRDA:56,7,1,0 -BRF:14 -BRH:13 -end_of_record diff --git a/node_modules/async-limiter/package.json b/node_modules/async-limiter/package.json index 1958671..c8e7c51 100644 --- a/node_modules/async-limiter/package.json +++ b/node_modules/async-limiter/package.json @@ -1,8 +1,8 @@ { "_from": "async-limiter@~1.0.0", - "_id": "async-limiter@1.0.0", + "_id": "async-limiter@1.0.1", "_inBundle": false, - "_integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "_integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "_location": "/async-limiter", "_phantomChildren": {}, "_requested": { @@ -18,8 +18,8 @@ "_requiredBy": [ "/ws" ], - "_resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "_shasum": "78faed8c3d074ab81f22b4e985d79e8738f720f8", + "_resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "_shasum": "dd379e94f0db8310b08291f9d64c3209766617fd", "_spec": "async-limiter@~1.0.0", "_where": "F:\\projects\\p\\minifyfromhtml\\node_modules\\ws", "author": { @@ -33,13 +33,13 @@ "deprecated": false, "description": "asynchronous function queue with adjustable concurrency", "devDependencies": { - "coveralls": "^2.11.2", - "eslint": "^4.6.1", - "eslint-plugin-mocha": "^4.11.0", + "coveralls": "^3.0.3", + "eslint": "^5.16.0", + "eslint-plugin-mocha": "^5.3.0", "intelli-espower-loader": "^1.0.1", - "istanbul": "^0.3.2", - "mocha": "^3.5.2", - "power-assert": "^1.4.4" + "mocha": "^6.1.4", + "nyc": "^14.1.1", + "power-assert": "^1.6.1" }, "homepage": "https://github.com/strml/async-limiter#readme", "keywords": [ @@ -59,11 +59,11 @@ "url": "git+https://github.com/strml/async-limiter.git" }, "scripts": { - "coverage": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- -R spec && cat ./coverage/lcov.info | coveralls", + "coverage": "nyc npm test && nyc report --reporter=text-lcov | coveralls", "example": "node example", "lint": "eslint .", - "test": "mocha --R intelli-espower-loader test/", - "travis": "npm run lint && npm run coverage" + "test": "mocha --require intelli-espower-loader test/", + "travis": "npm run lint && npm run test" }, - "version": "1.0.0" + "version": "1.0.1" } diff --git a/node_modules/async-limiter/readme.md b/node_modules/async-limiter/readme.md index dcf4932..fcaa22f 100644 --- a/node_modules/async-limiter/readme.md +++ b/node_modules/async-limiter/readme.md @@ -93,7 +93,7 @@ console.time('deflate'); for(let i = 0; i < 30000; ++i) { deflate(payload, function (err, buffer) {}); } -q.onDone(function() { +t.onDone(function() { console.timeEnd('deflate'); }); ``` @@ -110,23 +110,23 @@ q.onDone(function() { ### `var t = new Limiter([opts])` Constructor. `opts` may contain inital values for: -* `q.concurrency` +* `t.concurrency` ## Instance methods -### `q.onDone(fn)` +### `t.onDone(fn)` `fn` will be called once and only once, when the queue is empty. ## Instance methods mixed in from `Array` Mozilla has docs on how these methods work [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array). -### `q.push(element1, ..., elementN)` -### `q.unshift(element1, ..., elementN)` -### `q.splice(index , howMany[, element1[, ...[, elementN]]])` +### `t.push(element1, ..., elementN)` +### `t.unshift(element1, ..., elementN)` +### `t.splice(index , howMany[, element1[, ...[, elementN]]])` ## Properties -### `q.concurrency` +### `t.concurrency` Max number of jobs the queue should process concurrently, defaults to `Infinity`. -### `q.length` +### `t.length` Jobs pending + jobs to process (readonly). diff --git a/node_modules/aws4/.travis.yml b/node_modules/aws4/.travis.yml index 61d0634..178bf31 100644 --- a/node_modules/aws4/.travis.yml +++ b/node_modules/aws4/.travis.yml @@ -2,4 +2,8 @@ language: node_js node_js: - "0.10" - "0.12" - - "4.2" + - "4" + - "6" + - "8" + - "10" + - "12" diff --git a/node_modules/aws4/README.md b/node_modules/aws4/README.md index 6b002d0..1e9d61b 100644 --- a/node_modules/aws4/README.md +++ b/node_modules/aws4/README.md @@ -3,10 +3,10 @@ aws4 [![Build Status](https://secure.travis-ci.org/mhart/aws4.png?branch=master)](http://travis-ci.org/mhart/aws4) -A small utility to sign vanilla node.js http(s) request options using Amazon's +A small utility to sign vanilla Node.js http(s) request options using Amazon's [AWS Signature Version 4](http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html). -Can also be used [in the browser](./browser). +If you want to sign and send AWS requests in a modern browser, or an environment like [Cloudflare Workers](https://developers.cloudflare.com/workers/), then check out [aws4fetch](https://github.com/mhart/aws4fetch) – otherwise you can also bundle this library for use [in the browser](./browser). This signature is supported by nearly all Amazon services, including [S3](http://docs.aws.amazon.com/AmazonS3/latest/API/), diff --git a/node_modules/aws4/aws4.js b/node_modules/aws4/aws4.js index 124cd7a..9014894 100644 --- a/node_modules/aws4/aws4.js +++ b/node_modules/aws4/aws4.js @@ -22,6 +22,10 @@ function encodeRfc3986(urlEncodedString) { }) } +function encodeRfc3986Full(str) { + return encodeRfc3986(encodeURIComponent(str)) +} + // request: { path | body, [host], [method], [headers], [service], [region] } // credentials: { accessKeyId, secretAccessKey, [sessionToken] } function RequestSigner(request, credentials) { @@ -220,12 +224,22 @@ RequestSigner.prototype.canonicalString = function() { } if (query) { - queryStr = encodeRfc3986(querystring.stringify(Object.keys(query).sort().reduce(function(obj, key) { + var reducedQuery = Object.keys(query).reduce(function(obj, key) { if (!key) return obj - obj[key] = !Array.isArray(query[key]) ? query[key] : - (firstValOnly ? query[key][0] : query[key].slice().sort()) + obj[encodeRfc3986Full(key)] = !Array.isArray(query[key]) ? query[key] : + (firstValOnly ? query[key][0] : query[key]) return obj - }, {}))) + }, {}) + var encodedQueryPieces = [] + Object.keys(reducedQuery).sort().forEach(function(key) { + if (!Array.isArray(reducedQuery[key])) { + encodedQueryPieces.push(key + '=' + encodeRfc3986Full(reducedQuery[key])) + } else { + reducedQuery[key].map(encodeRfc3986Full).sort() + .forEach(function(val) { encodedQueryPieces.push(key + '=' + val) }) + } + }) + queryStr = encodedQueryPieces.join('&') } if (pathStr !== '/') { if (normalizePath) pathStr = pathStr.replace(/\/{2,}/g, '/') @@ -233,8 +247,8 @@ RequestSigner.prototype.canonicalString = function() { if (normalizePath && piece === '..') { path.pop() } else if (!normalizePath || piece !== '.') { - if (decodePath) piece = decodeURIComponent(piece) - path.push(encodeRfc3986(encodeURIComponent(piece))) + if (decodePath) piece = decodeURIComponent(piece).replace(/\+/g, ' ') + path.push(encodeRfc3986Full(piece)) } return path }, []).join('/') @@ -289,8 +303,16 @@ RequestSigner.prototype.defaultCredentials = function() { } RequestSigner.prototype.parsePath = function() { - var path = this.request.path || '/', - queryIx = path.indexOf('?'), + var path = this.request.path || '/' + + // S3 doesn't always encode characters > 127 correctly and + // all services don't encode characters > 255 correctly + // So if there are non-reserved chars (and it's not already all % encoded), just encode them all + if (/[^0-9A-Za-z;,/?:@&=+$\-_.!~*'()#%]/.test(path)) { + path = encodeURI(decodeURI(path)) + } + + var queryIx = path.indexOf('?'), query = null if (queryIx >= 0) { @@ -298,15 +320,6 @@ RequestSigner.prototype.parsePath = function() { path = path.slice(0, queryIx) } - // S3 doesn't always encode characters > 127 correctly and - // all services don't encode characters > 255 correctly - // So if there are non-reserved chars (and it's not already all % encoded), just encode them all - if (/[^0-9A-Za-z!'()*\-._~%/]/.test(path)) { - path = path.split('/').map(function(piece) { - return encodeURIComponent(decodeURIComponent(piece)) - }).join('/') - } - this.parsedPath = { path: path, query: query, diff --git a/node_modules/aws4/package.json b/node_modules/aws4/package.json index 05e6eb8..06d7a5c 100644 --- a/node_modules/aws4/package.json +++ b/node_modules/aws4/package.json @@ -1,8 +1,8 @@ { "_from": "aws4@^1.8.0", - "_id": "aws4@1.8.0", + "_id": "aws4@1.9.1", "_inBundle": false, - "_integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "_integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", "_location": "/aws4", "_phantomChildren": {}, "_requested": { @@ -18,8 +18,8 @@ "_requiredBy": [ "/request" ], - "_resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "_shasum": "f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f", + "_resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "_shasum": "7e33d8f7d449b3f673cd72deb9abdc552dbe528e", "_spec": "aws4@^1.8.0", "_where": "F:\\projects\\p\\minifyfromhtml\\node_modules\\request", "author": { @@ -98,7 +98,8 @@ "url": "git+https://github.com/mhart/aws4.git" }, "scripts": { - "test": "mocha ./test/fast.js ./test/slow.js -b -t 100s -R list" + "integration": "node ./test/slow.js", + "test": "mocha ./test/fast.js -b -t 100s -R list" }, - "version": "1.8.0" + "version": "1.9.1" } diff --git a/node_modules/camel-case/camel-case.d.ts b/node_modules/camel-case/camel-case.d.ts deleted file mode 100644 index 782ef3b..0000000 --- a/node_modules/camel-case/camel-case.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -declare function camelCase (value: string, locale?: string, mergeNumbers?: boolean): string; - -export = camelCase; diff --git a/node_modules/camel-case/camel-case.js b/node_modules/camel-case/camel-case.js deleted file mode 100644 index 1be652e..0000000 --- a/node_modules/camel-case/camel-case.js +++ /dev/null @@ -1,23 +0,0 @@ -var upperCase = require('upper-case') -var noCase = require('no-case') - -/** - * Camel case a string. - * - * @param {string} value - * @param {string} [locale] - * @return {string} - */ -module.exports = function (value, locale, mergeNumbers) { - var result = noCase(value, locale) - - // Replace periods between numeric entities with an underscore. - if (!mergeNumbers) { - result = result.replace(/ (?=\d)/g, '_') - } - - // Replace spaces between words with an upper cased character. - return result.replace(/ (.)/g, function (m, $1) { - return upperCase($1, locale) - }) -} diff --git a/node_modules/camel-case/package.json b/node_modules/camel-case/package.json deleted file mode 100644 index 613a404..0000000 --- a/node_modules/camel-case/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "_from": "camel-case@3.0.x", - "_id": "camel-case@3.0.0", - "_inBundle": false, - "_integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "_location": "/camel-case", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "camel-case@3.0.x", - "name": "camel-case", - "escapedName": "camel-case", - "rawSpec": "3.0.x", - "saveSpec": null, - "fetchSpec": "3.0.x" - }, - "_requiredBy": [ - "/html-minifier" - ], - "_resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "_shasum": "ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73", - "_spec": "camel-case@3.0.x", - "_where": "F:\\projects\\p\\minifyfromhtml\\node_modules\\html-minifier", - "author": { - "name": "Blake Embrey", - "email": "hello@blakeembrey.com", - "url": "http://blakeembrey.me" - }, - "bugs": { - "url": "https://github.com/blakeembrey/camel-case/issues" - }, - "bundleDependencies": false, - "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - }, - "deprecated": false, - "description": "Camel case a string", - "devDependencies": { - "istanbul": "^0.4.3", - "mocha": "^2.2.1", - "standard": "^7.1.2" - }, - "files": [ - "camel-case.js", - "camel-case.d.ts", - "LICENSE" - ], - "homepage": "https://github.com/blakeembrey/camel-case", - "keywords": [ - "camel", - "case", - "camelcase", - "camel-case", - "dash", - "hyphen", - "dot", - "underscore", - "lodash", - "separator", - "string", - "text", - "convert" - ], - "license": "MIT", - "main": "camel-case.js", - "name": "camel-case", - "repository": { - "type": "git", - "url": "git://github.com/blakeembrey/camel-case.git" - }, - "scripts": { - "lint": "standard", - "test": "npm run lint && npm run test-cov", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- -R spec --bail", - "test-spec": "mocha -- -R spec --bail" - }, - "typings": "camel-case.d.ts", - "version": "3.0.0" -} diff --git a/node_modules/clean-css/package.json b/node_modules/clean-css/package.json index 5d8e08f..2940d1b 100644 --- a/node_modules/clean-css/package.json +++ b/node_modules/clean-css/package.json @@ -1,5 +1,5 @@ { - "_from": "clean-css@^4.1.6", + "_from": "clean-css@^4.2.3", "_id": "clean-css@4.2.3", "_inBundle": false, "_integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", @@ -8,21 +8,20 @@ "_requested": { "type": "range", "registry": true, - "raw": "clean-css@^4.1.6", + "raw": "clean-css@^4.2.3", "name": "clean-css", "escapedName": "clean-css", - "rawSpec": "^4.1.6", + "rawSpec": "^4.2.3", "saveSpec": null, - "fetchSpec": "^4.1.6" + "fetchSpec": "^4.2.3" }, "_requiredBy": [ - "/html-minifier", - "/minify" + "/" ], "_resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", "_shasum": "507b5de7d97b48ee53d84adb0160ff6216380f78", - "_spec": "clean-css@^4.1.6", - "_where": "/home/s2/Code/minifyfromhtml/node_modules/minify", + "_spec": "clean-css@^4.2.3", + "_where": "F:\\projects\\p\\minifyfromhtml", "author": { "name": "Jakub Pawlowicz", "email": "contact@jakubpawlowicz.com", diff --git a/node_modules/combined-stream/lib/combined_stream.js b/node_modules/combined-stream/lib/combined_stream.js index 809b3c2..125f097 100644 --- a/node_modules/combined-stream/lib/combined_stream.js +++ b/node_modules/combined-stream/lib/combined_stream.js @@ -1,7 +1,6 @@ var util = require('util'); var Stream = require('stream').Stream; var DelayedStream = require('delayed-stream'); -var defer = require('./defer.js'); module.exports = CombinedStream; function CombinedStream() { @@ -14,6 +13,8 @@ function CombinedStream() { this._released = false; this._streams = []; this._currentStream = null; + this._insideLoop = false; + this._pendingNext = false; } util.inherits(CombinedStream, Stream); @@ -68,6 +69,24 @@ CombinedStream.prototype.pipe = function(dest, options) { CombinedStream.prototype._getNext = function() { this._currentStream = null; + + if (this._insideLoop) { + this._pendingNext = true; + return; // defer call + } + + this._insideLoop = true; + try { + do { + this._pendingNext = false; + this._realGetNext(); + } while (this._pendingNext); + } finally { + this._insideLoop = false; + } +}; + +CombinedStream.prototype._realGetNext = function() { var stream = this._streams.shift(); @@ -89,7 +108,7 @@ CombinedStream.prototype._getNext = function() { this._handleErrors(stream); } - defer(this._pipeNext.bind(this, stream)); + this._pipeNext(stream); }.bind(this)); }; diff --git a/node_modules/combined-stream/lib/defer.js b/node_modules/combined-stream/lib/defer.js deleted file mode 100644 index b67110c..0000000 --- a/node_modules/combined-stream/lib/defer.js +++ /dev/null @@ -1,26 +0,0 @@ -module.exports = defer; - -/** - * Runs provided function on next iteration of the event loop - * - * @param {function} fn - function to run - */ -function defer(fn) -{ - var nextTick = typeof setImmediate == 'function' - ? setImmediate - : ( - typeof process == 'object' && typeof process.nextTick == 'function' - ? process.nextTick - : null - ); - - if (nextTick) - { - nextTick(fn); - } - else - { - setTimeout(fn, 0); - } -} diff --git a/node_modules/combined-stream/package.json b/node_modules/combined-stream/package.json index a8d9cce..63b501d 100644 --- a/node_modules/combined-stream/package.json +++ b/node_modules/combined-stream/package.json @@ -1,8 +1,8 @@ { "_from": "combined-stream@~1.0.6", - "_id": "combined-stream@1.0.7", + "_id": "combined-stream@1.0.8", "_inBundle": false, - "_integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "_integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "_location": "/combined-stream", "_phantomChildren": {}, "_requested": { @@ -19,8 +19,8 @@ "/form-data", "/request" ], - "_resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "_shasum": "2d1d24317afb8abe95d6d2c0b07b57813539d828", + "_resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "_shasum": "c3d45a8b34fd730631a110a8a2520682b31d5a7f", "_spec": "combined-stream@~1.0.6", "_where": "F:\\projects\\p\\minifyfromhtml\\node_modules\\request", "author": { @@ -54,5 +54,5 @@ "scripts": { "test": "node test/run.js" }, - "version": "1.0.7" + "version": "1.0.8" } diff --git a/node_modules/combined-stream/yarn.lock b/node_modules/combined-stream/yarn.lock new file mode 100644 index 0000000..7edf418 --- /dev/null +++ b/node_modules/combined-stream/yarn.lock @@ -0,0 +1,17 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +far@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/far/-/far-0.0.7.tgz#01c1fd362bcd26ce9cf161af3938aa34619f79a7" + dependencies: + oop "0.0.3" + +oop@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/oop/-/oop-0.0.3.tgz#70fa405a5650891a194fdc82ca68dad6dabf4401" diff --git a/node_modules/commander/package.json b/node_modules/commander/package.json index 066ac38..2aaaeca 100644 --- a/node_modules/commander/package.json +++ b/node_modules/commander/package.json @@ -1,5 +1,5 @@ { - "_from": "commander@^2.19.0", + "_from": "commander@^2.20.0", "_id": "commander@2.20.3", "_inBundle": false, "_integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", @@ -8,22 +8,20 @@ "_requested": { "type": "range", "registry": true, - "raw": "commander@^2.19.0", + "raw": "commander@^2.20.0", "name": "commander", "escapedName": "commander", - "rawSpec": "^2.19.0", + "rawSpec": "^2.20.0", "saveSpec": null, - "fetchSpec": "^2.19.0" + "fetchSpec": "^2.20.0" }, "_requiredBy": [ - "/html-minifier", - "/terser", - "/uglify-js" + "/terser" ], "_resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "_shasum": "fd485e84c03eb4881c20722ba48035e8531aeb33", - "_spec": "commander@^2.19.0", - "_where": "/home/s2/Code/minifyfromhtml/node_modules/html-minifier", + "_spec": "commander@^2.20.0", + "_where": "F:\\projects\\p\\minifyfromhtml\\node_modules\\terser", "author": { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca" diff --git a/node_modules/css-b64-images/.npmignore b/node_modules/css-b64-images/.npmignore deleted file mode 100644 index 7dccd97..0000000 --- a/node_modules/css-b64-images/.npmignore +++ /dev/null @@ -1,15 +0,0 @@ -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/css-b64-images/.travis.yml b/node_modules/css-b64-images/.travis.yml deleted file mode 100644 index 58f2371..0000000 --- a/node_modules/css-b64-images/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - 0.10 diff --git a/node_modules/css-b64-images/README.md b/node_modules/css-b64-images/README.md deleted file mode 100644 index dbbdea9..0000000 --- a/node_modules/css-b64-images/README.md +++ /dev/null @@ -1,78 +0,0 @@ -[![build status](https://secure.travis-ci.org/Filirom1/css-base64-images.png)](http://travis-ci.org/Filirom1/css-base64-images) -css-base64-images -================= - -Base64 images in your css file. - -![Base64](https://github.com/Filirom1/css-base64-images/raw/master/draft.png) - -Transform this: - - .single-quote { - background: url('../img/background-pattern.gif'); - } - -into - - .single-quote { - background: url('data:image/gif;base64,R0lGODlhBgAGAIAAAObm5vLy8iH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMEY0NTFERjVEQ0ExMUUwOURGQ0Y2NjAyQTkzMUQ2OSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMEY0NTFFMDVEQ0ExMUUwOURGQ0Y2NjAyQTkzMUQ2OSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkUwRjQ1MURENURDQTExRTA5REZDRjY2MDJBOTMxRDY5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkUwRjQ1MURFNURDQTExRTA5REZDRjY2MDJBOTMxRDY5Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAAAAAAAsAAAAAAYABgAAAgqMDYcaqX6AnKAAADs='); - } - -Only works with CSS files. - -Works with: - -* single quotes: url('../img/background-pattern.gif'); -* double quotes: url("../img/background-pattern.gif"); -* absolute URL: url("/img/background-pattern.gif"); but you must specify a `root` path - -Do not work with (a warning is shown, but the process continue) - -* File bigger than 4Ko (configurable) -* external urls: url("http://my-company.ext/img/background-pattern.gif"); -* not found images - -## Install - - npm install -g css-b64-images - -## Usage - - cd /your/www/root/dir - css-b64-images css/styles.css > css/style.optimized.css - -## As a library - -### From File - -fromFile(cssFile, root, [options,] cb) - -You must specify the `root` path for absolute URLs to work. - - var b64img = require('css-b64-images'); - - b64img.fromFile('/your/www/root/dir/css/your-stylesheet.css', '/your/www/root/dir/', function(err, css){ - if(err) console.error('Error:', err); - console.log(css); - }); - -### From String - -fromString(css, relativePath, rootPath, [options,] cb) - - var b64img = require('css-b64-images'); - var css = fs.readFileSync('/your/www/root/dir/css/your-stylesheet.css'); - - b64img.fromString(css, '/your/www/root/dir/css/', '/your/www/root/dir/', function(err, css){ - if(err) console.error('Error:', err); - console.log(css); - }); - -### Options - -* maxSize: (default 4096) bigger images are not base64 in the CSS - - -## LICENSE - -MIT diff --git a/node_modules/css-b64-images/bin/css-b64-images b/node_modules/css-b64-images/bin/css-b64-images deleted file mode 100644 index 29b456f..0000000 --- a/node_modules/css-b64-images/bin/css-b64-images +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env node - -var b64img = require('..'), - root = process.cwd(), - cssFile = process.argv[2]; - -if(!cssFile) handleError(new Error('Usage: css-b64-images file.css')); - -b64img.fromFile(cssFile, root, function(err, css){ - if(err) console.error('Error:', err); - console.log(css); -}); - diff --git a/node_modules/css-b64-images/draft.png b/node_modules/css-b64-images/draft.png deleted file mode 100644 index 9ce915131e7f86c4a28f383cc9f7333cab2f4a61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267269 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

gi5Ct)9cBpsc`hT7_C%-* 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%0Ds8hc>mX91`aJ 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

-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%0Dlmn!YSqYs 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 -!n+0F}^i5LFMLGqaoDi7vi=ucJJE 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

JzhwFk{#OJ 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 options.maxSize){ - return cb(new Error('Skip ' + imageUrl + ' Exceed max size'), css); - } - fs.readFile(imagePath, 'base64', function(err, img){ - if(err) return cb(err, css); - var ext = Path.extname(imagePath); - var newCss = css.replace(imageUrl, 'data:' + mediatypes[ext] + ';base64,' + img); - cb(null, newCss); - }); - }); -} - -/* Adapted from async. Continue on error. */ -function forEachSeries(arr, iterator, callback) { - callback = callback || function () {}; - if (!arr.length) { - return callback(); - } - var completed = 0, errs = []; - var iterate = function () { - iterator(arr[completed], function (err) { - if (err) { - errs.push(err); - } - completed += 1; - if (completed === arr.length) { - if(errs.length) return callback(errs); - callback(null); - } - else { - iterate(); - } - }); - }; - iterate(); -} diff --git a/node_modules/css-b64-images/package.json b/node_modules/css-b64-images/package.json deleted file mode 100644 index 9e4d378..0000000 --- a/node_modules/css-b64-images/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "_from": "css-b64-images@~0.2.5", - "_id": "css-b64-images@0.2.5", - "_inBundle": false, - "_integrity": "sha1-QgBdgyBLK0pdk7axpWRBM7WSegI=", - "_location": "/css-b64-images", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "css-b64-images@~0.2.5", - "name": "css-b64-images", - "escapedName": "css-b64-images", - "rawSpec": "~0.2.5", - "saveSpec": null, - "fetchSpec": "~0.2.5" - }, - "_requiredBy": [ - "/minify" - ], - "_resolved": "https://registry.npmjs.org/css-b64-images/-/css-b64-images-0.2.5.tgz", - "_shasum": "42005d83204b2b4a5d93b6b1a5644133b5927a02", - "_spec": "css-b64-images@~0.2.5", - "_where": "F:\\projects\\p\\minifyfromhtml\\node_modules\\minify", - "author": { - "name": "Filirom1", - "email": "filirom1@gmail.com" - }, - "bin": { - "css-b64-images": "bin/css-b64-images" - }, - "bugs": { - "url": "https://github.com/Filirom1/css-base64-images/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Base64 images in your css", - "devDependencies": { - "mocha": "~1.1.0", - "should": "~0.6.3" - }, - "engines": { - "node": "*" - }, - "homepage": "https://github.com/Filirom1/css-base64-images#readme", - "licenses": [ - { - "type": "MIT", - "url": "http://www.opensource.org/licenses/MIT" - } - ], - "main": "lib/css-b64-images.js", - "name": "css-b64-images", - "optionalDependencies": {}, - "repository": { - "type": "git", - "url": "git+https://github.com/Filirom1/css-base64-images.git" - }, - "scripts": { - "test": "mocha" - }, - "version": "0.2.5" -} diff --git a/node_modules/css-b64-images/test/css-b64-images-test.js b/node_modules/css-b64-images/test/css-b64-images-test.js deleted file mode 100644 index 1a4fb6c..0000000 --- a/node_modules/css-b64-images/test/css-b64-images-test.js +++ /dev/null @@ -1,38 +0,0 @@ -var Path = require('path'), - fs = require('fs'), - b64 = require('..'); - -require('should'); - -describe('A complex CSS', function(){ - var cssFile = Path.join(__dirname, 'fixture', 'css', 'style.css'), - relative = Path.join(__dirname, 'fixture', 'css'); - root = Path.join(__dirname, 'fixture'); - - it('a file should be optimized with base64', function(done){ - b64.fromFile(cssFile, root, function(err, css){ - cssShouldBeCorrect(css); - done(); - }); - }); - - it('a string should be optimized with base64', function(done){ - var css = fs.readFileSync(cssFile); - b64.fromString(css, relative, root, function(err, css){ - cssShouldBeCorrect(css); - done(); - }); - }); -}); - -function cssShouldBeCorrect(css){ - css.should.include(".single-quote {\n background: url('data:image/gif;base64,"); - css.should.include(".double-quote {\n background: url(\"data:image/gif;base64,"); - css.should.include(".absolute {\n background: url('data:image/gif;base64,"); - - css.should.include(".external {\n background: url('http"); - css.should.include(".tooBig {\n background: url('../img"); - css.should.include(".not-found {\n background: url('../img"); - - css.should.include(".mediatype {\n background: url('data:image/svg+xml;base64,"); -} diff --git a/node_modules/css-b64-images/test/fixture/css/style.css b/node_modules/css-b64-images/test/fixture/css/style.css deleted file mode 100644 index e215a78..0000000 --- a/node_modules/css-b64-images/test/fixture/css/style.css +++ /dev/null @@ -1,52 +0,0 @@ -/* ---- Fonts ---- */ - -@font-face { - font-family: 'MavenProMedium'; - src: url('../fonts/maven_pro_medium-webfont.eot'); - src: url('../fonts/maven_pro_medium-webfont.eot?iefix') format('eot'), - url('../fonts/maven_pro_medium-webfont.woff') format('woff'), - url('../fonts/maven_pro_medium-webfont.ttf') format('truetype'), - url('../fonts/maven_pro_medium-webfont.svg#webfontyQA0TEWF') format('svg'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'CallunaSansRegular'; - src: url('../fonts/callunasansregular-webfont.eot'); - src: url('../fonts/callunasansregular-webfont.eot?#iefix') format('eot'), - url('../fonts/callunasansregular-webfont.woff') format('woff'), - url('../fonts/callunasansregular-webfont.ttf') format('truetype'), - url('../fonts/callunasansregular-webfont.svg#webfontW850hM1B') format('svg'); - font-weight: normal; - font-style: normal; -} - - -.single-quote { - background: url('../img/background-pattern.gif'); -} - -.double-quote { - background: url("../img/background-pattern.gif"); -} - -.absolute { - background: url('/img/background-pattern.gif'); -} - -.external { - background: url('http://pullrequest.org/img/background-pattern.gif'); -} - -.tooBig { - background: url('../img/mixit-banner.png'); -} - -.not-found { - background: url('../img/nlabal.png'); -} - -.mediatype { - background: url('../img/dots.svg'); -} \ No newline at end of file diff --git a/node_modules/css-b64-images/test/fixture/fonts/callunasansregular-webfont.eot b/node_modules/css-b64-images/test/fixture/fonts/callunasansregular-webfont.eot deleted file mode 100644 index ba3b5dba656f9c14037ce0d928ac6d687b63cbf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28462 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 diff --git a/node_modules/css-b64-images/test/fixture/fonts/callunasansregular-webfont.svg b/node_modules/css-b64-images/test/fixture/fonts/callunasansregular-webfont.svg deleted file mode 100644 index f562d3c..0000000 --- a/node_modules/css-b64-images/test/fixture/fonts/callunasansregular-webfont.svg +++ /dev/null @@ -1,248 +0,0 @@ - - - - -This is a custom SVG webfont generated by Font Squirrel. -Copyright : Copyright c 2010 by Jos Buivenga All rights reserved -Designer : Jos Buivenga -Foundry : Jos Buivenga -Foundry URL : httpexljbriscom - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/node_modules/css-b64-images/test/fixture/fonts/callunasansregular-webfont.ttf b/node_modules/css-b64-images/test/fixture/fonts/callunasansregular-webfont.ttf deleted file mode 100644 index 1a180938d702ad9d4c102a8de6cb1c5e2326c1d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63460 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Ð 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

=l@)?%WD&(aHUTl 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 FnY!wz?#ciF diff --git a/node_modules/css-b64-images/test/fixture/fonts/maven_pro_medium-webfont.svg b/node_modules/css-b64-images/test/fixture/fonts/maven_pro_medium-webfont.svg deleted file mode 100644 index c4fe7b5..0000000 --- a/node_modules/css-b64-images/test/fixture/fonts/maven_pro_medium-webfont.svg +++ /dev/null @@ -1,245 +0,0 @@ - - - - -This is a custom SVG webfont generated by Font Squirrel. -Copyright : Copyright c 2011 by Vissol Ltd All rights reserved -Designer : Joe Prince -Foundry : Joe Prince - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/node_modules/css-b64-images/test/fixture/fonts/maven_pro_medium-webfont.ttf b/node_modules/css-b64-images/test/fixture/fonts/maven_pro_medium-webfont.ttf deleted file mode 100644 index ffd16e2c320ef70d2b108d70e6e68054f73d8198..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90548 zcmeF4dwf*oo&TS6=92qlW|EL_3zGy05JDgUVnhLL1VluPkOriRH%h&sqIFw-EK6Ay zMUiqXDytDOQlxk$87M?bgOswArYvQFBGSmxl;&5K7t4=z5y{N&^Eqcu@+Bq#wzhw5 zhBxPV&gHp$pZi^DN-017bE?3YF_Z7U|E>}LrIa=hcYBO2yq;4Q|hNT@%cUX6%?*s{g2N=UjhA$N1l4)aH5Bpxmc>drCc9Jby_3CvQJ*xo@a%jBlOqmwu;z zfPa$zasNjDxs(jwx|H!Ln^S(3`lqyCcKK8K<*tccr*#W-8`p>=p1<<_vh@f12KXQEc@fvg;R^GY zk^#3wf3VN|#p;>EGb=Lx3I7j=1kU#y-E$@+*e$YKB|u_*RBwYYw4giIbU1}(k46Sv5U!4yhmowx&krz!kOdkBaP9$&oe63m^G#wVtL%-F*n| zo&$H+!re{yVl&*`1a~*VMf+85q!F_EDntM)@OjcN?+91F&QGB6pez_XQL6<7_{ zfcJ5KBlt1c1U>-Opaz7%RbePA-~O@aC42!{&Ty#mixf>mHOSOeY$l`!iaupYb%Hh}j)6?h+ZYy>|B zo4^Mkh;OQKtpOph6>I}LU`H+Z2zX`r?K-lb4J{2EXfV;bJ z_Z(yqf-LIsRWi%1rzqdgoBW1 zJxnU__p43 zaVqRdgMG)K{{(yrbl7zU@1I0EOODJ!Obp@Oi3nf%@C=?d!WE2x{B9P$n}zRY;kz`r zi*EDaJAQKj-!$U={dm#{S2V)^r|{iryv6u%7H&QbGeR&U1T#V~BN6dC1%5=?06Thv ze1z|C$fy|VTM*v2LVp)>fd25`8kGRaCPh-=%FRgWI!I96^5ahUp@L3UDJ`~>!!@c1u9yZQVH${#kS6QHLMtU5f zhQS3ds9W*gD7fSf*gY0Lx)bk=H`8|$La+(3v=O1$sJ@A36<{i)It}kk$Gw+e@5^8b zcm=!)mV(#7GO!%1fE!kVRbVw(1764XZ-6(!IuL|eJ79J#_z3I-yWpNWyn6)hK8hIj zJ6w;0yCKUnkkk=`#c4>#59u(+xPTm^3DWr-(rJQpEY9Pp0y&$0`RRD&7LQn*T z;+#V?7%m*;3KdT?1H=NVD1sbucP31;5bN*O6NSJau!lK1Bsl2L@q!Yr_EBQ1ZBm| z$hXGf{sg3XD_?IyIPXIYNkjD5Tp_$fL3$F{YbwaLWY5&oa0@&PZqX029)vuz5Z7_0 zB+tM-2T;n#!7qN5hc^x(>~|yVkHLOQa1CUij<>7e#}It53|}locvq?vZFAWHEA-eTV~P2>(Mck!j{4OxlGwcst%#@UtHw z)fZ3tK|KK1!K$nI^-!owac>M2%TgH7NAPz`E82y6x0K-*YQ2XlAhem}VQB3zu0{G}IMeF?GnoEeh+ zA@KotHV`3X#%ScMRw!PIhT`XDt*Zq0OYz<~q&E7-jvp1UVFk=v308sCU=66myYGPY z;9al*ya%el4t!G!J_0*I9p2AC2<=0vs5Rp%bH4s?p&8Hc#vr7G0?2VN?hV1U5c(oB z#-2rJ9Y<)LQX}B1TcExbadQ;DpMdY~MNW4g%8? zr;*Q|LOy#6@?x!$Y56o_z!~JTr_>X;zJTjXFzaQo1iS)X1xvweU>R5rR>01cU=>&m z)_~Vx?;GGvunxQpvnpZ#J77I{7i<9Ufhw>W&wm28fDgeA*k21i0y{w+%sd9!d;&fN zzsJ4dklH>oY?2W+KBhfLFdM1j`orivBy=DePDj2HPNgtkh85EX!)q?=dL7@r0p0}b zKqcON2doG0f(_t3PzBn?eY?as26OCE;}fVq1q~nxzBz5?2Lo7wsO|`3#46@NtoNNpUKR(bBq8VK*H&J5(JX^lA{Qe54MiNi1v#jd?pd$Dj5v4< zemaR9WVh;u9Q6TwJ;N*mdcvekQgtWZiiafA;lg;h(2HDbx>+9>f$J@5T-24j z;ljOe;TgE_JY2Y^Q`bT6kZb{5c^s-43ar zgbAbIw=&dyW8tr*kp41Ae;@odH`)^00za}PwhsP01e@0*B-SJ6-j1AmJ96&r$ho&8 z=iVM|ku60CEky_|MF=fL2rWejEky_|MeHhx%HR-Wa0oIu1Q{GcF1{UdC`D+MBD6~3 zv-JqA^=9q;1ajr$aMfm0+G%E<(%MSj2Y>8CtQIXU)ZIF2adp&^kH6Xk#E6beNJjb% zArE7Fi}s#^%g#VvCy`qp##hIYTeBs54zg=N>N)}S0d8gsd<1niM zZ?pb(C~DglxDmA?#4NT(r=gs`A9}jehdgGJa^kBv#JVJeSXVVhW#c+Z?Lm(KYQ?CT zO+czBLq0PN@o_rt%>bKmcMGl`;$A#VK)(uP<%7AbbB#p~Y02s|e9O8m>(dvIPqH8^C*@ z3bbu+#lU2`p%N0?4L4N74a~!<=BQ`J#HlK zj|Qc9_YS-_2H`Q*%-av4O<9jpp1ItvXb%Bx388(-dOvMCiE!DCI$tBw-9@xF8<6(u z(cWw_U0}th)2In-M=fA`yLH01alaCFzXR5Tcfkhm9;gEE!|aXV$6yoq0BpuLKLK07 zhad>|RO5aP2!X9&8`uH2)Pj$|POuAZwd#wFW{z|Kp}!dt+6)ODM%XThhV24`Z9OD% z01`P2i8MeWjG6V2$YDrhFJfn-8RnA^x9Mq;sWa|2jIg4 z@ZkaY@Bn;x06shbA0B`Y8{oqR_^<&!Y=93N;G<*kQ3HI`03S8LM-A{%1ANo~A2q;7 z4e(I|d~_JK-v+cDL#VfhPzwm5?HEGbx5EB3e72{>XQ_yL*^x!aXW4>Ygs`tQWASKQ zt?=Ii-|m5L_rtgQ(XX%tK0b*!Pzzu0iN=BL@cDkkffMjKOK1B07<|45`EM!S&$uue*E{g;7&FIff^^P8I*bqJAf1zt4*MHUB3>|OJqhWY zf^-@ooiL=+1nFFWbk0LEtS7KX<}@VJ5Y5dfnUj#rNt9S;Af1zl6Bi(X3y{DCNZ<1)U3fkLvH5OXt&)Phq!;1) z!|?ri`2Kh_Zm@N50y*Sqv#fa#@4o;npC9Zr|9c;HZ3I6Co4^NPGrs)^*aAKT)wov! zLSQS{26n){TJRCr33kElyK&!+6YRCLO!n%FKa2idLz!-C0Hrmw{rM1h-oJvUzV|-BZf5~hMh+Yy8;ie~I)b;h!B>ajqgt595sF5$RAhZ>FXY8BiA`o+#oU;#FzW~SdK&yb7jJh~ zmK?+PpMXz61Kurysrz8+5t#ax*-mb4$b?Hv}`ykxO5t{w5{T%#% z3Nid7VmHz^{C_`c6>R&m-D|a1J8sdnAEU2s!v8l>;s~%~o9xXVI93|kZWRw~VrM{2{dpFo_8VXAB{0=-H zgYdO#r29;lO@u7(flMdC6ic2A|9x=bDdZX#tXu=JX$8z!308sCU=65*neTx0;9al* zya%el`>PJX0{O7`f>!$Uj(Dx*Ksj4t_obKc9l1PoYPk5l>m7vVG0+pb;iCqQ$@`Bfu^A z{#INuE{qu77YqP}U??bt$v5GR5?pD^-KbHo!2OkA6<7_{fYrc3W_n}QxaK--U~`*A^dkR>c4}K z&2MydjIDYW2wNLT1 ze=A7W?9)?-n>U92-7$PeZd8Ax_TA|Fjc^mOzw1cf(S6%LZLhX@ZLUlWoq88{7D~MYe74+h$(R)%Np^UhCm@8`zIH&CyZ`M@}Ui zMU`+w)gD#l$f^xTSS1{7m2l)$!ckZWM`R`JZIW=LR>E9I!Vz2vM{^|{*_CjVSHclr z2}ge=90`_iR9M0hVhKmRBpf-Ga1>d>5oHNSmn9r&mT=Tr!Vzc*N24VinU-*rTEenl z!qIC9N3taoP;->9CMn@)w}kC32}i*tY=22OIxgWzxrB94$x8@d2}jc<99frelwHCR zcL_(|B^-&Da8zEx5qb$n>m?kymv9tc!V!H5NB1Qh>6dWSU&0vx63zyY1R*a8d#xm# zF(BdW0SRXkNI0uNQU~`+INLzNnFkWiLXdDqf}|1Z?DePFf`Y&+VT*U|m9?_ICney{EIT5_;USo^z<^md78U(Z2)e+w8_ zY^Nk*hw`-VUGLTQ^R=$h-fO9Cx8CTLZm?$UaORE;XYfckn@7T#Jrd6Hk#I~^ z!r4C(&IFQhR*-}3nPw8sI+Jh)nuN2_B%5KsgtOEnoUtb1>@^8zvPn3r zO~M&&63%v$aORt&4)T?7euIRw<0PE(AmOYzNf0^MmUegp_lW)M5Y*&w`^fe<)#zLL zpF#WhZPZ@dTw8zL*Us#>=HGD+o(*RYNH{M~!Z~^p&exN0?w*9bJQB_hlyH8Zgme8Q zocAYTFRp~+%M#8FlyLTpgmVTZoIfbxTtW%w6-qeAP{R3!63#u8a2Ae)a}p(-pD5v6 zMG5CEN;rp6!ugDnO4Qq8TfxY(x*pIfQ>4RpFX34ypjS*ut}-Y3o&Ef(XV-8a{9?D{ z?JMV9N;n5o!Z}D1_9{y_PgBA-igfreGoE<3Pd`}5ykxDoZRKhu-63!2m zaIUC?vr#4Ypxlyhj;(~VRwXOoJ_+ZXN;v;i!nvpt&P$bWj;cTlAf|Ly%d}e#2l3ut z1Ka#-U2VJV_d3#dmVdVQ%r?hx;aW=x=Lk!<8bHEX zKN6WE*((OPYQRR8(NuFKfrP6HBwS%2;c5fPYUm|gg&^UI1PNCsNVrl#!c_|ru3(UG zHG_mJ8zfxiAmNG!30FTzxDrCbRS^R198yGkV^W)NpG2RrR!i{p4Pk%R(Y3`qyT{SK z+V*^1`i{)$=>GrIe*3#N*K7LU&K2zMI?~%YmfgGgb?a?&8SXS2dg*pMKA?8o5;t1z zwHJ@%J=<^BxJvu3rMBI8!&kb&TDQZsJ2qUyBjI`;3D@>WxXwqyH9r!r|B-MlkR%t+ zC11_GnS-~&wL=oFBa(1Uk%a4uBwTAGku5N)3t_&5>yac}na)$uj6A%b}NWZI^`Wyd+%nCE@xn3D<&2xGqe>HDVI37n5-9 zn1u84B$Wtz3D=iNxYkUscjS+bZEYR|(g=O1Q34B6DM^xi(h9b+VGSy#!p7 zDdGA|3D;^$xNcLzHJlQz=ag`5r-bV~C0z3<;rdSr*Mds8E>yxbqLRO~RW8R~sFq_d zRCC>_M2^MS>rv%+4A-VgxK35VHLF*F)V#ADUdBBVeTH?QTyNUiD!0dT?74$&uXa7P zqifsuuUAj^@Lk)@w)wXHdas??XRTZ1+Ep8_5|wa0tG%X`>soENzE#4tt`e?$m2kbT zgzI4?TpKIlI#~(V%t|;9T*9@q60WP2aE+~m>un`mdn@5OTnX3YO1M5(!nL{*uG^Jx z4X=djc_m!iE8#j{3D^8exc*ndwZIat3zl$=u!QS{C0si!;W}ao*Az>*zF5Mw#uBbO zmT(@+^~Bg(yhqNo4^|l{2|}%P*6)p|=@z~pb(3wTt-tPTXLjzqDka(Lue~Tsg^_SgxP&YctTQ1=`bBRnzRLhiPuay5fQxn&*OSq<8!u9PEu637i-MfTq;3YDp z*(>-vPi=dU+FBWmR8cG_hq^tiHTK+*!G`PY?KSsYcW)zOkG&S3>+x;4*Mo#>^d+}o zZG+?qlp_+Z;}>XSkrtP>!wa}a>}T7dz77!I6~Sx-i;li&!t?exiTh+-lpEAz)t!<+ z%GRuq8@67Fpw;XW4m7SP7e$b4eACE}AWy@_h-F|fJ zzmEUyq?;yvT=waGKbZU^RbsCEOQQl7aUn+%Hzby<;WZM^@4U-%I3pr@hxKS2Npi-&qOw zpp|exS_${2m2jV0$s|a#v);D9{xj~EE8(s@67Hibk)?{Y1Ch0R4|njf_uA!tyEfdd zN5VaLCESl!!o7JV+^1Jk2fc)IANC96DAw1hmUeWew(Ydv=}6!9zI>l*KL7f!+`Cx9 zeT?nBjAa{+Yl|hRSbZpwX_V?NZQwr0k_@y3CEOob!o89u+&5XmJ(MNfPg%mfl_lI~ zS;9S+CER~mG7R5K#z6iO?$Ipae$5iuvqJUcHgHd83HNuFaIa?x_kEUd4`>PZgO+e_ zXbJa;mT=E#3HOhdR6{S}zS5Eq^b+njE#cnNk~+9o!ab=a+@D&)y{aYLw_2dF)l$_C zc5BFfX4mGI;oZLmw)wWb|5LsF-LD-gd*)ez(0V&8EFy_to}8dsl1!bnc;U!@blc+*e(ahVYPZ zzjX=sUYBqmb_w@nmvDb}iLA9y&3)S?+{0bMeQqU%&`Y?_yM%kbOSu2LMD|5f&3)k| z+#_DX{o*CuJ6^(lUwg?a=q0P6mvHZUiEK?$%{}oY+#g@Uz49g8H($a%^d;O+U&6ihCERCU!aesT z+<#xfz4#^EmtVp?`X$`2U&6inCEUkf!ae;Z+}~fa1K}azzW)-Q0U+Ud0FpYmPr`Eo zBmvZutbM-hD|hpkaA$uBclnoa$A1a;(UNd4EeTHrko15H>aT*Q7)a!NCaQT>fQ07; zNO*>Tgy#uJ2EeviSHaT->=Oof%76_|8<6ni0SQkbkfcNU5}r;V;YkG&o?0N`2?mmz z;L6Zd@H_*FA1;ujqDCS~!*dDGKagZVo|3K@<&f}<1PRYeko3U&67DM};ofo*p06Mo z6fH^Z(#S5|?UJ>ltNp%xwcoS#)~O9VxxpqMxt)ZkIY^4}u7syNNO^iz$Lzd|MXzh8oV@7+|>+kvg-`;O)x8?us{ci06mp$M1 zF4F(o``y|D{tQy#U%zLsGdpAtAJwvlkLtoU*u8u9m3uZzcv6ytdsIvAMjx<*yJJdt zvXX@RCrh|5qlEiiOSm_*MD{pREqffPmOYMC%N|Gjbg<5P9bZNWp6CR7t-_67X(qqv z%^{?F4(}NM|$J{*q_5`SoxExlz5W zE&MIi*PAEW{;*|pExkR{u%jzZk;DpvR&04)@6~pP{r=ug=RW#2+)rPUidv_H`|L~P%4(|RN@{yAe(uL_BUesS%{}@h zqoJ2@?{*3I@t1HZm&hEEYVKt#;TZrDo(CYYb4&X=5%x=XW`Km}2S{W&XrC*< zvjuE;#(;!7=t_9@fQ07|NO&fJgy$1Tcv^yFI%FVen@jUN0}0PIu#v0Gsg|qE?enm1 zWTiRJN03w^tR*}*LBcZ>Bs@<+!m|}5JZC||GZ!R0e?h{t7$iKGLBcZ{Bs{M{!m}GB zJjX%8GaV#6-$BB&9wa>XLBca2Bq8V}TcMZmoCpcejF9mB2no-Uknmgy3D202)FBQ? zcEdh_b`NqGdo@gZS3CFoy00DVb=0y45@-Kj4;{ISYk51PqwlWwK4rysZGYIZv+cC? z*L%HQd$0AL?H*pO^F?^Zhz-vgk?`CR3C|#ra5sHPHl9m(B7=lymPmMhiDV39CK(I8 zguCiXxO2ROXP-!T4vIwXBu6#RN0IQX6bW}!m+%Y~3C~lJ@N5+c&smZ1%oPdGVvtNn zom)}~c}aLii-hO3NO*ROgy*agS**>t(S^Ik12zyYfwZgNzBs|AU!ZW=j zA3!hRSznT$Kri7LU=p4OCgIs&5}p$#;hA9)o*yRRSz;2ND<;{2u$1t;F$vEelkgle z3C|>x@O&}}&!v*^+%gHzZISRiGl8}iIbLUb&i$p&>^gQwS37t9TU|Tr6PC|9^7nbj zt3Bkm?Wr5_ous{YI=g50JlXD&@7l7p@7eZHruO^SbG5&3?|K?$*;r@c@jN^mo{A~? z>U@N@b2Uz)gldK7=t+2{o`mP?NqE+tM7C?JljlyNgldK7@kz!&E|Re*5hZfxF8lmG zp5bT1v-~7H*H0pM)wa+33C~@W{DtExC>>5;1 z$$2QvNg zBs_;y!ZS%FUo9~XqQq#$9u>B)Ji}DN^Gqc?+f*_RsZhc*PbED6RKl}RB@>aOOLzvi zgy*G7cy_9U=cr0}rm94?N2vZLauEs7U6oA7a|zG>mhfy=$qUfi$lRXlxA9D3k6_zZ zIf`wcZ~b+SWb-6V3D1d@@XS~V&ySVxELjQ9m6h;}SqaaZmGJCY2~X^l@Jw0>&!?4a zgJdaB|O_!!gFpVJo8q<(?cb)y+O5XZ%{4g^-?X{ANDztq78D@ykGlF zT{-txlqP1$G7~vfXMOAK&Efkx?pf#i@@#jTB=}Y$dts>N+3%83cwZv-t)`mi#!A}u zk@MVm3D47&@LXYuToq3BS9=mJBUQH|S4rDv65qf|X)PNebG9AqJ}>)O=Vd|53LNz; zR^t%v*hKnRwA%t}r&We^)jU7*t9Wp)GjP5&&$zaM)H~hlxx?r5FTb_@8})yS-BCN* zm09%NcAs_P9;{1IHu%$ z;W^ck(Rg3N^Q$Fthj*&wIY!nw#V61LYlY|5N_h6QMDC_(pNY+Lv2A!hwxkT@w}j_r zOL&I1gy(5Xc(%5L=WI)O=C*|AZ%d}*xnu_P5}wg5;d$K>p4~0sIo=YU=`G>;-V&bm zE#bM}k}YtLwfeFH(o_D=7dOO zZJX-8uv^l0zjL{pFx5lbP>MJyxdZk~#=w6Pc`7~C<4`V2F-6je^amm@{p{AUa|^$$!h2&YoM1@LY|U$pqH$N zUh*#Vk`2&H-h*CJ1-;~b$VajfddZKWmu!Mw@&WXcAi_gZjpvdY=p`ZOC0n7FY=d61 z3-L=*2l+{M<9*37#DB>r&`UmrUc#QZ&T=RFSqSe*+TO3n%&^c^+=3omiCq0b_1)+f zlKc~F*!wkL@6~EwrK_)3E!|<8Bkx^H-I+amk^fxH0O%!!&`X9wFDZs(B{xCxk`g?Z z$WWmAZZ+{LR=|A8O6Vo4pqH$MUa|&y$?I^Bo=K)66eKdPQav5dB`aXRWF_>H zRnSXTLoZnay`&C$iKa4@3u6HBDna?s^Uy_QsBWr<%E1m*BawgHgT1})#g51KsmbW! zo{E0Q`_aC61Up{6t&XZ=N{@4MM_RWx<~0?-x0n|eIRk%m$9XSJxL(I!e%PO9j! zhH3-8*&KNs<4BkX6PX{G&OL9w`iD8%vDV$lxyS+Tjf3}Xw>KgV!-wsBbq4j|Yy81h zOENG+{+VVTjxDzuT>p1Qo|0QBQ;!(f6P;W51n_=}WpKDutGiH@`FGL6!YS zx3##yzS(lM9$j5czv;L1%OP%?ZNWFun zq6h0!=<_rHIXCd#;u{&bA%CgSH)DfsomIA$tJgj*6{r~OcRmF73-OD^zUM>n|1kXG)NuUbvFlBL(h-7p4uZOC@uc!JJewpe){4&%N_@$}u;+LW3;@3sJq+WqfUscQC zmmlJ%spa@NagyO0_~>=D4(_j1@4>a$X%KFEA3v|!s6K#tGe%A`R1m*(RjszcFFVvu z*tiS7WL1Zsu8yGW?WTUGj^qE|L)K+@N?ChNSvyQw`%GE;O8pXJuky`!G|2Q@0sOWGX8c58yHEQ&{g?Wuf%rgbpj#j_ zkR9k7Cyn<)wOjWdJu`a+va)k}_vxG4um6C&f%$_91`jDL z8aixv@l7Q+kGSR5k)uZ6cKbI`H-+JJ| z84sy{T(tP*_{rui9|mixL)*62?)Ye@dgjr`zJ21mZ$JH= ze}8_K`lq#=JvGy;OR2}dud24sf8^wQcocb%vR5<1xUx! zl`_;oL#5nh44715jQ{RbL*}0|TEJiFx^kKJc!x ziaTf#1mp7^5duWErEU<{Qp|{4^^k>-!ZayVpyZ^`3?m1b8E3d*B z^WCZDgQ-(to@-#z^lABqdtfkIdkMA&UYb6=yP;rA%)nr8^VaB=Td@QEzCcMqz7aPt zFprk}0_Fz{N1r=$0*15ictcI9Sn}AChXPdG)IBR}YWF3kuFTTW!g$Md-tOKkSduU> z@LSV6i30-#MoixHia=m&&X|WD4^#vmeb_RB?atu{g zVT{I`@E@%;Mn6UkzVVng-Fh@5E313p=n{wlAKeMJO^Lbh#CG-yer+d5%20wzqM-NcpZ{qhU<=hU*k1ngIMxOGGM{cjy0vawx;1Q$iV?9il!o;+J2JS*G_%Gj#!N{kaN=Lrp zP`Z|_$26b`22>u zWblwaX*t6jMUEV;sn)s2w|>i(EzXT!UV;r(j(YtS*DTZA3Cc9iP(`7bBoz;Hv_kVv zR2#L2miX|{?G3_RAY7zW?f`((>Ys zyg`LaythV=*HZFoT;~67^Zz*h zj~8na6BHC4Z%vY?D-_Az8gFt2UQRLpPc{Ef=l^`CoB0mD>dvofdYJ$Bv`xt5)0$rV z-!VD^8Mn)AXU{3AEm`xR4*rbM-6->-n4+{C2Z+fj&H_2Zic&yvQB0O2CClNMuq^lG zw{LnYl)Ef9+}!(zxs^XH4jt(G!(2^GERLvRXa32>;g1)e#NT3VB(C8R+Q{(7EGgfL z1$)Ld8M%ek89n(V zqe~p(X+eSEKN`&OG#NSGpi9fEPDtyEpb9xXss{o+y=Q+0vC|vOLu^u>rr=;)bNq-^ zaj_*OL6rwpx9*5v!30D#Beulo>D#K}{N4Kw>YZLApeE zVMB)(4=Y0Xmex1dm+8<_ao4R4A2zgauCwUi&iT8yhxSgG{Jqf=~}j zkXzM&84D>j8{{=!35|W)-#7U*cG}Q zO9uh_p-ZveOz{T$L6>PhqjZ@nh8LdvFQy8IhUgPaLp7krr982eWU4Qi6jxGWB>00) z4U+fgK=SF3ypiGyX7$0fpTDL{k3e6%tb(q-__S+gPCw{^o*q8`R);%APw+xJc!&yg z@wx+jz5YUqJlma?sugKDy#sv_E`cs-sXA|U;X^G~%U!)Xe0s@zky~{Oee|X)#ecGepaSIkLo}W% zvm@u77m&C0M0;YWx@6^=hE`PVV(!^5rm5PGs2a?4H)+PO0wextaImMTCV6mtY+fkK zqi%tO2YZ8kAh$FtTTSx@yCXvOK*StwiSRdnJo^94j71;hF_P+BLCy7r$H=HNGQ2e^ zgSkYKx5kmALxDS8?K=Z_rzVg8SK}s&j2ySe=Pxl-Ni}X$HK4?Bl%Pi9NXqCsATOHk zwb60N8m_uEXb?hA3--xE2>JUlZDjWI`9tx^Y2CBU0MJr$a^1PvgLEbYO1-EMVt2=A z!;6dDTDChieWZqvaTFG79!FYgrtWl}`@{2Zop^T3!$Y22H@|k#;vLV<*W&y5jPA`R zM@@U~#c}23>z)hm82>;{Y?tC^wVvVAOW)G&ng5TY=KSjZx1L+LGqmuj)#JmvCr{t# z$eFfqNoje>s3~9WnybB2{RVK46igpKN^f_F(cjY^E!(7-=f2Zw;w)yMq8)t(spY< zvQ0Amu-UOif6IkE=FwYKoyeTeS7f*gLY^cQ=R}U@FEHYc8VQ9VJ(V|DGN-Vlj6-N? z@eHj*7Me-k5@uX6=`p$KImI!##ks}lxkWL>`dgKiqhImNOL=AV`t_qn$4If_`KBo0w zs&82uKCb01)%sgux;D~XJCByE1FdSqL3d!qwMu}`HRNShxN4~?5!oBUmATN(hyJ+N zOhU-N^cbt)jrqb6RJs|n5t@BiaVglndGqEl>i3#julpT-oiQexb_7*S6QS`z2U06U z9b=i#cms#8*Pm(rpncdaOKY`}SLtD8NB zJMjzD@K7&Wggk4nYbMH!JoHagCore#;%YLJM=;9;PYx_Fyhnq%C_{6-!5)Z9E=1XU zW=pv~KWa&;gt02C3u2WQRWaC7n5p^GQaz6BL5^WV{Ui01!jTT|AV*HN$KlO%=vA|} zY<#G6)~cl&maUpq3dORr;%SfEmX~+iBh!jYrans5qf=coM=T3B9NZZG(Sw1&gFgyy ztkTr#2LoRY_uu~XKFzcD>D&EK?G0bp2bC2UFe;%hKpE&pouS$RpP0VT7(Jbku?MwR z&5UtwM6*~cniV0E#SGJ`5AHheD!;tRx$af=n`>ylDaRGaB^7-PR{pKWMf2~ZSV$$U zz(_b6ba>4upWvXe35fE+E)a|(0d)l@grd95>adaIt5ylgkdxu}8(xaYt09^U8wvSj zWycI-4(T}8{Dq!&W&P~m99s}Rw0-TSpPxJJI2o=AkJz<#a_yOOGfvD5J$%M=TNT30 z3Ago9|3_8FFvJp3Gw;r_rAus6$mfmeo|G5#G4RlM@t7Hvp?i%?l={I`1Y~MKFcZ>9 z&7`way>K?_twB#JT#Mxk!NeFS;z|s!FQ_BSFwEOV7hiR1MkYPc-EVZICy=Xq^qg!| zdx`?yEY$k~!-l%(opfgSj$Vz$FVrut-dwpwD+|B=;v6R8wST{~^4ux?#LPcVS~_>^ zJs(Zi8aD3RuidfjcJ1UpBMG7hQaNu$7{((Nf6tP9bsV$m7>G9s`B_mg#?^$ThlYxa zk#y8>6$azsB}ZX(d=kAA&+H^Ap2{R-Cq`^xFxg7@g%AJkWhNJ=5j)6b#MPlH`GpgO zs2+?>LShNVC0Iq9nNZSl%-jblCd=oT`|-y=Z(gBS9BB?|OZAFP;WBN@COzD&YZxBT zF#qMea|qm=q2@(XP%^>;$<=H!h1_Wg3gO{qwCQSANaK)#x>=4I_2#8Nnz@lefu4Z^ z-I0L;-C2jWREC*?9lS=%+&I=ub<~ekFqv^IvBXI8)x^anrJDsWvmOV9kNOV-#jF73 zWXI%Q(l0hwXFdAFx&OWt?z3UhmC!#f`FPFz8Lo08yrH{xDm?Mj%=&o?7c5*j1ev>) zCk#XU>WXyqq^kBZhGpA%f(!L;m)CGGF6pkOP<%HpeHTyP^*4Qo>Wb0B8_Y$NN`glR z;F^m%T8)bLnsvP-U(lh`58bli9e)yHRJ;#$YvvrNGsk4RV~`+_gXlQ{-_VgRM|Mo6 zv#4;SKFq6s{`hw$KN32VJA2Fd-~Hzw!?{J1o_%`3gWoY8*Yk^~73EgUElP3C?6JA4 z_Aeiei>Ph8!)Nt{OV6x*VN`Bn^S2*cSUau2ecN{?=V=&H)6iS0oMX)V;$E~w;Y+kH zsx=0iD-OPiDPShSBBSKJKcLqa%{eCm2}L+t3jdE%*aV>fsnv<<{iAi+_S}Jv@N_TNAXs%5u zp0|D8P5$Py-uzi>XXW|M|EC_iU;D3c{-rt7-Z-pnJFMyRPxTo;t+;sF_&)lKULz*t z=T8{Xt2W&K@nh9tO&PN`7CgLT&Cz44KVsZ_5wgi`je7_sgvQlTuG&i}AwnYVDX)lo zNmmt9emm|ZA(k=189jV<97NoUhtJWT%l4TuaPSZp^ReQ>;l=KpYL zpj~#nf!Gj(IAG|gNx+xx0!9O~-$OrYxC>b+Fr0-!7wQM>U_lZ=-5`bagUh>j@7DaG zkp9xvt&rRHNOwIoYTiWKyr@Ae`j}6`1X%%c8ZJa}So0Y3OtHuydT_EXv%msGFdqb(>kT?rX9WPviN$uUgqI zt#j5n(QSh)&H)SUB%=i#&eps)Elx|*hB?PI&(jxP+2T06HGDpNeycWj73JpCo^p0| zOf%)y&903xsXAF9i!HFl#Ofo^oQ||BeE>Csn{CH->$!J@ zh9*by?Q{E&0dXWzI7>QoPgD~y(1w;%@O;VxwU+UipwhZ7y~rVBNp zHXC+5Gnp%=GlTZ`LJd#Frn1ma_Zex-qEp?;nn&xYAE#r}{ zHihfmwa$YW3%g(It&A}Rq1&wP2{g4lMWF&qGquo|QefOy6zXE>0|lWzma4cQggA(v zJk6M1U`#j~8ew%Bj_?M3sG@(<>ZJIl)u8U$4ShiUtXuuO!9u)%K1TEi1-}(7m7o6a zxmGmjhG=kaU2s76FO0l8r*SVD)%SKw$#d1*$BRRS2ISq_wVNf$8mRB15^@ZF(}xTu z8v@-#H^eT?~PV@-yG!k$oibAWi{KDP5(yavo8;sc3|1YtnytiPrg}C z$}RuK!tePPzp$<<-XEhE6iuG@xEAMh z7MF(iRWE(ec`)xgD;r;3aB|)J`3q(jO?zxatTWx6Go&bE$b$UkuN2?;{UOr_?+Lx~ zyYJre)9|L>%s=qL#BLA2T!w<=&#!IQ#+_Jj<>Mh;-NsWIM%EBV&|-1*L3tg6+F{5l zu~Ey4LEmh(3rWRr7lrgVrwg^j_@bbW?37Kw1eB9jppJO%Pj@m<%~CwJwG@vvOYz!Y zEdJAU^RXIaxCa@^8;t4k1#;zBc09-S_`+3#S_Ar39O$8S#G*STj{h66-kNycM=cTdOvDtA9-~3Y zUbLJP>w>!QrtaRdQN#N@aByu{X~$prd3jb=!4O~bPqmEsi&7GTb0@*wlD7umVXg$3ZFHnnCPbL z&zSMdi+QGI&oi2~P1P}!d@^0-V>uV}Lcr)CW&O(m5u^JP^>XxTnzaoGG=P!w{+drK z9Pab>&C`7POl^cVCj3$O7vTxon#)a1myfy1!yB4sgsWWTUzT0MP+{VwFFBtDZ3={c zKHQLiaJnv5dB&L-))sE@SkLY(d*Zka7PRp9Nn0B!)d>mz8Z}ojEMF#^S z{6mMOWop%QF(ipjEwo{?b=sTV8#eaEt?cd)zc&rpq>hSR3bWUM6H!Jl zF?ypv5&fNhBc9PGn9>a|MdJ?Ic-=9|kGzIf;2SHn&E=gl*p(nK%CJs*~}c24AK3tHt`Yli74tKE*?s_Izg zTo?g!#mB^o5JmSQ({EfMb02gvu_KTDjnUpQc3ZH2tO(8v@7&q^?9YCtFJtzhmo;y3 zl~cH89MWdPJ_lw>nSD>y4p`RG=LFMGF=S^F>y(Ioc_JJVPJyvq_7-SNhh17uUS-oU8oG_(eM= z2PXe=#=|dL?sGX!d0@2M>=M&l$jcKL$z$S+ip;2ubmp`Kfksz6f;b_i2}5CqW;Q^f zM%7tMF$KfQ?V##^yTvNGQGH23mD?SMDz~eyw(!*Pd`mpe zK|!}G7WZ61757CjJ|Pw_nr#4dgP1)Ju6R=wl>q`a#}~(FQlz=``k#gK!-IcTuhp4l z*0APv`lDYSfD|wo%Dl_Pc6A(P=9n@tTrKh3?mK6gB0$YiT(}##1>JpM(}@A5yB&j^ z2sezvec>`<>m29}L8zda5Nn1B<13tFImWs8=ZCL^e|}uQVmf8amq=n??q+=fd5dcf z%9a$2$Bd8m%%D)Qn)tn#kM}eCHhaS@y}j&_VVVo}$F*B;bXaKU+(ZeZg1yq9b0>RU z(4lpVnwQt?-Sm#s{Z`+m*|n+bZ|t-S8e6e*+3a~`#l>awW-ohsUfE4ImCbX_Vnz`* z?2b*d2>Noe)vd|SOsdRoP5Qw=Iq*GGmOjjrGGl?+AI1VH^{vwZrx)0Z!w4j=xxc4FJy@BcLX z2Uq#2@XS+TH-dA*(sN6jIc`5MycV*YiTO)|F-OI$jUZHmnGmPhOzDSCxj1x~aBOQx zf#EwE%!gF-y{vq($GF;+$SCiML&4)?xyygGB7WSDw3MAzzjENg)e+S^-U@}QI+vMuTXh1a#U%8UzbJDn zvr>?Xz;K|xgup;EUNgFw^#gd@NG+syky8c}pwpRYY5t~Qx)tAl_0OM%%=m6*OCBp< zLYT|!2R*hZz!D%1W-OZO><;V7I{N*!Cp1vIRSmhAQTtC7RqZz6?o^=cMSN34Go5dVHr@-iH=2NT$ z)9DTS9B&l~rY(ZwDk&1ZY8u+b%uEJpp;k5Xlc4H~ zKu%=WpU+nlpWGvhHMtmnFtZnn>|}P%pmQ_JR}+)ewHKfD@Ee(CjL3xF(IaDaIu{S^ zTcDZaj8>r?&_+B}xvTQY@Z~f0`*-crMrlvoV?0>-WYfj%8`so?f8{t;TsCB4#inPC zUp~5bPF>lY?jy49STSq;>GGY^kZ*NGT6-2@9K%{4`va{SA1Yo3TN0S`f?)*I^r{`^ zXq7`lPqWj^$(^k6*c~)x5Djxa8y@nr@K98CzMSsdfGiRDV&t653-gmPThuQ14Oc-h ziRl-`D$0CzWygEjV{Ml96h4I!bVet+6#2ZE)YFxvY?r|BVa~E$;ZK|Y96s^$koLV0 z%GZ+-fI18DF?M2CPcL2iZu7$Uxvr;3GWW?`ZzrPmzah*X}wlv z7DM`%m<#yjF6ZrEa&3wg2KA6dg8K8-vf$tb`dAVmmuP*5Ll!Q-S@%QM!Ma}p>VCL^ zDqysHANs8mW`}g`fsH53^1OCvg{eqDZd0SV&>juC6a)lK90vWbdhBd@jJB&Y*1^Y? zc?k&Xniw}KLP0m`19%+smB;Zdk70N`4OcaqGsbM}YAvd$u;O&e3X+P`oV&w4wDbQr z{KN3lGg?zP=ZyAkZ6->XSwt{X=;f>(YMd|!O@o+^3LoN@6WJX4 z`1ERc1Hp|X(OU0gF-gatZoag$`EsK+Uqd6k*@NoN!x&RJq!-Y=3z2V(hkN5Ni{8vP zf*N}77_f-7NZRoQcKv2(`X`6XNXp(tS6xtLAcAVF-zbb7aJ<&)Mzm5_oHUM*R9r*K*`pHz^JcYaE2f2rP!!X6omSW)H`n-ACZ|&2W29)9tq@=7VmyT`NHMu;q447tkN)u;7QsT#Le`T0!`bwi9kuk?GC{u+qk1nZeFR zOqq&a>_K_dOVd!1cRujt`XO_yvUZwtp|;#L2jBHk^qeCBc4JzCel&!!Wlwb408+Wx zNJU`eL?3>_pHq2tHQ7Q2mX5}`3VSH;)8l$#oykVT4E#clM zQU{@T5yQC}rnYeiB(1Jizk6x<`R=@3Dt7Kn|j#fVFGx4n8wDel(UcXs`!PqB9-t<{3mn>h`bm>yl zy5&oMxU{n1TMxc*TXl)%)s^NcsV+rIeRlP@491TIaL3uG94AM|YP+LS9!oj80$#IE zAu308G}r}l>|#X>q<_>lOgZ+1@Ty&2#0>VApbLfFf-avC0~e-P9m|kmG-?#XfklP6 zK6J2QG-LAewH33U{3vM%;>3uj7EB*qn?JeirnB0tIk(jkyYmbbn8?_Xi?1 z(hIBo9N$-dOw$c!N&)+Q?CDAOqte9ogV`r&&P4ONIG`MpzzTkUFdXlqy@vLPNHkE4mvyQFRduri}r^c6tujt1XZ7BNIj1ntN zm%-5+T$>U0$nQC0rrLwfX>>ocCWq3S8L&SZ4HAwT$<_=77iK7!lUC!|IhR^konTH< zNJxSw7)uaoA<&-8^HJ(xHpMV+7W*;vih?1dduXxYOCK#;rcEvx-XGPQKGP=**>I)G zF>S*TZJuX6SBUCrZg{rifYXa{q&)Q~dhQeoAP*|93CtZZMFh_I(0 zI-7`|ZRYMmnn`xTQ zOl!@jUuY@bIb7EPFx_u9Oto!*UaHpiAe zKYLVOb$-rm`F*DK)btDIv>sOuYoDhFZqCdoUH$An6tpaF(YSYZN1XRz&R2C3`$e2Z z)gCkBh)eSP|L(p8Jj&`^cdh?2Gf5_sxh0b;xfwzXNytn>j2MuMh=^_v&CaF~DI&&* zAO(ymW@E}pQ)($H)hZ%VHc}4dWV2@`fntmbUZF_UsvxD7y4h;2R?%avK=QNSZ>@hW zNw~RBpR=FmpfmGdGV`zXt=o5bzjx8ZK{gl+Vg!UKMxNqF9E|*2VkRUw9GRTL6V8B( zi%ouoE*QiG($h0mS^ey9pJ{Je(cahBp*fDfF|bvc`^fyt{=<5QF$+mT3Yc3NU#-u> z+-`+cOrDR3#gGUm1GGF8PV&f)&7sqCoEcKFdB8JxrhX^2_*5i?Nuu zir=)eaqtpS8`^*z6|e+`-?fY1O(wTEDTHKWD(FiBN|!|VIjGX;OCBJQtuAMNHLOHe z@D+>kvqh7&4KKgE@$@Uk_Md-e7T`%jmVJ=r0?0B687Xl-I4h(XPNH6&7*R`yy5YQW zZa5s18_pYbK#jiTjsK9!*C02X@6c0p_3z<^TgLx((&%h|`f1*4DD?wf{Aio8N$==? zjdxKWc}=uU2ihjz)FF}FAbp?k!I3AGUefpJfiLN`zCOL<)QU*|vaH59%3R{LV_JG~7nR;|w9ecxHLXldWU-*3HRujc&q&Vj|s z##sw%r_|$MLt}Gp|6X-_({c*-`mIb9(`u^>J`h>tqXqLJ+MgG)Yx1^V_`nw zHZ(h)nM=Ml5wQRQO$-ByR*4uk#$yhogy=Ou!ePu4Ku z2w$7xbSMB5JI8bQ+7wJHm?ga1tRRI8W|Q(c%1$19rmTR(mD#wE>t z_R9Kgi)$CHoHL;h%VzZ_3l>lKc0(Eea^2zPvJu82ZF>I1`7>&0)$A0j=D>*(v1&pu zG}_d6V`ZngM?_9MRCdhsNoLt$DVY%yn&1okA%ewF**z2~F?AvORm!x+bq~~&?o_*Y8+50><{t>%sbSWYOPZaf3l6XAl&aJGNqMJt z@rOpJ_e4~u62Q9##p7T!Y7#j0>Sm<`a&B+*#yUz@jSv zY6vBfz4*zuUJyAu4uIE!neaUWL6NivCN9ijT0#bo!R50BY))_iXZ7^Ae37N=)Km-%|7J&Pn5u_XiJmy_UcugcOO`|?y*I^FKp>pwQk;RcdUQxj-8rg^5(jZ(%RCx2N$%3 zuiid`UtKfdy3*>ldF`}9Rh~Ja?9eNqyC9}4MyZA#@1mI=DKt*#T>xggoaC!@c?q`- zRn~DR=oZl@(pnS;-BTEJ7>gf@51ly(LMk*}jn-2P1E))*fx%q~U;zTNLJ1?K2CH7a zvcov>*wo5t*A&&a%m{~{hJiMBV8?PkVp|S(S9jd3T(yx`8koUR-fd@~8=|jBpBWXC z1-`M*47jzC)uh2v+J`!$@3_%)ytmb8QH_D%+aG`YwsOP3=GFgmKd6GrD+9HVvmNddJL(CwL;V`{6n-$ui@`XD9}@8))HG~O zjQYV~{lh}h;N^irjYttv|AL7C#Nh(mVG%#rjH6jpgWdx@=0TObk`xW>g*55OVm4&Q z^v2&75kGO;ikum%aFa#84KJESPb4o|q78FJH`0sZzm3}o(c5s7CD4yk@X#WIhtZ>m zA4~`delSQ$S;d!paPrg#a8s;%|BKH*Q0xO=@_EKaZYa#y&dnJ71Y?o<1?1#FR(u#q z1X!OjPLoAnw3Dk4rY0a@G;zI{|Isa?8SNt2rz4XJ!9K?xB&|8fsYE%~)OeySp#%zt z1N)II%{w?Tm16Ry`;d+k;A+W!WA>sqrd(S$w*7kJ-u>L88mEyW#hu%n{1dbzEKtfy zR_jqV;qS80%A>;HMG7yxvRE=>{x1J5@BCO4&4!{`5iQ6=?^4mbkaj>CHh(x-sL07QRl#Nq=~ByKp$uBYlYw!gRohA~5M=HVqRLfOTn**9 zYV0_k3cH*iZEc-a@7nO>qD5OCchyf*OWW#aEjJF%9KdL+}!(e=knSOTQ*(^ z0imqC?M$^&1HYh((!%v^s-IH(645WIe(DIRDm8t52Q2yGd*Fu4Rc1x%2oFyN>PW~& zvyRz^$dVu&f3iR9&87+1>q00ZTV$kWQ-m$uFY4$8?3#vY$VS$jS;s2mWRa3tO=(#! zuP@btcS|X+MphQDX>Gl_-o1Y7f(2XGyX&v!tC!EJZ{vYE<2P>EV7xLX|GxY=#=Z@| zctRO3>&W)=U22W89rJUmK%F|^lyW$OHkh0}RsqQCwm1|dxFw2{Afp>8CQ?ttJjf45 z=`+wlsW%^A`?8tTqEVpR#I-J@<+c$&(>uOeV%Q{wew}*=|M9lEuIx{TK=e zAgs(EaW^VaHz_PCPoXEkD|+=8oSW4fcI-GkOS3?a1do8)fp$)XS z$6_@V*{1Lr$uv{uqy$s7qiyN(yIQ{2cJRoNgKZrP26naHu|R#T);4gNttMPy+qe;k zQ~rDIaBkdaFE!pX9^T+oUUbr!YCdy7bL#V<1^)*N=aJi*j2sVe9)XY-M~Qy;87bNe zJswyep%bSaf)yk*DOjJ@H0p#R2rdbZe#JD3yQPsXN^#b(2f__AxI~bYYfnz}0ICSF+A(IV{+<-KxWEIU6kH%V zL-+C=3VE^QA@i2P8V+=oI~BNfCfrkMKJA9sK)tGcVUU+9t=w0wGPFvWFcLbA=BQ&3zQs3M)ZoQwzIi4EoEk;RrwIt;L21+JZX zQhHvg_^TXuFjp)D7OVuO&K>YWH;wOmd+Ua^KmEG#hmUtQ8m*0Y6xYvaFKS#+Tz_r5($Tm$z54nU z;RVmNwB=Uhjh(z==B9}?|G46p*X_JvMQ(Y1^^_HF*siS150vDLOtDR>$geKWDW>&7 zVVkuL;82(@=B^5aWns}HD+&V@{-8+u0AN$(8bSaObDe+&MZ(jC)rD|7DXV*1diCib zW*{7%%H{zp^EUiWnLq`UvtG;t=&wD67Un^oJV66`O2l!G&hoO8;aV1F6k4N9pdLlu zbf$`%PI=Rb&PF#uv4CF@+4u#AdPYlN_Gp<)o-WVQoitZazBrg3L>7KJ5}ZO=XsO^x z*ROP^TglEXEI~s;b%41V8j+7Xa7`wqj~q?So9Yhb6i9yx2DJ=f2t>31g2D@_5E>IN z?q}6itPt9}m#G!YT3Xs`Zf=@ZHfibdsqHOGTGzCqy%ggAoQxF7pw5>}K%0=O06n^;j|-%KbMpfwX9ZN_rGidG8w zNo~&AD}0I;P`V(GKqQ(0tDlxgT_uxR-~cJx9MM={X6S}WxuX&a=z;scI{y`Q;iChk zN|&+jRq>nu^&DhPjP0Z7gUN`n7|&pe$Uf9lEIVg0AQ~9Kx;%3W*b@wto+NpJkWUnVhPFeDC-D3A z_+%$8l}psGJAZ#fEK%o%LWL{{RffFi>u}A{9B>Jal91jON`Z1+n8H3}HR=(q7^6M~o^oXPhmuK? zp(OkZkO4sPkCFjk5RlKwBm+Q54^jUJ9{?#d@B+Xzpzv5!`v3&BIzLtEBDLdZ#_N2{ z&x~=(7s{ze5Uj6wgqQU@A9(~aU!?XZ)s_ul68sj8LvxWrMo5obpg8Hc35QJSP$3co znkxZ=5w=yxOA2`;hdT*5+z9}z3DCGh=mm(bSr5TkU;7O zdD%s3r^M7j*MTV*@FU?9brQ@S{Dn5&xu&_HVa~2S*l^ACdF{*fy6P3PJ4)wQ zwy&K1cF8Tpt@Yoby0roC5Egg`U@ZvDVd5P)#2mvrAU;)C6FAY*E@2M%-T`B#mIXhD zlQ3$8y`#uwSQ8VFhJa}}0kRReXXIX(Kv&o$R+$J#u^gmdz<-HKQw+laF9(1mLLmsa z$ae~-F*yL?!&c`!^Y$NC>u${gV|-HP+v_puz~~I|k;8PzK6!Jrtr`=43XZS4Bk0C9<-{DwUsZpYqAy{zj-U{`IjpUc(Np zc*dvvFyE$hVm<&0Q)Yik=%~Pk2!$;UoDYSKZ|hY$Nm=9Y{h#8rN1%#Wi-!?@z+plJnJiRp%4NfHW6nX_mOSyqlEqKVy3@7+G%yW%^U7ar>FC(9?8haB>xR!~ z&itIll)~$e4sp1dKds$SN-Im=3Z(qG?2+@(H=nBy7+m>Lc2T zMQRd+qqq7_0+bHm7<7>6H^~RAU)2BJF@B@*i(`DzP!$BS(Aa`AZ|Ze=8`{~0R!Zj@3#TFY2?xK-z`5Zh6I=yn>mc1euEC!J#hupj^a@(X=?DV?6K2rvkE}h3 z2qXxXlnXAYu-8Qo@j5WIrue(lTweSJXpZQcsTDnG;wVCjFm}lw8m0ONkTJ-OV4M1o zyRhJ$hlGZZ0{RB$o{+l;P6Y2Br8@+{xl*4mJAHrQP4B;d6Mw?Eg(s?Ir)H6@ zMDm>q`MQA^&S8IKVN6`5!OVa#?*}b35P5X15dmX!OvJIrb!U5h5Jip@MUI%xNhlaK zNJ!|(lGn3Ds>C^0Doprf=Evlg=?v!VAx3~~&|75Zm{Rc}(u!QaP!^(A;Up(=;xPix zvB1H&3i;BdS2ViNMHU4yzgeq`AU=Jn@exlo#;rQKW%jIDceJ;iejEZ-w~!DOU*G>} z!tyt-6|3Jp%3q~O8%c`PPgk9J(~=80=0GPZWfdG*QKKQrP(~TtBVMW4An7YFVA`I+ z5&m#d33a2QLUbdn=x{2M_EYSKGaxGHF>%Xfce!GRbStD3D=K=*jab+D-nwy{HZ@G2+1S2Z?YRAR8Vi%|!dRHQvcCi9mqAN? z$@2Q|4Dg}D0(0;VW1UKIUCLu$&%!z6Q_Th`A86dmJBB|HWS^q$lmN0tyTuO^+p+@^z5UPA=h~4i8@}iWALFrcjC9iL@sqAcJEB z$fbnzldJ{(O#m9Yx#mG#KWGE|hR<=B^1c#(4TY5kH?Bvuz$;ueZ|9{jUw3YGoU$S!7 z3w+s-`s)Wi`|MQpx$6HC)?6q(>Dfu?;$eh-N# zzywPRnJC+6K9BYZ@^T>kj4bCw^a=2Z+R-NhCw}+1TqYGvB`PTy#fY!5J+a;bD0^}_ zX~_=smc$er=mA41)LU#RR&)=rjly@1-r}Tp;uCezbwq!;l0qvg5+V?yix7jFK6bO` zP_GFwLeddxgoFMw;46$5;I@Vbdgkp~%NvKt&~iiPsZ+y*80kanVNLp2CX(&LUK&GA zkB?+XUW#BE)Rqh{JQP@MX-)~c{LsM7c#;e{fz=W$5Z%@k6>j1r*rSvv8s&xns)r_? zc-eX(+jPhl3$6#Ug(orkeE1Y03@H^Xjj#554LC8dzmiEM!Q zHxgaMH4t8yr3yO?S!B)qa{Jm5M6To z#AYiGI?8F*L;nmVIc)@{bCN(4oW!#L9^1quNU+;Q@A!7No33MGbJD~X>!VNsqyJ0+ zVqOnW^e!ei9)4!&GrdE^rSB(q_^Fz+%ji?#cga93*ML4vGIFP8kc=q*F_;dGB`eJb z8D-0$8PMucrwnN);8+z-GX$w&M4r_>gRt}HPc32H#I)1Qv2pK%A_z zkV@1^oKnvO-`KewMKQrD_1osm**2%Mv9PeQP+>zPZ29!2nf0@8`qs=HCAXE7+;;NI z!J>u^0bs3lK5TF5i;tTKB_e7T^al<|TF@UPITHxy3oc+{LZCyzgn({HkYC_q(8u5p zAk6|+G`c8aS){jd&>`SmvLi$~XoQv)b0bg_8orAdnGVM5)diL)jthU)m@cSk=zus8VBeSNzZ_n6tTAjQ!7Bm+i6aGI^(NSuz$*j~ZC z2yP6ruLU0k^c(W^U67Fi?!EIfQbZhjF-D3a)1)82JNS-$jaGk&Q+>tcMd(7yqhrz9#B?mj-X<%OqGpMlP1Y!JK_qTLjy`FCJs6$ms7 zMwkG804z(nQiO`u;58)=JDJGvR-#vU;6OamzWe$7XXpo^1Y(v_5KUqHD+}p;iNNq- zS&X{$;Vq0RbTko}EJU%k9HO+LEjcJ?qr?*=57}-WxZ=1&wpP+JruIbsM6^{FI-_Qh z>vs|&aTHvNMuQ^+8bcz%2)_w5E#hOC$+-5(C;21&AAQt+n1G}ak{xBvdSy<8XUCYn-k47Fu;>%|R14{y86a~Ddob&g zuT1dDI|CH0fnO6!Wzb5hq)jTA0@V~sgn~H;(v&IE0tCsbphp*YYvioa!X9O}@POR{ zx$_y6o}9j?_xQ~(KQDF7L6E1N1a$IdNM(kLGmlgpX{hs126<7LRW{sU6|siAUDSxk z%??0CyyuEez@e_V2XLtRC|kyf!MfoT;~4mFqx2c*TY^7Bj1?dBMC{f;`naHc5IjVn zd=NQA7&RGaRqSq1h{j7n<52=pAs}Zv!BXV$%19H@I&|xf6p8Dn5z4^S6rs{k++YTd za5^aJ6pY(}-NfV&;n5HW-vxcfor4H9FcMEsmn2SuST&R~Nen!QRfFcXVRcHOIsw=u zD8xdAW}Uo;LZeWpQBHxQqdYmP6A_*7R5a8=)`{xajT$B(;E2J4Nx~ATkUESTqziM$ zszKEuMyj*$gJ5#GWl&`#OVv3jLZWq|IVcm@jd?8WraEP#PDCyg8VS@^+`NQ65sw=@-6; z`ilAN8&o*bhBRIa5uw=*|0~tE2=yh@U8n-}{YGQ;kZVa6cI*Np7tMvC97tAVvs2>n;PnN**7QT6(GVT*Jc$1f0Uc3Lpa55q8%0i0 zvFda~S)~ZQSa`Y<+&OYjhhoYCa`@6IJ2tiuxz9PC)K8vn>0NgbQjzPI@l8Yl-Fze4 zq_(QdSrYe1L<^QLo1fqfl~@R100UV?q(!Q~2f7Dc15nh&wfH;V*(v=p#3KkcL1cxE zIvFGw%&3#S2ixRb&;=411q|K<+=Sa%rJD=hIe@PwMVT8y35Xd*I2|J2O~SV%a|28= zaa(XY47x3t8^rAhr^BEh7t9Uf$8lS5I-EBw6=8Uwg$H^9cpU)x7kGBH)%cKSY(B7W z3(qt@*s||{3apIrFjowNFXW5xj>H_5%>uq`9c-NppiC>^<&t@ucKAlAhY_zK{-`vV z5eTQz7#8eI=v>HU&qU{f>05;ELyCdvTOaeML%T`Fi*bY^%D(0Xj9!{N2-tU`ky+ zVW4T=({v2z`71k&1Hy{??%e%5c(pv7GtlrxyP7(K)8e@5jrRVJ<)PGth@(cV`5wW7 zLyck&fbfv=4}^LT6O@?g(5cb?#mJ^)KH49rTVYNYO?w!>L}Nhlc97IS5hvuGOD%yx zXV?T)jY(T0G;>K*qXuH+HKdabE{E9ZLZci^$!iZY1N8f5$|b>Ch`5W&;XypPTQQRf z<(jMyA~sX~fi>Lh`T%2b|8Wc>q*4L3$H6cfAL<|VO2aPtp%PFUrVvl zo~@b~dQ#qU?)M4ScdDt(8>I}o!P7qA;NSp6Dj~U_&OYsf;Y#oeV2dEY{!m=Nu|X-| zmGeG@WWXqFA7pe4X(#n<7$8d1pc)8U#5i`Arb3^|Kv40x=(~3Ipk!DS>sDAxM9PdH z8X~_$A^-pgnh;%#X&4bl88VF`sZ1zylx-gUG)U zmO*=v&B{@(Lx(br$Do}k31~z>JJd-fC)l)731v{JizAhx4mg-sMsmLegqY&00C!1G4P;!q8wHKrm|i19H>yLD-L-1ui08EL5Eb^}uGmv=qZGSmx?>W{OSZ zf?iO@2t3*t${)$2kvPOwyO`dpHrIC4-6K=a?y2jjHMU+**xI%s*=feHi|EIiIWJXW z0o2dbk#mr@D8P@q3#*Mj{CDNnshy_i8=RzGJ>eZ%b8B_iIo z_<};zrp?|q8~<~ANmEHllX3jQ(xiP2Keem@r$RBJbG2Y^pzZH~VbLKos2Qbl9Yi)u z6-iQsNRjJU6QJG0Fj(VO#>>UZh&>N!n?vNT(8@?L<0^kx6|gE5tOB8NklvW+IyuVK z?Q=+aP!)`!=y%xu5iyRC&5l)6b%m|oF;Iy^RkVV#+7Lm18KdGf(yWU;IP8C2oGOB*&Fcz^kVuZGZ^ZTi`lOO||m@UQ(VA}j3EiaqP& zmCKcUqKP8nsE(C`SkE4K!1&S_7iB)<+jvPQ=})c3DZw9>35n7k1r$~XZ4|a%6P)*E zoKJAxCsLdb&~3!|R8Iyf3rj!_GRYPe4fKt~4oQ+nOlc<4u(=Z-`f+pX>SuQCe~XyJ z?pK>6Z`j0eiT%_mH@APv1)tbt%p%|s(`?Xlh=VJSkiCKzmYNtF-jS)3XCOc8H36bw# z7bD~vs1a0Lw_m;T9zGRhcuL{)$w;V}zAcWJ>m?%O>g1bF2tDn;sr(ceI)C~9jWqr9 z6+gcGD}?+Di31`c|8O4ZB{^ogh&M40dI`o@k1JCgie28IUZ1T^Xs;SXiX*$Q(#(!1 zL`)sYMKCcB!Nd_1Ow8GX0Mv+F3P9!L32#Lxmv(c`HV53WW)0<#bt=^Gb2hKX3_PB< zg-^sgy8TdYBNew9&D`wLkevz30*cD zOj$navcQXoJfygV4{DrPZ|#OW2{_a@-?>^kYoiGtBSrX?k*TRuDA8($660c* zMKT(Y*e6s=`sIEFvqmL;J4=`C`FD<8W+6_@>-(f=PrW7{DCF2mJXLxJX1P-AkSsGz z$iGbxZV~aLNOn(Rk(Q2ehDo_QMN79qdf0>w)GH=e9$Byy>!P$1Qc1^V21gLq#$Kff)+~PoEO_{PFXng1iv}t=^GFk^#aPQt-oK4$1zhgp-59#4UXFkyc?rT8>Z@? zdSft)8rf6xMgLreBM&T8#9W1aO7TfbfRa11V!B7nRc!MoGJ-_}k9;OM*r#A8oS#mY zj8EoMd@{GpK!`?h78VPze^`Z#szKP|1mI z8A06uy*uJR`G$kIj3z%Zh>Kv~yV5ftDxwFF_I(MuS9fZ5j#qZ4Ax1s|vgeSXxGy@z-++gcO^{&LafVUO#%Fnyc(M zdq68x*J9?d0#j5@7$!kyL0fIZPA57kA_l<@;u1qdUVF(R0KYozFr}lk9=wjLSN8AW z{k^@t%Irsfv}1=-kAz8;)nHDo2REe;d5@($$=tmp37lipZxPfEdueWEz?oC5TP*g_ zrwOVAcQp(f;X{`TeeakL4($?wN4p3-5|~*A9(@#e{N&IxVx0$C84tq3jxA(lbTQfP z!)cm$&lK-j^iH_uOT=Fm(L45O^bJx0XwRy&TH0ot6oDdaV`T;&6O+?`F(?`ocmzuu z@EY-#qk+c)a@){Ojx3ZzS@fzj%!uVgY}Z7AM{^HB8F(ai=SbjD(dt(OD2JMQ@JMFm{zxJ(v6K}s4PsXD3rq@?B^qlq znHc}h5k>+2vlBBVw)Z|)ba7b48pxHrYwf0J-Nf24v~pstkZl~9)4)m%4)cqRD<(w) zbf#@a)0q!f36DjZo=*E=6RnwCF74R&jUsIkqijffs58hY_;ak#(xG^8Sepp$J<%`S z#J*=E_B}9r%hgSDQY6s>T~(UXQT9D2<>-Lh%0=vZZm{pAAQORi(}sYNQ3yK{kwGFI za+&NDP-n0MN<0G}e-jRa_lC0YiOw^Gh)?w2?Zzt2tG6KMD3{%8B6Z=_3?~S@djiPC z1v7RST^+kb)8qzyS@L3sQgYzF!vsd5TFj}WG>3f1=K&Qk%@c0o@=PL1TWqL;9s*WU zv3I>(5+W(}f>~dX+ge>|l2{+)w%=Z|ptpCy65@a_YamwrX4qGEyk)!&I`~{;q2*I! zVQ&9saM}JrQ0i|)8j8xK++|-$qrL6zBza;HPNmY@ydYs7Y}q5?X&FXzWQN(J4MPb& z9yClUHB1^B#*;=3Lpe9GhH+6IlY@2!l(ad~J~XItR6AMomZ7a`)Ep2S?30OGhPgnWbm z&x*7LbJItORHQlHE;jMare;i(?)tE6L@{|wY1oI|xg+T~6B?0ZbB`j%tA)Q*ZlqbA z&;2znfkOdA)7lZsaajInY+KEB-&5O8x9pfVZ-+pk5Kc1!)6OX)5SqkjmSvruI$2#m zML$o~X+tshPF}GkU$9Xtfjl29X4;7?j+9#ZkWX0QLpJt5y6J$?fA@0Z)a(s{ zsrn|Qd@MP6@T=2a$x>~SRV(eL4>{%~+`1K7lQ6Y@z6E;_4E%Hudo^E6PGr@@J4noi z6MlKQ7XhVgg>4Q@Q$t6KON@L6;15WxB7Y5Ru5LX63DOeL13ooeP{ajFn*nD6c{*%B zMo=;hA(*4c2;|Dxfs6pvV@ez{!hsA!1oDxg0E8O&XO(aQWhP)xofLtLh?||oR)U0u zP?up^RvTkj2otb(Y%m-GKJ(YK4rPPzMbSQ1@t!E+oQWn+0@yLw&v^k`iwY&3RlG;W zNX2qS`T=K$u~Ya|;j8$2@mqc)mjsnfC7t^I)vGLj|IarrP~LzMf!&KJemf7f@{ zD4P0_vIRZc7unezp>B+F>}#YWydahRHR|mCEy|WnvVArq`=R}U-`T9cd#W({ow@2^ zz8iD0%C40xO0@r~n#_^}ic@UQ!@##Ab{L`uQ*U~y;)9oj+7A>bw@JLF?W7vwa+gpl zTfkE|ckiQJdb6=umTk~;@HB8_41JCyY_Uti7JAO*Zgd_m{4P~mZi5s+yvEyxOajiZb%tDBssOvL!wvi>*@lS64uddEDHb$g)|Dp0B&lwA4(zGQ2B9J*Q032 zNGWK(+RlT@CUq;~-ms(57i`Jooi{(k=BpOL5kwbFwlTms@ym?ZE=3Gl+4OKz^TQ9_ z-lTe8fB50oe~QkmvZKiPSpaXXw9&6JvwnC2OlD9{qGA2mdz#E?K|m=?^$5ByPI;&O zd&$w4EFM_|B`e>2sVjSp*PhlM=%pY({!v}PE2u0NoIZCl!I~G(DoAX3)CFTyfI9TN zZ$Ki*sF6W#E;}L*acosdE_KL4Y+Dz{`4?l^fh;(24Jj`SDHj-ph^rhR@JP9$^gvWD zhA^8(^gwDnJrKuMg&;Jfn+k}9G+?>aJwwYiXdhy%mxcT*;~~laqa;e|L6iym9_S8? z<4aMxa4Izf?N~k%Lxpljd(tyfM&F?IqXjg^b` zT1w5wmR3G|jNl?rU6`jLa|^zP8hk{uQag6PU92<>bZVN?Hn6_1 zt?-}kk^EFpU@#ITX(5s2S_Ks&u@!?6fyO1k#MlZB00#g&B0O~1nmIy3M;yDD+z9UB zkZ=#FJ`s5{zCo~K>WHr%JhEP_5N=^_Xd%a?Xm4-^_`fbxIE-Y1_uL-5nIv8 zklSN}VZyor7xz#vUEUA$(iJU07H|WL!xCuIZVtlzuqp1MQinIe-3ePSY{H zVb;J7W#+7b1|`dQl~)bCk9`!6$n}Q?Zok@(G0U)7c)r@-uhC14=b3Og26WoPDwB<1 zcT3$d=nI5LP?yO`1hSXV9Oye@bE}Xg9V1zVX#peU|-l^Q(%jwE5N63bFasseX#@i4BxcHwDb_ zOe-_%c86IrBo_FfF?M@=Zig5WL-yj6#MkgU!3?($`yZQx$s}$ z-~O#v-5>cp(__rEuC{!Na~tF(|KU3@%P++x8+Lts)w){zl6g~n{E4~_{R7`SQ-ASb)PVrN^G-?C@%>Qt{`UE00u73FcZPTd9Fav#^!rZdO& zt8woM_NMj=wo&_~_>JqeR}qm7vrb%lKFv_96VmhoD(k?q#6V_)f+92?#dx%ZYPO?`>=HeP~Mrt~K|5^5-@^iLG`59go zl=FRdK<#4JE03~Il~T40^;)FP#rONzefs}m3-n*J1(ti+DlMDs5b`FO4|!QXV*zRd zA%AKE^9A`ks15Kc!7EGO#}-B8FJw>hH(y#N+lb>?`ip3TxR+>yC&8ckA*fTXg}l%5 zvL>>{q75K_YJd$F)aUjc5aEhsX3Yh`SL z&Bj((=is{oEJIxid$fifR`15R`3uH^`HAN+-iy~r`C{+la~=i_Uep$mmv#?ZW6i^O z7{%s_R|k7Yy%zfTIJ~-WJeO^^T+NQsca?Y157OCv^t<}^Sd%4>&BwgXFji)2FS41| zpW*c{G;c)zjb_dKO8${a%A?R)G-a#iy7=zx$`ZGyR=wXJ7m8*PfU$XU4NL zelz0_Xiu8Y|Ac)dbT$?-LfU^t!K#f9J`F27-LR0+ z9#SRv^aFofiU0D@$Cu;10e`a$|1HMz^MGNvi_K@{IGTuax)S@1W#a5s{Ozr{dNFj4O2KcI>pV2>XoOisv-p>Ye!I;eVSq=&u{ZFE7J)>F@JU%5s#J z${YLU@MqMchE#{V=yUS$+?&Of+whBbieJ4M&!=)l>U|f!bt}%Mnq|ua@9+|o`F7M{ zDeh3+uf}KW+lz6%94)5cg@0#m!}HGe?@zc$?XIE+=)fgd(dG$2WF?_plhK|jphR$? zy*=RjOhxbTfteu#?U{vk%z=KFiznxUX|@okxgua1iqUo@uoX&y=_*4BDuhJ*@V-{D zYV@-jVEJo-njVK;8tT}1SYlVA^(LVgOkr1{epj<;&_$-he=-AdydIprH-M3PChA+y z{t@l}Piz+ZHtgUV(Qj|UzQx~RbJ@*E1bveIfOWD*z;?7*ZiT;mJNqm9l6?gX#=ipD_6qFJdFXQwLgoh`$9>2*c#XZv4zk~{ zk07}>+3V~L_HXE)C)iqch`q($MvHvR{sNn50b1b>^qz%~{wB1~67=S!XwMe3;oWH4 zKg0WR4|;DKTY<>KZuT#%9V6!Zz!-jl-roymj}VX!@314>#uIoVPvUl-4A)!=cXAhZ za}W3ORM;EcV37C~dlC6jJK0NY75m>jjXler<366we!??&CePy8JjdE{=j~(0OdMl= zPLZFJ{N`uC{H!)VYw6QJW{miId{&z0;_q=T{vMxI=5_HsoR2lnYs}Bf%+JX0O_b-A z=I>TkCN|xETg%d0=ij`nS>Ezbm7mp9wX0f|E~b;K%yLYfB+G$MQ4V~Ha^SOyvEBSk zXOOR9*9L7j%nEUS|F=U^Ev2*agU)YX8}!b^!S}zN6SS1ho&`ND@2a3$ItBb1SB3Sv z6l7K7#DWv+Wb?#Ecb1ta2{^G$GEWk5l5nYcl7y2)w|Qd62}n-muO;Keo-9vz&|y9> zCGVKyg;_h%*ad(H}aJUzDcXuy^9#A;EP~6?!4~k2H;%>!@yTi-(k>C6L z_p{l|WRtN?CYjw?Zxs*-@DA{H#FPNA-_SeLhJWY(q5Z!H2=qzmjUnlcO8f>S`U*nV zGE&l@H(JeGp6m@iyu$;$mr+&Gc%%IW0GRFpfX4C3nIJnE4NVCEfaTXeJpX`0yhp5x z1{>!a?dUBp_XZ~4zlXV+JDR!x0Id9P^3iYb$1NP|%G}H2O@^)SjYsPrz-`BdvvRR^ z1OV7c-gs&O02oV*2DV~rQ};Jnj<R=zs`0GqR6>@4lzZ2ra< z`SGpZfj5{M7b@9sH1&C_H|qU=WIw>5zFT)Pb+mk=QNPiy-}ri{e~6R2IJ>{q8U0V2 zx8BN}g1FiRxwu)r$;P~~0gB$}aG197%RWoyCMG5pfG=CGyekNkbSbS(k_RFH{ab`- zz(4maOiVUl&5+HpC8!q zznm8t$uq|eQlc+Z_4~05lp|80P{3#x+Pcd)&A7ejIQ2a} zy=>v$TcPJ$9rLsmef}Bz!o=58=srk;tsErh|IGFZI%(a;>q6VgI2i~$E+&526>C#S zU;CRKEad37^s8Z|p{F5OzCGcl*i_S-wDYk3>etoc0b9W<{WHPAX_0pEYxR}rs_>r^ z-P;QCmz%R!VY7t@8mgF>I|r%TA#%u5|B!k936ZD6)$SyZdD~zRuhT+Hh3ogNm(x3A zr60nk<^w&^ctl@`x<(ZzG7?*PFX>YKx!6=X*z#Tepx|IAK0Ox%XFaw1zxs|q9tT&t zeE-fDvt~Zzm%?du1>`*ZEG~ki^K#|8EM?e^a?QKFoHx9F$sXRS-xjAA>7Cf-MkgMHn#c(GX092cd)efi--Zia6$Ke-;1sXg zY+owz;gEfmj&!=E_9mcXT$zsKTdiNwPw-h6PHEYOX7cZH#y_+2#dp!tthpuPKu(N; zQhU~K&u^bsvXL>mLk-w=k9i^mo0GlgeuDeRnmJs%N&lSIwtNa_YF}XwDLrhTS6N)^X!EHh6qYrhzn3of8Ax65LK=kI>Joy8G4Qr2b@y5#II?0uy%N3L?8OJQ+k}aC9 z?4I}@ht^s{=5?k|w%w~t|2ej$i{M5a?kHSkgZr+e13L`@D|w&AS~NJB>B2^r-nwC1Fw9(VtcZ#q^F7X$QBt0SL;mY_}2hT z{QXYATgB~`v#vw}|N3bvgoH72UhdDVY?TeQ_NVsQNPIUC%eg&O5J9AIl>b-j(}Axl zuDS0b=eFc=SQ}KoM62Nbv8RAWrfaq=ik0CeFn%qN&uvFoFJB=vXqgwKn5uRk9m47L zZC(ra!G2L3=(4I}6JtW%I-$vO-V!3t_JL&R^w*cm8Aoo?1RYc3Ccy4=&ikD5tocK3 zX>nMQmigBby~i(<=_ax_Q^%PHZjO_yO8x0AoVX56ZINIV+9Q)dufKmZ zm5&q%JH~p+Ivi;6&DgtKHjlJFag|?z>pMb{fW~>_yPnF8ob`w8l=k_`f6s2Wz9Y-_ zj6(dWbxShALPb5Xbt`Xn<(TFBGkD#wz=WW+A@S3Z$NFZo(ix}v>Mt(+mRsVdK$JDG z_lDsD{OM0GA962D@W-L>OjQ8+*$e9(Ch{hx6Y1cw9sfHXmxQy7Ka1{RkM3>@1Q`>( zj26B~a+y>tf^o{UQ}NjO>Dc)w2L_UYhO))P2Oh1hXC;q7?7wc8o31(lm2QbF-9BHA z+Cb#>O9M z9SF;tfeRtQ|JEsyZiwL-1#XYi%2H^Tv??l%Dzc?2I>Ozvc}ZBPONMvZ=KGm$IpZ=< zsz$p4Eyzq+yj~+Qx$GXY`aO23fdpkrye!|;{#oPr^bFp_SupRd``vEhjvv8+febp4 zB(mj)P({0BqV43xm*esd-&B%WCFL?Yw&uh{*3BO2Qwi47=w9RD^7*0kRoPcgXM_Hf z@Uuhx?VpPBgEGV3jnFK;!SvRr7sDQbOpmJVW&K_I7{#Y2_+JIkw9sV~m=yd=Pm6N{ zUfaa2btgK$qj2Z7=xN%*}Sg0q^$cQ!gUR z8B}W8btPVr?Kn|)q(|9T>2YO)y(k4b+IgQpf*h#>8cJa=f+~jY7#A$DXDZ{{ADLWx zyEq1eix2udNZd|AZu732g0(H;tR0(%e%Sb1OVds;ZbSqvOL#-uz}7wZ|2-K3L+fZl zr_6ZkvSdDzJzqv{Sd|pO*CYV<`UJw(p**I2SbE0KVDa9fVkU!Z-{g-}j zbR{^cH>b}W(|Wect^PY%gzu2^zbCvy&i|aU!*Inex7@eZIDg8+?$p%J?ZX}fTkq;r zhQs6UNP^N8knc&9hSL=L55*acE-R~wTeJJ!7Xuuz)7gU^dcsMcG7;`;aF9(fCh)~M zlEfI2#05z9GXG^6-}X+azW%*qEDJRH?)+#fv42UV@{4NXmrP8o>#6HFN=s1B-U6Fk zN~^euC)UeEf(`8em=#Ac^wk_Q___*e(k4zurP;{m#+xWTO6=H>uWp+v2pd`P{_ zub##j+Y+pM4_NmiCS<>EjX$<#JgUgbU&1j5ehMVB+&BieY zZtI_jS*6fhv$f3&IPW|WulW7HCca_)Z|{I{=1mZQ__c<(`DP;+3s({;NrEV;_g&B{ zA>-x;lEK%1^$nRXJ$?+%=Bud7soZ*5as!b{o5fIb_K1dN4NqS5A6_^xIxwzV0lLAO~;Bl)3icZ09FQsrU+P z-)HsA%dJRJ><2bm*Jz49ZKTR1@u`!;9A@IkPXp?1)_2aYZLfX>=xKZQe=Y+AQhf6n z?oJ8~gF}6IaEf{5T4J(5wU(d=mJ4NbLHITJ;J{;oH3MntJ^>#o&qH^7=s*wHaYYBVC2cmg9~W&(uJy zCHn(wlo<4c=B^2yps=EZA{kO}m)@|_=CVU=8W>)aMO}d>Qo(iaWu*Zgr*VjVbTP`U zX!-kysN0dP)S1>Rd@$=EhMm6Qxe^eXwA6e0f0NaqZxv8k42>HH{N^EoH=e!LRKV;+ zZ815#m9!pvh^q%VT9uonYO-#~6eQA!bgJJR&yPc_1=w5{#pzXWdQ^}$X(W8UV$R(V z3vS0)?BR?sguN`>j2F^JqpZ)+8hg(>K{7tPcFa+*21Xf;&}VgA$Lg~uK3|HtI*eE* z7FVg@+>gY=o&W`~($ai;6Hs#_&)*gS4F^UiJnH{3p3_AO;T^ z%E2PyrVItipPLU+pa@t{gfp9IDca#Z&iSJlKl(~|b}RVTv1#NP`DLCK4*D6)@CRPE zJp3Jw1$tyVeq49Pv;1+@{5ODHTyH?&W8=3|FCGfRE&sYVEy%1sBsp&Og4Tf6oN`xj zJ6C(s_k8QKn%e@R*ycs=8C2xjZD?%2qY1QRSHM-B_mK~WjIJ;RjNM)dT(GaDaBv0q zE`_MN{R_l>54`0gDn)2MXh+ zI5z#E6c&c(%1!Y@dkog>fqoSjf>9*NaQ(>FZ0x^WR~^dJ$ovD|$$QK0>M#oA5=*WM ztz9H_J~zHu`r^@A4|SdKB9_999Z7C{7mE|B`t*w>W2kVVmCz0!RDV)OxG zynRb@LU-BCVHO1b(R|m&O>}8xW~6YhuXJR&BK`pIl+9s{6XUwiNe@s}5-Fh_D@TyM z)T369lCq1JWx+0`87r5&w43TkQR4+3bTt>CB-h2l<<@-LH{># z=5rV@P8Am0&P5j*&ILpop3f#>OE@p#rIt#M+o-WEWfey}ZSi7!*fx?dj#K<}X__KPgPlv~e4{Da z`M&1No;Lh#bX!4O{A@cJNm8L~(^-41cwuHV7F!QdD-#ra)qgUW+lilBx)lmu{mh{6 zhN&;XSLk{Xp5fK@MmzVFanZh#T|4VCca8sEgur%Oa(wC$U$=IUq;!-mK#Odki07rA z`XZ$lCyRn@D^5ueFRQPT6{j}JZXA}MLKz<^TM+nr=LO#Qf#)XawdwkdzbdfQu7WP^ zTy9CCABsjiXT()Fhh|s9oTZX{mNI0^B2MZ*HlJr7e;^p}-8Cj<=qqtaF7H(PJ^DdQ zq_xrR^O%#mN@X)b^SA%1xCg`s(L44sh$rJS(1teS%|C%3XU5M1p~)r=$FWYrb&J0` zY<7^JBvP|bZVQUj0_O>CvDn%+P%m_{tH#>t{r)$r-mqNM319a+C=|=nUWb!&Ie=Bf7 z@@`tcO5}L3YXU3Zy>CC`5mbQUT$9y$&fDhklN!qtSamGEKZxBgtm(8UnDtUic&i2>#%~XxS8otcWB{c8hG4jNrbgEwK>3)fT~NTU_KQ z3}zuT{l9MS#5ySrF%T!$nes|042q;HkD3-Cj>BO?39r8GRmKgOWM7Bd%$R@#04IPrzg>Dsxz|t9N9znowXW z#a8*0p8Rds$HU;tyrP3`h3_OHD7)P-I*3uO_Y7G+Y4vw?-|(-|Pxk)Rvb)dLUO&TC z5sM3MZu3vf16uVJEXo}2o#)wVEZfaKyOY>!w*M8rN|HYQys9?UIx zQCivHc%vgR6~~QK2xsWdA*C>vK$Lx|XnfY3gieMJTIti2@D|Ob!k>A}zUp^KjURIH zsb{`~>BXtOX?Z*mgp7yV8G!Z$*9NafjrRLEP9gww2s%yJcQL ztF`jPIsS>5#C|oMj_-_sxR*TTvdzhhJ=DS$wzM=J{lg%$2hf%-7xCncE|n zNbC0KgnzHU3n^N6i_HhFiq0bh-q9IL2FHyi7@*e7@4-Sx4x>7YHL^{~?A8cT_mq6# z{j0PM4pLcWhkliUtkifo^MT`Kb{1ews`^S`s_*O&a|OuCf`@adAU;)ZEF)(d$+vG} zNP5Vj3S{NQ!#Pmu`)i^?dg!PcWc7uIlc^$}$ZU*K6o!<7YY>Jzatp&csSGl_2>gQzhXML8OG-GvxcIVShsR)OK=aRIKyYO--V-r6DhK9F)17E@&2 zwC2|NT<-w^8vA?xvUzzucZBLmxMB>x&576GkL|18Ke5klnafVYvsOkx(#&al50{xye$wC#T(m2hmVa zRR}HM5m<|hckq^~iP7Tg_g$9WWw1BuDX@uXjmv?r!#Qr&Anl_h)U-Ia z`vcQY?tc$V`}31bSOw)YF3~qM8nC)#YVOJhrfF_+Vn#Fsw7LW(4M%>{5{{t}K1juv z>7fVsu{|&w>K8CyU9itu0gLMqu;NtjMSfFlV z?mbw1?$FlaILk_$9gI^qRLu|_cO3}SJuDu+sn5j{2y)<|EP`AD`-V-_PKB!Q?Zwp?Rv_#iN2e*R6V5a^HdrSq= z?9hWMqylf&;_?0lak)wmg!JMf{M64y56@keMGB4U-lUX$cgTkq{d-riyq zy#K3Kb-3TFRdqOhc#^tl&S6a-k_?;kt>;kdeh_nq=}QZLpTL-VGuuR8kGp2SIsM+D z@S_)ZUAPR@qc3+|vkcW?3U}S!TP~QpjzIP@j_oIvy22@cowqF2W5k_U~I|K++V6raXdk3v1s4Hq410IMWwtM z>@$QGv5#_gd~Lj6c=ZbqU%B2QhmYNBae zAQ-slUQ+9BSx2Cj$cYXr&5eKl23%|}i4TkhE>4%|Vpdq7#%s0%7jH}Ah2zqSpZ_Kx zE)ti<2POa)xk}@o6M>5grSY0=Kz+*UOMhHSi_^k^80?`eMaa>_%#e}N7;A4hSfZD# zi;F#PNY#O!BMCTyx&zif{*J-@I^{rUBeMG?clNi_dHV+qU#1T&Uh61`{=YT@l: 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 diff --git a/node_modules/css-b64-images/test/fixture/img/background-pattern.gif b/node_modules/css-b64-images/test/fixture/img/background-pattern.gif deleted file mode 100644 index 77893d50af0e8565d41ca40d211a8ec8804c0cf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1103 zcmZ?wbhEHbWMg1sXkcJ?_UzfGPoEV3b4U0FD7Yk+Bm!w0`-+0ZIIg#cFVINM%8) zeo$(0erZv1Dp0vH$f^P>=c3falKi5O{QMkPCIEf*+ybD@E~!PCWvMA{Mftf3U@u!`;&zJ*PV=C8 zQ*gS)#TBPseV}9XK@p1-(J&!k>H#s~$ri|gC;ZerU}`S{CTqt3|Nj2@{p;tC@87({PcxqRv3h4bgmo;iK$#u35cm<%;FYmM&SmXyJnS^XAT(J!|HS z>C>i8nLKIYg#NzXp6;&Bj`p_Jmgc6$hWfhNn(C^`it@73lH#Jmg8aPPob0U3jP$hB zl;otug!s7FnCPg;i14t`kl>)e0DnJUA8#*D4|g|L7iT9&2YWkP8*3{|3v)A56JsM_ zmeSMJ(bm$`P*+n`QC3n^ke8E{k(QE_5El~_5f%~@;OFDz;pXDxU}s}xVP;}vU{L(Y c!TtZSIFfPujp0I{xw*#H0l diff --git a/node_modules/css-b64-images/test/fixture/img/dots.svg b/node_modules/css-b64-images/test/fixture/img/dots.svg deleted file mode 100644 index 30cd43f..0000000 --- a/node_modules/css-b64-images/test/fixture/img/dots.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/node_modules/css-b64-images/test/fixture/img/mixit-banner.png b/node_modules/css-b64-images/test/fixture/img/mixit-banner.png deleted file mode 100644 index c5c20cb4c6ce362983b584c5d7251c747a968a35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4821 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 diff --git a/node_modules/cssom/README.mdown b/node_modules/cssom/README.mdown index 1e7c440..83af16b 100644 --- a/node_modules/cssom/README.mdown +++ b/node_modules/cssom/README.mdown @@ -1,6 +1,6 @@ # CSSOM -CSSOM.js is a CSS parser written in pure JavaScript. It also a partial implementation of [CSS Object Model](http://dev.w3.org/csswg/cssom/). +CSSOM.js is a CSS parser written in pure JavaScript. It is also a partial implementation of [CSS Object Model](http://dev.w3.org/csswg/cssom/). CSSOM.parse("body {color: black}") -> { @@ -22,12 +22,11 @@ CSSOM.js is a CSS parser written in pure JavaScript. It also a partial implement Works well in Google Chrome 6+, Safari 5+, Firefox 3.6+, Opera 10.63+. Doesn't work in IE < 9 because of unsupported getters/setters. -To use CSSOM.js in the browser you might want to build a one-file version that exposes CSSOM global variable: +To use CSSOM.js in the browser you might want to build a one-file version that exposes a single `CSSOM` global variable: ➤ git clone https://github.com/NV/CSSOM.git ➤ cd CSSOM - ➤ npm install -d - ➤ ./node_modules/.bin/jake + ➤ node build.js build/CSSOM.js is done To use it with Node.js or any other CommonJS loader: @@ -36,7 +35,7 @@ To use it with Node.js or any other CommonJS loader: ## Don’t use it if... -You parse CSS to mungle, minify or reformat the following code: +You parse CSS to mungle, minify or reformat code like this: ```css div { @@ -47,8 +46,7 @@ div { This pattern is often used to give browsers that don’t understand linear gradients a fallback solution (e.g. gray color in the example). In CSSOM, `background: gray` [gets overwritten](http://nv.github.io/CSSOM/docs/parse.html#css=div%20%7B%0A%20%20%20%20%20%20background%3A%20gray%3B%0A%20%20%20%20background%3A%20linear-gradient(to%20bottom%2C%20white%200%25%2C%20black%20100%25)%3B%0A%7D). -The last same-name property always overwrites all the previous ones. - +It doesn't get preserved. If you do CSS mungling, minification, image inlining, and such, CSSOM.js is no good for you, considere using one of the following: @@ -58,9 +56,9 @@ If you do CSS mungling, minification, image inlining, and such, CSSOM.js is no g * [mensch](https://github.com/brettstimmerman/mensch) -## [Specs](http://nv.github.com/CSSOM/spec/) +## [Tests](http://nv.github.com/CSSOM/spec/) -To run specs locally: +To run tests locally: ➤ git submodule init ➤ git submodule update diff --git a/node_modules/cssom/lib/Parser.js b/node_modules/cssom/lib/Parser.js deleted file mode 100644 index 493a63b..0000000 --- a/node_modules/cssom/lib/Parser.js +++ /dev/null @@ -1,362 +0,0 @@ -//.CommonJS -var CSSOM = { - CSSStyleSheet: require("./CSSStyleSheet").CSSStyleSheet, - CSSStyleRule: require("./CSSStyleRule").CSSStyleRule, - CSSImportRule: require("./CSSImportRule").CSSImportRule, - CSSMediaRule: require("./CSSMediaRule").CSSMediaRule -}; -///CommonJS - - -CSSOM.Parser = function Parser() {}; - -/** - * @param {string} cssText - * @param {Object} options - */ -CSSOM.Parser.prototype.parseStyleSheet = function(cssText, options) { - options = options || {}; - var i = options.startIndex || 0; - - for (var character; character = token.charAt(i); i++) { - switch (character) { - - case " ": - case "\t": - case "\r": - case "\n": - case "\f": - if (SIGNIFICANT_WHITESPACE[state]) { - buffer += character; - } - break; - } -}; - -CSSOM.Parser.prototype.parse = function(token, options) { - - options = options || {}; - var i = options.startIndex || 0; - - this.styleSheetStart(i); - - /** - "before-selector" or - "selector" or - "atRule" or - "atBlock" or - "before-name" or - "name" or - "before-value" or - "value" - */ - var state = options.state || "before-selector"; - - var index; - var j = i; - var buffer = ""; - - var SIGNIFICANT_WHITESPACE = { - "selector": true, - "value": true, - "atRule": true, - "importRule-begin": true, - "importRule": true, - "atBlock": true - }; - - var styleSheet = new CSSOM.CSSStyleSheet; - - // @type CSSStyleSheet|CSSMediaRule - var currentScope = styleSheet; - - var selector, name, value, priority="", styleRule, mediaRule, importRule; - - var declarationStarts; - var declarationEnds; - - for (var character; character = token.charAt(i); i++) { - - switch (character) { - - case " ": - case "\t": - case "\r": - case "\n": - case "\f": - if (SIGNIFICANT_WHITESPACE[state]) { - buffer += character; - } - break; - - // String - case '"': - j = i + 1; - index = token.indexOf('"', j) + 1; - if (!index) { - throw '" is missing'; - } - buffer += token.slice(i, index); - i = index - 1; - if (state == 'before-value') { - state = 'value'; - } - break; - - case "'": - j = i + 1; - index = token.indexOf("'", j) + 1; - if (!index) { - throw "' is missing"; - } - buffer += token.slice(i, index); - i = index - 1; - switch (state) { - case 'before-value': - state = 'value'; - break; - case 'importRule-begin': - state = 'importRule'; - break; - } - break; - - // Comment - case "/": - if (token.charAt(i + 1) == "*") { - i += 2; - index = token.indexOf("*/", i); - if (index == -1) { - throw SyntaxError("Missing */"); - } else { - i = index + 1; - } - } else { - buffer += character; - } - if (state == "importRule-begin") { - buffer += " "; - state = "importRule"; - } - break; - - // At-rule - case "@": - if (token.indexOf("@media", i) == i) { - state = "atBlock"; - mediaRule = new CSSOM.CSSMediaRule; - mediaRule.__starts = i; - i += "media".length; - buffer = ""; - break; - } else if (token.indexOf("@import", i) == i) { - state = "importRule-begin"; - i += "import".length; - buffer += "@import"; - break; - } else if (state == "selector") { - state = "atRule"; - } - buffer += character; - break; - - case "{": - if (state == "selector" || state == "atRule") { - this.selectorEnd(i, buffer); - buffer = ""; - state = "before-name"; - } else if (state == "atBlock") { - mediaRule.media.mediaText = buffer.trim(); - currentScope = mediaRule; - buffer = ""; - state = "before-selector"; - } - break; - - case ":": - if (state == "name") { - name = buffer; - buffer = ""; - state = "before-value"; - } else { - buffer += character; - } - break; - - case '(': - if (state == 'value') { - index = token.indexOf(')', i + 1); - if (index == -1) { - throw i + ': unclosed "("'; - } - buffer += token.slice(i, index + 1); - i = index; - } else { - buffer += character; - } - break; - - case "!": - if (state == "value" && token.indexOf("!important", i) === i) { - priority = "important"; - i += "important".length; - } else { - buffer += character; - } - break; - - case ";": - switch (state) { - case "value": - this.declarationEnd(i, name, buffer, priority); - priority = ""; - buffer = ""; - state = "before-name"; - break; - case "atRule": - buffer = ""; - state = "before-selector"; - break; - case "importRule": - importRule = new CSSOM.CSSImportRule; - importRule.cssText = buffer + character; - currentScope.cssRules.push(importRule); - buffer = ""; - state = "before-selector"; - break; - default: - buffer += character; - break; - } - break; - - case "}": - switch (state) { - case "value": - this.declarationEnd(i, name, buffer, priority); - // fall down - case "before-name": - this.styleRuleEnd(i); - buffer = ""; - break; - case "name": - throw i + ": Oops"; - break; - case "before-selector": - case "selector": - // End of media rule. - // Nesting rules aren't supported yet - if (!mediaRule) { - throw "unexpected }"; - } - mediaRule.__ends = i + 1; - styleSheet.cssRules.push(mediaRule); - currentScope = styleSheet; - buffer = ""; - break; - } - state = "before-selector"; - break; - - default: - switch (state) { - case "before-selector": - this.styleRuleStart(i); - state = "selector"; - break; - case "before-name": - state = "name"; - break; - case "before-value": - state = "value"; - break; - case "importRule-begin": - state = "importRule"; - break; - } - buffer += character; - break; - } - } - - return styleSheet; -}; - -CSSOM.Parser.prototype.compile = function() { - var handlers = { - styleSheetStart: this.styleSheetStart, - styleRuleStart: this.styleRuleStart, - selectorEnd: this.selectorEnd, - declarationEnd: this.declarationEnd, - styleRuleEnd: this.styleRuleEnd, - styleSheetEnd: this.styleSheetEnd - }; - var parser = this.parse.toString(); - for (var key in handlers) { - if (!handlers.hasOwnProperty(key)) { - continue; - } - parser = parser.replace(new RegExp('^.*' + key + '.*$', 'gm'), handlers[key].toString() - .replace(/^function.+$/m, '') - .replace(/^}/m, '')) - .replace(/this\.?/g, ''); - } - return parser; -}; - -CSSOM.Parser.prototype.styleSheetStart = function(i) { - console.log('styleSheetStart', i); - this.styleSheet = new CSSOM.CSSStyleSheet; - this.scopeRules = this.styleSheet.cssRules; -}; - -CSSOM.Parser.prototype.styleRuleStart = function(i) { - console.log('styleRuleStart', i); - this.styleRule = new CSSOM.CSSStyleRule; - this.styleRule._start = i; -}; - -CSSOM.Parser.prototype.selectorEnd = function(i, buffer) { - this.styleRule.selectorText = buffer.trimRight(); - this.styleRule.style._start = i; -}; - -CSSOM.Parser.prototype.declarationEnd = function(name, value, priority, startIndex, endIndex) { - console.log('declarationEnd', name, value, priority, startIndex, endIndex); -}; - -CSSOM.Parser.prototype.styleRuleEnd = function(i) { - this.styleRule._end = i; - this.scopeRules.push(this.styleRule); -}; - - -CSSOM.Parser.prototype.styleSheetEnd = function(i) { - return this.styleSheet; -}; - -/* -Parser.prototype.nameStart = function(i) { - this.nameStartIndex = i; -}; - -Parser.prototype.nameEnd = function(i, buffer) { - this.name = buffer.trimRight(); - this.nameEndIndex = this.nameStartIndex + this.name.length; -}; - - -Parser.prototype.valueStart = function(i) { - this.valueStartIndex = i; -}; - -Parser.prototype.valueEnd = function(i, buffer) { - var value = buffer.trimRight(); - this.styleRule.style.add(this.name, value, this.nameStartIndex, this.nameEndIndex, this.valueStartIndex, this.valueStartIndex + value.length); -}; -*/ - - -//.CommonJS -exports.Parser = CSSOM.Parser; -///CommonJS \ No newline at end of file diff --git a/node_modules/cssom/lib/snapshot.js b/node_modules/cssom/lib/snapshot.js deleted file mode 100644 index 2acf071..0000000 --- a/node_modules/cssom/lib/snapshot.js +++ /dev/null @@ -1,76 +0,0 @@ -//.CommonJS -var CSSOM = { - CSSStyleSheet: require("./CSSStyleSheet").CSSStyleSheet, - CSSStyleRule: require("./CSSStyleRule").CSSStyleRule, - CSSMediaRule: require("./CSSMediaRule").CSSMediaRule, - CSSStyleDeclaration: require("./CSSStyleDeclaration").CSSStyleDeclaration, - CSSKeyframeRule: require('./CSSKeyframeRule').CSSKeyframeRule, - CSSKeyframesRule: require('./CSSKeyframesRule').CSSKeyframesRule -}; -///CommonJS - - -/** - * Produces a deep copy of stylesheet — the instance variables of stylesheet are copied recursively. - * @param {CSSStyleSheet|CSSOM.CSSStyleSheet} stylesheet - * @nosideeffects - * @return {CSSOM.CSSStyleSheet} - */ -CSSOM.snapshot = function clone(stylesheet) { - - var cloned = new CSSOM.CSSStyleSheet; - - var rules = stylesheet.cssRules; - if (!rules) { - return cloned; - } - - var RULE_TYPES = { - 1: CSSOM.CSSStyleRule, - 4: CSSOM.CSSMediaRule, - //3: CSSOM.CSSImportRule, - //5: CSSOM.CSSFontFaceRule, - //6: CSSOM.CSSPageRule, - 8: CSSOM.CSSKeyframesRule, - 9: CSSOM.CSSKeyframeRule - }; - - for (var i=0, rulesLength=rules.length; i < rulesLength; i++) { - var rule = rules[i]; - var ruleClone = cloned.cssRules[i] = new RULE_TYPES[rule.type]; - - var style = rule.style; - if (style) { - var styleClone = ruleClone.style = new CSSOM.CSSStyleDeclaration; - for (var j=0, styleLength=style.length; j < styleLength; j++) { - var name = styleClone[j] = style[j]; - styleClone[name] = style[name]; - styleClone._importants[name] = style.getPropertyPriority(name); - } - styleClone.length = style.length; - } - - if ("keyText" in rule) { - ruleClone.keyText = rule.keyText; - } - - if ("selectorText" in rule) { - ruleClone.selectorText = rule.selectorText; - } - - if ("mediaText" in rule) { - ruleClone.mediaText = rule.mediaText; - } - - if ("cssRules" in rule) { - rule.cssRules = clone(rule).cssRules; - } - } - - return cloned; - -}; - -//.CommonJS -exports.clone = CSSOM.clone; -///CommonJS diff --git a/node_modules/cssom/package.json b/node_modules/cssom/package.json index 26cb705..ec07eaf 100644 --- a/node_modules/cssom/package.json +++ b/node_modules/cssom/package.json @@ -1,8 +1,8 @@ { "_from": "cssom@^0.3.4", - "_id": "cssom@0.3.6", + "_id": "cssom@0.3.8", "_inBundle": false, - "_integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==", + "_integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "_location": "/cssom", "_phantomChildren": {}, "_requested": { @@ -19,8 +19,8 @@ "/cssstyle", "/jsdom" ], - "_resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", - "_shasum": "f85206cee04efa841f3c5982a74ba96ab20d65ad", + "_resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "_shasum": "9f1276f5b2b463f2114d3f2c75250af8c1a36f4a", "_spec": "cssom@^0.3.4", "_where": "F:\\projects\\p\\minifyfromhtml\\node_modules\\jsdom", "author": { @@ -33,9 +33,6 @@ "bundleDependencies": false, "deprecated": false, "description": "CSS Object Model implementation and CSS parser", - "devDependencies": { - "jake": "~0.7.3" - }, "files": [ "lib/" ], @@ -53,8 +50,5 @@ "type": "git", "url": "git+https://github.com/NV/CSSOM.git" }, - "scripts": { - "prepublish": "jake lib/index.js" - }, - "version": "0.3.6" + "version": "0.3.8" } diff --git a/node_modules/cssstyle/lib/implementedProperties.js b/node_modules/cssstyle/lib/implementedProperties.js index edc6f5b..fd8cbca 100644 --- a/node_modules/cssstyle/lib/implementedProperties.js +++ b/node_modules/cssstyle/lib/implementedProperties.js @@ -1,6 +1,6 @@ 'use strict'; -// autogenerated - 3/27/2019 +// autogenerated - 7/15/2019 /* * diff --git a/node_modules/cssstyle/lib/properties.js b/node_modules/cssstyle/lib/properties.js index 2c3c9e9..2b4939c 100644 --- a/node_modules/cssstyle/lib/properties.js +++ b/node_modules/cssstyle/lib/properties.js @@ -1,6 +1,6 @@ 'use strict'; -// autogenerated - 3/27/2019 +// autogenerated - 7/15/2019 /* * diff --git a/node_modules/cssstyle/package.json b/node_modules/cssstyle/package.json index 2512270..8494298 100644 --- a/node_modules/cssstyle/package.json +++ b/node_modules/cssstyle/package.json @@ -1,8 +1,8 @@ { "_from": "cssstyle@^1.1.1", - "_id": "cssstyle@1.2.2", + "_id": "cssstyle@1.4.0", "_inBundle": false, - "_integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==", + "_integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", "_location": "/cssstyle", "_phantomChildren": {}, "_requested": { @@ -18,8 +18,8 @@ "_requiredBy": [ "/jsdom" ], - "_resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz", - "_shasum": "427ea4d585b18624f6fdbf9de7a2a1a3ba713077", + "_resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "_shasum": "9d31328229d3c565c61e586b02041a28fccdccf1", "_spec": "cssstyle@^1.1.1", "_where": "F:\\projects\\p\\minifyfromhtml\\node_modules\\jsdom", "bugs": { @@ -101,5 +101,5 @@ "test": "npm run generate && nodeunit tests", "test-ci": "npm run lint && npm run test" }, - "version": "1.2.2" + "version": "1.4.0" } diff --git a/node_modules/debug/CHANGELOG.md b/node_modules/debug/CHANGELOG.md deleted file mode 100644 index 820d21e..0000000 --- a/node_modules/debug/CHANGELOG.md +++ /dev/null @@ -1,395 +0,0 @@ - -3.1.0 / 2017-09-26 -================== - - * Add `DEBUG_HIDE_DATE` env var (#486) - * Remove ReDoS regexp in %o formatter (#504) - * Remove "component" from package.json - * Remove `component.json` - * Ignore package-lock.json - * Examples: fix colors printout - * Fix: browser detection - * Fix: spelling mistake (#496, @EdwardBetts) - -3.0.1 / 2017-08-24 -================== - - * Fix: Disable colors in Edge and Internet Explorer (#489) - -3.0.0 / 2017-08-08 -================== - - * Breaking: Remove DEBUG_FD (#406) - * Breaking: Use `Date#toISOString()` instead to `Date#toUTCString()` when output is not a TTY (#418) - * Breaking: Make millisecond timer namespace specific and allow 'always enabled' output (#408) - * Addition: document `enabled` flag (#465) - * Addition: add 256 colors mode (#481) - * Addition: `enabled()` updates existing debug instances, add `destroy()` function (#440) - * Update: component: update "ms" to v2.0.0 - * Update: separate the Node and Browser tests in Travis-CI - * Update: refactor Readme, fixed documentation, added "Namespace Colors" section, redid screenshots - * Update: separate Node.js and web browser examples for organization - * Update: update "browserify" to v14.4.0 - * Fix: fix Readme typo (#473) - -2.6.9 / 2017-09-22 -================== - - * remove ReDoS regexp in %o formatter (#504) - -2.6.8 / 2017-05-18 -================== - - * Fix: Check for undefined on browser globals (#462, @marbemac) - -2.6.7 / 2017-05-16 -================== - - * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom) - * Fix: Inline extend function in node implementation (#452, @dougwilson) - * Docs: Fix typo (#455, @msasad) - -2.6.5 / 2017-04-27 -================== - - * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek) - * Misc: clean up browser reference checks (#447, @thebigredgeek) - * Misc: add npm-debug.log to .gitignore (@thebigredgeek) - - -2.6.4 / 2017-04-20 -================== - - * Fix: bug that would occur if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo) - * Chore: ignore bower.json in npm installations. (#437, @joaovieira) - * Misc: update "ms" to v0.7.3 (@tootallnate) - -2.6.3 / 2017-03-13 -================== - - * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts) - * Docs: Changelog fix (@thebigredgeek) - -2.6.2 / 2017-03-10 -================== - - * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin) - * Docs: Add backers and sponsors from Open Collective (#422, @piamancini) - * Docs: Add Slackin invite badge (@tootallnate) - -2.6.1 / 2017-02-10 -================== - - * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error - * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0) - * Fix: IE8 "Expected identifier" error (#414, @vgoma) - * Fix: Namespaces would not disable once enabled (#409, @musikov) - -2.6.0 / 2016-12-28 -================== - - * Fix: added better null pointer checks for browser useColors (@thebigredgeek) - * Improvement: removed explicit `window.debug` export (#404, @tootallnate) - * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate) - -2.5.2 / 2016-12-25 -================== - - * Fix: reference error on window within webworkers (#393, @KlausTrainer) - * Docs: fixed README typo (#391, @lurch) - * Docs: added notice about v3 api discussion (@thebigredgeek) - -2.5.1 / 2016-12-20 -================== - - * Fix: babel-core compatibility - -2.5.0 / 2016-12-20 -================== - - * Fix: wrong reference in bower file (@thebigredgeek) - * Fix: webworker compatibility (@thebigredgeek) - * Fix: output formatting issue (#388, @kribblo) - * Fix: babel-loader compatibility (#383, @escwald) - * Misc: removed built asset from repo and publications (@thebigredgeek) - * Misc: moved source files to /src (#378, @yamikuronue) - * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue) - * Test: coveralls integration (#378, @yamikuronue) - * Docs: simplified language in the opening paragraph (#373, @yamikuronue) - -2.4.5 / 2016-12-17 -================== - - * Fix: `navigator` undefined in Rhino (#376, @jochenberger) - * Fix: custom log function (#379, @hsiliev) - * Improvement: bit of cleanup + linting fixes (@thebigredgeek) - * Improvement: rm non-maintainted `dist/` dir (#375, @freewil) - * Docs: simplified language in the opening paragraph. (#373, @yamikuronue) - -2.4.4 / 2016-12-14 -================== - - * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts) - -2.4.3 / 2016-12-14 -================== - - * Fix: navigation.userAgent error for react native (#364, @escwald) - -2.4.2 / 2016-12-14 -================== - - * Fix: browser colors (#367, @tootallnate) - * Misc: travis ci integration (@thebigredgeek) - * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek) - -2.4.1 / 2016-12-13 -================== - - * Fix: typo that broke the package (#356) - -2.4.0 / 2016-12-13 -================== - - * Fix: bower.json references unbuilt src entry point (#342, @justmatt) - * Fix: revert "handle regex special characters" (@tootallnate) - * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate) - * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate) - * Improvement: allow colors in workers (#335, @botverse) - * Improvement: use same color for same namespace. (#338, @lchenay) - -2.3.3 / 2016-11-09 -================== - - * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne) - * Fix: Returning `localStorage` saved values (#331, Levi Thomason) - * Improvement: Don't create an empty object when no `process` (Nathan Rajlich) - -2.3.2 / 2016-11-09 -================== - - * Fix: be super-safe in index.js as well (@TooTallNate) - * Fix: should check whether process exists (Tom Newby) - -2.3.1 / 2016-11-09 -================== - - * Fix: Added electron compatibility (#324, @paulcbetts) - * Improvement: Added performance optimizations (@tootallnate) - * Readme: Corrected PowerShell environment variable example (#252, @gimre) - * Misc: Removed yarn lock file from source control (#321, @fengmk2) - -2.3.0 / 2016-11-07 -================== - - * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic) - * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos) - * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15) - * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran) - * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom) - * Package: Update "ms" to 0.7.2 (#315, @DevSide) - * Package: removed superfluous version property from bower.json (#207 @kkirsche) - * Readme: fix USE_COLORS to DEBUG_COLORS - * Readme: Doc fixes for format string sugar (#269, @mlucool) - * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0) - * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable) - * Readme: better docs for browser support (#224, @matthewmueller) - * Tooling: Added yarn integration for development (#317, @thebigredgeek) - * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek) - * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman) - * Misc: Updated contributors (@thebigredgeek) - -2.2.0 / 2015-05-09 -================== - - * package: update "ms" to v0.7.1 (#202, @dougwilson) - * README: add logging to file example (#193, @DanielOchoa) - * README: fixed a typo (#191, @amir-s) - * browser: expose `storage` (#190, @stephenmathieson) - * Makefile: add a `distclean` target (#189, @stephenmathieson) - -2.1.3 / 2015-03-13 -================== - - * Updated stdout/stderr example (#186) - * Updated example/stdout.js to match debug current behaviour - * Renamed example/stderr.js to stdout.js - * Update Readme.md (#184) - * replace high intensity foreground color for bold (#182, #183) - -2.1.2 / 2015-03-01 -================== - - * dist: recompile - * update "ms" to v0.7.0 - * package: update "browserify" to v9.0.3 - * component: fix "ms.js" repo location - * changed bower package name - * updated documentation about using debug in a browser - * fix: security error on safari (#167, #168, @yields) - -2.1.1 / 2014-12-29 -================== - - * browser: use `typeof` to check for `console` existence - * browser: check for `console.log` truthiness (fix IE 8/9) - * browser: add support for Chrome apps - * Readme: added Windows usage remarks - * Add `bower.json` to properly support bower install - -2.1.0 / 2014-10-15 -================== - - * node: implement `DEBUG_FD` env variable support - * package: update "browserify" to v6.1.0 - * package: add "license" field to package.json (#135, @panuhorsmalahti) - -2.0.0 / 2014-09-01 -================== - - * package: update "browserify" to v5.11.0 - * node: use stderr rather than stdout for logging (#29, @stephenmathieson) - -1.0.4 / 2014-07-15 -================== - - * dist: recompile - * example: remove `console.info()` log usage - * example: add "Content-Type" UTF-8 header to browser example - * browser: place %c marker after the space character - * browser: reset the "content" color via `color: inherit` - * browser: add colors support for Firefox >= v31 - * debug: prefer an instance `log()` function over the global one (#119) - * Readme: update documentation about styled console logs for FF v31 (#116, @wryk) - -1.0.3 / 2014-07-09 -================== - - * Add support for multiple wildcards in namespaces (#122, @seegno) - * browser: fix lint - -1.0.2 / 2014-06-10 -================== - - * browser: update color palette (#113, @gscottolson) - * common: make console logging function configurable (#108, @timoxley) - * node: fix %o colors on old node <= 0.8.x - * Makefile: find node path using shell/which (#109, @timoxley) - -1.0.1 / 2014-06-06 -================== - - * browser: use `removeItem()` to clear localStorage - * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777) - * package: add "contributors" section - * node: fix comment typo - * README: list authors - -1.0.0 / 2014-06-04 -================== - - * make ms diff be global, not be scope - * debug: ignore empty strings in enable() - * node: make DEBUG_COLORS able to disable coloring - * *: export the `colors` array - * npmignore: don't publish the `dist` dir - * Makefile: refactor to use browserify - * package: add "browserify" as a dev dependency - * Readme: add Web Inspector Colors section - * node: reset terminal color for the debug content - * node: map "%o" to `util.inspect()` - * browser: map "%j" to `JSON.stringify()` - * debug: add custom "formatters" - * debug: use "ms" module for humanizing the diff - * Readme: add "bash" syntax highlighting - * browser: add Firebug color support - * browser: add colors for WebKit browsers - * node: apply log to `console` - * rewrite: abstract common logic for Node & browsers - * add .jshintrc file - -0.8.1 / 2014-04-14 -================== - - * package: re-add the "component" section - -0.8.0 / 2014-03-30 -================== - - * add `enable()` method for nodejs. Closes #27 - * change from stderr to stdout - * remove unnecessary index.js file - -0.7.4 / 2013-11-13 -================== - - * remove "browserify" key from package.json (fixes something in browserify) - -0.7.3 / 2013-10-30 -================== - - * fix: catch localStorage security error when cookies are blocked (Chrome) - * add debug(err) support. Closes #46 - * add .browser prop to package.json. Closes #42 - -0.7.2 / 2013-02-06 -================== - - * fix package.json - * fix: Mobile Safari (private mode) is broken with debug - * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript - -0.7.1 / 2013-02-05 -================== - - * add repository URL to package.json - * add DEBUG_COLORED to force colored output - * add browserify support - * fix component. Closes #24 - -0.7.0 / 2012-05-04 -================== - - * Added .component to package.json - * Added debug.component.js build - -0.6.0 / 2012-03-16 -================== - - * Added support for "-" prefix in DEBUG [Vinay Pulim] - * Added `.enabled` flag to the node version [TooTallNate] - -0.5.0 / 2012-02-02 -================== - - * Added: humanize diffs. Closes #8 - * Added `debug.disable()` to the CS variant - * Removed padding. Closes #10 - * Fixed: persist client-side variant again. Closes #9 - -0.4.0 / 2012-02-01 -================== - - * Added browser variant support for older browsers [TooTallNate] - * Added `debug.enable('project:*')` to browser variant [TooTallNate] - * Added padding to diff (moved it to the right) - -0.3.0 / 2012-01-26 -================== - - * Added millisecond diff when isatty, otherwise UTC string - -0.2.0 / 2012-01-22 -================== - - * Added wildcard support - -0.1.0 / 2011-12-02 -================== - - * Added: remove colors unless stderr isatty [TooTallNate] - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/debug/LICENSE b/node_modules/debug/LICENSE deleted file mode 100644 index 658c933..0000000 --- a/node_modules/debug/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software -and associated documentation files (the 'Software'), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/node_modules/debug/README.md b/node_modules/debug/README.md deleted file mode 100644 index 88dae35..0000000 --- a/node_modules/debug/README.md +++ /dev/null @@ -1,455 +0,0 @@ -# debug -[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug) [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) -[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) - - - -A tiny JavaScript debugging utility modelled after Node.js core's debugging -technique. Works in Node.js and web browsers. - -## Installation - -```bash -$ npm install debug -``` - -## Usage - -`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole. - -Example [_app.js_](./examples/node/app.js): - -```js -var debug = require('debug')('http') - , http = require('http') - , name = 'My App'; - -// fake app - -debug('booting %o', name); - -http.createServer(function(req, res){ - debug(req.method + ' ' + req.url); - res.end('hello\n'); -}).listen(3000, function(){ - debug('listening'); -}); - -// fake worker of some kind - -require('./worker'); -``` - -Example [_worker.js_](./examples/node/worker.js): - -```js -var a = require('debug')('worker:a') - , b = require('debug')('worker:b'); - -function work() { - a('doing lots of uninteresting work'); - setTimeout(work, Math.random() * 1000); -} - -work(); - -function workb() { - b('doing some work'); - setTimeout(workb, Math.random() * 2000); -} - -workb(); -``` - -The `DEBUG` environment variable is then used to enable these based on space or -comma-delimited names. - -Here are some examples: - -screen shot 2017-08-08 at 12 53 04 pm -screen shot 2017-08-08 at 12 53 38 pm -screen shot 2017-08-08 at 12 53 25 pm - -#### Windows command prompt notes - -##### CMD - -On Windows the environment variable is set using the `set` command. - -```cmd -set DEBUG=*,-not_this -``` - -Example: - -```cmd -set DEBUG=* & node app.js -``` - -##### PowerShell (VS Code default) - -PowerShell uses different syntax to set environment variables. - -```cmd -$env:DEBUG = "*,-not_this" -``` - -Example: - -```cmd -$env:DEBUG='app';node app.js -``` - -Then, run the program to be debugged as usual. - -npm script example: -```js - "windowsDebug": "@powershell -Command $env:DEBUG='*';node app.js", -``` - -## Namespace Colors - -Every debug instance has a color generated for it based on its namespace name. -This helps when visually parsing the debug output to identify which debug instance -a debug line belongs to. - -#### Node.js - -In Node.js, colors are enabled when stderr is a TTY. You also _should_ install -the [`supports-color`](https://npmjs.org/supports-color) module alongside debug, -otherwise debug will only use a small handful of basic colors. - - - -#### Web Browser - -Colors are also enabled on "Web Inspectors" that understand the `%c` formatting -option. These are WebKit web inspectors, Firefox ([since version -31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) -and the Firebug plugin for Firefox (any version). - - - - -## Millisecond diff - -When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. - - - -When stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below: - - - - -## Conventions - -If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". If you append a "*" to the end of your name, it will always be enabled regardless of the setting of the DEBUG environment variable. You can then use it for normal output as well as debug output. - -## Wildcards - -The `*` character may be used as a wildcard. Suppose for example your library has -debuggers named "connect:bodyParser", "connect:compress", "connect:session", -instead of listing all three with -`DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do -`DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. - -You can also exclude specific debuggers by prefixing them with a "-" character. -For example, `DEBUG=*,-connect:*` would include all debuggers except those -starting with "connect:". - -## Environment Variables - -When running through Node.js, you can set a few environment variables that will -change the behavior of the debug logging: - -| Name | Purpose | -|-----------|-------------------------------------------------| -| `DEBUG` | Enables/disables specific debugging namespaces. | -| `DEBUG_HIDE_DATE` | Hide date from debug output (non-TTY). | -| `DEBUG_COLORS`| Whether or not to use colors in the debug output. | -| `DEBUG_DEPTH` | Object inspection depth. | -| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | - - -__Note:__ The environment variables beginning with `DEBUG_` end up being -converted into an Options object that gets used with `%o`/`%O` formatters. -See the Node.js documentation for -[`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) -for the complete list. - -## Formatters - -Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. -Below are the officially supported formatters: - -| Formatter | Representation | -|-----------|----------------| -| `%O` | Pretty-print an Object on multiple lines. | -| `%o` | Pretty-print an Object all on a single line. | -| `%s` | String. | -| `%d` | Number (both integer and float). | -| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. | -| `%%` | Single percent sign ('%'). This does not consume an argument. | - - -### Custom formatters - -You can add custom formatters by extending the `debug.formatters` object. -For example, if you wanted to add support for rendering a Buffer as hex with -`%h`, you could do something like: - -```js -const createDebug = require('debug') -createDebug.formatters.h = (v) => { - return v.toString('hex') -} - -// …elsewhere -const debug = createDebug('foo') -debug('this is hex: %h', new Buffer('hello world')) -// foo this is hex: 68656c6c6f20776f726c6421 +0ms -``` - - -## Browser Support - -You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify), -or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest), -if you don't want to build it yourself. - -Debug's enable state is currently persisted by `localStorage`. -Consider the situation shown below where you have `worker:a` and `worker:b`, -and wish to debug both. You can enable this using `localStorage.debug`: - -```js -localStorage.debug = 'worker:*' -``` - -And then refresh the page. - -```js -a = debug('worker:a'); -b = debug('worker:b'); - -setInterval(function(){ - a('doing some work'); -}, 1000); - -setInterval(function(){ - b('doing some work'); -}, 1200); -``` - - -## Output streams - - By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method: - -Example [_stdout.js_](./examples/node/stdout.js): - -```js -var debug = require('debug'); -var error = debug('app:error'); - -// by default stderr is used -error('goes to stderr!'); - -var log = debug('app:log'); -// set this namespace to log via console.log -log.log = console.log.bind(console); // don't forget to bind to console! -log('goes to stdout'); -error('still goes to stderr!'); - -// set all output to go via console.info -// overrides all per-namespace log settings -debug.log = console.info.bind(console); -error('now goes to stdout via console.info'); -log('still goes to stdout, but via console.info now'); -``` - -## Extend -You can simply extend debugger -```js -const log = require('debug')('auth'); - -//creates new debug instance with extended namespace -const logSign = log.extend('sign'); -const logLogin = log.extend('login'); - -log('hello'); // auth hello -logSign('hello'); //auth:sign hello -logLogin('hello'); //auth:login hello -``` - -## Set dynamically - -You can also enable debug dynamically by calling the `enable()` method : - -```js -let debug = require('debug'); - -console.log(1, debug.enabled('test')); - -debug.enable('test'); -console.log(2, debug.enabled('test')); - -debug.disable(); -console.log(3, debug.enabled('test')); - -``` - -print : -``` -1 false -2 true -3 false -``` - -Usage : -`enable(namespaces)` -`namespaces` can include modes separated by a colon and wildcards. - -Note that calling `enable()` completely overrides previously set DEBUG variable : - -``` -$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))' -=> false -``` - -`disable()` - -Will disable all namespaces. The functions returns the namespaces currently -enabled (and skipped). This can be useful if you want to disable debugging -temporarily without knowing what was enabled to begin with. - -For example: - -```js -let debug = require('debug'); -debug.enable('foo:*,-foo:bar'); -let namespaces = debug.disable(); -debug.enable(namespaces); -``` - -Note: There is no guarantee that the string will be identical to the initial -enable string, but semantically they will be identical. - -## Checking whether a debug target is enabled - -After you've created a debug instance, you can determine whether or not it is -enabled by checking the `enabled` property: - -```javascript -const debug = require('debug')('http'); - -if (debug.enabled) { - // do stuff... -} -``` - -You can also manually toggle this property to force the debug instance to be -enabled or disabled. - - -## Authors - - - TJ Holowaychuk - - Nathan Rajlich - - Andrew Rhyne - -## Backers - -Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -## Sponsors - -Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -## License - -(The MIT License) - -Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/debug/dist/debug.js b/node_modules/debug/dist/debug.js deleted file mode 100644 index 89ad0c2..0000000 --- a/node_modules/debug/dist/debug.js +++ /dev/null @@ -1,912 +0,0 @@ -"use strict"; - -function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } - -function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } - -function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } - -function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } - -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -(function (f) { - if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === "object" && typeof module !== "undefined") { - module.exports = f(); - } else if (typeof define === "function" && define.amd) { - define([], f); - } else { - var g; - - if (typeof window !== "undefined") { - g = window; - } else if (typeof global !== "undefined") { - g = global; - } else if (typeof self !== "undefined") { - g = self; - } else { - g = this; - } - - g.debug = f(); - } -})(function () { - var define, module, exports; - return function () { - function r(e, n, t) { - function o(i, f) { - if (!n[i]) { - if (!e[i]) { - var c = "function" == typeof require && require; - if (!f && c) return c(i, !0); - if (u) return u(i, !0); - var a = new Error("Cannot find module '" + i + "'"); - throw a.code = "MODULE_NOT_FOUND", a; - } - - var p = n[i] = { - exports: {} - }; - e[i][0].call(p.exports, function (r) { - var n = e[i][1][r]; - return o(n || r); - }, p, p.exports, r, e, n, t); - } - - return n[i].exports; - } - - for (var u = "function" == typeof require && require, i = 0; i < t.length; i++) { - o(t[i]); - } - - return o; - } - - return r; - }()({ - 1: [function (require, module, exports) { - /** - * Helpers. - */ - var s = 1000; - var m = s * 60; - var h = m * 60; - var d = h * 24; - var w = d * 7; - var y = d * 365.25; - /** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} [options] - * @throws {Error} throw an error if val is not a non-empty string or a number - * @return {String|Number} - * @api public - */ - - module.exports = function (val, options) { - options = options || {}; - - var type = _typeof(val); - - if (type === 'string' && val.length > 0) { - return parse(val); - } else if (type === 'number' && isNaN(val) === false) { - return options.long ? fmtLong(val) : fmtShort(val); - } - - throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val)); - }; - /** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ - - - function parse(str) { - str = String(str); - - if (str.length > 100) { - return; - } - - var match = /^((?:\d+)?\-?\d?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str); - - if (!match) { - return; - } - - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - - switch (type) { - case 'years': - case 'year': - case 'yrs': - case 'yr': - case 'y': - return n * y; - - case 'weeks': - case 'week': - case 'w': - return n * w; - - case 'days': - case 'day': - case 'd': - return n * d; - - case 'hours': - case 'hour': - case 'hrs': - case 'hr': - case 'h': - return n * h; - - case 'minutes': - case 'minute': - case 'mins': - case 'min': - case 'm': - return n * m; - - case 'seconds': - case 'second': - case 'secs': - case 'sec': - case 's': - return n * s; - - case 'milliseconds': - case 'millisecond': - case 'msecs': - case 'msec': - case 'ms': - return n; - - default: - return undefined; - } - } - /** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - - - function fmtShort(ms) { - var msAbs = Math.abs(ms); - - if (msAbs >= d) { - return Math.round(ms / d) + 'd'; - } - - if (msAbs >= h) { - return Math.round(ms / h) + 'h'; - } - - if (msAbs >= m) { - return Math.round(ms / m) + 'm'; - } - - if (msAbs >= s) { - return Math.round(ms / s) + 's'; - } - - return ms + 'ms'; - } - /** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - - - function fmtLong(ms) { - var msAbs = Math.abs(ms); - - if (msAbs >= d) { - return plural(ms, msAbs, d, 'day'); - } - - if (msAbs >= h) { - return plural(ms, msAbs, h, 'hour'); - } - - if (msAbs >= m) { - return plural(ms, msAbs, m, 'minute'); - } - - if (msAbs >= s) { - return plural(ms, msAbs, s, 'second'); - } - - return ms + ' ms'; - } - /** - * Pluralization helper. - */ - - - function plural(ms, msAbs, n, name) { - var isPlural = msAbs >= n * 1.5; - return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); - } - }, {}], - 2: [function (require, module, exports) { - // shim for using process in browser - var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it - // don't break things. But we need to wrap it in a try catch in case it is - // wrapped in strict mode code which doesn't define any globals. It's inside a - // function because try/catches deoptimize in certain engines. - - var cachedSetTimeout; - var cachedClearTimeout; - - function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); - } - - function defaultClearTimeout() { - throw new Error('clearTimeout has not been defined'); - } - - (function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } - })(); - - function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } // if setTimeout wasn't available but was latter defined - - - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch (e) { - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch (e) { - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); - } - } - } - - function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } // if clearTimeout wasn't available but was latter defined - - - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e) { - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e) { - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); - } - } - } - - var queue = []; - var draining = false; - var currentQueue; - var queueIndex = -1; - - function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - - draining = false; - - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - - if (queue.length) { - drainQueue(); - } - } - - function drainQueue() { - if (draining) { - return; - } - - var timeout = runTimeout(cleanUpNextTick); - draining = true; - var len = queue.length; - - while (len) { - currentQueue = queue; - queue = []; - - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - - queueIndex = -1; - len = queue.length; - } - - currentQueue = null; - draining = false; - runClearTimeout(timeout); - } - - process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - - queue.push(new Item(fun, args)); - - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } - }; // v8 likes predictible objects - - - function Item(fun, array) { - this.fun = fun; - this.array = array; - } - - Item.prototype.run = function () { - this.fun.apply(null, this.array); - }; - - process.title = 'browser'; - process.browser = true; - process.env = {}; - process.argv = []; - process.version = ''; // empty string to avoid regexp issues - - process.versions = {}; - - function noop() {} - - process.on = noop; - process.addListener = noop; - process.once = noop; - process.off = noop; - process.removeListener = noop; - process.removeAllListeners = noop; - process.emit = noop; - process.prependListener = noop; - process.prependOnceListener = noop; - - process.listeners = function (name) { - return []; - }; - - process.binding = function (name) { - throw new Error('process.binding is not supported'); - }; - - process.cwd = function () { - return '/'; - }; - - process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); - }; - - process.umask = function () { - return 0; - }; - }, {}], - 3: [function (require, module, exports) { - /** - * This is the common logic for both the Node.js and web browser - * implementations of `debug()`. - */ - function setup(env) { - createDebug.debug = createDebug; - createDebug.default = createDebug; - createDebug.coerce = coerce; - createDebug.disable = disable; - createDebug.enable = enable; - createDebug.enabled = enabled; - createDebug.humanize = require('ms'); - Object.keys(env).forEach(function (key) { - createDebug[key] = env[key]; - }); - /** - * Active `debug` instances. - */ - - createDebug.instances = []; - /** - * The currently active debug mode names, and names to skip. - */ - - createDebug.names = []; - createDebug.skips = []; - /** - * Map of special "%n" handling functions, for the debug "format" argument. - * - * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". - */ - - createDebug.formatters = {}; - /** - * Selects a color for a debug namespace - * @param {String} namespace The namespace string for the for the debug instance to be colored - * @return {Number|String} An ANSI color code for the given namespace - * @api private - */ - - function selectColor(namespace) { - var hash = 0; - - for (var i = 0; i < namespace.length; i++) { - hash = (hash << 5) - hash + namespace.charCodeAt(i); - hash |= 0; // Convert to 32bit integer - } - - return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; - } - - createDebug.selectColor = selectColor; - /** - * Create a debugger with the given `namespace`. - * - * @param {String} namespace - * @return {Function} - * @api public - */ - - function createDebug(namespace) { - var prevTime; - - function debug() { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - // Disabled? - if (!debug.enabled) { - return; - } - - var self = debug; // Set `diff` timestamp - - var curr = Number(new Date()); - var ms = curr - (prevTime || curr); - self.diff = ms; - self.prev = prevTime; - self.curr = curr; - prevTime = curr; - args[0] = createDebug.coerce(args[0]); - - if (typeof args[0] !== 'string') { - // Anything else let's inspect with %O - args.unshift('%O'); - } // Apply any `formatters` transformations - - - var index = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) { - // If we encounter an escaped % then don't increase the array index - if (match === '%%') { - return match; - } - - index++; - var formatter = createDebug.formatters[format]; - - if (typeof formatter === 'function') { - var val = args[index]; - match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format` - - args.splice(index, 1); - index--; - } - - return match; - }); // Apply env-specific formatting (colors, etc.) - - createDebug.formatArgs.call(self, args); - var logFn = self.log || createDebug.log; - logFn.apply(self, args); - } - - debug.namespace = namespace; - debug.enabled = createDebug.enabled(namespace); - debug.useColors = createDebug.useColors(); - debug.color = selectColor(namespace); - debug.destroy = destroy; - debug.extend = extend; // Debug.formatArgs = formatArgs; - // debug.rawLog = rawLog; - // env-specific initialization logic for debug instances - - if (typeof createDebug.init === 'function') { - createDebug.init(debug); - } - - createDebug.instances.push(debug); - return debug; - } - - function destroy() { - var index = createDebug.instances.indexOf(this); - - if (index !== -1) { - createDebug.instances.splice(index, 1); - return true; - } - - return false; - } - - function extend(namespace, delimiter) { - var newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); - newDebug.log = this.log; - return newDebug; - } - /** - * Enables a debug mode by namespaces. This can include modes - * separated by a colon and wildcards. - * - * @param {String} namespaces - * @api public - */ - - - function enable(namespaces) { - createDebug.save(namespaces); - createDebug.names = []; - createDebug.skips = []; - var i; - var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); - var len = split.length; - - for (i = 0; i < len; i++) { - if (!split[i]) { - // ignore empty strings - continue; - } - - namespaces = split[i].replace(/\*/g, '.*?'); - - if (namespaces[0] === '-') { - createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); - } else { - createDebug.names.push(new RegExp('^' + namespaces + '$')); - } - } - - for (i = 0; i < createDebug.instances.length; i++) { - var instance = createDebug.instances[i]; - instance.enabled = createDebug.enabled(instance.namespace); - } - } - /** - * Disable debug output. - * - * @return {String} namespaces - * @api public - */ - - - function disable() { - var namespaces = [].concat(_toConsumableArray(createDebug.names.map(toNamespace)), _toConsumableArray(createDebug.skips.map(toNamespace).map(function (namespace) { - return '-' + namespace; - }))).join(','); - createDebug.enable(''); - return namespaces; - } - /** - * Returns true if the given mode name is enabled, false otherwise. - * - * @param {String} name - * @return {Boolean} - * @api public - */ - - - function enabled(name) { - if (name[name.length - 1] === '*') { - return true; - } - - var i; - var len; - - for (i = 0, len = createDebug.skips.length; i < len; i++) { - if (createDebug.skips[i].test(name)) { - return false; - } - } - - for (i = 0, len = createDebug.names.length; i < len; i++) { - if (createDebug.names[i].test(name)) { - return true; - } - } - - return false; - } - /** - * Convert regexp to namespace - * - * @param {RegExp} regxep - * @return {String} namespace - * @api private - */ - - - function toNamespace(regexp) { - return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, '*'); - } - /** - * Coerce `val`. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - - - function coerce(val) { - if (val instanceof Error) { - return val.stack || val.message; - } - - return val; - } - - createDebug.enable(createDebug.load()); - return createDebug; - } - - module.exports = setup; - }, { - "ms": 1 - }], - 4: [function (require, module, exports) { - (function (process) { - /* eslint-env browser */ - - /** - * This is the web browser implementation of `debug()`. - */ - exports.log = log; - exports.formatArgs = formatArgs; - exports.save = save; - exports.load = load; - exports.useColors = useColors; - exports.storage = localstorage(); - /** - * Colors. - */ - - exports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33']; - /** - * Currently only WebKit-based Web Inspectors, Firefox >= v31, - * and the Firebug extension (any Firefox version) are known - * to support "%c" CSS customizations. - * - * TODO: add a `localStorage` variable to explicitly enable/disable colors - */ - // eslint-disable-next-line complexity - - function useColors() { - // NB: In an Electron preload script, document will be defined but not fully - // initialized. Since we know we're in Chrome, we'll just detect this case - // explicitly - if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { - return true; - } // Internet Explorer and Edge do not support colors. - - - if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { - return false; - } // Is webkit? http://stackoverflow.com/a/16459606/376773 - // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 - - - return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773 - typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31? - // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages - typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker - typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); - } - /** - * Colorize log arguments if enabled. - * - * @api public - */ - - - function formatArgs(args) { - args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff); - - if (!this.useColors) { - return; - } - - var c = 'color: ' + this.color; - args.splice(1, 0, c, 'color: inherit'); // The final "%c" is somewhat tricky, because there could be other - // arguments passed either before or after the %c, so we need to - // figure out the correct index to insert the CSS into - - var index = 0; - var lastC = 0; - args[0].replace(/%[a-zA-Z%]/g, function (match) { - if (match === '%%') { - return; - } - - index++; - - if (match === '%c') { - // We only are interested in the *last* %c - // (the user may have provided their own) - lastC = index; - } - }); - args.splice(lastC, 0, c); - } - /** - * Invokes `console.log()` when available. - * No-op when `console.log` is not a "function". - * - * @api public - */ - - - function log() { - var _console; - - // This hackery is required for IE8/9, where - // the `console.log` function doesn't have 'apply' - return (typeof console === "undefined" ? "undefined" : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments); - } - /** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ - - - function save(namespaces) { - try { - if (namespaces) { - exports.storage.setItem('debug', namespaces); - } else { - exports.storage.removeItem('debug'); - } - } catch (error) {// Swallow - // XXX (@Qix-) should we be logging these? - } - } - /** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ - - - function load() { - var r; - - try { - r = exports.storage.getItem('debug'); - } catch (error) {} // Swallow - // XXX (@Qix-) should we be logging these? - // If debug isn't set in LS, and we're in Electron, try to load $DEBUG - - - if (!r && typeof process !== 'undefined' && 'env' in process) { - r = process.env.DEBUG; - } - - return r; - } - /** - * Localstorage attempts to return the localstorage. - * - * This is necessary because safari throws - * when a user disables cookies/localstorage - * and you attempt to access it. - * - * @return {LocalStorage} - * @api private - */ - - - function localstorage() { - try { - // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context - // The Browser also has localStorage in the global context. - return localStorage; - } catch (error) {// Swallow - // XXX (@Qix-) should we be logging these? - } - } - - module.exports = require('./common')(exports); - var formatters = module.exports.formatters; - /** - * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. - */ - - formatters.j = function (v) { - try { - return JSON.stringify(v); - } catch (error) { - return '[UnexpectedJSONParseError]: ' + error.message; - } - }; - }).call(this, require('_process')); - }, { - "./common": 3, - "_process": 2 - }] - }, {}, [4])(4); -}); diff --git a/node_modules/debug/package.json b/node_modules/debug/package.json deleted file mode 100644 index bc59e2f..0000000 --- a/node_modules/debug/package.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "_from": "debug@^4.1.0", - "_id": "debug@4.1.1", - "_inBundle": false, - "_integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "_location": "/debug", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "debug@^4.1.0", - "name": "debug", - "escapedName": "debug", - "rawSpec": "^4.1.0", - "saveSpec": null, - "fetchSpec": "^4.1.0" - }, - "_requiredBy": [ - "/minify" - ], - "_resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "_shasum": "3b72260255109c6b589cee050f1d516139664791", - "_spec": "debug@^4.1.0", - "_where": "F:\\projects\\p\\minifyfromhtml\\node_modules\\minify", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "browser": "./src/browser.js", - "bugs": { - "url": "https://github.com/visionmedia/debug/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Nathan Rajlich", - "email": "nathan@tootallnate.net", - "url": "http://n8.io" - }, - { - "name": "Andrew Rhyne", - "email": "rhyneandrew@gmail.com" - } - ], - "dependencies": { - "ms": "^2.1.1" - }, - "deprecated": false, - "description": "small debugging utility", - "devDependencies": { - "@babel/cli": "^7.0.0", - "@babel/core": "^7.0.0", - "@babel/preset-env": "^7.0.0", - "browserify": "14.4.0", - "chai": "^3.5.0", - "concurrently": "^3.1.0", - "coveralls": "^3.0.2", - "istanbul": "^0.4.5", - "karma": "^3.0.0", - "karma-chai": "^0.1.0", - "karma-mocha": "^1.3.0", - "karma-phantomjs-launcher": "^1.0.2", - "mocha": "^5.2.0", - "mocha-lcov-reporter": "^1.2.0", - "rimraf": "^2.5.4", - "xo": "^0.23.0" - }, - "files": [ - "src", - "dist/debug.js", - "LICENSE", - "README.md" - ], - "homepage": "https://github.com/visionmedia/debug#readme", - "keywords": [ - "debug", - "log", - "debugger" - ], - "license": "MIT", - "main": "./src/index.js", - "name": "debug", - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/debug.git" - }, - "scripts": { - "build": "npm run build:debug && npm run build:test", - "build:debug": "babel -o dist/debug.js dist/debug.es6.js > dist/debug.js", - "build:test": "babel -d dist test.js", - "clean": "rimraf dist coverage", - "lint": "xo", - "prebuild:debug": "mkdir -p dist && browserify --standalone debug -o dist/debug.es6.js .", - "pretest:browser": "npm run build", - "test": "npm run test:node && npm run test:browser", - "test:browser": "karma start --single-run", - "test:coverage": "cat ./coverage/lcov.info | coveralls", - "test:node": "istanbul cover _mocha -- test.js" - }, - "unpkg": "./dist/debug.js", - "version": "4.1.1" -} diff --git a/node_modules/debug/src/browser.js b/node_modules/debug/src/browser.js deleted file mode 100644 index 5f34c0d..0000000 --- a/node_modules/debug/src/browser.js +++ /dev/null @@ -1,264 +0,0 @@ -/* eslint-env browser */ - -/** - * This is the web browser implementation of `debug()`. - */ - -exports.log = log; -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; -exports.storage = localstorage(); - -/** - * Colors. - */ - -exports.colors = [ - '#0000CC', - '#0000FF', - '#0033CC', - '#0033FF', - '#0066CC', - '#0066FF', - '#0099CC', - '#0099FF', - '#00CC00', - '#00CC33', - '#00CC66', - '#00CC99', - '#00CCCC', - '#00CCFF', - '#3300CC', - '#3300FF', - '#3333CC', - '#3333FF', - '#3366CC', - '#3366FF', - '#3399CC', - '#3399FF', - '#33CC00', - '#33CC33', - '#33CC66', - '#33CC99', - '#33CCCC', - '#33CCFF', - '#6600CC', - '#6600FF', - '#6633CC', - '#6633FF', - '#66CC00', - '#66CC33', - '#9900CC', - '#9900FF', - '#9933CC', - '#9933FF', - '#99CC00', - '#99CC33', - '#CC0000', - '#CC0033', - '#CC0066', - '#CC0099', - '#CC00CC', - '#CC00FF', - '#CC3300', - '#CC3333', - '#CC3366', - '#CC3399', - '#CC33CC', - '#CC33FF', - '#CC6600', - '#CC6633', - '#CC9900', - '#CC9933', - '#CCCC00', - '#CCCC33', - '#FF0000', - '#FF0033', - '#FF0066', - '#FF0099', - '#FF00CC', - '#FF00FF', - '#FF3300', - '#FF3333', - '#FF3366', - '#FF3399', - '#FF33CC', - '#FF33FF', - '#FF6600', - '#FF6633', - '#FF9900', - '#FF9933', - '#FFCC00', - '#FFCC33' -]; - -/** - * Currently only WebKit-based Web Inspectors, Firefox >= v31, - * and the Firebug extension (any Firefox version) are known - * to support "%c" CSS customizations. - * - * TODO: add a `localStorage` variable to explicitly enable/disable colors - */ - -// eslint-disable-next-line complexity -function useColors() { - // NB: In an Electron preload script, document will be defined but not fully - // initialized. Since we know we're in Chrome, we'll just detect this case - // explicitly - if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { - return true; - } - - // Internet Explorer and Edge do not support colors. - if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { - return false; - } - - // Is webkit? http://stackoverflow.com/a/16459606/376773 - // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 - return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || - // Is firebug? http://stackoverflow.com/a/398120/376773 - (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || - // Is firefox >= v31? - // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || - // Double check webkit in userAgent just in case we are in a worker - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); -} - -/** - * Colorize log arguments if enabled. - * - * @api public - */ - -function formatArgs(args) { - args[0] = (this.useColors ? '%c' : '') + - this.namespace + - (this.useColors ? ' %c' : ' ') + - args[0] + - (this.useColors ? '%c ' : ' ') + - '+' + module.exports.humanize(this.diff); - - if (!this.useColors) { - return; - } - - const c = 'color: ' + this.color; - args.splice(1, 0, c, 'color: inherit'); - - // The final "%c" is somewhat tricky, because there could be other - // arguments passed either before or after the %c, so we need to - // figure out the correct index to insert the CSS into - let index = 0; - let lastC = 0; - args[0].replace(/%[a-zA-Z%]/g, match => { - if (match === '%%') { - return; - } - index++; - if (match === '%c') { - // We only are interested in the *last* %c - // (the user may have provided their own) - lastC = index; - } - }); - - args.splice(lastC, 0, c); -} - -/** - * Invokes `console.log()` when available. - * No-op when `console.log` is not a "function". - * - * @api public - */ -function log(...args) { - // This hackery is required for IE8/9, where - // the `console.log` function doesn't have 'apply' - return typeof console === 'object' && - console.log && - console.log(...args); -} - -/** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ -function save(namespaces) { - try { - if (namespaces) { - exports.storage.setItem('debug', namespaces); - } else { - exports.storage.removeItem('debug'); - } - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } -} - -/** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ -function load() { - let r; - try { - r = exports.storage.getItem('debug'); - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } - - // If debug isn't set in LS, and we're in Electron, try to load $DEBUG - if (!r && typeof process !== 'undefined' && 'env' in process) { - r = process.env.DEBUG; - } - - return r; -} - -/** - * Localstorage attempts to return the localstorage. - * - * This is necessary because safari throws - * when a user disables cookies/localstorage - * and you attempt to access it. - * - * @return {LocalStorage} - * @api private - */ - -function localstorage() { - try { - // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context - // The Browser also has localStorage in the global context. - return localStorage; - } catch (error) { - // Swallow - // XXX (@Qix-) should we be logging these? - } -} - -module.exports = require('./common')(exports); - -const {formatters} = module.exports; - -/** - * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. - */ - -formatters.j = function (v) { - try { - return JSON.stringify(v); - } catch (error) { - return '[UnexpectedJSONParseError]: ' + error.message; - } -}; diff --git a/node_modules/debug/src/common.js b/node_modules/debug/src/common.js deleted file mode 100644 index 2f82b8d..0000000 --- a/node_modules/debug/src/common.js +++ /dev/null @@ -1,266 +0,0 @@ - -/** - * This is the common logic for both the Node.js and web browser - * implementations of `debug()`. - */ - -function setup(env) { - createDebug.debug = createDebug; - createDebug.default = createDebug; - createDebug.coerce = coerce; - createDebug.disable = disable; - createDebug.enable = enable; - createDebug.enabled = enabled; - createDebug.humanize = require('ms'); - - Object.keys(env).forEach(key => { - createDebug[key] = env[key]; - }); - - /** - * Active `debug` instances. - */ - createDebug.instances = []; - - /** - * The currently active debug mode names, and names to skip. - */ - - createDebug.names = []; - createDebug.skips = []; - - /** - * Map of special "%n" handling functions, for the debug "format" argument. - * - * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". - */ - createDebug.formatters = {}; - - /** - * Selects a color for a debug namespace - * @param {String} namespace The namespace string for the for the debug instance to be colored - * @return {Number|String} An ANSI color code for the given namespace - * @api private - */ - function selectColor(namespace) { - let hash = 0; - - for (let i = 0; i < namespace.length; i++) { - hash = ((hash << 5) - hash) + namespace.charCodeAt(i); - hash |= 0; // Convert to 32bit integer - } - - return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; - } - createDebug.selectColor = selectColor; - - /** - * Create a debugger with the given `namespace`. - * - * @param {String} namespace - * @return {Function} - * @api public - */ - function createDebug(namespace) { - let prevTime; - - function debug(...args) { - // Disabled? - if (!debug.enabled) { - return; - } - - const self = debug; - - // Set `diff` timestamp - const curr = Number(new Date()); - const ms = curr - (prevTime || curr); - self.diff = ms; - self.prev = prevTime; - self.curr = curr; - prevTime = curr; - - args[0] = createDebug.coerce(args[0]); - - if (typeof args[0] !== 'string') { - // Anything else let's inspect with %O - args.unshift('%O'); - } - - // Apply any `formatters` transformations - let index = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { - // If we encounter an escaped % then don't increase the array index - if (match === '%%') { - return match; - } - index++; - const formatter = createDebug.formatters[format]; - if (typeof formatter === 'function') { - const val = args[index]; - match = formatter.call(self, val); - - // Now we need to remove `args[index]` since it's inlined in the `format` - args.splice(index, 1); - index--; - } - return match; - }); - - // Apply env-specific formatting (colors, etc.) - createDebug.formatArgs.call(self, args); - - const logFn = self.log || createDebug.log; - logFn.apply(self, args); - } - - debug.namespace = namespace; - debug.enabled = createDebug.enabled(namespace); - debug.useColors = createDebug.useColors(); - debug.color = selectColor(namespace); - debug.destroy = destroy; - debug.extend = extend; - // Debug.formatArgs = formatArgs; - // debug.rawLog = rawLog; - - // env-specific initialization logic for debug instances - if (typeof createDebug.init === 'function') { - createDebug.init(debug); - } - - createDebug.instances.push(debug); - - return debug; - } - - function destroy() { - const index = createDebug.instances.indexOf(this); - if (index !== -1) { - createDebug.instances.splice(index, 1); - return true; - } - return false; - } - - function extend(namespace, delimiter) { - const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); - newDebug.log = this.log; - return newDebug; - } - - /** - * Enables a debug mode by namespaces. This can include modes - * separated by a colon and wildcards. - * - * @param {String} namespaces - * @api public - */ - function enable(namespaces) { - createDebug.save(namespaces); - - createDebug.names = []; - createDebug.skips = []; - - let i; - const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); - const len = split.length; - - for (i = 0; i < len; i++) { - if (!split[i]) { - // ignore empty strings - continue; - } - - namespaces = split[i].replace(/\*/g, '.*?'); - - if (namespaces[0] === '-') { - createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); - } else { - createDebug.names.push(new RegExp('^' + namespaces + '$')); - } - } - - for (i = 0; i < createDebug.instances.length; i++) { - const instance = createDebug.instances[i]; - instance.enabled = createDebug.enabled(instance.namespace); - } - } - - /** - * Disable debug output. - * - * @return {String} namespaces - * @api public - */ - function disable() { - const namespaces = [ - ...createDebug.names.map(toNamespace), - ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) - ].join(','); - createDebug.enable(''); - return namespaces; - } - - /** - * Returns true if the given mode name is enabled, false otherwise. - * - * @param {String} name - * @return {Boolean} - * @api public - */ - function enabled(name) { - if (name[name.length - 1] === '*') { - return true; - } - - let i; - let len; - - for (i = 0, len = createDebug.skips.length; i < len; i++) { - if (createDebug.skips[i].test(name)) { - return false; - } - } - - for (i = 0, len = createDebug.names.length; i < len; i++) { - if (createDebug.names[i].test(name)) { - return true; - } - } - - return false; - } - - /** - * Convert regexp to namespace - * - * @param {RegExp} regxep - * @return {String} namespace - * @api private - */ - function toNamespace(regexp) { - return regexp.toString() - .substring(2, regexp.toString().length - 2) - .replace(/\.\*\?$/, '*'); - } - - /** - * Coerce `val`. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - function coerce(val) { - if (val instanceof Error) { - return val.stack || val.message; - } - return val; - } - - createDebug.enable(createDebug.load()); - - return createDebug; -} - -module.exports = setup; diff --git a/node_modules/debug/src/index.js b/node_modules/debug/src/index.js deleted file mode 100644 index bf4c57f..0000000 --- a/node_modules/debug/src/index.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Detect Electron renderer / nwjs process, which is node, but we should - * treat as a browser. - */ - -if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { - module.exports = require('./browser.js'); -} else { - module.exports = require('./node.js'); -} diff --git a/node_modules/debug/src/node.js b/node_modules/debug/src/node.js deleted file mode 100644 index 5e1f154..0000000 --- a/node_modules/debug/src/node.js +++ /dev/null @@ -1,257 +0,0 @@ -/** - * Module dependencies. - */ - -const tty = require('tty'); -const util = require('util'); - -/** - * This is the Node.js implementation of `debug()`. - */ - -exports.init = init; -exports.log = log; -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; - -/** - * Colors. - */ - -exports.colors = [6, 2, 3, 4, 5, 1]; - -try { - // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) - // eslint-disable-next-line import/no-extraneous-dependencies - const supportsColor = require('supports-color'); - - if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { - exports.colors = [ - 20, - 21, - 26, - 27, - 32, - 33, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 56, - 57, - 62, - 63, - 68, - 69, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 92, - 93, - 98, - 99, - 112, - 113, - 128, - 129, - 134, - 135, - 148, - 149, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 178, - 179, - 184, - 185, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 214, - 215, - 220, - 221 - ]; - } -} catch (error) { - // Swallow - we only care if `supports-color` is available; it doesn't have to be. -} - -/** - * Build up the default `inspectOpts` object from the environment variables. - * - * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js - */ - -exports.inspectOpts = Object.keys(process.env).filter(key => { - return /^debug_/i.test(key); -}).reduce((obj, key) => { - // Camel-case - const prop = key - .substring(6) - .toLowerCase() - .replace(/_([a-z])/g, (_, k) => { - return k.toUpperCase(); - }); - - // Coerce string value into JS value - let val = process.env[key]; - if (/^(yes|on|true|enabled)$/i.test(val)) { - val = true; - } else if (/^(no|off|false|disabled)$/i.test(val)) { - val = false; - } else if (val === 'null') { - val = null; - } else { - val = Number(val); - } - - obj[prop] = val; - return obj; -}, {}); - -/** - * Is stdout a TTY? Colored output is enabled when `true`. - */ - -function useColors() { - return 'colors' in exports.inspectOpts ? - Boolean(exports.inspectOpts.colors) : - tty.isatty(process.stderr.fd); -} - -/** - * Adds ANSI color escape codes if enabled. - * - * @api public - */ - -function formatArgs(args) { - const {namespace: name, useColors} = this; - - if (useColors) { - const c = this.color; - const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); - const prefix = ` ${colorCode};1m${name} \u001B[0m`; - - args[0] = prefix + args[0].split('\n').join('\n' + prefix); - args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); - } else { - args[0] = getDate() + name + ' ' + args[0]; - } -} - -function getDate() { - if (exports.inspectOpts.hideDate) { - return ''; - } - return new Date().toISOString() + ' '; -} - -/** - * Invokes `util.format()` with the specified arguments and writes to stderr. - */ - -function log(...args) { - return process.stderr.write(util.format(...args) + '\n'); -} - -/** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ -function save(namespaces) { - if (namespaces) { - process.env.DEBUG = namespaces; - } else { - // If you set a process.env field to null or undefined, it gets cast to the - // string 'null' or 'undefined'. Just delete instead. - delete process.env.DEBUG; - } -} - -/** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ - -function load() { - return process.env.DEBUG; -} - -/** - * Init logic for `debug` instances. - * - * Create a new `inspectOpts` object in case `useColors` is set - * differently for a particular `debug` instance. - */ - -function init(debug) { - debug.inspectOpts = {}; - - const keys = Object.keys(exports.inspectOpts); - for (let i = 0; i < keys.length; i++) { - debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; - } -} - -module.exports = require('./common')(exports); - -const {formatters} = module.exports; - -/** - * Map %o to `util.inspect()`, all on a single line. - */ - -formatters.o = function (v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts) - .replace(/\s*\n\s*/g, ' '); -}; - -/** - * Map %O to `util.inspect()`, allowing multiple lines if needed. - */ - -formatters.O = function (v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts); -}; diff --git a/node_modules/escodegen/escodegen.js b/node_modules/escodegen/escodegen.js index a8d0170..6fe6646 100644 --- a/node_modules/escodegen/escodegen.js +++ b/node_modules/escodegen/escodegen.js @@ -95,14 +95,15 @@ BitwiseSHIFT: 10, Additive: 11, Multiplicative: 12, - Await: 13, - Unary: 13, - Postfix: 14, - Call: 15, - New: 16, - TaggedTemplate: 17, - Member: 18, - Primary: 19 + Exponentiation: 13, + Await: 14, + Unary: 14, + Postfix: 15, + Call: 16, + New: 17, + TaggedTemplate: 18, + Member: 19, + Primary: 20 }; BinaryPrecedence = { @@ -130,7 +131,8 @@ '-': Precedence.Additive, '*': Precedence.Multiplicative, '%': Precedence.Multiplicative, - '/': Precedence.Multiplicative + '/': Precedence.Multiplicative, + '**': Precedence.Exponentiation }; //Flags @@ -953,7 +955,7 @@ }; CodeGenerator.prototype.generateIterationForStatement = function (operator, stmt, flags) { - var result = ['for' + space + (stmt.await ? 'await' + space : '') + '('], that = this; + var result = ['for' + (stmt.await ? noEmptySpace() + 'await' : '') + space + '('], that = this; withIndent(function () { if (stmt.left.type === Syntax.VariableDeclaration) { withIndent(function () { @@ -1145,7 +1147,7 @@ result = join(result, this.generateExpression(stmt.id, Precedence.Sequence, E_TTT)); } if (stmt.superClass) { - fragment = join('extends', this.generateExpression(stmt.superClass, Precedence.Assignment, E_TTT)); + fragment = join('extends', this.generateExpression(stmt.superClass, Precedence.Unary, E_TTT)); result = join(result, fragment); } result.push(space); @@ -1176,15 +1178,19 @@ withIndent(function () { var guard; - result = [ - 'catch' + space + '(', - that.generateExpression(stmt.param, Precedence.Sequence, E_TTT), - ')' - ]; + if (stmt.param) { + result = [ + 'catch' + space + '(', + that.generateExpression(stmt.param, Precedence.Sequence, E_TTT), + ')' + ]; - if (stmt.guard) { - guard = that.generateExpression(stmt.guard, Precedence.Sequence, E_TTT); - result.splice(2, 0, ' if ', guard); + if (stmt.guard) { + guard = that.generateExpression(stmt.guard, Precedence.Sequence, E_TTT); + result.splice(2, 0, ' if ', guard); + } + } else { + result = ['catch']; } }); result.push(this.maybeBlock(stmt.body, S_TFFF)); @@ -1827,14 +1833,16 @@ }, BinaryExpression: function (expr, precedence, flags) { - var result, currentPrecedence, fragment, leftSource; + var result, leftPrecedence, rightPrecedence, currentPrecedence, fragment, leftSource; currentPrecedence = BinaryPrecedence[expr.operator]; + leftPrecedence = expr.operator === '**' ? Precedence.Postfix : currentPrecedence; + rightPrecedence = expr.operator === '**' ? currentPrecedence : currentPrecedence + 1; if (currentPrecedence < precedence) { flags |= F_ALLOW_IN; } - fragment = this.generateExpression(expr.left, currentPrecedence, flags); + fragment = this.generateExpression(expr.left, leftPrecedence, flags); leftSource = fragment.toString(); @@ -1844,7 +1852,7 @@ result = join(fragment, expr.operator); } - fragment = this.generateExpression(expr.right, currentPrecedence + 1, flags); + fragment = this.generateExpression(expr.right, rightPrecedence, flags); if (expr.operator === '/' && fragment.toString().charAt(0) === '/' || expr.operator.slice(-1) === '<' && fragment.toString().slice(0, 3) === '!--') { @@ -2091,7 +2099,7 @@ result = join(result, this.generateExpression(expr.id, Precedence.Sequence, E_TTT)); } if (expr.superClass) { - fragment = join('extends', this.generateExpression(expr.superClass, Precedence.Assignment, E_TTT)); + fragment = join('extends', this.generateExpression(expr.superClass, Precedence.Unary, E_TTT)); result = join(result, fragment); } result.push(space); @@ -2308,6 +2316,10 @@ } } + if (expr.regex) { + return '/' + expr.regex.pattern + '/' + expr.regex.flags; + } + if (expr.value === null) { return 'null'; } @@ -2324,9 +2336,6 @@ return expr.value ? 'true' : 'false'; } - if (expr.regex) { - return '/' + expr.regex.pattern + '/' + expr.regex.flags; - } return generateRegExp(expr.value); }, @@ -2434,7 +2443,15 @@ ModuleSpecifier: function (expr, precedence, flags) { return this.Literal(expr, precedence, flags); - } + }, + + ImportExpression: function(expr, precedence, flag) { + return parenthesize([ + 'import(', + this.generateExpression(expr.source, Precedence.Assignment, E_TTT), + ')' + ], Precedence.Call, precedence); + }, }; diff --git a/node_modules/escodegen/package.json b/node_modules/escodegen/package.json index 1f59078..cea0279 100644 --- a/node_modules/escodegen/package.json +++ b/node_modules/escodegen/package.json @@ -1,8 +1,8 @@ { "_from": "escodegen@^1.11.0", - "_id": "escodegen@1.11.1", + "_id": "escodegen@1.14.1", "_inBundle": false, - "_integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", + "_integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", "_location": "/escodegen", "_phantomChildren": {}, "_requested": { @@ -18,20 +18,20 @@ "_requiredBy": [ "/jsdom" ], - "_resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "_shasum": "c485ff8d6b4cdb89e27f4a856e91f118401ca510", + "_resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", + "_shasum": "ba01d0c8278b5e95a9a45350142026659027a457", "_spec": "escodegen@^1.11.0", "_where": "F:\\projects\\p\\minifyfromhtml\\node_modules\\jsdom", "bin": { - "esgenerate": "./bin/esgenerate.js", - "escodegen": "./bin/escodegen.js" + "esgenerate": "bin/esgenerate.js", + "escodegen": "bin/escodegen.js" }, "bugs": { "url": "https://github.com/estools/escodegen/issues" }, "bundleDependencies": false, "dependencies": { - "esprima": "^3.1.3", + "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", @@ -40,7 +40,7 @@ "deprecated": false, "description": "ECMAScript code generator", "devDependencies": { - "acorn": "^4.0.4", + "acorn": "^7.1.0", "bluebird": "^3.4.7", "bower-registry-client": "^1.0.0", "chai": "^3.5.0", @@ -86,5 +86,5 @@ "test": "gulp travis", "unit-test": "gulp test" }, - "version": "1.11.1" + "version": "1.14.1" } diff --git a/node_modules/esprima/ChangeLog b/node_modules/esprima/ChangeLog index 23bcdc7..fafe1c9 100644 --- a/node_modules/esprima/ChangeLog +++ b/node_modules/esprima/ChangeLog @@ -1,3 +1,29 @@ +2018-06-17: Version 4.0.1 + + * Fix parsing async get/set in a class (issue 1861, 1875) + * Account for different return statement argument (issue 1829, 1897, 1928) + * Correct the handling of HTML comment when parsing a module (issue 1841) + * Fix incorrect parse async with proto-identifier-shorthand (issue 1847) + * Fix negative column in binary expression (issue 1844) + * Fix incorrect YieldExpression in object methods (issue 1834) + * Various documentation fixes + +2017-06-10: Version 4.0.0 + + * Support ES2017 async function and await expression (issue 1079) + * Support ES2017 trailing commas in function parameters (issue 1550) + * Explicitly distinguish parsing a module vs a script (issue 1576) + * Fix JSX non-empty container (issue 1786) + * Allow JSX element in a yield expression (issue 1765) + * Allow `in` expression in a concise body with a function body (issue 1793) + * Setter function argument must not be a rest parameter (issue 1693) + * Limit strict mode directive to functions with a simple parameter list (issue 1677) + * Prohibit any escape sequence in a reserved word (issue 1612) + * Only permit hex digits in hex escape sequence (issue 1619) + * Prohibit labelled class/generator/function declaration (issue 1484) + * Limit function declaration as if statement clause only in non-strict mode (issue 1657) + * Tolerate missing ) in a with and do-while statement (issue 1481) + 2016-12-22: Version 3.1.3 * Support binding patterns as rest element (issue 1681) diff --git a/node_modules/esprima/README.md b/node_modules/esprima/README.md index e59d083..8fb25e6 100644 --- a/node_modules/esprima/README.md +++ b/node_modules/esprima/README.md @@ -12,11 +12,11 @@ with the help of [many contributors](https://github.com/jquery/esprima/contribut ### Features -- Full support for ECMAScript 2016 ([ECMA-262 7th Edition](http://www.ecma-international.org/publications/standards/Ecma-262.htm)) +- Full support for ECMAScript 2017 ([ECMA-262 8th Edition](http://www.ecma-international.org/publications/standards/Ecma-262.htm)) - Sensible [syntax tree format](https://github.com/estree/estree/blob/master/es5.md) as standardized by [ESTree project](https://github.com/estree/estree) - Experimental support for [JSX](https://facebook.github.io/jsx/), a syntax extension for [React](https://facebook.github.io/react/) - Optional tracking of syntax node location (index-based and line-column) -- [Heavily tested](http://esprima.org/test/ci.html) (~1300 [unit tests](https://github.com/jquery/esprima/tree/master/test/fixtures) with [full code coverage](https://codecov.io/github/jquery/esprima)) +- [Heavily tested](http://esprima.org/test/ci.html) (~1500 [unit tests](https://github.com/jquery/esprima/tree/master/test/fixtures) with [full code coverage](https://codecov.io/github/jquery/esprima)) ### API @@ -34,7 +34,7 @@ A simple example on Node.js REPL: { type: 'Punctuator', value: '=' }, { type: 'Numeric', value: '42' } ] -> esprima.parse(program); +> esprima.parseScript(program); { type: 'Program', body: [ { type: 'VariableDeclaration', @@ -42,3 +42,5 @@ A simple example on Node.js REPL: kind: 'const' } ], sourceType: 'script' } ``` + +For more information, please read the [complete documentation](http://esprima.org/doc). \ No newline at end of file diff --git a/node_modules/esprima/bin/esvalidate.js b/node_modules/esprima/bin/esvalidate.js index 4faf760..d49a7e4 100755 --- a/node_modules/esprima/bin/esvalidate.js +++ b/node_modules/esprima/bin/esvalidate.js @@ -194,7 +194,7 @@ function run(fname, content) { console.log(' '); console.log(''); } else { - console.log('Error: ' + e.message); + console.log(fname + ':' + e.lineNumber + ': ' + e.message.replace(/^Line\ [0-9]*\:\ /, '')); } } } diff --git a/node_modules/esprima/dist/esprima.js b/node_modules/esprima/dist/esprima.js index 34675c0..2af3eee 100644 --- a/node_modules/esprima/dist/esprima.js +++ b/node_modules/esprima/dist/esprima.js @@ -57,6 +57,7 @@ return /******/ (function(modules) { // webpackBootstrap /* 0 */ /***/ function(module, exports, __webpack_require__) { + "use strict"; /* Copyright JS Foundation and other contributors, https://js.foundation/ @@ -80,10 +81,10 @@ return /******/ (function(modules) { // webpackBootstrap (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"; + Object.defineProperty(exports, "__esModule", { value: true }); var comment_handler_1 = __webpack_require__(1); - var parser_1 = __webpack_require__(3); - var jsx_parser_1 = __webpack_require__(11); + var jsx_parser_1 = __webpack_require__(3); + var parser_1 = __webpack_require__(8); var tokenizer_1 = __webpack_require__(15); function parse(code, options, delegate) { var commentHandler = null; @@ -107,6 +108,10 @@ return /******/ (function(modules) { // webpackBootstrap parserDelegate = proxyDelegate; } } + var isModule = false; + if (options && typeof options.sourceType === 'string') { + isModule = (options.sourceType === 'module'); + } var parser; if (options && typeof options.jsx === 'boolean' && options.jsx) { parser = new jsx_parser_1.JSXParser(code, options, parserDelegate); @@ -114,8 +119,9 @@ return /******/ (function(modules) { // webpackBootstrap else { parser = new parser_1.Parser(code, options, parserDelegate); } - var ast = (parser.parseProgram()); - if (collectComment) { + var program = isModule ? parser.parseModule() : parser.parseScript(); + var ast = program; + if (collectComment && commentHandler) { ast.comments = commentHandler.comments; } if (parser.config.tokens) { @@ -127,6 +133,18 @@ return /******/ (function(modules) { // webpackBootstrap return ast; } exports.parse = parse; + function parseModule(code, options, delegate) { + var parsingOptions = options || {}; + parsingOptions.sourceType = 'module'; + return parse(code, parsingOptions, delegate); + } + exports.parseModule = parseModule; + function parseScript(code, options, delegate) { + var parsingOptions = options || {}; + parsingOptions.sourceType = 'script'; + return parse(code, parsingOptions, delegate); + } + exports.parseScript = parseScript; function tokenize(code, options, delegate) { var tokenizer = new tokenizer_1.Tokenizer(code, options); var tokens; @@ -155,7 +173,7 @@ return /******/ (function(modules) { // webpackBootstrap var syntax_1 = __webpack_require__(2); exports.Syntax = syntax_1.Syntax; // Sync with *.json manifests. - exports.version = '3.1.3'; + exports.version = '4.0.1'; /***/ }, @@ -163,6 +181,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ function(module, exports, __webpack_require__) { "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); var syntax_1 = __webpack_require__(2); var CommentHandler = (function () { function CommentHandler() { @@ -190,7 +209,7 @@ return /******/ (function(modules) { // webpackBootstrap } } }; - CommentHandler.prototype.findTrailingComments = function (node, metadata) { + CommentHandler.prototype.findTrailingComments = function (metadata) { var trailingComments = []; if (this.trailing.length > 0) { for (var i = this.trailing.length - 1; i >= 0; --i) { @@ -212,13 +231,14 @@ return /******/ (function(modules) { // webpackBootstrap } return trailingComments; }; - CommentHandler.prototype.findLeadingComments = function (node, metadata) { + CommentHandler.prototype.findLeadingComments = function (metadata) { var leadingComments = []; var target; while (this.stack.length > 0) { var entry = this.stack[this.stack.length - 1]; if (entry && entry.start >= metadata.start.offset) { - target = this.stack.pop().node; + target = entry.node; + this.stack.pop(); } else { break; @@ -252,8 +272,8 @@ return /******/ (function(modules) { // webpackBootstrap return; } this.insertInnerComments(node, metadata); - var trailingComments = this.findTrailingComments(node, metadata); - var leadingComments = this.findLeadingComments(node, metadata); + var trailingComments = this.findTrailingComments(metadata); + var leadingComments = this.findLeadingComments(metadata); if (leadingComments.length > 0) { node.leadingComments = leadingComments; } @@ -316,12 +336,14 @@ return /******/ (function(modules) { // webpackBootstrap /***/ function(module, exports) { "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); exports.Syntax = { AssignmentExpression: 'AssignmentExpression', AssignmentPattern: 'AssignmentPattern', ArrayExpression: 'ArrayExpression', ArrayPattern: 'ArrayPattern', ArrowFunctionExpression: 'ArrowFunctionExpression', + AwaitExpression: 'AwaitExpression', BlockStatement: 'BlockStatement', BinaryExpression: 'BinaryExpression', BreakStatement: 'BreakStatement', @@ -390,4254 +412,551 @@ return /******/ (function(modules) { // webpackBootstrap /***/ function(module, exports, __webpack_require__) { "use strict"; - var assert_1 = __webpack_require__(4); - var messages_1 = __webpack_require__(5); - var error_handler_1 = __webpack_require__(6); - var token_1 = __webpack_require__(7); - var scanner_1 = __webpack_require__(8); - var syntax_1 = __webpack_require__(2); - var Node = __webpack_require__(10); - var ArrowParameterPlaceHolder = 'ArrowParameterPlaceHolder'; - var Parser = (function () { - function Parser(code, options, delegate) { - if (options === void 0) { options = {}; } - this.config = { - range: (typeof options.range === 'boolean') && options.range, - loc: (typeof options.loc === 'boolean') && options.loc, - source: null, - tokens: (typeof options.tokens === 'boolean') && options.tokens, - comment: (typeof options.comment === 'boolean') && options.comment, - tolerant: (typeof options.tolerant === 'boolean') && options.tolerant - }; - if (this.config.loc && options.source && options.source !== null) { - this.config.source = String(options.source); - } - this.delegate = delegate; - this.errorHandler = new error_handler_1.ErrorHandler(); - this.errorHandler.tolerant = this.config.tolerant; - this.scanner = new scanner_1.Scanner(code, this.errorHandler); - this.scanner.trackComment = this.config.comment; - this.operatorPrecedence = { - ')': 0, - ';': 0, - ',': 0, - '=': 0, - ']': 0, - '||': 1, - '&&': 2, - '|': 3, - '^': 4, - '&': 5, - '==': 6, - '!=': 6, - '===': 6, - '!==': 6, - '<': 7, - '>': 7, - '<=': 7, - '>=': 7, - '<<': 8, - '>>': 8, - '>>>': 8, - '+': 9, - '-': 9, - '*': 11, - '/': 11, - '%': 11 - }; - this.sourceType = (options && options.sourceType === 'module') ? 'module' : 'script'; - this.lookahead = null; - this.hasLineTerminator = false; - this.context = { - allowIn: true, - allowYield: true, - firstCoverInitializedNameError: null, - isAssignmentTarget: false, - isBindingElement: false, - inFunctionBody: false, - inIteration: false, - inSwitch: false, - labelSet: {}, - strict: (this.sourceType === 'module') - }; - this.tokens = []; - this.startMarker = { - index: 0, - lineNumber: this.scanner.lineNumber, - lineStart: 0 - }; - this.lastMarker = { - index: 0, - lineNumber: this.scanner.lineNumber, - lineStart: 0 - }; - this.nextToken(); - this.lastMarker = { - index: this.scanner.index, - lineNumber: this.scanner.lineNumber, - lineStart: this.scanner.lineStart - }; +/* istanbul ignore next */ + var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(exports, "__esModule", { value: true }); + var character_1 = __webpack_require__(4); + var JSXNode = __webpack_require__(5); + var jsx_syntax_1 = __webpack_require__(6); + var Node = __webpack_require__(7); + var parser_1 = __webpack_require__(8); + var token_1 = __webpack_require__(13); + var xhtml_entities_1 = __webpack_require__(14); + token_1.TokenName[100 /* Identifier */] = 'JSXIdentifier'; + token_1.TokenName[101 /* Text */] = 'JSXText'; + // Fully qualified element name, e.g. returns "svg:path" + function getQualifiedElementName(elementName) { + var qualifiedName; + switch (elementName.type) { + case jsx_syntax_1.JSXSyntax.JSXIdentifier: + var id = elementName; + qualifiedName = id.name; + break; + case jsx_syntax_1.JSXSyntax.JSXNamespacedName: + var ns = elementName; + qualifiedName = getQualifiedElementName(ns.namespace) + ':' + + getQualifiedElementName(ns.name); + break; + case jsx_syntax_1.JSXSyntax.JSXMemberExpression: + var expr = elementName; + qualifiedName = getQualifiedElementName(expr.object) + '.' + + getQualifiedElementName(expr.property); + break; + /* istanbul ignore next */ + default: + break; } - Parser.prototype.throwError = function (messageFormat) { - var values = []; - for (var _i = 1; _i < arguments.length; _i++) { - values[_i - 1] = arguments[_i]; - } - var args = Array.prototype.slice.call(arguments, 1); - var msg = messageFormat.replace(/%(\d)/g, function (whole, idx) { - assert_1.assert(idx < args.length, 'Message reference must be in range'); - return args[idx]; - }); - var index = this.lastMarker.index; - var line = this.lastMarker.lineNumber; - var column = this.lastMarker.index - this.lastMarker.lineStart + 1; - throw this.errorHandler.createError(index, line, column, msg); + return qualifiedName; + } + var JSXParser = (function (_super) { + __extends(JSXParser, _super); + function JSXParser(code, options, delegate) { + return _super.call(this, code, options, delegate) || this; + } + JSXParser.prototype.parsePrimaryExpression = function () { + return this.match('<') ? this.parseJSXRoot() : _super.prototype.parsePrimaryExpression.call(this); }; - Parser.prototype.tolerateError = function (messageFormat) { - var values = []; - for (var _i = 1; _i < arguments.length; _i++) { - values[_i - 1] = arguments[_i]; - } - var args = Array.prototype.slice.call(arguments, 1); - var msg = messageFormat.replace(/%(\d)/g, function (whole, idx) { - assert_1.assert(idx < args.length, 'Message reference must be in range'); - return args[idx]; - }); - var index = this.lastMarker.index; - var line = this.scanner.lineNumber; - var column = this.lastMarker.index - this.lastMarker.lineStart + 1; - this.errorHandler.tolerateError(index, line, column, msg); + JSXParser.prototype.startJSX = function () { + // Unwind the scanner before the lookahead token. + this.scanner.index = this.startMarker.index; + this.scanner.lineNumber = this.startMarker.line; + this.scanner.lineStart = this.startMarker.index - this.startMarker.column; }; - // Throw an exception because of the token. - Parser.prototype.unexpectedTokenError = function (token, message) { - var msg = message || messages_1.Messages.UnexpectedToken; - var value; - if (token) { - if (!message) { - msg = (token.type === token_1.Token.EOF) ? messages_1.Messages.UnexpectedEOS : - (token.type === token_1.Token.Identifier) ? messages_1.Messages.UnexpectedIdentifier : - (token.type === token_1.Token.NumericLiteral) ? messages_1.Messages.UnexpectedNumber : - (token.type === token_1.Token.StringLiteral) ? messages_1.Messages.UnexpectedString : - (token.type === token_1.Token.Template) ? messages_1.Messages.UnexpectedTemplate : - messages_1.Messages.UnexpectedToken; - if (token.type === token_1.Token.Keyword) { - if (this.scanner.isFutureReservedWord(token.value)) { - msg = messages_1.Messages.UnexpectedReserved; - } - else if (this.context.strict && this.scanner.isStrictModeReservedWord(token.value)) { - msg = messages_1.Messages.StrictReservedWord; - } - } - } - value = (token.type === token_1.Token.Template) ? token.value.raw : token.value; - } - else { - value = 'ILLEGAL'; - } - msg = msg.replace('%0', value); - if (token && typeof token.lineNumber === 'number') { - var index = token.start; - var line = token.lineNumber; - var column = token.start - this.lastMarker.lineStart + 1; - return this.errorHandler.createError(index, line, column, msg); - } - else { - var index = this.lastMarker.index; - var line = this.lastMarker.lineNumber; - var column = index - this.lastMarker.lineStart + 1; - return this.errorHandler.createError(index, line, column, msg); + JSXParser.prototype.finishJSX = function () { + // Prime the next lookahead. + this.nextToken(); + }; + JSXParser.prototype.reenterJSX = function () { + this.startJSX(); + this.expectJSX('}'); + // Pop the closing '}' added from the lookahead. + if (this.config.tokens) { + this.tokens.pop(); } }; - Parser.prototype.throwUnexpectedToken = function (token, message) { - throw this.unexpectedTokenError(token, message); - }; - Parser.prototype.tolerateUnexpectedToken = function (token, message) { - this.errorHandler.tolerate(this.unexpectedTokenError(token, message)); - }; - Parser.prototype.collectComments = function () { - if (!this.config.comment) { - this.scanner.scanComments(); - } - else { - var comments = this.scanner.scanComments(); - if (comments.length > 0 && this.delegate) { - for (var i = 0; i < comments.length; ++i) { - var e = comments[i]; - var node = void 0; - node = { - type: e.multiLine ? 'BlockComment' : 'LineComment', - value: this.scanner.source.slice(e.slice[0], e.slice[1]) - }; - if (this.config.range) { - node.range = e.range; - } - if (this.config.loc) { - node.loc = e.loc; - } - var metadata = { - start: { - line: e.loc.start.line, - column: e.loc.start.column, - offset: e.range[0] - }, - end: { - line: e.loc.end.line, - column: e.loc.end.column, - offset: e.range[1] - } - }; - this.delegate(node, metadata); - } - } - } - }; - // From internal representation to an external structure - Parser.prototype.getTokenRaw = function (token) { - return this.scanner.source.slice(token.start, token.end); - }; - Parser.prototype.convertToken = function (token) { - var t; - t = { - type: token_1.TokenName[token.type], - value: this.getTokenRaw(token) + JSXParser.prototype.createJSXNode = function () { + this.collectComments(); + return { + index: this.scanner.index, + line: this.scanner.lineNumber, + column: this.scanner.index - this.scanner.lineStart }; - if (this.config.range) { - t.range = [token.start, token.end]; - } - if (this.config.loc) { - t.loc = { - start: { - line: this.startMarker.lineNumber, - column: this.startMarker.index - this.startMarker.lineStart - }, - end: { - line: this.scanner.lineNumber, - column: this.scanner.index - this.scanner.lineStart + }; + JSXParser.prototype.createJSXChildNode = function () { + return { + index: this.scanner.index, + line: this.scanner.lineNumber, + column: this.scanner.index - this.scanner.lineStart + }; + }; + JSXParser.prototype.scanXHTMLEntity = function (quote) { + var result = '&'; + var valid = true; + var terminated = false; + var numeric = false; + var hex = false; + while (!this.scanner.eof() && valid && !terminated) { + var ch = this.scanner.source[this.scanner.index]; + if (ch === quote) { + break; + } + terminated = (ch === ';'); + result += ch; + ++this.scanner.index; + if (!terminated) { + switch (result.length) { + case 2: + // e.g. '{' + numeric = (ch === '#'); + break; + case 3: + if (numeric) { + // e.g. 'A' + hex = (ch === 'x'); + valid = hex || character_1.Character.isDecimalDigit(ch.charCodeAt(0)); + numeric = numeric && !hex; + } + break; + default: + valid = valid && !(numeric && !character_1.Character.isDecimalDigit(ch.charCodeAt(0))); + valid = valid && !(hex && !character_1.Character.isHexDigit(ch.charCodeAt(0))); + break; } + } + } + if (valid && terminated && result.length > 2) { + // e.g. 'A' becomes just '#x41' + var str = result.substr(1, result.length - 2); + if (numeric && str.length > 1) { + result = String.fromCharCode(parseInt(str.substr(1), 10)); + } + else if (hex && str.length > 2) { + result = String.fromCharCode(parseInt('0' + str.substr(1), 16)); + } + else if (!numeric && !hex && xhtml_entities_1.XHTMLEntities[str]) { + result = xhtml_entities_1.XHTMLEntities[str]; + } + } + return result; + }; + // Scan the next JSX token. This replaces Scanner#lex when in JSX mode. + JSXParser.prototype.lexJSX = function () { + var cp = this.scanner.source.charCodeAt(this.scanner.index); + // < > / : = { } + if (cp === 60 || cp === 62 || cp === 47 || cp === 58 || cp === 61 || cp === 123 || cp === 125) { + var value = this.scanner.source[this.scanner.index++]; + return { + type: 7 /* Punctuator */, + value: value, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: this.scanner.index - 1, + end: this.scanner.index }; } - if (token.regex) { - t.regex = token.regex; + // " ' + if (cp === 34 || cp === 39) { + var start = this.scanner.index; + var quote = this.scanner.source[this.scanner.index++]; + var str = ''; + while (!this.scanner.eof()) { + var ch = this.scanner.source[this.scanner.index++]; + if (ch === quote) { + break; + } + else if (ch === '&') { + str += this.scanXHTMLEntity(quote); + } + else { + str += ch; + } + } + return { + type: 8 /* StringLiteral */, + value: str, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: start, + end: this.scanner.index + }; } - return t; + // ... or . + if (cp === 46) { + var n1 = this.scanner.source.charCodeAt(this.scanner.index + 1); + var n2 = this.scanner.source.charCodeAt(this.scanner.index + 2); + var value = (n1 === 46 && n2 === 46) ? '...' : '.'; + var start = this.scanner.index; + this.scanner.index += value.length; + return { + type: 7 /* Punctuator */, + value: value, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: start, + end: this.scanner.index + }; + } + // ` + if (cp === 96) { + // Only placeholder, since it will be rescanned as a real assignment expression. + return { + type: 10 /* Template */, + value: '', + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: this.scanner.index, + end: this.scanner.index + }; + } + // Identifer can not contain backslash (char code 92). + if (character_1.Character.isIdentifierStart(cp) && (cp !== 92)) { + var start = this.scanner.index; + ++this.scanner.index; + while (!this.scanner.eof()) { + var ch = this.scanner.source.charCodeAt(this.scanner.index); + if (character_1.Character.isIdentifierPart(ch) && (ch !== 92)) { + ++this.scanner.index; + } + else if (ch === 45) { + // Hyphen (char code 45) can be part of an identifier. + ++this.scanner.index; + } + else { + break; + } + } + var id = this.scanner.source.slice(start, this.scanner.index); + return { + type: 100 /* Identifier */, + value: id, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: start, + end: this.scanner.index + }; + } + return this.scanner.lex(); }; - Parser.prototype.nextToken = function () { - var token = this.lookahead; - this.lastMarker.index = this.scanner.index; - this.lastMarker.lineNumber = this.scanner.lineNumber; - this.lastMarker.lineStart = this.scanner.lineStart; + JSXParser.prototype.nextJSXToken = function () { this.collectComments(); this.startMarker.index = this.scanner.index; - this.startMarker.lineNumber = this.scanner.lineNumber; - this.startMarker.lineStart = this.scanner.lineStart; - var next; - next = this.scanner.lex(); - this.hasLineTerminator = (token && next) ? (token.lineNumber !== next.lineNumber) : false; - if (next && this.context.strict && next.type === token_1.Token.Identifier) { - if (this.scanner.isStrictModeReservedWord(next.value)) { - next.type = token_1.Token.Keyword; - } - } - this.lookahead = next; - if (this.config.tokens && next.type !== token_1.Token.EOF) { - this.tokens.push(this.convertToken(next)); - } - return token; - }; - Parser.prototype.nextRegexToken = function () { - this.collectComments(); - var token = this.scanner.scanRegExp(); + this.startMarker.line = this.scanner.lineNumber; + this.startMarker.column = this.scanner.index - this.scanner.lineStart; + var token = this.lexJSX(); + this.lastMarker.index = this.scanner.index; + this.lastMarker.line = this.scanner.lineNumber; + this.lastMarker.column = this.scanner.index - this.scanner.lineStart; if (this.config.tokens) { - // Pop the previous token, '/' or '/=' - // This is added from the lookahead token. - this.tokens.pop(); this.tokens.push(this.convertToken(token)); } - // Prime the next lookahead. - this.lookahead = token; - this.nextToken(); return token; }; - Parser.prototype.createNode = function () { - return { - index: this.startMarker.index, - line: this.startMarker.lineNumber, - column: this.startMarker.index - this.startMarker.lineStart - }; - }; - Parser.prototype.startNode = function (token) { - return { - index: token.start, - line: token.lineNumber, - column: token.start - token.lineStart - }; - }; - Parser.prototype.finalize = function (meta, node) { - if (this.config.range) { - node.range = [meta.index, this.lastMarker.index]; - } - if (this.config.loc) { - node.loc = { - start: { - line: meta.line, - column: meta.column - }, - end: { - line: this.lastMarker.lineNumber, - column: this.lastMarker.index - this.lastMarker.lineStart + JSXParser.prototype.nextJSXText = function () { + this.startMarker.index = this.scanner.index; + this.startMarker.line = this.scanner.lineNumber; + this.startMarker.column = this.scanner.index - this.scanner.lineStart; + var start = this.scanner.index; + var text = ''; + while (!this.scanner.eof()) { + var ch = this.scanner.source[this.scanner.index]; + if (ch === '{' || ch === '<') { + break; + } + ++this.scanner.index; + text += ch; + if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) { + ++this.scanner.lineNumber; + if (ch === '\r' && this.scanner.source[this.scanner.index] === '\n') { + ++this.scanner.index; } - }; - if (this.config.source) { - node.loc.source = this.config.source; + this.scanner.lineStart = this.scanner.index; } } - if (this.delegate) { - var metadata = { - start: { - line: meta.line, - column: meta.column, - offset: meta.index - }, - end: { - line: this.lastMarker.lineNumber, - column: this.lastMarker.index - this.lastMarker.lineStart, - offset: this.lastMarker.index - } - }; - this.delegate(node, metadata); + this.lastMarker.index = this.scanner.index; + this.lastMarker.line = this.scanner.lineNumber; + this.lastMarker.column = this.scanner.index - this.scanner.lineStart; + var token = { + type: 101 /* Text */, + value: text, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: start, + end: this.scanner.index + }; + if ((text.length > 0) && this.config.tokens) { + this.tokens.push(this.convertToken(token)); } - return node; + return token; }; - // Expect the next token to match the specified punctuator. + JSXParser.prototype.peekJSXToken = function () { + var state = this.scanner.saveState(); + this.scanner.scanComments(); + var next = this.lexJSX(); + this.scanner.restoreState(state); + return next; + }; + // Expect the next JSX token to match the specified punctuator. // If not, an exception will be thrown. - Parser.prototype.expect = function (value) { - var token = this.nextToken(); - if (token.type !== token_1.Token.Punctuator || token.value !== value) { + JSXParser.prototype.expectJSX = function (value) { + var token = this.nextJSXToken(); + if (token.type !== 7 /* Punctuator */ || token.value !== value) { this.throwUnexpectedToken(token); } }; - // Quietly expect a comma when in tolerant mode, otherwise delegates to expect(). - Parser.prototype.expectCommaSeparator = function () { - if (this.config.tolerant) { - var token = this.lookahead; - if (token.type === token_1.Token.Punctuator && token.value === ',') { - this.nextToken(); - } - else if (token.type === token_1.Token.Punctuator && token.value === ';') { - this.nextToken(); - this.tolerateUnexpectedToken(token); - } - else { - this.tolerateUnexpectedToken(token, messages_1.Messages.UnexpectedToken); - } - } - else { - this.expect(','); - } + // Return true if the next JSX token matches the specified punctuator. + JSXParser.prototype.matchJSX = function (value) { + var next = this.peekJSXToken(); + return next.type === 7 /* Punctuator */ && next.value === value; }; - // Expect the next token to match the specified keyword. - // If not, an exception will be thrown. - Parser.prototype.expectKeyword = function (keyword) { - var token = this.nextToken(); - if (token.type !== token_1.Token.Keyword || token.value !== keyword) { + JSXParser.prototype.parseJSXIdentifier = function () { + var node = this.createJSXNode(); + var token = this.nextJSXToken(); + if (token.type !== 100 /* Identifier */) { this.throwUnexpectedToken(token); } + return this.finalize(node, new JSXNode.JSXIdentifier(token.value)); }; - // Return true if the next token matches the specified punctuator. - Parser.prototype.match = function (value) { - return this.lookahead.type === token_1.Token.Punctuator && this.lookahead.value === value; - }; - // Return true if the next token matches the specified keyword - Parser.prototype.matchKeyword = function (keyword) { - return this.lookahead.type === token_1.Token.Keyword && this.lookahead.value === keyword; - }; - // Return true if the next token matches the specified contextual keyword - // (where an identifier is sometimes a keyword depending on the context) - Parser.prototype.matchContextualKeyword = function (keyword) { - return this.lookahead.type === token_1.Token.Identifier && this.lookahead.value === keyword; - }; - // Return true if the next token is an assignment operator - Parser.prototype.matchAssign = function () { - if (this.lookahead.type !== token_1.Token.Punctuator) { - return false; + JSXParser.prototype.parseJSXElementName = function () { + var node = this.createJSXNode(); + var elementName = this.parseJSXIdentifier(); + if (this.matchJSX(':')) { + var namespace = elementName; + this.expectJSX(':'); + var name_1 = this.parseJSXIdentifier(); + elementName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_1)); } - var op = this.lookahead.value; - return op === '=' || - op === '*=' || - op === '**=' || - op === '/=' || - op === '%=' || - op === '+=' || - op === '-=' || - op === '<<=' || - op === '>>=' || - op === '>>>=' || - op === '&=' || - op === '^=' || - op === '|='; - }; - // Cover grammar support. - // - // When an assignment expression position starts with an left parenthesis, the determination of the type - // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead) - // or the first comma. This situation also defers the determination of all the expressions nested in the pair. - // - // There are three productions that can be parsed in a parentheses pair that needs to be determined - // after the outermost pair is closed. They are: - // - // 1. AssignmentExpression - // 2. BindingElements - // 3. AssignmentTargets - // - // In order to avoid exponential backtracking, we use two flags to denote if the production can be - // binding element or assignment target. - // - // The three productions have the relationship: - // - // BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression - // - // with a single exception that CoverInitializedName when used directly in an Expression, generates - // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the - // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair. - // - // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not - // effect the current flags. This means the production the parser parses is only used as an expression. Therefore - // the CoverInitializedName check is conducted. - // - // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates - // the flags outside of the parser. This means the production the parser parses is used as a part of a potential - // pattern. The CoverInitializedName check is deferred. - Parser.prototype.isolateCoverGrammar = function (parseFunction) { - var previousIsBindingElement = this.context.isBindingElement; - var previousIsAssignmentTarget = this.context.isAssignmentTarget; - var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError; - this.context.isBindingElement = true; - this.context.isAssignmentTarget = true; - this.context.firstCoverInitializedNameError = null; - var result = parseFunction.call(this); - if (this.context.firstCoverInitializedNameError !== null) { - this.throwUnexpectedToken(this.context.firstCoverInitializedNameError); - } - this.context.isBindingElement = previousIsBindingElement; - this.context.isAssignmentTarget = previousIsAssignmentTarget; - this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError; - return result; - }; - Parser.prototype.inheritCoverGrammar = function (parseFunction) { - var previousIsBindingElement = this.context.isBindingElement; - var previousIsAssignmentTarget = this.context.isAssignmentTarget; - var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError; - this.context.isBindingElement = true; - this.context.isAssignmentTarget = true; - this.context.firstCoverInitializedNameError = null; - var result = parseFunction.call(this); - this.context.isBindingElement = this.context.isBindingElement && previousIsBindingElement; - this.context.isAssignmentTarget = this.context.isAssignmentTarget && previousIsAssignmentTarget; - this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError || this.context.firstCoverInitializedNameError; - return result; - }; - Parser.prototype.consumeSemicolon = function () { - if (this.match(';')) { - this.nextToken(); - } - else if (!this.hasLineTerminator) { - if (this.lookahead.type !== token_1.Token.EOF && !this.match('}')) { - this.throwUnexpectedToken(this.lookahead); - } - this.lastMarker.index = this.startMarker.index; - this.lastMarker.lineNumber = this.startMarker.lineNumber; - this.lastMarker.lineStart = this.startMarker.lineStart; - } - }; - // ECMA-262 12.2 Primary Expressions - Parser.prototype.parsePrimaryExpression = function () { - var node = this.createNode(); - var expr; - var value, token, raw; - switch (this.lookahead.type) { - case token_1.Token.Identifier: - if (this.sourceType === 'module' && this.lookahead.value === 'await') { - this.tolerateUnexpectedToken(this.lookahead); - } - expr = this.finalize(node, new Node.Identifier(this.nextToken().value)); - break; - case token_1.Token.NumericLiteral: - case token_1.Token.StringLiteral: - if (this.context.strict && this.lookahead.octal) { - this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.StrictOctalLiteral); - } - this.context.isAssignmentTarget = false; - this.context.isBindingElement = false; - token = this.nextToken(); - raw = this.getTokenRaw(token); - expr = this.finalize(node, new Node.Literal(token.value, raw)); - break; - case token_1.Token.BooleanLiteral: - this.context.isAssignmentTarget = false; - this.context.isBindingElement = false; - token = this.nextToken(); - token.value = (token.value === 'true'); - raw = this.getTokenRaw(token); - expr = this.finalize(node, new Node.Literal(token.value, raw)); - break; - case token_1.Token.NullLiteral: - this.context.isAssignmentTarget = false; - this.context.isBindingElement = false; - token = this.nextToken(); - token.value = null; - raw = this.getTokenRaw(token); - expr = this.finalize(node, new Node.Literal(token.value, raw)); - break; - case token_1.Token.Template: - expr = this.parseTemplateLiteral(); - break; - case token_1.Token.Punctuator: - value = this.lookahead.value; - switch (value) { - case '(': - this.context.isBindingElement = false; - expr = this.inheritCoverGrammar(this.parseGroupExpression); - break; - case '[': - expr = this.inheritCoverGrammar(this.parseArrayInitializer); - break; - case '{': - expr = this.inheritCoverGrammar(this.parseObjectInitializer); - break; - case '/': - case '/=': - this.context.isAssignmentTarget = false; - this.context.isBindingElement = false; - this.scanner.index = this.startMarker.index; - token = this.nextRegexToken(); - raw = this.getTokenRaw(token); - expr = this.finalize(node, new Node.RegexLiteral(token.value, raw, token.regex)); - break; - default: - this.throwUnexpectedToken(this.nextToken()); - } - break; - case token_1.Token.Keyword: - if (!this.context.strict && this.context.allowYield && this.matchKeyword('yield')) { - expr = this.parseIdentifierName(); - } - else if (!this.context.strict && this.matchKeyword('let')) { - expr = this.finalize(node, new Node.Identifier(this.nextToken().value)); - } - else { - this.context.isAssignmentTarget = false; - this.context.isBindingElement = false; - if (this.matchKeyword('function')) { - expr = this.parseFunctionExpression(); - } - else if (this.matchKeyword('this')) { - this.nextToken(); - expr = this.finalize(node, new Node.ThisExpression()); - } - else if (this.matchKeyword('class')) { - expr = this.parseClassExpression(); - } - else { - this.throwUnexpectedToken(this.nextToken()); - } - } - break; - default: - this.throwUnexpectedToken(this.nextToken()); - } - return expr; - }; - // ECMA-262 12.2.5 Array Initializer - Parser.prototype.parseSpreadElement = function () { - var node = this.createNode(); - this.expect('...'); - var arg = this.inheritCoverGrammar(this.parseAssignmentExpression); - return this.finalize(node, new Node.SpreadElement(arg)); - }; - Parser.prototype.parseArrayInitializer = function () { - var node = this.createNode(); - var elements = []; - this.expect('['); - while (!this.match(']')) { - if (this.match(',')) { - this.nextToken(); - elements.push(null); - } - else if (this.match('...')) { - var element = this.parseSpreadElement(); - if (!this.match(']')) { - this.context.isAssignmentTarget = false; - this.context.isBindingElement = false; - this.expect(','); - } - elements.push(element); - } - else { - elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression)); - if (!this.match(']')) { - this.expect(','); - } + else if (this.matchJSX('.')) { + while (this.matchJSX('.')) { + var object = elementName; + this.expectJSX('.'); + var property = this.parseJSXIdentifier(); + elementName = this.finalize(node, new JSXNode.JSXMemberExpression(object, property)); } } - this.expect(']'); - return this.finalize(node, new Node.ArrayExpression(elements)); + return elementName; }; - // ECMA-262 12.2.6 Object Initializer - Parser.prototype.parsePropertyMethod = function (params) { - this.context.isAssignmentTarget = false; - this.context.isBindingElement = false; - var previousStrict = this.context.strict; - var body = this.isolateCoverGrammar(this.parseFunctionSourceElements); - if (this.context.strict && params.firstRestricted) { - this.tolerateUnexpectedToken(params.firstRestricted, params.message); - } - if (this.context.strict && params.stricted) { - this.tolerateUnexpectedToken(params.stricted, params.message); - } - this.context.strict = previousStrict; - return body; - }; - Parser.prototype.parsePropertyMethodFunction = function () { - var isGenerator = false; - var node = this.createNode(); - var previousAllowYield = this.context.allowYield; - this.context.allowYield = false; - var params = this.parseFormalParameters(); - var method = this.parsePropertyMethod(params); - this.context.allowYield = previousAllowYield; - return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator)); - }; - Parser.prototype.parseObjectPropertyKey = function () { - var node = this.createNode(); - var token = this.nextToken(); - var key = null; - switch (token.type) { - case token_1.Token.StringLiteral: - case token_1.Token.NumericLiteral: - if (this.context.strict && token.octal) { - this.tolerateUnexpectedToken(token, messages_1.Messages.StrictOctalLiteral); - } - var raw = this.getTokenRaw(token); - key = this.finalize(node, new Node.Literal(token.value, raw)); - break; - case token_1.Token.Identifier: - case token_1.Token.BooleanLiteral: - case token_1.Token.NullLiteral: - case token_1.Token.Keyword: - key = this.finalize(node, new Node.Identifier(token.value)); - break; - case token_1.Token.Punctuator: - if (token.value === '[') { - key = this.isolateCoverGrammar(this.parseAssignmentExpression); - this.expect(']'); - } - else { - this.throwUnexpectedToken(token); - } - break; - default: - this.throwUnexpectedToken(token); - } - return key; - }; - Parser.prototype.isPropertyKey = function (key, value) { - return (key.type === syntax_1.Syntax.Identifier && key.name === value) || - (key.type === syntax_1.Syntax.Literal && key.value === value); - }; - Parser.prototype.parseObjectProperty = function (hasProto) { - var node = this.createNode(); - var token = this.lookahead; - var kind; - var key; - var value; - var computed = false; - var method = false; - var shorthand = false; - if (token.type === token_1.Token.Identifier) { - this.nextToken(); - key = this.finalize(node, new Node.Identifier(token.value)); - } - else if (this.match('*')) { - this.nextToken(); + JSXParser.prototype.parseJSXAttributeName = function () { + var node = this.createJSXNode(); + var attributeName; + var identifier = this.parseJSXIdentifier(); + if (this.matchJSX(':')) { + var namespace = identifier; + this.expectJSX(':'); + var name_2 = this.parseJSXIdentifier(); + attributeName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_2)); } else { - computed = this.match('['); - key = this.parseObjectPropertyKey(); + attributeName = identifier; } - var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead); - if (token.type === token_1.Token.Identifier && token.value === 'get' && lookaheadPropertyKey) { - kind = 'get'; - computed = this.match('['); - key = this.parseObjectPropertyKey(); - this.context.allowYield = false; - value = this.parseGetterMethod(); - } - else if (token.type === token_1.Token.Identifier && token.value === 'set' && lookaheadPropertyKey) { - kind = 'set'; - computed = this.match('['); - key = this.parseObjectPropertyKey(); - value = this.parseSetterMethod(); - } - else if (token.type === token_1.Token.Punctuator && token.value === '*' && lookaheadPropertyKey) { - kind = 'init'; - computed = this.match('['); - key = this.parseObjectPropertyKey(); - value = this.parseGeneratorMethod(); - method = true; - } - else { - if (!key) { - this.throwUnexpectedToken(this.lookahead); - } - kind = 'init'; - if (this.match(':')) { - if (!computed && this.isPropertyKey(key, '__proto__')) { - if (hasProto.value) { - this.tolerateError(messages_1.Messages.DuplicateProtoProperty); - } - hasProto.value = true; - } - this.nextToken(); - value = this.inheritCoverGrammar(this.parseAssignmentExpression); - } - else if (this.match('(')) { - value = this.parsePropertyMethodFunction(); - method = true; - } - else if (token.type === token_1.Token.Identifier) { - var id = this.finalize(node, new Node.Identifier(token.value)); - if (this.match('=')) { - this.context.firstCoverInitializedNameError = this.lookahead; - this.nextToken(); - shorthand = true; - var init = this.isolateCoverGrammar(this.parseAssignmentExpression); - value = this.finalize(node, new Node.AssignmentPattern(id, init)); - } - else { - shorthand = true; - value = id; - } - } - else { - this.throwUnexpectedToken(this.nextToken()); - } - } - return this.finalize(node, new Node.Property(kind, key, computed, value, method, shorthand)); + return attributeName; }; - Parser.prototype.parseObjectInitializer = function () { - var node = this.createNode(); - this.expect('{'); - var properties = []; - var hasProto = { value: false }; - while (!this.match('}')) { - properties.push(this.parseObjectProperty(hasProto)); - if (!this.match('}')) { - this.expectCommaSeparator(); - } - } - this.expect('}'); - return this.finalize(node, new Node.ObjectExpression(properties)); - }; - // ECMA-262 12.2.9 Template Literals - Parser.prototype.parseTemplateHead = function () { - assert_1.assert(this.lookahead.head, 'Template literal must start with a template head'); - var node = this.createNode(); - var token = this.nextToken(); - var value = { - raw: token.value.raw, - cooked: token.value.cooked - }; - return this.finalize(node, new Node.TemplateElement(value, token.tail)); - }; - Parser.prototype.parseTemplateElement = function () { - if (this.lookahead.type !== token_1.Token.Template) { - this.throwUnexpectedToken(); - } - var node = this.createNode(); - var token = this.nextToken(); - var value = { - raw: token.value.raw, - cooked: token.value.cooked - }; - return this.finalize(node, new Node.TemplateElement(value, token.tail)); - }; - Parser.prototype.parseTemplateLiteral = function () { - var node = this.createNode(); - var expressions = []; - var quasis = []; - var quasi = this.parseTemplateHead(); - quasis.push(quasi); - while (!quasi.tail) { - expressions.push(this.parseExpression()); - quasi = this.parseTemplateElement(); - quasis.push(quasi); - } - return this.finalize(node, new Node.TemplateLiteral(quasis, expressions)); - }; - // ECMA-262 12.2.10 The Grouping Operator - Parser.prototype.reinterpretExpressionAsPattern = function (expr) { - switch (expr.type) { - case syntax_1.Syntax.Identifier: - case syntax_1.Syntax.MemberExpression: - case syntax_1.Syntax.RestElement: - case syntax_1.Syntax.AssignmentPattern: - break; - case syntax_1.Syntax.SpreadElement: - expr.type = syntax_1.Syntax.RestElement; - this.reinterpretExpressionAsPattern(expr.argument); - break; - case syntax_1.Syntax.ArrayExpression: - expr.type = syntax_1.Syntax.ArrayPattern; - for (var i = 0; i < expr.elements.length; i++) { - if (expr.elements[i] !== null) { - this.reinterpretExpressionAsPattern(expr.elements[i]); - } - } - break; - case syntax_1.Syntax.ObjectExpression: - expr.type = syntax_1.Syntax.ObjectPattern; - for (var i = 0; i < expr.properties.length; i++) { - this.reinterpretExpressionAsPattern(expr.properties[i].value); - } - break; - case syntax_1.Syntax.AssignmentExpression: - expr.type = syntax_1.Syntax.AssignmentPattern; - delete expr.operator; - this.reinterpretExpressionAsPattern(expr.left); - break; - default: - // Allow other node type for tolerant parsing. - break; - } - }; - Parser.prototype.parseGroupExpression = function () { - var expr; - this.expect('('); - if (this.match(')')) { - this.nextToken(); - if (!this.match('=>')) { - this.expect('=>'); - } - expr = { - type: ArrowParameterPlaceHolder, - params: [] - }; - } - else { - var startToken = this.lookahead; - var params = []; - if (this.match('...')) { - expr = this.parseRestElement(params); - this.expect(')'); - if (!this.match('=>')) { - this.expect('=>'); - } - expr = { - type: ArrowParameterPlaceHolder, - params: [expr] - }; - } - else { - var arrow = false; - this.context.isBindingElement = true; - expr = this.inheritCoverGrammar(this.parseAssignmentExpression); - if (this.match(',')) { - var expressions = []; - this.context.isAssignmentTarget = false; - expressions.push(expr); - while (this.startMarker.index < this.scanner.length) { - if (!this.match(',')) { - break; - } - this.nextToken(); - if (this.match('...')) { - if (!this.context.isBindingElement) { - this.throwUnexpectedToken(this.lookahead); - } - expressions.push(this.parseRestElement(params)); - this.expect(')'); - if (!this.match('=>')) { - this.expect('=>'); - } - this.context.isBindingElement = false; - for (var i = 0; i < expressions.length; i++) { - this.reinterpretExpressionAsPattern(expressions[i]); - } - arrow = true; - expr = { - type: ArrowParameterPlaceHolder, - params: expressions - }; - } - else { - expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression)); - } - if (arrow) { - break; - } - } - if (!arrow) { - expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions)); - } - } - if (!arrow) { - this.expect(')'); - if (this.match('=>')) { - if (expr.type === syntax_1.Syntax.Identifier && expr.name === 'yield') { - arrow = true; - expr = { - type: ArrowParameterPlaceHolder, - params: [expr] - }; - } - if (!arrow) { - if (!this.context.isBindingElement) { - this.throwUnexpectedToken(this.lookahead); - } - if (expr.type === syntax_1.Syntax.SequenceExpression) { - for (var i = 0; i < expr.expressions.length; i++) { - this.reinterpretExpressionAsPattern(expr.expressions[i]); - } - } - else { - this.reinterpretExpressionAsPattern(expr); - } - var params_1 = (expr.type === syntax_1.Syntax.SequenceExpression ? expr.expressions : [expr]); - expr = { - type: ArrowParameterPlaceHolder, - params: params_1 - }; - } - } - this.context.isBindingElement = false; - } - } - } - return expr; - }; - // ECMA-262 12.3 Left-Hand-Side Expressions - Parser.prototype.parseArguments = function () { - this.expect('('); - var args = []; - if (!this.match(')')) { - while (true) { - var expr = this.match('...') ? this.parseSpreadElement() : - this.isolateCoverGrammar(this.parseAssignmentExpression); - args.push(expr); - if (this.match(')')) { - break; - } - this.expectCommaSeparator(); - } - } - this.expect(')'); - return args; - }; - Parser.prototype.isIdentifierName = function (token) { - return token.type === token_1.Token.Identifier || - token.type === token_1.Token.Keyword || - token.type === token_1.Token.BooleanLiteral || - token.type === token_1.Token.NullLiteral; - }; - Parser.prototype.parseIdentifierName = function () { - var node = this.createNode(); - var token = this.nextToken(); - if (!this.isIdentifierName(token)) { + JSXParser.prototype.parseJSXStringLiteralAttribute = function () { + var node = this.createJSXNode(); + var token = this.nextJSXToken(); + if (token.type !== 8 /* StringLiteral */) { this.throwUnexpectedToken(token); } - return this.finalize(node, new Node.Identifier(token.value)); - }; - Parser.prototype.parseNewExpression = function () { - var node = this.createNode(); - var id = this.parseIdentifierName(); - assert_1.assert(id.name === 'new', 'New expression must start with `new`'); - var expr; - if (this.match('.')) { - this.nextToken(); - if (this.lookahead.type === token_1.Token.Identifier && this.context.inFunctionBody && this.lookahead.value === 'target') { - var property = this.parseIdentifierName(); - expr = new Node.MetaProperty(id, property); - } - else { - this.throwUnexpectedToken(this.lookahead); - } - } - else { - var callee = this.isolateCoverGrammar(this.parseLeftHandSideExpression); - var args = this.match('(') ? this.parseArguments() : []; - expr = new Node.NewExpression(callee, args); - this.context.isAssignmentTarget = false; - this.context.isBindingElement = false; - } - return this.finalize(node, expr); - }; - Parser.prototype.parseLeftHandSideExpressionAllowCall = function () { - var startToken = this.lookahead; - var previousAllowIn = this.context.allowIn; - this.context.allowIn = true; - var expr; - if (this.matchKeyword('super') && this.context.inFunctionBody) { - expr = this.createNode(); - this.nextToken(); - expr = this.finalize(expr, new Node.Super()); - if (!this.match('(') && !this.match('.') && !this.match('[')) { - this.throwUnexpectedToken(this.lookahead); - } - } - else { - expr = this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression); - } - while (true) { - if (this.match('.')) { - this.context.isBindingElement = false; - this.context.isAssignmentTarget = true; - this.expect('.'); - var property = this.parseIdentifierName(); - expr = this.finalize(this.startNode(startToken), new Node.StaticMemberExpression(expr, property)); - } - else if (this.match('(')) { - this.context.isBindingElement = false; - this.context.isAssignmentTarget = false; - var args = this.parseArguments(); - expr = this.finalize(this.startNode(startToken), new Node.CallExpression(expr, args)); - } - else if (this.match('[')) { - this.context.isBindingElement = false; - this.context.isAssignmentTarget = true; - this.expect('['); - var property = this.isolateCoverGrammar(this.parseExpression); - this.expect(']'); - expr = this.finalize(this.startNode(startToken), new Node.ComputedMemberExpression(expr, property)); - } - else if (this.lookahead.type === token_1.Token.Template && this.lookahead.head) { - var quasi = this.parseTemplateLiteral(); - expr = this.finalize(this.startNode(startToken), new Node.TaggedTemplateExpression(expr, quasi)); - } - else { - break; - } - } - this.context.allowIn = previousAllowIn; - return expr; - }; - Parser.prototype.parseSuper = function () { - var node = this.createNode(); - this.expectKeyword('super'); - if (!this.match('[') && !this.match('.')) { - this.throwUnexpectedToken(this.lookahead); - } - return this.finalize(node, new Node.Super()); - }; - Parser.prototype.parseLeftHandSideExpression = function () { - assert_1.assert(this.context.allowIn, 'callee of new expression always allow in keyword.'); - var node = this.startNode(this.lookahead); - var expr = (this.matchKeyword('super') && this.context.inFunctionBody) ? this.parseSuper() : - this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression); - while (true) { - if (this.match('[')) { - this.context.isBindingElement = false; - this.context.isAssignmentTarget = true; - this.expect('['); - var property = this.isolateCoverGrammar(this.parseExpression); - this.expect(']'); - expr = this.finalize(node, new Node.ComputedMemberExpression(expr, property)); - } - else if (this.match('.')) { - this.context.isBindingElement = false; - this.context.isAssignmentTarget = true; - this.expect('.'); - var property = this.parseIdentifierName(); - expr = this.finalize(node, new Node.StaticMemberExpression(expr, property)); - } - else if (this.lookahead.type === token_1.Token.Template && this.lookahead.head) { - var quasi = this.parseTemplateLiteral(); - expr = this.finalize(node, new Node.TaggedTemplateExpression(expr, quasi)); - } - else { - break; - } - } - return expr; - }; - // ECMA-262 12.4 Update Expressions - Parser.prototype.parseUpdateExpression = function () { - var expr; - var startToken = this.lookahead; - if (this.match('++') || this.match('--')) { - var node = this.startNode(startToken); - var token = this.nextToken(); - expr = this.inheritCoverGrammar(this.parseUnaryExpression); - if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) { - this.tolerateError(messages_1.Messages.StrictLHSPrefix); - } - if (!this.context.isAssignmentTarget) { - this.tolerateError(messages_1.Messages.InvalidLHSInAssignment); - } - var prefix = true; - expr = this.finalize(node, new Node.UpdateExpression(token.value, expr, prefix)); - this.context.isAssignmentTarget = false; - this.context.isBindingElement = false; - } - else { - expr = this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall); - if (!this.hasLineTerminator && this.lookahead.type === token_1.Token.Punctuator) { - if (this.match('++') || this.match('--')) { - if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) { - this.tolerateError(messages_1.Messages.StrictLHSPostfix); - } - if (!this.context.isAssignmentTarget) { - this.tolerateError(messages_1.Messages.InvalidLHSInAssignment); - } - this.context.isAssignmentTarget = false; - this.context.isBindingElement = false; - var operator = this.nextToken().value; - var prefix = false; - expr = this.finalize(this.startNode(startToken), new Node.UpdateExpression(operator, expr, prefix)); - } - } - } - return expr; - }; - // ECMA-262 12.5 Unary Operators - Parser.prototype.parseUnaryExpression = function () { - var expr; - if (this.match('+') || this.match('-') || this.match('~') || this.match('!') || - this.matchKeyword('delete') || this.matchKeyword('void') || this.matchKeyword('typeof')) { - var node = this.startNode(this.lookahead); - var token = this.nextToken(); - expr = this.inheritCoverGrammar(this.parseUnaryExpression); - expr = this.finalize(node, new Node.UnaryExpression(token.value, expr)); - if (this.context.strict && expr.operator === 'delete' && expr.argument.type === syntax_1.Syntax.Identifier) { - this.tolerateError(messages_1.Messages.StrictDelete); - } - this.context.isAssignmentTarget = false; - this.context.isBindingElement = false; - } - else { - expr = this.parseUpdateExpression(); - } - return expr; - }; - Parser.prototype.parseExponentiationExpression = function () { - var startToken = this.lookahead; - var expr = this.inheritCoverGrammar(this.parseUnaryExpression); - if (expr.type !== syntax_1.Syntax.UnaryExpression && this.match('**')) { - this.nextToken(); - this.context.isAssignmentTarget = false; - this.context.isBindingElement = false; - var left = expr; - var right = this.isolateCoverGrammar(this.parseExponentiationExpression); - expr = this.finalize(this.startNode(startToken), new Node.BinaryExpression('**', left, right)); - } - return expr; - }; - // ECMA-262 12.6 Exponentiation Operators - // ECMA-262 12.7 Multiplicative Operators - // ECMA-262 12.8 Additive Operators - // ECMA-262 12.9 Bitwise Shift Operators - // ECMA-262 12.10 Relational Operators - // ECMA-262 12.11 Equality Operators - // ECMA-262 12.12 Binary Bitwise Operators - // ECMA-262 12.13 Binary Logical Operators - Parser.prototype.binaryPrecedence = function (token) { - var op = token.value; - var precedence; - if (token.type === token_1.Token.Punctuator) { - precedence = this.operatorPrecedence[op] || 0; - } - else if (token.type === token_1.Token.Keyword) { - precedence = (op === 'instanceof' || (this.context.allowIn && op === 'in')) ? 7 : 0; - } - else { - precedence = 0; - } - return precedence; - }; - Parser.prototype.parseBinaryExpression = function () { - var startToken = this.lookahead; - var expr = this.inheritCoverGrammar(this.parseExponentiationExpression); - var token = this.lookahead; - var prec = this.binaryPrecedence(token); - if (prec > 0) { - this.nextToken(); - token.prec = prec; - this.context.isAssignmentTarget = false; - this.context.isBindingElement = false; - var markers = [startToken, this.lookahead]; - var left = expr; - var right = this.isolateCoverGrammar(this.parseExponentiationExpression); - var stack = [left, token, right]; - while (true) { - prec = this.binaryPrecedence(this.lookahead); - if (prec <= 0) { - break; - } - // Reduce: make a binary expression from the three topmost entries. - while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) { - right = stack.pop(); - var operator = stack.pop().value; - left = stack.pop(); - markers.pop(); - var node = this.startNode(markers[markers.length - 1]); - stack.push(this.finalize(node, new Node.BinaryExpression(operator, left, right))); - } - // Shift. - token = this.nextToken(); - token.prec = prec; - stack.push(token); - markers.push(this.lookahead); - stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression)); - } - // Final reduce to clean-up the stack. - var i = stack.length - 1; - expr = stack[i]; - markers.pop(); - while (i > 1) { - var node = this.startNode(markers.pop()); - expr = this.finalize(node, new Node.BinaryExpression(stack[i - 1].value, stack[i - 2], expr)); - i -= 2; - } - } - return expr; - }; - // ECMA-262 12.14 Conditional Operator - Parser.prototype.parseConditionalExpression = function () { - var startToken = this.lookahead; - var expr = this.inheritCoverGrammar(this.parseBinaryExpression); - if (this.match('?')) { - this.nextToken(); - var previousAllowIn = this.context.allowIn; - this.context.allowIn = true; - var consequent = this.isolateCoverGrammar(this.parseAssignmentExpression); - this.context.allowIn = previousAllowIn; - this.expect(':'); - var alternate = this.isolateCoverGrammar(this.parseAssignmentExpression); - expr = this.finalize(this.startNode(startToken), new Node.ConditionalExpression(expr, consequent, alternate)); - this.context.isAssignmentTarget = false; - this.context.isBindingElement = false; - } - return expr; - }; - // ECMA-262 12.15 Assignment Operators - Parser.prototype.checkPatternParam = function (options, param) { - switch (param.type) { - case syntax_1.Syntax.Identifier: - this.validateParam(options, param, param.name); - break; - case syntax_1.Syntax.RestElement: - this.checkPatternParam(options, param.argument); - break; - case syntax_1.Syntax.AssignmentPattern: - this.checkPatternParam(options, param.left); - break; - case syntax_1.Syntax.ArrayPattern: - for (var i = 0; i < param.elements.length; i++) { - if (param.elements[i] !== null) { - this.checkPatternParam(options, param.elements[i]); - } - } - break; - case syntax_1.Syntax.YieldExpression: - break; - default: - assert_1.assert(param.type === syntax_1.Syntax.ObjectPattern, 'Invalid type'); - for (var i = 0; i < param.properties.length; i++) { - this.checkPatternParam(options, param.properties[i].value); - } - break; - } - }; - Parser.prototype.reinterpretAsCoverFormalsList = function (expr) { - var params = [expr]; - var options; - switch (expr.type) { - case syntax_1.Syntax.Identifier: - break; - case ArrowParameterPlaceHolder: - params = expr.params; - break; - default: - return null; - } - options = { - paramSet: {} - }; - for (var i = 0; i < params.length; ++i) { - var param = params[i]; - if (param.type === syntax_1.Syntax.AssignmentPattern) { - if (param.right.type === syntax_1.Syntax.YieldExpression) { - if (param.right.argument) { - this.throwUnexpectedToken(this.lookahead); - } - param.right.type = syntax_1.Syntax.Identifier; - param.right.name = 'yield'; - delete param.right.argument; - delete param.right.delegate; - } - } - this.checkPatternParam(options, param); - params[i] = param; - } - if (this.context.strict || !this.context.allowYield) { - for (var i = 0; i < params.length; ++i) { - var param = params[i]; - if (param.type === syntax_1.Syntax.YieldExpression) { - this.throwUnexpectedToken(this.lookahead); - } - } - } - if (options.message === messages_1.Messages.StrictParamDupe) { - var token = this.context.strict ? options.stricted : options.firstRestricted; - this.throwUnexpectedToken(token, options.message); - } - return { - params: params, - stricted: options.stricted, - firstRestricted: options.firstRestricted, - message: options.message - }; - }; - Parser.prototype.parseAssignmentExpression = function () { - var expr; - if (!this.context.allowYield && this.matchKeyword('yield')) { - expr = this.parseYieldExpression(); - } - else { - var startToken = this.lookahead; - var token = startToken; - expr = this.parseConditionalExpression(); - if (expr.type === ArrowParameterPlaceHolder || this.match('=>')) { - // ECMA-262 14.2 Arrow Function Definitions - this.context.isAssignmentTarget = false; - this.context.isBindingElement = false; - var list = this.reinterpretAsCoverFormalsList(expr); - if (list) { - if (this.hasLineTerminator) { - this.tolerateUnexpectedToken(this.lookahead); - } - this.context.firstCoverInitializedNameError = null; - var previousStrict = this.context.strict; - var previousAllowYield = this.context.allowYield; - this.context.allowYield = true; - var node = this.startNode(startToken); - this.expect('=>'); - var body = this.match('{') ? this.parseFunctionSourceElements() : - this.isolateCoverGrammar(this.parseAssignmentExpression); - var expression = body.type !== syntax_1.Syntax.BlockStatement; - if (this.context.strict && list.firstRestricted) { - this.throwUnexpectedToken(list.firstRestricted, list.message); - } - if (this.context.strict && list.stricted) { - this.tolerateUnexpectedToken(list.stricted, list.message); - } - expr = this.finalize(node, new Node.ArrowFunctionExpression(list.params, body, expression)); - this.context.strict = previousStrict; - this.context.allowYield = previousAllowYield; - } - } - else { - if (this.matchAssign()) { - if (!this.context.isAssignmentTarget) { - this.tolerateError(messages_1.Messages.InvalidLHSInAssignment); - } - if (this.context.strict && expr.type === syntax_1.Syntax.Identifier) { - var id = (expr); - if (this.scanner.isRestrictedWord(id.name)) { - this.tolerateUnexpectedToken(token, messages_1.Messages.StrictLHSAssignment); - } - if (this.scanner.isStrictModeReservedWord(id.name)) { - this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord); - } - } - if (!this.match('=')) { - this.context.isAssignmentTarget = false; - this.context.isBindingElement = false; - } - else { - this.reinterpretExpressionAsPattern(expr); - } - token = this.nextToken(); - var right = this.isolateCoverGrammar(this.parseAssignmentExpression); - expr = this.finalize(this.startNode(startToken), new Node.AssignmentExpression(token.value, expr, right)); - this.context.firstCoverInitializedNameError = null; - } - } - } - return expr; - }; - // ECMA-262 12.16 Comma Operator - Parser.prototype.parseExpression = function () { - var startToken = this.lookahead; - var expr = this.isolateCoverGrammar(this.parseAssignmentExpression); - if (this.match(',')) { - var expressions = []; - expressions.push(expr); - while (this.startMarker.index < this.scanner.length) { - if (!this.match(',')) { - break; - } - this.nextToken(); - expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression)); - } - expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions)); - } - return expr; - }; - // ECMA-262 13.2 Block - Parser.prototype.parseStatementListItem = function () { - var statement = null; - this.context.isAssignmentTarget = true; - this.context.isBindingElement = true; - if (this.lookahead.type === token_1.Token.Keyword) { - switch (this.lookahead.value) { - case 'export': - if (this.sourceType !== 'module') { - this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalExportDeclaration); - } - statement = this.parseExportDeclaration(); - break; - case 'import': - if (this.sourceType !== 'module') { - this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalImportDeclaration); - } - statement = this.parseImportDeclaration(); - break; - case 'const': - statement = this.parseLexicalDeclaration({ inFor: false }); - break; - case 'function': - statement = this.parseFunctionDeclaration(); - break; - case 'class': - statement = this.parseClassDeclaration(); - break; - case 'let': - statement = this.isLexicalDeclaration() ? this.parseLexicalDeclaration({ inFor: false }) : this.parseStatement(); - break; - default: - statement = this.parseStatement(); - break; - } - } - else { - statement = this.parseStatement(); - } - return statement; - }; - Parser.prototype.parseBlock = function () { - var node = this.createNode(); - this.expect('{'); - var block = []; - while (true) { - if (this.match('}')) { - break; - } - block.push(this.parseStatementListItem()); - } - this.expect('}'); - return this.finalize(node, new Node.BlockStatement(block)); - }; - // ECMA-262 13.3.1 Let and Const Declarations - Parser.prototype.parseLexicalBinding = function (kind, options) { - var node = this.createNode(); - var params = []; - var id = this.parsePattern(params, kind); - // ECMA-262 12.2.1 - if (this.context.strict && id.type === syntax_1.Syntax.Identifier) { - if (this.scanner.isRestrictedWord((id).name)) { - this.tolerateError(messages_1.Messages.StrictVarName); - } - } - var init = null; - if (kind === 'const') { - if (!this.matchKeyword('in') && !this.matchContextualKeyword('of')) { - this.expect('='); - init = this.isolateCoverGrammar(this.parseAssignmentExpression); - } - } - else if ((!options.inFor && id.type !== syntax_1.Syntax.Identifier) || this.match('=')) { - this.expect('='); - init = this.isolateCoverGrammar(this.parseAssignmentExpression); - } - return this.finalize(node, new Node.VariableDeclarator(id, init)); - }; - Parser.prototype.parseBindingList = function (kind, options) { - var list = [this.parseLexicalBinding(kind, options)]; - while (this.match(',')) { - this.nextToken(); - list.push(this.parseLexicalBinding(kind, options)); - } - return list; - }; - Parser.prototype.isLexicalDeclaration = function () { - var previousIndex = this.scanner.index; - var previousLineNumber = this.scanner.lineNumber; - var previousLineStart = this.scanner.lineStart; - this.collectComments(); - var next = this.scanner.lex(); - this.scanner.index = previousIndex; - this.scanner.lineNumber = previousLineNumber; - this.scanner.lineStart = previousLineStart; - return (next.type === token_1.Token.Identifier) || - (next.type === token_1.Token.Punctuator && next.value === '[') || - (next.type === token_1.Token.Punctuator && next.value === '{') || - (next.type === token_1.Token.Keyword && next.value === 'let') || - (next.type === token_1.Token.Keyword && next.value === 'yield'); - }; - Parser.prototype.parseLexicalDeclaration = function (options) { - var node = this.createNode(); - var kind = this.nextToken().value; - assert_1.assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const'); - var declarations = this.parseBindingList(kind, options); - this.consumeSemicolon(); - return this.finalize(node, new Node.VariableDeclaration(declarations, kind)); - }; - // ECMA-262 13.3.3 Destructuring Binding Patterns - Parser.prototype.parseBindingRestElement = function (params, kind) { - var node = this.createNode(); - this.expect('...'); - var arg = this.parsePattern(params, kind); - return this.finalize(node, new Node.RestElement(arg)); - }; - Parser.prototype.parseArrayPattern = function (params, kind) { - var node = this.createNode(); - this.expect('['); - var elements = []; - while (!this.match(']')) { - if (this.match(',')) { - this.nextToken(); - elements.push(null); - } - else { - if (this.match('...')) { - elements.push(this.parseBindingRestElement(params, kind)); - break; - } - else { - elements.push(this.parsePatternWithDefault(params, kind)); - } - if (!this.match(']')) { - this.expect(','); - } - } - } - this.expect(']'); - return this.finalize(node, new Node.ArrayPattern(elements)); - }; - Parser.prototype.parsePropertyPattern = function (params, kind) { - var node = this.createNode(); - var computed = false; - var shorthand = false; - var method = false; - var key; - var value; - if (this.lookahead.type === token_1.Token.Identifier) { - var keyToken = this.lookahead; - key = this.parseVariableIdentifier(); - var init = this.finalize(node, new Node.Identifier(keyToken.value)); - if (this.match('=')) { - params.push(keyToken); - shorthand = true; - this.nextToken(); - var expr = this.parseAssignmentExpression(); - value = this.finalize(this.startNode(keyToken), new Node.AssignmentPattern(init, expr)); - } - else if (!this.match(':')) { - params.push(keyToken); - shorthand = true; - value = init; - } - else { - this.expect(':'); - value = this.parsePatternWithDefault(params, kind); - } - } - else { - computed = this.match('['); - key = this.parseObjectPropertyKey(); - this.expect(':'); - value = this.parsePatternWithDefault(params, kind); - } - return this.finalize(node, new Node.Property('init', key, computed, value, method, shorthand)); - }; - Parser.prototype.parseObjectPattern = function (params, kind) { - var node = this.createNode(); - var properties = []; - this.expect('{'); - while (!this.match('}')) { - properties.push(this.parsePropertyPattern(params, kind)); - if (!this.match('}')) { - this.expect(','); - } - } - this.expect('}'); - return this.finalize(node, new Node.ObjectPattern(properties)); - }; - Parser.prototype.parsePattern = function (params, kind) { - var pattern; - if (this.match('[')) { - pattern = this.parseArrayPattern(params, kind); - } - else if (this.match('{')) { - pattern = this.parseObjectPattern(params, kind); - } - else { - if (this.matchKeyword('let') && (kind === 'const' || kind === 'let')) { - this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.UnexpectedToken); - } - params.push(this.lookahead); - pattern = this.parseVariableIdentifier(kind); - } - return pattern; - }; - Parser.prototype.parsePatternWithDefault = function (params, kind) { - var startToken = this.lookahead; - var pattern = this.parsePattern(params, kind); - if (this.match('=')) { - this.nextToken(); - var previousAllowYield = this.context.allowYield; - this.context.allowYield = true; - var right = this.isolateCoverGrammar(this.parseAssignmentExpression); - this.context.allowYield = previousAllowYield; - pattern = this.finalize(this.startNode(startToken), new Node.AssignmentPattern(pattern, right)); - } - return pattern; - }; - // ECMA-262 13.3.2 Variable Statement - Parser.prototype.parseVariableIdentifier = function (kind) { - var node = this.createNode(); - var token = this.nextToken(); - if (token.type === token_1.Token.Keyword && token.value === 'yield') { - if (this.context.strict) { - this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord); - } - if (!this.context.allowYield) { - this.throwUnexpectedToken(token); - } - } - else if (token.type !== token_1.Token.Identifier) { - if (this.context.strict && token.type === token_1.Token.Keyword && this.scanner.isStrictModeReservedWord(token.value)) { - this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord); - } - else { - if (this.context.strict || token.value !== 'let' || kind !== 'var') { - this.throwUnexpectedToken(token); - } - } - } - else if (this.sourceType === 'module' && token.type === token_1.Token.Identifier && token.value === 'await') { - this.tolerateUnexpectedToken(token); - } - return this.finalize(node, new Node.Identifier(token.value)); - }; - Parser.prototype.parseVariableDeclaration = function (options) { - var node = this.createNode(); - var params = []; - var id = this.parsePattern(params, 'var'); - // ECMA-262 12.2.1 - if (this.context.strict && id.type === syntax_1.Syntax.Identifier) { - if (this.scanner.isRestrictedWord((id).name)) { - this.tolerateError(messages_1.Messages.StrictVarName); - } - } - var init = null; - if (this.match('=')) { - this.nextToken(); - init = this.isolateCoverGrammar(this.parseAssignmentExpression); - } - else if (id.type !== syntax_1.Syntax.Identifier && !options.inFor) { - this.expect('='); - } - return this.finalize(node, new Node.VariableDeclarator(id, init)); - }; - Parser.prototype.parseVariableDeclarationList = function (options) { - var opt = { inFor: options.inFor }; - var list = []; - list.push(this.parseVariableDeclaration(opt)); - while (this.match(',')) { - this.nextToken(); - list.push(this.parseVariableDeclaration(opt)); - } - return list; - }; - Parser.prototype.parseVariableStatement = function () { - var node = this.createNode(); - this.expectKeyword('var'); - var declarations = this.parseVariableDeclarationList({ inFor: false }); - this.consumeSemicolon(); - return this.finalize(node, new Node.VariableDeclaration(declarations, 'var')); - }; - // ECMA-262 13.4 Empty Statement - Parser.prototype.parseEmptyStatement = function () { - var node = this.createNode(); - this.expect(';'); - return this.finalize(node, new Node.EmptyStatement()); - }; - // ECMA-262 13.5 Expression Statement - Parser.prototype.parseExpressionStatement = function () { - var node = this.createNode(); - var expr = this.parseExpression(); - this.consumeSemicolon(); - return this.finalize(node, new Node.ExpressionStatement(expr)); - }; - // ECMA-262 13.6 If statement - Parser.prototype.parseIfStatement = function () { - var node = this.createNode(); - var consequent; - var alternate = null; - this.expectKeyword('if'); - this.expect('('); - var test = this.parseExpression(); - if (!this.match(')') && this.config.tolerant) { - this.tolerateUnexpectedToken(this.nextToken()); - consequent = this.finalize(this.createNode(), new Node.EmptyStatement()); - } - else { - this.expect(')'); - consequent = this.parseStatement(); - if (this.matchKeyword('else')) { - this.nextToken(); - alternate = this.parseStatement(); - } - } - return this.finalize(node, new Node.IfStatement(test, consequent, alternate)); - }; - // ECMA-262 13.7.2 The do-while Statement - Parser.prototype.parseDoWhileStatement = function () { - var node = this.createNode(); - this.expectKeyword('do'); - var previousInIteration = this.context.inIteration; - this.context.inIteration = true; - var body = this.parseStatement(); - this.context.inIteration = previousInIteration; - this.expectKeyword('while'); - this.expect('('); - var test = this.parseExpression(); - this.expect(')'); - if (this.match(';')) { - this.nextToken(); - } - return this.finalize(node, new Node.DoWhileStatement(body, test)); - }; - // ECMA-262 13.7.3 The while Statement - Parser.prototype.parseWhileStatement = function () { - var node = this.createNode(); - var body; - this.expectKeyword('while'); - this.expect('('); - var test = this.parseExpression(); - if (!this.match(')') && this.config.tolerant) { - this.tolerateUnexpectedToken(this.nextToken()); - body = this.finalize(this.createNode(), new Node.EmptyStatement()); - } - else { - this.expect(')'); - var previousInIteration = this.context.inIteration; - this.context.inIteration = true; - body = this.parseStatement(); - this.context.inIteration = previousInIteration; - } - return this.finalize(node, new Node.WhileStatement(test, body)); - }; - // ECMA-262 13.7.4 The for Statement - // ECMA-262 13.7.5 The for-in and for-of Statements - Parser.prototype.parseForStatement = function () { - var init = null; - var test = null; - var update = null; - var forIn = true; - var left, right; - var node = this.createNode(); - this.expectKeyword('for'); - this.expect('('); - if (this.match(';')) { - this.nextToken(); - } - else { - if (this.matchKeyword('var')) { - init = this.createNode(); - this.nextToken(); - var previousAllowIn = this.context.allowIn; - this.context.allowIn = false; - var declarations = this.parseVariableDeclarationList({ inFor: true }); - this.context.allowIn = previousAllowIn; - if (declarations.length === 1 && this.matchKeyword('in')) { - var decl = declarations[0]; - if (decl.init && (decl.id.type === syntax_1.Syntax.ArrayPattern || decl.id.type === syntax_1.Syntax.ObjectPattern || this.context.strict)) { - this.tolerateError(messages_1.Messages.ForInOfLoopInitializer, 'for-in'); - } - init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var')); - this.nextToken(); - left = init; - right = this.parseExpression(); - init = null; - } - else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) { - init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var')); - this.nextToken(); - left = init; - right = this.parseAssignmentExpression(); - init = null; - forIn = false; - } - else { - init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var')); - this.expect(';'); - } - } - else if (this.matchKeyword('const') || this.matchKeyword('let')) { - init = this.createNode(); - var kind = this.nextToken().value; - if (!this.context.strict && this.lookahead.value === 'in') { - init = this.finalize(init, new Node.Identifier(kind)); - this.nextToken(); - left = init; - right = this.parseExpression(); - init = null; - } - else { - var previousAllowIn = this.context.allowIn; - this.context.allowIn = false; - var declarations = this.parseBindingList(kind, { inFor: true }); - this.context.allowIn = previousAllowIn; - if (declarations.length === 1 && declarations[0].init === null && this.matchKeyword('in')) { - init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)); - this.nextToken(); - left = init; - right = this.parseExpression(); - init = null; - } - else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) { - init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)); - this.nextToken(); - left = init; - right = this.parseAssignmentExpression(); - init = null; - forIn = false; - } - else { - this.consumeSemicolon(); - init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)); - } - } - } - else { - var initStartToken = this.lookahead; - var previousAllowIn = this.context.allowIn; - this.context.allowIn = false; - init = this.inheritCoverGrammar(this.parseAssignmentExpression); - this.context.allowIn = previousAllowIn; - if (this.matchKeyword('in')) { - if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) { - this.tolerateError(messages_1.Messages.InvalidLHSInForIn); - } - this.nextToken(); - this.reinterpretExpressionAsPattern(init); - left = init; - right = this.parseExpression(); - init = null; - } - else if (this.matchContextualKeyword('of')) { - if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) { - this.tolerateError(messages_1.Messages.InvalidLHSInForLoop); - } - this.nextToken(); - this.reinterpretExpressionAsPattern(init); - left = init; - right = this.parseAssignmentExpression(); - init = null; - forIn = false; - } - else { - if (this.match(',')) { - var initSeq = [init]; - while (this.match(',')) { - this.nextToken(); - initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression)); - } - init = this.finalize(this.startNode(initStartToken), new Node.SequenceExpression(initSeq)); - } - this.expect(';'); - } - } - } - if (typeof left === 'undefined') { - if (!this.match(';')) { - test = this.parseExpression(); - } - this.expect(';'); - if (!this.match(')')) { - update = this.parseExpression(); - } - } - var body; - if (!this.match(')') && this.config.tolerant) { - this.tolerateUnexpectedToken(this.nextToken()); - body = this.finalize(this.createNode(), new Node.EmptyStatement()); - } - else { - this.expect(')'); - var previousInIteration = this.context.inIteration; - this.context.inIteration = true; - body = this.isolateCoverGrammar(this.parseStatement); - this.context.inIteration = previousInIteration; - } - return (typeof left === 'undefined') ? - this.finalize(node, new Node.ForStatement(init, test, update, body)) : - forIn ? this.finalize(node, new Node.ForInStatement(left, right, body)) : - this.finalize(node, new Node.ForOfStatement(left, right, body)); - }; - // ECMA-262 13.8 The continue statement - Parser.prototype.parseContinueStatement = function () { - var node = this.createNode(); - this.expectKeyword('continue'); - var label = null; - if (this.lookahead.type === token_1.Token.Identifier && !this.hasLineTerminator) { - label = this.parseVariableIdentifier(); - var key = '$' + label.name; - if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) { - this.throwError(messages_1.Messages.UnknownLabel, label.name); - } - } - this.consumeSemicolon(); - if (label === null && !this.context.inIteration) { - this.throwError(messages_1.Messages.IllegalContinue); - } - return this.finalize(node, new Node.ContinueStatement(label)); - }; - // ECMA-262 13.9 The break statement - Parser.prototype.parseBreakStatement = function () { - var node = this.createNode(); - this.expectKeyword('break'); - var label = null; - if (this.lookahead.type === token_1.Token.Identifier && !this.hasLineTerminator) { - label = this.parseVariableIdentifier(); - var key = '$' + label.name; - if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) { - this.throwError(messages_1.Messages.UnknownLabel, label.name); - } - } - this.consumeSemicolon(); - if (label === null && !this.context.inIteration && !this.context.inSwitch) { - this.throwError(messages_1.Messages.IllegalBreak); - } - return this.finalize(node, new Node.BreakStatement(label)); - }; - // ECMA-262 13.10 The return statement - Parser.prototype.parseReturnStatement = function () { - if (!this.context.inFunctionBody) { - this.tolerateError(messages_1.Messages.IllegalReturn); - } - var node = this.createNode(); - this.expectKeyword('return'); - var hasArgument = !this.match(';') && !this.match('}') && - !this.hasLineTerminator && this.lookahead.type !== token_1.Token.EOF; - var argument = hasArgument ? this.parseExpression() : null; - this.consumeSemicolon(); - return this.finalize(node, new Node.ReturnStatement(argument)); - }; - // ECMA-262 13.11 The with statement - Parser.prototype.parseWithStatement = function () { - if (this.context.strict) { - this.tolerateError(messages_1.Messages.StrictModeWith); - } - var node = this.createNode(); - this.expectKeyword('with'); - this.expect('('); - var object = this.parseExpression(); - this.expect(')'); - var body = this.parseStatement(); - return this.finalize(node, new Node.WithStatement(object, body)); - }; - // ECMA-262 13.12 The switch statement - Parser.prototype.parseSwitchCase = function () { - var node = this.createNode(); - var test; - if (this.matchKeyword('default')) { - this.nextToken(); - test = null; - } - else { - this.expectKeyword('case'); - test = this.parseExpression(); - } - this.expect(':'); - var consequent = []; - while (true) { - if (this.match('}') || this.matchKeyword('default') || this.matchKeyword('case')) { - break; - } - consequent.push(this.parseStatementListItem()); - } - return this.finalize(node, new Node.SwitchCase(test, consequent)); - }; - Parser.prototype.parseSwitchStatement = function () { - var node = this.createNode(); - this.expectKeyword('switch'); - this.expect('('); - var discriminant = this.parseExpression(); - this.expect(')'); - var previousInSwitch = this.context.inSwitch; - this.context.inSwitch = true; - var cases = []; - var defaultFound = false; - this.expect('{'); - while (true) { - if (this.match('}')) { - break; - } - var clause = this.parseSwitchCase(); - if (clause.test === null) { - if (defaultFound) { - this.throwError(messages_1.Messages.MultipleDefaultsInSwitch); - } - defaultFound = true; - } - cases.push(clause); - } - this.expect('}'); - this.context.inSwitch = previousInSwitch; - return this.finalize(node, new Node.SwitchStatement(discriminant, cases)); - }; - // ECMA-262 13.13 Labelled Statements - Parser.prototype.parseLabelledStatement = function () { - var node = this.createNode(); - var expr = this.parseExpression(); - var statement; - if ((expr.type === syntax_1.Syntax.Identifier) && this.match(':')) { - this.nextToken(); - var id = (expr); - var key = '$' + id.name; - if (Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) { - this.throwError(messages_1.Messages.Redeclaration, 'Label', id.name); - } - this.context.labelSet[key] = true; - var labeledBody = this.parseStatement(); - delete this.context.labelSet[key]; - statement = new Node.LabeledStatement(id, labeledBody); - } - else { - this.consumeSemicolon(); - statement = new Node.ExpressionStatement(expr); - } - return this.finalize(node, statement); - }; - // ECMA-262 13.14 The throw statement - Parser.prototype.parseThrowStatement = function () { - var node = this.createNode(); - this.expectKeyword('throw'); - if (this.hasLineTerminator) { - this.throwError(messages_1.Messages.NewlineAfterThrow); - } - var argument = this.parseExpression(); - this.consumeSemicolon(); - return this.finalize(node, new Node.ThrowStatement(argument)); - }; - // ECMA-262 13.15 The try statement - Parser.prototype.parseCatchClause = function () { - var node = this.createNode(); - this.expectKeyword('catch'); - this.expect('('); - if (this.match(')')) { - this.throwUnexpectedToken(this.lookahead); - } - var params = []; - var param = this.parsePattern(params); - var paramMap = {}; - for (var i = 0; i < params.length; i++) { - var key = '$' + params[i].value; - if (Object.prototype.hasOwnProperty.call(paramMap, key)) { - this.tolerateError(messages_1.Messages.DuplicateBinding, params[i].value); - } - paramMap[key] = true; - } - if (this.context.strict && param.type === syntax_1.Syntax.Identifier) { - if (this.scanner.isRestrictedWord((param).name)) { - this.tolerateError(messages_1.Messages.StrictCatchVariable); - } - } - this.expect(')'); - var body = this.parseBlock(); - return this.finalize(node, new Node.CatchClause(param, body)); - }; - Parser.prototype.parseFinallyClause = function () { - this.expectKeyword('finally'); - return this.parseBlock(); - }; - Parser.prototype.parseTryStatement = function () { - var node = this.createNode(); - this.expectKeyword('try'); - var block = this.parseBlock(); - var handler = this.matchKeyword('catch') ? this.parseCatchClause() : null; - var finalizer = this.matchKeyword('finally') ? this.parseFinallyClause() : null; - if (!handler && !finalizer) { - this.throwError(messages_1.Messages.NoCatchOrFinally); - } - return this.finalize(node, new Node.TryStatement(block, handler, finalizer)); - }; - // ECMA-262 13.16 The debugger statement - Parser.prototype.parseDebuggerStatement = function () { - var node = this.createNode(); - this.expectKeyword('debugger'); - this.consumeSemicolon(); - return this.finalize(node, new Node.DebuggerStatement()); - }; - // ECMA-262 13 Statements - Parser.prototype.parseStatement = function () { - var statement = null; - switch (this.lookahead.type) { - case token_1.Token.BooleanLiteral: - case token_1.Token.NullLiteral: - case token_1.Token.NumericLiteral: - case token_1.Token.StringLiteral: - case token_1.Token.Template: - case token_1.Token.RegularExpression: - statement = this.parseExpressionStatement(); - break; - case token_1.Token.Punctuator: - var value = this.lookahead.value; - if (value === '{') { - statement = this.parseBlock(); - } - else if (value === '(') { - statement = this.parseExpressionStatement(); - } - else if (value === ';') { - statement = this.parseEmptyStatement(); - } - else { - statement = this.parseExpressionStatement(); - } - break; - case token_1.Token.Identifier: - statement = this.parseLabelledStatement(); - break; - case token_1.Token.Keyword: - switch (this.lookahead.value) { - case 'break': - statement = this.parseBreakStatement(); - break; - case 'continue': - statement = this.parseContinueStatement(); - break; - case 'debugger': - statement = this.parseDebuggerStatement(); - break; - case 'do': - statement = this.parseDoWhileStatement(); - break; - case 'for': - statement = this.parseForStatement(); - break; - case 'function': - statement = this.parseFunctionDeclaration(); - break; - case 'if': - statement = this.parseIfStatement(); - break; - case 'return': - statement = this.parseReturnStatement(); - break; - case 'switch': - statement = this.parseSwitchStatement(); - break; - case 'throw': - statement = this.parseThrowStatement(); - break; - case 'try': - statement = this.parseTryStatement(); - break; - case 'var': - statement = this.parseVariableStatement(); - break; - case 'while': - statement = this.parseWhileStatement(); - break; - case 'with': - statement = this.parseWithStatement(); - break; - default: - statement = this.parseExpressionStatement(); - break; - } - break; - default: - this.throwUnexpectedToken(this.lookahead); - } - return statement; - }; - // ECMA-262 14.1 Function Definition - Parser.prototype.parseFunctionSourceElements = function () { - var node = this.createNode(); - this.expect('{'); - var body = this.parseDirectivePrologues(); - var previousLabelSet = this.context.labelSet; - var previousInIteration = this.context.inIteration; - var previousInSwitch = this.context.inSwitch; - var previousInFunctionBody = this.context.inFunctionBody; - this.context.labelSet = {}; - this.context.inIteration = false; - this.context.inSwitch = false; - this.context.inFunctionBody = true; - while (this.startMarker.index < this.scanner.length) { - if (this.match('}')) { - break; - } - body.push(this.parseStatementListItem()); - } - this.expect('}'); - this.context.labelSet = previousLabelSet; - this.context.inIteration = previousInIteration; - this.context.inSwitch = previousInSwitch; - this.context.inFunctionBody = previousInFunctionBody; - return this.finalize(node, new Node.BlockStatement(body)); - }; - Parser.prototype.validateParam = function (options, param, name) { - var key = '$' + name; - if (this.context.strict) { - if (this.scanner.isRestrictedWord(name)) { - options.stricted = param; - options.message = messages_1.Messages.StrictParamName; - } - if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) { - options.stricted = param; - options.message = messages_1.Messages.StrictParamDupe; - } - } - else if (!options.firstRestricted) { - if (this.scanner.isRestrictedWord(name)) { - options.firstRestricted = param; - options.message = messages_1.Messages.StrictParamName; - } - else if (this.scanner.isStrictModeReservedWord(name)) { - options.firstRestricted = param; - options.message = messages_1.Messages.StrictReservedWord; - } - else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) { - options.stricted = param; - options.message = messages_1.Messages.StrictParamDupe; - } - } - /* istanbul ignore next */ - if (typeof Object.defineProperty === 'function') { - Object.defineProperty(options.paramSet, key, { value: true, enumerable: true, writable: true, configurable: true }); - } - else { - options.paramSet[key] = true; - } - }; - Parser.prototype.parseRestElement = function (params) { - var node = this.createNode(); - this.expect('...'); - var arg = this.parsePattern(params); - if (this.match('=')) { - this.throwError(messages_1.Messages.DefaultRestParameter); - } - if (!this.match(')')) { - this.throwError(messages_1.Messages.ParameterAfterRestParameter); - } - return this.finalize(node, new Node.RestElement(arg)); - }; - Parser.prototype.parseFormalParameter = function (options) { - var params = []; - var param = this.match('...') ? this.parseRestElement(params) : this.parsePatternWithDefault(params); - for (var i = 0; i < params.length; i++) { - this.validateParam(options, params[i], params[i].value); - } - options.params.push(param); - return !this.match(')'); - }; - Parser.prototype.parseFormalParameters = function (firstRestricted) { - var options; - options = { - params: [], - firstRestricted: firstRestricted - }; - this.expect('('); - if (!this.match(')')) { - options.paramSet = {}; - while (this.startMarker.index < this.scanner.length) { - if (!this.parseFormalParameter(options)) { - break; - } - this.expect(','); - } - } - this.expect(')'); - return { - params: options.params, - stricted: options.stricted, - firstRestricted: options.firstRestricted, - message: options.message - }; - }; - Parser.prototype.parseFunctionDeclaration = function (identifierIsOptional) { - var node = this.createNode(); - this.expectKeyword('function'); - var isGenerator = this.match('*'); - if (isGenerator) { - this.nextToken(); - } - var message; - var id = null; - var firstRestricted = null; - if (!identifierIsOptional || !this.match('(')) { - var token = this.lookahead; - id = this.parseVariableIdentifier(); - if (this.context.strict) { - if (this.scanner.isRestrictedWord(token.value)) { - this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName); - } - } - else { - if (this.scanner.isRestrictedWord(token.value)) { - firstRestricted = token; - message = messages_1.Messages.StrictFunctionName; - } - else if (this.scanner.isStrictModeReservedWord(token.value)) { - firstRestricted = token; - message = messages_1.Messages.StrictReservedWord; - } - } - } - var previousAllowYield = this.context.allowYield; - this.context.allowYield = !isGenerator; - var formalParameters = this.parseFormalParameters(firstRestricted); - var params = formalParameters.params; - var stricted = formalParameters.stricted; - firstRestricted = formalParameters.firstRestricted; - if (formalParameters.message) { - message = formalParameters.message; - } - var previousStrict = this.context.strict; - var body = this.parseFunctionSourceElements(); - if (this.context.strict && firstRestricted) { - this.throwUnexpectedToken(firstRestricted, message); - } - if (this.context.strict && stricted) { - this.tolerateUnexpectedToken(stricted, message); - } - this.context.strict = previousStrict; - this.context.allowYield = previousAllowYield; - return this.finalize(node, new Node.FunctionDeclaration(id, params, body, isGenerator)); - }; - Parser.prototype.parseFunctionExpression = function () { - var node = this.createNode(); - this.expectKeyword('function'); - var isGenerator = this.match('*'); - if (isGenerator) { - this.nextToken(); - } - var message; - var id = null; - var firstRestricted; - var previousAllowYield = this.context.allowYield; - this.context.allowYield = !isGenerator; - if (!this.match('(')) { - var token = this.lookahead; - id = (!this.context.strict && !isGenerator && this.matchKeyword('yield')) ? this.parseIdentifierName() : this.parseVariableIdentifier(); - if (this.context.strict) { - if (this.scanner.isRestrictedWord(token.value)) { - this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName); - } - } - else { - if (this.scanner.isRestrictedWord(token.value)) { - firstRestricted = token; - message = messages_1.Messages.StrictFunctionName; - } - else if (this.scanner.isStrictModeReservedWord(token.value)) { - firstRestricted = token; - message = messages_1.Messages.StrictReservedWord; - } - } - } - var formalParameters = this.parseFormalParameters(firstRestricted); - var params = formalParameters.params; - var stricted = formalParameters.stricted; - firstRestricted = formalParameters.firstRestricted; - if (formalParameters.message) { - message = formalParameters.message; - } - var previousStrict = this.context.strict; - var body = this.parseFunctionSourceElements(); - if (this.context.strict && firstRestricted) { - this.throwUnexpectedToken(firstRestricted, message); - } - if (this.context.strict && stricted) { - this.tolerateUnexpectedToken(stricted, message); - } - this.context.strict = previousStrict; - this.context.allowYield = previousAllowYield; - return this.finalize(node, new Node.FunctionExpression(id, params, body, isGenerator)); - }; - // ECMA-262 14.1.1 Directive Prologues - Parser.prototype.parseDirective = function () { - var token = this.lookahead; - var directive = null; - var node = this.createNode(); - var expr = this.parseExpression(); - if (expr.type === syntax_1.Syntax.Literal) { - directive = this.getTokenRaw(token).slice(1, -1); - } - this.consumeSemicolon(); - return this.finalize(node, directive ? new Node.Directive(expr, directive) : - new Node.ExpressionStatement(expr)); - }; - Parser.prototype.parseDirectivePrologues = function () { - var firstRestricted = null; - var body = []; - while (true) { - var token = this.lookahead; - if (token.type !== token_1.Token.StringLiteral) { - break; - } - var statement = this.parseDirective(); - body.push(statement); - var directive = statement.directive; - if (typeof directive !== 'string') { - break; - } - if (directive === 'use strict') { - this.context.strict = true; - if (firstRestricted) { - this.tolerateUnexpectedToken(firstRestricted, messages_1.Messages.StrictOctalLiteral); - } - } - else { - if (!firstRestricted && token.octal) { - firstRestricted = token; - } - } - } - return body; - }; - // ECMA-262 14.3 Method Definitions - Parser.prototype.qualifiedPropertyName = function (token) { - switch (token.type) { - case token_1.Token.Identifier: - case token_1.Token.StringLiteral: - case token_1.Token.BooleanLiteral: - case token_1.Token.NullLiteral: - case token_1.Token.NumericLiteral: - case token_1.Token.Keyword: - return true; - case token_1.Token.Punctuator: - return token.value === '['; - } - return false; - }; - Parser.prototype.parseGetterMethod = function () { - var node = this.createNode(); - this.expect('('); - this.expect(')'); - var isGenerator = false; - var params = { - params: [], - stricted: null, - firstRestricted: null, - message: null - }; - var previousAllowYield = this.context.allowYield; - this.context.allowYield = false; - var method = this.parsePropertyMethod(params); - this.context.allowYield = previousAllowYield; - return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator)); - }; - Parser.prototype.parseSetterMethod = function () { - var node = this.createNode(); - var options = { - params: [], - firstRestricted: null, - paramSet: {} - }; - var isGenerator = false; - var previousAllowYield = this.context.allowYield; - this.context.allowYield = false; - this.expect('('); - if (this.match(')')) { - this.tolerateUnexpectedToken(this.lookahead); - } - else { - this.parseFormalParameter(options); - } - this.expect(')'); - var method = this.parsePropertyMethod(options); - this.context.allowYield = previousAllowYield; - return this.finalize(node, new Node.FunctionExpression(null, options.params, method, isGenerator)); - }; - Parser.prototype.parseGeneratorMethod = function () { - var node = this.createNode(); - var isGenerator = true; - var previousAllowYield = this.context.allowYield; - this.context.allowYield = true; - var params = this.parseFormalParameters(); - this.context.allowYield = false; - var method = this.parsePropertyMethod(params); - this.context.allowYield = previousAllowYield; - return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator)); - }; - // ECMA-262 14.4 Generator Function Definitions - Parser.prototype.isStartOfExpression = function () { - var start = true; - var value = this.lookahead.value; - switch (this.lookahead.type) { - case token_1.Token.Punctuator: - start = (value === '[') || (value === '(') || (value === '{') || - (value === '+') || (value === '-') || - (value === '!') || (value === '~') || - (value === '++') || (value === '--') || - (value === '/') || (value === '/='); // regular expression literal - break; - case token_1.Token.Keyword: - start = (value === 'class') || (value === 'delete') || - (value === 'function') || (value === 'let') || (value === 'new') || - (value === 'super') || (value === 'this') || (value === 'typeof') || - (value === 'void') || (value === 'yield'); - break; - default: - break; - } - return start; - }; - Parser.prototype.parseYieldExpression = function () { - var node = this.createNode(); - this.expectKeyword('yield'); - var argument = null; - var delegate = false; - if (!this.hasLineTerminator) { - var previousAllowYield = this.context.allowYield; - this.context.allowYield = false; - delegate = this.match('*'); - if (delegate) { - this.nextToken(); - argument = this.parseAssignmentExpression(); - } - else if (this.isStartOfExpression()) { - argument = this.parseAssignmentExpression(); - } - this.context.allowYield = previousAllowYield; - } - return this.finalize(node, new Node.YieldExpression(argument, delegate)); - }; - // ECMA-262 14.5 Class Definitions - Parser.prototype.parseClassElement = function (hasConstructor) { - var token = this.lookahead; - var node = this.createNode(); - var kind; - var key; - var value; - var computed = false; - var method = false; - var isStatic = false; - if (this.match('*')) { - this.nextToken(); - } - else { - computed = this.match('['); - key = this.parseObjectPropertyKey(); - var id = key; - if (id.name === 'static' && (this.qualifiedPropertyName(this.lookahead) || this.match('*'))) { - token = this.lookahead; - isStatic = true; - computed = this.match('['); - if (this.match('*')) { - this.nextToken(); - } - else { - key = this.parseObjectPropertyKey(); - } - } - } - var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead); - if (token.type === token_1.Token.Identifier) { - if (token.value === 'get' && lookaheadPropertyKey) { - kind = 'get'; - computed = this.match('['); - key = this.parseObjectPropertyKey(); - this.context.allowYield = false; - value = this.parseGetterMethod(); - } - else if (token.value === 'set' && lookaheadPropertyKey) { - kind = 'set'; - computed = this.match('['); - key = this.parseObjectPropertyKey(); - value = this.parseSetterMethod(); - } - } - else if (token.type === token_1.Token.Punctuator && token.value === '*' && lookaheadPropertyKey) { - kind = 'init'; - computed = this.match('['); - key = this.parseObjectPropertyKey(); - value = this.parseGeneratorMethod(); - method = true; - } - if (!kind && key && this.match('(')) { - kind = 'init'; - value = this.parsePropertyMethodFunction(); - method = true; - } - if (!kind) { - this.throwUnexpectedToken(this.lookahead); - } - if (kind === 'init') { - kind = 'method'; - } - if (!computed) { - if (isStatic && this.isPropertyKey(key, 'prototype')) { - this.throwUnexpectedToken(token, messages_1.Messages.StaticPrototype); - } - if (!isStatic && this.isPropertyKey(key, 'constructor')) { - if (kind !== 'method' || !method || value.generator) { - this.throwUnexpectedToken(token, messages_1.Messages.ConstructorSpecialMethod); - } - if (hasConstructor.value) { - this.throwUnexpectedToken(token, messages_1.Messages.DuplicateConstructor); - } - else { - hasConstructor.value = true; - } - kind = 'constructor'; - } - } - return this.finalize(node, new Node.MethodDefinition(key, computed, value, kind, isStatic)); - }; - Parser.prototype.parseClassElementList = function () { - var body = []; - var hasConstructor = { value: false }; - this.expect('{'); - while (!this.match('}')) { - if (this.match(';')) { - this.nextToken(); - } - else { - body.push(this.parseClassElement(hasConstructor)); - } - } - this.expect('}'); - return body; - }; - Parser.prototype.parseClassBody = function () { - var node = this.createNode(); - var elementList = this.parseClassElementList(); - return this.finalize(node, new Node.ClassBody(elementList)); - }; - Parser.prototype.parseClassDeclaration = function (identifierIsOptional) { - var node = this.createNode(); - var previousStrict = this.context.strict; - this.context.strict = true; - this.expectKeyword('class'); - var id = (identifierIsOptional && (this.lookahead.type !== token_1.Token.Identifier)) ? null : this.parseVariableIdentifier(); - var superClass = null; - if (this.matchKeyword('extends')) { - this.nextToken(); - superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall); - } - var classBody = this.parseClassBody(); - this.context.strict = previousStrict; - return this.finalize(node, new Node.ClassDeclaration(id, superClass, classBody)); - }; - Parser.prototype.parseClassExpression = function () { - var node = this.createNode(); - var previousStrict = this.context.strict; - this.context.strict = true; - this.expectKeyword('class'); - var id = (this.lookahead.type === token_1.Token.Identifier) ? this.parseVariableIdentifier() : null; - var superClass = null; - if (this.matchKeyword('extends')) { - this.nextToken(); - superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall); - } - var classBody = this.parseClassBody(); - this.context.strict = previousStrict; - return this.finalize(node, new Node.ClassExpression(id, superClass, classBody)); - }; - // ECMA-262 15.1 Scripts - // ECMA-262 15.2 Modules - Parser.prototype.parseProgram = function () { - var node = this.createNode(); - var body = this.parseDirectivePrologues(); - while (this.startMarker.index < this.scanner.length) { - body.push(this.parseStatementListItem()); - } - return this.finalize(node, new Node.Program(body, this.sourceType)); - }; - // ECMA-262 15.2.2 Imports - Parser.prototype.parseModuleSpecifier = function () { - var node = this.createNode(); - if (this.lookahead.type !== token_1.Token.StringLiteral) { - this.throwError(messages_1.Messages.InvalidModuleSpecifier); - } - var token = this.nextToken(); var raw = this.getTokenRaw(token); return this.finalize(node, new Node.Literal(token.value, raw)); }; - // import {} ...; - Parser.prototype.parseImportSpecifier = function () { - var node = this.createNode(); - var imported; - var local; - if (this.lookahead.type === token_1.Token.Identifier) { - imported = this.parseVariableIdentifier(); - local = imported; - if (this.matchContextualKeyword('as')) { - this.nextToken(); - local = this.parseVariableIdentifier(); - } + JSXParser.prototype.parseJSXExpressionAttribute = function () { + var node = this.createJSXNode(); + this.expectJSX('{'); + this.finishJSX(); + if (this.match('}')) { + this.tolerateError('JSX attributes must only be assigned a non-empty expression'); + } + var expression = this.parseAssignmentExpression(); + this.reenterJSX(); + return this.finalize(node, new JSXNode.JSXExpressionContainer(expression)); + }; + JSXParser.prototype.parseJSXAttributeValue = function () { + return this.matchJSX('{') ? this.parseJSXExpressionAttribute() : + this.matchJSX('<') ? this.parseJSXElement() : this.parseJSXStringLiteralAttribute(); + }; + JSXParser.prototype.parseJSXNameValueAttribute = function () { + var node = this.createJSXNode(); + var name = this.parseJSXAttributeName(); + var value = null; + if (this.matchJSX('=')) { + this.expectJSX('='); + value = this.parseJSXAttributeValue(); + } + return this.finalize(node, new JSXNode.JSXAttribute(name, value)); + }; + JSXParser.prototype.parseJSXSpreadAttribute = function () { + var node = this.createJSXNode(); + this.expectJSX('{'); + this.expectJSX('...'); + this.finishJSX(); + var argument = this.parseAssignmentExpression(); + this.reenterJSX(); + return this.finalize(node, new JSXNode.JSXSpreadAttribute(argument)); + }; + JSXParser.prototype.parseJSXAttributes = function () { + var attributes = []; + while (!this.matchJSX('/') && !this.matchJSX('>')) { + var attribute = this.matchJSX('{') ? this.parseJSXSpreadAttribute() : + this.parseJSXNameValueAttribute(); + attributes.push(attribute); + } + return attributes; + }; + JSXParser.prototype.parseJSXOpeningElement = function () { + var node = this.createJSXNode(); + this.expectJSX('<'); + var name = this.parseJSXElementName(); + var attributes = this.parseJSXAttributes(); + var selfClosing = this.matchJSX('/'); + if (selfClosing) { + this.expectJSX('/'); + } + this.expectJSX('>'); + return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes)); + }; + JSXParser.prototype.parseJSXBoundaryElement = function () { + var node = this.createJSXNode(); + this.expectJSX('<'); + if (this.matchJSX('/')) { + this.expectJSX('/'); + var name_3 = this.parseJSXElementName(); + this.expectJSX('>'); + return this.finalize(node, new JSXNode.JSXClosingElement(name_3)); + } + var name = this.parseJSXElementName(); + var attributes = this.parseJSXAttributes(); + var selfClosing = this.matchJSX('/'); + if (selfClosing) { + this.expectJSX('/'); + } + this.expectJSX('>'); + return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes)); + }; + JSXParser.prototype.parseJSXEmptyExpression = function () { + var node = this.createJSXChildNode(); + this.collectComments(); + this.lastMarker.index = this.scanner.index; + this.lastMarker.line = this.scanner.lineNumber; + this.lastMarker.column = this.scanner.index - this.scanner.lineStart; + return this.finalize(node, new JSXNode.JSXEmptyExpression()); + }; + JSXParser.prototype.parseJSXExpressionContainer = function () { + var node = this.createJSXNode(); + this.expectJSX('{'); + var expression; + if (this.matchJSX('}')) { + expression = this.parseJSXEmptyExpression(); + this.expectJSX('}'); } else { - imported = this.parseIdentifierName(); - local = imported; - if (this.matchContextualKeyword('as')) { - this.nextToken(); - local = this.parseVariableIdentifier(); + this.finishJSX(); + expression = this.parseAssignmentExpression(); + this.reenterJSX(); + } + return this.finalize(node, new JSXNode.JSXExpressionContainer(expression)); + }; + JSXParser.prototype.parseJSXChildren = function () { + var children = []; + while (!this.scanner.eof()) { + var node = this.createJSXChildNode(); + var token = this.nextJSXText(); + if (token.start < token.end) { + var raw = this.getTokenRaw(token); + var child = this.finalize(node, new JSXNode.JSXText(token.value, raw)); + children.push(child); + } + if (this.scanner.source[this.scanner.index] === '{') { + var container = this.parseJSXExpressionContainer(); + children.push(container); } else { - this.throwUnexpectedToken(this.nextToken()); + break; } } - return this.finalize(node, new Node.ImportSpecifier(local, imported)); + return children; }; - // {foo, bar as bas} - Parser.prototype.parseNamedImports = function () { - this.expect('{'); - var specifiers = []; - while (!this.match('}')) { - specifiers.push(this.parseImportSpecifier()); - if (!this.match('}')) { - this.expect(','); - } - } - this.expect('}'); - return specifiers; - }; - // import ...; - Parser.prototype.parseImportDefaultSpecifier = function () { - var node = this.createNode(); - var local = this.parseIdentifierName(); - return this.finalize(node, new Node.ImportDefaultSpecifier(local)); - }; - // import <* as foo> ...; - Parser.prototype.parseImportNamespaceSpecifier = function () { - var node = this.createNode(); - this.expect('*'); - if (!this.matchContextualKeyword('as')) { - this.throwError(messages_1.Messages.NoAsAfterImportNamespace); - } - this.nextToken(); - var local = this.parseIdentifierName(); - return this.finalize(node, new Node.ImportNamespaceSpecifier(local)); - }; - Parser.prototype.parseImportDeclaration = function () { - if (this.context.inFunctionBody) { - this.throwError(messages_1.Messages.IllegalImportDeclaration); - } - var node = this.createNode(); - this.expectKeyword('import'); - var src; - var specifiers = []; - if (this.lookahead.type === token_1.Token.StringLiteral) { - // import 'foo'; - src = this.parseModuleSpecifier(); - } - else { - if (this.match('{')) { - // import {bar} - specifiers = specifiers.concat(this.parseNamedImports()); - } - else if (this.match('*')) { - // import * as foo - specifiers.push(this.parseImportNamespaceSpecifier()); - } - else if (this.isIdentifierName(this.lookahead) && !this.matchKeyword('default')) { - // import foo - specifiers.push(this.parseImportDefaultSpecifier()); - if (this.match(',')) { - this.nextToken(); - if (this.match('*')) { - // import foo, * as foo - specifiers.push(this.parseImportNamespaceSpecifier()); - } - else if (this.match('{')) { - // import foo, {bar} - specifiers = specifiers.concat(this.parseNamedImports()); - } - else { - this.throwUnexpectedToken(this.lookahead); - } + JSXParser.prototype.parseComplexJSXElement = function (el) { + var stack = []; + while (!this.scanner.eof()) { + el.children = el.children.concat(this.parseJSXChildren()); + var node = this.createJSXChildNode(); + var element = this.parseJSXBoundaryElement(); + if (element.type === jsx_syntax_1.JSXSyntax.JSXOpeningElement) { + var opening = element; + if (opening.selfClosing) { + var child = this.finalize(node, new JSXNode.JSXElement(opening, [], null)); + el.children.push(child); + } + else { + stack.push(el); + el = { node: node, opening: opening, closing: null, children: [] }; } } - else { - this.throwUnexpectedToken(this.nextToken()); - } - if (!this.matchContextualKeyword('from')) { - var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause; - this.throwError(message, this.lookahead.value); - } - this.nextToken(); - src = this.parseModuleSpecifier(); - } - this.consumeSemicolon(); - return this.finalize(node, new Node.ImportDeclaration(specifiers, src)); - }; - // ECMA-262 15.2.3 Exports - Parser.prototype.parseExportSpecifier = function () { - var node = this.createNode(); - var local = this.parseIdentifierName(); - var exported = local; - if (this.matchContextualKeyword('as')) { - this.nextToken(); - exported = this.parseIdentifierName(); - } - return this.finalize(node, new Node.ExportSpecifier(local, exported)); - }; - Parser.prototype.parseExportDeclaration = function () { - if (this.context.inFunctionBody) { - this.throwError(messages_1.Messages.IllegalExportDeclaration); - } - var node = this.createNode(); - this.expectKeyword('export'); - var exportDeclaration; - if (this.matchKeyword('default')) { - // export default ... - this.nextToken(); - if (this.matchKeyword('function')) { - // export default function foo () {} - // export default function () {} - var declaration = this.parseFunctionDeclaration(true); - exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); - } - else if (this.matchKeyword('class')) { - // export default class foo {} - var declaration = this.parseClassDeclaration(true); - exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); - } - else { - if (this.matchContextualKeyword('from')) { - this.throwError(messages_1.Messages.UnexpectedToken, this.lookahead.value); + if (element.type === jsx_syntax_1.JSXSyntax.JSXClosingElement) { + el.closing = element; + var open_1 = getQualifiedElementName(el.opening.name); + var close_1 = getQualifiedElementName(el.closing.name); + if (open_1 !== close_1) { + this.tolerateError('Expected corresponding JSX closing tag for %0', open_1); } - // export default {}; - // export default []; - // export default (1 + 2); - var declaration = this.match('{') ? this.parseObjectInitializer() : - this.match('[') ? this.parseArrayInitializer() : this.parseAssignmentExpression(); - this.consumeSemicolon(); - exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); - } - } - else if (this.match('*')) { - // export * from 'foo'; - this.nextToken(); - if (!this.matchContextualKeyword('from')) { - var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause; - this.throwError(message, this.lookahead.value); - } - this.nextToken(); - var src = this.parseModuleSpecifier(); - this.consumeSemicolon(); - exportDeclaration = this.finalize(node, new Node.ExportAllDeclaration(src)); - } - else if (this.lookahead.type === token_1.Token.Keyword) { - // export var f = 1; - var declaration = void 0; - switch (this.lookahead.value) { - case 'let': - case 'const': - declaration = this.parseLexicalDeclaration({ inFor: false }); + if (stack.length > 0) { + var child = this.finalize(el.node, new JSXNode.JSXElement(el.opening, el.children, el.closing)); + el = stack[stack.length - 1]; + el.children.push(child); + stack.pop(); + } + else { break; - case 'var': - case 'class': - case 'function': - declaration = this.parseStatementListItem(); - break; - default: - this.throwUnexpectedToken(this.lookahead); - } - exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null)); - } - else { - var specifiers = []; - var source = null; - var isExportFromIdentifier = false; - this.expect('{'); - while (!this.match('}')) { - isExportFromIdentifier = isExportFromIdentifier || this.matchKeyword('default'); - specifiers.push(this.parseExportSpecifier()); - if (!this.match('}')) { - this.expect(','); } } - this.expect('}'); - if (this.matchContextualKeyword('from')) { - // export {default} from 'foo'; - // export {foo} from 'foo'; - this.nextToken(); - source = this.parseModuleSpecifier(); - this.consumeSemicolon(); - } - else if (isExportFromIdentifier) { - // export {default}; // missing fromClause - var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause; - this.throwError(message, this.lookahead.value); - } - else { - // export {foo}; - this.consumeSemicolon(); - } - exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(null, specifiers, source)); } - return exportDeclaration; + return el; }; - return Parser; - }()); - exports.Parser = Parser; + JSXParser.prototype.parseJSXElement = function () { + var node = this.createJSXNode(); + var opening = this.parseJSXOpeningElement(); + var children = []; + var closing = null; + if (!opening.selfClosing) { + var el = this.parseComplexJSXElement({ node: node, opening: opening, closing: closing, children: children }); + children = el.children; + closing = el.closing; + } + return this.finalize(node, new JSXNode.JSXElement(opening, children, closing)); + }; + JSXParser.prototype.parseJSXRoot = function () { + // Pop the opening '<' added from the lookahead. + if (this.config.tokens) { + this.tokens.pop(); + } + this.startJSX(); + var element = this.parseJSXElement(); + this.finishJSX(); + return element; + }; + JSXParser.prototype.isStartOfExpression = function () { + return _super.prototype.isStartOfExpression.call(this) || this.match('<'); + }; + return JSXParser; + }(parser_1.Parser)); + exports.JSXParser = JSXParser; /***/ }, /* 4 */ -/***/ function(module, exports) { - - // Ensure the condition is true, otherwise throw an error. - // This is only to have a better contract semantic, i.e. another safety net - // to catch a logic error. The condition shall be fulfilled in normal case. - // Do NOT use this to enforce a certain condition on any user input. - "use strict"; - function assert(condition, message) { - /* istanbul ignore if */ - if (!condition) { - throw new Error('ASSERT: ' + message); - } - } - exports.assert = assert; - - -/***/ }, -/* 5 */ -/***/ function(module, exports) { - - "use strict"; - // Error messages should be identical to V8. - exports.Messages = { - UnexpectedToken: 'Unexpected token %0', - UnexpectedTokenIllegal: 'Unexpected token ILLEGAL', - UnexpectedNumber: 'Unexpected number', - UnexpectedString: 'Unexpected string', - UnexpectedIdentifier: 'Unexpected identifier', - UnexpectedReserved: 'Unexpected reserved word', - UnexpectedTemplate: 'Unexpected quasi %0', - UnexpectedEOS: 'Unexpected end of input', - NewlineAfterThrow: 'Illegal newline after throw', - InvalidRegExp: 'Invalid regular expression', - UnterminatedRegExp: 'Invalid regular expression: missing /', - InvalidLHSInAssignment: 'Invalid left-hand side in assignment', - InvalidLHSInForIn: 'Invalid left-hand side in for-in', - InvalidLHSInForLoop: 'Invalid left-hand side in for-loop', - MultipleDefaultsInSwitch: 'More than one default clause in switch statement', - NoCatchOrFinally: 'Missing catch or finally after try', - UnknownLabel: 'Undefined label \'%0\'', - Redeclaration: '%0 \'%1\' has already been declared', - IllegalContinue: 'Illegal continue statement', - IllegalBreak: 'Illegal break statement', - IllegalReturn: 'Illegal return statement', - StrictModeWith: 'Strict mode code may not include a with statement', - StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode', - StrictVarName: 'Variable name may not be eval or arguments in strict mode', - StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode', - StrictParamDupe: 'Strict mode function may not have duplicate parameter names', - StrictFunctionName: 'Function name may not be eval or arguments in strict mode', - StrictOctalLiteral: 'Octal literals are not allowed in strict mode.', - StrictDelete: 'Delete of an unqualified identifier in strict mode.', - StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode', - StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode', - StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode', - StrictReservedWord: 'Use of future reserved word in strict mode', - TemplateOctalLiteral: 'Octal literals are not allowed in template strings.', - ParameterAfterRestParameter: 'Rest parameter must be last formal parameter', - DefaultRestParameter: 'Unexpected token =', - DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals', - ConstructorSpecialMethod: 'Class constructor may not be an accessor', - DuplicateConstructor: 'A class may only have one constructor', - StaticPrototype: 'Classes may not have static property named prototype', - MissingFromClause: 'Unexpected token', - NoAsAfterImportNamespace: 'Unexpected token', - InvalidModuleSpecifier: 'Unexpected token', - IllegalImportDeclaration: 'Unexpected token', - IllegalExportDeclaration: 'Unexpected token', - DuplicateBinding: 'Duplicate binding %0', - ForInOfLoopInitializer: '%0 loop variable declaration may not have an initializer' - }; - - -/***/ }, -/* 6 */ -/***/ function(module, exports) { - - "use strict"; - var ErrorHandler = (function () { - function ErrorHandler() { - this.errors = []; - this.tolerant = false; - } - ; - ErrorHandler.prototype.recordError = function (error) { - this.errors.push(error); - }; - ; - ErrorHandler.prototype.tolerate = function (error) { - if (this.tolerant) { - this.recordError(error); - } - else { - throw error; - } - }; - ; - ErrorHandler.prototype.constructError = function (msg, column) { - var error = new Error(msg); - try { - throw error; - } - catch (base) { - /* istanbul ignore else */ - if (Object.create && Object.defineProperty) { - error = Object.create(base); - Object.defineProperty(error, 'column', { value: column }); - } - } - finally { - return error; - } - }; - ; - ErrorHandler.prototype.createError = function (index, line, col, description) { - var msg = 'Line ' + line + ': ' + description; - var error = this.constructError(msg, col); - error.index = index; - error.lineNumber = line; - error.description = description; - return error; - }; - ; - ErrorHandler.prototype.throwError = function (index, line, col, description) { - throw this.createError(index, line, col, description); - }; - ; - ErrorHandler.prototype.tolerateError = function (index, line, col, description) { - var error = this.createError(index, line, col, description); - if (this.tolerant) { - this.recordError(error); - } - else { - throw error; - } - }; - ; - return ErrorHandler; - }()); - exports.ErrorHandler = ErrorHandler; - - -/***/ }, -/* 7 */ -/***/ function(module, exports) { - - "use strict"; - (function (Token) { - Token[Token["BooleanLiteral"] = 1] = "BooleanLiteral"; - Token[Token["EOF"] = 2] = "EOF"; - Token[Token["Identifier"] = 3] = "Identifier"; - Token[Token["Keyword"] = 4] = "Keyword"; - Token[Token["NullLiteral"] = 5] = "NullLiteral"; - Token[Token["NumericLiteral"] = 6] = "NumericLiteral"; - Token[Token["Punctuator"] = 7] = "Punctuator"; - Token[Token["StringLiteral"] = 8] = "StringLiteral"; - Token[Token["RegularExpression"] = 9] = "RegularExpression"; - Token[Token["Template"] = 10] = "Template"; - })(exports.Token || (exports.Token = {})); - var Token = exports.Token; - ; - exports.TokenName = {}; - exports.TokenName[Token.BooleanLiteral] = 'Boolean'; - exports.TokenName[Token.EOF] = ''; - exports.TokenName[Token.Identifier] = 'Identifier'; - exports.TokenName[Token.Keyword] = 'Keyword'; - exports.TokenName[Token.NullLiteral] = 'Null'; - exports.TokenName[Token.NumericLiteral] = 'Numeric'; - exports.TokenName[Token.Punctuator] = 'Punctuator'; - exports.TokenName[Token.StringLiteral] = 'String'; - exports.TokenName[Token.RegularExpression] = 'RegularExpression'; - exports.TokenName[Token.Template] = 'Template'; - - -/***/ }, -/* 8 */ -/***/ function(module, exports, __webpack_require__) { - - "use strict"; - var assert_1 = __webpack_require__(4); - var messages_1 = __webpack_require__(5); - var character_1 = __webpack_require__(9); - var token_1 = __webpack_require__(7); - function hexValue(ch) { - return '0123456789abcdef'.indexOf(ch.toLowerCase()); - } - function octalValue(ch) { - return '01234567'.indexOf(ch); - } - var Scanner = (function () { - function Scanner(code, handler) { - this.source = code; - this.errorHandler = handler; - this.trackComment = false; - this.length = code.length; - this.index = 0; - this.lineNumber = (code.length > 0) ? 1 : 0; - this.lineStart = 0; - this.curlyStack = []; - } - ; - Scanner.prototype.eof = function () { - return this.index >= this.length; - }; - ; - Scanner.prototype.throwUnexpectedToken = function (message) { - if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; } - this.errorHandler.throwError(this.index, this.lineNumber, this.index - this.lineStart + 1, message); - }; - ; - Scanner.prototype.tolerateUnexpectedToken = function () { - this.errorHandler.tolerateError(this.index, this.lineNumber, this.index - this.lineStart + 1, messages_1.Messages.UnexpectedTokenIllegal); - }; - ; - // ECMA-262 11.4 Comments - Scanner.prototype.skipSingleLineComment = function (offset) { - var comments; - var start, loc; - if (this.trackComment) { - comments = []; - start = this.index - offset; - loc = { - start: { - line: this.lineNumber, - column: this.index - this.lineStart - offset - }, - end: {} - }; - } - while (!this.eof()) { - var ch = this.source.charCodeAt(this.index); - ++this.index; - if (character_1.Character.isLineTerminator(ch)) { - if (this.trackComment) { - loc.end = { - line: this.lineNumber, - column: this.index - this.lineStart - 1 - }; - var entry = { - multiLine: false, - slice: [start + offset, this.index - 1], - range: [start, this.index - 1], - loc: loc - }; - comments.push(entry); - } - if (ch === 13 && this.source.charCodeAt(this.index) === 10) { - ++this.index; - } - ++this.lineNumber; - this.lineStart = this.index; - return comments; - } - } - if (this.trackComment) { - loc.end = { - line: this.lineNumber, - column: this.index - this.lineStart - }; - var entry = { - multiLine: false, - slice: [start + offset, this.index], - range: [start, this.index], - loc: loc - }; - comments.push(entry); - } - return comments; - }; - ; - Scanner.prototype.skipMultiLineComment = function () { - var comments; - var start, loc; - if (this.trackComment) { - comments = []; - start = this.index - 2; - loc = { - start: { - line: this.lineNumber, - column: this.index - this.lineStart - 2 - }, - end: {} - }; - } - while (!this.eof()) { - var ch = this.source.charCodeAt(this.index); - if (character_1.Character.isLineTerminator(ch)) { - if (ch === 0x0D && this.source.charCodeAt(this.index + 1) === 0x0A) { - ++this.index; - } - ++this.lineNumber; - ++this.index; - this.lineStart = this.index; - } - else if (ch === 0x2A) { - // Block comment ends with '*/'. - if (this.source.charCodeAt(this.index + 1) === 0x2F) { - this.index += 2; - if (this.trackComment) { - loc.end = { - line: this.lineNumber, - column: this.index - this.lineStart - }; - var entry = { - multiLine: true, - slice: [start + 2, this.index - 2], - range: [start, this.index], - loc: loc - }; - comments.push(entry); - } - return comments; - } - ++this.index; - } - else { - ++this.index; - } - } - // Ran off the end of the file - the whole thing is a comment - if (this.trackComment) { - loc.end = { - line: this.lineNumber, - column: this.index - this.lineStart - }; - var entry = { - multiLine: true, - slice: [start + 2, this.index], - range: [start, this.index], - loc: loc - }; - comments.push(entry); - } - this.tolerateUnexpectedToken(); - return comments; - }; - ; - Scanner.prototype.scanComments = function () { - var comments; - if (this.trackComment) { - comments = []; - } - var start = (this.index === 0); - while (!this.eof()) { - var ch = this.source.charCodeAt(this.index); - if (character_1.Character.isWhiteSpace(ch)) { - ++this.index; - } - else if (character_1.Character.isLineTerminator(ch)) { - ++this.index; - if (ch === 0x0D && this.source.charCodeAt(this.index) === 0x0A) { - ++this.index; - } - ++this.lineNumber; - this.lineStart = this.index; - start = true; - } - else if (ch === 0x2F) { - ch = this.source.charCodeAt(this.index + 1); - if (ch === 0x2F) { - this.index += 2; - var comment = this.skipSingleLineComment(2); - if (this.trackComment) { - comments = comments.concat(comment); - } - start = true; - } - else if (ch === 0x2A) { - this.index += 2; - var comment = this.skipMultiLineComment(); - if (this.trackComment) { - comments = comments.concat(comment); - } - } - else { - break; - } - } - else if (start && ch === 0x2D) { - // U+003E is '>' - if ((this.source.charCodeAt(this.index + 1) === 0x2D) && (this.source.charCodeAt(this.index + 2) === 0x3E)) { - // '-->' is a single-line comment - this.index += 3; - var comment = this.skipSingleLineComment(3); - if (this.trackComment) { - comments = comments.concat(comment); - } - } - else { - break; - } - } - else if (ch === 0x3C) { - if (this.source.slice(this.index + 1, this.index + 4) === '!--') { - this.index += 4; // `' is a single-line comment + this.index += 3; + var comment = this.skipSingleLineComment(3); + if (this.trackComment) { + comments = comments.concat(comment); + } + } + else { + break; + } + } + else if (ch === 0x3C && !this.isModule) { + if (this.source.slice(this.index + 1, this.index + 4) === '!--') { + this.index += 4; // ``. - -### Preserving SVG tags - -SVG tags are automatically recognized, and when they are minified, both case-sensitivity and closing-slashes are preserved, regardless of the minification settings used for the rest of the file. - -### Working with invalid markup - -HTMLMinifier **can't work with invalid or partial chunks of markup**. This is because it parses markup into a tree structure, then modifies it (removing anything that was specified for removal, ignoring anything that was specified to be ignored, etc.), then it creates a markup out of that tree and returns it. - -Input markup (e.g. `

foo`) - -↓ - -Internal representation of markup in a form of tree (e.g. `{ tag: "p", attr: "id", children: ["foo"] }`) - -↓ - -Transformation of internal representation (e.g. removal of `id` attribute) - -↓ - -Output of resulting markup (e.g. `

foo

`) - -HTMLMinifier can't know that original markup was only half of the tree; it does its best to try to parse it as a full tree and it loses information about tree being malformed or partial in the beginning. As a result, it can't create a partial/malformed tree at the time of the output. - -## Installation Instructions - -From NPM for use as a command line app: - -```shell -npm install html-minifier -g -``` - -From NPM for programmatic use: - -```shell -npm install html-minifier -``` - -From Git: - -```shell -git clone git://github.com/kangax/html-minifier.git -cd html-minifier -npm link . -``` - -## Usage - -Note that almost all options are disabled by default. For command line usage please see `html-minifier --help` for a list of available options. Experiment and find what works best for you and your project. - -* **Sample command line:** ``html-minifier --collapse-whitespace --remove-comments --remove-optional-tags --remove-redundant-attributes --remove-script-type-attributes --remove-tag-whitespace --use-short-doctype --minify-css true --minify-js true`` - -### Node.js - -```js -var minify = require('html-minifier').minify; -var result = minify('

foo

', { - removeAttributeQuotes: true -}); -result; // '

foo

' -``` - -## Running benchmarks - -Benchmarks for minified HTML: - -```shell -node benchmark.js -``` diff --git a/node_modules/html-minifier/cli.js b/node_modules/html-minifier/cli.js deleted file mode 100755 index 2d0a9b3..0000000 --- a/node_modules/html-minifier/cli.js +++ /dev/null @@ -1,311 +0,0 @@ -#!/usr/bin/env node -/** - * html-minifier CLI tool - * - * The MIT License (MIT) - * - * Copyright (c) 2014-2016 Zoltan Frombach - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION 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 camelCase = require('camel-case'); -var fs = require('fs'); -var info = require('./package.json'); -var minify = require('./' + info.main).minify; -var paramCase = require('param-case'); -var path = require('path'); -var program = require('commander'); - -program._name = info.name; -program.version(info.version); - -function fatal(message) { - console.error(message); - process.exit(1); -} - -/** - * JSON does not support regexes, so, e.g., JSON.parse() will not create - * a RegExp from the JSON value `[ "/matchString/" ]`, which is - * technically just an array containing a string that begins and end with - * a forward slash. To get a RegExp from a JSON string, it must be - * constructed explicitly in JavaScript. - * - * The likelihood of actually wanting to match text that is enclosed in - * forward slashes is probably quite rare, so if forward slashes were - * included in an argument that requires a regex, the user most likely - * thought they were part of the syntax for specifying a regex. - * - * In the unlikely case that forward slashes are indeed desired in the - * search string, the user would need to enclose the expression in a - * second set of slashes: - * - * --customAttrSrround "[\"//matchString//\"]" - */ -function parseRegExp(value) { - if (value) { - return new RegExp(value.replace(/^\/(.*)\/$/, '$1')); - } -} - -function parseJSON(value) { - if (value) { - try { - return JSON.parse(value); - } - catch (e) { - if (/^{/.test(value)) { - fatal('Could not parse JSON value \'' + value + '\''); - } - return value; - } - } -} - -function parseJSONArray(value) { - if (value) { - value = parseJSON(value); - return Array.isArray(value) ? value : [value]; - } -} - -function parseJSONRegExpArray(value) { - value = parseJSONArray(value); - return value && value.map(parseRegExp); -} - -function parseString(value) { - return value; -} - -var mainOptions = { - caseSensitive: 'Treat attributes in case sensitive manner (useful for SVG; e.g. viewBox)', - collapseBooleanAttributes: 'Omit attribute values from boolean attributes', - collapseInlineTagWhitespace: 'Collapse white space around inline tag', - collapseWhitespace: 'Collapse white space that contributes to text nodes in a document tree.', - conservativeCollapse: 'Always collapse to 1 space (never remove it entirely)', - continueOnParseError: 'Handle parse errors instead of aborting', - customAttrAssign: ['Arrays of regex\'es that allow to support custom attribute assign expressions (e.g. \'
\')', parseJSONRegExpArray], - customAttrCollapse: ['Regex that specifies custom attribute to strip newlines from (e.g. /ng-class/)', parseRegExp], - customAttrSurround: ['Arrays of regex\'es that allow to support custom attribute surround expressions (e.g. )', parseJSONRegExpArray], - customEventAttributes: ['Arrays of regex\'es that allow to support custom event attributes for minifyJS (e.g. ng-click)', parseJSONRegExpArray], - decodeEntities: 'Use direct Unicode characters whenever possible', - html5: 'Parse input according to HTML5 specifications', - ignoreCustomComments: ['Array of regex\'es that allow to ignore certain comments, when matched', parseJSONRegExpArray], - ignoreCustomFragments: ['Array of regex\'es that allow to ignore certain fragments, when matched (e.g. , {{ ... }})', parseJSONRegExpArray], - includeAutoGeneratedTags: 'Insert tags generated by HTML parser', - keepClosingSlash: 'Keep the trailing slash on singleton elements', - maxLineLength: ['Max line length', parseInt], - minifyCSS: ['Minify CSS in style elements and style attributes (uses clean-css)', parseJSON], - minifyJS: ['Minify Javascript in script elements and on* attributes (uses uglify-js)', parseJSON], - minifyURLs: ['Minify URLs in various attributes (uses relateurl)', parseJSON], - preserveLineBreaks: 'Always collapse to 1 line break (never remove it entirely) when whitespace between tags include a line break.', - preventAttributesEscaping: 'Prevents the escaping of the values of attributes.', - processConditionalComments: 'Process contents of conditional comments through minifier', - processScripts: ['Array of strings corresponding to types of script elements to process through minifier (e.g. "text/ng-template", "text/x-handlebars-template", etc.)', parseJSONArray], - quoteCharacter: ['Type of quote to use for attribute values (\' or ")', parseString], - removeAttributeQuotes: 'Remove quotes around attributes when possible.', - removeComments: 'Strip HTML comments', - removeEmptyAttributes: 'Remove all attributes with whitespace-only values', - removeEmptyElements: 'Remove all elements with empty contents', - removeOptionalTags: 'Remove unrequired tags', - removeRedundantAttributes: 'Remove attributes when value matches default.', - removeScriptTypeAttributes: 'Remove type="text/javascript" from script tags. Other type attribute values are left intact.', - removeStyleLinkTypeAttributes: 'Remove type="text/css" from style and link tags. Other type attribute values are left intact.', - removeTagWhitespace: 'Remove space between attributes whenever possible', - sortAttributes: 'Sort attributes by frequency', - sortClassName: 'Sort style classes by frequency', - trimCustomFragments: 'Trim white space around ignoreCustomFragments.', - useShortDoctype: 'Replaces the doctype with the short (HTML5) doctype' -}; -var mainOptionKeys = Object.keys(mainOptions); -mainOptionKeys.forEach(function(key) { - var option = mainOptions[key]; - if (Array.isArray(option)) { - key = key === 'minifyURLs' ? '--minify-urls' : '--' + paramCase(key); - key += option[1] === parseJSON ? ' [value]' : ' '; - program.option(key, option[0], option[1]); - } - else if (~['html5', 'includeAutoGeneratedTags'].indexOf(key)) { - program.option('--no-' + paramCase(key), option); - } - else { - program.option('--' + paramCase(key), option); - } -}); -program.option('-o --output ', 'Specify output file (if not specified STDOUT will be used for output)'); - -function readFile(file) { - try { - return fs.readFileSync(file, { encoding: 'utf8' }); - } - catch (e) { - fatal('Cannot read ' + file + '\n' + e.message); - } -} - -var config = {}; -program.option('-c --config-file ', 'Use config file', function(configPath) { - var data = readFile(configPath); - try { - config = JSON.parse(data); - } - catch (je) { - try { - config = require(path.resolve(configPath)); - } - catch (ne) { - fatal('Cannot read the specified config file.\nAs JSON: ' + je.message + '\nAs module: ' + ne.message); - } - } - mainOptionKeys.forEach(function(key) { - if (key in config) { - var option = mainOptions[key]; - if (Array.isArray(option)) { - var value = config[key]; - config[key] = option[1](typeof value === 'string' ? value : JSON.stringify(value)); - } - } - }); -}); -program.option('--input-dir ', 'Specify an input directory'); -program.option('--output-dir ', 'Specify an output directory'); -program.option('--file-ext ', 'Specify an extension to be read, ex: html'); -var content; -program.arguments('[files...]').action(function(files) { - content = files.map(readFile).join(''); -}).parse(process.argv); - -function createOptions() { - var options = {}; - mainOptionKeys.forEach(function(key) { - var param = program[key === 'minifyURLs' ? 'minifyUrls' : camelCase(key)]; - if (typeof param !== 'undefined') { - options[key] = param; - } - else if (key in config) { - options[key] = config[key]; - } - }); - return options; -} - -function mkdir(outputDir, callback) { - fs.mkdir(outputDir, function(err) { - if (err) { - switch (err.code) { - case 'ENOENT': - return mkdir(path.join(outputDir, '..'), function() { - mkdir(outputDir, callback); - }); - case 'EEXIST': - break; - default: - fatal('Cannot create directory ' + outputDir + '\n' + err.message); - } - } - callback(); - }); -} - -function processFile(inputFile, outputFile) { - fs.readFile(inputFile, { encoding: 'utf8' }, function(err, data) { - if (err) { - fatal('Cannot read ' + inputFile + '\n' + err.message); - } - var minified; - try { - minified = minify(data, createOptions()); - } - catch (e) { - fatal('Minification error on ' + inputFile + '\n' + e.message); - } - fs.writeFile(outputFile, minified, { encoding: 'utf8' }, function(err) { - if (err) { - fatal('Cannot write ' + outputFile + '\n' + err.message); - } - }); - }); -} - -function processDirectory(inputDir, outputDir, fileExt) { - fs.readdir(inputDir, function(err, files) { - if (err) { - fatal('Cannot read directory ' + inputDir + '\n' + err.message); - } - files.forEach(function(file) { - var inputFile = path.join(inputDir, file); - var outputFile = path.join(outputDir, file); - fs.stat(inputFile, function(err, stat) { - if (err) { - fatal('Cannot read ' + inputFile + '\n' + err.message); - } - else if (stat.isDirectory()) { - processDirectory(inputFile, outputFile, fileExt); - } - else if (!fileExt || path.extname(file) === '.' + fileExt) { - mkdir(outputDir, function() { - processFile(inputFile, outputFile); - }); - } - }); - }); - }); -} - -function writeMinify() { - var minified; - try { - minified = minify(content, createOptions()); - } - catch (e) { - fatal('Minification error:\n' + e.message); - } - (program.output ? fs.createWriteStream(program.output).on('error', function(e) { - fatal('Cannot write ' + program.output + '\n' + e.message); - }) : process.stdout).write(minified); -} - -var inputDir = program.inputDir; -var outputDir = program.outputDir; -var fileExt = program.fileExt; -if (inputDir || outputDir) { - if (!inputDir) { - fatal('The option output-dir needs to be used with the option input-dir. If you are working with a single file, use -o.'); - } - else if (!outputDir) { - fatal('You need to specify where to write the output files with the option --output-dir'); - } - processDirectory(inputDir, outputDir, fileExt); -} -// Minifying one or more files specified on the CMD line -else if (content) { - writeMinify(); -} -// Minifying input coming from STDIN -else { - content = ''; - process.stdin.setEncoding('utf8'); - process.stdin.on('data', function(data) { - content += data; - }).on('end', writeMinify); -} diff --git a/node_modules/html-minifier/package.json b/node_modules/html-minifier/package.json deleted file mode 100644 index 2635da8..0000000 --- a/node_modules/html-minifier/package.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "_from": "html-minifier@^4.0.0", - "_id": "html-minifier@4.0.0", - "_inBundle": false, - "_integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", - "_location": "/html-minifier", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "html-minifier@^4.0.0", - "name": "html-minifier", - "escapedName": "html-minifier", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/minify" - ], - "_resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", - "_shasum": "cca9aad8bce1175e02e17a8c33e46d8988889f56", - "_spec": "html-minifier@^4.0.0", - "_where": "/home/s2/Code/minifyfromhtml/node_modules/minify", - "author": { - "name": "Juriy \"kangax\" Zaytsev" - }, - "benchmarkDependencies": { - "brotli": "^1.3.2", - "chalk": "^2.4.2", - "cli-table": "^0.3.1", - "lzma": "^2.3.2", - "minimize": "^2.2.0", - "progress": "^2.0.3" - }, - "bin": { - "html-minifier": "cli.js" - }, - "bugs": { - "url": "https://github.com/kangax/html-minifier/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Gilmore Davidson", - "url": "https://github.com/gilmoreorless" - }, - { - "name": "Hugo Wetterberg", - "email": "hugo@wetterberg.nu" - }, - { - "name": "Zoltan Frombach", - "email": "tssajo@gmail.com" - } - ], - "dependencies": { - "camel-case": "^3.0.0", - "clean-css": "^4.2.1", - "commander": "^2.19.0", - "he": "^1.2.0", - "param-case": "^2.1.1", - "relateurl": "^0.2.7", - "uglify-js": "^3.5.1" - }, - "deprecated": false, - "description": "Highly configurable, well-tested, JavaScript-based HTML minifier.", - "devDependencies": { - "grunt": "^1.0.4", - "grunt-browserify": "^5.3.0", - "grunt-contrib-uglify": "^4.0.1", - "grunt-eslint": "^21.0.0", - "phantomjs-prebuilt": "^2.1.16", - "qunit": "^2.9.2" - }, - "engines": { - "node": ">=6" - }, - "files": [ - "src/*.js", - "cli.js", - "sample-cli-config-file.conf" - ], - "homepage": "https://kangax.github.io/html-minifier/", - "keywords": [ - "cli", - "compress", - "compressor", - "css", - "html", - "htmlmin", - "javascript", - "min", - "minification", - "minifier", - "minify", - "optimize", - "optimizer", - "pack", - "packer", - "parse", - "parser", - "uglifier", - "uglify" - ], - "license": "MIT", - "main": "src/htmlminifier.js", - "maintainers": [ - { - "name": "Alex Lam", - "email": "alexlamsl@gmail.com" - }, - { - "name": "Juriy Zaytsev", - "email": "kangax@gmail.com", - "url": "http://perfectionkills.com/" - } - ], - "name": "html-minifier", - "repository": { - "type": "git", - "url": "git+https://github.com/kangax/html-minifier.git" - }, - "scripts": { - "dist": "grunt dist", - "test": "grunt test" - }, - "version": "4.0.0" -} diff --git a/node_modules/html-minifier/sample-cli-config-file.conf b/node_modules/html-minifier/sample-cli-config-file.conf deleted file mode 100644 index 8b8748c..0000000 --- a/node_modules/html-minifier/sample-cli-config-file.conf +++ /dev/null @@ -1,40 +0,0 @@ -{ - "caseSensitive": false, - "collapseBooleanAttributes": true, - "collapseInlineTagWhitespace": false, - "collapseWhitespace": true, - "conservativeCollapse": false, - "continueOnParseError": true, - "customAttrCollapse": ".*", - "decodeEntities": true, - "html5": true, - "ignoreCustomFragments": [ - "<#[\\s\\S]*?#>", - "<%[\\s\\S]*?%>", - "<\\?[\\s\\S]*?\\?>" - ], - "includeAutoGeneratedTags": false, - "keepClosingSlash": false, - "maxLineLength": 0, - "minifyCSS": true, - "minifyJS": true, - "preserveLineBreaks": false, - "preventAttributesEscaping": false, - "processConditionalComments": true, - "processScripts": [ - "text/html" - ], - "removeAttributeQuotes": true, - "removeComments": true, - "removeEmptyAttributes": true, - "removeEmptyElements": true, - "removeOptionalTags": true, - "removeRedundantAttributes": true, - "removeScriptTypeAttributes": true, - "removeStyleLinkTypeAttributes": true, - "removeTagWhitespace": true, - "sortAttributes": true, - "sortClassName": true, - "trimCustomFragments": true, - "useShortDoctype": true -} diff --git a/node_modules/html-minifier/src/htmlminifier.js b/node_modules/html-minifier/src/htmlminifier.js deleted file mode 100644 index d7efa99..0000000 --- a/node_modules/html-minifier/src/htmlminifier.js +++ /dev/null @@ -1,1344 +0,0 @@ -'use strict'; - -var CleanCSS = require('clean-css'); -var decode = require('he').decode; -var HTMLParser = require('./htmlparser').HTMLParser; -var RelateUrl = require('relateurl'); -var TokenChain = require('./tokenchain'); -var UglifyJS = require('uglify-js'); -var utils = require('./utils'); - -function trimWhitespace(str) { - return str && str.replace(/^[ \n\r\t\f]+/, '').replace(/[ \n\r\t\f]+$/, ''); -} - -function collapseWhitespaceAll(str) { - // Non-breaking space is specifically handled inside the replacer function here: - return str && str.replace(/[ \n\r\t\f\xA0]+/g, function(spaces) { - return spaces === '\t' ? '\t' : spaces.replace(/(^|\xA0+)[^\xA0]+/g, '$1 '); - }); -} - -function collapseWhitespace(str, options, trimLeft, trimRight, collapseAll) { - var lineBreakBefore = '', lineBreakAfter = ''; - - if (options.preserveLineBreaks) { - str = str.replace(/^[ \n\r\t\f]*?[\n\r][ \n\r\t\f]*/, function() { - lineBreakBefore = '\n'; - return ''; - }).replace(/[ \n\r\t\f]*?[\n\r][ \n\r\t\f]*$/, function() { - lineBreakAfter = '\n'; - return ''; - }); - } - - if (trimLeft) { - // Non-breaking space is specifically handled inside the replacer function here: - str = str.replace(/^[ \n\r\t\f\xA0]+/, function(spaces) { - var conservative = !lineBreakBefore && options.conservativeCollapse; - if (conservative && spaces === '\t') { - return '\t'; - } - return spaces.replace(/^[^\xA0]+/, '').replace(/(\xA0+)[^\xA0]+/g, '$1 ') || (conservative ? ' ' : ''); - }); - } - - if (trimRight) { - // Non-breaking space is specifically handled inside the replacer function here: - str = str.replace(/[ \n\r\t\f\xA0]+$/, function(spaces) { - var conservative = !lineBreakAfter && options.conservativeCollapse; - if (conservative && spaces === '\t') { - return '\t'; - } - return spaces.replace(/[^\xA0]+(\xA0+)/g, ' $1').replace(/[^\xA0]+$/, '') || (conservative ? ' ' : ''); - }); - } - - if (collapseAll) { - // strip non space whitespace then compress spaces to one - str = collapseWhitespaceAll(str); - } - - return lineBreakBefore + str + lineBreakAfter; -} - -var createMapFromString = utils.createMapFromString; -// non-empty tags that will maintain whitespace around them -var inlineTags = createMapFromString('a,abbr,acronym,b,bdi,bdo,big,button,cite,code,del,dfn,em,font,i,ins,kbd,label,mark,math,nobr,object,q,rp,rt,rtc,ruby,s,samp,select,small,span,strike,strong,sub,sup,svg,textarea,time,tt,u,var'); -// non-empty tags that will maintain whitespace within them -var inlineTextTags = createMapFromString('a,abbr,acronym,b,big,del,em,font,i,ins,kbd,mark,nobr,rp,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var'); -// self-closing tags that will maintain whitespace around them -var selfClosingInlineTags = createMapFromString('comment,img,input,wbr'); - -function collapseWhitespaceSmart(str, prevTag, nextTag, options) { - var trimLeft = prevTag && !selfClosingInlineTags(prevTag); - if (trimLeft && !options.collapseInlineTagWhitespace) { - trimLeft = prevTag.charAt(0) === '/' ? !inlineTags(prevTag.slice(1)) : !inlineTextTags(prevTag); - } - var trimRight = nextTag && !selfClosingInlineTags(nextTag); - if (trimRight && !options.collapseInlineTagWhitespace) { - trimRight = nextTag.charAt(0) === '/' ? !inlineTextTags(nextTag.slice(1)) : !inlineTags(nextTag); - } - return collapseWhitespace(str, options, trimLeft, trimRight, prevTag && nextTag); -} - -function isConditionalComment(text) { - return /^\[if\s[^\]]+]|\[endif]$/.test(text); -} - -function isIgnoredComment(text, options) { - for (var i = 0, len = options.ignoreCustomComments.length; i < len; i++) { - if (options.ignoreCustomComments[i].test(text)) { - return true; - } - } - return false; -} - -function isEventAttribute(attrName, options) { - var patterns = options.customEventAttributes; - if (patterns) { - for (var i = patterns.length; i--;) { - if (patterns[i].test(attrName)) { - return true; - } - } - return false; - } - return /^on[a-z]{3,}$/.test(attrName); -} - -function canRemoveAttributeQuotes(value) { - // https://mathiasbynens.be/notes/unquoted-attribute-values - return /^[^ \t\n\f\r"'`=<>]+$/.test(value); -} - -function attributesInclude(attributes, attribute) { - for (var i = attributes.length; i--;) { - if (attributes[i].name.toLowerCase() === attribute) { - return true; - } - } - return false; -} - -function isAttributeRedundant(tag, attrName, attrValue, attrs) { - attrValue = attrValue ? trimWhitespace(attrValue.toLowerCase()) : ''; - - return ( - tag === 'script' && - attrName === 'language' && - attrValue === 'javascript' || - - tag === 'form' && - attrName === 'method' && - attrValue === 'get' || - - tag === 'input' && - attrName === 'type' && - attrValue === 'text' || - - tag === 'script' && - attrName === 'charset' && - !attributesInclude(attrs, 'src') || - - tag === 'a' && - attrName === 'name' && - attributesInclude(attrs, 'id') || - - tag === 'area' && - attrName === 'shape' && - attrValue === 'rect' - ); -} - -// https://mathiasbynens.be/demo/javascript-mime-type -// https://developer.mozilla.org/en/docs/Web/HTML/Element/script#attr-type -var executableScriptsMimetypes = utils.createMap([ - 'text/javascript', - 'text/ecmascript', - 'text/jscript', - 'application/javascript', - 'application/x-javascript', - 'application/ecmascript' -]); - -function isScriptTypeAttribute(attrValue) { - attrValue = trimWhitespace(attrValue.split(/;/, 2)[0]).toLowerCase(); - return attrValue === '' || executableScriptsMimetypes(attrValue); -} - -function isExecutableScript(tag, attrs) { - if (tag !== 'script') { - return false; - } - for (var i = 0, len = attrs.length; i < len; i++) { - var attrName = attrs[i].name.toLowerCase(); - if (attrName === 'type') { - return isScriptTypeAttribute(attrs[i].value); - } - } - return true; -} - -function isStyleLinkTypeAttribute(attrValue) { - attrValue = trimWhitespace(attrValue).toLowerCase(); - return attrValue === '' || attrValue === 'text/css'; -} - -function isStyleSheet(tag, attrs) { - if (tag !== 'style') { - return false; - } - for (var i = 0, len = attrs.length; i < len; i++) { - var attrName = attrs[i].name.toLowerCase(); - if (attrName === 'type') { - return isStyleLinkTypeAttribute(attrs[i].value); - } - } - return true; -} - -var isSimpleBoolean = createMapFromString('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible'); -var isBooleanValue = createMapFromString('true,false'); - -function isBooleanAttribute(attrName, attrValue) { - return isSimpleBoolean(attrName) || attrName === 'draggable' && !isBooleanValue(attrValue); -} - -function isUriTypeAttribute(attrName, tag) { - return ( - /^(?:a|area|link|base)$/.test(tag) && attrName === 'href' || - tag === 'img' && /^(?:src|longdesc|usemap)$/.test(attrName) || - tag === 'object' && /^(?:classid|codebase|data|usemap)$/.test(attrName) || - tag === 'q' && attrName === 'cite' || - tag === 'blockquote' && attrName === 'cite' || - (tag === 'ins' || tag === 'del') && attrName === 'cite' || - tag === 'form' && attrName === 'action' || - tag === 'input' && (attrName === 'src' || attrName === 'usemap') || - tag === 'head' && attrName === 'profile' || - tag === 'script' && (attrName === 'src' || attrName === 'for') - ); -} - -function isNumberTypeAttribute(attrName, tag) { - return ( - /^(?:a|area|object|button)$/.test(tag) && attrName === 'tabindex' || - tag === 'input' && (attrName === 'maxlength' || attrName === 'tabindex') || - tag === 'select' && (attrName === 'size' || attrName === 'tabindex') || - tag === 'textarea' && /^(?:rows|cols|tabindex)$/.test(attrName) || - tag === 'colgroup' && attrName === 'span' || - tag === 'col' && attrName === 'span' || - (tag === 'th' || tag === 'td') && (attrName === 'rowspan' || attrName === 'colspan') - ); -} - -function isLinkType(tag, attrs, value) { - if (tag !== 'link') { - return false; - } - for (var i = 0, len = attrs.length; i < len; i++) { - if (attrs[i].name === 'rel' && attrs[i].value === value) { - return true; - } - } -} - -function isMediaQuery(tag, attrs, attrName) { - return attrName === 'media' && (isLinkType(tag, attrs, 'stylesheet') || isStyleSheet(tag, attrs)); -} - -var srcsetTags = createMapFromString('img,source'); - -function isSrcset(attrName, tag) { - return attrName === 'srcset' && srcsetTags(tag); -} - -function cleanAttributeValue(tag, attrName, attrValue, options, attrs) { - if (isEventAttribute(attrName, options)) { - attrValue = trimWhitespace(attrValue).replace(/^javascript:\s*/i, ''); - return options.minifyJS(attrValue, true); - } - else if (attrName === 'class') { - attrValue = trimWhitespace(attrValue); - if (options.sortClassName) { - attrValue = options.sortClassName(attrValue); - } - else { - attrValue = collapseWhitespaceAll(attrValue); - } - return attrValue; - } - else if (isUriTypeAttribute(attrName, tag)) { - attrValue = trimWhitespace(attrValue); - return isLinkType(tag, attrs, 'canonical') ? attrValue : options.minifyURLs(attrValue); - } - else if (isNumberTypeAttribute(attrName, tag)) { - return trimWhitespace(attrValue); - } - else if (attrName === 'style') { - attrValue = trimWhitespace(attrValue); - if (attrValue) { - if (/;$/.test(attrValue) && !/&#?[0-9a-zA-Z]+;$/.test(attrValue)) { - attrValue = attrValue.replace(/\s*;$/, ';'); - } - attrValue = options.minifyCSS(attrValue, 'inline'); - } - return attrValue; - } - else if (isSrcset(attrName, tag)) { - // https://html.spec.whatwg.org/multipage/embedded-content.html#attr-img-srcset - attrValue = trimWhitespace(attrValue).split(/\s+,\s*|\s*,\s+/).map(function(candidate) { - var url = candidate; - var descriptor = ''; - var match = candidate.match(/\s+([1-9][0-9]*w|[0-9]+(?:\.[0-9]+)?x)$/); - if (match) { - url = url.slice(0, -match[0].length); - var num = +match[1].slice(0, -1); - var suffix = match[1].slice(-1); - if (num !== 1 || suffix !== 'x') { - descriptor = ' ' + num + suffix; - } - } - return options.minifyURLs(url) + descriptor; - }).join(', '); - } - else if (isMetaViewport(tag, attrs) && attrName === 'content') { - attrValue = attrValue.replace(/\s+/g, '').replace(/[0-9]+\.[0-9]+/g, function(numString) { - // "0.90000" -> "0.9" - // "1.0" -> "1" - // "1.0001" -> "1.0001" (unchanged) - return (+numString).toString(); - }); - } - else if (isContentSecurityPolicy(tag, attrs) && attrName.toLowerCase() === 'content') { - return collapseWhitespaceAll(attrValue); - } - else if (options.customAttrCollapse && options.customAttrCollapse.test(attrName)) { - attrValue = attrValue.replace(/\n+|\r+|\s{2,}/g, ''); - } - else if (tag === 'script' && attrName === 'type') { - attrValue = trimWhitespace(attrValue.replace(/\s*;\s*/g, ';')); - } - else if (isMediaQuery(tag, attrs, attrName)) { - attrValue = trimWhitespace(attrValue); - return options.minifyCSS(attrValue, 'media'); - } - return attrValue; -} - -function isMetaViewport(tag, attrs) { - if (tag !== 'meta') { - return false; - } - for (var i = 0, len = attrs.length; i < len; i++) { - if (attrs[i].name === 'name' && attrs[i].value === 'viewport') { - return true; - } - } -} - -function isContentSecurityPolicy(tag, attrs) { - if (tag !== 'meta') { - return false; - } - for (var i = 0, len = attrs.length; i < len; i++) { - if (attrs[i].name.toLowerCase() === 'http-equiv' && attrs[i].value.toLowerCase() === 'content-security-policy') { - return true; - } - } -} - -function ignoreCSS(id) { - return '/* clean-css ignore:start */' + id + '/* clean-css ignore:end */'; -} - -// Wrap CSS declarations for CleanCSS > 3.x -// See https://github.com/jakubpawlowicz/clean-css/issues/418 -function wrapCSS(text, type) { - switch (type) { - case 'inline': - return '*{' + text + '}'; - case 'media': - return '@media ' + text + '{a{top:0}}'; - default: - return text; - } -} - -function unwrapCSS(text, type) { - var matches; - switch (type) { - case 'inline': - matches = text.match(/^\*\{([\s\S]*)\}$/); - break; - case 'media': - matches = text.match(/^@media ([\s\S]*?)\s*{[\s\S]*}$/); - break; - } - return matches ? matches[1] : text; -} - -function cleanConditionalComment(comment, options) { - return options.processConditionalComments ? comment.replace(/^(\[if\s[^\]]+]>)([\s\S]*?)( -1) { - return minify(text, options); - } - } - return text; -} - -// Tag omission rules from https://html.spec.whatwg.org/multipage/syntax.html#optional-tags -// with the following deviations: -// - retain if followed by