diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..e69de29 diff --git a/main.css b/main.css new file mode 100644 index 0000000..e69de29 diff --git a/node_modules/.bin/acorn b/node_modules/.bin/acorn new file mode 120000 index 0000000..cf76760 --- /dev/null +++ b/node_modules/.bin/acorn @@ -0,0 +1 @@ +../acorn/bin/acorn \ No newline at end of file diff --git a/node_modules/.bin/browserslist b/node_modules/.bin/browserslist new file mode 120000 index 0000000..3cd991b --- /dev/null +++ b/node_modules/.bin/browserslist @@ -0,0 +1 @@ +../browserslist/cli.js \ No newline at end of file diff --git a/node_modules/.bin/detect-libc b/node_modules/.bin/detect-libc new file mode 120000 index 0000000..b4c4b76 --- /dev/null +++ b/node_modules/.bin/detect-libc @@ -0,0 +1 @@ +../detect-libc/bin/detect-libc.js \ No newline at end of file diff --git a/node_modules/.bin/download-msgpackr-prebuilds b/node_modules/.bin/download-msgpackr-prebuilds new file mode 120000 index 0000000..562dd61 --- /dev/null +++ b/node_modules/.bin/download-msgpackr-prebuilds @@ -0,0 +1 @@ +../msgpackr-extract/bin/download-prebuilds.js \ No newline at end of file diff --git a/node_modules/.bin/js-yaml b/node_modules/.bin/js-yaml new file mode 120000 index 0000000..9dbd010 --- /dev/null +++ b/node_modules/.bin/js-yaml @@ -0,0 +1 @@ +../js-yaml/bin/js-yaml.js \ No newline at end of file diff --git a/node_modules/.bin/json5 b/node_modules/.bin/json5 new file mode 120000 index 0000000..217f379 --- /dev/null +++ b/node_modules/.bin/json5 @@ -0,0 +1 @@ +../json5/lib/cli.js \ No newline at end of file diff --git a/node_modules/.bin/node-gyp-build b/node_modules/.bin/node-gyp-build new file mode 120000 index 0000000..671c6eb --- /dev/null +++ b/node_modules/.bin/node-gyp-build @@ -0,0 +1 @@ +../node-gyp-build/bin.js \ No newline at end of file diff --git a/node_modules/.bin/node-gyp-build-optional b/node_modules/.bin/node-gyp-build-optional new file mode 120000 index 0000000..46d347e --- /dev/null +++ b/node_modules/.bin/node-gyp-build-optional @@ -0,0 +1 @@ +../node-gyp-build/optional.js \ No newline at end of file diff --git a/node_modules/.bin/node-gyp-build-optional-packages b/node_modules/.bin/node-gyp-build-optional-packages new file mode 120000 index 0000000..9630206 --- /dev/null +++ b/node_modules/.bin/node-gyp-build-optional-packages @@ -0,0 +1 @@ +../node-gyp-build-optional-packages/bin.js \ No newline at end of file diff --git a/node_modules/.bin/node-gyp-build-optional-packages-optional b/node_modules/.bin/node-gyp-build-optional-packages-optional new file mode 120000 index 0000000..5915bd7 --- /dev/null +++ b/node_modules/.bin/node-gyp-build-optional-packages-optional @@ -0,0 +1 @@ +../node-gyp-build-optional-packages/optional.js \ No newline at end of file diff --git a/node_modules/.bin/node-gyp-build-optional-packages-test b/node_modules/.bin/node-gyp-build-optional-packages-test new file mode 120000 index 0000000..c0cc979 --- /dev/null +++ b/node_modules/.bin/node-gyp-build-optional-packages-test @@ -0,0 +1 @@ +../node-gyp-build-optional-packages/build-test.js \ No newline at end of file diff --git a/node_modules/.bin/node-gyp-build-test b/node_modules/.bin/node-gyp-build-test new file mode 120000 index 0000000..d11de1b --- /dev/null +++ b/node_modules/.bin/node-gyp-build-test @@ -0,0 +1 @@ +../node-gyp-build/build-test.js \ No newline at end of file diff --git a/node_modules/.bin/parcel b/node_modules/.bin/parcel new file mode 120000 index 0000000..5da1994 --- /dev/null +++ b/node_modules/.bin/parcel @@ -0,0 +1 @@ +../parcel/lib/bin.js \ No newline at end of file diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver new file mode 120000 index 0000000..317eb29 --- /dev/null +++ b/node_modules/.bin/semver @@ -0,0 +1 @@ +../semver/bin/semver \ No newline at end of file diff --git a/node_modules/.bin/svgo b/node_modules/.bin/svgo new file mode 120000 index 0000000..d6a228b --- /dev/null +++ b/node_modules/.bin/svgo @@ -0,0 +1 @@ +../svgo/bin/svgo \ No newline at end of file diff --git a/node_modules/.bin/terser b/node_modules/.bin/terser new file mode 120000 index 0000000..0792ff4 --- /dev/null +++ b/node_modules/.bin/terser @@ -0,0 +1 @@ +../terser/bin/terser \ No newline at end of file diff --git a/node_modules/.bin/update-browserslist-db b/node_modules/.bin/update-browserslist-db new file mode 120000 index 0000000..b11e16f --- /dev/null +++ b/node_modules/.bin/update-browserslist-db @@ -0,0 +1 @@ +../update-browserslist-db/cli.js \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 0000000..495cf38 --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,2749 @@ +{ + "name": "clone-test-movie", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/@babel/code-frame": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@lezer/common": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", + "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==", + "dev": true + }, + "node_modules/@lezer/lr": { + "version": "0.15.8", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", + "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", + "dev": true, + "dependencies": { + "@lezer/common": "^0.15.0" + } + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.2.tgz", + "integrity": "sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@mischnic/json-sourcemap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz", + "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==", + "dev": true, + "dependencies": { + "@lezer/common": "^0.15.7", + "@lezer/lr": "^0.15.4", + "json5": "^2.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz", + "integrity": "sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@parcel/bundler-default": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.8.3.tgz", + "integrity": "sha512-yJvRsNWWu5fVydsWk3O2L4yIy3UZiKWO2cPDukGOIWMgp/Vbpp+2Ct5IygVRtE22bnseW/E/oe0PV3d2IkEJGg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/graph": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/cache": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.8.3.tgz", + "integrity": "sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ==", + "dev": true, + "dependencies": { + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/utils": "2.8.3", + "lmdb": "2.5.2" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/codeframe": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.8.3.tgz", + "integrity": "sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/compressor-raw": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.8.3.tgz", + "integrity": "sha512-bVDsqleBUxRdKMakWSlWC9ZjOcqDKE60BE+Gh3JSN6WJrycJ02P5wxjTVF4CStNP/G7X17U+nkENxSlMG77ySg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/config-default": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.8.3.tgz", + "integrity": "sha512-o/A/mbrO6X/BfGS65Sib8d6SSG45NYrNooNBkH/o7zbOBSRQxwyTlysleK1/3Wa35YpvFyLOwgfakqCtbGy4fw==", + "dev": true, + "dependencies": { + "@parcel/bundler-default": "2.8.3", + "@parcel/compressor-raw": "2.8.3", + "@parcel/namer-default": "2.8.3", + "@parcel/optimizer-css": "2.8.3", + "@parcel/optimizer-htmlnano": "2.8.3", + "@parcel/optimizer-image": "2.8.3", + "@parcel/optimizer-svgo": "2.8.3", + "@parcel/optimizer-terser": "2.8.3", + "@parcel/packager-css": "2.8.3", + "@parcel/packager-html": "2.8.3", + "@parcel/packager-js": "2.8.3", + "@parcel/packager-raw": "2.8.3", + "@parcel/packager-svg": "2.8.3", + "@parcel/reporter-dev-server": "2.8.3", + "@parcel/resolver-default": "2.8.3", + "@parcel/runtime-browser-hmr": "2.8.3", + "@parcel/runtime-js": "2.8.3", + "@parcel/runtime-react-refresh": "2.8.3", + "@parcel/runtime-service-worker": "2.8.3", + "@parcel/transformer-babel": "2.8.3", + "@parcel/transformer-css": "2.8.3", + "@parcel/transformer-html": "2.8.3", + "@parcel/transformer-image": "2.8.3", + "@parcel/transformer-js": "2.8.3", + "@parcel/transformer-json": "2.8.3", + "@parcel/transformer-postcss": "2.8.3", + "@parcel/transformer-posthtml": "2.8.3", + "@parcel/transformer-raw": "2.8.3", + "@parcel/transformer-react-refresh-wrap": "2.8.3", + "@parcel/transformer-svg": "2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/core": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.8.3.tgz", + "integrity": "sha512-Euf/un4ZAiClnlUXqPB9phQlKbveU+2CotZv7m7i+qkgvFn5nAGnrV4h1OzQU42j9dpgOxWi7AttUDMrvkbhCQ==", + "dev": true, + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.0", + "@parcel/cache": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/graph": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "abortcontroller-polyfill": "^1.1.9", + "base-x": "^3.0.8", + "browserslist": "^4.6.6", + "clone": "^2.1.1", + "dotenv": "^7.0.0", + "dotenv-expand": "^5.1.0", + "json5": "^2.2.0", + "msgpackr": "^1.5.4", + "nullthrows": "^1.1.1", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/diagnostic": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.8.3.tgz", + "integrity": "sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ==", + "dev": true, + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/events": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.8.3.tgz", + "integrity": "sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/fs": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.8.3.tgz", + "integrity": "sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ==", + "dev": true, + "dependencies": { + "@parcel/fs-search": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/watcher": "^2.0.7", + "@parcel/workers": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/fs-search": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.8.3.tgz", + "integrity": "sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/graph": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.8.3.tgz", + "integrity": "sha512-26GL8fYZPdsRhSXCZ0ZWliloK6DHlMJPWh6Z+3VVZ5mnDSbYg/rRKWmrkhnr99ZWmL9rJsv4G74ZwvDEXTMPBg==", + "dev": true, + "dependencies": { + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/hash": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.8.3.tgz", + "integrity": "sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3", + "xxhash-wasm": "^0.4.2" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/logger": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.8.3.tgz", + "integrity": "sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/markdown-ansi": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.8.3.tgz", + "integrity": "sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/namer-default": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.8.3.tgz", + "integrity": "sha512-tJ7JehZviS5QwnxbARd8Uh63rkikZdZs1QOyivUhEvhN+DddSAVEdQLHGPzkl3YRk0tjFhbqo+Jci7TpezuAMw==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/node-resolver-core": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.8.3.tgz", + "integrity": "sha512-12YryWcA5Iw2WNoEVr/t2HDjYR1iEzbjEcxfh1vaVDdZ020PiGw67g5hyIE/tsnG7SRJ0xdRx1fQ2hDgED+0Ww==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-css": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.8.3.tgz", + "integrity": "sha512-JotGAWo8JhuXsQDK0UkzeQB0UR5hDAKvAviXrjqB4KM9wZNLhLleeEAW4Hk8R9smCeQFP6Xg/N/NkLDpqMwT3g==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.16.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-htmlnano": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.8.3.tgz", + "integrity": "sha512-L8/fHbEy8Id2a2E0fwR5eKGlv9VYDjrH9PwdJE9Za9v1O/vEsfl/0T/79/x129l5O0yB6EFQkFa20MiK3b+vOg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "htmlnano": "^2.0.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "svgo": "^2.4.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-htmlnano/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/@parcel/optimizer-htmlnano/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@parcel/optimizer-htmlnano/node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@parcel/optimizer-htmlnano/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/@parcel/optimizer-htmlnano/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@parcel/optimizer-image": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.8.3.tgz", + "integrity": "sha512-SD71sSH27SkCDNUNx9A3jizqB/WIJr3dsfp+JZGZC42tpD/Siim6Rqy9M4To/BpMMQIIiEXa5ofwS+DgTEiEHQ==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-svgo": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.8.3.tgz", + "integrity": "sha512-9KQed99NZnQw3/W4qBYVQ7212rzA9EqrQG019TIWJzkA9tjGBMIm2c/nXpK1tc3hQ3e7KkXkFCQ3C+ibVUnHNA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "svgo": "^2.4.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-svgo/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/@parcel/optimizer-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@parcel/optimizer-svgo/node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@parcel/optimizer-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/@parcel/optimizer-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@parcel/optimizer-terser": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.8.3.tgz", + "integrity": "sha512-9EeQlN6zIeUWwzrzu6Q2pQSaYsYGah8MtiQ/hog9KEPlYTP60hBv/+utDyYEHSQhL7y5ym08tPX5GzBvwAD/dA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "terser": "^5.2.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/package-manager": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.8.3.tgz", + "integrity": "sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/packager-css": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.8.3.tgz", + "integrity": "sha512-WyvkMmsurlHG8d8oUVm7S+D+cC/T3qGeqogb7sTI52gB6uiywU7lRCizLNqGFyFGIxcVTVHWnSHqItBcLN76lA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-html": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.8.3.tgz", + "integrity": "sha512-OhPu1Hx1RRKJodpiu86ZqL8el2Aa4uhBHF6RAL1Pcrh2EhRRlPf70Sk0tC22zUpYL7es+iNKZ/n0Rl+OWSHWEw==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-js": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.8.3.tgz", + "integrity": "sha512-0pGKC3Ax5vFuxuZCRB+nBucRfFRz4ioie19BbDxYnvBxrd4M3FIu45njf6zbBYsI9eXqaDnL1b3DcZJfYqtIzw==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "globals": "^13.2.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-raw": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.8.3.tgz", + "integrity": "sha512-BA6enNQo1RCnco9MhkxGrjOk59O71IZ9DPKu3lCtqqYEVd823tXff2clDKHK25i6cChmeHu6oB1Rb73hlPqhUA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-svg": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.8.3.tgz", + "integrity": "sha512-mvIoHpmv5yzl36OjrklTDFShLUfPFTwrmp1eIwiszGdEBuQaX7JVI3Oo2jbVQgcN4W7J6SENzGQ3Q5hPTW3pMw==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "posthtml": "^0.16.4" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/plugin": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.8.3.tgz", + "integrity": "sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw==", + "dev": true, + "dependencies": { + "@parcel/types": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/reporter-cli": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.8.3.tgz", + "integrity": "sha512-3sJkS6tFFzgIOz3u3IpD/RsmRxvOKKiQHOTkiiqRt1l44mMDGKS7zANRnJYsQzdCsgwc9SOP30XFgJwtoVlMbw==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "chalk": "^4.1.0", + "term-size": "^2.2.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/reporter-dev-server": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.8.3.tgz", + "integrity": "sha512-Y8C8hzgzTd13IoWTj+COYXEyCkXfmVJs3//GDBsH22pbtSFMuzAZd+8J9qsCo0EWpiDow7V9f1LischvEh3FbQ==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/resolver-default": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.8.3.tgz", + "integrity": "sha512-k0B5M/PJ+3rFbNj4xZSBr6d6HVIe6DH/P3dClLcgBYSXAvElNDfXgtIimbjCyItFkW9/BfcgOVKEEIZOeySH/A==", + "dev": true, + "dependencies": { + "@parcel/node-resolver-core": "2.8.3", + "@parcel/plugin": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-browser-hmr": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.8.3.tgz", + "integrity": "sha512-2O1PYi2j/Q0lTyGNV3JdBYwg4rKo6TEVFlYGdd5wCYU9ZIN9RRuoCnWWH2qCPj3pjIVtBeppYxzfVjPEHINWVg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-js": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.8.3.tgz", + "integrity": "sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-react-refresh": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.8.3.tgz", + "integrity": "sha512-2v/qFKp00MfG0234OdOgQNAo6TLENpFYZMbVbAsPMY9ITiqG73MrEsrGXVoGbYiGTMB/Toer/lSWlJxtacOCuA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "react-error-overlay": "6.0.9", + "react-refresh": "^0.9.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-service-worker": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.8.3.tgz", + "integrity": "sha512-/Skkw+EeRiwzOJso5fQtK8c9b452uWLNhQH1ISTodbmlcyB4YalAiSsyHCtMYD0c3/t5Sx4ZS7vxBAtQd0RvOw==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/source-map": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz", + "integrity": "sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": "^12.18.3 || >=14" + } + }, + "node_modules/@parcel/transformer-babel": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.8.3.tgz", + "integrity": "sha512-L6lExfpvvC7T/g3pxf3CIJRouQl+sgrSzuWQ0fD4PemUDHvHchSP4SNUVnd6gOytF3Y1KpnEZIunQGi5xVqQCQ==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "json5": "^2.2.0", + "nullthrows": "^1.1.1", + "semver": "^5.7.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-css": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.8.3.tgz", + "integrity": "sha512-xTqFwlSXtnaYen9ivAgz+xPW7yRl/u4QxtnDyDpz5dr8gSeOpQYRcjkd4RsYzKsWzZcGtB5EofEk8ayUbWKEUg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.16.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-html": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.8.3.tgz", + "integrity": "sha512-kIZO3qsMYTbSnSpl9cnZog+SwL517ffWH54JeB410OSAYF1ouf4n5v9qBnALZbuCCmPwJRGs4jUtE452hxwN4g==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1", + "srcset": "4" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-image": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.8.3.tgz", + "integrity": "sha512-cO4uptcCGTi5H6bvTrAWEFUsTNhA4kCo8BSvRSCHA2sf/4C5tGQPHt3JhdO0GQLPwZRCh/R41EkJs5HZ8A8DAg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/transformer-js": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.8.3.tgz", + "integrity": "sha512-9Qd6bib+sWRcpovvzvxwy/PdFrLUXGfmSW9XcVVG8pvgXsZPFaNjnNT8stzGQj1pQiougCoxMY4aTM5p1lGHEQ==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "@parcel/workers": "2.8.3", + "@swc/helpers": "^0.4.12", + "browserslist": "^4.6.6", + "detect-libc": "^1.0.3", + "nullthrows": "^1.1.1", + "regenerator-runtime": "^0.13.7", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@parcel/transformer-json": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.8.3.tgz", + "integrity": "sha512-B7LmVq5Q7bZO4ERb6NHtRuUKWGysEeaj9H4zelnyBv+wLgpo4f5FCxSE1/rTNmP9u1qHvQ3scGdK6EdSSokGPg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "json5": "^2.2.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-postcss": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.8.3.tgz", + "integrity": "sha512-e8luB/poIlz6jBsD1Izms+6ElbyzuoFVa4lFVLZnTAChI3UxPdt9p/uTsIO46HyBps/Bk8ocvt3J4YF84jzmvg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "clone": "^2.1.1", + "nullthrows": "^1.1.1", + "postcss-value-parser": "^4.2.0", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-posthtml": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.8.3.tgz", + "integrity": "sha512-pkzf9Smyeaw4uaRLsT41RGrPLT5Aip8ZPcntawAfIo+KivBQUV0erY1IvHYjyfFzq1ld/Fo2Ith9He6mxpPifA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-raw": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.8.3.tgz", + "integrity": "sha512-G+5cXnd2/1O3nV/pgRxVKZY/HcGSseuhAe71gQdSQftb8uJEURyUHoQ9Eh0JUD3MgWh9V+nIKoyFEZdf9T0sUQ==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-react-refresh-wrap": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.8.3.tgz", + "integrity": "sha512-q8AAoEvBnCf/nPvgOwFwKZfEl/thwq7c2duxXkhl+tTLDRN2vGmyz4355IxCkavSX+pLWSQ5MexklSEeMkgthg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "react-refresh": "^0.9.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-svg": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.8.3.tgz", + "integrity": "sha512-3Zr/gBzxi1ZH1fftH/+KsZU7w5GqkmxlB0ZM8ovS5E/Pl1lq1t0xvGJue9m2VuQqP8Mxfpl5qLFmsKlhaZdMIQ==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/plugin": "2.8.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/types": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.8.3.tgz", + "integrity": "sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw==", + "dev": true, + "dependencies": { + "@parcel/cache": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/workers": "2.8.3", + "utility-types": "^3.10.0" + } + }, + "node_modules/@parcel/utils": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.8.3.tgz", + "integrity": "sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA==", + "dev": true, + "dependencies": { + "@parcel/codeframe": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/hash": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/markdown-ansi": "2.8.3", + "@parcel/source-map": "^2.1.1", + "chalk": "^4.1.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.1.0.tgz", + "integrity": "sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/workers": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.8.3.tgz", + "integrity": "sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/types": "2.8.3", + "@parcel/utils": "2.8.3", + "chrome-trace-event": "^1.0.2", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.8.3" + } + }, + "node_modules/@swc/helpers": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", + "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001481", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", + "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/css-select/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/css-select/node_modules/domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/css-select/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", + "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.372", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.372.tgz", + "integrity": "sha512-MrlFq/j+TYHOjeWsWGYfzevc25HNeJdsF6qaLFrqBTRWZQtWkb1myq/Q2veLWezVaa5OcSZ99CFwTT4aF4Mung==", + "dev": true + }, + "node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/get-port": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", + "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/htmlnano": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.4.tgz", + "integrity": "sha512-WGCkyGFwjKW1GeCBsPYacMvaMnZtFJ0zIRnC2NCddkA+IOEhTqskXrS7lep+3yYZw/nQ3dW1UAX4yA/GJyR8BA==", + "dev": true, + "dependencies": { + "cosmiconfig": "^8.0.0", + "posthtml": "^0.16.5", + "timsort": "^0.3.0" + }, + "peerDependencies": { + "cssnano": "^6.0.0", + "postcss": "^8.3.11", + "purgecss": "^5.0.0", + "relateurl": "^0.2.7", + "srcset": "4.0.0", + "svgo": "^3.0.2", + "terser": "^5.10.0", + "uncss": "^0.17.3" + }, + "peerDependenciesMeta": { + "cssnano": { + "optional": true + }, + "postcss": { + "optional": true + }, + "purgecss": { + "optional": true + }, + "relateurl": { + "optional": true + }, + "srcset": { + "optional": true + }, + "svgo": { + "optional": true + }, + "terser": { + "optional": true + }, + "uncss": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-json": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", + "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lightningcss": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.20.0.tgz", + "integrity": "sha512-4bj8aP+Vi+or8Gwq/hknmicr4PmA8D9uL/3qY0N0daX5vYBMYERGI6Y93nzoeRgQMULq+gtrN/FvJYtH0xNN8g==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.20.0", + "lightningcss-darwin-x64": "1.20.0", + "lightningcss-linux-arm-gnueabihf": "1.20.0", + "lightningcss-linux-arm64-gnu": "1.20.0", + "lightningcss-linux-arm64-musl": "1.20.0", + "lightningcss-linux-x64-gnu": "1.20.0", + "lightningcss-linux-x64-musl": "1.20.0", + "lightningcss-win32-x64-msvc": "1.20.0" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.20.0.tgz", + "integrity": "sha512-cmMgY8FFWVaGgtift7eKKkHMqlz9O09/yTdlCXEDOeDP9yeo6vHOBTRP7ojb368kjw8Ew3l0L2uT1Gtx56eNkg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lmdb": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.5.2.tgz", + "integrity": "sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "msgpackr": "^1.5.4", + "node-addon-api": "^4.3.0", + "node-gyp-build-optional-packages": "5.0.3", + "ordered-binary": "^1.2.4", + "weak-lru-cache": "^1.2.2" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "2.5.2", + "@lmdb/lmdb-darwin-x64": "2.5.2", + "@lmdb/lmdb-linux-arm": "2.5.2", + "@lmdb/lmdb-linux-arm64": "2.5.2", + "@lmdb/lmdb-linux-x64": "2.5.2", + "@lmdb/lmdb-win32-x64": "2.5.2" + } + }, + "node_modules/lmdb/node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/msgpackr": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.5.tgz", + "integrity": "sha512-mpPs3qqTug6ahbblkThoUY2DQdNXcm4IapwOS3Vm/87vmpzLVelvp9h3It1y9l1VPpiFLV11vfOXnmeEwiIXwg==", + "dev": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.1" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz", + "integrity": "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.0.7" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2" + } + }, + "node_modules/msgpackr-extract/node_modules/node-gyp-build-optional-packages": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz", + "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz", + "integrity": "sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==", + "dev": true, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true + }, + "node_modules/ordered-binary": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.4.0.tgz", + "integrity": "sha512-EHQ/jk4/a9hLupIKxTfUsQRej1Yd/0QLQs3vGvIqg5ZtCYSzNhkzHoZc7Zf4e4kUlDaC3Uw8Q/1opOLNN2OKRQ==", + "dev": true + }, + "node_modules/parcel": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.8.3.tgz", + "integrity": "sha512-5rMBpbNE72g6jZvkdR5gS2nyhwIXaJy8i65osOqs/+5b7zgf3eMKgjSsDrv6bhz3gzifsba6MBJiZdBckl+vnA==", + "dev": true, + "dependencies": { + "@parcel/config-default": "2.8.3", + "@parcel/core": "2.8.3", + "@parcel/diagnostic": "2.8.3", + "@parcel/events": "2.8.3", + "@parcel/fs": "2.8.3", + "@parcel/logger": "2.8.3", + "@parcel/package-manager": "2.8.3", + "@parcel/reporter-cli": "2.8.3", + "@parcel/reporter-dev-server": "2.8.3", + "@parcel/utils": "2.8.3", + "chalk": "^4.1.0", + "commander": "^7.0.0", + "get-port": "^4.2.0", + "v8-compile-cache": "^2.0.0" + }, + "bin": { + "parcel": "lib/bin.js" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/posthtml": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", + "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", + "dev": true, + "dependencies": { + "posthtml-parser": "^0.11.0", + "posthtml-render": "^3.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/posthtml-parser": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz", + "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==", + "dev": true, + "dependencies": { + "htmlparser2": "^7.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/posthtml-render": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", + "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", + "dev": true, + "dependencies": { + "is-json": "^2.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/posthtml/node_modules/posthtml-parser": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", + "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", + "dev": true, + "dependencies": { + "htmlparser2": "^7.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", + "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", + "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/srcset": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", + "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svgo": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", + "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.2.1", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", + "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true + }, + "node_modules/xxhash-wasm": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", + "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==", + "dev": true + } + } +} diff --git a/node_modules/@babel/code-frame/LICENSE b/node_modules/@babel/code-frame/LICENSE new file mode 100644 index 0000000..f31575e --- /dev/null +++ b/node_modules/@babel/code-frame/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2014-present Sebastian McKenzie and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/@babel/code-frame/README.md b/node_modules/@babel/code-frame/README.md new file mode 100644 index 0000000..08cacb0 --- /dev/null +++ b/node_modules/@babel/code-frame/README.md @@ -0,0 +1,19 @@ +# @babel/code-frame + +> Generate errors that contain a code frame that point to source locations. + +See our website [@babel/code-frame](https://babeljs.io/docs/en/babel-code-frame) for more information. + +## Install + +Using npm: + +```sh +npm install --save-dev @babel/code-frame +``` + +or using yarn: + +```sh +yarn add @babel/code-frame --dev +``` diff --git a/node_modules/@babel/code-frame/lib/index.js b/node_modules/@babel/code-frame/lib/index.js new file mode 100644 index 0000000..cf70a04 --- /dev/null +++ b/node_modules/@babel/code-frame/lib/index.js @@ -0,0 +1,142 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.codeFrameColumns = codeFrameColumns; +exports.default = _default; +var _highlight = require("@babel/highlight"); +let deprecationWarningShown = false; +function getDefs(chalk) { + return { + gutter: chalk.grey, + marker: chalk.red.bold, + message: chalk.red.bold + }; +} +const NEWLINE = /\r\n|[\n\r\u2028\u2029]/; +function getMarkerLines(loc, source, opts) { + const startLoc = Object.assign({ + column: 0, + line: -1 + }, loc.start); + const endLoc = Object.assign({}, startLoc, loc.end); + const { + linesAbove = 2, + linesBelow = 3 + } = opts || {}; + const startLine = startLoc.line; + const startColumn = startLoc.column; + const endLine = endLoc.line; + const endColumn = endLoc.column; + let start = Math.max(startLine - (linesAbove + 1), 0); + let end = Math.min(source.length, endLine + linesBelow); + if (startLine === -1) { + start = 0; + } + if (endLine === -1) { + end = source.length; + } + const lineDiff = endLine - startLine; + const markerLines = {}; + if (lineDiff) { + for (let i = 0; i <= lineDiff; i++) { + const lineNumber = i + startLine; + if (!startColumn) { + markerLines[lineNumber] = true; + } else if (i === 0) { + const sourceLength = source[lineNumber - 1].length; + markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1]; + } else if (i === lineDiff) { + markerLines[lineNumber] = [0, endColumn]; + } else { + const sourceLength = source[lineNumber - i].length; + markerLines[lineNumber] = [0, sourceLength]; + } + } + } else { + if (startColumn === endColumn) { + if (startColumn) { + markerLines[startLine] = [startColumn, 0]; + } else { + markerLines[startLine] = true; + } + } else { + markerLines[startLine] = [startColumn, endColumn - startColumn]; + } + } + return { + start, + end, + markerLines + }; +} +function codeFrameColumns(rawLines, loc, opts = {}) { + const highlighted = (opts.highlightCode || opts.forceColor) && (0, _highlight.shouldHighlight)(opts); + const chalk = (0, _highlight.getChalk)(opts); + const defs = getDefs(chalk); + const maybeHighlight = (chalkFn, string) => { + return highlighted ? chalkFn(string) : string; + }; + const lines = rawLines.split(NEWLINE); + const { + start, + end, + markerLines + } = getMarkerLines(loc, lines, opts); + const hasColumns = loc.start && typeof loc.start.column === "number"; + const numberMaxWidth = String(end).length; + const highlightedLines = highlighted ? (0, _highlight.default)(rawLines, opts) : rawLines; + let frame = highlightedLines.split(NEWLINE, end).slice(start, end).map((line, index) => { + const number = start + 1 + index; + const paddedNumber = ` ${number}`.slice(-numberMaxWidth); + const gutter = ` ${paddedNumber} |`; + const hasMarker = markerLines[number]; + const lastMarkerLine = !markerLines[number + 1]; + if (hasMarker) { + let markerLine = ""; + if (Array.isArray(hasMarker)) { + const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " "); + const numberOfMarkers = hasMarker[1] || 1; + markerLine = ["\n ", maybeHighlight(defs.gutter, gutter.replace(/\d/g, " ")), " ", markerSpacing, maybeHighlight(defs.marker, "^").repeat(numberOfMarkers)].join(""); + if (lastMarkerLine && opts.message) { + markerLine += " " + maybeHighlight(defs.message, opts.message); + } + } + return [maybeHighlight(defs.marker, ">"), maybeHighlight(defs.gutter, gutter), line.length > 0 ? ` ${line}` : "", markerLine].join(""); + } else { + return ` ${maybeHighlight(defs.gutter, gutter)}${line.length > 0 ? ` ${line}` : ""}`; + } + }).join("\n"); + if (opts.message && !hasColumns) { + frame = `${" ".repeat(numberMaxWidth + 1)}${opts.message}\n${frame}`; + } + if (highlighted) { + return chalk.reset(frame); + } else { + return frame; + } +} +function _default(rawLines, lineNumber, colNumber, opts = {}) { + if (!deprecationWarningShown) { + deprecationWarningShown = true; + const message = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`."; + if (process.emitWarning) { + process.emitWarning(message, "DeprecationWarning"); + } else { + const deprecationError = new Error(message); + deprecationError.name = "DeprecationWarning"; + console.warn(new Error(message)); + } + } + colNumber = Math.max(colNumber, 0); + const location = { + start: { + column: colNumber, + line: lineNumber + } + }; + return codeFrameColumns(rawLines, location, opts); +} + +//# sourceMappingURL=index.js.map diff --git a/node_modules/@babel/code-frame/lib/index.js.map b/node_modules/@babel/code-frame/lib/index.js.map new file mode 100644 index 0000000..68d399e --- /dev/null +++ b/node_modules/@babel/code-frame/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_highlight","require","deprecationWarningShown","getDefs","chalk","gutter","grey","marker","red","bold","message","NEWLINE","getMarkerLines","loc","source","opts","startLoc","Object","assign","column","line","start","endLoc","end","linesAbove","linesBelow","startLine","startColumn","endLine","endColumn","Math","max","min","length","lineDiff","markerLines","i","lineNumber","sourceLength","codeFrameColumns","rawLines","highlighted","highlightCode","forceColor","shouldHighlight","getChalk","defs","maybeHighlight","chalkFn","string","lines","split","hasColumns","numberMaxWidth","String","highlightedLines","highlight","frame","slice","map","index","number","paddedNumber","hasMarker","lastMarkerLine","markerLine","Array","isArray","markerSpacing","replace","numberOfMarkers","repeat","join","reset","_default","colNumber","process","emitWarning","deprecationError","Error","name","console","warn","location"],"sources":["../src/index.ts"],"sourcesContent":["import highlight, { shouldHighlight, getChalk } from \"@babel/highlight\";\n\ntype Chalk = ReturnType;\n\nlet deprecationWarningShown = false;\n\ntype Location = {\n column: number;\n line: number;\n};\n\ntype NodeLocation = {\n end?: Location;\n start: Location;\n};\n\nexport interface Options {\n /** Syntax highlight the code as JavaScript for terminals. default: false */\n highlightCode?: boolean;\n /** The number of lines to show above the error. default: 2 */\n linesAbove?: number;\n /** The number of lines to show below the error. default: 3 */\n linesBelow?: number;\n /**\n * Forcibly syntax highlight the code as JavaScript (for non-terminals);\n * overrides highlightCode.\n * default: false\n */\n forceColor?: boolean;\n /**\n * Pass in a string to be displayed inline (if possible) next to the\n * highlighted location in the code. If it can't be positioned inline,\n * it will be placed above the code frame.\n * default: nothing\n */\n message?: string;\n}\n\n/**\n * Chalk styles for code frame token types.\n */\nfunction getDefs(chalk: Chalk) {\n return {\n gutter: chalk.grey,\n marker: chalk.red.bold,\n message: chalk.red.bold,\n };\n}\n\n/**\n * RegExp to test for newlines in terminal.\n */\n\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\n\n/**\n * Extract what lines should be marked and highlighted.\n */\n\ntype MarkerLines = Record;\n\nfunction getMarkerLines(\n loc: NodeLocation,\n source: Array,\n opts: Options,\n): {\n start: number;\n end: number;\n markerLines: MarkerLines;\n} {\n const startLoc: Location = {\n column: 0,\n line: -1,\n ...loc.start,\n };\n const endLoc: Location = {\n ...startLoc,\n ...loc.end,\n };\n const { linesAbove = 2, linesBelow = 3 } = opts || {};\n const startLine = startLoc.line;\n const startColumn = startLoc.column;\n const endLine = endLoc.line;\n const endColumn = endLoc.column;\n\n let start = Math.max(startLine - (linesAbove + 1), 0);\n let end = Math.min(source.length, endLine + linesBelow);\n\n if (startLine === -1) {\n start = 0;\n }\n\n if (endLine === -1) {\n end = source.length;\n }\n\n const lineDiff = endLine - startLine;\n const markerLines: MarkerLines = {};\n\n if (lineDiff) {\n for (let i = 0; i <= lineDiff; i++) {\n const lineNumber = i + startLine;\n\n if (!startColumn) {\n markerLines[lineNumber] = true;\n } else if (i === 0) {\n const sourceLength = source[lineNumber - 1].length;\n\n markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];\n } else if (i === lineDiff) {\n markerLines[lineNumber] = [0, endColumn];\n } else {\n const sourceLength = source[lineNumber - i].length;\n\n markerLines[lineNumber] = [0, sourceLength];\n }\n }\n } else {\n if (startColumn === endColumn) {\n if (startColumn) {\n markerLines[startLine] = [startColumn, 0];\n } else {\n markerLines[startLine] = true;\n }\n } else {\n markerLines[startLine] = [startColumn, endColumn - startColumn];\n }\n }\n\n return { start, end, markerLines };\n}\n\nexport function codeFrameColumns(\n rawLines: string,\n loc: NodeLocation,\n opts: Options = {},\n): string {\n const highlighted =\n (opts.highlightCode || opts.forceColor) && shouldHighlight(opts);\n const chalk = getChalk(opts);\n const defs = getDefs(chalk);\n const maybeHighlight = (chalkFn: Chalk, string: string) => {\n return highlighted ? chalkFn(string) : string;\n };\n const lines = rawLines.split(NEWLINE);\n const { start, end, markerLines } = getMarkerLines(loc, lines, opts);\n const hasColumns = loc.start && typeof loc.start.column === \"number\";\n\n const numberMaxWidth = String(end).length;\n\n const highlightedLines = highlighted ? highlight(rawLines, opts) : rawLines;\n\n let frame = highlightedLines\n .split(NEWLINE, end)\n .slice(start, end)\n .map((line, index) => {\n const number = start + 1 + index;\n const paddedNumber = ` ${number}`.slice(-numberMaxWidth);\n const gutter = ` ${paddedNumber} |`;\n const hasMarker = markerLines[number];\n const lastMarkerLine = !markerLines[number + 1];\n if (hasMarker) {\n let markerLine = \"\";\n if (Array.isArray(hasMarker)) {\n const markerSpacing = line\n .slice(0, Math.max(hasMarker[0] - 1, 0))\n .replace(/[^\\t]/g, \" \");\n const numberOfMarkers = hasMarker[1] || 1;\n\n markerLine = [\n \"\\n \",\n maybeHighlight(defs.gutter, gutter.replace(/\\d/g, \" \")),\n \" \",\n markerSpacing,\n maybeHighlight(defs.marker, \"^\").repeat(numberOfMarkers),\n ].join(\"\");\n\n if (lastMarkerLine && opts.message) {\n markerLine += \" \" + maybeHighlight(defs.message, opts.message);\n }\n }\n return [\n maybeHighlight(defs.marker, \">\"),\n maybeHighlight(defs.gutter, gutter),\n line.length > 0 ? ` ${line}` : \"\",\n markerLine,\n ].join(\"\");\n } else {\n return ` ${maybeHighlight(defs.gutter, gutter)}${\n line.length > 0 ? ` ${line}` : \"\"\n }`;\n }\n })\n .join(\"\\n\");\n\n if (opts.message && !hasColumns) {\n frame = `${\" \".repeat(numberMaxWidth + 1)}${opts.message}\\n${frame}`;\n }\n\n if (highlighted) {\n return chalk.reset(frame);\n } else {\n return frame;\n }\n}\n\n/**\n * Create a code frame, adding line numbers, code highlighting, and pointing to a given position.\n */\n\nexport default function (\n rawLines: string,\n lineNumber: number,\n colNumber?: number | null,\n opts: Options = {},\n): string {\n if (!deprecationWarningShown) {\n deprecationWarningShown = true;\n\n const message =\n \"Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.\";\n\n if (process.emitWarning) {\n // A string is directly supplied to emitWarning, because when supplying an\n // Error object node throws in the tests because of different contexts\n process.emitWarning(message, \"DeprecationWarning\");\n } else {\n const deprecationError = new Error(message);\n deprecationError.name = \"DeprecationWarning\";\n console.warn(new Error(message));\n }\n }\n\n colNumber = Math.max(colNumber, 0);\n\n const location: NodeLocation = {\n start: { column: colNumber, line: lineNumber },\n };\n\n return codeFrameColumns(rawLines, location, opts);\n}\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@babel/code-frame/package.json b/node_modules/@babel/code-frame/package.json new file mode 100644 index 0000000..34b8f5a --- /dev/null +++ b/node_modules/@babel/code-frame/package.json @@ -0,0 +1,28 @@ +{ + "name": "@babel/code-frame", + "version": "7.21.4", + "description": "Generate errors that contain a code frame that point to source locations.", + "author": "The Babel Team (https://babel.dev/team)", + "homepage": "https://babel.dev/docs/en/next/babel-code-frame", + "bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/babel/babel.git", + "directory": "packages/babel-code-frame" + }, + "main": "./lib/index.js", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "devDependencies": { + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "type": "commonjs" +} \ No newline at end of file diff --git a/node_modules/@babel/helper-validator-identifier/LICENSE b/node_modules/@babel/helper-validator-identifier/LICENSE new file mode 100644 index 0000000..f31575e --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2014-present Sebastian McKenzie and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/@babel/helper-validator-identifier/README.md b/node_modules/@babel/helper-validator-identifier/README.md new file mode 100644 index 0000000..4f704c4 --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/README.md @@ -0,0 +1,19 @@ +# @babel/helper-validator-identifier + +> Validate identifier/keywords name + +See our website [@babel/helper-validator-identifier](https://babeljs.io/docs/en/babel-helper-validator-identifier) for more information. + +## Install + +Using npm: + +```sh +npm install --save @babel/helper-validator-identifier +``` + +or using yarn: + +```sh +yarn add @babel/helper-validator-identifier +``` diff --git a/node_modules/@babel/helper-validator-identifier/lib/identifier.js b/node_modules/@babel/helper-validator-identifier/lib/identifier.js new file mode 100644 index 0000000..3a9e335 --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/lib/identifier.js @@ -0,0 +1,86 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isIdentifierChar = isIdentifierChar; +exports.isIdentifierName = isIdentifierName; +exports.isIdentifierStart = isIdentifierStart; +let 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\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\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\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\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-\u1711\u171f-\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-\u1b4c\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-\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-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\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-\uab69\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"; +let 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\u0898-\u089f\u08ca-\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\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\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\u0cf3\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ece\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-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\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-\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\ua82c\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"; +const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); +const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]"); +nonASCIIidentifierStartChars = nonASCIIidentifierChars = null; +const 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, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 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, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 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, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 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, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 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, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 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, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191]; +const 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, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 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, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 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, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 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, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239]; + +function isInAstralSet(code, set) { + let pos = 0x10000; + + for (let i = 0, length = set.length; i < length; i += 2) { + pos += set[i]; + if (pos > code) return false; + pos += set[i + 1]; + if (pos >= code) return true; + } + + return false; +} + +function isIdentifierStart(code) { + if (code < 65) return code === 36; + if (code <= 90) return true; + if (code < 97) return code === 95; + if (code <= 122) return true; + + if (code <= 0xffff) { + return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)); + } + + return isInAstralSet(code, astralIdentifierStartCodes); +} + +function isIdentifierChar(code) { + if (code < 48) return code === 36; + if (code < 58) return true; + if (code < 65) return false; + if (code <= 90) return true; + if (code < 97) return code === 95; + if (code <= 122) return true; + + if (code <= 0xffff) { + return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)); + } + + return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes); +} + +function isIdentifierName(name) { + let isFirst = true; + + for (let i = 0; i < name.length; i++) { + let cp = name.charCodeAt(i); + + if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) { + const trail = name.charCodeAt(++i); + + if ((trail & 0xfc00) === 0xdc00) { + cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff); + } + } + + if (isFirst) { + isFirst = false; + + if (!isIdentifierStart(cp)) { + return false; + } + } else if (!isIdentifierChar(cp)) { + return false; + } + } + + return !isFirst; +} + +//# sourceMappingURL=identifier.js.map diff --git a/node_modules/@babel/helper-validator-identifier/lib/identifier.js.map b/node_modules/@babel/helper-validator-identifier/lib/identifier.js.map new file mode 100644 index 0000000..45c94ff --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/lib/identifier.js.map @@ -0,0 +1 @@ +{"version":3,"names":["nonASCIIidentifierStartChars","nonASCIIidentifierChars","nonASCIIidentifierStart","RegExp","nonASCIIidentifier","astralIdentifierStartCodes","astralIdentifierCodes","isInAstralSet","code","set","pos","i","length","isIdentifierStart","test","String","fromCharCode","isIdentifierChar","isIdentifierName","name","isFirst","cp","charCodeAt","trail"],"sources":["../src/identifier.ts"],"sourcesContent":["import * as charCodes from \"charcodes\";\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point between 0x80 and 0xffff.\n// Generated by `scripts/generate-identifier-regex.js`.\n\n/* prettier-ignore */\nlet 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\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\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\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\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-\\u1711\\u171f-\\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-\\u1b4c\\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-\\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-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\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-\\uab69\\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\";\n/* prettier-ignore */\nlet 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\\u0898-\\u089f\\u08ca-\\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\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\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\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\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-\\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\\ua82c\\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\";\n\nconst nonASCIIidentifierStart = new RegExp(\n \"[\" + nonASCIIidentifierStartChars + \"]\",\n);\nconst nonASCIIidentifier = new RegExp(\n \"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\",\n);\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n// These are a run-length and offset-encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by `scripts/generate-identifier-regex.js`.\n/* prettier-ignore */\nconst 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,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,68,310,10,21,11,7,25,5,2,41,2,8,70,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,349,41,7,1,79,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,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,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,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,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,4026,582,8634,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8936,3,2,6,2,1,2,290,16,0,30,2,3,0,15,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,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,757,6,2,3,2,1,2,14,2,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,42719,33,4153,7,221,3,5761,15,7472,3104,541,1507,4938,6,4191];\n/* prettier-ignore */\nconst 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,370,1,81,2,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,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,71,5,2,1,3,3,2,0,2,1,13,9,120,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,10,1,2,0,49,6,4,4,14,9,5351,0,7,14,13835,9,87,9,39,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,4706,45,3,22,543,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,101,0,161,6,10,9,357,0,62,13,499,13,983,6,110,6,6,9,4759,9,787719,239];\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code: number, set: readonly number[]): boolean {\n let pos = 0x10000;\n for (let i = 0, length = set.length; i < length; i += 2) {\n pos += set[i];\n if (pos > code) return false;\n\n pos += set[i + 1];\n if (pos >= code) return true;\n }\n return false;\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code: number): boolean {\n if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\n if (code <= charCodes.uppercaseZ) return true;\n if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n if (code <= charCodes.lowercaseZ) return true;\n if (code <= 0xffff) {\n return (\n code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n );\n }\n return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code: number): boolean {\n if (code < charCodes.digit0) return code === charCodes.dollarSign;\n if (code < charCodes.colon) return true;\n if (code < charCodes.uppercaseA) return false;\n if (code <= charCodes.uppercaseZ) return true;\n if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n if (code <= charCodes.lowercaseZ) return true;\n if (code <= 0xffff) {\n return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n }\n return (\n isInAstralSet(code, astralIdentifierStartCodes) ||\n isInAstralSet(code, astralIdentifierCodes)\n );\n}\n\n// Test whether a given string is a valid identifier name\n\nexport function isIdentifierName(name: string): boolean {\n let isFirst = true;\n for (let i = 0; i < name.length; i++) {\n // The implementation is based on\n // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n // since `name` is mostly ASCII, an inlined `charCodeAt` wins here\n let cp = name.charCodeAt(i);\n if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {\n const trail = name.charCodeAt(++i);\n if ((trail & 0xfc00) === 0xdc00) {\n cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n }\n }\n if (isFirst) {\n isFirst = false;\n if (!isIdentifierStart(cp)) {\n return false;\n }\n } else if (!isIdentifierChar(cp)) {\n return false;\n }\n }\n return !isFirst;\n}\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@babel/helper-validator-identifier/lib/index.js b/node_modules/@babel/helper-validator-identifier/lib/index.js new file mode 100644 index 0000000..076eafd --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/lib/index.js @@ -0,0 +1,59 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isIdentifierChar", { + enumerable: true, + get: function () { + return _identifier.isIdentifierChar; + } +}); +Object.defineProperty(exports, "isIdentifierName", { + enumerable: true, + get: function () { + return _identifier.isIdentifierName; + } +}); +Object.defineProperty(exports, "isIdentifierStart", { + enumerable: true, + get: function () { + return _identifier.isIdentifierStart; + } +}); +Object.defineProperty(exports, "isKeyword", { + enumerable: true, + get: function () { + return _keyword.isKeyword; + } +}); +Object.defineProperty(exports, "isReservedWord", { + enumerable: true, + get: function () { + return _keyword.isReservedWord; + } +}); +Object.defineProperty(exports, "isStrictBindOnlyReservedWord", { + enumerable: true, + get: function () { + return _keyword.isStrictBindOnlyReservedWord; + } +}); +Object.defineProperty(exports, "isStrictBindReservedWord", { + enumerable: true, + get: function () { + return _keyword.isStrictBindReservedWord; + } +}); +Object.defineProperty(exports, "isStrictReservedWord", { + enumerable: true, + get: function () { + return _keyword.isStrictReservedWord; + } +}); + +var _identifier = require("./identifier"); + +var _keyword = require("./keyword"); + +//# sourceMappingURL=index.js.map diff --git a/node_modules/@babel/helper-validator-identifier/lib/index.js.map b/node_modules/@babel/helper-validator-identifier/lib/index.js.map new file mode 100644 index 0000000..13266b9 --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"sources":["../src/index.ts"],"sourcesContent":["export {\n isIdentifierName,\n isIdentifierChar,\n isIdentifierStart,\n} from \"./identifier\";\nexport {\n isReservedWord,\n isStrictBindOnlyReservedWord,\n isStrictBindReservedWord,\n isStrictReservedWord,\n isKeyword,\n} from \"./keyword\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAKA"} \ No newline at end of file diff --git a/node_modules/@babel/helper-validator-identifier/lib/keyword.js b/node_modules/@babel/helper-validator-identifier/lib/keyword.js new file mode 100644 index 0000000..ff6277b --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/lib/keyword.js @@ -0,0 +1,40 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isKeyword = isKeyword; +exports.isReservedWord = isReservedWord; +exports.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord; +exports.isStrictBindReservedWord = isStrictBindReservedWord; +exports.isStrictReservedWord = isStrictReservedWord; +const reservedWords = { + keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"], + strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"], + strictBind: ["eval", "arguments"] +}; +const keywords = new Set(reservedWords.keyword); +const reservedWordsStrictSet = new Set(reservedWords.strict); +const reservedWordsStrictBindSet = new Set(reservedWords.strictBind); + +function isReservedWord(word, inModule) { + return inModule && word === "await" || word === "enum"; +} + +function isStrictReservedWord(word, inModule) { + return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word); +} + +function isStrictBindOnlyReservedWord(word) { + return reservedWordsStrictBindSet.has(word); +} + +function isStrictBindReservedWord(word, inModule) { + return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word); +} + +function isKeyword(word) { + return keywords.has(word); +} + +//# sourceMappingURL=keyword.js.map diff --git a/node_modules/@babel/helper-validator-identifier/lib/keyword.js.map b/node_modules/@babel/helper-validator-identifier/lib/keyword.js.map new file mode 100644 index 0000000..2de8c3e --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/lib/keyword.js.map @@ -0,0 +1 @@ +{"version":3,"names":["reservedWords","keyword","strict","strictBind","keywords","Set","reservedWordsStrictSet","reservedWordsStrictBindSet","isReservedWord","word","inModule","isStrictReservedWord","has","isStrictBindOnlyReservedWord","isStrictBindReservedWord","isKeyword"],"sources":["../src/keyword.ts"],"sourcesContent":["const reservedWords = {\n keyword: [\n \"break\",\n \"case\",\n \"catch\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"do\",\n \"else\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"return\",\n \"switch\",\n \"throw\",\n \"try\",\n \"var\",\n \"const\",\n \"while\",\n \"with\",\n \"new\",\n \"this\",\n \"super\",\n \"class\",\n \"extends\",\n \"export\",\n \"import\",\n \"null\",\n \"true\",\n \"false\",\n \"in\",\n \"instanceof\",\n \"typeof\",\n \"void\",\n \"delete\",\n ],\n strict: [\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"yield\",\n ],\n strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n word: string,\n inModule: boolean,\n): boolean {\n return (\n isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n );\n}\n\nexport function isKeyword(word: string): boolean {\n return keywords.has(word);\n}\n"],"mappings":";;;;;;;;;;AAAA,MAAMA,aAAa,GAAG;EACpBC,OAAO,EAAE,CACP,OADO,EAEP,MAFO,EAGP,OAHO,EAIP,UAJO,EAKP,UALO,EAMP,SANO,EAOP,IAPO,EAQP,MARO,EASP,SATO,EAUP,KAVO,EAWP,UAXO,EAYP,IAZO,EAaP,QAbO,EAcP,QAdO,EAeP,OAfO,EAgBP,KAhBO,EAiBP,KAjBO,EAkBP,OAlBO,EAmBP,OAnBO,EAoBP,MApBO,EAqBP,KArBO,EAsBP,MAtBO,EAuBP,OAvBO,EAwBP,OAxBO,EAyBP,SAzBO,EA0BP,QA1BO,EA2BP,QA3BO,EA4BP,MA5BO,EA6BP,MA7BO,EA8BP,OA9BO,EA+BP,IA/BO,EAgCP,YAhCO,EAiCP,QAjCO,EAkCP,MAlCO,EAmCP,QAnCO,CADW;EAsCpBC,MAAM,EAAE,CACN,YADM,EAEN,WAFM,EAGN,KAHM,EAIN,SAJM,EAKN,SALM,EAMN,WANM,EAON,QAPM,EAQN,QARM,EASN,OATM,CAtCY;EAiDpBC,UAAU,EAAE,CAAC,MAAD,EAAS,WAAT;AAjDQ,CAAtB;AAmDA,MAAMC,QAAQ,GAAG,IAAIC,GAAJ,CAAQL,aAAa,CAACC,OAAtB,CAAjB;AACA,MAAMK,sBAAsB,GAAG,IAAID,GAAJ,CAAQL,aAAa,CAACE,MAAtB,CAA/B;AACA,MAAMK,0BAA0B,GAAG,IAAIF,GAAJ,CAAQL,aAAa,CAACG,UAAtB,CAAnC;;AAKO,SAASK,cAAT,CAAwBC,IAAxB,EAAsCC,QAAtC,EAAkE;EACvE,OAAQA,QAAQ,IAAID,IAAI,KAAK,OAAtB,IAAkCA,IAAI,KAAK,MAAlD;AACD;;AAOM,SAASE,oBAAT,CAA8BF,IAA9B,EAA4CC,QAA5C,EAAwE;EAC7E,OAAOF,cAAc,CAACC,IAAD,EAAOC,QAAP,CAAd,IAAkCJ,sBAAsB,CAACM,GAAvB,CAA2BH,IAA3B,CAAzC;AACD;;AAMM,SAASI,4BAAT,CAAsCJ,IAAtC,EAA6D;EAClE,OAAOF,0BAA0B,CAACK,GAA3B,CAA+BH,IAA/B,CAAP;AACD;;AAOM,SAASK,wBAAT,CACLL,IADK,EAELC,QAFK,EAGI;EACT,OACEC,oBAAoB,CAACF,IAAD,EAAOC,QAAP,CAApB,IAAwCG,4BAA4B,CAACJ,IAAD,CADtE;AAGD;;AAEM,SAASM,SAAT,CAAmBN,IAAnB,EAA0C;EAC/C,OAAOL,QAAQ,CAACQ,GAAT,CAAaH,IAAb,CAAP;AACD"} \ No newline at end of file diff --git a/node_modules/@babel/helper-validator-identifier/package.json b/node_modules/@babel/helper-validator-identifier/package.json new file mode 100644 index 0000000..6e7de1e --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/package.json @@ -0,0 +1,28 @@ +{ + "name": "@babel/helper-validator-identifier", + "version": "7.19.1", + "description": "Validate identifier/keywords name", + "repository": { + "type": "git", + "url": "https://github.com/babel/babel.git", + "directory": "packages/babel-helper-validator-identifier" + }, + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "main": "./lib/index.js", + "exports": { + ".": "./lib/index.js", + "./package.json": "./package.json" + }, + "devDependencies": { + "@unicode/unicode-15.0.0": "^1.3.1", + "charcodes": "^0.2.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "author": "The Babel Team (https://babel.dev/team)", + "type": "commonjs" +} \ No newline at end of file diff --git a/node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js b/node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js new file mode 100644 index 0000000..aca8710 --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js @@ -0,0 +1,75 @@ +"use strict"; + +// Always use the latest available version of Unicode! +// https://tc39.github.io/ecma262/#sec-conformance +const version = "15.0.0"; + +const start = require("@unicode/unicode-" + + version + + "/Binary_Property/ID_Start/code-points.js").filter(function (ch) { + return ch > 0x7f; +}); +let last = -1; +const cont = [0x200c, 0x200d].concat( + require("@unicode/unicode-" + + version + + "/Binary_Property/ID_Continue/code-points.js").filter(function (ch) { + return ch > 0x7f && search(start, ch, last + 1) == -1; + }) +); + +function search(arr, ch, starting) { + for (let i = starting; arr[i] <= ch && i < arr.length; last = i++) { + if (arr[i] === ch) return i; + } + return -1; +} + +function pad(str, width) { + while (str.length < width) str = "0" + str; + return str; +} + +function esc(code) { + const hex = code.toString(16); + if (hex.length <= 2) return "\\x" + pad(hex, 2); + else return "\\u" + pad(hex, 4); +} + +function generate(chars) { + const astral = []; + let re = ""; + for (let i = 0, at = 0x10000; i < chars.length; i++) { + const from = chars[i]; + let to = from; + while (i < chars.length - 1 && chars[i + 1] == to + 1) { + i++; + to++; + } + if (to <= 0xffff) { + if (from == to) re += esc(from); + else if (from + 1 == to) re += esc(from) + esc(to); + else re += esc(from) + "-" + esc(to); + } else { + astral.push(from - at, to - from); + at = to; + } + } + return { nonASCII: re, astral: astral }; +} + +const startData = generate(start); +const contData = generate(cont); + +console.log("/* prettier-ignore */"); +console.log('let nonASCIIidentifierStartChars = "' + startData.nonASCII + '";'); +console.log("/* prettier-ignore */"); +console.log('let nonASCIIidentifierChars = "' + contData.nonASCII + '";'); +console.log("/* prettier-ignore */"); +console.log( + "const astralIdentifierStartCodes = " + JSON.stringify(startData.astral) + ";" +); +console.log("/* prettier-ignore */"); +console.log( + "const astralIdentifierCodes = " + JSON.stringify(contData.astral) + ";" +); diff --git a/node_modules/@babel/highlight/LICENSE b/node_modules/@babel/highlight/LICENSE new file mode 100644 index 0000000..f31575e --- /dev/null +++ b/node_modules/@babel/highlight/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2014-present Sebastian McKenzie and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/@babel/highlight/README.md b/node_modules/@babel/highlight/README.md new file mode 100644 index 0000000..f8887ad --- /dev/null +++ b/node_modules/@babel/highlight/README.md @@ -0,0 +1,19 @@ +# @babel/highlight + +> Syntax highlight JavaScript strings for output in terminals. + +See our website [@babel/highlight](https://babeljs.io/docs/en/babel-highlight) for more information. + +## Install + +Using npm: + +```sh +npm install --save-dev @babel/highlight +``` + +or using yarn: + +```sh +yarn add @babel/highlight --dev +``` diff --git a/node_modules/@babel/highlight/lib/index.js b/node_modules/@babel/highlight/lib/index.js new file mode 100644 index 0000000..856dfd9 --- /dev/null +++ b/node_modules/@babel/highlight/lib/index.js @@ -0,0 +1,116 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = highlight; +exports.getChalk = getChalk; +exports.shouldHighlight = shouldHighlight; + +var _jsTokens = require("js-tokens"); + +var _helperValidatorIdentifier = require("@babel/helper-validator-identifier"); + +var _chalk = require("chalk"); + +const sometimesKeywords = new Set(["as", "async", "from", "get", "of", "set"]); + +function getDefs(chalk) { + return { + keyword: chalk.cyan, + capitalized: chalk.yellow, + jsxIdentifier: chalk.yellow, + punctuator: chalk.yellow, + number: chalk.magenta, + string: chalk.green, + regex: chalk.magenta, + comment: chalk.grey, + invalid: chalk.white.bgRed.bold + }; +} + +const NEWLINE = /\r\n|[\n\r\u2028\u2029]/; +const BRACKET = /^[()[\]{}]$/; +let tokenize; +{ + const JSX_TAG = /^[a-z][\w-]*$/i; + + const getTokenType = function (token, offset, text) { + if (token.type === "name") { + if ((0, _helperValidatorIdentifier.isKeyword)(token.value) || (0, _helperValidatorIdentifier.isStrictReservedWord)(token.value, true) || sometimesKeywords.has(token.value)) { + return "keyword"; + } + + if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.slice(offset - 2, offset) == " colorize(str)).join("\n"); + } else { + highlighted += value; + } + } + + return highlighted; +} + +function shouldHighlight(options) { + return !!_chalk.supportsColor || options.forceColor; +} + +function getChalk(options) { + return options.forceColor ? new _chalk.constructor({ + enabled: true, + level: 1 + }) : _chalk; +} + +function highlight(code, options = {}) { + if (code !== "" && shouldHighlight(options)) { + const chalk = getChalk(options); + const defs = getDefs(chalk); + return highlightTokens(defs, code); + } else { + return code; + } +} \ No newline at end of file diff --git a/node_modules/@babel/highlight/node_modules/ansi-styles/index.js b/node_modules/@babel/highlight/node_modules/ansi-styles/index.js new file mode 100644 index 0000000..90a871c --- /dev/null +++ b/node_modules/@babel/highlight/node_modules/ansi-styles/index.js @@ -0,0 +1,165 @@ +'use strict'; +const colorConvert = require('color-convert'); + +const wrapAnsi16 = (fn, offset) => function () { + const code = fn.apply(colorConvert, arguments); + return `\u001B[${code + offset}m`; +}; + +const wrapAnsi256 = (fn, offset) => function () { + const code = fn.apply(colorConvert, arguments); + return `\u001B[${38 + offset};5;${code}m`; +}; + +const wrapAnsi16m = (fn, offset) => function () { + const rgb = fn.apply(colorConvert, arguments); + return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; +}; + +function assembleStyles() { + const codes = new Map(); + const styles = { + modifier: { + reset: [0, 0], + // 21 isn't widely supported and 22 does the same thing + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29] + }, + color: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + gray: [90, 39], + + // Bright color + redBright: [91, 39], + greenBright: [92, 39], + yellowBright: [93, 39], + blueBright: [94, 39], + magentaBright: [95, 39], + cyanBright: [96, 39], + whiteBright: [97, 39] + }, + bgColor: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], + + // Bright color + bgBlackBright: [100, 49], + bgRedBright: [101, 49], + bgGreenBright: [102, 49], + bgYellowBright: [103, 49], + bgBlueBright: [104, 49], + bgMagentaBright: [105, 49], + bgCyanBright: [106, 49], + bgWhiteBright: [107, 49] + } + }; + + // Fix humans + styles.color.grey = styles.color.gray; + + for (const groupName of Object.keys(styles)) { + const group = styles[groupName]; + + for (const styleName of Object.keys(group)) { + const style = group[styleName]; + + styles[styleName] = { + open: `\u001B[${style[0]}m`, + close: `\u001B[${style[1]}m` + }; + + group[styleName] = styles[styleName]; + + codes.set(style[0], style[1]); + } + + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false + }); + + Object.defineProperty(styles, 'codes', { + value: codes, + enumerable: false + }); + } + + const ansi2ansi = n => n; + const rgb2rgb = (r, g, b) => [r, g, b]; + + styles.color.close = '\u001B[39m'; + styles.bgColor.close = '\u001B[49m'; + + styles.color.ansi = { + ansi: wrapAnsi16(ansi2ansi, 0) + }; + styles.color.ansi256 = { + ansi256: wrapAnsi256(ansi2ansi, 0) + }; + styles.color.ansi16m = { + rgb: wrapAnsi16m(rgb2rgb, 0) + }; + + styles.bgColor.ansi = { + ansi: wrapAnsi16(ansi2ansi, 10) + }; + styles.bgColor.ansi256 = { + ansi256: wrapAnsi256(ansi2ansi, 10) + }; + styles.bgColor.ansi16m = { + rgb: wrapAnsi16m(rgb2rgb, 10) + }; + + for (let key of Object.keys(colorConvert)) { + if (typeof colorConvert[key] !== 'object') { + continue; + } + + const suite = colorConvert[key]; + + if (key === 'ansi16') { + key = 'ansi'; + } + + if ('ansi16' in suite) { + styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0); + styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10); + } + + if ('ansi256' in suite) { + styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0); + styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10); + } + + if ('rgb' in suite) { + styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0); + styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10); + } + } + + return styles; +} + +// Make the export immutable +Object.defineProperty(module, 'exports', { + enumerable: true, + get: assembleStyles +}); diff --git a/node_modules/@babel/highlight/node_modules/ansi-styles/license b/node_modules/@babel/highlight/node_modules/ansi-styles/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/@babel/highlight/node_modules/ansi-styles/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/@babel/highlight/node_modules/ansi-styles/package.json b/node_modules/@babel/highlight/node_modules/ansi-styles/package.json new file mode 100644 index 0000000..65edb48 --- /dev/null +++ b/node_modules/@babel/highlight/node_modules/ansi-styles/package.json @@ -0,0 +1,56 @@ +{ + "name": "ansi-styles", + "version": "3.2.1", + "description": "ANSI escape codes for styling strings in the terminal", + "license": "MIT", + "repository": "chalk/ansi-styles", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=4" + }, + "scripts": { + "test": "xo && ava", + "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor" + }, + "files": [ + "index.js" + ], + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "color-convert": "^1.9.0" + }, + "devDependencies": { + "ava": "*", + "babel-polyfill": "^6.23.0", + "svg-term-cli": "^2.1.1", + "xo": "*" + }, + "ava": { + "require": "babel-polyfill" + } +} diff --git a/node_modules/@babel/highlight/node_modules/ansi-styles/readme.md b/node_modules/@babel/highlight/node_modules/ansi-styles/readme.md new file mode 100644 index 0000000..3158e2d --- /dev/null +++ b/node_modules/@babel/highlight/node_modules/ansi-styles/readme.md @@ -0,0 +1,147 @@ +# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles) + +> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal + +You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings. + + + + +## Install + +``` +$ npm install ansi-styles +``` + + +## Usage + +```js +const style = require('ansi-styles'); + +console.log(`${style.green.open}Hello world!${style.green.close}`); + + +// Color conversion between 16/256/truecolor +// NOTE: If conversion goes to 16 colors or 256 colors, the original color +// may be degraded to fit that color palette. This means terminals +// that do not support 16 million colors will best-match the +// original color. +console.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close); +console.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close); +console.log(style.color.ansi16m.hex('#ABCDEF') + 'Hello world!' + style.color.close); +``` + +## API + +Each style has an `open` and `close` property. + + +## Styles + +### Modifiers + +- `reset` +- `bold` +- `dim` +- `italic` *(Not widely supported)* +- `underline` +- `inverse` +- `hidden` +- `strikethrough` *(Not widely supported)* + +### Colors + +- `black` +- `red` +- `green` +- `yellow` +- `blue` +- `magenta` +- `cyan` +- `white` +- `gray` ("bright black") +- `redBright` +- `greenBright` +- `yellowBright` +- `blueBright` +- `magentaBright` +- `cyanBright` +- `whiteBright` + +### Background colors + +- `bgBlack` +- `bgRed` +- `bgGreen` +- `bgYellow` +- `bgBlue` +- `bgMagenta` +- `bgCyan` +- `bgWhite` +- `bgBlackBright` +- `bgRedBright` +- `bgGreenBright` +- `bgYellowBright` +- `bgBlueBright` +- `bgMagentaBright` +- `bgCyanBright` +- `bgWhiteBright` + + +## Advanced usage + +By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module. + +- `style.modifier` +- `style.color` +- `style.bgColor` + +###### Example + +```js +console.log(style.color.green.open); +``` + +Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `style.codes`, which returns a `Map` with the open codes as keys and close codes as values. + +###### Example + +```js +console.log(style.codes.get(36)); +//=> 39 +``` + + +## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728) + +`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors. + +To use these, call the associated conversion function with the intended output, for example: + +```js +style.color.ansi.rgb(100, 200, 15); // RGB to 16 color ansi foreground code +style.bgColor.ansi.rgb(100, 200, 15); // RGB to 16 color ansi background code + +style.color.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code +style.bgColor.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code + +style.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground code +style.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code +``` + + +## Related + +- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +## License + +MIT diff --git a/node_modules/@babel/highlight/node_modules/chalk/index.js b/node_modules/@babel/highlight/node_modules/chalk/index.js new file mode 100644 index 0000000..1cc5fa8 --- /dev/null +++ b/node_modules/@babel/highlight/node_modules/chalk/index.js @@ -0,0 +1,228 @@ +'use strict'; +const escapeStringRegexp = require('escape-string-regexp'); +const ansiStyles = require('ansi-styles'); +const stdoutColor = require('supports-color').stdout; + +const template = require('./templates.js'); + +const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm'); + +// `supportsColor.level` → `ansiStyles.color[name]` mapping +const levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m']; + +// `color-convert` models to exclude from the Chalk API due to conflicts and such +const skipModels = new Set(['gray']); + +const styles = Object.create(null); + +function applyOptions(obj, options) { + options = options || {}; + + // Detect level if not set manually + const scLevel = stdoutColor ? stdoutColor.level : 0; + obj.level = options.level === undefined ? scLevel : options.level; + obj.enabled = 'enabled' in options ? options.enabled : obj.level > 0; +} + +function Chalk(options) { + // We check for this.template here since calling `chalk.constructor()` + // by itself will have a `this` of a previously constructed chalk object + if (!this || !(this instanceof Chalk) || this.template) { + const chalk = {}; + applyOptions(chalk, options); + + chalk.template = function () { + const args = [].slice.call(arguments); + return chalkTag.apply(null, [chalk.template].concat(args)); + }; + + Object.setPrototypeOf(chalk, Chalk.prototype); + Object.setPrototypeOf(chalk.template, chalk); + + chalk.template.constructor = Chalk; + + return chalk.template; + } + + applyOptions(this, options); +} + +// Use bright blue on Windows as the normal blue color is illegible +if (isSimpleWindowsTerm) { + ansiStyles.blue.open = '\u001B[94m'; +} + +for (const key of Object.keys(ansiStyles)) { + ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g'); + + styles[key] = { + get() { + const codes = ansiStyles[key]; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key); + } + }; +} + +styles.visible = { + get() { + return build.call(this, this._styles || [], true, 'visible'); + } +}; + +ansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g'); +for (const model of Object.keys(ansiStyles.color.ansi)) { + if (skipModels.has(model)) { + continue; + } + + styles[model] = { + get() { + const level = this.level; + return function () { + const open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments); + const codes = { + open, + close: ansiStyles.color.close, + closeRe: ansiStyles.color.closeRe + }; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); + }; + } + }; +} + +ansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g'); +for (const model of Object.keys(ansiStyles.bgColor.ansi)) { + if (skipModels.has(model)) { + continue; + } + + const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1); + styles[bgModel] = { + get() { + const level = this.level; + return function () { + const open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments); + const codes = { + open, + close: ansiStyles.bgColor.close, + closeRe: ansiStyles.bgColor.closeRe + }; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); + }; + } + }; +} + +const proto = Object.defineProperties(() => {}, styles); + +function build(_styles, _empty, key) { + const builder = function () { + return applyStyle.apply(builder, arguments); + }; + + builder._styles = _styles; + builder._empty = _empty; + + const self = this; + + Object.defineProperty(builder, 'level', { + enumerable: true, + get() { + return self.level; + }, + set(level) { + self.level = level; + } + }); + + Object.defineProperty(builder, 'enabled', { + enumerable: true, + get() { + return self.enabled; + }, + set(enabled) { + self.enabled = enabled; + } + }); + + // See below for fix regarding invisible grey/dim combination on Windows + builder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey'; + + // `__proto__` is used because we must return a function, but there is + // no way to create a function with a different prototype + builder.__proto__ = proto; // eslint-disable-line no-proto + + return builder; +} + +function applyStyle() { + // Support varags, but simply cast to string in case there's only one arg + const args = arguments; + const argsLen = args.length; + let str = String(arguments[0]); + + if (argsLen === 0) { + return ''; + } + + if (argsLen > 1) { + // Don't slice `arguments`, it prevents V8 optimizations + for (let a = 1; a < argsLen; a++) { + str += ' ' + args[a]; + } + } + + if (!this.enabled || this.level <= 0 || !str) { + return this._empty ? '' : str; + } + + // Turns out that on Windows dimmed gray text becomes invisible in cmd.exe, + // see https://github.com/chalk/chalk/issues/58 + // If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop. + const originalDim = ansiStyles.dim.open; + if (isSimpleWindowsTerm && this.hasGrey) { + ansiStyles.dim.open = ''; + } + + for (const code of this._styles.slice().reverse()) { + // Replace any instances already present with a re-opening code + // otherwise only the part of the string until said closing code + // will be colored, and the rest will simply be 'plain'. + str = code.open + str.replace(code.closeRe, code.open) + code.close; + + // Close the styling before a linebreak and reopen + // after next line to fix a bleed issue on macOS + // https://github.com/chalk/chalk/pull/92 + str = str.replace(/\r?\n/g, `${code.close}$&${code.open}`); + } + + // Reset the original `dim` if we changed it to work around the Windows dimmed gray issue + ansiStyles.dim.open = originalDim; + + return str; +} + +function chalkTag(chalk, strings) { + if (!Array.isArray(strings)) { + // If chalk() was called by itself or with a string, + // return the string itself as a string. + return [].slice.call(arguments, 1).join(' '); + } + + const args = [].slice.call(arguments, 2); + const parts = [strings.raw[0]]; + + for (let i = 1; i < strings.length; i++) { + parts.push(String(args[i - 1]).replace(/[{}\\]/g, '\\$&')); + parts.push(String(strings.raw[i])); + } + + return template(chalk, parts.join('')); +} + +Object.defineProperties(Chalk.prototype, styles); + +module.exports = Chalk(); // eslint-disable-line new-cap +module.exports.supportsColor = stdoutColor; +module.exports.default = module.exports; // For TypeScript diff --git a/node_modules/@babel/highlight/node_modules/chalk/index.js.flow b/node_modules/@babel/highlight/node_modules/chalk/index.js.flow new file mode 100644 index 0000000..622caaa --- /dev/null +++ b/node_modules/@babel/highlight/node_modules/chalk/index.js.flow @@ -0,0 +1,93 @@ +// @flow strict + +type TemplateStringsArray = $ReadOnlyArray; + +export type Level = $Values<{ + None: 0, + Basic: 1, + Ansi256: 2, + TrueColor: 3 +}>; + +export type ChalkOptions = {| + enabled?: boolean, + level?: Level +|}; + +export type ColorSupport = {| + level: Level, + hasBasic: boolean, + has256: boolean, + has16m: boolean +|}; + +export interface Chalk { + (...text: string[]): string, + (text: TemplateStringsArray, ...placeholders: string[]): string, + constructor(options?: ChalkOptions): Chalk, + enabled: boolean, + level: Level, + rgb(r: number, g: number, b: number): Chalk, + hsl(h: number, s: number, l: number): Chalk, + hsv(h: number, s: number, v: number): Chalk, + hwb(h: number, w: number, b: number): Chalk, + bgHex(color: string): Chalk, + bgKeyword(color: string): Chalk, + bgRgb(r: number, g: number, b: number): Chalk, + bgHsl(h: number, s: number, l: number): Chalk, + bgHsv(h: number, s: number, v: number): Chalk, + bgHwb(h: number, w: number, b: number): Chalk, + hex(color: string): Chalk, + keyword(color: string): Chalk, + + +reset: Chalk, + +bold: Chalk, + +dim: Chalk, + +italic: Chalk, + +underline: Chalk, + +inverse: Chalk, + +hidden: Chalk, + +strikethrough: Chalk, + + +visible: Chalk, + + +black: Chalk, + +red: Chalk, + +green: Chalk, + +yellow: Chalk, + +blue: Chalk, + +magenta: Chalk, + +cyan: Chalk, + +white: Chalk, + +gray: Chalk, + +grey: Chalk, + +blackBright: Chalk, + +redBright: Chalk, + +greenBright: Chalk, + +yellowBright: Chalk, + +blueBright: Chalk, + +magentaBright: Chalk, + +cyanBright: Chalk, + +whiteBright: Chalk, + + +bgBlack: Chalk, + +bgRed: Chalk, + +bgGreen: Chalk, + +bgYellow: Chalk, + +bgBlue: Chalk, + +bgMagenta: Chalk, + +bgCyan: Chalk, + +bgWhite: Chalk, + +bgBlackBright: Chalk, + +bgRedBright: Chalk, + +bgGreenBright: Chalk, + +bgYellowBright: Chalk, + +bgBlueBright: Chalk, + +bgMagentaBright: Chalk, + +bgCyanBright: Chalk, + +bgWhiteBrigh: Chalk, + + supportsColor: ColorSupport +}; + +declare module.exports: Chalk; diff --git a/node_modules/@babel/highlight/node_modules/chalk/license b/node_modules/@babel/highlight/node_modules/chalk/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/node_modules/@babel/highlight/node_modules/chalk/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/@babel/highlight/node_modules/chalk/package.json b/node_modules/@babel/highlight/node_modules/chalk/package.json new file mode 100644 index 0000000..bc32468 --- /dev/null +++ b/node_modules/@babel/highlight/node_modules/chalk/package.json @@ -0,0 +1,71 @@ +{ + "name": "chalk", + "version": "2.4.2", + "description": "Terminal string styling done right", + "license": "MIT", + "repository": "chalk/chalk", + "engines": { + "node": ">=4" + }, + "scripts": { + "test": "xo && tsc --project types && flow --max-warnings=0 && nyc ava", + "bench": "matcha benchmark.js", + "coveralls": "nyc report --reporter=text-lcov | coveralls" + }, + "files": [ + "index.js", + "templates.js", + "types/index.d.ts", + "index.js.flow" + ], + "keywords": [ + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "str", + "ansi", + "style", + "styles", + "tty", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "devDependencies": { + "ava": "*", + "coveralls": "^3.0.0", + "execa": "^0.9.0", + "flow-bin": "^0.68.0", + "import-fresh": "^2.0.0", + "matcha": "^0.7.0", + "nyc": "^11.0.2", + "resolve-from": "^4.0.0", + "typescript": "^2.5.3", + "xo": "*" + }, + "types": "types/index.d.ts", + "xo": { + "envs": [ + "node", + "mocha" + ], + "ignores": [ + "test/_flow.js" + ] + } +} diff --git a/node_modules/@babel/highlight/node_modules/chalk/readme.md b/node_modules/@babel/highlight/node_modules/chalk/readme.md new file mode 100644 index 0000000..d298e2c --- /dev/null +++ b/node_modules/@babel/highlight/node_modules/chalk/readme.md @@ -0,0 +1,314 @@ +

+
+
+ Chalk +
+
+
+

+ +> Terminal string styling done right + +[![Build Status](https://travis-ci.org/chalk/chalk.svg?branch=master)](https://travis-ci.org/chalk/chalk) [![Coverage Status](https://coveralls.io/repos/github/chalk/chalk/badge.svg?branch=master)](https://coveralls.io/github/chalk/chalk?branch=master) [![](https://img.shields.io/badge/unicorn-approved-ff69b4.svg)](https://www.youtube.com/watch?v=9auOCbH5Ns4) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/xojs/xo) [![Mentioned in Awesome Node.js](https://awesome.re/mentioned-badge.svg)](https://github.com/sindresorhus/awesome-nodejs) + +### [See what's new in Chalk 2](https://github.com/chalk/chalk/releases/tag/v2.0.0) + + + + +## Highlights + +- Expressive API +- Highly performant +- Ability to nest styles +- [256/Truecolor color support](#256-and-truecolor-color-support) +- Auto-detects color support +- Doesn't extend `String.prototype` +- Clean and focused +- Actively maintained +- [Used by ~23,000 packages](https://www.npmjs.com/browse/depended/chalk) as of December 31, 2017 + + +## Install + +```console +$ npm install chalk +``` + + + + + + +## Usage + +```js +const chalk = require('chalk'); + +console.log(chalk.blue('Hello world!')); +``` + +Chalk comes with an easy to use composable API where you just chain and nest the styles you want. + +```js +const chalk = require('chalk'); +const log = console.log; + +// Combine styled and normal strings +log(chalk.blue('Hello') + ' World' + chalk.red('!')); + +// Compose multiple styles using the chainable API +log(chalk.blue.bgRed.bold('Hello world!')); + +// Pass in multiple arguments +log(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz')); + +// Nest styles +log(chalk.red('Hello', chalk.underline.bgBlue('world') + '!')); + +// Nest styles of the same type even (color, underline, background) +log(chalk.green( + 'I am a green line ' + + chalk.blue.underline.bold('with a blue substring') + + ' that becomes green again!' +)); + +// ES2015 template literal +log(` +CPU: ${chalk.red('90%')} +RAM: ${chalk.green('40%')} +DISK: ${chalk.yellow('70%')} +`); + +// ES2015 tagged template literal +log(chalk` +CPU: {red ${cpu.totalPercent}%} +RAM: {green ${ram.used / ram.total * 100}%} +DISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%} +`); + +// Use RGB colors in terminal emulators that support it. +log(chalk.keyword('orange')('Yay for orange colored text!')); +log(chalk.rgb(123, 45, 67).underline('Underlined reddish color')); +log(chalk.hex('#DEADED').bold('Bold gray!')); +``` + +Easily define your own themes: + +```js +const chalk = require('chalk'); + +const error = chalk.bold.red; +const warning = chalk.keyword('orange'); + +console.log(error('Error!')); +console.log(warning('Warning!')); +``` + +Take advantage of console.log [string substitution](https://nodejs.org/docs/latest/api/console.html#console_console_log_data_args): + +```js +const name = 'Sindre'; +console.log(chalk.green('Hello %s'), name); +//=> 'Hello Sindre' +``` + + +## API + +### chalk.`", + returnEnd: true, + subLanguage: [ + "css", + "xml" + ] + } + }, + { + className: "tag", + // See the comment in the ',\n returnEnd: true,\n subLanguage: [\n 'css',\n 'xml'\n ]\n }\n },\n {\n className: 'tag',\n // See the comment in the

Index of  "; + var arr1 = it.paths; + if (arr1) { + var value, index = -1, l1 = arr1.length - 1; + while(index < l1){ + value = arr1[index += 1]; + out += ' ' + encodeHTML(value.name) + " "; + } + } + out += '

    '; + var arr2 = it.files; + if (arr2) { + var value, index = -1, l2 = arr2.length - 1; + while(index < l2){ + value = arr2[index += 1]; + out += '
  • ' + encodeHTML(value.base) + "
  • "; + } + } + out += "
"; + return out; + } + var itself = directory, _encodeHTML = function(doNotSkipEncoded) { + var encodeHTMLRules = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", + "/": "/" + }, matchHTML = doNotSkipEncoded ? /[&<>"'\/]/g : /&(?!#?\w+;)|<|>|"|'|\//g; + return function(code) { + return code ? code.toString().replace(matchHTML, function(m) { + return encodeHTMLRules[m] || m; + }) : ""; + }; + }(); + if (0, $81845dde1a1a97c9$exports) $81845dde1a1a97c9$exports = itself; + else if (typeof define === "function") define(function() { + return itself; + }); + else { + window.render = window.render || {}; + window.render["directory"] = itself; + } +})(); + + +var $54feb7d7d01619f8$exports = {}; +(function() { + function error(it) { + var out = '
' + it.statusCode + "

" + it.message + "

"; + return out; + } + var itself = error, _encodeHTML = function(doNotSkipEncoded) { + var encodeHTMLRules = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", + "/": "/" + }, matchHTML = doNotSkipEncoded ? /[&<>"'\/]/g : /&(?!#?\w+;)|<|>|"|'|\//g; + return function(code) { + return code ? code.toString().replace(matchHTML, function(m) { + return encodeHTMLRules[m] || m; + }) : ""; + }; + }(); + if (0, $54feb7d7d01619f8$exports) $54feb7d7d01619f8$exports = itself; + else if (typeof define === "function") define(function() { + return itself; + }); + else { + window.render = window.render || {}; + window.render["error"] = itself; + } +})(); + + +const $506752121fd186df$var$etags = new Map(); +const $506752121fd186df$var$calculateSha = (handlers, absolutePath)=>new Promise((resolve, reject)=>{ + const hash = $506752121fd186df$require$createHash("sha1"); + hash.update($luxNM$path.extname(absolutePath)); + hash.update("-"); + const rs = handlers.createReadStream(absolutePath); + rs.on("error", reject); + rs.on("data", (buf)=>hash.update(buf)); + rs.on("end", ()=>{ + const sha = hash.digest("hex"); + resolve(sha); + }); + }); +const $506752121fd186df$var$sourceMatches = (source, requestPath, allowSegments)=>{ + const keys = []; + const slashed = $7d0060b9757f200a$exports(source); + const resolvedPath = $luxNM$path.posix.resolve(requestPath); + let results = null; + if (allowSegments) { + const normalized = slashed.replace("*", "(.*)"); + const expression = $2e11fd6a20b655a1$exports(normalized, keys); + results = expression.exec(resolvedPath); + if (!results) // clear keys so that they are not used + // later with empty results. this may + // happen if minimatch returns true + keys.length = 0; + } + if (results || $a4499d469cfd1d7f$exports(resolvedPath, slashed)) return { + keys: keys, + results: results + }; + return null; +}; +const $506752121fd186df$var$toTarget = (source, destination, previousPath)=>{ + const matches = $506752121fd186df$var$sourceMatches(source, previousPath, true); + if (!matches) return null; + const { keys: keys , results: results } = matches; + const props = {}; + const { protocol: protocol } = $aebbf9777ab0ac09$exports.parse(destination); + const normalizedDest = protocol ? destination : $7d0060b9757f200a$exports(destination); + const toPath = $2e11fd6a20b655a1$exports.compile(normalizedDest); + for(let index = 0; index < keys.length; index++){ + const { name: name } = keys[index]; + props[name] = results[index + 1]; + } + return toPath(props); +}; +const $506752121fd186df$var$applyRewrites = (requestPath, rewrites = [], repetitive)=>{ + // We need to copy the array, since we're going to modify it. + const rewritesCopy = rewrites.slice(); + // If the method was called again, the path was already rewritten + // so we need to make sure to return it. + const fallback = repetitive ? requestPath : null; + if (rewritesCopy.length === 0) return fallback; + for(let index = 0; index < rewritesCopy.length; index++){ + const { source: source , destination: destination } = rewrites[index]; + const target = $506752121fd186df$var$toTarget(source, destination, requestPath); + if (target) { + // Remove rules that were already applied + rewritesCopy.splice(index, 1); + // Check if there are remaining ones to be applied + return $506752121fd186df$var$applyRewrites($7d0060b9757f200a$exports(target), rewritesCopy, true); + } + } + return fallback; +}; +const $506752121fd186df$var$ensureSlashStart = (target)=>target.startsWith("/") ? target : `/${target}`; +const $506752121fd186df$var$shouldRedirect = (decodedPath, { redirects: redirects = [] , trailingSlash: trailingSlash }, cleanUrl)=>{ + const slashing = typeof trailingSlash === "boolean"; + const defaultType = 301; + const matchHTML = /(\.html|\/index)$/g; + if (redirects.length === 0 && !slashing && !cleanUrl) return null; + // By stripping the HTML parts from the decoded + // path *before* handling the trailing slash, we make + // sure that only *one* redirect occurs if both + // config options are used. + if (cleanUrl && matchHTML.test(decodedPath)) { + decodedPath = decodedPath.replace(matchHTML, ""); + if (decodedPath.indexOf("//") > -1) decodedPath = decodedPath.replace(/\/+/g, "/"); + return { + target: $506752121fd186df$var$ensureSlashStart(decodedPath), + statusCode: defaultType + }; + } + if (slashing) { + const { ext: ext , name: name } = $luxNM$path.parse(decodedPath); + const isTrailed = decodedPath.endsWith("/"); + const isDotfile = name.startsWith("."); + let target = null; + if (!trailingSlash && isTrailed) target = decodedPath.slice(0, -1); + else if (trailingSlash && !isTrailed && !ext && !isDotfile) target = `${decodedPath}/`; + if (decodedPath.indexOf("//") > -1) target = decodedPath.replace(/\/+/g, "/"); + if (target) return { + target: $506752121fd186df$var$ensureSlashStart(target), + statusCode: defaultType + }; + } + // This is currently the fastest way to + // iterate over an array + for(let index = 0; index < redirects.length; index++){ + const { source: source , destination: destination , type: type } = redirects[index]; + const target = $506752121fd186df$var$toTarget(source, destination, decodedPath); + if (target) return { + target: target, + statusCode: type || defaultType + }; + } + return null; +}; +const $506752121fd186df$var$appendHeaders = (target, source)=>{ + for(let index = 0; index < source.length; index++){ + const { key: key , value: value } = source[index]; + target[key] = value; + } +}; +const $506752121fd186df$var$getHeaders = async (handlers, config, current, absolutePath, stats)=>{ + const { headers: customHeaders = [] , etag: etag = false } = config; + const related = {}; + const { base: base } = $luxNM$path.parse(absolutePath); + const relativePath = $luxNM$path.relative(current, absolutePath); + if (customHeaders.length > 0) // By iterating over all headers and never stopping, developers + // can specify multiple header sources in the config that + // might match a single path. + for(let index = 0; index < customHeaders.length; index++){ + const { source: source , headers: headers } = customHeaders[index]; + if ($506752121fd186df$var$sourceMatches(source, $7d0060b9757f200a$exports(relativePath))) $506752121fd186df$var$appendHeaders(related, headers); + } + let defaultHeaders = {}; + if (stats) { + defaultHeaders = { + "Content-Length": stats.size, + // Default to "inline", which always tries to render in the browser, + // if that's not working, it will save the file. But to be clear: This + // only happens if it cannot find a appropiate value. + "Content-Disposition": $b2af5e689cd54d00$exports(base, { + type: "inline" + }), + "Accept-Ranges": "bytes" + }; + if (etag) { + let [mtime, sha] = $506752121fd186df$var$etags.get(absolutePath) || []; + if (Number(mtime) !== Number(stats.mtime)) { + sha = await $506752121fd186df$var$calculateSha(handlers, absolutePath); + $506752121fd186df$var$etags.set(absolutePath, [ + stats.mtime, + sha + ]); + } + defaultHeaders["ETag"] = `"${sha}"`; + } else defaultHeaders["Last-Modified"] = stats.mtime.toUTCString(); + const contentType = $a12a5cf462f411fb$export$8019223850b8bf78(base); + if (contentType) defaultHeaders["Content-Type"] = contentType; + } + const headers = Object.assign(defaultHeaders, related); + for(const key in headers)if (headers.hasOwnProperty(key) && headers[key] === null) delete headers[key]; + return headers; +}; +const $506752121fd186df$var$applicable = (decodedPath, configEntry)=>{ + if (typeof configEntry === "boolean") return configEntry; + if (Array.isArray(configEntry)) { + for(let index = 0; index < configEntry.length; index++){ + const source = configEntry[index]; + if ($506752121fd186df$var$sourceMatches(source, decodedPath)) return true; + } + return false; + } + return true; +}; +const $506752121fd186df$var$getPossiblePaths = (relativePath, extension)=>[ + $luxNM$path.join(relativePath, `index${extension}`), + relativePath.endsWith("/") ? relativePath.replace(/\/$/g, extension) : relativePath + extension + ].filter((item)=>$luxNM$path.basename(item) !== extension); +const $506752121fd186df$var$findRelated = async (current, relativePath, rewrittenPath, originalStat)=>{ + const possible = rewrittenPath ? [ + rewrittenPath + ] : $506752121fd186df$var$getPossiblePaths(relativePath, ".html"); + let stats = null; + for(let index = 0; index < possible.length; index++){ + const related = possible[index]; + const absolutePath = $luxNM$path.join(current, related); + try { + stats = await originalStat(absolutePath); + } catch (err) { + if (err.code !== "ENOENT" && err.code !== "ENOTDIR") throw err; + } + if (stats) return { + stats: stats, + absolutePath: absolutePath + }; + } + return null; +}; +const $506752121fd186df$var$canBeListed = (excluded, file)=>{ + const slashed = $7d0060b9757f200a$exports(file); + let whether = true; + for(let mark = 0; mark < excluded.length; mark++){ + const source = excluded[mark]; + if ($506752121fd186df$var$sourceMatches(source, slashed)) { + whether = false; + break; + } + } + return whether; +}; +const $506752121fd186df$var$renderDirectory = async (current, acceptsJSON, handlers, methods, config, paths)=>{ + const { directoryListing: directoryListing , trailingSlash: trailingSlash , unlisted: unlisted = [] , renderSingle: renderSingle } = config; + const slashSuffix = typeof trailingSlash === "boolean" ? trailingSlash ? "/" : "" : "/"; + const { relativePath: relativePath , absolutePath: absolutePath } = paths; + const excluded = [ + ".DS_Store", + ".git", + ...unlisted + ]; + if (!$506752121fd186df$var$applicable(relativePath, directoryListing) && !renderSingle) return {}; + let files = await handlers.readdir(absolutePath); + const canRenderSingle = renderSingle && files.length === 1; + for(let index = 0; index < files.length; index++){ + const file = files[index]; + const filePath = $luxNM$path.resolve(absolutePath, file); + const details = $luxNM$path.parse(filePath); + // It's important to indicate that the `stat` call was + // spawned by the directory listing, as Now is + // simulating those calls and needs to special-case this. + let stats = null; + if (methods.lstat) stats = await handlers.lstat(filePath, true); + else stats = await handlers.lstat(filePath); + details.relative = $luxNM$path.join(relativePath, details.base); + if (stats.isDirectory()) { + details.base += slashSuffix; + details.relative += slashSuffix; + details.type = "folder"; + } else { + if (canRenderSingle) return { + singleFile: true, + absolutePath: filePath, + stats: stats + }; + details.ext = details.ext.split(".")[1] || "txt"; + details.type = "file"; + details.size = $5454d5be30952272$exports(stats.size, { + unitSeparator: " ", + decimalPlaces: 0 + }); + } + details.title = details.base; + if ($506752121fd186df$var$canBeListed(excluded, file)) files[index] = details; + else delete files[index]; + } + const toRoot = $luxNM$path.relative(current, absolutePath); + const directory = $luxNM$path.join($luxNM$path.basename(current), toRoot, slashSuffix); + const pathParts = directory.split($luxNM$path.sep).filter(Boolean); + // Sort to list directories first, then sort alphabetically + files = files.sort((a, b)=>{ + const aIsDir = a.type === "directory"; + const bIsDir = b.type === "directory"; + /* istanbul ignore next */ if (aIsDir && !bIsDir) return -1; + if (bIsDir && !aIsDir || a.base > b.base) return 1; + /* istanbul ignore next */ if (a.base < b.base) return -1; + /* istanbul ignore next */ return 0; + }).filter(Boolean); + // Add parent directory to the head of the sorted files array + if (toRoot.length > 0) { + const directoryPath = [ + ...pathParts + ].slice(1); + const relative = $luxNM$path.join("/", ...directoryPath, "..", slashSuffix); + files.unshift({ + type: "directory", + base: "..", + relative: relative, + title: relative, + ext: "" + }); + } + const subPaths = []; + for(let index = 0; index < pathParts.length; index++){ + const parents = []; + const isLast = index === pathParts.length - 1; + let before = 0; + while(before <= index){ + parents.push(pathParts[before]); + before++; + } + parents.shift(); + subPaths.push({ + name: pathParts[index] + (isLast ? slashSuffix : "/"), + url: index === 0 ? "" : parents.join("/") + slashSuffix + }); + } + const spec = { + files: files, + directory: directory, + paths: subPaths + }; + const output = acceptsJSON ? JSON.stringify(spec) : $81845dde1a1a97c9$exports(spec); + return { + directory: output + }; +}; +const $506752121fd186df$var$sendError = async (absolutePath, response, acceptsJSON, current, handlers, config, spec)=>{ + const { err: original , message: message , code: code , statusCode: statusCode } = spec; + /* istanbul ignore next */ if (original && process.env.NODE_ENV !== "test") console.error(original); + response.statusCode = statusCode; + if (acceptsJSON) { + response.setHeader("Content-Type", "application/json; charset=utf-8"); + response.end(JSON.stringify({ + error: { + code: code, + message: message + } + })); + return; + } + let stats = null; + const errorPage = $luxNM$path.join(current, `${statusCode}.html`); + try { + stats = await handlers.lstat(errorPage); + } catch (err) { + if (err.code !== "ENOENT") console.error(err); + } + if (stats) { + let stream = null; + try { + stream = await handlers.createReadStream(errorPage); + const headers = await $506752121fd186df$var$getHeaders(handlers, config, current, errorPage, stats); + response.writeHead(statusCode, headers); + stream.pipe(response); + return; + } catch (err) { + console.error(err); + } + } + const headers = await $506752121fd186df$var$getHeaders(handlers, config, current, absolutePath, null); + headers["Content-Type"] = "text/html; charset=utf-8"; + response.writeHead(statusCode, headers); + response.end($54feb7d7d01619f8$exports({ + statusCode: statusCode, + message: message + })); +}; +const $506752121fd186df$var$internalError = async (...args)=>{ + const lastIndex = args.length - 1; + const err = args[lastIndex]; + args[lastIndex] = { + statusCode: 500, + code: "internal_server_error", + message: "A server error has occurred", + err: err + }; + return $506752121fd186df$var$sendError(...args); +}; +const $506752121fd186df$var$getHandlers = (methods)=>Object.assign({ + lstat: $506752121fd186df$require$promisify($506752121fd186df$require$lstat), + realpath: $506752121fd186df$require$promisify($506752121fd186df$require$realpath), + createReadStream: $506752121fd186df$require$createReadStream, + readdir: $506752121fd186df$require$promisify($506752121fd186df$require$readdir), + sendError: $506752121fd186df$var$sendError + }, methods); +$506752121fd186df$exports = async (request, response, config = {}, methods = {})=>{ + const cwd = process.cwd(); + const current = config.public ? $luxNM$path.resolve(cwd, config.public) : cwd; + const handlers = $506752121fd186df$var$getHandlers(methods); + let relativePath = null; + let acceptsJSON = null; + if (request.headers.accept) acceptsJSON = request.headers.accept.includes("application/json"); + try { + relativePath = decodeURIComponent($aebbf9777ab0ac09$exports.parse(request.url).pathname); + } catch (err) { + return $506752121fd186df$var$sendError("/", response, acceptsJSON, current, handlers, config, { + statusCode: 400, + code: "bad_request", + message: "Bad Request" + }); + } + let absolutePath = $luxNM$path.join(current, relativePath); + // Prevent path traversal vulnerabilities. We could do this + // by ourselves, but using the package covers all the edge cases. + if (!$ce0d389aa9435fab$exports(absolutePath, current)) return $506752121fd186df$var$sendError(absolutePath, response, acceptsJSON, current, handlers, config, { + statusCode: 400, + code: "bad_request", + message: "Bad Request" + }); + const cleanUrl = $506752121fd186df$var$applicable(relativePath, config.cleanUrls); + const redirect = $506752121fd186df$var$shouldRedirect(relativePath, config, cleanUrl); + if (redirect) { + response.writeHead(redirect.statusCode, { + Location: encodeURI(redirect.target) + }); + response.end(); + return; + } + let stats = null; + // It's extremely important that we're doing multiple stat calls. This one + // right here could technically be removed, but then the program + // would be slower. Because for directories, we always want to see if a related file + // exists and then (after that), fetch the directory itself if no + // related file was found. However (for files, of which most have extensions), we should + // always stat right away. + // + // When simulating a file system without directory indexes, calculating whether a + // directory exists requires loading all the file paths and then checking if + // one of them includes the path of the directory. As that's a very + // performance-expensive thing to do, we need to ensure it's not happening if not really necessary. + if ($luxNM$path.extname(relativePath) !== "") try { + stats = await handlers.lstat(absolutePath); + } catch (err) { + if (err.code !== "ENOENT" && err.code !== "ENOTDIR") return $506752121fd186df$var$internalError(absolutePath, response, acceptsJSON, current, handlers, config, err); + } + const rewrittenPath = $506752121fd186df$var$applyRewrites(relativePath, config.rewrites); + if (!stats && (cleanUrl || rewrittenPath)) try { + const related = await $506752121fd186df$var$findRelated(current, relativePath, rewrittenPath, handlers.lstat); + if (related) ({ stats: stats , absolutePath: absolutePath } = related); + } catch (err) { + if (err.code !== "ENOENT" && err.code !== "ENOTDIR") return $506752121fd186df$var$internalError(absolutePath, response, acceptsJSON, current, handlers, config, err); + } + if (!stats) try { + stats = await handlers.lstat(absolutePath); + } catch (err) { + if (err.code !== "ENOENT" && err.code !== "ENOTDIR") return $506752121fd186df$var$internalError(absolutePath, response, acceptsJSON, current, handlers, config, err); + } + if (stats && stats.isDirectory()) { + let directory = null; + let singleFile = null; + try { + const related = await $506752121fd186df$var$renderDirectory(current, acceptsJSON, handlers, methods, config, { + relativePath: relativePath, + absolutePath: absolutePath + }); + if (related.singleFile) ({ stats: stats , absolutePath: absolutePath , singleFile: singleFile } = related); + else ({ directory: directory } = related); + } catch (err) { + if (err.code !== "ENOENT") return $506752121fd186df$var$internalError(absolutePath, response, acceptsJSON, current, handlers, config, err); + } + if (directory) { + const contentType = acceptsJSON ? "application/json; charset=utf-8" : "text/html; charset=utf-8"; + response.statusCode = 200; + response.setHeader("Content-Type", contentType); + response.end(directory); + return; + } + if (!singleFile) // The directory listing is disabled, so we want to + // render a 404 error. + stats = null; + } + const isSymLink = stats && stats.isSymbolicLink(); + // There are two scenarios in which we want to reply with + // a 404 error: Either the path does not exist, or it is a + // symlink while the `symlinks` option is disabled (which it is by default). + if (!stats || !config.symlinks && isSymLink) // allow for custom 404 handling + return handlers.sendError(absolutePath, response, acceptsJSON, current, handlers, config, { + statusCode: 404, + code: "not_found", + message: "The requested path could not be found" + }); + // If we figured out that the target is a symlink, we need to + // resolve the symlink and run a new `stat` call just for the + // target of that symlink. + if (isSymLink) { + absolutePath = await handlers.realpath(absolutePath); + stats = await handlers.lstat(absolutePath); + } + const streamOpts = {}; + // TODO ? if-range + if (request.headers.range && stats.size) { + const range = $1c69da43f2f0d2d4$exports(stats.size, request.headers.range); + if (typeof range === "object" && range.type === "bytes") { + const { start: start , end: end } = range[0]; + streamOpts.start = start; + streamOpts.end = end; + response.statusCode = 206; + } else { + response.statusCode = 416; + response.setHeader("Content-Range", `bytes */${stats.size}`); + } + } + // TODO ? multiple ranges + let stream = null; + try { + stream = await handlers.createReadStream(absolutePath, streamOpts); + } catch (err) { + return $506752121fd186df$var$internalError(absolutePath, response, acceptsJSON, current, handlers, config, err); + } + const headers = await $506752121fd186df$var$getHeaders(handlers, config, current, absolutePath, stats); + // eslint-disable-next-line no-undefined + if (streamOpts.start !== undefined && streamOpts.end !== undefined) { + headers["Content-Range"] = `bytes ${streamOpts.start}-${streamOpts.end}/${stats.size}`; + headers["Content-Length"] = streamOpts.end - streamOpts.start + 1; + } + // We need to check for `headers.ETag` being truthy first, otherwise it will + // match `undefined` being equal to `undefined`, which is true. + // + // Checking for `undefined` and `null` is also important, because `Range` can be `0`. + // + // eslint-disable-next-line no-eq-null + if (request.headers.range == null && headers.ETag && headers.ETag === request.headers["if-none-match"]) { + response.statusCode = 304; + response.end(); + return; + } + response.writeHead(response.statusCode || 200, headers); + stream.pipe(response); +}; + + +var $cae34a092c40a2c2$exports = {}; +"use strict"; +var $cae34a092c40a2c2$var$__createBinding = $cae34a092c40a2c2$exports && $cae34a092c40a2c2$exports.__createBinding || (Object.create ? function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { + enumerable: true, + get: function() { + return m[k]; + } + }); +} : function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var $cae34a092c40a2c2$var$__exportStar = $cae34a092c40a2c2$exports && $cae34a092c40a2c2$exports.__exportStar || function(m, exports1) { + for(var p in m)if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports1, p)) $cae34a092c40a2c2$var$__createBinding(exports1, m, p); +}; +Object.defineProperty($cae34a092c40a2c2$exports, "__esModule", { + value: true +}); +$cae34a092c40a2c2$exports.createProxyMiddleware = void 0; +var $2a41ee9333220238$exports = {}; +"use strict"; +Object.defineProperty($2a41ee9333220238$exports, "__esModule", { + value: true +}); +$2a41ee9333220238$exports.HttpProxyMiddleware = void 0; +var $1299558de05d8605$exports = {}; +/*! + * Caron dimonio, con occhi di bragia + * loro accennando, tutte le raccoglie; + * batte col remo qualunque s’adagia + * + * Charon the demon, with the eyes of glede, + * Beckoning to them, collects them all together, + * Beats with his oar whoever lags behind + * + * Dante - The Divine Comedy (Canto III) + */ +$1299558de05d8605$exports = (parcelRequire("i9mNE")); + + +var $9333aef7c35f2a3b$exports = {}; +"use strict"; +Object.defineProperty($9333aef7c35f2a3b$exports, "__esModule", { + value: true +}); +$9333aef7c35f2a3b$exports.createConfig = void 0; +var $5f22b86697cc6bbd$exports = {}; +"use strict"; +$5f22b86697cc6bbd$exports = (value)=>{ + if (Object.prototype.toString.call(value) !== "[object Object]") return false; + const prototype = Object.getPrototypeOf(value); + return prototype === null || prototype === Object.prototype; +}; + + + +var $321d5baa2709d12a$exports = {}; +"use strict"; +Object.defineProperty($321d5baa2709d12a$exports, "__esModule", { + value: true +}); +$321d5baa2709d12a$exports.ERRORS = void 0; +var $321d5baa2709d12a$var$ERRORS; +(function(ERRORS) { + ERRORS["ERR_CONFIG_FACTORY_TARGET_MISSING"] = '[HPM] Missing "target" option. Example: {target: "http://www.example.org"}'; + ERRORS["ERR_CONTEXT_MATCHER_GENERIC"] = '[HPM] Invalid context. Expecting something like: "/api" or ["/api", "/ajax"]'; + ERRORS["ERR_CONTEXT_MATCHER_INVALID_ARRAY"] = '[HPM] Invalid context. Expecting something like: ["/api", "/ajax"] or ["/api/**", "!**.html"]'; + ERRORS["ERR_PATH_REWRITER_CONFIG"] = "[HPM] Invalid pathRewrite config. Expecting object with pathRewrite config or a rewrite function"; +})($321d5baa2709d12a$var$ERRORS = $321d5baa2709d12a$exports.ERRORS || ($321d5baa2709d12a$exports.ERRORS = {})); + + +var $c421636cc4c019fd$exports = {}; +"use strict"; +/* eslint-disable prefer-rest-params */ Object.defineProperty($c421636cc4c019fd$exports, "__esModule", { + value: true +}); +$c421636cc4c019fd$exports.getArrow = $c421636cc4c019fd$exports.getInstance = void 0; + +let $c421636cc4c019fd$var$loggerInstance; +const $c421636cc4c019fd$var$defaultProvider = { + // tslint:disable: no-console + log: console.log, + debug: console.log, + info: console.info, + warn: console.warn, + error: console.error +}; +// log level 'weight' +var $c421636cc4c019fd$var$LEVELS; +(function(LEVELS) { + LEVELS[LEVELS["debug"] = 10] = "debug"; + LEVELS[LEVELS["info"] = 20] = "info"; + LEVELS[LEVELS["warn"] = 30] = "warn"; + LEVELS[LEVELS["error"] = 50] = "error"; + LEVELS[LEVELS["silent"] = 80] = "silent"; +})($c421636cc4c019fd$var$LEVELS || ($c421636cc4c019fd$var$LEVELS = {})); +function $c421636cc4c019fd$var$getInstance() { + if (!$c421636cc4c019fd$var$loggerInstance) $c421636cc4c019fd$var$loggerInstance = new $c421636cc4c019fd$var$Logger(); + return $c421636cc4c019fd$var$loggerInstance; +} +$c421636cc4c019fd$exports.getInstance = $c421636cc4c019fd$var$getInstance; +class $c421636cc4c019fd$var$Logger { + constructor(){ + this.setLevel("info"); + this.setProvider(()=>$c421636cc4c019fd$var$defaultProvider); + } + // log will log messages, regardless of logLevels + log() { + this.provider.log(this._interpolate.apply(null, arguments)); + } + debug() { + if (this._showLevel("debug")) this.provider.debug(this._interpolate.apply(null, arguments)); + } + info() { + if (this._showLevel("info")) this.provider.info(this._interpolate.apply(null, arguments)); + } + warn() { + if (this._showLevel("warn")) this.provider.warn(this._interpolate.apply(null, arguments)); + } + error() { + if (this._showLevel("error")) this.provider.error(this._interpolate.apply(null, arguments)); + } + setLevel(v) { + if (this.isValidLevel(v)) this.logLevel = v; + } + setProvider(fn) { + if (fn && this.isValidProvider(fn)) this.provider = fn($c421636cc4c019fd$var$defaultProvider); + } + isValidProvider(fnProvider) { + const result = true; + if (fnProvider && typeof fnProvider !== "function") throw new Error("[HPM] Log provider config error. Expecting a function."); + return result; + } + isValidLevel(levelName) { + const validLevels = Object.keys($c421636cc4c019fd$var$LEVELS); + const isValid = validLevels.includes(levelName); + if (!isValid) throw new Error("[HPM] Log level error. Invalid logLevel."); + return isValid; + } + /** + * Decide to log or not to log, based on the log levels 'weight' + * @param {String} showLevel [debug, info, warn, error, silent] + * @return {Boolean} + */ _showLevel(showLevel) { + let result = false; + const currentLogLevel = $c421636cc4c019fd$var$LEVELS[this.logLevel]; + if (currentLogLevel && currentLogLevel <= $c421636cc4c019fd$var$LEVELS[showLevel]) result = true; + return result; + } + // make sure logged messages and its data are return interpolated + // make it possible for additional log data, such date/time or custom prefix. + _interpolate(format, ...args) { + const result = $luxNM$util.format(format, ...args); + return result; + } +} +/** + * -> normal proxy + * => router + * ~> pathRewrite + * ≈> router + pathRewrite + * + * @param {String} originalPath + * @param {String} newPath + * @param {String} originalTarget + * @param {String} newTarget + * @return {String} + */ function $c421636cc4c019fd$var$getArrow(originalPath, newPath, originalTarget, newTarget) { + const arrow = [ + ">" + ]; + const isNewTarget = originalTarget !== newTarget; // router + const isNewPath = originalPath !== newPath; // pathRewrite + if (isNewPath && !isNewTarget) arrow.unshift("~"); + else if (!isNewPath && isNewTarget) arrow.unshift("="); + else if (isNewPath && isNewTarget) arrow.unshift("≈"); + else arrow.unshift("-"); + return arrow.join(""); +} +$c421636cc4c019fd$exports.getArrow = $c421636cc4c019fd$var$getArrow; + + +const $9333aef7c35f2a3b$var$logger = $c421636cc4c019fd$exports.getInstance(); +function $9333aef7c35f2a3b$var$createConfig(context, opts) { + // structure of config object to be returned + const config = { + context: undefined, + options: {} + }; + // app.use('/api', proxy({target:'http://localhost:9000'})); + if ($9333aef7c35f2a3b$var$isContextless(context, opts)) { + config.context = "/"; + config.options = Object.assign(config.options, context); + // app.use('/api', proxy('http://localhost:9000')); + // app.use(proxy('http://localhost:9000/api')); + } else if ($9333aef7c35f2a3b$var$isStringShortHand(context)) { + const oUrl = $luxNM$url.parse(context); + const target = [ + oUrl.protocol, + "//", + oUrl.host + ].join(""); + config.context = oUrl.pathname || "/"; + config.options = Object.assign(config.options, { + target: target + }, opts); + if (oUrl.protocol === "ws:" || oUrl.protocol === "wss:") config.options.ws = true; + // app.use('/api', proxy({target:'http://localhost:9000'})); + } else { + config.context = context; + config.options = Object.assign(config.options, opts); + } + $9333aef7c35f2a3b$var$configureLogger(config.options); + if (!config.options.target && !config.options.router) throw new Error($321d5baa2709d12a$exports.ERRORS.ERR_CONFIG_FACTORY_TARGET_MISSING); + return config; +} +$9333aef7c35f2a3b$exports.createConfig = $9333aef7c35f2a3b$var$createConfig; +/** + * Checks if a String only target/config is provided. + * This can be just the host or with the optional path. + * + * @example + * app.use('/api', proxy('http://localhost:9000')); + * app.use(proxy('http://localhost:9000/api')); + * + * @param {String} context [description] + * @return {Boolean} [description] + */ function $9333aef7c35f2a3b$var$isStringShortHand(context) { + if (typeof context === "string") return !!$luxNM$url.parse(context).host; +} +/** + * Checks if a Object only config is provided, without a context. + * In this case the all paths will be proxied. + * + * @example + * app.use('/api', proxy({target:'http://localhost:9000'})); + * + * @param {Object} context [description] + * @param {*} opts [description] + * @return {Boolean} [description] + */ function $9333aef7c35f2a3b$var$isContextless(context, opts) { + return $5f22b86697cc6bbd$exports(context) && (opts == null || Object.keys(opts).length === 0); +} +function $9333aef7c35f2a3b$var$configureLogger(options) { + if (options.logLevel) $9333aef7c35f2a3b$var$logger.setLevel(options.logLevel); + if (options.logProvider) $9333aef7c35f2a3b$var$logger.setProvider(options.logProvider); +} + + +var $1fffe78c51b168d8$exports = {}; +"use strict"; +Object.defineProperty($1fffe78c51b168d8$exports, "__esModule", { + value: true +}); +$1fffe78c51b168d8$exports.match = void 0; +var $5e9ad5cc9f0ed965$exports = {}; +/*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ var $3e99edf0e98500e9$exports = {}; +/*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ $3e99edf0e98500e9$exports = function isExtglob(str) { + if (typeof str !== "string" || str === "") return false; + var match; + while(match = /(\\).|([@?!+*]\(.*\))/g.exec(str)){ + if (match[2]) return true; + str = str.slice(match.index + match[0].length); + } + return false; +}; + + +var $5e9ad5cc9f0ed965$var$chars = { + "{": "}", + "(": ")", + "[": "]" +}; +var $5e9ad5cc9f0ed965$var$strictCheck = function(str) { + if (str[0] === "!") return true; + var index = 0; + var pipeIndex = -2; + var closeSquareIndex = -2; + var closeCurlyIndex = -2; + var closeParenIndex = -2; + var backSlashIndex = -2; + while(index < str.length){ + if (str[index] === "*") return true; + if (str[index + 1] === "?" && /[\].+)]/.test(str[index])) return true; + if (closeSquareIndex !== -1 && str[index] === "[" && str[index + 1] !== "]") { + if (closeSquareIndex < index) closeSquareIndex = str.indexOf("]", index); + if (closeSquareIndex > index) { + if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) return true; + backSlashIndex = str.indexOf("\\", index); + if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) return true; + } + } + if (closeCurlyIndex !== -1 && str[index] === "{" && str[index + 1] !== "}") { + closeCurlyIndex = str.indexOf("}", index); + if (closeCurlyIndex > index) { + backSlashIndex = str.indexOf("\\", index); + if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) return true; + } + } + if (closeParenIndex !== -1 && str[index] === "(" && str[index + 1] === "?" && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ")") { + closeParenIndex = str.indexOf(")", index); + if (closeParenIndex > index) { + backSlashIndex = str.indexOf("\\", index); + if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) return true; + } + } + if (pipeIndex !== -1 && str[index] === "(" && str[index + 1] !== "|") { + if (pipeIndex < index) pipeIndex = str.indexOf("|", index); + if (pipeIndex !== -1 && str[pipeIndex + 1] !== ")") { + closeParenIndex = str.indexOf(")", pipeIndex); + if (closeParenIndex > pipeIndex) { + backSlashIndex = str.indexOf("\\", pipeIndex); + if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) return true; + } + } + } + if (str[index] === "\\") { + var open = str[index + 1]; + index += 2; + var close = $5e9ad5cc9f0ed965$var$chars[open]; + if (close) { + var n = str.indexOf(close, index); + if (n !== -1) index = n + 1; + } + if (str[index] === "!") return true; + } else index++; + } + return false; +}; +var $5e9ad5cc9f0ed965$var$relaxedCheck = function(str) { + if (str[0] === "!") return true; + var index = 0; + while(index < str.length){ + if (/[*?{}()[\]]/.test(str[index])) return true; + if (str[index] === "\\") { + var open = str[index + 1]; + index += 2; + var close = $5e9ad5cc9f0ed965$var$chars[open]; + if (close) { + var n = str.indexOf(close, index); + if (n !== -1) index = n + 1; + } + if (str[index] === "!") return true; + } else index++; + } + return false; +}; +$5e9ad5cc9f0ed965$exports = function isGlob(str, options) { + if (typeof str !== "string" || str === "") return false; + if ($3e99edf0e98500e9$exports(str)) return true; + var check = $5e9ad5cc9f0ed965$var$strictCheck; + // optionally relax check + if (options && options.strict === false) check = $5e9ad5cc9f0ed965$var$relaxedCheck; + return check(str); +}; + + +var $e8d77afca8f9e92e$exports = {}; +"use strict"; + +var $e726a66c0308ce09$exports = {}; +"use strict"; +var $1dc1a8600228c12a$exports = {}; +"use strict"; +var $8e2229ba4b4f92c7$export$a287f47fed4544b8; +/** + * Find a node of the given type + */ var $8e2229ba4b4f92c7$export$71aa6c912b956294; +/** + * Find a node of the given type + */ var $8e2229ba4b4f92c7$export$fbadac39f36b1e16; +/** + * Escape the given node with '\\' before node.value + */ var $8e2229ba4b4f92c7$export$92e39b1e2c1e6e56; +/** + * Returns true if the given brace node should be enclosed in literal braces + */ var $8e2229ba4b4f92c7$export$ea0f721b77fd5acc; +/** + * Returns true if a brace node is invalid. + */ var $8e2229ba4b4f92c7$export$25a78c310c11373f; +/** + * Returns true if a node is an open or close node + */ var $8e2229ba4b4f92c7$export$582fc44003e67ec6; +/** + * Reduce an array of text nodes. + */ var $8e2229ba4b4f92c7$export$533b26079ad0b4b; +/** + * Flatten an array + */ var $8e2229ba4b4f92c7$export$bffa455ba8c619a6; +"use strict"; +$8e2229ba4b4f92c7$export$a287f47fed4544b8 = (num)=>{ + if (typeof num === "number") return Number.isInteger(num); + if (typeof num === "string" && num.trim() !== "") return Number.isInteger(Number(num)); + return false; +}; +$8e2229ba4b4f92c7$export$71aa6c912b956294 = (node, type)=>node.nodes.find((node)=>node.type === type); +$8e2229ba4b4f92c7$export$fbadac39f36b1e16 = (min, max, step = 1, limit)=>{ + if (limit === false) return false; + if (!$8e2229ba4b4f92c7$export$a287f47fed4544b8(min) || !$8e2229ba4b4f92c7$export$a287f47fed4544b8(max)) return false; + return (Number(max) - Number(min)) / Number(step) >= limit; +}; +$8e2229ba4b4f92c7$export$92e39b1e2c1e6e56 = (block, n = 0, type)=>{ + let node = block.nodes[n]; + if (!node) return; + if (type && node.type === type || node.type === "open" || node.type === "close") { + if (node.escaped !== true) { + node.value = "\\" + node.value; + node.escaped = true; + } + } +}; +$8e2229ba4b4f92c7$export$ea0f721b77fd5acc = (node)=>{ + if (node.type !== "brace") return false; + if (node.commas >> 0 + node.ranges >> 0 === 0) { + node.invalid = true; + return true; + } + return false; +}; +$8e2229ba4b4f92c7$export$25a78c310c11373f = (block)=>{ + if (block.type !== "brace") return false; + if (block.invalid === true || block.dollar) return true; + if (block.commas >> 0 + block.ranges >> 0 === 0) { + block.invalid = true; + return true; + } + if (block.open !== true || block.close !== true) { + block.invalid = true; + return true; + } + return false; +}; +$8e2229ba4b4f92c7$export$582fc44003e67ec6 = (node)=>{ + if (node.type === "open" || node.type === "close") return true; + return node.open === true || node.close === true; +}; +$8e2229ba4b4f92c7$export$533b26079ad0b4b = (nodes)=>nodes.reduce((acc, node)=>{ + if (node.type === "text") acc.push(node.value); + if (node.type === "range") node.type = "text"; + return acc; + }, []); +$8e2229ba4b4f92c7$export$bffa455ba8c619a6 = (...args)=>{ + const result = []; + const flat = (arr)=>{ + for(let i = 0; i < arr.length; i++){ + let ele = arr[i]; + Array.isArray(ele) ? flat(ele, result) : ele !== void 0 && result.push(ele); + } + return result; + }; + flat(args); + return result; +}; + + +$1dc1a8600228c12a$exports = (ast, options = {})=>{ + let stringify = (node, parent = {})=>{ + let invalidBlock = options.escapeInvalid && $8e2229ba4b4f92c7$export$25a78c310c11373f(parent); + let invalidNode = node.invalid === true && options.escapeInvalid === true; + let output = ""; + if (node.value) { + if ((invalidBlock || invalidNode) && $8e2229ba4b4f92c7$export$582fc44003e67ec6(node)) return "\\" + node.value; + return node.value; + } + if (node.value) return node.value; + if (node.nodes) for (let child of node.nodes)output += stringify(child); + return output; + }; + return stringify(ast); +}; + + +var $09c77f9ef9ddb760$exports = {}; +"use strict"; +var $e1283b659d276bdd$exports = {}; +/*! + * fill-range + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Licensed under the MIT License. + */ "use strict"; + +var $0499d46a6c020efb$exports = {}; +/*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + */ "use strict"; +var $78b81d3340cea0fd$exports = {}; +/*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + */ "use strict"; +$78b81d3340cea0fd$exports = function(num) { + if (typeof num === "number") return num - num === 0; + if (typeof num === "string" && num.trim() !== "") return Number.isFinite ? Number.isFinite(+num) : isFinite(+num); + return false; +}; + + +const $0499d46a6c020efb$var$toRegexRange = (min, max, options)=>{ + if ($78b81d3340cea0fd$exports(min) === false) throw new TypeError("toRegexRange: expected the first argument to be a number"); + if (max === void 0 || min === max) return String(min); + if ($78b81d3340cea0fd$exports(max) === false) throw new TypeError("toRegexRange: expected the second argument to be a number."); + let opts = { + relaxZeros: true, + ...options + }; + if (typeof opts.strictZeros === "boolean") opts.relaxZeros = opts.strictZeros === false; + let relax = String(opts.relaxZeros); + let shorthand = String(opts.shorthand); + let capture = String(opts.capture); + let wrap = String(opts.wrap); + let cacheKey = min + ":" + max + "=" + relax + shorthand + capture + wrap; + if ($0499d46a6c020efb$var$toRegexRange.cache.hasOwnProperty(cacheKey)) return $0499d46a6c020efb$var$toRegexRange.cache[cacheKey].result; + let a = Math.min(min, max); + let b = Math.max(min, max); + if (Math.abs(a - b) === 1) { + let result = min + "|" + max; + if (opts.capture) return `(${result})`; + if (opts.wrap === false) return result; + return `(?:${result})`; + } + let isPadded = $0499d46a6c020efb$var$hasPadding(min) || $0499d46a6c020efb$var$hasPadding(max); + let state = { + min: min, + max: max, + a: a, + b: b + }; + let positives = []; + let negatives = []; + if (isPadded) { + state.isPadded = isPadded; + state.maxLen = String(state.max).length; + } + if (a < 0) { + let newMin = b < 0 ? Math.abs(b) : 1; + negatives = $0499d46a6c020efb$var$splitToPatterns(newMin, Math.abs(a), state, opts); + a = state.a = 0; + } + if (b >= 0) positives = $0499d46a6c020efb$var$splitToPatterns(a, b, state, opts); + state.negatives = negatives; + state.positives = positives; + state.result = $0499d46a6c020efb$var$collatePatterns(negatives, positives, opts); + if (opts.capture === true) state.result = `(${state.result})`; + else if (opts.wrap !== false && positives.length + negatives.length > 1) state.result = `(?:${state.result})`; + $0499d46a6c020efb$var$toRegexRange.cache[cacheKey] = state; + return state.result; +}; +function $0499d46a6c020efb$var$collatePatterns(neg, pos, options) { + let onlyNegative = $0499d46a6c020efb$var$filterPatterns(neg, pos, "-", false, options) || []; + let onlyPositive = $0499d46a6c020efb$var$filterPatterns(pos, neg, "", false, options) || []; + let intersected = $0499d46a6c020efb$var$filterPatterns(neg, pos, "-?", true, options) || []; + let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive); + return subpatterns.join("|"); +} +function $0499d46a6c020efb$var$splitToRanges(min, max) { + let nines = 1; + let zeros = 1; + let stop = $0499d46a6c020efb$var$countNines(min, nines); + let stops = new Set([ + max + ]); + while(min <= stop && stop <= max){ + stops.add(stop); + nines += 1; + stop = $0499d46a6c020efb$var$countNines(min, nines); + } + stop = $0499d46a6c020efb$var$countZeros(max + 1, zeros) - 1; + while(min < stop && stop <= max){ + stops.add(stop); + zeros += 1; + stop = $0499d46a6c020efb$var$countZeros(max + 1, zeros) - 1; + } + stops = [ + ...stops + ]; + stops.sort($0499d46a6c020efb$var$compare); + return stops; +} +/** + * Convert a range to a regex pattern + * @param {Number} `start` + * @param {Number} `stop` + * @return {String} + */ function $0499d46a6c020efb$var$rangeToPattern(start, stop, options) { + if (start === stop) return { + pattern: start, + count: [], + digits: 0 + }; + let zipped = $0499d46a6c020efb$var$zip(start, stop); + let digits = zipped.length; + let pattern = ""; + let count = 0; + for(let i = 0; i < digits; i++){ + let [startDigit, stopDigit] = zipped[i]; + if (startDigit === stopDigit) pattern += startDigit; + else if (startDigit !== "0" || stopDigit !== "9") pattern += $0499d46a6c020efb$var$toCharacterClass(startDigit, stopDigit, options); + else count++; + } + if (count) pattern += options.shorthand === true ? "\\d" : "[0-9]"; + return { + pattern: pattern, + count: [ + count + ], + digits: digits + }; +} +function $0499d46a6c020efb$var$splitToPatterns(min, max, tok, options) { + let ranges = $0499d46a6c020efb$var$splitToRanges(min, max); + let tokens = []; + let start = min; + let prev; + for(let i = 0; i < ranges.length; i++){ + let max = ranges[i]; + let obj = $0499d46a6c020efb$var$rangeToPattern(String(start), String(max), options); + let zeros = ""; + if (!tok.isPadded && prev && prev.pattern === obj.pattern) { + if (prev.count.length > 1) prev.count.pop(); + prev.count.push(obj.count[0]); + prev.string = prev.pattern + $0499d46a6c020efb$var$toQuantifier(prev.count); + start = max + 1; + continue; + } + if (tok.isPadded) zeros = $0499d46a6c020efb$var$padZeros(max, tok, options); + obj.string = zeros + obj.pattern + $0499d46a6c020efb$var$toQuantifier(obj.count); + tokens.push(obj); + start = max + 1; + prev = obj; + } + return tokens; +} +function $0499d46a6c020efb$var$filterPatterns(arr, comparison, prefix, intersection, options) { + let result = []; + for (let ele of arr){ + let { string: string } = ele; + // only push if _both_ are negative... + if (!intersection && !$0499d46a6c020efb$var$contains(comparison, "string", string)) result.push(prefix + string); + // or _both_ are positive + if (intersection && $0499d46a6c020efb$var$contains(comparison, "string", string)) result.push(prefix + string); + } + return result; +} +/** + * Zip strings + */ function $0499d46a6c020efb$var$zip(a, b) { + let arr = []; + for(let i = 0; i < a.length; i++)arr.push([ + a[i], + b[i] + ]); + return arr; +} +function $0499d46a6c020efb$var$compare(a, b) { + return a > b ? 1 : b > a ? -1 : 0; +} +function $0499d46a6c020efb$var$contains(arr, key, val) { + return arr.some((ele)=>ele[key] === val); +} +function $0499d46a6c020efb$var$countNines(min, len) { + return Number(String(min).slice(0, -len) + "9".repeat(len)); +} +function $0499d46a6c020efb$var$countZeros(integer, zeros) { + return integer - integer % Math.pow(10, zeros); +} +function $0499d46a6c020efb$var$toQuantifier(digits) { + let [start = 0, stop = ""] = digits; + if (stop || start > 1) return `{${start + (stop ? "," + stop : "")}}`; + return ""; +} +function $0499d46a6c020efb$var$toCharacterClass(a, b, options) { + return `[${a}${b - a === 1 ? "" : "-"}${b}]`; +} +function $0499d46a6c020efb$var$hasPadding(str) { + return /^-?(0+)\d/.test(str); +} +function $0499d46a6c020efb$var$padZeros(value, tok, options) { + if (!tok.isPadded) return value; + let diff = Math.abs(tok.maxLen - String(value).length); + let relax = options.relaxZeros !== false; + switch(diff){ + case 0: + return ""; + case 1: + return relax ? "0?" : "0"; + case 2: + return relax ? "0{0,2}" : "00"; + default: + return relax ? `0{0,${diff}}` : `0{${diff}}`; + } +} +/** + * Cache + */ $0499d46a6c020efb$var$toRegexRange.cache = {}; +$0499d46a6c020efb$var$toRegexRange.clearCache = ()=>$0499d46a6c020efb$var$toRegexRange.cache = {}; +/** + * Expose `toRegexRange` + */ $0499d46a6c020efb$exports = $0499d46a6c020efb$var$toRegexRange; + + +const $e1283b659d276bdd$var$isObject = (val)=>val !== null && typeof val === "object" && !Array.isArray(val); +const $e1283b659d276bdd$var$transform = (toNumber)=>{ + return (value)=>toNumber === true ? Number(value) : String(value); +}; +const $e1283b659d276bdd$var$isValidValue = (value)=>{ + return typeof value === "number" || typeof value === "string" && value !== ""; +}; +const $e1283b659d276bdd$var$isNumber = (num)=>Number.isInteger(+num); +const $e1283b659d276bdd$var$zeros = (input)=>{ + let value = `${input}`; + let index = -1; + if (value[0] === "-") value = value.slice(1); + if (value === "0") return false; + while(value[++index] === "0"); + return index > 0; +}; +const $e1283b659d276bdd$var$stringify = (start, end, options)=>{ + if (typeof start === "string" || typeof end === "string") return true; + return options.stringify === true; +}; +const $e1283b659d276bdd$var$pad = (input, maxLength, toNumber)=>{ + if (maxLength > 0) { + let dash = input[0] === "-" ? "-" : ""; + if (dash) input = input.slice(1); + input = dash + input.padStart(dash ? maxLength - 1 : maxLength, "0"); + } + if (toNumber === false) return String(input); + return input; +}; +const $e1283b659d276bdd$var$toMaxLen = (input, maxLength)=>{ + let negative = input[0] === "-" ? "-" : ""; + if (negative) { + input = input.slice(1); + maxLength--; + } + while(input.length < maxLength)input = "0" + input; + return negative ? "-" + input : input; +}; +const $e1283b659d276bdd$var$toSequence = (parts, options)=>{ + parts.negatives.sort((a, b)=>a < b ? -1 : a > b ? 1 : 0); + parts.positives.sort((a, b)=>a < b ? -1 : a > b ? 1 : 0); + let prefix = options.capture ? "" : "?:"; + let positives = ""; + let negatives = ""; + let result; + if (parts.positives.length) positives = parts.positives.join("|"); + if (parts.negatives.length) negatives = `-(${prefix}${parts.negatives.join("|")})`; + if (positives && negatives) result = `${positives}|${negatives}`; + else result = positives || negatives; + if (options.wrap) return `(${prefix}${result})`; + return result; +}; +const $e1283b659d276bdd$var$toRange = (a, b, isNumbers, options)=>{ + if (isNumbers) return $0499d46a6c020efb$exports(a, b, { + wrap: false, + ...options + }); + let start = String.fromCharCode(a); + if (a === b) return start; + let stop = String.fromCharCode(b); + return `[${start}-${stop}]`; +}; +const $e1283b659d276bdd$var$toRegex = (start, end, options)=>{ + if (Array.isArray(start)) { + let wrap = options.wrap === true; + let prefix = options.capture ? "" : "?:"; + return wrap ? `(${prefix}${start.join("|")})` : start.join("|"); + } + return $0499d46a6c020efb$exports(start, end, options); +}; +const $e1283b659d276bdd$var$rangeError = (...args)=>{ + return new RangeError("Invalid range arguments: " + $luxNM$util.inspect(...args)); +}; +const $e1283b659d276bdd$var$invalidRange = (start, end, options)=>{ + if (options.strictRanges === true) throw $e1283b659d276bdd$var$rangeError([ + start, + end + ]); + return []; +}; +const $e1283b659d276bdd$var$invalidStep = (step, options)=>{ + if (options.strictRanges === true) throw new TypeError(`Expected step "${step}" to be a number`); + return []; +}; +const $e1283b659d276bdd$var$fillNumbers = (start, end, step = 1, options = {})=>{ + let a = Number(start); + let b = Number(end); + if (!Number.isInteger(a) || !Number.isInteger(b)) { + if (options.strictRanges === true) throw $e1283b659d276bdd$var$rangeError([ + start, + end + ]); + return []; + } + // fix negative zero + if (a === 0) a = 0; + if (b === 0) b = 0; + let descending = a > b; + let startString = String(start); + let endString = String(end); + let stepString = String(step); + step = Math.max(Math.abs(step), 1); + let padded = $e1283b659d276bdd$var$zeros(startString) || $e1283b659d276bdd$var$zeros(endString) || $e1283b659d276bdd$var$zeros(stepString); + let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0; + let toNumber = padded === false && $e1283b659d276bdd$var$stringify(start, end, options) === false; + let format = options.transform || $e1283b659d276bdd$var$transform(toNumber); + if (options.toRegex && step === 1) return $e1283b659d276bdd$var$toRange($e1283b659d276bdd$var$toMaxLen(start, maxLen), $e1283b659d276bdd$var$toMaxLen(end, maxLen), true, options); + let parts = { + negatives: [], + positives: [] + }; + let push = (num)=>parts[num < 0 ? "negatives" : "positives"].push(Math.abs(num)); + let range = []; + let index = 0; + while(descending ? a >= b : a <= b){ + if (options.toRegex === true && step > 1) push(a); + else range.push($e1283b659d276bdd$var$pad(format(a, index), maxLen, toNumber)); + a = descending ? a - step : a + step; + index++; + } + if (options.toRegex === true) return step > 1 ? $e1283b659d276bdd$var$toSequence(parts, options) : $e1283b659d276bdd$var$toRegex(range, null, { + wrap: false, + ...options + }); + return range; +}; +const $e1283b659d276bdd$var$fillLetters = (start, end, step = 1, options = {})=>{ + if (!$e1283b659d276bdd$var$isNumber(start) && start.length > 1 || !$e1283b659d276bdd$var$isNumber(end) && end.length > 1) return $e1283b659d276bdd$var$invalidRange(start, end, options); + let format = options.transform || ((val)=>String.fromCharCode(val)); + let a = `${start}`.charCodeAt(0); + let b = `${end}`.charCodeAt(0); + let descending = a > b; + let min = Math.min(a, b); + let max = Math.max(a, b); + if (options.toRegex && step === 1) return $e1283b659d276bdd$var$toRange(min, max, false, options); + let range = []; + let index = 0; + while(descending ? a >= b : a <= b){ + range.push(format(a, index)); + a = descending ? a - step : a + step; + index++; + } + if (options.toRegex === true) return $e1283b659d276bdd$var$toRegex(range, null, { + wrap: false, + options: options + }); + return range; +}; +const $e1283b659d276bdd$var$fill = (start, end, step, options = {})=>{ + if (end == null && $e1283b659d276bdd$var$isValidValue(start)) return [ + start + ]; + if (!$e1283b659d276bdd$var$isValidValue(start) || !$e1283b659d276bdd$var$isValidValue(end)) return $e1283b659d276bdd$var$invalidRange(start, end, options); + if (typeof step === "function") return $e1283b659d276bdd$var$fill(start, end, 1, { + transform: step + }); + if ($e1283b659d276bdd$var$isObject(step)) return $e1283b659d276bdd$var$fill(start, end, 0, step); + let opts = { + ...options + }; + if (opts.capture === true) opts.wrap = true; + step = step || opts.step || 1; + if (!$e1283b659d276bdd$var$isNumber(step)) { + if (step != null && !$e1283b659d276bdd$var$isObject(step)) return $e1283b659d276bdd$var$invalidStep(step, opts); + return $e1283b659d276bdd$var$fill(start, end, 1, step); + } + if ($e1283b659d276bdd$var$isNumber(start) && $e1283b659d276bdd$var$isNumber(end)) return $e1283b659d276bdd$var$fillNumbers(start, end, step, opts); + return $e1283b659d276bdd$var$fillLetters(start, end, Math.max(Math.abs(step), 1), opts); +}; +$e1283b659d276bdd$exports = $e1283b659d276bdd$var$fill; + + + +const $09c77f9ef9ddb760$var$compile = (ast, options = {})=>{ + let walk = (node, parent = {})=>{ + let invalidBlock = $8e2229ba4b4f92c7$export$25a78c310c11373f(parent); + let invalidNode = node.invalid === true && options.escapeInvalid === true; + let invalid = invalidBlock === true || invalidNode === true; + let prefix = options.escapeInvalid === true ? "\\" : ""; + let output = ""; + if (node.isOpen === true) return prefix + node.value; + if (node.isClose === true) return prefix + node.value; + if (node.type === "open") return invalid ? prefix + node.value : "("; + if (node.type === "close") return invalid ? prefix + node.value : ")"; + if (node.type === "comma") return node.prev.type === "comma" ? "" : invalid ? node.value : "|"; + if (node.value) return node.value; + if (node.nodes && node.ranges > 0) { + let args = $8e2229ba4b4f92c7$export$533b26079ad0b4b(node.nodes); + let range = $e1283b659d276bdd$exports(...args, { + ...options, + wrap: false, + toRegex: true + }); + if (range.length !== 0) return args.length > 1 && range.length > 1 ? `(${range})` : range; + } + if (node.nodes) for (let child of node.nodes)output += walk(child, node); + return output; + }; + return walk(ast); +}; +$09c77f9ef9ddb760$exports = $09c77f9ef9ddb760$var$compile; + + +var $9ae351a6af2cb658$exports = {}; +"use strict"; + + + +const $9ae351a6af2cb658$var$append = (queue = "", stash = "", enclose = false)=>{ + let result = []; + queue = [].concat(queue); + stash = [].concat(stash); + if (!stash.length) return queue; + if (!queue.length) return enclose ? $8e2229ba4b4f92c7$export$bffa455ba8c619a6(stash).map((ele)=>`{${ele}}`) : stash; + for (let item of queue){ + if (Array.isArray(item)) for (let value of item)result.push($9ae351a6af2cb658$var$append(value, stash, enclose)); + else for (let ele of stash){ + if (enclose === true && typeof ele === "string") ele = `{${ele}}`; + result.push(Array.isArray(ele) ? $9ae351a6af2cb658$var$append(item, ele, enclose) : item + ele); + } + } + return $8e2229ba4b4f92c7$export$bffa455ba8c619a6(result); +}; +const $9ae351a6af2cb658$var$expand = (ast, options = {})=>{ + let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit; + let walk = (node, parent = {})=>{ + node.queue = []; + let p = parent; + let q = parent.queue; + while(p.type !== "brace" && p.type !== "root" && p.parent){ + p = p.parent; + q = p.queue; + } + if (node.invalid || node.dollar) { + q.push($9ae351a6af2cb658$var$append(q.pop(), $1dc1a8600228c12a$exports(node, options))); + return; + } + if (node.type === "brace" && node.invalid !== true && node.nodes.length === 2) { + q.push($9ae351a6af2cb658$var$append(q.pop(), [ + "{}" + ])); + return; + } + if (node.nodes && node.ranges > 0) { + let args = $8e2229ba4b4f92c7$export$533b26079ad0b4b(node.nodes); + if ($8e2229ba4b4f92c7$export$fbadac39f36b1e16(...args, options.step, rangeLimit)) throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit."); + let range = $e1283b659d276bdd$exports(...args, options); + if (range.length === 0) range = $1dc1a8600228c12a$exports(node, options); + q.push($9ae351a6af2cb658$var$append(q.pop(), range)); + node.nodes = []; + return; + } + let enclose = $8e2229ba4b4f92c7$export$ea0f721b77fd5acc(node); + let queue = node.queue; + let block = node; + while(block.type !== "brace" && block.type !== "root" && block.parent){ + block = block.parent; + queue = block.queue; + } + for(let i = 0; i < node.nodes.length; i++){ + let child = node.nodes[i]; + if (child.type === "comma" && node.type === "brace") { + if (i === 1) queue.push(""); + queue.push(""); + continue; + } + if (child.type === "close") { + q.push($9ae351a6af2cb658$var$append(q.pop(), queue, enclose)); + continue; + } + if (child.value && child.type !== "open") { + queue.push($9ae351a6af2cb658$var$append(queue.pop(), child.value)); + continue; + } + if (child.nodes) walk(child, node); + } + return queue; + }; + return $8e2229ba4b4f92c7$export$bffa455ba8c619a6(walk(ast)); +}; +$9ae351a6af2cb658$exports = $9ae351a6af2cb658$var$expand; + + +var $96fca0595e4be51d$exports = {}; +"use strict"; + +var $013937f8a084b53b$exports = {}; +"use strict"; +$013937f8a084b53b$exports = { + MAX_LENGTH: 65536, + // Digits + CHAR_0: "0", + /* 0 */ CHAR_9: "9", + /* 9 */ // Alphabet chars. + CHAR_UPPERCASE_A: "A", + /* A */ CHAR_LOWERCASE_A: "a", + /* a */ CHAR_UPPERCASE_Z: "Z", + /* Z */ CHAR_LOWERCASE_Z: "z", + /* z */ CHAR_LEFT_PARENTHESES: "(", + /* ( */ CHAR_RIGHT_PARENTHESES: ")", + /* ) */ CHAR_ASTERISK: "*", + /* * */ // Non-alphabetic chars. + CHAR_AMPERSAND: "&", + /* & */ CHAR_AT: "@", + /* @ */ CHAR_BACKSLASH: "\\", + /* \ */ CHAR_BACKTICK: "`", + /* ` */ CHAR_CARRIAGE_RETURN: "\r", + /* \r */ CHAR_CIRCUMFLEX_ACCENT: "^", + /* ^ */ CHAR_COLON: ":", + /* : */ CHAR_COMMA: ",", + /* , */ CHAR_DOLLAR: "$", + /* . */ CHAR_DOT: ".", + /* . */ CHAR_DOUBLE_QUOTE: '"', + /* " */ CHAR_EQUAL: "=", + /* = */ CHAR_EXCLAMATION_MARK: "!", + /* ! */ CHAR_FORM_FEED: "\f", + /* \f */ CHAR_FORWARD_SLASH: "/", + /* / */ CHAR_HASH: "#", + /* # */ CHAR_HYPHEN_MINUS: "-", + /* - */ CHAR_LEFT_ANGLE_BRACKET: "<", + /* < */ CHAR_LEFT_CURLY_BRACE: "{", + /* { */ CHAR_LEFT_SQUARE_BRACKET: "[", + /* [ */ CHAR_LINE_FEED: "\n", + /* \n */ CHAR_NO_BREAK_SPACE: "\xa0", + /* \u00A0 */ CHAR_PERCENT: "%", + /* % */ CHAR_PLUS: "+", + /* + */ CHAR_QUESTION_MARK: "?", + /* ? */ CHAR_RIGHT_ANGLE_BRACKET: ">", + /* > */ CHAR_RIGHT_CURLY_BRACE: "}", + /* } */ CHAR_RIGHT_SQUARE_BRACKET: "]", + /* ] */ CHAR_SEMICOLON: ";", + /* ; */ CHAR_SINGLE_QUOTE: "'", + /* ' */ CHAR_SPACE: " ", + /* */ CHAR_TAB: " ", + /* \t */ CHAR_UNDERSCORE: "_", + /* _ */ CHAR_VERTICAL_LINE: "|", + /* | */ CHAR_ZERO_WIDTH_NOBREAK_SPACE: "\uFEFF" /* \uFEFF */ +}; + + +var $96fca0595e4be51d$require$MAX_LENGTH = $013937f8a084b53b$exports.MAX_LENGTH; +var $96fca0595e4be51d$require$CHAR_BACKSLASH = $013937f8a084b53b$exports.CHAR_BACKSLASH; +var $96fca0595e4be51d$require$CHAR_BACKTICK = $013937f8a084b53b$exports.CHAR_BACKTICK; +var $96fca0595e4be51d$require$CHAR_COMMA = $013937f8a084b53b$exports.CHAR_COMMA; +var $96fca0595e4be51d$require$CHAR_DOT = $013937f8a084b53b$exports.CHAR_DOT; +var $96fca0595e4be51d$require$CHAR_LEFT_PARENTHESES = $013937f8a084b53b$exports.CHAR_LEFT_PARENTHESES; +var $96fca0595e4be51d$require$CHAR_RIGHT_PARENTHESES = $013937f8a084b53b$exports.CHAR_RIGHT_PARENTHESES; +var $96fca0595e4be51d$require$CHAR_LEFT_CURLY_BRACE = $013937f8a084b53b$exports.CHAR_LEFT_CURLY_BRACE; +var $96fca0595e4be51d$require$CHAR_RIGHT_CURLY_BRACE = $013937f8a084b53b$exports.CHAR_RIGHT_CURLY_BRACE; +var $96fca0595e4be51d$require$CHAR_LEFT_SQUARE_BRACKET = $013937f8a084b53b$exports.CHAR_LEFT_SQUARE_BRACKET; +var $96fca0595e4be51d$require$CHAR_RIGHT_SQUARE_BRACKET = $013937f8a084b53b$exports.CHAR_RIGHT_SQUARE_BRACKET; +var $96fca0595e4be51d$require$CHAR_DOUBLE_QUOTE = $013937f8a084b53b$exports.CHAR_DOUBLE_QUOTE; +var $96fca0595e4be51d$require$CHAR_SINGLE_QUOTE = $013937f8a084b53b$exports.CHAR_SINGLE_QUOTE; +var $96fca0595e4be51d$require$CHAR_NO_BREAK_SPACE = $013937f8a084b53b$exports.CHAR_NO_BREAK_SPACE; +var $96fca0595e4be51d$require$CHAR_ZERO_WIDTH_NOBREAK_SPACE = $013937f8a084b53b$exports.CHAR_ZERO_WIDTH_NOBREAK_SPACE; +/** + * parse + */ const $96fca0595e4be51d$var$parse = (input, options = {})=>{ + if (typeof input !== "string") throw new TypeError("Expected a string"); + let opts = options || {}; + let max = typeof opts.maxLength === "number" ? Math.min($96fca0595e4be51d$require$MAX_LENGTH, opts.maxLength) : $96fca0595e4be51d$require$MAX_LENGTH; + if (input.length > max) throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`); + let ast = { + type: "root", + input: input, + nodes: [] + }; + let stack = [ + ast + ]; + let block = ast; + let prev = ast; + let brackets = 0; + let length = input.length; + let index = 0; + let depth = 0; + let value; + let memo = {}; + /** + * Helpers + */ const advance = ()=>input[index++]; + const push = (node)=>{ + if (node.type === "text" && prev.type === "dot") prev.type = "text"; + if (prev && prev.type === "text" && node.type === "text") { + prev.value += node.value; + return; + } + block.nodes.push(node); + node.parent = block; + node.prev = prev; + prev = node; + return node; + }; + push({ + type: "bos" + }); + while(index < length){ + block = stack[stack.length - 1]; + value = advance(); + /** + * Invalid chars + */ if (value === $96fca0595e4be51d$require$CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === $96fca0595e4be51d$require$CHAR_NO_BREAK_SPACE) continue; + /** + * Escaped chars + */ if (value === $96fca0595e4be51d$require$CHAR_BACKSLASH) { + push({ + type: "text", + value: (options.keepEscaping ? value : "") + advance() + }); + continue; + } + /** + * Right square bracket (literal): ']' + */ if (value === $96fca0595e4be51d$require$CHAR_RIGHT_SQUARE_BRACKET) { + push({ + type: "text", + value: "\\" + value + }); + continue; + } + /** + * Left square bracket: '[' + */ if (value === $96fca0595e4be51d$require$CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + let closed = true; + let next; + while(index < length && (next = advance())){ + value += next; + if (next === $96fca0595e4be51d$require$CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + continue; + } + if (next === $96fca0595e4be51d$require$CHAR_BACKSLASH) { + value += advance(); + continue; + } + if (next === $96fca0595e4be51d$require$CHAR_RIGHT_SQUARE_BRACKET) { + brackets--; + if (brackets === 0) break; + } + } + push({ + type: "text", + value: value + }); + continue; + } + /** + * Parentheses + */ if (value === $96fca0595e4be51d$require$CHAR_LEFT_PARENTHESES) { + block = push({ + type: "paren", + nodes: [] + }); + stack.push(block); + push({ + type: "text", + value: value + }); + continue; + } + if (value === $96fca0595e4be51d$require$CHAR_RIGHT_PARENTHESES) { + if (block.type !== "paren") { + push({ + type: "text", + value: value + }); + continue; + } + block = stack.pop(); + push({ + type: "text", + value: value + }); + block = stack[stack.length - 1]; + continue; + } + /** + * Quotes: '|"|` + */ if (value === $96fca0595e4be51d$require$CHAR_DOUBLE_QUOTE || value === $96fca0595e4be51d$require$CHAR_SINGLE_QUOTE || value === $96fca0595e4be51d$require$CHAR_BACKTICK) { + let open = value; + let next; + if (options.keepQuotes !== true) value = ""; + while(index < length && (next = advance())){ + if (next === $96fca0595e4be51d$require$CHAR_BACKSLASH) { + value += next + advance(); + continue; + } + if (next === open) { + if (options.keepQuotes === true) value += next; + break; + } + value += next; + } + push({ + type: "text", + value: value + }); + continue; + } + /** + * Left curly brace: '{' + */ if (value === $96fca0595e4be51d$require$CHAR_LEFT_CURLY_BRACE) { + depth++; + let dollar = prev.value && prev.value.slice(-1) === "$" || block.dollar === true; + let brace = { + type: "brace", + open: true, + close: false, + dollar: dollar, + depth: depth, + commas: 0, + ranges: 0, + nodes: [] + }; + block = push(brace); + stack.push(block); + push({ + type: "open", + value: value + }); + continue; + } + /** + * Right curly brace: '}' + */ if (value === $96fca0595e4be51d$require$CHAR_RIGHT_CURLY_BRACE) { + if (block.type !== "brace") { + push({ + type: "text", + value: value + }); + continue; + } + let type = "close"; + block = stack.pop(); + block.close = true; + push({ + type: type, + value: value + }); + depth--; + block = stack[stack.length - 1]; + continue; + } + /** + * Comma: ',' + */ if (value === $96fca0595e4be51d$require$CHAR_COMMA && depth > 0) { + if (block.ranges > 0) { + block.ranges = 0; + let open = block.nodes.shift(); + block.nodes = [ + open, + { + type: "text", + value: $1dc1a8600228c12a$exports(block) + } + ]; + } + push({ + type: "comma", + value: value + }); + block.commas++; + continue; + } + /** + * Dot: '.' + */ if (value === $96fca0595e4be51d$require$CHAR_DOT && depth > 0 && block.commas === 0) { + let siblings = block.nodes; + if (depth === 0 || siblings.length === 0) { + push({ + type: "text", + value: value + }); + continue; + } + if (prev.type === "dot") { + block.range = []; + prev.value += value; + prev.type = "range"; + if (block.nodes.length !== 3 && block.nodes.length !== 5) { + block.invalid = true; + block.ranges = 0; + prev.type = "text"; + continue; + } + block.ranges++; + block.args = []; + continue; + } + if (prev.type === "range") { + siblings.pop(); + let before = siblings[siblings.length - 1]; + before.value += prev.value + value; + prev = before; + block.ranges--; + continue; + } + push({ + type: "dot", + value: value + }); + continue; + } + /** + * Text + */ push({ + type: "text", + value: value + }); + } + // Mark imbalanced braces and brackets as invalid + do { + block = stack.pop(); + if (block.type !== "root") { + block.nodes.forEach((node)=>{ + if (!node.nodes) { + if (node.type === "open") node.isOpen = true; + if (node.type === "close") node.isClose = true; + if (!node.nodes) node.type = "text"; + node.invalid = true; + } + }); + // get the location of the block on parent.nodes (block's siblings) + let parent = stack[stack.length - 1]; + let index = parent.nodes.indexOf(block); + // replace the (invalid) block with it's nodes + parent.nodes.splice(index, 1, ...block.nodes); + } + }while (stack.length > 0); + push({ + type: "eos" + }); + return ast; +}; +$96fca0595e4be51d$exports = $96fca0595e4be51d$var$parse; + + +/** + * Expand the given pattern or create a regex-compatible string. + * + * ```js + * const braces = require('braces'); + * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)'] + * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c'] + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {String} + * @api public + */ const $e726a66c0308ce09$var$braces = (input, options = {})=>{ + let output = []; + if (Array.isArray(input)) for (let pattern of input){ + let result = $e726a66c0308ce09$var$braces.create(pattern, options); + if (Array.isArray(result)) output.push(...result); + else output.push(result); + } + else output = [].concat($e726a66c0308ce09$var$braces.create(input, options)); + if (options && options.expand === true && options.nodupes === true) output = [ + ...new Set(output) + ]; + return output; +}; +/** + * Parse the given `str` with the given `options`. + * + * ```js + * // braces.parse(pattern, [, options]); + * const ast = braces.parse('a/{b,c}/d'); + * console.log(ast); + * ``` + * @param {String} pattern Brace pattern to parse + * @param {Object} options + * @return {Object} Returns an AST + * @api public + */ $e726a66c0308ce09$var$braces.parse = (input, options = {})=>$96fca0595e4be51d$exports(input, options); +/** + * Creates a braces string from an AST, or an AST node. + * + * ```js + * const braces = require('braces'); + * let ast = braces.parse('foo/{a,b}/bar'); + * console.log(stringify(ast.nodes[2])); //=> '{a,b}' + * ``` + * @param {String} `input` Brace pattern or AST. + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ $e726a66c0308ce09$var$braces.stringify = (input, options = {})=>{ + if (typeof input === "string") return $1dc1a8600228c12a$exports($e726a66c0308ce09$var$braces.parse(input, options), options); + return $1dc1a8600228c12a$exports(input, options); +}; +/** + * Compiles a brace pattern into a regex-compatible, optimized string. + * This method is called by the main [braces](#braces) function by default. + * + * ```js + * const braces = require('braces'); + * console.log(braces.compile('a/{b,c}/d')); + * //=> ['a/(b|c)/d'] + * ``` + * @param {String} `input` Brace pattern or AST. + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ $e726a66c0308ce09$var$braces.compile = (input, options = {})=>{ + if (typeof input === "string") input = $e726a66c0308ce09$var$braces.parse(input, options); + return $09c77f9ef9ddb760$exports(input, options); +}; +/** + * Expands a brace pattern into an array. This method is called by the + * main [braces](#braces) function when `options.expand` is true. Before + * using this method it's recommended that you read the [performance notes](#performance)) + * and advantages of using [.compile](#compile) instead. + * + * ```js + * const braces = require('braces'); + * console.log(braces.expand('a/{b,c}/d')); + * //=> ['a/b/d', 'a/c/d']; + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ $e726a66c0308ce09$var$braces.expand = (input, options = {})=>{ + if (typeof input === "string") input = $e726a66c0308ce09$var$braces.parse(input, options); + let result = $9ae351a6af2cb658$exports(input, options); + // filter out empty strings if specified + if (options.noempty === true) result = result.filter(Boolean); + // filter out duplicates if specified + if (options.nodupes === true) result = [ + ...new Set(result) + ]; + return result; +}; +/** + * Processes a brace pattern and returns either an expanded array + * (if `options.expand` is true), a highly optimized regex-compatible string. + * This method is called by the main [braces](#braces) function. + * + * ```js + * const braces = require('braces'); + * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}')) + * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)' + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ $e726a66c0308ce09$var$braces.create = (input, options = {})=>{ + if (input === "" || input.length < 3) return [ + input + ]; + return options.expand !== true ? $e726a66c0308ce09$var$braces.compile(input, options) : $e726a66c0308ce09$var$braces.expand(input, options); +}; +/** + * Expose "braces" + */ $e726a66c0308ce09$exports = $e726a66c0308ce09$var$braces; + + +var $a2620f730cd7a77c$exports = {}; +"use strict"; + +$a2620f730cd7a77c$exports = (parcelRequire("d6ue3")); + + + +var $3GrsY = parcelRequire("3GrsY"); +const $e8d77afca8f9e92e$var$isEmptyString = (val)=>val === "" || val === "./"; +/** + * Returns an array of strings that match one or more glob patterns. + * + * ```js + * const mm = require('micromatch'); + * // mm(list, patterns[, options]); + * + * console.log(mm(['a.js', 'a.txt'], ['*.js'])); + * //=> [ 'a.js' ] + * ``` + * @param {String|Array} `list` List of strings to match. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) + * @return {Array} Returns an array of matches + * @summary false + * @api public + */ const $e8d77afca8f9e92e$var$micromatch = (list, patterns, options)=>{ + patterns = [].concat(patterns); + list = [].concat(list); + let omit = new Set(); + let keep = new Set(); + let items = new Set(); + let negatives = 0; + let onResult = (state)=>{ + items.add(state.output); + if (options && options.onResult) options.onResult(state); + }; + for(let i = 0; i < patterns.length; i++){ + let isMatch = $a2620f730cd7a77c$exports(String(patterns[i]), { + ...options, + onResult: onResult + }, true); + let negated = isMatch.state.negated || isMatch.state.negatedExtglob; + if (negated) negatives++; + for (let item of list){ + let matched = isMatch(item, true); + let match = negated ? !matched.isMatch : matched.isMatch; + if (!match) continue; + if (negated) omit.add(matched.output); + else { + omit.delete(matched.output); + keep.add(matched.output); + } + } + } + let result = negatives === patterns.length ? [ + ...items + ] : [ + ...keep + ]; + let matches = result.filter((item)=>!omit.has(item)); + if (options && matches.length === 0) { + if (options.failglob === true) throw new Error(`No matches found for "${patterns.join(", ")}"`); + if (options.nonull === true || options.nullglob === true) return options.unescape ? patterns.map((p)=>p.replace(/\\/g, "")) : patterns; + } + return matches; +}; +/** + * Backwards compatibility + */ $e8d77afca8f9e92e$var$micromatch.match = $e8d77afca8f9e92e$var$micromatch; +/** + * Returns a matcher function from the given glob `pattern` and `options`. + * The returned function takes a string to match as its only argument and returns + * true if the string is a match. + * + * ```js + * const mm = require('micromatch'); + * // mm.matcher(pattern[, options]); + * + * const isMatch = mm.matcher('*.!(*a)'); + * console.log(isMatch('a.a')); //=> false + * console.log(isMatch('a.b')); //=> true + * ``` + * @param {String} `pattern` Glob pattern + * @param {Object} `options` + * @return {Function} Returns a matcher function. + * @api public + */ $e8d77afca8f9e92e$var$micromatch.matcher = (pattern, options)=>$a2620f730cd7a77c$exports(pattern, options); +/** + * Returns true if **any** of the given glob `patterns` match the specified `string`. + * + * ```js + * const mm = require('micromatch'); + * // mm.isMatch(string, patterns[, options]); + * + * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true + * console.log(mm.isMatch('a.a', 'b.*')); //=> false + * ``` + * @param {String} `str` The string to test. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `[options]` See available [options](#options). + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ $e8d77afca8f9e92e$var$micromatch.isMatch = (str, patterns, options)=>$a2620f730cd7a77c$exports(patterns, options)(str); +/** + * Backwards compatibility + */ $e8d77afca8f9e92e$var$micromatch.any = $e8d77afca8f9e92e$var$micromatch.isMatch; +/** + * Returns a list of strings that _**do not match any**_ of the given `patterns`. + * + * ```js + * const mm = require('micromatch'); + * // mm.not(list, patterns[, options]); + * + * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a')); + * //=> ['b.b', 'c.c'] + * ``` + * @param {Array} `list` Array of strings to match. + * @param {String|Array} `patterns` One or more glob pattern to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Array} Returns an array of strings that **do not match** the given patterns. + * @api public + */ $e8d77afca8f9e92e$var$micromatch.not = (list, patterns, options = {})=>{ + patterns = [].concat(patterns).map(String); + let result = new Set(); + let items = []; + let onResult = (state)=>{ + if (options.onResult) options.onResult(state); + items.push(state.output); + }; + let matches = $e8d77afca8f9e92e$var$micromatch(list, patterns, { + ...options, + onResult: onResult + }); + for (let item of items)if (!matches.includes(item)) result.add(item); + return [ + ...result + ]; +}; +/** + * Returns true if the given `string` contains the given pattern. Similar + * to [.isMatch](#isMatch) but the pattern can match any part of the string. + * + * ```js + * var mm = require('micromatch'); + * // mm.contains(string, pattern[, options]); + * + * console.log(mm.contains('aa/bb/cc', '*b')); + * //=> true + * console.log(mm.contains('aa/bb/cc', '*d')); + * //=> false + * ``` + * @param {String} `str` The string to match. + * @param {String|Array} `patterns` Glob pattern to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any of the patterns matches any part of `str`. + * @api public + */ $e8d77afca8f9e92e$var$micromatch.contains = (str, pattern, options)=>{ + if (typeof str !== "string") throw new TypeError(`Expected a string: "${$luxNM$util.inspect(str)}"`); + if (Array.isArray(pattern)) return pattern.some((p)=>$e8d77afca8f9e92e$var$micromatch.contains(str, p, options)); + if (typeof pattern === "string") { + if ($e8d77afca8f9e92e$var$isEmptyString(str) || $e8d77afca8f9e92e$var$isEmptyString(pattern)) return false; + if (str.includes(pattern) || str.startsWith("./") && str.slice(2).includes(pattern)) return true; + } + return $e8d77afca8f9e92e$var$micromatch.isMatch(str, pattern, { + ...options, + contains: true + }); +}; +/** + * Filter the keys of the given object with the given `glob` pattern + * and `options`. Does not attempt to match nested keys. If you need this feature, + * use [glob-object][] instead. + * + * ```js + * const mm = require('micromatch'); + * // mm.matchKeys(object, patterns[, options]); + * + * const obj = { aa: 'a', ab: 'b', ac: 'c' }; + * console.log(mm.matchKeys(obj, '*b')); + * //=> { ab: 'b' } + * ``` + * @param {Object} `object` The object with keys to filter. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Object} Returns an object with only keys that match the given patterns. + * @api public + */ $e8d77afca8f9e92e$var$micromatch.matchKeys = (obj, patterns, options)=>{ + if (!$3GrsY.isObject(obj)) throw new TypeError("Expected the first argument to be an object"); + let keys = $e8d77afca8f9e92e$var$micromatch(Object.keys(obj), patterns, options); + let res = {}; + for (let key of keys)res[key] = obj[key]; + return res; +}; +/** + * Returns true if some of the strings in the given `list` match any of the given glob `patterns`. + * + * ```js + * const mm = require('micromatch'); + * // mm.some(list, patterns[, options]); + * + * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); + * // true + * console.log(mm.some(['foo.js'], ['*.js', '!foo.js'])); + * // false + * ``` + * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list` + * @api public + */ $e8d77afca8f9e92e$var$micromatch.some = (list, patterns, options)=>{ + let items = [].concat(list); + for (let pattern of [].concat(patterns)){ + let isMatch = $a2620f730cd7a77c$exports(String(pattern), options); + if (items.some((item)=>isMatch(item))) return true; + } + return false; +}; +/** + * Returns true if every string in the given `list` matches + * any of the given glob `patterns`. + * + * ```js + * const mm = require('micromatch'); + * // mm.every(list, patterns[, options]); + * + * console.log(mm.every('foo.js', ['foo.js'])); + * // true + * console.log(mm.every(['foo.js', 'bar.js'], ['*.js'])); + * // true + * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); + * // false + * console.log(mm.every(['foo.js'], ['*.js', '!foo.js'])); + * // false + * ``` + * @param {String|Array} `list` The string or array of strings to test. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list` + * @api public + */ $e8d77afca8f9e92e$var$micromatch.every = (list, patterns, options)=>{ + let items = [].concat(list); + for (let pattern of [].concat(patterns)){ + let isMatch = $a2620f730cd7a77c$exports(String(pattern), options); + if (!items.every((item)=>isMatch(item))) return false; + } + return true; +}; +/** + * Returns true if **all** of the given `patterns` match + * the specified string. + * + * ```js + * const mm = require('micromatch'); + * // mm.all(string, patterns[, options]); + * + * console.log(mm.all('foo.js', ['foo.js'])); + * // true + * + * console.log(mm.all('foo.js', ['*.js', '!foo.js'])); + * // false + * + * console.log(mm.all('foo.js', ['*.js', 'foo.js'])); + * // true + * + * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js'])); + * // true + * ``` + * @param {String|Array} `str` The string to test. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ $e8d77afca8f9e92e$var$micromatch.all = (str, patterns, options)=>{ + if (typeof str !== "string") throw new TypeError(`Expected a string: "${$luxNM$util.inspect(str)}"`); + return [].concat(patterns).every((p)=>$a2620f730cd7a77c$exports(p, options)(str)); +}; +/** + * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match. + * + * ```js + * const mm = require('micromatch'); + * // mm.capture(pattern, string[, options]); + * + * console.log(mm.capture('test/*.js', 'test/foo.js')); + * //=> ['foo'] + * console.log(mm.capture('test/*.js', 'foo/bar.css')); + * //=> null + * ``` + * @param {String} `glob` Glob pattern to use for matching. + * @param {String} `input` String to match + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`. + * @api public + */ $e8d77afca8f9e92e$var$micromatch.capture = (glob, input, options)=>{ + let posix = $3GrsY.isWindows(options); + let regex = $a2620f730cd7a77c$exports.makeRe(String(glob), { + ...options, + capture: true + }); + let match = regex.exec(posix ? $3GrsY.toPosixSlashes(input) : input); + if (match) return match.slice(1).map((v)=>v === void 0 ? "" : v); +}; +/** + * Create a regular expression from the given glob `pattern`. + * + * ```js + * const mm = require('micromatch'); + * // mm.makeRe(pattern[, options]); + * + * console.log(mm.makeRe('*.js')); + * //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/ + * ``` + * @param {String} `pattern` A glob pattern to convert to regex. + * @param {Object} `options` + * @return {RegExp} Returns a regex created from the given pattern. + * @api public + */ $e8d77afca8f9e92e$var$micromatch.makeRe = (...args)=>$a2620f730cd7a77c$exports.makeRe(...args); +/** + * Scan a glob pattern to separate the pattern into segments. Used + * by the [split](#split) method. + * + * ```js + * const mm = require('micromatch'); + * const state = mm.scan(pattern[, options]); + * ``` + * @param {String} `pattern` + * @param {Object} `options` + * @return {Object} Returns an object with + * @api public + */ $e8d77afca8f9e92e$var$micromatch.scan = (...args)=>$a2620f730cd7a77c$exports.scan(...args); +/** + * Parse a glob pattern to create the source string for a regular + * expression. + * + * ```js + * const mm = require('micromatch'); + * const state = mm(pattern[, options]); + * ``` + * @param {String} `glob` + * @param {Object} `options` + * @return {Object} Returns an object with useful properties and output to be used as regex source string. + * @api public + */ $e8d77afca8f9e92e$var$micromatch.parse = (patterns, options)=>{ + let res = []; + for (let pattern of [].concat(patterns || []))for (let str of $e726a66c0308ce09$exports(String(pattern), options))res.push($a2620f730cd7a77c$exports.parse(str, options)); + return res; +}; +/** + * Process the given brace `pattern`. + * + * ```js + * const { braces } = require('micromatch'); + * console.log(braces('foo/{a,b,c}/bar')); + * //=> [ 'foo/(a|b|c)/bar' ] + * + * console.log(braces('foo/{a,b,c}/bar', { expand: true })); + * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ] + * ``` + * @param {String} `pattern` String with brace pattern to process. + * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options. + * @return {Array} + * @api public + */ $e8d77afca8f9e92e$var$micromatch.braces = (pattern, options)=>{ + if (typeof pattern !== "string") throw new TypeError("Expected a string"); + if (options && options.nobrace === true || !/\{.*\}/.test(pattern)) return [ + pattern + ]; + return $e726a66c0308ce09$exports(pattern, options); +}; +/** + * Expand braces + */ $e8d77afca8f9e92e$var$micromatch.braceExpand = (pattern, options)=>{ + if (typeof pattern !== "string") throw new TypeError("Expected a string"); + return $e8d77afca8f9e92e$var$micromatch.braces(pattern, { + ...options, + expand: true + }); +}; +/** + * Expose micromatch + */ $e8d77afca8f9e92e$exports = $e8d77afca8f9e92e$var$micromatch; + + + + +function $1fffe78c51b168d8$var$match(context, uri, req) { + // single path + if ($1fffe78c51b168d8$var$isStringPath(context)) return $1fffe78c51b168d8$var$matchSingleStringPath(context, uri); + // single glob path + if ($1fffe78c51b168d8$var$isGlobPath(context)) return $1fffe78c51b168d8$var$matchSingleGlobPath(context, uri); + // multi path + if (Array.isArray(context)) { + if (context.every($1fffe78c51b168d8$var$isStringPath)) return $1fffe78c51b168d8$var$matchMultiPath(context, uri); + if (context.every($1fffe78c51b168d8$var$isGlobPath)) return $1fffe78c51b168d8$var$matchMultiGlobPath(context, uri); + throw new Error($321d5baa2709d12a$exports.ERRORS.ERR_CONTEXT_MATCHER_INVALID_ARRAY); + } + // custom matching + if (typeof context === "function") { + const pathname = $1fffe78c51b168d8$var$getUrlPathName(uri); + return context(pathname, req); + } + throw new Error($321d5baa2709d12a$exports.ERRORS.ERR_CONTEXT_MATCHER_GENERIC); +} +$1fffe78c51b168d8$exports.match = $1fffe78c51b168d8$var$match; +/** + * @param {String} context '/api' + * @param {String} uri 'http://example.org/api/b/c/d.html' + * @return {Boolean} + */ function $1fffe78c51b168d8$var$matchSingleStringPath(context, uri) { + const pathname = $1fffe78c51b168d8$var$getUrlPathName(uri); + return pathname.indexOf(context) === 0; +} +function $1fffe78c51b168d8$var$matchSingleGlobPath(pattern, uri) { + const pathname = $1fffe78c51b168d8$var$getUrlPathName(uri); + const matches = $e8d77afca8f9e92e$exports([ + pathname + ], pattern); + return matches && matches.length > 0; +} +function $1fffe78c51b168d8$var$matchMultiGlobPath(patternList, uri) { + return $1fffe78c51b168d8$var$matchSingleGlobPath(patternList, uri); +} +/** + * @param {String} contextList ['/api', '/ajax'] + * @param {String} uri 'http://example.org/api/b/c/d.html' + * @return {Boolean} + */ function $1fffe78c51b168d8$var$matchMultiPath(contextList, uri) { + let isMultiPath = false; + for (const context of contextList)if ($1fffe78c51b168d8$var$matchSingleStringPath(context, uri)) { + isMultiPath = true; + break; + } + return isMultiPath; +} +/** + * Parses URI and returns RFC 3986 path + * + * @param {String} uri from req.url + * @return {String} RFC 3986 path + */ function $1fffe78c51b168d8$var$getUrlPathName(uri) { + return uri && $luxNM$url.parse(uri).pathname; +} +function $1fffe78c51b168d8$var$isStringPath(context) { + return typeof context === "string" && !$5e9ad5cc9f0ed965$exports(context); +} +function $1fffe78c51b168d8$var$isGlobPath(context) { + return $5e9ad5cc9f0ed965$exports(context); +} + + +var $c13ebe29b178662e$exports = {}; +"use strict"; +Object.defineProperty($c13ebe29b178662e$exports, "__esModule", { + value: true +}); +$c13ebe29b178662e$exports.getHandlers = $c13ebe29b178662e$exports.init = void 0; + +const $c13ebe29b178662e$var$logger = $c421636cc4c019fd$exports.getInstance(); +function $c13ebe29b178662e$var$init(proxy, option) { + const handlers = $c13ebe29b178662e$var$getHandlers(option); + for (const eventName of Object.keys(handlers))proxy.on(eventName, handlers[eventName]); + $c13ebe29b178662e$var$logger.debug("[HPM] Subscribed to http-proxy events:", Object.keys(handlers)); +} +$c13ebe29b178662e$exports.init = $c13ebe29b178662e$var$init; +function $c13ebe29b178662e$var$getHandlers(options) { + // https://github.com/nodejitsu/node-http-proxy#listening-for-proxy-events + const proxyEventsMap = { + error: "onError", + proxyReq: "onProxyReq", + proxyReqWs: "onProxyReqWs", + proxyRes: "onProxyRes", + open: "onOpen", + close: "onClose" + }; + const handlers = {}; + for (const [eventName, onEventName] of Object.entries(proxyEventsMap)){ + // all handlers for the http-proxy events are prefixed with 'on'. + // loop through options and try to find these handlers + // and add them to the handlers object for subscription in init(). + const fnHandler = options ? options[onEventName] : null; + if (typeof fnHandler === "function") handlers[eventName] = fnHandler; + } + // add default error handler in absence of error handler + if (typeof handlers.error !== "function") handlers.error = $c13ebe29b178662e$var$defaultErrorHandler; + // add default close handler in absence of close handler + if (typeof handlers.close !== "function") handlers.close = $c13ebe29b178662e$var$logClose; + return handlers; +} +$c13ebe29b178662e$exports.getHandlers = $c13ebe29b178662e$var$getHandlers; +function $c13ebe29b178662e$var$defaultErrorHandler(err, req, res) { + // Re-throw error. Not recoverable since req & res are empty. + if (!req && !res) throw err; // "Error: Must provide a proper URL as target" + const host = req.headers && req.headers.host; + const code = err.code; + if (res.writeHead && !res.headersSent) { + if (/HPE_INVALID/.test(code)) res.writeHead(502); + else switch(code){ + case "ECONNRESET": + case "ENOTFOUND": + case "ECONNREFUSED": + case "ETIMEDOUT": + res.writeHead(504); + break; + default: + res.writeHead(500); + } + } + res.end(`Error occured while trying to proxy: ${host}${req.url}`); +} +function $c13ebe29b178662e$var$logClose(req, socket, head) { + // view disconnected websocket connections + $c13ebe29b178662e$var$logger.info("[HPM] Client disconnected"); +} + + + +var $6e209c09813909ce$exports = {}; +"use strict"; +Object.defineProperty($6e209c09813909ce$exports, "__esModule", { + value: true +}); +$6e209c09813909ce$exports.createPathRewriter = void 0; + + + +const $6e209c09813909ce$var$logger = $c421636cc4c019fd$exports.getInstance(); +/** + * Create rewrite function, to cache parsed rewrite rules. + * + * @param {Object} rewriteConfig + * @return {Function} Function to rewrite paths; This function should accept `path` (request.url) as parameter + */ function $6e209c09813909ce$var$createPathRewriter(rewriteConfig) { + let rulesCache; + if (!$6e209c09813909ce$var$isValidRewriteConfig(rewriteConfig)) return; + if (typeof rewriteConfig === "function") { + const customRewriteFn = rewriteConfig; + return customRewriteFn; + } else { + rulesCache = $6e209c09813909ce$var$parsePathRewriteRules(rewriteConfig); + return rewritePath; + } + function rewritePath(path) { + let result = path; + for (const rule of rulesCache)if (rule.regex.test(path)) { + result = result.replace(rule.regex, rule.value); + $6e209c09813909ce$var$logger.debug('[HPM] Rewriting path from "%s" to "%s"', path, result); + break; + } + return result; + } +} +$6e209c09813909ce$exports.createPathRewriter = $6e209c09813909ce$var$createPathRewriter; +function $6e209c09813909ce$var$isValidRewriteConfig(rewriteConfig) { + if (typeof rewriteConfig === "function") return true; + else if ($5f22b86697cc6bbd$exports(rewriteConfig)) return Object.keys(rewriteConfig).length !== 0; + else if (rewriteConfig === undefined || rewriteConfig === null) return false; + else throw new Error($321d5baa2709d12a$exports.ERRORS.ERR_PATH_REWRITER_CONFIG); +} +function $6e209c09813909ce$var$parsePathRewriteRules(rewriteConfig) { + const rules = []; + if ($5f22b86697cc6bbd$exports(rewriteConfig)) for (const [key] of Object.entries(rewriteConfig)){ + rules.push({ + regex: new RegExp(key), + value: rewriteConfig[key] + }); + $6e209c09813909ce$var$logger.info('[HPM] Proxy rewrite rule created: "%s" ~> "%s"', key, rewriteConfig[key]); + } + return rules; +} + + +var $fc6340bfade02bdd$exports = {}; +"use strict"; +Object.defineProperty($fc6340bfade02bdd$exports, "__esModule", { + value: true +}); +$fc6340bfade02bdd$exports.getTarget = void 0; + + +const $fc6340bfade02bdd$var$logger = $c421636cc4c019fd$exports.getInstance(); +async function $fc6340bfade02bdd$var$getTarget(req, config) { + let newTarget; + const router = config.router; + if ($5f22b86697cc6bbd$exports(router)) newTarget = $fc6340bfade02bdd$var$getTargetFromProxyTable(req, router); + else if (typeof router === "function") newTarget = await router(req); + return newTarget; +} +$fc6340bfade02bdd$exports.getTarget = $fc6340bfade02bdd$var$getTarget; +function $fc6340bfade02bdd$var$getTargetFromProxyTable(req, table) { + let result; + const host = req.headers.host; + const path = req.url; + const hostAndPath = host + path; + for (const [key] of Object.entries(table)){ + if ($fc6340bfade02bdd$var$containsPath(key)) { + if (hostAndPath.indexOf(key) > -1) { + // match 'localhost:3000/api' + result = table[key]; + $fc6340bfade02bdd$var$logger.debug('[HPM] Router table match: "%s"', key); + break; + } + } else if (key === host) { + // match 'localhost:3000' + result = table[key]; + $fc6340bfade02bdd$var$logger.debug('[HPM] Router table match: "%s"', host); + break; + } + } + return result; +} +function $fc6340bfade02bdd$var$containsPath(v) { + return v.indexOf("/") > -1; +} + + +class $2a41ee9333220238$var$HttpProxyMiddleware { + constructor(context, opts){ + this.logger = $c421636cc4c019fd$exports.getInstance(); + this.wsInternalSubscribed = false; + this.serverOnCloseSubscribed = false; + // https://github.com/Microsoft/TypeScript/wiki/'this'-in-TypeScript#red-flags-for-this + this.middleware = async (req, res, next)=>{ + var _a, _b; + if (this.shouldProxy(this.config.context, req)) try { + const activeProxyOptions = await this.prepareProxyRequest(req); + this.proxy.web(req, res, activeProxyOptions); + } catch (err) { + next(err); + } + else next(); + /** + * Get the server object to subscribe to server events; + * 'upgrade' for websocket and 'close' for graceful shutdown + * + * NOTE: + * req.socket: node >= 13 + * req.connection: node < 13 (Remove this when node 12/13 support is dropped) + */ const server = (_b = (_a = req.socket) !== null && _a !== void 0 ? _a : req.connection) === null || _b === void 0 ? void 0 : _b.server; + if (server && !this.serverOnCloseSubscribed) { + server.on("close", ()=>{ + this.logger.info("[HPM] server close signal received: closing proxy server"); + this.proxy.close(); + }); + this.serverOnCloseSubscribed = true; + } + if (this.proxyOptions.ws === true) // use initial request to access the server object to subscribe to http upgrade event + this.catchUpgradeRequest(server); + }; + this.catchUpgradeRequest = (server)=>{ + if (!this.wsInternalSubscribed) { + server.on("upgrade", this.handleUpgrade); + // prevent duplicate upgrade handling; + // in case external upgrade is also configured + this.wsInternalSubscribed = true; + } + }; + this.handleUpgrade = async (req, socket, head)=>{ + if (this.shouldProxy(this.config.context, req)) { + const activeProxyOptions = await this.prepareProxyRequest(req); + this.proxy.ws(req, socket, head, activeProxyOptions); + this.logger.info("[HPM] Upgrading to WebSocket"); + } + }; + /** + * Determine whether request should be proxied. + * + * @private + * @param {String} context [description] + * @param {Object} req [description] + * @return {Boolean} + */ this.shouldProxy = (context, req)=>{ + const path = req.originalUrl || req.url; + return $1fffe78c51b168d8$exports.match(context, path, req); + }; + /** + * Apply option.router and option.pathRewrite + * Order matters: + * Router uses original path for routing; + * NOT the modified path, after it has been rewritten by pathRewrite + * @param {Object} req + * @return {Object} proxy options + */ this.prepareProxyRequest = async (req)=>{ + // https://github.com/chimurai/http-proxy-middleware/issues/17 + // https://github.com/chimurai/http-proxy-middleware/issues/94 + req.url = req.originalUrl || req.url; + // store uri before it gets rewritten for logging + const originalPath = req.url; + const newProxyOptions = Object.assign({}, this.proxyOptions); + // Apply in order: + // 1. option.router + // 2. option.pathRewrite + await this.applyRouter(req, newProxyOptions); + await this.applyPathRewrite(req, this.pathRewriter); + // debug logging for both http(s) and websockets + if (this.proxyOptions.logLevel === "debug") { + const arrow = $c421636cc4c019fd$exports.getArrow(originalPath, req.url, this.proxyOptions.target, newProxyOptions.target); + this.logger.debug("[HPM] %s %s %s %s", req.method, originalPath, arrow, newProxyOptions.target); + } + return newProxyOptions; + }; + // Modify option.target when router present. + this.applyRouter = async (req, options)=>{ + let newTarget; + if (options.router) { + newTarget = await $fc6340bfade02bdd$exports.getTarget(req, options); + if (newTarget) { + this.logger.debug('[HPM] Router new target: %s -> "%s"', options.target, newTarget); + options.target = newTarget; + } + } + }; + // rewrite path + this.applyPathRewrite = async (req, pathRewriter)=>{ + if (pathRewriter) { + const path = await pathRewriter(req.url, req); + if (typeof path === "string") req.url = path; + else this.logger.info("[HPM] pathRewrite: No rewritten path found. (%s)", req.url); + } + }; + this.logError = (err, req, res, target)=>{ + var _a; + const hostname = ((_a = req.headers) === null || _a === void 0 ? void 0 : _a.host) || req.hostname || req.host; // (websocket) || (node0.10 || node 4/5) + const requestHref = `${hostname}${req.url}`; + const targetHref = `${target === null || target === void 0 ? void 0 : target.href}`; // target is undefined when websocket errors + const errorMessage = "[HPM] Error occurred while proxying request %s to %s [%s] (%s)"; + const errReference = "https://nodejs.org/api/errors.html#errors_common_system_errors"; // link to Node Common Systems Errors page + this.logger.error(errorMessage, requestHref, targetHref, err.code || err, errReference); + }; + this.config = $9333aef7c35f2a3b$exports.createConfig(context, opts); + this.proxyOptions = this.config.options; + // create proxy + this.proxy = $1299558de05d8605$exports.createProxyServer({}); + this.logger.info(`[HPM] Proxy created: ${this.config.context} -> ${this.proxyOptions.target}`); + this.pathRewriter = $6e209c09813909ce$exports.createPathRewriter(this.proxyOptions.pathRewrite); // returns undefined when "pathRewrite" is not provided + // attach handler to http-proxy events + $c13ebe29b178662e$exports.init(this.proxy, this.proxyOptions); + // log errors for debug purpose + this.proxy.on("error", this.logError); + // https://github.com/chimurai/http-proxy-middleware/issues/19 + // expose function to upgrade externally + this.middleware.upgrade = (req, socket, head)=>{ + if (!this.wsInternalSubscribed) this.handleUpgrade(req, socket, head); + }; + } +} +$2a41ee9333220238$exports.HttpProxyMiddleware = $2a41ee9333220238$var$HttpProxyMiddleware; + + +function $cae34a092c40a2c2$var$createProxyMiddleware(context, options) { + const { middleware: middleware } = new $2a41ee9333220238$exports.HttpProxyMiddleware(context, options); + return middleware; +} +$cae34a092c40a2c2$exports.createProxyMiddleware = $cae34a092c40a2c2$var$createProxyMiddleware; + +$cae34a092c40a2c2$var$__exportStar((parcelRequire("3QPfS")), $cae34a092c40a2c2$exports); + + + +var $2861cc26f6a252d6$exports = {}; +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file at + * https://github.com/facebookincubator/create-react-app/blob/master/LICENSE + * + * Modified by Yuxi Evan You + */ + + +var $db1ae70f02875132$exports = {}; + +let $db1ae70f02875132$var$isColorSupported = !process.argv.includes("--no-color") && (process.argv.includes("--color") || process.platform === "win32" || $luxNM$tty.isatty(1) && process.env.TERM !== "dumb" || false); +let $db1ae70f02875132$var$formatter = (open, close, replace = open)=>(input)=>{ + let string = "" + input; + let index = string.indexOf(close, open.length); + return ~index ? open + $db1ae70f02875132$var$replaceClose(string, close, replace, index) + close : open + string + close; + }; +let $db1ae70f02875132$var$replaceClose = (string, close, replace, index)=>{ + let start = string.substring(0, index) + replace; + let end = string.substring(index + close.length); + let nextIndex = end.indexOf(close); + return ~nextIndex ? start + $db1ae70f02875132$var$replaceClose(end, close, replace, nextIndex) : start + end; +}; +let $db1ae70f02875132$var$createColors = (enabled = $db1ae70f02875132$var$isColorSupported)=>({ + isColorSupported: enabled, + reset: enabled ? (s)=>`\x1b[0m${s}\x1b[0m` : String, + bold: enabled ? $db1ae70f02875132$var$formatter("\x1b[1m", "\x1b[22m", "\x1b[22m\x1b[1m") : String, + dim: enabled ? $db1ae70f02875132$var$formatter("\x1b[2m", "\x1b[22m", "\x1b[22m\x1b[2m") : String, + italic: enabled ? $db1ae70f02875132$var$formatter("\x1b[3m", "\x1b[23m") : String, + underline: enabled ? $db1ae70f02875132$var$formatter("\x1b[4m", "\x1b[24m") : String, + inverse: enabled ? $db1ae70f02875132$var$formatter("\x1b[7m", "\x1b[27m") : String, + hidden: enabled ? $db1ae70f02875132$var$formatter("\x1b[8m", "\x1b[28m") : String, + strikethrough: enabled ? $db1ae70f02875132$var$formatter("\x1b[9m", "\x1b[29m") : String, + black: enabled ? $db1ae70f02875132$var$formatter("\x1b[30m", "\x1b[39m") : String, + red: enabled ? $db1ae70f02875132$var$formatter("\x1b[31m", "\x1b[39m") : String, + green: enabled ? $db1ae70f02875132$var$formatter("\x1b[32m", "\x1b[39m") : String, + yellow: enabled ? $db1ae70f02875132$var$formatter("\x1b[33m", "\x1b[39m") : String, + blue: enabled ? $db1ae70f02875132$var$formatter("\x1b[34m", "\x1b[39m") : String, + magenta: enabled ? $db1ae70f02875132$var$formatter("\x1b[35m", "\x1b[39m") : String, + cyan: enabled ? $db1ae70f02875132$var$formatter("\x1b[36m", "\x1b[39m") : String, + white: enabled ? $db1ae70f02875132$var$formatter("\x1b[37m", "\x1b[39m") : String, + gray: enabled ? $db1ae70f02875132$var$formatter("\x1b[90m", "\x1b[39m") : String, + bgBlack: enabled ? $db1ae70f02875132$var$formatter("\x1b[40m", "\x1b[49m") : String, + bgRed: enabled ? $db1ae70f02875132$var$formatter("\x1b[41m", "\x1b[49m") : String, + bgGreen: enabled ? $db1ae70f02875132$var$formatter("\x1b[42m", "\x1b[49m") : String, + bgYellow: enabled ? $db1ae70f02875132$var$formatter("\x1b[43m", "\x1b[49m") : String, + bgBlue: enabled ? $db1ae70f02875132$var$formatter("\x1b[44m", "\x1b[49m") : String, + bgMagenta: enabled ? $db1ae70f02875132$var$formatter("\x1b[45m", "\x1b[49m") : String, + bgCyan: enabled ? $db1ae70f02875132$var$formatter("\x1b[46m", "\x1b[49m") : String, + bgWhite: enabled ? $db1ae70f02875132$var$formatter("\x1b[47m", "\x1b[49m") : String + }); +$db1ae70f02875132$exports = $db1ae70f02875132$var$createColors(); +$db1ae70f02875132$exports.createColors = $db1ae70f02875132$var$createColors; + + + +var $adc0445dd72612e1$exports = {}; + +var $9f0345bed3f92b7d$export$ee7a15c61bfdeb11; +var $9f0345bed3f92b7d$export$98e6a39c04603d36; +$9f0345bed3f92b7d$export$ee7a15c61bfdeb11 = function(xs) { + return xs.map(function(s) { + if (s && typeof s === "object") return s.op.replace(/(.)/g, "\\$1"); + else if (/["\s]/.test(s) && !/'/.test(s)) return "'" + s.replace(/(['\\])/g, "\\$1") + "'"; + else if (/["'\s]/.test(s)) return '"' + s.replace(/(["\\$`!])/g, "\\$1") + '"'; + else return String(s).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@\[\\\]^`{|}])/g, "$1\\$2"); + }).join(" "); +}; +// '<(' is process substitution operator and +// can be parsed the same as control operator +var $9f0345bed3f92b7d$var$CONTROL = "(?:" + [ + "\\|\\|", + "\\&\\&", + ";;", + "\\|\\&", + "\\<\\(", + ">>", + ">\\&", + "[&;()|<>]" +].join("|") + ")"; +var $9f0345bed3f92b7d$var$META = "|&;()<> \\t"; +var $9f0345bed3f92b7d$var$BAREWORD = "(\\\\['\"" + $9f0345bed3f92b7d$var$META + "]|[^\\s'\"" + $9f0345bed3f92b7d$var$META + "])+"; +var $9f0345bed3f92b7d$var$SINGLE_QUOTE = '"((\\\\"|[^"])*?)"'; +var $9f0345bed3f92b7d$var$DOUBLE_QUOTE = "'((\\\\'|[^'])*?)'"; +var $9f0345bed3f92b7d$var$TOKEN = ""; +for(var $9f0345bed3f92b7d$var$i = 0; $9f0345bed3f92b7d$var$i < 4; $9f0345bed3f92b7d$var$i++)$9f0345bed3f92b7d$var$TOKEN += (Math.pow(16, 8) * Math.random()).toString(16); +$9f0345bed3f92b7d$export$98e6a39c04603d36 = function(s, env, opts) { + var mapped = $9f0345bed3f92b7d$var$parse(s, env, opts); + if (typeof env !== "function") return mapped; + return mapped.reduce(function(acc, s) { + if (typeof s === "object") return acc.concat(s); + var xs = s.split(RegExp("(" + $9f0345bed3f92b7d$var$TOKEN + ".*?" + $9f0345bed3f92b7d$var$TOKEN + ")", "g")); + if (xs.length === 1) return acc.concat(xs[0]); + return acc.concat(xs.filter(Boolean).map(function(x) { + if (RegExp("^" + $9f0345bed3f92b7d$var$TOKEN).test(x)) return JSON.parse(x.split($9f0345bed3f92b7d$var$TOKEN)[1]); + else return x; + })); + }, []); +}; +function $9f0345bed3f92b7d$var$parse(s, env, opts) { + var chunker = new RegExp([ + "(" + $9f0345bed3f92b7d$var$CONTROL + ")", + "(" + $9f0345bed3f92b7d$var$BAREWORD + "|" + $9f0345bed3f92b7d$var$SINGLE_QUOTE + "|" + $9f0345bed3f92b7d$var$DOUBLE_QUOTE + ")*" + ].join("|"), "g"); + var match = s.match(chunker).filter(Boolean); + var commented = false; + if (!match) return []; + if (!env) env = {}; + if (!opts) opts = {}; + return match.map(function(s, j) { + if (commented) return; + if (RegExp("^" + $9f0345bed3f92b7d$var$CONTROL + "$").test(s)) return { + op: s + }; + // Hand-written scanner/parser for Bash quoting rules: + // + // 1. inside single quotes, all characters are printed literally. + // 2. inside double quotes, all characters are printed literally + // except variables prefixed by '$' and backslashes followed by + // either a double quote or another backslash. + // 3. outside of any quotes, backslashes are treated as escape + // characters and not printed (unless they are themselves escaped) + // 4. quote context can switch mid-token if there is no whitespace + // between the two quote contexts (e.g. all'one'"token" parses as + // "allonetoken") + var SQ = "'"; + var DQ = '"'; + var DS = "$"; + var BS = opts.escape || "\\"; + var quote = false; + var esc = false; + var out = ""; + var isGlob = false; + for(var i = 0, len = s.length; i < len; i++){ + var c = s.charAt(i); + isGlob = isGlob || !quote && (c === "*" || c === "?"); + if (esc) { + out += c; + esc = false; + } else if (quote) { + if (c === quote) quote = false; + else if (quote == SQ) out += c; + else { + if (c === BS) { + i += 1; + c = s.charAt(i); + if (c === DQ || c === BS || c === DS) out += c; + else out += BS + c; + } else if (c === DS) out += parseEnvVar(); + else out += c; + } + } else if (c === DQ || c === SQ) quote = c; + else if (RegExp("^" + $9f0345bed3f92b7d$var$CONTROL + "$").test(c)) return { + op: s + }; + else if (RegExp("^#$").test(c)) { + commented = true; + if (out.length) return [ + out, + { + comment: s.slice(i + 1) + match.slice(j + 1).join(" ") + } + ]; + return [ + { + comment: s.slice(i + 1) + match.slice(j + 1).join(" ") + } + ]; + } else if (c === BS) esc = true; + else if (c === DS) out += parseEnvVar(); + else out += c; + } + if (isGlob) return { + op: "glob", + pattern: out + }; + return out; + function parseEnvVar() { + i += 1; + var varend, varname; + //debugger + if (s.charAt(i) === "{") { + i += 1; + if (s.charAt(i) === "}") throw new Error("Bad substitution: " + s.substr(i - 2, 3)); + varend = s.indexOf("}", i); + if (varend < 0) throw new Error("Bad substitution: " + s.substr(i)); + varname = s.substr(i, varend - i); + i = varend; + } else if (/[*@#?$!_\-]/.test(s.charAt(i))) { + varname = s.charAt(i); + i += 1; + } else { + varend = s.substr(i).match(/[^\w\d_]/); + if (!varend) { + varname = s.substr(i); + i = s.length; + } else { + varname = s.substr(i, varend.index); + i += varend.index - 1; + } + } + return getVar(null, "", varname); + } + })// finalize parsed aruments + .reduce(function(prev, arg) { + if (arg === undefined) return prev; + return prev.concat(arg); + }, []); + function getVar(_, pre, key) { + var r = typeof env === "function" ? env(key) : env[key]; + if (r === undefined && key != "") r = ""; + else if (r === undefined) r = "$"; + if (typeof r === "object") return pre + $9f0345bed3f92b7d$var$TOKEN + JSON.stringify(r) + $9f0345bed3f92b7d$var$TOKEN; + else return pre + r; + } +} + + + +var $8ca35afc92dfc1bd$exports = {}; +$8ca35afc92dfc1bd$exports = { + "/Applications/Atom.app/Contents/MacOS/Atom": "atom", + "/Applications/Atom Beta.app/Contents/MacOS/Atom Beta": "/Applications/Atom Beta.app/Contents/MacOS/Atom Beta", + "/Applications/Brackets.app/Contents/MacOS/Brackets": "brackets", + "/Applications/Sublime Text.app/Contents/MacOS/Sublime Text": "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl", + "/Applications/Sublime Text.app/Contents/MacOS/sublime_text": "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl", + "/Applications/Sublime Text 2.app/Contents/MacOS/Sublime Text 2": "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl", + "/Applications/Sublime Text Dev.app/Contents/MacOS/Sublime Text": "/Applications/Sublime Text Dev.app/Contents/SharedSupport/bin/subl", + "/Applications/Visual Studio Code.app/Contents/MacOS/Electron": "code", + "/Applications/Visual Studio Code - Insiders.app/Contents/MacOS/Electron": "code-insiders", + "/Applications/AppCode.app/Contents/MacOS/appcode": "/Applications/AppCode.app/Contents/MacOS/appcode", + "/Applications/CLion.app/Contents/MacOS/clion": "/Applications/CLion.app/Contents/MacOS/clion", + "/Applications/IntelliJ IDEA.app/Contents/MacOS/idea": "/Applications/IntelliJ IDEA.app/Contents/MacOS/idea", + "/Applications/PhpStorm.app/Contents/MacOS/phpstorm": "/Applications/PhpStorm.app/Contents/MacOS/phpstorm", + "/Applications/PyCharm.app/Contents/MacOS/pycharm": "/Applications/PyCharm.app/Contents/MacOS/pycharm", + "/Applications/PyCharm CE.app/Contents/MacOS/pycharm": "/Applications/PyCharm CE.app/Contents/MacOS/pycharm", + "/Applications/RubyMine.app/Contents/MacOS/rubymine": "/Applications/RubyMine.app/Contents/MacOS/rubymine", + "/Applications/WebStorm.app/Contents/MacOS/webstorm": "/Applications/WebStorm.app/Contents/MacOS/webstorm" +}; + + +var $2012bea028d00dcd$exports = {}; +$2012bea028d00dcd$exports = { + atom: "atom", + Brackets: "brackets", + code: "code", + emacs: "emacs", + "idea.sh": "idea", + "phpstorm.sh": "phpstorm", + "pycharm.sh": "pycharm", + "rubymine.sh": "rubymine", + sublime_text: "subl", + vim: "vim", + "webstorm.sh": "webstorm" +}; + + +var $0ea160c3ccaea473$exports = {}; +$0ea160c3ccaea473$exports = [ + "Brackets.exe", + "Code.exe", + "atom.exe", + "sublime_text.exe", + "notepad++.exe", + "clion.exe", + "clion64.exe", + "idea.exe", + "idea64.exe", + "phpstorm.exe", + "phpstorm64.exe", + "pycharm.exe", + "pycharm64.exe", + "rubymine.exe", + "rubymine64.exe", + "webstorm.exe", + "webstorm64.exe" +]; + + +$adc0445dd72612e1$exports = function guessEditor(specifiedEditor) { + if (specifiedEditor) return $9f0345bed3f92b7d$export$98e6a39c04603d36(specifiedEditor); + // We can find out which editor is currently running by: + // `ps x` on macOS and Linux + // `Get-Process` on Windows + try { + if (process.platform === "darwin") { + const output = $luxNM$child_process.execSync("ps x").toString(); + const processNames = Object.keys($8ca35afc92dfc1bd$exports); + for(let i = 0; i < processNames.length; i++){ + const processName = processNames[i]; + if (output.indexOf(processName) !== -1) return [ + $8ca35afc92dfc1bd$exports[processName] + ]; + } + } else if (process.platform === "win32") { + const output = $luxNM$child_process.execSync('powershell -Command "Get-Process | Select-Object Path"', { + stdio: [ + "pipe", + "pipe", + "ignore" + ] + }).toString(); + const runningProcesses = output.split("\r\n"); + for(let i = 0; i < runningProcesses.length; i++){ + // `Get-Process` sometimes returns empty lines + if (!runningProcesses[i]) continue; + const fullProcessPath = runningProcesses[i].trim(); + const shortProcessName = $luxNM$path.basename(fullProcessPath); + if ($0ea160c3ccaea473$exports.indexOf(shortProcessName) !== -1) return [ + fullProcessPath + ]; + } + } else if (process.platform === "linux") { + // --no-heading No header line + // x List all processes owned by you + // -o comm Need only names column + const output = $luxNM$child_process.execSync("ps x --no-heading -o comm --sort=comm").toString(); + const processNames = Object.keys($2012bea028d00dcd$exports); + for(let i = 0; i < processNames.length; i++){ + const processName = processNames[i]; + if (output.indexOf(processName) !== -1) return [ + $2012bea028d00dcd$exports[processName] + ]; + } + } + } catch (error) { + // Ignore... + } + // Last resort, use old skool env vars + if (process.env.VISUAL) return [ + process.env.VISUAL + ]; + else if (process.env.EDITOR) return [ + process.env.EDITOR + ]; + return [ + null + ]; +}; + + +var $814c709aa08836b9$exports = {}; + +// normalize file/line numbers into command line args for specific editors +$814c709aa08836b9$exports = function getArgumentsForPosition(editor, fileName, lineNumber, columnNumber = 1) { + const editorBasename = $luxNM$path.basename(editor).replace(/\.(exe|cmd|bat)$/i, ""); + switch(editorBasename){ + case "atom": + case "Atom": + case "Atom Beta": + case "subl": + case "sublime": + case "sublime_text": + case "wstorm": + case "charm": + return [ + `${fileName}:${lineNumber}:${columnNumber}` + ]; + case "notepad++": + return [ + "-n" + lineNumber, + fileName + ]; + case "vim": + case "mvim": + return [ + `+call cursor(${lineNumber}, ${columnNumber})`, + fileName + ]; + case "joe": + return [ + "+" + `${lineNumber}`, + fileName + ]; + case "emacs": + case "emacsclient": + return [ + `+${lineNumber}:${columnNumber}`, + fileName + ]; + case "rmate": + case "mate": + case "mine": + return [ + "--line", + lineNumber, + fileName + ]; + case "code": + case "code-insiders": + case "Code": + return [ + "-r", + "-g", + `${fileName}:${lineNumber}:${columnNumber}` + ]; + case "appcode": + case "clion": + case "clion64": + case "idea": + case "idea64": + case "phpstorm": + case "phpstorm64": + case "pycharm": + case "pycharm64": + case "rubymine": + case "rubymine64": + case "webstorm": + case "webstorm64": + return [ + "--line", + lineNumber, + fileName + ]; + } + // For all others, drop the lineNumber until we have + // a mapping above, since providing the lineNumber incorrectly + // can result in errors or confusing behavior. + return [ + fileName + ]; +}; + + +function $2861cc26f6a252d6$var$wrapErrorCallback(cb) { + return (fileName, errorMessage)=>{ + console.log(); + console.log($db1ae70f02875132$exports.red("Could not open " + $luxNM$path.basename(fileName) + " in the editor.")); + if (errorMessage) { + if (errorMessage[errorMessage.length - 1] !== ".") errorMessage += "."; + console.log($db1ae70f02875132$exports.red("The editor process exited with an error: " + errorMessage)); + } + console.log(); + if (cb) cb(fileName, errorMessage); + }; +} +function $2861cc26f6a252d6$var$isTerminalEditor(editor) { + switch(editor){ + case "vim": + case "emacs": + case "nano": + return true; + } + return false; +} +const $2861cc26f6a252d6$var$positionRE = /:(\d+)(:(\d+))?$/; +function $2861cc26f6a252d6$var$parseFile(file) { + const fileName = file.replace($2861cc26f6a252d6$var$positionRE, ""); + const match = file.match($2861cc26f6a252d6$var$positionRE); + const lineNumber = match && match[1]; + const columnNumber = match && match[3]; + return { + fileName: fileName, + lineNumber: lineNumber, + columnNumber: columnNumber + }; +} +let $2861cc26f6a252d6$var$_childProcess = null; +function $2861cc26f6a252d6$var$launchEditor(file, specifiedEditor, onErrorCallback) { + const parsed = $2861cc26f6a252d6$var$parseFile(file); + let { fileName: fileName } = parsed; + const { lineNumber: lineNumber , columnNumber: columnNumber } = parsed; + if (!$luxNM$fs.existsSync(fileName)) return; + if (typeof specifiedEditor === "function") { + onErrorCallback = specifiedEditor; + specifiedEditor = undefined; + } + onErrorCallback = $2861cc26f6a252d6$var$wrapErrorCallback(onErrorCallback); + const [editor, ...args] = $adc0445dd72612e1$exports(specifiedEditor); + if (!editor) { + onErrorCallback(fileName, null); + return; + } + if (process.platform === "linux" && fileName.startsWith("/mnt/") && /Microsoft/i.test($luxNM$os.release())) // Assume WSL / "Bash on Ubuntu on Windows" is being used, and + // that the file exists on the Windows file system. + // `os.release()` is "4.4.0-43-Microsoft" in the current release + // build of WSL, see: https://github.com/Microsoft/BashOnWindows/issues/423#issuecomment-221627364 + // When a Windows editor is specified, interop functionality can + // handle the path translation, but only if a relative path is used. + fileName = $luxNM$path.relative("", fileName); + if (lineNumber) { + const extraArgs = $814c709aa08836b9$exports(editor, fileName, lineNumber, columnNumber); + args.push.apply(args, extraArgs); + } else args.push(fileName); + if ($2861cc26f6a252d6$var$_childProcess && $2861cc26f6a252d6$var$isTerminalEditor(editor)) // There's an existing editor process already and it's attached + // to the terminal, so go kill it. Otherwise two separate editor + // instances attach to the stdin/stdout which gets confusing. + $2861cc26f6a252d6$var$_childProcess.kill("SIGKILL"); + if (process.platform === "win32") // On Windows, launch the editor in a shell because spawn can only + // launch .exe files. + $2861cc26f6a252d6$var$_childProcess = $luxNM$child_process.spawn("cmd.exe", [ + "/C", + editor + ].concat(args), { + stdio: "inherit" + }); + else $2861cc26f6a252d6$var$_childProcess = $luxNM$child_process.spawn(editor, args, { + stdio: "inherit" + }); + $2861cc26f6a252d6$var$_childProcess.on("exit", function(errorCode) { + $2861cc26f6a252d6$var$_childProcess = null; + if (errorCode) onErrorCallback(fileName, "(code " + errorCode + ")"); + }); + $2861cc26f6a252d6$var$_childProcess.on("error", function(error) { + onErrorCallback(fileName, error.message); + }); +} +$2861cc26f6a252d6$exports = $2861cc26f6a252d6$var$launchEditor; + + +var $2f3c899ae4ebce9c$exports = {}; +/*! + * fresh + * Copyright(c) 2012 TJ Holowaychuk + * Copyright(c) 2016-2017 Douglas Christopher Wilson + * MIT Licensed + */ "use strict"; +/** + * RegExp to check for no-cache token in Cache-Control. + * @private + */ var $2f3c899ae4ebce9c$var$CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\s*?no-cache\s*?(?:,|$)/; +/** + * Module exports. + * @public + */ $2f3c899ae4ebce9c$exports = $2f3c899ae4ebce9c$var$fresh; +/** + * Check freshness of the response using request and response headers. + * + * @param {Object} reqHeaders + * @param {Object} resHeaders + * @return {Boolean} + * @public + */ function $2f3c899ae4ebce9c$var$fresh(reqHeaders, resHeaders) { + // fields + var modifiedSince = reqHeaders["if-modified-since"]; + var noneMatch = reqHeaders["if-none-match"]; + // unconditional request + if (!modifiedSince && !noneMatch) return false; + // Always return stale when Cache-Control: no-cache + // to support end-to-end reload requests + // https://tools.ietf.org/html/rfc2616#section-14.9.4 + var cacheControl = reqHeaders["cache-control"]; + if (cacheControl && $2f3c899ae4ebce9c$var$CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) return false; + // if-none-match + if (noneMatch && noneMatch !== "*") { + var etag = resHeaders["etag"]; + if (!etag) return false; + var etagStale = true; + var matches = $2f3c899ae4ebce9c$var$parseTokenList(noneMatch); + for(var i = 0; i < matches.length; i++){ + var match = matches[i]; + if (match === etag || match === "W/" + etag || "W/" + match === etag) { + etagStale = false; + break; + } + } + if (etagStale) return false; + } + // if-modified-since + if (modifiedSince) { + var lastModified = resHeaders["last-modified"]; + var modifiedStale = !lastModified || !($2f3c899ae4ebce9c$var$parseHttpDate(lastModified) <= $2f3c899ae4ebce9c$var$parseHttpDate(modifiedSince)); + if (modifiedStale) return false; + } + return true; +} +/** + * Parse an HTTP Date into a number. + * + * @param {string} date + * @private + */ function $2f3c899ae4ebce9c$var$parseHttpDate(date) { + var timestamp = date && Date.parse(date); + // istanbul ignore next: guard against date.js Date.parse patching + return typeof timestamp === "number" ? timestamp : NaN; +} +/** + * Parse a HTTP token list. + * + * @param {string} str + * @private + */ function $2f3c899ae4ebce9c$var$parseTokenList(str) { + var end = 0; + var list = []; + var start = 0; + // gather tokens + for(var i = 0, len = str.length; i < len; i++)switch(str.charCodeAt(i)){ + case 0x20: + /* */ if (start === end) start = end = i + 1; + break; + case 0x2c: + /* , */ list.push(str.substring(start, end)); + start = end = i + 1; + break; + default: + end = i + 1; + break; + } + // final token + list.push(str.substring(start, end)); + return list; +} + + + +var $29d62bc9a48463d1$var$$parcel$__dirname = $luxNM$path.resolve(__dirname, "../src"); +function $29d62bc9a48463d1$export$1c94a12dbc96ed70(res) { + res.setHeader("Access-Control-Allow-Origin", "*"); + res.setHeader("Access-Control-Allow-Methods", "GET, HEAD, PUT, PATCH, POST, DELETE"); + res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Content-Type"); + res.setHeader("Cache-Control", "max-age=0, must-revalidate"); +} +const $29d62bc9a48463d1$export$48c584f74c55688f = "/__parcel_source_root"; +const $29d62bc9a48463d1$var$EDITOR_ENDPOINT = "/__parcel_launch_editor"; +const $29d62bc9a48463d1$var$TEMPLATE_404 = (0, ($parcel$interopDefault($luxNM$fs))).readFileSync((0, ($parcel$interopDefault($luxNM$path))).join($29d62bc9a48463d1$var$$parcel$__dirname, "templates/404.html"), "utf8"); +const $29d62bc9a48463d1$var$TEMPLATE_500 = (0, ($parcel$interopDefault($luxNM$fs))).readFileSync((0, ($parcel$interopDefault($luxNM$path))).join($29d62bc9a48463d1$var$$parcel$__dirname, "templates/500.html"), "utf8"); +class $29d62bc9a48463d1$export$2e2bcd8739ae039 { + constructor(options){ + this.options = options; + try { + this.rootPath = new (0, $luxNM$url.URL)(options.publicUrl).pathname; + } catch (e) { + this.rootPath = options.publicUrl; + } + this.pending = true; + this.pendingRequests = []; + this.middleware = []; + this.bundleGraph = null; + this.requestBundle = null; + this.errors = null; + } + buildStart() { + this.pending = true; + } + buildSuccess(bundleGraph, requestBundle) { + this.bundleGraph = bundleGraph; + this.requestBundle = requestBundle; + this.errors = null; + this.pending = false; + if (this.pendingRequests.length > 0) { + let pendingRequests = this.pendingRequests; + this.pendingRequests = []; + for (let [req, res] of pendingRequests)this.respond(req, res); + } + } + async buildError(options, diagnostics) { + this.pending = false; + this.errors = await Promise.all(diagnostics.map(async (d)=>{ + let ansiDiagnostic = await (0, $luxNM$parcelutils.prettyDiagnostic)(d, options); + var _d_documentationURL; + return { + message: (0, $luxNM$parcelutils.ansiHtml)(ansiDiagnostic.message), + stack: ansiDiagnostic.stack ? (0, $luxNM$parcelutils.ansiHtml)(ansiDiagnostic.stack) : null, + frames: ansiDiagnostic.frames.map((f)=>({ + location: f.location, + code: (0, $luxNM$parcelutils.ansiHtml)(f.code) + })), + hints: ansiDiagnostic.hints.map((hint)=>(0, $luxNM$parcelutils.ansiHtml)(hint)), + documentation: (_d_documentationURL = d.documentationURL) !== null && _d_documentationURL !== void 0 ? _d_documentationURL : "" + }; + })); + } + respond(req, res) { + if (this.middleware.some((handler)=>handler(req, res))) return; + let { pathname: pathname , search: search } = (0, ($parcel$interopDefault($luxNM$url))).parse(req.originalUrl || req.url); + if (pathname == null) pathname = "/"; + if (pathname.startsWith($29d62bc9a48463d1$var$EDITOR_ENDPOINT) && search) { + let query = new (0, $luxNM$url.URLSearchParams)(search); + let file = query.get("file"); + if (file) { + // File location might start with /__parcel_source_root if it came from a source map. + if (file.startsWith($29d62bc9a48463d1$export$48c584f74c55688f)) file = file.slice($29d62bc9a48463d1$export$48c584f74c55688f.length + 1); + (0, (/*@__PURE__*/$parcel$interopDefault($2861cc26f6a252d6$exports)))(file); + } + res.end(); + } else if (this.errors) return this.send500(req, res); + else if ((0, ($parcel$interopDefault($luxNM$path))).extname(pathname) === "") // If the URL doesn't start with the public path, or the URL doesn't + // have a file extension, send the main HTML bundle. + return this.sendIndex(req, res); + else if (pathname.startsWith($29d62bc9a48463d1$export$48c584f74c55688f)) { + req.url = pathname.slice($29d62bc9a48463d1$export$48c584f74c55688f.length); + return this.serve(this.options.inputFS, this.options.projectRoot, req, res, ()=>this.send404(req, res)); + } else if (pathname.startsWith(this.rootPath)) { + // Otherwise, serve the file from the dist folder + req.url = this.rootPath === "/" ? pathname : pathname.slice(this.rootPath.length); + if (req.url[0] !== "/") req.url = "/" + req.url; + return this.serveBundle(req, res, ()=>this.sendIndex(req, res)); + } else return this.send404(req, res); + } + sendIndex(req, res) { + if (this.bundleGraph) { + // If the main asset is an HTML file, serve it + let htmlBundleFilePaths = this.bundleGraph.getBundles().filter((bundle)=>bundle.type === "html").map((bundle)=>{ + return `/${(0, $luxNM$parcelutils.relativePath)(this.options.distDir, bundle.filePath, false)}`; + }); + let indexFilePath = null; + if (htmlBundleFilePaths.length === 1) indexFilePath = htmlBundleFilePaths[0]; + else indexFilePath = htmlBundleFilePaths.filter((v)=>{ + let dir = (0, ($parcel$interopDefault($luxNM$path))).posix.dirname(v); + let withoutExtension = (0, ($parcel$interopDefault($luxNM$path))).posix.basename(v, (0, ($parcel$interopDefault($luxNM$path))).posix.extname(v)); + return withoutExtension === "index" && req.url.startsWith(dir); + }).sort((a, b)=>{ + return b.length - a.length; + })[0]; + if (indexFilePath) { + req.url = indexFilePath; + this.serveBundle(req, res, ()=>this.send404(req, res)); + } else this.send404(req, res); + } else this.send404(req, res); + } + async serveBundle(req, res, next) { + let bundleGraph = this.bundleGraph; + if (bundleGraph) { + let { pathname: pathname } = (0, ($parcel$interopDefault($luxNM$url))).parse(req.url); + if (!pathname) { + this.send500(req, res); + return; + } + let requestedPath = (0, ($parcel$interopDefault($luxNM$path))).normalize(pathname.slice(1)); + let bundle = bundleGraph.getBundles().find((b)=>(0, ($parcel$interopDefault($luxNM$path))).relative(this.options.distDir, b.filePath) === requestedPath); + if (!bundle) { + this.serveDist(req, res, next); + return; + } + (0, ($parcel$interopDefault($luxNM$assert)))(this.requestBundle != null); + try { + await this.requestBundle(bundle); + } catch (err) { + this.send500(req, res); + return; + } + this.serveDist(req, res, next); + } else this.send404(req, res); + } + serveDist(req, res, next) { + return this.serve(this.options.outputFS, this.options.distDir, req, res, next); + } + async serve(fs, root, req, res, next) { + if (req.method !== "GET" && req.method !== "HEAD") { + // method not allowed + res.statusCode = 405; + res.setHeader("Allow", "GET, HEAD"); + res.setHeader("Content-Length", "0"); + res.end(); + return; + } + try { + var filePath = (0, ($parcel$interopDefault($luxNM$url))).parse(req.url).pathname || ""; + filePath = decodeURIComponent(filePath); + } catch (err) { + return this.sendError(res, 400); + } + filePath = (0, ($parcel$interopDefault($luxNM$path))).normalize("." + (0, ($parcel$interopDefault($luxNM$path))).sep + filePath); // malicious path + if (filePath.includes((0, ($parcel$interopDefault($luxNM$path))).sep + ".." + (0, ($parcel$interopDefault($luxNM$path))).sep)) return this.sendError(res, 403); + // join / normalize from the root dir + if (!(0, ($parcel$interopDefault($luxNM$path))).isAbsolute(filePath)) filePath = (0, ($parcel$interopDefault($luxNM$path))).normalize((0, ($parcel$interopDefault($luxNM$path))).join(root, filePath)); + try { + var stat = await fs.stat(filePath); + } catch (err) { + if (err.code === "ENOENT") return next(req, res); + return this.sendError(res, 500); + } // Fall back to next handler if not a file + if (!stat || !stat.isFile()) return next(req, res); + if ((0, (/*@__PURE__*/$parcel$interopDefault($2f3c899ae4ebce9c$exports)))(req.headers, { + "last-modified": stat.mtime.toUTCString() + })) { + res.statusCode = 304; + res.end(); + return; + } + return (0, (/*@__PURE__*/$parcel$interopDefault($506752121fd186df$exports)))(req, res, { + public: root, + cleanUrls: false + }, { + lstat: (path)=>fs.stat(path), + realpath: (path)=>fs.realpath(path), + createReadStream: (path, options)=>fs.createReadStream(path, options), + readdir: (path)=>fs.readdir(path) + }); + } + sendError(res, statusCode) { + res.statusCode = statusCode; + res.end(); + } + send404(req, res) { + res.statusCode = 404; + res.end($29d62bc9a48463d1$var$TEMPLATE_404); + } + send500(req, res) { + res.setHeader("Content-Type", "text/html; charset=utf-8"); + res.writeHead(500); + if (this.errors) return res.end((0, (/*@__PURE__*/$parcel$interopDefault($9eeb60888fa4775f$exports))).render($29d62bc9a48463d1$var$TEMPLATE_500, { + errors: this.errors, + hmrOptions: this.options.hmrOptions + })); + } + logAccessIfVerbose(req) { + this.options.logger.verbose({ + message: `Request: ${req.headers.host}${req.originalUrl || req.url}` + }); + } + /** + * Load proxy table from package.json and apply them. + */ async applyProxyTable(app) { + // avoid skipping project root + const fileInRoot = (0, ($parcel$interopDefault($luxNM$path))).join(this.options.projectRoot, "_"); + const pkg = await (0, $luxNM$parcelutils.loadConfig)(this.options.inputFS, fileInRoot, [ + ".proxyrc.js", + ".proxyrc", + ".proxyrc.json" + ], this.options.projectRoot); + if (!pkg || !pkg.config || !pkg.files) return this; + const cfg = pkg.config; + const filename = (0, ($parcel$interopDefault($luxNM$path))).basename(pkg.files[0].filePath); + if (filename === ".proxyrc.js") { + if (typeof cfg !== "function") { + this.options.logger.warn({ + message: "Proxy configuration file '.proxyrc.js' should export a function. Skipping..." + }); + return this; + } + cfg(app); + } else if (filename === ".proxyrc" || filename === ".proxyrc.json") { + if (typeof cfg !== "object") { + this.options.logger.warn({ + message: "Proxy table in '.proxyrc' should be of object type. Skipping..." + }); + return this; + } + for (const [context, options] of Object.entries(cfg))// each key is interpreted as context, and value as middleware options + app.use((0, $cae34a092c40a2c2$exports.createProxyMiddleware)(context, options)); + } + return this; + } + async start() { + const app = (0, (/*@__PURE__*/$parcel$interopDefault($908eb12b17578eca$exports)))(); + app.use((req, res, next)=>{ + $29d62bc9a48463d1$export$1c94a12dbc96ed70(res); + next(); + }); + await this.applyProxyTable(app); + app.use((req, res)=>{ + this.logAccessIfVerbose(req); // Wait for the parcelInstance to finish bundling if needed + if (this.pending) this.pendingRequests.push([ + req, + res + ]); + else this.respond(req, res); + }); + let { server: server , stop: stop } = await (0, $luxNM$parcelutils.createHTTPServer)({ + cacheDir: this.options.cacheDir, + https: this.options.https, + inputFS: this.options.inputFS, + listener: app, + outputFS: this.options.outputFS, + host: this.options.host + }); + this.stopServer = stop; + server.listen(this.options.port, this.options.host); + return new Promise((resolve, reject)=>{ + server.once("error", (err)=>{ + this.options.logger.error({ + message: (0, $30a82c7967bfe635$export$2e2bcd8739ae039)(err, this.options.port) + }); + reject(err); + }); + server.once("listening", ()=>{ + resolve(server); + }); + }); + } + async stop() { + (0, ($parcel$interopDefault($luxNM$assert)))(this.stopServer != null); + await this.stopServer(); + this.stopServer = null; + } +} + + +var $ba38d4adbab9c33d$exports = {}; +"use strict"; +function $ba38d4adbab9c33d$var$nullthrows(x, message) { + if (x != null) return x; + var error = new Error(message !== undefined ? message : "Got unexpected " + x); + error.framesToPop = 1; // Skip nullthrows's own stack frame. + throw error; +} +$ba38d4adbab9c33d$exports = $ba38d4adbab9c33d$var$nullthrows; +$ba38d4adbab9c33d$exports.default = $ba38d4adbab9c33d$var$nullthrows; +Object.defineProperty($ba38d4adbab9c33d$exports, "__esModule", { + value: true +}); + + + +var $df859d236a9b528e$exports = {}; + +$parcel$export($df859d236a9b528e$exports, "charset", () => $df859d236a9b528e$export$e4c823724462c3fd, (v) => $df859d236a9b528e$export$e4c823724462c3fd = v); +$parcel$export($df859d236a9b528e$exports, "charsets", () => $df859d236a9b528e$export$48d2c0a44ea41a2f, (v) => $df859d236a9b528e$export$48d2c0a44ea41a2f = v); +$parcel$export($df859d236a9b528e$exports, "contentType", () => $df859d236a9b528e$export$8019223850b8bf78, (v) => $df859d236a9b528e$export$8019223850b8bf78 = v); +$parcel$export($df859d236a9b528e$exports, "extension", () => $df859d236a9b528e$export$1b45514b112dd749, (v) => $df859d236a9b528e$export$1b45514b112dd749 = v); +$parcel$export($df859d236a9b528e$exports, "extensions", () => $df859d236a9b528e$export$cc3e2d3244e01b7f, (v) => $df859d236a9b528e$export$cc3e2d3244e01b7f = v); +$parcel$export($df859d236a9b528e$exports, "lookup", () => $df859d236a9b528e$export$dfc7155ac0343b8, (v) => $df859d236a9b528e$export$dfc7155ac0343b8 = v); +$parcel$export($df859d236a9b528e$exports, "types", () => $df859d236a9b528e$export$b14ad400b1d09e0f, (v) => $df859d236a9b528e$export$b14ad400b1d09e0f = v); +/*! + * mime-types + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ /** + * Module exports. + * @public + */ var $df859d236a9b528e$export$e4c823724462c3fd; +var $df859d236a9b528e$export$48d2c0a44ea41a2f; +var $df859d236a9b528e$export$8019223850b8bf78; +var $df859d236a9b528e$export$1b45514b112dd749; +var $df859d236a9b528e$export$cc3e2d3244e01b7f; +var $df859d236a9b528e$export$dfc7155ac0343b8; +var $df859d236a9b528e$export$b14ad400b1d09e0f; +"use strict"; +var $a4456c6d336bd9c5$exports = {}; +/*! + * mime-db + * Copyright(c) 2014 Jonathan Ong + * MIT Licensed + */ /** + * Module exports. + */ +$a4456c6d336bd9c5$exports = (parcelRequire("ewPXO")); + + + +var $df859d236a9b528e$require$extname = $luxNM$path.extname; +/** + * Module variables. + * @private + */ var $df859d236a9b528e$var$EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/; +var $df859d236a9b528e$var$TEXT_TYPE_REGEXP = /^text\//i; +$df859d236a9b528e$export$e4c823724462c3fd = $df859d236a9b528e$var$charset; +$df859d236a9b528e$export$48d2c0a44ea41a2f = { + lookup: $df859d236a9b528e$var$charset +}; +$df859d236a9b528e$export$8019223850b8bf78 = $df859d236a9b528e$var$contentType; +$df859d236a9b528e$export$1b45514b112dd749 = $df859d236a9b528e$var$extension; +$df859d236a9b528e$export$cc3e2d3244e01b7f = Object.create(null); +$df859d236a9b528e$export$dfc7155ac0343b8 = $df859d236a9b528e$var$lookup; +$df859d236a9b528e$export$b14ad400b1d09e0f = Object.create(null); +// Populate the extensions/types maps +$df859d236a9b528e$var$populateMaps($df859d236a9b528e$export$cc3e2d3244e01b7f, $df859d236a9b528e$export$b14ad400b1d09e0f); +/** + * Get the default charset for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ function $df859d236a9b528e$var$charset(type) { + if (!type || typeof type !== "string") return false; + // TODO: use media-typer + var match = $df859d236a9b528e$var$EXTRACT_TYPE_REGEXP.exec(type); + var mime = match && $a4456c6d336bd9c5$exports[match[1].toLowerCase()]; + if (mime && mime.charset) return mime.charset; + // default text/* to utf-8 + if (match && $df859d236a9b528e$var$TEXT_TYPE_REGEXP.test(match[1])) return "UTF-8"; + return false; +} +/** + * Create a full Content-Type header given a MIME type or extension. + * + * @param {string} str + * @return {boolean|string} + */ function $df859d236a9b528e$var$contentType(str) { + // TODO: should this even be in this module? + if (!str || typeof str !== "string") return false; + var mime = str.indexOf("/") === -1 ? $df859d236a9b528e$export$dfc7155ac0343b8(str) : str; + if (!mime) return false; + // TODO: use content-type or other module + if (mime.indexOf("charset") === -1) { + var charset = $df859d236a9b528e$export$e4c823724462c3fd(mime); + if (charset) mime += "; charset=" + charset.toLowerCase(); + } + return mime; +} +/** + * Get the default extension for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ function $df859d236a9b528e$var$extension(type) { + if (!type || typeof type !== "string") return false; + // TODO: use media-typer + var match = $df859d236a9b528e$var$EXTRACT_TYPE_REGEXP.exec(type); + // get extensions + var exts = match && $df859d236a9b528e$export$cc3e2d3244e01b7f[match[1].toLowerCase()]; + if (!exts || !exts.length) return false; + return exts[0]; +} +/** + * Lookup the MIME type for a file path/extension. + * + * @param {string} path + * @return {boolean|string} + */ function $df859d236a9b528e$var$lookup(path) { + if (!path || typeof path !== "string") return false; + // get the extension ("ext" or ".ext" or full path) + var extension = $df859d236a9b528e$require$extname("x." + path).toLowerCase().substr(1); + if (!extension) return false; + return $df859d236a9b528e$export$b14ad400b1d09e0f[extension] || false; +} +/** + * Populate the extensions and types maps. + * @private + */ function $df859d236a9b528e$var$populateMaps(extensions, types) { + // source preference (least -> most) + var preference = [ + "nginx", + "apache", + undefined, + "iana" + ]; + Object.keys($a4456c6d336bd9c5$exports).forEach(function forEachMimeType(type) { + var mime = $a4456c6d336bd9c5$exports[type]; + var exts = mime.extensions; + if (!exts || !exts.length) return; + // mime -> extensions + extensions[type] = exts; + // extension -> mime + for(var i = 0; i < exts.length; i++){ + var extension = exts[i]; + if (types[extension]) { + var from = preference.indexOf($a4456c6d336bd9c5$exports[types[extension]].source); + var to = preference.indexOf(mime.source); + if (types[extension] !== "application/octet-stream" && (from > to || from === to && types[extension].substr(0, 12) === "application/")) continue; + } + // set the extension -> mime + types[extension] = type; + } + }); +} + + +var $b0c2a4ef85ecaf66$exports = {}; +"use strict"; + +var $71Uih = parcelRequire("71Uih"); + +$71Uih.createWebSocketStream = (parcelRequire("1V948")); + +$71Uih.Server = (parcelRequire("GN6zS")); + +$71Uih.Receiver = (parcelRequire("aFa0l")); + +$71Uih.Sender = (parcelRequire("2RbF5")); +$b0c2a4ef85ecaf66$exports = $71Uih; + + + + +const $e5ab1d445ffc5302$var$FS_CONCURRENCY = 64; +const $e5ab1d445ffc5302$var$HMR_ENDPOINT = "/__parcel_hmr"; +class $e5ab1d445ffc5302$export$2e2bcd8739ae039 { + unresolvedError = null; + bundleGraph = null; + constructor(options){ + this.options = options; + } + async start() { + var _this_options, _this_options_addMiddleware; + let server = this.options.devServer; + if (!server) { + let result = await (0, $luxNM$parcelutils.createHTTPServer)({ + listener: (req, res)=>{ + (0, $29d62bc9a48463d1$export$1c94a12dbc96ed70)(res); + if (!this.handle(req, res)) { + res.statusCode = 404; + res.end(); + } + } + }); + server = result.server; + server.listen(this.options.port, this.options.host); + this.stopServer = result.stop; + } else (_this_options_addMiddleware = (_this_options = this.options).addMiddleware) === null || _this_options_addMiddleware === void 0 ? void 0 : _this_options_addMiddleware.call(_this_options, (req, res)=>this.handle(req, res)); + this.wss = new (0, (/*@__PURE__*/$parcel$interopDefault($b0c2a4ef85ecaf66$exports))).Server({ + server: server + }); + this.wss.on("connection", (ws)=>{ + if (this.unresolvedError) ws.send(JSON.stringify(this.unresolvedError)); + }); // $FlowFixMe[incompatible-exact] + this.wss.on("error", (err)=>this.handleSocketError(err)); + } + handle(req, res) { + let { pathname: pathname } = (0, ($parcel$interopDefault($luxNM$url))).parse(req.originalUrl || req.url); + if (pathname != null && pathname.startsWith($e5ab1d445ffc5302$var$HMR_ENDPOINT)) { + let id = pathname.slice($e5ab1d445ffc5302$var$HMR_ENDPOINT.length + 1); + let bundleGraph = (0, (/*@__PURE__*/$parcel$interopDefault($ba38d4adbab9c33d$exports)))(this.bundleGraph); + let asset = bundleGraph.getAssetById(id); + this.getHotAssetContents(asset).then((output)=>{ + res.setHeader("Content-Type", (0, (/*@__PURE__*/$parcel$interopDefault($df859d236a9b528e$exports))).contentType(asset.type)); + res.end(output); + }); + return true; + } + return false; + } + async stop() { + if (this.stopServer != null) { + await this.stopServer(); + this.stopServer = null; + } + this.wss.close(); + } + async emitError(options, diagnostics) { + let renderedDiagnostics = await Promise.all(diagnostics.map((d)=>(0, $luxNM$parcelutils.prettyDiagnostic)(d, options))); // store the most recent error so we can notify new connections + // and so we can broadcast when the error is resolved + this.unresolvedError = { + type: "error", + diagnostics: { + ansi: renderedDiagnostics, + html: renderedDiagnostics.map((d, i)=>{ + var _diagnostics_i_documentationURL; + return { + message: (0, $luxNM$parcelutils.ansiHtml)(d.message), + stack: (0, $luxNM$parcelutils.ansiHtml)(d.stack), + frames: d.frames.map((f)=>({ + location: f.location, + code: (0, $luxNM$parcelutils.ansiHtml)(f.code) + })), + hints: d.hints.map((hint)=>(0, $luxNM$parcelutils.ansiHtml)(hint)), + documentation: (_diagnostics_i_documentationURL = diagnostics[i].documentationURL) !== null && _diagnostics_i_documentationURL !== void 0 ? _diagnostics_i_documentationURL : "" + }; + }) + } + }; + this.broadcast(this.unresolvedError); + } + async emitUpdate(event) { + this.unresolvedError = null; + this.bundleGraph = event.bundleGraph; + let changedAssets = new Set(event.changedAssets.values()); + if (changedAssets.size === 0) return; + let queue = new (0, $luxNM$parcelutils.PromiseQueue)({ + maxConcurrent: $e5ab1d445ffc5302$var$FS_CONCURRENCY + }); + for (let asset of changedAssets){ + if (asset.type !== "js" && asset.type !== "css") { + // If all of the incoming dependencies of the asset actually resolve to a JS asset + // rather than the original, we can mark the runtimes as changed instead. URL runtimes + // have a cache busting query param added with HMR enabled which will trigger a reload. + let runtimes = new Set(); + let incomingDeps = event.bundleGraph.getIncomingDependencies(asset); + let isOnlyReferencedByRuntimes = incomingDeps.every((dep)=>{ + let resolved = event.bundleGraph.getResolvedAsset(dep); + let isRuntime = (resolved === null || resolved === void 0 ? void 0 : resolved.type) === "js" && resolved !== asset; + if (resolved && isRuntime) runtimes.add(resolved); + return isRuntime; + }); + if (isOnlyReferencedByRuntimes) { + for (let runtime of runtimes)changedAssets.add(runtime); + continue; + } + } + queue.add(async ()=>{ + let dependencies = event.bundleGraph.getDependencies(asset); + let depsByBundle = {}; + for (let bundle of event.bundleGraph.getBundlesWithAsset(asset)){ + let deps = {}; + for (let dep of dependencies){ + let resolved = event.bundleGraph.getResolvedAsset(dep, bundle); + if (resolved) deps[$e5ab1d445ffc5302$var$getSpecifier(dep)] = event.bundleGraph.getAssetPublicId(resolved); + } + depsByBundle[bundle.id] = deps; + } + return { + id: event.bundleGraph.getAssetPublicId(asset), + url: this.getSourceURL(asset), + type: asset.type, + // No need to send the contents of non-JS assets to the client. + output: asset.type === "js" ? await this.getHotAssetContents(asset) : "", + envHash: asset.env.id, + outputFormat: asset.env.outputFormat, + depsByBundle: depsByBundle + }; + }); + } + let assets = await queue.run(); + this.broadcast({ + type: "update", + assets: assets + }); + } + async getHotAssetContents(asset) { + let output = await asset.getCode(); + let bundleGraph = (0, (/*@__PURE__*/$parcel$interopDefault($ba38d4adbab9c33d$exports)))(this.bundleGraph); + if (asset.type === "js") { + let publicId = bundleGraph.getAssetPublicId(asset); + output = `parcelHotUpdate['${publicId}'] = function (require, module, exports) {${output}}`; + } + let sourcemap = await asset.getMap(); + if (sourcemap) { + let sourcemapStringified = await sourcemap.stringify({ + format: "inline", + sourceRoot: (0, $29d62bc9a48463d1$export$48c584f74c55688f) + "/", + // $FlowFixMe + fs: asset.fs + }); + (0, ($parcel$interopDefault($luxNM$assert)))(typeof sourcemapStringified === "string"); + output += `\n//# sourceMappingURL=${sourcemapStringified}`; + output += `\n//# sourceURL=${encodeURI(this.getSourceURL(asset))}\n`; + } + return output; + } + getSourceURL(asset) { + let origin = ""; + if (!this.options.devServer) origin = `http://${this.options.host || "localhost"}:${this.options.port}`; + return origin + $e5ab1d445ffc5302$var$HMR_ENDPOINT + "/" + asset.id; + } + handleSocketError(err) { + if (err.code === "ECONNRESET") // This gets triggered on page refresh, ignore this + return; + this.options.logger.warn({ + origin: "@parcel/reporter-dev-server", + message: `[${err.code}]: ${err.message}`, + stack: err.stack + }); + } + broadcast(msg) { + const json = JSON.stringify(msg); + for (let ws of this.wss.clients)ws.send(json); + } +} +function $e5ab1d445ffc5302$var$getSpecifier(dep) { + if (typeof dep.meta.placeholder === "string") return dep.meta.placeholder; + return dep.specifier; +} + + + +let $81dded01de86ed80$var$servers = new Map(); +let $81dded01de86ed80$var$hmrServers = new Map(); +var $81dded01de86ed80$export$2e2bcd8739ae039 = new (0, $luxNM$parcelplugin.Reporter)({ + async report ({ event: event , options: options , logger: logger }) { + let { serveOptions: serveOptions , hmrOptions: hmrOptions } = options; + let server = serveOptions ? $81dded01de86ed80$var$servers.get(serveOptions.port) : undefined; + let hmrPort = hmrOptions && hmrOptions.port || serveOptions && serveOptions.port; + let hmrServer = hmrPort ? $81dded01de86ed80$var$hmrServers.get(hmrPort) : undefined; + switch(event.type){ + case "watchStart": + { + if (serveOptions) { + // If there's already a server when watching has just started, something + // is wrong. + if (server) return logger.warn({ + message: "Trying to create the devserver but it already exists." + }); + var _serveOptions_publicUrl; + let serverOptions = { + ...serveOptions, + projectRoot: options.projectRoot, + cacheDir: options.cacheDir, + // Override the target's publicUrl as that is likely meant for production. + // This could be configurable in the future. + publicUrl: (_serveOptions_publicUrl = serveOptions.publicUrl) !== null && _serveOptions_publicUrl !== void 0 ? _serveOptions_publicUrl : "/", + inputFS: options.inputFS, + outputFS: options.outputFS, + logger: logger, + hmrOptions: hmrOptions + }; + server = new (0, $29d62bc9a48463d1$export$2e2bcd8739ae039)(serverOptions); + $81dded01de86ed80$var$servers.set(serveOptions.port, server); + const devServer = await server.start(); + if (hmrOptions && hmrOptions.port === serveOptions.port) { + let hmrServerOptions = { + port: serveOptions.port, + host: hmrOptions.host, + devServer: devServer, + addMiddleware: (handler)=>{ + server === null || server === void 0 ? void 0 : server.middleware.push(handler); + }, + logger: logger + }; + hmrServer = new (0, $e5ab1d445ffc5302$export$2e2bcd8739ae039)(hmrServerOptions); + $81dded01de86ed80$var$hmrServers.set(serveOptions.port, hmrServer); + await hmrServer.start(); + return; + } + } + let port = hmrOptions === null || hmrOptions === void 0 ? void 0 : hmrOptions.port; + if (typeof port === "number") { + let hmrServerOptions = { + port: port, + host: hmrOptions === null || hmrOptions === void 0 ? void 0 : hmrOptions.host, + logger: logger + }; + hmrServer = new (0, $e5ab1d445ffc5302$export$2e2bcd8739ae039)(hmrServerOptions); + $81dded01de86ed80$var$hmrServers.set(port, hmrServer); + await hmrServer.start(); + } + break; + } + case "watchEnd": + if (serveOptions) { + if (!server) return logger.warn({ + message: "Could not shutdown devserver because it does not exist." + }); + await server.stop(); + $81dded01de86ed80$var$servers.delete(server.options.port); + } + if (hmrOptions && hmrServer) { + await hmrServer.stop(); // $FlowFixMe[prop-missing] + $81dded01de86ed80$var$hmrServers.delete(hmrServer.wss.options.port); + } + break; + case "buildStart": + if (server) server.buildStart(); + break; + case "buildProgress": + if (event.phase === "bundled" && hmrServer) await hmrServer.emitUpdate(event); + break; + case "buildSuccess": + if (serveOptions) { + if (!server) return logger.warn({ + message: "Could not send success event to devserver because it does not exist." + }); + server.buildSuccess(event.bundleGraph, event.requestBundle); + } + break; + case "buildFailure": + // On buildFailure watchStart sometimes has not been called yet + // do not throw an additional warning here + if (server) await server.buildError(options, event.diagnostics); + if (hmrServer) await hmrServer.emitError(options, event.diagnostics); + break; + } + } +}); + + +//# sourceMappingURL=ServerReporter.js.map diff --git a/node_modules/@parcel/reporter-dev-server/lib/ServerReporter.js.map b/node_modules/@parcel/reporter-dev-server/lib/ServerReporter.js.map new file mode 100644 index 0000000..a32a061 --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/lib/ServerReporter.js.map @@ -0,0 +1 @@ +{"mappings":"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","sources":["node_modules/connect/node_modules/debug/src/index.js","node_modules/connect/node_modules/debug/src/browser.js","node_modules/connect/node_modules/debug/src/debug.js","node_modules/connect/node_modules/ms/index.js","node_modules/connect/node_modules/debug/src/node.js","node_modules/finalhandler/node_modules/debug/src/index.js","node_modules/finalhandler/node_modules/debug/src/browser.js","node_modules/finalhandler/node_modules/debug/src/debug.js","node_modules/finalhandler/node_modules/ms/index.js","node_modules/finalhandler/node_modules/debug/src/node.js","node_modules/utils-merge/index.js","node_modules/serve-handler/node_modules/mime-db/db.json","node_modules/http-proxy/lib/http-proxy.js","node_modules/http-proxy/lib/http-proxy/index.js","node_modules/eventemitter3/index.js","node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js","node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js","node_modules/http-proxy/lib/http-proxy/common.js","node_modules/requires-port/index.js","node_modules/follow-redirects/index.js","node_modules/follow-redirects/debug.js","node_modules/debug/src/index.js","node_modules/debug/src/browser.js","node_modules/debug/src/common.js","node_modules/debug/node_modules/ms/index.js","node_modules/debug/src/node.js","node_modules/supports-color/index.js","node_modules/supports-color/node_modules/has-flag/index.js","node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js","node_modules/picomatch/lib/picomatch.js","node_modules/picomatch/lib/scan.js","node_modules/picomatch/lib/utils.js","node_modules/picomatch/lib/constants.js","node_modules/picomatch/lib/parse.js","node_modules/http-proxy-middleware/dist/handlers/index.js","node_modules/http-proxy-middleware/dist/handlers/public.js","node_modules/http-proxy-middleware/dist/handlers/response-interceptor.js","node_modules/http-proxy-middleware/dist/handlers/fix-request-body.js","packages/reporters/dev-server/node_modules/mime-db/db.json","node_modules/ws/lib/receiver.js","node_modules/ws/lib/permessage-deflate.js","node_modules/ws/lib/buffer-util.js","node_modules/ws/lib/constants.js","node_modules/ws/lib/limiter.js","node_modules/ws/lib/validation.js","node_modules/ws/lib/sender.js","node_modules/ws/lib/stream.js","node_modules/ws/lib/websocket-server.js","node_modules/ws/lib/websocket.js","node_modules/ws/lib/event-target.js","node_modules/ws/lib/extension.js","packages/reporters/dev-server/src/ServerReporter.js","packages/reporters/dev-server/src/HMRServer.js","packages/reporters/dev-server/src/Server.js","packages/reporters/dev-server/src/serverErrors.js","node_modules/ejs/lib/ejs.js","node_modules/ejs/lib/utils.js","node_modules/ejs/package.json","node_modules/connect/index.js","node_modules/finalhandler/index.js","node_modules/encodeurl/index.js","node_modules/escape-html/index.js","node_modules/on-finished/index.js","node_modules/ee-first/index.js","node_modules/parseurl/index.js","node_modules/statuses/index.js","node_modules/statuses/codes.json","node_modules/unpipe/index.js","node_modules/serve-handler/src/index.js","node_modules/fast-url-parser/src/urlparser.js","node_modules/serve-handler/src/glob-slash.js","node_modules/serve-handler/node_modules/minimatch/minimatch.js","node_modules/brace-expansion/index.js","node_modules/concat-map/index.js","node_modules/balanced-match/index.js","node_modules/path-to-regexp/index.js","node_modules/serve-handler/node_modules/mime-types/index.js","node_modules/serve-handler/node_modules/mime-db/index.js","node_modules/bytes/index.js","node_modules/content-disposition/index.js","node_modules/path-is-inside/lib/path-is-inside.js","node_modules/range-parser/index.js","node_modules/serve-handler/src/directory.js","node_modules/serve-handler/src/error.js","node_modules/http-proxy-middleware/dist/index.js","node_modules/http-proxy-middleware/dist/http-proxy-middleware.js","node_modules/http-proxy/index.js","node_modules/http-proxy-middleware/dist/config-factory.js","node_modules/http-proxy-middleware/node_modules/is-plain-obj/index.js","node_modules/http-proxy-middleware/dist/errors.js","node_modules/http-proxy-middleware/dist/logger.js","node_modules/http-proxy-middleware/dist/context-matcher.js","node_modules/is-glob/index.js","node_modules/is-extglob/index.js","node_modules/http-proxy-middleware/node_modules/micromatch/index.js","node_modules/braces/index.js","node_modules/braces/lib/stringify.js","node_modules/braces/lib/utils.js","node_modules/braces/lib/compile.js","node_modules/fill-range/index.js","node_modules/to-regex-range/index.js","node_modules/to-regex-range/node_modules/is-number/index.js","node_modules/braces/lib/expand.js","node_modules/braces/lib/parse.js","node_modules/braces/lib/constants.js","node_modules/picomatch/index.js","node_modules/http-proxy-middleware/dist/_handlers.js","node_modules/http-proxy-middleware/dist/path-rewriter.js","node_modules/http-proxy-middleware/dist/router.js","node_modules/launch-editor/index.js","node_modules/picocolors/picocolors.js","node_modules/launch-editor/guess.js","node_modules/shell-quote/index.js","node_modules/launch-editor/editor-info/osx.js","node_modules/launch-editor/editor-info/linux.js","node_modules/launch-editor/editor-info/windows.js","node_modules/launch-editor/get-args.js","node_modules/fresh/index.js","node_modules/nullthrows/nullthrows.js","packages/reporters/dev-server/node_modules/mime-types/index.js","packages/reporters/dev-server/node_modules/mime-db/index.js","node_modules/ws/index.js"],"sourcesContent":["/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n module.exports = require('./browser.js');\n} else {\n module.exports = require('./node.js');\n}\n","/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n","/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n // camel-case\n var prop = key\n .substring(6)\n .toLowerCase()\n .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n // coerce string value into JS value\n var val = process.env[key];\n if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n else if (val === 'null') val = null;\n else val = Number(val);\n\n obj[prop] = val;\n return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n * $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n 2 === fd ? process.stderr :\n createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n return 'colors' in exports.inspectOpts\n ? Boolean(exports.inspectOpts.colors)\n : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts)\n .split('\\n').map(function(str) {\n return str.trim()\n }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var name = this.namespace;\n var useColors = this.useColors;\n\n if (useColors) {\n var c = this.color;\n var prefix = ' \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n } else {\n args[0] = new Date().toUTCString()\n + ' ' + name + ' ' + args[0];\n }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n if (null == namespaces) {\n // If you set a process.env field to null or undefined, it gets cast to the\n // string 'null' or 'undefined'. Just delete instead.\n delete process.env.DEBUG;\n } else {\n process.env.DEBUG = namespaces;\n }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n var stream;\n var tty_wrap = process.binding('tty_wrap');\n\n // Note stream._type is used for test-module-load-list.js\n\n switch (tty_wrap.guessHandleType(fd)) {\n case 'TTY':\n stream = new tty.WriteStream(fd);\n stream._type = 'tty';\n\n // Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n case 'FILE':\n var fs = require('fs');\n stream = new fs.SyncWriteStream(fd, { autoClose: false });\n stream._type = 'fs';\n break;\n\n case 'PIPE':\n case 'TCP':\n var net = require('net');\n stream = new net.Socket({\n fd: fd,\n readable: false,\n writable: true\n });\n\n // FIXME Should probably have an option in net.Socket to create a\n // stream from an existing fd which is writable only. But for now\n // we'll just add this hack and set the `readable` member to false.\n // Test: ./node test/fixtures/echo.js < /etc/passwd\n stream.readable = false;\n stream.read = null;\n stream._type = 'pipe';\n\n // FIXME Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n default:\n // Probably an error on in uv_guess_handle()\n throw new Error('Implement me. Unknown stream file type!');\n }\n\n // For supporting legacy API we put the FD here.\n stream.fd = fd;\n\n stream._isStdio = true;\n\n return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n debug.inspectOpts = {};\n\n var keys = Object.keys(exports.inspectOpts);\n for (var i = 0; i < keys.length; i++) {\n debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n","/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n module.exports = require('./browser.js');\n} else {\n module.exports = require('./node.js');\n}\n","/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n","/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n // camel-case\n var prop = key\n .substring(6)\n .toLowerCase()\n .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n // coerce string value into JS value\n var val = process.env[key];\n if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n else if (val === 'null') val = null;\n else val = Number(val);\n\n obj[prop] = val;\n return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n * $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n 2 === fd ? process.stderr :\n createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n return 'colors' in exports.inspectOpts\n ? Boolean(exports.inspectOpts.colors)\n : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts)\n .split('\\n').map(function(str) {\n return str.trim()\n }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var name = this.namespace;\n var useColors = this.useColors;\n\n if (useColors) {\n var c = this.color;\n var prefix = ' \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n } else {\n args[0] = new Date().toUTCString()\n + ' ' + name + ' ' + args[0];\n }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n if (null == namespaces) {\n // If you set a process.env field to null or undefined, it gets cast to the\n // string 'null' or 'undefined'. Just delete instead.\n delete process.env.DEBUG;\n } else {\n process.env.DEBUG = namespaces;\n }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n var stream;\n var tty_wrap = process.binding('tty_wrap');\n\n // Note stream._type is used for test-module-load-list.js\n\n switch (tty_wrap.guessHandleType(fd)) {\n case 'TTY':\n stream = new tty.WriteStream(fd);\n stream._type = 'tty';\n\n // Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n case 'FILE':\n var fs = require('fs');\n stream = new fs.SyncWriteStream(fd, { autoClose: false });\n stream._type = 'fs';\n break;\n\n case 'PIPE':\n case 'TCP':\n var net = require('net');\n stream = new net.Socket({\n fd: fd,\n readable: false,\n writable: true\n });\n\n // FIXME Should probably have an option in net.Socket to create a\n // stream from an existing fd which is writable only. But for now\n // we'll just add this hack and set the `readable` member to false.\n // Test: ./node test/fixtures/echo.js < /etc/passwd\n stream.readable = false;\n stream.read = null;\n stream._type = 'pipe';\n\n // FIXME Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n default:\n // Probably an error on in uv_guess_handle()\n throw new Error('Implement me. Unknown stream file type!');\n }\n\n // For supporting legacy API we put the FD here.\n stream.fd = fd;\n\n stream._isStdio = true;\n\n return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n debug.inspectOpts = {};\n\n var keys = Object.keys(exports.inspectOpts);\n for (var i = 0; i < keys.length; i++) {\n debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n","/**\n * Merge object b with object a.\n *\n * var a = { foo: 'bar' }\n * , b = { bar: 'baz' };\n *\n * merge(a, b);\n * // => { foo: 'bar', bar: 'baz' }\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object}\n * @api public\n */\n\nexports = module.exports = function(a, b){\n if (a && b) {\n for (var key in b) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","{\n \"application/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"application/3gpdash-qoe-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/3gpp-ims+xml\": {\n \"source\": \"iana\"\n },\n \"application/a2l\": {\n \"source\": \"iana\"\n },\n \"application/activemessage\": {\n \"source\": \"iana\"\n },\n \"application/alto-costmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-directory+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcost+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcostparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointprop+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointpropparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-error+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/aml\": {\n \"source\": \"iana\"\n },\n \"application/andrew-inset\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez\"]\n },\n \"application/applefile\": {\n \"source\": \"iana\"\n },\n \"application/applixware\": {\n \"source\": \"apache\",\n \"extensions\": [\"aw\"]\n },\n \"application/atf\": {\n \"source\": \"iana\"\n },\n \"application/atfx\": {\n \"source\": \"iana\"\n },\n \"application/atom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atom\"]\n },\n \"application/atomcat+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"atomcat\"]\n },\n \"application/atomdeleted+xml\": {\n \"source\": \"iana\"\n },\n \"application/atomicmail\": {\n \"source\": \"iana\"\n },\n \"application/atomsvc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"atomsvc\"]\n },\n \"application/atxml\": {\n \"source\": \"iana\"\n },\n \"application/auth-policy+xml\": {\n \"source\": \"iana\"\n },\n \"application/bacnet-xdd+zip\": {\n \"source\": \"iana\"\n },\n \"application/batch-smtp\": {\n \"source\": \"iana\"\n },\n \"application/bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/beep+xml\": {\n \"source\": \"iana\"\n },\n \"application/calendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/calendar+xml\": {\n \"source\": \"iana\"\n },\n \"application/call-completion\": {\n \"source\": \"iana\"\n },\n \"application/cals-1840\": {\n \"source\": \"iana\"\n },\n \"application/cbor\": {\n \"source\": \"iana\"\n },\n \"application/cccex\": {\n \"source\": \"iana\"\n },\n \"application/ccmp+xml\": {\n \"source\": \"iana\"\n },\n \"application/ccxml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"ccxml\"]\n },\n \"application/cdfx+xml\": {\n \"source\": \"iana\"\n },\n \"application/cdmi-capability\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmia\"]\n },\n \"application/cdmi-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmic\"]\n },\n \"application/cdmi-domain\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmid\"]\n },\n \"application/cdmi-object\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmio\"]\n },\n \"application/cdmi-queue\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmiq\"]\n },\n \"application/cdni\": {\n \"source\": \"iana\"\n },\n \"application/cea\": {\n \"source\": \"iana\"\n },\n \"application/cea-2018+xml\": {\n \"source\": \"iana\"\n },\n \"application/cellml+xml\": {\n \"source\": \"iana\"\n },\n \"application/cfw\": {\n \"source\": \"iana\"\n },\n \"application/clue_info+xml\": {\n \"source\": \"iana\"\n },\n \"application/cms\": {\n \"source\": \"iana\"\n },\n \"application/cnrp+xml\": {\n \"source\": \"iana\"\n },\n \"application/coap-group+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-payload\": {\n \"source\": \"iana\"\n },\n \"application/commonground\": {\n \"source\": \"iana\"\n },\n \"application/conference-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/cose\": {\n \"source\": \"iana\"\n },\n \"application/cose-key\": {\n \"source\": \"iana\"\n },\n \"application/cose-key-set\": {\n \"source\": \"iana\"\n },\n \"application/cpl+xml\": {\n \"source\": \"iana\"\n },\n \"application/csrattrs\": {\n \"source\": \"iana\"\n },\n \"application/csta+xml\": {\n \"source\": \"iana\"\n },\n \"application/cstadata+xml\": {\n \"source\": \"iana\"\n },\n \"application/csvm+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cu-seeme\": {\n \"source\": \"apache\",\n \"extensions\": [\"cu\"]\n },\n \"application/cybercash\": {\n \"source\": \"iana\"\n },\n \"application/dart\": {\n \"compressible\": true\n },\n \"application/dash+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpd\"]\n },\n \"application/dashdelta\": {\n \"source\": \"iana\"\n },\n \"application/davmount+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"davmount\"]\n },\n \"application/dca-rft\": {\n \"source\": \"iana\"\n },\n \"application/dcd\": {\n \"source\": \"iana\"\n },\n \"application/dec-dx\": {\n \"source\": \"iana\"\n },\n \"application/dialog-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/dicom\": {\n \"source\": \"iana\"\n },\n \"application/dicom+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom+xml\": {\n \"source\": \"iana\"\n },\n \"application/dii\": {\n \"source\": \"iana\"\n },\n \"application/dit\": {\n \"source\": \"iana\"\n },\n \"application/dns\": {\n \"source\": \"iana\"\n },\n \"application/docbook+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"dbk\"]\n },\n \"application/dskpp+xml\": {\n \"source\": \"iana\"\n },\n \"application/dssc+der\": {\n \"source\": \"iana\",\n \"extensions\": [\"dssc\"]\n },\n \"application/dssc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdssc\"]\n },\n \"application/dvcs\": {\n \"source\": \"iana\"\n },\n \"application/ecmascript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ecma\"]\n },\n \"application/edi-consent\": {\n \"source\": \"iana\"\n },\n \"application/edi-x12\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/edifact\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/efi\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.comment+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.control+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.deviceinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.ecall.msd\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.providerinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.serviceinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.subscriberinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.veds+xml\": {\n \"source\": \"iana\"\n },\n \"application/emma+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"emma\"]\n },\n \"application/emotionml+xml\": {\n \"source\": \"iana\"\n },\n \"application/encaprtp\": {\n \"source\": \"iana\"\n },\n \"application/epp+xml\": {\n \"source\": \"iana\"\n },\n \"application/epub+zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"epub\"]\n },\n \"application/eshop\": {\n \"source\": \"iana\"\n },\n \"application/exi\": {\n \"source\": \"iana\",\n \"extensions\": [\"exi\"]\n },\n \"application/fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/fastsoap\": {\n \"source\": \"iana\"\n },\n \"application/fdt+xml\": {\n \"source\": \"iana\"\n },\n \"application/fhir+xml\": {\n \"source\": \"iana\"\n },\n \"application/fido.trusted-apps+json\": {\n \"compressible\": true\n },\n \"application/fits\": {\n \"source\": \"iana\"\n },\n \"application/font-sfnt\": {\n \"source\": \"iana\"\n },\n \"application/font-tdpfr\": {\n \"source\": \"iana\",\n \"extensions\": [\"pfr\"]\n },\n \"application/font-woff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"woff\"]\n },\n \"application/framework-attributes+xml\": {\n \"source\": \"iana\"\n },\n \"application/geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"geojson\"]\n },\n \"application/geo+json-seq\": {\n \"source\": \"iana\"\n },\n \"application/geoxacml+xml\": {\n \"source\": \"iana\"\n },\n \"application/gml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"gml\"]\n },\n \"application/gpx+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gpx\"]\n },\n \"application/gxf\": {\n \"source\": \"apache\",\n \"extensions\": [\"gxf\"]\n },\n \"application/gzip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gz\"]\n },\n \"application/h224\": {\n \"source\": \"iana\"\n },\n \"application/held+xml\": {\n \"source\": \"iana\"\n },\n \"application/hjson\": {\n \"extensions\": [\"hjson\"]\n },\n \"application/http\": {\n \"source\": \"iana\"\n },\n \"application/hyperstudio\": {\n \"source\": \"iana\",\n \"extensions\": [\"stk\"]\n },\n \"application/ibe-key-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/ibe-pkg-reply+xml\": {\n \"source\": \"iana\"\n },\n \"application/ibe-pp-data\": {\n \"source\": \"iana\"\n },\n \"application/iges\": {\n \"source\": \"iana\"\n },\n \"application/im-iscomposing+xml\": {\n \"source\": \"iana\"\n },\n \"application/index\": {\n \"source\": \"iana\"\n },\n \"application/index.cmd\": {\n \"source\": \"iana\"\n },\n \"application/index.obj\": {\n \"source\": \"iana\"\n },\n \"application/index.response\": {\n \"source\": \"iana\"\n },\n \"application/index.vnd\": {\n \"source\": \"iana\"\n },\n \"application/inkml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"ink\",\"inkml\"]\n },\n \"application/iotp\": {\n \"source\": \"iana\"\n },\n \"application/ipfix\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipfix\"]\n },\n \"application/ipp\": {\n \"source\": \"iana\"\n },\n \"application/isup\": {\n \"source\": \"iana\"\n },\n \"application/its+xml\": {\n \"source\": \"iana\"\n },\n \"application/java-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jar\",\"war\",\"ear\"]\n },\n \"application/java-serialized-object\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"ser\"]\n },\n \"application/java-vm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"class\"]\n },\n \"application/javascript\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"js\",\"mjs\"]\n },\n \"application/jf2feed+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jose\": {\n \"source\": \"iana\"\n },\n \"application/jose+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jrd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"json\",\"map\"]\n },\n \"application/json-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json-seq\": {\n \"source\": \"iana\"\n },\n \"application/json5\": {\n \"extensions\": [\"json5\"]\n },\n \"application/jsonml+json\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"jsonml\"]\n },\n \"application/jwk+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwk-set+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwt\": {\n \"source\": \"iana\"\n },\n \"application/kpml-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/kpml-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/ld+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"jsonld\"]\n },\n \"application/lgr+xml\": {\n \"source\": \"iana\"\n },\n \"application/link-format\": {\n \"source\": \"iana\"\n },\n \"application/load-control+xml\": {\n \"source\": \"iana\"\n },\n \"application/lost+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"lostxml\"]\n },\n \"application/lostsync+xml\": {\n \"source\": \"iana\"\n },\n \"application/lxf\": {\n \"source\": \"iana\"\n },\n \"application/mac-binhex40\": {\n \"source\": \"iana\",\n \"extensions\": [\"hqx\"]\n },\n \"application/mac-compactpro\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpt\"]\n },\n \"application/macwriteii\": {\n \"source\": \"iana\"\n },\n \"application/mads+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mads\"]\n },\n \"application/manifest+json\": {\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"webmanifest\"]\n },\n \"application/marc\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrc\"]\n },\n \"application/marcxml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrcx\"]\n },\n \"application/mathematica\": {\n \"source\": \"iana\",\n \"extensions\": [\"ma\",\"nb\",\"mb\"]\n },\n \"application/mathml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mathml\"]\n },\n \"application/mathml-content+xml\": {\n \"source\": \"iana\"\n },\n \"application/mathml-presentation+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-associated-procedure-description+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-deregister+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-envelope+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-msk+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-msk-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-protection-description+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-reception-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-register+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-register-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-schedule+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-user-service-description+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbox\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbox\"]\n },\n \"application/media-policy-dataset+xml\": {\n \"source\": \"iana\"\n },\n \"application/media_control+xml\": {\n \"source\": \"iana\"\n },\n \"application/mediaservercontrol+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mscml\"]\n },\n \"application/merge-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/metalink+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"metalink\"]\n },\n \"application/metalink4+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"meta4\"]\n },\n \"application/mets+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mets\"]\n },\n \"application/mf4\": {\n \"source\": \"iana\"\n },\n \"application/mikey\": {\n \"source\": \"iana\"\n },\n \"application/mmt-usd+xml\": {\n \"source\": \"iana\"\n },\n \"application/mods+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mods\"]\n },\n \"application/moss-keys\": {\n \"source\": \"iana\"\n },\n \"application/moss-signature\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-data\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-request\": {\n \"source\": \"iana\"\n },\n \"application/mp21\": {\n \"source\": \"iana\",\n \"extensions\": [\"m21\",\"mp21\"]\n },\n \"application/mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"mp4s\",\"m4p\"]\n },\n \"application/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod-xmt\": {\n \"source\": \"iana\"\n },\n \"application/mrb-consumer+xml\": {\n \"source\": \"iana\"\n },\n \"application/mrb-publish+xml\": {\n \"source\": \"iana\"\n },\n \"application/msc-ivr+xml\": {\n \"source\": \"iana\"\n },\n \"application/msc-mixer+xml\": {\n \"source\": \"iana\"\n },\n \"application/msword\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"doc\",\"dot\"]\n },\n \"application/mud+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxf\"]\n },\n \"application/n-quads\": {\n \"source\": \"iana\"\n },\n \"application/n-triples\": {\n \"source\": \"iana\"\n },\n \"application/nasdata\": {\n \"source\": \"iana\"\n },\n \"application/news-checkgroups\": {\n \"source\": \"iana\"\n },\n \"application/news-groupinfo\": {\n \"source\": \"iana\"\n },\n \"application/news-transmission\": {\n \"source\": \"iana\"\n },\n \"application/nlsml+xml\": {\n \"source\": \"iana\"\n },\n \"application/node\": {\n \"source\": \"iana\"\n },\n \"application/nss\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-request\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-response\": {\n \"source\": \"iana\"\n },\n \"application/octet-stream\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n },\n \"application/oda\": {\n \"source\": \"iana\",\n \"extensions\": [\"oda\"]\n },\n \"application/odx\": {\n \"source\": \"iana\"\n },\n \"application/oebps-package+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"opf\"]\n },\n \"application/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogx\"]\n },\n \"application/omdoc+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"omdoc\"]\n },\n \"application/onenote\": {\n \"source\": \"apache\",\n \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n },\n \"application/oxps\": {\n \"source\": \"iana\",\n \"extensions\": [\"oxps\"]\n },\n \"application/p2p-overlay+xml\": {\n \"source\": \"iana\"\n },\n \"application/parityfec\": {\n \"source\": \"iana\"\n },\n \"application/passport\": {\n \"source\": \"iana\"\n },\n \"application/patch-ops-error+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xer\"]\n },\n \"application/pdf\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pdf\"]\n },\n \"application/pdx\": {\n \"source\": \"iana\"\n },\n \"application/pgp-encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pgp\"]\n },\n \"application/pgp-keys\": {\n \"source\": \"iana\"\n },\n \"application/pgp-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\",\"sig\"]\n },\n \"application/pics-rules\": {\n \"source\": \"apache\",\n \"extensions\": [\"prf\"]\n },\n \"application/pidf+xml\": {\n \"source\": \"iana\"\n },\n \"application/pidf-diff+xml\": {\n \"source\": \"iana\"\n },\n \"application/pkcs10\": {\n \"source\": \"iana\",\n \"extensions\": [\"p10\"]\n },\n \"application/pkcs12\": {\n \"source\": \"iana\"\n },\n \"application/pkcs7-mime\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7m\",\"p7c\"]\n },\n \"application/pkcs7-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7s\"]\n },\n \"application/pkcs8\": {\n \"source\": \"iana\",\n \"extensions\": [\"p8\"]\n },\n \"application/pkcs8-encrypted\": {\n \"source\": \"iana\"\n },\n \"application/pkix-attr-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"ac\"]\n },\n \"application/pkix-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"cer\"]\n },\n \"application/pkix-crl\": {\n \"source\": \"iana\",\n \"extensions\": [\"crl\"]\n },\n \"application/pkix-pkipath\": {\n \"source\": \"iana\",\n \"extensions\": [\"pkipath\"]\n },\n \"application/pkixcmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"pki\"]\n },\n \"application/pls+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pls\"]\n },\n \"application/poc-settings+xml\": {\n \"source\": \"iana\"\n },\n \"application/postscript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ai\",\"eps\",\"ps\"]\n },\n \"application/ppsp-tracker+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+xml\": {\n \"source\": \"iana\"\n },\n \"application/provenance+xml\": {\n \"source\": \"iana\"\n },\n \"application/prs.alvestrand.titrax-sheet\": {\n \"source\": \"iana\"\n },\n \"application/prs.cww\": {\n \"source\": \"iana\",\n \"extensions\": [\"cww\"]\n },\n \"application/prs.hpub+zip\": {\n \"source\": \"iana\"\n },\n \"application/prs.nprend\": {\n \"source\": \"iana\"\n },\n \"application/prs.plucker\": {\n \"source\": \"iana\"\n },\n \"application/prs.rdf-xml-crypt\": {\n \"source\": \"iana\"\n },\n \"application/prs.xsf+xml\": {\n \"source\": \"iana\"\n },\n \"application/pskc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pskcxml\"]\n },\n \"application/qsig\": {\n \"source\": \"iana\"\n },\n \"application/raml+yaml\": {\n \"compressible\": true,\n \"extensions\": [\"raml\"]\n },\n \"application/raptorfec\": {\n \"source\": \"iana\"\n },\n \"application/rdap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rdf\"]\n },\n \"application/reginfo+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rif\"]\n },\n \"application/relax-ng-compact-syntax\": {\n \"source\": \"iana\",\n \"extensions\": [\"rnc\"]\n },\n \"application/remote-printing\": {\n \"source\": \"iana\"\n },\n \"application/reputon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/resource-lists+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rl\"]\n },\n \"application/resource-lists-diff+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rld\"]\n },\n \"application/rfc+xml\": {\n \"source\": \"iana\"\n },\n \"application/riscos\": {\n \"source\": \"iana\"\n },\n \"application/rlmi+xml\": {\n \"source\": \"iana\"\n },\n \"application/rls-services+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rs\"]\n },\n \"application/route-apd+xml\": {\n \"source\": \"iana\"\n },\n \"application/route-s-tsid+xml\": {\n \"source\": \"iana\"\n },\n \"application/route-usd+xml\": {\n \"source\": \"iana\"\n },\n \"application/rpki-ghostbusters\": {\n \"source\": \"iana\",\n \"extensions\": [\"gbr\"]\n },\n \"application/rpki-manifest\": {\n \"source\": \"iana\",\n \"extensions\": [\"mft\"]\n },\n \"application/rpki-publication\": {\n \"source\": \"iana\"\n },\n \"application/rpki-roa\": {\n \"source\": \"iana\",\n \"extensions\": [\"roa\"]\n },\n \"application/rpki-updown\": {\n \"source\": \"iana\"\n },\n \"application/rsd+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"rsd\"]\n },\n \"application/rss+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rss\"]\n },\n \"application/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"application/rtploopback\": {\n \"source\": \"iana\"\n },\n \"application/rtx\": {\n \"source\": \"iana\"\n },\n \"application/samlassertion+xml\": {\n \"source\": \"iana\"\n },\n \"application/samlmetadata+xml\": {\n \"source\": \"iana\"\n },\n \"application/sbml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sbml\"]\n },\n \"application/scaip+xml\": {\n \"source\": \"iana\"\n },\n \"application/scim+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scvp-cv-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"scq\"]\n },\n \"application/scvp-cv-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"scs\"]\n },\n \"application/scvp-vp-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"spq\"]\n },\n \"application/scvp-vp-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"spp\"]\n },\n \"application/sdp\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdp\"]\n },\n \"application/sep+xml\": {\n \"source\": \"iana\"\n },\n \"application/sep-exi\": {\n \"source\": \"iana\"\n },\n \"application/session-info\": {\n \"source\": \"iana\"\n },\n \"application/set-payment\": {\n \"source\": \"iana\"\n },\n \"application/set-payment-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setpay\"]\n },\n \"application/set-registration\": {\n \"source\": \"iana\"\n },\n \"application/set-registration-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setreg\"]\n },\n \"application/sgml\": {\n \"source\": \"iana\"\n },\n \"application/sgml-open-catalog\": {\n \"source\": \"iana\"\n },\n \"application/shf+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"shf\"]\n },\n \"application/sieve\": {\n \"source\": \"iana\"\n },\n \"application/simple-filter+xml\": {\n \"source\": \"iana\"\n },\n \"application/simple-message-summary\": {\n \"source\": \"iana\"\n },\n \"application/simplesymbolcontainer\": {\n \"source\": \"iana\"\n },\n \"application/slate\": {\n \"source\": \"iana\"\n },\n \"application/smil\": {\n \"source\": \"iana\"\n },\n \"application/smil+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"smi\",\"smil\"]\n },\n \"application/smpte336m\": {\n \"source\": \"iana\"\n },\n \"application/soap+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/soap+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sparql-query\": {\n \"source\": \"iana\",\n \"extensions\": [\"rq\"]\n },\n \"application/sparql-results+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"srx\"]\n },\n \"application/spirits-event+xml\": {\n \"source\": \"iana\"\n },\n \"application/sql\": {\n \"source\": \"iana\"\n },\n \"application/srgs\": {\n \"source\": \"iana\",\n \"extensions\": [\"gram\"]\n },\n \"application/srgs+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"grxml\"]\n },\n \"application/sru+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sru\"]\n },\n \"application/ssdl+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"ssdl\"]\n },\n \"application/ssml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssml\"]\n },\n \"application/tamp-apex-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-apex-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-error\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-query\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-response\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tar\": {\n \"compressible\": true\n },\n \"application/tei+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"tei\",\"teicorpus\"]\n },\n \"application/thraud+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"tfi\"]\n },\n \"application/timestamp-query\": {\n \"source\": \"iana\"\n },\n \"application/timestamp-reply\": {\n \"source\": \"iana\"\n },\n \"application/timestamped-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"tsd\"]\n },\n \"application/tnauthlist\": {\n \"source\": \"iana\"\n },\n \"application/trig\": {\n \"source\": \"iana\"\n },\n \"application/ttml+xml\": {\n \"source\": \"iana\"\n },\n \"application/tve-trigger\": {\n \"source\": \"iana\"\n },\n \"application/ulpfec\": {\n \"source\": \"iana\"\n },\n \"application/urc-grpsheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/urc-ressheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/urc-targetdesc+xml\": {\n \"source\": \"iana\"\n },\n \"application/urc-uisocketdesc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vcard+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+xml\": {\n \"source\": \"iana\"\n },\n \"application/vemmi\": {\n \"source\": \"iana\"\n },\n \"application/vividence.scriptfile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.1000minds.decision-model+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp-prose+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp-prose-pc3ch+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp-v2x-local-service-information\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.access-transfer-events+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.bsf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.gmop+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-location-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-signed+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mid-call+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pic-bw-large\": {\n \"source\": \"iana\",\n \"extensions\": [\"plb\"]\n },\n \"application/vnd.3gpp.pic-bw-small\": {\n \"source\": \"iana\",\n \"extensions\": [\"psb\"]\n },\n \"application/vnd.3gpp.pic-bw-var\": {\n \"source\": \"iana\",\n \"extensions\": [\"pvb\"]\n },\n \"application/vnd.3gpp.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.srvcc-ext+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.srvcc-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.state-and-event-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.ussd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.tcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tcap\"]\n },\n \"application/vnd.3lightssoftware.imagescal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3m.post-it-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"pwn\"]\n },\n \"application/vnd.accpac.simply.aso\": {\n \"source\": \"iana\",\n \"extensions\": [\"aso\"]\n },\n \"application/vnd.accpac.simply.imp\": {\n \"source\": \"iana\",\n \"extensions\": [\"imp\"]\n },\n \"application/vnd.acucobol\": {\n \"source\": \"iana\",\n \"extensions\": [\"acu\"]\n },\n \"application/vnd.acucorp\": {\n \"source\": \"iana\",\n \"extensions\": [\"atc\",\"acutc\"]\n },\n \"application/vnd.adobe.air-application-installer-package+zip\": {\n \"source\": \"apache\",\n \"extensions\": [\"air\"]\n },\n \"application/vnd.adobe.flash.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.formscentral.fcdt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcdt\"]\n },\n \"application/vnd.adobe.fxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fxp\",\"fxpl\"]\n },\n \"application/vnd.adobe.partial-upload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.xdp+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdp\"]\n },\n \"application/vnd.adobe.xfdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdf\"]\n },\n \"application/vnd.aether.imp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ah-barcode\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ahead.space\": {\n \"source\": \"iana\",\n \"extensions\": [\"ahead\"]\n },\n \"application/vnd.airzip.filesecure.azf\": {\n \"source\": \"iana\",\n \"extensions\": [\"azf\"]\n },\n \"application/vnd.airzip.filesecure.azs\": {\n \"source\": \"iana\",\n \"extensions\": [\"azs\"]\n },\n \"application/vnd.amadeus+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.amazon.ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"azw\"]\n },\n \"application/vnd.amazon.mobi8-ebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.americandynamics.acc\": {\n \"source\": \"iana\",\n \"extensions\": [\"acc\"]\n },\n \"application/vnd.amiga.ami\": {\n \"source\": \"iana\",\n \"extensions\": [\"ami\"]\n },\n \"application/vnd.amundsen.maze+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.android.package-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"apk\"]\n },\n \"application/vnd.anki\": {\n \"source\": \"iana\"\n },\n \"application/vnd.anser-web-certificate-issue-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"cii\"]\n },\n \"application/vnd.anser-web-funds-transfer-initiation\": {\n \"source\": \"apache\",\n \"extensions\": [\"fti\"]\n },\n \"application/vnd.antix.game-component\": {\n \"source\": \"iana\",\n \"extensions\": [\"atx\"]\n },\n \"application/vnd.apache.thrift.binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.compact\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.json\": {\n \"source\": \"iana\"\n },\n \"application/vnd.api+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apothekende.reservation+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apple.installer+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpkg\"]\n },\n \"application/vnd.apple.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"m3u8\"]\n },\n \"application/vnd.apple.pkpass\": {\n \"compressible\": false,\n \"extensions\": [\"pkpass\"]\n },\n \"application/vnd.arastra.swi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.aristanetworks.swi\": {\n \"source\": \"iana\",\n \"extensions\": [\"swi\"]\n },\n \"application/vnd.artsquare\": {\n \"source\": \"iana\"\n },\n \"application/vnd.astraea-software.iota\": {\n \"source\": \"iana\",\n \"extensions\": [\"iota\"]\n },\n \"application/vnd.audiograph\": {\n \"source\": \"iana\",\n \"extensions\": [\"aep\"]\n },\n \"application/vnd.autopackage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.avalon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.avistar+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.balsamiq.bmml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.balsamiq.bmpr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bekitzur-stech+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bint.med-content\": {\n \"source\": \"iana\"\n },\n \"application/vnd.biopax.rdf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blink-idb-value-wrapper\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blueice.multipass\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpm\"]\n },\n \"application/vnd.bluetooth.ep.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bluetooth.le.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bmi\": {\n \"source\": \"iana\",\n \"extensions\": [\"bmi\"]\n },\n \"application/vnd.businessobjects\": {\n \"source\": \"iana\",\n \"extensions\": [\"rep\"]\n },\n \"application/vnd.cab-jscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-cpdl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-lips\": {\n \"source\": \"iana\"\n },\n \"application/vnd.capasystems-pg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cendio.thinlinc.clientconf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.century-systems.tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chemdraw+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdxml\"]\n },\n \"application/vnd.chess-pgn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chipnuts.karaoke-mmd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmd\"]\n },\n \"application/vnd.cinderella\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdy\"]\n },\n \"application/vnd.cirpack.isdn-ext\": {\n \"source\": \"iana\"\n },\n \"application/vnd.citationstyles.style+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.claymore\": {\n \"source\": \"iana\",\n \"extensions\": [\"cla\"]\n },\n \"application/vnd.cloanto.rp9\": {\n \"source\": \"iana\",\n \"extensions\": [\"rp9\"]\n },\n \"application/vnd.clonk.c4group\": {\n \"source\": \"iana\",\n \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n },\n \"application/vnd.cluetrust.cartomobile-config\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amc\"]\n },\n \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amz\"]\n },\n \"application/vnd.coffeescript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collection+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.doc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.next+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.comicbook+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.comicbook-rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commerce-battelle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commonspace\": {\n \"source\": \"iana\",\n \"extensions\": [\"csp\"]\n },\n \"application/vnd.contact.cmsg\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdbcmsg\"]\n },\n \"application/vnd.coreos.ignition+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cosmocaller\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmc\"]\n },\n \"application/vnd.crick.clicker\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkx\"]\n },\n \"application/vnd.crick.clicker.keyboard\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkk\"]\n },\n \"application/vnd.crick.clicker.palette\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkp\"]\n },\n \"application/vnd.crick.clicker.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkt\"]\n },\n \"application/vnd.crick.clicker.wordbank\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkw\"]\n },\n \"application/vnd.criticaltools.wbs+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbs\"]\n },\n \"application/vnd.ctc-posml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pml\"]\n },\n \"application/vnd.ctct.ws+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-postscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-ppd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppd\"]\n },\n \"application/vnd.cups-raster\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-raw\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl.car\": {\n \"source\": \"apache\",\n \"extensions\": [\"car\"]\n },\n \"application/vnd.curl.pcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcurl\"]\n },\n \"application/vnd.cyan.dean.root+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cybank\": {\n \"source\": \"iana\"\n },\n \"application/vnd.d2l.coursepackage1p0+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dart\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dart\"]\n },\n \"application/vnd.data-vision.rdz\": {\n \"source\": \"iana\",\n \"extensions\": [\"rdz\"]\n },\n \"application/vnd.datapackage+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dataresource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.debian.binary-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dece.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n },\n \"application/vnd.dece.ttml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvt\",\"uvvt\"]\n },\n \"application/vnd.dece.unspecified\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvx\",\"uvvx\"]\n },\n \"application/vnd.dece.zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvz\",\"uvvz\"]\n },\n \"application/vnd.denovo.fcselayout-link\": {\n \"source\": \"iana\",\n \"extensions\": [\"fe_launch\"]\n },\n \"application/vnd.desmume-movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.desmume.movie\": {\n \"source\": \"apache\"\n },\n \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dm.delegation+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dna\": {\n \"source\": \"iana\",\n \"extensions\": [\"dna\"]\n },\n \"application/vnd.document+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dolby.mlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"mlp\"]\n },\n \"application/vnd.dolby.mobile.1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dolby.mobile.2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.doremir.scorecloud-binary-document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dpgraph\": {\n \"source\": \"iana\",\n \"extensions\": [\"dpg\"]\n },\n \"application/vnd.dreamfactory\": {\n \"source\": \"iana\",\n \"extensions\": [\"dfac\"]\n },\n \"application/vnd.drive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ds-keypoint\": {\n \"source\": \"apache\",\n \"extensions\": [\"kpxx\"]\n },\n \"application/vnd.dtg.local\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.flash\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ait\": {\n \"source\": \"iana\",\n \"extensions\": [\"ait\"]\n },\n \"application/vnd.dvb.dvbj\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.esgcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcdftnotifaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgpdd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcroaming\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-base\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-enhancement\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-aggregate-root+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-container+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-generic+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-ia-msglist+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-init+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.pfr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.service\": {\n \"source\": \"iana\",\n \"extensions\": [\"svc\"]\n },\n \"application/vnd.dxr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dynageo\": {\n \"source\": \"iana\",\n \"extensions\": [\"geo\"]\n },\n \"application/vnd.dzr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.easykaraoke.cdgdownload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecdis-update\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecip.rlp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"mag\"]\n },\n \"application/vnd.ecowin.filerequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.fileupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.series\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesrequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.img\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.iso\": {\n \"source\": \"iana\"\n },\n \"application/vnd.emclient.accessrequest+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.enliven\": {\n \"source\": \"iana\",\n \"extensions\": [\"nml\"]\n },\n \"application/vnd.enphase.envoy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eprints.data+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.epson.esf\": {\n \"source\": \"iana\",\n \"extensions\": [\"esf\"]\n },\n \"application/vnd.epson.msf\": {\n \"source\": \"iana\",\n \"extensions\": [\"msf\"]\n },\n \"application/vnd.epson.quickanime\": {\n \"source\": \"iana\",\n \"extensions\": [\"qam\"]\n },\n \"application/vnd.epson.salt\": {\n \"source\": \"iana\",\n \"extensions\": [\"slt\"]\n },\n \"application/vnd.epson.ssf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssf\"]\n },\n \"application/vnd.ericsson.quickcall\": {\n \"source\": \"iana\"\n },\n \"application/vnd.espass-espass+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eszigno3+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"es3\",\"et3\"]\n },\n \"application/vnd.etsi.aoc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.asic-e+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.asic-s+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.cug+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvcommand+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvdiscovery+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsad-bc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsad-cod+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsad-npvr+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvservice+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsync+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvueprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.mcid+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.mheg5\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.pstn+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.sci+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.simservs+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.timestamp-token\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl.der\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eudora.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.profile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.settings\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.theme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ezpix-album\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez2\"]\n },\n \"application/vnd.ezpix-package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez3\"]\n },\n \"application/vnd.f-secure.mobile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fastcopy-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"fdf\"]\n },\n \"application/vnd.fdsn.mseed\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseed\"]\n },\n \"application/vnd.fdsn.seed\": {\n \"source\": \"iana\",\n \"extensions\": [\"seed\",\"dataless\"]\n },\n \"application/vnd.ffsns\": {\n \"source\": \"iana\"\n },\n \"application/vnd.filmit.zfc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fints\": {\n \"source\": \"iana\"\n },\n \"application/vnd.firemonkeys.cloudcell\": {\n \"source\": \"iana\"\n },\n \"application/vnd.flographit\": {\n \"source\": \"iana\",\n \"extensions\": [\"gph\"]\n },\n \"application/vnd.fluxtime.clip\": {\n \"source\": \"iana\",\n \"extensions\": [\"ftc\"]\n },\n \"application/vnd.font-fontforge-sfd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.framemaker\": {\n \"source\": \"iana\",\n \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n },\n \"application/vnd.frogans.fnc\": {\n \"source\": \"iana\",\n \"extensions\": [\"fnc\"]\n },\n \"application/vnd.frogans.ltf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ltf\"]\n },\n \"application/vnd.fsc.weblaunch\": {\n \"source\": \"iana\",\n \"extensions\": [\"fsc\"]\n },\n \"application/vnd.fujitsu.oasys\": {\n \"source\": \"iana\",\n \"extensions\": [\"oas\"]\n },\n \"application/vnd.fujitsu.oasys2\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa2\"]\n },\n \"application/vnd.fujitsu.oasys3\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa3\"]\n },\n \"application/vnd.fujitsu.oasysgp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fg5\"]\n },\n \"application/vnd.fujitsu.oasysprs\": {\n \"source\": \"iana\",\n \"extensions\": [\"bh2\"]\n },\n \"application/vnd.fujixerox.art-ex\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.art4\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.ddd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ddd\"]\n },\n \"application/vnd.fujixerox.docuworks\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdw\"]\n },\n \"application/vnd.fujixerox.docuworks.binder\": {\n \"source\": \"iana\",\n \"extensions\": [\"xbd\"]\n },\n \"application/vnd.fujixerox.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.hbpl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fut-misnet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fuzzysheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fzs\"]\n },\n \"application/vnd.genomatix.tuxedo\": {\n \"source\": \"iana\",\n \"extensions\": [\"txd\"]\n },\n \"application/vnd.geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geocube+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.geogebra.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggb\"]\n },\n \"application/vnd.geogebra.tool\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggt\"]\n },\n \"application/vnd.geometry-explorer\": {\n \"source\": \"iana\",\n \"extensions\": [\"gex\",\"gre\"]\n },\n \"application/vnd.geonext\": {\n \"source\": \"iana\",\n \"extensions\": [\"gxt\"]\n },\n \"application/vnd.geoplan\": {\n \"source\": \"iana\",\n \"extensions\": [\"g2w\"]\n },\n \"application/vnd.geospace\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3w\"]\n },\n \"application/vnd.gerber\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gmx\": {\n \"source\": \"iana\",\n \"extensions\": [\"gmx\"]\n },\n \"application/vnd.google-apps.document\": {\n \"compressible\": false,\n \"extensions\": [\"gdoc\"]\n },\n \"application/vnd.google-apps.presentation\": {\n \"compressible\": false,\n \"extensions\": [\"gslides\"]\n },\n \"application/vnd.google-apps.spreadsheet\": {\n \"compressible\": false,\n \"extensions\": [\"gsheet\"]\n },\n \"application/vnd.google-earth.kml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"kml\"]\n },\n \"application/vnd.google-earth.kmz\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"kmz\"]\n },\n \"application/vnd.gov.sk.e-form+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gov.sk.e-form+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.grafeq\": {\n \"source\": \"iana\",\n \"extensions\": [\"gqf\",\"gqs\"]\n },\n \"application/vnd.gridmp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.groove-account\": {\n \"source\": \"iana\",\n \"extensions\": [\"gac\"]\n },\n \"application/vnd.groove-help\": {\n \"source\": \"iana\",\n \"extensions\": [\"ghf\"]\n },\n \"application/vnd.groove-identity-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gim\"]\n },\n \"application/vnd.groove-injector\": {\n \"source\": \"iana\",\n \"extensions\": [\"grv\"]\n },\n \"application/vnd.groove-tool-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtm\"]\n },\n \"application/vnd.groove-tool-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpl\"]\n },\n \"application/vnd.groove-vcard\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcg\"]\n },\n \"application/vnd.hal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hal+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"hal\"]\n },\n \"application/vnd.handheld-entertainment+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"zmm\"]\n },\n \"application/vnd.hbci\": {\n \"source\": \"iana\",\n \"extensions\": [\"hbci\"]\n },\n \"application/vnd.hc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hcl-bireports\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hdt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.heroku+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hhe.lesson-player\": {\n \"source\": \"iana\",\n \"extensions\": [\"les\"]\n },\n \"application/vnd.hp-hpgl\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpgl\"]\n },\n \"application/vnd.hp-hpid\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpid\"]\n },\n \"application/vnd.hp-hps\": {\n \"source\": \"iana\",\n \"extensions\": [\"hps\"]\n },\n \"application/vnd.hp-jlyt\": {\n \"source\": \"iana\",\n \"extensions\": [\"jlt\"]\n },\n \"application/vnd.hp-pcl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcl\"]\n },\n \"application/vnd.hp-pclxl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pclxl\"]\n },\n \"application/vnd.httphone\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hydrostatix.sof-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfd-hdstx\"]\n },\n \"application/vnd.hyper-item+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyperdrive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hzn-3d-crossword\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.electronic-media\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.minipay\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpy\"]\n },\n \"application/vnd.ibm.modcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n },\n \"application/vnd.ibm.rights-management\": {\n \"source\": \"iana\",\n \"extensions\": [\"irm\"]\n },\n \"application/vnd.ibm.secure-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"sc\"]\n },\n \"application/vnd.iccprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"icc\",\"icm\"]\n },\n \"application/vnd.ieee.1905\": {\n \"source\": \"iana\"\n },\n \"application/vnd.igloader\": {\n \"source\": \"iana\",\n \"extensions\": [\"igl\"]\n },\n \"application/vnd.imagemeter.folder+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.imagemeter.image+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.immervision-ivp\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivp\"]\n },\n \"application/vnd.immervision-ivu\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivu\"]\n },\n \"application/vnd.ims.imsccv1p1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.lis.v2.result+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informedcontrol.rms+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.informix-visionary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.innopath.wamp.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.insors.igm\": {\n \"source\": \"iana\",\n \"extensions\": [\"igm\"]\n },\n \"application/vnd.intercon.formnet\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpw\",\"xpx\"]\n },\n \"application/vnd.intergeo\": {\n \"source\": \"iana\",\n \"extensions\": [\"i2g\"]\n },\n \"application/vnd.intertrust.digibox\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intertrust.nncp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intu.qbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"qbo\"]\n },\n \"application/vnd.intu.qfx\": {\n \"source\": \"iana\",\n \"extensions\": [\"qfx\"]\n },\n \"application/vnd.iptc.g2.catalogitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.conceptitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.newsitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.newsmessage+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.packageitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.planningitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ipunplugged.rcprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"rcprofile\"]\n },\n \"application/vnd.irepository.package+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"irp\"]\n },\n \"application/vnd.is-xpr\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpr\"]\n },\n \"application/vnd.isac.fcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcs\"]\n },\n \"application/vnd.jam\": {\n \"source\": \"iana\",\n \"extensions\": [\"jam\"]\n },\n \"application/vnd.japannet-directory-service\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-jpnstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-payment-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-setstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.jcp.javame.midlet-rms\": {\n \"source\": \"iana\",\n \"extensions\": [\"rms\"]\n },\n \"application/vnd.jisp\": {\n \"source\": \"iana\",\n \"extensions\": [\"jisp\"]\n },\n \"application/vnd.joost.joda-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"joda\"]\n },\n \"application/vnd.jsk.isdn-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.kahootz\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktz\",\"ktr\"]\n },\n \"application/vnd.kde.karbon\": {\n \"source\": \"iana\",\n \"extensions\": [\"karbon\"]\n },\n \"application/vnd.kde.kchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"chrt\"]\n },\n \"application/vnd.kde.kformula\": {\n \"source\": \"iana\",\n \"extensions\": [\"kfo\"]\n },\n \"application/vnd.kde.kivio\": {\n \"source\": \"iana\",\n \"extensions\": [\"flw\"]\n },\n \"application/vnd.kde.kontour\": {\n \"source\": \"iana\",\n \"extensions\": [\"kon\"]\n },\n \"application/vnd.kde.kpresenter\": {\n \"source\": \"iana\",\n \"extensions\": [\"kpr\",\"kpt\"]\n },\n \"application/vnd.kde.kspread\": {\n \"source\": \"iana\",\n \"extensions\": [\"ksp\"]\n },\n \"application/vnd.kde.kword\": {\n \"source\": \"iana\",\n \"extensions\": [\"kwd\",\"kwt\"]\n },\n \"application/vnd.kenameaapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"htke\"]\n },\n \"application/vnd.kidspiration\": {\n \"source\": \"iana\",\n \"extensions\": [\"kia\"]\n },\n \"application/vnd.kinar\": {\n \"source\": \"iana\",\n \"extensions\": [\"kne\",\"knp\"]\n },\n \"application/vnd.koan\": {\n \"source\": \"iana\",\n \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n },\n \"application/vnd.kodak-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"sse\"]\n },\n \"application/vnd.las.las+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.las.las+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"lasxml\"]\n },\n \"application/vnd.liberty-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.llamagraphics.life-balance.desktop\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbd\"]\n },\n \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbe\"]\n },\n \"application/vnd.lotus-1-2-3\": {\n \"source\": \"iana\",\n \"extensions\": [\"123\"]\n },\n \"application/vnd.lotus-approach\": {\n \"source\": \"iana\",\n \"extensions\": [\"apr\"]\n },\n \"application/vnd.lotus-freelance\": {\n \"source\": \"iana\",\n \"extensions\": [\"pre\"]\n },\n \"application/vnd.lotus-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"nsf\"]\n },\n \"application/vnd.lotus-organizer\": {\n \"source\": \"iana\",\n \"extensions\": [\"org\"]\n },\n \"application/vnd.lotus-screencam\": {\n \"source\": \"iana\",\n \"extensions\": [\"scm\"]\n },\n \"application/vnd.lotus-wordpro\": {\n \"source\": \"iana\",\n \"extensions\": [\"lwp\"]\n },\n \"application/vnd.macports.portpkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"portpkg\"]\n },\n \"application/vnd.mapbox-vector-tile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.actiontoken+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.conftoken+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.license+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.mdcf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mason+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.maxmind.maxmind-db\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mcd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mcd\"]\n },\n \"application/vnd.medcalcdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"mc1\"]\n },\n \"application/vnd.mediastation.cdkey\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdkey\"]\n },\n \"application/vnd.meridian-slingshot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mfer\": {\n \"source\": \"iana\",\n \"extensions\": [\"mwf\"]\n },\n \"application/vnd.mfmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"mfm\"]\n },\n \"application/vnd.micro+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.micrografx.flo\": {\n \"source\": \"iana\",\n \"extensions\": [\"flo\"]\n },\n \"application/vnd.micrografx.igx\": {\n \"source\": \"iana\",\n \"extensions\": [\"igx\"]\n },\n \"application/vnd.microsoft.portable-executable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.microsoft.windows.thumbnail-cache\": {\n \"source\": \"iana\"\n },\n \"application/vnd.miele+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.mif\": {\n \"source\": \"iana\",\n \"extensions\": [\"mif\"]\n },\n \"application/vnd.minisoft-hp3000-save\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mobius.daf\": {\n \"source\": \"iana\",\n \"extensions\": [\"daf\"]\n },\n \"application/vnd.mobius.dis\": {\n \"source\": \"iana\",\n \"extensions\": [\"dis\"]\n },\n \"application/vnd.mobius.mbk\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbk\"]\n },\n \"application/vnd.mobius.mqy\": {\n \"source\": \"iana\",\n \"extensions\": [\"mqy\"]\n },\n \"application/vnd.mobius.msl\": {\n \"source\": \"iana\",\n \"extensions\": [\"msl\"]\n },\n \"application/vnd.mobius.plc\": {\n \"source\": \"iana\",\n \"extensions\": [\"plc\"]\n },\n \"application/vnd.mobius.txf\": {\n \"source\": \"iana\",\n \"extensions\": [\"txf\"]\n },\n \"application/vnd.mophun.application\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpn\"]\n },\n \"application/vnd.mophun.certificate\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpc\"]\n },\n \"application/vnd.motorola.flexsuite\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.adsi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.fis\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.gotap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.kmr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.ttc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.wem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.iprm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mozilla.xul+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xul\"]\n },\n \"application/vnd.ms-3mfdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-artgalry\": {\n \"source\": \"iana\",\n \"extensions\": [\"cil\"]\n },\n \"application/vnd.ms-asf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-cab-compressed\": {\n \"source\": \"iana\",\n \"extensions\": [\"cab\"]\n },\n \"application/vnd.ms-color.iccprofile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-excel\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n },\n \"application/vnd.ms-excel.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlam\"]\n },\n \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsb\"]\n },\n \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsm\"]\n },\n \"application/vnd.ms-excel.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltm\"]\n },\n \"application/vnd.ms-fontobject\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eot\"]\n },\n \"application/vnd.ms-htmlhelp\": {\n \"source\": \"iana\",\n \"extensions\": [\"chm\"]\n },\n \"application/vnd.ms-ims\": {\n \"source\": \"iana\",\n \"extensions\": [\"ims\"]\n },\n \"application/vnd.ms-lrm\": {\n \"source\": \"iana\",\n \"extensions\": [\"lrm\"]\n },\n \"application/vnd.ms-office.activex+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-officetheme\": {\n \"source\": \"iana\",\n \"extensions\": [\"thmx\"]\n },\n \"application/vnd.ms-opentype\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-outlook\": {\n \"compressible\": false,\n \"extensions\": [\"msg\"]\n },\n \"application/vnd.ms-package.obfuscated-opentype\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-pki.seccat\": {\n \"source\": \"apache\",\n \"extensions\": [\"cat\"]\n },\n \"application/vnd.ms-pki.stl\": {\n \"source\": \"apache\",\n \"extensions\": [\"stl\"]\n },\n \"application/vnd.ms-playready.initiator+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-powerpoint\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n },\n \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppam\"]\n },\n \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"pptm\"]\n },\n \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldm\"]\n },\n \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsm\"]\n },\n \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"potm\"]\n },\n \"application/vnd.ms-printdevicecapabilities+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-printing.printticket+xml\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-printschematicket+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-project\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpp\",\"mpt\"]\n },\n \"application/vnd.ms-tnef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.nwprinting.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.printerpairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.wsd.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-word.document.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"docm\"]\n },\n \"application/vnd.ms-word.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotm\"]\n },\n \"application/vnd.ms-works\": {\n \"source\": \"iana\",\n \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n },\n \"application/vnd.ms-wpl\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpl\"]\n },\n \"application/vnd.ms-xpsdocument\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xps\"]\n },\n \"application/vnd.msa-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mseq\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseq\"]\n },\n \"application/vnd.msign\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator.cif\": {\n \"source\": \"iana\"\n },\n \"application/vnd.music-niff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.musician\": {\n \"source\": \"iana\",\n \"extensions\": [\"mus\"]\n },\n \"application/vnd.muvee.style\": {\n \"source\": \"iana\",\n \"extensions\": [\"msty\"]\n },\n \"application/vnd.mynfc\": {\n \"source\": \"iana\",\n \"extensions\": [\"taglet\"]\n },\n \"application/vnd.ncd.control\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ncd.reference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nearst.inv+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nervana\": {\n \"source\": \"iana\"\n },\n \"application/vnd.netfpx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.neurolanguage.nlu\": {\n \"source\": \"iana\",\n \"extensions\": [\"nlu\"]\n },\n \"application/vnd.nintendo.nitro.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.snes.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nitf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ntf\",\"nitf\"]\n },\n \"application/vnd.noblenet-directory\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnd\"]\n },\n \"application/vnd.noblenet-sealer\": {\n \"source\": \"iana\",\n \"extensions\": [\"nns\"]\n },\n \"application/vnd.noblenet-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnw\"]\n },\n \"application/vnd.nokia.catalogs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.iptv.config+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.isds-radio-presets\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmarkcollection+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.n-gage.ac+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.n-gage.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"ngdat\"]\n },\n \"application/vnd.nokia.n-gage.symbian.install\": {\n \"source\": \"iana\",\n \"extensions\": [\"n-gage\"]\n },\n \"application/vnd.nokia.ncd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.radio-preset\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpst\"]\n },\n \"application/vnd.nokia.radio-presets\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpss\"]\n },\n \"application/vnd.novadigm.edm\": {\n \"source\": \"iana\",\n \"extensions\": [\"edm\"]\n },\n \"application/vnd.novadigm.edx\": {\n \"source\": \"iana\",\n \"extensions\": [\"edx\"]\n },\n \"application/vnd.novadigm.ext\": {\n \"source\": \"iana\",\n \"extensions\": [\"ext\"]\n },\n \"application/vnd.ntt-local.content-share\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.file-transfer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.ogw_remote-access\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_remote\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oasis.opendocument.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"odc\"]\n },\n \"application/vnd.oasis.opendocument.chart-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otc\"]\n },\n \"application/vnd.oasis.opendocument.database\": {\n \"source\": \"iana\",\n \"extensions\": [\"odb\"]\n },\n \"application/vnd.oasis.opendocument.formula\": {\n \"source\": \"iana\",\n \"extensions\": [\"odf\"]\n },\n \"application/vnd.oasis.opendocument.formula-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"odft\"]\n },\n \"application/vnd.oasis.opendocument.graphics\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odg\"]\n },\n \"application/vnd.oasis.opendocument.graphics-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otg\"]\n },\n \"application/vnd.oasis.opendocument.image\": {\n \"source\": \"iana\",\n \"extensions\": [\"odi\"]\n },\n \"application/vnd.oasis.opendocument.image-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"oti\"]\n },\n \"application/vnd.oasis.opendocument.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odp\"]\n },\n \"application/vnd.oasis.opendocument.presentation-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otp\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ods\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ots\"]\n },\n \"application/vnd.oasis.opendocument.text\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odt\"]\n },\n \"application/vnd.oasis.opendocument.text-master\": {\n \"source\": \"iana\",\n \"extensions\": [\"odm\"]\n },\n \"application/vnd.oasis.opendocument.text-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ott\"]\n },\n \"application/vnd.oasis.opendocument.text-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"oth\"]\n },\n \"application/vnd.obn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ocf+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oftn.l10n+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessdownload+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.contentaccessstreaming+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.cspg-hexbinary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.svg+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.xhtml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.pae.gem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdiscovery+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdlist+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.ueprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.userprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.olpc-sugar\": {\n \"source\": \"iana\",\n \"extensions\": [\"xo\"]\n },\n \"application/vnd.oma-scws-config\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-request\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.drm-trigger+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.imd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.ltkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.notification+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.provisioningtrigger\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgboot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdu\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.simple-symbol-container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sprov+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.stkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-address-book+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-feature-handler+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-pcc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-subs-invite+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-user-prefs+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcdc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dd2+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"dd2\"]\n },\n \"application/vnd.oma.drm.risd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.group-usage-list+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.lwm2m+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+tlv\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.pal+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.final-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.groups+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.push\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.scidm.messages+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.xcap-directory+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omads-email+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omads-file+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omads-folder+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omaloc-supl-init\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepager\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertat\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game-binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openeye.oeb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openofficeorg.extension\": {\n \"source\": \"apache\",\n \"extensions\": [\"oxt\"]\n },\n \"application/vnd.openstreetmap.data+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pptx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"potx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xlsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"docx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-package.core-properties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-package.relationships+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oracle.resource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.orange.indata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osa.netdeploy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgeo.mapguide.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgp\"]\n },\n \"application/vnd.osgi.bundle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgi.dp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dp\"]\n },\n \"application/vnd.osgi.subsystem\": {\n \"source\": \"iana\",\n \"extensions\": [\"esa\"]\n },\n \"application/vnd.otps.ct-kip+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oxli.countgraph\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pagerduty+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.palm\": {\n \"source\": \"iana\",\n \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n },\n \"application/vnd.panoply\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos.xml\": {\n \"source\": \"apache\"\n },\n \"application/vnd.patentdive\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pawaafile\": {\n \"source\": \"iana\",\n \"extensions\": [\"paw\"]\n },\n \"application/vnd.pcos\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pg.format\": {\n \"source\": \"iana\",\n \"extensions\": [\"str\"]\n },\n \"application/vnd.pg.osasli\": {\n \"source\": \"iana\",\n \"extensions\": [\"ei6\"]\n },\n \"application/vnd.piaccess.application-licence\": {\n \"source\": \"iana\"\n },\n \"application/vnd.picsel\": {\n \"source\": \"iana\",\n \"extensions\": [\"efif\"]\n },\n \"application/vnd.pmi.widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wg\"]\n },\n \"application/vnd.poc.group-advertisement+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pocketlearn\": {\n \"source\": \"iana\",\n \"extensions\": [\"plf\"]\n },\n \"application/vnd.powerbuilder6\": {\n \"source\": \"iana\",\n \"extensions\": [\"pbd\"]\n },\n \"application/vnd.powerbuilder6-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.preminet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.previewsystems.box\": {\n \"source\": \"iana\",\n \"extensions\": [\"box\"]\n },\n \"application/vnd.proteus.magazine\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgz\"]\n },\n \"application/vnd.publishare-delta-tree\": {\n \"source\": \"iana\",\n \"extensions\": [\"qps\"]\n },\n \"application/vnd.pvi.ptid1\": {\n \"source\": \"iana\",\n \"extensions\": [\"ptid\"]\n },\n \"application/vnd.pwg-multiplexed\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pwg-xhtml-print+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.qualcomm.brew-app-res\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quarantainenet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quark.quarkxpress\": {\n \"source\": \"iana\",\n \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n },\n \"application/vnd.quobject-quoxdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.moml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-conf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-conn+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-dialog+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-stream+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-conf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-base+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-group+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-speech+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-transform+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rainstor.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rapid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.realvnc.bed\": {\n \"source\": \"iana\",\n \"extensions\": [\"bed\"]\n },\n \"application/vnd.recordare.musicxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxl\"]\n },\n \"application/vnd.recordare.musicxml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"musicxml\"]\n },\n \"application/vnd.renlearn.rlprint\": {\n \"source\": \"iana\"\n },\n \"application/vnd.restful+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rig.cryptonote\": {\n \"source\": \"iana\",\n \"extensions\": [\"cryptonote\"]\n },\n \"application/vnd.rim.cod\": {\n \"source\": \"apache\",\n \"extensions\": [\"cod\"]\n },\n \"application/vnd.rn-realmedia\": {\n \"source\": \"apache\",\n \"extensions\": [\"rm\"]\n },\n \"application/vnd.rn-realmedia-vbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmvb\"]\n },\n \"application/vnd.route66.link66+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"link66\"]\n },\n \"application/vnd.rs-274x\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ruckus.download\": {\n \"source\": \"iana\"\n },\n \"application/vnd.s3sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sailingtracker.track\": {\n \"source\": \"iana\",\n \"extensions\": [\"st\"]\n },\n \"application/vnd.sbm.cid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.mid2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.scribus\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.3df\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.csf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.doc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.eml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.mht\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.net\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.ppt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.tiff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.xls\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.seemail\": {\n \"source\": \"iana\",\n \"extensions\": [\"see\"]\n },\n \"application/vnd.sema\": {\n \"source\": \"iana\",\n \"extensions\": [\"sema\"]\n },\n \"application/vnd.semd\": {\n \"source\": \"iana\",\n \"extensions\": [\"semd\"]\n },\n \"application/vnd.semf\": {\n \"source\": \"iana\",\n \"extensions\": [\"semf\"]\n },\n \"application/vnd.shana.informed.formdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"ifm\"]\n },\n \"application/vnd.shana.informed.formtemplate\": {\n \"source\": \"iana\",\n \"extensions\": [\"itp\"]\n },\n \"application/vnd.shana.informed.interchange\": {\n \"source\": \"iana\",\n \"extensions\": [\"iif\"]\n },\n \"application/vnd.shana.informed.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipk\"]\n },\n \"application/vnd.sigrok.session\": {\n \"source\": \"iana\"\n },\n \"application/vnd.simtech-mindmapper\": {\n \"source\": \"iana\",\n \"extensions\": [\"twd\",\"twds\"]\n },\n \"application/vnd.siren+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.smaf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmf\"]\n },\n \"application/vnd.smart.notebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.smart.teacher\": {\n \"source\": \"iana\",\n \"extensions\": [\"teacher\"]\n },\n \"application/vnd.software602.filler.form+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.software602.filler.form-xml-zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.solent.sdkm+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdkm\",\"sdkd\"]\n },\n \"application/vnd.spotfire.dxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxp\"]\n },\n \"application/vnd.spotfire.sfs\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfs\"]\n },\n \"application/vnd.sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-cod\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-dtf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-ntf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.stardivision.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdc\"]\n },\n \"application/vnd.stardivision.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sda\"]\n },\n \"application/vnd.stardivision.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdd\"]\n },\n \"application/vnd.stardivision.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"smf\"]\n },\n \"application/vnd.stardivision.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdw\",\"vor\"]\n },\n \"application/vnd.stardivision.writer-global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgl\"]\n },\n \"application/vnd.stepmania.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"smzip\"]\n },\n \"application/vnd.stepmania.stepchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"sm\"]\n },\n \"application/vnd.street-stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sun.wadl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wadl\"]\n },\n \"application/vnd.sun.xml.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxc\"]\n },\n \"application/vnd.sun.xml.calc.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stc\"]\n },\n \"application/vnd.sun.xml.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxd\"]\n },\n \"application/vnd.sun.xml.draw.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"std\"]\n },\n \"application/vnd.sun.xml.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxi\"]\n },\n \"application/vnd.sun.xml.impress.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"sti\"]\n },\n \"application/vnd.sun.xml.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxm\"]\n },\n \"application/vnd.sun.xml.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxw\"]\n },\n \"application/vnd.sun.xml.writer.global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxg\"]\n },\n \"application/vnd.sun.xml.writer.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stw\"]\n },\n \"application/vnd.sus-calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"sus\",\"susp\"]\n },\n \"application/vnd.svd\": {\n \"source\": \"iana\",\n \"extensions\": [\"svd\"]\n },\n \"application/vnd.swiftview-ics\": {\n \"source\": \"iana\"\n },\n \"application/vnd.symbian.install\": {\n \"source\": \"apache\",\n \"extensions\": [\"sis\",\"sisx\"]\n },\n \"application/vnd.syncml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xsm\"]\n },\n \"application/vnd.syncml.dm+wbxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"bdm\"]\n },\n \"application/vnd.syncml.dm+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdm\"]\n },\n \"application/vnd.syncml.dm.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.ds.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tableschema+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tao.intent-module-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"tao\"]\n },\n \"application/vnd.tcpdump.pcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n },\n \"application/vnd.tmd.mediaflex.api+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tmobile-livetv\": {\n \"source\": \"iana\",\n \"extensions\": [\"tmo\"]\n },\n \"application/vnd.tri.onesource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.trid.tpt\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpt\"]\n },\n \"application/vnd.triscape.mxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxs\"]\n },\n \"application/vnd.trueapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"tra\"]\n },\n \"application/vnd.truedoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ubisoft.webplayer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ufdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"ufd\",\"ufdl\"]\n },\n \"application/vnd.uiq.theme\": {\n \"source\": \"iana\",\n \"extensions\": [\"utz\"]\n },\n \"application/vnd.umajin\": {\n \"source\": \"iana\",\n \"extensions\": [\"umj\"]\n },\n \"application/vnd.unity\": {\n \"source\": \"iana\",\n \"extensions\": [\"unityweb\"]\n },\n \"application/vnd.uoml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"uoml\"]\n },\n \"application/vnd.uplanet.alert\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.alert-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.signal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uri-map\": {\n \"source\": \"iana\"\n },\n \"application/vnd.valve.source.material\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcx\"]\n },\n \"application/vnd.vd-study\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vectorworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vel+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.verimatrix.vcas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vidsoft.vidconference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.visio\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n },\n \"application/vnd.visionary\": {\n \"source\": \"iana\",\n \"extensions\": [\"vis\"]\n },\n \"application/vnd.vividence.scriptfile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vsf\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsf\"]\n },\n \"application/vnd.wap.sic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.slc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.wbxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbxml\"]\n },\n \"application/vnd.wap.wmlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlc\"]\n },\n \"application/vnd.wap.wmlscriptc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlsc\"]\n },\n \"application/vnd.webturbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"wtb\"]\n },\n \"application/vnd.wfa.p2p\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.wsc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmf.bootstrap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica.package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.player\": {\n \"source\": \"iana\",\n \"extensions\": [\"nbp\"]\n },\n \"application/vnd.wordperfect\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpd\"]\n },\n \"application/vnd.wqd\": {\n \"source\": \"iana\",\n \"extensions\": [\"wqd\"]\n },\n \"application/vnd.wrq-hp3000-labelled\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wt.stf\": {\n \"source\": \"iana\",\n \"extensions\": [\"stf\"]\n },\n \"application/vnd.wv.csp+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.csp+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.ssp+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xacml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xara\": {\n \"source\": \"iana\",\n \"extensions\": [\"xar\"]\n },\n \"application/vnd.xfdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdl\"]\n },\n \"application/vnd.xfdl.webform\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmi+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.cpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.dpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.plan\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.ppkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.xlim\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.hv-dic\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvd\"]\n },\n \"application/vnd.yamaha.hv-script\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvs\"]\n },\n \"application/vnd.yamaha.hv-voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvp\"]\n },\n \"application/vnd.yamaha.openscoreformat\": {\n \"source\": \"iana\",\n \"extensions\": [\"osf\"]\n },\n \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"osfpvg\"]\n },\n \"application/vnd.yamaha.remote-setup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.smaf-audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"saf\"]\n },\n \"application/vnd.yamaha.smaf-phrase\": {\n \"source\": \"iana\",\n \"extensions\": [\"spf\"]\n },\n \"application/vnd.yamaha.through-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.tunnel-udpencap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yaoweme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yellowriver-custom-menu\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmp\"]\n },\n \"application/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.zul\": {\n \"source\": \"iana\",\n \"extensions\": [\"zir\",\"zirz\"]\n },\n \"application/vnd.zzazz.deck+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"zaz\"]\n },\n \"application/voicexml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"vxml\"]\n },\n \"application/voucher-cms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vq-rtcpxr\": {\n \"source\": \"iana\"\n },\n \"application/wasm\": {\n \"compressible\": true,\n \"extensions\": [\"wasm\"]\n },\n \"application/watcherinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/webpush-options+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/whoispp-query\": {\n \"source\": \"iana\"\n },\n \"application/whoispp-response\": {\n \"source\": \"iana\"\n },\n \"application/widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wgt\"]\n },\n \"application/winhlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"hlp\"]\n },\n \"application/wita\": {\n \"source\": \"iana\"\n },\n \"application/wordperfect5.1\": {\n \"source\": \"iana\"\n },\n \"application/wsdl+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsdl\"]\n },\n \"application/wspolicy+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wspolicy\"]\n },\n \"application/x-7z-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"7z\"]\n },\n \"application/x-abiword\": {\n \"source\": \"apache\",\n \"extensions\": [\"abw\"]\n },\n \"application/x-ace-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"ace\"]\n },\n \"application/x-amf\": {\n \"source\": \"apache\"\n },\n \"application/x-apple-diskimage\": {\n \"source\": \"apache\",\n \"extensions\": [\"dmg\"]\n },\n \"application/x-arj\": {\n \"compressible\": false,\n \"extensions\": [\"arj\"]\n },\n \"application/x-authorware-bin\": {\n \"source\": \"apache\",\n \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n },\n \"application/x-authorware-map\": {\n \"source\": \"apache\",\n \"extensions\": [\"aam\"]\n },\n \"application/x-authorware-seg\": {\n \"source\": \"apache\",\n \"extensions\": [\"aas\"]\n },\n \"application/x-bcpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"bcpio\"]\n },\n \"application/x-bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/x-bittorrent\": {\n \"source\": \"apache\",\n \"extensions\": [\"torrent\"]\n },\n \"application/x-blorb\": {\n \"source\": \"apache\",\n \"extensions\": [\"blb\",\"blorb\"]\n },\n \"application/x-bzip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz\"]\n },\n \"application/x-bzip2\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz2\",\"boz\"]\n },\n \"application/x-cbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n },\n \"application/x-cdlink\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcd\"]\n },\n \"application/x-cfs-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"cfs\"]\n },\n \"application/x-chat\": {\n \"source\": \"apache\",\n \"extensions\": [\"chat\"]\n },\n \"application/x-chess-pgn\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgn\"]\n },\n \"application/x-chrome-extension\": {\n \"extensions\": [\"crx\"]\n },\n \"application/x-cocoa\": {\n \"source\": \"nginx\",\n \"extensions\": [\"cco\"]\n },\n \"application/x-compress\": {\n \"source\": \"apache\"\n },\n \"application/x-conference\": {\n \"source\": \"apache\",\n \"extensions\": [\"nsc\"]\n },\n \"application/x-cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpio\"]\n },\n \"application/x-csh\": {\n \"source\": \"apache\",\n \"extensions\": [\"csh\"]\n },\n \"application/x-deb\": {\n \"compressible\": false\n },\n \"application/x-debian-package\": {\n \"source\": \"apache\",\n \"extensions\": [\"deb\",\"udeb\"]\n },\n \"application/x-dgc-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"dgc\"]\n },\n \"application/x-director\": {\n \"source\": \"apache\",\n \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n },\n \"application/x-doom\": {\n \"source\": \"apache\",\n \"extensions\": [\"wad\"]\n },\n \"application/x-dtbncx+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"ncx\"]\n },\n \"application/x-dtbook+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"dtb\"]\n },\n \"application/x-dtbresource+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"res\"]\n },\n \"application/x-dvi\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"dvi\"]\n },\n \"application/x-envoy\": {\n \"source\": \"apache\",\n \"extensions\": [\"evy\"]\n },\n \"application/x-eva\": {\n \"source\": \"apache\",\n \"extensions\": [\"eva\"]\n },\n \"application/x-font-bdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"bdf\"]\n },\n \"application/x-font-dos\": {\n \"source\": \"apache\"\n },\n \"application/x-font-framemaker\": {\n \"source\": \"apache\"\n },\n \"application/x-font-ghostscript\": {\n \"source\": \"apache\",\n \"extensions\": [\"gsf\"]\n },\n \"application/x-font-libgrx\": {\n \"source\": \"apache\"\n },\n \"application/x-font-linux-psf\": {\n \"source\": \"apache\",\n \"extensions\": [\"psf\"]\n },\n \"application/x-font-pcf\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcf\"]\n },\n \"application/x-font-snf\": {\n \"source\": \"apache\",\n \"extensions\": [\"snf\"]\n },\n \"application/x-font-speedo\": {\n \"source\": \"apache\"\n },\n \"application/x-font-sunos-news\": {\n \"source\": \"apache\"\n },\n \"application/x-font-type1\": {\n \"source\": \"apache\",\n \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n },\n \"application/x-font-vfont\": {\n \"source\": \"apache\"\n },\n \"application/x-freearc\": {\n \"source\": \"apache\",\n \"extensions\": [\"arc\"]\n },\n \"application/x-futuresplash\": {\n \"source\": \"apache\",\n \"extensions\": [\"spl\"]\n },\n \"application/x-gca-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"gca\"]\n },\n \"application/x-glulx\": {\n \"source\": \"apache\",\n \"extensions\": [\"ulx\"]\n },\n \"application/x-gnumeric\": {\n \"source\": \"apache\",\n \"extensions\": [\"gnumeric\"]\n },\n \"application/x-gramps-xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gramps\"]\n },\n \"application/x-gtar\": {\n \"source\": \"apache\",\n \"extensions\": [\"gtar\"]\n },\n \"application/x-gzip\": {\n \"source\": \"apache\"\n },\n \"application/x-hdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"hdf\"]\n },\n \"application/x-httpd-php\": {\n \"compressible\": true,\n \"extensions\": [\"php\"]\n },\n \"application/x-install-instructions\": {\n \"source\": \"apache\",\n \"extensions\": [\"install\"]\n },\n \"application/x-iso9660-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"iso\"]\n },\n \"application/x-java-archive-diff\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jardiff\"]\n },\n \"application/x-java-jnlp-file\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jnlp\"]\n },\n \"application/x-javascript\": {\n \"compressible\": true\n },\n \"application/x-latex\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"latex\"]\n },\n \"application/x-lua-bytecode\": {\n \"extensions\": [\"luac\"]\n },\n \"application/x-lzh-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"lzh\",\"lha\"]\n },\n \"application/x-makeself\": {\n \"source\": \"nginx\",\n \"extensions\": [\"run\"]\n },\n \"application/x-mie\": {\n \"source\": \"apache\",\n \"extensions\": [\"mie\"]\n },\n \"application/x-mobipocket-ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"prc\",\"mobi\"]\n },\n \"application/x-mpegurl\": {\n \"compressible\": false\n },\n \"application/x-ms-application\": {\n \"source\": \"apache\",\n \"extensions\": [\"application\"]\n },\n \"application/x-ms-shortcut\": {\n \"source\": \"apache\",\n \"extensions\": [\"lnk\"]\n },\n \"application/x-ms-wmd\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmd\"]\n },\n \"application/x-ms-wmz\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmz\"]\n },\n \"application/x-ms-xbap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbap\"]\n },\n \"application/x-msaccess\": {\n \"source\": \"apache\",\n \"extensions\": [\"mdb\"]\n },\n \"application/x-msbinder\": {\n \"source\": \"apache\",\n \"extensions\": [\"obd\"]\n },\n \"application/x-mscardfile\": {\n \"source\": \"apache\",\n \"extensions\": [\"crd\"]\n },\n \"application/x-msclip\": {\n \"source\": \"apache\",\n \"extensions\": [\"clp\"]\n },\n \"application/x-msdos-program\": {\n \"extensions\": [\"exe\"]\n },\n \"application/x-msdownload\": {\n \"source\": \"apache\",\n \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n },\n \"application/x-msmediaview\": {\n \"source\": \"apache\",\n \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n },\n \"application/x-msmetafile\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n },\n \"application/x-msmoney\": {\n \"source\": \"apache\",\n \"extensions\": [\"mny\"]\n },\n \"application/x-mspublisher\": {\n \"source\": \"apache\",\n \"extensions\": [\"pub\"]\n },\n \"application/x-msschedule\": {\n \"source\": \"apache\",\n \"extensions\": [\"scd\"]\n },\n \"application/x-msterminal\": {\n \"source\": \"apache\",\n \"extensions\": [\"trm\"]\n },\n \"application/x-mswrite\": {\n \"source\": \"apache\",\n \"extensions\": [\"wri\"]\n },\n \"application/x-netcdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"nc\",\"cdf\"]\n },\n \"application/x-ns-proxy-autoconfig\": {\n \"compressible\": true,\n \"extensions\": [\"pac\"]\n },\n \"application/x-nzb\": {\n \"source\": \"apache\",\n \"extensions\": [\"nzb\"]\n },\n \"application/x-perl\": {\n \"source\": \"nginx\",\n \"extensions\": [\"pl\",\"pm\"]\n },\n \"application/x-pilot\": {\n \"source\": \"nginx\",\n \"extensions\": [\"prc\",\"pdb\"]\n },\n \"application/x-pkcs12\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"p12\",\"pfx\"]\n },\n \"application/x-pkcs7-certificates\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7b\",\"spc\"]\n },\n \"application/x-pkcs7-certreqresp\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7r\"]\n },\n \"application/x-rar-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"rar\"]\n },\n \"application/x-redhat-package-manager\": {\n \"source\": \"nginx\",\n \"extensions\": [\"rpm\"]\n },\n \"application/x-research-info-systems\": {\n \"source\": \"apache\",\n \"extensions\": [\"ris\"]\n },\n \"application/x-sea\": {\n \"source\": \"nginx\",\n \"extensions\": [\"sea\"]\n },\n \"application/x-sh\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"sh\"]\n },\n \"application/x-shar\": {\n \"source\": \"apache\",\n \"extensions\": [\"shar\"]\n },\n \"application/x-shockwave-flash\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"swf\"]\n },\n \"application/x-silverlight-app\": {\n \"source\": \"apache\",\n \"extensions\": [\"xap\"]\n },\n \"application/x-sql\": {\n \"source\": \"apache\",\n \"extensions\": [\"sql\"]\n },\n \"application/x-stuffit\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"sit\"]\n },\n \"application/x-stuffitx\": {\n \"source\": \"apache\",\n \"extensions\": [\"sitx\"]\n },\n \"application/x-subrip\": {\n \"source\": \"apache\",\n \"extensions\": [\"srt\"]\n },\n \"application/x-sv4cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4cpio\"]\n },\n \"application/x-sv4crc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4crc\"]\n },\n \"application/x-t3vm-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"t3\"]\n },\n \"application/x-tads\": {\n \"source\": \"apache\",\n \"extensions\": [\"gam\"]\n },\n \"application/x-tar\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"tar\"]\n },\n \"application/x-tcl\": {\n \"source\": \"apache\",\n \"extensions\": [\"tcl\",\"tk\"]\n },\n \"application/x-tex\": {\n \"source\": \"apache\",\n \"extensions\": [\"tex\"]\n },\n \"application/x-tex-tfm\": {\n \"source\": \"apache\",\n \"extensions\": [\"tfm\"]\n },\n \"application/x-texinfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"texinfo\",\"texi\"]\n },\n \"application/x-tgif\": {\n \"source\": \"apache\",\n \"extensions\": [\"obj\"]\n },\n \"application/x-ustar\": {\n \"source\": \"apache\",\n \"extensions\": [\"ustar\"]\n },\n \"application/x-virtualbox-hdd\": {\n \"compressible\": true,\n \"extensions\": [\"hdd\"]\n },\n \"application/x-virtualbox-ova\": {\n \"compressible\": true,\n \"extensions\": [\"ova\"]\n },\n \"application/x-virtualbox-ovf\": {\n \"compressible\": true,\n \"extensions\": [\"ovf\"]\n },\n \"application/x-virtualbox-vbox\": {\n \"compressible\": true,\n \"extensions\": [\"vbox\"]\n },\n \"application/x-virtualbox-vbox-extpack\": {\n \"compressible\": false,\n \"extensions\": [\"vbox-extpack\"]\n },\n \"application/x-virtualbox-vdi\": {\n \"compressible\": true,\n \"extensions\": [\"vdi\"]\n },\n \"application/x-virtualbox-vhd\": {\n \"compressible\": true,\n \"extensions\": [\"vhd\"]\n },\n \"application/x-virtualbox-vmdk\": {\n \"compressible\": true,\n \"extensions\": [\"vmdk\"]\n },\n \"application/x-wais-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"src\"]\n },\n \"application/x-web-app-manifest+json\": {\n \"compressible\": true,\n \"extensions\": [\"webapp\"]\n },\n \"application/x-www-form-urlencoded\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/x-x509-ca-cert\": {\n \"source\": \"apache\",\n \"extensions\": [\"der\",\"crt\",\"pem\"]\n },\n \"application/x-xfig\": {\n \"source\": \"apache\",\n \"extensions\": [\"fig\"]\n },\n \"application/x-xliff+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xlf\"]\n },\n \"application/x-xpinstall\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"xpi\"]\n },\n \"application/x-xz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xz\"]\n },\n \"application/x-zmachine\": {\n \"source\": \"apache\",\n \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n },\n \"application/x400-bp\": {\n \"source\": \"iana\"\n },\n \"application/xacml+xml\": {\n \"source\": \"iana\"\n },\n \"application/xaml+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xaml\"]\n },\n \"application/xcap-att+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-caps+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-diff+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdf\"]\n },\n \"application/xcap-el+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-error+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-ns+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcon-conference-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcon-conference-info-diff+xml\": {\n \"source\": \"iana\"\n },\n \"application/xenc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xenc\"]\n },\n \"application/xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xhtml\",\"xht\"]\n },\n \"application/xhtml-voice+xml\": {\n \"source\": \"apache\"\n },\n \"application/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n },\n \"application/xml-dtd\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dtd\"]\n },\n \"application/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"application/xml-patch+xml\": {\n \"source\": \"iana\"\n },\n \"application/xmpp+xml\": {\n \"source\": \"iana\"\n },\n \"application/xop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xop\"]\n },\n \"application/xproc+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpl\"]\n },\n \"application/xslt+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xslt\"]\n },\n \"application/xspf+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xspf\"]\n },\n \"application/xv+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n },\n \"application/yang\": {\n \"source\": \"iana\",\n \"extensions\": [\"yang\"]\n },\n \"application/yang-data+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-data+xml\": {\n \"source\": \"iana\"\n },\n \"application/yang-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+xml\": {\n \"source\": \"iana\"\n },\n \"application/yin+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"yin\"]\n },\n \"application/zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"zip\"]\n },\n \"application/zlib\": {\n \"source\": \"iana\"\n },\n \"audio/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/3gpp\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"3gpp\"]\n },\n \"audio/3gpp2\": {\n \"source\": \"iana\"\n },\n \"audio/ac3\": {\n \"source\": \"iana\"\n },\n \"audio/adpcm\": {\n \"source\": \"apache\",\n \"extensions\": [\"adp\"]\n },\n \"audio/amr\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb+\": {\n \"source\": \"iana\"\n },\n \"audio/aptx\": {\n \"source\": \"iana\"\n },\n \"audio/asc\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-advanced-lossless\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-x\": {\n \"source\": \"iana\"\n },\n \"audio/atrac3\": {\n \"source\": \"iana\"\n },\n \"audio/basic\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"au\",\"snd\"]\n },\n \"audio/bv16\": {\n \"source\": \"iana\"\n },\n \"audio/bv32\": {\n \"source\": \"iana\"\n },\n \"audio/clearmode\": {\n \"source\": \"iana\"\n },\n \"audio/cn\": {\n \"source\": \"iana\"\n },\n \"audio/dat12\": {\n \"source\": \"iana\"\n },\n \"audio/dls\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es201108\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202050\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202211\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202212\": {\n \"source\": \"iana\"\n },\n \"audio/dv\": {\n \"source\": \"iana\"\n },\n \"audio/dvi4\": {\n \"source\": \"iana\"\n },\n \"audio/eac3\": {\n \"source\": \"iana\"\n },\n \"audio/encaprtp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc\": {\n \"source\": \"iana\"\n },\n \"audio/evrc-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc0\": {\n \"source\": \"iana\"\n },\n \"audio/evrc1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb1\": {\n \"source\": \"iana\"\n },\n \"audio/evs\": {\n \"source\": \"iana\"\n },\n \"audio/fwdred\": {\n \"source\": \"iana\"\n },\n \"audio/g711-0\": {\n \"source\": \"iana\"\n },\n \"audio/g719\": {\n \"source\": \"iana\"\n },\n \"audio/g722\": {\n \"source\": \"iana\"\n },\n \"audio/g7221\": {\n \"source\": \"iana\"\n },\n \"audio/g723\": {\n \"source\": \"iana\"\n },\n \"audio/g726-16\": {\n \"source\": \"iana\"\n },\n \"audio/g726-24\": {\n \"source\": \"iana\"\n },\n \"audio/g726-32\": {\n \"source\": \"iana\"\n },\n \"audio/g726-40\": {\n \"source\": \"iana\"\n },\n \"audio/g728\": {\n \"source\": \"iana\"\n },\n \"audio/g729\": {\n \"source\": \"iana\"\n },\n \"audio/g7291\": {\n \"source\": \"iana\"\n },\n \"audio/g729d\": {\n \"source\": \"iana\"\n },\n \"audio/g729e\": {\n \"source\": \"iana\"\n },\n \"audio/gsm\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-efr\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-hr-08\": {\n \"source\": \"iana\"\n },\n \"audio/ilbc\": {\n \"source\": \"iana\"\n },\n \"audio/ip-mr_v2.5\": {\n \"source\": \"iana\"\n },\n \"audio/isac\": {\n \"source\": \"apache\"\n },\n \"audio/l16\": {\n \"source\": \"iana\"\n },\n \"audio/l20\": {\n \"source\": \"iana\"\n },\n \"audio/l24\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/l8\": {\n \"source\": \"iana\"\n },\n \"audio/lpc\": {\n \"source\": \"iana\"\n },\n \"audio/melp\": {\n \"source\": \"iana\"\n },\n \"audio/melp1200\": {\n \"source\": \"iana\"\n },\n \"audio/melp2400\": {\n \"source\": \"iana\"\n },\n \"audio/melp600\": {\n \"source\": \"iana\"\n },\n \"audio/midi\": {\n \"source\": \"apache\",\n \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n },\n \"audio/mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/mp3\": {\n \"compressible\": false,\n \"extensions\": [\"mp3\"]\n },\n \"audio/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"m4a\",\"mp4a\"]\n },\n \"audio/mp4a-latm\": {\n \"source\": \"iana\"\n },\n \"audio/mpa\": {\n \"source\": \"iana\"\n },\n \"audio/mpa-robust\": {\n \"source\": \"iana\"\n },\n \"audio/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n },\n \"audio/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"audio/musepack\": {\n \"source\": \"apache\"\n },\n \"audio/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"oga\",\"ogg\",\"spx\"]\n },\n \"audio/opus\": {\n \"source\": \"iana\"\n },\n \"audio/parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/pcma\": {\n \"source\": \"iana\"\n },\n \"audio/pcma-wb\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu-wb\": {\n \"source\": \"iana\"\n },\n \"audio/prs.sid\": {\n \"source\": \"iana\"\n },\n \"audio/qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/raptorfec\": {\n \"source\": \"iana\"\n },\n \"audio/red\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/rtploopback\": {\n \"source\": \"iana\"\n },\n \"audio/rtx\": {\n \"source\": \"iana\"\n },\n \"audio/s3m\": {\n \"source\": \"apache\",\n \"extensions\": [\"s3m\"]\n },\n \"audio/silk\": {\n \"source\": \"apache\",\n \"extensions\": [\"sil\"]\n },\n \"audio/smv\": {\n \"source\": \"iana\"\n },\n \"audio/smv-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/smv0\": {\n \"source\": \"iana\"\n },\n \"audio/sp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/speex\": {\n \"source\": \"iana\"\n },\n \"audio/t140c\": {\n \"source\": \"iana\"\n },\n \"audio/t38\": {\n \"source\": \"iana\"\n },\n \"audio/telephone-event\": {\n \"source\": \"iana\"\n },\n \"audio/tone\": {\n \"source\": \"iana\"\n },\n \"audio/uemclip\": {\n \"source\": \"iana\"\n },\n \"audio/ulpfec\": {\n \"source\": \"iana\"\n },\n \"audio/vdvi\": {\n \"source\": \"iana\"\n },\n \"audio/vmr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.3gpp.iufp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.4sb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.audiokoz\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.celp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cisco.nse\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cmles.radio-events\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.anp1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.inf1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dece.audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"uva\",\"uvva\"]\n },\n \"audio/vnd.digital-winds\": {\n \"source\": \"iana\",\n \"extensions\": [\"eol\"]\n },\n \"audio/vnd.dlna.adts\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mlp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mps\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2x\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2z\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pulse.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dra\": {\n \"source\": \"iana\",\n \"extensions\": [\"dra\"]\n },\n \"audio/vnd.dts\": {\n \"source\": \"iana\",\n \"extensions\": [\"dts\"]\n },\n \"audio/vnd.dts.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"dtshd\"]\n },\n \"audio/vnd.dvb.file\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.everad.plj\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.hns.audio\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.lucent.voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"lvp\"]\n },\n \"audio/vnd.ms-playready.media.pya\": {\n \"source\": \"iana\",\n \"extensions\": [\"pya\"]\n },\n \"audio/vnd.nokia.mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nortel.vbk\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nuera.ecelp4800\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp4800\"]\n },\n \"audio/vnd.nuera.ecelp7470\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp7470\"]\n },\n \"audio/vnd.nuera.ecelp9600\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp9600\"]\n },\n \"audio/vnd.octel.sbc\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.presonus.multitrack\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rhetorex.32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rip\": {\n \"source\": \"iana\",\n \"extensions\": [\"rip\"]\n },\n \"audio/vnd.rn-realaudio\": {\n \"compressible\": false\n },\n \"audio/vnd.sealedmedia.softseal.mpeg\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.vmx.cvsd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.wave\": {\n \"compressible\": false\n },\n \"audio/vorbis\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/vorbis-config\": {\n \"source\": \"iana\"\n },\n \"audio/wav\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/wave\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"weba\"]\n },\n \"audio/x-aac\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"aac\"]\n },\n \"audio/x-aiff\": {\n \"source\": \"apache\",\n \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n },\n \"audio/x-caf\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"caf\"]\n },\n \"audio/x-flac\": {\n \"source\": \"apache\",\n \"extensions\": [\"flac\"]\n },\n \"audio/x-m4a\": {\n \"source\": \"nginx\",\n \"extensions\": [\"m4a\"]\n },\n \"audio/x-matroska\": {\n \"source\": \"apache\",\n \"extensions\": [\"mka\"]\n },\n \"audio/x-mpegurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"m3u\"]\n },\n \"audio/x-ms-wax\": {\n \"source\": \"apache\",\n \"extensions\": [\"wax\"]\n },\n \"audio/x-ms-wma\": {\n \"source\": \"apache\",\n \"extensions\": [\"wma\"]\n },\n \"audio/x-pn-realaudio\": {\n \"source\": \"apache\",\n \"extensions\": [\"ram\",\"ra\"]\n },\n \"audio/x-pn-realaudio-plugin\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmp\"]\n },\n \"audio/x-realaudio\": {\n \"source\": \"nginx\",\n \"extensions\": [\"ra\"]\n },\n \"audio/x-tta\": {\n \"source\": \"apache\"\n },\n \"audio/x-wav\": {\n \"source\": \"apache\",\n \"extensions\": [\"wav\"]\n },\n \"audio/xm\": {\n \"source\": \"apache\",\n \"extensions\": [\"xm\"]\n },\n \"chemical/x-cdx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cdx\"]\n },\n \"chemical/x-cif\": {\n \"source\": \"apache\",\n \"extensions\": [\"cif\"]\n },\n \"chemical/x-cmdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmdf\"]\n },\n \"chemical/x-cml\": {\n \"source\": \"apache\",\n \"extensions\": [\"cml\"]\n },\n \"chemical/x-csml\": {\n \"source\": \"apache\",\n \"extensions\": [\"csml\"]\n },\n \"chemical/x-pdb\": {\n \"source\": \"apache\"\n },\n \"chemical/x-xyz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xyz\"]\n },\n \"font/collection\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttc\"]\n },\n \"font/otf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"otf\"]\n },\n \"font/sfnt\": {\n \"source\": \"iana\"\n },\n \"font/ttf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttf\"]\n },\n \"font/woff\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff\"]\n },\n \"font/woff2\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff2\"]\n },\n \"image/aces\": {\n \"source\": \"iana\"\n },\n \"image/apng\": {\n \"compressible\": false,\n \"extensions\": [\"apng\"]\n },\n \"image/bmp\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/cgm\": {\n \"source\": \"iana\",\n \"extensions\": [\"cgm\"]\n },\n \"image/dicom-rle\": {\n \"source\": \"iana\"\n },\n \"image/emf\": {\n \"source\": \"iana\"\n },\n \"image/fits\": {\n \"source\": \"iana\"\n },\n \"image/g3fax\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3\"]\n },\n \"image/gif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gif\"]\n },\n \"image/ief\": {\n \"source\": \"iana\",\n \"extensions\": [\"ief\"]\n },\n \"image/jls\": {\n \"source\": \"iana\"\n },\n \"image/jp2\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jp2\",\"jpg2\"]\n },\n \"image/jpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n },\n \"image/jpm\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpm\"]\n },\n \"image/jpx\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpx\",\"jpf\"]\n },\n \"image/ktx\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx\"]\n },\n \"image/naplps\": {\n \"source\": \"iana\"\n },\n \"image/pjpeg\": {\n \"compressible\": false\n },\n \"image/png\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"png\"]\n },\n \"image/prs.btif\": {\n \"source\": \"iana\",\n \"extensions\": [\"btif\"]\n },\n \"image/prs.pti\": {\n \"source\": \"iana\"\n },\n \"image/pwg-raster\": {\n \"source\": \"iana\"\n },\n \"image/sgi\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgi\"]\n },\n \"image/svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"svg\",\"svgz\"]\n },\n \"image/t38\": {\n \"source\": \"iana\"\n },\n \"image/tiff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"tiff\",\"tif\"]\n },\n \"image/tiff-fx\": {\n \"source\": \"iana\"\n },\n \"image/vnd.adobe.photoshop\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"psd\"]\n },\n \"image/vnd.airzip.accelerator.azv\": {\n \"source\": \"iana\"\n },\n \"image/vnd.cns.inf2\": {\n \"source\": \"iana\"\n },\n \"image/vnd.dece.graphic\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n },\n \"image/vnd.djvu\": {\n \"source\": \"iana\",\n \"extensions\": [\"djvu\",\"djv\"]\n },\n \"image/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"image/vnd.dwg\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwg\"]\n },\n \"image/vnd.dxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxf\"]\n },\n \"image/vnd.fastbidsheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fbs\"]\n },\n \"image/vnd.fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"fpx\"]\n },\n \"image/vnd.fst\": {\n \"source\": \"iana\",\n \"extensions\": [\"fst\"]\n },\n \"image/vnd.fujixerox.edmics-mmr\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmr\"]\n },\n \"image/vnd.fujixerox.edmics-rlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"rlc\"]\n },\n \"image/vnd.globalgraphics.pgb\": {\n \"source\": \"iana\"\n },\n \"image/vnd.microsoft.icon\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mix\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mozilla.apng\": {\n \"source\": \"iana\"\n },\n \"image/vnd.ms-modi\": {\n \"source\": \"iana\",\n \"extensions\": [\"mdi\"]\n },\n \"image/vnd.ms-photo\": {\n \"source\": \"apache\",\n \"extensions\": [\"wdp\"]\n },\n \"image/vnd.net-fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"npx\"]\n },\n \"image/vnd.radiance\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealed.png\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.gif\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.jpg\": {\n \"source\": \"iana\"\n },\n \"image/vnd.svf\": {\n \"source\": \"iana\"\n },\n \"image/vnd.tencent.tap\": {\n \"source\": \"iana\"\n },\n \"image/vnd.valve.source.texture\": {\n \"source\": \"iana\"\n },\n \"image/vnd.wap.wbmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbmp\"]\n },\n \"image/vnd.xiff\": {\n \"source\": \"iana\",\n \"extensions\": [\"xif\"]\n },\n \"image/vnd.zbrush.pcx\": {\n \"source\": \"iana\"\n },\n \"image/webp\": {\n \"source\": \"apache\",\n \"extensions\": [\"webp\"]\n },\n \"image/wmf\": {\n \"source\": \"iana\"\n },\n \"image/x-3ds\": {\n \"source\": \"apache\",\n \"extensions\": [\"3ds\"]\n },\n \"image/x-cmu-raster\": {\n \"source\": \"apache\",\n \"extensions\": [\"ras\"]\n },\n \"image/x-cmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmx\"]\n },\n \"image/x-freehand\": {\n \"source\": \"apache\",\n \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n },\n \"image/x-icon\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/x-jng\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jng\"]\n },\n \"image/x-mrsid-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"sid\"]\n },\n \"image/x-ms-bmp\": {\n \"source\": \"nginx\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/x-pcx\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcx\"]\n },\n \"image/x-pict\": {\n \"source\": \"apache\",\n \"extensions\": [\"pic\",\"pct\"]\n },\n \"image/x-portable-anymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pnm\"]\n },\n \"image/x-portable-bitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pbm\"]\n },\n \"image/x-portable-graymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgm\"]\n },\n \"image/x-portable-pixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"ppm\"]\n },\n \"image/x-rgb\": {\n \"source\": \"apache\",\n \"extensions\": [\"rgb\"]\n },\n \"image/x-tga\": {\n \"source\": \"apache\",\n \"extensions\": [\"tga\"]\n },\n \"image/x-xbitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbm\"]\n },\n \"image/x-xcf\": {\n \"compressible\": false\n },\n \"image/x-xpixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpm\"]\n },\n \"image/x-xwindowdump\": {\n \"source\": \"apache\",\n \"extensions\": [\"xwd\"]\n },\n \"message/cpim\": {\n \"source\": \"iana\"\n },\n \"message/delivery-status\": {\n \"source\": \"iana\"\n },\n \"message/disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\n \"disposition-notification\"\n ]\n },\n \"message/external-body\": {\n \"source\": \"iana\"\n },\n \"message/feedback-report\": {\n \"source\": \"iana\"\n },\n \"message/global\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8msg\"]\n },\n \"message/global-delivery-status\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8dsn\"]\n },\n \"message/global-disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8mdn\"]\n },\n \"message/global-headers\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8hdr\"]\n },\n \"message/http\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/imdn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"message/news\": {\n \"source\": \"iana\"\n },\n \"message/partial\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/rfc822\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eml\",\"mime\"]\n },\n \"message/s-http\": {\n \"source\": \"iana\"\n },\n \"message/sip\": {\n \"source\": \"iana\"\n },\n \"message/sipfrag\": {\n \"source\": \"iana\"\n },\n \"message/tracking-status\": {\n \"source\": \"iana\"\n },\n \"message/vnd.si.simp\": {\n \"source\": \"iana\"\n },\n \"message/vnd.wfa.wsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsc\"]\n },\n \"model/3mf\": {\n \"source\": \"iana\"\n },\n \"model/gltf+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gltf\"]\n },\n \"model/gltf-binary\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"glb\"]\n },\n \"model/iges\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"igs\",\"iges\"]\n },\n \"model/mesh\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n },\n \"model/vnd.collada+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"dae\"]\n },\n \"model/vnd.dwf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwf\"]\n },\n \"model/vnd.flatland.3dml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"gdl\"]\n },\n \"model/vnd.gs-gdl\": {\n \"source\": \"apache\"\n },\n \"model/vnd.gs.gdl\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gtw\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtw\"]\n },\n \"model/vnd.moml+xml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.mts\": {\n \"source\": \"iana\",\n \"extensions\": [\"mts\"]\n },\n \"model/vnd.opengex\": {\n \"source\": \"iana\"\n },\n \"model/vnd.parasolid.transmit.binary\": {\n \"source\": \"iana\"\n },\n \"model/vnd.parasolid.transmit.text\": {\n \"source\": \"iana\"\n },\n \"model/vnd.rosette.annotated-data-model\": {\n \"source\": \"iana\"\n },\n \"model/vnd.valve.source.compiled-map\": {\n \"source\": \"iana\"\n },\n \"model/vnd.vtu\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtu\"]\n },\n \"model/vrml\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"wrl\",\"vrml\"]\n },\n \"model/x3d+binary\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3db\",\"x3dbz\"]\n },\n \"model/x3d+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"model/x3d+vrml\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3dv\",\"x3dvz\"]\n },\n \"model/x3d+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"x3d\",\"x3dz\"]\n },\n \"model/x3d-vrml\": {\n \"source\": \"iana\"\n },\n \"multipart/alternative\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/appledouble\": {\n \"source\": \"iana\"\n },\n \"multipart/byteranges\": {\n \"source\": \"iana\"\n },\n \"multipart/digest\": {\n \"source\": \"iana\"\n },\n \"multipart/encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/form-data\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/header-set\": {\n \"source\": \"iana\"\n },\n \"multipart/mixed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/multilingual\": {\n \"source\": \"iana\"\n },\n \"multipart/parallel\": {\n \"source\": \"iana\"\n },\n \"multipart/related\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/report\": {\n \"source\": \"iana\"\n },\n \"multipart/signed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/vnd.bint.med-plus\": {\n \"source\": \"iana\"\n },\n \"multipart/voice-message\": {\n \"source\": \"iana\"\n },\n \"multipart/x-mixed-replace\": {\n \"source\": \"iana\"\n },\n \"text/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"text/cache-manifest\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"appcache\",\"manifest\"]\n },\n \"text/calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"ics\",\"ifb\"]\n },\n \"text/calender\": {\n \"compressible\": true\n },\n \"text/cmd\": {\n \"compressible\": true\n },\n \"text/coffeescript\": {\n \"extensions\": [\"coffee\",\"litcoffee\"]\n },\n \"text/css\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"css\"]\n },\n \"text/csv\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csv\"]\n },\n \"text/csv-schema\": {\n \"source\": \"iana\"\n },\n \"text/directory\": {\n \"source\": \"iana\"\n },\n \"text/dns\": {\n \"source\": \"iana\"\n },\n \"text/ecmascript\": {\n \"source\": \"iana\"\n },\n \"text/encaprtp\": {\n \"source\": \"iana\"\n },\n \"text/enriched\": {\n \"source\": \"iana\"\n },\n \"text/fwdred\": {\n \"source\": \"iana\"\n },\n \"text/grammar-ref-list\": {\n \"source\": \"iana\"\n },\n \"text/html\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"html\",\"htm\",\"shtml\"]\n },\n \"text/jade\": {\n \"extensions\": [\"jade\"]\n },\n \"text/javascript\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"text/jcr-cnd\": {\n \"source\": \"iana\"\n },\n \"text/jsx\": {\n \"compressible\": true,\n \"extensions\": [\"jsx\"]\n },\n \"text/less\": {\n \"extensions\": [\"less\"]\n },\n \"text/markdown\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"markdown\",\"md\"]\n },\n \"text/mathml\": {\n \"source\": \"nginx\",\n \"extensions\": [\"mml\"]\n },\n \"text/mizar\": {\n \"source\": \"iana\"\n },\n \"text/n3\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"n3\"]\n },\n \"text/parameters\": {\n \"source\": \"iana\"\n },\n \"text/parityfec\": {\n \"source\": \"iana\"\n },\n \"text/plain\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n },\n \"text/provenance-notation\": {\n \"source\": \"iana\"\n },\n \"text/prs.fallenstein.rst\": {\n \"source\": \"iana\"\n },\n \"text/prs.lines.tag\": {\n \"source\": \"iana\",\n \"extensions\": [\"dsc\"]\n },\n \"text/prs.prop.logic\": {\n \"source\": \"iana\"\n },\n \"text/raptorfec\": {\n \"source\": \"iana\"\n },\n \"text/red\": {\n \"source\": \"iana\"\n },\n \"text/rfc822-headers\": {\n \"source\": \"iana\"\n },\n \"text/richtext\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtx\"]\n },\n \"text/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"text/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"text/rtploopback\": {\n \"source\": \"iana\"\n },\n \"text/rtx\": {\n \"source\": \"iana\"\n },\n \"text/sgml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sgml\",\"sgm\"]\n },\n \"text/shex\": {\n \"extensions\": [\"shex\"]\n },\n \"text/slim\": {\n \"extensions\": [\"slim\",\"slm\"]\n },\n \"text/strings\": {\n \"source\": \"iana\"\n },\n \"text/stylus\": {\n \"extensions\": [\"stylus\",\"styl\"]\n },\n \"text/t140\": {\n \"source\": \"iana\"\n },\n \"text/tab-separated-values\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tsv\"]\n },\n \"text/troff\": {\n \"source\": \"iana\",\n \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n },\n \"text/turtle\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttl\"]\n },\n \"text/ulpfec\": {\n \"source\": \"iana\"\n },\n \"text/uri-list\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uri\",\"uris\",\"urls\"]\n },\n \"text/vcard\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vcard\"]\n },\n \"text/vnd.a\": {\n \"source\": \"iana\"\n },\n \"text/vnd.abc\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ascii-art\": {\n \"source\": \"iana\"\n },\n \"text/vnd.curl\": {\n \"source\": \"iana\",\n \"extensions\": [\"curl\"]\n },\n \"text/vnd.curl.dcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"dcurl\"]\n },\n \"text/vnd.curl.mcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"mcurl\"]\n },\n \"text/vnd.curl.scurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"scurl\"]\n },\n \"text/vnd.debian.copyright\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dmclientscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"text/vnd.esmertec.theme-descriptor\": {\n \"source\": \"iana\"\n },\n \"text/vnd.fly\": {\n \"source\": \"iana\",\n \"extensions\": [\"fly\"]\n },\n \"text/vnd.fmi.flexstor\": {\n \"source\": \"iana\",\n \"extensions\": [\"flx\"]\n },\n \"text/vnd.graphviz\": {\n \"source\": \"iana\",\n \"extensions\": [\"gv\"]\n },\n \"text/vnd.in3d.3dml\": {\n \"source\": \"iana\",\n \"extensions\": [\"3dml\"]\n },\n \"text/vnd.in3d.spot\": {\n \"source\": \"iana\",\n \"extensions\": [\"spot\"]\n },\n \"text/vnd.iptc.newsml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.iptc.nitf\": {\n \"source\": \"iana\"\n },\n \"text/vnd.latex-z\": {\n \"source\": \"iana\"\n },\n \"text/vnd.motorola.reflex\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ms-mediapackage\": {\n \"source\": \"iana\"\n },\n \"text/vnd.net2phone.commcenter.command\": {\n \"source\": \"iana\"\n },\n \"text/vnd.radisys.msml-basic-layout\": {\n \"source\": \"iana\"\n },\n \"text/vnd.si.uricatalogue\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sun.j2me.app-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"jad\"]\n },\n \"text/vnd.trolltech.linguist\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.si\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.sl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.wml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wml\"]\n },\n \"text/vnd.wap.wmlscript\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmls\"]\n },\n \"text/vtt\": {\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"vtt\"]\n },\n \"text/x-asm\": {\n \"source\": \"apache\",\n \"extensions\": [\"s\",\"asm\"]\n },\n \"text/x-c\": {\n \"source\": \"apache\",\n \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n },\n \"text/x-component\": {\n \"source\": \"nginx\",\n \"extensions\": [\"htc\"]\n },\n \"text/x-fortran\": {\n \"source\": \"apache\",\n \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n },\n \"text/x-gwt-rpc\": {\n \"compressible\": true\n },\n \"text/x-handlebars-template\": {\n \"extensions\": [\"hbs\"]\n },\n \"text/x-java-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"java\"]\n },\n \"text/x-jquery-tmpl\": {\n \"compressible\": true\n },\n \"text/x-lua\": {\n \"extensions\": [\"lua\"]\n },\n \"text/x-markdown\": {\n \"compressible\": true,\n \"extensions\": [\"mkd\"]\n },\n \"text/x-nfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"nfo\"]\n },\n \"text/x-opml\": {\n \"source\": \"apache\",\n \"extensions\": [\"opml\"]\n },\n \"text/x-org\": {\n \"compressible\": true,\n \"extensions\": [\"org\"]\n },\n \"text/x-pascal\": {\n \"source\": \"apache\",\n \"extensions\": [\"p\",\"pas\"]\n },\n \"text/x-processing\": {\n \"compressible\": true,\n \"extensions\": [\"pde\"]\n },\n \"text/x-sass\": {\n \"extensions\": [\"sass\"]\n },\n \"text/x-scss\": {\n \"extensions\": [\"scss\"]\n },\n \"text/x-setext\": {\n \"source\": \"apache\",\n \"extensions\": [\"etx\"]\n },\n \"text/x-sfv\": {\n \"source\": \"apache\",\n \"extensions\": [\"sfv\"]\n },\n \"text/x-suse-ymp\": {\n \"compressible\": true,\n \"extensions\": [\"ymp\"]\n },\n \"text/x-uuencode\": {\n \"source\": \"apache\",\n \"extensions\": [\"uu\"]\n },\n \"text/x-vcalendar\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcs\"]\n },\n \"text/x-vcard\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcf\"]\n },\n \"text/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\"]\n },\n \"text/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"text/yaml\": {\n \"extensions\": [\"yaml\",\"yml\"]\n },\n \"video/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"video/3gpp\": {\n \"source\": \"iana\",\n \"extensions\": [\"3gp\",\"3gpp\"]\n },\n \"video/3gpp-tt\": {\n \"source\": \"iana\"\n },\n \"video/3gpp2\": {\n \"source\": \"iana\",\n \"extensions\": [\"3g2\"]\n },\n \"video/bmpeg\": {\n \"source\": \"iana\"\n },\n \"video/bt656\": {\n \"source\": \"iana\"\n },\n \"video/celb\": {\n \"source\": \"iana\"\n },\n \"video/dv\": {\n \"source\": \"iana\"\n },\n \"video/encaprtp\": {\n \"source\": \"iana\"\n },\n \"video/h261\": {\n \"source\": \"iana\",\n \"extensions\": [\"h261\"]\n },\n \"video/h263\": {\n \"source\": \"iana\",\n \"extensions\": [\"h263\"]\n },\n \"video/h263-1998\": {\n \"source\": \"iana\"\n },\n \"video/h263-2000\": {\n \"source\": \"iana\"\n },\n \"video/h264\": {\n \"source\": \"iana\",\n \"extensions\": [\"h264\"]\n },\n \"video/h264-rcdo\": {\n \"source\": \"iana\"\n },\n \"video/h264-svc\": {\n \"source\": \"iana\"\n },\n \"video/h265\": {\n \"source\": \"iana\"\n },\n \"video/iso.segment\": {\n \"source\": \"iana\"\n },\n \"video/jpeg\": {\n \"source\": \"iana\",\n \"extensions\": [\"jpgv\"]\n },\n \"video/jpeg2000\": {\n \"source\": \"iana\"\n },\n \"video/jpm\": {\n \"source\": \"apache\",\n \"extensions\": [\"jpm\",\"jpgm\"]\n },\n \"video/mj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"mj2\",\"mjp2\"]\n },\n \"video/mp1s\": {\n \"source\": \"iana\"\n },\n \"video/mp2p\": {\n \"source\": \"iana\"\n },\n \"video/mp2t\": {\n \"source\": \"iana\",\n \"extensions\": [\"ts\"]\n },\n \"video/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n },\n \"video/mp4v-es\": {\n \"source\": \"iana\"\n },\n \"video/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n },\n \"video/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"video/mpv\": {\n \"source\": \"iana\"\n },\n \"video/nv\": {\n \"source\": \"iana\"\n },\n \"video/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogv\"]\n },\n \"video/parityfec\": {\n \"source\": \"iana\"\n },\n \"video/pointer\": {\n \"source\": \"iana\"\n },\n \"video/quicktime\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"qt\",\"mov\"]\n },\n \"video/raptorfec\": {\n \"source\": \"iana\"\n },\n \"video/raw\": {\n \"source\": \"iana\"\n },\n \"video/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"video/rtploopback\": {\n \"source\": \"iana\"\n },\n \"video/rtx\": {\n \"source\": \"iana\"\n },\n \"video/smpte291\": {\n \"source\": \"iana\"\n },\n \"video/smpte292m\": {\n \"source\": \"iana\"\n },\n \"video/ulpfec\": {\n \"source\": \"iana\"\n },\n \"video/vc1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.cctv\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvh\",\"uvvh\"]\n },\n \"video/vnd.dece.mobile\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvm\",\"uvvm\"]\n },\n \"video/vnd.dece.mp4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.pd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvp\",\"uvvp\"]\n },\n \"video/vnd.dece.sd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvs\",\"uvvs\"]\n },\n \"video/vnd.dece.video\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvv\",\"uvvv\"]\n },\n \"video/vnd.directv.mpeg\": {\n \"source\": \"iana\"\n },\n \"video/vnd.directv.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dlna.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dvb.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"dvb\"]\n },\n \"video/vnd.fvt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fvt\"]\n },\n \"video/vnd.hns.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsavc\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsmpeg2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.videop\": {\n \"source\": \"iana\"\n },\n \"video/vnd.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxu\",\"m4u\"]\n },\n \"video/vnd.ms-playready.media.pyv\": {\n \"source\": \"iana\",\n \"extensions\": [\"pyv\"]\n },\n \"video/vnd.nokia.interleaved-multimedia\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.mp4vr\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.videovoip\": {\n \"source\": \"iana\"\n },\n \"video/vnd.objectvideo\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.bink\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.smacker\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.swf\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealedmedia.softseal.mov\": {\n \"source\": \"iana\"\n },\n \"video/vnd.uvvu.mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvu\",\"uvvu\"]\n },\n \"video/vnd.vivo\": {\n \"source\": \"iana\",\n \"extensions\": [\"viv\"]\n },\n \"video/vp8\": {\n \"source\": \"iana\"\n },\n \"video/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"webm\"]\n },\n \"video/x-f4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"f4v\"]\n },\n \"video/x-fli\": {\n \"source\": \"apache\",\n \"extensions\": [\"fli\"]\n },\n \"video/x-flv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"flv\"]\n },\n \"video/x-m4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"m4v\"]\n },\n \"video/x-matroska\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n },\n \"video/x-mng\": {\n \"source\": \"apache\",\n \"extensions\": [\"mng\"]\n },\n \"video/x-ms-asf\": {\n \"source\": \"apache\",\n \"extensions\": [\"asf\",\"asx\"]\n },\n \"video/x-ms-vob\": {\n \"source\": \"apache\",\n \"extensions\": [\"vob\"]\n },\n \"video/x-ms-wm\": {\n \"source\": \"apache\",\n \"extensions\": [\"wm\"]\n },\n \"video/x-ms-wmv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"wmv\"]\n },\n \"video/x-ms-wmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmx\"]\n },\n \"video/x-ms-wvx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wvx\"]\n },\n \"video/x-msvideo\": {\n \"source\": \"apache\",\n \"extensions\": [\"avi\"]\n },\n \"video/x-sgi-movie\": {\n \"source\": \"apache\",\n \"extensions\": [\"movie\"]\n },\n \"video/x-smv\": {\n \"source\": \"apache\",\n \"extensions\": [\"smv\"]\n },\n \"x-conference/x-cooltalk\": {\n \"source\": \"apache\",\n \"extensions\": [\"ice\"]\n },\n \"x-shader/x-fragment\": {\n \"compressible\": true\n },\n \"x-shader/x-vertex\": {\n \"compressible\": true\n }\n}\n"," // Use explicit /index.js to help browserify negociation in require '/lib/http-proxy' (!)\nvar ProxyServer = require('./http-proxy/index.js').Server;\n\n\n/**\n * Creates the proxy server.\n *\n * Examples:\n *\n * httpProxy.createProxyServer({ .. }, 8000)\n * // => '{ web: [Function], ws: [Function] ... }'\n *\n * @param {Object} Options Config object passed to the proxy\n *\n * @return {Object} Proxy Proxy object with handlers for `ws` and `web` requests\n *\n * @api public\n */\n\n\nfunction createProxyServer(options) {\n /*\n * `options` is needed and it must have the following layout:\n *\n * {\n * target : \n * forward: \n * agent : \n * ssl : \n * ws : \n * xfwd : \n * secure : \n * toProxy: \n * prependPath: \n * ignorePath: \n * localAddress : \n * changeOrigin: \n * preserveHeaderKeyCase: \n * auth : Basic authentication i.e. 'user:password' to compute an Authorization header.\n * hostRewrite: rewrites the location hostname on (201/301/302/307/308) redirects, Default: null.\n * autoRewrite: rewrites the location host/port on (201/301/302/307/308) redirects based on requested host/port. Default: false.\n * protocolRewrite: rewrites the location protocol on (201/301/302/307/308) redirects to 'http' or 'https'. Default: null.\n * }\n *\n * NOTE: `options.ws` and `options.ssl` are optional.\n * `options.target and `options.forward` cannot be\n * both missing\n * }\n */\n\n return new ProxyServer(options);\n}\n\n\nProxyServer.createProxyServer = createProxyServer;\nProxyServer.createServer = createProxyServer;\nProxyServer.createProxy = createProxyServer;\n\n\n\n\n/**\n * Export the proxy \"Server\" as the main export.\n */\nmodule.exports = ProxyServer;\n\n","var httpProxy = module.exports,\n extend = require('util')._extend,\n parse_url = require('url').parse,\n EE3 = require('eventemitter3'),\n http = require('http'),\n https = require('https'),\n web = require('./passes/web-incoming'),\n ws = require('./passes/ws-incoming');\n\nhttpProxy.Server = ProxyServer;\n\n/**\n * Returns a function that creates the loader for\n * either `ws` or `web`'s passes.\n *\n * Examples:\n *\n * httpProxy.createRightProxy('ws')\n * // => [Function]\n *\n * @param {String} Type Either 'ws' or 'web'\n * \n * @return {Function} Loader Function that when called returns an iterator for the right passes\n *\n * @api private\n */\n\nfunction createRightProxy(type) {\n\n return function(options) {\n return function(req, res /*, [head], [opts] */) {\n var passes = (type === 'ws') ? this.wsPasses : this.webPasses,\n args = [].slice.call(arguments),\n cntr = args.length - 1,\n head, cbl;\n\n /* optional args parse begin */\n if(typeof args[cntr] === 'function') {\n cbl = args[cntr];\n\n cntr--;\n }\n\n var requestOptions = options;\n if(\n !(args[cntr] instanceof Buffer) &&\n args[cntr] !== res\n ) {\n //Copy global options\n requestOptions = extend({}, options);\n //Overwrite with request options\n extend(requestOptions, args[cntr]);\n\n cntr--;\n }\n\n if(args[cntr] instanceof Buffer) {\n head = args[cntr];\n }\n\n /* optional args parse end */\n\n ['target', 'forward'].forEach(function(e) {\n if (typeof requestOptions[e] === 'string')\n requestOptions[e] = parse_url(requestOptions[e]);\n });\n\n if (!requestOptions.target && !requestOptions.forward) {\n return this.emit('error', new Error('Must provide a proper URL as target'));\n }\n\n for(var i=0; i < passes.length; i++) {\n /**\n * Call of passes functions\n * pass(req, res, options, head)\n *\n * In WebSockets case the `res` variable\n * refer to the connection socket\n * pass(req, socket, options, head)\n */\n if(passes[i](req, res, requestOptions, head, this, cbl)) { // passes can return a truthy value to halt the loop\n break;\n }\n }\n };\n };\n}\nhttpProxy.createRightProxy = createRightProxy;\n\nfunction ProxyServer(options) {\n EE3.call(this);\n\n options = options || {};\n options.prependPath = options.prependPath === false ? false : true;\n\n this.web = this.proxyRequest = createRightProxy('web')(options);\n this.ws = this.proxyWebsocketRequest = createRightProxy('ws')(options);\n this.options = options;\n\n this.webPasses = Object.keys(web).map(function(pass) {\n return web[pass];\n });\n\n this.wsPasses = Object.keys(ws).map(function(pass) {\n return ws[pass];\n });\n\n this.on('error', this.onError, this);\n\n}\n\nrequire('util').inherits(ProxyServer, EE3);\n\nProxyServer.prototype.onError = function (err) {\n //\n // Remark: Replicate node core behavior using EE3\n // so we force people to handle their own errors\n //\n if(this.listeners('error').length === 1) {\n throw err;\n }\n};\n\nProxyServer.prototype.listen = function(port, hostname) {\n var self = this,\n closure = function(req, res) { self.web(req, res); };\n\n this._server = this.options.ssl ?\n https.createServer(this.options.ssl, closure) :\n http.createServer(closure);\n\n if(this.options.ws) {\n this._server.on('upgrade', function(req, socket, head) { self.ws(req, socket, head); });\n }\n\n this._server.listen(port, hostname);\n\n return this;\n};\n\nProxyServer.prototype.close = function(callback) {\n var self = this;\n if (this._server) {\n this._server.close(done);\n }\n\n // Wrap callback to nullify server after all open connections are closed.\n function done() {\n self._server = null;\n if (callback) {\n callback.apply(null, arguments);\n }\n };\n};\n\nProxyServer.prototype.before = function(type, passName, callback) {\n if (type !== 'ws' && type !== 'web') {\n throw new Error('type must be `web` or `ws`');\n }\n var passes = (type === 'ws') ? this.wsPasses : this.webPasses,\n i = false;\n\n passes.forEach(function(v, idx) {\n if(v.name === passName) i = idx;\n })\n\n if(i === false) throw new Error('No such pass');\n\n passes.splice(i, 0, callback);\n};\nProxyServer.prototype.after = function(type, passName, callback) {\n if (type !== 'ws' && type !== 'web') {\n throw new Error('type must be `web` or `ws`');\n }\n var passes = (type === 'ws') ? this.wsPasses : this.webPasses,\n i = false;\n\n passes.forEach(function(v, idx) {\n if(v.name === passName) i = idx;\n })\n\n if(i === false) throw new Error('No such pass');\n\n passes.splice(i++, 0, callback);\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","var httpNative = require('http'),\n httpsNative = require('https'),\n web_o = require('./web-outgoing'),\n common = require('../common'),\n followRedirects = require('follow-redirects');\n\nweb_o = Object.keys(web_o).map(function(pass) {\n return web_o[pass];\n});\n\nvar nativeAgents = { http: httpNative, https: httpsNative };\n\n/*!\n * Array of passes.\n *\n * A `pass` is just a function that is executed on `req, res, options`\n * so that you can easily add new checks while still keeping the base\n * flexible.\n */\n\n\nmodule.exports = {\n\n /**\n * Sets `content-length` to '0' if request is of DELETE type.\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n\n deleteLength: function deleteLength(req, res, options) {\n if((req.method === 'DELETE' || req.method === 'OPTIONS')\n && !req.headers['content-length']) {\n req.headers['content-length'] = '0';\n delete req.headers['transfer-encoding'];\n }\n },\n\n /**\n * Sets timeout in request socket if it was specified in options.\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n\n timeout: function timeout(req, res, options) {\n if(options.timeout) {\n req.socket.setTimeout(options.timeout);\n }\n },\n\n /**\n * Sets `x-forwarded-*` headers if specified in config.\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n\n XHeaders: function XHeaders(req, res, options) {\n if(!options.xfwd) return;\n\n var encrypted = req.isSpdy || common.hasEncryptedConnection(req);\n var values = {\n for : req.connection.remoteAddress || req.socket.remoteAddress,\n port : common.getPort(req),\n proto: encrypted ? 'https' : 'http'\n };\n\n ['for', 'port', 'proto'].forEach(function(header) {\n req.headers['x-forwarded-' + header] =\n (req.headers['x-forwarded-' + header] || '') +\n (req.headers['x-forwarded-' + header] ? ',' : '') +\n values[header];\n });\n\n req.headers['x-forwarded-host'] = req.headers['x-forwarded-host'] || req.headers['host'] || '';\n },\n\n /**\n * Does the actual proxying. If `forward` is enabled fires up\n * a ForwardStream, same happens for ProxyStream. The request\n * just dies otherwise.\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n\n stream: function stream(req, res, options, _, server, clb) {\n\n // And we begin!\n server.emit('start', req, res, options.target || options.forward);\n\n var agents = options.followRedirects ? followRedirects : nativeAgents;\n var http = agents.http;\n var https = agents.https;\n\n if(options.forward) {\n // If forward enable, so just pipe the request\n var forwardReq = (options.forward.protocol === 'https:' ? https : http).request(\n common.setupOutgoing(options.ssl || {}, options, req, 'forward')\n );\n\n // error handler (e.g. ECONNRESET, ECONNREFUSED)\n // Handle errors on incoming request as well as it makes sense to\n var forwardError = createErrorHandler(forwardReq, options.forward);\n req.on('error', forwardError);\n forwardReq.on('error', forwardError);\n\n (options.buffer || req).pipe(forwardReq);\n if(!options.target) { return res.end(); }\n }\n\n // Request initalization\n var proxyReq = (options.target.protocol === 'https:' ? https : http).request(\n common.setupOutgoing(options.ssl || {}, options, req)\n );\n\n // Enable developers to modify the proxyReq before headers are sent\n proxyReq.on('socket', function(socket) {\n if(server && !proxyReq.getHeader('expect')) {\n server.emit('proxyReq', proxyReq, req, res, options);\n }\n });\n\n // allow outgoing socket to timeout so that we could\n // show an error page at the initial request\n if(options.proxyTimeout) {\n proxyReq.setTimeout(options.proxyTimeout, function() {\n proxyReq.abort();\n });\n }\n\n // Ensure we abort proxy if request is aborted\n req.on('aborted', function () {\n proxyReq.abort();\n });\n\n // handle errors in proxy and incoming request, just like for forward proxy\n var proxyError = createErrorHandler(proxyReq, options.target);\n req.on('error', proxyError);\n proxyReq.on('error', proxyError);\n\n function createErrorHandler(proxyReq, url) {\n return function proxyError(err) {\n if (req.socket.destroyed && err.code === 'ECONNRESET') {\n server.emit('econnreset', err, req, res, url);\n return proxyReq.abort();\n }\n\n if (clb) {\n clb(err, req, res, url);\n } else {\n server.emit('error', err, req, res, url);\n }\n }\n }\n\n (options.buffer || req).pipe(proxyReq);\n\n proxyReq.on('response', function(proxyRes) {\n if(server) { server.emit('proxyRes', proxyRes, req, res); }\n\n if(!res.headersSent && !options.selfHandleResponse) {\n for(var i=0; i < web_o.length; i++) {\n if(web_o[i](req, res, proxyRes, options)) { break; }\n }\n }\n\n if (!res.finished) {\n // Allow us to listen when the proxy has completed\n proxyRes.on('end', function () {\n if (server) server.emit('end', req, res, proxyRes);\n });\n // We pipe to the response unless its expected to be handled by the user\n if (!options.selfHandleResponse) proxyRes.pipe(res);\n } else {\n if (server) server.emit('end', req, res, proxyRes);\n }\n });\n }\n\n};\n","var url = require('url'),\n common = require('../common');\n\n\nvar redirectRegex = /^201|30(1|2|7|8)$/;\n\n/*!\n * Array of passes.\n *\n * A `pass` is just a function that is executed on `req, res, options`\n * so that you can easily add new checks while still keeping the base\n * flexible.\n */\n\nmodule.exports = { // <--\n\n /**\n * If is a HTTP 1.0 request, remove chunk headers\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {proxyResponse} Res Response object from the proxy request\n *\n * @api private\n */\n removeChunked: function removeChunked(req, res, proxyRes) {\n if (req.httpVersion === '1.0') {\n delete proxyRes.headers['transfer-encoding'];\n }\n },\n\n /**\n * If is a HTTP 1.0 request, set the correct connection header\n * or if connection header not present, then use `keep-alive`\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {proxyResponse} Res Response object from the proxy request\n *\n * @api private\n */\n setConnection: function setConnection(req, res, proxyRes) {\n if (req.httpVersion === '1.0') {\n proxyRes.headers.connection = req.headers.connection || 'close';\n } else if (req.httpVersion !== '2.0' && !proxyRes.headers.connection) {\n proxyRes.headers.connection = req.headers.connection || 'keep-alive';\n }\n },\n\n setRedirectHostRewrite: function setRedirectHostRewrite(req, res, proxyRes, options) {\n if ((options.hostRewrite || options.autoRewrite || options.protocolRewrite)\n && proxyRes.headers['location']\n && redirectRegex.test(proxyRes.statusCode)) {\n var target = url.parse(options.target);\n var u = url.parse(proxyRes.headers['location']);\n\n // make sure the redirected host matches the target host before rewriting\n if (target.host != u.host) {\n return;\n }\n\n if (options.hostRewrite) {\n u.host = options.hostRewrite;\n } else if (options.autoRewrite) {\n u.host = req.headers['host'];\n }\n if (options.protocolRewrite) {\n u.protocol = options.protocolRewrite;\n }\n\n proxyRes.headers['location'] = u.format();\n }\n },\n /**\n * Copy headers from proxyResponse to response\n * set each header in response object.\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {proxyResponse} Res Response object from the proxy request\n * @param {Object} Options options.cookieDomainRewrite: Config to rewrite cookie domain\n *\n * @api private\n */\n writeHeaders: function writeHeaders(req, res, proxyRes, options) {\n var rewriteCookieDomainConfig = options.cookieDomainRewrite,\n rewriteCookiePathConfig = options.cookiePathRewrite,\n preserveHeaderKeyCase = options.preserveHeaderKeyCase,\n rawHeaderKeyMap,\n setHeader = function(key, header) {\n if (header == undefined) return;\n if (rewriteCookieDomainConfig && key.toLowerCase() === 'set-cookie') {\n header = common.rewriteCookieProperty(header, rewriteCookieDomainConfig, 'domain');\n }\n if (rewriteCookiePathConfig && key.toLowerCase() === 'set-cookie') {\n header = common.rewriteCookieProperty(header, rewriteCookiePathConfig, 'path');\n }\n res.setHeader(String(key).trim(), header);\n };\n\n if (typeof rewriteCookieDomainConfig === 'string') { //also test for ''\n rewriteCookieDomainConfig = { '*': rewriteCookieDomainConfig };\n }\n\n if (typeof rewriteCookiePathConfig === 'string') { //also test for ''\n rewriteCookiePathConfig = { '*': rewriteCookiePathConfig };\n }\n\n // message.rawHeaders is added in: v0.11.6\n // https://nodejs.org/api/http.html#http_message_rawheaders\n if (preserveHeaderKeyCase && proxyRes.rawHeaders != undefined) {\n rawHeaderKeyMap = {};\n for (var i = 0; i < proxyRes.rawHeaders.length; i += 2) {\n var key = proxyRes.rawHeaders[i];\n rawHeaderKeyMap[key.toLowerCase()] = key;\n }\n }\n\n Object.keys(proxyRes.headers).forEach(function(key) {\n var header = proxyRes.headers[key];\n if (preserveHeaderKeyCase && rawHeaderKeyMap) {\n key = rawHeaderKeyMap[key] || key;\n }\n setHeader(key, header);\n });\n },\n\n /**\n * Set the statusCode from the proxyResponse\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {proxyResponse} Res Response object from the proxy request\n *\n * @api private\n */\n writeStatusCode: function writeStatusCode(req, res, proxyRes) {\n // From Node.js docs: response.writeHead(statusCode[, statusMessage][, headers])\n if(proxyRes.statusMessage) {\n res.statusCode = proxyRes.statusCode;\n res.statusMessage = proxyRes.statusMessage;\n } else {\n res.statusCode = proxyRes.statusCode;\n }\n }\n\n};\n","var common = exports,\n url = require('url'),\n extend = require('util')._extend,\n required = require('requires-port');\n\nvar upgradeHeader = /(^|,)\\s*upgrade\\s*($|,)/i,\n isSSL = /^https|wss/;\n\n/**\n * Simple Regex for testing if protocol is https\n */\ncommon.isSSL = isSSL;\n/**\n * Copies the right headers from `options` and `req` to\n * `outgoing` which is then used to fire the proxied\n * request.\n *\n * Examples:\n *\n * common.setupOutgoing(outgoing, options, req)\n * // => { host: ..., hostname: ...}\n *\n * @param {Object} Outgoing Base object to be filled with required properties\n * @param {Object} Options Config object passed to the proxy\n * @param {ClientRequest} Req Request Object\n * @param {String} Forward String to select forward or target\n * \n * @return {Object} Outgoing Object with all required properties set\n *\n * @api private\n */\n\ncommon.setupOutgoing = function(outgoing, options, req, forward) {\n outgoing.port = options[forward || 'target'].port ||\n (isSSL.test(options[forward || 'target'].protocol) ? 443 : 80);\n\n ['host', 'hostname', 'socketPath', 'pfx', 'key',\n 'passphrase', 'cert', 'ca', 'ciphers', 'secureProtocol'].forEach(\n function(e) { outgoing[e] = options[forward || 'target'][e]; }\n );\n\n outgoing.method = options.method || req.method;\n outgoing.headers = extend({}, req.headers);\n\n if (options.headers){\n extend(outgoing.headers, options.headers);\n }\n\n if (options.auth) {\n outgoing.auth = options.auth;\n }\n \n if (options.ca) {\n outgoing.ca = options.ca;\n }\n\n if (isSSL.test(options[forward || 'target'].protocol)) {\n outgoing.rejectUnauthorized = (typeof options.secure === \"undefined\") ? true : options.secure;\n }\n\n\n outgoing.agent = options.agent || false;\n outgoing.localAddress = options.localAddress;\n\n //\n // Remark: If we are false and not upgrading, set the connection: close. This is the right thing to do\n // as node core doesn't handle this COMPLETELY properly yet.\n //\n if (!outgoing.agent) {\n outgoing.headers = outgoing.headers || {};\n if (typeof outgoing.headers.connection !== 'string'\n || !upgradeHeader.test(outgoing.headers.connection)\n ) { outgoing.headers.connection = 'close'; }\n }\n\n\n // the final path is target path + relative path requested by user:\n var target = options[forward || 'target'];\n var targetPath = target && options.prependPath !== false\n ? (target.path || '')\n : '';\n\n //\n // Remark: Can we somehow not use url.parse as a perf optimization?\n //\n var outgoingPath = !options.toProxy\n ? (url.parse(req.url).path || '')\n : req.url;\n\n //\n // Remark: ignorePath will just straight up ignore whatever the request's\n // path is. This can be labeled as FOOT-GUN material if you do not know what\n // you are doing and are using conflicting options.\n //\n outgoingPath = !options.ignorePath ? outgoingPath : '';\n\n outgoing.path = common.urlJoin(targetPath, outgoingPath);\n\n if (options.changeOrigin) {\n outgoing.headers.host =\n required(outgoing.port, options[forward || 'target'].protocol) && !hasPort(outgoing.host)\n ? outgoing.host + ':' + outgoing.port\n : outgoing.host;\n }\n return outgoing;\n};\n\n/**\n * Set the proper configuration for sockets,\n * set no delay and set keep alive, also set\n * the timeout to 0.\n *\n * Examples:\n *\n * common.setupSocket(socket)\n * // => Socket\n *\n * @param {Socket} Socket instance to setup\n * \n * @return {Socket} Return the configured socket.\n *\n * @api private\n */\n\ncommon.setupSocket = function(socket) {\n socket.setTimeout(0);\n socket.setNoDelay(true);\n\n socket.setKeepAlive(true, 0);\n\n return socket;\n};\n\n/**\n * Get the port number from the host. Or guess it based on the connection type.\n *\n * @param {Request} req Incoming HTTP request.\n *\n * @return {String} The port number.\n *\n * @api private\n */\ncommon.getPort = function(req) {\n var res = req.headers.host ? req.headers.host.match(/:(\\d+)/) : '';\n\n return res ?\n res[1] :\n common.hasEncryptedConnection(req) ? '443' : '80';\n};\n\n/**\n * Check if the request has an encrypted connection.\n *\n * @param {Request} req Incoming HTTP request.\n *\n * @return {Boolean} Whether the connection is encrypted or not.\n *\n * @api private\n */\ncommon.hasEncryptedConnection = function(req) {\n return Boolean(req.connection.encrypted || req.connection.pair);\n};\n\n/**\n * OS-agnostic join (doesn't break on URLs like path.join does on Windows)>\n *\n * @return {String} The generated path.\n *\n * @api private\n */\n\ncommon.urlJoin = function() {\n //\n // We do not want to mess with the query string. All we want to touch is the path.\n //\n var args = Array.prototype.slice.call(arguments),\n lastIndex = args.length - 1,\n last = args[lastIndex],\n lastSegs = last.split('?'),\n retSegs;\n\n args[lastIndex] = lastSegs.shift();\n\n //\n // Join all strings, but remove empty strings so we don't get extra slashes from\n // joining e.g. ['', 'am']\n //\n retSegs = [\n args.filter(Boolean).join('/')\n .replace(/\\/+/g, '/')\n .replace('http:/', 'http://')\n .replace('https:/', 'https://')\n ];\n\n // Only join the query string if it exists so we don't have trailing a '?'\n // on every request\n\n // Handle case where there could be multiple ? in the URL.\n retSegs.push.apply(retSegs, lastSegs);\n\n return retSegs.join('?')\n};\n\n/**\n * Rewrites or removes the domain of a cookie header\n *\n * @param {String|Array} Header\n * @param {Object} Config, mapping of domain to rewritten domain.\n * '*' key to match any domain, null value to remove the domain.\n *\n * @api private\n */\ncommon.rewriteCookieProperty = function rewriteCookieProperty(header, config, property) {\n if (Array.isArray(header)) {\n return header.map(function (headerElement) {\n return rewriteCookieProperty(headerElement, config, property);\n });\n }\n return header.replace(new RegExp(\"(;\\\\s*\" + property + \"=)([^;]+)\", 'i'), function(match, prefix, previousValue) {\n var newValue;\n if (previousValue in config) {\n newValue = config[previousValue];\n } else if ('*' in config) {\n newValue = config['*'];\n } else {\n //no match, return previous value\n return match;\n }\n if (newValue) {\n //replace value\n return prefix + newValue;\n } else {\n //remove value\n return '';\n }\n });\n};\n\n/**\n * Check the host and see if it potentially has a port in it (keep it simple)\n *\n * @returns {Boolean} Whether we have one or not\n *\n * @api private\n */\nfunction hasPort(host) {\n return !!~host.indexOf(':');\n};\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","var url = require(\"url\");\nvar URL = url.URL;\nvar http = require(\"http\");\nvar https = require(\"https\");\nvar Writable = require(\"stream\").Writable;\nvar assert = require(\"assert\");\nvar debug = require(\"./debug\");\n\n// Create handlers that pass events from native requests\nvar events = [\"abort\", \"aborted\", \"connect\", \"error\", \"socket\", \"timeout\"];\nvar eventHandlers = Object.create(null);\nevents.forEach(function (event) {\n eventHandlers[event] = function (arg1, arg2, arg3) {\n this._redirectable.emit(event, arg1, arg2, arg3);\n };\n});\n\n// Error types with codes\nvar RedirectionError = createErrorType(\n \"ERR_FR_REDIRECTION_FAILURE\",\n \"Redirected request failed\"\n);\nvar TooManyRedirectsError = createErrorType(\n \"ERR_FR_TOO_MANY_REDIRECTS\",\n \"Maximum number of redirects exceeded\"\n);\nvar MaxBodyLengthExceededError = createErrorType(\n \"ERR_FR_MAX_BODY_LENGTH_EXCEEDED\",\n \"Request body larger than maxBodyLength limit\"\n);\nvar WriteAfterEndError = createErrorType(\n \"ERR_STREAM_WRITE_AFTER_END\",\n \"write after end\"\n);\n\n// An HTTP(S) request that can be redirected\nfunction RedirectableRequest(options, responseCallback) {\n // Initialize the request\n Writable.call(this);\n this._sanitizeOptions(options);\n this._options = options;\n this._ended = false;\n this._ending = false;\n this._redirectCount = 0;\n this._redirects = [];\n this._requestBodyLength = 0;\n this._requestBodyBuffers = [];\n\n // Attach a callback if passed\n if (responseCallback) {\n this.on(\"response\", responseCallback);\n }\n\n // React to responses of native requests\n var self = this;\n this._onNativeResponse = function (response) {\n self._processResponse(response);\n };\n\n // Perform the first request\n this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\nRedirectableRequest.prototype.abort = function () {\n abortRequest(this._currentRequest);\n this.emit(\"abort\");\n};\n\n// Writes buffered data to the current native request\nRedirectableRequest.prototype.write = function (data, encoding, callback) {\n // Writing is not allowed if end has been called\n if (this._ending) {\n throw new WriteAfterEndError();\n }\n\n // Validate input and shift parameters if necessary\n if (!(typeof data === \"string\" || typeof data === \"object\" && (\"length\" in data))) {\n throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n }\n if (typeof encoding === \"function\") {\n callback = encoding;\n encoding = null;\n }\n\n // Ignore empty buffers, since writing them doesn't invoke the callback\n // https://github.com/nodejs/node/issues/22066\n if (data.length === 0) {\n if (callback) {\n callback();\n }\n return;\n }\n // Only write when we don't exceed the maximum body length\n if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n this._requestBodyLength += data.length;\n this._requestBodyBuffers.push({ data: data, encoding: encoding });\n this._currentRequest.write(data, encoding, callback);\n }\n // Error when we exceed the maximum body length\n else {\n this.emit(\"error\", new MaxBodyLengthExceededError());\n this.abort();\n }\n};\n\n// Ends the current native request\nRedirectableRequest.prototype.end = function (data, encoding, callback) {\n // Shift parameters if necessary\n if (typeof data === \"function\") {\n callback = data;\n data = encoding = null;\n }\n else if (typeof encoding === \"function\") {\n callback = encoding;\n encoding = null;\n }\n\n // Write data if needed and end\n if (!data) {\n this._ended = this._ending = true;\n this._currentRequest.end(null, null, callback);\n }\n else {\n var self = this;\n var currentRequest = this._currentRequest;\n this.write(data, encoding, function () {\n self._ended = true;\n currentRequest.end(null, null, callback);\n });\n this._ending = true;\n }\n};\n\n// Sets a header value on the current native request\nRedirectableRequest.prototype.setHeader = function (name, value) {\n this._options.headers[name] = value;\n this._currentRequest.setHeader(name, value);\n};\n\n// Clears a header value on the current native request\nRedirectableRequest.prototype.removeHeader = function (name) {\n delete this._options.headers[name];\n this._currentRequest.removeHeader(name);\n};\n\n// Global timeout for all underlying requests\nRedirectableRequest.prototype.setTimeout = function (msecs, callback) {\n var self = this;\n\n // Destroys the socket on timeout\n function destroyOnTimeout(socket) {\n socket.setTimeout(msecs);\n socket.removeListener(\"timeout\", socket.destroy);\n socket.addListener(\"timeout\", socket.destroy);\n }\n\n // Sets up a timer to trigger a timeout event\n function startTimer(socket) {\n if (self._timeout) {\n clearTimeout(self._timeout);\n }\n self._timeout = setTimeout(function () {\n self.emit(\"timeout\");\n clearTimer();\n }, msecs);\n destroyOnTimeout(socket);\n }\n\n // Stops a timeout from triggering\n function clearTimer() {\n // Clear the timeout\n if (self._timeout) {\n clearTimeout(self._timeout);\n self._timeout = null;\n }\n\n // Clean up all attached listeners\n self.removeListener(\"abort\", clearTimer);\n self.removeListener(\"error\", clearTimer);\n self.removeListener(\"response\", clearTimer);\n if (callback) {\n self.removeListener(\"timeout\", callback);\n }\n if (!self.socket) {\n self._currentRequest.removeListener(\"socket\", startTimer);\n }\n }\n\n // Attach callback if passed\n if (callback) {\n this.on(\"timeout\", callback);\n }\n\n // Start the timer if or when the socket is opened\n if (this.socket) {\n startTimer(this.socket);\n }\n else {\n this._currentRequest.once(\"socket\", startTimer);\n }\n\n // Clean up on events\n this.on(\"socket\", destroyOnTimeout);\n this.on(\"abort\", clearTimer);\n this.on(\"error\", clearTimer);\n this.on(\"response\", clearTimer);\n\n return this;\n};\n\n// Proxy all other public ClientRequest methods\n[\n \"flushHeaders\", \"getHeader\",\n \"setNoDelay\", \"setSocketKeepAlive\",\n].forEach(function (method) {\n RedirectableRequest.prototype[method] = function (a, b) {\n return this._currentRequest[method](a, b);\n };\n});\n\n// Proxy all public ClientRequest properties\n[\"aborted\", \"connection\", \"socket\"].forEach(function (property) {\n Object.defineProperty(RedirectableRequest.prototype, property, {\n get: function () { return this._currentRequest[property]; },\n });\n});\n\nRedirectableRequest.prototype._sanitizeOptions = function (options) {\n // Ensure headers are always present\n if (!options.headers) {\n options.headers = {};\n }\n\n // Since http.request treats host as an alias of hostname,\n // but the url module interprets host as hostname plus port,\n // eliminate the host property to avoid confusion.\n if (options.host) {\n // Use hostname if set, because it has precedence\n if (!options.hostname) {\n options.hostname = options.host;\n }\n delete options.host;\n }\n\n // Complete the URL object when necessary\n if (!options.pathname && options.path) {\n var searchPos = options.path.indexOf(\"?\");\n if (searchPos < 0) {\n options.pathname = options.path;\n }\n else {\n options.pathname = options.path.substring(0, searchPos);\n options.search = options.path.substring(searchPos);\n }\n }\n};\n\n\n// Executes the next native request (initial or redirect)\nRedirectableRequest.prototype._performRequest = function () {\n // Load the native protocol\n var protocol = this._options.protocol;\n var nativeProtocol = this._options.nativeProtocols[protocol];\n if (!nativeProtocol) {\n this.emit(\"error\", new TypeError(\"Unsupported protocol \" + protocol));\n return;\n }\n\n // If specified, use the agent corresponding to the protocol\n // (HTTP and HTTPS use different types of agents)\n if (this._options.agents) {\n var scheme = protocol.substr(0, protocol.length - 1);\n this._options.agent = this._options.agents[scheme];\n }\n\n // Create the native request\n var request = this._currentRequest =\n nativeProtocol.request(this._options, this._onNativeResponse);\n this._currentUrl = url.format(this._options);\n\n // Set up event handlers\n request._redirectable = this;\n for (var e = 0; e < events.length; e++) {\n request.on(events[e], eventHandlers[events[e]]);\n }\n\n // End a redirected request\n // (The first request must be ended explicitly with RedirectableRequest#end)\n if (this._isRedirect) {\n // Write the request entity and end.\n var i = 0;\n var self = this;\n var buffers = this._requestBodyBuffers;\n (function writeNext(error) {\n // Only write if this request has not been redirected yet\n /* istanbul ignore else */\n if (request === self._currentRequest) {\n // Report any write errors\n /* istanbul ignore if */\n if (error) {\n self.emit(\"error\", error);\n }\n // Write the next buffer if there are still left\n else if (i < buffers.length) {\n var buffer = buffers[i++];\n /* istanbul ignore else */\n if (!request.finished) {\n request.write(buffer.data, buffer.encoding, writeNext);\n }\n }\n // End the request if `end` has been called on us\n else if (self._ended) {\n request.end();\n }\n }\n }());\n }\n};\n\n// Processes a response from the current native request\nRedirectableRequest.prototype._processResponse = function (response) {\n // Store the redirected response\n var statusCode = response.statusCode;\n if (this._options.trackRedirects) {\n this._redirects.push({\n url: this._currentUrl,\n headers: response.headers,\n statusCode: statusCode,\n });\n }\n\n // RFC7231§6.4: The 3xx (Redirection) class of status code indicates\n // that further action needs to be taken by the user agent in order to\n // fulfill the request. If a Location header field is provided,\n // the user agent MAY automatically redirect its request to the URI\n // referenced by the Location field value,\n // even if the specific status code is not understood.\n var location = response.headers.location;\n if (location && this._options.followRedirects !== false &&\n statusCode >= 300 && statusCode < 400) {\n // Abort the current request\n abortRequest(this._currentRequest);\n // Discard the remainder of the response to avoid waiting for data\n response.destroy();\n\n // RFC7231§6.4: A client SHOULD detect and intervene\n // in cyclical redirections (i.e., \"infinite\" redirection loops).\n if (++this._redirectCount > this._options.maxRedirects) {\n this.emit(\"error\", new TooManyRedirectsError());\n return;\n }\n\n // RFC7231§6.4: Automatic redirection needs to done with\n // care for methods not known to be safe, […]\n // RFC7231§6.4.2–3: For historical reasons, a user agent MAY change\n // the request method from POST to GET for the subsequent request.\n if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" ||\n // RFC7231§6.4.4: The 303 (See Other) status code indicates that\n // the server is redirecting the user agent to a different resource […]\n // A user agent can perform a retrieval request targeting that URI\n // (a GET or HEAD request if using HTTP) […]\n (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {\n this._options.method = \"GET\";\n // Drop a possible entity and headers related to it\n this._requestBodyBuffers = [];\n removeMatchingHeaders(/^content-/i, this._options.headers);\n }\n\n // Drop the Host header, as the redirect might lead to a different host\n var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);\n\n // If the redirect is relative, carry over the host of the last request\n var currentUrlParts = url.parse(this._currentUrl);\n var currentHost = currentHostHeader || currentUrlParts.host;\n var currentUrl = /^\\w+:/.test(location) ? this._currentUrl :\n url.format(Object.assign(currentUrlParts, { host: currentHost }));\n\n // Determine the URL of the redirection\n var redirectUrl;\n try {\n redirectUrl = url.resolve(currentUrl, location);\n }\n catch (cause) {\n this.emit(\"error\", new RedirectionError(cause));\n return;\n }\n\n // Create the redirected request\n debug(\"redirecting to\", redirectUrl);\n this._isRedirect = true;\n var redirectUrlParts = url.parse(redirectUrl);\n Object.assign(this._options, redirectUrlParts);\n\n // Drop the confidential headers when redirecting to another domain\n if (!(redirectUrlParts.host === currentHost || isSubdomainOf(redirectUrlParts.host, currentHost))) {\n removeMatchingHeaders(/^(?:authorization|cookie)$/i, this._options.headers);\n }\n\n // Evaluate the beforeRedirect callback\n if (typeof this._options.beforeRedirect === \"function\") {\n var responseDetails = { headers: response.headers };\n try {\n this._options.beforeRedirect.call(null, this._options, responseDetails);\n }\n catch (err) {\n this.emit(\"error\", err);\n return;\n }\n this._sanitizeOptions(this._options);\n }\n\n // Perform the redirected request\n try {\n this._performRequest();\n }\n catch (cause) {\n this.emit(\"error\", new RedirectionError(cause));\n }\n }\n else {\n // The response is not a redirect; return it as-is\n response.responseUrl = this._currentUrl;\n response.redirects = this._redirects;\n this.emit(\"response\", response);\n\n // Clean up\n this._requestBodyBuffers = [];\n }\n};\n\n// Wraps the key/value object of protocols with redirect functionality\nfunction wrap(protocols) {\n // Default settings\n var exports = {\n maxRedirects: 21,\n maxBodyLength: 10 * 1024 * 1024,\n };\n\n // Wrap each protocol\n var nativeProtocols = {};\n Object.keys(protocols).forEach(function (scheme) {\n var protocol = scheme + \":\";\n var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);\n\n // Executes a request, following redirects\n function request(input, options, callback) {\n // Parse parameters\n if (typeof input === \"string\") {\n var urlStr = input;\n try {\n input = urlToOptions(new URL(urlStr));\n }\n catch (err) {\n /* istanbul ignore next */\n input = url.parse(urlStr);\n }\n }\n else if (URL && (input instanceof URL)) {\n input = urlToOptions(input);\n }\n else {\n callback = options;\n options = input;\n input = { protocol: protocol };\n }\n if (typeof options === \"function\") {\n callback = options;\n options = null;\n }\n\n // Set defaults\n options = Object.assign({\n maxRedirects: exports.maxRedirects,\n maxBodyLength: exports.maxBodyLength,\n }, input, options);\n options.nativeProtocols = nativeProtocols;\n\n assert.equal(options.protocol, protocol, \"protocol mismatch\");\n debug(\"options\", options);\n return new RedirectableRequest(options, callback);\n }\n\n // Executes a GET request, following redirects\n function get(input, options, callback) {\n var wrappedRequest = wrappedProtocol.request(input, options, callback);\n wrappedRequest.end();\n return wrappedRequest;\n }\n\n // Expose the properties on the wrapped protocol\n Object.defineProperties(wrappedProtocol, {\n request: { value: request, configurable: true, enumerable: true, writable: true },\n get: { value: get, configurable: true, enumerable: true, writable: true },\n });\n });\n return exports;\n}\n\n/* istanbul ignore next */\nfunction noop() { /* empty */ }\n\n// from https://github.com/nodejs/node/blob/master/lib/internal/url.js\nfunction urlToOptions(urlObject) {\n var options = {\n protocol: urlObject.protocol,\n hostname: urlObject.hostname.startsWith(\"[\") ?\n /* istanbul ignore next */\n urlObject.hostname.slice(1, -1) :\n urlObject.hostname,\n hash: urlObject.hash,\n search: urlObject.search,\n pathname: urlObject.pathname,\n path: urlObject.pathname + urlObject.search,\n href: urlObject.href,\n };\n if (urlObject.port !== \"\") {\n options.port = Number(urlObject.port);\n }\n return options;\n}\n\nfunction removeMatchingHeaders(regex, headers) {\n var lastValue;\n for (var header in headers) {\n if (regex.test(header)) {\n lastValue = headers[header];\n delete headers[header];\n }\n }\n return (lastValue === null || typeof lastValue === \"undefined\") ?\n undefined : String(lastValue).trim();\n}\n\nfunction createErrorType(code, defaultMessage) {\n function CustomError(cause) {\n Error.captureStackTrace(this, this.constructor);\n if (!cause) {\n this.message = defaultMessage;\n }\n else {\n this.message = defaultMessage + \": \" + cause.message;\n this.cause = cause;\n }\n }\n CustomError.prototype = new Error();\n CustomError.prototype.constructor = CustomError;\n CustomError.prototype.name = \"Error [\" + code + \"]\";\n CustomError.prototype.code = code;\n return CustomError;\n}\n\nfunction abortRequest(request) {\n for (var e = 0; e < events.length; e++) {\n request.removeListener(events[e], eventHandlers[events[e]]);\n }\n request.on(\"error\", noop);\n request.abort();\n}\n\nfunction isSubdomainOf(subdomain, domain) {\n const dot = subdomain.length - domain.length - 1;\n return dot > 0 && subdomain[dot] === \".\" && subdomain.endsWith(domain);\n}\n\n// Exports\nmodule.exports = wrap({ http: http, https: https });\nmodule.exports.wrap = wrap;\n","var debug;\n\nmodule.exports = function () {\n if (!debug) {\n try {\n /* eslint global-require: off */\n debug = require(\"debug\")(\"follow-redirects\");\n }\n catch (error) { /* */ }\n if (typeof debug !== \"function\") {\n debug = function () { /* */ };\n }\n }\n debug.apply(null, arguments);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.format(...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","'use strict';\nconst os = require('os');\nconst hasFlag = require('has-flag');\n\nconst env = process.env;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false')) {\n\tforceColor = false;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = true;\n}\nif ('FORCE_COLOR' in env) {\n\tforceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0;\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(stream) {\n\tif (forceColor === false) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (stream && !stream.isTTY && forceColor !== true) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor ? 1 : 0;\n\n\tif (process.platform === 'win32') {\n\t\t// Node.js 7.5.0 is the first version of Node.js to include a patch to\n\t\t// libuv that enables 256 color output on Windows. Anything earlier and it\n\t\t// won't work. However, here we target Node.js 8 at minimum as it is an LTS\n\t\t// release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows\n\t\t// release that supports 256 colors. Windows 10 build 14931 is the first release\n\t\t// that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(process.versions.node.split('.')[0]) >= 8 &&\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: getSupportLevel(process.stdout),\n\tstderr: getSupportLevel(process.stderr)\n};\n","'use strict';\nmodule.exports = (flag, argv) => {\n\targv = argv || process.argv;\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst pos = argv.indexOf(prefix + flag);\n\tconst terminatorPos = argv.indexOf('--');\n\treturn pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);\n};\n","var http = require('http'),\n https = require('https'),\n common = require('../common');\n\n/*!\n * Array of passes.\n *\n * A `pass` is just a function that is executed on `req, socket, options`\n * so that you can easily add new checks while still keeping the base\n * flexible.\n */\n\n/*\n * Websockets Passes\n *\n */\n\n\nmodule.exports = {\n /**\n * WebSocket requests must have the `GET` method and\n * the `upgrade:websocket` header\n *\n * @param {ClientRequest} Req Request object\n * @param {Socket} Websocket\n *\n * @api private\n */\n\n checkMethodAndHeader : function checkMethodAndHeader(req, socket) {\n if (req.method !== 'GET' || !req.headers.upgrade) {\n socket.destroy();\n return true;\n }\n\n if (req.headers.upgrade.toLowerCase() !== 'websocket') {\n socket.destroy();\n return true;\n }\n },\n\n /**\n * Sets `x-forwarded-*` headers if specified in config.\n *\n * @param {ClientRequest} Req Request object\n * @param {Socket} Websocket\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n\n XHeaders : function XHeaders(req, socket, options) {\n if(!options.xfwd) return;\n\n var values = {\n for : req.connection.remoteAddress || req.socket.remoteAddress,\n port : common.getPort(req),\n proto: common.hasEncryptedConnection(req) ? 'wss' : 'ws'\n };\n\n ['for', 'port', 'proto'].forEach(function(header) {\n req.headers['x-forwarded-' + header] =\n (req.headers['x-forwarded-' + header] || '') +\n (req.headers['x-forwarded-' + header] ? ',' : '') +\n values[header];\n });\n },\n\n /**\n * Does the actual proxying. Make the request and upgrade it\n * send the Switching Protocols request and pipe the sockets.\n *\n * @param {ClientRequest} Req Request object\n * @param {Socket} Websocket\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n stream : function stream(req, socket, options, head, server, clb) {\n\n var createHttpHeader = function(line, headers) {\n return Object.keys(headers).reduce(function (head, key) {\n var value = headers[key];\n\n if (!Array.isArray(value)) {\n head.push(key + ': ' + value);\n return head;\n }\n\n for (var i = 0; i < value.length; i++) {\n head.push(key + ': ' + value[i]);\n }\n return head;\n }, [line])\n .join('\\r\\n') + '\\r\\n\\r\\n';\n }\n\n common.setupSocket(socket);\n\n if (head && head.length) socket.unshift(head);\n\n\n var proxyReq = (common.isSSL.test(options.target.protocol) ? https : http).request(\n common.setupOutgoing(options.ssl || {}, options, req)\n );\n\n // Enable developers to modify the proxyReq before headers are sent\n if (server) { server.emit('proxyReqWs', proxyReq, req, socket, options, head); }\n\n // Error Handler\n proxyReq.on('error', onOutgoingError);\n proxyReq.on('response', function (res) {\n // if upgrade event isn't going to happen, close the socket\n if (!res.upgrade) {\n socket.write(createHttpHeader('HTTP/' + res.httpVersion + ' ' + res.statusCode + ' ' + res.statusMessage, res.headers));\n res.pipe(socket);\n }\n });\n\n proxyReq.on('upgrade', function(proxyRes, proxySocket, proxyHead) {\n proxySocket.on('error', onOutgoingError);\n\n // Allow us to listen when the websocket has completed\n proxySocket.on('end', function () {\n server.emit('close', proxyRes, proxySocket, proxyHead);\n });\n\n // The pipe below will end proxySocket if socket closes cleanly, but not\n // if it errors (eg, vanishes from the net and starts returning\n // EHOSTUNREACH). We need to do that explicitly.\n socket.on('error', function () {\n proxySocket.end();\n });\n\n common.setupSocket(proxySocket);\n\n if (proxyHead && proxyHead.length) proxySocket.unshift(proxyHead);\n\n //\n // Remark: Handle writing the headers to the socket when switching protocols\n // Also handles when a header is an array\n //\n socket.write(createHttpHeader('HTTP/1.1 101 Switching Protocols', proxyRes.headers));\n\n proxySocket.pipe(socket).pipe(proxySocket);\n\n server.emit('open', proxySocket);\n server.emit('proxySocket', proxySocket); //DEPRECATED.\n });\n\n return proxyReq.end(); // XXX: CHECK IF THIS IS THIS CORRECT\n\n function onOutgoingError(err) {\n if (clb) {\n clb(err, req, socket);\n } else {\n server.emit('error', err, req, socket);\n }\n socket.end();\n }\n }\n};\n","'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = utils.isWindows(options);\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.supportsLookbehinds = () => {\n const segs = process.version.slice(1).split('.').map(Number);\n if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n return true;\n }\n return false;\n};\n\nexports.isWindows = options => {\n if (options && typeof options.windows === 'boolean') {\n return options.windows;\n }\n return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n","'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n SEP: path.sep,\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(win32);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.value += tok.value;\n prev.output = (prev.output || '') + tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n output = token.close = `)${rest})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if (next === '<' && !utils.supportsLookbehinds()) {\n throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n }\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(win32);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./public\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fixRequestBody = exports.responseInterceptor = void 0;\nvar response_interceptor_1 = require(\"./response-interceptor\");\nObject.defineProperty(exports, \"responseInterceptor\", { enumerable: true, get: function () { return response_interceptor_1.responseInterceptor; } });\nvar fix_request_body_1 = require(\"./fix-request-body\");\nObject.defineProperty(exports, \"fixRequestBody\", { enumerable: true, get: function () { return fix_request_body_1.fixRequestBody; } });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.responseInterceptor = void 0;\nconst zlib = require(\"zlib\");\n/**\n * Intercept responses from upstream.\n * Automatically decompress (deflate, gzip, brotli).\n * Give developer the opportunity to modify intercepted Buffer and http.ServerResponse\n *\n * NOTE: must set options.selfHandleResponse=true (prevent automatic call of res.end())\n */\nfunction responseInterceptor(interceptor) {\n return async function proxyRes(proxyRes, req, res) {\n const originalProxyRes = proxyRes;\n let buffer = Buffer.from('', 'utf8');\n // decompress proxy response\n const _proxyRes = decompress(proxyRes, proxyRes.headers['content-encoding']);\n // concat data stream\n _proxyRes.on('data', (chunk) => (buffer = Buffer.concat([buffer, chunk])));\n _proxyRes.on('end', async () => {\n // copy original headers\n copyHeaders(proxyRes, res);\n // call interceptor with intercepted response (buffer)\n const interceptedBuffer = Buffer.from(await interceptor(buffer, originalProxyRes, req, res));\n // set correct content-length (with double byte character support)\n res.setHeader('content-length', Buffer.byteLength(interceptedBuffer, 'utf8'));\n res.write(interceptedBuffer);\n res.end();\n });\n _proxyRes.on('error', (error) => {\n res.end(`Error fetching proxied request: ${error.message}`);\n });\n };\n}\nexports.responseInterceptor = responseInterceptor;\n/**\n * Streaming decompression of proxy response\n * source: https://github.com/apache/superset/blob/9773aba522e957ed9423045ca153219638a85d2f/superset-frontend/webpack.proxy-config.js#L116\n */\nfunction decompress(proxyRes, contentEncoding) {\n let _proxyRes = proxyRes;\n let decompress;\n switch (contentEncoding) {\n case 'gzip':\n decompress = zlib.createGunzip();\n break;\n case 'br':\n decompress = zlib.createBrotliDecompress();\n break;\n case 'deflate':\n decompress = zlib.createInflate();\n break;\n default:\n break;\n }\n if (decompress) {\n _proxyRes.pipe(decompress);\n _proxyRes = decompress;\n }\n return _proxyRes;\n}\n/**\n * Copy original headers\n * https://github.com/apache/superset/blob/9773aba522e957ed9423045ca153219638a85d2f/superset-frontend/webpack.proxy-config.js#L78\n */\nfunction copyHeaders(originalResponse, response) {\n response.statusCode = originalResponse.statusCode;\n response.statusMessage = originalResponse.statusMessage;\n if (response.setHeader) {\n let keys = Object.keys(originalResponse.headers);\n // ignore chunked, brotli, gzip, deflate headers\n keys = keys.filter((key) => !['content-encoding', 'transfer-encoding'].includes(key));\n keys.forEach((key) => {\n let value = originalResponse.headers[key];\n if (key === 'set-cookie') {\n // remove cookie domain\n value = Array.isArray(value) ? value : [value];\n value = value.map((x) => x.replace(/Domain=[^;]+?/i, ''));\n }\n response.setHeader(key, value);\n });\n }\n else {\n response.headers = originalResponse.headers;\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fixRequestBody = void 0;\nconst querystring = require(\"querystring\");\n/**\n * Fix proxied body if bodyParser is involved.\n */\nfunction fixRequestBody(proxyReq, req) {\n const requestBody = req.body;\n if (!requestBody || !Object.keys(requestBody).length) {\n return;\n }\n const contentType = proxyReq.getHeader('Content-Type');\n const writeBody = (bodyData) => {\n // deepcode ignore ContentLengthInCode: bodyParser fix\n proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));\n proxyReq.write(bodyData);\n };\n if (contentType && contentType.includes('application/json')) {\n writeBody(JSON.stringify(requestBody));\n }\n if (contentType === 'application/x-www-form-urlencoded') {\n writeBody(querystring.stringify(requestBody));\n }\n}\nexports.fixRequestBody = fixRequestBody;\n","{\n \"application/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"application/3gpdash-qoe-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/3gpp-ims+xml\": {\n \"source\": \"iana\"\n },\n \"application/a2l\": {\n \"source\": \"iana\"\n },\n \"application/activemessage\": {\n \"source\": \"iana\"\n },\n \"application/alto-costmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-directory+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcost+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcostparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointprop+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointpropparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-error+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/aml\": {\n \"source\": \"iana\"\n },\n \"application/andrew-inset\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez\"]\n },\n \"application/applefile\": {\n \"source\": \"iana\"\n },\n \"application/applixware\": {\n \"source\": \"apache\",\n \"extensions\": [\"aw\"]\n },\n \"application/atf\": {\n \"source\": \"iana\"\n },\n \"application/atfx\": {\n \"source\": \"iana\"\n },\n \"application/atom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atom\"]\n },\n \"application/atomcat+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"atomcat\"]\n },\n \"application/atomdeleted+xml\": {\n \"source\": \"iana\"\n },\n \"application/atomicmail\": {\n \"source\": \"iana\"\n },\n \"application/atomsvc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"atomsvc\"]\n },\n \"application/atxml\": {\n \"source\": \"iana\"\n },\n \"application/auth-policy+xml\": {\n \"source\": \"iana\"\n },\n \"application/bacnet-xdd+zip\": {\n \"source\": \"iana\"\n },\n \"application/batch-smtp\": {\n \"source\": \"iana\"\n },\n \"application/bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/beep+xml\": {\n \"source\": \"iana\"\n },\n \"application/calendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/calendar+xml\": {\n \"source\": \"iana\"\n },\n \"application/call-completion\": {\n \"source\": \"iana\"\n },\n \"application/cals-1840\": {\n \"source\": \"iana\"\n },\n \"application/cbor\": {\n \"source\": \"iana\"\n },\n \"application/cccex\": {\n \"source\": \"iana\"\n },\n \"application/ccmp+xml\": {\n \"source\": \"iana\"\n },\n \"application/ccxml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"ccxml\"]\n },\n \"application/cdfx+xml\": {\n \"source\": \"iana\"\n },\n \"application/cdmi-capability\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmia\"]\n },\n \"application/cdmi-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmic\"]\n },\n \"application/cdmi-domain\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmid\"]\n },\n \"application/cdmi-object\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmio\"]\n },\n \"application/cdmi-queue\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmiq\"]\n },\n \"application/cdni\": {\n \"source\": \"iana\"\n },\n \"application/cea\": {\n \"source\": \"iana\"\n },\n \"application/cea-2018+xml\": {\n \"source\": \"iana\"\n },\n \"application/cellml+xml\": {\n \"source\": \"iana\"\n },\n \"application/cfw\": {\n \"source\": \"iana\"\n },\n \"application/clue_info+xml\": {\n \"source\": \"iana\"\n },\n \"application/cms\": {\n \"source\": \"iana\"\n },\n \"application/cnrp+xml\": {\n \"source\": \"iana\"\n },\n \"application/coap-group+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-payload\": {\n \"source\": \"iana\"\n },\n \"application/commonground\": {\n \"source\": \"iana\"\n },\n \"application/conference-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/cose\": {\n \"source\": \"iana\"\n },\n \"application/cose-key\": {\n \"source\": \"iana\"\n },\n \"application/cose-key-set\": {\n \"source\": \"iana\"\n },\n \"application/cpl+xml\": {\n \"source\": \"iana\"\n },\n \"application/csrattrs\": {\n \"source\": \"iana\"\n },\n \"application/csta+xml\": {\n \"source\": \"iana\"\n },\n \"application/cstadata+xml\": {\n \"source\": \"iana\"\n },\n \"application/csvm+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cu-seeme\": {\n \"source\": \"apache\",\n \"extensions\": [\"cu\"]\n },\n \"application/cybercash\": {\n \"source\": \"iana\"\n },\n \"application/dart\": {\n \"compressible\": true\n },\n \"application/dash+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpd\"]\n },\n \"application/dashdelta\": {\n \"source\": \"iana\"\n },\n \"application/davmount+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"davmount\"]\n },\n \"application/dca-rft\": {\n \"source\": \"iana\"\n },\n \"application/dcd\": {\n \"source\": \"iana\"\n },\n \"application/dec-dx\": {\n \"source\": \"iana\"\n },\n \"application/dialog-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/dicom\": {\n \"source\": \"iana\"\n },\n \"application/dicom+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom+xml\": {\n \"source\": \"iana\"\n },\n \"application/dii\": {\n \"source\": \"iana\"\n },\n \"application/dit\": {\n \"source\": \"iana\"\n },\n \"application/dns\": {\n \"source\": \"iana\"\n },\n \"application/docbook+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"dbk\"]\n },\n \"application/dskpp+xml\": {\n \"source\": \"iana\"\n },\n \"application/dssc+der\": {\n \"source\": \"iana\",\n \"extensions\": [\"dssc\"]\n },\n \"application/dssc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdssc\"]\n },\n \"application/dvcs\": {\n \"source\": \"iana\"\n },\n \"application/ecmascript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ecma\"]\n },\n \"application/edi-consent\": {\n \"source\": \"iana\"\n },\n \"application/edi-x12\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/edifact\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/efi\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.comment+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.control+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.deviceinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.ecall.msd\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.providerinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.serviceinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.subscriberinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.veds+xml\": {\n \"source\": \"iana\"\n },\n \"application/emma+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"emma\"]\n },\n \"application/emotionml+xml\": {\n \"source\": \"iana\"\n },\n \"application/encaprtp\": {\n \"source\": \"iana\"\n },\n \"application/epp+xml\": {\n \"source\": \"iana\"\n },\n \"application/epub+zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"epub\"]\n },\n \"application/eshop\": {\n \"source\": \"iana\"\n },\n \"application/exi\": {\n \"source\": \"iana\",\n \"extensions\": [\"exi\"]\n },\n \"application/fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/fastsoap\": {\n \"source\": \"iana\"\n },\n \"application/fdt+xml\": {\n \"source\": \"iana\"\n },\n \"application/fhir+xml\": {\n \"source\": \"iana\"\n },\n \"application/fido.trusted-apps+json\": {\n \"compressible\": true\n },\n \"application/fits\": {\n \"source\": \"iana\"\n },\n \"application/font-sfnt\": {\n \"source\": \"iana\"\n },\n \"application/font-tdpfr\": {\n \"source\": \"iana\",\n \"extensions\": [\"pfr\"]\n },\n \"application/font-woff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"woff\"]\n },\n \"application/framework-attributes+xml\": {\n \"source\": \"iana\"\n },\n \"application/geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"geojson\"]\n },\n \"application/geo+json-seq\": {\n \"source\": \"iana\"\n },\n \"application/geoxacml+xml\": {\n \"source\": \"iana\"\n },\n \"application/gml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"gml\"]\n },\n \"application/gpx+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gpx\"]\n },\n \"application/gxf\": {\n \"source\": \"apache\",\n \"extensions\": [\"gxf\"]\n },\n \"application/gzip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gz\"]\n },\n \"application/h224\": {\n \"source\": \"iana\"\n },\n \"application/held+xml\": {\n \"source\": \"iana\"\n },\n \"application/hjson\": {\n \"extensions\": [\"hjson\"]\n },\n \"application/http\": {\n \"source\": \"iana\"\n },\n \"application/hyperstudio\": {\n \"source\": \"iana\",\n \"extensions\": [\"stk\"]\n },\n \"application/ibe-key-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/ibe-pkg-reply+xml\": {\n \"source\": \"iana\"\n },\n \"application/ibe-pp-data\": {\n \"source\": \"iana\"\n },\n \"application/iges\": {\n \"source\": \"iana\"\n },\n \"application/im-iscomposing+xml\": {\n \"source\": \"iana\"\n },\n \"application/index\": {\n \"source\": \"iana\"\n },\n \"application/index.cmd\": {\n \"source\": \"iana\"\n },\n \"application/index.obj\": {\n \"source\": \"iana\"\n },\n \"application/index.response\": {\n \"source\": \"iana\"\n },\n \"application/index.vnd\": {\n \"source\": \"iana\"\n },\n \"application/inkml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"ink\",\"inkml\"]\n },\n \"application/iotp\": {\n \"source\": \"iana\"\n },\n \"application/ipfix\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipfix\"]\n },\n \"application/ipp\": {\n \"source\": \"iana\"\n },\n \"application/isup\": {\n \"source\": \"iana\"\n },\n \"application/its+xml\": {\n \"source\": \"iana\"\n },\n \"application/java-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jar\",\"war\",\"ear\"]\n },\n \"application/java-serialized-object\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"ser\"]\n },\n \"application/java-vm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"class\"]\n },\n \"application/javascript\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"js\",\"mjs\"]\n },\n \"application/jf2feed+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jose\": {\n \"source\": \"iana\"\n },\n \"application/jose+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jrd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"json\",\"map\"]\n },\n \"application/json-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json-seq\": {\n \"source\": \"iana\"\n },\n \"application/json5\": {\n \"extensions\": [\"json5\"]\n },\n \"application/jsonml+json\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"jsonml\"]\n },\n \"application/jwk+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwk-set+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwt\": {\n \"source\": \"iana\"\n },\n \"application/kpml-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/kpml-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/ld+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"jsonld\"]\n },\n \"application/lgr+xml\": {\n \"source\": \"iana\"\n },\n \"application/link-format\": {\n \"source\": \"iana\"\n },\n \"application/load-control+xml\": {\n \"source\": \"iana\"\n },\n \"application/lost+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"lostxml\"]\n },\n \"application/lostsync+xml\": {\n \"source\": \"iana\"\n },\n \"application/lxf\": {\n \"source\": \"iana\"\n },\n \"application/mac-binhex40\": {\n \"source\": \"iana\",\n \"extensions\": [\"hqx\"]\n },\n \"application/mac-compactpro\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpt\"]\n },\n \"application/macwriteii\": {\n \"source\": \"iana\"\n },\n \"application/mads+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mads\"]\n },\n \"application/manifest+json\": {\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"webmanifest\"]\n },\n \"application/marc\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrc\"]\n },\n \"application/marcxml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrcx\"]\n },\n \"application/mathematica\": {\n \"source\": \"iana\",\n \"extensions\": [\"ma\",\"nb\",\"mb\"]\n },\n \"application/mathml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mathml\"]\n },\n \"application/mathml-content+xml\": {\n \"source\": \"iana\"\n },\n \"application/mathml-presentation+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-associated-procedure-description+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-deregister+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-envelope+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-msk+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-msk-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-protection-description+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-reception-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-register+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-register-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-schedule+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-user-service-description+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbox\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbox\"]\n },\n \"application/media-policy-dataset+xml\": {\n \"source\": \"iana\"\n },\n \"application/media_control+xml\": {\n \"source\": \"iana\"\n },\n \"application/mediaservercontrol+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mscml\"]\n },\n \"application/merge-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/metalink+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"metalink\"]\n },\n \"application/metalink4+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"meta4\"]\n },\n \"application/mets+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mets\"]\n },\n \"application/mf4\": {\n \"source\": \"iana\"\n },\n \"application/mikey\": {\n \"source\": \"iana\"\n },\n \"application/mmt-usd+xml\": {\n \"source\": \"iana\"\n },\n \"application/mods+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mods\"]\n },\n \"application/moss-keys\": {\n \"source\": \"iana\"\n },\n \"application/moss-signature\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-data\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-request\": {\n \"source\": \"iana\"\n },\n \"application/mp21\": {\n \"source\": \"iana\",\n \"extensions\": [\"m21\",\"mp21\"]\n },\n \"application/mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"mp4s\",\"m4p\"]\n },\n \"application/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod-xmt\": {\n \"source\": \"iana\"\n },\n \"application/mrb-consumer+xml\": {\n \"source\": \"iana\"\n },\n \"application/mrb-publish+xml\": {\n \"source\": \"iana\"\n },\n \"application/msc-ivr+xml\": {\n \"source\": \"iana\"\n },\n \"application/msc-mixer+xml\": {\n \"source\": \"iana\"\n },\n \"application/msword\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"doc\",\"dot\"]\n },\n \"application/mud+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxf\"]\n },\n \"application/n-quads\": {\n \"source\": \"iana\"\n },\n \"application/n-triples\": {\n \"source\": \"iana\"\n },\n \"application/nasdata\": {\n \"source\": \"iana\"\n },\n \"application/news-checkgroups\": {\n \"source\": \"iana\"\n },\n \"application/news-groupinfo\": {\n \"source\": \"iana\"\n },\n \"application/news-transmission\": {\n \"source\": \"iana\"\n },\n \"application/nlsml+xml\": {\n \"source\": \"iana\"\n },\n \"application/node\": {\n \"source\": \"iana\"\n },\n \"application/nss\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-request\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-response\": {\n \"source\": \"iana\"\n },\n \"application/octet-stream\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n },\n \"application/oda\": {\n \"source\": \"iana\",\n \"extensions\": [\"oda\"]\n },\n \"application/odx\": {\n \"source\": \"iana\"\n },\n \"application/oebps-package+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"opf\"]\n },\n \"application/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogx\"]\n },\n \"application/omdoc+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"omdoc\"]\n },\n \"application/onenote\": {\n \"source\": \"apache\",\n \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n },\n \"application/oxps\": {\n \"source\": \"iana\",\n \"extensions\": [\"oxps\"]\n },\n \"application/p2p-overlay+xml\": {\n \"source\": \"iana\"\n },\n \"application/parityfec\": {\n \"source\": \"iana\"\n },\n \"application/passport\": {\n \"source\": \"iana\"\n },\n \"application/patch-ops-error+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xer\"]\n },\n \"application/pdf\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pdf\"]\n },\n \"application/pdx\": {\n \"source\": \"iana\"\n },\n \"application/pgp-encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pgp\"]\n },\n \"application/pgp-keys\": {\n \"source\": \"iana\"\n },\n \"application/pgp-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\",\"sig\"]\n },\n \"application/pics-rules\": {\n \"source\": \"apache\",\n \"extensions\": [\"prf\"]\n },\n \"application/pidf+xml\": {\n \"source\": \"iana\"\n },\n \"application/pidf-diff+xml\": {\n \"source\": \"iana\"\n },\n \"application/pkcs10\": {\n \"source\": \"iana\",\n \"extensions\": [\"p10\"]\n },\n \"application/pkcs12\": {\n \"source\": \"iana\"\n },\n \"application/pkcs7-mime\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7m\",\"p7c\"]\n },\n \"application/pkcs7-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7s\"]\n },\n \"application/pkcs8\": {\n \"source\": \"iana\",\n \"extensions\": [\"p8\"]\n },\n \"application/pkcs8-encrypted\": {\n \"source\": \"iana\"\n },\n \"application/pkix-attr-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"ac\"]\n },\n \"application/pkix-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"cer\"]\n },\n \"application/pkix-crl\": {\n \"source\": \"iana\",\n \"extensions\": [\"crl\"]\n },\n \"application/pkix-pkipath\": {\n \"source\": \"iana\",\n \"extensions\": [\"pkipath\"]\n },\n \"application/pkixcmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"pki\"]\n },\n \"application/pls+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pls\"]\n },\n \"application/poc-settings+xml\": {\n \"source\": \"iana\"\n },\n \"application/postscript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ai\",\"eps\",\"ps\"]\n },\n \"application/ppsp-tracker+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+xml\": {\n \"source\": \"iana\"\n },\n \"application/provenance+xml\": {\n \"source\": \"iana\"\n },\n \"application/prs.alvestrand.titrax-sheet\": {\n \"source\": \"iana\"\n },\n \"application/prs.cww\": {\n \"source\": \"iana\",\n \"extensions\": [\"cww\"]\n },\n \"application/prs.hpub+zip\": {\n \"source\": \"iana\"\n },\n \"application/prs.nprend\": {\n \"source\": \"iana\"\n },\n \"application/prs.plucker\": {\n \"source\": \"iana\"\n },\n \"application/prs.rdf-xml-crypt\": {\n \"source\": \"iana\"\n },\n \"application/prs.xsf+xml\": {\n \"source\": \"iana\"\n },\n \"application/pskc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pskcxml\"]\n },\n \"application/qsig\": {\n \"source\": \"iana\"\n },\n \"application/raml+yaml\": {\n \"compressible\": true,\n \"extensions\": [\"raml\"]\n },\n \"application/raptorfec\": {\n \"source\": \"iana\"\n },\n \"application/rdap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rdf\"]\n },\n \"application/reginfo+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rif\"]\n },\n \"application/relax-ng-compact-syntax\": {\n \"source\": \"iana\",\n \"extensions\": [\"rnc\"]\n },\n \"application/remote-printing\": {\n \"source\": \"iana\"\n },\n \"application/reputon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/resource-lists+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rl\"]\n },\n \"application/resource-lists-diff+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rld\"]\n },\n \"application/rfc+xml\": {\n \"source\": \"iana\"\n },\n \"application/riscos\": {\n \"source\": \"iana\"\n },\n \"application/rlmi+xml\": {\n \"source\": \"iana\"\n },\n \"application/rls-services+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rs\"]\n },\n \"application/route-apd+xml\": {\n \"source\": \"iana\"\n },\n \"application/route-s-tsid+xml\": {\n \"source\": \"iana\"\n },\n \"application/route-usd+xml\": {\n \"source\": \"iana\"\n },\n \"application/rpki-ghostbusters\": {\n \"source\": \"iana\",\n \"extensions\": [\"gbr\"]\n },\n \"application/rpki-manifest\": {\n \"source\": \"iana\",\n \"extensions\": [\"mft\"]\n },\n \"application/rpki-publication\": {\n \"source\": \"iana\"\n },\n \"application/rpki-roa\": {\n \"source\": \"iana\",\n \"extensions\": [\"roa\"]\n },\n \"application/rpki-updown\": {\n \"source\": \"iana\"\n },\n \"application/rsd+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"rsd\"]\n },\n \"application/rss+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rss\"]\n },\n \"application/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"application/rtploopback\": {\n \"source\": \"iana\"\n },\n \"application/rtx\": {\n \"source\": \"iana\"\n },\n \"application/samlassertion+xml\": {\n \"source\": \"iana\"\n },\n \"application/samlmetadata+xml\": {\n \"source\": \"iana\"\n },\n \"application/sbml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sbml\"]\n },\n \"application/scaip+xml\": {\n \"source\": \"iana\"\n },\n \"application/scim+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scvp-cv-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"scq\"]\n },\n \"application/scvp-cv-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"scs\"]\n },\n \"application/scvp-vp-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"spq\"]\n },\n \"application/scvp-vp-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"spp\"]\n },\n \"application/sdp\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdp\"]\n },\n \"application/sep+xml\": {\n \"source\": \"iana\"\n },\n \"application/sep-exi\": {\n \"source\": \"iana\"\n },\n \"application/session-info\": {\n \"source\": \"iana\"\n },\n \"application/set-payment\": {\n \"source\": \"iana\"\n },\n \"application/set-payment-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setpay\"]\n },\n \"application/set-registration\": {\n \"source\": \"iana\"\n },\n \"application/set-registration-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setreg\"]\n },\n \"application/sgml\": {\n \"source\": \"iana\"\n },\n \"application/sgml-open-catalog\": {\n \"source\": \"iana\"\n },\n \"application/shf+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"shf\"]\n },\n \"application/sieve\": {\n \"source\": \"iana\"\n },\n \"application/simple-filter+xml\": {\n \"source\": \"iana\"\n },\n \"application/simple-message-summary\": {\n \"source\": \"iana\"\n },\n \"application/simplesymbolcontainer\": {\n \"source\": \"iana\"\n },\n \"application/slate\": {\n \"source\": \"iana\"\n },\n \"application/smil\": {\n \"source\": \"iana\"\n },\n \"application/smil+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"smi\",\"smil\"]\n },\n \"application/smpte336m\": {\n \"source\": \"iana\"\n },\n \"application/soap+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/soap+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sparql-query\": {\n \"source\": \"iana\",\n \"extensions\": [\"rq\"]\n },\n \"application/sparql-results+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"srx\"]\n },\n \"application/spirits-event+xml\": {\n \"source\": \"iana\"\n },\n \"application/sql\": {\n \"source\": \"iana\"\n },\n \"application/srgs\": {\n \"source\": \"iana\",\n \"extensions\": [\"gram\"]\n },\n \"application/srgs+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"grxml\"]\n },\n \"application/sru+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sru\"]\n },\n \"application/ssdl+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"ssdl\"]\n },\n \"application/ssml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssml\"]\n },\n \"application/tamp-apex-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-apex-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-error\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-query\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-response\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tar\": {\n \"compressible\": true\n },\n \"application/tei+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"tei\",\"teicorpus\"]\n },\n \"application/thraud+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"tfi\"]\n },\n \"application/timestamp-query\": {\n \"source\": \"iana\"\n },\n \"application/timestamp-reply\": {\n \"source\": \"iana\"\n },\n \"application/timestamped-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"tsd\"]\n },\n \"application/tnauthlist\": {\n \"source\": \"iana\"\n },\n \"application/trig\": {\n \"source\": \"iana\"\n },\n \"application/ttml+xml\": {\n \"source\": \"iana\"\n },\n \"application/tve-trigger\": {\n \"source\": \"iana\"\n },\n \"application/ulpfec\": {\n \"source\": \"iana\"\n },\n \"application/urc-grpsheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/urc-ressheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/urc-targetdesc+xml\": {\n \"source\": \"iana\"\n },\n \"application/urc-uisocketdesc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vcard+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+xml\": {\n \"source\": \"iana\"\n },\n \"application/vemmi\": {\n \"source\": \"iana\"\n },\n \"application/vividence.scriptfile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.1000minds.decision-model+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp-prose+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp-prose-pc3ch+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp-v2x-local-service-information\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.access-transfer-events+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.bsf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.gmop+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-location-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-signed+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mid-call+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pic-bw-large\": {\n \"source\": \"iana\",\n \"extensions\": [\"plb\"]\n },\n \"application/vnd.3gpp.pic-bw-small\": {\n \"source\": \"iana\",\n \"extensions\": [\"psb\"]\n },\n \"application/vnd.3gpp.pic-bw-var\": {\n \"source\": \"iana\",\n \"extensions\": [\"pvb\"]\n },\n \"application/vnd.3gpp.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.srvcc-ext+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.srvcc-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.state-and-event-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.ussd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.tcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tcap\"]\n },\n \"application/vnd.3lightssoftware.imagescal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3m.post-it-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"pwn\"]\n },\n \"application/vnd.accpac.simply.aso\": {\n \"source\": \"iana\",\n \"extensions\": [\"aso\"]\n },\n \"application/vnd.accpac.simply.imp\": {\n \"source\": \"iana\",\n \"extensions\": [\"imp\"]\n },\n \"application/vnd.acucobol\": {\n \"source\": \"iana\",\n \"extensions\": [\"acu\"]\n },\n \"application/vnd.acucorp\": {\n \"source\": \"iana\",\n \"extensions\": [\"atc\",\"acutc\"]\n },\n \"application/vnd.adobe.air-application-installer-package+zip\": {\n \"source\": \"apache\",\n \"extensions\": [\"air\"]\n },\n \"application/vnd.adobe.flash.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.formscentral.fcdt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcdt\"]\n },\n \"application/vnd.adobe.fxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fxp\",\"fxpl\"]\n },\n \"application/vnd.adobe.partial-upload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.xdp+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdp\"]\n },\n \"application/vnd.adobe.xfdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdf\"]\n },\n \"application/vnd.aether.imp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ah-barcode\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ahead.space\": {\n \"source\": \"iana\",\n \"extensions\": [\"ahead\"]\n },\n \"application/vnd.airzip.filesecure.azf\": {\n \"source\": \"iana\",\n \"extensions\": [\"azf\"]\n },\n \"application/vnd.airzip.filesecure.azs\": {\n \"source\": \"iana\",\n \"extensions\": [\"azs\"]\n },\n \"application/vnd.amadeus+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.amazon.ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"azw\"]\n },\n \"application/vnd.amazon.mobi8-ebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.americandynamics.acc\": {\n \"source\": \"iana\",\n \"extensions\": [\"acc\"]\n },\n \"application/vnd.amiga.ami\": {\n \"source\": \"iana\",\n \"extensions\": [\"ami\"]\n },\n \"application/vnd.amundsen.maze+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.android.package-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"apk\"]\n },\n \"application/vnd.anki\": {\n \"source\": \"iana\"\n },\n \"application/vnd.anser-web-certificate-issue-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"cii\"]\n },\n \"application/vnd.anser-web-funds-transfer-initiation\": {\n \"source\": \"apache\",\n \"extensions\": [\"fti\"]\n },\n \"application/vnd.antix.game-component\": {\n \"source\": \"iana\",\n \"extensions\": [\"atx\"]\n },\n \"application/vnd.apache.thrift.binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.compact\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.json\": {\n \"source\": \"iana\"\n },\n \"application/vnd.api+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apothekende.reservation+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apple.installer+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpkg\"]\n },\n \"application/vnd.apple.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"m3u8\"]\n },\n \"application/vnd.apple.pkpass\": {\n \"compressible\": false,\n \"extensions\": [\"pkpass\"]\n },\n \"application/vnd.arastra.swi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.aristanetworks.swi\": {\n \"source\": \"iana\",\n \"extensions\": [\"swi\"]\n },\n \"application/vnd.artsquare\": {\n \"source\": \"iana\"\n },\n \"application/vnd.astraea-software.iota\": {\n \"source\": \"iana\",\n \"extensions\": [\"iota\"]\n },\n \"application/vnd.audiograph\": {\n \"source\": \"iana\",\n \"extensions\": [\"aep\"]\n },\n \"application/vnd.autopackage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.avalon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.avistar+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.balsamiq.bmml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.balsamiq.bmpr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bekitzur-stech+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bint.med-content\": {\n \"source\": \"iana\"\n },\n \"application/vnd.biopax.rdf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blink-idb-value-wrapper\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blueice.multipass\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpm\"]\n },\n \"application/vnd.bluetooth.ep.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bluetooth.le.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bmi\": {\n \"source\": \"iana\",\n \"extensions\": [\"bmi\"]\n },\n \"application/vnd.businessobjects\": {\n \"source\": \"iana\",\n \"extensions\": [\"rep\"]\n },\n \"application/vnd.cab-jscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-cpdl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-lips\": {\n \"source\": \"iana\"\n },\n \"application/vnd.capasystems-pg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cendio.thinlinc.clientconf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.century-systems.tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chemdraw+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdxml\"]\n },\n \"application/vnd.chess-pgn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chipnuts.karaoke-mmd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmd\"]\n },\n \"application/vnd.cinderella\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdy\"]\n },\n \"application/vnd.cirpack.isdn-ext\": {\n \"source\": \"iana\"\n },\n \"application/vnd.citationstyles.style+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.claymore\": {\n \"source\": \"iana\",\n \"extensions\": [\"cla\"]\n },\n \"application/vnd.cloanto.rp9\": {\n \"source\": \"iana\",\n \"extensions\": [\"rp9\"]\n },\n \"application/vnd.clonk.c4group\": {\n \"source\": \"iana\",\n \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n },\n \"application/vnd.cluetrust.cartomobile-config\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amc\"]\n },\n \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amz\"]\n },\n \"application/vnd.coffeescript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collection+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.doc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.next+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.comicbook+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.comicbook-rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commerce-battelle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commonspace\": {\n \"source\": \"iana\",\n \"extensions\": [\"csp\"]\n },\n \"application/vnd.contact.cmsg\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdbcmsg\"]\n },\n \"application/vnd.coreos.ignition+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cosmocaller\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmc\"]\n },\n \"application/vnd.crick.clicker\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkx\"]\n },\n \"application/vnd.crick.clicker.keyboard\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkk\"]\n },\n \"application/vnd.crick.clicker.palette\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkp\"]\n },\n \"application/vnd.crick.clicker.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkt\"]\n },\n \"application/vnd.crick.clicker.wordbank\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkw\"]\n },\n \"application/vnd.criticaltools.wbs+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbs\"]\n },\n \"application/vnd.ctc-posml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pml\"]\n },\n \"application/vnd.ctct.ws+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-postscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-ppd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppd\"]\n },\n \"application/vnd.cups-raster\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-raw\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl.car\": {\n \"source\": \"apache\",\n \"extensions\": [\"car\"]\n },\n \"application/vnd.curl.pcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcurl\"]\n },\n \"application/vnd.cyan.dean.root+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cybank\": {\n \"source\": \"iana\"\n },\n \"application/vnd.d2l.coursepackage1p0+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dart\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dart\"]\n },\n \"application/vnd.data-vision.rdz\": {\n \"source\": \"iana\",\n \"extensions\": [\"rdz\"]\n },\n \"application/vnd.datapackage+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dataresource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.debian.binary-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dece.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n },\n \"application/vnd.dece.ttml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvt\",\"uvvt\"]\n },\n \"application/vnd.dece.unspecified\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvx\",\"uvvx\"]\n },\n \"application/vnd.dece.zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvz\",\"uvvz\"]\n },\n \"application/vnd.denovo.fcselayout-link\": {\n \"source\": \"iana\",\n \"extensions\": [\"fe_launch\"]\n },\n \"application/vnd.desmume-movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.desmume.movie\": {\n \"source\": \"apache\"\n },\n \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dm.delegation+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dna\": {\n \"source\": \"iana\",\n \"extensions\": [\"dna\"]\n },\n \"application/vnd.document+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dolby.mlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"mlp\"]\n },\n \"application/vnd.dolby.mobile.1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dolby.mobile.2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.doremir.scorecloud-binary-document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dpgraph\": {\n \"source\": \"iana\",\n \"extensions\": [\"dpg\"]\n },\n \"application/vnd.dreamfactory\": {\n \"source\": \"iana\",\n \"extensions\": [\"dfac\"]\n },\n \"application/vnd.drive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ds-keypoint\": {\n \"source\": \"apache\",\n \"extensions\": [\"kpxx\"]\n },\n \"application/vnd.dtg.local\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.flash\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ait\": {\n \"source\": \"iana\",\n \"extensions\": [\"ait\"]\n },\n \"application/vnd.dvb.dvbj\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.esgcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcdftnotifaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgpdd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcroaming\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-base\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-enhancement\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-aggregate-root+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-container+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-generic+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-ia-msglist+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-init+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.pfr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.service\": {\n \"source\": \"iana\",\n \"extensions\": [\"svc\"]\n },\n \"application/vnd.dxr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dynageo\": {\n \"source\": \"iana\",\n \"extensions\": [\"geo\"]\n },\n \"application/vnd.dzr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.easykaraoke.cdgdownload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecdis-update\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecip.rlp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"mag\"]\n },\n \"application/vnd.ecowin.filerequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.fileupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.series\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesrequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.img\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.iso\": {\n \"source\": \"iana\"\n },\n \"application/vnd.emclient.accessrequest+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.enliven\": {\n \"source\": \"iana\",\n \"extensions\": [\"nml\"]\n },\n \"application/vnd.enphase.envoy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eprints.data+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.epson.esf\": {\n \"source\": \"iana\",\n \"extensions\": [\"esf\"]\n },\n \"application/vnd.epson.msf\": {\n \"source\": \"iana\",\n \"extensions\": [\"msf\"]\n },\n \"application/vnd.epson.quickanime\": {\n \"source\": \"iana\",\n \"extensions\": [\"qam\"]\n },\n \"application/vnd.epson.salt\": {\n \"source\": \"iana\",\n \"extensions\": [\"slt\"]\n },\n \"application/vnd.epson.ssf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssf\"]\n },\n \"application/vnd.ericsson.quickcall\": {\n \"source\": \"iana\"\n },\n \"application/vnd.espass-espass+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eszigno3+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"es3\",\"et3\"]\n },\n \"application/vnd.etsi.aoc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.asic-e+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.asic-s+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.cug+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvcommand+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvdiscovery+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsad-bc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsad-cod+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsad-npvr+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvservice+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsync+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvueprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.mcid+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.mheg5\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.pstn+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.sci+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.simservs+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.timestamp-token\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl.der\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eudora.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.profile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.settings\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.theme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ezpix-album\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez2\"]\n },\n \"application/vnd.ezpix-package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez3\"]\n },\n \"application/vnd.f-secure.mobile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fastcopy-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"fdf\"]\n },\n \"application/vnd.fdsn.mseed\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseed\"]\n },\n \"application/vnd.fdsn.seed\": {\n \"source\": \"iana\",\n \"extensions\": [\"seed\",\"dataless\"]\n },\n \"application/vnd.ffsns\": {\n \"source\": \"iana\"\n },\n \"application/vnd.filmit.zfc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fints\": {\n \"source\": \"iana\"\n },\n \"application/vnd.firemonkeys.cloudcell\": {\n \"source\": \"iana\"\n },\n \"application/vnd.flographit\": {\n \"source\": \"iana\",\n \"extensions\": [\"gph\"]\n },\n \"application/vnd.fluxtime.clip\": {\n \"source\": \"iana\",\n \"extensions\": [\"ftc\"]\n },\n \"application/vnd.font-fontforge-sfd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.framemaker\": {\n \"source\": \"iana\",\n \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n },\n \"application/vnd.frogans.fnc\": {\n \"source\": \"iana\",\n \"extensions\": [\"fnc\"]\n },\n \"application/vnd.frogans.ltf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ltf\"]\n },\n \"application/vnd.fsc.weblaunch\": {\n \"source\": \"iana\",\n \"extensions\": [\"fsc\"]\n },\n \"application/vnd.fujitsu.oasys\": {\n \"source\": \"iana\",\n \"extensions\": [\"oas\"]\n },\n \"application/vnd.fujitsu.oasys2\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa2\"]\n },\n \"application/vnd.fujitsu.oasys3\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa3\"]\n },\n \"application/vnd.fujitsu.oasysgp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fg5\"]\n },\n \"application/vnd.fujitsu.oasysprs\": {\n \"source\": \"iana\",\n \"extensions\": [\"bh2\"]\n },\n \"application/vnd.fujixerox.art-ex\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.art4\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.ddd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ddd\"]\n },\n \"application/vnd.fujixerox.docuworks\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdw\"]\n },\n \"application/vnd.fujixerox.docuworks.binder\": {\n \"source\": \"iana\",\n \"extensions\": [\"xbd\"]\n },\n \"application/vnd.fujixerox.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.hbpl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fut-misnet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fuzzysheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fzs\"]\n },\n \"application/vnd.genomatix.tuxedo\": {\n \"source\": \"iana\",\n \"extensions\": [\"txd\"]\n },\n \"application/vnd.geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geocube+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.geogebra.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggb\"]\n },\n \"application/vnd.geogebra.tool\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggt\"]\n },\n \"application/vnd.geometry-explorer\": {\n \"source\": \"iana\",\n \"extensions\": [\"gex\",\"gre\"]\n },\n \"application/vnd.geonext\": {\n \"source\": \"iana\",\n \"extensions\": [\"gxt\"]\n },\n \"application/vnd.geoplan\": {\n \"source\": \"iana\",\n \"extensions\": [\"g2w\"]\n },\n \"application/vnd.geospace\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3w\"]\n },\n \"application/vnd.gerber\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gmx\": {\n \"source\": \"iana\",\n \"extensions\": [\"gmx\"]\n },\n \"application/vnd.google-apps.document\": {\n \"compressible\": false,\n \"extensions\": [\"gdoc\"]\n },\n \"application/vnd.google-apps.presentation\": {\n \"compressible\": false,\n \"extensions\": [\"gslides\"]\n },\n \"application/vnd.google-apps.spreadsheet\": {\n \"compressible\": false,\n \"extensions\": [\"gsheet\"]\n },\n \"application/vnd.google-earth.kml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"kml\"]\n },\n \"application/vnd.google-earth.kmz\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"kmz\"]\n },\n \"application/vnd.gov.sk.e-form+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gov.sk.e-form+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.grafeq\": {\n \"source\": \"iana\",\n \"extensions\": [\"gqf\",\"gqs\"]\n },\n \"application/vnd.gridmp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.groove-account\": {\n \"source\": \"iana\",\n \"extensions\": [\"gac\"]\n },\n \"application/vnd.groove-help\": {\n \"source\": \"iana\",\n \"extensions\": [\"ghf\"]\n },\n \"application/vnd.groove-identity-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gim\"]\n },\n \"application/vnd.groove-injector\": {\n \"source\": \"iana\",\n \"extensions\": [\"grv\"]\n },\n \"application/vnd.groove-tool-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtm\"]\n },\n \"application/vnd.groove-tool-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpl\"]\n },\n \"application/vnd.groove-vcard\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcg\"]\n },\n \"application/vnd.hal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hal+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"hal\"]\n },\n \"application/vnd.handheld-entertainment+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"zmm\"]\n },\n \"application/vnd.hbci\": {\n \"source\": \"iana\",\n \"extensions\": [\"hbci\"]\n },\n \"application/vnd.hc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hcl-bireports\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hdt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.heroku+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hhe.lesson-player\": {\n \"source\": \"iana\",\n \"extensions\": [\"les\"]\n },\n \"application/vnd.hp-hpgl\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpgl\"]\n },\n \"application/vnd.hp-hpid\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpid\"]\n },\n \"application/vnd.hp-hps\": {\n \"source\": \"iana\",\n \"extensions\": [\"hps\"]\n },\n \"application/vnd.hp-jlyt\": {\n \"source\": \"iana\",\n \"extensions\": [\"jlt\"]\n },\n \"application/vnd.hp-pcl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcl\"]\n },\n \"application/vnd.hp-pclxl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pclxl\"]\n },\n \"application/vnd.httphone\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hydrostatix.sof-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfd-hdstx\"]\n },\n \"application/vnd.hyper-item+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyperdrive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hzn-3d-crossword\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.electronic-media\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.minipay\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpy\"]\n },\n \"application/vnd.ibm.modcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n },\n \"application/vnd.ibm.rights-management\": {\n \"source\": \"iana\",\n \"extensions\": [\"irm\"]\n },\n \"application/vnd.ibm.secure-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"sc\"]\n },\n \"application/vnd.iccprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"icc\",\"icm\"]\n },\n \"application/vnd.ieee.1905\": {\n \"source\": \"iana\"\n },\n \"application/vnd.igloader\": {\n \"source\": \"iana\",\n \"extensions\": [\"igl\"]\n },\n \"application/vnd.imagemeter.folder+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.imagemeter.image+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.immervision-ivp\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivp\"]\n },\n \"application/vnd.immervision-ivu\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivu\"]\n },\n \"application/vnd.ims.imsccv1p1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.lis.v2.result+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informedcontrol.rms+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.informix-visionary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.innopath.wamp.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.insors.igm\": {\n \"source\": \"iana\",\n \"extensions\": [\"igm\"]\n },\n \"application/vnd.intercon.formnet\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpw\",\"xpx\"]\n },\n \"application/vnd.intergeo\": {\n \"source\": \"iana\",\n \"extensions\": [\"i2g\"]\n },\n \"application/vnd.intertrust.digibox\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intertrust.nncp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intu.qbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"qbo\"]\n },\n \"application/vnd.intu.qfx\": {\n \"source\": \"iana\",\n \"extensions\": [\"qfx\"]\n },\n \"application/vnd.iptc.g2.catalogitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.conceptitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.newsitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.newsmessage+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.packageitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.planningitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ipunplugged.rcprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"rcprofile\"]\n },\n \"application/vnd.irepository.package+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"irp\"]\n },\n \"application/vnd.is-xpr\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpr\"]\n },\n \"application/vnd.isac.fcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcs\"]\n },\n \"application/vnd.jam\": {\n \"source\": \"iana\",\n \"extensions\": [\"jam\"]\n },\n \"application/vnd.japannet-directory-service\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-jpnstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-payment-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-setstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.jcp.javame.midlet-rms\": {\n \"source\": \"iana\",\n \"extensions\": [\"rms\"]\n },\n \"application/vnd.jisp\": {\n \"source\": \"iana\",\n \"extensions\": [\"jisp\"]\n },\n \"application/vnd.joost.joda-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"joda\"]\n },\n \"application/vnd.jsk.isdn-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.kahootz\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktz\",\"ktr\"]\n },\n \"application/vnd.kde.karbon\": {\n \"source\": \"iana\",\n \"extensions\": [\"karbon\"]\n },\n \"application/vnd.kde.kchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"chrt\"]\n },\n \"application/vnd.kde.kformula\": {\n \"source\": \"iana\",\n \"extensions\": [\"kfo\"]\n },\n \"application/vnd.kde.kivio\": {\n \"source\": \"iana\",\n \"extensions\": [\"flw\"]\n },\n \"application/vnd.kde.kontour\": {\n \"source\": \"iana\",\n \"extensions\": [\"kon\"]\n },\n \"application/vnd.kde.kpresenter\": {\n \"source\": \"iana\",\n \"extensions\": [\"kpr\",\"kpt\"]\n },\n \"application/vnd.kde.kspread\": {\n \"source\": \"iana\",\n \"extensions\": [\"ksp\"]\n },\n \"application/vnd.kde.kword\": {\n \"source\": \"iana\",\n \"extensions\": [\"kwd\",\"kwt\"]\n },\n \"application/vnd.kenameaapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"htke\"]\n },\n \"application/vnd.kidspiration\": {\n \"source\": \"iana\",\n \"extensions\": [\"kia\"]\n },\n \"application/vnd.kinar\": {\n \"source\": \"iana\",\n \"extensions\": [\"kne\",\"knp\"]\n },\n \"application/vnd.koan\": {\n \"source\": \"iana\",\n \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n },\n \"application/vnd.kodak-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"sse\"]\n },\n \"application/vnd.las.las+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.las.las+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"lasxml\"]\n },\n \"application/vnd.liberty-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.llamagraphics.life-balance.desktop\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbd\"]\n },\n \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbe\"]\n },\n \"application/vnd.lotus-1-2-3\": {\n \"source\": \"iana\",\n \"extensions\": [\"123\"]\n },\n \"application/vnd.lotus-approach\": {\n \"source\": \"iana\",\n \"extensions\": [\"apr\"]\n },\n \"application/vnd.lotus-freelance\": {\n \"source\": \"iana\",\n \"extensions\": [\"pre\"]\n },\n \"application/vnd.lotus-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"nsf\"]\n },\n \"application/vnd.lotus-organizer\": {\n \"source\": \"iana\",\n \"extensions\": [\"org\"]\n },\n \"application/vnd.lotus-screencam\": {\n \"source\": \"iana\",\n \"extensions\": [\"scm\"]\n },\n \"application/vnd.lotus-wordpro\": {\n \"source\": \"iana\",\n \"extensions\": [\"lwp\"]\n },\n \"application/vnd.macports.portpkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"portpkg\"]\n },\n \"application/vnd.mapbox-vector-tile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.actiontoken+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.conftoken+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.license+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.mdcf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mason+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.maxmind.maxmind-db\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mcd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mcd\"]\n },\n \"application/vnd.medcalcdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"mc1\"]\n },\n \"application/vnd.mediastation.cdkey\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdkey\"]\n },\n \"application/vnd.meridian-slingshot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mfer\": {\n \"source\": \"iana\",\n \"extensions\": [\"mwf\"]\n },\n \"application/vnd.mfmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"mfm\"]\n },\n \"application/vnd.micro+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.micrografx.flo\": {\n \"source\": \"iana\",\n \"extensions\": [\"flo\"]\n },\n \"application/vnd.micrografx.igx\": {\n \"source\": \"iana\",\n \"extensions\": [\"igx\"]\n },\n \"application/vnd.microsoft.portable-executable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.microsoft.windows.thumbnail-cache\": {\n \"source\": \"iana\"\n },\n \"application/vnd.miele+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.mif\": {\n \"source\": \"iana\",\n \"extensions\": [\"mif\"]\n },\n \"application/vnd.minisoft-hp3000-save\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mobius.daf\": {\n \"source\": \"iana\",\n \"extensions\": [\"daf\"]\n },\n \"application/vnd.mobius.dis\": {\n \"source\": \"iana\",\n \"extensions\": [\"dis\"]\n },\n \"application/vnd.mobius.mbk\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbk\"]\n },\n \"application/vnd.mobius.mqy\": {\n \"source\": \"iana\",\n \"extensions\": [\"mqy\"]\n },\n \"application/vnd.mobius.msl\": {\n \"source\": \"iana\",\n \"extensions\": [\"msl\"]\n },\n \"application/vnd.mobius.plc\": {\n \"source\": \"iana\",\n \"extensions\": [\"plc\"]\n },\n \"application/vnd.mobius.txf\": {\n \"source\": \"iana\",\n \"extensions\": [\"txf\"]\n },\n \"application/vnd.mophun.application\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpn\"]\n },\n \"application/vnd.mophun.certificate\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpc\"]\n },\n \"application/vnd.motorola.flexsuite\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.adsi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.fis\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.gotap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.kmr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.ttc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.wem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.iprm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mozilla.xul+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xul\"]\n },\n \"application/vnd.ms-3mfdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-artgalry\": {\n \"source\": \"iana\",\n \"extensions\": [\"cil\"]\n },\n \"application/vnd.ms-asf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-cab-compressed\": {\n \"source\": \"iana\",\n \"extensions\": [\"cab\"]\n },\n \"application/vnd.ms-color.iccprofile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-excel\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n },\n \"application/vnd.ms-excel.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlam\"]\n },\n \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsb\"]\n },\n \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsm\"]\n },\n \"application/vnd.ms-excel.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltm\"]\n },\n \"application/vnd.ms-fontobject\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eot\"]\n },\n \"application/vnd.ms-htmlhelp\": {\n \"source\": \"iana\",\n \"extensions\": [\"chm\"]\n },\n \"application/vnd.ms-ims\": {\n \"source\": \"iana\",\n \"extensions\": [\"ims\"]\n },\n \"application/vnd.ms-lrm\": {\n \"source\": \"iana\",\n \"extensions\": [\"lrm\"]\n },\n \"application/vnd.ms-office.activex+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-officetheme\": {\n \"source\": \"iana\",\n \"extensions\": [\"thmx\"]\n },\n \"application/vnd.ms-opentype\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-outlook\": {\n \"compressible\": false,\n \"extensions\": [\"msg\"]\n },\n \"application/vnd.ms-package.obfuscated-opentype\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-pki.seccat\": {\n \"source\": \"apache\",\n \"extensions\": [\"cat\"]\n },\n \"application/vnd.ms-pki.stl\": {\n \"source\": \"apache\",\n \"extensions\": [\"stl\"]\n },\n \"application/vnd.ms-playready.initiator+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-powerpoint\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n },\n \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppam\"]\n },\n \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"pptm\"]\n },\n \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldm\"]\n },\n \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsm\"]\n },\n \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"potm\"]\n },\n \"application/vnd.ms-printdevicecapabilities+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-printing.printticket+xml\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-printschematicket+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-project\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpp\",\"mpt\"]\n },\n \"application/vnd.ms-tnef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.nwprinting.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.printerpairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.wsd.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-word.document.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"docm\"]\n },\n \"application/vnd.ms-word.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotm\"]\n },\n \"application/vnd.ms-works\": {\n \"source\": \"iana\",\n \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n },\n \"application/vnd.ms-wpl\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpl\"]\n },\n \"application/vnd.ms-xpsdocument\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xps\"]\n },\n \"application/vnd.msa-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mseq\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseq\"]\n },\n \"application/vnd.msign\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator.cif\": {\n \"source\": \"iana\"\n },\n \"application/vnd.music-niff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.musician\": {\n \"source\": \"iana\",\n \"extensions\": [\"mus\"]\n },\n \"application/vnd.muvee.style\": {\n \"source\": \"iana\",\n \"extensions\": [\"msty\"]\n },\n \"application/vnd.mynfc\": {\n \"source\": \"iana\",\n \"extensions\": [\"taglet\"]\n },\n \"application/vnd.ncd.control\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ncd.reference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nearst.inv+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nervana\": {\n \"source\": \"iana\"\n },\n \"application/vnd.netfpx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.neurolanguage.nlu\": {\n \"source\": \"iana\",\n \"extensions\": [\"nlu\"]\n },\n \"application/vnd.nintendo.nitro.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.snes.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nitf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ntf\",\"nitf\"]\n },\n \"application/vnd.noblenet-directory\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnd\"]\n },\n \"application/vnd.noblenet-sealer\": {\n \"source\": \"iana\",\n \"extensions\": [\"nns\"]\n },\n \"application/vnd.noblenet-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnw\"]\n },\n \"application/vnd.nokia.catalogs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.iptv.config+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.isds-radio-presets\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmarkcollection+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.n-gage.ac+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.n-gage.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"ngdat\"]\n },\n \"application/vnd.nokia.n-gage.symbian.install\": {\n \"source\": \"iana\",\n \"extensions\": [\"n-gage\"]\n },\n \"application/vnd.nokia.ncd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.radio-preset\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpst\"]\n },\n \"application/vnd.nokia.radio-presets\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpss\"]\n },\n \"application/vnd.novadigm.edm\": {\n \"source\": \"iana\",\n \"extensions\": [\"edm\"]\n },\n \"application/vnd.novadigm.edx\": {\n \"source\": \"iana\",\n \"extensions\": [\"edx\"]\n },\n \"application/vnd.novadigm.ext\": {\n \"source\": \"iana\",\n \"extensions\": [\"ext\"]\n },\n \"application/vnd.ntt-local.content-share\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.file-transfer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.ogw_remote-access\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_remote\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oasis.opendocument.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"odc\"]\n },\n \"application/vnd.oasis.opendocument.chart-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otc\"]\n },\n \"application/vnd.oasis.opendocument.database\": {\n \"source\": \"iana\",\n \"extensions\": [\"odb\"]\n },\n \"application/vnd.oasis.opendocument.formula\": {\n \"source\": \"iana\",\n \"extensions\": [\"odf\"]\n },\n \"application/vnd.oasis.opendocument.formula-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"odft\"]\n },\n \"application/vnd.oasis.opendocument.graphics\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odg\"]\n },\n \"application/vnd.oasis.opendocument.graphics-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otg\"]\n },\n \"application/vnd.oasis.opendocument.image\": {\n \"source\": \"iana\",\n \"extensions\": [\"odi\"]\n },\n \"application/vnd.oasis.opendocument.image-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"oti\"]\n },\n \"application/vnd.oasis.opendocument.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odp\"]\n },\n \"application/vnd.oasis.opendocument.presentation-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otp\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ods\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ots\"]\n },\n \"application/vnd.oasis.opendocument.text\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odt\"]\n },\n \"application/vnd.oasis.opendocument.text-master\": {\n \"source\": \"iana\",\n \"extensions\": [\"odm\"]\n },\n \"application/vnd.oasis.opendocument.text-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ott\"]\n },\n \"application/vnd.oasis.opendocument.text-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"oth\"]\n },\n \"application/vnd.obn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ocf+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oftn.l10n+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessdownload+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.contentaccessstreaming+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.cspg-hexbinary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.svg+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.xhtml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.pae.gem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdiscovery+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdlist+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.ueprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.userprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.olpc-sugar\": {\n \"source\": \"iana\",\n \"extensions\": [\"xo\"]\n },\n \"application/vnd.oma-scws-config\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-request\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.drm-trigger+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.imd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.ltkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.notification+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.provisioningtrigger\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgboot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdu\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.simple-symbol-container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sprov+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.stkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-address-book+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-feature-handler+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-pcc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-subs-invite+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-user-prefs+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcdc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dd2+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"dd2\"]\n },\n \"application/vnd.oma.drm.risd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.group-usage-list+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.lwm2m+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+tlv\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.pal+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.final-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.groups+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.push\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.scidm.messages+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.xcap-directory+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omads-email+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omads-file+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omads-folder+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omaloc-supl-init\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepager\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertat\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game-binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openeye.oeb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openofficeorg.extension\": {\n \"source\": \"apache\",\n \"extensions\": [\"oxt\"]\n },\n \"application/vnd.openstreetmap.data+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pptx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"potx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xlsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"docx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-package.core-properties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-package.relationships+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oracle.resource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.orange.indata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osa.netdeploy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgeo.mapguide.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgp\"]\n },\n \"application/vnd.osgi.bundle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgi.dp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dp\"]\n },\n \"application/vnd.osgi.subsystem\": {\n \"source\": \"iana\",\n \"extensions\": [\"esa\"]\n },\n \"application/vnd.otps.ct-kip+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oxli.countgraph\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pagerduty+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.palm\": {\n \"source\": \"iana\",\n \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n },\n \"application/vnd.panoply\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos.xml\": {\n \"source\": \"apache\"\n },\n \"application/vnd.patentdive\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pawaafile\": {\n \"source\": \"iana\",\n \"extensions\": [\"paw\"]\n },\n \"application/vnd.pcos\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pg.format\": {\n \"source\": \"iana\",\n \"extensions\": [\"str\"]\n },\n \"application/vnd.pg.osasli\": {\n \"source\": \"iana\",\n \"extensions\": [\"ei6\"]\n },\n \"application/vnd.piaccess.application-licence\": {\n \"source\": \"iana\"\n },\n \"application/vnd.picsel\": {\n \"source\": \"iana\",\n \"extensions\": [\"efif\"]\n },\n \"application/vnd.pmi.widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wg\"]\n },\n \"application/vnd.poc.group-advertisement+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pocketlearn\": {\n \"source\": \"iana\",\n \"extensions\": [\"plf\"]\n },\n \"application/vnd.powerbuilder6\": {\n \"source\": \"iana\",\n \"extensions\": [\"pbd\"]\n },\n \"application/vnd.powerbuilder6-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.preminet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.previewsystems.box\": {\n \"source\": \"iana\",\n \"extensions\": [\"box\"]\n },\n \"application/vnd.proteus.magazine\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgz\"]\n },\n \"application/vnd.publishare-delta-tree\": {\n \"source\": \"iana\",\n \"extensions\": [\"qps\"]\n },\n \"application/vnd.pvi.ptid1\": {\n \"source\": \"iana\",\n \"extensions\": [\"ptid\"]\n },\n \"application/vnd.pwg-multiplexed\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pwg-xhtml-print+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.qualcomm.brew-app-res\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quarantainenet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quark.quarkxpress\": {\n \"source\": \"iana\",\n \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n },\n \"application/vnd.quobject-quoxdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.moml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-conf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-conn+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-dialog+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-stream+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-conf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-base+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-group+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-speech+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-transform+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rainstor.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rapid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.realvnc.bed\": {\n \"source\": \"iana\",\n \"extensions\": [\"bed\"]\n },\n \"application/vnd.recordare.musicxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxl\"]\n },\n \"application/vnd.recordare.musicxml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"musicxml\"]\n },\n \"application/vnd.renlearn.rlprint\": {\n \"source\": \"iana\"\n },\n \"application/vnd.restful+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rig.cryptonote\": {\n \"source\": \"iana\",\n \"extensions\": [\"cryptonote\"]\n },\n \"application/vnd.rim.cod\": {\n \"source\": \"apache\",\n \"extensions\": [\"cod\"]\n },\n \"application/vnd.rn-realmedia\": {\n \"source\": \"apache\",\n \"extensions\": [\"rm\"]\n },\n \"application/vnd.rn-realmedia-vbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmvb\"]\n },\n \"application/vnd.route66.link66+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"link66\"]\n },\n \"application/vnd.rs-274x\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ruckus.download\": {\n \"source\": \"iana\"\n },\n \"application/vnd.s3sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sailingtracker.track\": {\n \"source\": \"iana\",\n \"extensions\": [\"st\"]\n },\n \"application/vnd.sbm.cid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.mid2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.scribus\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.3df\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.csf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.doc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.eml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.mht\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.net\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.ppt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.tiff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.xls\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.seemail\": {\n \"source\": \"iana\",\n \"extensions\": [\"see\"]\n },\n \"application/vnd.sema\": {\n \"source\": \"iana\",\n \"extensions\": [\"sema\"]\n },\n \"application/vnd.semd\": {\n \"source\": \"iana\",\n \"extensions\": [\"semd\"]\n },\n \"application/vnd.semf\": {\n \"source\": \"iana\",\n \"extensions\": [\"semf\"]\n },\n \"application/vnd.shana.informed.formdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"ifm\"]\n },\n \"application/vnd.shana.informed.formtemplate\": {\n \"source\": \"iana\",\n \"extensions\": [\"itp\"]\n },\n \"application/vnd.shana.informed.interchange\": {\n \"source\": \"iana\",\n \"extensions\": [\"iif\"]\n },\n \"application/vnd.shana.informed.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipk\"]\n },\n \"application/vnd.sigrok.session\": {\n \"source\": \"iana\"\n },\n \"application/vnd.simtech-mindmapper\": {\n \"source\": \"iana\",\n \"extensions\": [\"twd\",\"twds\"]\n },\n \"application/vnd.siren+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.smaf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmf\"]\n },\n \"application/vnd.smart.notebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.smart.teacher\": {\n \"source\": \"iana\",\n \"extensions\": [\"teacher\"]\n },\n \"application/vnd.software602.filler.form+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.software602.filler.form-xml-zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.solent.sdkm+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdkm\",\"sdkd\"]\n },\n \"application/vnd.spotfire.dxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxp\"]\n },\n \"application/vnd.spotfire.sfs\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfs\"]\n },\n \"application/vnd.sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-cod\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-dtf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-ntf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.stardivision.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdc\"]\n },\n \"application/vnd.stardivision.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sda\"]\n },\n \"application/vnd.stardivision.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdd\"]\n },\n \"application/vnd.stardivision.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"smf\"]\n },\n \"application/vnd.stardivision.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdw\",\"vor\"]\n },\n \"application/vnd.stardivision.writer-global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgl\"]\n },\n \"application/vnd.stepmania.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"smzip\"]\n },\n \"application/vnd.stepmania.stepchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"sm\"]\n },\n \"application/vnd.street-stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sun.wadl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wadl\"]\n },\n \"application/vnd.sun.xml.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxc\"]\n },\n \"application/vnd.sun.xml.calc.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stc\"]\n },\n \"application/vnd.sun.xml.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxd\"]\n },\n \"application/vnd.sun.xml.draw.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"std\"]\n },\n \"application/vnd.sun.xml.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxi\"]\n },\n \"application/vnd.sun.xml.impress.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"sti\"]\n },\n \"application/vnd.sun.xml.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxm\"]\n },\n \"application/vnd.sun.xml.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxw\"]\n },\n \"application/vnd.sun.xml.writer.global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxg\"]\n },\n \"application/vnd.sun.xml.writer.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stw\"]\n },\n \"application/vnd.sus-calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"sus\",\"susp\"]\n },\n \"application/vnd.svd\": {\n \"source\": \"iana\",\n \"extensions\": [\"svd\"]\n },\n \"application/vnd.swiftview-ics\": {\n \"source\": \"iana\"\n },\n \"application/vnd.symbian.install\": {\n \"source\": \"apache\",\n \"extensions\": [\"sis\",\"sisx\"]\n },\n \"application/vnd.syncml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xsm\"]\n },\n \"application/vnd.syncml.dm+wbxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"bdm\"]\n },\n \"application/vnd.syncml.dm+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdm\"]\n },\n \"application/vnd.syncml.dm.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.ds.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tableschema+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tao.intent-module-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"tao\"]\n },\n \"application/vnd.tcpdump.pcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n },\n \"application/vnd.tmd.mediaflex.api+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tmobile-livetv\": {\n \"source\": \"iana\",\n \"extensions\": [\"tmo\"]\n },\n \"application/vnd.tri.onesource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.trid.tpt\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpt\"]\n },\n \"application/vnd.triscape.mxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxs\"]\n },\n \"application/vnd.trueapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"tra\"]\n },\n \"application/vnd.truedoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ubisoft.webplayer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ufdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"ufd\",\"ufdl\"]\n },\n \"application/vnd.uiq.theme\": {\n \"source\": \"iana\",\n \"extensions\": [\"utz\"]\n },\n \"application/vnd.umajin\": {\n \"source\": \"iana\",\n \"extensions\": [\"umj\"]\n },\n \"application/vnd.unity\": {\n \"source\": \"iana\",\n \"extensions\": [\"unityweb\"]\n },\n \"application/vnd.uoml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"uoml\"]\n },\n \"application/vnd.uplanet.alert\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.alert-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.signal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uri-map\": {\n \"source\": \"iana\"\n },\n \"application/vnd.valve.source.material\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcx\"]\n },\n \"application/vnd.vd-study\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vectorworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vel+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.verimatrix.vcas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vidsoft.vidconference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.visio\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n },\n \"application/vnd.visionary\": {\n \"source\": \"iana\",\n \"extensions\": [\"vis\"]\n },\n \"application/vnd.vividence.scriptfile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vsf\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsf\"]\n },\n \"application/vnd.wap.sic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.slc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.wbxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbxml\"]\n },\n \"application/vnd.wap.wmlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlc\"]\n },\n \"application/vnd.wap.wmlscriptc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlsc\"]\n },\n \"application/vnd.webturbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"wtb\"]\n },\n \"application/vnd.wfa.p2p\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.wsc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmf.bootstrap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica.package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.player\": {\n \"source\": \"iana\",\n \"extensions\": [\"nbp\"]\n },\n \"application/vnd.wordperfect\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpd\"]\n },\n \"application/vnd.wqd\": {\n \"source\": \"iana\",\n \"extensions\": [\"wqd\"]\n },\n \"application/vnd.wrq-hp3000-labelled\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wt.stf\": {\n \"source\": \"iana\",\n \"extensions\": [\"stf\"]\n },\n \"application/vnd.wv.csp+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.csp+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.ssp+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xacml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xara\": {\n \"source\": \"iana\",\n \"extensions\": [\"xar\"]\n },\n \"application/vnd.xfdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdl\"]\n },\n \"application/vnd.xfdl.webform\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmi+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.cpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.dpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.plan\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.ppkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.xlim\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.hv-dic\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvd\"]\n },\n \"application/vnd.yamaha.hv-script\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvs\"]\n },\n \"application/vnd.yamaha.hv-voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvp\"]\n },\n \"application/vnd.yamaha.openscoreformat\": {\n \"source\": \"iana\",\n \"extensions\": [\"osf\"]\n },\n \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"osfpvg\"]\n },\n \"application/vnd.yamaha.remote-setup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.smaf-audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"saf\"]\n },\n \"application/vnd.yamaha.smaf-phrase\": {\n \"source\": \"iana\",\n \"extensions\": [\"spf\"]\n },\n \"application/vnd.yamaha.through-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.tunnel-udpencap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yaoweme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yellowriver-custom-menu\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmp\"]\n },\n \"application/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.zul\": {\n \"source\": \"iana\",\n \"extensions\": [\"zir\",\"zirz\"]\n },\n \"application/vnd.zzazz.deck+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"zaz\"]\n },\n \"application/voicexml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"vxml\"]\n },\n \"application/voucher-cms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vq-rtcpxr\": {\n \"source\": \"iana\"\n },\n \"application/wasm\": {\n \"compressible\": true,\n \"extensions\": [\"wasm\"]\n },\n \"application/watcherinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/webpush-options+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/whoispp-query\": {\n \"source\": \"iana\"\n },\n \"application/whoispp-response\": {\n \"source\": \"iana\"\n },\n \"application/widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wgt\"]\n },\n \"application/winhlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"hlp\"]\n },\n \"application/wita\": {\n \"source\": \"iana\"\n },\n \"application/wordperfect5.1\": {\n \"source\": \"iana\"\n },\n \"application/wsdl+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsdl\"]\n },\n \"application/wspolicy+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wspolicy\"]\n },\n \"application/x-7z-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"7z\"]\n },\n \"application/x-abiword\": {\n \"source\": \"apache\",\n \"extensions\": [\"abw\"]\n },\n \"application/x-ace-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"ace\"]\n },\n \"application/x-amf\": {\n \"source\": \"apache\"\n },\n \"application/x-apple-diskimage\": {\n \"source\": \"apache\",\n \"extensions\": [\"dmg\"]\n },\n \"application/x-arj\": {\n \"compressible\": false,\n \"extensions\": [\"arj\"]\n },\n \"application/x-authorware-bin\": {\n \"source\": \"apache\",\n \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n },\n \"application/x-authorware-map\": {\n \"source\": \"apache\",\n \"extensions\": [\"aam\"]\n },\n \"application/x-authorware-seg\": {\n \"source\": \"apache\",\n \"extensions\": [\"aas\"]\n },\n \"application/x-bcpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"bcpio\"]\n },\n \"application/x-bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/x-bittorrent\": {\n \"source\": \"apache\",\n \"extensions\": [\"torrent\"]\n },\n \"application/x-blorb\": {\n \"source\": \"apache\",\n \"extensions\": [\"blb\",\"blorb\"]\n },\n \"application/x-bzip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz\"]\n },\n \"application/x-bzip2\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz2\",\"boz\"]\n },\n \"application/x-cbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n },\n \"application/x-cdlink\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcd\"]\n },\n \"application/x-cfs-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"cfs\"]\n },\n \"application/x-chat\": {\n \"source\": \"apache\",\n \"extensions\": [\"chat\"]\n },\n \"application/x-chess-pgn\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgn\"]\n },\n \"application/x-chrome-extension\": {\n \"extensions\": [\"crx\"]\n },\n \"application/x-cocoa\": {\n \"source\": \"nginx\",\n \"extensions\": [\"cco\"]\n },\n \"application/x-compress\": {\n \"source\": \"apache\"\n },\n \"application/x-conference\": {\n \"source\": \"apache\",\n \"extensions\": [\"nsc\"]\n },\n \"application/x-cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpio\"]\n },\n \"application/x-csh\": {\n \"source\": \"apache\",\n \"extensions\": [\"csh\"]\n },\n \"application/x-deb\": {\n \"compressible\": false\n },\n \"application/x-debian-package\": {\n \"source\": \"apache\",\n \"extensions\": [\"deb\",\"udeb\"]\n },\n \"application/x-dgc-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"dgc\"]\n },\n \"application/x-director\": {\n \"source\": \"apache\",\n \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n },\n \"application/x-doom\": {\n \"source\": \"apache\",\n \"extensions\": [\"wad\"]\n },\n \"application/x-dtbncx+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"ncx\"]\n },\n \"application/x-dtbook+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"dtb\"]\n },\n \"application/x-dtbresource+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"res\"]\n },\n \"application/x-dvi\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"dvi\"]\n },\n \"application/x-envoy\": {\n \"source\": \"apache\",\n \"extensions\": [\"evy\"]\n },\n \"application/x-eva\": {\n \"source\": \"apache\",\n \"extensions\": [\"eva\"]\n },\n \"application/x-font-bdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"bdf\"]\n },\n \"application/x-font-dos\": {\n \"source\": \"apache\"\n },\n \"application/x-font-framemaker\": {\n \"source\": \"apache\"\n },\n \"application/x-font-ghostscript\": {\n \"source\": \"apache\",\n \"extensions\": [\"gsf\"]\n },\n \"application/x-font-libgrx\": {\n \"source\": \"apache\"\n },\n \"application/x-font-linux-psf\": {\n \"source\": \"apache\",\n \"extensions\": [\"psf\"]\n },\n \"application/x-font-pcf\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcf\"]\n },\n \"application/x-font-snf\": {\n \"source\": \"apache\",\n \"extensions\": [\"snf\"]\n },\n \"application/x-font-speedo\": {\n \"source\": \"apache\"\n },\n \"application/x-font-sunos-news\": {\n \"source\": \"apache\"\n },\n \"application/x-font-type1\": {\n \"source\": \"apache\",\n \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n },\n \"application/x-font-vfont\": {\n \"source\": \"apache\"\n },\n \"application/x-freearc\": {\n \"source\": \"apache\",\n \"extensions\": [\"arc\"]\n },\n \"application/x-futuresplash\": {\n \"source\": \"apache\",\n \"extensions\": [\"spl\"]\n },\n \"application/x-gca-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"gca\"]\n },\n \"application/x-glulx\": {\n \"source\": \"apache\",\n \"extensions\": [\"ulx\"]\n },\n \"application/x-gnumeric\": {\n \"source\": \"apache\",\n \"extensions\": [\"gnumeric\"]\n },\n \"application/x-gramps-xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gramps\"]\n },\n \"application/x-gtar\": {\n \"source\": \"apache\",\n \"extensions\": [\"gtar\"]\n },\n \"application/x-gzip\": {\n \"source\": \"apache\"\n },\n \"application/x-hdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"hdf\"]\n },\n \"application/x-httpd-php\": {\n \"compressible\": true,\n \"extensions\": [\"php\"]\n },\n \"application/x-install-instructions\": {\n \"source\": \"apache\",\n \"extensions\": [\"install\"]\n },\n \"application/x-iso9660-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"iso\"]\n },\n \"application/x-java-archive-diff\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jardiff\"]\n },\n \"application/x-java-jnlp-file\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jnlp\"]\n },\n \"application/x-javascript\": {\n \"compressible\": true\n },\n \"application/x-latex\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"latex\"]\n },\n \"application/x-lua-bytecode\": {\n \"extensions\": [\"luac\"]\n },\n \"application/x-lzh-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"lzh\",\"lha\"]\n },\n \"application/x-makeself\": {\n \"source\": \"nginx\",\n \"extensions\": [\"run\"]\n },\n \"application/x-mie\": {\n \"source\": \"apache\",\n \"extensions\": [\"mie\"]\n },\n \"application/x-mobipocket-ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"prc\",\"mobi\"]\n },\n \"application/x-mpegurl\": {\n \"compressible\": false\n },\n \"application/x-ms-application\": {\n \"source\": \"apache\",\n \"extensions\": [\"application\"]\n },\n \"application/x-ms-shortcut\": {\n \"source\": \"apache\",\n \"extensions\": [\"lnk\"]\n },\n \"application/x-ms-wmd\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmd\"]\n },\n \"application/x-ms-wmz\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmz\"]\n },\n \"application/x-ms-xbap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbap\"]\n },\n \"application/x-msaccess\": {\n \"source\": \"apache\",\n \"extensions\": [\"mdb\"]\n },\n \"application/x-msbinder\": {\n \"source\": \"apache\",\n \"extensions\": [\"obd\"]\n },\n \"application/x-mscardfile\": {\n \"source\": \"apache\",\n \"extensions\": [\"crd\"]\n },\n \"application/x-msclip\": {\n \"source\": \"apache\",\n \"extensions\": [\"clp\"]\n },\n \"application/x-msdos-program\": {\n \"extensions\": [\"exe\"]\n },\n \"application/x-msdownload\": {\n \"source\": \"apache\",\n \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n },\n \"application/x-msmediaview\": {\n \"source\": \"apache\",\n \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n },\n \"application/x-msmetafile\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n },\n \"application/x-msmoney\": {\n \"source\": \"apache\",\n \"extensions\": [\"mny\"]\n },\n \"application/x-mspublisher\": {\n \"source\": \"apache\",\n \"extensions\": [\"pub\"]\n },\n \"application/x-msschedule\": {\n \"source\": \"apache\",\n \"extensions\": [\"scd\"]\n },\n \"application/x-msterminal\": {\n \"source\": \"apache\",\n \"extensions\": [\"trm\"]\n },\n \"application/x-mswrite\": {\n \"source\": \"apache\",\n \"extensions\": [\"wri\"]\n },\n \"application/x-netcdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"nc\",\"cdf\"]\n },\n \"application/x-ns-proxy-autoconfig\": {\n \"compressible\": true,\n \"extensions\": [\"pac\"]\n },\n \"application/x-nzb\": {\n \"source\": \"apache\",\n \"extensions\": [\"nzb\"]\n },\n \"application/x-perl\": {\n \"source\": \"nginx\",\n \"extensions\": [\"pl\",\"pm\"]\n },\n \"application/x-pilot\": {\n \"source\": \"nginx\",\n \"extensions\": [\"prc\",\"pdb\"]\n },\n \"application/x-pkcs12\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"p12\",\"pfx\"]\n },\n \"application/x-pkcs7-certificates\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7b\",\"spc\"]\n },\n \"application/x-pkcs7-certreqresp\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7r\"]\n },\n \"application/x-rar-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"rar\"]\n },\n \"application/x-redhat-package-manager\": {\n \"source\": \"nginx\",\n \"extensions\": [\"rpm\"]\n },\n \"application/x-research-info-systems\": {\n \"source\": \"apache\",\n \"extensions\": [\"ris\"]\n },\n \"application/x-sea\": {\n \"source\": \"nginx\",\n \"extensions\": [\"sea\"]\n },\n \"application/x-sh\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"sh\"]\n },\n \"application/x-shar\": {\n \"source\": \"apache\",\n \"extensions\": [\"shar\"]\n },\n \"application/x-shockwave-flash\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"swf\"]\n },\n \"application/x-silverlight-app\": {\n \"source\": \"apache\",\n \"extensions\": [\"xap\"]\n },\n \"application/x-sql\": {\n \"source\": \"apache\",\n \"extensions\": [\"sql\"]\n },\n \"application/x-stuffit\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"sit\"]\n },\n \"application/x-stuffitx\": {\n \"source\": \"apache\",\n \"extensions\": [\"sitx\"]\n },\n \"application/x-subrip\": {\n \"source\": \"apache\",\n \"extensions\": [\"srt\"]\n },\n \"application/x-sv4cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4cpio\"]\n },\n \"application/x-sv4crc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4crc\"]\n },\n \"application/x-t3vm-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"t3\"]\n },\n \"application/x-tads\": {\n \"source\": \"apache\",\n \"extensions\": [\"gam\"]\n },\n \"application/x-tar\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"tar\"]\n },\n \"application/x-tcl\": {\n \"source\": \"apache\",\n \"extensions\": [\"tcl\",\"tk\"]\n },\n \"application/x-tex\": {\n \"source\": \"apache\",\n \"extensions\": [\"tex\"]\n },\n \"application/x-tex-tfm\": {\n \"source\": \"apache\",\n \"extensions\": [\"tfm\"]\n },\n \"application/x-texinfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"texinfo\",\"texi\"]\n },\n \"application/x-tgif\": {\n \"source\": \"apache\",\n \"extensions\": [\"obj\"]\n },\n \"application/x-ustar\": {\n \"source\": \"apache\",\n \"extensions\": [\"ustar\"]\n },\n \"application/x-virtualbox-hdd\": {\n \"compressible\": true,\n \"extensions\": [\"hdd\"]\n },\n \"application/x-virtualbox-ova\": {\n \"compressible\": true,\n \"extensions\": [\"ova\"]\n },\n \"application/x-virtualbox-ovf\": {\n \"compressible\": true,\n \"extensions\": [\"ovf\"]\n },\n \"application/x-virtualbox-vbox\": {\n \"compressible\": true,\n \"extensions\": [\"vbox\"]\n },\n \"application/x-virtualbox-vbox-extpack\": {\n \"compressible\": false,\n \"extensions\": [\"vbox-extpack\"]\n },\n \"application/x-virtualbox-vdi\": {\n \"compressible\": true,\n \"extensions\": [\"vdi\"]\n },\n \"application/x-virtualbox-vhd\": {\n \"compressible\": true,\n \"extensions\": [\"vhd\"]\n },\n \"application/x-virtualbox-vmdk\": {\n \"compressible\": true,\n \"extensions\": [\"vmdk\"]\n },\n \"application/x-wais-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"src\"]\n },\n \"application/x-web-app-manifest+json\": {\n \"compressible\": true,\n \"extensions\": [\"webapp\"]\n },\n \"application/x-www-form-urlencoded\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/x-x509-ca-cert\": {\n \"source\": \"apache\",\n \"extensions\": [\"der\",\"crt\",\"pem\"]\n },\n \"application/x-xfig\": {\n \"source\": \"apache\",\n \"extensions\": [\"fig\"]\n },\n \"application/x-xliff+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xlf\"]\n },\n \"application/x-xpinstall\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"xpi\"]\n },\n \"application/x-xz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xz\"]\n },\n \"application/x-zmachine\": {\n \"source\": \"apache\",\n \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n },\n \"application/x400-bp\": {\n \"source\": \"iana\"\n },\n \"application/xacml+xml\": {\n \"source\": \"iana\"\n },\n \"application/xaml+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xaml\"]\n },\n \"application/xcap-att+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-caps+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-diff+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdf\"]\n },\n \"application/xcap-el+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-error+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-ns+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcon-conference-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcon-conference-info-diff+xml\": {\n \"source\": \"iana\"\n },\n \"application/xenc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xenc\"]\n },\n \"application/xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xhtml\",\"xht\"]\n },\n \"application/xhtml-voice+xml\": {\n \"source\": \"apache\"\n },\n \"application/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n },\n \"application/xml-dtd\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dtd\"]\n },\n \"application/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"application/xml-patch+xml\": {\n \"source\": \"iana\"\n },\n \"application/xmpp+xml\": {\n \"source\": \"iana\"\n },\n \"application/xop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xop\"]\n },\n \"application/xproc+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpl\"]\n },\n \"application/xslt+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xslt\"]\n },\n \"application/xspf+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xspf\"]\n },\n \"application/xv+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n },\n \"application/yang\": {\n \"source\": \"iana\",\n \"extensions\": [\"yang\"]\n },\n \"application/yang-data+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-data+xml\": {\n \"source\": \"iana\"\n },\n \"application/yang-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+xml\": {\n \"source\": \"iana\"\n },\n \"application/yin+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"yin\"]\n },\n \"application/zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"zip\"]\n },\n \"application/zlib\": {\n \"source\": \"iana\"\n },\n \"audio/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/3gpp\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"3gpp\"]\n },\n \"audio/3gpp2\": {\n \"source\": \"iana\"\n },\n \"audio/ac3\": {\n \"source\": \"iana\"\n },\n \"audio/adpcm\": {\n \"source\": \"apache\",\n \"extensions\": [\"adp\"]\n },\n \"audio/amr\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb+\": {\n \"source\": \"iana\"\n },\n \"audio/aptx\": {\n \"source\": \"iana\"\n },\n \"audio/asc\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-advanced-lossless\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-x\": {\n \"source\": \"iana\"\n },\n \"audio/atrac3\": {\n \"source\": \"iana\"\n },\n \"audio/basic\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"au\",\"snd\"]\n },\n \"audio/bv16\": {\n \"source\": \"iana\"\n },\n \"audio/bv32\": {\n \"source\": \"iana\"\n },\n \"audio/clearmode\": {\n \"source\": \"iana\"\n },\n \"audio/cn\": {\n \"source\": \"iana\"\n },\n \"audio/dat12\": {\n \"source\": \"iana\"\n },\n \"audio/dls\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es201108\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202050\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202211\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202212\": {\n \"source\": \"iana\"\n },\n \"audio/dv\": {\n \"source\": \"iana\"\n },\n \"audio/dvi4\": {\n \"source\": \"iana\"\n },\n \"audio/eac3\": {\n \"source\": \"iana\"\n },\n \"audio/encaprtp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc\": {\n \"source\": \"iana\"\n },\n \"audio/evrc-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc0\": {\n \"source\": \"iana\"\n },\n \"audio/evrc1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb1\": {\n \"source\": \"iana\"\n },\n \"audio/evs\": {\n \"source\": \"iana\"\n },\n \"audio/fwdred\": {\n \"source\": \"iana\"\n },\n \"audio/g711-0\": {\n \"source\": \"iana\"\n },\n \"audio/g719\": {\n \"source\": \"iana\"\n },\n \"audio/g722\": {\n \"source\": \"iana\"\n },\n \"audio/g7221\": {\n \"source\": \"iana\"\n },\n \"audio/g723\": {\n \"source\": \"iana\"\n },\n \"audio/g726-16\": {\n \"source\": \"iana\"\n },\n \"audio/g726-24\": {\n \"source\": \"iana\"\n },\n \"audio/g726-32\": {\n \"source\": \"iana\"\n },\n \"audio/g726-40\": {\n \"source\": \"iana\"\n },\n \"audio/g728\": {\n \"source\": \"iana\"\n },\n \"audio/g729\": {\n \"source\": \"iana\"\n },\n \"audio/g7291\": {\n \"source\": \"iana\"\n },\n \"audio/g729d\": {\n \"source\": \"iana\"\n },\n \"audio/g729e\": {\n \"source\": \"iana\"\n },\n \"audio/gsm\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-efr\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-hr-08\": {\n \"source\": \"iana\"\n },\n \"audio/ilbc\": {\n \"source\": \"iana\"\n },\n \"audio/ip-mr_v2.5\": {\n \"source\": \"iana\"\n },\n \"audio/isac\": {\n \"source\": \"apache\"\n },\n \"audio/l16\": {\n \"source\": \"iana\"\n },\n \"audio/l20\": {\n \"source\": \"iana\"\n },\n \"audio/l24\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/l8\": {\n \"source\": \"iana\"\n },\n \"audio/lpc\": {\n \"source\": \"iana\"\n },\n \"audio/melp\": {\n \"source\": \"iana\"\n },\n \"audio/melp1200\": {\n \"source\": \"iana\"\n },\n \"audio/melp2400\": {\n \"source\": \"iana\"\n },\n \"audio/melp600\": {\n \"source\": \"iana\"\n },\n \"audio/midi\": {\n \"source\": \"apache\",\n \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n },\n \"audio/mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/mp3\": {\n \"compressible\": false,\n \"extensions\": [\"mp3\"]\n },\n \"audio/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"m4a\",\"mp4a\"]\n },\n \"audio/mp4a-latm\": {\n \"source\": \"iana\"\n },\n \"audio/mpa\": {\n \"source\": \"iana\"\n },\n \"audio/mpa-robust\": {\n \"source\": \"iana\"\n },\n \"audio/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n },\n \"audio/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"audio/musepack\": {\n \"source\": \"apache\"\n },\n \"audio/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"oga\",\"ogg\",\"spx\"]\n },\n \"audio/opus\": {\n \"source\": \"iana\"\n },\n \"audio/parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/pcma\": {\n \"source\": \"iana\"\n },\n \"audio/pcma-wb\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu-wb\": {\n \"source\": \"iana\"\n },\n \"audio/prs.sid\": {\n \"source\": \"iana\"\n },\n \"audio/qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/raptorfec\": {\n \"source\": \"iana\"\n },\n \"audio/red\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/rtploopback\": {\n \"source\": \"iana\"\n },\n \"audio/rtx\": {\n \"source\": \"iana\"\n },\n \"audio/s3m\": {\n \"source\": \"apache\",\n \"extensions\": [\"s3m\"]\n },\n \"audio/silk\": {\n \"source\": \"apache\",\n \"extensions\": [\"sil\"]\n },\n \"audio/smv\": {\n \"source\": \"iana\"\n },\n \"audio/smv-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/smv0\": {\n \"source\": \"iana\"\n },\n \"audio/sp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/speex\": {\n \"source\": \"iana\"\n },\n \"audio/t140c\": {\n \"source\": \"iana\"\n },\n \"audio/t38\": {\n \"source\": \"iana\"\n },\n \"audio/telephone-event\": {\n \"source\": \"iana\"\n },\n \"audio/tone\": {\n \"source\": \"iana\"\n },\n \"audio/uemclip\": {\n \"source\": \"iana\"\n },\n \"audio/ulpfec\": {\n \"source\": \"iana\"\n },\n \"audio/vdvi\": {\n \"source\": \"iana\"\n },\n \"audio/vmr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.3gpp.iufp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.4sb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.audiokoz\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.celp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cisco.nse\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cmles.radio-events\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.anp1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.inf1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dece.audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"uva\",\"uvva\"]\n },\n \"audio/vnd.digital-winds\": {\n \"source\": \"iana\",\n \"extensions\": [\"eol\"]\n },\n \"audio/vnd.dlna.adts\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mlp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mps\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2x\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2z\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pulse.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dra\": {\n \"source\": \"iana\",\n \"extensions\": [\"dra\"]\n },\n \"audio/vnd.dts\": {\n \"source\": \"iana\",\n \"extensions\": [\"dts\"]\n },\n \"audio/vnd.dts.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"dtshd\"]\n },\n \"audio/vnd.dvb.file\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.everad.plj\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.hns.audio\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.lucent.voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"lvp\"]\n },\n \"audio/vnd.ms-playready.media.pya\": {\n \"source\": \"iana\",\n \"extensions\": [\"pya\"]\n },\n \"audio/vnd.nokia.mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nortel.vbk\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nuera.ecelp4800\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp4800\"]\n },\n \"audio/vnd.nuera.ecelp7470\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp7470\"]\n },\n \"audio/vnd.nuera.ecelp9600\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp9600\"]\n },\n \"audio/vnd.octel.sbc\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.presonus.multitrack\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rhetorex.32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rip\": {\n \"source\": \"iana\",\n \"extensions\": [\"rip\"]\n },\n \"audio/vnd.rn-realaudio\": {\n \"compressible\": false\n },\n \"audio/vnd.sealedmedia.softseal.mpeg\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.vmx.cvsd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.wave\": {\n \"compressible\": false\n },\n \"audio/vorbis\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/vorbis-config\": {\n \"source\": \"iana\"\n },\n \"audio/wav\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/wave\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"weba\"]\n },\n \"audio/x-aac\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"aac\"]\n },\n \"audio/x-aiff\": {\n \"source\": \"apache\",\n \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n },\n \"audio/x-caf\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"caf\"]\n },\n \"audio/x-flac\": {\n \"source\": \"apache\",\n \"extensions\": [\"flac\"]\n },\n \"audio/x-m4a\": {\n \"source\": \"nginx\",\n \"extensions\": [\"m4a\"]\n },\n \"audio/x-matroska\": {\n \"source\": \"apache\",\n \"extensions\": [\"mka\"]\n },\n \"audio/x-mpegurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"m3u\"]\n },\n \"audio/x-ms-wax\": {\n \"source\": \"apache\",\n \"extensions\": [\"wax\"]\n },\n \"audio/x-ms-wma\": {\n \"source\": \"apache\",\n \"extensions\": [\"wma\"]\n },\n \"audio/x-pn-realaudio\": {\n \"source\": \"apache\",\n \"extensions\": [\"ram\",\"ra\"]\n },\n \"audio/x-pn-realaudio-plugin\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmp\"]\n },\n \"audio/x-realaudio\": {\n \"source\": \"nginx\",\n \"extensions\": [\"ra\"]\n },\n \"audio/x-tta\": {\n \"source\": \"apache\"\n },\n \"audio/x-wav\": {\n \"source\": \"apache\",\n \"extensions\": [\"wav\"]\n },\n \"audio/xm\": {\n \"source\": \"apache\",\n \"extensions\": [\"xm\"]\n },\n \"chemical/x-cdx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cdx\"]\n },\n \"chemical/x-cif\": {\n \"source\": \"apache\",\n \"extensions\": [\"cif\"]\n },\n \"chemical/x-cmdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmdf\"]\n },\n \"chemical/x-cml\": {\n \"source\": \"apache\",\n \"extensions\": [\"cml\"]\n },\n \"chemical/x-csml\": {\n \"source\": \"apache\",\n \"extensions\": [\"csml\"]\n },\n \"chemical/x-pdb\": {\n \"source\": \"apache\"\n },\n \"chemical/x-xyz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xyz\"]\n },\n \"font/collection\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttc\"]\n },\n \"font/otf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"otf\"]\n },\n \"font/sfnt\": {\n \"source\": \"iana\"\n },\n \"font/ttf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttf\"]\n },\n \"font/woff\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff\"]\n },\n \"font/woff2\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff2\"]\n },\n \"image/aces\": {\n \"source\": \"iana\"\n },\n \"image/apng\": {\n \"compressible\": false,\n \"extensions\": [\"apng\"]\n },\n \"image/bmp\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/cgm\": {\n \"source\": \"iana\",\n \"extensions\": [\"cgm\"]\n },\n \"image/dicom-rle\": {\n \"source\": \"iana\"\n },\n \"image/emf\": {\n \"source\": \"iana\"\n },\n \"image/fits\": {\n \"source\": \"iana\"\n },\n \"image/g3fax\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3\"]\n },\n \"image/gif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gif\"]\n },\n \"image/ief\": {\n \"source\": \"iana\",\n \"extensions\": [\"ief\"]\n },\n \"image/jls\": {\n \"source\": \"iana\"\n },\n \"image/jp2\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jp2\",\"jpg2\"]\n },\n \"image/jpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n },\n \"image/jpm\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpm\"]\n },\n \"image/jpx\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpx\",\"jpf\"]\n },\n \"image/ktx\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx\"]\n },\n \"image/naplps\": {\n \"source\": \"iana\"\n },\n \"image/pjpeg\": {\n \"compressible\": false\n },\n \"image/png\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"png\"]\n },\n \"image/prs.btif\": {\n \"source\": \"iana\",\n \"extensions\": [\"btif\"]\n },\n \"image/prs.pti\": {\n \"source\": \"iana\"\n },\n \"image/pwg-raster\": {\n \"source\": \"iana\"\n },\n \"image/sgi\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgi\"]\n },\n \"image/svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"svg\",\"svgz\"]\n },\n \"image/t38\": {\n \"source\": \"iana\"\n },\n \"image/tiff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"tiff\",\"tif\"]\n },\n \"image/tiff-fx\": {\n \"source\": \"iana\"\n },\n \"image/vnd.adobe.photoshop\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"psd\"]\n },\n \"image/vnd.airzip.accelerator.azv\": {\n \"source\": \"iana\"\n },\n \"image/vnd.cns.inf2\": {\n \"source\": \"iana\"\n },\n \"image/vnd.dece.graphic\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n },\n \"image/vnd.djvu\": {\n \"source\": \"iana\",\n \"extensions\": [\"djvu\",\"djv\"]\n },\n \"image/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"image/vnd.dwg\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwg\"]\n },\n \"image/vnd.dxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxf\"]\n },\n \"image/vnd.fastbidsheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fbs\"]\n },\n \"image/vnd.fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"fpx\"]\n },\n \"image/vnd.fst\": {\n \"source\": \"iana\",\n \"extensions\": [\"fst\"]\n },\n \"image/vnd.fujixerox.edmics-mmr\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmr\"]\n },\n \"image/vnd.fujixerox.edmics-rlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"rlc\"]\n },\n \"image/vnd.globalgraphics.pgb\": {\n \"source\": \"iana\"\n },\n \"image/vnd.microsoft.icon\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mix\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mozilla.apng\": {\n \"source\": \"iana\"\n },\n \"image/vnd.ms-modi\": {\n \"source\": \"iana\",\n \"extensions\": [\"mdi\"]\n },\n \"image/vnd.ms-photo\": {\n \"source\": \"apache\",\n \"extensions\": [\"wdp\"]\n },\n \"image/vnd.net-fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"npx\"]\n },\n \"image/vnd.radiance\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealed.png\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.gif\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.jpg\": {\n \"source\": \"iana\"\n },\n \"image/vnd.svf\": {\n \"source\": \"iana\"\n },\n \"image/vnd.tencent.tap\": {\n \"source\": \"iana\"\n },\n \"image/vnd.valve.source.texture\": {\n \"source\": \"iana\"\n },\n \"image/vnd.wap.wbmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbmp\"]\n },\n \"image/vnd.xiff\": {\n \"source\": \"iana\",\n \"extensions\": [\"xif\"]\n },\n \"image/vnd.zbrush.pcx\": {\n \"source\": \"iana\"\n },\n \"image/webp\": {\n \"source\": \"apache\",\n \"extensions\": [\"webp\"]\n },\n \"image/wmf\": {\n \"source\": \"iana\"\n },\n \"image/x-3ds\": {\n \"source\": \"apache\",\n \"extensions\": [\"3ds\"]\n },\n \"image/x-cmu-raster\": {\n \"source\": \"apache\",\n \"extensions\": [\"ras\"]\n },\n \"image/x-cmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmx\"]\n },\n \"image/x-freehand\": {\n \"source\": \"apache\",\n \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n },\n \"image/x-icon\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/x-jng\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jng\"]\n },\n \"image/x-mrsid-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"sid\"]\n },\n \"image/x-ms-bmp\": {\n \"source\": \"nginx\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/x-pcx\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcx\"]\n },\n \"image/x-pict\": {\n \"source\": \"apache\",\n \"extensions\": [\"pic\",\"pct\"]\n },\n \"image/x-portable-anymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pnm\"]\n },\n \"image/x-portable-bitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pbm\"]\n },\n \"image/x-portable-graymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgm\"]\n },\n \"image/x-portable-pixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"ppm\"]\n },\n \"image/x-rgb\": {\n \"source\": \"apache\",\n \"extensions\": [\"rgb\"]\n },\n \"image/x-tga\": {\n \"source\": \"apache\",\n \"extensions\": [\"tga\"]\n },\n \"image/x-xbitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbm\"]\n },\n \"image/x-xcf\": {\n \"compressible\": false\n },\n \"image/x-xpixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpm\"]\n },\n \"image/x-xwindowdump\": {\n \"source\": \"apache\",\n \"extensions\": [\"xwd\"]\n },\n \"message/cpim\": {\n \"source\": \"iana\"\n },\n \"message/delivery-status\": {\n \"source\": \"iana\"\n },\n \"message/disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\n \"disposition-notification\"\n ]\n },\n \"message/external-body\": {\n \"source\": \"iana\"\n },\n \"message/feedback-report\": {\n \"source\": \"iana\"\n },\n \"message/global\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8msg\"]\n },\n \"message/global-delivery-status\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8dsn\"]\n },\n \"message/global-disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8mdn\"]\n },\n \"message/global-headers\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8hdr\"]\n },\n \"message/http\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/imdn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"message/news\": {\n \"source\": \"iana\"\n },\n \"message/partial\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/rfc822\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eml\",\"mime\"]\n },\n \"message/s-http\": {\n \"source\": \"iana\"\n },\n \"message/sip\": {\n \"source\": \"iana\"\n },\n \"message/sipfrag\": {\n \"source\": \"iana\"\n },\n \"message/tracking-status\": {\n \"source\": \"iana\"\n },\n \"message/vnd.si.simp\": {\n \"source\": \"iana\"\n },\n \"message/vnd.wfa.wsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsc\"]\n },\n \"model/3mf\": {\n \"source\": \"iana\"\n },\n \"model/gltf+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gltf\"]\n },\n \"model/gltf-binary\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"glb\"]\n },\n \"model/iges\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"igs\",\"iges\"]\n },\n \"model/mesh\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n },\n \"model/vnd.collada+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"dae\"]\n },\n \"model/vnd.dwf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwf\"]\n },\n \"model/vnd.flatland.3dml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"gdl\"]\n },\n \"model/vnd.gs-gdl\": {\n \"source\": \"apache\"\n },\n \"model/vnd.gs.gdl\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gtw\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtw\"]\n },\n \"model/vnd.moml+xml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.mts\": {\n \"source\": \"iana\",\n \"extensions\": [\"mts\"]\n },\n \"model/vnd.opengex\": {\n \"source\": \"iana\"\n },\n \"model/vnd.parasolid.transmit.binary\": {\n \"source\": \"iana\"\n },\n \"model/vnd.parasolid.transmit.text\": {\n \"source\": \"iana\"\n },\n \"model/vnd.rosette.annotated-data-model\": {\n \"source\": \"iana\"\n },\n \"model/vnd.valve.source.compiled-map\": {\n \"source\": \"iana\"\n },\n \"model/vnd.vtu\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtu\"]\n },\n \"model/vrml\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"wrl\",\"vrml\"]\n },\n \"model/x3d+binary\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3db\",\"x3dbz\"]\n },\n \"model/x3d+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"model/x3d+vrml\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3dv\",\"x3dvz\"]\n },\n \"model/x3d+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"x3d\",\"x3dz\"]\n },\n \"model/x3d-vrml\": {\n \"source\": \"iana\"\n },\n \"multipart/alternative\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/appledouble\": {\n \"source\": \"iana\"\n },\n \"multipart/byteranges\": {\n \"source\": \"iana\"\n },\n \"multipart/digest\": {\n \"source\": \"iana\"\n },\n \"multipart/encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/form-data\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/header-set\": {\n \"source\": \"iana\"\n },\n \"multipart/mixed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/multilingual\": {\n \"source\": \"iana\"\n },\n \"multipart/parallel\": {\n \"source\": \"iana\"\n },\n \"multipart/related\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/report\": {\n \"source\": \"iana\"\n },\n \"multipart/signed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/vnd.bint.med-plus\": {\n \"source\": \"iana\"\n },\n \"multipart/voice-message\": {\n \"source\": \"iana\"\n },\n \"multipart/x-mixed-replace\": {\n \"source\": \"iana\"\n },\n \"text/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"text/cache-manifest\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"appcache\",\"manifest\"]\n },\n \"text/calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"ics\",\"ifb\"]\n },\n \"text/calender\": {\n \"compressible\": true\n },\n \"text/cmd\": {\n \"compressible\": true\n },\n \"text/coffeescript\": {\n \"extensions\": [\"coffee\",\"litcoffee\"]\n },\n \"text/css\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"css\"]\n },\n \"text/csv\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csv\"]\n },\n \"text/csv-schema\": {\n \"source\": \"iana\"\n },\n \"text/directory\": {\n \"source\": \"iana\"\n },\n \"text/dns\": {\n \"source\": \"iana\"\n },\n \"text/ecmascript\": {\n \"source\": \"iana\"\n },\n \"text/encaprtp\": {\n \"source\": \"iana\"\n },\n \"text/enriched\": {\n \"source\": \"iana\"\n },\n \"text/fwdred\": {\n \"source\": \"iana\"\n },\n \"text/grammar-ref-list\": {\n \"source\": \"iana\"\n },\n \"text/html\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"html\",\"htm\",\"shtml\"]\n },\n \"text/jade\": {\n \"extensions\": [\"jade\"]\n },\n \"text/javascript\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"text/jcr-cnd\": {\n \"source\": \"iana\"\n },\n \"text/jsx\": {\n \"compressible\": true,\n \"extensions\": [\"jsx\"]\n },\n \"text/less\": {\n \"extensions\": [\"less\"]\n },\n \"text/markdown\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"markdown\",\"md\"]\n },\n \"text/mathml\": {\n \"source\": \"nginx\",\n \"extensions\": [\"mml\"]\n },\n \"text/mizar\": {\n \"source\": \"iana\"\n },\n \"text/n3\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"n3\"]\n },\n \"text/parameters\": {\n \"source\": \"iana\"\n },\n \"text/parityfec\": {\n \"source\": \"iana\"\n },\n \"text/plain\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n },\n \"text/provenance-notation\": {\n \"source\": \"iana\"\n },\n \"text/prs.fallenstein.rst\": {\n \"source\": \"iana\"\n },\n \"text/prs.lines.tag\": {\n \"source\": \"iana\",\n \"extensions\": [\"dsc\"]\n },\n \"text/prs.prop.logic\": {\n \"source\": \"iana\"\n },\n \"text/raptorfec\": {\n \"source\": \"iana\"\n },\n \"text/red\": {\n \"source\": \"iana\"\n },\n \"text/rfc822-headers\": {\n \"source\": \"iana\"\n },\n \"text/richtext\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtx\"]\n },\n \"text/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"text/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"text/rtploopback\": {\n \"source\": \"iana\"\n },\n \"text/rtx\": {\n \"source\": \"iana\"\n },\n \"text/sgml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sgml\",\"sgm\"]\n },\n \"text/shex\": {\n \"extensions\": [\"shex\"]\n },\n \"text/slim\": {\n \"extensions\": [\"slim\",\"slm\"]\n },\n \"text/strings\": {\n \"source\": \"iana\"\n },\n \"text/stylus\": {\n \"extensions\": [\"stylus\",\"styl\"]\n },\n \"text/t140\": {\n \"source\": \"iana\"\n },\n \"text/tab-separated-values\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tsv\"]\n },\n \"text/troff\": {\n \"source\": \"iana\",\n \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n },\n \"text/turtle\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttl\"]\n },\n \"text/ulpfec\": {\n \"source\": \"iana\"\n },\n \"text/uri-list\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uri\",\"uris\",\"urls\"]\n },\n \"text/vcard\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vcard\"]\n },\n \"text/vnd.a\": {\n \"source\": \"iana\"\n },\n \"text/vnd.abc\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ascii-art\": {\n \"source\": \"iana\"\n },\n \"text/vnd.curl\": {\n \"source\": \"iana\",\n \"extensions\": [\"curl\"]\n },\n \"text/vnd.curl.dcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"dcurl\"]\n },\n \"text/vnd.curl.mcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"mcurl\"]\n },\n \"text/vnd.curl.scurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"scurl\"]\n },\n \"text/vnd.debian.copyright\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dmclientscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"text/vnd.esmertec.theme-descriptor\": {\n \"source\": \"iana\"\n },\n \"text/vnd.fly\": {\n \"source\": \"iana\",\n \"extensions\": [\"fly\"]\n },\n \"text/vnd.fmi.flexstor\": {\n \"source\": \"iana\",\n \"extensions\": [\"flx\"]\n },\n \"text/vnd.graphviz\": {\n \"source\": \"iana\",\n \"extensions\": [\"gv\"]\n },\n \"text/vnd.in3d.3dml\": {\n \"source\": \"iana\",\n \"extensions\": [\"3dml\"]\n },\n \"text/vnd.in3d.spot\": {\n \"source\": \"iana\",\n \"extensions\": [\"spot\"]\n },\n \"text/vnd.iptc.newsml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.iptc.nitf\": {\n \"source\": \"iana\"\n },\n \"text/vnd.latex-z\": {\n \"source\": \"iana\"\n },\n \"text/vnd.motorola.reflex\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ms-mediapackage\": {\n \"source\": \"iana\"\n },\n \"text/vnd.net2phone.commcenter.command\": {\n \"source\": \"iana\"\n },\n \"text/vnd.radisys.msml-basic-layout\": {\n \"source\": \"iana\"\n },\n \"text/vnd.si.uricatalogue\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sun.j2me.app-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"jad\"]\n },\n \"text/vnd.trolltech.linguist\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.si\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.sl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.wml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wml\"]\n },\n \"text/vnd.wap.wmlscript\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmls\"]\n },\n \"text/vtt\": {\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"vtt\"]\n },\n \"text/x-asm\": {\n \"source\": \"apache\",\n \"extensions\": [\"s\",\"asm\"]\n },\n \"text/x-c\": {\n \"source\": \"apache\",\n \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n },\n \"text/x-component\": {\n \"source\": \"nginx\",\n \"extensions\": [\"htc\"]\n },\n \"text/x-fortran\": {\n \"source\": \"apache\",\n \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n },\n \"text/x-gwt-rpc\": {\n \"compressible\": true\n },\n \"text/x-handlebars-template\": {\n \"extensions\": [\"hbs\"]\n },\n \"text/x-java-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"java\"]\n },\n \"text/x-jquery-tmpl\": {\n \"compressible\": true\n },\n \"text/x-lua\": {\n \"extensions\": [\"lua\"]\n },\n \"text/x-markdown\": {\n \"compressible\": true,\n \"extensions\": [\"mkd\"]\n },\n \"text/x-nfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"nfo\"]\n },\n \"text/x-opml\": {\n \"source\": \"apache\",\n \"extensions\": [\"opml\"]\n },\n \"text/x-org\": {\n \"compressible\": true,\n \"extensions\": [\"org\"]\n },\n \"text/x-pascal\": {\n \"source\": \"apache\",\n \"extensions\": [\"p\",\"pas\"]\n },\n \"text/x-processing\": {\n \"compressible\": true,\n \"extensions\": [\"pde\"]\n },\n \"text/x-sass\": {\n \"extensions\": [\"sass\"]\n },\n \"text/x-scss\": {\n \"extensions\": [\"scss\"]\n },\n \"text/x-setext\": {\n \"source\": \"apache\",\n \"extensions\": [\"etx\"]\n },\n \"text/x-sfv\": {\n \"source\": \"apache\",\n \"extensions\": [\"sfv\"]\n },\n \"text/x-suse-ymp\": {\n \"compressible\": true,\n \"extensions\": [\"ymp\"]\n },\n \"text/x-uuencode\": {\n \"source\": \"apache\",\n \"extensions\": [\"uu\"]\n },\n \"text/x-vcalendar\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcs\"]\n },\n \"text/x-vcard\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcf\"]\n },\n \"text/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\"]\n },\n \"text/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"text/yaml\": {\n \"extensions\": [\"yaml\",\"yml\"]\n },\n \"video/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"video/3gpp\": {\n \"source\": \"iana\",\n \"extensions\": [\"3gp\",\"3gpp\"]\n },\n \"video/3gpp-tt\": {\n \"source\": \"iana\"\n },\n \"video/3gpp2\": {\n \"source\": \"iana\",\n \"extensions\": [\"3g2\"]\n },\n \"video/bmpeg\": {\n \"source\": \"iana\"\n },\n \"video/bt656\": {\n \"source\": \"iana\"\n },\n \"video/celb\": {\n \"source\": \"iana\"\n },\n \"video/dv\": {\n \"source\": \"iana\"\n },\n \"video/encaprtp\": {\n \"source\": \"iana\"\n },\n \"video/h261\": {\n \"source\": \"iana\",\n \"extensions\": [\"h261\"]\n },\n \"video/h263\": {\n \"source\": \"iana\",\n \"extensions\": [\"h263\"]\n },\n \"video/h263-1998\": {\n \"source\": \"iana\"\n },\n \"video/h263-2000\": {\n \"source\": \"iana\"\n },\n \"video/h264\": {\n \"source\": \"iana\",\n \"extensions\": [\"h264\"]\n },\n \"video/h264-rcdo\": {\n \"source\": \"iana\"\n },\n \"video/h264-svc\": {\n \"source\": \"iana\"\n },\n \"video/h265\": {\n \"source\": \"iana\"\n },\n \"video/iso.segment\": {\n \"source\": \"iana\"\n },\n \"video/jpeg\": {\n \"source\": \"iana\",\n \"extensions\": [\"jpgv\"]\n },\n \"video/jpeg2000\": {\n \"source\": \"iana\"\n },\n \"video/jpm\": {\n \"source\": \"apache\",\n \"extensions\": [\"jpm\",\"jpgm\"]\n },\n \"video/mj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"mj2\",\"mjp2\"]\n },\n \"video/mp1s\": {\n \"source\": \"iana\"\n },\n \"video/mp2p\": {\n \"source\": \"iana\"\n },\n \"video/mp2t\": {\n \"source\": \"iana\",\n \"extensions\": [\"ts\"]\n },\n \"video/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n },\n \"video/mp4v-es\": {\n \"source\": \"iana\"\n },\n \"video/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n },\n \"video/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"video/mpv\": {\n \"source\": \"iana\"\n },\n \"video/nv\": {\n \"source\": \"iana\"\n },\n \"video/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogv\"]\n },\n \"video/parityfec\": {\n \"source\": \"iana\"\n },\n \"video/pointer\": {\n \"source\": \"iana\"\n },\n \"video/quicktime\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"qt\",\"mov\"]\n },\n \"video/raptorfec\": {\n \"source\": \"iana\"\n },\n \"video/raw\": {\n \"source\": \"iana\"\n },\n \"video/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"video/rtploopback\": {\n \"source\": \"iana\"\n },\n \"video/rtx\": {\n \"source\": \"iana\"\n },\n \"video/smpte291\": {\n \"source\": \"iana\"\n },\n \"video/smpte292m\": {\n \"source\": \"iana\"\n },\n \"video/ulpfec\": {\n \"source\": \"iana\"\n },\n \"video/vc1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.cctv\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvh\",\"uvvh\"]\n },\n \"video/vnd.dece.mobile\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvm\",\"uvvm\"]\n },\n \"video/vnd.dece.mp4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.pd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvp\",\"uvvp\"]\n },\n \"video/vnd.dece.sd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvs\",\"uvvs\"]\n },\n \"video/vnd.dece.video\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvv\",\"uvvv\"]\n },\n \"video/vnd.directv.mpeg\": {\n \"source\": \"iana\"\n },\n \"video/vnd.directv.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dlna.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dvb.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"dvb\"]\n },\n \"video/vnd.fvt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fvt\"]\n },\n \"video/vnd.hns.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsavc\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsmpeg2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.videop\": {\n \"source\": \"iana\"\n },\n \"video/vnd.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxu\",\"m4u\"]\n },\n \"video/vnd.ms-playready.media.pyv\": {\n \"source\": \"iana\",\n \"extensions\": [\"pyv\"]\n },\n \"video/vnd.nokia.interleaved-multimedia\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.mp4vr\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.videovoip\": {\n \"source\": \"iana\"\n },\n \"video/vnd.objectvideo\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.bink\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.smacker\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.swf\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealedmedia.softseal.mov\": {\n \"source\": \"iana\"\n },\n \"video/vnd.uvvu.mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvu\",\"uvvu\"]\n },\n \"video/vnd.vivo\": {\n \"source\": \"iana\",\n \"extensions\": [\"viv\"]\n },\n \"video/vp8\": {\n \"source\": \"iana\"\n },\n \"video/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"webm\"]\n },\n \"video/x-f4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"f4v\"]\n },\n \"video/x-fli\": {\n \"source\": \"apache\",\n \"extensions\": [\"fli\"]\n },\n \"video/x-flv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"flv\"]\n },\n \"video/x-m4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"m4v\"]\n },\n \"video/x-matroska\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n },\n \"video/x-mng\": {\n \"source\": \"apache\",\n \"extensions\": [\"mng\"]\n },\n \"video/x-ms-asf\": {\n \"source\": \"apache\",\n \"extensions\": [\"asf\",\"asx\"]\n },\n \"video/x-ms-vob\": {\n \"source\": \"apache\",\n \"extensions\": [\"vob\"]\n },\n \"video/x-ms-wm\": {\n \"source\": \"apache\",\n \"extensions\": [\"wm\"]\n },\n \"video/x-ms-wmv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"wmv\"]\n },\n \"video/x-ms-wmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmx\"]\n },\n \"video/x-ms-wvx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wvx\"]\n },\n \"video/x-msvideo\": {\n \"source\": \"apache\",\n \"extensions\": [\"avi\"]\n },\n \"video/x-sgi-movie\": {\n \"source\": \"apache\",\n \"extensions\": [\"movie\"]\n },\n \"video/x-smv\": {\n \"source\": \"apache\",\n \"extensions\": [\"smv\"]\n },\n \"x-conference/x-cooltalk\": {\n \"source\": \"apache\",\n \"extensions\": [\"ice\"]\n },\n \"x-shader/x-fragment\": {\n \"compressible\": true\n },\n \"x-shader/x-vertex\": {\n \"compressible\": true\n }\n}\n","'use strict';\n\nconst { Writable } = require('stream');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n kStatusCode,\n kWebSocket\n} = require('./constants');\nconst { concat, toArrayBuffer, unmask } = require('./buffer-util');\nconst { isValidStatusCode, isValidUTF8 } = require('./validation');\n\nconst GET_INFO = 0;\nconst GET_PAYLOAD_LENGTH_16 = 1;\nconst GET_PAYLOAD_LENGTH_64 = 2;\nconst GET_MASK = 3;\nconst GET_DATA = 4;\nconst INFLATING = 5;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n /**\n * Creates a Receiver instance.\n *\n * @param {String} [binaryType=nodebuffer] The type for binary data\n * @param {Object} [extensions] An object containing the negotiated extensions\n * @param {Boolean} [isServer=false] Specifies whether to operate in client or\n * server mode\n * @param {Number} [maxPayload=0] The maximum allowed message length\n */\n constructor(binaryType, extensions, isServer, maxPayload) {\n super();\n\n this._binaryType = binaryType || BINARY_TYPES[0];\n this[kWebSocket] = undefined;\n this._extensions = extensions || {};\n this._isServer = !!isServer;\n this._maxPayload = maxPayload | 0;\n\n this._bufferedBytes = 0;\n this._buffers = [];\n\n this._compressed = false;\n this._payloadLength = 0;\n this._mask = undefined;\n this._fragmented = 0;\n this._masked = false;\n this._fin = false;\n this._opcode = 0;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragments = [];\n\n this._state = GET_INFO;\n this._loop = false;\n }\n\n /**\n * Implements `Writable.prototype._write()`.\n *\n * @param {Buffer} chunk The chunk of data to write\n * @param {String} encoding The character encoding of `chunk`\n * @param {Function} cb Callback\n * @private\n */\n _write(chunk, encoding, cb) {\n if (this._opcode === 0x08 && this._state == GET_INFO) return cb();\n\n this._bufferedBytes += chunk.length;\n this._buffers.push(chunk);\n this.startLoop(cb);\n }\n\n /**\n * Consumes `n` bytes from the buffered data.\n *\n * @param {Number} n The number of bytes to consume\n * @return {Buffer} The consumed bytes\n * @private\n */\n consume(n) {\n this._bufferedBytes -= n;\n\n if (n === this._buffers[0].length) return this._buffers.shift();\n\n if (n < this._buffers[0].length) {\n const buf = this._buffers[0];\n this._buffers[0] = buf.slice(n);\n return buf.slice(0, n);\n }\n\n const dst = Buffer.allocUnsafe(n);\n\n do {\n const buf = this._buffers[0];\n const offset = dst.length - n;\n\n if (n >= buf.length) {\n dst.set(this._buffers.shift(), offset);\n } else {\n dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);\n this._buffers[0] = buf.slice(n);\n }\n\n n -= buf.length;\n } while (n > 0);\n\n return dst;\n }\n\n /**\n * Starts the parsing loop.\n *\n * @param {Function} cb Callback\n * @private\n */\n startLoop(cb) {\n let err;\n this._loop = true;\n\n do {\n switch (this._state) {\n case GET_INFO:\n err = this.getInfo();\n break;\n case GET_PAYLOAD_LENGTH_16:\n err = this.getPayloadLength16();\n break;\n case GET_PAYLOAD_LENGTH_64:\n err = this.getPayloadLength64();\n break;\n case GET_MASK:\n this.getMask();\n break;\n case GET_DATA:\n err = this.getData(cb);\n break;\n default:\n // `INFLATING`\n this._loop = false;\n return;\n }\n } while (this._loop);\n\n cb(err);\n }\n\n /**\n * Reads the first two bytes of a frame.\n *\n * @return {(RangeError|undefined)} A possible error\n * @private\n */\n getInfo() {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(2);\n\n if ((buf[0] & 0x30) !== 0x00) {\n this._loop = false;\n return error(\n RangeError,\n 'RSV2 and RSV3 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_2_3'\n );\n }\n\n const compressed = (buf[0] & 0x40) === 0x40;\n\n if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n this._loop = false;\n return error(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n }\n\n this._fin = (buf[0] & 0x80) === 0x80;\n this._opcode = buf[0] & 0x0f;\n this._payloadLength = buf[1] & 0x7f;\n\n if (this._opcode === 0x00) {\n if (compressed) {\n this._loop = false;\n return error(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n }\n\n if (!this._fragmented) {\n this._loop = false;\n return error(\n RangeError,\n 'invalid opcode 0',\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n }\n\n this._opcode = this._fragmented;\n } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n if (this._fragmented) {\n this._loop = false;\n return error(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n }\n\n this._compressed = compressed;\n } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n if (!this._fin) {\n this._loop = false;\n return error(\n RangeError,\n 'FIN must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_FIN'\n );\n }\n\n if (compressed) {\n this._loop = false;\n return error(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n }\n\n if (this._payloadLength > 0x7d) {\n this._loop = false;\n return error(\n RangeError,\n `invalid payload length ${this._payloadLength}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n );\n }\n } else {\n this._loop = false;\n return error(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n }\n\n if (!this._fin && !this._fragmented) this._fragmented = this._opcode;\n this._masked = (buf[1] & 0x80) === 0x80;\n\n if (this._isServer) {\n if (!this._masked) {\n this._loop = false;\n return error(\n RangeError,\n 'MASK must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_MASK'\n );\n }\n } else if (this._masked) {\n this._loop = false;\n return error(\n RangeError,\n 'MASK must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_MASK'\n );\n }\n\n if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;\n else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;\n else return this.haveLength();\n }\n\n /**\n * Gets extended payload length (7+16).\n *\n * @return {(RangeError|undefined)} A possible error\n * @private\n */\n getPayloadLength16() {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n this._payloadLength = this.consume(2).readUInt16BE(0);\n return this.haveLength();\n }\n\n /**\n * Gets extended payload length (7+64).\n *\n * @return {(RangeError|undefined)} A possible error\n * @private\n */\n getPayloadLength64() {\n if (this._bufferedBytes < 8) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(8);\n const num = buf.readUInt32BE(0);\n\n //\n // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned\n // if payload length is greater than this number.\n //\n if (num > Math.pow(2, 53 - 32) - 1) {\n this._loop = false;\n return error(\n RangeError,\n 'Unsupported WebSocket frame: payload length > 2^53 - 1',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'\n );\n }\n\n this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n return this.haveLength();\n }\n\n /**\n * Payload length has been read.\n *\n * @return {(RangeError|undefined)} A possible error\n * @private\n */\n haveLength() {\n if (this._payloadLength && this._opcode < 0x08) {\n this._totalPayloadLength += this._payloadLength;\n if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n this._loop = false;\n return error(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n }\n }\n\n if (this._masked) this._state = GET_MASK;\n else this._state = GET_DATA;\n }\n\n /**\n * Reads mask bytes.\n *\n * @private\n */\n getMask() {\n if (this._bufferedBytes < 4) {\n this._loop = false;\n return;\n }\n\n this._mask = this.consume(4);\n this._state = GET_DATA;\n }\n\n /**\n * Reads data bytes.\n *\n * @param {Function} cb Callback\n * @return {(Error|RangeError|undefined)} A possible error\n * @private\n */\n getData(cb) {\n let data = EMPTY_BUFFER;\n\n if (this._payloadLength) {\n if (this._bufferedBytes < this._payloadLength) {\n this._loop = false;\n return;\n }\n\n data = this.consume(this._payloadLength);\n if (this._masked) unmask(data, this._mask);\n }\n\n if (this._opcode > 0x07) return this.controlMessage(data);\n\n if (this._compressed) {\n this._state = INFLATING;\n this.decompress(data, cb);\n return;\n }\n\n if (data.length) {\n //\n // This message is not compressed so its lenght is the sum of the payload\n // length of all fragments.\n //\n this._messageLength = this._totalPayloadLength;\n this._fragments.push(data);\n }\n\n return this.dataMessage();\n }\n\n /**\n * Decompresses data.\n *\n * @param {Buffer} data Compressed data\n * @param {Function} cb Callback\n * @private\n */\n decompress(data, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n perMessageDeflate.decompress(data, this._fin, (err, buf) => {\n if (err) return cb(err);\n\n if (buf.length) {\n this._messageLength += buf.length;\n if (this._messageLength > this._maxPayload && this._maxPayload > 0) {\n return cb(\n error(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n )\n );\n }\n\n this._fragments.push(buf);\n }\n\n const er = this.dataMessage();\n if (er) return cb(er);\n\n this.startLoop(cb);\n });\n }\n\n /**\n * Handles a data message.\n *\n * @return {(Error|undefined)} A possible error\n * @private\n */\n dataMessage() {\n if (this._fin) {\n const messageLength = this._messageLength;\n const fragments = this._fragments;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragmented = 0;\n this._fragments = [];\n\n if (this._opcode === 2) {\n let data;\n\n if (this._binaryType === 'nodebuffer') {\n data = concat(fragments, messageLength);\n } else if (this._binaryType === 'arraybuffer') {\n data = toArrayBuffer(concat(fragments, messageLength));\n } else {\n data = fragments;\n }\n\n this.emit('message', data);\n } else {\n const buf = concat(fragments, messageLength);\n\n if (!isValidUTF8(buf)) {\n this._loop = false;\n return error(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n }\n\n this.emit('message', buf.toString());\n }\n }\n\n this._state = GET_INFO;\n }\n\n /**\n * Handles a control message.\n *\n * @param {Buffer} data Data to handle\n * @return {(Error|RangeError|undefined)} A possible error\n * @private\n */\n controlMessage(data) {\n if (this._opcode === 0x08) {\n this._loop = false;\n\n if (data.length === 0) {\n this.emit('conclude', 1005, '');\n this.end();\n } else if (data.length === 1) {\n return error(\n RangeError,\n 'invalid payload length 1',\n true,\n 1002,\n 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n );\n } else {\n const code = data.readUInt16BE(0);\n\n if (!isValidStatusCode(code)) {\n return error(\n RangeError,\n `invalid status code ${code}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CLOSE_CODE'\n );\n }\n\n const buf = data.slice(2);\n\n if (!isValidUTF8(buf)) {\n return error(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n }\n\n this.emit('conclude', code, buf.toString());\n this.end();\n }\n } else if (this._opcode === 0x09) {\n this.emit('ping', data);\n } else {\n this.emit('pong', data);\n }\n\n this._state = GET_INFO;\n }\n}\n\nmodule.exports = Receiver;\n\n/**\n * Builds an error object.\n *\n * @param {function(new:Error|RangeError)} ErrorCtor The error constructor\n * @param {String} message The error message\n * @param {Boolean} prefix Specifies whether or not to add a default prefix to\n * `message`\n * @param {Number} statusCode The status code\n * @param {String} errorCode The exposed error code\n * @return {(Error|RangeError)} The error\n * @private\n */\nfunction error(ErrorCtor, message, prefix, statusCode, errorCode) {\n const err = new ErrorCtor(\n prefix ? `Invalid WebSocket frame: ${message}` : message\n );\n\n Error.captureStackTrace(err, error);\n err.code = errorCode;\n err[kStatusCode] = statusCode;\n return err;\n}\n","'use strict';\n\nconst zlib = require('zlib');\n\nconst bufferUtil = require('./buffer-util');\nconst Limiter = require('./limiter');\nconst { kStatusCode, NOOP } = require('./constants');\n\nconst TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);\nconst kPerMessageDeflate = Symbol('permessage-deflate');\nconst kTotalLength = Symbol('total-length');\nconst kCallback = Symbol('callback');\nconst kBuffers = Symbol('buffers');\nconst kError = Symbol('error');\n\n//\n// We limit zlib concurrency, which prevents severe memory fragmentation\n// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913\n// and https://github.com/websockets/ws/issues/1202\n//\n// Intentionally global; it's the global thread pool that's an issue.\n//\nlet zlibLimiter;\n\n/**\n * permessage-deflate implementation.\n */\nclass PerMessageDeflate {\n /**\n * Creates a PerMessageDeflate instance.\n *\n * @param {Object} [options] Configuration options\n * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept\n * disabling of server context takeover\n * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n * acknowledge disabling of client context takeover\n * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the\n * use of a custom server window size\n * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support\n * for, or request, a custom client window size\n * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on\n * deflate\n * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on\n * inflate\n * @param {Number} [options.threshold=1024] Size (in bytes) below which\n * messages should not be compressed\n * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n * calls to zlib\n * @param {Boolean} [isServer=false] Create the instance in either server or\n * client mode\n * @param {Number} [maxPayload=0] The maximum allowed message length\n */\n constructor(options, isServer, maxPayload) {\n this._maxPayload = maxPayload | 0;\n this._options = options || {};\n this._threshold =\n this._options.threshold !== undefined ? this._options.threshold : 1024;\n this._isServer = !!isServer;\n this._deflate = null;\n this._inflate = null;\n\n this.params = null;\n\n if (!zlibLimiter) {\n const concurrency =\n this._options.concurrencyLimit !== undefined\n ? this._options.concurrencyLimit\n : 10;\n zlibLimiter = new Limiter(concurrency);\n }\n }\n\n /**\n * @type {String}\n */\n static get extensionName() {\n return 'permessage-deflate';\n }\n\n /**\n * Create an extension negotiation offer.\n *\n * @return {Object} Extension parameters\n * @public\n */\n offer() {\n const params = {};\n\n if (this._options.serverNoContextTakeover) {\n params.server_no_context_takeover = true;\n }\n if (this._options.clientNoContextTakeover) {\n params.client_no_context_takeover = true;\n }\n if (this._options.serverMaxWindowBits) {\n params.server_max_window_bits = this._options.serverMaxWindowBits;\n }\n if (this._options.clientMaxWindowBits) {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n } else if (this._options.clientMaxWindowBits == null) {\n params.client_max_window_bits = true;\n }\n\n return params;\n }\n\n /**\n * Accept an extension negotiation offer/response.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Object} Accepted configuration\n * @public\n */\n accept(configurations) {\n configurations = this.normalizeParams(configurations);\n\n this.params = this._isServer\n ? this.acceptAsServer(configurations)\n : this.acceptAsClient(configurations);\n\n return this.params;\n }\n\n /**\n * Releases all resources used by the extension.\n *\n * @public\n */\n cleanup() {\n if (this._inflate) {\n this._inflate.close();\n this._inflate = null;\n }\n\n if (this._deflate) {\n const callback = this._deflate[kCallback];\n\n this._deflate.close();\n this._deflate = null;\n\n if (callback) {\n callback(\n new Error(\n 'The deflate stream was closed while data was being processed'\n )\n );\n }\n }\n }\n\n /**\n * Accept an extension negotiation offer.\n *\n * @param {Array} offers The extension negotiation offers\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsServer(offers) {\n const opts = this._options;\n const accepted = offers.find((params) => {\n if (\n (opts.serverNoContextTakeover === false &&\n params.server_no_context_takeover) ||\n (params.server_max_window_bits &&\n (opts.serverMaxWindowBits === false ||\n (typeof opts.serverMaxWindowBits === 'number' &&\n opts.serverMaxWindowBits > params.server_max_window_bits))) ||\n (typeof opts.clientMaxWindowBits === 'number' &&\n !params.client_max_window_bits)\n ) {\n return false;\n }\n\n return true;\n });\n\n if (!accepted) {\n throw new Error('None of the extension offers can be accepted');\n }\n\n if (opts.serverNoContextTakeover) {\n accepted.server_no_context_takeover = true;\n }\n if (opts.clientNoContextTakeover) {\n accepted.client_no_context_takeover = true;\n }\n if (typeof opts.serverMaxWindowBits === 'number') {\n accepted.server_max_window_bits = opts.serverMaxWindowBits;\n }\n if (typeof opts.clientMaxWindowBits === 'number') {\n accepted.client_max_window_bits = opts.clientMaxWindowBits;\n } else if (\n accepted.client_max_window_bits === true ||\n opts.clientMaxWindowBits === false\n ) {\n delete accepted.client_max_window_bits;\n }\n\n return accepted;\n }\n\n /**\n * Accept the extension negotiation response.\n *\n * @param {Array} response The extension negotiation response\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsClient(response) {\n const params = response[0];\n\n if (\n this._options.clientNoContextTakeover === false &&\n params.client_no_context_takeover\n ) {\n throw new Error('Unexpected parameter \"client_no_context_takeover\"');\n }\n\n if (!params.client_max_window_bits) {\n if (typeof this._options.clientMaxWindowBits === 'number') {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n }\n } else if (\n this._options.clientMaxWindowBits === false ||\n (typeof this._options.clientMaxWindowBits === 'number' &&\n params.client_max_window_bits > this._options.clientMaxWindowBits)\n ) {\n throw new Error(\n 'Unexpected or invalid parameter \"client_max_window_bits\"'\n );\n }\n\n return params;\n }\n\n /**\n * Normalize parameters.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Array} The offers/response with normalized parameters\n * @private\n */\n normalizeParams(configurations) {\n configurations.forEach((params) => {\n Object.keys(params).forEach((key) => {\n let value = params[key];\n\n if (value.length > 1) {\n throw new Error(`Parameter \"${key}\" must have only a single value`);\n }\n\n value = value[0];\n\n if (key === 'client_max_window_bits') {\n if (value !== true) {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (!this._isServer) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else if (key === 'server_max_window_bits') {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (\n key === 'client_no_context_takeover' ||\n key === 'server_no_context_takeover'\n ) {\n if (value !== true) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else {\n throw new Error(`Unknown parameter \"${key}\"`);\n }\n\n params[key] = value;\n });\n });\n\n return configurations;\n }\n\n /**\n * Decompress data. Concurrency limited.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n decompress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._decompress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Compress data. Concurrency limited.\n *\n * @param {Buffer} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n compress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._compress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Decompress data.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _decompress(data, fin, callback) {\n const endpoint = this._isServer ? 'client' : 'server';\n\n if (!this._inflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._inflate = zlib.createInflateRaw({\n ...this._options.zlibInflateOptions,\n windowBits\n });\n this._inflate[kPerMessageDeflate] = this;\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n this._inflate.on('error', inflateOnError);\n this._inflate.on('data', inflateOnData);\n }\n\n this._inflate[kCallback] = callback;\n\n this._inflate.write(data);\n if (fin) this._inflate.write(TRAILER);\n\n this._inflate.flush(() => {\n const err = this._inflate[kError];\n\n if (err) {\n this._inflate.close();\n this._inflate = null;\n callback(err);\n return;\n }\n\n const data = bufferUtil.concat(\n this._inflate[kBuffers],\n this._inflate[kTotalLength]\n );\n\n if (this._inflate._readableState.endEmitted) {\n this._inflate.close();\n this._inflate = null;\n } else {\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._inflate.reset();\n }\n }\n\n callback(null, data);\n });\n }\n\n /**\n * Compress data.\n *\n * @param {Buffer} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _compress(data, fin, callback) {\n const endpoint = this._isServer ? 'server' : 'client';\n\n if (!this._deflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._deflate = zlib.createDeflateRaw({\n ...this._options.zlibDeflateOptions,\n windowBits\n });\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n //\n // An `'error'` event is emitted, only on Node.js < 10.0.0, if the\n // `zlib.DeflateRaw` instance is closed while data is being processed.\n // This can happen if `PerMessageDeflate#cleanup()` is called at the wrong\n // time due to an abnormal WebSocket closure.\n //\n this._deflate.on('error', NOOP);\n this._deflate.on('data', deflateOnData);\n }\n\n this._deflate[kCallback] = callback;\n\n this._deflate.write(data);\n this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {\n if (!this._deflate) {\n //\n // The deflate stream was closed while data was being processed.\n //\n return;\n }\n\n let data = bufferUtil.concat(\n this._deflate[kBuffers],\n this._deflate[kTotalLength]\n );\n\n if (fin) data = data.slice(0, data.length - 4);\n\n //\n // Ensure that the callback will not be called again in\n // `PerMessageDeflate#cleanup()`.\n //\n this._deflate[kCallback] = null;\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._deflate.reset();\n }\n\n callback(null, data);\n });\n }\n}\n\nmodule.exports = PerMessageDeflate;\n\n/**\n * The listener of the `zlib.DeflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction deflateOnData(chunk) {\n this[kBuffers].push(chunk);\n this[kTotalLength] += chunk.length;\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction inflateOnData(chunk) {\n this[kTotalLength] += chunk.length;\n\n if (\n this[kPerMessageDeflate]._maxPayload < 1 ||\n this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload\n ) {\n this[kBuffers].push(chunk);\n return;\n }\n\n this[kError] = new RangeError('Max payload size exceeded');\n this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';\n this[kError][kStatusCode] = 1009;\n this.removeListener('data', inflateOnData);\n this.reset();\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'error'` event.\n *\n * @param {Error} err The emitted error\n * @private\n */\nfunction inflateOnError(err) {\n //\n // There is no need to call `Zlib#close()` as the handle is automatically\n // closed when an error is emitted.\n //\n this[kPerMessageDeflate]._inflate = null;\n err[kStatusCode] = 1007;\n this[kCallback](err);\n}\n","'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n if (list.length === 0) return EMPTY_BUFFER;\n if (list.length === 1) return list[0];\n\n const target = Buffer.allocUnsafe(totalLength);\n let offset = 0;\n\n for (let i = 0; i < list.length; i++) {\n const buf = list[i];\n target.set(buf, offset);\n offset += buf.length;\n }\n\n if (offset < totalLength) return target.slice(0, offset);\n\n return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n for (let i = 0; i < length; i++) {\n output[offset + i] = source[i] ^ mask[i & 3];\n }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n // Required until https://github.com/nodejs/node/issues/9006 is resolved.\n const length = buffer.length;\n for (let i = 0; i < length; i++) {\n buffer[i] ^= mask[i & 3];\n }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n if (buf.byteLength === buf.buffer.byteLength) {\n return buf.buffer;\n }\n\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n toBuffer.readOnly = true;\n\n if (Buffer.isBuffer(data)) return data;\n\n let buf;\n\n if (data instanceof ArrayBuffer) {\n buf = Buffer.from(data);\n } else if (ArrayBuffer.isView(data)) {\n buf = Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n } else {\n buf = Buffer.from(data);\n toBuffer.readOnly = false;\n }\n\n return buf;\n}\n\ntry {\n const bufferUtil = require('bufferutil');\n const bu = bufferUtil.BufferUtil || bufferUtil;\n\n module.exports = {\n concat,\n mask(source, mask, output, offset, length) {\n if (length < 48) _mask(source, mask, output, offset, length);\n else bu.mask(source, mask, output, offset, length);\n },\n toArrayBuffer,\n toBuffer,\n unmask(buffer, mask) {\n if (buffer.length < 32) _unmask(buffer, mask);\n else bu.unmask(buffer, mask);\n }\n };\n} catch (e) /* istanbul ignore next */ {\n module.exports = {\n concat,\n mask: _mask,\n toArrayBuffer,\n toBuffer,\n unmask: _unmask\n };\n}\n","'use strict';\n\nmodule.exports = {\n BINARY_TYPES: ['nodebuffer', 'arraybuffer', 'fragments'],\n GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n kStatusCode: Symbol('status-code'),\n kWebSocket: Symbol('websocket'),\n EMPTY_BUFFER: Buffer.alloc(0),\n NOOP: () => {}\n};\n","'use strict';\n\nconst kDone = Symbol('kDone');\nconst kRun = Symbol('kRun');\n\n/**\n * A very simple job queue with adjustable concurrency. Adapted from\n * https://github.com/STRML/async-limiter\n */\nclass Limiter {\n /**\n * Creates a new `Limiter`.\n *\n * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed\n * to run concurrently\n */\n constructor(concurrency) {\n this[kDone] = () => {\n this.pending--;\n this[kRun]();\n };\n this.concurrency = concurrency || Infinity;\n this.jobs = [];\n this.pending = 0;\n }\n\n /**\n * Adds a job to the queue.\n *\n * @param {Function} job The job to run\n * @public\n */\n add(job) {\n this.jobs.push(job);\n this[kRun]();\n }\n\n /**\n * Removes a job from the queue and runs it if possible.\n *\n * @private\n */\n [kRun]() {\n if (this.pending === this.concurrency) return;\n\n if (this.jobs.length) {\n const job = this.jobs.shift();\n\n this.pending++;\n job(this[kDone]);\n }\n }\n}\n\nmodule.exports = Limiter;\n","'use strict';\n\n/**\n * Checks if a status code is allowed in a close frame.\n *\n * @param {Number} code The status code\n * @return {Boolean} `true` if the status code is valid, else `false`\n * @public\n */\nfunction isValidStatusCode(code) {\n return (\n (code >= 1000 &&\n code <= 1014 &&\n code !== 1004 &&\n code !== 1005 &&\n code !== 1006) ||\n (code >= 3000 && code <= 4999)\n );\n}\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction _isValidUTF8(buf) {\n const len = buf.length;\n let i = 0;\n\n while (i < len) {\n if ((buf[i] & 0x80) === 0) {\n // 0xxxxxxx\n i++;\n } else if ((buf[i] & 0xe0) === 0xc0) {\n // 110xxxxx 10xxxxxx\n if (\n i + 1 === len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i] & 0xfe) === 0xc0 // Overlong\n ) {\n return false;\n }\n\n i += 2;\n } else if ((buf[i] & 0xf0) === 0xe0) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n if (\n i + 2 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong\n (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)\n ) {\n return false;\n }\n\n i += 3;\n } else if ((buf[i] & 0xf8) === 0xf0) {\n // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n if (\n i + 3 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i + 3] & 0xc0) !== 0x80 ||\n (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong\n (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||\n buf[i] > 0xf4 // > U+10FFFF\n ) {\n return false;\n }\n\n i += 4;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\ntry {\n let isValidUTF8 = require('utf-8-validate');\n\n /* istanbul ignore if */\n if (typeof isValidUTF8 === 'object') {\n isValidUTF8 = isValidUTF8.Validation.isValidUTF8; // utf-8-validate@<3.0.0\n }\n\n module.exports = {\n isValidStatusCode,\n isValidUTF8(buf) {\n return buf.length < 150 ? _isValidUTF8(buf) : isValidUTF8(buf);\n }\n };\n} catch (e) /* istanbul ignore next */ {\n module.exports = {\n isValidStatusCode,\n isValidUTF8: _isValidUTF8\n };\n}\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^net|tls$\" }] */\n\n'use strict';\n\nconst net = require('net');\nconst tls = require('tls');\nconst { randomFillSync } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER } = require('./constants');\nconst { isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst mask = Buffer.alloc(4);\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n /**\n * Creates a Sender instance.\n *\n * @param {(net.Socket|tls.Socket)} socket The connection socket\n * @param {Object} [extensions] An object containing the negotiated extensions\n */\n constructor(socket, extensions) {\n this._extensions = extensions || {};\n this._socket = socket;\n\n this._firstFragment = true;\n this._compress = false;\n\n this._bufferedBytes = 0;\n this._deflating = false;\n this._queue = [];\n }\n\n /**\n * Frames a piece of data according to the HyBi WebSocket protocol.\n *\n * @param {Buffer} data The data to frame\n * @param {Object} options Options object\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @return {Buffer[]} The framed data as a list of `Buffer` instances\n * @public\n */\n static frame(data, options) {\n const merge = options.mask && options.readOnly;\n let offset = options.mask ? 6 : 2;\n let payloadLength = data.length;\n\n if (data.length >= 65536) {\n offset += 8;\n payloadLength = 127;\n } else if (data.length > 125) {\n offset += 2;\n payloadLength = 126;\n }\n\n const target = Buffer.allocUnsafe(merge ? data.length + offset : offset);\n\n target[0] = options.fin ? options.opcode | 0x80 : options.opcode;\n if (options.rsv1) target[0] |= 0x40;\n\n target[1] = payloadLength;\n\n if (payloadLength === 126) {\n target.writeUInt16BE(data.length, 2);\n } else if (payloadLength === 127) {\n target.writeUInt32BE(0, 2);\n target.writeUInt32BE(data.length, 6);\n }\n\n if (!options.mask) return [target, data];\n\n randomFillSync(mask, 0, 4);\n\n target[1] |= 0x80;\n target[offset - 4] = mask[0];\n target[offset - 3] = mask[1];\n target[offset - 2] = mask[2];\n target[offset - 1] = mask[3];\n\n if (merge) {\n applyMask(data, mask, target, offset, data.length);\n return [target];\n }\n\n applyMask(data, mask, data, 0, data.length);\n return [target, data];\n }\n\n /**\n * Sends a close message to the other peer.\n *\n * @param {Number} [code] The status code component of the body\n * @param {String} [data] The message component of the body\n * @param {Boolean} [mask=false] Specifies whether or not to mask the message\n * @param {Function} [cb] Callback\n * @public\n */\n close(code, data, mask, cb) {\n let buf;\n\n if (code === undefined) {\n buf = EMPTY_BUFFER;\n } else if (typeof code !== 'number' || !isValidStatusCode(code)) {\n throw new TypeError('First argument must be a valid error code number');\n } else if (data === undefined || data === '') {\n buf = Buffer.allocUnsafe(2);\n buf.writeUInt16BE(code, 0);\n } else {\n const length = Buffer.byteLength(data);\n\n if (length > 123) {\n throw new RangeError('The message must not be greater than 123 bytes');\n }\n\n buf = Buffer.allocUnsafe(2 + length);\n buf.writeUInt16BE(code, 0);\n buf.write(data, 2);\n }\n\n if (this._deflating) {\n this.enqueue([this.doClose, buf, mask, cb]);\n } else {\n this.doClose(buf, mask, cb);\n }\n }\n\n /**\n * Frames and sends a close message.\n *\n * @param {Buffer} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @private\n */\n doClose(data, mask, cb) {\n this.sendFrame(\n Sender.frame(data, {\n fin: true,\n rsv1: false,\n opcode: 0x08,\n mask,\n readOnly: false\n }),\n cb\n );\n }\n\n /**\n * Sends a ping message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n ping(data, mask, cb) {\n const buf = toBuffer(data);\n\n if (buf.length > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n if (this._deflating) {\n this.enqueue([this.doPing, buf, mask, toBuffer.readOnly, cb]);\n } else {\n this.doPing(buf, mask, toBuffer.readOnly, cb);\n }\n }\n\n /**\n * Frames and sends a ping message.\n *\n * @param {Buffer} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Boolean} [readOnly=false] Specifies whether `data` can be modified\n * @param {Function} [cb] Callback\n * @private\n */\n doPing(data, mask, readOnly, cb) {\n this.sendFrame(\n Sender.frame(data, {\n fin: true,\n rsv1: false,\n opcode: 0x09,\n mask,\n readOnly\n }),\n cb\n );\n }\n\n /**\n * Sends a pong message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n pong(data, mask, cb) {\n const buf = toBuffer(data);\n\n if (buf.length > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n if (this._deflating) {\n this.enqueue([this.doPong, buf, mask, toBuffer.readOnly, cb]);\n } else {\n this.doPong(buf, mask, toBuffer.readOnly, cb);\n }\n }\n\n /**\n * Frames and sends a pong message.\n *\n * @param {Buffer} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Boolean} [readOnly=false] Specifies whether `data` can be modified\n * @param {Function} [cb] Callback\n * @private\n */\n doPong(data, mask, readOnly, cb) {\n this.sendFrame(\n Sender.frame(data, {\n fin: true,\n rsv1: false,\n opcode: 0x0a,\n mask,\n readOnly\n }),\n cb\n );\n }\n\n /**\n * Sends a data message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Object} options Options object\n * @param {Boolean} [options.compress=false] Specifies whether or not to\n * compress `data`\n * @param {Boolean} [options.binary=false] Specifies whether `data` is binary\n * or text\n * @param {Boolean} [options.fin=false] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Function} [cb] Callback\n * @public\n */\n send(data, options, cb) {\n const buf = toBuffer(data);\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n let opcode = options.binary ? 2 : 1;\n let rsv1 = options.compress;\n\n if (this._firstFragment) {\n this._firstFragment = false;\n if (rsv1 && perMessageDeflate) {\n rsv1 = buf.length >= perMessageDeflate._threshold;\n }\n this._compress = rsv1;\n } else {\n rsv1 = false;\n opcode = 0;\n }\n\n if (options.fin) this._firstFragment = true;\n\n if (perMessageDeflate) {\n const opts = {\n fin: options.fin,\n rsv1,\n opcode,\n mask: options.mask,\n readOnly: toBuffer.readOnly\n };\n\n if (this._deflating) {\n this.enqueue([this.dispatch, buf, this._compress, opts, cb]);\n } else {\n this.dispatch(buf, this._compress, opts, cb);\n }\n } else {\n this.sendFrame(\n Sender.frame(buf, {\n fin: options.fin,\n rsv1: false,\n opcode,\n mask: options.mask,\n readOnly: toBuffer.readOnly\n }),\n cb\n );\n }\n }\n\n /**\n * Dispatches a data message.\n *\n * @param {Buffer} data The message to send\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * `data`\n * @param {Object} options Options object\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n dispatch(data, compress, options, cb) {\n if (!compress) {\n this.sendFrame(Sender.frame(data, options), cb);\n return;\n }\n\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n this._bufferedBytes += data.length;\n this._deflating = true;\n perMessageDeflate.compress(data, options.fin, (_, buf) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while data was being compressed'\n );\n\n if (typeof cb === 'function') cb(err);\n\n for (let i = 0; i < this._queue.length; i++) {\n const callback = this._queue[i][4];\n\n if (typeof callback === 'function') callback(err);\n }\n\n return;\n }\n\n this._bufferedBytes -= data.length;\n this._deflating = false;\n options.readOnly = false;\n this.sendFrame(Sender.frame(buf, options), cb);\n this.dequeue();\n });\n }\n\n /**\n * Executes queued send operations.\n *\n * @private\n */\n dequeue() {\n while (!this._deflating && this._queue.length) {\n const params = this._queue.shift();\n\n this._bufferedBytes -= params[1].length;\n Reflect.apply(params[0], this, params.slice(1));\n }\n }\n\n /**\n * Enqueues a send operation.\n *\n * @param {Array} params Send operation parameters.\n * @private\n */\n enqueue(params) {\n this._bufferedBytes += params[1].length;\n this._queue.push(params);\n }\n\n /**\n * Sends a frame.\n *\n * @param {Buffer[]} list The frame to send\n * @param {Function} [cb] Callback\n * @private\n */\n sendFrame(list, cb) {\n if (list.length === 2) {\n this._socket.cork();\n this._socket.write(list[0]);\n this._socket.write(list[1], cb);\n this._socket.uncork();\n } else {\n this._socket.write(list[0], cb);\n }\n }\n}\n\nmodule.exports = Sender;\n","'use strict';\n\nconst { Duplex } = require('stream');\n\n/**\n * Emits the `'close'` event on a stream.\n *\n * @param {Duplex} stream The stream.\n * @private\n */\nfunction emitClose(stream) {\n stream.emit('close');\n}\n\n/**\n * The listener of the `'end'` event.\n *\n * @private\n */\nfunction duplexOnEnd() {\n if (!this.destroyed && this._writableState.finished) {\n this.destroy();\n }\n}\n\n/**\n * The listener of the `'error'` event.\n *\n * @param {Error} err The error\n * @private\n */\nfunction duplexOnError(err) {\n this.removeListener('error', duplexOnError);\n this.destroy();\n if (this.listenerCount('error') === 0) {\n // Do not suppress the throwing behavior.\n this.emit('error', err);\n }\n}\n\n/**\n * Wraps a `WebSocket` in a duplex stream.\n *\n * @param {WebSocket} ws The `WebSocket` to wrap\n * @param {Object} [options] The options for the `Duplex` constructor\n * @return {Duplex} The duplex stream\n * @public\n */\nfunction createWebSocketStream(ws, options) {\n let resumeOnReceiverDrain = true;\n let terminateOnDestroy = true;\n\n function receiverOnDrain() {\n if (resumeOnReceiverDrain) ws._socket.resume();\n }\n\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n ws._receiver.removeAllListeners('drain');\n ws._receiver.on('drain', receiverOnDrain);\n });\n } else {\n ws._receiver.removeAllListeners('drain');\n ws._receiver.on('drain', receiverOnDrain);\n }\n\n const duplex = new Duplex({\n ...options,\n autoDestroy: false,\n emitClose: false,\n objectMode: false,\n writableObjectMode: false\n });\n\n ws.on('message', function message(msg) {\n if (!duplex.push(msg)) {\n resumeOnReceiverDrain = false;\n ws._socket.pause();\n }\n });\n\n ws.once('error', function error(err) {\n if (duplex.destroyed) return;\n\n // Prevent `ws.terminate()` from being called by `duplex._destroy()`.\n //\n // - If the `'error'` event is emitted before the `'open'` event, then\n // `ws.terminate()` is a noop as no socket is assigned.\n // - Otherwise, the error is re-emitted by the listener of the `'error'`\n // event of the `Receiver` object. The listener already closes the\n // connection by calling `ws.close()`. This allows a close frame to be\n // sent to the other peer. If `ws.terminate()` is called right after this,\n // then the close frame might not be sent.\n terminateOnDestroy = false;\n duplex.destroy(err);\n });\n\n ws.once('close', function close() {\n if (duplex.destroyed) return;\n\n duplex.push(null);\n });\n\n duplex._destroy = function (err, callback) {\n if (ws.readyState === ws.CLOSED) {\n callback(err);\n process.nextTick(emitClose, duplex);\n return;\n }\n\n let called = false;\n\n ws.once('error', function error(err) {\n called = true;\n callback(err);\n });\n\n ws.once('close', function close() {\n if (!called) callback(err);\n process.nextTick(emitClose, duplex);\n });\n\n if (terminateOnDestroy) ws.terminate();\n };\n\n duplex._final = function (callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._final(callback);\n });\n return;\n }\n\n // If the value of the `_socket` property is `null` it means that `ws` is a\n // client websocket and the handshake failed. In fact, when this happens, a\n // socket is never assigned to the websocket. Wait for the `'error'` event\n // that will be emitted by the websocket.\n if (ws._socket === null) return;\n\n if (ws._socket._writableState.finished) {\n callback();\n if (duplex._readableState.endEmitted) duplex.destroy();\n } else {\n ws._socket.once('finish', function finish() {\n // `duplex` is not destroyed here because the `'end'` event will be\n // emitted on `duplex` after this `'finish'` event. The EOF signaling\n // `null` chunk is, in fact, pushed when the websocket emits `'close'`.\n callback();\n });\n ws.close();\n }\n };\n\n duplex._read = function () {\n if (\n (ws.readyState === ws.OPEN || ws.readyState === ws.CLOSING) &&\n !resumeOnReceiverDrain\n ) {\n resumeOnReceiverDrain = true;\n if (!ws._receiver._writableState.needDrain) ws._socket.resume();\n }\n };\n\n duplex._write = function (chunk, encoding, callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._write(chunk, encoding, callback);\n });\n return;\n }\n\n ws.send(chunk, callback);\n };\n\n duplex.on('end', duplexOnEnd);\n duplex.on('error', duplexOnError);\n return duplex;\n}\n\nmodule.exports = createWebSocketStream;\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^net|tls|https$\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst https = require('https');\nconst net = require('net');\nconst tls = require('tls');\nconst { createHash } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst WebSocket = require('./websocket');\nconst { format, parse } = require('./extension');\nconst { GUID, kWebSocket } = require('./constants');\n\nconst keyRegex = /^[+/0-9A-Za-z]{22}==$/;\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\n/**\n * Class representing a WebSocket server.\n *\n * @extends EventEmitter\n */\nclass WebSocketServer extends EventEmitter {\n /**\n * Create a `WebSocketServer` instance.\n *\n * @param {Object} options Configuration options\n * @param {Number} [options.backlog=511] The maximum length of the queue of\n * pending connections\n * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n * track clients\n * @param {Function} [options.handleProtocols] A hook to handle protocols\n * @param {String} [options.host] The hostname where to bind the server\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Boolean} [options.noServer=false] Enable no server mode\n * @param {String} [options.path] Accept only connections matching this path\n * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n * permessage-deflate\n * @param {Number} [options.port] The port where to bind the server\n * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n * server to use\n * @param {Function} [options.verifyClient] A hook to reject connections\n * @param {Function} [callback] A listener for the `listening` event\n */\n constructor(options, callback) {\n super();\n\n options = {\n maxPayload: 100 * 1024 * 1024,\n perMessageDeflate: false,\n handleProtocols: null,\n clientTracking: true,\n verifyClient: null,\n noServer: false,\n backlog: null, // use default (511 as implemented in net.js)\n server: null,\n host: null,\n path: null,\n port: null,\n ...options\n };\n\n if (\n (options.port == null && !options.server && !options.noServer) ||\n (options.port != null && (options.server || options.noServer)) ||\n (options.server && options.noServer)\n ) {\n throw new TypeError(\n 'One and only one of the \"port\", \"server\", or \"noServer\" options ' +\n 'must be specified'\n );\n }\n\n if (options.port != null) {\n this._server = http.createServer((req, res) => {\n const body = http.STATUS_CODES[426];\n\n res.writeHead(426, {\n 'Content-Length': body.length,\n 'Content-Type': 'text/plain'\n });\n res.end(body);\n });\n this._server.listen(\n options.port,\n options.host,\n options.backlog,\n callback\n );\n } else if (options.server) {\n this._server = options.server;\n }\n\n if (this._server) {\n const emitConnection = this.emit.bind(this, 'connection');\n\n this._removeListeners = addListeners(this._server, {\n listening: this.emit.bind(this, 'listening'),\n error: this.emit.bind(this, 'error'),\n upgrade: (req, socket, head) => {\n this.handleUpgrade(req, socket, head, emitConnection);\n }\n });\n }\n\n if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n if (options.clientTracking) this.clients = new Set();\n this.options = options;\n this._state = RUNNING;\n }\n\n /**\n * Returns the bound address, the address family name, and port of the server\n * as reported by the operating system if listening on an IP socket.\n * If the server is listening on a pipe or UNIX domain socket, the name is\n * returned as a string.\n *\n * @return {(Object|String|null)} The address of the server\n * @public\n */\n address() {\n if (this.options.noServer) {\n throw new Error('The server is operating in \"noServer\" mode');\n }\n\n if (!this._server) return null;\n return this._server.address();\n }\n\n /**\n * Close the server.\n *\n * @param {Function} [cb] Callback\n * @public\n */\n close(cb) {\n if (cb) this.once('close', cb);\n\n if (this._state === CLOSED) {\n process.nextTick(emitClose, this);\n return;\n }\n\n if (this._state === CLOSING) return;\n this._state = CLOSING;\n\n //\n // Terminate all associated clients.\n //\n if (this.clients) {\n for (const client of this.clients) client.terminate();\n }\n\n const server = this._server;\n\n if (server) {\n this._removeListeners();\n this._removeListeners = this._server = null;\n\n //\n // Close the http server if it was internally created.\n //\n if (this.options.port != null) {\n server.close(emitClose.bind(undefined, this));\n return;\n }\n }\n\n process.nextTick(emitClose, this);\n }\n\n /**\n * See if a given request should be handled by this server instance.\n *\n * @param {http.IncomingMessage} req Request object to inspect\n * @return {Boolean} `true` if the request is valid, else `false`\n * @public\n */\n shouldHandle(req) {\n if (this.options.path) {\n const index = req.url.indexOf('?');\n const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n if (pathname !== this.options.path) return false;\n }\n\n return true;\n }\n\n /**\n * Handle a HTTP Upgrade request.\n *\n * @param {http.IncomingMessage} req The request object\n * @param {(net.Socket|tls.Socket)} socket The network socket between the\n * server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @public\n */\n handleUpgrade(req, socket, head, cb) {\n socket.on('error', socketOnError);\n\n const key =\n req.headers['sec-websocket-key'] !== undefined\n ? req.headers['sec-websocket-key'].trim()\n : false;\n const version = +req.headers['sec-websocket-version'];\n const extensions = {};\n\n if (\n req.method !== 'GET' ||\n req.headers.upgrade.toLowerCase() !== 'websocket' ||\n !key ||\n !keyRegex.test(key) ||\n (version !== 8 && version !== 13) ||\n !this.shouldHandle(req)\n ) {\n return abortHandshake(socket, 400);\n }\n\n if (this.options.perMessageDeflate) {\n const perMessageDeflate = new PerMessageDeflate(\n this.options.perMessageDeflate,\n true,\n this.options.maxPayload\n );\n\n try {\n const offers = parse(req.headers['sec-websocket-extensions']);\n\n if (offers[PerMessageDeflate.extensionName]) {\n perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n }\n } catch (err) {\n return abortHandshake(socket, 400);\n }\n }\n\n //\n // Optionally call external client verification handler.\n //\n if (this.options.verifyClient) {\n const info = {\n origin:\n req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],\n secure: !!(req.socket.authorized || req.socket.encrypted),\n req\n };\n\n if (this.options.verifyClient.length === 2) {\n this.options.verifyClient(info, (verified, code, message, headers) => {\n if (!verified) {\n return abortHandshake(socket, code || 401, message, headers);\n }\n\n this.completeUpgrade(key, extensions, req, socket, head, cb);\n });\n return;\n }\n\n if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n }\n\n this.completeUpgrade(key, extensions, req, socket, head, cb);\n }\n\n /**\n * Upgrade the connection to WebSocket.\n *\n * @param {String} key The value of the `Sec-WebSocket-Key` header\n * @param {Object} extensions The accepted extensions\n * @param {http.IncomingMessage} req The request object\n * @param {(net.Socket|tls.Socket)} socket The network socket between the\n * server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @throws {Error} If called more than once with the same socket\n * @private\n */\n completeUpgrade(key, extensions, req, socket, head, cb) {\n //\n // Destroy the socket if the client has already sent a FIN packet.\n //\n if (!socket.readable || !socket.writable) return socket.destroy();\n\n if (socket[kWebSocket]) {\n throw new Error(\n 'server.handleUpgrade() was called more than once with the same ' +\n 'socket, possibly due to a misconfiguration'\n );\n }\n\n if (this._state > RUNNING) return abortHandshake(socket, 503);\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n const headers = [\n 'HTTP/1.1 101 Switching Protocols',\n 'Upgrade: websocket',\n 'Connection: Upgrade',\n `Sec-WebSocket-Accept: ${digest}`\n ];\n\n const ws = new WebSocket(null);\n let protocol = req.headers['sec-websocket-protocol'];\n\n if (protocol) {\n protocol = protocol.split(',').map(trim);\n\n //\n // Optionally call external protocol selection handler.\n //\n if (this.options.handleProtocols) {\n protocol = this.options.handleProtocols(protocol, req);\n } else {\n protocol = protocol[0];\n }\n\n if (protocol) {\n headers.push(`Sec-WebSocket-Protocol: ${protocol}`);\n ws._protocol = protocol;\n }\n }\n\n if (extensions[PerMessageDeflate.extensionName]) {\n const params = extensions[PerMessageDeflate.extensionName].params;\n const value = format({\n [PerMessageDeflate.extensionName]: [params]\n });\n headers.push(`Sec-WebSocket-Extensions: ${value}`);\n ws._extensions = extensions;\n }\n\n //\n // Allow external modification/inspection of handshake headers.\n //\n this.emit('headers', headers, req);\n\n socket.write(headers.concat('\\r\\n').join('\\r\\n'));\n socket.removeListener('error', socketOnError);\n\n ws.setSocket(socket, head, this.options.maxPayload);\n\n if (this.clients) {\n this.clients.add(ws);\n ws.on('close', () => this.clients.delete(ws));\n }\n\n cb(ws, req);\n }\n}\n\nmodule.exports = WebSocketServer;\n\n/**\n * Add event listeners on an `EventEmitter` using a map of \n * pairs.\n *\n * @param {EventEmitter} server The event emitter\n * @param {Object.} map The listeners to add\n * @return {Function} A function that will remove the added listeners when\n * called\n * @private\n */\nfunction addListeners(server, map) {\n for (const event of Object.keys(map)) server.on(event, map[event]);\n\n return function removeListeners() {\n for (const event of Object.keys(map)) {\n server.removeListener(event, map[event]);\n }\n };\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction emitClose(server) {\n server._state = CLOSED;\n server.emit('close');\n}\n\n/**\n * Handle premature socket errors.\n *\n * @private\n */\nfunction socketOnError() {\n this.destroy();\n}\n\n/**\n * Close the connection when preconditions are not fulfilled.\n *\n * @param {(net.Socket|tls.Socket)} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} [message] The HTTP response body\n * @param {Object} [headers] Additional HTTP response headers\n * @private\n */\nfunction abortHandshake(socket, code, message, headers) {\n if (socket.writable) {\n message = message || http.STATUS_CODES[code];\n headers = {\n Connection: 'close',\n 'Content-Type': 'text/html',\n 'Content-Length': Buffer.byteLength(message),\n ...headers\n };\n\n socket.write(\n `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\\r\\n` +\n Object.keys(headers)\n .map((h) => `${h}: ${headers[h]}`)\n .join('\\r\\n') +\n '\\r\\n\\r\\n' +\n message\n );\n }\n\n socket.removeListener('error', socketOnError);\n socket.destroy();\n}\n\n/**\n * Remove whitespace characters from both ends of a string.\n *\n * @param {String} str The string\n * @return {String} A new string representing `str` stripped of whitespace\n * characters from both its beginning and end\n * @private\n */\nfunction trim(str) {\n return str.trim();\n}\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Readable$\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst https = require('https');\nconst http = require('http');\nconst net = require('net');\nconst tls = require('tls');\nconst { randomBytes, createHash } = require('crypto');\nconst { Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n GUID,\n kStatusCode,\n kWebSocket,\n NOOP\n} = require('./constants');\nconst { addEventListener, removeEventListener } = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst protocolVersions = [8, 13];\nconst closeTimeout = 30 * 1000;\n\n/**\n * Class representing a WebSocket.\n *\n * @extends EventEmitter\n */\nclass WebSocket extends EventEmitter {\n /**\n * Create a new `WebSocket`.\n *\n * @param {(String|URL)} address The URL to which to connect\n * @param {(String|String[])} [protocols] The subprotocols\n * @param {Object} [options] Connection options\n */\n constructor(address, protocols, options) {\n super();\n\n this._binaryType = BINARY_TYPES[0];\n this._closeCode = 1006;\n this._closeFrameReceived = false;\n this._closeFrameSent = false;\n this._closeMessage = '';\n this._closeTimer = null;\n this._extensions = {};\n this._protocol = '';\n this._readyState = WebSocket.CONNECTING;\n this._receiver = null;\n this._sender = null;\n this._socket = null;\n\n if (address !== null) {\n this._bufferedAmount = 0;\n this._isServer = false;\n this._redirects = 0;\n\n if (Array.isArray(protocols)) {\n protocols = protocols.join(', ');\n } else if (typeof protocols === 'object' && protocols !== null) {\n options = protocols;\n protocols = undefined;\n }\n\n initAsClient(this, address, protocols, options);\n } else {\n this._isServer = true;\n }\n }\n\n /**\n * This deviates from the WHATWG interface since ws doesn't support the\n * required default \"blob\" type (instead we define a custom \"nodebuffer\"\n * type).\n *\n * @type {String}\n */\n get binaryType() {\n return this._binaryType;\n }\n\n set binaryType(type) {\n if (!BINARY_TYPES.includes(type)) return;\n\n this._binaryType = type;\n\n //\n // Allow to change `binaryType` on the fly.\n //\n if (this._receiver) this._receiver._binaryType = type;\n }\n\n /**\n * @type {Number}\n */\n get bufferedAmount() {\n if (!this._socket) return this._bufferedAmount;\n\n return this._socket._writableState.length + this._sender._bufferedBytes;\n }\n\n /**\n * @type {String}\n */\n get extensions() {\n return Object.keys(this._extensions).join();\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onclose() {\n return undefined;\n }\n\n /* istanbul ignore next */\n set onclose(listener) {}\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onerror() {\n return undefined;\n }\n\n /* istanbul ignore next */\n set onerror(listener) {}\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onopen() {\n return undefined;\n }\n\n /* istanbul ignore next */\n set onopen(listener) {}\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onmessage() {\n return undefined;\n }\n\n /* istanbul ignore next */\n set onmessage(listener) {}\n\n /**\n * @type {String}\n */\n get protocol() {\n return this._protocol;\n }\n\n /**\n * @type {Number}\n */\n get readyState() {\n return this._readyState;\n }\n\n /**\n * @type {String}\n */\n get url() {\n return this._url;\n }\n\n /**\n * Set up the socket and the internal resources.\n *\n * @param {(net.Socket|tls.Socket)} socket The network socket between the\n * server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Number} [maxPayload=0] The maximum allowed message size\n * @private\n */\n setSocket(socket, head, maxPayload) {\n const receiver = new Receiver(\n this.binaryType,\n this._extensions,\n this._isServer,\n maxPayload\n );\n\n this._sender = new Sender(socket, this._extensions);\n this._receiver = receiver;\n this._socket = socket;\n\n receiver[kWebSocket] = this;\n socket[kWebSocket] = this;\n\n receiver.on('conclude', receiverOnConclude);\n receiver.on('drain', receiverOnDrain);\n receiver.on('error', receiverOnError);\n receiver.on('message', receiverOnMessage);\n receiver.on('ping', receiverOnPing);\n receiver.on('pong', receiverOnPong);\n\n socket.setTimeout(0);\n socket.setNoDelay();\n\n if (head.length > 0) socket.unshift(head);\n\n socket.on('close', socketOnClose);\n socket.on('data', socketOnData);\n socket.on('end', socketOnEnd);\n socket.on('error', socketOnError);\n\n this._readyState = WebSocket.OPEN;\n this.emit('open');\n }\n\n /**\n * Emit the `'close'` event.\n *\n * @private\n */\n emitClose() {\n if (!this._socket) {\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n return;\n }\n\n if (this._extensions[PerMessageDeflate.extensionName]) {\n this._extensions[PerMessageDeflate.extensionName].cleanup();\n }\n\n this._receiver.removeAllListeners();\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n }\n\n /**\n * Start a closing handshake.\n *\n * +----------+ +-----------+ +----------+\n * - - -|ws.close()|-->|close frame|-->|ws.close()|- - -\n * | +----------+ +-----------+ +----------+ |\n * +----------+ +-----------+ |\n * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING\n * +----------+ +-----------+ |\n * | | | +---+ |\n * +------------------------+-->|fin| - - - -\n * | +---+ | +---+\n * - - - - -|fin|<---------------------+\n * +---+\n *\n * @param {Number} [code] Status code explaining why the connection is closing\n * @param {String} [data] A string explaining why the connection is closing\n * @public\n */\n close(code, data) {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n return abortHandshake(this, this._req, msg);\n }\n\n if (this.readyState === WebSocket.CLOSING) {\n if (\n this._closeFrameSent &&\n (this._closeFrameReceived || this._receiver._writableState.errorEmitted)\n ) {\n this._socket.end();\n }\n\n return;\n }\n\n this._readyState = WebSocket.CLOSING;\n this._sender.close(code, data, !this._isServer, (err) => {\n //\n // This error is handled by the `'error'` listener on the socket. We only\n // want to know if the close frame has been sent here.\n //\n if (err) return;\n\n this._closeFrameSent = true;\n\n if (\n this._closeFrameReceived ||\n this._receiver._writableState.errorEmitted\n ) {\n this._socket.end();\n }\n });\n\n //\n // Specify a timeout for the closing handshake to complete.\n //\n this._closeTimer = setTimeout(\n this._socket.destroy.bind(this._socket),\n closeTimeout\n );\n }\n\n /**\n * Send a ping.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the ping is sent\n * @public\n */\n ping(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.ping(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Send a pong.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the pong is sent\n * @public\n */\n pong(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.pong(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Send a data message.\n *\n * @param {*} data The message to send\n * @param {Object} [options] Options object\n * @param {Boolean} [options.compress] Specifies whether or not to compress\n * `data`\n * @param {Boolean} [options.binary] Specifies whether `data` is binary or\n * text\n * @param {Boolean} [options.fin=true] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when data is written out\n * @public\n */\n send(data, options, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n const opts = {\n binary: typeof data !== 'string',\n mask: !this._isServer,\n compress: true,\n fin: true,\n ...options\n };\n\n if (!this._extensions[PerMessageDeflate.extensionName]) {\n opts.compress = false;\n }\n\n this._sender.send(data || EMPTY_BUFFER, opts, cb);\n }\n\n /**\n * Forcibly close the connection.\n *\n * @public\n */\n terminate() {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n return abortHandshake(this, this._req, msg);\n }\n\n if (this._socket) {\n this._readyState = WebSocket.CLOSING;\n this._socket.destroy();\n }\n }\n}\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n[\n 'binaryType',\n 'bufferedAmount',\n 'extensions',\n 'protocol',\n 'readyState',\n 'url'\n].forEach((property) => {\n Object.defineProperty(WebSocket.prototype, property, { enumerable: true });\n});\n\n//\n// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.\n// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface\n//\n['open', 'error', 'close', 'message'].forEach((method) => {\n Object.defineProperty(WebSocket.prototype, `on${method}`, {\n enumerable: true,\n get() {\n const listeners = this.listeners(method);\n for (let i = 0; i < listeners.length; i++) {\n if (listeners[i]._listener) return listeners[i]._listener;\n }\n\n return undefined;\n },\n set(listener) {\n const listeners = this.listeners(method);\n for (let i = 0; i < listeners.length; i++) {\n //\n // Remove only the listeners added via `addEventListener`.\n //\n if (listeners[i]._listener) this.removeListener(method, listeners[i]);\n }\n this.addEventListener(method, listener);\n }\n });\n});\n\nWebSocket.prototype.addEventListener = addEventListener;\nWebSocket.prototype.removeEventListener = removeEventListener;\n\nmodule.exports = WebSocket;\n\n/**\n * Initialize a WebSocket client.\n *\n * @param {WebSocket} websocket The client to initialize\n * @param {(String|URL)} address The URL to which to connect\n * @param {String} [protocols] The subprotocols\n * @param {Object} [options] Connection options\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n * permessage-deflate\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n * handshake request\n * @param {Number} [options.protocolVersion=13] Value of the\n * `Sec-WebSocket-Version` header\n * @param {String} [options.origin] Value of the `Origin` or\n * `Sec-WebSocket-Origin` header\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n * redirects\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n * allowed\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n const opts = {\n protocolVersion: protocolVersions[1],\n maxPayload: 100 * 1024 * 1024,\n perMessageDeflate: true,\n followRedirects: false,\n maxRedirects: 10,\n ...options,\n createConnection: undefined,\n socketPath: undefined,\n hostname: undefined,\n protocol: undefined,\n timeout: undefined,\n method: undefined,\n host: undefined,\n path: undefined,\n port: undefined\n };\n\n if (!protocolVersions.includes(opts.protocolVersion)) {\n throw new RangeError(\n `Unsupported protocol version: ${opts.protocolVersion} ` +\n `(supported versions: ${protocolVersions.join(', ')})`\n );\n }\n\n let parsedUrl;\n\n if (address instanceof URL) {\n parsedUrl = address;\n websocket._url = address.href;\n } else {\n parsedUrl = new URL(address);\n websocket._url = address;\n }\n\n const isUnixSocket = parsedUrl.protocol === 'ws+unix:';\n\n if (!parsedUrl.host && (!isUnixSocket || !parsedUrl.pathname)) {\n const err = new Error(`Invalid URL: ${websocket.url}`);\n\n if (websocket._redirects === 0) {\n throw err;\n } else {\n emitErrorAndClose(websocket, err);\n return;\n }\n }\n\n const isSecure =\n parsedUrl.protocol === 'wss:' || parsedUrl.protocol === 'https:';\n const defaultPort = isSecure ? 443 : 80;\n const key = randomBytes(16).toString('base64');\n const get = isSecure ? https.get : http.get;\n let perMessageDeflate;\n\n opts.createConnection = isSecure ? tlsConnect : netConnect;\n opts.defaultPort = opts.defaultPort || defaultPort;\n opts.port = parsedUrl.port || defaultPort;\n opts.host = parsedUrl.hostname.startsWith('[')\n ? parsedUrl.hostname.slice(1, -1)\n : parsedUrl.hostname;\n opts.headers = {\n 'Sec-WebSocket-Version': opts.protocolVersion,\n 'Sec-WebSocket-Key': key,\n Connection: 'Upgrade',\n Upgrade: 'websocket',\n ...opts.headers\n };\n opts.path = parsedUrl.pathname + parsedUrl.search;\n opts.timeout = opts.handshakeTimeout;\n\n if (opts.perMessageDeflate) {\n perMessageDeflate = new PerMessageDeflate(\n opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},\n false,\n opts.maxPayload\n );\n opts.headers['Sec-WebSocket-Extensions'] = format({\n [PerMessageDeflate.extensionName]: perMessageDeflate.offer()\n });\n }\n if (protocols) {\n opts.headers['Sec-WebSocket-Protocol'] = protocols;\n }\n if (opts.origin) {\n if (opts.protocolVersion < 13) {\n opts.headers['Sec-WebSocket-Origin'] = opts.origin;\n } else {\n opts.headers.Origin = opts.origin;\n }\n }\n if (parsedUrl.username || parsedUrl.password) {\n opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;\n }\n\n if (isUnixSocket) {\n const parts = opts.path.split(':');\n\n opts.socketPath = parts[0];\n opts.path = parts[1];\n }\n\n let req = (websocket._req = get(opts));\n\n if (opts.timeout) {\n req.on('timeout', () => {\n abortHandshake(websocket, req, 'Opening handshake has timed out');\n });\n }\n\n req.on('error', (err) => {\n if (req === null || req.aborted) return;\n\n req = websocket._req = null;\n emitErrorAndClose(websocket, err);\n });\n\n req.on('response', (res) => {\n const location = res.headers.location;\n const statusCode = res.statusCode;\n\n if (\n location &&\n opts.followRedirects &&\n statusCode >= 300 &&\n statusCode < 400\n ) {\n if (++websocket._redirects > opts.maxRedirects) {\n abortHandshake(websocket, req, 'Maximum redirects exceeded');\n return;\n }\n\n req.abort();\n\n let addr;\n\n try {\n addr = new URL(location, address);\n } catch (err) {\n emitErrorAndClose(websocket, err);\n return;\n }\n\n initAsClient(websocket, addr, protocols, options);\n } else if (!websocket.emit('unexpected-response', req, res)) {\n abortHandshake(\n websocket,\n req,\n `Unexpected server response: ${res.statusCode}`\n );\n }\n });\n\n req.on('upgrade', (res, socket, head) => {\n websocket.emit('upgrade', res);\n\n //\n // The user may have closed the connection from a listener of the `upgrade`\n // event.\n //\n if (websocket.readyState !== WebSocket.CONNECTING) return;\n\n req = websocket._req = null;\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n if (res.headers['sec-websocket-accept'] !== digest) {\n abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');\n return;\n }\n\n const serverProt = res.headers['sec-websocket-protocol'];\n const protList = (protocols || '').split(/, */);\n let protError;\n\n if (!protocols && serverProt) {\n protError = 'Server sent a subprotocol but none was requested';\n } else if (protocols && !serverProt) {\n protError = 'Server sent no subprotocol';\n } else if (serverProt && !protList.includes(serverProt)) {\n protError = 'Server sent an invalid subprotocol';\n }\n\n if (protError) {\n abortHandshake(websocket, socket, protError);\n return;\n }\n\n if (serverProt) websocket._protocol = serverProt;\n\n const secWebSocketExtensions = res.headers['sec-websocket-extensions'];\n\n if (secWebSocketExtensions !== undefined) {\n if (!perMessageDeflate) {\n const message =\n 'Server sent a Sec-WebSocket-Extensions header but no extension ' +\n 'was requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n let extensions;\n\n try {\n extensions = parse(secWebSocketExtensions);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n const extensionNames = Object.keys(extensions);\n\n if (extensionNames.length) {\n if (\n extensionNames.length !== 1 ||\n extensionNames[0] !== PerMessageDeflate.extensionName\n ) {\n const message =\n 'Server indicated an extension that was not requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n try {\n perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n websocket._extensions[PerMessageDeflate.extensionName] =\n perMessageDeflate;\n }\n }\n\n websocket.setSocket(socket, head, opts.maxPayload);\n });\n}\n\n/**\n * Emit the `'error'` and `'close'` event.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {Error} The error to emit\n * @private\n */\nfunction emitErrorAndClose(websocket, err) {\n websocket._readyState = WebSocket.CLOSING;\n websocket.emit('error', err);\n websocket.emitClose();\n}\n\n/**\n * Create a `net.Socket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {net.Socket} The newly created socket used to start the connection\n * @private\n */\nfunction netConnect(options) {\n options.path = options.socketPath;\n return net.connect(options);\n}\n\n/**\n * Create a `tls.TLSSocket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {tls.TLSSocket} The newly created socket used to start the connection\n * @private\n */\nfunction tlsConnect(options) {\n options.path = undefined;\n\n if (!options.servername && options.servername !== '') {\n options.servername = net.isIP(options.host) ? '' : options.host;\n }\n\n return tls.connect(options);\n}\n\n/**\n * Abort the handshake and emit an error.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to\n * abort or the socket to destroy\n * @param {String} message The error message\n * @private\n */\nfunction abortHandshake(websocket, stream, message) {\n websocket._readyState = WebSocket.CLOSING;\n\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshake);\n\n if (stream.setHeader) {\n stream.abort();\n\n if (stream.socket && !stream.socket.destroyed) {\n //\n // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if\n // called after the request completed. See\n // https://github.com/websockets/ws/issues/1869.\n //\n stream.socket.destroy();\n }\n\n stream.once('abort', websocket.emitClose.bind(websocket));\n websocket.emit('error', err);\n } else {\n stream.destroy(err);\n stream.once('error', websocket.emit.bind(websocket, 'error'));\n stream.once('close', websocket.emitClose.bind(websocket));\n }\n}\n\n/**\n * Handle cases where the `ping()`, `pong()`, or `send()` methods are called\n * when the `readyState` attribute is `CLOSING` or `CLOSED`.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {*} [data] The data to send\n * @param {Function} [cb] Callback\n * @private\n */\nfunction sendAfterClose(websocket, data, cb) {\n if (data) {\n const length = toBuffer(data).length;\n\n //\n // The `_bufferedAmount` property is used only when the peer is a client and\n // the opening handshake fails. Under these circumstances, in fact, the\n // `setSocket()` method is not called, so the `_socket` and `_sender`\n // properties are set to `null`.\n //\n if (websocket._socket) websocket._sender._bufferedBytes += length;\n else websocket._bufferedAmount += length;\n }\n\n if (cb) {\n const err = new Error(\n `WebSocket is not open: readyState ${websocket.readyState} ` +\n `(${readyStates[websocket.readyState]})`\n );\n cb(err);\n }\n}\n\n/**\n * The listener of the `Receiver` `'conclude'` event.\n *\n * @param {Number} code The status code\n * @param {String} reason The reason for closing\n * @private\n */\nfunction receiverOnConclude(code, reason) {\n const websocket = this[kWebSocket];\n\n websocket._closeFrameReceived = true;\n websocket._closeMessage = reason;\n websocket._closeCode = code;\n\n if (websocket._socket[kWebSocket] === undefined) return;\n\n websocket._socket.removeListener('data', socketOnData);\n process.nextTick(resume, websocket._socket);\n\n if (code === 1005) websocket.close();\n else websocket.close(code, reason);\n}\n\n/**\n * The listener of the `Receiver` `'drain'` event.\n *\n * @private\n */\nfunction receiverOnDrain() {\n this[kWebSocket]._socket.resume();\n}\n\n/**\n * The listener of the `Receiver` `'error'` event.\n *\n * @param {(RangeError|Error)} err The emitted error\n * @private\n */\nfunction receiverOnError(err) {\n const websocket = this[kWebSocket];\n\n if (websocket._socket[kWebSocket] !== undefined) {\n websocket._socket.removeListener('data', socketOnData);\n\n //\n // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See\n // https://github.com/websockets/ws/issues/1940.\n //\n process.nextTick(resume, websocket._socket);\n\n websocket.close(err[kStatusCode]);\n }\n\n websocket.emit('error', err);\n}\n\n/**\n * The listener of the `Receiver` `'finish'` event.\n *\n * @private\n */\nfunction receiverOnFinish() {\n this[kWebSocket].emitClose();\n}\n\n/**\n * The listener of the `Receiver` `'message'` event.\n *\n * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The message\n * @private\n */\nfunction receiverOnMessage(data) {\n this[kWebSocket].emit('message', data);\n}\n\n/**\n * The listener of the `Receiver` `'ping'` event.\n *\n * @param {Buffer} data The data included in the ping frame\n * @private\n */\nfunction receiverOnPing(data) {\n const websocket = this[kWebSocket];\n\n websocket.pong(data, !websocket._isServer, NOOP);\n websocket.emit('ping', data);\n}\n\n/**\n * The listener of the `Receiver` `'pong'` event.\n *\n * @param {Buffer} data The data included in the pong frame\n * @private\n */\nfunction receiverOnPong(data) {\n this[kWebSocket].emit('pong', data);\n}\n\n/**\n * Resume a readable stream\n *\n * @param {Readable} stream The readable stream\n * @private\n */\nfunction resume(stream) {\n stream.resume();\n}\n\n/**\n * The listener of the `net.Socket` `'close'` event.\n *\n * @private\n */\nfunction socketOnClose() {\n const websocket = this[kWebSocket];\n\n this.removeListener('close', socketOnClose);\n this.removeListener('data', socketOnData);\n this.removeListener('end', socketOnEnd);\n\n websocket._readyState = WebSocket.CLOSING;\n\n let chunk;\n\n //\n // The close frame might not have been received or the `'end'` event emitted,\n // for example, if the socket was destroyed due to an error. Ensure that the\n // `receiver` stream is closed after writing any remaining buffered data to\n // it. If the readable side of the socket is in flowing mode then there is no\n // buffered data as everything has been already written and `readable.read()`\n // will return `null`. If instead, the socket is paused, any possible buffered\n // data will be read as a single chunk.\n //\n if (\n !this._readableState.endEmitted &&\n !websocket._closeFrameReceived &&\n !websocket._receiver._writableState.errorEmitted &&\n (chunk = websocket._socket.read()) !== null\n ) {\n websocket._receiver.write(chunk);\n }\n\n websocket._receiver.end();\n\n this[kWebSocket] = undefined;\n\n clearTimeout(websocket._closeTimer);\n\n if (\n websocket._receiver._writableState.finished ||\n websocket._receiver._writableState.errorEmitted\n ) {\n websocket.emitClose();\n } else {\n websocket._receiver.on('error', receiverOnFinish);\n websocket._receiver.on('finish', receiverOnFinish);\n }\n}\n\n/**\n * The listener of the `net.Socket` `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction socketOnData(chunk) {\n if (!this[kWebSocket]._receiver.write(chunk)) {\n this.pause();\n }\n}\n\n/**\n * The listener of the `net.Socket` `'end'` event.\n *\n * @private\n */\nfunction socketOnEnd() {\n const websocket = this[kWebSocket];\n\n websocket._readyState = WebSocket.CLOSING;\n websocket._receiver.end();\n this.end();\n}\n\n/**\n * The listener of the `net.Socket` `'error'` event.\n *\n * @private\n */\nfunction socketOnError() {\n const websocket = this[kWebSocket];\n\n this.removeListener('error', socketOnError);\n this.on('error', NOOP);\n\n if (websocket) {\n websocket._readyState = WebSocket.CLOSING;\n this.destroy();\n }\n}\n","'use strict';\n\n/**\n * Class representing an event.\n *\n * @private\n */\nclass Event {\n /**\n * Create a new `Event`.\n *\n * @param {String} type The name of the event\n * @param {Object} target A reference to the target to which the event was\n * dispatched\n */\n constructor(type, target) {\n this.target = target;\n this.type = type;\n }\n}\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n * @private\n */\nclass MessageEvent extends Event {\n /**\n * Create a new `MessageEvent`.\n *\n * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The received data\n * @param {WebSocket} target A reference to the target to which the event was\n * dispatched\n */\n constructor(data, target) {\n super('message', target);\n\n this.data = data;\n }\n}\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n * @private\n */\nclass CloseEvent extends Event {\n /**\n * Create a new `CloseEvent`.\n *\n * @param {Number} code The status code explaining why the connection is being\n * closed\n * @param {String} reason A human-readable string explaining why the\n * connection is closing\n * @param {WebSocket} target A reference to the target to which the event was\n * dispatched\n */\n constructor(code, reason, target) {\n super('close', target);\n\n this.wasClean = target._closeFrameReceived && target._closeFrameSent;\n this.reason = reason;\n this.code = code;\n }\n}\n\n/**\n * Class representing an open event.\n *\n * @extends Event\n * @private\n */\nclass OpenEvent extends Event {\n /**\n * Create a new `OpenEvent`.\n *\n * @param {WebSocket} target A reference to the target to which the event was\n * dispatched\n */\n constructor(target) {\n super('open', target);\n }\n}\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n * @private\n */\nclass ErrorEvent extends Event {\n /**\n * Create a new `ErrorEvent`.\n *\n * @param {Object} error The error that generated this event\n * @param {WebSocket} target A reference to the target to which the event was\n * dispatched\n */\n constructor(error, target) {\n super('error', target);\n\n this.message = error.message;\n this.error = error;\n }\n}\n\n/**\n * This provides methods for emulating the `EventTarget` interface. It's not\n * meant to be used directly.\n *\n * @mixin\n */\nconst EventTarget = {\n /**\n * Register an event listener.\n *\n * @param {String} type A string representing the event type to listen for\n * @param {Function} listener The listener to add\n * @param {Object} [options] An options object specifies characteristics about\n * the event listener\n * @param {Boolean} [options.once=false] A `Boolean`` indicating that the\n * listener should be invoked at most once after being added. If `true`,\n * the listener would be automatically removed when invoked.\n * @public\n */\n addEventListener(type, listener, options) {\n if (typeof listener !== 'function') return;\n\n function onMessage(data) {\n listener.call(this, new MessageEvent(data, this));\n }\n\n function onClose(code, message) {\n listener.call(this, new CloseEvent(code, message, this));\n }\n\n function onError(error) {\n listener.call(this, new ErrorEvent(error, this));\n }\n\n function onOpen() {\n listener.call(this, new OpenEvent(this));\n }\n\n const method = options && options.once ? 'once' : 'on';\n\n if (type === 'message') {\n onMessage._listener = listener;\n this[method](type, onMessage);\n } else if (type === 'close') {\n onClose._listener = listener;\n this[method](type, onClose);\n } else if (type === 'error') {\n onError._listener = listener;\n this[method](type, onError);\n } else if (type === 'open') {\n onOpen._listener = listener;\n this[method](type, onOpen);\n } else {\n this[method](type, listener);\n }\n },\n\n /**\n * Remove an event listener.\n *\n * @param {String} type A string representing the event type to remove\n * @param {Function} listener The listener to remove\n * @public\n */\n removeEventListener(type, listener) {\n const listeners = this.listeners(type);\n\n for (let i = 0; i < listeners.length; i++) {\n if (listeners[i] === listener || listeners[i]._listener === listener) {\n this.removeListener(type, listeners[i]);\n }\n }\n }\n};\n\nmodule.exports = EventTarget;\n","'use strict';\n\n//\n// Allowed token characters:\n//\n// '!', '#', '$', '%', '&', ''', '*', '+', '-',\n// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'\n//\n// tokenChars[32] === 0 // ' '\n// tokenChars[33] === 1 // '!'\n// tokenChars[34] === 0 // '\"'\n// ...\n//\n// prettier-ignore\nconst tokenChars = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127\n];\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n * parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n if (dest[name] === undefined) dest[name] = [elem];\n else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n const offers = Object.create(null);\n\n if (header === undefined || header === '') return offers;\n\n let params = Object.create(null);\n let mustUnescape = false;\n let isEscaping = false;\n let inQuotes = false;\n let extensionName;\n let paramName;\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (; i < header.length; i++) {\n const code = header.charCodeAt(i);\n\n if (extensionName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x20 /* ' ' */ || code === 0x09 /* '\\t' */) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n const name = header.slice(start, end);\n if (code === 0x2c) {\n push(offers, name, params);\n params = Object.create(null);\n } else {\n extensionName = name;\n }\n\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (paramName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x20 || code === 0x09) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n push(params, header.slice(start, end), true);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n start = end = -1;\n } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n paramName = header.slice(start, i);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else {\n //\n // The value of a quoted-string after unescaping must conform to the\n // token ABNF, so only token characters are valid.\n // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n //\n if (isEscaping) {\n if (tokenChars[code] !== 1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n if (start === -1) start = i;\n else if (!mustUnescape) mustUnescape = true;\n isEscaping = false;\n } else if (inQuotes) {\n if (tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x22 /* '\"' */ && start !== -1) {\n inQuotes = false;\n end = i;\n } else if (code === 0x5c /* '\\' */) {\n isEscaping = true;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n inQuotes = true;\n } else if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n if (end === -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n let value = header.slice(start, end);\n if (mustUnescape) {\n value = value.replace(/\\\\/g, '');\n mustUnescape = false;\n }\n push(params, paramName, value);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n paramName = undefined;\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n }\n\n if (start === -1 || inQuotes) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n if (end === -1) end = i;\n const token = header.slice(start, end);\n if (extensionName === undefined) {\n push(offers, token, params);\n } else {\n if (paramName === undefined) {\n push(params, token, true);\n } else if (mustUnescape) {\n push(params, paramName, token.replace(/\\\\/g, ''));\n } else {\n push(params, paramName, token);\n }\n push(offers, extensionName, params);\n }\n\n return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n return Object.keys(extensions)\n .map((extension) => {\n let configurations = extensions[extension];\n if (!Array.isArray(configurations)) configurations = [configurations];\n return configurations\n .map((params) => {\n return [extension]\n .concat(\n Object.keys(params).map((k) => {\n let values = params[k];\n if (!Array.isArray(values)) values = [values];\n return values\n .map((v) => (v === true ? k : `${k}=${v}`))\n .join('; ');\n })\n )\n .join('; ');\n })\n .join(', ');\n })\n .join(', ');\n}\n\nmodule.exports = { format, parse };\n","// @flow\n\nimport {Reporter} from '@parcel/plugin';\nimport HMRServer from './HMRServer';\nimport Server from './Server';\n\nlet servers: Map = new Map();\nlet hmrServers: Map = new Map();\nexport default (new Reporter({\n async report({event, options, logger}) {\n let {serveOptions, hmrOptions} = options;\n let server = serveOptions ? servers.get(serveOptions.port) : undefined;\n let hmrPort =\n (hmrOptions && hmrOptions.port) || (serveOptions && serveOptions.port);\n let hmrServer = hmrPort ? hmrServers.get(hmrPort) : undefined;\n switch (event.type) {\n case 'watchStart': {\n if (serveOptions) {\n // If there's already a server when watching has just started, something\n // is wrong.\n if (server) {\n return logger.warn({\n message: 'Trying to create the devserver but it already exists.',\n });\n }\n\n let serverOptions = {\n ...serveOptions,\n projectRoot: options.projectRoot,\n cacheDir: options.cacheDir,\n // Override the target's publicUrl as that is likely meant for production.\n // This could be configurable in the future.\n publicUrl: serveOptions.publicUrl ?? '/',\n inputFS: options.inputFS,\n outputFS: options.outputFS,\n logger,\n hmrOptions,\n };\n\n server = new Server(serverOptions);\n servers.set(serveOptions.port, server);\n const devServer = await server.start();\n\n if (hmrOptions && hmrOptions.port === serveOptions.port) {\n let hmrServerOptions = {\n port: serveOptions.port,\n host: hmrOptions.host,\n devServer,\n addMiddleware: handler => {\n server?.middleware.push(handler);\n },\n logger,\n };\n hmrServer = new HMRServer(hmrServerOptions);\n hmrServers.set(serveOptions.port, hmrServer);\n await hmrServer.start();\n return;\n }\n }\n\n let port = hmrOptions?.port;\n if (typeof port === 'number') {\n let hmrServerOptions = {port, host: hmrOptions?.host, logger};\n hmrServer = new HMRServer(hmrServerOptions);\n hmrServers.set(port, hmrServer);\n await hmrServer.start();\n }\n break;\n }\n case 'watchEnd':\n if (serveOptions) {\n if (!server) {\n return logger.warn({\n message:\n 'Could not shutdown devserver because it does not exist.',\n });\n }\n await server.stop();\n servers.delete(server.options.port);\n }\n if (hmrOptions && hmrServer) {\n await hmrServer.stop();\n // $FlowFixMe[prop-missing]\n hmrServers.delete(hmrServer.wss.options.port);\n }\n break;\n case 'buildStart':\n if (server) {\n server.buildStart();\n }\n break;\n case 'buildProgress':\n if (event.phase === 'bundled' && hmrServer) {\n await hmrServer.emitUpdate(event);\n }\n break;\n case 'buildSuccess':\n if (serveOptions) {\n if (!server) {\n return logger.warn({\n message:\n 'Could not send success event to devserver because it does not exist.',\n });\n }\n\n server.buildSuccess(event.bundleGraph, event.requestBundle);\n }\n break;\n case 'buildFailure':\n // On buildFailure watchStart sometimes has not been called yet\n // do not throw an additional warning here\n if (server) {\n await server.buildError(options, event.diagnostics);\n }\n if (hmrServer) {\n await hmrServer.emitError(options, event.diagnostics);\n }\n break;\n }\n },\n}): Reporter);\n","// @flow\n\nimport type {\n Asset,\n BundleGraph,\n Dependency,\n NamedBundle,\n PackagedBundle,\n PluginOptions,\n} from '@parcel/types';\nimport type {Diagnostic} from '@parcel/diagnostic';\nimport type {AnsiDiagnosticResult} from '@parcel/utils';\nimport type {\n ServerError,\n HMRServerOptions,\n Request,\n Response,\n} from './types.js.flow';\nimport {setHeaders, SOURCES_ENDPOINT} from './Server';\n\nimport nullthrows from 'nullthrows';\nimport url from 'url';\nimport mime from 'mime-types';\nimport WebSocket from 'ws';\nimport invariant from 'assert';\nimport {\n ansiHtml,\n createHTTPServer,\n prettyDiagnostic,\n PromiseQueue,\n} from '@parcel/utils';\n\nexport type HMRAsset = {|\n id: string,\n url: string,\n type: string,\n output: string,\n envHash: string,\n outputFormat: string,\n depsByBundle: {[string]: {[string]: string, ...}, ...},\n|};\n\nexport type HMRMessage =\n | {|\n type: 'update',\n assets: Array,\n |}\n | {|\n type: 'error',\n diagnostics: {|\n ansi: Array,\n html: Array<$Rest>,\n |},\n |};\n\nconst FS_CONCURRENCY = 64;\nconst HMR_ENDPOINT = '/__parcel_hmr';\n\nexport default class HMRServer {\n wss: WebSocket.Server;\n unresolvedError: HMRMessage | null = null;\n options: HMRServerOptions;\n bundleGraph: BundleGraph | BundleGraph | null =\n null;\n stopServer: ?() => Promise;\n\n constructor(options: HMRServerOptions) {\n this.options = options;\n }\n\n async start() {\n let server = this.options.devServer;\n if (!server) {\n let result = await createHTTPServer({\n listener: (req, res) => {\n setHeaders(res);\n if (!this.handle(req, res)) {\n res.statusCode = 404;\n res.end();\n }\n },\n });\n server = result.server;\n server.listen(this.options.port, this.options.host);\n this.stopServer = result.stop;\n } else {\n this.options.addMiddleware?.((req, res) => this.handle(req, res));\n }\n this.wss = new WebSocket.Server({server});\n\n this.wss.on('connection', ws => {\n if (this.unresolvedError) {\n ws.send(JSON.stringify(this.unresolvedError));\n }\n });\n\n // $FlowFixMe[incompatible-exact]\n this.wss.on('error', err => this.handleSocketError(err));\n }\n\n handle(req: Request, res: Response): boolean {\n let {pathname} = url.parse(req.originalUrl || req.url);\n if (pathname != null && pathname.startsWith(HMR_ENDPOINT)) {\n let id = pathname.slice(HMR_ENDPOINT.length + 1);\n let bundleGraph = nullthrows(this.bundleGraph);\n let asset = bundleGraph.getAssetById(id);\n this.getHotAssetContents(asset).then(output => {\n res.setHeader('Content-Type', mime.contentType(asset.type));\n res.end(output);\n });\n return true;\n }\n return false;\n }\n\n async stop() {\n if (this.stopServer != null) {\n await this.stopServer();\n this.stopServer = null;\n }\n this.wss.close();\n }\n\n async emitError(options: PluginOptions, diagnostics: Array) {\n let renderedDiagnostics = await Promise.all(\n diagnostics.map(d => prettyDiagnostic(d, options)),\n );\n\n // store the most recent error so we can notify new connections\n // and so we can broadcast when the error is resolved\n this.unresolvedError = {\n type: 'error',\n diagnostics: {\n ansi: renderedDiagnostics,\n html: renderedDiagnostics.map((d, i) => {\n return {\n message: ansiHtml(d.message),\n stack: ansiHtml(d.stack),\n frames: d.frames.map(f => ({\n location: f.location,\n code: ansiHtml(f.code),\n })),\n hints: d.hints.map(hint => ansiHtml(hint)),\n documentation: diagnostics[i].documentationURL ?? '',\n };\n }),\n },\n };\n\n this.broadcast(this.unresolvedError);\n }\n\n async emitUpdate(event: {\n +bundleGraph: BundleGraph | BundleGraph,\n +changedAssets: Map,\n ...\n }) {\n this.unresolvedError = null;\n this.bundleGraph = event.bundleGraph;\n\n let changedAssets = new Set(event.changedAssets.values());\n if (changedAssets.size === 0) return;\n\n let queue = new PromiseQueue({maxConcurrent: FS_CONCURRENCY});\n for (let asset of changedAssets) {\n if (asset.type !== 'js' && asset.type !== 'css') {\n // If all of the incoming dependencies of the asset actually resolve to a JS asset\n // rather than the original, we can mark the runtimes as changed instead. URL runtimes\n // have a cache busting query param added with HMR enabled which will trigger a reload.\n let runtimes = new Set();\n let incomingDeps = event.bundleGraph.getIncomingDependencies(asset);\n let isOnlyReferencedByRuntimes = incomingDeps.every(dep => {\n let resolved = event.bundleGraph.getResolvedAsset(dep);\n let isRuntime = resolved?.type === 'js' && resolved !== asset;\n if (resolved && isRuntime) {\n runtimes.add(resolved);\n }\n return isRuntime;\n });\n\n if (isOnlyReferencedByRuntimes) {\n for (let runtime of runtimes) {\n changedAssets.add(runtime);\n }\n\n continue;\n }\n }\n\n queue.add(async () => {\n let dependencies = event.bundleGraph.getDependencies(asset);\n let depsByBundle = {};\n for (let bundle of event.bundleGraph.getBundlesWithAsset(asset)) {\n let deps = {};\n for (let dep of dependencies) {\n let resolved = event.bundleGraph.getResolvedAsset(dep, bundle);\n if (resolved) {\n deps[getSpecifier(dep)] =\n event.bundleGraph.getAssetPublicId(resolved);\n }\n }\n depsByBundle[bundle.id] = deps;\n }\n\n return {\n id: event.bundleGraph.getAssetPublicId(asset),\n url: this.getSourceURL(asset),\n type: asset.type,\n // No need to send the contents of non-JS assets to the client.\n output:\n asset.type === 'js' ? await this.getHotAssetContents(asset) : '',\n envHash: asset.env.id,\n outputFormat: asset.env.outputFormat,\n depsByBundle,\n };\n });\n }\n\n let assets = await queue.run();\n this.broadcast({\n type: 'update',\n assets: assets,\n });\n }\n\n async getHotAssetContents(asset: Asset): Promise {\n let output = await asset.getCode();\n let bundleGraph = nullthrows(this.bundleGraph);\n if (asset.type === 'js') {\n let publicId = bundleGraph.getAssetPublicId(asset);\n output = `parcelHotUpdate['${publicId}'] = function (require, module, exports) {${output}}`;\n }\n\n let sourcemap = await asset.getMap();\n if (sourcemap) {\n let sourcemapStringified = await sourcemap.stringify({\n format: 'inline',\n sourceRoot: SOURCES_ENDPOINT + '/',\n // $FlowFixMe\n fs: asset.fs,\n });\n\n invariant(typeof sourcemapStringified === 'string');\n output += `\\n//# sourceMappingURL=${sourcemapStringified}`;\n output += `\\n//# sourceURL=${encodeURI(this.getSourceURL(asset))}\\n`;\n }\n\n return output;\n }\n\n getSourceURL(asset: Asset): string {\n let origin = '';\n if (!this.options.devServer) {\n origin = `http://${this.options.host || 'localhost'}:${\n this.options.port\n }`;\n }\n return origin + HMR_ENDPOINT + '/' + asset.id;\n }\n\n handleSocketError(err: ServerError) {\n if (err.code === 'ECONNRESET') {\n // This gets triggered on page refresh, ignore this\n return;\n }\n\n this.options.logger.warn({\n origin: '@parcel/reporter-dev-server',\n message: `[${err.code}]: ${err.message}`,\n stack: err.stack,\n });\n }\n\n broadcast(msg: HMRMessage) {\n const json = JSON.stringify(msg);\n for (let ws of this.wss.clients) {\n ws.send(json);\n }\n }\n}\n\nfunction getSpecifier(dep: Dependency): string {\n if (typeof dep.meta.placeholder === 'string') {\n return dep.meta.placeholder;\n }\n\n return dep.specifier;\n}\n","// @flow\n\nimport type {DevServerOptions, Request, Response} from './types.js.flow';\nimport type {\n BuildSuccessEvent,\n BundleGraph,\n FilePath,\n PluginOptions,\n PackagedBundle,\n} from '@parcel/types';\nimport type {Diagnostic} from '@parcel/diagnostic';\nimport type {FileSystem} from '@parcel/fs';\nimport type {HTTPServer, FormattedCodeFrame} from '@parcel/utils';\n\nimport invariant from 'assert';\nimport path from 'path';\nimport url from 'url';\nimport {\n ansiHtml,\n createHTTPServer,\n loadConfig,\n prettyDiagnostic,\n relativePath,\n} from '@parcel/utils';\nimport serverErrors from './serverErrors';\nimport fs from 'fs';\nimport ejs from 'ejs';\nimport connect from 'connect';\nimport serveHandler from 'serve-handler';\nimport {createProxyMiddleware} from 'http-proxy-middleware';\nimport {URL, URLSearchParams} from 'url';\nimport launchEditor from 'launch-editor';\nimport fresh from 'fresh';\n\nexport function setHeaders(res: Response) {\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader(\n 'Access-Control-Allow-Methods',\n 'GET, HEAD, PUT, PATCH, POST, DELETE',\n );\n res.setHeader(\n 'Access-Control-Allow-Headers',\n 'Origin, X-Requested-With, Content-Type, Accept, Content-Type',\n );\n res.setHeader('Cache-Control', 'max-age=0, must-revalidate');\n}\n\nexport const SOURCES_ENDPOINT = '/__parcel_source_root';\nconst EDITOR_ENDPOINT = '/__parcel_launch_editor';\nconst TEMPLATE_404 = fs.readFileSync(\n path.join(__dirname, 'templates/404.html'),\n 'utf8',\n);\n\nconst TEMPLATE_500 = fs.readFileSync(\n path.join(__dirname, 'templates/500.html'),\n 'utf8',\n);\ntype NextFunction = (req: Request, res: Response, next?: (any) => any) => any;\n\nexport default class Server {\n pending: boolean;\n pendingRequests: Array<[Request, Response]>;\n middleware: Array<(req: Request, res: Response) => boolean>;\n options: DevServerOptions;\n rootPath: string;\n bundleGraph: BundleGraph | null;\n requestBundle: ?(bundle: PackagedBundle) => Promise;\n errors: Array<{|\n message: string,\n stack: ?string,\n frames: Array,\n hints: Array,\n documentation: string,\n |}> | null;\n stopServer: ?() => Promise;\n\n constructor(options: DevServerOptions) {\n this.options = options;\n try {\n this.rootPath = new URL(options.publicUrl).pathname;\n } catch (e) {\n this.rootPath = options.publicUrl;\n }\n this.pending = true;\n this.pendingRequests = [];\n this.middleware = [];\n this.bundleGraph = null;\n this.requestBundle = null;\n this.errors = null;\n }\n\n buildStart() {\n this.pending = true;\n }\n\n buildSuccess(\n bundleGraph: BundleGraph,\n requestBundle: (bundle: PackagedBundle) => Promise,\n ) {\n this.bundleGraph = bundleGraph;\n this.requestBundle = requestBundle;\n this.errors = null;\n this.pending = false;\n\n if (this.pendingRequests.length > 0) {\n let pendingRequests = this.pendingRequests;\n this.pendingRequests = [];\n for (let [req, res] of pendingRequests) {\n this.respond(req, res);\n }\n }\n }\n\n async buildError(options: PluginOptions, diagnostics: Array) {\n this.pending = false;\n this.errors = await Promise.all(\n diagnostics.map(async d => {\n let ansiDiagnostic = await prettyDiagnostic(d, options);\n\n return {\n message: ansiHtml(ansiDiagnostic.message),\n stack: ansiDiagnostic.stack ? ansiHtml(ansiDiagnostic.stack) : null,\n frames: ansiDiagnostic.frames.map(f => ({\n location: f.location,\n code: ansiHtml(f.code),\n })),\n hints: ansiDiagnostic.hints.map(hint => ansiHtml(hint)),\n documentation: d.documentationURL ?? '',\n };\n }),\n );\n }\n\n respond(req: Request, res: Response): mixed {\n if (this.middleware.some(handler => handler(req, res))) return;\n let {pathname, search} = url.parse(req.originalUrl || req.url);\n if (pathname == null) {\n pathname = '/';\n }\n\n if (pathname.startsWith(EDITOR_ENDPOINT) && search) {\n let query = new URLSearchParams(search);\n let file = query.get('file');\n if (file) {\n // File location might start with /__parcel_source_root if it came from a source map.\n if (file.startsWith(SOURCES_ENDPOINT)) {\n file = file.slice(SOURCES_ENDPOINT.length + 1);\n }\n launchEditor(file);\n }\n res.end();\n } else if (this.errors) {\n return this.send500(req, res);\n } else if (path.extname(pathname) === '') {\n // If the URL doesn't start with the public path, or the URL doesn't\n // have a file extension, send the main HTML bundle.\n return this.sendIndex(req, res);\n } else if (pathname.startsWith(SOURCES_ENDPOINT)) {\n req.url = pathname.slice(SOURCES_ENDPOINT.length);\n return this.serve(\n this.options.inputFS,\n this.options.projectRoot,\n req,\n res,\n () => this.send404(req, res),\n );\n } else if (pathname.startsWith(this.rootPath)) {\n // Otherwise, serve the file from the dist folder\n req.url =\n this.rootPath === '/' ? pathname : pathname.slice(this.rootPath.length);\n if (req.url[0] !== '/') {\n req.url = '/' + req.url;\n }\n return this.serveBundle(req, res, () => this.sendIndex(req, res));\n } else {\n return this.send404(req, res);\n }\n }\n\n sendIndex(req: Request, res: Response) {\n if (this.bundleGraph) {\n // If the main asset is an HTML file, serve it\n let htmlBundleFilePaths = this.bundleGraph\n .getBundles()\n .filter(bundle => bundle.type === 'html')\n .map(bundle => {\n return `/${relativePath(\n this.options.distDir,\n bundle.filePath,\n false,\n )}`;\n });\n\n let indexFilePath = null;\n if (htmlBundleFilePaths.length === 1) {\n indexFilePath = htmlBundleFilePaths[0];\n } else {\n indexFilePath = htmlBundleFilePaths\n .filter(v => {\n let dir = path.posix.dirname(v);\n let withoutExtension = path.posix.basename(\n v,\n path.posix.extname(v),\n );\n return withoutExtension === 'index' && req.url.startsWith(dir);\n })\n .sort((a, b) => {\n return b.length - a.length;\n })[0];\n }\n\n if (indexFilePath) {\n req.url = indexFilePath;\n this.serveBundle(req, res, () => this.send404(req, res));\n } else {\n this.send404(req, res);\n }\n } else {\n this.send404(req, res);\n }\n }\n\n async serveBundle(\n req: Request,\n res: Response,\n next: NextFunction,\n ): Promise {\n let bundleGraph = this.bundleGraph;\n if (bundleGraph) {\n let {pathname} = url.parse(req.url);\n if (!pathname) {\n this.send500(req, res);\n return;\n }\n\n let requestedPath = path.normalize(pathname.slice(1));\n let bundle = bundleGraph\n .getBundles()\n .find(\n b =>\n path.relative(this.options.distDir, b.filePath) === requestedPath,\n );\n if (!bundle) {\n this.serveDist(req, res, next);\n return;\n }\n\n invariant(this.requestBundle != null);\n try {\n await this.requestBundle(bundle);\n } catch (err) {\n this.send500(req, res);\n return;\n }\n\n this.serveDist(req, res, next);\n } else {\n this.send404(req, res);\n }\n }\n\n serveDist(\n req: Request,\n res: Response,\n next: NextFunction,\n ): Promise | Promise {\n return this.serve(\n this.options.outputFS,\n this.options.distDir,\n req,\n res,\n next,\n );\n }\n\n async serve(\n fs: FileSystem,\n root: FilePath,\n req: Request,\n res: Response,\n next: NextFunction,\n ): Promise {\n if (req.method !== 'GET' && req.method !== 'HEAD') {\n // method not allowed\n res.statusCode = 405;\n res.setHeader('Allow', 'GET, HEAD');\n res.setHeader('Content-Length', '0');\n res.end();\n return;\n }\n\n try {\n var filePath = url.parse(req.url).pathname || '';\n filePath = decodeURIComponent(filePath);\n } catch (err) {\n return this.sendError(res, 400);\n }\n\n filePath = path.normalize('.' + path.sep + filePath);\n\n // malicious path\n if (filePath.includes(path.sep + '..' + path.sep)) {\n return this.sendError(res, 403);\n }\n\n // join / normalize from the root dir\n if (!path.isAbsolute(filePath)) {\n filePath = path.normalize(path.join(root, filePath));\n }\n\n try {\n var stat = await fs.stat(filePath);\n } catch (err) {\n if (err.code === 'ENOENT') {\n return next(req, res);\n }\n\n return this.sendError(res, 500);\n }\n\n // Fall back to next handler if not a file\n if (!stat || !stat.isFile()) {\n return next(req, res);\n }\n\n if (fresh(req.headers, {'last-modified': stat.mtime.toUTCString()})) {\n res.statusCode = 304;\n res.end();\n return;\n }\n\n return serveHandler(\n req,\n res,\n {\n public: root,\n cleanUrls: false,\n },\n {\n lstat: path => fs.stat(path),\n realpath: path => fs.realpath(path),\n createReadStream: (path, options) => fs.createReadStream(path, options),\n readdir: path => fs.readdir(path),\n },\n );\n }\n\n sendError(res: Response, statusCode: number) {\n res.statusCode = statusCode;\n res.end();\n }\n\n send404(req: Request, res: Response) {\n res.statusCode = 404;\n res.end(TEMPLATE_404);\n }\n\n send500(req: Request, res: Response): void | Response {\n res.setHeader('Content-Type', 'text/html; charset=utf-8');\n res.writeHead(500);\n\n if (this.errors) {\n return res.end(\n ejs.render(TEMPLATE_500, {\n errors: this.errors,\n hmrOptions: this.options.hmrOptions,\n }),\n );\n }\n }\n\n logAccessIfVerbose(req: Request) {\n this.options.logger.verbose({\n message: `Request: ${req.headers.host}${req.originalUrl || req.url}`,\n });\n }\n\n /**\n * Load proxy table from package.json and apply them.\n */\n async applyProxyTable(app: any): Promise {\n // avoid skipping project root\n const fileInRoot: string = path.join(this.options.projectRoot, '_');\n\n const pkg = await loadConfig(\n this.options.inputFS,\n fileInRoot,\n ['.proxyrc.js', '.proxyrc', '.proxyrc.json'],\n this.options.projectRoot,\n );\n\n if (!pkg || !pkg.config || !pkg.files) {\n return this;\n }\n\n const cfg = pkg.config;\n const filename = path.basename(pkg.files[0].filePath);\n\n if (filename === '.proxyrc.js') {\n if (typeof cfg !== 'function') {\n this.options.logger.warn({\n message:\n \"Proxy configuration file '.proxyrc.js' should export a function. Skipping...\",\n });\n return this;\n }\n cfg(app);\n } else if (filename === '.proxyrc' || filename === '.proxyrc.json') {\n if (typeof cfg !== 'object') {\n this.options.logger.warn({\n message:\n \"Proxy table in '.proxyrc' should be of object type. Skipping...\",\n });\n return this;\n }\n for (const [context, options] of Object.entries(cfg)) {\n // each key is interpreted as context, and value as middleware options\n app.use(createProxyMiddleware(context, options));\n }\n }\n\n return this;\n }\n\n async start(): Promise {\n const finalHandler = (req: Request, res: Response) => {\n this.logAccessIfVerbose(req);\n\n // Wait for the parcelInstance to finish bundling if needed\n if (this.pending) {\n this.pendingRequests.push([req, res]);\n } else {\n this.respond(req, res);\n }\n };\n\n const app = connect();\n app.use((req, res, next) => {\n setHeaders(res);\n next();\n });\n await this.applyProxyTable(app);\n app.use(finalHandler);\n\n let {server, stop} = await createHTTPServer({\n cacheDir: this.options.cacheDir,\n https: this.options.https,\n inputFS: this.options.inputFS,\n listener: app,\n outputFS: this.options.outputFS,\n host: this.options.host,\n });\n this.stopServer = stop;\n\n server.listen(this.options.port, this.options.host);\n return new Promise((resolve, reject) => {\n server.once('error', err => {\n this.options.logger.error(\n ({\n message: serverErrors(err, this.options.port),\n }: Diagnostic),\n );\n reject(err);\n });\n\n server.once('listening', () => {\n resolve(server);\n });\n });\n }\n\n async stop(): Promise {\n invariant(this.stopServer != null);\n await this.stopServer();\n this.stopServer = null;\n }\n}\n","// @flow\nexport type ServerError = Error & {|\n code: string,\n|};\n\nconst serverErrorList = {\n EACCES: \"You don't have access to bind the server to port {port}.\",\n EADDRINUSE: 'There is already a process listening on port {port}.',\n};\n\nexport default function serverErrors(err: ServerError, port: number): string {\n let desc = `Error: ${\n err.code\n } occurred while setting up server on port ${port.toString()}.`;\n\n if (serverErrorList[err.code]) {\n desc = serverErrorList[err.code].replace(/{port}/g, port);\n }\n\n return desc;\n}\n","/*\n * EJS Embedded JavaScript templates\n * Copyright 2112 Matthew Eernisse (mde@fleegix.org)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n*/\n\n'use strict';\n\n/**\n * @file Embedded JavaScript templating engine. {@link http://ejs.co}\n * @author Matthew Eernisse \n * @author Tiancheng \"Timothy\" Gu \n * @project EJS\n * @license {@link http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0}\n */\n\n/**\n * EJS internal functions.\n *\n * Technically this \"module\" lies in the same file as {@link module:ejs}, for\n * the sake of organization all the private functions re grouped into this\n * module.\n *\n * @module ejs-internal\n * @private\n */\n\n/**\n * Embedded JavaScript templating engine.\n *\n * @module ejs\n * @public\n */\n\nvar fs = require('fs');\nvar path = require('path');\nvar utils = require('./utils');\n\nvar scopeOptionWarned = false;\n/** @type {string} */\nvar _VERSION_STRING = require('../package.json').version;\nvar _DEFAULT_OPEN_DELIMITER = '<';\nvar _DEFAULT_CLOSE_DELIMITER = '>';\nvar _DEFAULT_DELIMITER = '%';\nvar _DEFAULT_LOCALS_NAME = 'locals';\nvar _NAME = 'ejs';\nvar _REGEX_STRING = '(<%%|%%>|<%=|<%-|<%_|<%#|<%|%>|-%>|_%>)';\nvar _OPTS_PASSABLE_WITH_DATA = ['delimiter', 'scope', 'context', 'debug', 'compileDebug',\n 'client', '_with', 'rmWhitespace', 'strict', 'filename', 'async'];\n// We don't allow 'cache' option to be passed in the data obj for\n// the normal `render` call, but this is where Express 2 & 3 put it\n// so we make an exception for `renderFile`\nvar _OPTS_PASSABLE_WITH_DATA_EXPRESS = _OPTS_PASSABLE_WITH_DATA.concat('cache');\nvar _BOM = /^\\uFEFF/;\n\n/**\n * EJS template function cache. This can be a LRU object from lru-cache NPM\n * module. By default, it is {@link module:utils.cache}, a simple in-process\n * cache that grows continuously.\n *\n * @type {Cache}\n */\n\nexports.cache = utils.cache;\n\n/**\n * Custom file loader. Useful for template preprocessing or restricting access\n * to a certain part of the filesystem.\n *\n * @type {fileLoader}\n */\n\nexports.fileLoader = fs.readFileSync;\n\n/**\n * Name of the object containing the locals.\n *\n * This variable is overridden by {@link Options}`.localsName` if it is not\n * `undefined`.\n *\n * @type {String}\n * @public\n */\n\nexports.localsName = _DEFAULT_LOCALS_NAME;\n\n/**\n * Promise implementation -- defaults to the native implementation if available\n * This is mostly just for testability\n *\n * @type {PromiseConstructorLike}\n * @public\n */\n\nexports.promiseImpl = (new Function('return this;'))().Promise;\n\n/**\n * Get the path to the included file from the parent file path and the\n * specified path.\n *\n * @param {String} name specified path\n * @param {String} filename parent file path\n * @param {Boolean} [isDir=false] whether the parent file path is a directory\n * @return {String}\n */\nexports.resolveInclude = function(name, filename, isDir) {\n var dirname = path.dirname;\n var extname = path.extname;\n var resolve = path.resolve;\n var includePath = resolve(isDir ? filename : dirname(filename), name);\n var ext = extname(name);\n if (!ext) {\n includePath += '.ejs';\n }\n return includePath;\n};\n\n/**\n * Try to resolve file path on multiple directories\n *\n * @param {String} name specified path\n * @param {Array} paths list of possible parent directory paths\n * @return {String}\n */\nfunction resolvePaths(name, paths) {\n var filePath;\n if (paths.some(function (v) {\n filePath = exports.resolveInclude(name, v, true);\n return fs.existsSync(filePath);\n })) {\n return filePath;\n }\n}\n\n/**\n * Get the path to the included file by Options\n *\n * @param {String} path specified path\n * @param {Options} options compilation options\n * @return {String}\n */\nfunction getIncludePath(path, options) {\n var includePath;\n var filePath;\n var views = options.views;\n var match = /^[A-Za-z]+:\\\\|^\\//.exec(path);\n\n // Abs path\n if (match && match.length) {\n path = path.replace(/^\\/*/, '');\n if (Array.isArray(options.root)) {\n includePath = resolvePaths(path, options.root);\n } else {\n includePath = exports.resolveInclude(path, options.root || '/', true);\n }\n }\n // Relative paths\n else {\n // Look relative to a passed filename first\n if (options.filename) {\n filePath = exports.resolveInclude(path, options.filename);\n if (fs.existsSync(filePath)) {\n includePath = filePath;\n }\n }\n // Then look in any views directories\n if (!includePath && Array.isArray(views)) {\n includePath = resolvePaths(path, views);\n }\n if (!includePath && typeof options.includer !== 'function') {\n throw new Error('Could not find the include file \"' +\n options.escapeFunction(path) + '\"');\n }\n }\n return includePath;\n}\n\n/**\n * Get the template from a string or a file, either compiled on-the-fly or\n * read from cache (if enabled), and cache the template if needed.\n *\n * If `template` is not set, the file specified in `options.filename` will be\n * read.\n *\n * If `options.cache` is true, this function reads the file from\n * `options.filename` so it must be set prior to calling this function.\n *\n * @memberof module:ejs-internal\n * @param {Options} options compilation options\n * @param {String} [template] template source\n * @return {(TemplateFunction|ClientFunction)}\n * Depending on the value of `options.client`, either type might be returned.\n * @static\n */\n\nfunction handleCache(options, template) {\n var func;\n var filename = options.filename;\n var hasTemplate = arguments.length > 1;\n\n if (options.cache) {\n if (!filename) {\n throw new Error('cache option requires a filename');\n }\n func = exports.cache.get(filename);\n if (func) {\n return func;\n }\n if (!hasTemplate) {\n template = fileLoader(filename).toString().replace(_BOM, '');\n }\n }\n else if (!hasTemplate) {\n // istanbul ignore if: should not happen at all\n if (!filename) {\n throw new Error('Internal EJS error: no file name or template '\n + 'provided');\n }\n template = fileLoader(filename).toString().replace(_BOM, '');\n }\n func = exports.compile(template, options);\n if (options.cache) {\n exports.cache.set(filename, func);\n }\n return func;\n}\n\n/**\n * Try calling handleCache with the given options and data and call the\n * callback with the result. If an error occurs, call the callback with\n * the error. Used by renderFile().\n *\n * @memberof module:ejs-internal\n * @param {Options} options compilation options\n * @param {Object} data template data\n * @param {RenderFileCallback} cb callback\n * @static\n */\n\nfunction tryHandleCache(options, data, cb) {\n var result;\n if (!cb) {\n if (typeof exports.promiseImpl == 'function') {\n return new exports.promiseImpl(function (resolve, reject) {\n try {\n result = handleCache(options)(data);\n resolve(result);\n }\n catch (err) {\n reject(err);\n }\n });\n }\n else {\n throw new Error('Please provide a callback function');\n }\n }\n else {\n try {\n result = handleCache(options)(data);\n }\n catch (err) {\n return cb(err);\n }\n\n cb(null, result);\n }\n}\n\n/**\n * fileLoader is independent\n *\n * @param {String} filePath ejs file path.\n * @return {String} The contents of the specified file.\n * @static\n */\n\nfunction fileLoader(filePath){\n return exports.fileLoader(filePath);\n}\n\n/**\n * Get the template function.\n *\n * If `options.cache` is `true`, then the template is cached.\n *\n * @memberof module:ejs-internal\n * @param {String} path path for the specified file\n * @param {Options} options compilation options\n * @return {(TemplateFunction|ClientFunction)}\n * Depending on the value of `options.client`, either type might be returned\n * @static\n */\n\nfunction includeFile(path, options) {\n var opts = utils.shallowCopy({}, options);\n opts.filename = getIncludePath(path, opts);\n if (typeof options.includer === 'function') {\n var includerResult = options.includer(path, opts.filename);\n if (includerResult) {\n if (includerResult.filename) {\n opts.filename = includerResult.filename;\n }\n if (includerResult.template) {\n return handleCache(opts, includerResult.template);\n }\n }\n }\n return handleCache(opts);\n}\n\n/**\n * Re-throw the given `err` in context to the `str` of ejs, `filename`, and\n * `lineno`.\n *\n * @implements {RethrowCallback}\n * @memberof module:ejs-internal\n * @param {Error} err Error object\n * @param {String} str EJS source\n * @param {String} flnm file name of the EJS file\n * @param {Number} lineno line number of the error\n * @param {EscapeCallback} esc\n * @static\n */\n\nfunction rethrow(err, str, flnm, lineno, esc) {\n var lines = str.split('\\n');\n var start = Math.max(lineno - 3, 0);\n var end = Math.min(lines.length, lineno + 3);\n var filename = esc(flnm);\n // Error context\n var context = lines.slice(start, end).map(function (line, i){\n var curr = i + start + 1;\n return (curr == lineno ? ' >> ' : ' ')\n + curr\n + '| '\n + line;\n }).join('\\n');\n\n // Alter exception message\n err.path = filename;\n err.message = (filename || 'ejs') + ':'\n + lineno + '\\n'\n + context + '\\n\\n'\n + err.message;\n\n throw err;\n}\n\nfunction stripSemi(str){\n return str.replace(/;(\\s*$)/, '$1');\n}\n\n/**\n * Compile the given `str` of ejs into a template function.\n *\n * @param {String} template EJS template\n *\n * @param {Options} [opts] compilation options\n *\n * @return {(TemplateFunction|ClientFunction)}\n * Depending on the value of `opts.client`, either type might be returned.\n * Note that the return type of the function also depends on the value of `opts.async`.\n * @public\n */\n\nexports.compile = function compile(template, opts) {\n var templ;\n\n // v1 compat\n // 'scope' is 'context'\n // FIXME: Remove this in a future version\n if (opts && opts.scope) {\n if (!scopeOptionWarned){\n console.warn('`scope` option is deprecated and will be removed in EJS 3');\n scopeOptionWarned = true;\n }\n if (!opts.context) {\n opts.context = opts.scope;\n }\n delete opts.scope;\n }\n templ = new Template(template, opts);\n return templ.compile();\n};\n\n/**\n * Render the given `template` of ejs.\n *\n * If you would like to include options but not data, you need to explicitly\n * call this function with `data` being an empty object or `null`.\n *\n * @param {String} template EJS template\n * @param {Object} [data={}] template data\n * @param {Options} [opts={}] compilation and rendering options\n * @return {(String|Promise)}\n * Return value type depends on `opts.async`.\n * @public\n */\n\nexports.render = function (template, d, o) {\n var data = d || {};\n var opts = o || {};\n\n // No options object -- if there are optiony names\n // in the data, copy them to options\n if (arguments.length == 2) {\n utils.shallowCopyFromList(opts, data, _OPTS_PASSABLE_WITH_DATA);\n }\n\n return handleCache(opts, template)(data);\n};\n\n/**\n * Render an EJS file at the given `path` and callback `cb(err, str)`.\n *\n * If you would like to include options but not data, you need to explicitly\n * call this function with `data` being an empty object or `null`.\n *\n * @param {String} path path to the EJS file\n * @param {Object} [data={}] template data\n * @param {Options} [opts={}] compilation and rendering options\n * @param {RenderFileCallback} cb callback\n * @public\n */\n\nexports.renderFile = function () {\n var args = Array.prototype.slice.call(arguments);\n var filename = args.shift();\n var cb;\n var opts = {filename: filename};\n var data;\n var viewOpts;\n\n // Do we have a callback?\n if (typeof arguments[arguments.length - 1] == 'function') {\n cb = args.pop();\n }\n // Do we have data/opts?\n if (args.length) {\n // Should always have data obj\n data = args.shift();\n // Normal passed opts (data obj + opts obj)\n if (args.length) {\n // Use shallowCopy so we don't pollute passed in opts obj with new vals\n utils.shallowCopy(opts, args.pop());\n }\n // Special casing for Express (settings + opts-in-data)\n else {\n // Express 3 and 4\n if (data.settings) {\n // Pull a few things from known locations\n if (data.settings.views) {\n opts.views = data.settings.views;\n }\n if (data.settings['view cache']) {\n opts.cache = true;\n }\n // Undocumented after Express 2, but still usable, esp. for\n // items that are unsafe to be passed along with data, like `root`\n viewOpts = data.settings['view options'];\n if (viewOpts) {\n utils.shallowCopy(opts, viewOpts);\n }\n }\n // Express 2 and lower, values set in app.locals, or people who just\n // want to pass options in their data. NOTE: These values will override\n // anything previously set in settings or settings['view options']\n utils.shallowCopyFromList(opts, data, _OPTS_PASSABLE_WITH_DATA_EXPRESS);\n }\n opts.filename = filename;\n }\n else {\n data = {};\n }\n\n return tryHandleCache(opts, data, cb);\n};\n\n/**\n * Clear intermediate JavaScript cache. Calls {@link Cache#reset}.\n * @public\n */\n\n/**\n * EJS template class\n * @public\n */\nexports.Template = Template;\n\nexports.clearCache = function () {\n exports.cache.reset();\n};\n\nfunction Template(text, opts) {\n opts = opts || {};\n var options = {};\n this.templateText = text;\n /** @type {string | null} */\n this.mode = null;\n this.truncate = false;\n this.currentLine = 1;\n this.source = '';\n options.client = opts.client || false;\n options.escapeFunction = opts.escape || opts.escapeFunction || utils.escapeXML;\n options.compileDebug = opts.compileDebug !== false;\n options.debug = !!opts.debug;\n options.filename = opts.filename;\n options.openDelimiter = opts.openDelimiter || exports.openDelimiter || _DEFAULT_OPEN_DELIMITER;\n options.closeDelimiter = opts.closeDelimiter || exports.closeDelimiter || _DEFAULT_CLOSE_DELIMITER;\n options.delimiter = opts.delimiter || exports.delimiter || _DEFAULT_DELIMITER;\n options.strict = opts.strict || false;\n options.context = opts.context;\n options.cache = opts.cache || false;\n options.rmWhitespace = opts.rmWhitespace;\n options.root = opts.root;\n options.includer = opts.includer;\n options.outputFunctionName = opts.outputFunctionName;\n options.localsName = opts.localsName || exports.localsName || _DEFAULT_LOCALS_NAME;\n options.views = opts.views;\n options.async = opts.async;\n options.destructuredLocals = opts.destructuredLocals;\n options.legacyInclude = typeof opts.legacyInclude != 'undefined' ? !!opts.legacyInclude : true;\n\n if (options.strict) {\n options._with = false;\n }\n else {\n options._with = typeof opts._with != 'undefined' ? opts._with : true;\n }\n\n this.opts = options;\n\n this.regex = this.createRegex();\n}\n\nTemplate.modes = {\n EVAL: 'eval',\n ESCAPED: 'escaped',\n RAW: 'raw',\n COMMENT: 'comment',\n LITERAL: 'literal'\n};\n\nTemplate.prototype = {\n createRegex: function () {\n var str = _REGEX_STRING;\n var delim = utils.escapeRegExpChars(this.opts.delimiter);\n var open = utils.escapeRegExpChars(this.opts.openDelimiter);\n var close = utils.escapeRegExpChars(this.opts.closeDelimiter);\n str = str.replace(/%/g, delim)\n .replace(//g, close);\n return new RegExp(str);\n },\n\n compile: function () {\n /** @type {string} */\n var src;\n /** @type {ClientFunction} */\n var fn;\n var opts = this.opts;\n var prepended = '';\n var appended = '';\n /** @type {EscapeCallback} */\n var escapeFn = opts.escapeFunction;\n /** @type {FunctionConstructor} */\n var ctor;\n /** @type {string} */\n var sanitizedFilename = opts.filename ? JSON.stringify(opts.filename) : 'undefined';\n\n if (!this.source) {\n this.generateSource();\n prepended +=\n ' var __output = \"\";\\n' +\n ' function __append(s) { if (s !== undefined && s !== null) __output += s }\\n';\n if (opts.outputFunctionName) {\n prepended += ' var ' + opts.outputFunctionName + ' = __append;' + '\\n';\n }\n if (opts.destructuredLocals && opts.destructuredLocals.length) {\n var destructuring = ' var __locals = (' + opts.localsName + ' || {}),\\n';\n for (var i = 0; i < opts.destructuredLocals.length; i++) {\n var name = opts.destructuredLocals[i];\n if (i > 0) {\n destructuring += ',\\n ';\n }\n destructuring += name + ' = __locals.' + name;\n }\n prepended += destructuring + ';\\n';\n }\n if (opts._with !== false) {\n prepended += ' with (' + opts.localsName + ' || {}) {' + '\\n';\n appended += ' }' + '\\n';\n }\n appended += ' return __output;' + '\\n';\n this.source = prepended + this.source + appended;\n }\n\n if (opts.compileDebug) {\n src = 'var __line = 1' + '\\n'\n + ' , __lines = ' + JSON.stringify(this.templateText) + '\\n'\n + ' , __filename = ' + sanitizedFilename + ';' + '\\n'\n + 'try {' + '\\n'\n + this.source\n + '} catch (e) {' + '\\n'\n + ' rethrow(e, __lines, __filename, __line, escapeFn);' + '\\n'\n + '}' + '\\n';\n }\n else {\n src = this.source;\n }\n\n if (opts.client) {\n src = 'escapeFn = escapeFn || ' + escapeFn.toString() + ';' + '\\n' + src;\n if (opts.compileDebug) {\n src = 'rethrow = rethrow || ' + rethrow.toString() + ';' + '\\n' + src;\n }\n }\n\n if (opts.strict) {\n src = '\"use strict\";\\n' + src;\n }\n if (opts.debug) {\n console.log(src);\n }\n if (opts.compileDebug && opts.filename) {\n src = src + '\\n'\n + '//# sourceURL=' + sanitizedFilename + '\\n';\n }\n\n try {\n if (opts.async) {\n // Have to use generated function for this, since in envs without support,\n // it breaks in parsing\n try {\n ctor = (new Function('return (async function(){}).constructor;'))();\n }\n catch(e) {\n if (e instanceof SyntaxError) {\n throw new Error('This environment does not support async/await');\n }\n else {\n throw e;\n }\n }\n }\n else {\n ctor = Function;\n }\n fn = new ctor(opts.localsName + ', escapeFn, include, rethrow', src);\n }\n catch(e) {\n // istanbul ignore else\n if (e instanceof SyntaxError) {\n if (opts.filename) {\n e.message += ' in ' + opts.filename;\n }\n e.message += ' while compiling ejs\\n\\n';\n e.message += 'If the above error is not helpful, you may want to try EJS-Lint:\\n';\n e.message += 'https://github.com/RyanZim/EJS-Lint';\n if (!opts.async) {\n e.message += '\\n';\n e.message += 'Or, if you meant to create an async function, pass `async: true` as an option.';\n }\n }\n throw e;\n }\n\n // Return a callable function which will execute the function\n // created by the source-code, with the passed data as locals\n // Adds a local `include` function which allows full recursive include\n var returnedFn = opts.client ? fn : function anonymous(data) {\n var include = function (path, includeData) {\n var d = utils.shallowCopy({}, data);\n if (includeData) {\n d = utils.shallowCopy(d, includeData);\n }\n return includeFile(path, opts)(d);\n };\n return fn.apply(opts.context, [data || {}, escapeFn, include, rethrow]);\n };\n if (opts.filename && typeof Object.defineProperty === 'function') {\n var filename = opts.filename;\n var basename = path.basename(filename, path.extname(filename));\n try {\n Object.defineProperty(returnedFn, 'name', {\n value: basename,\n writable: false,\n enumerable: false,\n configurable: true\n });\n } catch (e) {/* ignore */}\n }\n return returnedFn;\n },\n\n generateSource: function () {\n var opts = this.opts;\n\n if (opts.rmWhitespace) {\n // Have to use two separate replace here as `^` and `$` operators don't\n // work well with `\\r` and empty lines don't work well with the `m` flag.\n this.templateText =\n this.templateText.replace(/[\\r\\n]+/g, '\\n').replace(/^\\s+|\\s+$/gm, '');\n }\n\n // Slurp spaces and tabs before <%_ and after _%>\n this.templateText =\n this.templateText.replace(/[ \\t]*<%_/gm, '<%_').replace(/_%>[ \\t]*/gm, '_%>');\n\n var self = this;\n var matches = this.parseTemplateText();\n var d = this.opts.delimiter;\n var o = this.opts.openDelimiter;\n var c = this.opts.closeDelimiter;\n\n if (matches && matches.length) {\n matches.forEach(function (line, index) {\n var closing;\n // If this is an opening tag, check for closing tags\n // FIXME: May end up with some false positives here\n // Better to store modes as k/v with openDelimiter + delimiter as key\n // Then this can simply check against the map\n if ( line.indexOf(o + d) === 0 // If it is a tag\n && line.indexOf(o + d + d) !== 0) { // and is not escaped\n closing = matches[index + 2];\n if (!(closing == d + c || closing == '-' + d + c || closing == '_' + d + c)) {\n throw new Error('Could not find matching close tag for \"' + line + '\".');\n }\n }\n self.scanLine(line);\n });\n }\n\n },\n\n parseTemplateText: function () {\n var str = this.templateText;\n var pat = this.regex;\n var result = pat.exec(str);\n var arr = [];\n var firstPos;\n\n while (result) {\n firstPos = result.index;\n\n if (firstPos !== 0) {\n arr.push(str.substring(0, firstPos));\n str = str.slice(firstPos);\n }\n\n arr.push(result[0]);\n str = str.slice(result[0].length);\n result = pat.exec(str);\n }\n\n if (str) {\n arr.push(str);\n }\n\n return arr;\n },\n\n _addOutput: function (line) {\n if (this.truncate) {\n // Only replace single leading linebreak in the line after\n // -%> tag -- this is the single, trailing linebreak\n // after the tag that the truncation mode replaces\n // Handle Win / Unix / old Mac linebreaks -- do the \\r\\n\n // combo first in the regex-or\n line = line.replace(/^(?:\\r\\n|\\r|\\n)/, '');\n this.truncate = false;\n }\n if (!line) {\n return line;\n }\n\n // Preserve literal slashes\n line = line.replace(/\\\\/g, '\\\\\\\\');\n\n // Convert linebreaks\n line = line.replace(/\\n/g, '\\\\n');\n line = line.replace(/\\r/g, '\\\\r');\n\n // Escape double-quotes\n // - this will be the delimiter during execution\n line = line.replace(/\"/g, '\\\\\"');\n this.source += ' ; __append(\"' + line + '\")' + '\\n';\n },\n\n scanLine: function (line) {\n var self = this;\n var d = this.opts.delimiter;\n var o = this.opts.openDelimiter;\n var c = this.opts.closeDelimiter;\n var newLineCount = 0;\n\n newLineCount = (line.split('\\n').length - 1);\n\n switch (line) {\n case o + d:\n case o + d + '_':\n this.mode = Template.modes.EVAL;\n break;\n case o + d + '=':\n this.mode = Template.modes.ESCAPED;\n break;\n case o + d + '-':\n this.mode = Template.modes.RAW;\n break;\n case o + d + '#':\n this.mode = Template.modes.COMMENT;\n break;\n case o + d + d:\n this.mode = Template.modes.LITERAL;\n this.source += ' ; __append(\"' + line.replace(o + d + d, o + d) + '\")' + '\\n';\n break;\n case d + d + c:\n this.mode = Template.modes.LITERAL;\n this.source += ' ; __append(\"' + line.replace(d + d + c, d + c) + '\")' + '\\n';\n break;\n case d + c:\n case '-' + d + c:\n case '_' + d + c:\n if (this.mode == Template.modes.LITERAL) {\n this._addOutput(line);\n }\n\n this.mode = null;\n this.truncate = line.indexOf('-') === 0 || line.indexOf('_') === 0;\n break;\n default:\n // In script mode, depends on type of tag\n if (this.mode) {\n // If '//' is found without a line break, add a line break.\n switch (this.mode) {\n case Template.modes.EVAL:\n case Template.modes.ESCAPED:\n case Template.modes.RAW:\n if (line.lastIndexOf('//') > line.lastIndexOf('\\n')) {\n line += '\\n';\n }\n }\n switch (this.mode) {\n // Just executing code\n case Template.modes.EVAL:\n this.source += ' ; ' + line + '\\n';\n break;\n // Exec, esc, and output\n case Template.modes.ESCAPED:\n this.source += ' ; __append(escapeFn(' + stripSemi(line) + '))' + '\\n';\n break;\n // Exec and output\n case Template.modes.RAW:\n this.source += ' ; __append(' + stripSemi(line) + ')' + '\\n';\n break;\n case Template.modes.COMMENT:\n // Do nothing\n break;\n // Literal <%% mode, append as raw output\n case Template.modes.LITERAL:\n this._addOutput(line);\n break;\n }\n }\n // In string mode, just add the output\n else {\n this._addOutput(line);\n }\n }\n\n if (self.opts.compileDebug && newLineCount) {\n this.currentLine += newLineCount;\n this.source += ' ; __line = ' + this.currentLine + '\\n';\n }\n }\n};\n\n/**\n * Escape characters reserved in XML.\n *\n * This is simply an export of {@link module:utils.escapeXML}.\n *\n * If `markup` is `undefined` or `null`, the empty string is returned.\n *\n * @param {String} markup Input string\n * @return {String} Escaped string\n * @public\n * @func\n * */\nexports.escapeXML = utils.escapeXML;\n\n/**\n * Express.js support.\n *\n * This is an alias for {@link module:ejs.renderFile}, in order to support\n * Express.js out-of-the-box.\n *\n * @func\n */\n\nexports.__express = exports.renderFile;\n\n/**\n * Version of EJS.\n *\n * @readonly\n * @type {String}\n * @public\n */\n\nexports.VERSION = _VERSION_STRING;\n\n/**\n * Name for detection of EJS.\n *\n * @readonly\n * @type {String}\n * @public\n */\n\nexports.name = _NAME;\n\n/* istanbul ignore if */\nif (typeof window != 'undefined') {\n window.ejs = exports;\n}\n","/*\n * EJS Embedded JavaScript templates\n * Copyright 2112 Matthew Eernisse (mde@fleegix.org)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n*/\n\n/**\n * Private utility functions\n * @module utils\n * @private\n */\n\n'use strict';\n\nvar regExpChars = /[|\\\\{}()[\\]^$+*?.]/g;\n\n/**\n * Escape characters reserved in regular expressions.\n *\n * If `string` is `undefined` or `null`, the empty string is returned.\n *\n * @param {String} string Input string\n * @return {String} Escaped string\n * @static\n * @private\n */\nexports.escapeRegExpChars = function (string) {\n // istanbul ignore if\n if (!string) {\n return '';\n }\n return String(string).replace(regExpChars, '\\\\$&');\n};\n\nvar _ENCODE_HTML_RULES = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nvar _MATCH_HTML = /[&<>'\"]/g;\n\nfunction encode_char(c) {\n return _ENCODE_HTML_RULES[c] || c;\n}\n\n/**\n * Stringified version of constants used by {@link module:utils.escapeXML}.\n *\n * It is used in the process of generating {@link ClientFunction}s.\n *\n * @readonly\n * @type {String}\n */\n\nvar escapeFuncStr =\n 'var _ENCODE_HTML_RULES = {\\n'\n+ ' \"&\": \"&\"\\n'\n+ ' , \"<\": \"<\"\\n'\n+ ' , \">\": \">\"\\n'\n+ ' , \\'\"\\': \""\"\\n'\n+ ' , \"\\'\": \"'\"\\n'\n+ ' }\\n'\n+ ' , _MATCH_HTML = /[&<>\\'\"]/g;\\n'\n+ 'function encode_char(c) {\\n'\n+ ' return _ENCODE_HTML_RULES[c] || c;\\n'\n+ '};\\n';\n\n/**\n * Escape characters reserved in XML.\n *\n * If `markup` is `undefined` or `null`, the empty string is returned.\n *\n * @implements {EscapeCallback}\n * @param {String} markup Input string\n * @return {String} Escaped string\n * @static\n * @private\n */\n\nexports.escapeXML = function (markup) {\n return markup == undefined\n ? ''\n : String(markup)\n .replace(_MATCH_HTML, encode_char);\n};\nexports.escapeXML.toString = function () {\n return Function.prototype.toString.call(this) + ';\\n' + escapeFuncStr;\n};\n\n/**\n * Naive copy of properties from one object to another.\n * Does not recurse into non-scalar properties\n * Does not check to see if the property has a value before copying\n *\n * @param {Object} to Destination object\n * @param {Object} from Source object\n * @return {Object} Destination object\n * @static\n * @private\n */\nexports.shallowCopy = function (to, from) {\n from = from || {};\n for (var p in from) {\n to[p] = from[p];\n }\n return to;\n};\n\n/**\n * Naive copy of a list of key names, from one object to another.\n * Only copies property if it is actually defined\n * Does not recurse into non-scalar properties\n *\n * @param {Object} to Destination object\n * @param {Object} from Source object\n * @param {Array} list List of properties to copy\n * @return {Object} Destination object\n * @static\n * @private\n */\nexports.shallowCopyFromList = function (to, from, list) {\n for (var i = 0; i < list.length; i++) {\n var p = list[i];\n if (typeof from[p] != 'undefined') {\n to[p] = from[p];\n }\n }\n return to;\n};\n\n/**\n * Simple in-process cache implementation. Does not implement limits of any\n * sort.\n *\n * @implements {Cache}\n * @static\n * @private\n */\nexports.cache = {\n _data: {},\n set: function (key, val) {\n this._data[key] = val;\n },\n get: function (key) {\n return this._data[key];\n },\n remove: function (key) {\n delete this._data[key];\n },\n reset: function () {\n this._data = {};\n }\n};\n\n/**\n * Transforms hyphen case variable into camel case.\n *\n * @param {String} string Hyphen case string\n * @return {String} Camel case string\n * @static\n * @private\n */\nexports.hyphenToCamel = function (str) {\n return str.replace(/-[a-z]/g, function (match) { return match[1].toUpperCase(); });\n};\n","{\n \"name\": \"ejs\",\n \"description\": \"Embedded JavaScript templates\",\n \"keywords\": [\n \"template\",\n \"engine\",\n \"ejs\"\n ],\n \"version\": \"3.1.6\",\n \"author\": \"Matthew Eernisse (http://fleegix.org)\",\n \"license\": \"Apache-2.0\",\n \"bin\": {\n \"ejs\": \"./bin/cli.js\"\n },\n \"main\": \"./lib/ejs.js\",\n \"jsdelivr\": \"ejs.min.js\",\n \"unpkg\": \"ejs.min.js\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/mde/ejs.git\"\n },\n \"bugs\": \"https://github.com/mde/ejs/issues\",\n \"homepage\": \"https://github.com/mde/ejs\",\n \"dependencies\": {\n \"jake\": \"^10.6.1\"\n },\n \"devDependencies\": {\n \"browserify\": \"^16.5.1\",\n \"eslint\": \"^6.8.0\",\n \"git-directory-deploy\": \"^1.5.1\",\n \"jsdoc\": \"^3.6.4\",\n \"lru-cache\": \"^4.0.1\",\n \"mocha\": \"^7.1.1\",\n \"uglify-js\": \"^3.3.16\"\n },\n \"engines\": {\n \"node\": \">=0.10.0\"\n },\n \"scripts\": {\n \"test\": \"mocha\"\n }\n}\n","/*!\n * connect\n * Copyright(c) 2010 Sencha Inc.\n * Copyright(c) 2011 TJ Holowaychuk\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('connect:dispatcher');\nvar EventEmitter = require('events').EventEmitter;\nvar finalhandler = require('finalhandler');\nvar http = require('http');\nvar merge = require('utils-merge');\nvar parseUrl = require('parseurl');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = createServer;\n\n/**\n * Module variables.\n * @private\n */\n\nvar env = process.env.NODE_ENV || 'development';\nvar proto = {};\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n ? setImmediate\n : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) }\n\n/**\n * Create a new connect server.\n *\n * @return {function}\n * @public\n */\n\nfunction createServer() {\n function app(req, res, next){ app.handle(req, res, next); }\n merge(app, proto);\n merge(app, EventEmitter.prototype);\n app.route = '/';\n app.stack = [];\n return app;\n}\n\n/**\n * Utilize the given middleware `handle` to the given `route`,\n * defaulting to _/_. This \"route\" is the mount-point for the\n * middleware, when given a value other than _/_ the middleware\n * is only effective when that segment is present in the request's\n * pathname.\n *\n * For example if we were to mount a function at _/admin_, it would\n * be invoked on _/admin_, and _/admin/settings_, however it would\n * not be invoked for _/_, or _/posts_.\n *\n * @param {String|Function|Server} route, callback or server\n * @param {Function|Server} callback or server\n * @return {Server} for chaining\n * @public\n */\n\nproto.use = function use(route, fn) {\n var handle = fn;\n var path = route;\n\n // default route to '/'\n if (typeof route !== 'string') {\n handle = route;\n path = '/';\n }\n\n // wrap sub-apps\n if (typeof handle.handle === 'function') {\n var server = handle;\n server.route = path;\n handle = function (req, res, next) {\n server.handle(req, res, next);\n };\n }\n\n // wrap vanilla http.Servers\n if (handle instanceof http.Server) {\n handle = handle.listeners('request')[0];\n }\n\n // strip trailing slash\n if (path[path.length - 1] === '/') {\n path = path.slice(0, -1);\n }\n\n // add the middleware\n debug('use %s %s', path || '/', handle.name || 'anonymous');\n this.stack.push({ route: path, handle: handle });\n\n return this;\n};\n\n/**\n * Handle server requests, punting them down\n * the middleware stack.\n *\n * @private\n */\n\nproto.handle = function handle(req, res, out) {\n var index = 0;\n var protohost = getProtohost(req.url) || '';\n var removed = '';\n var slashAdded = false;\n var stack = this.stack;\n\n // final function handler\n var done = out || finalhandler(req, res, {\n env: env,\n onerror: logerror\n });\n\n // store the original URL\n req.originalUrl = req.originalUrl || req.url;\n\n function next(err) {\n if (slashAdded) {\n req.url = req.url.substr(1);\n slashAdded = false;\n }\n\n if (removed.length !== 0) {\n req.url = protohost + removed + req.url.substr(protohost.length);\n removed = '';\n }\n\n // next callback\n var layer = stack[index++];\n\n // all done\n if (!layer) {\n defer(done, err);\n return;\n }\n\n // route data\n var path = parseUrl(req).pathname || '/';\n var route = layer.route;\n\n // skip this layer if the route doesn't match\n if (path.toLowerCase().substr(0, route.length) !== route.toLowerCase()) {\n return next(err);\n }\n\n // skip if route match does not border \"/\", \".\", or end\n var c = path.length > route.length && path[route.length];\n if (c && c !== '/' && c !== '.') {\n return next(err);\n }\n\n // trim off the part of the url that matches the route\n if (route.length !== 0 && route !== '/') {\n removed = route;\n req.url = protohost + req.url.substr(protohost.length + removed.length);\n\n // ensure leading slash\n if (!protohost && req.url[0] !== '/') {\n req.url = '/' + req.url;\n slashAdded = true;\n }\n }\n\n // call the layer handle\n call(layer.handle, route, err, req, res, next);\n }\n\n next();\n};\n\n/**\n * Listen for connections.\n *\n * This method takes the same arguments\n * as node's `http.Server#listen()`.\n *\n * HTTP and HTTPS:\n *\n * If you run your application both as HTTP\n * and HTTPS you may wrap them individually,\n * since your Connect \"server\" is really just\n * a JavaScript `Function`.\n *\n * var connect = require('connect')\n * , http = require('http')\n * , https = require('https');\n *\n * var app = connect();\n *\n * http.createServer(app).listen(80);\n * https.createServer(options, app).listen(443);\n *\n * @return {http.Server}\n * @api public\n */\n\nproto.listen = function listen() {\n var server = http.createServer(this);\n return server.listen.apply(server, arguments);\n};\n\n/**\n * Invoke a route handle.\n * @private\n */\n\nfunction call(handle, route, err, req, res, next) {\n var arity = handle.length;\n var error = err;\n var hasError = Boolean(err);\n\n debug('%s %s : %s', handle.name || '', route, req.originalUrl);\n\n try {\n if (hasError && arity === 4) {\n // error-handling middleware\n handle(err, req, res, next);\n return;\n } else if (!hasError && arity < 4) {\n // request-handling middleware\n handle(req, res, next);\n return;\n }\n } catch (e) {\n // replace the error\n error = e;\n }\n\n // continue\n next(error);\n}\n\n/**\n * Log error using console.error.\n *\n * @param {Error} err\n * @private\n */\n\nfunction logerror(err) {\n if (env !== 'test') console.error(err.stack || err.toString());\n}\n\n/**\n * Get get protocol + host for a URL.\n *\n * @param {string} url\n * @private\n */\n\nfunction getProtohost(url) {\n if (url.length === 0 || url[0] === '/') {\n return undefined;\n }\n\n var fqdnIndex = url.indexOf('://')\n\n return fqdnIndex !== -1 && url.lastIndexOf('?', fqdnIndex) === -1\n ? url.substr(0, url.indexOf('/', 3 + fqdnIndex))\n : undefined;\n}\n","/*!\n * finalhandler\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('finalhandler')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar onFinished = require('on-finished')\nvar parseUrl = require('parseurl')\nvar statuses = require('statuses')\nvar unpipe = require('unpipe')\n\n/**\n * Module variables.\n * @private\n */\n\nvar DOUBLE_SPACE_REGEXP = /\\x20{2}/g\nvar NEWLINE_REGEXP = /\\n/g\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n ? setImmediate\n : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }\nvar isFinished = onFinished.isFinished\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} message\n * @private\n */\n\nfunction createHtmlDocument (message) {\n var body = escapeHtml(message)\n .replace(NEWLINE_REGEXP, '
')\n .replace(DOUBLE_SPACE_REGEXP, '  ')\n\n return '\\n' +\n '\\n' +\n '\\n' +\n '\\n' +\n 'Error\\n' +\n '\\n' +\n '\\n' +\n '
' + body + '
\\n' +\n '\\n' +\n '\\n'\n}\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = finalhandler\n\n/**\n * Create a function to handle the final response.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Object} [options]\n * @return {Function}\n * @public\n */\n\nfunction finalhandler (req, res, options) {\n var opts = options || {}\n\n // get environment\n var env = opts.env || process.env.NODE_ENV || 'development'\n\n // get error callback\n var onerror = opts.onerror\n\n return function (err) {\n var headers\n var msg\n var status\n\n // ignore 404 on in-flight response\n if (!err && headersSent(res)) {\n debug('cannot 404 after headers sent')\n return\n }\n\n // unhandled error\n if (err) {\n // respect status code from error\n status = getErrorStatusCode(err)\n\n if (status === undefined) {\n // fallback to status code on response\n status = getResponseStatusCode(res)\n } else {\n // respect headers from error\n headers = getErrorHeaders(err)\n }\n\n // get error message\n msg = getErrorMessage(err, status, env)\n } else {\n // not found\n status = 404\n msg = 'Cannot ' + req.method + ' ' + encodeUrl(getResourceName(req))\n }\n\n debug('default %s', status)\n\n // schedule onerror callback\n if (err && onerror) {\n defer(onerror, err, req, res)\n }\n\n // cannot actually respond\n if (headersSent(res)) {\n debug('cannot %d after headers sent', status)\n req.socket.destroy()\n return\n }\n\n // send response\n send(req, res, status, headers, msg)\n }\n}\n\n/**\n * Get headers from Error object.\n *\n * @param {Error} err\n * @return {object}\n * @private\n */\n\nfunction getErrorHeaders (err) {\n if (!err.headers || typeof err.headers !== 'object') {\n return undefined\n }\n\n var headers = Object.create(null)\n var keys = Object.keys(err.headers)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n headers[key] = err.headers[key]\n }\n\n return headers\n}\n\n/**\n * Get message from Error object, fallback to status message.\n *\n * @param {Error} err\n * @param {number} status\n * @param {string} env\n * @return {string}\n * @private\n */\n\nfunction getErrorMessage (err, status, env) {\n var msg\n\n if (env !== 'production') {\n // use err.stack, which typically includes err.message\n msg = err.stack\n\n // fallback to err.toString() when possible\n if (!msg && typeof err.toString === 'function') {\n msg = err.toString()\n }\n }\n\n return msg || statuses[status]\n}\n\n/**\n * Get status code from Error object.\n *\n * @param {Error} err\n * @return {number}\n * @private\n */\n\nfunction getErrorStatusCode (err) {\n // check err.status\n if (typeof err.status === 'number' && err.status >= 400 && err.status < 600) {\n return err.status\n }\n\n // check err.statusCode\n if (typeof err.statusCode === 'number' && err.statusCode >= 400 && err.statusCode < 600) {\n return err.statusCode\n }\n\n return undefined\n}\n\n/**\n * Get resource name for the request.\n *\n * This is typically just the original pathname of the request\n * but will fallback to \"resource\" is that cannot be determined.\n *\n * @param {IncomingMessage} req\n * @return {string}\n * @private\n */\n\nfunction getResourceName (req) {\n try {\n return parseUrl.original(req).pathname\n } catch (e) {\n return 'resource'\n }\n}\n\n/**\n * Get status code from response.\n *\n * @param {OutgoingMessage} res\n * @return {number}\n * @private\n */\n\nfunction getResponseStatusCode (res) {\n var status = res.statusCode\n\n // default status code to 500 if outside valid range\n if (typeof status !== 'number' || status < 400 || status > 599) {\n status = 500\n }\n\n return status\n}\n\n/**\n * Determine if the response headers have been sent.\n *\n * @param {object} res\n * @returns {boolean}\n * @private\n */\n\nfunction headersSent (res) {\n return typeof res.headersSent !== 'boolean'\n ? Boolean(res._header)\n : res.headersSent\n}\n\n/**\n * Send response.\n *\n * @param {IncomingMessage} req\n * @param {OutgoingMessage} res\n * @param {number} status\n * @param {object} headers\n * @param {string} message\n * @private\n */\n\nfunction send (req, res, status, headers, message) {\n function write () {\n // response body\n var body = createHtmlDocument(message)\n\n // response status\n res.statusCode = status\n res.statusMessage = statuses[status]\n\n // response headers\n setHeaders(res, headers)\n\n // security headers\n res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n res.setHeader('X-Content-Type-Options', 'nosniff')\n\n // standard headers\n res.setHeader('Content-Type', 'text/html; charset=utf-8')\n res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8'))\n\n if (req.method === 'HEAD') {\n res.end()\n return\n }\n\n res.end(body, 'utf8')\n }\n\n if (isFinished(req)) {\n write()\n return\n }\n\n // unpipe everything from the request\n unpipe(req)\n\n // flush the request\n onFinished(req, write)\n req.resume()\n}\n\n/**\n * Set response headers from an object.\n *\n * @param {OutgoingMessage} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders (res, headers) {\n if (!headers) {\n return\n }\n\n var keys = Object.keys(headers)\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n res.setHeader(key, headers[key])\n }\n}\n","/*!\n * encodeurl\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = encodeUrl\n\n/**\n * RegExp to match non-URL code points, *after* encoding (i.e. not including \"%\")\n * and including invalid escape sequences.\n * @private\n */\n\nvar ENCODE_CHARS_REGEXP = /(?:[^\\x21\\x25\\x26-\\x3B\\x3D\\x3F-\\x5B\\x5D\\x5F\\x61-\\x7A\\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g\n\n/**\n * RegExp to match unmatched surrogate pair.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF]([^\\uDC00-\\uDFFF]|$)/g\n\n/**\n * String to replace unmatched surrogate pair with.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\\uFFFD$2'\n\n/**\n * Encode a URL to a percent-encoded form, excluding already-encoded sequences.\n *\n * This function will take an already-encoded URL and encode all the non-URL\n * code points. This function will not encode the \"%\" character unless it is\n * not part of a valid sequence (`%20` will be left as-is, but `%foo` will\n * be encoded as `%25foo`).\n *\n * This encode is meant to be \"safe\" and does not throw errors. It will try as\n * hard as it can to properly encode the given URL, including replacing any raw,\n * unpaired surrogate pairs with the Unicode replacement character prior to\n * encoding.\n *\n * @param {string} url\n * @return {string}\n * @public\n */\n\nfunction encodeUrl (url) {\n return String(url)\n .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE)\n .replace(ENCODE_CHARS_REGEXP, encodeURI)\n}\n","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n","/*!\n * on-finished\n * Copyright(c) 2013 Jonathan Ong\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = onFinished\nmodule.exports.isFinished = isFinished\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar first = require('ee-first')\n\n/**\n * Variables.\n * @private\n */\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n ? setImmediate\n : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) }\n\n/**\n * Invoke callback when the response has finished, useful for\n * cleaning up resources afterwards.\n *\n * @param {object} msg\n * @param {function} listener\n * @return {object}\n * @public\n */\n\nfunction onFinished(msg, listener) {\n if (isFinished(msg) !== false) {\n defer(listener, null, msg)\n return msg\n }\n\n // attach the listener to the message\n attachListener(msg, listener)\n\n return msg\n}\n\n/**\n * Determine if message is already finished.\n *\n * @param {object} msg\n * @return {boolean}\n * @public\n */\n\nfunction isFinished(msg) {\n var socket = msg.socket\n\n if (typeof msg.finished === 'boolean') {\n // OutgoingMessage\n return Boolean(msg.finished || (socket && !socket.writable))\n }\n\n if (typeof msg.complete === 'boolean') {\n // IncomingMessage\n return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable))\n }\n\n // don't know\n return undefined\n}\n\n/**\n * Attach a finished listener to the message.\n *\n * @param {object} msg\n * @param {function} callback\n * @private\n */\n\nfunction attachFinishedListener(msg, callback) {\n var eeMsg\n var eeSocket\n var finished = false\n\n function onFinish(error) {\n eeMsg.cancel()\n eeSocket.cancel()\n\n finished = true\n callback(error)\n }\n\n // finished on first message event\n eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish)\n\n function onSocket(socket) {\n // remove listener\n msg.removeListener('socket', onSocket)\n\n if (finished) return\n if (eeMsg !== eeSocket) return\n\n // finished on first socket event\n eeSocket = first([[socket, 'error', 'close']], onFinish)\n }\n\n if (msg.socket) {\n // socket already assigned\n onSocket(msg.socket)\n return\n }\n\n // wait for socket to be assigned\n msg.on('socket', onSocket)\n\n if (msg.socket === undefined) {\n // node.js 0.8 patch\n patchAssignSocket(msg, onSocket)\n }\n}\n\n/**\n * Attach the listener to the message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction attachListener(msg, listener) {\n var attached = msg.__onFinished\n\n // create a private single listener with queue\n if (!attached || !attached.queue) {\n attached = msg.__onFinished = createListener(msg)\n attachFinishedListener(msg, attached)\n }\n\n attached.queue.push(listener)\n}\n\n/**\n * Create listener on message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction createListener(msg) {\n function listener(err) {\n if (msg.__onFinished === listener) msg.__onFinished = null\n if (!listener.queue) return\n\n var queue = listener.queue\n listener.queue = null\n\n for (var i = 0; i < queue.length; i++) {\n queue[i](err, msg)\n }\n }\n\n listener.queue = []\n\n return listener\n}\n\n/**\n * Patch ServerResponse.prototype.assignSocket for node.js 0.8.\n *\n * @param {ServerResponse} res\n * @param {function} callback\n * @private\n */\n\nfunction patchAssignSocket(res, callback) {\n var assignSocket = res.assignSocket\n\n if (typeof assignSocket !== 'function') return\n\n // res.on('socket', callback) is broken in 0.8\n res.assignSocket = function _assignSocket(socket) {\n assignSocket.call(this, socket)\n callback(socket)\n }\n}\n","/*!\n * ee-first\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = first\n\n/**\n * Get the first event in a set of event emitters and event pairs.\n *\n * @param {array} stuff\n * @param {function} done\n * @public\n */\n\nfunction first(stuff, done) {\n if (!Array.isArray(stuff))\n throw new TypeError('arg must be an array of [ee, events...] arrays')\n\n var cleanups = []\n\n for (var i = 0; i < stuff.length; i++) {\n var arr = stuff[i]\n\n if (!Array.isArray(arr) || arr.length < 2)\n throw new TypeError('each array member must be [ee, events...]')\n\n var ee = arr[0]\n\n for (var j = 1; j < arr.length; j++) {\n var event = arr[j]\n var fn = listener(event, callback)\n\n // listen to the event\n ee.on(event, fn)\n // push this listener to the list of cleanups\n cleanups.push({\n ee: ee,\n event: event,\n fn: fn,\n })\n }\n }\n\n function callback() {\n cleanup()\n done.apply(null, arguments)\n }\n\n function cleanup() {\n var x\n for (var i = 0; i < cleanups.length; i++) {\n x = cleanups[i]\n x.ee.removeListener(x.event, x.fn)\n }\n }\n\n function thunk(fn) {\n done = fn\n }\n\n thunk.cancel = cleanup\n\n return thunk\n}\n\n/**\n * Create the event listener.\n * @private\n */\n\nfunction listener(event, done) {\n return function onevent(arg1) {\n var args = new Array(arguments.length)\n var ee = this\n var err = event === 'error'\n ? arg1\n : null\n\n // copy args to prevent arguments escaping scope\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n\n done(err, ee, event, args)\n }\n}\n","/*!\n * parseurl\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar url = require('url')\nvar parse = url.parse\nvar Url = url.Url\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = parseurl\nmodule.exports.original = originalurl\n\n/**\n * Parse the `req` url with memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction parseurl (req) {\n var url = req.url\n\n if (url === undefined) {\n // URL is undefined\n return undefined\n }\n\n var parsed = req._parsedUrl\n\n if (fresh(url, parsed)) {\n // Return cached URL parse\n return parsed\n }\n\n // Parse the URL\n parsed = fastparse(url)\n parsed._raw = url\n\n return (req._parsedUrl = parsed)\n};\n\n/**\n * Parse the `req` original url with fallback and memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction originalurl (req) {\n var url = req.originalUrl\n\n if (typeof url !== 'string') {\n // Fallback\n return parseurl(req)\n }\n\n var parsed = req._parsedOriginalUrl\n\n if (fresh(url, parsed)) {\n // Return cached URL parse\n return parsed\n }\n\n // Parse the URL\n parsed = fastparse(url)\n parsed._raw = url\n\n return (req._parsedOriginalUrl = parsed)\n};\n\n/**\n * Parse the `str` url with fast-path short-cut.\n *\n * @param {string} str\n * @return {Object}\n * @private\n */\n\nfunction fastparse (str) {\n if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) {\n return parse(str)\n }\n\n var pathname = str\n var query = null\n var search = null\n\n // This takes the regexp from https://github.com/joyent/node/pull/7878\n // Which is /^(\\/[^?#\\s]*)(\\?[^#\\s]*)?$/\n // And unrolls it into a for loop\n for (var i = 1; i < str.length; i++) {\n switch (str.charCodeAt(i)) {\n case 0x3f: /* ? */\n if (search === null) {\n pathname = str.substring(0, i)\n query = str.substring(i + 1)\n search = str.substring(i)\n }\n break\n case 0x09: /* \\t */\n case 0x0a: /* \\n */\n case 0x0c: /* \\f */\n case 0x0d: /* \\r */\n case 0x20: /* */\n case 0x23: /* # */\n case 0xa0:\n case 0xfeff:\n return parse(str)\n }\n }\n\n var url = Url !== undefined\n ? new Url()\n : {}\n\n url.path = str\n url.href = str\n url.pathname = pathname\n\n if (search !== null) {\n url.query = query\n url.search = search\n }\n\n return url\n}\n\n/**\n * Determine if parsed is still fresh for url.\n *\n * @param {string} url\n * @param {object} parsedUrl\n * @return {boolean}\n * @private\n */\n\nfunction fresh (url, parsedUrl) {\n return typeof parsedUrl === 'object' &&\n parsedUrl !== null &&\n (Url === undefined || parsedUrl instanceof Url) &&\n parsedUrl._raw === url\n}\n","/*!\n * statuses\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar codes = require('./codes.json')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = status\n\n// status code to message map\nstatus.STATUS_CODES = codes\n\n// array of status codes\nstatus.codes = populateStatusesMap(status, codes)\n\n// status codes for redirects\nstatus.redirect = {\n 300: true,\n 301: true,\n 302: true,\n 303: true,\n 305: true,\n 307: true,\n 308: true\n}\n\n// status codes for empty bodies\nstatus.empty = {\n 204: true,\n 205: true,\n 304: true\n}\n\n// status codes for when you should retry the request\nstatus.retry = {\n 502: true,\n 503: true,\n 504: true\n}\n\n/**\n * Populate the statuses map for given codes.\n * @private\n */\n\nfunction populateStatusesMap (statuses, codes) {\n var arr = []\n\n Object.keys(codes).forEach(function forEachCode (code) {\n var message = codes[code]\n var status = Number(code)\n\n // Populate properties\n statuses[status] = message\n statuses[message] = status\n statuses[message.toLowerCase()] = status\n\n // Add to array\n arr.push(status)\n })\n\n return arr\n}\n\n/**\n * Get the status code.\n *\n * Given a number, this will throw if it is not a known status\n * code, otherwise the code will be returned. Given a string,\n * the string will be parsed for a number and return the code\n * if valid, otherwise will lookup the code assuming this is\n * the status message.\n *\n * @param {string|number} code\n * @returns {number}\n * @public\n */\n\nfunction status (code) {\n if (typeof code === 'number') {\n if (!status[code]) throw new Error('invalid status code: ' + code)\n return code\n }\n\n if (typeof code !== 'string') {\n throw new TypeError('code must be a number or string')\n }\n\n // '403'\n var n = parseInt(code, 10)\n if (!isNaN(n)) {\n if (!status[n]) throw new Error('invalid status code: ' + n)\n return n\n }\n\n n = status[code.toLowerCase()]\n if (!n) throw new Error('invalid status message: \"' + code + '\"')\n return n\n}\n","{\n \"100\": \"Continue\",\n \"101\": \"Switching Protocols\",\n \"102\": \"Processing\",\n \"103\": \"Early Hints\",\n \"200\": \"OK\",\n \"201\": \"Created\",\n \"202\": \"Accepted\",\n \"203\": \"Non-Authoritative Information\",\n \"204\": \"No Content\",\n \"205\": \"Reset Content\",\n \"206\": \"Partial Content\",\n \"207\": \"Multi-Status\",\n \"208\": \"Already Reported\",\n \"226\": \"IM Used\",\n \"300\": \"Multiple Choices\",\n \"301\": \"Moved Permanently\",\n \"302\": \"Found\",\n \"303\": \"See Other\",\n \"304\": \"Not Modified\",\n \"305\": \"Use Proxy\",\n \"306\": \"(Unused)\",\n \"307\": \"Temporary Redirect\",\n \"308\": \"Permanent Redirect\",\n \"400\": \"Bad Request\",\n \"401\": \"Unauthorized\",\n \"402\": \"Payment Required\",\n \"403\": \"Forbidden\",\n \"404\": \"Not Found\",\n \"405\": \"Method Not Allowed\",\n \"406\": \"Not Acceptable\",\n \"407\": \"Proxy Authentication Required\",\n \"408\": \"Request Timeout\",\n \"409\": \"Conflict\",\n \"410\": \"Gone\",\n \"411\": \"Length Required\",\n \"412\": \"Precondition Failed\",\n \"413\": \"Payload Too Large\",\n \"414\": \"URI Too Long\",\n \"415\": \"Unsupported Media Type\",\n \"416\": \"Range Not Satisfiable\",\n \"417\": \"Expectation Failed\",\n \"418\": \"I'm a teapot\",\n \"421\": \"Misdirected Request\",\n \"422\": \"Unprocessable Entity\",\n \"423\": \"Locked\",\n \"424\": \"Failed Dependency\",\n \"425\": \"Unordered Collection\",\n \"426\": \"Upgrade Required\",\n \"428\": \"Precondition Required\",\n \"429\": \"Too Many Requests\",\n \"431\": \"Request Header Fields Too Large\",\n \"451\": \"Unavailable For Legal Reasons\",\n \"500\": \"Internal Server Error\",\n \"501\": \"Not Implemented\",\n \"502\": \"Bad Gateway\",\n \"503\": \"Service Unavailable\",\n \"504\": \"Gateway Timeout\",\n \"505\": \"HTTP Version Not Supported\",\n \"506\": \"Variant Also Negotiates\",\n \"507\": \"Insufficient Storage\",\n \"508\": \"Loop Detected\",\n \"509\": \"Bandwidth Limit Exceeded\",\n \"510\": \"Not Extended\",\n \"511\": \"Network Authentication Required\"\n}\n","/*!\n * unpipe\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = unpipe\n\n/**\n * Determine if there are Node.js pipe-like data listeners.\n * @private\n */\n\nfunction hasPipeDataListeners(stream) {\n var listeners = stream.listeners('data')\n\n for (var i = 0; i < listeners.length; i++) {\n if (listeners[i].name === 'ondata') {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Unpipe a stream from all destinations.\n *\n * @param {object} stream\n * @public\n */\n\nfunction unpipe(stream) {\n if (!stream) {\n throw new TypeError('argument stream is required')\n }\n\n if (typeof stream.unpipe === 'function') {\n // new-style\n stream.unpipe()\n return\n }\n\n // Node.js 0.8 hack\n if (!hasPipeDataListeners(stream)) {\n return\n }\n\n var listener\n var listeners = stream.listeners('close')\n\n for (var i = 0; i < listeners.length; i++) {\n listener = listeners[i]\n\n if (listener.name !== 'cleanup' && listener.name !== 'onclose') {\n continue\n }\n\n // invoke the listener\n listener.call(stream)\n }\n}\n","// Native\nconst {promisify} = require('util');\nconst path = require('path');\nconst {createHash} = require('crypto');\nconst {realpath, lstat, createReadStream, readdir} = require('fs');\n\n// Packages\nconst url = require('fast-url-parser');\nconst slasher = require('./glob-slash');\nconst minimatch = require('minimatch');\nconst pathToRegExp = require('path-to-regexp');\nconst mime = require('mime-types');\nconst bytes = require('bytes');\nconst contentDisposition = require('content-disposition');\nconst isPathInside = require('path-is-inside');\nconst parseRange = require('range-parser');\n\n// Other\nconst directoryTemplate = require('./directory');\nconst errorTemplate = require('./error');\n\nconst etags = new Map();\n\nconst calculateSha = (handlers, absolutePath) =>\n\tnew Promise((resolve, reject) => {\n\t\tconst hash = createHash('sha1');\n\t\thash.update(path.extname(absolutePath));\n\t\thash.update('-');\n\t\tconst rs = handlers.createReadStream(absolutePath);\n\t\trs.on('error', reject);\n\t\trs.on('data', buf => hash.update(buf));\n\t\trs.on('end', () => {\n\t\t\tconst sha = hash.digest('hex');\n\t\t\tresolve(sha);\n\t\t});\n\t});\n\nconst sourceMatches = (source, requestPath, allowSegments) => {\n\tconst keys = [];\n\tconst slashed = slasher(source);\n\tconst resolvedPath = path.posix.resolve(requestPath);\n\n\tlet results = null;\n\n\tif (allowSegments) {\n\t\tconst normalized = slashed.replace('*', '(.*)');\n\t\tconst expression = pathToRegExp(normalized, keys);\n\n\t\tresults = expression.exec(resolvedPath);\n\n\t\tif (!results) {\n\t\t\t// clear keys so that they are not used\n\t\t\t// later with empty results. this may\n\t\t\t// happen if minimatch returns true\n\t\t\tkeys.length = 0;\n\t\t}\n\t}\n\n\tif (results || minimatch(resolvedPath, slashed)) {\n\t\treturn {\n\t\t\tkeys,\n\t\t\tresults\n\t\t};\n\t}\n\n\treturn null;\n};\n\nconst toTarget = (source, destination, previousPath) => {\n\tconst matches = sourceMatches(source, previousPath, true);\n\n\tif (!matches) {\n\t\treturn null;\n\t}\n\n\tconst {keys, results} = matches;\n\n\tconst props = {};\n\tconst {protocol} = url.parse(destination);\n\tconst normalizedDest = protocol ? destination : slasher(destination);\n\tconst toPath = pathToRegExp.compile(normalizedDest);\n\n\tfor (let index = 0; index < keys.length; index++) {\n\t\tconst {name} = keys[index];\n\t\tprops[name] = results[index + 1];\n\t}\n\n\treturn toPath(props);\n};\n\nconst applyRewrites = (requestPath, rewrites = [], repetitive) => {\n\t// We need to copy the array, since we're going to modify it.\n\tconst rewritesCopy = rewrites.slice();\n\n\t// If the method was called again, the path was already rewritten\n\t// so we need to make sure to return it.\n\tconst fallback = repetitive ? requestPath : null;\n\n\tif (rewritesCopy.length === 0) {\n\t\treturn fallback;\n\t}\n\n\tfor (let index = 0; index < rewritesCopy.length; index++) {\n\t\tconst {source, destination} = rewrites[index];\n\t\tconst target = toTarget(source, destination, requestPath);\n\n\t\tif (target) {\n\t\t\t// Remove rules that were already applied\n\t\t\trewritesCopy.splice(index, 1);\n\n\t\t\t// Check if there are remaining ones to be applied\n\t\t\treturn applyRewrites(slasher(target), rewritesCopy, true);\n\t\t}\n\t}\n\n\treturn fallback;\n};\n\nconst ensureSlashStart = target => (target.startsWith('/') ? target : `/${target}`);\n\nconst shouldRedirect = (decodedPath, {redirects = [], trailingSlash}, cleanUrl) => {\n\tconst slashing = typeof trailingSlash === 'boolean';\n\tconst defaultType = 301;\n\tconst matchHTML = /(\\.html|\\/index)$/g;\n\n\tif (redirects.length === 0 && !slashing && !cleanUrl) {\n\t\treturn null;\n\t}\n\n\t// By stripping the HTML parts from the decoded\n\t// path *before* handling the trailing slash, we make\n\t// sure that only *one* redirect occurs if both\n\t// config options are used.\n\tif (cleanUrl && matchHTML.test(decodedPath)) {\n\t\tdecodedPath = decodedPath.replace(matchHTML, '');\n\t\tif (decodedPath.indexOf('//') > -1) {\n\t\t\tdecodedPath = decodedPath.replace(/\\/+/g, '/');\n\t\t}\n\t\treturn {\n\t\t\ttarget: ensureSlashStart(decodedPath),\n\t\t\tstatusCode: defaultType\n\t\t};\n\t}\n\n\tif (slashing) {\n\t\tconst {ext, name} = path.parse(decodedPath);\n\t\tconst isTrailed = decodedPath.endsWith('/');\n\t\tconst isDotfile = name.startsWith('.');\n\n\t\tlet target = null;\n\n\t\tif (!trailingSlash && isTrailed) {\n\t\t\ttarget = decodedPath.slice(0, -1);\n\t\t} else if (trailingSlash && !isTrailed && !ext && !isDotfile) {\n\t\t\ttarget = `${decodedPath}/`;\n\t\t}\n\n\t\tif (decodedPath.indexOf('//') > -1) {\n\t\t\ttarget = decodedPath.replace(/\\/+/g, '/');\n\t\t}\n\n\t\tif (target) {\n\t\t\treturn {\n\t\t\t\ttarget: ensureSlashStart(target),\n\t\t\t\tstatusCode: defaultType\n\t\t\t};\n\t\t}\n\t}\n\n\t// This is currently the fastest way to\n\t// iterate over an array\n\tfor (let index = 0; index < redirects.length; index++) {\n\t\tconst {source, destination, type} = redirects[index];\n\t\tconst target = toTarget(source, destination, decodedPath);\n\n\t\tif (target) {\n\t\t\treturn {\n\t\t\t\ttarget,\n\t\t\t\tstatusCode: type || defaultType\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst appendHeaders = (target, source) => {\n\tfor (let index = 0; index < source.length; index++) {\n\t\tconst {key, value} = source[index];\n\t\ttarget[key] = value;\n\t}\n};\n\nconst getHeaders = async (handlers, config, current, absolutePath, stats) => {\n\tconst {headers: customHeaders = [], etag = false} = config;\n\tconst related = {};\n\tconst {base} = path.parse(absolutePath);\n\tconst relativePath = path.relative(current, absolutePath);\n\n\tif (customHeaders.length > 0) {\n\t\t// By iterating over all headers and never stopping, developers\n\t\t// can specify multiple header sources in the config that\n\t\t// might match a single path.\n\t\tfor (let index = 0; index < customHeaders.length; index++) {\n\t\t\tconst {source, headers} = customHeaders[index];\n\n\t\t\tif (sourceMatches(source, slasher(relativePath))) {\n\t\t\t\tappendHeaders(related, headers);\n\t\t\t}\n\t\t}\n\t}\n\n\tlet defaultHeaders = {};\n\n\tif (stats) {\n\t\tdefaultHeaders = {\n\t\t\t'Content-Length': stats.size,\n\t\t\t// Default to \"inline\", which always tries to render in the browser,\n\t\t\t// if that's not working, it will save the file. But to be clear: This\n\t\t\t// only happens if it cannot find a appropiate value.\n\t\t\t'Content-Disposition': contentDisposition(base, {\n\t\t\t\ttype: 'inline'\n\t\t\t}),\n\t\t\t'Accept-Ranges': 'bytes'\n\t\t};\n\n\t\tif (etag) {\n\t\t\tlet [mtime, sha] = etags.get(absolutePath) || [];\n\t\t\tif (Number(mtime) !== Number(stats.mtime)) {\n\t\t\t\tsha = await calculateSha(handlers, absolutePath);\n\t\t\t\tetags.set(absolutePath, [stats.mtime, sha]);\n\t\t\t}\n\t\t\tdefaultHeaders['ETag'] = `\"${sha}\"`;\n\t\t} else {\n\t\t\tdefaultHeaders['Last-Modified'] = stats.mtime.toUTCString();\n\t\t}\n\n\t\tconst contentType = mime.contentType(base);\n\n\t\tif (contentType) {\n\t\t\tdefaultHeaders['Content-Type'] = contentType;\n\t\t}\n\t}\n\n\tconst headers = Object.assign(defaultHeaders, related);\n\n\tfor (const key in headers) {\n\t\tif (headers.hasOwnProperty(key) && headers[key] === null) {\n\t\t\tdelete headers[key];\n\t\t}\n\t}\n\n\treturn headers;\n};\n\nconst applicable = (decodedPath, configEntry) => {\n\tif (typeof configEntry === 'boolean') {\n\t\treturn configEntry;\n\t}\n\n\tif (Array.isArray(configEntry)) {\n\t\tfor (let index = 0; index < configEntry.length; index++) {\n\t\t\tconst source = configEntry[index];\n\n\t\t\tif (sourceMatches(source, decodedPath)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\nconst getPossiblePaths = (relativePath, extension) => [\n\tpath.join(relativePath, `index${extension}`),\n\trelativePath.endsWith('/') ? relativePath.replace(/\\/$/g, extension) : (relativePath + extension)\n].filter(item => path.basename(item) !== extension);\n\nconst findRelated = async (current, relativePath, rewrittenPath, originalStat) => {\n\tconst possible = rewrittenPath ? [rewrittenPath] : getPossiblePaths(relativePath, '.html');\n\n\tlet stats = null;\n\n\tfor (let index = 0; index < possible.length; index++) {\n\t\tconst related = possible[index];\n\t\tconst absolutePath = path.join(current, related);\n\n\t\ttry {\n\t\t\tstats = await originalStat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\n\t\tif (stats) {\n\t\t\treturn {\n\t\t\t\tstats,\n\t\t\t\tabsolutePath\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst canBeListed = (excluded, file) => {\n\tconst slashed = slasher(file);\n\tlet whether = true;\n\n\tfor (let mark = 0; mark < excluded.length; mark++) {\n\t\tconst source = excluded[mark];\n\n\t\tif (sourceMatches(source, slashed)) {\n\t\t\twhether = false;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn whether;\n};\n\nconst renderDirectory = async (current, acceptsJSON, handlers, methods, config, paths) => {\n\tconst {directoryListing, trailingSlash, unlisted = [], renderSingle} = config;\n\tconst slashSuffix = typeof trailingSlash === 'boolean' ? (trailingSlash ? '/' : '') : '/';\n\tconst {relativePath, absolutePath} = paths;\n\n\tconst excluded = [\n\t\t'.DS_Store',\n\t\t'.git',\n\t\t...unlisted\n\t];\n\n\tif (!applicable(relativePath, directoryListing) && !renderSingle) {\n\t\treturn {};\n\t}\n\n\tlet files = await handlers.readdir(absolutePath);\n\n\tconst canRenderSingle = renderSingle && (files.length === 1);\n\n\tfor (let index = 0; index < files.length; index++) {\n\t\tconst file = files[index];\n\n\t\tconst filePath = path.resolve(absolutePath, file);\n\t\tconst details = path.parse(filePath);\n\n\t\t// It's important to indicate that the `stat` call was\n\t\t// spawned by the directory listing, as Now is\n\t\t// simulating those calls and needs to special-case this.\n\t\tlet stats = null;\n\n\t\tif (methods.lstat) {\n\t\t\tstats = await handlers.lstat(filePath, true);\n\t\t} else {\n\t\t\tstats = await handlers.lstat(filePath);\n\t\t}\n\n\t\tdetails.relative = path.join(relativePath, details.base);\n\n\t\tif (stats.isDirectory()) {\n\t\t\tdetails.base += slashSuffix;\n\t\t\tdetails.relative += slashSuffix;\n\t\t\tdetails.type = 'folder';\n\t\t} else {\n\t\t\tif (canRenderSingle) {\n\t\t\t\treturn {\n\t\t\t\t\tsingleFile: true,\n\t\t\t\t\tabsolutePath: filePath,\n\t\t\t\t\tstats\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tdetails.ext = details.ext.split('.')[1] || 'txt';\n\t\t\tdetails.type = 'file';\n\n\t\t\tdetails.size = bytes(stats.size, {\n\t\t\t\tunitSeparator: ' ',\n\t\t\t\tdecimalPlaces: 0\n\t\t\t});\n\t\t}\n\n\t\tdetails.title = details.base;\n\n\t\tif (canBeListed(excluded, file)) {\n\t\t\tfiles[index] = details;\n\t\t} else {\n\t\t\tdelete files[index];\n\t\t}\n\t}\n\n\tconst toRoot = path.relative(current, absolutePath);\n\tconst directory = path.join(path.basename(current), toRoot, slashSuffix);\n\tconst pathParts = directory.split(path.sep).filter(Boolean);\n\n\t// Sort to list directories first, then sort alphabetically\n\tfiles = files.sort((a, b) => {\n\t\tconst aIsDir = a.type === 'directory';\n\t\tconst bIsDir = b.type === 'directory';\n\n\t\t/* istanbul ignore next */\n\t\tif (aIsDir && !bIsDir) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif ((bIsDir && !aIsDir) || (a.base > b.base)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t/* istanbul ignore next */\n\t\tif (a.base < b.base) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t/* istanbul ignore next */\n\t\treturn 0;\n\t}).filter(Boolean);\n\n\t// Add parent directory to the head of the sorted files array\n\tif (toRoot.length > 0) {\n\t\tconst directoryPath = [...pathParts].slice(1);\n\t\tconst relative = path.join('/', ...directoryPath, '..', slashSuffix);\n\n\t\tfiles.unshift({\n\t\t\ttype: 'directory',\n\t\t\tbase: '..',\n\t\t\trelative,\n\t\t\ttitle: relative,\n\t\t\text: ''\n\t\t});\n\t}\n\n\tconst subPaths = [];\n\n\tfor (let index = 0; index < pathParts.length; index++) {\n\t\tconst parents = [];\n\t\tconst isLast = index === (pathParts.length - 1);\n\n\t\tlet before = 0;\n\n\t\twhile (before <= index) {\n\t\t\tparents.push(pathParts[before]);\n\t\t\tbefore++;\n\t\t}\n\n\t\tparents.shift();\n\n\t\tsubPaths.push({\n\t\t\tname: pathParts[index] + (isLast ? slashSuffix : '/'),\n\t\t\turl: index === 0 ? '' : parents.join('/') + slashSuffix\n\t\t});\n\t}\n\n\tconst spec = {\n\t\tfiles,\n\t\tdirectory,\n\t\tpaths: subPaths\n\t};\n\n\tconst output = acceptsJSON ? JSON.stringify(spec) : directoryTemplate(spec);\n\n\treturn {directory: output};\n};\n\nconst sendError = async (absolutePath, response, acceptsJSON, current, handlers, config, spec) => {\n\tconst {err: original, message, code, statusCode} = spec;\n\n\t/* istanbul ignore next */\n\tif (original && process.env.NODE_ENV !== 'test') {\n\t\tconsole.error(original);\n\t}\n\n\tresponse.statusCode = statusCode;\n\n\tif (acceptsJSON) {\n\t\tresponse.setHeader('Content-Type', 'application/json; charset=utf-8');\n\n\t\tresponse.end(JSON.stringify({\n\t\t\terror: {\n\t\t\t\tcode,\n\t\t\t\tmessage\n\t\t\t}\n\t\t}));\n\n\t\treturn;\n\t}\n\n\tlet stats = null;\n\n\tconst errorPage = path.join(current, `${statusCode}.html`);\n\n\ttry {\n\t\tstats = await handlers.lstat(errorPage);\n\t} catch (err) {\n\t\tif (err.code !== 'ENOENT') {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\n\tif (stats) {\n\t\tlet stream = null;\n\n\t\ttry {\n\t\t\tstream = await handlers.createReadStream(errorPage);\n\n\t\t\tconst headers = await getHeaders(handlers, config, current, errorPage, stats);\n\n\t\t\tresponse.writeHead(statusCode, headers);\n\t\t\tstream.pipe(response);\n\n\t\t\treturn;\n\t\t} catch (err) {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\n\tconst headers = await getHeaders(handlers, config, current, absolutePath, null);\n\theaders['Content-Type'] = 'text/html; charset=utf-8';\n\n\tresponse.writeHead(statusCode, headers);\n\tresponse.end(errorTemplate({statusCode, message}));\n};\n\nconst internalError = async (...args) => {\n\tconst lastIndex = args.length - 1;\n\tconst err = args[lastIndex];\n\n\targs[lastIndex] = {\n\t\tstatusCode: 500,\n\t\tcode: 'internal_server_error',\n\t\tmessage: 'A server error has occurred',\n\t\terr\n\t};\n\n\treturn sendError(...args);\n};\n\nconst getHandlers = methods => Object.assign({\n\tlstat: promisify(lstat),\n\trealpath: promisify(realpath),\n\tcreateReadStream,\n\treaddir: promisify(readdir),\n\tsendError\n}, methods);\n\nmodule.exports = async (request, response, config = {}, methods = {}) => {\n\tconst cwd = process.cwd();\n\tconst current = config.public ? path.resolve(cwd, config.public) : cwd;\n\tconst handlers = getHandlers(methods);\n\n\tlet relativePath = null;\n\tlet acceptsJSON = null;\n\n\tif (request.headers.accept) {\n\t\tacceptsJSON = request.headers.accept.includes('application/json');\n\t}\n\n\ttry {\n\t\trelativePath = decodeURIComponent(url.parse(request.url).pathname);\n\t} catch (err) {\n\t\treturn sendError('/', response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 400,\n\t\t\tcode: 'bad_request',\n\t\t\tmessage: 'Bad Request'\n\t\t});\n\t}\n\n\tlet absolutePath = path.join(current, relativePath);\n\n\t// Prevent path traversal vulnerabilities. We could do this\n\t// by ourselves, but using the package covers all the edge cases.\n\tif (!isPathInside(absolutePath, current)) {\n\t\treturn sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 400,\n\t\t\tcode: 'bad_request',\n\t\t\tmessage: 'Bad Request'\n\t\t});\n\t}\n\n\tconst cleanUrl = applicable(relativePath, config.cleanUrls);\n\tconst redirect = shouldRedirect(relativePath, config, cleanUrl);\n\n\tif (redirect) {\n\t\tresponse.writeHead(redirect.statusCode, {\n\t\t\tLocation: encodeURI(redirect.target)\n\t\t});\n\n\t\tresponse.end();\n\t\treturn;\n\t}\n\n\tlet stats = null;\n\n\t// It's extremely important that we're doing multiple stat calls. This one\n\t// right here could technically be removed, but then the program\n\t// would be slower. Because for directories, we always want to see if a related file\n\t// exists and then (after that), fetch the directory itself if no\n\t// related file was found. However (for files, of which most have extensions), we should\n\t// always stat right away.\n\t//\n\t// When simulating a file system without directory indexes, calculating whether a\n\t// directory exists requires loading all the file paths and then checking if\n\t// one of them includes the path of the directory. As that's a very\n\t// performance-expensive thing to do, we need to ensure it's not happening if not really necessary.\n\n\tif (path.extname(relativePath) !== '') {\n\t\ttry {\n\t\t\tstats = await handlers.lstat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst rewrittenPath = applyRewrites(relativePath, config.rewrites);\n\n\tif (!stats && (cleanUrl || rewrittenPath)) {\n\t\ttry {\n\t\t\tconst related = await findRelated(current, relativePath, rewrittenPath, handlers.lstat);\n\n\t\t\tif (related) {\n\t\t\t\t({stats, absolutePath} = related);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!stats) {\n\t\ttry {\n\t\t\tstats = await handlers.lstat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (stats && stats.isDirectory()) {\n\t\tlet directory = null;\n\t\tlet singleFile = null;\n\n\t\ttry {\n\t\t\tconst related = await renderDirectory(current, acceptsJSON, handlers, methods, config, {\n\t\t\t\trelativePath,\n\t\t\t\tabsolutePath\n\t\t\t});\n\n\t\t\tif (related.singleFile) {\n\t\t\t\t({stats, absolutePath, singleFile} = related);\n\t\t\t} else {\n\t\t\t\t({directory} = related);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\n\t\tif (directory) {\n\t\t\tconst contentType = acceptsJSON ? 'application/json; charset=utf-8' : 'text/html; charset=utf-8';\n\n\t\t\tresponse.statusCode = 200;\n\t\t\tresponse.setHeader('Content-Type', contentType);\n\t\t\tresponse.end(directory);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!singleFile) {\n\t\t\t// The directory listing is disabled, so we want to\n\t\t\t// render a 404 error.\n\t\t\tstats = null;\n\t\t}\n\t}\n\n\tconst isSymLink = stats && stats.isSymbolicLink();\n\n\t// There are two scenarios in which we want to reply with\n\t// a 404 error: Either the path does not exist, or it is a\n\t// symlink while the `symlinks` option is disabled (which it is by default).\n\tif (!stats || (!config.symlinks && isSymLink)) {\n\t\t// allow for custom 404 handling\n\t\treturn handlers.sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 404,\n\t\t\tcode: 'not_found',\n\t\t\tmessage: 'The requested path could not be found'\n\t\t});\n\t}\n\n\t// If we figured out that the target is a symlink, we need to\n\t// resolve the symlink and run a new `stat` call just for the\n\t// target of that symlink.\n\tif (isSymLink) {\n\t\tabsolutePath = await handlers.realpath(absolutePath);\n\t\tstats = await handlers.lstat(absolutePath);\n\t}\n\n\tconst streamOpts = {};\n\n\t// TODO ? if-range\n\tif (request.headers.range && stats.size) {\n\t\tconst range = parseRange(stats.size, request.headers.range);\n\n\t\tif (typeof range === 'object' && range.type === 'bytes') {\n\t\t\tconst {start, end} = range[0];\n\n\t\t\tstreamOpts.start = start;\n\t\t\tstreamOpts.end = end;\n\n\t\t\tresponse.statusCode = 206;\n\t\t} else {\n\t\t\tresponse.statusCode = 416;\n\t\t\tresponse.setHeader('Content-Range', `bytes */${stats.size}`);\n\t\t}\n\t}\n\n\t// TODO ? multiple ranges\n\n\tlet stream = null;\n\n\ttry {\n\t\tstream = await handlers.createReadStream(absolutePath, streamOpts);\n\t} catch (err) {\n\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t}\n\n\tconst headers = await getHeaders(handlers, config, current, absolutePath, stats);\n\n\t// eslint-disable-next-line no-undefined\n\tif (streamOpts.start !== undefined && streamOpts.end !== undefined) {\n\t\theaders['Content-Range'] = `bytes ${streamOpts.start}-${streamOpts.end}/${stats.size}`;\n\t\theaders['Content-Length'] = streamOpts.end - streamOpts.start + 1;\n\t}\n\n\t// We need to check for `headers.ETag` being truthy first, otherwise it will\n\t// match `undefined` being equal to `undefined`, which is true.\n\t//\n\t// Checking for `undefined` and `null` is also important, because `Range` can be `0`.\n\t//\n\t// eslint-disable-next-line no-eq-null\n\tif (request.headers.range == null && headers.ETag && headers.ETag === request.headers['if-none-match']) {\n\t\tresponse.statusCode = 304;\n\t\tresponse.end();\n\n\t\treturn;\n\t}\n\n\tresponse.writeHead(response.statusCode || 200, headers);\n\tstream.pipe(response);\n};\n","\"use strict\";\n/*\nCopyright (c) 2014 Petka Antonov\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\nfunction Url() {\n //For more efficient internal representation and laziness.\n //The non-underscore versions of these properties are accessor functions\n //defined on the prototype.\n this._protocol = null;\n this._href = \"\";\n this._port = -1;\n this._query = null;\n\n this.auth = null;\n this.slashes = null;\n this.host = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.pathname = null;\n\n this._prependSlash = false;\n}\n\nvar querystring = require(\"querystring\");\n\nUrl.queryString = querystring;\n\nUrl.prototype.parse =\nfunction Url$parse(str, parseQueryString, hostDenotesSlash, disableAutoEscapeChars) {\n if (typeof str !== \"string\") {\n throw new TypeError(\"Parameter 'url' must be a string, not \" +\n typeof str);\n }\n var start = 0;\n var end = str.length - 1;\n\n //Trim leading and trailing ws\n while (str.charCodeAt(start) <= 0x20 /*' '*/) start++;\n while (str.charCodeAt(end) <= 0x20 /*' '*/) end--;\n\n start = this._parseProtocol(str, start, end);\n\n //Javascript doesn't have host\n if (this._protocol !== \"javascript\") {\n start = this._parseHost(str, start, end, hostDenotesSlash);\n var proto = this._protocol;\n if (!this.hostname &&\n (this.slashes || (proto && !slashProtocols[proto]))) {\n this.hostname = this.host = \"\";\n }\n }\n\n if (start <= end) {\n var ch = str.charCodeAt(start);\n\n if (ch === 0x2F /*'/'*/ || ch === 0x5C /*'\\'*/) {\n this._parsePath(str, start, end, disableAutoEscapeChars);\n }\n else if (ch === 0x3F /*'?'*/) {\n this._parseQuery(str, start, end, disableAutoEscapeChars);\n }\n else if (ch === 0x23 /*'#'*/) {\n this._parseHash(str, start, end, disableAutoEscapeChars);\n }\n else if (this._protocol !== \"javascript\") {\n this._parsePath(str, start, end, disableAutoEscapeChars);\n }\n else { //For javascript the pathname is just the rest of it\n this.pathname = str.slice(start, end + 1 );\n }\n\n }\n\n if (!this.pathname && this.hostname &&\n this._slashProtocols[this._protocol]) {\n this.pathname = \"/\";\n }\n\n if (parseQueryString) {\n var search = this.search;\n if (search == null) {\n search = this.search = \"\";\n }\n if (search.charCodeAt(0) === 0x3F /*'?'*/) {\n search = search.slice(1);\n }\n //This calls a setter function, there is no .query data property\n this.query = Url.queryString.parse(search);\n }\n};\n\nUrl.prototype.resolve = function Url$resolve(relative) {\n return this.resolveObject(Url.parse(relative, false, true)).format();\n};\n\nUrl.prototype.format = function Url$format() {\n var auth = this.auth || \"\";\n\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, \":\");\n auth += \"@\";\n }\n\n var protocol = this.protocol || \"\";\n var pathname = this.pathname || \"\";\n var hash = this.hash || \"\";\n var search = this.search || \"\";\n var query = \"\";\n var hostname = this.hostname || \"\";\n var port = this.port || \"\";\n var host = false;\n var scheme = \"\";\n\n //Cache the result of the getter function\n var q = this.query;\n if (q && typeof q === \"object\") {\n query = Url.queryString.stringify(q);\n }\n\n if (!search) {\n search = query ? \"?\" + query : \"\";\n }\n\n if (protocol && protocol.charCodeAt(protocol.length - 1) !== 0x3A /*':'*/)\n protocol += \":\";\n\n if (this.host) {\n host = auth + this.host;\n }\n else if (hostname) {\n var ip6 = hostname.indexOf(\":\") > -1;\n if (ip6) hostname = \"[\" + hostname + \"]\";\n host = auth + hostname + (port ? \":\" + port : \"\");\n }\n\n var slashes = this.slashes ||\n ((!protocol ||\n slashProtocols[protocol]) && host !== false);\n\n\n if (protocol) scheme = protocol + (slashes ? \"//\" : \"\");\n else if (slashes) scheme = \"//\";\n\n if (slashes && pathname && pathname.charCodeAt(0) !== 0x2F /*'/'*/) {\n pathname = \"/\" + pathname;\n }\n if (search && search.charCodeAt(0) !== 0x3F /*'?'*/)\n search = \"?\" + search;\n if (hash && hash.charCodeAt(0) !== 0x23 /*'#'*/)\n hash = \"#\" + hash;\n\n pathname = escapePathName(pathname);\n search = escapeSearch(search);\n\n return scheme + (host === false ? \"\" : host) + pathname + search + hash;\n};\n\nUrl.prototype.resolveObject = function Url$resolveObject(relative) {\n if (typeof relative === \"string\")\n relative = Url.parse(relative, false, true);\n\n var result = this._clone();\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there\"s nothing left to do here.\n if (!relative.href) {\n result._href = \"\";\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative._protocol) {\n relative._copyPropsTo(result, true);\n\n if (slashProtocols[result._protocol] &&\n result.hostname && !result.pathname) {\n result.pathname = \"/\";\n }\n result._href = \"\";\n return result;\n }\n\n if (relative._protocol && relative._protocol !== result._protocol) {\n // if it\"s a known url protocol, then changing\n // the protocol does weird things\n // first, if it\"s not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that\"s known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashProtocols[relative._protocol]) {\n relative._copyPropsTo(result, false);\n result._href = \"\";\n return result;\n }\n\n result._protocol = relative._protocol;\n if (!relative.host && relative._protocol !== \"javascript\") {\n var relPath = (relative.pathname || \"\").split(\"/\");\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = \"\";\n if (!relative.hostname) relative.hostname = \"\";\n if (relPath[0] !== \"\") relPath.unshift(\"\");\n if (relPath.length < 2) relPath.unshift(\"\");\n result.pathname = relPath.join(\"/\");\n } else {\n result.pathname = relative.pathname;\n }\n\n result.search = relative.search;\n result.host = relative.host || \"\";\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result._port = relative._port;\n result.slashes = result.slashes || relative.slashes;\n result._href = \"\";\n return result;\n }\n\n var isSourceAbs =\n (result.pathname && result.pathname.charCodeAt(0) === 0x2F /*'/'*/);\n var isRelAbs = (\n relative.host ||\n (relative.pathname &&\n relative.pathname.charCodeAt(0) === 0x2F /*'/'*/)\n );\n var mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname));\n\n var removeAllDots = mustEndAbs;\n\n var srcPath = result.pathname && result.pathname.split(\"/\") || [];\n var relPath = relative.pathname && relative.pathname.split(\"/\") || [];\n var psychotic = result._protocol && !slashProtocols[result._protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = \"\";\n result._port = -1;\n if (result.host) {\n if (srcPath[0] === \"\") srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = \"\";\n if (relative._protocol) {\n relative.hostname = \"\";\n relative._port = -1;\n if (relative.host) {\n if (relPath[0] === \"\") relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = \"\";\n }\n mustEndAbs = mustEndAbs && (relPath[0] === \"\" || srcPath[0] === \"\");\n }\n\n if (isRelAbs) {\n // it\"s absolute.\n result.host = relative.host ?\n relative.host : result.host;\n result.hostname = relative.hostname ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it\"s relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n } else if (relative.search) {\n // just pull out the search.\n // like href=\"?foo\".\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especialy happens in cases like\n //url.resolveObject(\"mailto:local1@domain1\", \"local2@domain2\")\n var authInHost = result.host && result.host.indexOf(\"@\") > 0 ?\n result.host.split(\"@\") : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result._href = \"\";\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we\"ve already handled the other stuff above.\n result.pathname = null;\n result._href = \"\";\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host) && (last === \".\" || last === \"..\") ||\n last === \"\");\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === \".\") {\n srcPath.splice(i, 1);\n } else if (last === \"..\") {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift(\"..\");\n }\n }\n\n if (mustEndAbs && srcPath[0] !== \"\" &&\n (!srcPath[0] || srcPath[0].charCodeAt(0) !== 0x2F /*'/'*/)) {\n srcPath.unshift(\"\");\n }\n\n if (hasTrailingSlash && (srcPath.join(\"/\").substr(-1) !== \"/\")) {\n srcPath.push(\"\");\n }\n\n var isAbsolute = srcPath[0] === \"\" ||\n (srcPath[0] && srcPath[0].charCodeAt(0) === 0x2F /*'/'*/);\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? \"\" :\n srcPath.length ? srcPath.shift() : \"\";\n //occationaly the auth can get stuck only in host\n //this especialy happens in cases like\n //url.resolveObject(\"mailto:local1@domain1\", \"local2@domain2\")\n var authInHost = result.host && result.host.indexOf(\"@\") > 0 ?\n result.host.split(\"@\") : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift(\"\");\n }\n\n result.pathname = srcPath.length === 0 ? null : srcPath.join(\"/\");\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result._href = \"\";\n return result;\n};\n\nvar punycode = require(\"punycode\");\nUrl.prototype._hostIdna = function Url$_hostIdna(hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n return punycode.toASCII(hostname);\n};\n\nvar escapePathName = Url.prototype._escapePathName =\nfunction Url$_escapePathName(pathname) {\n if (!containsCharacter2(pathname, 0x23 /*'#'*/, 0x3F /*'?'*/)) {\n return pathname;\n }\n //Avoid closure creation to keep this inlinable\n return _escapePath(pathname);\n};\n\nvar escapeSearch = Url.prototype._escapeSearch =\nfunction Url$_escapeSearch(search) {\n if (!containsCharacter2(search, 0x23 /*'#'*/, -1)) return search;\n //Avoid closure creation to keep this inlinable\n return _escapeSearch(search);\n};\n\nUrl.prototype._parseProtocol = function Url$_parseProtocol(str, start, end) {\n var doLowerCase = false;\n var protocolCharacters = this._protocolCharacters;\n\n for (var i = start; i <= end; ++i) {\n var ch = str.charCodeAt(i);\n\n if (ch === 0x3A /*':'*/) {\n var protocol = str.slice(start, i);\n if (doLowerCase) protocol = protocol.toLowerCase();\n this._protocol = protocol;\n return i + 1;\n }\n else if (protocolCharacters[ch] === 1) {\n if (ch < 0x61 /*'a'*/)\n doLowerCase = true;\n }\n else {\n return start;\n }\n\n }\n return start;\n};\n\nUrl.prototype._parseAuth = function Url$_parseAuth(str, start, end, decode) {\n var auth = str.slice(start, end + 1);\n if (decode) {\n auth = decodeURIComponent(auth);\n }\n this.auth = auth;\n};\n\nUrl.prototype._parsePort = function Url$_parsePort(str, start, end) {\n //Internal format is integer for more efficient parsing\n //and for efficient trimming of leading zeros\n var port = 0;\n //Distinguish between :0 and : (no port number at all)\n var hadChars = false;\n var validPort = true;\n\n for (var i = start; i <= end; ++i) {\n var ch = str.charCodeAt(i);\n\n if (0x30 /*'0'*/ <= ch && ch <= 0x39 /*'9'*/) {\n port = (10 * port) + (ch - 0x30 /*'0'*/);\n hadChars = true;\n }\n else {\n validPort = false;\n if (ch === 0x5C/*'\\'*/ || ch === 0x2F/*'/'*/) {\n validPort = true;\n }\n break;\n }\n\n }\n if ((port === 0 && !hadChars) || !validPort) {\n if (!validPort) {\n this._port = -2;\n }\n return 0;\n }\n\n this._port = port;\n return i - start;\n};\n\nUrl.prototype._parseHost =\nfunction Url$_parseHost(str, start, end, slashesDenoteHost) {\n var hostEndingCharacters = this._hostEndingCharacters;\n var first = str.charCodeAt(start);\n var second = str.charCodeAt(start + 1);\n if ((first === 0x2F /*'/'*/ || first === 0x5C /*'\\'*/) &&\n (second === 0x2F /*'/'*/ || second === 0x5C /*'\\'*/)) {\n this.slashes = true;\n\n //The string starts with //\n if (start === 0) {\n //The string is just \"//\"\n if (end < 2) return start;\n //If slashes do not denote host and there is no auth,\n //there is no host when the string starts with //\n var hasAuth =\n containsCharacter(str, 0x40 /*'@'*/, 2, hostEndingCharacters);\n if (!hasAuth && !slashesDenoteHost) {\n this.slashes = null;\n return start;\n }\n }\n //There is a host that starts after the //\n start += 2;\n }\n //If there is no slashes, there is no hostname if\n //1. there was no protocol at all\n else if (!this._protocol ||\n //2. there was a protocol that requires slashes\n //e.g. in 'http:asd' 'asd' is not a hostname\n slashProtocols[this._protocol]\n ) {\n return start;\n }\n\n var doLowerCase = false;\n var idna = false;\n var hostNameStart = start;\n var hostNameEnd = end;\n var lastCh = -1;\n var portLength = 0;\n var charsAfterDot = 0;\n var authNeedsDecoding = false;\n\n var j = -1;\n\n //Find the last occurrence of an @-sign until hostending character is met\n //also mark if decoding is needed for the auth portion\n for (var i = start; i <= end; ++i) {\n var ch = str.charCodeAt(i);\n\n if (ch === 0x40 /*'@'*/) {\n j = i;\n }\n //This check is very, very cheap. Unneeded decodeURIComponent is very\n //very expensive\n else if (ch === 0x25 /*'%'*/) {\n authNeedsDecoding = true;\n }\n else if (hostEndingCharacters[ch] === 1) {\n break;\n }\n }\n\n //@-sign was found at index j, everything to the left from it\n //is auth part\n if (j > -1) {\n this._parseAuth(str, start, j - 1, authNeedsDecoding);\n //hostname starts after the last @-sign\n start = hostNameStart = j + 1;\n }\n\n //Host name is starting with a [\n if (str.charCodeAt(start) === 0x5B /*'['*/) {\n for (var i = start + 1; i <= end; ++i) {\n var ch = str.charCodeAt(i);\n\n //Assume valid IP6 is between the brackets\n if (ch === 0x5D /*']'*/) {\n if (str.charCodeAt(i + 1) === 0x3A /*':'*/) {\n portLength = this._parsePort(str, i + 2, end) + 1;\n }\n var hostname = str.slice(start + 1, i).toLowerCase();\n this.hostname = hostname;\n this.host = this._port > 0 ?\n \"[\" + hostname + \"]:\" + this._port :\n \"[\" + hostname + \"]\";\n this.pathname = \"/\";\n return i + portLength + 1;\n }\n }\n //Empty hostname, [ starts a path\n return start;\n }\n\n for (var i = start; i <= end; ++i) {\n if (charsAfterDot > 62) {\n this.hostname = this.host = str.slice(start, i);\n return i;\n }\n var ch = str.charCodeAt(i);\n\n if (ch === 0x3A /*':'*/) {\n portLength = this._parsePort(str, i + 1, end) + 1;\n hostNameEnd = i - 1;\n break;\n }\n else if (ch < 0x61 /*'a'*/) {\n if (ch === 0x2E /*'.'*/) {\n //Node.js ignores this error\n /*\n if (lastCh === DOT || lastCh === -1) {\n this.hostname = this.host = \"\";\n return start;\n }\n */\n charsAfterDot = -1;\n }\n else if (0x41 /*'A'*/ <= ch && ch <= 0x5A /*'Z'*/) {\n doLowerCase = true;\n }\n //Valid characters other than ASCII letters -, _, +, 0-9\n else if (!(ch === 0x2D /*'-'*/ ||\n ch === 0x5F /*'_'*/ ||\n ch === 0x2B /*'+'*/ ||\n (0x30 /*'0'*/ <= ch && ch <= 0x39 /*'9'*/))\n ) {\n if (hostEndingCharacters[ch] === 0 &&\n this._noPrependSlashHostEnders[ch] === 0) {\n this._prependSlash = true;\n }\n hostNameEnd = i - 1;\n break;\n }\n }\n else if (ch >= 0x7B /*'{'*/) {\n if (ch <= 0x7E /*'~'*/) {\n if (this._noPrependSlashHostEnders[ch] === 0) {\n this._prependSlash = true;\n }\n hostNameEnd = i - 1;\n break;\n }\n idna = true;\n }\n lastCh = ch;\n charsAfterDot++;\n }\n\n //Node.js ignores this error\n /*\n if (lastCh === DOT) {\n hostNameEnd--;\n }\n */\n\n if (hostNameEnd + 1 !== start &&\n hostNameEnd - hostNameStart <= 256) {\n var hostname = str.slice(hostNameStart, hostNameEnd + 1);\n if (doLowerCase) hostname = hostname.toLowerCase();\n if (idna) hostname = this._hostIdna(hostname);\n this.hostname = hostname;\n this.host = this._port > 0 ? hostname + \":\" + this._port : hostname;\n }\n\n return hostNameEnd + 1 + portLength;\n\n};\n\nUrl.prototype._copyPropsTo = function Url$_copyPropsTo(input, noProtocol) {\n if (!noProtocol) {\n input._protocol = this._protocol;\n }\n input._href = this._href;\n input._port = this._port;\n input._prependSlash = this._prependSlash;\n input.auth = this.auth;\n input.slashes = this.slashes;\n input.host = this.host;\n input.hostname = this.hostname;\n input.hash = this.hash;\n input.search = this.search;\n input.pathname = this.pathname;\n};\n\nUrl.prototype._clone = function Url$_clone() {\n var ret = new Url();\n ret._protocol = this._protocol;\n ret._href = this._href;\n ret._port = this._port;\n ret._prependSlash = this._prependSlash;\n ret.auth = this.auth;\n ret.slashes = this.slashes;\n ret.host = this.host;\n ret.hostname = this.hostname;\n ret.hash = this.hash;\n ret.search = this.search;\n ret.pathname = this.pathname;\n return ret;\n};\n\nUrl.prototype._getComponentEscaped =\nfunction Url$_getComponentEscaped(str, start, end, isAfterQuery) {\n var cur = start;\n var i = start;\n var ret = \"\";\n var autoEscapeMap = isAfterQuery ?\n this._afterQueryAutoEscapeMap : this._autoEscapeMap;\n for (; i <= end; ++i) {\n var ch = str.charCodeAt(i);\n var escaped = autoEscapeMap[ch];\n\n if (escaped !== \"\" && escaped !== undefined) {\n if (cur < i) ret += str.slice(cur, i);\n ret += escaped;\n cur = i + 1;\n }\n }\n if (cur < i + 1) ret += str.slice(cur, i);\n return ret;\n};\n\nUrl.prototype._parsePath =\nfunction Url$_parsePath(str, start, end, disableAutoEscapeChars) {\n var pathStart = start;\n var pathEnd = end;\n var escape = false;\n var autoEscapeCharacters = this._autoEscapeCharacters;\n var prePath = this._port === -2 ? \"/:\" : \"\";\n\n for (var i = start; i <= end; ++i) {\n var ch = str.charCodeAt(i);\n if (ch === 0x23 /*'#'*/) {\n this._parseHash(str, i, end, disableAutoEscapeChars);\n pathEnd = i - 1;\n break;\n }\n else if (ch === 0x3F /*'?'*/) {\n this._parseQuery(str, i, end, disableAutoEscapeChars);\n pathEnd = i - 1;\n break;\n }\n else if (!disableAutoEscapeChars && !escape && autoEscapeCharacters[ch] === 1) {\n escape = true;\n }\n }\n\n if (pathStart > pathEnd) {\n this.pathname = prePath === \"\" ? \"/\" : prePath;\n return;\n }\n\n var path;\n if (escape) {\n path = this._getComponentEscaped(str, pathStart, pathEnd, false);\n }\n else {\n path = str.slice(pathStart, pathEnd + 1);\n }\n this.pathname = prePath === \"\"\n ? (this._prependSlash ? \"/\" + path : path)\n : prePath + path;\n};\n\nUrl.prototype._parseQuery = function Url$_parseQuery(str, start, end, disableAutoEscapeChars) {\n var queryStart = start;\n var queryEnd = end;\n var escape = false;\n var autoEscapeCharacters = this._autoEscapeCharacters;\n\n for (var i = start; i <= end; ++i) {\n var ch = str.charCodeAt(i);\n\n if (ch === 0x23 /*'#'*/) {\n this._parseHash(str, i, end, disableAutoEscapeChars);\n queryEnd = i - 1;\n break;\n }\n else if (!disableAutoEscapeChars && !escape && autoEscapeCharacters[ch] === 1) {\n escape = true;\n }\n }\n\n if (queryStart > queryEnd) {\n this.search = \"\";\n return;\n }\n\n var query;\n if (escape) {\n query = this._getComponentEscaped(str, queryStart, queryEnd, true);\n }\n else {\n query = str.slice(queryStart, queryEnd + 1);\n }\n this.search = query;\n};\n\nUrl.prototype._parseHash = function Url$_parseHash(str, start, end, disableAutoEscapeChars) {\n if (start > end) {\n this.hash = \"\";\n return;\n }\n\n this.hash = disableAutoEscapeChars ?\n str.slice(start, end + 1) : this._getComponentEscaped(str, start, end, true);\n};\n\nObject.defineProperty(Url.prototype, \"port\", {\n get: function() {\n if (this._port >= 0) {\n return (\"\" + this._port);\n }\n return null;\n },\n set: function(v) {\n if (v == null) {\n this._port = -1;\n }\n else {\n this._port = parseInt(v, 10);\n }\n }\n});\n\nObject.defineProperty(Url.prototype, \"query\", {\n get: function() {\n var query = this._query;\n if (query != null) {\n return query;\n }\n var search = this.search;\n\n if (search) {\n if (search.charCodeAt(0) === 0x3F /*'?'*/) {\n search = search.slice(1);\n }\n if (search !== \"\") {\n this._query = search;\n return search;\n }\n }\n return search;\n },\n set: function(v) {\n this._query = v;\n }\n});\n\nObject.defineProperty(Url.prototype, \"path\", {\n get: function() {\n var p = this.pathname || \"\";\n var s = this.search || \"\";\n if (p || s) {\n return p + s;\n }\n return (p == null && s) ? (\"/\" + s) : null;\n },\n set: function() {}\n});\n\nObject.defineProperty(Url.prototype, \"protocol\", {\n get: function() {\n var proto = this._protocol;\n return proto ? proto + \":\" : proto;\n },\n set: function(v) {\n if (typeof v === \"string\") {\n var end = v.length - 1;\n if (v.charCodeAt(end) === 0x3A /*':'*/) {\n this._protocol = v.slice(0, end);\n }\n else {\n this._protocol = v;\n }\n }\n else if (v == null) {\n this._protocol = null;\n }\n }\n});\n\nObject.defineProperty(Url.prototype, \"href\", {\n get: function() {\n var href = this._href;\n if (!href) {\n href = this._href = this.format();\n }\n return href;\n },\n set: function(v) {\n this._href = v;\n }\n});\n\nUrl.parse = function Url$Parse(str, parseQueryString, hostDenotesSlash, disableAutoEscapeChars) {\n if (str instanceof Url) return str;\n var ret = new Url();\n ret.parse(str, !!parseQueryString, !!hostDenotesSlash, !!disableAutoEscapeChars);\n return ret;\n};\n\nUrl.format = function Url$Format(obj) {\n if (typeof obj === \"string\") {\n obj = Url.parse(obj);\n }\n if (!(obj instanceof Url)) {\n return Url.prototype.format.call(obj);\n }\n return obj.format();\n};\n\nUrl.resolve = function Url$Resolve(source, relative) {\n return Url.parse(source, false, true).resolve(relative);\n};\n\nUrl.resolveObject = function Url$ResolveObject(source, relative) {\n if (!source) return relative;\n return Url.parse(source, false, true).resolveObject(relative);\n};\n\nfunction _escapePath(pathname) {\n return pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n}\n\nfunction _escapeSearch(search) {\n return search.replace(/#/g, function(match) {\n return encodeURIComponent(match);\n });\n}\n\n//Search `char1` (integer code for a character) in `string`\n//starting from `fromIndex` and ending at `string.length - 1`\n//or when a stop character is found\nfunction containsCharacter(string, char1, fromIndex, stopCharacterTable) {\n var len = string.length;\n for (var i = fromIndex; i < len; ++i) {\n var ch = string.charCodeAt(i);\n\n if (ch === char1) {\n return true;\n }\n else if (stopCharacterTable[ch] === 1) {\n return false;\n }\n }\n return false;\n}\n\n//See if `char1` or `char2` (integer codes for characters)\n//is contained in `string`\nfunction containsCharacter2(string, char1, char2) {\n for (var i = 0, len = string.length; i < len; ++i) {\n var ch = string.charCodeAt(i);\n if (ch === char1 || ch === char2) return true;\n }\n return false;\n}\n\n//Makes an array of 128 uint8's which represent boolean values.\n//Spec is an array of ascii code points or ascii code point ranges\n//ranges are expressed as [start, end]\n\n//Create a table with the characters 0x30-0x39 (decimals '0' - '9') and\n//0x7A (lowercaseletter 'z') as `true`:\n//\n//var a = makeAsciiTable([[0x30, 0x39], 0x7A]);\n//a[0x30]; //1\n//a[0x15]; //0\n//a[0x35]; //1\nfunction makeAsciiTable(spec) {\n var ret = new Uint8Array(128);\n spec.forEach(function(item){\n if (typeof item === \"number\") {\n ret[item] = 1;\n }\n else {\n var start = item[0];\n var end = item[1];\n for (var j = start; j <= end; ++j) {\n ret[j] = 1;\n }\n }\n });\n\n return ret;\n}\n\n\nvar autoEscape = [\"<\", \">\", \"\\\"\", \"`\", \" \", \"\\r\", \"\\n\",\n \"\\t\", \"{\", \"}\", \"|\", \"\\\\\", \"^\", \"`\", \"'\"];\n\nvar autoEscapeMap = new Array(128);\n\n\n\nfor (var i = 0, len = autoEscapeMap.length; i < len; ++i) {\n autoEscapeMap[i] = \"\";\n}\n\nfor (var i = 0, len = autoEscape.length; i < len; ++i) {\n var c = autoEscape[i];\n var esc = encodeURIComponent(c);\n if (esc === c) {\n esc = escape(c);\n }\n autoEscapeMap[c.charCodeAt(0)] = esc;\n}\nvar afterQueryAutoEscapeMap = autoEscapeMap.slice();\nautoEscapeMap[0x5C /*'\\'*/] = \"/\";\n\nvar slashProtocols = Url.prototype._slashProtocols = {\n http: true,\n https: true,\n gopher: true,\n file: true,\n ftp: true,\n\n \"http:\": true,\n \"https:\": true,\n \"gopher:\": true,\n \"file:\": true,\n \"ftp:\": true\n};\n\n//Optimize back from normalized object caused by non-identifier keys\nfunction f(){}\nf.prototype = slashProtocols;\n\nUrl.prototype._protocolCharacters = makeAsciiTable([\n [0x61 /*'a'*/, 0x7A /*'z'*/],\n [0x41 /*'A'*/, 0x5A /*'Z'*/],\n 0x2E /*'.'*/, 0x2B /*'+'*/, 0x2D /*'-'*/\n]);\n\nUrl.prototype._hostEndingCharacters = makeAsciiTable([\n 0x23 /*'#'*/, 0x3F /*'?'*/, 0x2F /*'/'*/, 0x5C /*'\\'*/\n]);\n\nUrl.prototype._autoEscapeCharacters = makeAsciiTable(\n autoEscape.map(function(v) {\n return v.charCodeAt(0);\n })\n);\n\n//If these characters end a host name, the path will not be prepended a /\nUrl.prototype._noPrependSlashHostEnders = makeAsciiTable(\n [\n \"<\", \">\", \"'\", \"`\", \" \", \"\\r\",\n \"\\n\", \"\\t\", \"{\", \"}\", \"|\",\n \"^\", \"`\", \"\\\"\", \"%\", \";\"\n ].map(function(v) {\n return v.charCodeAt(0);\n })\n);\n\nUrl.prototype._autoEscapeMap = autoEscapeMap;\nUrl.prototype._afterQueryAutoEscapeMap = afterQueryAutoEscapeMap;\n\nmodule.exports = Url;\n\nUrl.replace = function Url$Replace() {\n require.cache.url = {\n exports: Url\n };\n};\n","/* ! The MIT License (MIT) Copyright (c) 2014 Scott Corgan */\n\n// This is adopted from https://github.com/scottcorgan/glob-slash/\n\nconst path = require('path');\nconst normalize = value => path.posix.normalize(path.posix.join('/', value));\n\nmodule.exports = value => (value.charAt(0) === '!' ? `!${normalize(value.substr(1))}` : normalize(value));\nmodule.exports.normalize = normalize;\n","module.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = { sep: '/' }\ntry {\n path = require('path')\n} catch (er) {}\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = require('brace-expansion')\n\nvar plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n return s.split('').reduce(function (set, c) {\n set[c] = true\n return set\n }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n options = options || {}\n return function (p, i, list) {\n return minimatch(p, pattern, options)\n }\n}\n\nfunction ext (a, b) {\n a = a || {}\n b = b || {}\n var t = {}\n Object.keys(b).forEach(function (k) {\n t[k] = b[k]\n })\n Object.keys(a).forEach(function (k) {\n t[k] = a[k]\n })\n return t\n}\n\nminimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return minimatch\n\n var orig = minimatch\n\n var m = function minimatch (p, pattern, options) {\n return orig.minimatch(p, pattern, ext(def, options))\n }\n\n m.Minimatch = function Minimatch (pattern, options) {\n return new orig.Minimatch(pattern, ext(def, options))\n }\n\n return m\n}\n\nMinimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return Minimatch\n return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required')\n }\n\n if (!options) options = {}\n\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false\n }\n\n // \"\" only matches \"\"\n if (pattern.trim() === '') return p === ''\n\n return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n if (!(this instanceof Minimatch)) {\n return new Minimatch(pattern, options)\n }\n\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required')\n }\n\n if (!options) options = {}\n pattern = pattern.trim()\n\n // windows support: need to use /, not \\\n if (path.sep !== '/') {\n pattern = pattern.split(path.sep).join('/')\n }\n\n this.options = options\n this.set = []\n this.pattern = pattern\n this.regexp = null\n this.negate = false\n this.comment = false\n this.empty = false\n\n // make the set of regexps etc.\n this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n // don't do it more than once.\n if (this._made) return\n\n var pattern = this.pattern\n var options = this.options\n\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true\n return\n }\n if (!pattern) {\n this.empty = true\n return\n }\n\n // step 1: figure out negation, etc.\n this.parseNegate()\n\n // step 2: expand braces\n var set = this.globSet = this.braceExpand()\n\n if (options.debug) this.debug = console.error\n\n this.debug(this.pattern, set)\n\n // step 3: now we have a set, so turn each one into a series of path-portion\n // matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n set = this.globParts = set.map(function (s) {\n return s.split(slashSplit)\n })\n\n this.debug(this.pattern, set)\n\n // glob --> regexps\n set = set.map(function (s, si, set) {\n return s.map(this.parse, this)\n }, this)\n\n this.debug(this.pattern, set)\n\n // filter out everything that didn't compile properly.\n set = set.filter(function (s) {\n return s.indexOf(false) === -1\n })\n\n this.debug(this.pattern, set)\n\n this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n var pattern = this.pattern\n var negate = false\n var options = this.options\n var negateOffset = 0\n\n if (options.nonegate) return\n\n for (var i = 0, l = pattern.length\n ; i < l && pattern.charAt(i) === '!'\n ; i++) {\n negate = !negate\n negateOffset++\n }\n\n if (negateOffset) this.pattern = pattern.substr(negateOffset)\n this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n if (!options) {\n if (this instanceof Minimatch) {\n options = this.options\n } else {\n options = {}\n }\n }\n\n pattern = typeof pattern === 'undefined'\n ? this.pattern : pattern\n\n if (typeof pattern === 'undefined') {\n throw new TypeError('undefined pattern')\n }\n\n if (options.nobrace ||\n !pattern.match(/\\{.*\\}/)) {\n // shortcut. no need to expand.\n return [pattern]\n }\n\n return expand(pattern)\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n if (pattern.length > 1024 * 64) {\n throw new TypeError('pattern is too long')\n }\n\n var options = this.options\n\n // shortcuts\n if (!options.noglobstar && pattern === '**') return GLOBSTAR\n if (pattern === '') return ''\n\n var re = ''\n var hasMagic = !!options.nocase\n var escaping = false\n // ? => one single character\n var patternListStack = []\n var negativeLists = []\n var stateChar\n var inClass = false\n var reClassStart = -1\n var classStart = -1\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set.\n var patternStart = pattern.charAt(0) === '.' ? '' // anything\n // not (start or / followed by . or .. followed by / or end)\n : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n : '(?!\\\\.)'\n var self = this\n\n function clearStateChar () {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star\n hasMagic = true\n break\n case '?':\n re += qmark\n hasMagic = true\n break\n default:\n re += '\\\\' + stateChar\n break\n }\n self.debug('clearStateChar %j %j', stateChar, re)\n stateChar = false\n }\n }\n\n for (var i = 0, len = pattern.length, c\n ; (i < len) && (c = pattern.charAt(i))\n ; i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n // skip over any that are escaped.\n if (escaping && reSpecials[c]) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n switch (c) {\n case '/':\n // completely not allowed, even escaped.\n // Should already be path-split by now.\n return false\n\n case '\\\\':\n clearStateChar()\n escaping = true\n continue\n\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n // all of those are literals inside a class, except that\n // the glob [!a] means [^a] in regexp\n if (inClass) {\n this.debug(' in class')\n if (c === '!' && i === classStart + 1) c = '^'\n re += c\n continue\n }\n\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n self.debug('call clearStateChar %j', stateChar)\n clearStateChar()\n stateChar = c\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext) clearStateChar()\n continue\n\n case '(':\n if (inClass) {\n re += '('\n continue\n }\n\n if (!stateChar) {\n re += '\\\\('\n continue\n }\n\n patternListStack.push({\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close\n })\n // negation is (?:(?!js)[^/]*)\n re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n this.debug('plType %j %j', stateChar, re)\n stateChar = false\n continue\n\n case ')':\n if (inClass || !patternListStack.length) {\n re += '\\\\)'\n continue\n }\n\n clearStateChar()\n hasMagic = true\n var pl = patternListStack.pop()\n // negation is (?:(?!js)[^/]*)\n // The others are (?:)\n re += pl.close\n if (pl.type === '!') {\n negativeLists.push(pl)\n }\n pl.reEnd = re.length\n continue\n\n case '|':\n if (inClass || !patternListStack.length || escaping) {\n re += '\\\\|'\n escaping = false\n continue\n }\n\n clearStateChar()\n re += '|'\n continue\n\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar()\n\n if (inClass) {\n re += '\\\\' + c\n continue\n }\n\n inClass = true\n classStart = i\n reClassStart = re.length\n re += c\n continue\n\n case ']':\n // a right bracket shall lose its special\n // meaning and represent itself in\n // a bracket expression if it occurs\n // first in the list. -- POSIX.2 2.8.3.2\n if (i === classStart + 1 || !inClass) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n // handle the case where we left a class open.\n // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n if (inClass) {\n // split where the last [ was, make sure we don't have\n // an invalid re. if so, re-walk the contents of the\n // would-be class to re-translate any characters that\n // were passed through as-is\n // TODO: It would probably be faster to determine this\n // without a try/catch and a new RegExp, but it's tricky\n // to do safely. For now, this is safe and works.\n var cs = pattern.substring(classStart + 1, i)\n try {\n RegExp('[' + cs + ']')\n } catch (er) {\n // not a valid class!\n var sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n hasMagic = hasMagic || sp[1]\n inClass = false\n continue\n }\n }\n\n // finish up the class.\n hasMagic = true\n inClass = false\n re += c\n continue\n\n default:\n // swallow any state char that wasn't consumed\n clearStateChar()\n\n if (escaping) {\n // no need\n escaping = false\n } else if (reSpecials[c]\n && !(c === '^' && inClass)) {\n re += '\\\\'\n }\n\n re += c\n\n } // switch\n } // for\n\n // handle the case where we left a class open.\n // \"[abc\" is valid, equivalent to \"\\[abc\"\n if (inClass) {\n // split where the last [ was, and escape it\n // this is a huge pita. We now have to re-walk\n // the contents of the would-be class to re-translate\n // any characters that were passed through as-is\n cs = pattern.substr(classStart + 1)\n sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n hasMagic = hasMagic || sp[1]\n }\n\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n var tail = re.slice(pl.reStart + pl.open.length)\n this.debug('setting tail', re, pl)\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\'\n }\n\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|'\n })\n\n this.debug('tail=%j\\n %s', tail, tail, pl, re)\n var t = pl.type === '*' ? star\n : pl.type === '?' ? qmark\n : '\\\\' + pl.type\n\n hasMagic = true\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n }\n\n // handle trailing things that only matter at the very end.\n clearStateChar()\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\'\n }\n\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n var addPatternStart = false\n switch (re.charAt(0)) {\n case '.':\n case '[':\n case '(': addPatternStart = true\n }\n\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (var n = negativeLists.length - 1; n > -1; n--) {\n var nl = negativeLists[n]\n\n var nlBefore = re.slice(0, nl.reStart)\n var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n var nlAfter = re.slice(nl.reEnd)\n\n nlLast += nlAfter\n\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n var openParensBefore = nlBefore.split('(').length - 1\n var cleanAfter = nlAfter\n for (i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n }\n nlAfter = cleanAfter\n\n var dollar = ''\n if (nlAfter === '' && isSub !== SUBPARSE) {\n dollar = '$'\n }\n var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n re = newRe\n }\n\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re\n }\n\n if (addPatternStart) {\n re = patternStart + re\n }\n\n // parsing just a piece of a larger pattern.\n if (isSub === SUBPARSE) {\n return [re, hasMagic]\n }\n\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(pattern)\n }\n\n var flags = options.nocase ? 'i' : ''\n try {\n var regExp = new RegExp('^' + re + '$', flags)\n } catch (er) {\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n return new RegExp('$.')\n }\n\n regExp._glob = pattern\n regExp._src = re\n\n return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n if (this.regexp || this.regexp === false) return this.regexp\n\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n var set = this.set\n\n if (!set.length) {\n this.regexp = false\n return this.regexp\n }\n var options = this.options\n\n var twoStar = options.noglobstar ? star\n : options.dot ? twoStarDot\n : twoStarNoDot\n var flags = options.nocase ? 'i' : ''\n\n var re = set.map(function (pattern) {\n return pattern.map(function (p) {\n return (p === GLOBSTAR) ? twoStar\n : (typeof p === 'string') ? regExpEscape(p)\n : p._src\n }).join('\\\\\\/')\n }).join('|')\n\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$'\n\n // can match anything, as long as it's not this.\n if (this.negate) re = '^(?!' + re + ').*$'\n\n try {\n this.regexp = new RegExp(re, flags)\n } catch (ex) {\n this.regexp = false\n }\n return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n options = options || {}\n var mm = new Minimatch(pattern, options)\n list = list.filter(function (f) {\n return mm.match(f)\n })\n if (mm.options.nonull && !list.length) {\n list.push(pattern)\n }\n return list\n}\n\nMinimatch.prototype.match = match\nfunction match (f, partial) {\n this.debug('match', f, this.pattern)\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) return false\n if (this.empty) return f === ''\n\n if (f === '/' && partial) return true\n\n var options = this.options\n\n // windows: need to use /, not \\\n if (path.sep !== '/') {\n f = f.split(path.sep).join('/')\n }\n\n // treat the test path as a set of pathparts.\n f = f.split(slashSplit)\n this.debug(this.pattern, 'split', f)\n\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n var set = this.set\n this.debug(this.pattern, 'set', set)\n\n // Find the basename of the path by looking for the last non-empty segment\n var filename\n var i\n for (i = f.length - 1; i >= 0; i--) {\n filename = f[i]\n if (filename) break\n }\n\n for (i = 0; i < set.length; i++) {\n var pattern = set[i]\n var file = f\n if (options.matchBase && pattern.length === 1) {\n file = [filename]\n }\n var hit = this.matchOne(file, pattern, partial)\n if (hit) {\n if (options.flipNegate) return true\n return !this.negate\n }\n }\n\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) return false\n return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n var options = this.options\n\n this.debug('matchOne',\n { 'this': this, file: file, pattern: pattern })\n\n this.debug('matchOne', file.length, pattern.length)\n\n for (var fi = 0,\n pi = 0,\n fl = file.length,\n pl = pattern.length\n ; (fi < fl) && (pi < pl)\n ; fi++, pi++) {\n this.debug('matchOne loop')\n var p = pattern[pi]\n var f = file[fi]\n\n this.debug(pattern, p, f)\n\n // should be impossible.\n // some invalid regexp stuff in the set.\n if (p === false) return false\n\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f])\n\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi\n var pr = pi + 1\n if (pr === pl) {\n this.debug('** at the end')\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' || file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.')) return false\n }\n return true\n }\n\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr]\n\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee)\n // found a match.\n return true\n } else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' || swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr)\n break\n }\n\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue')\n fr++\n }\n }\n\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n // If there's more *pattern* left, then\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n if (fr === fl) return true\n }\n return false\n }\n\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n var hit\n if (typeof p === 'string') {\n if (options.nocase) {\n hit = f.toLowerCase() === p.toLowerCase()\n } else {\n hit = f === p\n }\n this.debug('string match', p, f, hit)\n } else {\n hit = f.match(p)\n this.debug('pattern match', p, f, hit)\n }\n\n if (!hit) return false\n }\n\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial\n } else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')\n return emptyFileEnd\n }\n\n // should be unreachable.\n throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n","var concatMap = require('concat-map');\nvar balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n return e;\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m || /\\$$/.test(m.pre)) return [str];\n\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = concatMap(n, function(el) { return expand(el, false) });\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n\n return expansions;\n}\n\n","module.exports = function (xs, fn) {\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n var x = fn(xs[i], i);\n if (isArray(x)) res.push.apply(res, x);\n else res.push(x);\n }\n return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * Default configs.\n */\nvar DEFAULT_DELIMITER = '/'\nvar DEFAULT_DELIMITERS = './'\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\"]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined]\n '(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = (options && options.delimiter) || DEFAULT_DELIMITER\n var delimiters = (options && options.delimiters) || DEFAULT_DELIMITERS\n var pathEscaped = false\n var res\n\n while ((res = PATH_REGEXP.exec(str)) !== null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n pathEscaped = true\n continue\n }\n\n var prev = ''\n var next = str[index]\n var name = res[2]\n var capture = res[3]\n var group = res[4]\n var modifier = res[5]\n\n if (!pathEscaped && path.length) {\n var k = path.length - 1\n\n if (delimiters.indexOf(path[k]) > -1) {\n prev = path[k]\n path = path.slice(0, k)\n }\n }\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n pathEscaped = false\n }\n\n var partial = prev !== '' && next !== undefined && next !== prev\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var delimiter = prev || defaultDelimiter\n var pattern = capture || group\n\n tokens.push({\n name: name || key++,\n prefix: prev,\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n pattern: pattern ? escapeGroup(pattern) : '[^' + escapeString(delimiter) + ']+?'\n })\n }\n\n // Push any remaining characters.\n if (path || index < str.length) {\n tokens.push(path + str.substr(index))\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options))\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$')\n }\n }\n\n return function (data, options) {\n var path = ''\n var encode = (options && options.encode) || encodeURIComponent\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n continue\n }\n\n var value = data ? data[token.name] : undefined\n var segment\n\n if (Array.isArray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but got array')\n }\n\n if (value.length === 0) {\n if (token.optional) continue\n\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j], token)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\"')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n segment = encode(String(value), token)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but got \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n continue\n }\n\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) path += token.prefix\n\n continue\n }\n\n throw new TypeError('Expected \"' + token.name + '\" to be ' + (token.repeat ? 'an array' : 'a string'))\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$/()])/g, '\\\\$1')\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {Array=} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n if (!keys) return path\n\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n pattern: null\n })\n }\n }\n\n return path\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n return new RegExp('(?:' + parts.join('|') + ')', flags(options))\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {Array=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {Array=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n options = options || {}\n\n var strict = options.strict\n var end = options.end !== false\n var delimiter = escapeString(options.delimiter || DEFAULT_DELIMITER)\n var delimiters = options.delimiters || DEFAULT_DELIMITERS\n var endsWith = [].concat(options.endsWith || []).map(escapeString).concat('$').join('|')\n var route = ''\n var isEndDelimited = tokens.length === 0\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n isEndDelimited = i === tokens.length - 1 && delimiters.indexOf(token[token.length - 1]) > -1\n } else {\n var prefix = escapeString(token.prefix)\n var capture = token.repeat\n ? '(?:' + token.pattern + ')(?:' + prefix + '(?:' + token.pattern + '))*'\n : token.pattern\n\n if (keys) keys.push(token)\n\n if (token.optional) {\n if (token.partial) {\n route += prefix + '(' + capture + ')?'\n } else {\n route += '(?:' + prefix + '(' + capture + '))?'\n }\n } else {\n route += prefix + '(' + capture + ')'\n }\n }\n }\n\n if (end) {\n if (!strict) route += '(?:' + delimiter + ')?'\n\n route += endsWith === '$' ? '$' : '(?=' + endsWith + ')'\n } else {\n if (!strict) route += '(?:' + delimiter + '(?=' + endsWith + '))?'\n if (!isEndDelimited) route += '(?=' + delimiter + '|' + endsWith + ')'\n }\n\n return new RegExp('^' + route, flags(options))\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {Array=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (path instanceof RegExp) {\n return regexpToRegexp(path, keys)\n }\n\n if (Array.isArray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), keys, options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), keys, options)\n}\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = bytes;\nmodule.exports.format = format;\nmodule.exports.parse = parse;\n\n/**\n * Module variables.\n * @private\n */\n\nvar formatThousandsRegExp = /\\B(?=(\\d{3})+(?!\\d))/g;\n\nvar formatDecimalsRegExp = /(?:\\.0*|(\\.[^0]+)0+)$/;\n\nvar map = {\n b: 1,\n kb: 1 << 10,\n mb: 1 << 20,\n gb: 1 << 30,\n tb: ((1 << 30) * 1024)\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb)$/i;\n\n/**\n * Convert the given value in bytes into a string or parse to string to an integer in bytes.\n *\n * @param {string|number} value\n * @param {{\n * case: [string],\n * decimalPlaces: [number]\n * fixedDecimals: [boolean]\n * thousandsSeparator: [string]\n * unitSeparator: [string]\n * }} [options] bytes options.\n *\n * @returns {string|number|null}\n */\n\nfunction bytes(value, options) {\n if (typeof value === 'string') {\n return parse(value);\n }\n\n if (typeof value === 'number') {\n return format(value, options);\n }\n\n return null;\n}\n\n/**\n * Format the given value in bytes into a string.\n *\n * If the value is negative, it is kept as such. If it is a float,\n * it is rounded.\n *\n * @param {number} value\n * @param {object} [options]\n * @param {number} [options.decimalPlaces=2]\n * @param {number} [options.fixedDecimals=false]\n * @param {string} [options.thousandsSeparator=]\n * @param {string} [options.unit=]\n * @param {string} [options.unitSeparator=]\n *\n * @returns {string|null}\n * @public\n */\n\nfunction format(value, options) {\n if (!Number.isFinite(value)) {\n return null;\n }\n\n var mag = Math.abs(value);\n var thousandsSeparator = (options && options.thousandsSeparator) || '';\n var unitSeparator = (options && options.unitSeparator) || '';\n var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;\n var fixedDecimals = Boolean(options && options.fixedDecimals);\n var unit = (options && options.unit) || '';\n\n if (!unit || !map[unit.toLowerCase()]) {\n if (mag >= map.tb) {\n unit = 'TB';\n } else if (mag >= map.gb) {\n unit = 'GB';\n } else if (mag >= map.mb) {\n unit = 'MB';\n } else if (mag >= map.kb) {\n unit = 'KB';\n } else {\n unit = 'B';\n }\n }\n\n var val = value / map[unit.toLowerCase()];\n var str = val.toFixed(decimalPlaces);\n\n if (!fixedDecimals) {\n str = str.replace(formatDecimalsRegExp, '$1');\n }\n\n if (thousandsSeparator) {\n str = str.replace(formatThousandsRegExp, thousandsSeparator);\n }\n\n return str + unitSeparator + unit;\n}\n\n/**\n * Parse the string value into an integer in bytes.\n *\n * If no unit is given, it is assumed the value is in bytes.\n *\n * @param {number|string} val\n *\n * @returns {number|null}\n * @public\n */\n\nfunction parse(val) {\n if (typeof val === 'number' && !isNaN(val)) {\n return val;\n }\n\n if (typeof val !== 'string') {\n return null;\n }\n\n // Test if the string passed is valid\n var results = parseRegExp.exec(val);\n var floatValue;\n var unit = 'b';\n\n if (!results) {\n // Nothing could be extracted from the given string\n floatValue = parseInt(val, 10);\n unit = 'b'\n } else {\n // Retrieve the value and the unit\n floatValue = parseFloat(results[1]);\n unit = results[4].toLowerCase();\n }\n\n return Math.floor(map[unit] * floatValue);\n}\n","/*!\n * content-disposition\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n */\n\nmodule.exports = contentDisposition\nmodule.exports.parse = parse\n\n/**\n * Module dependencies.\n */\n\nvar basename = require('path').basename\n\n/**\n * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including \"%\")\n */\n\nvar ENCODE_URL_ATTR_CHAR_REGEXP = /[\\x00-\\x20\"'()*,/:;<=>?@[\\\\\\]{}\\x7f]/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match percent encoding escape.\n */\n\nvar HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/\nvar HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g\n\n/**\n * RegExp to match non-latin1 characters.\n */\n\nvar NON_LATIN1_REGEXP = /[^\\x20-\\x7e\\xa0-\\xff]/g\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR = \n */\n\nvar QESC_REGEXP = /\\\\([\\u0000-\\u007f])/g\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n */\n\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp for various RFC 2616 grammar\n *\n * parameter = token \"=\" ( token | quoted-string )\n * token = 1*\n * separators = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n * | \",\" | \";\" | \":\" | \"\\\" | <\">\n * | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n * | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext = >\n * quoted-pair = \"\\\" CHAR\n * CHAR = \n * TEXT = \n * LWS = [CRLF] 1*( SP | HT )\n * CRLF = CR LF\n * CR = \n * LF = \n * SP = \n * HT = \n * CTL = \n * OCTET = \n */\n\nvar PARAM_REGEXP = /;[\\x09\\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*=[\\x09\\x20]*(\"(?:[\\x20!\\x23-\\x5b\\x5d-\\x7e\\x80-\\xff]|\\\\[\\x20-\\x7e])*\"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*/g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\x20-\\x7e\\x80-\\xff]+$/\nvar TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/\n\n/**\n * RegExp for various RFC 5987 grammar\n *\n * ext-value = charset \"'\" [ language ] \"'\" value-chars\n * charset = \"UTF-8\" / \"ISO-8859-1\" / mime-charset\n * mime-charset = 1*mime-charsetc\n * mime-charsetc = ALPHA / DIGIT\n * / \"!\" / \"#\" / \"$\" / \"%\" / \"&\"\n * / \"+\" / \"-\" / \"^\" / \"_\" / \"`\"\n * / \"{\" / \"}\" / \"~\"\n * language = ( 2*3ALPHA [ extlang ] )\n * / 4ALPHA\n * / 5*8ALPHA\n * extlang = *3( \"-\" 3ALPHA )\n * value-chars = *( pct-encoded / attr-char )\n * pct-encoded = \"%\" HEXDIG HEXDIG\n * attr-char = ALPHA / DIGIT\n * / \"!\" / \"#\" / \"$\" / \"&\" / \"+\" / \"-\" / \".\"\n * / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n */\n\nvar EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/\n\n/**\n * RegExp for various RFC 6266 grammar\n *\n * disposition-type = \"inline\" | \"attachment\" | disp-ext-type\n * disp-ext-type = token\n * disposition-parm = filename-parm | disp-ext-parm\n * filename-parm = \"filename\" \"=\" value\n * | \"filename*\" \"=\" ext-value\n * disp-ext-parm = token \"=\" value\n * | ext-token \"=\" ext-value\n * ext-token = \n */\n\nvar DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*(?:$|;)/ // eslint-disable-line no-control-regex\n\n/**\n * Create an attachment Content-Disposition header.\n *\n * @param {string} [filename]\n * @param {object} [options]\n * @param {string} [options.type=attachment]\n * @param {string|boolean} [options.fallback=true]\n * @return {string}\n * @api public\n */\n\nfunction contentDisposition (filename, options) {\n var opts = options || {}\n\n // get type\n var type = opts.type || 'attachment'\n\n // get parameters\n var params = createparams(filename, opts.fallback)\n\n // format into string\n return format(new ContentDisposition(type, params))\n}\n\n/**\n * Create parameters object from filename and fallback.\n *\n * @param {string} [filename]\n * @param {string|boolean} [fallback=true]\n * @return {object}\n * @api private\n */\n\nfunction createparams (filename, fallback) {\n if (filename === undefined) {\n return\n }\n\n var params = {}\n\n if (typeof filename !== 'string') {\n throw new TypeError('filename must be a string')\n }\n\n // fallback defaults to true\n if (fallback === undefined) {\n fallback = true\n }\n\n if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {\n throw new TypeError('fallback must be a string or boolean')\n }\n\n if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {\n throw new TypeError('fallback must be ISO-8859-1 string')\n }\n\n // restrict to file base name\n var name = basename(filename)\n\n // determine if name is suitable for quoted string\n var isQuotedString = TEXT_REGEXP.test(name)\n\n // generate fallback name\n var fallbackName = typeof fallback !== 'string'\n ? fallback && getlatin1(name)\n : basename(fallback)\n var hasFallback = typeof fallbackName === 'string' && fallbackName !== name\n\n // set extended filename parameter\n if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {\n params['filename*'] = name\n }\n\n // set filename parameter\n if (isQuotedString || hasFallback) {\n params.filename = hasFallback\n ? fallbackName\n : name\n }\n\n return params\n}\n\n/**\n * Format object to Content-Disposition header.\n *\n * @param {object} obj\n * @param {string} obj.type\n * @param {object} [obj.parameters]\n * @return {string}\n * @api private\n */\n\nfunction format (obj) {\n var parameters = obj.parameters\n var type = obj.type\n\n if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {\n throw new TypeError('invalid type')\n }\n\n // start with normalized type\n var string = String(type).toLowerCase()\n\n // append parameters\n if (parameters && typeof parameters === 'object') {\n var param\n var params = Object.keys(parameters).sort()\n\n for (var i = 0; i < params.length; i++) {\n param = params[i]\n\n var val = param.substr(-1) === '*'\n ? ustring(parameters[param])\n : qstring(parameters[param])\n\n string += '; ' + param + '=' + val\n }\n }\n\n return string\n}\n\n/**\n * Decode a RFC 6987 field value (gracefully).\n *\n * @param {string} str\n * @return {string}\n * @api private\n */\n\nfunction decodefield (str) {\n var match = EXT_VALUE_REGEXP.exec(str)\n\n if (!match) {\n throw new TypeError('invalid extended field value')\n }\n\n var charset = match[1].toLowerCase()\n var encoded = match[2]\n var value\n\n // to binary string\n var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)\n\n switch (charset) {\n case 'iso-8859-1':\n value = getlatin1(binary)\n break\n case 'utf-8':\n value = new Buffer(binary, 'binary').toString('utf8')\n break\n default:\n throw new TypeError('unsupported charset in extended field')\n }\n\n return value\n}\n\n/**\n * Get ISO-8859-1 version of string.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction getlatin1 (val) {\n // simple Unicode -> ISO-8859-1 transformation\n return String(val).replace(NON_LATIN1_REGEXP, '?')\n}\n\n/**\n * Parse Content-Disposition header string.\n *\n * @param {string} string\n * @return {object}\n * @api private\n */\n\nfunction parse (string) {\n if (!string || typeof string !== 'string') {\n throw new TypeError('argument string is required')\n }\n\n var match = DISPOSITION_TYPE_REGEXP.exec(string)\n\n if (!match) {\n throw new TypeError('invalid type format')\n }\n\n // normalize type\n var index = match[0].length\n var type = match[1].toLowerCase()\n\n var key\n var names = []\n var params = {}\n var value\n\n // calculate index to start at\n index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';'\n ? index - 1\n : index\n\n // match parameters\n while ((match = PARAM_REGEXP.exec(string))) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (names.indexOf(key) !== -1) {\n throw new TypeError('invalid duplicate parameter')\n }\n\n names.push(key)\n\n if (key.indexOf('*') + 1 === key.length) {\n // decode extended value\n key = key.slice(0, -1)\n value = decodefield(value)\n\n // overwrite existing value\n params[key] = value\n continue\n }\n\n if (typeof params[key] === 'string') {\n continue\n }\n\n if (value[0] === '\"') {\n // remove quotes and escapes\n value = value\n .substr(1, value.length - 2)\n .replace(QESC_REGEXP, '$1')\n }\n\n params[key] = value\n }\n\n if (index !== -1 && index !== string.length) {\n throw new TypeError('invalid parameter format')\n }\n\n return new ContentDisposition(type, params)\n}\n\n/**\n * Percent decode a single character.\n *\n * @param {string} str\n * @param {string} hex\n * @return {string}\n * @api private\n */\n\nfunction pdecode (str, hex) {\n return String.fromCharCode(parseInt(hex, 16))\n}\n\n/**\n * Percent encode a single character.\n *\n * @param {string} char\n * @return {string}\n * @api private\n */\n\nfunction pencode (char) {\n var hex = String(char)\n .charCodeAt(0)\n .toString(16)\n .toUpperCase()\n return hex.length === 1\n ? '%0' + hex\n : '%' + hex\n}\n\n/**\n * Quote a string for HTTP.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction qstring (val) {\n var str = String(val)\n\n return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Encode a Unicode string for HTTP (RFC 5987).\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction ustring (val) {\n var str = String(val)\n\n // percent encode as UTF-8\n var encoded = encodeURIComponent(str)\n .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)\n\n return 'UTF-8\\'\\'' + encoded\n}\n\n/**\n * Class for parsed Content-Disposition header for v8 optimization\n */\n\nfunction ContentDisposition (type, parameters) {\n this.type = type\n this.parameters = parameters\n}\n","\"use strict\";\n\nvar path = require(\"path\");\n\nmodule.exports = function (thePath, potentialParent) {\n // For inside-directory checking, we want to allow trailing slashes, so normalize.\n thePath = stripTrailingSep(thePath);\n potentialParent = stripTrailingSep(potentialParent);\n\n // Node treats only Windows as case-insensitive in its path module; we follow those conventions.\n if (process.platform === \"win32\") {\n thePath = thePath.toLowerCase();\n potentialParent = potentialParent.toLowerCase();\n }\n\n return thePath.lastIndexOf(potentialParent, 0) === 0 &&\n\t\t(\n\t\t\tthePath[potentialParent.length] === path.sep ||\n\t\t\tthePath[potentialParent.length] === undefined\n\t\t);\n};\n\nfunction stripTrailingSep(thePath) {\n if (thePath[thePath.length - 1] === path.sep) {\n return thePath.slice(0, -1);\n }\n return thePath;\n}\n","/*!\n * range-parser\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = rangeParser\n\n/**\n * Parse \"Range\" header `str` relative to the given file `size`.\n *\n * @param {Number} size\n * @param {String} str\n * @param {Object} [options]\n * @return {Array}\n * @public\n */\n\nfunction rangeParser (size, str, options) {\n var index = str.indexOf('=')\n\n if (index === -1) {\n return -2\n }\n\n // split the range string\n var arr = str.slice(index + 1).split(',')\n var ranges = []\n\n // add ranges type\n ranges.type = str.slice(0, index)\n\n // parse all ranges\n for (var i = 0; i < arr.length; i++) {\n var range = arr[i].split('-')\n var start = parseInt(range[0], 10)\n var end = parseInt(range[1], 10)\n\n // -nnn\n if (isNaN(start)) {\n start = size - end\n end = size - 1\n // nnn-\n } else if (isNaN(end)) {\n end = size - 1\n }\n\n // limit last-byte-pos to current length\n if (end > size - 1) {\n end = size - 1\n }\n\n // invalid or unsatisifiable\n if (isNaN(start) || isNaN(end) || start > end || start < 0) {\n continue\n }\n\n // add range\n ranges.push({\n start: start,\n end: end\n })\n }\n\n if (ranges.length < 1) {\n // unsatisifiable\n return -1\n }\n\n return options && options.combine\n ? combineRanges(ranges)\n : ranges\n}\n\n/**\n * Combine overlapping & adjacent ranges.\n * @private\n */\n\nfunction combineRanges (ranges) {\n var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)\n\n for (var j = 0, i = 1; i < ordered.length; i++) {\n var range = ordered[i]\n var current = ordered[j]\n\n if (range.start > current.end + 1) {\n // next range\n ordered[++j] = range\n } else if (range.end > current.end) {\n // extend range\n current.end = range.end\n current.index = Math.min(current.index, range.index)\n }\n }\n\n // trim ordered array\n ordered.length = j + 1\n\n // generate combined range\n var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)\n\n // copy ranges type\n combined.type = ranges.type\n\n return combined\n}\n\n/**\n * Map function to add index value to ranges.\n * @private\n */\n\nfunction mapWithIndex (range, index) {\n return {\n start: range.start,\n end: range.end,\n index: index\n }\n}\n\n/**\n * Map function to remove index value from ranges.\n * @private\n */\n\nfunction mapWithoutIndex (range) {\n return {\n start: range.start,\n end: range.end\n }\n}\n\n/**\n * Sort function to sort ranges by index.\n * @private\n */\n\nfunction sortByRangeIndex (a, b) {\n return a.index - b.index\n}\n\n/**\n * Sort function to sort ranges by start position.\n * @private\n */\n\nfunction sortByRangeStart (a, b) {\n return a.start - b.start\n}\n","(function(){function directory(it\n) {\nvar encodeHTML = typeof _encodeHTML !== 'undefined' ? _encodeHTML : (function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"/\": \"/\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());var out=' Files within '+encodeHTML(it.directory)+'

Index of  ';var arr1=it.paths;if(arr1){var value,index=-1,l1=arr1.length-1;while(index'+encodeHTML(value.name)+' ';} } out+='

';return out;\n}var itself=directory, _encodeHTML=(function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"/\": \"/\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());if(typeof module!=='undefined' && module.exports) module.exports=itself;else if(typeof define==='function')define(function(){return itself;});else {window.render=window.render||{};window.render['directory']=itself;}}());","(function(){function error(it\n) {\nvar out='
'+(it.statusCode)+'

'+(it.message)+'

';return out;\n}var itself=error, _encodeHTML=(function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"/\": \"/\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());if(typeof module!=='undefined' && module.exports) module.exports=itself;else if(typeof define==='function')define(function(){return itself;});else {window.render=window.render||{};window.render['error']=itself;}}());","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createProxyMiddleware = void 0;\nconst http_proxy_middleware_1 = require(\"./http-proxy-middleware\");\nfunction createProxyMiddleware(context, options) {\n const { middleware } = new http_proxy_middleware_1.HttpProxyMiddleware(context, options);\n return middleware;\n}\nexports.createProxyMiddleware = createProxyMiddleware;\n__exportStar(require(\"./handlers\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HttpProxyMiddleware = void 0;\nconst httpProxy = require(\"http-proxy\");\nconst config_factory_1 = require(\"./config-factory\");\nconst contextMatcher = require(\"./context-matcher\");\nconst handlers = require(\"./_handlers\");\nconst logger_1 = require(\"./logger\");\nconst PathRewriter = require(\"./path-rewriter\");\nconst Router = require(\"./router\");\nclass HttpProxyMiddleware {\n constructor(context, opts) {\n this.logger = logger_1.getInstance();\n this.wsInternalSubscribed = false;\n this.serverOnCloseSubscribed = false;\n // https://github.com/Microsoft/TypeScript/wiki/'this'-in-TypeScript#red-flags-for-this\n this.middleware = async (req, res, next) => {\n var _a, _b;\n if (this.shouldProxy(this.config.context, req)) {\n try {\n const activeProxyOptions = await this.prepareProxyRequest(req);\n this.proxy.web(req, res, activeProxyOptions);\n }\n catch (err) {\n next(err);\n }\n }\n else {\n next();\n }\n /**\n * Get the server object to subscribe to server events;\n * 'upgrade' for websocket and 'close' for graceful shutdown\n *\n * NOTE:\n * req.socket: node >= 13\n * req.connection: node < 13 (Remove this when node 12/13 support is dropped)\n */\n const server = (_b = ((_a = req.socket) !== null && _a !== void 0 ? _a : req.connection)) === null || _b === void 0 ? void 0 : _b.server;\n if (server && !this.serverOnCloseSubscribed) {\n server.on('close', () => {\n this.logger.info('[HPM] server close signal received: closing proxy server');\n this.proxy.close();\n });\n this.serverOnCloseSubscribed = true;\n }\n if (this.proxyOptions.ws === true) {\n // use initial request to access the server object to subscribe to http upgrade event\n this.catchUpgradeRequest(server);\n }\n };\n this.catchUpgradeRequest = (server) => {\n if (!this.wsInternalSubscribed) {\n server.on('upgrade', this.handleUpgrade);\n // prevent duplicate upgrade handling;\n // in case external upgrade is also configured\n this.wsInternalSubscribed = true;\n }\n };\n this.handleUpgrade = async (req, socket, head) => {\n if (this.shouldProxy(this.config.context, req)) {\n const activeProxyOptions = await this.prepareProxyRequest(req);\n this.proxy.ws(req, socket, head, activeProxyOptions);\n this.logger.info('[HPM] Upgrading to WebSocket');\n }\n };\n /**\n * Determine whether request should be proxied.\n *\n * @private\n * @param {String} context [description]\n * @param {Object} req [description]\n * @return {Boolean}\n */\n this.shouldProxy = (context, req) => {\n const path = req.originalUrl || req.url;\n return contextMatcher.match(context, path, req);\n };\n /**\n * Apply option.router and option.pathRewrite\n * Order matters:\n * Router uses original path for routing;\n * NOT the modified path, after it has been rewritten by pathRewrite\n * @param {Object} req\n * @return {Object} proxy options\n */\n this.prepareProxyRequest = async (req) => {\n // https://github.com/chimurai/http-proxy-middleware/issues/17\n // https://github.com/chimurai/http-proxy-middleware/issues/94\n req.url = req.originalUrl || req.url;\n // store uri before it gets rewritten for logging\n const originalPath = req.url;\n const newProxyOptions = Object.assign({}, this.proxyOptions);\n // Apply in order:\n // 1. option.router\n // 2. option.pathRewrite\n await this.applyRouter(req, newProxyOptions);\n await this.applyPathRewrite(req, this.pathRewriter);\n // debug logging for both http(s) and websockets\n if (this.proxyOptions.logLevel === 'debug') {\n const arrow = logger_1.getArrow(originalPath, req.url, this.proxyOptions.target, newProxyOptions.target);\n this.logger.debug('[HPM] %s %s %s %s', req.method, originalPath, arrow, newProxyOptions.target);\n }\n return newProxyOptions;\n };\n // Modify option.target when router present.\n this.applyRouter = async (req, options) => {\n let newTarget;\n if (options.router) {\n newTarget = await Router.getTarget(req, options);\n if (newTarget) {\n this.logger.debug('[HPM] Router new target: %s -> \"%s\"', options.target, newTarget);\n options.target = newTarget;\n }\n }\n };\n // rewrite path\n this.applyPathRewrite = async (req, pathRewriter) => {\n if (pathRewriter) {\n const path = await pathRewriter(req.url, req);\n if (typeof path === 'string') {\n req.url = path;\n }\n else {\n this.logger.info('[HPM] pathRewrite: No rewritten path found. (%s)', req.url);\n }\n }\n };\n this.logError = (err, req, res, target) => {\n var _a;\n const hostname = ((_a = req.headers) === null || _a === void 0 ? void 0 : _a.host) || req.hostname || req.host; // (websocket) || (node0.10 || node 4/5)\n const requestHref = `${hostname}${req.url}`;\n const targetHref = `${target === null || target === void 0 ? void 0 : target.href}`; // target is undefined when websocket errors\n const errorMessage = '[HPM] Error occurred while proxying request %s to %s [%s] (%s)';\n const errReference = 'https://nodejs.org/api/errors.html#errors_common_system_errors'; // link to Node Common Systems Errors page\n this.logger.error(errorMessage, requestHref, targetHref, err.code || err, errReference);\n };\n this.config = config_factory_1.createConfig(context, opts);\n this.proxyOptions = this.config.options;\n // create proxy\n this.proxy = httpProxy.createProxyServer({});\n this.logger.info(`[HPM] Proxy created: ${this.config.context} -> ${this.proxyOptions.target}`);\n this.pathRewriter = PathRewriter.createPathRewriter(this.proxyOptions.pathRewrite); // returns undefined when \"pathRewrite\" is not provided\n // attach handler to http-proxy events\n handlers.init(this.proxy, this.proxyOptions);\n // log errors for debug purpose\n this.proxy.on('error', this.logError);\n // https://github.com/chimurai/http-proxy-middleware/issues/19\n // expose function to upgrade externally\n this.middleware.upgrade = (req, socket, head) => {\n if (!this.wsInternalSubscribed) {\n this.handleUpgrade(req, socket, head);\n }\n };\n }\n}\nexports.HttpProxyMiddleware = HttpProxyMiddleware;\n","/*!\n * Caron dimonio, con occhi di bragia\n * loro accennando, tutte le raccoglie;\n * batte col remo qualunque s’adagia \n *\n * Charon the demon, with the eyes of glede,\n * Beckoning to them, collects them all together,\n * Beats with his oar whoever lags behind\n * \n * Dante - The Divine Comedy (Canto III)\n */\n\nmodule.exports = require('./lib/http-proxy');","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createConfig = void 0;\nconst isPlainObj = require(\"is-plain-obj\");\nconst url = require(\"url\");\nconst errors_1 = require(\"./errors\");\nconst logger_1 = require(\"./logger\");\nconst logger = logger_1.getInstance();\nfunction createConfig(context, opts) {\n // structure of config object to be returned\n const config = {\n context: undefined,\n options: {},\n };\n // app.use('/api', proxy({target:'http://localhost:9000'}));\n if (isContextless(context, opts)) {\n config.context = '/';\n config.options = Object.assign(config.options, context);\n // app.use('/api', proxy('http://localhost:9000'));\n // app.use(proxy('http://localhost:9000/api'));\n }\n else if (isStringShortHand(context)) {\n const oUrl = url.parse(context);\n const target = [oUrl.protocol, '//', oUrl.host].join('');\n config.context = oUrl.pathname || '/';\n config.options = Object.assign(config.options, { target }, opts);\n if (oUrl.protocol === 'ws:' || oUrl.protocol === 'wss:') {\n config.options.ws = true;\n }\n // app.use('/api', proxy({target:'http://localhost:9000'}));\n }\n else {\n config.context = context;\n config.options = Object.assign(config.options, opts);\n }\n configureLogger(config.options);\n if (!config.options.target && !config.options.router) {\n throw new Error(errors_1.ERRORS.ERR_CONFIG_FACTORY_TARGET_MISSING);\n }\n return config;\n}\nexports.createConfig = createConfig;\n/**\n * Checks if a String only target/config is provided.\n * This can be just the host or with the optional path.\n *\n * @example\n * app.use('/api', proxy('http://localhost:9000'));\n * app.use(proxy('http://localhost:9000/api'));\n *\n * @param {String} context [description]\n * @return {Boolean} [description]\n */\nfunction isStringShortHand(context) {\n if (typeof context === 'string') {\n return !!url.parse(context).host;\n }\n}\n/**\n * Checks if a Object only config is provided, without a context.\n * In this case the all paths will be proxied.\n *\n * @example\n * app.use('/api', proxy({target:'http://localhost:9000'}));\n *\n * @param {Object} context [description]\n * @param {*} opts [description]\n * @return {Boolean} [description]\n */\nfunction isContextless(context, opts) {\n return isPlainObj(context) && (opts == null || Object.keys(opts).length === 0);\n}\nfunction configureLogger(options) {\n if (options.logLevel) {\n logger.setLevel(options.logLevel);\n }\n if (options.logProvider) {\n logger.setProvider(options.logProvider);\n }\n}\n","'use strict';\n\nmodule.exports = value => {\n\tif (Object.prototype.toString.call(value) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === null || prototype === Object.prototype;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ERRORS = void 0;\nvar ERRORS;\n(function (ERRORS) {\n ERRORS[\"ERR_CONFIG_FACTORY_TARGET_MISSING\"] = \"[HPM] Missing \\\"target\\\" option. Example: {target: \\\"http://www.example.org\\\"}\";\n ERRORS[\"ERR_CONTEXT_MATCHER_GENERIC\"] = \"[HPM] Invalid context. Expecting something like: \\\"/api\\\" or [\\\"/api\\\", \\\"/ajax\\\"]\";\n ERRORS[\"ERR_CONTEXT_MATCHER_INVALID_ARRAY\"] = \"[HPM] Invalid context. Expecting something like: [\\\"/api\\\", \\\"/ajax\\\"] or [\\\"/api/**\\\", \\\"!**.html\\\"]\";\n ERRORS[\"ERR_PATH_REWRITER_CONFIG\"] = \"[HPM] Invalid pathRewrite config. Expecting object with pathRewrite config or a rewrite function\";\n})(ERRORS = exports.ERRORS || (exports.ERRORS = {}));\n","\"use strict\";\n/* eslint-disable prefer-rest-params */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getArrow = exports.getInstance = void 0;\nconst util = require(\"util\");\nlet loggerInstance;\nconst defaultProvider = {\n // tslint:disable: no-console\n log: console.log,\n debug: console.log,\n info: console.info,\n warn: console.warn,\n error: console.error,\n};\n// log level 'weight'\nvar LEVELS;\n(function (LEVELS) {\n LEVELS[LEVELS[\"debug\"] = 10] = \"debug\";\n LEVELS[LEVELS[\"info\"] = 20] = \"info\";\n LEVELS[LEVELS[\"warn\"] = 30] = \"warn\";\n LEVELS[LEVELS[\"error\"] = 50] = \"error\";\n LEVELS[LEVELS[\"silent\"] = 80] = \"silent\";\n})(LEVELS || (LEVELS = {}));\nfunction getInstance() {\n if (!loggerInstance) {\n loggerInstance = new Logger();\n }\n return loggerInstance;\n}\nexports.getInstance = getInstance;\nclass Logger {\n constructor() {\n this.setLevel('info');\n this.setProvider(() => defaultProvider);\n }\n // log will log messages, regardless of logLevels\n log() {\n this.provider.log(this._interpolate.apply(null, arguments));\n }\n debug() {\n if (this._showLevel('debug')) {\n this.provider.debug(this._interpolate.apply(null, arguments));\n }\n }\n info() {\n if (this._showLevel('info')) {\n this.provider.info(this._interpolate.apply(null, arguments));\n }\n }\n warn() {\n if (this._showLevel('warn')) {\n this.provider.warn(this._interpolate.apply(null, arguments));\n }\n }\n error() {\n if (this._showLevel('error')) {\n this.provider.error(this._interpolate.apply(null, arguments));\n }\n }\n setLevel(v) {\n if (this.isValidLevel(v)) {\n this.logLevel = v;\n }\n }\n setProvider(fn) {\n if (fn && this.isValidProvider(fn)) {\n this.provider = fn(defaultProvider);\n }\n }\n isValidProvider(fnProvider) {\n const result = true;\n if (fnProvider && typeof fnProvider !== 'function') {\n throw new Error('[HPM] Log provider config error. Expecting a function.');\n }\n return result;\n }\n isValidLevel(levelName) {\n const validLevels = Object.keys(LEVELS);\n const isValid = validLevels.includes(levelName);\n if (!isValid) {\n throw new Error('[HPM] Log level error. Invalid logLevel.');\n }\n return isValid;\n }\n /**\n * Decide to log or not to log, based on the log levels 'weight'\n * @param {String} showLevel [debug, info, warn, error, silent]\n * @return {Boolean}\n */\n _showLevel(showLevel) {\n let result = false;\n const currentLogLevel = LEVELS[this.logLevel];\n if (currentLogLevel && currentLogLevel <= LEVELS[showLevel]) {\n result = true;\n }\n return result;\n }\n // make sure logged messages and its data are return interpolated\n // make it possible for additional log data, such date/time or custom prefix.\n _interpolate(format, ...args) {\n const result = util.format(format, ...args);\n return result;\n }\n}\n/**\n * -> normal proxy\n * => router\n * ~> pathRewrite\n * ≈> router + pathRewrite\n *\n * @param {String} originalPath\n * @param {String} newPath\n * @param {String} originalTarget\n * @param {String} newTarget\n * @return {String}\n */\nfunction getArrow(originalPath, newPath, originalTarget, newTarget) {\n const arrow = ['>'];\n const isNewTarget = originalTarget !== newTarget; // router\n const isNewPath = originalPath !== newPath; // pathRewrite\n if (isNewPath && !isNewTarget) {\n arrow.unshift('~');\n }\n else if (!isNewPath && isNewTarget) {\n arrow.unshift('=');\n }\n else if (isNewPath && isNewTarget) {\n arrow.unshift('≈');\n }\n else {\n arrow.unshift('-');\n }\n return arrow.join('');\n}\nexports.getArrow = getArrow;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.match = void 0;\nconst isGlob = require(\"is-glob\");\nconst micromatch = require(\"micromatch\");\nconst url = require(\"url\");\nconst errors_1 = require(\"./errors\");\nfunction match(context, uri, req) {\n // single path\n if (isStringPath(context)) {\n return matchSingleStringPath(context, uri);\n }\n // single glob path\n if (isGlobPath(context)) {\n return matchSingleGlobPath(context, uri);\n }\n // multi path\n if (Array.isArray(context)) {\n if (context.every(isStringPath)) {\n return matchMultiPath(context, uri);\n }\n if (context.every(isGlobPath)) {\n return matchMultiGlobPath(context, uri);\n }\n throw new Error(errors_1.ERRORS.ERR_CONTEXT_MATCHER_INVALID_ARRAY);\n }\n // custom matching\n if (typeof context === 'function') {\n const pathname = getUrlPathName(uri);\n return context(pathname, req);\n }\n throw new Error(errors_1.ERRORS.ERR_CONTEXT_MATCHER_GENERIC);\n}\nexports.match = match;\n/**\n * @param {String} context '/api'\n * @param {String} uri 'http://example.org/api/b/c/d.html'\n * @return {Boolean}\n */\nfunction matchSingleStringPath(context, uri) {\n const pathname = getUrlPathName(uri);\n return pathname.indexOf(context) === 0;\n}\nfunction matchSingleGlobPath(pattern, uri) {\n const pathname = getUrlPathName(uri);\n const matches = micromatch([pathname], pattern);\n return matches && matches.length > 0;\n}\nfunction matchMultiGlobPath(patternList, uri) {\n return matchSingleGlobPath(patternList, uri);\n}\n/**\n * @param {String} contextList ['/api', '/ajax']\n * @param {String} uri 'http://example.org/api/b/c/d.html'\n * @return {Boolean}\n */\nfunction matchMultiPath(contextList, uri) {\n let isMultiPath = false;\n for (const context of contextList) {\n if (matchSingleStringPath(context, uri)) {\n isMultiPath = true;\n break;\n }\n }\n return isMultiPath;\n}\n/**\n * Parses URI and returns RFC 3986 path\n *\n * @param {String} uri from req.url\n * @return {String} RFC 3986 path\n */\nfunction getUrlPathName(uri) {\n return uri && url.parse(uri).pathname;\n}\nfunction isStringPath(context) {\n return typeof context === 'string' && !isGlob(context);\n}\nfunction isGlobPath(context) {\n return isGlob(context);\n}\n","/*!\n * is-glob \n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictCheck = function(str) {\n if (str[0] === '!') {\n return true;\n }\n var index = 0;\n var pipeIndex = -2;\n var closeSquareIndex = -2;\n var closeCurlyIndex = -2;\n var closeParenIndex = -2;\n var backSlashIndex = -2;\n while (index < str.length) {\n if (str[index] === '*') {\n return true;\n }\n\n if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n return true;\n }\n\n if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n if (closeSquareIndex < index) {\n closeSquareIndex = str.indexOf(']', index);\n }\n if (closeSquareIndex > index) {\n if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n return true;\n }\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n return true;\n }\n }\n }\n\n if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n closeCurlyIndex = str.indexOf('}', index);\n if (closeCurlyIndex > index) {\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n return true;\n }\n }\n }\n\n if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n closeParenIndex = str.indexOf(')', index);\n if (closeParenIndex > index) {\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n return true;\n }\n }\n }\n\n if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n if (pipeIndex < index) {\n pipeIndex = str.indexOf('|', index);\n }\n if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n closeParenIndex = str.indexOf(')', pipeIndex);\n if (closeParenIndex > pipeIndex) {\n backSlashIndex = str.indexOf('\\\\', pipeIndex);\n if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n return true;\n }\n }\n }\n }\n\n if (str[index] === '\\\\') {\n var open = str[index + 1];\n index += 2;\n var close = chars[open];\n\n if (close) {\n var n = str.indexOf(close, index);\n if (n !== -1) {\n index = n + 1;\n }\n }\n\n if (str[index] === '!') {\n return true;\n }\n } else {\n index++;\n }\n }\n return false;\n};\n\nvar relaxedCheck = function(str) {\n if (str[0] === '!') {\n return true;\n }\n var index = 0;\n while (index < str.length) {\n if (/[*?{}()[\\]]/.test(str[index])) {\n return true;\n }\n\n if (str[index] === '\\\\') {\n var open = str[index + 1];\n index += 2;\n var close = chars[open];\n\n if (close) {\n var n = str.indexOf(close, index);\n if (n !== -1) {\n index = n + 1;\n }\n }\n\n if (str[index] === '!') {\n return true;\n }\n } else {\n index++;\n }\n }\n return false;\n};\n\nmodule.exports = function isGlob(str, options) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n if (isExtglob(str)) {\n return true;\n }\n\n var check = strictCheck;\n\n // optionally relax check\n if (options && options.strict === false) {\n check = relaxedCheck;\n }\n\n return check(str);\n};\n","/*!\n * is-extglob \n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n var match;\n while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n if (match[2]) return true;\n str = str.slice(match.index + match[0].length);\n }\n\n return false;\n};\n","'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\nconst isEmptyString = val => val === '' || val === './';\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array} `list` List of strings to match.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n patterns = [].concat(patterns);\n list = [].concat(list);\n\n let omit = new Set();\n let keep = new Set();\n let items = new Set();\n let negatives = 0;\n\n let onResult = state => {\n items.add(state.output);\n if (options && options.onResult) {\n options.onResult(state);\n }\n };\n\n for (let i = 0; i < patterns.length; i++) {\n let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n if (negated) negatives++;\n\n for (let item of list) {\n let matched = isMatch(item, true);\n\n let match = negated ? !matched.isMatch : matched.isMatch;\n if (!match) continue;\n\n if (negated) {\n omit.add(matched.output);\n } else {\n omit.delete(matched.output);\n keep.add(matched.output);\n }\n }\n }\n\n let result = negatives === patterns.length ? [...items] : [...keep];\n let matches = result.filter(item => !omit.has(item));\n\n if (options && matches.length === 0) {\n if (options.failglob === true) {\n throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n }\n\n if (options.nonull === true || options.nullglob === true) {\n return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n }\n }\n\n return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `[options]` See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n patterns = [].concat(patterns).map(String);\n let result = new Set();\n let items = [];\n\n let onResult = state => {\n if (options.onResult) options.onResult(state);\n items.push(state.output);\n };\n\n let matches = micromatch(list, patterns, { ...options, onResult });\n\n for (let item of items) {\n if (!matches.includes(item)) {\n result.add(item);\n }\n }\n return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any of the patterns matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n if (Array.isArray(pattern)) {\n return pattern.some(p => micromatch.contains(str, p, options));\n }\n\n if (typeof pattern === 'string') {\n if (isEmptyString(str) || isEmptyString(pattern)) {\n return false;\n }\n\n if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n return true;\n }\n }\n\n return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n if (!utils.isObject(obj)) {\n throw new TypeError('Expected the first argument to be an object');\n }\n let keys = micromatch(Object.keys(obj), patterns, options);\n let res = {};\n for (let key of keys) res[key] = obj[key];\n return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (items.some(item => isMatch(item))) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (!items.every(item => isMatch(item))) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n let posix = utils.isWindows(options);\n let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n if (match) {\n return match.slice(1).map(v => v === void 0 ? '' : v);\n }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n let res = [];\n for (let pattern of [].concat(patterns || [])) {\n for (let str of braces(String(pattern), options)) {\n res.push(picomatch.parse(str, options));\n }\n }\n return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n if ((options && options.nobrace === true) || !/\\{.*\\}/.test(pattern)) {\n return [pattern];\n }\n return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\nmodule.exports = micromatch;\n","'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n let output = [];\n\n if (Array.isArray(input)) {\n for (let pattern of input) {\n let result = braces.create(pattern, options);\n if (Array.isArray(result)) {\n output.push(...result);\n } else {\n output.push(result);\n }\n }\n } else {\n output = [].concat(braces.create(input, options));\n }\n\n if (options && options.expand === true && options.nodupes === true) {\n output = [...new Set(output)];\n }\n return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n if (typeof input === 'string') {\n return stringify(braces.parse(input, options), options);\n }\n return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n\n let result = expand(input, options);\n\n // filter out empty strings if specified\n if (options.noempty === true) {\n result = result.filter(Boolean);\n }\n\n // filter out duplicates if specified\n if (options.nodupes === true) {\n result = [...new Set(result)];\n }\n\n return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n if (input === '' || input.length < 3) {\n return [input];\n }\n\n return options.expand !== true\n ? braces.compile(input, options)\n : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n","'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n let stringify = (node, parent = {}) => {\n let invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n let invalidNode = node.invalid === true && options.escapeInvalid === true;\n let output = '';\n\n if (node.value) {\n if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n return '\\\\' + node.value;\n }\n return node.value;\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes) {\n for (let child of node.nodes) {\n output += stringify(child);\n }\n }\n return output;\n };\n\n return stringify(ast);\n};\n\n","'use strict';\n\nexports.isInteger = num => {\n if (typeof num === 'number') {\n return Number.isInteger(num);\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isInteger(Number(num));\n }\n return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n if (limit === false) return false;\n if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n let node = block.nodes[n];\n if (!node) return;\n\n if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n if (node.escaped !== true) {\n node.value = '\\\\' + node.value;\n node.escaped = true;\n }\n }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n if (node.type !== 'brace') return false;\n if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n node.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n if (block.type !== 'brace') return false;\n if (block.invalid === true || block.dollar) return true;\n if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n block.invalid = true;\n return true;\n }\n if (block.open !== true || block.close !== true) {\n block.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n if (node.type === 'open' || node.type === 'close') {\n return true;\n }\n return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n if (node.type === 'text') acc.push(node.value);\n if (node.type === 'range') node.type = 'text';\n return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n const result = [];\n const flat = arr => {\n for (let i = 0; i < arr.length; i++) {\n let ele = arr[i];\n Array.isArray(ele) ? flat(ele, result) : ele !== void 0 && result.push(ele);\n }\n return result;\n };\n flat(args);\n return result;\n};\n","'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n let walk = (node, parent = {}) => {\n let invalidBlock = utils.isInvalidBrace(parent);\n let invalidNode = node.invalid === true && options.escapeInvalid === true;\n let invalid = invalidBlock === true || invalidNode === true;\n let prefix = options.escapeInvalid === true ? '\\\\' : '';\n let output = '';\n\n if (node.isOpen === true) {\n return prefix + node.value;\n }\n if (node.isClose === true) {\n return prefix + node.value;\n }\n\n if (node.type === 'open') {\n return invalid ? (prefix + node.value) : '(';\n }\n\n if (node.type === 'close') {\n return invalid ? (prefix + node.value) : ')';\n }\n\n if (node.type === 'comma') {\n return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes && node.ranges > 0) {\n let args = utils.reduce(node.nodes);\n let range = fill(...args, { ...options, wrap: false, toRegex: true });\n\n if (range.length !== 0) {\n return args.length > 1 && range.length > 1 ? `(${range})` : range;\n }\n }\n\n if (node.nodes) {\n for (let child of node.nodes) {\n output += walk(child, node);\n }\n }\n return output;\n };\n\n return walk(ast);\n};\n\nmodule.exports = compile;\n","/*!\n * fill-range \n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n let value = `${input}`;\n let index = -1;\n if (value[0] === '-') value = value.slice(1);\n if (value === '0') return false;\n while (value[++index] === '0');\n return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n if (typeof start === 'string' || typeof end === 'string') {\n return true;\n }\n return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n if (maxLength > 0) {\n let dash = input[0] === '-' ? '-' : '';\n if (dash) input = input.slice(1);\n input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n }\n if (toNumber === false) {\n return String(input);\n }\n return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n let negative = input[0] === '-' ? '-' : '';\n if (negative) {\n input = input.slice(1);\n maxLength--;\n }\n while (input.length < maxLength) input = '0' + input;\n return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options) => {\n parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n let prefix = options.capture ? '' : '?:';\n let positives = '';\n let negatives = '';\n let result;\n\n if (parts.positives.length) {\n positives = parts.positives.join('|');\n }\n\n if (parts.negatives.length) {\n negatives = `-(${prefix}${parts.negatives.join('|')})`;\n }\n\n if (positives && negatives) {\n result = `${positives}|${negatives}`;\n } else {\n result = positives || negatives;\n }\n\n if (options.wrap) {\n return `(${prefix}${result})`;\n }\n\n return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n if (isNumbers) {\n return toRegexRange(a, b, { wrap: false, ...options });\n }\n\n let start = String.fromCharCode(a);\n if (a === b) return start;\n\n let stop = String.fromCharCode(b);\n return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n if (Array.isArray(start)) {\n let wrap = options.wrap === true;\n let prefix = options.capture ? '' : '?:';\n return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n }\n return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n};\n\nconst invalidStep = (step, options) => {\n if (options.strictRanges === true) {\n throw new TypeError(`Expected step \"${step}\" to be a number`);\n }\n return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n let a = Number(start);\n let b = Number(end);\n\n if (!Number.isInteger(a) || !Number.isInteger(b)) {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n }\n\n // fix negative zero\n if (a === 0) a = 0;\n if (b === 0) b = 0;\n\n let descending = a > b;\n let startString = String(start);\n let endString = String(end);\n let stepString = String(step);\n step = Math.max(Math.abs(step), 1);\n\n let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n let toNumber = padded === false && stringify(start, end, options) === false;\n let format = options.transform || transform(toNumber);\n\n if (options.toRegex && step === 1) {\n return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n }\n\n let parts = { negatives: [], positives: [] };\n let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n if (options.toRegex === true && step > 1) {\n push(a);\n } else {\n range.push(pad(format(a, index), maxLen, toNumber));\n }\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return step > 1\n ? toSequence(parts, options)\n : toRegex(range, null, { wrap: false, ...options });\n }\n\n return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n return invalidRange(start, end, options);\n }\n\n\n let format = options.transform || (val => String.fromCharCode(val));\n let a = `${start}`.charCodeAt(0);\n let b = `${end}`.charCodeAt(0);\n\n let descending = a > b;\n let min = Math.min(a, b);\n let max = Math.max(a, b);\n\n if (options.toRegex && step === 1) {\n return toRange(min, max, false, options);\n }\n\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n range.push(format(a, index));\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return toRegex(range, null, { wrap: false, options });\n }\n\n return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n if (end == null && isValidValue(start)) {\n return [start];\n }\n\n if (!isValidValue(start) || !isValidValue(end)) {\n return invalidRange(start, end, options);\n }\n\n if (typeof step === 'function') {\n return fill(start, end, 1, { transform: step });\n }\n\n if (isObject(step)) {\n return fill(start, end, 0, step);\n }\n\n let opts = { ...options };\n if (opts.capture === true) opts.wrap = true;\n step = step || opts.step || 1;\n\n if (!isNumber(step)) {\n if (step != null && !isObject(step)) return invalidStep(step, opts);\n return fill(start, end, 1, step);\n }\n\n if (isNumber(start) && isNumber(end)) {\n return fillNumbers(start, end, step, opts);\n }\n\n return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n","/*!\n * to-regex-range \n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n if (isNumber(min) === false) {\n throw new TypeError('toRegexRange: expected the first argument to be a number');\n }\n\n if (max === void 0 || min === max) {\n return String(min);\n }\n\n if (isNumber(max) === false) {\n throw new TypeError('toRegexRange: expected the second argument to be a number.');\n }\n\n let opts = { relaxZeros: true, ...options };\n if (typeof opts.strictZeros === 'boolean') {\n opts.relaxZeros = opts.strictZeros === false;\n }\n\n let relax = String(opts.relaxZeros);\n let shorthand = String(opts.shorthand);\n let capture = String(opts.capture);\n let wrap = String(opts.wrap);\n let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n return toRegexRange.cache[cacheKey].result;\n }\n\n let a = Math.min(min, max);\n let b = Math.max(min, max);\n\n if (Math.abs(a - b) === 1) {\n let result = min + '|' + max;\n if (opts.capture) {\n return `(${result})`;\n }\n if (opts.wrap === false) {\n return result;\n }\n return `(?:${result})`;\n }\n\n let isPadded = hasPadding(min) || hasPadding(max);\n let state = { min, max, a, b };\n let positives = [];\n let negatives = [];\n\n if (isPadded) {\n state.isPadded = isPadded;\n state.maxLen = String(state.max).length;\n }\n\n if (a < 0) {\n let newMin = b < 0 ? Math.abs(b) : 1;\n negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n a = state.a = 0;\n }\n\n if (b >= 0) {\n positives = splitToPatterns(a, b, state, opts);\n }\n\n state.negatives = negatives;\n state.positives = positives;\n state.result = collatePatterns(negatives, positives, opts);\n\n if (opts.capture === true) {\n state.result = `(${state.result})`;\n } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n state.result = `(?:${state.result})`;\n }\n\n toRegexRange.cache[cacheKey] = state;\n return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n let nines = 1;\n let zeros = 1;\n\n let stop = countNines(min, nines);\n let stops = new Set([max]);\n\n while (min <= stop && stop <= max) {\n stops.add(stop);\n nines += 1;\n stop = countNines(min, nines);\n }\n\n stop = countZeros(max + 1, zeros) - 1;\n\n while (min < stop && stop <= max) {\n stops.add(stop);\n zeros += 1;\n stop = countZeros(max + 1, zeros) - 1;\n }\n\n stops = [...stops];\n stops.sort(compare);\n return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n if (start === stop) {\n return { pattern: start, count: [], digits: 0 };\n }\n\n let zipped = zip(start, stop);\n let digits = zipped.length;\n let pattern = '';\n let count = 0;\n\n for (let i = 0; i < digits; i++) {\n let [startDigit, stopDigit] = zipped[i];\n\n if (startDigit === stopDigit) {\n pattern += startDigit;\n\n } else if (startDigit !== '0' || stopDigit !== '9') {\n pattern += toCharacterClass(startDigit, stopDigit, options);\n\n } else {\n count++;\n }\n }\n\n if (count) {\n pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n }\n\n return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n let ranges = splitToRanges(min, max);\n let tokens = [];\n let start = min;\n let prev;\n\n for (let i = 0; i < ranges.length; i++) {\n let max = ranges[i];\n let obj = rangeToPattern(String(start), String(max), options);\n let zeros = '';\n\n if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n if (prev.count.length > 1) {\n prev.count.pop();\n }\n\n prev.count.push(obj.count[0]);\n prev.string = prev.pattern + toQuantifier(prev.count);\n start = max + 1;\n continue;\n }\n\n if (tok.isPadded) {\n zeros = padZeros(max, tok, options);\n }\n\n obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n tokens.push(obj);\n start = max + 1;\n prev = obj;\n }\n\n return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n let result = [];\n\n for (let ele of arr) {\n let { string } = ele;\n\n // only push if _both_ are negative...\n if (!intersection && !contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n\n // or _both_ are positive\n if (intersection && contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n }\n return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n let arr = [];\n for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n return arr;\n}\n\nfunction compare(a, b) {\n return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n let [start = 0, stop = ''] = digits;\n if (stop || start > 1) {\n return `{${start + (stop ? ',' + stop : '')}}`;\n }\n return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n if (!tok.isPadded) {\n return value;\n }\n\n let diff = Math.abs(tok.maxLen - String(value).length);\n let relax = options.relaxZeros !== false;\n\n switch (diff) {\n case 0:\n return '';\n case 1:\n return relax ? '0?' : '0';\n case 2:\n return relax ? '0{0,2}' : '00';\n default: {\n return relax ? `0{0,${diff}}` : `0{${diff}}`;\n }\n }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n","/*!\n * is-number \n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n if (typeof num === 'number') {\n return num - num === 0;\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n }\n return false;\n};\n","'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n let result = [];\n\n queue = [].concat(queue);\n stash = [].concat(stash);\n\n if (!stash.length) return queue;\n if (!queue.length) {\n return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n }\n\n for (let item of queue) {\n if (Array.isArray(item)) {\n for (let value of item) {\n result.push(append(value, stash, enclose));\n }\n } else {\n for (let ele of stash) {\n if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele));\n }\n }\n }\n return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;\n\n let walk = (node, parent = {}) => {\n node.queue = [];\n\n let p = parent;\n let q = parent.queue;\n\n while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n p = p.parent;\n q = p.queue;\n }\n\n if (node.invalid || node.dollar) {\n q.push(append(q.pop(), stringify(node, options)));\n return;\n }\n\n if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n q.push(append(q.pop(), ['{}']));\n return;\n }\n\n if (node.nodes && node.ranges > 0) {\n let args = utils.reduce(node.nodes);\n\n if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n }\n\n let range = fill(...args, options);\n if (range.length === 0) {\n range = stringify(node, options);\n }\n\n q.push(append(q.pop(), range));\n node.nodes = [];\n return;\n }\n\n let enclose = utils.encloseBrace(node);\n let queue = node.queue;\n let block = node;\n\n while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n block = block.parent;\n queue = block.queue;\n }\n\n for (let i = 0; i < node.nodes.length; i++) {\n let child = node.nodes[i];\n\n if (child.type === 'comma' && node.type === 'brace') {\n if (i === 1) queue.push('');\n queue.push('');\n continue;\n }\n\n if (child.type === 'close') {\n q.push(append(q.pop(), queue, enclose));\n continue;\n }\n\n if (child.value && child.type !== 'open') {\n queue.push(append(queue.pop(), child.value));\n continue;\n }\n\n if (child.nodes) {\n walk(child, node);\n }\n }\n\n return queue;\n };\n\n return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n","'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n CHAR_BACKSLASH, /* \\ */\n CHAR_BACKTICK, /* ` */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n CHAR_DOUBLE_QUOTE, /* \" */\n CHAR_SINGLE_QUOTE, /* ' */\n CHAR_NO_BREAK_SPACE,\n CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n let opts = options || {};\n let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n if (input.length > max) {\n throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n }\n\n let ast = { type: 'root', input, nodes: [] };\n let stack = [ast];\n let block = ast;\n let prev = ast;\n let brackets = 0;\n let length = input.length;\n let index = 0;\n let depth = 0;\n let value;\n let memo = {};\n\n /**\n * Helpers\n */\n\n const advance = () => input[index++];\n const push = node => {\n if (node.type === 'text' && prev.type === 'dot') {\n prev.type = 'text';\n }\n\n if (prev && prev.type === 'text' && node.type === 'text') {\n prev.value += node.value;\n return;\n }\n\n block.nodes.push(node);\n node.parent = block;\n node.prev = prev;\n prev = node;\n return node;\n };\n\n push({ type: 'bos' });\n\n while (index < length) {\n block = stack[stack.length - 1];\n value = advance();\n\n /**\n * Invalid chars\n */\n\n if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n continue;\n }\n\n /**\n * Escaped chars\n */\n\n if (value === CHAR_BACKSLASH) {\n push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n continue;\n }\n\n /**\n * Right square bracket (literal): ']'\n */\n\n if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n push({ type: 'text', value: '\\\\' + value });\n continue;\n }\n\n /**\n * Left square bracket: '['\n */\n\n if (value === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n\n let closed = true;\n let next;\n\n while (index < length && (next = advance())) {\n value += next;\n\n if (next === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n continue;\n }\n\n if (next === CHAR_BACKSLASH) {\n value += advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n brackets--;\n\n if (brackets === 0) {\n break;\n }\n }\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === CHAR_LEFT_PARENTHESES) {\n block = push({ type: 'paren', nodes: [] });\n stack.push(block);\n push({ type: 'text', value });\n continue;\n }\n\n if (value === CHAR_RIGHT_PARENTHESES) {\n if (block.type !== 'paren') {\n push({ type: 'text', value });\n continue;\n }\n block = stack.pop();\n push({ type: 'text', value });\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Quotes: '|\"|`\n */\n\n if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n let open = value;\n let next;\n\n if (options.keepQuotes !== true) {\n value = '';\n }\n\n while (index < length && (next = advance())) {\n if (next === CHAR_BACKSLASH) {\n value += next + advance();\n continue;\n }\n\n if (next === open) {\n if (options.keepQuotes === true) value += next;\n break;\n }\n\n value += next;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Left curly brace: '{'\n */\n\n if (value === CHAR_LEFT_CURLY_BRACE) {\n depth++;\n\n let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n let brace = {\n type: 'brace',\n open: true,\n close: false,\n dollar,\n depth,\n commas: 0,\n ranges: 0,\n nodes: []\n };\n\n block = push(brace);\n stack.push(block);\n push({ type: 'open', value });\n continue;\n }\n\n /**\n * Right curly brace: '}'\n */\n\n if (value === CHAR_RIGHT_CURLY_BRACE) {\n if (block.type !== 'brace') {\n push({ type: 'text', value });\n continue;\n }\n\n let type = 'close';\n block = stack.pop();\n block.close = true;\n\n push({ type, value });\n depth--;\n\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Comma: ','\n */\n\n if (value === CHAR_COMMA && depth > 0) {\n if (block.ranges > 0) {\n block.ranges = 0;\n let open = block.nodes.shift();\n block.nodes = [open, { type: 'text', value: stringify(block) }];\n }\n\n push({ type: 'comma', value });\n block.commas++;\n continue;\n }\n\n /**\n * Dot: '.'\n */\n\n if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n let siblings = block.nodes;\n\n if (depth === 0 || siblings.length === 0) {\n push({ type: 'text', value });\n continue;\n }\n\n if (prev.type === 'dot') {\n block.range = [];\n prev.value += value;\n prev.type = 'range';\n\n if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n block.invalid = true;\n block.ranges = 0;\n prev.type = 'text';\n continue;\n }\n\n block.ranges++;\n block.args = [];\n continue;\n }\n\n if (prev.type === 'range') {\n siblings.pop();\n\n let before = siblings[siblings.length - 1];\n before.value += prev.value + value;\n prev = before;\n block.ranges--;\n continue;\n }\n\n push({ type: 'dot', value });\n continue;\n }\n\n /**\n * Text\n */\n\n push({ type: 'text', value });\n }\n\n // Mark imbalanced braces and brackets as invalid\n do {\n block = stack.pop();\n\n if (block.type !== 'root') {\n block.nodes.forEach(node => {\n if (!node.nodes) {\n if (node.type === 'open') node.isOpen = true;\n if (node.type === 'close') node.isClose = true;\n if (!node.nodes) node.type = 'text';\n node.invalid = true;\n }\n });\n\n // get the location of the block on parent.nodes (block's siblings)\n let parent = stack[stack.length - 1];\n let index = parent.nodes.indexOf(block);\n // replace the (invalid) block with it's nodes\n parent.nodes.splice(index, 1, ...block.nodes);\n }\n } while (stack.length > 0);\n\n push({ type: 'eos' });\n return ast;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n\n // Digits\n CHAR_0: '0', /* 0 */\n CHAR_9: '9', /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 'A', /* A */\n CHAR_LOWERCASE_A: 'a', /* a */\n CHAR_UPPERCASE_Z: 'Z', /* Z */\n CHAR_LOWERCASE_Z: 'z', /* z */\n\n CHAR_LEFT_PARENTHESES: '(', /* ( */\n CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n CHAR_ASTERISK: '*', /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: '&', /* & */\n CHAR_AT: '@', /* @ */\n CHAR_BACKSLASH: '\\\\', /* \\ */\n CHAR_BACKTICK: '`', /* ` */\n CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n CHAR_COLON: ':', /* : */\n CHAR_COMMA: ',', /* , */\n CHAR_DOLLAR: '$', /* . */\n CHAR_DOT: '.', /* . */\n CHAR_DOUBLE_QUOTE: '\"', /* \" */\n CHAR_EQUAL: '=', /* = */\n CHAR_EXCLAMATION_MARK: '!', /* ! */\n CHAR_FORM_FEED: '\\f', /* \\f */\n CHAR_FORWARD_SLASH: '/', /* / */\n CHAR_HASH: '#', /* # */\n CHAR_HYPHEN_MINUS: '-', /* - */\n CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n CHAR_LEFT_CURLY_BRACE: '{', /* { */\n CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n CHAR_LINE_FEED: '\\n', /* \\n */\n CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n CHAR_PERCENT: '%', /* % */\n CHAR_PLUS: '+', /* + */\n CHAR_QUESTION_MARK: '?', /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n CHAR_SEMICOLON: ';', /* ; */\n CHAR_SINGLE_QUOTE: '\\'', /* ' */\n CHAR_SPACE: ' ', /* */\n CHAR_TAB: '\\t', /* \\t */\n CHAR_UNDERSCORE: '_', /* _ */\n CHAR_VERTICAL_LINE: '|', /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getHandlers = exports.init = void 0;\nconst logger_1 = require(\"./logger\");\nconst logger = logger_1.getInstance();\nfunction init(proxy, option) {\n const handlers = getHandlers(option);\n for (const eventName of Object.keys(handlers)) {\n proxy.on(eventName, handlers[eventName]);\n }\n logger.debug('[HPM] Subscribed to http-proxy events:', Object.keys(handlers));\n}\nexports.init = init;\nfunction getHandlers(options) {\n // https://github.com/nodejitsu/node-http-proxy#listening-for-proxy-events\n const proxyEventsMap = {\n error: 'onError',\n proxyReq: 'onProxyReq',\n proxyReqWs: 'onProxyReqWs',\n proxyRes: 'onProxyRes',\n open: 'onOpen',\n close: 'onClose',\n };\n const handlers = {};\n for (const [eventName, onEventName] of Object.entries(proxyEventsMap)) {\n // all handlers for the http-proxy events are prefixed with 'on'.\n // loop through options and try to find these handlers\n // and add them to the handlers object for subscription in init().\n const fnHandler = options ? options[onEventName] : null;\n if (typeof fnHandler === 'function') {\n handlers[eventName] = fnHandler;\n }\n }\n // add default error handler in absence of error handler\n if (typeof handlers.error !== 'function') {\n handlers.error = defaultErrorHandler;\n }\n // add default close handler in absence of close handler\n if (typeof handlers.close !== 'function') {\n handlers.close = logClose;\n }\n return handlers;\n}\nexports.getHandlers = getHandlers;\nfunction defaultErrorHandler(err, req, res) {\n // Re-throw error. Not recoverable since req & res are empty.\n if (!req && !res) {\n throw err; // \"Error: Must provide a proper URL as target\"\n }\n const host = req.headers && req.headers.host;\n const code = err.code;\n if (res.writeHead && !res.headersSent) {\n if (/HPE_INVALID/.test(code)) {\n res.writeHead(502);\n }\n else {\n switch (code) {\n case 'ECONNRESET':\n case 'ENOTFOUND':\n case 'ECONNREFUSED':\n case 'ETIMEDOUT':\n res.writeHead(504);\n break;\n default:\n res.writeHead(500);\n }\n }\n }\n res.end(`Error occured while trying to proxy: ${host}${req.url}`);\n}\nfunction logClose(req, socket, head) {\n // view disconnected websocket connections\n logger.info('[HPM] Client disconnected');\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createPathRewriter = void 0;\nconst isPlainObj = require(\"is-plain-obj\");\nconst errors_1 = require(\"./errors\");\nconst logger_1 = require(\"./logger\");\nconst logger = logger_1.getInstance();\n/**\n * Create rewrite function, to cache parsed rewrite rules.\n *\n * @param {Object} rewriteConfig\n * @return {Function} Function to rewrite paths; This function should accept `path` (request.url) as parameter\n */\nfunction createPathRewriter(rewriteConfig) {\n let rulesCache;\n if (!isValidRewriteConfig(rewriteConfig)) {\n return;\n }\n if (typeof rewriteConfig === 'function') {\n const customRewriteFn = rewriteConfig;\n return customRewriteFn;\n }\n else {\n rulesCache = parsePathRewriteRules(rewriteConfig);\n return rewritePath;\n }\n function rewritePath(path) {\n let result = path;\n for (const rule of rulesCache) {\n if (rule.regex.test(path)) {\n result = result.replace(rule.regex, rule.value);\n logger.debug('[HPM] Rewriting path from \"%s\" to \"%s\"', path, result);\n break;\n }\n }\n return result;\n }\n}\nexports.createPathRewriter = createPathRewriter;\nfunction isValidRewriteConfig(rewriteConfig) {\n if (typeof rewriteConfig === 'function') {\n return true;\n }\n else if (isPlainObj(rewriteConfig)) {\n return Object.keys(rewriteConfig).length !== 0;\n }\n else if (rewriteConfig === undefined || rewriteConfig === null) {\n return false;\n }\n else {\n throw new Error(errors_1.ERRORS.ERR_PATH_REWRITER_CONFIG);\n }\n}\nfunction parsePathRewriteRules(rewriteConfig) {\n const rules = [];\n if (isPlainObj(rewriteConfig)) {\n for (const [key] of Object.entries(rewriteConfig)) {\n rules.push({\n regex: new RegExp(key),\n value: rewriteConfig[key],\n });\n logger.info('[HPM] Proxy rewrite rule created: \"%s\" ~> \"%s\"', key, rewriteConfig[key]);\n }\n }\n return rules;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getTarget = void 0;\nconst isPlainObj = require(\"is-plain-obj\");\nconst logger_1 = require(\"./logger\");\nconst logger = logger_1.getInstance();\nasync function getTarget(req, config) {\n let newTarget;\n const router = config.router;\n if (isPlainObj(router)) {\n newTarget = getTargetFromProxyTable(req, router);\n }\n else if (typeof router === 'function') {\n newTarget = await router(req);\n }\n return newTarget;\n}\nexports.getTarget = getTarget;\nfunction getTargetFromProxyTable(req, table) {\n let result;\n const host = req.headers.host;\n const path = req.url;\n const hostAndPath = host + path;\n for (const [key] of Object.entries(table)) {\n if (containsPath(key)) {\n if (hostAndPath.indexOf(key) > -1) {\n // match 'localhost:3000/api'\n result = table[key];\n logger.debug('[HPM] Router table match: \"%s\"', key);\n break;\n }\n }\n else {\n if (key === host) {\n // match 'localhost:3000'\n result = table[key];\n logger.debug('[HPM] Router table match: \"%s\"', host);\n break;\n }\n }\n }\n return result;\n}\nfunction containsPath(v) {\n return v.indexOf('/') > -1;\n}\n","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file at\n * https://github.com/facebookincubator/create-react-app/blob/master/LICENSE\n *\n * Modified by Yuxi Evan You\n */\n\nconst fs = require('fs')\nconst os = require('os')\nconst path = require('path')\nconst colors = require('picocolors')\nconst childProcess = require('child_process')\n\nconst guessEditor = require('./guess')\nconst getArgumentsForPosition = require('./get-args')\n\nfunction wrapErrorCallback (cb) {\n return (fileName, errorMessage) => {\n console.log()\n console.log(\n colors.red('Could not open ' + path.basename(fileName) + ' in the editor.')\n )\n if (errorMessage) {\n if (errorMessage[errorMessage.length - 1] !== '.') {\n errorMessage += '.'\n }\n console.log(\n colors.red('The editor process exited with an error: ' + errorMessage)\n )\n }\n console.log()\n if (cb) cb(fileName, errorMessage)\n }\n}\n\nfunction isTerminalEditor (editor) {\n switch (editor) {\n case 'vim':\n case 'emacs':\n case 'nano':\n return true\n }\n return false\n}\n\nconst positionRE = /:(\\d+)(:(\\d+))?$/\nfunction parseFile (file) {\n const fileName = file.replace(positionRE, '')\n const match = file.match(positionRE)\n const lineNumber = match && match[1]\n const columnNumber = match && match[3]\n return {\n fileName,\n lineNumber,\n columnNumber\n }\n}\n\nlet _childProcess = null\n\nfunction launchEditor (file, specifiedEditor, onErrorCallback) {\n const parsed = parseFile(file)\n let { fileName } = parsed\n const { lineNumber, columnNumber } = parsed\n\n if (!fs.existsSync(fileName)) {\n return\n }\n\n if (typeof specifiedEditor === 'function') {\n onErrorCallback = specifiedEditor\n specifiedEditor = undefined\n }\n\n onErrorCallback = wrapErrorCallback(onErrorCallback)\n\n const [editor, ...args] = guessEditor(specifiedEditor)\n if (!editor) {\n onErrorCallback(fileName, null)\n return\n }\n\n if (\n process.platform === 'linux' &&\n fileName.startsWith('/mnt/') &&\n /Microsoft/i.test(os.release())\n ) {\n // Assume WSL / \"Bash on Ubuntu on Windows\" is being used, and\n // that the file exists on the Windows file system.\n // `os.release()` is \"4.4.0-43-Microsoft\" in the current release\n // build of WSL, see: https://github.com/Microsoft/BashOnWindows/issues/423#issuecomment-221627364\n // When a Windows editor is specified, interop functionality can\n // handle the path translation, but only if a relative path is used.\n fileName = path.relative('', fileName)\n }\n\n if (lineNumber) {\n const extraArgs = getArgumentsForPosition(editor, fileName, lineNumber, columnNumber)\n args.push.apply(args, extraArgs)\n } else {\n args.push(fileName)\n }\n\n if (_childProcess && isTerminalEditor(editor)) {\n // There's an existing editor process already and it's attached\n // to the terminal, so go kill it. Otherwise two separate editor\n // instances attach to the stdin/stdout which gets confusing.\n _childProcess.kill('SIGKILL')\n }\n\n if (process.platform === 'win32') {\n // On Windows, launch the editor in a shell because spawn can only\n // launch .exe files.\n _childProcess = childProcess.spawn(\n 'cmd.exe',\n ['/C', editor].concat(args),\n { stdio: 'inherit' }\n )\n } else {\n _childProcess = childProcess.spawn(editor, args, { stdio: 'inherit' })\n }\n _childProcess.on('exit', function (errorCode) {\n _childProcess = null\n\n if (errorCode) {\n onErrorCallback(fileName, '(code ' + errorCode + ')')\n }\n })\n\n _childProcess.on('error', function (error) {\n onErrorCallback(fileName, error.message)\n })\n}\n\nmodule.exports = launchEditor\n","let tty = require(\"tty\")\n\nlet isColorSupported =\n\t!(\"NO_COLOR\" in process.env || process.argv.includes(\"--no-color\")) &&\n\t(\"FORCE_COLOR\" in process.env ||\n\t\tprocess.argv.includes(\"--color\") ||\n\t\tprocess.platform === \"win32\" ||\n\t\t(tty.isatty(1) && process.env.TERM !== \"dumb\") ||\n\t\t\"CI\" in process.env)\n\nlet formatter =\n\t(open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input\n\t\tlet index = string.indexOf(close, open.length)\n\t\treturn ~index\n\t\t\t? open + replaceClose(string, close, replace, index) + close\n\t\t\t: open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet start = string.substring(0, index) + replace\n\tlet end = string.substring(index + close.length)\n\tlet nextIndex = end.indexOf(close)\n\treturn ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end\n}\n\nlet createColors = (enabled = isColorSupported) => ({\n\tisColorSupported: enabled,\n\treset: enabled ? s => `\\x1b[0m${s}\\x1b[0m` : String,\n\tbold: enabled ? formatter(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\") : String,\n\tdim: enabled ? formatter(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\") : String,\n\titalic: enabled ? formatter(\"\\x1b[3m\", \"\\x1b[23m\") : String,\n\tunderline: enabled ? formatter(\"\\x1b[4m\", \"\\x1b[24m\") : String,\n\tinverse: enabled ? formatter(\"\\x1b[7m\", \"\\x1b[27m\") : String,\n\thidden: enabled ? formatter(\"\\x1b[8m\", \"\\x1b[28m\") : String,\n\tstrikethrough: enabled ? formatter(\"\\x1b[9m\", \"\\x1b[29m\") : String,\n\tblack: enabled ? formatter(\"\\x1b[30m\", \"\\x1b[39m\") : String,\n\tred: enabled ? formatter(\"\\x1b[31m\", \"\\x1b[39m\") : String,\n\tgreen: enabled ? formatter(\"\\x1b[32m\", \"\\x1b[39m\") : String,\n\tyellow: enabled ? formatter(\"\\x1b[33m\", \"\\x1b[39m\") : String,\n\tblue: enabled ? formatter(\"\\x1b[34m\", \"\\x1b[39m\") : String,\n\tmagenta: enabled ? formatter(\"\\x1b[35m\", \"\\x1b[39m\") : String,\n\tcyan: enabled ? formatter(\"\\x1b[36m\", \"\\x1b[39m\") : String,\n\twhite: enabled ? formatter(\"\\x1b[37m\", \"\\x1b[39m\") : String,\n\tgray: enabled ? formatter(\"\\x1b[90m\", \"\\x1b[39m\") : String,\n\tbgBlack: enabled ? formatter(\"\\x1b[40m\", \"\\x1b[49m\") : String,\n\tbgRed: enabled ? formatter(\"\\x1b[41m\", \"\\x1b[49m\") : String,\n\tbgGreen: enabled ? formatter(\"\\x1b[42m\", \"\\x1b[49m\") : String,\n\tbgYellow: enabled ? formatter(\"\\x1b[43m\", \"\\x1b[49m\") : String,\n\tbgBlue: enabled ? formatter(\"\\x1b[44m\", \"\\x1b[49m\") : String,\n\tbgMagenta: enabled ? formatter(\"\\x1b[45m\", \"\\x1b[49m\") : String,\n\tbgCyan: enabled ? formatter(\"\\x1b[46m\", \"\\x1b[49m\") : String,\n\tbgWhite: enabled ? formatter(\"\\x1b[47m\", \"\\x1b[49m\") : String,\n})\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n","const path = require('path')\nconst shellQuote = require('shell-quote')\nconst childProcess = require('child_process')\n\n// Map from full process name to binary that starts the process\n// We can't just re-use full process name, because it will spawn a new instance\n// of the app every time\nconst COMMON_EDITORS_OSX = require('./editor-info/osx')\nconst COMMON_EDITORS_LINUX = require('./editor-info/linux')\nconst COMMON_EDITORS_WIN = require('./editor-info/windows')\n\nmodule.exports = function guessEditor (specifiedEditor) {\n if (specifiedEditor) {\n return shellQuote.parse(specifiedEditor)\n }\n // We can find out which editor is currently running by:\n // `ps x` on macOS and Linux\n // `Get-Process` on Windows\n try {\n if (process.platform === 'darwin') {\n const output = childProcess.execSync('ps x').toString()\n const processNames = Object.keys(COMMON_EDITORS_OSX)\n for (let i = 0; i < processNames.length; i++) {\n const processName = processNames[i]\n if (output.indexOf(processName) !== -1) {\n return [COMMON_EDITORS_OSX[processName]]\n }\n }\n } else if (process.platform === 'win32') {\n const output = childProcess\n .execSync('powershell -Command \"Get-Process | Select-Object Path\"', {\n stdio: ['pipe', 'pipe', 'ignore']\n })\n .toString()\n const runningProcesses = output.split('\\r\\n')\n for (let i = 0; i < runningProcesses.length; i++) {\n // `Get-Process` sometimes returns empty lines\n if (!runningProcesses[i]) {\n continue\n }\n\n const fullProcessPath = runningProcesses[i].trim()\n const shortProcessName = path.basename(fullProcessPath)\n\n if (COMMON_EDITORS_WIN.indexOf(shortProcessName) !== -1) {\n return [fullProcessPath]\n }\n }\n } else if (process.platform === 'linux') {\n // --no-heading No header line\n // x List all processes owned by you\n // -o comm Need only names column\n const output = childProcess\n .execSync('ps x --no-heading -o comm --sort=comm')\n .toString()\n const processNames = Object.keys(COMMON_EDITORS_LINUX)\n for (let i = 0; i < processNames.length; i++) {\n const processName = processNames[i]\n if (output.indexOf(processName) !== -1) {\n return [COMMON_EDITORS_LINUX[processName]]\n }\n }\n }\n } catch (error) {\n // Ignore...\n }\n\n // Last resort, use old skool env vars\n if (process.env.VISUAL) {\n return [process.env.VISUAL]\n } else if (process.env.EDITOR) {\n return [process.env.EDITOR]\n }\n\n return [null]\n}\n","exports.quote = function (xs) {\n return xs.map(function (s) {\n if (s && typeof s === 'object') {\n return s.op.replace(/(.)/g, '\\\\$1');\n }\n else if (/[\"\\s]/.test(s) && !/'/.test(s)) {\n return \"'\" + s.replace(/(['\\\\])/g, '\\\\$1') + \"'\";\n }\n else if (/[\"'\\s]/.test(s)) {\n return '\"' + s.replace(/([\"\\\\$`!])/g, '\\\\$1') + '\"';\n }\n else {\n return String(s).replace(/([A-Za-z]:)?([#!\"$&'()*,:;<=>?@\\[\\\\\\]^`{|}])/g, '$1\\\\$2');\n }\n }).join(' ');\n};\n\n// '<(' is process substitution operator and\n// can be parsed the same as control operator\nvar CONTROL = '(?:' + [\n '\\\\|\\\\|', '\\\\&\\\\&', ';;', '\\\\|\\\\&', '\\\\<\\\\(', '>>', '>\\\\&', '[&;()|<>]'\n].join('|') + ')';\nvar META = '|&;()<> \\\\t';\nvar BAREWORD = '(\\\\\\\\[\\'\"' + META + ']|[^\\\\s\\'\"' + META + '])+';\nvar SINGLE_QUOTE = '\"((\\\\\\\\\"|[^\"])*?)\"';\nvar DOUBLE_QUOTE = '\\'((\\\\\\\\\\'|[^\\'])*?)\\'';\n\nvar TOKEN = '';\nfor (var i = 0; i < 4; i++) {\n TOKEN += (Math.pow(16,8)*Math.random()).toString(16);\n}\n\nexports.parse = function (s, env, opts) {\n var mapped = parse(s, env, opts);\n if (typeof env !== 'function') return mapped;\n return mapped.reduce(function (acc, s) {\n if (typeof s === 'object') return acc.concat(s);\n var xs = s.split(RegExp('(' + TOKEN + '.*?' + TOKEN + ')', 'g'));\n if (xs.length === 1) return acc.concat(xs[0]);\n return acc.concat(xs.filter(Boolean).map(function (x) {\n if (RegExp('^' + TOKEN).test(x)) {\n return JSON.parse(x.split(TOKEN)[1]);\n }\n else return x;\n }));\n }, []);\n};\n\nfunction parse (s, env, opts) {\n var chunker = new RegExp([\n '(' + CONTROL + ')', // control chars\n '(' + BAREWORD + '|' + SINGLE_QUOTE + '|' + DOUBLE_QUOTE + ')*'\n ].join('|'), 'g');\n var match = s.match(chunker).filter(Boolean);\n var commented = false;\n\n if (!match) return [];\n if (!env) env = {};\n if (!opts) opts = {};\n return match.map(function (s, j) {\n if (commented) {\n return;\n }\n if (RegExp('^' + CONTROL + '$').test(s)) {\n return { op: s };\n }\n\n // Hand-written scanner/parser for Bash quoting rules:\n //\n // 1. inside single quotes, all characters are printed literally.\n // 2. inside double quotes, all characters are printed literally\n // except variables prefixed by '$' and backslashes followed by\n // either a double quote or another backslash.\n // 3. outside of any quotes, backslashes are treated as escape\n // characters and not printed (unless they are themselves escaped)\n // 4. quote context can switch mid-token if there is no whitespace\n // between the two quote contexts (e.g. all'one'\"token\" parses as\n // \"allonetoken\")\n var SQ = \"'\";\n var DQ = '\"';\n var DS = '$';\n var BS = opts.escape || '\\\\';\n var quote = false;\n var esc = false;\n var out = '';\n var isGlob = false;\n\n for (var i = 0, len = s.length; i < len; i++) {\n var c = s.charAt(i);\n isGlob = isGlob || (!quote && (c === '*' || c === '?'));\n if (esc) {\n out += c;\n esc = false;\n }\n else if (quote) {\n if (c === quote) {\n quote = false;\n }\n else if (quote == SQ) {\n out += c;\n }\n else { // Double quote\n if (c === BS) {\n i += 1;\n c = s.charAt(i);\n if (c === DQ || c === BS || c === DS) {\n out += c;\n } else {\n out += BS + c;\n }\n }\n else if (c === DS) {\n out += parseEnvVar();\n }\n else {\n out += c;\n }\n }\n }\n else if (c === DQ || c === SQ) {\n quote = c;\n }\n else if (RegExp('^' + CONTROL + '$').test(c)) {\n return { op: s };\n }\n else if (RegExp('^#$').test(c)) {\n commented = true;\n if (out.length){\n return [out, { comment: s.slice(i+1) + match.slice(j+1).join(' ') }];\n }\n return [{ comment: s.slice(i+1) + match.slice(j+1).join(' ') }];\n }\n else if (c === BS) {\n esc = true;\n }\n else if (c === DS) {\n out += parseEnvVar();\n }\n else out += c;\n }\n\n if (isGlob) return {op: 'glob', pattern: out};\n\n return out;\n\n function parseEnvVar() {\n i += 1;\n var varend, varname;\n //debugger\n if (s.charAt(i) === '{') {\n i += 1;\n if (s.charAt(i) === '}') {\n throw new Error(\"Bad substitution: \" + s.substr(i - 2, 3));\n }\n varend = s.indexOf('}', i);\n if (varend < 0) {\n throw new Error(\"Bad substitution: \" + s.substr(i));\n }\n varname = s.substr(i, varend - i);\n i = varend;\n }\n else if (/[*@#?$!_\\-]/.test(s.charAt(i))) {\n varname = s.charAt(i);\n i += 1;\n }\n else {\n varend = s.substr(i).match(/[^\\w\\d_]/);\n if (!varend) {\n varname = s.substr(i);\n i = s.length;\n } else {\n varname = s.substr(i, varend.index);\n i += varend.index - 1;\n }\n }\n return getVar(null, '', varname);\n }\n })\n // finalize parsed aruments\n .reduce(function(prev, arg){\n if (arg === undefined){\n return prev;\n }\n return prev.concat(arg);\n },[]);\n\n function getVar (_, pre, key) {\n var r = typeof env === 'function' ? env(key) : env[key];\n if (r === undefined && key != '')\n r = '';\n else if (r === undefined)\n r = '$';\n\n if (typeof r === 'object') {\n return pre + TOKEN + JSON.stringify(r) + TOKEN;\n }\n else return pre + r;\n }\n}\n","module.exports = {\n '/Applications/Atom.app/Contents/MacOS/Atom': 'atom',\n '/Applications/Atom Beta.app/Contents/MacOS/Atom Beta':\n '/Applications/Atom Beta.app/Contents/MacOS/Atom Beta',\n '/Applications/Brackets.app/Contents/MacOS/Brackets': 'brackets',\n '/Applications/Sublime Text.app/Contents/MacOS/Sublime Text':\n '/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl',\n '/Applications/Sublime Text.app/Contents/MacOS/sublime_text':\n '/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl',\n '/Applications/Sublime Text 2.app/Contents/MacOS/Sublime Text 2':\n '/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl',\n '/Applications/Sublime Text Dev.app/Contents/MacOS/Sublime Text':\n '/Applications/Sublime Text Dev.app/Contents/SharedSupport/bin/subl',\n '/Applications/Visual Studio Code.app/Contents/MacOS/Electron': 'code',\n '/Applications/Visual Studio Code - Insiders.app/Contents/MacOS/Electron':\n 'code-insiders',\n '/Applications/AppCode.app/Contents/MacOS/appcode':\n '/Applications/AppCode.app/Contents/MacOS/appcode',\n '/Applications/CLion.app/Contents/MacOS/clion':\n '/Applications/CLion.app/Contents/MacOS/clion',\n '/Applications/IntelliJ IDEA.app/Contents/MacOS/idea':\n '/Applications/IntelliJ IDEA.app/Contents/MacOS/idea',\n '/Applications/PhpStorm.app/Contents/MacOS/phpstorm':\n '/Applications/PhpStorm.app/Contents/MacOS/phpstorm',\n '/Applications/PyCharm.app/Contents/MacOS/pycharm':\n '/Applications/PyCharm.app/Contents/MacOS/pycharm',\n '/Applications/PyCharm CE.app/Contents/MacOS/pycharm':\n '/Applications/PyCharm CE.app/Contents/MacOS/pycharm',\n '/Applications/RubyMine.app/Contents/MacOS/rubymine':\n '/Applications/RubyMine.app/Contents/MacOS/rubymine',\n '/Applications/WebStorm.app/Contents/MacOS/webstorm':\n '/Applications/WebStorm.app/Contents/MacOS/webstorm'\n}\n","module.exports = {\n atom: 'atom',\n Brackets: 'brackets',\n code: 'code',\n emacs: 'emacs',\n 'idea.sh': 'idea',\n 'phpstorm.sh': 'phpstorm',\n 'pycharm.sh': 'pycharm',\n 'rubymine.sh': 'rubymine',\n sublime_text: 'subl',\n vim: 'vim',\n 'webstorm.sh': 'webstorm'\n}\n","module.exports = [\n 'Brackets.exe',\n 'Code.exe',\n 'atom.exe',\n 'sublime_text.exe',\n 'notepad++.exe',\n 'clion.exe',\n 'clion64.exe',\n 'idea.exe',\n 'idea64.exe',\n 'phpstorm.exe',\n 'phpstorm64.exe',\n 'pycharm.exe',\n 'pycharm64.exe',\n 'rubymine.exe',\n 'rubymine64.exe',\n 'webstorm.exe',\n 'webstorm64.exe'\n]\n","const path = require('path')\n\n// normalize file/line numbers into command line args for specific editors\nmodule.exports = function getArgumentsForPosition (\n editor,\n fileName,\n lineNumber,\n columnNumber = 1\n) {\n const editorBasename = path.basename(editor).replace(/\\.(exe|cmd|bat)$/i, '')\n switch (editorBasename) {\n case 'atom':\n case 'Atom':\n case 'Atom Beta':\n case 'subl':\n case 'sublime':\n case 'sublime_text':\n case 'wstorm':\n case 'charm':\n return [`${fileName}:${lineNumber}:${columnNumber}`]\n case 'notepad++':\n return ['-n' + lineNumber, fileName]\n case 'vim':\n case 'mvim':\n return [`+call cursor(${lineNumber}, ${columnNumber})`, fileName]\n case 'joe':\n return ['+' + `${lineNumber}`, fileName]\n case 'emacs':\n case 'emacsclient':\n return [`+${lineNumber}:${columnNumber}`, fileName]\n case 'rmate':\n case 'mate':\n case 'mine':\n return ['--line', lineNumber, fileName]\n case 'code':\n case 'code-insiders':\n case 'Code':\n return ['-r', '-g', `${fileName}:${lineNumber}:${columnNumber}`]\n case 'appcode':\n case 'clion':\n case 'clion64':\n case 'idea':\n case 'idea64':\n case 'phpstorm':\n case 'phpstorm64':\n case 'pycharm':\n case 'pycharm64':\n case 'rubymine':\n case 'rubymine64':\n case 'webstorm':\n case 'webstorm64':\n return ['--line', lineNumber, fileName]\n }\n\n // For all others, drop the lineNumber until we have\n // a mapping above, since providing the lineNumber incorrectly\n // can result in errors or confusing behavior.\n return [fileName]\n}\n","/*!\n * fresh\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2016-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to check for no-cache token in Cache-Control.\n * @private\n */\n\nvar CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\\s*?no-cache\\s*?(?:,|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = fresh\n\n/**\n * Check freshness of the response using request and response headers.\n *\n * @param {Object} reqHeaders\n * @param {Object} resHeaders\n * @return {Boolean}\n * @public\n */\n\nfunction fresh (reqHeaders, resHeaders) {\n // fields\n var modifiedSince = reqHeaders['if-modified-since']\n var noneMatch = reqHeaders['if-none-match']\n\n // unconditional request\n if (!modifiedSince && !noneMatch) {\n return false\n }\n\n // Always return stale when Cache-Control: no-cache\n // to support end-to-end reload requests\n // https://tools.ietf.org/html/rfc2616#section-14.9.4\n var cacheControl = reqHeaders['cache-control']\n if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {\n return false\n }\n\n // if-none-match\n if (noneMatch && noneMatch !== '*') {\n var etag = resHeaders['etag']\n\n if (!etag) {\n return false\n }\n\n var etagStale = true\n var matches = parseTokenList(noneMatch)\n for (var i = 0; i < matches.length; i++) {\n var match = matches[i]\n if (match === etag || match === 'W/' + etag || 'W/' + match === etag) {\n etagStale = false\n break\n }\n }\n\n if (etagStale) {\n return false\n }\n }\n\n // if-modified-since\n if (modifiedSince) {\n var lastModified = resHeaders['last-modified']\n var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince))\n\n if (modifiedStale) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n var timestamp = date && Date.parse(date)\n\n // istanbul ignore next: guard against date.js Date.parse patching\n return typeof timestamp === 'number'\n ? timestamp\n : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n var end = 0\n var list = []\n var start = 0\n\n // gather tokens\n for (var i = 0, len = str.length; i < len; i++) {\n switch (str.charCodeAt(i)) {\n case 0x20: /* */\n if (start === end) {\n start = end = i + 1\n }\n break\n case 0x2c: /* , */\n list.push(str.substring(start, end))\n start = end = i + 1\n break\n default:\n end = i + 1\n break\n }\n }\n\n // final token\n list.push(str.substring(start, end))\n\n return list\n}\n","'use strict';\n\nfunction nullthrows(x, message) {\n if (x != null) {\n return x;\n }\n var error = new Error(message !== undefined ? message : 'Got unexpected ' + x);\n error.framesToPop = 1; // Skip nullthrows's own stack frame.\n throw error;\n}\n\nmodule.exports = nullthrows;\nmodule.exports.default = nullthrows;\n\nObject.defineProperty(module.exports, '__esModule', {value: true});\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","'use strict';\n\nconst WebSocket = require('./lib/websocket');\n\nWebSocket.createWebSocketStream = require('./lib/stream');\nWebSocket.Server = require('./lib/websocket-server');\nWebSocket.Receiver = require('./lib/receiver');\nWebSocket.Sender = require('./lib/sender');\n\nmodule.exports = WebSocket;\n"],"names":["Reporter","HMRServer","Server","servers","Map","hmrServers","report","event","options","logger","serveOptions","hmrOptions","server","get","port","undefined","hmrPort","hmrServer","type","warn","message","serverOptions","projectRoot","cacheDir","publicUrl","inputFS","outputFS","set","devServer","start","hmrServerOptions","host","addMiddleware","handler","middleware","push","stop","delete","wss","buildStart","phase","emitUpdate","buildSuccess","bundleGraph","requestBundle","buildError","diagnostics","emitError","setHeaders","SOURCES_ENDPOINT","nullthrows","url","mime","WebSocket","invariant","ansiHtml","createHTTPServer","prettyDiagnostic","PromiseQueue","FS_CONCURRENCY","HMR_ENDPOINT","unresolvedError","constructor","result","listener","req","res","handle","statusCode","end","listen","stopServer","on","ws","send","JSON","stringify","err","handleSocketError","pathname","parse","originalUrl","startsWith","id","slice","length","asset","getAssetById","getHotAssetContents","then","output","setHeader","contentType","close","renderedDiagnostics","Promise","all","map","d","ansi","html","i","stack","frames","f","location","code","hints","hint","documentation","documentationURL","broadcast","changedAssets","Set","values","size","queue","maxConcurrent","runtimes","incomingDeps","getIncomingDependencies","isOnlyReferencedByRuntimes","every","dep","resolved","getResolvedAsset","isRuntime","add","runtime","dependencies","getDependencies","depsByBundle","bundle","getBundlesWithAsset","deps","getSpecifier","getAssetPublicId","getSourceURL","envHash","env","outputFormat","assets","run","getCode","publicId","sourcemap","getMap","sourcemapStringified","format","sourceRoot","fs","encodeURI","origin","msg","json","clients","meta","placeholder","specifier","path","loadConfig","relativePath","serverErrors","ejs","connect","serveHandler","createProxyMiddleware","URL","URLSearchParams","launchEditor","fresh","EDITOR_ENDPOINT","TEMPLATE_404","readFileSync","join","__dirname","TEMPLATE_500","rootPath","e","pending","pendingRequests","errors","respond","ansiDiagnostic","some","search","query","file","send500","extname","sendIndex","serve","send404","serveBundle","htmlBundleFilePaths","getBundles","filter","distDir","filePath","indexFilePath","v","dir","posix","dirname","withoutExtension","basename","sort","a","b","next","requestedPath","normalize","find","relative","serveDist","root","method","decodeURIComponent","sendError","sep","includes","isAbsolute","stat","isFile","headers","mtime","toUTCString","public","cleanUrls","lstat","realpath","createReadStream","readdir","writeHead","render","logAccessIfVerbose","verbose","applyProxyTable","app","fileInRoot","pkg","config","files","cfg","filename","context","Object","entries","use","https","resolve","reject","once","error","serverErrorList","EACCES","EADDRINUSE","desc","toString","replace"],"version":3,"file":"ServerReporter.js.map","sourceRoot":"../../../../"} \ No newline at end of file diff --git a/node_modules/@parcel/reporter-dev-server/package.json b/node_modules/@parcel/reporter-dev-server/package.json new file mode 100644 index 0000000..1a80f14 --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/package.json @@ -0,0 +1,49 @@ +{ + "name": "@parcel/reporter-dev-server", + "version": "2.8.3", + "description": "Blazing fast, zero configuration web application bundler", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/ServerReporter.js", + "source": "src/ServerReporter.js", + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "targets": { + "main": { + "includeNodeModules": { + "@parcel/plugin": false, + "@parcel/utils": false + } + } + }, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3" + }, + "devDependencies": { + "@parcel/babel-preset": "2.8.3", + "@parcel/types": "2.8.3", + "connect": "^3.7.0", + "ejs": "^3.1.6", + "fresh": "^0.5.2", + "http-proxy-middleware": "^2.0.1", + "launch-editor": "^2.3.0", + "mime-types": "2.1.18", + "nullthrows": "^1.1.1", + "serve-handler": "^6.0.0", + "ws": "^7.0.0" + }, + "gitHead": "349a6caf40ec8abb6a49fcae0765f8f8deb2073d" +} diff --git a/node_modules/@parcel/reporter-dev-server/src/HMRServer.js b/node_modules/@parcel/reporter-dev-server/src/HMRServer.js new file mode 100644 index 0000000..de9528d --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/src/HMRServer.js @@ -0,0 +1,288 @@ +// @flow + +import type { + Asset, + BundleGraph, + Dependency, + NamedBundle, + PackagedBundle, + PluginOptions, +} from '@parcel/types'; +import type {Diagnostic} from '@parcel/diagnostic'; +import type {AnsiDiagnosticResult} from '@parcel/utils'; +import type { + ServerError, + HMRServerOptions, + Request, + Response, +} from './types.js.flow'; +import {setHeaders, SOURCES_ENDPOINT} from './Server'; + +import nullthrows from 'nullthrows'; +import url from 'url'; +import mime from 'mime-types'; +import WebSocket from 'ws'; +import invariant from 'assert'; +import { + ansiHtml, + createHTTPServer, + prettyDiagnostic, + PromiseQueue, +} from '@parcel/utils'; + +export type HMRAsset = {| + id: string, + url: string, + type: string, + output: string, + envHash: string, + outputFormat: string, + depsByBundle: {[string]: {[string]: string, ...}, ...}, +|}; + +export type HMRMessage = + | {| + type: 'update', + assets: Array, + |} + | {| + type: 'error', + diagnostics: {| + ansi: Array, + html: Array<$Rest>, + |}, + |}; + +const FS_CONCURRENCY = 64; +const HMR_ENDPOINT = '/__parcel_hmr'; + +export default class HMRServer { + wss: WebSocket.Server; + unresolvedError: HMRMessage | null = null; + options: HMRServerOptions; + bundleGraph: BundleGraph | BundleGraph | null = + null; + stopServer: ?() => Promise; + + constructor(options: HMRServerOptions) { + this.options = options; + } + + async start() { + let server = this.options.devServer; + if (!server) { + let result = await createHTTPServer({ + listener: (req, res) => { + setHeaders(res); + if (!this.handle(req, res)) { + res.statusCode = 404; + res.end(); + } + }, + }); + server = result.server; + server.listen(this.options.port, this.options.host); + this.stopServer = result.stop; + } else { + this.options.addMiddleware?.((req, res) => this.handle(req, res)); + } + this.wss = new WebSocket.Server({server}); + + this.wss.on('connection', ws => { + if (this.unresolvedError) { + ws.send(JSON.stringify(this.unresolvedError)); + } + }); + + // $FlowFixMe[incompatible-exact] + this.wss.on('error', err => this.handleSocketError(err)); + } + + handle(req: Request, res: Response): boolean { + let {pathname} = url.parse(req.originalUrl || req.url); + if (pathname != null && pathname.startsWith(HMR_ENDPOINT)) { + let id = pathname.slice(HMR_ENDPOINT.length + 1); + let bundleGraph = nullthrows(this.bundleGraph); + let asset = bundleGraph.getAssetById(id); + this.getHotAssetContents(asset).then(output => { + res.setHeader('Content-Type', mime.contentType(asset.type)); + res.end(output); + }); + return true; + } + return false; + } + + async stop() { + if (this.stopServer != null) { + await this.stopServer(); + this.stopServer = null; + } + this.wss.close(); + } + + async emitError(options: PluginOptions, diagnostics: Array) { + let renderedDiagnostics = await Promise.all( + diagnostics.map(d => prettyDiagnostic(d, options)), + ); + + // store the most recent error so we can notify new connections + // and so we can broadcast when the error is resolved + this.unresolvedError = { + type: 'error', + diagnostics: { + ansi: renderedDiagnostics, + html: renderedDiagnostics.map((d, i) => { + return { + message: ansiHtml(d.message), + stack: ansiHtml(d.stack), + frames: d.frames.map(f => ({ + location: f.location, + code: ansiHtml(f.code), + })), + hints: d.hints.map(hint => ansiHtml(hint)), + documentation: diagnostics[i].documentationURL ?? '', + }; + }), + }, + }; + + this.broadcast(this.unresolvedError); + } + + async emitUpdate(event: { + +bundleGraph: BundleGraph | BundleGraph, + +changedAssets: Map, + ... + }) { + this.unresolvedError = null; + this.bundleGraph = event.bundleGraph; + + let changedAssets = new Set(event.changedAssets.values()); + if (changedAssets.size === 0) return; + + let queue = new PromiseQueue({maxConcurrent: FS_CONCURRENCY}); + for (let asset of changedAssets) { + if (asset.type !== 'js' && asset.type !== 'css') { + // If all of the incoming dependencies of the asset actually resolve to a JS asset + // rather than the original, we can mark the runtimes as changed instead. URL runtimes + // have a cache busting query param added with HMR enabled which will trigger a reload. + let runtimes = new Set(); + let incomingDeps = event.bundleGraph.getIncomingDependencies(asset); + let isOnlyReferencedByRuntimes = incomingDeps.every(dep => { + let resolved = event.bundleGraph.getResolvedAsset(dep); + let isRuntime = resolved?.type === 'js' && resolved !== asset; + if (resolved && isRuntime) { + runtimes.add(resolved); + } + return isRuntime; + }); + + if (isOnlyReferencedByRuntimes) { + for (let runtime of runtimes) { + changedAssets.add(runtime); + } + + continue; + } + } + + queue.add(async () => { + let dependencies = event.bundleGraph.getDependencies(asset); + let depsByBundle = {}; + for (let bundle of event.bundleGraph.getBundlesWithAsset(asset)) { + let deps = {}; + for (let dep of dependencies) { + let resolved = event.bundleGraph.getResolvedAsset(dep, bundle); + if (resolved) { + deps[getSpecifier(dep)] = + event.bundleGraph.getAssetPublicId(resolved); + } + } + depsByBundle[bundle.id] = deps; + } + + return { + id: event.bundleGraph.getAssetPublicId(asset), + url: this.getSourceURL(asset), + type: asset.type, + // No need to send the contents of non-JS assets to the client. + output: + asset.type === 'js' ? await this.getHotAssetContents(asset) : '', + envHash: asset.env.id, + outputFormat: asset.env.outputFormat, + depsByBundle, + }; + }); + } + + let assets = await queue.run(); + this.broadcast({ + type: 'update', + assets: assets, + }); + } + + async getHotAssetContents(asset: Asset): Promise { + let output = await asset.getCode(); + let bundleGraph = nullthrows(this.bundleGraph); + if (asset.type === 'js') { + let publicId = bundleGraph.getAssetPublicId(asset); + output = `parcelHotUpdate['${publicId}'] = function (require, module, exports) {${output}}`; + } + + let sourcemap = await asset.getMap(); + if (sourcemap) { + let sourcemapStringified = await sourcemap.stringify({ + format: 'inline', + sourceRoot: SOURCES_ENDPOINT + '/', + // $FlowFixMe + fs: asset.fs, + }); + + invariant(typeof sourcemapStringified === 'string'); + output += `\n//# sourceMappingURL=${sourcemapStringified}`; + output += `\n//# sourceURL=${encodeURI(this.getSourceURL(asset))}\n`; + } + + return output; + } + + getSourceURL(asset: Asset): string { + let origin = ''; + if (!this.options.devServer) { + origin = `http://${this.options.host || 'localhost'}:${ + this.options.port + }`; + } + return origin + HMR_ENDPOINT + '/' + asset.id; + } + + handleSocketError(err: ServerError) { + if (err.code === 'ECONNRESET') { + // This gets triggered on page refresh, ignore this + return; + } + + this.options.logger.warn({ + origin: '@parcel/reporter-dev-server', + message: `[${err.code}]: ${err.message}`, + stack: err.stack, + }); + } + + broadcast(msg: HMRMessage) { + const json = JSON.stringify(msg); + for (let ws of this.wss.clients) { + ws.send(json); + } + } +} + +function getSpecifier(dep: Dependency): string { + if (typeof dep.meta.placeholder === 'string') { + return dep.meta.placeholder; + } + + return dep.specifier; +} diff --git a/node_modules/@parcel/reporter-dev-server/src/Server.js b/node_modules/@parcel/reporter-dev-server/src/Server.js new file mode 100644 index 0000000..f974f4f --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/src/Server.js @@ -0,0 +1,478 @@ +// @flow + +import type {DevServerOptions, Request, Response} from './types.js.flow'; +import type { + BuildSuccessEvent, + BundleGraph, + FilePath, + PluginOptions, + PackagedBundle, +} from '@parcel/types'; +import type {Diagnostic} from '@parcel/diagnostic'; +import type {FileSystem} from '@parcel/fs'; +import type {HTTPServer, FormattedCodeFrame} from '@parcel/utils'; + +import invariant from 'assert'; +import path from 'path'; +import url from 'url'; +import { + ansiHtml, + createHTTPServer, + loadConfig, + prettyDiagnostic, + relativePath, +} from '@parcel/utils'; +import serverErrors from './serverErrors'; +import fs from 'fs'; +import ejs from 'ejs'; +import connect from 'connect'; +import serveHandler from 'serve-handler'; +import {createProxyMiddleware} from 'http-proxy-middleware'; +import {URL, URLSearchParams} from 'url'; +import launchEditor from 'launch-editor'; +import fresh from 'fresh'; + +export function setHeaders(res: Response) { + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader( + 'Access-Control-Allow-Methods', + 'GET, HEAD, PUT, PATCH, POST, DELETE', + ); + res.setHeader( + 'Access-Control-Allow-Headers', + 'Origin, X-Requested-With, Content-Type, Accept, Content-Type', + ); + res.setHeader('Cache-Control', 'max-age=0, must-revalidate'); +} + +export const SOURCES_ENDPOINT = '/__parcel_source_root'; +const EDITOR_ENDPOINT = '/__parcel_launch_editor'; +const TEMPLATE_404 = fs.readFileSync( + path.join(__dirname, 'templates/404.html'), + 'utf8', +); + +const TEMPLATE_500 = fs.readFileSync( + path.join(__dirname, 'templates/500.html'), + 'utf8', +); +type NextFunction = (req: Request, res: Response, next?: (any) => any) => any; + +export default class Server { + pending: boolean; + pendingRequests: Array<[Request, Response]>; + middleware: Array<(req: Request, res: Response) => boolean>; + options: DevServerOptions; + rootPath: string; + bundleGraph: BundleGraph | null; + requestBundle: ?(bundle: PackagedBundle) => Promise; + errors: Array<{| + message: string, + stack: ?string, + frames: Array, + hints: Array, + documentation: string, + |}> | null; + stopServer: ?() => Promise; + + constructor(options: DevServerOptions) { + this.options = options; + try { + this.rootPath = new URL(options.publicUrl).pathname; + } catch (e) { + this.rootPath = options.publicUrl; + } + this.pending = true; + this.pendingRequests = []; + this.middleware = []; + this.bundleGraph = null; + this.requestBundle = null; + this.errors = null; + } + + buildStart() { + this.pending = true; + } + + buildSuccess( + bundleGraph: BundleGraph, + requestBundle: (bundle: PackagedBundle) => Promise, + ) { + this.bundleGraph = bundleGraph; + this.requestBundle = requestBundle; + this.errors = null; + this.pending = false; + + if (this.pendingRequests.length > 0) { + let pendingRequests = this.pendingRequests; + this.pendingRequests = []; + for (let [req, res] of pendingRequests) { + this.respond(req, res); + } + } + } + + async buildError(options: PluginOptions, diagnostics: Array) { + this.pending = false; + this.errors = await Promise.all( + diagnostics.map(async d => { + let ansiDiagnostic = await prettyDiagnostic(d, options); + + return { + message: ansiHtml(ansiDiagnostic.message), + stack: ansiDiagnostic.stack ? ansiHtml(ansiDiagnostic.stack) : null, + frames: ansiDiagnostic.frames.map(f => ({ + location: f.location, + code: ansiHtml(f.code), + })), + hints: ansiDiagnostic.hints.map(hint => ansiHtml(hint)), + documentation: d.documentationURL ?? '', + }; + }), + ); + } + + respond(req: Request, res: Response): mixed { + if (this.middleware.some(handler => handler(req, res))) return; + let {pathname, search} = url.parse(req.originalUrl || req.url); + if (pathname == null) { + pathname = '/'; + } + + if (pathname.startsWith(EDITOR_ENDPOINT) && search) { + let query = new URLSearchParams(search); + let file = query.get('file'); + if (file) { + // File location might start with /__parcel_source_root if it came from a source map. + if (file.startsWith(SOURCES_ENDPOINT)) { + file = file.slice(SOURCES_ENDPOINT.length + 1); + } + launchEditor(file); + } + res.end(); + } else if (this.errors) { + return this.send500(req, res); + } else if (path.extname(pathname) === '') { + // If the URL doesn't start with the public path, or the URL doesn't + // have a file extension, send the main HTML bundle. + return this.sendIndex(req, res); + } else if (pathname.startsWith(SOURCES_ENDPOINT)) { + req.url = pathname.slice(SOURCES_ENDPOINT.length); + return this.serve( + this.options.inputFS, + this.options.projectRoot, + req, + res, + () => this.send404(req, res), + ); + } else if (pathname.startsWith(this.rootPath)) { + // Otherwise, serve the file from the dist folder + req.url = + this.rootPath === '/' ? pathname : pathname.slice(this.rootPath.length); + if (req.url[0] !== '/') { + req.url = '/' + req.url; + } + return this.serveBundle(req, res, () => this.sendIndex(req, res)); + } else { + return this.send404(req, res); + } + } + + sendIndex(req: Request, res: Response) { + if (this.bundleGraph) { + // If the main asset is an HTML file, serve it + let htmlBundleFilePaths = this.bundleGraph + .getBundles() + .filter(bundle => bundle.type === 'html') + .map(bundle => { + return `/${relativePath( + this.options.distDir, + bundle.filePath, + false, + )}`; + }); + + let indexFilePath = null; + if (htmlBundleFilePaths.length === 1) { + indexFilePath = htmlBundleFilePaths[0]; + } else { + indexFilePath = htmlBundleFilePaths + .filter(v => { + let dir = path.posix.dirname(v); + let withoutExtension = path.posix.basename( + v, + path.posix.extname(v), + ); + return withoutExtension === 'index' && req.url.startsWith(dir); + }) + .sort((a, b) => { + return b.length - a.length; + })[0]; + } + + if (indexFilePath) { + req.url = indexFilePath; + this.serveBundle(req, res, () => this.send404(req, res)); + } else { + this.send404(req, res); + } + } else { + this.send404(req, res); + } + } + + async serveBundle( + req: Request, + res: Response, + next: NextFunction, + ): Promise { + let bundleGraph = this.bundleGraph; + if (bundleGraph) { + let {pathname} = url.parse(req.url); + if (!pathname) { + this.send500(req, res); + return; + } + + let requestedPath = path.normalize(pathname.slice(1)); + let bundle = bundleGraph + .getBundles() + .find( + b => + path.relative(this.options.distDir, b.filePath) === requestedPath, + ); + if (!bundle) { + this.serveDist(req, res, next); + return; + } + + invariant(this.requestBundle != null); + try { + await this.requestBundle(bundle); + } catch (err) { + this.send500(req, res); + return; + } + + this.serveDist(req, res, next); + } else { + this.send404(req, res); + } + } + + serveDist( + req: Request, + res: Response, + next: NextFunction, + ): Promise | Promise { + return this.serve( + this.options.outputFS, + this.options.distDir, + req, + res, + next, + ); + } + + async serve( + fs: FileSystem, + root: FilePath, + req: Request, + res: Response, + next: NextFunction, + ): Promise { + if (req.method !== 'GET' && req.method !== 'HEAD') { + // method not allowed + res.statusCode = 405; + res.setHeader('Allow', 'GET, HEAD'); + res.setHeader('Content-Length', '0'); + res.end(); + return; + } + + try { + var filePath = url.parse(req.url).pathname || ''; + filePath = decodeURIComponent(filePath); + } catch (err) { + return this.sendError(res, 400); + } + + filePath = path.normalize('.' + path.sep + filePath); + + // malicious path + if (filePath.includes(path.sep + '..' + path.sep)) { + return this.sendError(res, 403); + } + + // join / normalize from the root dir + if (!path.isAbsolute(filePath)) { + filePath = path.normalize(path.join(root, filePath)); + } + + try { + var stat = await fs.stat(filePath); + } catch (err) { + if (err.code === 'ENOENT') { + return next(req, res); + } + + return this.sendError(res, 500); + } + + // Fall back to next handler if not a file + if (!stat || !stat.isFile()) { + return next(req, res); + } + + if (fresh(req.headers, {'last-modified': stat.mtime.toUTCString()})) { + res.statusCode = 304; + res.end(); + return; + } + + return serveHandler( + req, + res, + { + public: root, + cleanUrls: false, + }, + { + lstat: path => fs.stat(path), + realpath: path => fs.realpath(path), + createReadStream: (path, options) => fs.createReadStream(path, options), + readdir: path => fs.readdir(path), + }, + ); + } + + sendError(res: Response, statusCode: number) { + res.statusCode = statusCode; + res.end(); + } + + send404(req: Request, res: Response) { + res.statusCode = 404; + res.end(TEMPLATE_404); + } + + send500(req: Request, res: Response): void | Response { + res.setHeader('Content-Type', 'text/html; charset=utf-8'); + res.writeHead(500); + + if (this.errors) { + return res.end( + ejs.render(TEMPLATE_500, { + errors: this.errors, + hmrOptions: this.options.hmrOptions, + }), + ); + } + } + + logAccessIfVerbose(req: Request) { + this.options.logger.verbose({ + message: `Request: ${req.headers.host}${req.originalUrl || req.url}`, + }); + } + + /** + * Load proxy table from package.json and apply them. + */ + async applyProxyTable(app: any): Promise { + // avoid skipping project root + const fileInRoot: string = path.join(this.options.projectRoot, '_'); + + const pkg = await loadConfig( + this.options.inputFS, + fileInRoot, + ['.proxyrc.js', '.proxyrc', '.proxyrc.json'], + this.options.projectRoot, + ); + + if (!pkg || !pkg.config || !pkg.files) { + return this; + } + + const cfg = pkg.config; + const filename = path.basename(pkg.files[0].filePath); + + if (filename === '.proxyrc.js') { + if (typeof cfg !== 'function') { + this.options.logger.warn({ + message: + "Proxy configuration file '.proxyrc.js' should export a function. Skipping...", + }); + return this; + } + cfg(app); + } else if (filename === '.proxyrc' || filename === '.proxyrc.json') { + if (typeof cfg !== 'object') { + this.options.logger.warn({ + message: + "Proxy table in '.proxyrc' should be of object type. Skipping...", + }); + return this; + } + for (const [context, options] of Object.entries(cfg)) { + // each key is interpreted as context, and value as middleware options + app.use(createProxyMiddleware(context, options)); + } + } + + return this; + } + + async start(): Promise { + const finalHandler = (req: Request, res: Response) => { + this.logAccessIfVerbose(req); + + // Wait for the parcelInstance to finish bundling if needed + if (this.pending) { + this.pendingRequests.push([req, res]); + } else { + this.respond(req, res); + } + }; + + const app = connect(); + app.use((req, res, next) => { + setHeaders(res); + next(); + }); + await this.applyProxyTable(app); + app.use(finalHandler); + + let {server, stop} = await createHTTPServer({ + cacheDir: this.options.cacheDir, + https: this.options.https, + inputFS: this.options.inputFS, + listener: app, + outputFS: this.options.outputFS, + host: this.options.host, + }); + this.stopServer = stop; + + server.listen(this.options.port, this.options.host); + return new Promise((resolve, reject) => { + server.once('error', err => { + this.options.logger.error( + ({ + message: serverErrors(err, this.options.port), + }: Diagnostic), + ); + reject(err); + }); + + server.once('listening', () => { + resolve(server); + }); + }); + } + + async stop(): Promise { + invariant(this.stopServer != null); + await this.stopServer(); + this.stopServer = null; + } +} diff --git a/node_modules/@parcel/reporter-dev-server/src/ServerReporter.js b/node_modules/@parcel/reporter-dev-server/src/ServerReporter.js new file mode 100644 index 0000000..7809e11 --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/src/ServerReporter.js @@ -0,0 +1,121 @@ +// @flow + +import {Reporter} from '@parcel/plugin'; +import HMRServer from './HMRServer'; +import Server from './Server'; + +let servers: Map = new Map(); +let hmrServers: Map = new Map(); +export default (new Reporter({ + async report({event, options, logger}) { + let {serveOptions, hmrOptions} = options; + let server = serveOptions ? servers.get(serveOptions.port) : undefined; + let hmrPort = + (hmrOptions && hmrOptions.port) || (serveOptions && serveOptions.port); + let hmrServer = hmrPort ? hmrServers.get(hmrPort) : undefined; + switch (event.type) { + case 'watchStart': { + if (serveOptions) { + // If there's already a server when watching has just started, something + // is wrong. + if (server) { + return logger.warn({ + message: 'Trying to create the devserver but it already exists.', + }); + } + + let serverOptions = { + ...serveOptions, + projectRoot: options.projectRoot, + cacheDir: options.cacheDir, + // Override the target's publicUrl as that is likely meant for production. + // This could be configurable in the future. + publicUrl: serveOptions.publicUrl ?? '/', + inputFS: options.inputFS, + outputFS: options.outputFS, + logger, + hmrOptions, + }; + + server = new Server(serverOptions); + servers.set(serveOptions.port, server); + const devServer = await server.start(); + + if (hmrOptions && hmrOptions.port === serveOptions.port) { + let hmrServerOptions = { + port: serveOptions.port, + host: hmrOptions.host, + devServer, + addMiddleware: handler => { + server?.middleware.push(handler); + }, + logger, + }; + hmrServer = new HMRServer(hmrServerOptions); + hmrServers.set(serveOptions.port, hmrServer); + await hmrServer.start(); + return; + } + } + + let port = hmrOptions?.port; + if (typeof port === 'number') { + let hmrServerOptions = {port, host: hmrOptions?.host, logger}; + hmrServer = new HMRServer(hmrServerOptions); + hmrServers.set(port, hmrServer); + await hmrServer.start(); + } + break; + } + case 'watchEnd': + if (serveOptions) { + if (!server) { + return logger.warn({ + message: + 'Could not shutdown devserver because it does not exist.', + }); + } + await server.stop(); + servers.delete(server.options.port); + } + if (hmrOptions && hmrServer) { + await hmrServer.stop(); + // $FlowFixMe[prop-missing] + hmrServers.delete(hmrServer.wss.options.port); + } + break; + case 'buildStart': + if (server) { + server.buildStart(); + } + break; + case 'buildProgress': + if (event.phase === 'bundled' && hmrServer) { + await hmrServer.emitUpdate(event); + } + break; + case 'buildSuccess': + if (serveOptions) { + if (!server) { + return logger.warn({ + message: + 'Could not send success event to devserver because it does not exist.', + }); + } + + server.buildSuccess(event.bundleGraph, event.requestBundle); + } + break; + case 'buildFailure': + // On buildFailure watchStart sometimes has not been called yet + // do not throw an additional warning here + if (server) { + await server.buildError(options, event.diagnostics); + } + if (hmrServer) { + await hmrServer.emitError(options, event.diagnostics); + } + break; + } + }, +}): Reporter); diff --git a/node_modules/@parcel/reporter-dev-server/src/serverErrors.js b/node_modules/@parcel/reporter-dev-server/src/serverErrors.js new file mode 100644 index 0000000..05ee416 --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/src/serverErrors.js @@ -0,0 +1,21 @@ +// @flow +export type ServerError = Error & {| + code: string, +|}; + +const serverErrorList = { + EACCES: "You don't have access to bind the server to port {port}.", + EADDRINUSE: 'There is already a process listening on port {port}.', +}; + +export default function serverErrors(err: ServerError, port: number): string { + let desc = `Error: ${ + err.code + } occurred while setting up server on port ${port.toString()}.`; + + if (serverErrorList[err.code]) { + desc = serverErrorList[err.code].replace(/{port}/g, port); + } + + return desc; +} diff --git a/node_modules/@parcel/reporter-dev-server/src/templates/404.html b/node_modules/@parcel/reporter-dev-server/src/templates/404.html new file mode 100644 index 0000000..04be221 --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/src/templates/404.html @@ -0,0 +1,34 @@ + + + + + + + Page not found + + + +

404

+

Page not found.

+ + diff --git a/node_modules/@parcel/reporter-dev-server/src/templates/500.html b/node_modules/@parcel/reporter-dev-server/src/templates/500.html new file mode 100644 index 0000000..07d52ac --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/src/templates/500.html @@ -0,0 +1,115 @@ + + + + + + + 🚨 Build Error + + + +

🚨 Parcel encountered errors

+ <% errors.forEach(function(error){ %> +

<%- error.message %>

+ +
<% if (error.frames?.length) { %><% error.frames.forEach(function(frame){ %><%- frame.location %> +<%- frame.code %><% }); %><% } else { %><%- error.stack %><% } %>
+
    + <% error.hints.forEach(function(hint){ %> +
  • <%- hint %>
  • + <% }); %> +
+ <% if (error.documentation) { %> + + <% } %> + <% }); %> + <% if (hmrOptions) { %> + + <% } %> + + diff --git a/node_modules/@parcel/reporter-dev-server/src/types.js.flow b/node_modules/@parcel/reporter-dev-server/src/types.js.flow new file mode 100644 index 0000000..b6e85d0 --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/src/types.js.flow @@ -0,0 +1,46 @@ +// @flow +import type {ServerOptions, PluginLogger, HMROptions} from '@parcel/types'; +import type {FileSystem} from '@parcel/fs'; +import type {HTTPServer} from '@parcel/utils'; +import { + IncomingMessage as HTTPIncomingMessage, + ServerResponse as HTTPServerResponse, +} from 'http'; +import { + IncomingMessage as HTTPSIncomingMessage, + ServerResponse as HTTPSServerResponse, +} from 'https'; + +interface HTTPRequest extends HTTPIncomingMessage { + originalUrl?: string; +} +interface HTTPSRequest extends HTTPSIncomingMessage { + originalUrl?: string; +} +export type Request = HTTPRequest | HTTPSRequest; +export type Response = HTTPServerResponse | HTTPSServerResponse; +export type DevServerOptions = {| + ...ServerOptions, + projectRoot: string, + publicUrl: string, + cacheDir: string, + inputFS: FileSystem, + outputFS: FileSystem, + logger: PluginLogger, + hmrOptions: ?HMROptions, +|}; + +// TODO: Figure out if there is a node.js type that could be imported with a complete ServerError +export type ServerError = Error & {| + code: string, +|}; + +export type HMRServerOptions = {| + devServer?: HTTPServer, + addMiddleware?: ( + handler: (req: Request, res: Response) => boolean + ) => void, + port: number, + host: ?string, + logger: PluginLogger, +|}; diff --git a/node_modules/@parcel/resolver-default/LICENSE b/node_modules/@parcel/resolver-default/LICENSE new file mode 100644 index 0000000..7fb9bc9 --- /dev/null +++ b/node_modules/@parcel/resolver-default/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION 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/@parcel/resolver-default/lib/DefaultResolver.js b/node_modules/@parcel/resolver-default/lib/DefaultResolver.js new file mode 100644 index 0000000..0d6fa0f --- /dev/null +++ b/node_modules/@parcel/resolver-default/lib/DefaultResolver.js @@ -0,0 +1,68 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +function _plugin() { + const data = require("@parcel/plugin"); + + _plugin = function () { + return data; + }; + + return data; +} + +function _nodeResolverCore() { + const data = _interopRequireDefault(require("@parcel/node-resolver-core")); + + _nodeResolverCore = function () { + return data; + }; + + return data; +} + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Throw user friendly errors on special webpack loader syntax +// ex. `imports-loader?$=jquery!./example.js` +const WEBPACK_IMPORT_REGEX = /^\w+-loader(?:\?\S*)?!/; + +var _default = new (_plugin().Resolver)({ + resolve({ + dependency, + options, + specifier, + logger + }) { + if (WEBPACK_IMPORT_REGEX.test(dependency.specifier)) { + throw new Error(`The import path: ${dependency.specifier} is using webpack specific loader import syntax, which isn't supported by Parcel.`); + } + + const resolver = new (_nodeResolverCore().default)({ + fs: options.inputFS, + projectRoot: options.projectRoot, + // Extensions are always required in URL dependencies. + extensions: dependency.specifierType === 'commonjs' || dependency.specifierType === 'esm' ? ['ts', 'tsx', 'mjs', 'js', 'jsx', 'cjs', 'json'] : [], + mainFields: ['source', 'browser', 'module', 'main'], + packageManager: options.packageManager, + shouldAutoInstall: options.shouldAutoInstall, + logger + }); + return resolver.resolve({ + filename: specifier, + specifierType: dependency.specifierType, + range: dependency.range, + parent: dependency.resolveFrom, + env: dependency.env, + sourcePath: dependency.sourcePath, + loc: dependency.loc + }); + } + +}); + +exports.default = _default; \ No newline at end of file diff --git a/node_modules/@parcel/resolver-default/package.json b/node_modules/@parcel/resolver-default/package.json new file mode 100644 index 0000000..189d5b3 --- /dev/null +++ b/node_modules/@parcel/resolver-default/package.json @@ -0,0 +1,30 @@ +{ + "name": "@parcel/resolver-default", + "version": "2.8.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/DefaultResolver.js", + "source": "src/DefaultResolver.js", + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "dependencies": { + "@parcel/node-resolver-core": "2.8.3", + "@parcel/plugin": "2.8.3" + }, + "devDependencies": { + "@babel/core": "^7.12.2" + }, + "gitHead": "349a6caf40ec8abb6a49fcae0765f8f8deb2073d" +} diff --git a/node_modules/@parcel/resolver-default/src/DefaultResolver.js b/node_modules/@parcel/resolver-default/src/DefaultResolver.js new file mode 100644 index 0000000..923f583 --- /dev/null +++ b/node_modules/@parcel/resolver-default/src/DefaultResolver.js @@ -0,0 +1,43 @@ +// @flow + +import {Resolver} from '@parcel/plugin'; +import NodeResolver from '@parcel/node-resolver-core'; + +// Throw user friendly errors on special webpack loader syntax +// ex. `imports-loader?$=jquery!./example.js` +const WEBPACK_IMPORT_REGEX = /^\w+-loader(?:\?\S*)?!/; + +export default (new Resolver({ + resolve({dependency, options, specifier, logger}) { + if (WEBPACK_IMPORT_REGEX.test(dependency.specifier)) { + throw new Error( + `The import path: ${dependency.specifier} is using webpack specific loader import syntax, which isn't supported by Parcel.`, + ); + } + + const resolver = new NodeResolver({ + fs: options.inputFS, + projectRoot: options.projectRoot, + // Extensions are always required in URL dependencies. + extensions: + dependency.specifierType === 'commonjs' || + dependency.specifierType === 'esm' + ? ['ts', 'tsx', 'mjs', 'js', 'jsx', 'cjs', 'json'] + : [], + mainFields: ['source', 'browser', 'module', 'main'], + packageManager: options.packageManager, + shouldAutoInstall: options.shouldAutoInstall, + logger, + }); + + return resolver.resolve({ + filename: specifier, + specifierType: dependency.specifierType, + range: dependency.range, + parent: dependency.resolveFrom, + env: dependency.env, + sourcePath: dependency.sourcePath, + loc: dependency.loc, + }); + }, +}): Resolver); diff --git a/node_modules/@parcel/runtime-browser-hmr/LICENSE b/node_modules/@parcel/runtime-browser-hmr/LICENSE new file mode 100644 index 0000000..7fb9bc9 --- /dev/null +++ b/node_modules/@parcel/runtime-browser-hmr/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION 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/@parcel/runtime-browser-hmr/lib/HMRRuntime.js b/node_modules/@parcel/runtime-browser-hmr/lib/HMRRuntime.js new file mode 100644 index 0000000..b3b5c2c --- /dev/null +++ b/node_modules/@parcel/runtime-browser-hmr/lib/HMRRuntime.js @@ -0,0 +1,69 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +function _plugin() { + const data = require("@parcel/plugin"); + + _plugin = function () { + return data; + }; + + return data; +} + +function _fs() { + const data = _interopRequireDefault(require("fs")); + + _fs = function () { + return data; + }; + + return data; +} + +function _path() { + const data = _interopRequireDefault(require("path")); + + _path = function () { + return data; + }; + + return data; +} + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const HMR_RUNTIME = _fs().default.readFileSync(_path().default.join(__dirname, './loaders/hmr-runtime.js'), 'utf8'); + +var _default = new (_plugin().Runtime)({ + apply({ + bundle, + options + }) { + if (bundle.type !== 'js' || !options.hmrOptions || bundle.env.isLibrary || bundle.env.isWorklet() || bundle.env.sourceType === 'script') { + return; + } + + const { + host, + port + } = options.hmrOptions; + return { + filePath: __filename, + code: `var HMR_HOST = ${JSON.stringify(host != null && host !== '0.0.0.0' ? host : null)};` + `var HMR_PORT = ${JSON.stringify(port != null && ( // Default to the HTTP port in the browser, only override + // in watch mode or if hmr port != serve port + !options.serveOptions || options.serveOptions.port !== port) ? port : null)};` + `var HMR_SECURE = ${JSON.stringify(!!(options.serveOptions && options.serveOptions.https))};` + `var HMR_ENV_HASH = "${bundle.env.id}";` + `module.bundle.HMR_BUNDLE_ID = ${JSON.stringify(bundle.id)};` + HMR_RUNTIME, + isEntry: true, + env: { + sourceType: 'module' + } + }; + } + +}); + +exports.default = _default; \ No newline at end of file diff --git a/node_modules/@parcel/runtime-browser-hmr/lib/loaders/hmr-runtime.js b/node_modules/@parcel/runtime-browser-hmr/lib/loaders/hmr-runtime.js new file mode 100644 index 0000000..bfca72c --- /dev/null +++ b/node_modules/@parcel/runtime-browser-hmr/lib/loaders/hmr-runtime.js @@ -0,0 +1,607 @@ +"use strict"; + +/* global HMR_HOST, HMR_PORT, HMR_ENV_HASH, HMR_SECURE, chrome, browser, globalThis, __parcel__import__, __parcel__importScripts__, ServiceWorkerGlobalScope */ + +/*:: +import type { + HMRAsset, + HMRMessage, +} from '@parcel/reporter-dev-server/src/HMRServer.js'; +interface ParcelRequire { + (string): mixed; + cache: {|[string]: ParcelModule|}; + hotData: {|[string]: mixed|}; + Module: any; + parent: ?ParcelRequire; + isParcelRequire: true; + modules: {|[string]: [Function, {|[string]: string|}]|}; + HMR_BUNDLE_ID: string; + root: ParcelRequire; +} +interface ParcelModule { + hot: {| + data: mixed, + accept(cb: (Function) => void): void, + dispose(cb: (mixed) => void): void, + // accept(deps: Array | string, cb: (Function) => void): void, + // decline(): void, + _acceptCallbacks: Array<(Function) => void>, + _disposeCallbacks: Array<(mixed) => void>, + |}; +} +interface ExtensionContext { + runtime: {| + reload(): void, + getURL(url: string): string; + getManifest(): {manifest_version: number, ...}; + |}; +} +declare var module: {bundle: ParcelRequire, ...}; +declare var HMR_HOST: string; +declare var HMR_PORT: string; +declare var HMR_ENV_HASH: string; +declare var HMR_SECURE: boolean; +declare var chrome: ExtensionContext; +declare var browser: ExtensionContext; +declare var __parcel__import__: (string) => Promise; +declare var __parcel__importScripts__: (string) => Promise; +declare var globalThis: typeof self; +declare var ServiceWorkerGlobalScope: Object; +*/ +var OVERLAY_ID = '__parcel__error__overlay__'; +var OldModule = module.bundle.Module; + +function Module(moduleName) { + OldModule.call(this, moduleName); + this.hot = { + data: module.bundle.hotData[moduleName], + _acceptCallbacks: [], + _disposeCallbacks: [], + accept: function (fn) { + this._acceptCallbacks.push(fn || function () {}); + }, + dispose: function (fn) { + this._disposeCallbacks.push(fn); + } + }; + module.bundle.hotData[moduleName] = undefined; +} + +module.bundle.Module = Module; +module.bundle.hotData = {}; +var checkedAssets +/*: {|[string]: boolean|} */ +, assetsToDispose +/*: Array<[ParcelRequire, string]> */ +, assetsToAccept +/*: Array<[ParcelRequire, string]> */ +; + +function getHostname() { + return HMR_HOST || (location.protocol.indexOf('http') === 0 ? location.hostname : 'localhost'); +} + +function getPort() { + return HMR_PORT || location.port; +} // eslint-disable-next-line no-redeclare + + +var parent = module.bundle.parent; + +if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') { + var hostname = getHostname(); + var port = getPort(); + var protocol = HMR_SECURE || location.protocol == 'https:' && !/localhost|127.0.0.1|0.0.0.0/.test(hostname) ? 'wss' : 'ws'; + var ws = new WebSocket(protocol + '://' + hostname + (port ? ':' + port : '') + '/'); // Web extension context + + var extCtx = typeof chrome === 'undefined' ? typeof browser === 'undefined' ? null : browser : chrome; // Safari doesn't support sourceURL in error stacks. + // eval may also be disabled via CSP, so do a quick check. + + var supportsSourceURL = false; + + try { + (0, eval)('throw new Error("test"); //# sourceURL=test.js'); + } catch (err) { + supportsSourceURL = err.stack.includes('test.js'); + } // $FlowFixMe + + + ws.onmessage = async function (event + /*: {data: string, ...} */ + ) { + checkedAssets = {} + /*: {|[string]: boolean|} */ + ; + assetsToAccept = []; + assetsToDispose = []; + var data + /*: HMRMessage */ + = JSON.parse(event.data); + + if (data.type === 'update') { + // Remove error overlay if there is one + if (typeof document !== 'undefined') { + removeErrorOverlay(); + } + + let assets = data.assets.filter(asset => asset.envHash === HMR_ENV_HASH); // Handle HMR Update + + let handled = assets.every(asset => { + return asset.type === 'css' || asset.type === 'js' && hmrAcceptCheck(module.bundle.root, asset.id, asset.depsByBundle); + }); + + if (handled) { + console.clear(); // Dispatch custom event so other runtimes (e.g React Refresh) are aware. + + if (typeof window !== 'undefined' && typeof CustomEvent !== 'undefined') { + window.dispatchEvent(new CustomEvent('parcelhmraccept')); + } + + await hmrApplyUpdates(assets); // Dispose all old assets. + + let processedAssets = {} + /*: {|[string]: boolean|} */ + ; + + for (let i = 0; i < assetsToDispose.length; i++) { + let id = assetsToDispose[i][1]; + + if (!processedAssets[id]) { + hmrDispose(assetsToDispose[i][0], id); + processedAssets[id] = true; + } + } // Run accept callbacks. This will also re-execute other disposed assets in topological order. + + + processedAssets = {}; + + for (let i = 0; i < assetsToAccept.length; i++) { + let id = assetsToAccept[i][1]; + + if (!processedAssets[id]) { + hmrAccept(assetsToAccept[i][0], id); + processedAssets[id] = true; + } + } + } else fullReload(); + } + + if (data.type === 'error') { + // Log parcel errors to console + for (let ansiDiagnostic of data.diagnostics.ansi) { + let stack = ansiDiagnostic.codeframe ? ansiDiagnostic.codeframe : ansiDiagnostic.stack; + console.error('🚨 [parcel]: ' + ansiDiagnostic.message + '\n' + stack + '\n\n' + ansiDiagnostic.hints.join('\n')); + } + + if (typeof document !== 'undefined') { + // Render the fancy html overlay + removeErrorOverlay(); + var overlay = createErrorOverlay(data.diagnostics.html); // $FlowFixMe + + document.body.appendChild(overlay); + } + } + }; + + ws.onerror = function (e) { + console.error(e.message); + }; + + ws.onclose = function () { + console.warn('[parcel] 🚨 Connection to the HMR server was lost'); + }; +} + +function removeErrorOverlay() { + var overlay = document.getElementById(OVERLAY_ID); + + if (overlay) { + overlay.remove(); + console.log('[parcel] ✨ Error resolved'); + } +} + +function createErrorOverlay(diagnostics) { + var overlay = document.createElement('div'); + overlay.id = OVERLAY_ID; + let errorHTML = '
'; + + for (let diagnostic of diagnostics) { + let stack = diagnostic.frames.length ? diagnostic.frames.reduce((p, frame) => { + return `${p} +${frame.location} +${frame.code}`; + }, '') : diagnostic.stack; + errorHTML += ` +
+
+ 🚨 ${diagnostic.message} +
+
${stack}
+
+ ${diagnostic.hints.map(hint => '
💡 ' + hint + '
').join('')} +
+ ${diagnostic.documentation ? `` : ''} +
+ `; + } + + errorHTML += '
'; + overlay.innerHTML = errorHTML; + return overlay; +} + +function fullReload() { + if ('reload' in location) { + location.reload(); + } else if (extCtx && extCtx.runtime && extCtx.runtime.reload) { + extCtx.runtime.reload(); + } +} + +function getParents(bundle, id) +/*: Array<[ParcelRequire, string]> */ +{ + var modules = bundle.modules; + + if (!modules) { + return []; + } + + var parents = []; + var k, d, dep; + + for (k in modules) { + for (d in modules[k][1]) { + dep = modules[k][1][d]; + + if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) { + parents.push([bundle, k]); + } + } + } + + if (bundle.parent) { + parents = parents.concat(getParents(bundle.parent, id)); + } + + return parents; +} + +function updateLink(link) { + var newLink = link.cloneNode(); + + newLink.onload = function () { + if (link.parentNode !== null) { + // $FlowFixMe + link.parentNode.removeChild(link); + } + }; + + newLink.setAttribute('href', // $FlowFixMe + link.getAttribute('href').split('?')[0] + '?' + Date.now()); // $FlowFixMe + + link.parentNode.insertBefore(newLink, link.nextSibling); +} + +var cssTimeout = null; + +function reloadCSS() { + if (cssTimeout) { + return; + } + + cssTimeout = setTimeout(function () { + var links = document.querySelectorAll('link[rel="stylesheet"]'); + + for (var i = 0; i < links.length; i++) { + // $FlowFixMe[incompatible-type] + var href + /*: string */ + = links[i].getAttribute('href'); + var hostname = getHostname(); + var servedFromHMRServer = hostname === 'localhost' ? new RegExp('^(https?:\\/\\/(0.0.0.0|127.0.0.1)|localhost):' + getPort()).test(href) : href.indexOf(hostname + ':' + getPort()); + var absolute = /^https?:\/\//i.test(href) && href.indexOf(location.origin) !== 0 && !servedFromHMRServer; + + if (!absolute) { + updateLink(links[i]); + } + } + + cssTimeout = null; + }, 50); +} + +function hmrDownload(asset) { + if (asset.type === 'js') { + if (typeof document !== 'undefined') { + let script = document.createElement('script'); + script.src = asset.url + '?t=' + Date.now(); + + if (asset.outputFormat === 'esmodule') { + script.type = 'module'; + } + + return new Promise((resolve, reject) => { + var _document$head; + + script.onload = () => resolve(script); + + script.onerror = reject; + (_document$head = document.head) === null || _document$head === void 0 ? void 0 : _document$head.appendChild(script); + }); + } else if (typeof importScripts === 'function') { + // Worker scripts + if (asset.outputFormat === 'esmodule') { + return __parcel__import__(asset.url + '?t=' + Date.now()); + } else { + return new Promise((resolve, reject) => { + try { + __parcel__importScripts__(asset.url + '?t=' + Date.now()); + + resolve(); + } catch (err) { + reject(err); + } + }); + } + } + } +} + +async function hmrApplyUpdates(assets) { + global.parcelHotUpdate = Object.create(null); + let scriptsToRemove; + + try { + // If sourceURL comments aren't supported in eval, we need to load + // the update from the dev server over HTTP so that stack traces + // are correct in errors/logs. This is much slower than eval, so + // we only do it if needed (currently just Safari). + // https://bugs.webkit.org/show_bug.cgi?id=137297 + // This path is also taken if a CSP disallows eval. + if (!supportsSourceURL) { + let promises = assets.map(asset => { + var _hmrDownload; + + return (_hmrDownload = hmrDownload(asset)) === null || _hmrDownload === void 0 ? void 0 : _hmrDownload.catch(err => { + // Web extension bugfix for Chromium + // https://bugs.chromium.org/p/chromium/issues/detail?id=1255412#c12 + if (extCtx && extCtx.runtime && extCtx.runtime.getManifest().manifest_version == 3) { + if (typeof ServiceWorkerGlobalScope != 'undefined' && global instanceof ServiceWorkerGlobalScope) { + extCtx.runtime.reload(); + return; + } + + asset.url = extCtx.runtime.getURL('/__parcel_hmr_proxy__?url=' + encodeURIComponent(asset.url + '?t=' + Date.now())); + return hmrDownload(asset); + } + + throw err; + }); + }); + scriptsToRemove = await Promise.all(promises); + } + + assets.forEach(function (asset) { + hmrApply(module.bundle.root, asset); + }); + } finally { + delete global.parcelHotUpdate; + + if (scriptsToRemove) { + scriptsToRemove.forEach(script => { + if (script) { + var _document$head2; + + (_document$head2 = document.head) === null || _document$head2 === void 0 ? void 0 : _document$head2.removeChild(script); + } + }); + } + } +} + +function hmrApply(bundle +/*: ParcelRequire */ +, asset +/*: HMRAsset */ +) { + var modules = bundle.modules; + + if (!modules) { + return; + } + + if (asset.type === 'css') { + reloadCSS(); + } else if (asset.type === 'js') { + let deps = asset.depsByBundle[bundle.HMR_BUNDLE_ID]; + + if (deps) { + if (modules[asset.id]) { + // Remove dependencies that are removed and will become orphaned. + // This is necessary so that if the asset is added back again, the cache is gone, and we prevent a full page reload. + let oldDeps = modules[asset.id][1]; + + for (let dep in oldDeps) { + if (!deps[dep] || deps[dep] !== oldDeps[dep]) { + let id = oldDeps[dep]; + let parents = getParents(module.bundle.root, id); + + if (parents.length === 1) { + hmrDelete(module.bundle.root, id); + } + } + } + } + + if (supportsSourceURL) { + // Global eval. We would use `new Function` here but browser + // support for source maps is better with eval. + (0, eval)(asset.output); + } // $FlowFixMe + + + let fn = global.parcelHotUpdate[asset.id]; + modules[asset.id] = [fn, deps]; + } else if (bundle.parent) { + hmrApply(bundle.parent, asset); + } + } +} + +function hmrDelete(bundle, id) { + let modules = bundle.modules; + + if (!modules) { + return; + } + + if (modules[id]) { + // Collect dependencies that will become orphaned when this module is deleted. + let deps = modules[id][1]; + let orphans = []; + + for (let dep in deps) { + let parents = getParents(module.bundle.root, deps[dep]); + + if (parents.length === 1) { + orphans.push(deps[dep]); + } + } // Delete the module. This must be done before deleting dependencies in case of circular dependencies. + + + delete modules[id]; + delete bundle.cache[id]; // Now delete the orphans. + + orphans.forEach(id => { + hmrDelete(module.bundle.root, id); + }); + } else if (bundle.parent) { + hmrDelete(bundle.parent, id); + } +} + +function hmrAcceptCheck(bundle +/*: ParcelRequire */ +, id +/*: string */ +, depsByBundle +/*: ?{ [string]: { [string]: string } }*/ +) { + if (hmrAcceptCheckOne(bundle, id, depsByBundle)) { + return true; + } // Traverse parents breadth first. All possible ancestries must accept the HMR update, or we'll reload. + + + let parents = getParents(module.bundle.root, id); + let accepted = false; + + while (parents.length > 0) { + let v = parents.shift(); + let a = hmrAcceptCheckOne(v[0], v[1], null); + + if (a) { + // If this parent accepts, stop traversing upward, but still consider siblings. + accepted = true; + } else { + // Otherwise, queue the parents in the next level upward. + let p = getParents(module.bundle.root, v[1]); + + if (p.length === 0) { + // If there are no parents, then we've reached an entry without accepting. Reload. + accepted = false; + break; + } + + parents.push(...p); + } + } + + return accepted; +} + +function hmrAcceptCheckOne(bundle +/*: ParcelRequire */ +, id +/*: string */ +, depsByBundle +/*: ?{ [string]: { [string]: string } }*/ +) { + var modules = bundle.modules; + + if (!modules) { + return; + } + + if (depsByBundle && !depsByBundle[bundle.HMR_BUNDLE_ID]) { + // If we reached the root bundle without finding where the asset should go, + // there's nothing to do. Mark as "accepted" so we don't reload the page. + if (!bundle.parent) { + return true; + } + + return hmrAcceptCheck(bundle.parent, id, depsByBundle); + } + + if (checkedAssets[id]) { + return true; + } + + checkedAssets[id] = true; + var cached = bundle.cache[id]; + assetsToDispose.push([bundle, id]); + + if (!cached || cached.hot && cached.hot._acceptCallbacks.length) { + assetsToAccept.push([bundle, id]); + return true; + } +} + +function hmrDispose(bundle +/*: ParcelRequire */ +, id +/*: string */ +) { + var cached = bundle.cache[id]; + bundle.hotData[id] = {}; + + if (cached && cached.hot) { + cached.hot.data = bundle.hotData[id]; + } + + if (cached && cached.hot && cached.hot._disposeCallbacks.length) { + cached.hot._disposeCallbacks.forEach(function (cb) { + cb(bundle.hotData[id]); + }); + } + + delete bundle.cache[id]; +} + +function hmrAccept(bundle +/*: ParcelRequire */ +, id +/*: string */ +) { + // Execute the module. + bundle(id); // Run the accept callbacks in the new version of the module. + + var cached = bundle.cache[id]; + + if (cached && cached.hot && cached.hot._acceptCallbacks.length) { + cached.hot._acceptCallbacks.forEach(function (cb) { + var assetsToAlsoAccept = cb(function () { + return getParents(module.bundle.root, id); + }); + + if (assetsToAlsoAccept && assetsToAccept.length) { + assetsToAlsoAccept.forEach(function (a) { + hmrDispose(a[0], a[1]); + }); // $FlowFixMe[method-unbinding] + + assetsToAccept.push.apply(assetsToAccept, assetsToAlsoAccept); + } + }); + } +} \ No newline at end of file diff --git a/node_modules/@parcel/runtime-browser-hmr/package.json b/node_modules/@parcel/runtime-browser-hmr/package.json new file mode 100644 index 0000000..63f1f97 --- /dev/null +++ b/node_modules/@parcel/runtime-browser-hmr/package.json @@ -0,0 +1,27 @@ +{ + "name": "@parcel/runtime-browser-hmr", + "version": "2.8.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/HMRRuntime.js", + "source": "src/HMRRuntime.js", + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3" + }, + "gitHead": "349a6caf40ec8abb6a49fcae0765f8f8deb2073d" +} diff --git a/node_modules/@parcel/runtime-browser-hmr/src/HMRRuntime.js b/node_modules/@parcel/runtime-browser-hmr/src/HMRRuntime.js new file mode 100644 index 0000000..a8f2ced --- /dev/null +++ b/node_modules/@parcel/runtime-browser-hmr/src/HMRRuntime.js @@ -0,0 +1,51 @@ +// @flow strict-local + +import {Runtime} from '@parcel/plugin'; +import fs from 'fs'; +import path from 'path'; + +const HMR_RUNTIME = fs.readFileSync( + path.join(__dirname, './loaders/hmr-runtime.js'), + 'utf8', +); + +export default (new Runtime({ + apply({bundle, options}) { + if ( + bundle.type !== 'js' || + !options.hmrOptions || + bundle.env.isLibrary || + bundle.env.isWorklet() || + bundle.env.sourceType === 'script' + ) { + return; + } + + const {host, port} = options.hmrOptions; + return { + filePath: __filename, + code: + `var HMR_HOST = ${JSON.stringify( + host != null && host !== '0.0.0.0' ? host : null, + )};` + + `var HMR_PORT = ${JSON.stringify( + port != null && + // Default to the HTTP port in the browser, only override + // in watch mode or if hmr port != serve port + (!options.serveOptions || options.serveOptions.port !== port) + ? port + : null, + )};` + + `var HMR_SECURE = ${JSON.stringify( + !!(options.serveOptions && options.serveOptions.https), + )};` + + `var HMR_ENV_HASH = "${bundle.env.id}";` + + `module.bundle.HMR_BUNDLE_ID = ${JSON.stringify(bundle.id)};` + + HMR_RUNTIME, + isEntry: true, + env: { + sourceType: 'module', + }, + }; + }, +}): Runtime); diff --git a/node_modules/@parcel/runtime-browser-hmr/src/loaders/.eslintrc.json b/node_modules/@parcel/runtime-browser-hmr/src/loaders/.eslintrc.json new file mode 100644 index 0000000..3dfbc79 --- /dev/null +++ b/node_modules/@parcel/runtime-browser-hmr/src/loaders/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "@parcel/eslint-config-browser" +} diff --git a/node_modules/@parcel/runtime-browser-hmr/src/loaders/hmr-runtime.js b/node_modules/@parcel/runtime-browser-hmr/src/loaders/hmr-runtime.js new file mode 100644 index 0000000..cdfe7ed --- /dev/null +++ b/node_modules/@parcel/runtime-browser-hmr/src/loaders/hmr-runtime.js @@ -0,0 +1,617 @@ +// @flow +/* global HMR_HOST, HMR_PORT, HMR_ENV_HASH, HMR_SECURE, chrome, browser, globalThis, __parcel__import__, __parcel__importScripts__, ServiceWorkerGlobalScope */ + +/*:: +import type { + HMRAsset, + HMRMessage, +} from '@parcel/reporter-dev-server/src/HMRServer.js'; +interface ParcelRequire { + (string): mixed; + cache: {|[string]: ParcelModule|}; + hotData: {|[string]: mixed|}; + Module: any; + parent: ?ParcelRequire; + isParcelRequire: true; + modules: {|[string]: [Function, {|[string]: string|}]|}; + HMR_BUNDLE_ID: string; + root: ParcelRequire; +} +interface ParcelModule { + hot: {| + data: mixed, + accept(cb: (Function) => void): void, + dispose(cb: (mixed) => void): void, + // accept(deps: Array | string, cb: (Function) => void): void, + // decline(): void, + _acceptCallbacks: Array<(Function) => void>, + _disposeCallbacks: Array<(mixed) => void>, + |}; +} +interface ExtensionContext { + runtime: {| + reload(): void, + getURL(url: string): string; + getManifest(): {manifest_version: number, ...}; + |}; +} +declare var module: {bundle: ParcelRequire, ...}; +declare var HMR_HOST: string; +declare var HMR_PORT: string; +declare var HMR_ENV_HASH: string; +declare var HMR_SECURE: boolean; +declare var chrome: ExtensionContext; +declare var browser: ExtensionContext; +declare var __parcel__import__: (string) => Promise; +declare var __parcel__importScripts__: (string) => Promise; +declare var globalThis: typeof self; +declare var ServiceWorkerGlobalScope: Object; +*/ + +var OVERLAY_ID = '__parcel__error__overlay__'; + +var OldModule = module.bundle.Module; + +function Module(moduleName) { + OldModule.call(this, moduleName); + this.hot = { + data: module.bundle.hotData[moduleName], + _acceptCallbacks: [], + _disposeCallbacks: [], + accept: function (fn) { + this._acceptCallbacks.push(fn || function () {}); + }, + dispose: function (fn) { + this._disposeCallbacks.push(fn); + }, + }; + module.bundle.hotData[moduleName] = undefined; +} +module.bundle.Module = Module; +module.bundle.hotData = {}; + +var checkedAssets /*: {|[string]: boolean|} */, + assetsToDispose /*: Array<[ParcelRequire, string]> */, + assetsToAccept /*: Array<[ParcelRequire, string]> */; + +function getHostname() { + return ( + HMR_HOST || + (location.protocol.indexOf('http') === 0 ? location.hostname : 'localhost') + ); +} + +function getPort() { + return HMR_PORT || location.port; +} + +// eslint-disable-next-line no-redeclare +var parent = module.bundle.parent; +if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') { + var hostname = getHostname(); + var port = getPort(); + var protocol = + HMR_SECURE || + (location.protocol == 'https:' && + !/localhost|127.0.0.1|0.0.0.0/.test(hostname)) + ? 'wss' + : 'ws'; + var ws = new WebSocket( + protocol + '://' + hostname + (port ? ':' + port : '') + '/', + ); + + // Web extension context + var extCtx = + typeof chrome === 'undefined' + ? typeof browser === 'undefined' + ? null + : browser + : chrome; + + // Safari doesn't support sourceURL in error stacks. + // eval may also be disabled via CSP, so do a quick check. + var supportsSourceURL = false; + try { + (0, eval)('throw new Error("test"); //# sourceURL=test.js'); + } catch (err) { + supportsSourceURL = err.stack.includes('test.js'); + } + + // $FlowFixMe + ws.onmessage = async function (event /*: {data: string, ...} */) { + checkedAssets = ({} /*: {|[string]: boolean|} */); + assetsToAccept = []; + assetsToDispose = []; + + var data /*: HMRMessage */ = JSON.parse(event.data); + + if (data.type === 'update') { + // Remove error overlay if there is one + if (typeof document !== 'undefined') { + removeErrorOverlay(); + } + + let assets = data.assets.filter(asset => asset.envHash === HMR_ENV_HASH); + + // Handle HMR Update + let handled = assets.every(asset => { + return ( + asset.type === 'css' || + (asset.type === 'js' && + hmrAcceptCheck(module.bundle.root, asset.id, asset.depsByBundle)) + ); + }); + + if (handled) { + console.clear(); + + // Dispatch custom event so other runtimes (e.g React Refresh) are aware. + if ( + typeof window !== 'undefined' && + typeof CustomEvent !== 'undefined' + ) { + window.dispatchEvent(new CustomEvent('parcelhmraccept')); + } + + await hmrApplyUpdates(assets); + + // Dispose all old assets. + let processedAssets = ({} /*: {|[string]: boolean|} */); + for (let i = 0; i < assetsToDispose.length; i++) { + let id = assetsToDispose[i][1]; + + if (!processedAssets[id]) { + hmrDispose(assetsToDispose[i][0], id); + processedAssets[id] = true; + } + } + + // Run accept callbacks. This will also re-execute other disposed assets in topological order. + processedAssets = {}; + for (let i = 0; i < assetsToAccept.length; i++) { + let id = assetsToAccept[i][1]; + + if (!processedAssets[id]) { + hmrAccept(assetsToAccept[i][0], id); + processedAssets[id] = true; + } + } + } else fullReload(); + } + + if (data.type === 'error') { + // Log parcel errors to console + for (let ansiDiagnostic of data.diagnostics.ansi) { + let stack = ansiDiagnostic.codeframe + ? ansiDiagnostic.codeframe + : ansiDiagnostic.stack; + + console.error( + '🚨 [parcel]: ' + + ansiDiagnostic.message + + '\n' + + stack + + '\n\n' + + ansiDiagnostic.hints.join('\n'), + ); + } + + if (typeof document !== 'undefined') { + // Render the fancy html overlay + removeErrorOverlay(); + var overlay = createErrorOverlay(data.diagnostics.html); + // $FlowFixMe + document.body.appendChild(overlay); + } + } + }; + ws.onerror = function (e) { + console.error(e.message); + }; + ws.onclose = function (e) { + if (process.env.PARCEL_BUILD_ENV !== 'test') { + console.warn('[parcel] 🚨 Connection to the HMR server was lost'); + } + }; +} + +function removeErrorOverlay() { + var overlay = document.getElementById(OVERLAY_ID); + if (overlay) { + overlay.remove(); + console.log('[parcel] ✨ Error resolved'); + } +} + +function createErrorOverlay(diagnostics) { + var overlay = document.createElement('div'); + overlay.id = OVERLAY_ID; + + let errorHTML = + '
'; + + for (let diagnostic of diagnostics) { + let stack = diagnostic.frames.length + ? diagnostic.frames.reduce((p, frame) => { + return `${p} +${ + frame.location + } +${frame.code}`; + }, '') + : diagnostic.stack; + + errorHTML += ` +
+
+ 🚨 ${diagnostic.message} +
+
${stack}
+
+ ${diagnostic.hints.map(hint => '
💡 ' + hint + '
').join('')} +
+ ${ + diagnostic.documentation + ? `` + : '' + } +
+ `; + } + + errorHTML += '
'; + + overlay.innerHTML = errorHTML; + + return overlay; +} + +function fullReload() { + if ('reload' in location) { + location.reload(); + } else if (extCtx && extCtx.runtime && extCtx.runtime.reload) { + extCtx.runtime.reload(); + } +} + +function getParents(bundle, id) /*: Array<[ParcelRequire, string]> */ { + var modules = bundle.modules; + if (!modules) { + return []; + } + + var parents = []; + var k, d, dep; + + for (k in modules) { + for (d in modules[k][1]) { + dep = modules[k][1][d]; + + if (dep === id || (Array.isArray(dep) && dep[dep.length - 1] === id)) { + parents.push([bundle, k]); + } + } + } + + if (bundle.parent) { + parents = parents.concat(getParents(bundle.parent, id)); + } + + return parents; +} + +function updateLink(link) { + var newLink = link.cloneNode(); + newLink.onload = function () { + if (link.parentNode !== null) { + // $FlowFixMe + link.parentNode.removeChild(link); + } + }; + newLink.setAttribute( + 'href', + // $FlowFixMe + link.getAttribute('href').split('?')[0] + '?' + Date.now(), + ); + // $FlowFixMe + link.parentNode.insertBefore(newLink, link.nextSibling); +} + +var cssTimeout = null; +function reloadCSS() { + if (cssTimeout) { + return; + } + + cssTimeout = setTimeout(function () { + var links = document.querySelectorAll('link[rel="stylesheet"]'); + for (var i = 0; i < links.length; i++) { + // $FlowFixMe[incompatible-type] + var href /*: string */ = links[i].getAttribute('href'); + var hostname = getHostname(); + var servedFromHMRServer = + hostname === 'localhost' + ? new RegExp( + '^(https?:\\/\\/(0.0.0.0|127.0.0.1)|localhost):' + getPort(), + ).test(href) + : href.indexOf(hostname + ':' + getPort()); + var absolute = + /^https?:\/\//i.test(href) && + href.indexOf(location.origin) !== 0 && + !servedFromHMRServer; + if (!absolute) { + updateLink(links[i]); + } + } + + cssTimeout = null; + }, 50); +} + +function hmrDownload(asset) { + if (asset.type === 'js') { + if (typeof document !== 'undefined') { + let script = document.createElement('script'); + script.src = asset.url + '?t=' + Date.now(); + if (asset.outputFormat === 'esmodule') { + script.type = 'module'; + } + return new Promise((resolve, reject) => { + script.onload = () => resolve(script); + script.onerror = reject; + document.head?.appendChild(script); + }); + } else if (typeof importScripts === 'function') { + // Worker scripts + if (asset.outputFormat === 'esmodule') { + return __parcel__import__(asset.url + '?t=' + Date.now()); + } else { + return new Promise((resolve, reject) => { + try { + __parcel__importScripts__(asset.url + '?t=' + Date.now()); + resolve(); + } catch (err) { + reject(err); + } + }); + } + } + } +} + +async function hmrApplyUpdates(assets) { + global.parcelHotUpdate = Object.create(null); + + let scriptsToRemove; + try { + // If sourceURL comments aren't supported in eval, we need to load + // the update from the dev server over HTTP so that stack traces + // are correct in errors/logs. This is much slower than eval, so + // we only do it if needed (currently just Safari). + // https://bugs.webkit.org/show_bug.cgi?id=137297 + // This path is also taken if a CSP disallows eval. + if (!supportsSourceURL) { + let promises = assets.map(asset => + hmrDownload(asset)?.catch(err => { + // Web extension bugfix for Chromium + // https://bugs.chromium.org/p/chromium/issues/detail?id=1255412#c12 + if ( + extCtx && + extCtx.runtime && + extCtx.runtime.getManifest().manifest_version == 3 + ) { + if ( + typeof ServiceWorkerGlobalScope != 'undefined' && + global instanceof ServiceWorkerGlobalScope + ) { + extCtx.runtime.reload(); + return; + } + asset.url = extCtx.runtime.getURL( + '/__parcel_hmr_proxy__?url=' + + encodeURIComponent(asset.url + '?t=' + Date.now()), + ); + return hmrDownload(asset); + } + throw err; + }), + ); + + scriptsToRemove = await Promise.all(promises); + } + + assets.forEach(function (asset) { + hmrApply(module.bundle.root, asset); + }); + } finally { + delete global.parcelHotUpdate; + + if (scriptsToRemove) { + scriptsToRemove.forEach(script => { + if (script) { + document.head?.removeChild(script); + } + }); + } + } +} + +function hmrApply(bundle /*: ParcelRequire */, asset /*: HMRAsset */) { + var modules = bundle.modules; + if (!modules) { + return; + } + + if (asset.type === 'css') { + reloadCSS(); + } else if (asset.type === 'js') { + let deps = asset.depsByBundle[bundle.HMR_BUNDLE_ID]; + if (deps) { + if (modules[asset.id]) { + // Remove dependencies that are removed and will become orphaned. + // This is necessary so that if the asset is added back again, the cache is gone, and we prevent a full page reload. + let oldDeps = modules[asset.id][1]; + for (let dep in oldDeps) { + if (!deps[dep] || deps[dep] !== oldDeps[dep]) { + let id = oldDeps[dep]; + let parents = getParents(module.bundle.root, id); + if (parents.length === 1) { + hmrDelete(module.bundle.root, id); + } + } + } + } + + if (supportsSourceURL) { + // Global eval. We would use `new Function` here but browser + // support for source maps is better with eval. + (0, eval)(asset.output); + } + + // $FlowFixMe + let fn = global.parcelHotUpdate[asset.id]; + modules[asset.id] = [fn, deps]; + } else if (bundle.parent) { + hmrApply(bundle.parent, asset); + } + } +} + +function hmrDelete(bundle, id) { + let modules = bundle.modules; + if (!modules) { + return; + } + + if (modules[id]) { + // Collect dependencies that will become orphaned when this module is deleted. + let deps = modules[id][1]; + let orphans = []; + for (let dep in deps) { + let parents = getParents(module.bundle.root, deps[dep]); + if (parents.length === 1) { + orphans.push(deps[dep]); + } + } + + // Delete the module. This must be done before deleting dependencies in case of circular dependencies. + delete modules[id]; + delete bundle.cache[id]; + + // Now delete the orphans. + orphans.forEach(id => { + hmrDelete(module.bundle.root, id); + }); + } else if (bundle.parent) { + hmrDelete(bundle.parent, id); + } +} + +function hmrAcceptCheck( + bundle /*: ParcelRequire */, + id /*: string */, + depsByBundle /*: ?{ [string]: { [string]: string } }*/, +) { + if (hmrAcceptCheckOne(bundle, id, depsByBundle)) { + return true; + } + + // Traverse parents breadth first. All possible ancestries must accept the HMR update, or we'll reload. + let parents = getParents(module.bundle.root, id); + let accepted = false; + while (parents.length > 0) { + let v = parents.shift(); + let a = hmrAcceptCheckOne(v[0], v[1], null); + if (a) { + // If this parent accepts, stop traversing upward, but still consider siblings. + accepted = true; + } else { + // Otherwise, queue the parents in the next level upward. + let p = getParents(module.bundle.root, v[1]); + if (p.length === 0) { + // If there are no parents, then we've reached an entry without accepting. Reload. + accepted = false; + break; + } + parents.push(...p); + } + } + + return accepted; +} + +function hmrAcceptCheckOne( + bundle /*: ParcelRequire */, + id /*: string */, + depsByBundle /*: ?{ [string]: { [string]: string } }*/, +) { + var modules = bundle.modules; + if (!modules) { + return; + } + + if (depsByBundle && !depsByBundle[bundle.HMR_BUNDLE_ID]) { + // If we reached the root bundle without finding where the asset should go, + // there's nothing to do. Mark as "accepted" so we don't reload the page. + if (!bundle.parent) { + return true; + } + + return hmrAcceptCheck(bundle.parent, id, depsByBundle); + } + + if (checkedAssets[id]) { + return true; + } + + checkedAssets[id] = true; + + var cached = bundle.cache[id]; + assetsToDispose.push([bundle, id]); + + if (!cached || (cached.hot && cached.hot._acceptCallbacks.length)) { + assetsToAccept.push([bundle, id]); + return true; + } +} + +function hmrDispose(bundle /*: ParcelRequire */, id /*: string */) { + var cached = bundle.cache[id]; + bundle.hotData[id] = {}; + if (cached && cached.hot) { + cached.hot.data = bundle.hotData[id]; + } + + if (cached && cached.hot && cached.hot._disposeCallbacks.length) { + cached.hot._disposeCallbacks.forEach(function (cb) { + cb(bundle.hotData[id]); + }); + } + + delete bundle.cache[id]; +} + +function hmrAccept(bundle /*: ParcelRequire */, id /*: string */) { + // Execute the module. + bundle(id); + + // Run the accept callbacks in the new version of the module. + var cached = bundle.cache[id]; + if (cached && cached.hot && cached.hot._acceptCallbacks.length) { + cached.hot._acceptCallbacks.forEach(function (cb) { + var assetsToAlsoAccept = cb(function () { + return getParents(module.bundle.root, id); + }); + if (assetsToAlsoAccept && assetsToAccept.length) { + assetsToAlsoAccept.forEach(function (a) { + hmrDispose(a[0], a[1]); + }); + + // $FlowFixMe[method-unbinding] + assetsToAccept.push.apply(assetsToAccept, assetsToAlsoAccept); + } + }); + } +} diff --git a/node_modules/@parcel/runtime-js/LICENSE b/node_modules/@parcel/runtime-js/LICENSE new file mode 100644 index 0000000..7fb9bc9 --- /dev/null +++ b/node_modules/@parcel/runtime-js/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION 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/@parcel/runtime-js/lib/JSRuntime.js b/node_modules/@parcel/runtime-js/lib/JSRuntime.js new file mode 100644 index 0000000..f81a1a0 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/JSRuntime.js @@ -0,0 +1,551 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +function _plugin() { + const data = require("@parcel/plugin"); + + _plugin = function () { + return data; + }; + + return data; +} + +function _utils() { + const data = require("@parcel/utils"); + + _utils = function () { + return data; + }; + + return data; +} + +function _path() { + const data = _interopRequireDefault(require("path")); + + _path = function () { + return data; + }; + + return data; +} + +function _nullthrows() { + const data = _interopRequireDefault(require("nullthrows")); + + _nullthrows = function () { + return data; + }; + + return data; +} + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Used for as="" in preload/prefetch +const TYPE_TO_RESOURCE_PRIORITY = { + css: 'style', + js: 'script' +}; +const BROWSER_PRELOAD_LOADER = './helpers/browser/preload-loader'; +const BROWSER_PREFETCH_LOADER = './helpers/browser/prefetch-loader'; +const LOADERS = { + browser: { + css: './helpers/browser/css-loader', + html: './helpers/browser/html-loader', + js: './helpers/browser/js-loader', + wasm: './helpers/browser/wasm-loader', + IMPORT_POLYFILL: './helpers/browser/import-polyfill' + }, + worker: { + js: './helpers/worker/js-loader', + wasm: './helpers/worker/wasm-loader', + IMPORT_POLYFILL: false + }, + node: { + css: './helpers/node/css-loader', + html: './helpers/node/html-loader', + js: './helpers/node/js-loader', + wasm: './helpers/node/wasm-loader', + IMPORT_POLYFILL: null + } +}; + +function getLoaders(ctx) { + if (ctx.isWorker()) return LOADERS.worker; + if (ctx.isBrowser()) return LOADERS.browser; + if (ctx.isNode()) return LOADERS.node; + return null; +} // This cache should be invalidated if new dependencies get added to the bundle without the bundle objects changing +// This can happen when we reuse the BundleGraph between subsequent builds + + +let bundleDependencies = new WeakMap(); + +var _default = new (_plugin().Runtime)({ + apply({ + bundle, + bundleGraph, + options + }) { + // Dependency ids in code replaced with referenced bundle names + // Loader runtime added for bundle groups that don't have a native loader (e.g. HTML/CSS/Worker - isURL?), + // and which are not loaded by a parent bundle. + // Loaders also added for modules that were moved to a separate bundle because they are a different type + // (e.g. WASM, HTML). These should be preloaded prior to the bundle being executed. Replace the entry asset(s) + // with the preload module. + if (bundle.type !== 'js') { + return; + } + + let { + asyncDependencies, + otherDependencies + } = getDependencies(bundle); + let assets = []; + + for (let dependency of asyncDependencies) { + let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle); + + if (resolved == null) { + continue; + } + + if (resolved.type === 'asset') { + if (!bundle.env.shouldScopeHoist) { + // If this bundle already has the asset this dependency references, + // return a simple runtime of `Promise.resolve(internalRequire(assetId))`. + // The linker handles this for scope-hoisting. + assets.push({ + filePath: __filename, + code: `module.exports = Promise.resolve(module.bundle.root(${JSON.stringify(bundleGraph.getAssetPublicId(resolved.value))}))`, + dependency, + env: { + sourceType: 'module' + } + }); + } + } else { + // Resolve the dependency to a bundle. If inline, export the dependency id, + // which will be replaced with the contents of that bundle later. + let referencedBundle = bundleGraph.getReferencedBundle(dependency, bundle); + + if ((referencedBundle === null || referencedBundle === void 0 ? void 0 : referencedBundle.bundleBehavior) === 'inline') { + assets.push({ + filePath: _path().default.join(__dirname, `/bundles/${referencedBundle.id}.js`), + code: `module.exports = Promise.resolve(${JSON.stringify(dependency.id)});`, + dependency, + env: { + sourceType: 'module' + } + }); + continue; + } + + let loaderRuntime = getLoaderRuntime({ + bundle, + dependency, + bundleGraph, + bundleGroup: resolved.value, + options + }); + + if (loaderRuntime != null) { + assets.push(loaderRuntime); + } + } + } + + for (let dependency of otherDependencies) { + var _dependency$meta; + + // Resolve the dependency to a bundle. If inline, export the dependency id, + // which will be replaced with the contents of that bundle later. + let referencedBundle = bundleGraph.getReferencedBundle(dependency, bundle); + + if ((referencedBundle === null || referencedBundle === void 0 ? void 0 : referencedBundle.bundleBehavior) === 'inline') { + assets.push({ + filePath: _path().default.join(__dirname, `/bundles/${referencedBundle.id}.js`), + code: `module.exports = ${JSON.stringify(dependency.id)};`, + dependency, + env: { + sourceType: 'module' + } + }); + continue; + } // Otherwise, try to resolve the dependency to an external bundle group + // and insert a URL to that bundle. + + + let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle); + + if (dependency.specifierType === 'url' && resolved == null) { + // If a URL dependency was not able to be resolved, add a runtime that + // exports the original specifier. + assets.push({ + filePath: __filename, + code: `module.exports = ${JSON.stringify(dependency.specifier)}`, + dependency, + env: { + sourceType: 'module' + } + }); + continue; + } + + if (resolved == null || resolved.type !== 'bundle_group') { + continue; + } + + let bundleGroup = resolved.value; + let mainBundle = (0, _nullthrows().default)(bundleGraph.getBundlesInBundleGroup(bundleGroup).find(b => { + let entries = b.getEntryAssets(); + return entries.some(e => bundleGroup.entryAssetId === e.id); + })); // Skip URL runtimes for library builds. This is handled in packaging so that + // the url is inlined and statically analyzable. + + if (bundle.env.isLibrary && ((_dependency$meta = dependency.meta) === null || _dependency$meta === void 0 ? void 0 : _dependency$meta.placeholder) != null) { + continue; + } // URL dependency or not, fall back to including a runtime that exports the url + + + assets.push(getURLRuntime(dependency, bundle, mainBundle, options)); + } // In development, bundles can be created lazily. This means that the parent bundle may not + // know about all of the sibling bundles of a child when it is written for the first time. + // Therefore, we need to also ensure that the siblings are loaded when the child loads. + + + if (options.shouldBuildLazily && bundle.env.outputFormat === 'global') { + let referenced = bundleGraph.getReferencedBundles(bundle); + + for (let referencedBundle of referenced) { + let loaders = getLoaders(bundle.env); + + if (!loaders) { + continue; + } + + let loader = loaders[referencedBundle.type]; + + if (!loader) { + continue; + } + + let relativePathExpr = getRelativePathExpr(bundle, referencedBundle, options); + let loaderCode = `require(${JSON.stringify(loader)})( ${getAbsoluteUrlExpr(relativePathExpr, bundle)})`; + assets.push({ + filePath: __filename, + code: loaderCode, + isEntry: true, + env: { + sourceType: 'module' + } + }); + } + } + + if (shouldUseRuntimeManifest(bundle, options) && bundleGraph.getChildBundles(bundle).some(b => b.bundleBehavior !== 'inline') && isNewContext(bundle, bundleGraph)) { + assets.push({ + filePath: __filename, + code: getRegisterCode(bundle, bundleGraph), + isEntry: true, + env: { + sourceType: 'module' + } + }); + } + + return assets; + } + +}); + +exports.default = _default; + +function getDependencies(bundle) { + let cachedDependencies = bundleDependencies.get(bundle); + + if (cachedDependencies) { + return cachedDependencies; + } else { + let asyncDependencies = []; + let otherDependencies = []; + bundle.traverse(node => { + if (node.type !== 'dependency') { + return; + } + + let dependency = node.value; + + if (dependency.priority === 'lazy' && dependency.specifierType !== 'url') { + asyncDependencies.push(dependency); + } else { + otherDependencies.push(dependency); + } + }); + bundleDependencies.set(bundle, { + asyncDependencies, + otherDependencies + }); + return { + asyncDependencies, + otherDependencies + }; + } +} + +function getLoaderRuntime({ + bundle, + dependency, + bundleGroup, + bundleGraph, + options +}) { + let loaders = getLoaders(bundle.env); + + if (loaders == null) { + return; + } + + let externalBundles = bundleGraph.getBundlesInBundleGroup(bundleGroup); + let mainBundle = (0, _nullthrows().default)(externalBundles.find(bundle => { + var _bundle$getMainEntry; + + return ((_bundle$getMainEntry = bundle.getMainEntry()) === null || _bundle$getMainEntry === void 0 ? void 0 : _bundle$getMainEntry.id) === bundleGroup.entryAssetId; + })); // CommonJS is a synchronous module system, so there is no need to load bundles in parallel. + // Importing of the other bundles will be handled by the bundle group entry. + // Do the same thing in library mode for ES modules, as we are building for another bundler + // and the imports for sibling bundles will be in the target bundle. + // Also do this when building lazily or the runtime itself could get deduplicated and only + // exist in the parent. This causes errors if an old version of the parent without the runtime + // is already loaded. + + if (bundle.env.outputFormat === 'commonjs' || bundle.env.isLibrary || options.shouldBuildLazily) { + externalBundles = [mainBundle]; + } else { + // Otherwise, load the bundle group entry after the others. + externalBundles.splice(externalBundles.indexOf(mainBundle), 1); + externalBundles.reverse().push(mainBundle); + } // Determine if we need to add a dynamic import() polyfill, or if all target browsers support it natively. + + + let needsDynamicImportPolyfill = !bundle.env.isLibrary && !bundle.env.supports('dynamic-import', true); + let loaderModules = externalBundles.map(to => { + let loader = loaders[to.type]; + + if (!loader) { + return; + } + + let relativePathExpr = getRelativePathExpr(bundle, to, options); // Use esmodule loader if possible + + if (to.type === 'js' && to.env.outputFormat === 'esmodule') { + if (!needsDynamicImportPolyfill) { + return `__parcel__import__("./" + ${relativePathExpr})`; + } + + loader = (0, _nullthrows().default)(loaders.IMPORT_POLYFILL, `No import() polyfill available for context '${bundle.env.context}'`); + } else if (to.type === 'js' && to.env.outputFormat === 'commonjs') { + return `Promise.resolve(__parcel__require__("./" + ${relativePathExpr}))`; + } + + let code = `require(${JSON.stringify(loader)})(${getAbsoluteUrlExpr(relativePathExpr, bundle)})`; // In development, clear the require cache when an error occurs so the + // user can try again (e.g. after fixing a build error). + + if (options.mode === 'development' && bundle.env.outputFormat === 'global') { + code += '.catch(err => {delete module.bundle.cache[module.id]; throw err;})'; + } + + return code; + }).filter(Boolean); + + if (bundle.env.context === 'browser' && !options.shouldBuildLazily) { + loaderModules.push(...externalBundles // TODO: Allow css to preload resources as well + .filter(to => to.type === 'js').flatMap(from => { + let { + preload, + prefetch + } = getHintedBundleGroups(bundleGraph, from); + return [...getHintLoaders(bundleGraph, bundle, preload, BROWSER_PRELOAD_LOADER, options), ...getHintLoaders(bundleGraph, bundle, prefetch, BROWSER_PREFETCH_LOADER, options)]; + })); + } + + if (loaderModules.length === 0) { + return; + } + + let loaderCode = loaderModules.join(', '); + + if (loaderModules.length > 1) { + loaderCode = `Promise.all([${loaderCode}])`; + } else { + loaderCode = `(${loaderCode})`; + } + + if (mainBundle.type === 'js') { + let parcelRequire = bundle.env.shouldScopeHoist ? 'parcelRequire' : 'module.bundle.root'; + loaderCode += `.then(() => ${parcelRequire}('${bundleGraph.getAssetPublicId(bundleGraph.getAssetById(bundleGroup.entryAssetId))}'))`; + } + + return { + filePath: __filename, + code: `module.exports = ${loaderCode};`, + dependency, + env: { + sourceType: 'module' + } + }; +} + +function getHintedBundleGroups(bundleGraph, bundle) { + let preload = []; + let prefetch = []; + let { + asyncDependencies + } = getDependencies(bundle); + + for (let dependency of asyncDependencies) { + var _dependency$meta2; + + let attributes = (_dependency$meta2 = dependency.meta) === null || _dependency$meta2 === void 0 ? void 0 : _dependency$meta2.importAttributes; + + if (typeof attributes === 'object' && attributes != null && ( // $FlowFixMe + attributes.preload || attributes.prefetch)) { + let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle); + + if ((resolved === null || resolved === void 0 ? void 0 : resolved.type) === 'bundle_group') { + // === true for flow + if (attributes.preload === true) { + preload.push(resolved.value); + } + + if (attributes.prefetch === true) { + prefetch.push(resolved.value); + } + } + } + } + + return { + preload, + prefetch + }; +} + +function getHintLoaders(bundleGraph, from, bundleGroups, loader, options) { + let hintLoaders = []; + + for (let bundleGroupToPreload of bundleGroups) { + let bundlesToPreload = bundleGraph.getBundlesInBundleGroup(bundleGroupToPreload); + + for (let bundleToPreload of bundlesToPreload) { + let relativePathExpr = getRelativePathExpr(from, bundleToPreload, options); + let priority = TYPE_TO_RESOURCE_PRIORITY[bundleToPreload.type]; + hintLoaders.push(`require(${JSON.stringify(loader)})(${getAbsoluteUrlExpr(relativePathExpr, from)}, ${priority ? JSON.stringify(priority) : 'null'}, ${JSON.stringify(bundleToPreload.target.env.outputFormat === 'esmodule')})`); + } + } + + return hintLoaders; +} + +function isNewContext(bundle, bundleGraph) { + let parents = bundleGraph.getParentBundles(bundle); + let isInEntryBundleGroup = bundleGraph.getBundleGroupsContainingBundle(bundle).some(g => bundleGraph.isEntryBundleGroup(g)); + return isInEntryBundleGroup || parents.length === 0 || parents.some(parent => parent.env.context !== bundle.env.context || parent.type !== 'js'); +} + +function getURLRuntime(dependency, from, to, options) { + let relativePathExpr = getRelativePathExpr(from, to, options); + let code; + + if (dependency.meta.webworker === true && !from.env.isLibrary) { + code = `let workerURL = require('./helpers/get-worker-url');\n`; + + if (from.env.outputFormat === 'esmodule' && from.env.supports('import-meta-url')) { + code += `let url = new __parcel__URL__(${relativePathExpr});\n`; + code += `module.exports = workerURL(url.toString(), url.origin, ${String(from.env.outputFormat === 'esmodule')});`; + } else { + code += `let bundleURL = require('./helpers/bundle-url');\n`; + code += `let url = bundleURL.getBundleURL('${from.publicId}') + ${relativePathExpr};`; + code += `module.exports = workerURL(url, bundleURL.getOrigin(url), ${String(from.env.outputFormat === 'esmodule')});`; + } + } else { + code = `module.exports = ${getAbsoluteUrlExpr(relativePathExpr, from)};`; + } + + return { + filePath: __filename, + code, + dependency, + env: { + sourceType: 'module' + } + }; +} + +function getRegisterCode(entryBundle, bundleGraph) { + let idToName = {}; + bundleGraph.traverseBundles((bundle, _, actions) => { + if (bundle.bundleBehavior === 'inline') { + return; + } + + idToName[bundle.publicId] = _path().default.basename((0, _nullthrows().default)(bundle.name)); + + if (bundle !== entryBundle && isNewContext(bundle, bundleGraph)) { + for (let referenced of bundleGraph.getReferencedBundles(bundle)) { + idToName[referenced.publicId] = _path().default.basename((0, _nullthrows().default)(referenced.name)); + } // New contexts have their own manifests, so there's no need to continue. + + + actions.skipChildren(); + } + }, entryBundle); + return "require('./helpers/bundle-manifest').register(JSON.parse(" + JSON.stringify(JSON.stringify(idToName)) + '));'; +} + +function getRelativePathExpr(from, to, options) { + let relativePath = (0, _utils().relativeBundlePath)(from, to, { + leadingDotSlash: false + }); + + if (shouldUseRuntimeManifest(from, options)) { + // Get the relative part of the path. This part is not in the manifest, only the basename is. + let relativeBase = _path().default.posix.dirname(relativePath); + + if (relativeBase === '.') { + relativeBase = ''; + } else { + relativeBase = `${JSON.stringify(relativeBase + '/')} + `; + } + + return relativeBase + `require('./helpers/bundle-manifest').resolve(${JSON.stringify(to.publicId)})`; + } + + let res = JSON.stringify(relativePath); + + if (options.hmrOptions) { + res += ' + "?" + Date.now()'; + } + + return res; +} + +function getAbsoluteUrlExpr(relativePathExpr, bundle) { + if (bundle.env.outputFormat === 'esmodule' && bundle.env.supports('import-meta-url') || bundle.env.outputFormat === 'commonjs') { + // This will be compiled to new URL(url, import.meta.url) or new URL(url, 'file:' + __filename). + return `new __parcel__URL__(${relativePathExpr}).toString()`; + } else { + return `require('./helpers/bundle-url').getBundleURL('${bundle.publicId}') + ${relativePathExpr}`; + } +} + +function shouldUseRuntimeManifest(bundle, options) { + let env = bundle.env; + return !env.isLibrary && bundle.bundleBehavior !== 'inline' && env.isBrowser() && options.mode === 'production'; +} \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/browser/css-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/browser/css-loader.js new file mode 100644 index 0000000..dd11bec --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/browser/css-loader.js @@ -0,0 +1,34 @@ +"use strict"; + +var cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function (bundle) { + return new Promise(function (resolve, reject) { + // Don't insert the same link element twice (e.g. if it was already in the HTML) + var existingLinks = document.getElementsByTagName('link'); + + if ([].concat(existingLinks).some(function isCurrentBundle(link) { + return link.href === bundle && link.rel.indexOf('stylesheet') > -1; + })) { + resolve(); + return; + } + + var link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = bundle; + + link.onerror = function (e) { + link.onerror = link.onload = null; + link.remove(); + reject(e); + }; + + link.onload = function () { + link.onerror = link.onload = null; + resolve(); + }; + + document.getElementsByTagName('head')[0].appendChild(link); + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/browser/html-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/browser/html-loader.js new file mode 100644 index 0000000..a85729e --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/browser/html-loader.js @@ -0,0 +1,9 @@ +"use strict"; + +var cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function (bundle) { + return fetch(bundle).then(function (res) { + return res.text(); + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/browser/import-polyfill.js b/node_modules/@parcel/runtime-js/lib/helpers/browser/import-polyfill.js new file mode 100644 index 0000000..899cfee --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/browser/import-polyfill.js @@ -0,0 +1,36 @@ +"use strict"; + +var cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function (bundle) { + return new Promise(function (resolve, reject) { + // Add a global function to handle when the script loads. + var globalName = "i".concat(('' + Math.random()).slice(2)); + + global[globalName] = function (m) { + resolve(m); + cleanup(); + }; // Remove script on load or error + + + var cleanup = function () { + delete global[globalName]; + script.onerror = null; + script.remove(); + }; // Append an inline script tag into the document head + + + var script = document.createElement('script'); + script.async = true; + script.type = 'module'; + script.charset = 'utf-8'; + script.textContent = "import * as m from '".concat(bundle, "'; ").concat(globalName, "(m);"); + + script.onerror = function (e) { + reject(e); + cleanup(); + }; + + document.head.appendChild(script); + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/browser/js-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/browser/js-loader.js new file mode 100644 index 0000000..7ccfd24 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/browser/js-loader.js @@ -0,0 +1,41 @@ +"use strict"; + +var cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function (bundle) { + return new Promise(function (resolve, reject) { + // Don't insert the same script twice (e.g. if it was already in the HTML) + var existingScripts = document.getElementsByTagName('script'); + + if ([].concat(existingScripts).some(function isCurrentBundle(script) { + return script.src === bundle; + })) { + resolve(); + return; + } + + var preloadLink = document.createElement('link'); + preloadLink.href = bundle; + preloadLink.rel = 'preload'; + preloadLink.as = 'script'; + document.head.appendChild(preloadLink); + var script = document.createElement('script'); + script.async = true; + script.type = 'text/javascript'; + script.src = bundle; + + script.onerror = function (e) { + var error = new TypeError("Failed to fetch dynamically imported module: ".concat(bundle, ". Error: ").concat(e.message)); + script.onerror = script.onload = null; + script.remove(); + reject(error); + }; + + script.onload = function () { + script.onerror = script.onload = null; + resolve(); + }; + + document.getElementsByTagName('head')[0].appendChild(script); + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/browser/prefetch-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/browser/prefetch-loader.js new file mode 100644 index 0000000..8c3140a --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/browser/prefetch-loader.js @@ -0,0 +1,16 @@ +"use strict"; + +var cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function (bundle, priority) { + var link = document.createElement('link'); + link.rel = 'prefetch'; + link.href = bundle; + + if (priority) { + link.as = priority; + } + + document.getElementsByTagName('head')[0].appendChild(link); + return Promise.resolve(); +}, 'prefetch'); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/browser/preload-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/browser/preload-loader.js new file mode 100644 index 0000000..b8e789d --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/browser/preload-loader.js @@ -0,0 +1,17 @@ +"use strict"; + +var cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function (bundle, priority, isModule) { + var link = document.createElement('link'); + link.charset = 'utf-8'; + link.rel = isModule ? 'modulepreload' : 'preload'; + link.href = bundle; + + if (priority) { + link.as = priority; + } + + document.getElementsByTagName('head')[0].appendChild(link); + return Promise.resolve(); +}, 'preload'); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/browser/wasm-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/browser/wasm-loader.js new file mode 100644 index 0000000..fbb1915 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/browser/wasm-loader.js @@ -0,0 +1,17 @@ +"use strict"; + +var cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function (bundle) { + return fetch(bundle).then(function (res) { + if (WebAssembly.instantiateStreaming) { + return WebAssembly.instantiateStreaming(res); + } else { + return res.arrayBuffer().then(function (data) { + return WebAssembly.instantiate(data); + }); + } + }).then(function (wasmModule) { + return wasmModule.instance.exports; + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/bundle-manifest.js b/node_modules/@parcel/runtime-js/lib/helpers/bundle-manifest.js new file mode 100644 index 0000000..f721bc9 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/bundle-manifest.js @@ -0,0 +1,24 @@ +"use strict"; + +var mapping = {}; + +function register(pairs) { + var keys = Object.keys(pairs); + + for (var i = 0; i < keys.length; i++) { + mapping[keys[i]] = pairs[keys[i]]; + } +} + +function resolve(id) { + var resolved = mapping[id]; + + if (resolved == null) { + throw new Error('Could not resolve bundle with id ' + id); + } + + return resolved; +} + +module.exports.register = register; +module.exports.resolve = resolve; \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/bundle-url.js b/node_modules/@parcel/runtime-js/lib/helpers/bundle-url.js new file mode 100644 index 0000000..ec4073e --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/bundle-url.js @@ -0,0 +1,49 @@ +"use strict"; + +var bundleURL = {}; + +function getBundleURLCached(id) { + var value = bundleURL[id]; + + if (!value) { + value = getBundleURL(); + bundleURL[id] = value; + } + + return value; +} + +function getBundleURL() { + try { + throw new Error(); + } catch (err) { + var matches = ('' + err.stack).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/[^)\n]+/g); + + if (matches) { + // The first two stack frames will be this function and getBundleURLCached. + // Use the 3rd one, which will be a runtime in the original bundle. + return getBaseURL(matches[2]); + } + } + + return '/'; +} + +function getBaseURL(url) { + return ('' + url).replace(/^((?:https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/.+)\/[^/]+$/, '$1') + '/'; +} // TODO: Replace uses with `new URL(url).origin` when ie11 is no longer supported. + + +function getOrigin(url) { + var matches = ('' + url).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/[^/]+/); + + if (!matches) { + throw new Error('Origin not found'); + } + + return matches[0]; +} + +exports.getBundleURL = getBundleURLCached; +exports.getBaseURL = getBaseURL; +exports.getOrigin = getOrigin; \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/cacheLoader.js b/node_modules/@parcel/runtime-js/lib/helpers/cacheLoader.js new file mode 100644 index 0000000..140fd73 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/cacheLoader.js @@ -0,0 +1,33 @@ +"use strict"; + +var cachedBundles = {}; +var cachedPreloads = {}; +var cachedPrefetches = {}; + +function getCache(type) { + switch (type) { + case 'preload': + return cachedPreloads; + + case 'prefetch': + return cachedPrefetches; + + default: + return cachedBundles; + } +} + +module.exports = function (loader, type) { + return function (bundle) { + var cache = getCache(type); + + if (cache[bundle]) { + return cache[bundle]; + } + + return cache[bundle] = loader.apply(null, arguments).catch(function (e) { + delete cache[bundle]; + throw e; + }); + }; +}; \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/get-worker-url.js b/node_modules/@parcel/runtime-js/lib/helpers/get-worker-url.js new file mode 100644 index 0000000..8f0cae0 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/get-worker-url.js @@ -0,0 +1,15 @@ +"use strict"; + +module.exports = function (workerUrl, origin, isESM) { + if (origin === self.location.origin) { + // If the worker bundle's url is on the same origin as the document, + // use the worker bundle's own url. + return workerUrl; + } else { + // Otherwise, create a blob URL which loads the worker bundle with `importScripts`. + var source = isESM ? 'import ' + JSON.stringify(workerUrl) + ';' : 'importScripts(' + JSON.stringify(workerUrl) + ');'; + return URL.createObjectURL(new Blob([source], { + type: 'application/javascript' + })); + } +}; \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/node/css-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/node/css-loader.js new file mode 100644 index 0000000..ad7d0fd --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/node/css-loader.js @@ -0,0 +1,6 @@ +"use strict"; + +// loading a CSS style is a no-op in Node.js +module.exports = function () { + return Promise.resolve(); +}; \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/node/html-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/node/html-loader.js new file mode 100644 index 0000000..1d7587c --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/node/html-loader.js @@ -0,0 +1,21 @@ +"use strict"; + +var fs = require('fs'); + +var cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function (bundle) { + return new Promise(function (resolve, reject) { + fs.readFile(__dirname + bundle, 'utf8', function (err, data) { + if (err) { + reject(err); + } else { + // wait for the next event loop iteration, so we are sure + // the current module is fully loaded + setImmediate(function () { + resolve(data); + }); + } + }); + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/node/js-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/node/js-loader.js new file mode 100644 index 0000000..42d2cfb --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/node/js-loader.js @@ -0,0 +1,23 @@ +"use strict"; + +var fs = require('fs'); + +var cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function (bundle) { + return new Promise(function (resolve, reject) { + fs.readFile(__dirname + bundle, 'utf8', function (err, data) { + if (err) { + reject(err); + } else { + // wait for the next event loop iteration, so we are sure + // the current module is fully loaded + setImmediate(function () { + resolve(data); + }); + } + }); + }).then(function (code) { + new Function('', code)(); + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/node/wasm-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/node/wasm-loader.js new file mode 100644 index 0000000..fe61a44 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/node/wasm-loader.js @@ -0,0 +1,21 @@ +"use strict"; + +var fs = require('fs'); + +var cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function (bundle) { + return new Promise(function (resolve, reject) { + fs.readFile(__dirname + bundle, function (err, data) { + if (err) { + reject(err); + } else { + resolve(data.buffer); + } + }); + }).then(function (data) { + return WebAssembly.instantiate(data); + }).then(function (wasmModule) { + return wasmModule.instance.exports; + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/worker/js-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/worker/js-loader.js new file mode 100644 index 0000000..f908dac --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/worker/js-loader.js @@ -0,0 +1,16 @@ +"use strict"; + +/* global __parcel__importScripts__:readonly*/ +var cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function (bundle) { + return new Promise(function (resolve, reject) { + try { + __parcel__importScripts__(bundle); + + resolve(); + } catch (e) { + reject(e); + } + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/worker/wasm-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/worker/wasm-loader.js new file mode 100644 index 0000000..fbb1915 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/worker/wasm-loader.js @@ -0,0 +1,17 @@ +"use strict"; + +var cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function (bundle) { + return fetch(bundle).then(function (res) { + if (WebAssembly.instantiateStreaming) { + return WebAssembly.instantiateStreaming(res); + } else { + return res.arrayBuffer().then(function (data) { + return WebAssembly.instantiate(data); + }); + } + }).then(function (wasmModule) { + return wasmModule.instance.exports; + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/package.json b/node_modules/@parcel/runtime-js/package.json new file mode 100644 index 0000000..004b5b7 --- /dev/null +++ b/node_modules/@parcel/runtime-js/package.json @@ -0,0 +1,28 @@ +{ + "name": "@parcel/runtime-js", + "version": "2.8.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/JSRuntime.js", + "source": "src/JSRuntime.js", + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + }, + "gitHead": "349a6caf40ec8abb6a49fcae0765f8f8deb2073d" +} diff --git a/node_modules/@parcel/runtime-js/src/JSRuntime.js b/node_modules/@parcel/runtime-js/src/JSRuntime.js new file mode 100644 index 0000000..a05f1cf --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/JSRuntime.js @@ -0,0 +1,626 @@ +// @flow strict-local + +import type { + BundleGraph, + BundleGroup, + Dependency, + Environment, + PluginOptions, + NamedBundle, + RuntimeAsset, +} from '@parcel/types'; + +import {Runtime} from '@parcel/plugin'; +import {relativeBundlePath} from '@parcel/utils'; +import path from 'path'; +import nullthrows from 'nullthrows'; + +// Used for as="" in preload/prefetch +const TYPE_TO_RESOURCE_PRIORITY = { + css: 'style', + js: 'script', +}; + +const BROWSER_PRELOAD_LOADER = './helpers/browser/preload-loader'; +const BROWSER_PREFETCH_LOADER = './helpers/browser/prefetch-loader'; + +const LOADERS = { + browser: { + css: './helpers/browser/css-loader', + html: './helpers/browser/html-loader', + js: './helpers/browser/js-loader', + wasm: './helpers/browser/wasm-loader', + IMPORT_POLYFILL: './helpers/browser/import-polyfill', + }, + worker: { + js: './helpers/worker/js-loader', + wasm: './helpers/worker/wasm-loader', + IMPORT_POLYFILL: false, + }, + node: { + css: './helpers/node/css-loader', + html: './helpers/node/html-loader', + js: './helpers/node/js-loader', + wasm: './helpers/node/wasm-loader', + IMPORT_POLYFILL: null, + }, +}; + +function getLoaders( + ctx: Environment, +): ?{[string]: string, IMPORT_POLYFILL: null | false | string, ...} { + if (ctx.isWorker()) return LOADERS.worker; + if (ctx.isBrowser()) return LOADERS.browser; + if (ctx.isNode()) return LOADERS.node; + return null; +} + +// This cache should be invalidated if new dependencies get added to the bundle without the bundle objects changing +// This can happen when we reuse the BundleGraph between subsequent builds +let bundleDependencies = new WeakMap< + NamedBundle, + {| + asyncDependencies: Array, + otherDependencies: Array, + |}, +>(); + +export default (new Runtime({ + apply({bundle, bundleGraph, options}) { + // Dependency ids in code replaced with referenced bundle names + // Loader runtime added for bundle groups that don't have a native loader (e.g. HTML/CSS/Worker - isURL?), + // and which are not loaded by a parent bundle. + // Loaders also added for modules that were moved to a separate bundle because they are a different type + // (e.g. WASM, HTML). These should be preloaded prior to the bundle being executed. Replace the entry asset(s) + // with the preload module. + + if (bundle.type !== 'js') { + return; + } + + let {asyncDependencies, otherDependencies} = getDependencies(bundle); + + let assets = []; + for (let dependency of asyncDependencies) { + let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle); + if (resolved == null) { + continue; + } + + if (resolved.type === 'asset') { + if (!bundle.env.shouldScopeHoist) { + // If this bundle already has the asset this dependency references, + // return a simple runtime of `Promise.resolve(internalRequire(assetId))`. + // The linker handles this for scope-hoisting. + assets.push({ + filePath: __filename, + code: `module.exports = Promise.resolve(module.bundle.root(${JSON.stringify( + bundleGraph.getAssetPublicId(resolved.value), + )}))`, + dependency, + env: {sourceType: 'module'}, + }); + } + } else { + // Resolve the dependency to a bundle. If inline, export the dependency id, + // which will be replaced with the contents of that bundle later. + let referencedBundle = bundleGraph.getReferencedBundle( + dependency, + bundle, + ); + if (referencedBundle?.bundleBehavior === 'inline') { + assets.push({ + filePath: path.join( + __dirname, + `/bundles/${referencedBundle.id}.js`, + ), + code: `module.exports = Promise.resolve(${JSON.stringify( + dependency.id, + )});`, + dependency, + env: {sourceType: 'module'}, + }); + continue; + } + + let loaderRuntime = getLoaderRuntime({ + bundle, + dependency, + bundleGraph, + bundleGroup: resolved.value, + options, + }); + + if (loaderRuntime != null) { + assets.push(loaderRuntime); + } + } + } + + for (let dependency of otherDependencies) { + // Resolve the dependency to a bundle. If inline, export the dependency id, + // which will be replaced with the contents of that bundle later. + let referencedBundle = bundleGraph.getReferencedBundle( + dependency, + bundle, + ); + if (referencedBundle?.bundleBehavior === 'inline') { + assets.push({ + filePath: path.join(__dirname, `/bundles/${referencedBundle.id}.js`), + code: `module.exports = ${JSON.stringify(dependency.id)};`, + dependency, + env: {sourceType: 'module'}, + }); + continue; + } + + // Otherwise, try to resolve the dependency to an external bundle group + // and insert a URL to that bundle. + let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle); + if (dependency.specifierType === 'url' && resolved == null) { + // If a URL dependency was not able to be resolved, add a runtime that + // exports the original specifier. + assets.push({ + filePath: __filename, + code: `module.exports = ${JSON.stringify(dependency.specifier)}`, + dependency, + env: {sourceType: 'module'}, + }); + continue; + } + + if (resolved == null || resolved.type !== 'bundle_group') { + continue; + } + + let bundleGroup = resolved.value; + let mainBundle = nullthrows( + bundleGraph.getBundlesInBundleGroup(bundleGroup).find(b => { + let entries = b.getEntryAssets(); + return entries.some(e => bundleGroup.entryAssetId === e.id); + }), + ); + + // Skip URL runtimes for library builds. This is handled in packaging so that + // the url is inlined and statically analyzable. + if (bundle.env.isLibrary && dependency.meta?.placeholder != null) { + continue; + } + + // URL dependency or not, fall back to including a runtime that exports the url + assets.push(getURLRuntime(dependency, bundle, mainBundle, options)); + } + + // In development, bundles can be created lazily. This means that the parent bundle may not + // know about all of the sibling bundles of a child when it is written for the first time. + // Therefore, we need to also ensure that the siblings are loaded when the child loads. + if (options.shouldBuildLazily && bundle.env.outputFormat === 'global') { + let referenced = bundleGraph.getReferencedBundles(bundle); + for (let referencedBundle of referenced) { + let loaders = getLoaders(bundle.env); + if (!loaders) { + continue; + } + + let loader = loaders[referencedBundle.type]; + if (!loader) { + continue; + } + + let relativePathExpr = getRelativePathExpr( + bundle, + referencedBundle, + options, + ); + let loaderCode = `require(${JSON.stringify( + loader, + )})( ${getAbsoluteUrlExpr(relativePathExpr, bundle)})`; + assets.push({ + filePath: __filename, + code: loaderCode, + isEntry: true, + env: {sourceType: 'module'}, + }); + } + } + + if ( + shouldUseRuntimeManifest(bundle, options) && + bundleGraph + .getChildBundles(bundle) + .some(b => b.bundleBehavior !== 'inline') && + isNewContext(bundle, bundleGraph) + ) { + assets.push({ + filePath: __filename, + code: getRegisterCode(bundle, bundleGraph), + isEntry: true, + env: {sourceType: 'module'}, + }); + } + + return assets; + }, +}): Runtime); + +function getDependencies(bundle: NamedBundle): {| + asyncDependencies: Array, + otherDependencies: Array, +|} { + let cachedDependencies = bundleDependencies.get(bundle); + + if (cachedDependencies) { + return cachedDependencies; + } else { + let asyncDependencies = []; + let otherDependencies = []; + bundle.traverse(node => { + if (node.type !== 'dependency') { + return; + } + + let dependency = node.value; + if ( + dependency.priority === 'lazy' && + dependency.specifierType !== 'url' + ) { + asyncDependencies.push(dependency); + } else { + otherDependencies.push(dependency); + } + }); + bundleDependencies.set(bundle, {asyncDependencies, otherDependencies}); + return {asyncDependencies, otherDependencies}; + } +} + +function getLoaderRuntime({ + bundle, + dependency, + bundleGroup, + bundleGraph, + options, +}: {| + bundle: NamedBundle, + dependency: Dependency, + bundleGroup: BundleGroup, + bundleGraph: BundleGraph, + options: PluginOptions, +|}): ?RuntimeAsset { + let loaders = getLoaders(bundle.env); + if (loaders == null) { + return; + } + + let externalBundles = bundleGraph.getBundlesInBundleGroup(bundleGroup); + let mainBundle = nullthrows( + externalBundles.find( + bundle => bundle.getMainEntry()?.id === bundleGroup.entryAssetId, + ), + ); + + // CommonJS is a synchronous module system, so there is no need to load bundles in parallel. + // Importing of the other bundles will be handled by the bundle group entry. + // Do the same thing in library mode for ES modules, as we are building for another bundler + // and the imports for sibling bundles will be in the target bundle. + // Also do this when building lazily or the runtime itself could get deduplicated and only + // exist in the parent. This causes errors if an old version of the parent without the runtime + // is already loaded. + if ( + bundle.env.outputFormat === 'commonjs' || + bundle.env.isLibrary || + options.shouldBuildLazily + ) { + externalBundles = [mainBundle]; + } else { + // Otherwise, load the bundle group entry after the others. + externalBundles.splice(externalBundles.indexOf(mainBundle), 1); + externalBundles.reverse().push(mainBundle); + } + + // Determine if we need to add a dynamic import() polyfill, or if all target browsers support it natively. + let needsDynamicImportPolyfill = + !bundle.env.isLibrary && !bundle.env.supports('dynamic-import', true); + + let loaderModules = externalBundles + .map(to => { + let loader = loaders[to.type]; + if (!loader) { + return; + } + + let relativePathExpr = getRelativePathExpr(bundle, to, options); + + // Use esmodule loader if possible + if (to.type === 'js' && to.env.outputFormat === 'esmodule') { + if (!needsDynamicImportPolyfill) { + return `__parcel__import__("./" + ${relativePathExpr})`; + } + + loader = nullthrows( + loaders.IMPORT_POLYFILL, + `No import() polyfill available for context '${bundle.env.context}'`, + ); + } else if (to.type === 'js' && to.env.outputFormat === 'commonjs') { + return `Promise.resolve(__parcel__require__("./" + ${relativePathExpr}))`; + } + + let code = `require(${JSON.stringify(loader)})(${getAbsoluteUrlExpr( + relativePathExpr, + bundle, + )})`; + + // In development, clear the require cache when an error occurs so the + // user can try again (e.g. after fixing a build error). + if ( + options.mode === 'development' && + bundle.env.outputFormat === 'global' + ) { + code += + '.catch(err => {delete module.bundle.cache[module.id]; throw err;})'; + } + return code; + }) + .filter(Boolean); + + if (bundle.env.context === 'browser' && !options.shouldBuildLazily) { + loaderModules.push( + ...externalBundles + // TODO: Allow css to preload resources as well + .filter(to => to.type === 'js') + .flatMap(from => { + let {preload, prefetch} = getHintedBundleGroups(bundleGraph, from); + + return [ + ...getHintLoaders( + bundleGraph, + bundle, + preload, + BROWSER_PRELOAD_LOADER, + options, + ), + ...getHintLoaders( + bundleGraph, + bundle, + prefetch, + BROWSER_PREFETCH_LOADER, + options, + ), + ]; + }), + ); + } + + if (loaderModules.length === 0) { + return; + } + + let loaderCode = loaderModules.join(', '); + if (loaderModules.length > 1) { + loaderCode = `Promise.all([${loaderCode}])`; + } else { + loaderCode = `(${loaderCode})`; + } + + if (mainBundle.type === 'js') { + let parcelRequire = bundle.env.shouldScopeHoist + ? 'parcelRequire' + : 'module.bundle.root'; + loaderCode += `.then(() => ${parcelRequire}('${bundleGraph.getAssetPublicId( + bundleGraph.getAssetById(bundleGroup.entryAssetId), + )}'))`; + } + + return { + filePath: __filename, + code: `module.exports = ${loaderCode};`, + dependency, + env: {sourceType: 'module'}, + }; +} + +function getHintedBundleGroups( + bundleGraph: BundleGraph, + bundle: NamedBundle, +): {|preload: Array, prefetch: Array|} { + let preload = []; + let prefetch = []; + let {asyncDependencies} = getDependencies(bundle); + for (let dependency of asyncDependencies) { + let attributes = dependency.meta?.importAttributes; + if ( + typeof attributes === 'object' && + attributes != null && + // $FlowFixMe + (attributes.preload || attributes.prefetch) + ) { + let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle); + if (resolved?.type === 'bundle_group') { + // === true for flow + if (attributes.preload === true) { + preload.push(resolved.value); + } + if (attributes.prefetch === true) { + prefetch.push(resolved.value); + } + } + } + } + + return {preload, prefetch}; +} + +function getHintLoaders( + bundleGraph: BundleGraph, + from: NamedBundle, + bundleGroups: Array, + loader: string, + options: PluginOptions, +): Array { + let hintLoaders = []; + for (let bundleGroupToPreload of bundleGroups) { + let bundlesToPreload = + bundleGraph.getBundlesInBundleGroup(bundleGroupToPreload); + + for (let bundleToPreload of bundlesToPreload) { + let relativePathExpr = getRelativePathExpr( + from, + bundleToPreload, + options, + ); + let priority = TYPE_TO_RESOURCE_PRIORITY[bundleToPreload.type]; + hintLoaders.push( + `require(${JSON.stringify(loader)})(${getAbsoluteUrlExpr( + relativePathExpr, + from, + )}, ${priority ? JSON.stringify(priority) : 'null'}, ${JSON.stringify( + bundleToPreload.target.env.outputFormat === 'esmodule', + )})`, + ); + } + } + + return hintLoaders; +} + +function isNewContext( + bundle: NamedBundle, + bundleGraph: BundleGraph, +): boolean { + let parents = bundleGraph.getParentBundles(bundle); + let isInEntryBundleGroup = bundleGraph + .getBundleGroupsContainingBundle(bundle) + .some(g => bundleGraph.isEntryBundleGroup(g)); + return ( + isInEntryBundleGroup || + parents.length === 0 || + parents.some( + parent => + parent.env.context !== bundle.env.context || parent.type !== 'js', + ) + ); +} + +function getURLRuntime( + dependency: Dependency, + from: NamedBundle, + to: NamedBundle, + options: PluginOptions, +): RuntimeAsset { + let relativePathExpr = getRelativePathExpr(from, to, options); + let code; + + if (dependency.meta.webworker === true && !from.env.isLibrary) { + code = `let workerURL = require('./helpers/get-worker-url');\n`; + if ( + from.env.outputFormat === 'esmodule' && + from.env.supports('import-meta-url') + ) { + code += `let url = new __parcel__URL__(${relativePathExpr});\n`; + code += `module.exports = workerURL(url.toString(), url.origin, ${String( + from.env.outputFormat === 'esmodule', + )});`; + } else { + code += `let bundleURL = require('./helpers/bundle-url');\n`; + code += `let url = bundleURL.getBundleURL('${from.publicId}') + ${relativePathExpr};`; + code += `module.exports = workerURL(url, bundleURL.getOrigin(url), ${String( + from.env.outputFormat === 'esmodule', + )});`; + } + } else { + code = `module.exports = ${getAbsoluteUrlExpr(relativePathExpr, from)};`; + } + + return { + filePath: __filename, + code, + dependency, + env: {sourceType: 'module'}, + }; +} + +function getRegisterCode( + entryBundle: NamedBundle, + bundleGraph: BundleGraph, +): string { + let idToName = {}; + bundleGraph.traverseBundles((bundle, _, actions) => { + if (bundle.bundleBehavior === 'inline') { + return; + } + + idToName[bundle.publicId] = path.basename(nullthrows(bundle.name)); + + if (bundle !== entryBundle && isNewContext(bundle, bundleGraph)) { + for (let referenced of bundleGraph.getReferencedBundles(bundle)) { + idToName[referenced.publicId] = path.basename( + nullthrows(referenced.name), + ); + } + // New contexts have their own manifests, so there's no need to continue. + actions.skipChildren(); + } + }, entryBundle); + + return ( + "require('./helpers/bundle-manifest').register(JSON.parse(" + + JSON.stringify(JSON.stringify(idToName)) + + '));' + ); +} + +function getRelativePathExpr( + from: NamedBundle, + to: NamedBundle, + options: PluginOptions, +): string { + let relativePath = relativeBundlePath(from, to, {leadingDotSlash: false}); + if (shouldUseRuntimeManifest(from, options)) { + // Get the relative part of the path. This part is not in the manifest, only the basename is. + let relativeBase = path.posix.dirname(relativePath); + if (relativeBase === '.') { + relativeBase = ''; + } else { + relativeBase = `${JSON.stringify(relativeBase + '/')} + `; + } + return ( + relativeBase + + `require('./helpers/bundle-manifest').resolve(${JSON.stringify( + to.publicId, + )})` + ); + } + + let res = JSON.stringify(relativePath); + if (options.hmrOptions) { + res += ' + "?" + Date.now()'; + } + + return res; +} + +function getAbsoluteUrlExpr(relativePathExpr: string, bundle: NamedBundle) { + if ( + (bundle.env.outputFormat === 'esmodule' && + bundle.env.supports('import-meta-url')) || + bundle.env.outputFormat === 'commonjs' + ) { + // This will be compiled to new URL(url, import.meta.url) or new URL(url, 'file:' + __filename). + return `new __parcel__URL__(${relativePathExpr}).toString()`; + } else { + return `require('./helpers/bundle-url').getBundleURL('${bundle.publicId}') + ${relativePathExpr}`; + } +} + +function shouldUseRuntimeManifest( + bundle: NamedBundle, + options: PluginOptions, +): boolean { + let env = bundle.env; + return ( + !env.isLibrary && + bundle.bundleBehavior !== 'inline' && + env.isBrowser() && + options.mode === 'production' + ); +} diff --git a/node_modules/@parcel/runtime-js/src/helpers/.babelrc b/node_modules/@parcel/runtime-js/src/helpers/.babelrc new file mode 100644 index 0000000..b3a9d5d --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/.babelrc @@ -0,0 +1,9 @@ +{ + "presets": [ + ["@babel/preset-env", { + "targets": { + "ie": 11 + } + }] + ] +} diff --git a/node_modules/@parcel/runtime-js/src/helpers/.eslintrc.json b/node_modules/@parcel/runtime-js/src/helpers/.eslintrc.json new file mode 100644 index 0000000..3dfbc79 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "@parcel/eslint-config-browser" +} diff --git a/node_modules/@parcel/runtime-js/src/helpers/browser/css-loader.js b/node_modules/@parcel/runtime-js/src/helpers/browser/css-loader.js new file mode 100644 index 0000000..6d8bede --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/browser/css-loader.js @@ -0,0 +1,32 @@ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadCSSBundle(bundle) { + return new Promise(function (resolve, reject) { + // Don't insert the same link element twice (e.g. if it was already in the HTML) + let existingLinks = document.getElementsByTagName('link'); + let isCurrentBundle = function (link) { + return link.href === bundle && link.rel.indexOf('stylesheet') > -1; + }; + + if ([].concat(existingLinks).some(isCurrentBundle)) { + resolve(); + return; + } + + var link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = bundle; + link.onerror = function (e) { + link.onerror = link.onload = null; + link.remove(); + reject(e); + }; + + link.onload = function () { + link.onerror = link.onload = null; + resolve(); + }; + + document.getElementsByTagName('head')[0].appendChild(link); + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/browser/html-loader.js b/node_modules/@parcel/runtime-js/src/helpers/browser/html-loader.js new file mode 100644 index 0000000..ece08c3 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/browser/html-loader.js @@ -0,0 +1,7 @@ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadHTMLBundle(bundle) { + return fetch(bundle).then(function (res) { + return res.text(); + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/browser/import-polyfill.js b/node_modules/@parcel/runtime-js/src/helpers/browser/import-polyfill.js new file mode 100644 index 0000000..d4ff6ce --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/browser/import-polyfill.js @@ -0,0 +1,32 @@ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function importModule(bundle) { + return new Promise((resolve, reject) => { + // Add a global function to handle when the script loads. + let globalName = `i${('' + Math.random()).slice(2)}`; + global[globalName] = m => { + resolve(m); + cleanup(); + }; + + // Remove script on load or error + let cleanup = () => { + delete global[globalName]; + script.onerror = null; + script.remove(); + }; + + // Append an inline script tag into the document head + let script = document.createElement('script'); + script.async = true; + script.type = 'module'; + script.charset = 'utf-8'; + script.textContent = `import * as m from '${bundle}'; ${globalName}(m);`; + script.onerror = function (e) { + reject(e); + cleanup(); + }; + + document.head.appendChild(script); + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/browser/js-loader.js b/node_modules/@parcel/runtime-js/src/helpers/browser/js-loader.js new file mode 100644 index 0000000..0338eb7 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/browser/js-loader.js @@ -0,0 +1,42 @@ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadJSBundle(bundle) { + return new Promise(function (resolve, reject) { + // Don't insert the same script twice (e.g. if it was already in the HTML) + let existingScripts = document.getElementsByTagName('script'); + let isCurrentBundle = function (script) { + return script.src === bundle; + }; + + if ([].concat(existingScripts).some(isCurrentBundle)) { + resolve(); + return; + } + + var preloadLink = document.createElement('link'); + preloadLink.href = bundle; + preloadLink.rel = 'preload'; + preloadLink.as = 'script'; + document.head.appendChild(preloadLink); + + var script = document.createElement('script'); + script.async = true; + script.type = 'text/javascript'; + script.src = bundle; + script.onerror = function (e) { + var error = new TypeError( + `Failed to fetch dynamically imported module: ${bundle}. Error: ${e.message}`, + ); + script.onerror = script.onload = null; + script.remove(); + reject(error); + }; + + script.onload = function () { + script.onerror = script.onload = null; + resolve(); + }; + + document.getElementsByTagName('head')[0].appendChild(script); + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/browser/prefetch-loader.js b/node_modules/@parcel/runtime-js/src/helpers/browser/prefetch-loader.js new file mode 100644 index 0000000..5756dd7 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/browser/prefetch-loader.js @@ -0,0 +1,13 @@ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function prefetchJSBundle(bundle, priority) { + var link = document.createElement('link'); + link.rel = 'prefetch'; + link.href = bundle; + if (priority) { + link.as = priority; + } + + document.getElementsByTagName('head')[0].appendChild(link); + return Promise.resolve(); +}, 'prefetch'); diff --git a/node_modules/@parcel/runtime-js/src/helpers/browser/preload-loader.js b/node_modules/@parcel/runtime-js/src/helpers/browser/preload-loader.js new file mode 100644 index 0000000..004b728 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/browser/preload-loader.js @@ -0,0 +1,19 @@ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function preloadJSBundle( + bundle, + priority, + isModule, +) { + var link = document.createElement('link'); + link.charset = 'utf-8'; + link.rel = isModule ? 'modulepreload' : 'preload'; + link.href = bundle; + if (priority) { + link.as = priority; + } + + document.getElementsByTagName('head')[0].appendChild(link); + return Promise.resolve(); +}, +'preload'); diff --git a/node_modules/@parcel/runtime-js/src/helpers/browser/wasm-loader.js b/node_modules/@parcel/runtime-js/src/helpers/browser/wasm-loader.js new file mode 100644 index 0000000..7286176 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/browser/wasm-loader.js @@ -0,0 +1,17 @@ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadWASMBundle(bundle) { + return fetch(bundle) + .then(function (res) { + if (WebAssembly.instantiateStreaming) { + return WebAssembly.instantiateStreaming(res); + } else { + return res.arrayBuffer().then(function (data) { + return WebAssembly.instantiate(data); + }); + } + }) + .then(function (wasmModule) { + return wasmModule.instance.exports; + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/bundle-manifest.js b/node_modules/@parcel/runtime-js/src/helpers/bundle-manifest.js new file mode 100644 index 0000000..1734264 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/bundle-manifest.js @@ -0,0 +1,19 @@ +var mapping = {}; + +function register(pairs) { + var keys = Object.keys(pairs); + for (var i = 0; i < keys.length; i++) { + mapping[keys[i]] = pairs[keys[i]]; + } +} + +function resolve(id) { + var resolved = mapping[id]; + if (resolved == null) { + throw new Error('Could not resolve bundle with id ' + id); + } + return resolved; +} + +module.exports.register = register; +module.exports.resolve = resolve; diff --git a/node_modules/@parcel/runtime-js/src/helpers/bundle-url.js b/node_modules/@parcel/runtime-js/src/helpers/bundle-url.js new file mode 100644 index 0000000..387da3f --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/bundle-url.js @@ -0,0 +1,51 @@ +var bundleURL = {}; +function getBundleURLCached(id) { + var value = bundleURL[id]; + if (!value) { + value = getBundleURL(); + bundleURL[id] = value; + } + + return value; +} + +function getBundleURL() { + try { + throw new Error(); + } catch (err) { + var matches = ('' + err.stack).match( + /(https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/[^)\n]+/g, + ); + if (matches) { + // The first two stack frames will be this function and getBundleURLCached. + // Use the 3rd one, which will be a runtime in the original bundle. + return getBaseURL(matches[2]); + } + } + + return '/'; +} + +function getBaseURL(url) { + return ( + ('' + url).replace( + /^((?:https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/.+)\/[^/]+$/, + '$1', + ) + '/' + ); +} + +// TODO: Replace uses with `new URL(url).origin` when ie11 is no longer supported. +function getOrigin(url) { + let matches = ('' + url).match( + /(https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/[^/]+/, + ); + if (!matches) { + throw new Error('Origin not found'); + } + return matches[0]; +} + +exports.getBundleURL = getBundleURLCached; +exports.getBaseURL = getBaseURL; +exports.getOrigin = getOrigin; diff --git a/node_modules/@parcel/runtime-js/src/helpers/cacheLoader.js b/node_modules/@parcel/runtime-js/src/helpers/cacheLoader.js new file mode 100644 index 0000000..9bf53e1 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/cacheLoader.js @@ -0,0 +1,29 @@ +let cachedBundles = {}; +let cachedPreloads = {}; +let cachedPrefetches = {}; + +function getCache(type) { + switch (type) { + case 'preload': + return cachedPreloads; + case 'prefetch': + return cachedPrefetches; + default: + return cachedBundles; + } +} + +module.exports = function cacheLoader(loader, type) { + return function (bundle) { + let cache = getCache(type); + + if (cache[bundle]) { + return cache[bundle]; + } + + return (cache[bundle] = loader.apply(null, arguments).catch(function (e) { + delete cache[bundle]; + throw e; + })); + }; +}; diff --git a/node_modules/@parcel/runtime-js/src/helpers/get-worker-url.js b/node_modules/@parcel/runtime-js/src/helpers/get-worker-url.js new file mode 100644 index 0000000..6b867b4 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/get-worker-url.js @@ -0,0 +1,15 @@ +module.exports = function loadWorker(workerUrl, origin, isESM) { + if (origin === self.location.origin) { + // If the worker bundle's url is on the same origin as the document, + // use the worker bundle's own url. + return workerUrl; + } else { + // Otherwise, create a blob URL which loads the worker bundle with `importScripts`. + let source = isESM + ? 'import ' + JSON.stringify(workerUrl) + ';' + : 'importScripts(' + JSON.stringify(workerUrl) + ');'; + return URL.createObjectURL( + new Blob([source], {type: 'application/javascript'}), + ); + } +}; diff --git a/node_modules/@parcel/runtime-js/src/helpers/node/css-loader.js b/node_modules/@parcel/runtime-js/src/helpers/node/css-loader.js new file mode 100644 index 0000000..06b8382 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/node/css-loader.js @@ -0,0 +1,4 @@ +// loading a CSS style is a no-op in Node.js +module.exports = function loadCSSBundle() { + return Promise.resolve(); +}; diff --git a/node_modules/@parcel/runtime-js/src/helpers/node/html-loader.js b/node_modules/@parcel/runtime-js/src/helpers/node/html-loader.js new file mode 100644 index 0000000..27d3edb --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/node/html-loader.js @@ -0,0 +1,18 @@ +const fs = require('fs'); +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadHTMLBundle(bundle) { + return new Promise(function (resolve, reject) { + fs.readFile(__dirname + bundle, 'utf8', function (err, data) { + if (err) { + reject(err); + } else { + // wait for the next event loop iteration, so we are sure + // the current module is fully loaded + setImmediate(function () { + resolve(data); + }); + } + }); + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/node/js-loader.js b/node_modules/@parcel/runtime-js/src/helpers/node/js-loader.js new file mode 100644 index 0000000..60c8327 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/node/js-loader.js @@ -0,0 +1,20 @@ +const fs = require('fs'); +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadJSBundle(bundle) { + return new Promise(function (resolve, reject) { + fs.readFile(__dirname + bundle, 'utf8', function (err, data) { + if (err) { + reject(err); + } else { + // wait for the next event loop iteration, so we are sure + // the current module is fully loaded + setImmediate(function () { + resolve(data); + }); + } + }); + }).then(function (code) { + new Function('', code)(); + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/node/wasm-loader.js b/node_modules/@parcel/runtime-js/src/helpers/node/wasm-loader.js new file mode 100644 index 0000000..29b4025 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/node/wasm-loader.js @@ -0,0 +1,20 @@ +const fs = require('fs'); +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadWASMBundle(bundle) { + return new Promise(function (resolve, reject) { + fs.readFile(__dirname + bundle, function (err, data) { + if (err) { + reject(err); + } else { + resolve(data.buffer); + } + }); + }) + .then(function (data) { + return WebAssembly.instantiate(data); + }) + .then(function (wasmModule) { + return wasmModule.instance.exports; + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/worker/js-loader.js b/node_modules/@parcel/runtime-js/src/helpers/worker/js-loader.js new file mode 100644 index 0000000..5c51688 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/worker/js-loader.js @@ -0,0 +1,13 @@ +/* global __parcel__importScripts__:readonly*/ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadJSBundle(bundle) { + return new Promise(function (resolve, reject) { + try { + __parcel__importScripts__(bundle); + resolve(); + } catch (e) { + reject(e); + } + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/worker/wasm-loader.js b/node_modules/@parcel/runtime-js/src/helpers/worker/wasm-loader.js new file mode 100644 index 0000000..7286176 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/worker/wasm-loader.js @@ -0,0 +1,17 @@ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadWASMBundle(bundle) { + return fetch(bundle) + .then(function (res) { + if (WebAssembly.instantiateStreaming) { + return WebAssembly.instantiateStreaming(res); + } else { + return res.arrayBuffer().then(function (data) { + return WebAssembly.instantiate(data); + }); + } + }) + .then(function (wasmModule) { + return wasmModule.instance.exports; + }); +}); diff --git a/node_modules/@parcel/runtime-react-refresh/LICENSE b/node_modules/@parcel/runtime-react-refresh/LICENSE new file mode 100644 index 0000000..7fb9bc9 --- /dev/null +++ b/node_modules/@parcel/runtime-react-refresh/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION 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/@parcel/runtime-react-refresh/lib/ReactRefreshRuntime.js b/node_modules/@parcel/runtime-react-refresh/lib/ReactRefreshRuntime.js new file mode 100644 index 0000000..4e3b4f3 --- /dev/null +++ b/node_modules/@parcel/runtime-react-refresh/lib/ReactRefreshRuntime.js @@ -0,0 +1,83 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +function _plugin() { + const data = require("@parcel/plugin"); + + _plugin = function () { + return data; + }; + + return data; +} + +function _utils() { + const data = require("@parcel/utils"); + + _utils = function () { + return data; + }; + + return data; +} + +const CODE = ` +var Refresh = require('react-refresh/runtime'); +var ErrorOverlay = require('react-error-overlay'); + +Refresh.injectIntoGlobalHook(window); +window.$RefreshReg$ = function() {}; +window.$RefreshSig$ = function() { + return function(type) { + return type; + }; +}; + +ErrorOverlay.setEditorHandler(function editorHandler(errorLocation) { + let file = \`\${errorLocation.fileName}:\${errorLocation.lineNumber || 1}:\${errorLocation.colNumber || 1}\`; + fetch(\`/__parcel_launch_editor?file=\${encodeURIComponent(file)}\`); +}); + +ErrorOverlay.startReportingRuntimeErrors({ + onError: function () {}, +}); + +window.addEventListener('parcelhmraccept', () => { + ErrorOverlay.dismissRuntimeErrors(); +}); +`; + +var _default = new (_plugin().Runtime)({ + async apply({ + bundle, + options + }) { + if (bundle.type !== 'js' || !options.hmrOptions || !bundle.env.isBrowser() || bundle.env.isLibrary || bundle.env.isWorker() || bundle.env.isWorklet() || options.mode !== 'development' || bundle.env.sourceType !== 'module') { + return; + } + + let entries = bundle.getEntryAssets(); + + for (let entry of entries) { + var _pkg$config, _pkg$config$dependenc, _pkg$config2, _pkg$config2$devDepen, _pkg$config3, _pkg$config3$peerDepe; + + // TODO: do this in loadConfig - but it doesn't have access to the bundle... + let pkg = await (0, _utils().loadConfig)(options.inputFS, entry.filePath, ['package.json'], options.projectRoot); + + if (pkg !== null && pkg !== void 0 && (_pkg$config = pkg.config) !== null && _pkg$config !== void 0 && (_pkg$config$dependenc = _pkg$config.dependencies) !== null && _pkg$config$dependenc !== void 0 && _pkg$config$dependenc.react || pkg !== null && pkg !== void 0 && (_pkg$config2 = pkg.config) !== null && _pkg$config2 !== void 0 && (_pkg$config2$devDepen = _pkg$config2.devDependencies) !== null && _pkg$config2$devDepen !== void 0 && _pkg$config2$devDepen.react || pkg !== null && pkg !== void 0 && (_pkg$config3 = pkg.config) !== null && _pkg$config3 !== void 0 && (_pkg$config3$peerDepe = _pkg$config3.peerDependencies) !== null && _pkg$config3$peerDepe !== void 0 && _pkg$config3$peerDepe.react) { + return { + filePath: __filename, + code: CODE, + isEntry: true + }; + } + } + } + +}); + +exports.default = _default; \ No newline at end of file diff --git a/node_modules/@parcel/runtime-react-refresh/package.json b/node_modules/@parcel/runtime-react-refresh/package.json new file mode 100644 index 0000000..5ee4f66 --- /dev/null +++ b/node_modules/@parcel/runtime-react-refresh/package.json @@ -0,0 +1,29 @@ +{ + "name": "@parcel/runtime-react-refresh", + "version": "2.8.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/ReactRefreshRuntime.js", + "source": "src/ReactRefreshRuntime.js", + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "react-error-overlay": "6.0.9", + "react-refresh": "^0.9.0" + }, + "gitHead": "349a6caf40ec8abb6a49fcae0765f8f8deb2073d" +} diff --git a/node_modules/@parcel/runtime-react-refresh/src/ReactRefreshRuntime.js b/node_modules/@parcel/runtime-react-refresh/src/ReactRefreshRuntime.js new file mode 100644 index 0000000..d995376 --- /dev/null +++ b/node_modules/@parcel/runtime-react-refresh/src/ReactRefreshRuntime.js @@ -0,0 +1,69 @@ +// @flow strict-local + +import {Runtime} from '@parcel/plugin'; +import {loadConfig} from '@parcel/utils'; + +const CODE = ` +var Refresh = require('react-refresh/runtime'); +var ErrorOverlay = require('react-error-overlay'); + +Refresh.injectIntoGlobalHook(window); +window.$RefreshReg$ = function() {}; +window.$RefreshSig$ = function() { + return function(type) { + return type; + }; +}; + +ErrorOverlay.setEditorHandler(function editorHandler(errorLocation) { + let file = \`\${errorLocation.fileName}:\${errorLocation.lineNumber || 1}:\${errorLocation.colNumber || 1}\`; + fetch(\`/__parcel_launch_editor?file=\${encodeURIComponent(file)}\`); +}); + +ErrorOverlay.startReportingRuntimeErrors({ + onError: function () {}, +}); + +window.addEventListener('parcelhmraccept', () => { + ErrorOverlay.dismissRuntimeErrors(); +}); +`; + +export default (new Runtime({ + async apply({bundle, options}) { + if ( + bundle.type !== 'js' || + !options.hmrOptions || + !bundle.env.isBrowser() || + bundle.env.isLibrary || + bundle.env.isWorker() || + bundle.env.isWorklet() || + options.mode !== 'development' || + bundle.env.sourceType !== 'module' + ) { + return; + } + + let entries = bundle.getEntryAssets(); + for (let entry of entries) { + // TODO: do this in loadConfig - but it doesn't have access to the bundle... + let pkg = await loadConfig( + options.inputFS, + entry.filePath, + ['package.json'], + options.projectRoot, + ); + if ( + pkg?.config?.dependencies?.react || + pkg?.config?.devDependencies?.react || + pkg?.config?.peerDependencies?.react + ) { + return { + filePath: __filename, + code: CODE, + isEntry: true, + }; + } + } + }, +}): Runtime); diff --git a/node_modules/@parcel/runtime-service-worker/LICENSE b/node_modules/@parcel/runtime-service-worker/LICENSE new file mode 100644 index 0000000..7fb9bc9 --- /dev/null +++ b/node_modules/@parcel/runtime-service-worker/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION 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/@parcel/runtime-service-worker/lib/ServiceWorkerRuntime.js b/node_modules/@parcel/runtime-service-worker/lib/ServiceWorkerRuntime.js new file mode 100644 index 0000000..52813e3 --- /dev/null +++ b/node_modules/@parcel/runtime-service-worker/lib/ServiceWorkerRuntime.js @@ -0,0 +1,73 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +function _plugin() { + const data = require("@parcel/plugin"); + + _plugin = function () { + return data; + }; + + return data; +} + +function _utils() { + const data = require("@parcel/utils"); + + _utils = function () { + return data; + }; + + return data; +} + +var _default = new (_plugin().Runtime)({ + apply({ + bundle, + bundleGraph + }) { + if (bundle.env.context !== 'service-worker') { + return []; + } + + let asset = bundle.traverse((node, _, actions) => { + if (node.type === 'dependency' && node.value.specifier === '@parcel/service-worker' && !bundleGraph.isDependencySkipped(node.value)) { + actions.stop(); + return bundleGraph.getResolvedAsset(node.value, bundle); + } + }); + + if (!asset) { + return []; + } + + let manifest = []; + bundleGraph.traverseBundles(b => { + if (b.bundleBehavior === 'inline' || b.id === bundle.id) { + return; + } + + manifest.push((0, _utils().urlJoin)(b.target.publicUrl, b.name)); + }); + let code = `import {_register} from '@parcel/service-worker'; +const manifest = ${JSON.stringify(manifest)}; +const version = ${JSON.stringify(bundle.hashReference)}; +_register(manifest, version); +`; + return [{ + filePath: asset.filePath, + code, + isEntry: true, + env: { + sourceType: 'module' + } + }]; + } + +}); + +exports.default = _default; \ No newline at end of file diff --git a/node_modules/@parcel/runtime-service-worker/package.json b/node_modules/@parcel/runtime-service-worker/package.json new file mode 100644 index 0000000..0303aa9 --- /dev/null +++ b/node_modules/@parcel/runtime-service-worker/package.json @@ -0,0 +1,28 @@ +{ + "name": "@parcel/runtime-service-worker", + "version": "2.8.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "./lib/ServiceWorkerRuntime.js", + "source": "./src/ServiceWorkerRuntime.js", + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "dependencies": { + "@parcel/plugin": "2.8.3", + "@parcel/utils": "2.8.3", + "nullthrows": "^1.1.1" + }, + "gitHead": "349a6caf40ec8abb6a49fcae0765f8f8deb2073d" +} diff --git a/node_modules/@parcel/runtime-service-worker/src/ServiceWorkerRuntime.js b/node_modules/@parcel/runtime-service-worker/src/ServiceWorkerRuntime.js new file mode 100644 index 0000000..2aa01b0 --- /dev/null +++ b/node_modules/@parcel/runtime-service-worker/src/ServiceWorkerRuntime.js @@ -0,0 +1,50 @@ +// @flow +import {Runtime} from '@parcel/plugin'; +import {urlJoin} from '@parcel/utils'; + +export default (new Runtime({ + apply({bundle, bundleGraph}) { + if (bundle.env.context !== 'service-worker') { + return []; + } + + let asset = bundle.traverse((node, _, actions) => { + if ( + node.type === 'dependency' && + node.value.specifier === '@parcel/service-worker' && + !bundleGraph.isDependencySkipped(node.value) + ) { + actions.stop(); + return bundleGraph.getResolvedAsset(node.value, bundle); + } + }); + + if (!asset) { + return []; + } + + let manifest = []; + bundleGraph.traverseBundles(b => { + if (b.bundleBehavior === 'inline' || b.id === bundle.id) { + return; + } + + manifest.push(urlJoin(b.target.publicUrl, b.name)); + }); + + let code = `import {_register} from '@parcel/service-worker'; +const manifest = ${JSON.stringify(manifest)}; +const version = ${JSON.stringify(bundle.hashReference)}; +_register(manifest, version); +`; + + return [ + { + filePath: asset.filePath, + code, + isEntry: true, + env: {sourceType: 'module'}, + }, + ]; + }, +}): Runtime); diff --git a/node_modules/@parcel/source-map/README.md b/node_modules/@parcel/source-map/README.md new file mode 100644 index 0000000..3e93640 --- /dev/null +++ b/node_modules/@parcel/source-map/README.md @@ -0,0 +1,128 @@ +# Parcel's source-map library + +A source map library purpose-build for the Parcel bundler with a focus on fast combining and manipulating of source-maps. + +To learn more about how sourcemaps are formatted and how they work, you can have a look at the [SourceMap Specification](https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k). + +## How to use this library? + +If you want to use this library in your project or are looking to write a Parcel plugin with sourcemap support this should explain how you could get started. + +For more information we have added doctypes to each function of the SourceMap class so you can have an in depth look at what everything does. + +### Creating a SourceMap instance + +You can create a sourcemap from another sourcemap or by creating it one mapping at a time. + +#### Creating from existing sourcemap + +To create a sourcemap from an existing sourcemap you have to ensure it is a JS Object first by asking for the object version from whichever transpiler you're running or by parsing the serialised map using `JSON.parse` or any other JSON parser. + +After this you can call the function `addVLQMap(map, lineOffset, columnOffset)` this function takes in the parameters `map`, `lineOffset` and `columnOffset`. The map argument corresponds to the sourcemap object. The line and column offset are optional parameters used for offsetting the generated line and column. (this can be used when post-processing or wrapping the code linked to the sourcemap, in Parcel this is used when combining maps). + +Example: + +```JS +import SourceMap from '@parcel/source-map'; + +const RAW_SOURCEMAP = { + version: 3, + file: "helloworld.js", + sources: ["helloworld.coffee"], + names: [], + mappings: "AAAA;AAAA,EAAA,OAAO,CAAC,GAAR,CAAY,aAAZ,CAAA,CAAA;AAAA", +}; + +let sourcemap = new SourceMap(); +sourcemap.addVLQMap(RAW_SOURCEMAP); + +// This function removes the underlying references in the native code +sourcemap.delete(); +``` + +#### Creating a sourcemap one mapping at a time + +If you want to use this library to create a sourcemap from scratch you can, for this you can call the `addIndexedMapping(mapping, lineOffset, columnOffset)` function. + +Example: + +```JS +import SourceMap from '@parcel/source-map'; + +let sourcemap = new SourceMap(); + +// Add a single mapping +sourcemap.addIndexedMapping({ + generated: { + // line index starts at 1 + line: 1, + // column index starts at 0 + column: 4 + }, + original: { + // line index starts at 1 + line: 1, + // column index starts at 0 + column: 4 + }, + source: 'index.js', + // Name is optional + name: 'A' +}); + +// This function removes the underlying references in the native code +sourcemap.delete(); +``` + +### Caching + +For caching sourcemaps we have a `toBuffer()` function which returns a buffer that can be saved on disk for later use and combining sourcemaps very quickly. + +You can add a cached map to a SourceMap instance using the `addBuffer(buffer, lineOffset)` function, where you can also offset the generated line and column. + +## Inspiration and purpose + +### Why did we write this library + +Parcel is a performance conscious bundler, and therefore we like to optimise Parcel's performance as much as possible. + +Our original source-map implementation used mozilla's source-map and a bunch of javascript and had issues with memory usage and serialization times (we were keeping all mappings in memory using JS objects and write/read it using JSON for caching). + +This implementation has been written from scratch in Rust minimizing the memory usage, by utilizing indexes for sources and names and optimizing serialization times by using Buffers instead of JSON for caching. + +### Previous works and inspiration + +Without these libraries this library wouldn't be as good as it is today. We've inspired and optimized our code using ideas and patterns used inside these libraries as well as used it to figure out how sourcemaps should be handled properly. + +- [source-map by Mozilla](https://github.com/mozilla/source-map) +- [source-map-mappings by Nick Fitzgerald](https://github.com/fitzgen/source-map-mappings) +- [sourcemap-codec by Rich Harris](https://github.com/Rich-Harris/sourcemap-codec) + +## Contributing to this library + +All contributions to this library are welcome as is with any part of Parcel's vast collection of libraries and tools. + +### Prerequisites + +To be able to build and work on this project you need to have the following tools installed: + +- [`node.js`](https://nodejs.org/en/) +- [`Rust`](https://rustup.rs/) + +### Building the project + +For development purposes you might want to build or rebuild the project, for this you need to build the N-API module and JS Code. + +To do this run the following commands: (for more information about this you can have a look in `./package.json` and `./Makefile`) + +```shell +yarn transpile && yarn build:node +``` + +### Tagging a release + +Before you're able to tag a release ensure to have cargo-release installed `cargo install cargo-release`, we use it to tag the cargo files with a release tag. + +```shell +yarn tag-release +``` diff --git a/node_modules/@parcel/source-map/dist/SourceMap.js b/node_modules/@parcel/source-map/dist/SourceMap.js new file mode 100644 index 0000000..dd4308b --- /dev/null +++ b/node_modules/@parcel/source-map/dist/SourceMap.js @@ -0,0 +1,483 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _path = _interopRequireDefault(require("path")); + +var _utils = require("./utils"); + +var _package = require("../package.json"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +class SourceMap { + /** + * @private + */ + + /** + * @private + */ + + /** + * Construct a SourceMap instance + * + * @param projectRoot root directory of the project, this is to ensure all source paths are relative to this path + */ + constructor(projectRoot = '/', buffer) { + _defineProperty(this, "sourceMapInstance", void 0); + + _defineProperty(this, "projectRoot", void 0); + } // Use this to invalidate saved buffers, we don't check versioning at all in Rust + + + get libraryVersion() { + return _package.version; + } + /** + * Generates an empty map from the provided fileName and sourceContent + * + * @param sourceName path of the source file + * @param sourceContent content of the source file + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + */ + + + static generateEmptyMap({ + projectRoot, + sourceName, + sourceContent, + lineOffset = 0 + }) { + throw new Error('SourceMap.generateEmptyMap() must be implemented when extending SourceMap'); + } + /** + * Generates an empty map from the provided fileName and sourceContent + * + * @param sourceName path of the source file + * @param sourceContent content of the source file + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + */ + + + addEmptyMap(sourceName, sourceContent, lineOffset = 0) { + this.sourceMapInstance.addEmptyMap(sourceName, sourceContent, lineOffset); + return this; + } + /** + * Appends raw VLQ mappings to the sourcemaps + */ + + + addVLQMap(map, lineOffset = 0, columnOffset = 0) { + throw new Error('SourceMap.addVLQMap() must be implemented when extending SourceMap'); + } + /** + * Appends another sourcemap instance to this sourcemap + * + * @param buffer the sourcemap buffer that should get appended to this sourcemap + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + */ + + + addSourceMap(sourcemap, lineOffset = 0) { + throw new Error('Not implemented by child class'); + } + /** + * Appends a buffer to this sourcemap + * Note: The buffer should be generated by this library + * @param buffer the sourcemap buffer that should get appended to this sourcemap + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + */ + + + addBuffer(buffer, lineOffset = 0) { + throw new Error('Not implemented by child class'); + } + /** + * Appends a Mapping object to this sourcemap + * Note: line numbers start at 1 due to mozilla's source-map library + * + * @param mapping the mapping that should be appended to this sourcemap + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + * @param columnOffset an offset that gets added to the sourceColumn index of each mapping + */ + + + addIndexedMapping(mapping, lineOffset = 0, columnOffset = 0) { + // Not sure if it'll be worth it to add this back to C++, wrapping it in an array probably doesn't do that much harm in JS? + // Also we barely use this function anyway... + this.addIndexedMappings([mapping], lineOffset, columnOffset); + } + + _indexedMappingsToInt32Array(mappings, lineOffset = 0, columnOffset = 0) { + // Encode all mappings into a single typed array and make one call + // to C++ instead of one for each mapping to improve performance. + let mappingBuffer = new Int32Array(mappings.length * 6); + let sources = new Map(); + let names = new Map(); + let i = 0; + + for (let mapping of mappings) { + let hasValidOriginal = mapping.original && typeof mapping.original.line === 'number' && !isNaN(mapping.original.line) && typeof mapping.original.column === 'number' && !isNaN(mapping.original.column); + mappingBuffer[i++] = mapping.generated.line + lineOffset - 1; + mappingBuffer[i++] = mapping.generated.column + columnOffset; // $FlowFixMe + + mappingBuffer[i++] = hasValidOriginal ? mapping.original.line - 1 : -1; // $FlowFixMe + + mappingBuffer[i++] = hasValidOriginal ? mapping.original.column : -1; + let sourceIndex = mapping.source ? sources.get(mapping.source) : -1; + + if (sourceIndex == null) { + // $FlowFixMe + sourceIndex = this.addSource(mapping.source); // $FlowFixMe + + sources.set(mapping.source, sourceIndex); + } + + mappingBuffer[i++] = sourceIndex; + let nameIndex = mapping.name ? names.get(mapping.name) : -1; + + if (nameIndex == null) { + // $FlowFixMe + nameIndex = this.addName(mapping.name); // $FlowFixMe + + names.set(mapping.name, nameIndex); + } + + mappingBuffer[i++] = nameIndex; + } + + return mappingBuffer; + } + /** + * Appends an array of Mapping objects to this sourcemap + * This is useful when improving performance if a library provides the non-serialised mappings + * + * Note: This is only faster if they generate the serialised map lazily + * Note: line numbers start at 1 due to mozilla's source-map library + * + * @param mappings an array of mapping objects + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + * @param columnOffset an offset that gets added to the sourceColumn index of each mapping + */ + + + addIndexedMappings(mappings, lineOffset = 0, columnOffset = 0) { + let mappingBuffer = this._indexedMappingsToInt32Array(mappings, lineOffset, columnOffset); + + this.sourceMapInstance.addIndexedMappings(mappingBuffer); + return this; + } + /** + * Appends a name to the sourcemap + * + * @param name the name that should be appended to the names array + * @returns the index of the added name in the names array + */ + + + addName(name) { + return this.sourceMapInstance.addName(name); + } + /** + * Appends an array of names to the sourcemap's names array + * + * @param names an array of names to add to the sourcemap + * @returns an array of indexes of the names in the sourcemap's names array, has the same order as the provided names array + */ + + + addNames(names) { + return names.map(n => this.addName(n)); + } + /** + * Appends a source to the sourcemap's sources array + * + * @param source a filepath that should be appended to the sources array + * @returns the index of the added source filepath in the sources array + */ + + + addSource(source) { + return this.sourceMapInstance.addSource(source); + } + /** + * Appends an array of sources to the sourcemap's sources array + * + * @param sources an array of filepaths which should sbe appended to the sources array + * @returns an array of indexes of the sources that have been added to the sourcemap, returned in the same order as provided in the argument + */ + + + addSources(sources) { + return sources.map(s => this.addSource(s)); + } + /** + * Get the index in the sources array for a certain source file filepath + * + * @param source the filepath of the source file + */ + + + getSourceIndex(source) { + return this.sourceMapInstance.getSourceIndex(source); + } + /** + * Get the source file filepath for a certain index of the sources array + * + * @param index the index of the source in the sources array + */ + + + getSource(index) { + return this.sourceMapInstance.getSource(index); + } + /** + * Get a list of all sources + */ + + + getSources() { + return this.sourceMapInstance.getSources(); + } + /** + * Set the sourceContent for a certain file + * this is optional and is only recommended for files that we cannot read in at the end when we serialise the sourcemap + * + * @param sourceName the path of the sourceFile + * @param sourceContent the content of the sourceFile + */ + + + setSourceContent(sourceName, sourceContent) { + return this.sourceMapInstance.setSourceContentBySource(sourceName, sourceContent); + } + /** + * Get the content of a source file if it is inlined as part of the source-map + * + * @param sourceName filename + */ + + + getSourceContent(sourceName) { + return this.sourceMapInstance.getSourceContentBySource(sourceName); + } + /** + * Get a list of all sources + */ + + + getSourcesContent() { + return this.sourceMapInstance.getSourcesContent(); + } + /** + * Get a map of the source and it's corresponding source content + */ + + + getSourcesContentMap() { + let sources = this.getSources(); + let sourcesContent = this.getSourcesContent(); + let results = {}; + + for (let i = 0; i < sources.length; i++) { + results[sources[i]] = sourcesContent[i] || null; + } + + return results; + } + /** + * Get the index in the names array for a certain name + * + * @param name the name you want to find the index of + */ + + + getNameIndex(name) { + return this.sourceMapInstance.getNameIndex(name); + } + /** + * Get the name for a certain index of the names array + * + * @param index the index of the name in the names array + */ + + + getName(index) { + return this.sourceMapInstance.getName(index); + } + /** + * Get a list of all names + */ + + + getNames() { + return this.sourceMapInstance.getNames(); + } + /** + * Get a list of all mappings + */ + + + getMappings() { + return this.sourceMapInstance.getMappings(); + } + /** + * Convert a Mapping object that uses indexes for name and source to the actual value of name and source + * + * Note: This is only used internally, should not be used externally and will probably eventually get + * handled directly in C++ for improved performance + * + * @param index the Mapping that should get converted to a string-based Mapping + */ + + + indexedMappingToStringMapping(mapping) { + if (!mapping) return mapping; + + if (mapping.source != null && mapping.source > -1) { + // $FlowFixMe + mapping.source = this.getSource(mapping.source); + } + + if (mapping.name != null && mapping.name > -1) { + // $FlowFixMe + mapping.name = this.getName(mapping.name); + } // $FlowFixMe + + + return mapping; + } + /** + * Remaps original positions from this map to the ones in the provided map + * + * This works by finding the closest generated mapping in the provided map + * to original mappings of this map and remapping those to be the original + * mapping of the provided map. + * + * @param buffer exported SourceMap as a buffer + */ + + + extends(buffer) { + throw new Error('Should be implemented by extending'); + } + /** + * Returns an object with mappings, sources and names + * This should only be used for tests, debugging and visualising sourcemaps + * + * Note: This is a fairly slow operation + */ + + + getMap() { + return { + mappings: this.getMappings(), + sources: this.getSources(), + sourcesContent: this.getSourcesContent(), + names: this.getNames() + }; + } + /** + * Searches through the sourcemap and returns a mapping that is close to the provided generated line and column + * + * @param line the line in the generated code (starts at 1) + * @param column the column in the generated code (starts at 0) + */ + + + findClosestMapping(line, column) { + let mapping = this.sourceMapInstance.findClosestMapping(line - 1, column); + + if (mapping) { + let v = this.indexedMappingToStringMapping(mapping); + return v; + } else { + return null; + } + } + /** + * Offset mapping lines from a certain position + * + * @param line the line in the generated code (starts at 1) + * @param lineOffset the amount of lines to offset mappings by + */ + + + offsetLines(line, lineOffset) { + if (line < 1 || line + lineOffset < 1) { + throw new Error('Line has to be positive'); + } + + if (lineOffset === 0) { + return; + } + + this.sourceMapInstance.offsetLines(line - 1, lineOffset); + } + /** + * Offset mapping columns from a certain position + * + * @param line the line in the generated code (starts at 1) + * @param column the column in the generated code (starts at 0) + * @param columnOffset the amount of columns to offset mappings by + */ + + + offsetColumns(line, column, columnOffset) { + if (line < 1 || column < 0 || column + columnOffset < 0) { + throw new Error('Line and Column has to be positive'); + } + + if (columnOffset === 0) { + return; + } + + this.sourceMapInstance.offsetColumns(line - 1, column, columnOffset); + } + /** + * Returns a buffer that represents this sourcemap, used for caching + */ + + + toBuffer() { + return this.sourceMapInstance.toBuffer(); + } + /** + * Returns a serialised map using VLQ Mappings + */ + + + toVLQ() { + return this.sourceMapInstance.toVLQ(); + } + /** + * A function that has to be called at the end of the SourceMap's lifecycle to ensure all memory and native bindings get de-allocated + */ + + + delete() { + throw new Error('SourceMap.delete() must be implemented when extending SourceMap'); + } + /** + * Returns a serialised map + * + * @param options options used for formatting the serialised map + */ + + + async stringify(options) { + return (0, _utils.partialVlqMapToSourceMap)(this.toVLQ(), { ...options, + rootDir: this.projectRoot || options.rootDir + }); + } + +} + +exports.default = SourceMap; \ No newline at end of file diff --git a/node_modules/@parcel/source-map/dist/SourceMap.js.flow b/node_modules/@parcel/source-map/dist/SourceMap.js.flow new file mode 100644 index 0000000..7a98d93 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/SourceMap.js.flow @@ -0,0 +1,444 @@ +// @flow +import type { ParsedMap, VLQMap, SourceMapStringifyOptions, IndexedMapping, GenerateEmptyMapOptions } from './types'; + +import path from 'path'; +import { generateInlineMap, partialVlqMapToSourceMap } from './utils'; +import { version } from '../package.json'; + +export default class SourceMap { + /** + * @private + */ + sourceMapInstance: any; + + /** + * @private + */ + projectRoot: string; + + /** + * Construct a SourceMap instance + * + * @param projectRoot root directory of the project, this is to ensure all source paths are relative to this path + */ + constructor(projectRoot: string = '/', buffer?: Buffer) {} + + // Use this to invalidate saved buffers, we don't check versioning at all in Rust + get libraryVersion(): string { + return version; + } + + /** + * Generates an empty map from the provided fileName and sourceContent + * + * @param sourceName path of the source file + * @param sourceContent content of the source file + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + */ + static generateEmptyMap({ + projectRoot, + sourceName, + sourceContent, + lineOffset = 0, + }: GenerateEmptyMapOptions): SourceMap { + throw new Error('SourceMap.generateEmptyMap() must be implemented when extending SourceMap'); + } + + /** + * Generates an empty map from the provided fileName and sourceContent + * + * @param sourceName path of the source file + * @param sourceContent content of the source file + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + */ + addEmptyMap(sourceName: string, sourceContent: string, lineOffset: number = 0): SourceMap { + this.sourceMapInstance.addEmptyMap(sourceName, sourceContent, lineOffset); + return this; + } + + /** + * Appends raw VLQ mappings to the sourcemaps + */ + addVLQMap(map: VLQMap, lineOffset: number = 0, columnOffset: number = 0): SourceMap { + throw new Error('SourceMap.addVLQMap() must be implemented when extending SourceMap'); + } + + /** + * Appends another sourcemap instance to this sourcemap + * + * @param buffer the sourcemap buffer that should get appended to this sourcemap + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + */ + addSourceMap(sourcemap: SourceMap, lineOffset: number = 0): SourceMap { + throw new Error('Not implemented by child class'); + } + + /** + * Appends a buffer to this sourcemap + * Note: The buffer should be generated by this library + * @param buffer the sourcemap buffer that should get appended to this sourcemap + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + */ + addBuffer(buffer: Buffer, lineOffset: number = 0): SourceMap { + throw new Error('Not implemented by child class'); + } + + /** + * Appends a Mapping object to this sourcemap + * Note: line numbers start at 1 due to mozilla's source-map library + * + * @param mapping the mapping that should be appended to this sourcemap + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + * @param columnOffset an offset that gets added to the sourceColumn index of each mapping + */ + addIndexedMapping(mapping: IndexedMapping, lineOffset?: number = 0, columnOffset?: number = 0): void { + // Not sure if it'll be worth it to add this back to C++, wrapping it in an array probably doesn't do that much harm in JS? + // Also we barely use this function anyway... + this.addIndexedMappings([mapping], lineOffset, columnOffset); + } + + _indexedMappingsToInt32Array( + mappings: Array>, + lineOffset?: number = 0, + columnOffset?: number = 0 + ): Int32Array { + // Encode all mappings into a single typed array and make one call + // to C++ instead of one for each mapping to improve performance. + let mappingBuffer = new Int32Array(mappings.length * 6); + let sources: Map = new Map(); + let names: Map = new Map(); + let i = 0; + for (let mapping of mappings) { + let hasValidOriginal = + mapping.original && + typeof mapping.original.line === 'number' && + !isNaN(mapping.original.line) && + typeof mapping.original.column === 'number' && + !isNaN(mapping.original.column); + + mappingBuffer[i++] = mapping.generated.line + lineOffset - 1; + mappingBuffer[i++] = mapping.generated.column + columnOffset; + // $FlowFixMe + mappingBuffer[i++] = hasValidOriginal ? mapping.original.line - 1 : -1; + // $FlowFixMe + mappingBuffer[i++] = hasValidOriginal ? mapping.original.column : -1; + + let sourceIndex = mapping.source ? sources.get(mapping.source) : -1; + if (sourceIndex == null) { + // $FlowFixMe + sourceIndex = this.addSource(mapping.source); + // $FlowFixMe + sources.set(mapping.source, sourceIndex); + } + mappingBuffer[i++] = sourceIndex; + + let nameIndex = mapping.name ? names.get(mapping.name) : -1; + if (nameIndex == null) { + // $FlowFixMe + nameIndex = this.addName(mapping.name); + // $FlowFixMe + names.set(mapping.name, nameIndex); + } + mappingBuffer[i++] = nameIndex; + } + + return mappingBuffer; + } + + /** + * Appends an array of Mapping objects to this sourcemap + * This is useful when improving performance if a library provides the non-serialised mappings + * + * Note: This is only faster if they generate the serialised map lazily + * Note: line numbers start at 1 due to mozilla's source-map library + * + * @param mappings an array of mapping objects + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + * @param columnOffset an offset that gets added to the sourceColumn index of each mapping + */ + addIndexedMappings( + mappings: Array>, + lineOffset?: number = 0, + columnOffset?: number = 0 + ): SourceMap { + let mappingBuffer = this._indexedMappingsToInt32Array(mappings, lineOffset, columnOffset); + this.sourceMapInstance.addIndexedMappings(mappingBuffer); + return this; + } + + /** + * Appends a name to the sourcemap + * + * @param name the name that should be appended to the names array + * @returns the index of the added name in the names array + */ + addName(name: string): number { + return this.sourceMapInstance.addName(name); + } + + /** + * Appends an array of names to the sourcemap's names array + * + * @param names an array of names to add to the sourcemap + * @returns an array of indexes of the names in the sourcemap's names array, has the same order as the provided names array + */ + addNames(names: Array): Array { + return names.map((n) => this.addName(n)); + } + + /** + * Appends a source to the sourcemap's sources array + * + * @param source a filepath that should be appended to the sources array + * @returns the index of the added source filepath in the sources array + */ + addSource(source: string): number { + return this.sourceMapInstance.addSource(source); + } + + /** + * Appends an array of sources to the sourcemap's sources array + * + * @param sources an array of filepaths which should sbe appended to the sources array + * @returns an array of indexes of the sources that have been added to the sourcemap, returned in the same order as provided in the argument + */ + addSources(sources: Array): Array { + return sources.map((s) => this.addSource(s)); + } + + /** + * Get the index in the sources array for a certain source file filepath + * + * @param source the filepath of the source file + */ + getSourceIndex(source: string): number { + return this.sourceMapInstance.getSourceIndex(source); + } + + /** + * Get the source file filepath for a certain index of the sources array + * + * @param index the index of the source in the sources array + */ + getSource(index: number): string { + return this.sourceMapInstance.getSource(index); + } + + /** + * Get a list of all sources + */ + getSources(): Array { + return this.sourceMapInstance.getSources(); + } + + /** + * Set the sourceContent for a certain file + * this is optional and is only recommended for files that we cannot read in at the end when we serialise the sourcemap + * + * @param sourceName the path of the sourceFile + * @param sourceContent the content of the sourceFile + */ + setSourceContent(sourceName: string, sourceContent: string): void { + return this.sourceMapInstance.setSourceContentBySource(sourceName, sourceContent); + } + + /** + * Get the content of a source file if it is inlined as part of the source-map + * + * @param sourceName filename + */ + getSourceContent(sourceName: string): string | null { + return this.sourceMapInstance.getSourceContentBySource(sourceName); + } + + /** + * Get a list of all sources + */ + getSourcesContent(): Array { + return this.sourceMapInstance.getSourcesContent(); + } + + /** + * Get a map of the source and it's corresponding source content + */ + getSourcesContentMap(): { [key: string]: string | null } { + let sources = this.getSources(); + let sourcesContent = this.getSourcesContent(); + let results = {}; + for (let i = 0; i < sources.length; i++) { + results[sources[i]] = sourcesContent[i] || null; + } + return results; + } + + /** + * Get the index in the names array for a certain name + * + * @param name the name you want to find the index of + */ + getNameIndex(name: string): number { + return this.sourceMapInstance.getNameIndex(name); + } + + /** + * Get the name for a certain index of the names array + * + * @param index the index of the name in the names array + */ + getName(index: number): string { + return this.sourceMapInstance.getName(index); + } + + /** + * Get a list of all names + */ + getNames(): Array { + return this.sourceMapInstance.getNames(); + } + + /** + * Get a list of all mappings + */ + getMappings(): Array> { + return this.sourceMapInstance.getMappings(); + } + + /** + * Convert a Mapping object that uses indexes for name and source to the actual value of name and source + * + * Note: This is only used internally, should not be used externally and will probably eventually get + * handled directly in C++ for improved performance + * + * @param index the Mapping that should get converted to a string-based Mapping + */ + indexedMappingToStringMapping(mapping: ?IndexedMapping): ?IndexedMapping { + if (!mapping) return mapping; + + if (mapping.source != null && mapping.source > -1) { + // $FlowFixMe + mapping.source = this.getSource(mapping.source); + } + + if (mapping.name != null && mapping.name > -1) { + // $FlowFixMe + mapping.name = this.getName(mapping.name); + } + + // $FlowFixMe + return mapping; + } + + /** + * Remaps original positions from this map to the ones in the provided map + * + * This works by finding the closest generated mapping in the provided map + * to original mappings of this map and remapping those to be the original + * mapping of the provided map. + * + * @param buffer exported SourceMap as a buffer + */ + extends(buffer: Buffer | SourceMap): SourceMap { + throw new Error('Should be implemented by extending'); + } + + /** + * Returns an object with mappings, sources and names + * This should only be used for tests, debugging and visualising sourcemaps + * + * Note: This is a fairly slow operation + */ + getMap(): ParsedMap { + return { + mappings: this.getMappings(), + sources: this.getSources(), + sourcesContent: this.getSourcesContent(), + names: this.getNames(), + }; + } + + /** + * Searches through the sourcemap and returns a mapping that is close to the provided generated line and column + * + * @param line the line in the generated code (starts at 1) + * @param column the column in the generated code (starts at 0) + */ + findClosestMapping(line: number, column: number): ?IndexedMapping { + let mapping = this.sourceMapInstance.findClosestMapping(line - 1, column); + if (mapping) { + let v = this.indexedMappingToStringMapping(mapping); + return v; + } else { + return null; + } + } + + /** + * Offset mapping lines from a certain position + * + * @param line the line in the generated code (starts at 1) + * @param lineOffset the amount of lines to offset mappings by + */ + offsetLines(line: number, lineOffset: number): ?IndexedMapping { + if (line < 1 || line + lineOffset < 1) { + throw new Error('Line has to be positive'); + } + + if (lineOffset === 0) { + return; + } + + this.sourceMapInstance.offsetLines(line - 1, lineOffset); + } + + /** + * Offset mapping columns from a certain position + * + * @param line the line in the generated code (starts at 1) + * @param column the column in the generated code (starts at 0) + * @param columnOffset the amount of columns to offset mappings by + */ + offsetColumns(line: number, column: number, columnOffset: number): ?IndexedMapping { + if (line < 1 || column < 0 || column + columnOffset < 0) { + throw new Error('Line and Column has to be positive'); + } + + if (columnOffset === 0) { + return; + } + + this.sourceMapInstance.offsetColumns(line - 1, column, columnOffset); + } + + /** + * Returns a buffer that represents this sourcemap, used for caching + */ + toBuffer(): Buffer { + return this.sourceMapInstance.toBuffer(); + } + + /** + * Returns a serialised map using VLQ Mappings + */ + toVLQ(): VLQMap { + return this.sourceMapInstance.toVLQ(); + } + + /** + * A function that has to be called at the end of the SourceMap's lifecycle to ensure all memory and native bindings get de-allocated + */ + delete() { + throw new Error('SourceMap.delete() must be implemented when extending SourceMap'); + } + + /** + * Returns a serialised map + * + * @param options options used for formatting the serialised map + */ + async stringify(options: SourceMapStringifyOptions): Promise { + return partialVlqMapToSourceMap(this.toVLQ(), { + ...options, + rootDir: this.projectRoot || options.rootDir, + }); + } +} diff --git a/node_modules/@parcel/source-map/dist/node.js b/node_modules/@parcel/source-map/dist/node.js new file mode 100644 index 0000000..0b1a4fc --- /dev/null +++ b/node_modules/@parcel/source-map/dist/node.js @@ -0,0 +1,87 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.init = exports.default = void 0; + +var _path = _interopRequireDefault(require("path")); + +var _SourceMap = _interopRequireDefault(require("./SourceMap")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const bindings = require('../parcel_sourcemap_node/index'); + +class NodeSourceMap extends _SourceMap.default { + constructor(projectRoot = '/', buffer) { + super(projectRoot); + this.projectRoot = projectRoot; + this.sourceMapInstance = new bindings.SourceMap(projectRoot, buffer); + } + + addVLQMap(map, lineOffset = 0, columnOffset = 0) { + let { + sourcesContent, + sources = [], + mappings, + names = [] + } = map; + + if (!sourcesContent) { + sourcesContent = sources.map(() => ''); + } else { + sourcesContent = sourcesContent.map(content => content ? content : ''); + } + + this.sourceMapInstance.addVLQMap(mappings, JSON.stringify(sources), JSON.stringify(sourcesContent.map(content => content ? content : '')), JSON.stringify(names), lineOffset, columnOffset); + return this; + } + + addSourceMap(sourcemap, lineOffset = 0) { + if (!(sourcemap.sourceMapInstance instanceof bindings.SourceMap)) { + throw new Error('The sourcemap provided to addSourceMap is not a valid sourcemap instance'); + } + + this.sourceMapInstance.addSourceMap(sourcemap.sourceMapInstance, lineOffset); + return this; + } + + addBuffer(buffer, lineOffset = 0) { + let previousMap = new NodeSourceMap(this.projectRoot, buffer); + return this.addSourceMap(previousMap, lineOffset); + } + + extends(input) { + // $FlowFixMe + let inputSourceMap = Buffer.isBuffer(input) ? new NodeSourceMap(this.projectRoot, input) : input; + this.sourceMapInstance.extends(inputSourceMap.sourceMapInstance); + return this; + } + + getNames() { + return JSON.parse(this.sourceMapInstance.getNames()); + } + + getSources() { + return JSON.parse(this.sourceMapInstance.getSources()); + } + + delete() {} + + static generateEmptyMap({ + projectRoot, + sourceName, + sourceContent, + lineOffset = 0 + }) { + let map = new NodeSourceMap(projectRoot); + map.addEmptyMap(sourceName, sourceContent, lineOffset); + return map; + } + +} + +exports.default = NodeSourceMap; +const init = Promise.resolve(); +exports.init = init; \ No newline at end of file diff --git a/node_modules/@parcel/source-map/dist/node.js.flow b/node_modules/@parcel/source-map/dist/node.js.flow new file mode 100644 index 0000000..769e912 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/node.js.flow @@ -0,0 +1,76 @@ +// @flow +import type { ParsedMap, VLQMap, SourceMapStringifyOptions, IndexedMapping, GenerateEmptyMapOptions } from './types'; +import path from 'path'; +import SourceMap from './SourceMap'; + +const bindings = require('../parcel_sourcemap_node/index'); + +export default class NodeSourceMap extends SourceMap { + constructor(projectRoot: string = '/', buffer?: Buffer) { + super(projectRoot); + this.projectRoot = projectRoot; + this.sourceMapInstance = new bindings.SourceMap(projectRoot, buffer); + } + + addVLQMap(map: VLQMap, lineOffset: number = 0, columnOffset: number = 0): SourceMap { + let { sourcesContent, sources = [], mappings, names = [] } = map; + if (!sourcesContent) { + sourcesContent = sources.map(() => ''); + } else { + sourcesContent = sourcesContent.map((content) => (content ? content : '')); + } + this.sourceMapInstance.addVLQMap( + mappings, + JSON.stringify(sources), + JSON.stringify(sourcesContent.map((content) => (content ? content : ''))), + JSON.stringify(names), + lineOffset, + columnOffset + ); + return this; + } + + addSourceMap(sourcemap: SourceMap, lineOffset: number = 0): SourceMap { + if (!(sourcemap.sourceMapInstance instanceof bindings.SourceMap)) { + throw new Error('The sourcemap provided to addSourceMap is not a valid sourcemap instance'); + } + + this.sourceMapInstance.addSourceMap(sourcemap.sourceMapInstance, lineOffset); + return this; + } + + addBuffer(buffer: Buffer, lineOffset: number = 0): SourceMap { + let previousMap = new NodeSourceMap(this.projectRoot, buffer); + return this.addSourceMap(previousMap, lineOffset); + } + + extends(input: Buffer | SourceMap): SourceMap { + // $FlowFixMe + let inputSourceMap: SourceMap = Buffer.isBuffer(input) ? new NodeSourceMap(this.projectRoot, input) : input; + this.sourceMapInstance.extends(inputSourceMap.sourceMapInstance); + return this; + } + + getNames(): Array { + return JSON.parse(this.sourceMapInstance.getNames()); + } + + getSources(): Array { + return JSON.parse(this.sourceMapInstance.getSources()); + } + + delete() {} + + static generateEmptyMap({ + projectRoot, + sourceName, + sourceContent, + lineOffset = 0, + }: GenerateEmptyMapOptions): NodeSourceMap { + let map = new NodeSourceMap(projectRoot); + map.addEmptyMap(sourceName, sourceContent, lineOffset); + return map; + } +} + +export const init: Promise = Promise.resolve(); diff --git a/node_modules/@parcel/source-map/dist/types.js b/node_modules/@parcel/source-map/dist/types.js new file mode 100644 index 0000000..9a390c3 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/types.js @@ -0,0 +1 @@ +"use strict"; \ No newline at end of file diff --git a/node_modules/@parcel/source-map/dist/types.js.flow b/node_modules/@parcel/source-map/dist/types.js.flow new file mode 100644 index 0000000..92ca64d --- /dev/null +++ b/node_modules/@parcel/source-map/dist/types.js.flow @@ -0,0 +1,52 @@ +// @flow +export type MappingPosition = {| + line: number, + column: number, +|}; + +export type IndexedMapping = { + generated: MappingPosition, + original?: MappingPosition, + source?: T, + name?: T, + ... +}; + +export type ParsedMap = {| + sources: Array, + names: Array, + mappings: Array>, + sourcesContent: Array, +|}; + +export type VLQMap = { + +sources: $ReadOnlyArray, + +sourcesContent?: $ReadOnlyArray, + +names: $ReadOnlyArray, + +mappings: string, + +version?: number, + +file?: string, + +sourceRoot?: string, + ... +}; + +export type SourceMapStringifyOptions = { + file?: string, + sourceRoot?: string, + inlineSources?: boolean, + fs?: { readFile(path: string, encoding: string): Promise, ... }, + format?: 'inline' | 'string' | 'object', + /** + * @private + */ + rootDir?: string, + ... +}; + +export type GenerateEmptyMapOptions = { + projectRoot: string, + sourceName: string, + sourceContent: string, + lineOffset?: number, + ... +}; diff --git a/node_modules/@parcel/source-map/dist/utils.js b/node_modules/@parcel/source-map/dist/utils.js new file mode 100644 index 0000000..6a4502c --- /dev/null +++ b/node_modules/@parcel/source-map/dist/utils.js @@ -0,0 +1,71 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.generateInlineMap = generateInlineMap; +exports.partialVlqMapToSourceMap = partialVlqMapToSourceMap; + +var _path = _interopRequireDefault(require("path")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function generateInlineMap(map) { + return `data:application/json;charset=utf-8;base64,${Buffer.from(map).toString('base64')}`; +} + +async function partialVlqMapToSourceMap(map, opts) { + let { + fs, + file, + sourceRoot, + inlineSources, + rootDir, + format = 'string' + } = opts; + let resultMap = { ...map, + sourcesContent: map.sourcesContent ? map.sourcesContent.map(content => { + if (content) { + return content; + } else { + return null; + } + }) : [], + version: 3, + file, + sourceRoot + }; + + if (resultMap.sourcesContent.length < resultMap.sources.length) { + for (let i = 0; i <= resultMap.sources.length - resultMap.sourcesContent.length; i++) { + resultMap.sourcesContent.push(null); + } + } + + if (fs) { + resultMap.sourcesContent = await Promise.all(resultMap.sourcesContent.map(async (content, index) => { + let sourceName = map.sources[index]; // If sourceName starts with `..` it is outside rootDir, in this case we likely cannot access this file from the browser or packaged node_module + // Because of this we have to include the sourceContent to ensure you can always see the sourcecontent for each mapping. + + if (!content && (inlineSources || sourceName.startsWith('..'))) { + try { + return await fs.readFile(_path.default.resolve(rootDir || '/', sourceName), 'utf-8'); + } catch (e) {} + } + + return content; + })); + } + + if (format === 'inline' || format === 'string') { + let stringifiedMap = JSON.stringify(resultMap); + + if (format === 'inline') { + return generateInlineMap(stringifiedMap); + } + + return stringifiedMap; + } + + return resultMap; +} \ No newline at end of file diff --git a/node_modules/@parcel/source-map/dist/utils.js.flow b/node_modules/@parcel/source-map/dist/utils.js.flow new file mode 100644 index 0000000..ce87165 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/utils.js.flow @@ -0,0 +1,60 @@ +// @flow +import type { VLQMap, SourceMapStringifyOptions } from './types'; +import path from 'path'; + +export function generateInlineMap(map: string): string { + return `data:application/json;charset=utf-8;base64,${Buffer.from(map).toString('base64')}`; +} + +export async function partialVlqMapToSourceMap(map: VLQMap, opts: SourceMapStringifyOptions): Promise { + let { fs, file, sourceRoot, inlineSources, rootDir, format = 'string' } = opts; + + let resultMap = { + ...map, + sourcesContent: map.sourcesContent + ? map.sourcesContent.map((content) => { + if (content) { + return content; + } else { + return null; + } + }) + : [], + version: 3, + file, + sourceRoot, + }; + + if (resultMap.sourcesContent.length < resultMap.sources.length) { + for (let i = 0; i <= resultMap.sources.length - resultMap.sourcesContent.length; i++) { + resultMap.sourcesContent.push(null); + } + } + + if (fs) { + resultMap.sourcesContent = await Promise.all( + resultMap.sourcesContent.map(async (content, index): Promise => { + let sourceName = map.sources[index]; + // If sourceName starts with `..` it is outside rootDir, in this case we likely cannot access this file from the browser or packaged node_module + // Because of this we have to include the sourceContent to ensure you can always see the sourcecontent for each mapping. + if (!content && (inlineSources || sourceName.startsWith('..'))) { + try { + return await fs.readFile(path.resolve(rootDir || '/', sourceName), 'utf-8'); + } catch (e) {} + } + + return content; + }) + ); + } + + if (format === 'inline' || format === 'string') { + let stringifiedMap = JSON.stringify(resultMap); + if (format === 'inline') { + return generateInlineMap(stringifiedMap); + } + return stringifiedMap; + } + + return resultMap; +} diff --git a/node_modules/@parcel/source-map/dist/wasm-bindings-web.js b/node_modules/@parcel/source-map/dist/wasm-bindings-web.js new file mode 100644 index 0000000..3587da5 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/wasm-bindings-web.js @@ -0,0 +1,23 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "SourceMap", { + enumerable: true, + get: function () { + return _parcel_sourcemap_wasm.SourceMap; + } +}); +Object.defineProperty(exports, "init", { + enumerable: true, + get: function () { + return _parcel_sourcemap_wasm.default; + } +}); + +var _parcel_sourcemap_wasm = _interopRequireWildcard(require("../parcel_sourcemap_wasm/dist-web/parcel_sourcemap_wasm.js")); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } \ No newline at end of file diff --git a/node_modules/@parcel/source-map/dist/wasm-bindings-web.js.flow b/node_modules/@parcel/source-map/dist/wasm-bindings-web.js.flow new file mode 100644 index 0000000..ecdaec3 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/wasm-bindings-web.js.flow @@ -0,0 +1 @@ +export { SourceMap, default as init } from '../parcel_sourcemap_wasm/dist-web/parcel_sourcemap_wasm.js'; diff --git a/node_modules/@parcel/source-map/dist/wasm-bindings.js b/node_modules/@parcel/source-map/dist/wasm-bindings.js new file mode 100644 index 0000000..f9d0470 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/wasm-bindings.js @@ -0,0 +1,13 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "SourceMap", { + enumerable: true, + get: function () { + return _parcel_sourcemap_wasm.SourceMap; + } +}); + +var _parcel_sourcemap_wasm = require("../parcel_sourcemap_wasm/dist-node/parcel_sourcemap_wasm.js"); \ No newline at end of file diff --git a/node_modules/@parcel/source-map/dist/wasm-bindings.js.flow b/node_modules/@parcel/source-map/dist/wasm-bindings.js.flow new file mode 100644 index 0000000..1873f3a --- /dev/null +++ b/node_modules/@parcel/source-map/dist/wasm-bindings.js.flow @@ -0,0 +1 @@ +export { SourceMap } from '../parcel_sourcemap_wasm/dist-node/parcel_sourcemap_wasm.js'; diff --git a/node_modules/@parcel/source-map/dist/wasm.js b/node_modules/@parcel/source-map/dist/wasm.js new file mode 100644 index 0000000..44d9484 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/wasm.js @@ -0,0 +1,86 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = exports.init = void 0; + +var _path = _interopRequireDefault(require("path")); + +var _SourceMap = _interopRequireDefault(require("./SourceMap")); + +var bindings = _interopRequireWildcard(require("./wasm-bindings")); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const init = typeof bindings.init === 'function' ? bindings.init() : Promise.resolve(); +exports.init = init; + +class WasmSourceMap extends _SourceMap.default { + constructor(projectRoot = '/', buffer) { + super(projectRoot, buffer); + this.sourceMapInstance = new bindings.SourceMap(projectRoot, buffer); + this.projectRoot = this.sourceMapInstance.getProjectRoot(); + } + + addVLQMap(map, lineOffset = 0, columnOffset = 0) { + let { + sourcesContent, + sources = [], + mappings, + names = [] + } = map; + + if (!sourcesContent) { + sourcesContent = sources.map(() => ''); + } else { + sourcesContent = sourcesContent.map(content => content ? content : ''); + } + + this.sourceMapInstance.addVLQMap(mappings, sources, sourcesContent.map(content => content ? content : ''), names, lineOffset, columnOffset); + return this; + } + + addSourceMap(sourcemap, lineOffset = 0) { + if (!(sourcemap.sourceMapInstance instanceof bindings.SourceMap)) { + throw new Error('The sourcemap provided to addSourceMap is not a valid sourcemap instance'); + } + + this.sourceMapInstance.addSourceMap(sourcemap.sourceMapInstance, lineOffset); + return this; + } + + addBuffer(buffer, lineOffset = 0) { + let previousMap = new WasmSourceMap(this.projectRoot, buffer); + return this.addSourceMap(previousMap, lineOffset); + } + + extends(input) { + // $FlowFixMe + let inputSourceMap = input instanceof Uint8Array ? new WasmSourceMap(this.projectRoot, input) : input; + this.sourceMapInstance.extends(inputSourceMap.sourceMapInstance); + return this; + } + + delete() { + this.sourceMapInstance.free(); + } + + static generateEmptyMap({ + projectRoot, + sourceName, + sourceContent, + lineOffset = 0 + }) { + let map = new WasmSourceMap(projectRoot); + map.addEmptyMap(sourceName, sourceContent, lineOffset); + return map; + } + +} + +exports.default = WasmSourceMap; \ No newline at end of file diff --git a/node_modules/@parcel/source-map/dist/wasm.js.flow b/node_modules/@parcel/source-map/dist/wasm.js.flow new file mode 100644 index 0000000..8cd2b29 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/wasm.js.flow @@ -0,0 +1,70 @@ +// @flow +import type { ParsedMap, VLQMap, SourceMapStringifyOptions, IndexedMapping, GenerateEmptyMapOptions } from './types'; +import path from 'path'; +import SourceMap from './SourceMap'; + +import * as bindings from './wasm-bindings'; + +export const init: Promise = typeof bindings.init === 'function' ? bindings.init() : Promise.resolve(); + +export default class WasmSourceMap extends SourceMap { + constructor(projectRoot: string = '/', buffer?: Buffer) { + super(projectRoot, buffer); + this.sourceMapInstance = new bindings.SourceMap(projectRoot, buffer); + this.projectRoot = this.sourceMapInstance.getProjectRoot(); + } + + addVLQMap(map: VLQMap, lineOffset: number = 0, columnOffset: number = 0): SourceMap { + let { sourcesContent, sources = [], mappings, names = [] } = map; + if (!sourcesContent) { + sourcesContent = sources.map(() => ''); + } else { + sourcesContent = sourcesContent.map((content) => (content ? content : '')); + } + this.sourceMapInstance.addVLQMap( + mappings, + sources, + sourcesContent.map((content) => (content ? content : '')), + names, + lineOffset, + columnOffset + ); + return this; + } + + addSourceMap(sourcemap: SourceMap, lineOffset: number = 0): SourceMap { + if (!(sourcemap.sourceMapInstance instanceof bindings.SourceMap)) { + throw new Error('The sourcemap provided to addSourceMap is not a valid sourcemap instance'); + } + + this.sourceMapInstance.addSourceMap(sourcemap.sourceMapInstance, lineOffset); + return this; + } + + addBuffer(buffer: Buffer, lineOffset: number = 0): SourceMap { + let previousMap = new WasmSourceMap(this.projectRoot, buffer); + return this.addSourceMap(previousMap, lineOffset); + } + + extends(input: Buffer | SourceMap): SourceMap { + // $FlowFixMe + let inputSourceMap: SourceMap = input instanceof Uint8Array ? new WasmSourceMap(this.projectRoot, input) : input; + this.sourceMapInstance.extends(inputSourceMap.sourceMapInstance); + return this; + } + + delete() { + this.sourceMapInstance.free(); + } + + static generateEmptyMap({ + projectRoot, + sourceName, + sourceContent, + lineOffset = 0, + }: GenerateEmptyMapOptions): WasmSourceMap { + let map = new WasmSourceMap(projectRoot); + map.addEmptyMap(sourceName, sourceContent, lineOffset); + return map; + } +} diff --git a/node_modules/@parcel/source-map/index.d.ts b/node_modules/@parcel/source-map/index.d.ts new file mode 100644 index 0000000..50461e9 --- /dev/null +++ b/node_modules/@parcel/source-map/index.d.ts @@ -0,0 +1,101 @@ +/** + * A position for a source mapping. 1-indexed. + */ +export type MappingPosition = { + line: number; + column: number; +}; + +/** +* An indexed source mapping block +*/ +export type IndexedMapping = { + generated: MappingPosition; + original?: MappingPosition; + source?: T; + name?: T; +}; + +/** +* A source map in VLQ format +*/ +export type VLQMap = Readonly<{ + sources: ReadonlyArray; + sourcesContent?: ReadonlyArray; + names: ReadonlyArray; + mappings: string; + version?: number; + file?: string; + sourceRoot?: string; +}>; + +/** +* A parsed source map +*/ +export type ParsedMap = { + sources: string[]; + names: string[]; + mappings: Array>; + sourcesContent: Array; +}; + +/** +* Options for stringifying a source map +*/ +export type SourceMapStringifyOptions = { + file?: string; + sourceRoot?: string; + rootDir?: string; + inlineSources?: boolean; + fs?: { + readFile(path: string, encoding: string): Promise; + }; + format?: 'inline' | 'string' | 'object'; +}; + +/** + * Options for creating an empty source map + */ +export type GenerateEmptyMapOptions = { + projectRoot: string; + sourceName: string; + sourceContent: string; + lineOffset?: number; +}; + +/** +* A source map to assist in debugging during development +*/ +export default class SourceMap { + constructor(projectRoot?: string, buffer?: Buffer); + static generateEmptyMap(opts: GenerateEmptyMapOptions): SourceMap; + addEmptyMap(sourceName: string, sourceContent: string, lineOffset?: number): SourceMap; + addVLQMap(map: VLQMap, lineOffset?: number, columnOffset?: number): SourceMap; + addBuffer(buffer: Buffer, lineOffset?: number): SourceMap; + addIndexedMapping(mapping: IndexedMapping, lineOffset?: number, columnOffset?: number): void; + addIndexedMappings(mappings: Array>, lineOffset?: number, columnOffset?: number): void; + addName(name: string): number; + addNames(names: string[]): number[]; + addSource(source: string): number; + addSources(sources: string[]): number[]; + getSourceIndex(source: string): number; + getSource(index: number): string; + setSourceContent(sourceName: string, sourceContent: string): void; + getSourceContent(sourceName: string): string; + getNameIndex(name: string): number; + getName(index: number): string; + extends(buffer: Buffer): SourceMap; + getMap(): ParsedMap; + findClosestMapping(line: number, column: number): IndexedMapping | undefined; + offsetLines(line: number, lineOffset: number): IndexedMapping | undefined; + offsetColumns(line: number, column: number, columnOffset: number): IndexedMapping | undefined; + toBuffer(): Buffer; + toVLQ(): VLQMap; + delete(): void; + stringify(options: SourceMapStringifyOptions): Promise; +} + +/** +* Only used by the wasm version, await this to ensure the wasm binary is loaded +*/ +export const init: Promise diff --git a/node_modules/@parcel/source-map/package.json b/node_modules/@parcel/source-map/package.json new file mode 100644 index 0000000..80230c0 --- /dev/null +++ b/node_modules/@parcel/source-map/package.json @@ -0,0 +1,89 @@ +{ + "name": "@parcel/source-map", + "version": "2.1.1", + "main": "./dist/node.js", + "types": "index.d.ts", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/source-map.git" + }, + "scripts": { + "test": "mocha ./test/*.test.js", + "test:node": "cross-env BACKEND=node yarn test", + "test:wasm": "cross-env BACKEND=wasm yarn test", + "benchmark": "node ./bench/run", + "benchmark:node": "cross-env BACKEND=node yarn benchmark", + "benchmark:wasm": "cross-env BACKEND=wasm yarn benchmark", + "transpile": "babel ./src/*.js --out-dir ./dist && flow-copy-source -v src dist", + "build:clean": "cd ./parcel_sourcemap_node && rm -rf artifacts && mkdir artifacts", + "build:node": "yarn build:clean && node parcel_sourcemap_node/build.js", + "build:node-release": "yarn build:clean && node parcel_sourcemap_node/build.js --release", + "build:wasm-node": "wasm-pack build parcel_sourcemap_wasm --target nodejs --no-typescript --dev --out-dir dist-node", + "build:wasm-node-release": "wasm-pack build parcel_sourcemap_wasm --target nodejs --no-typescript --release --out-dir dist-node", + "build:wasm-web": "wasm-pack build parcel_sourcemap_wasm --no-typescript --target web --dev --out-dir dist-web", + "build:wasm-web-release": "wasm-pack build parcel_sourcemap_wasm --no-typescript --target web --release --out-dir dist-web", + "rebuild": "shx rm -rf build && yarn build:node", + "rebuild-all": "yarn transpile && yarn rebuild", + "prepublish": "npm run transpile", + "typecheck": "flow", + "format": "prettier --write \"./**/*.{js,md,mdx}\"", + "clean": "shx rm -rf dist build", + "tag-release": "node ./tag-release" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "*.{js,json,md}": [ + "prettier --write" + ] + }, + "files": [ + "dist", + "index.d.ts", + "package.json", + "parcel_sourcemap_node/**/*", + "parcel_sourcemap_wasm/dist-node/**/*", + "parcel_sourcemap_wasm/dist-web/**/*", + "README.md", + "!.gitignore" + ], + "binary": { + "napi_versions": [ + 4 + ] + }, + "engines": { + "node": "^12.18.3 || >=14" + }, + "devDependencies": { + "@babel/cli": "^7.14.3", + "@babel/core": "^7.14.3", + "@babel/preset-env": "^7.14.2", + "@babel/preset-flow": "^7.13.13", + "@babel/register": "^7.13.16", + "@napi-rs/cli": "^1.0.4", + "cross-env": "^7.0.3", + "flow-bin": "^0.151.0", + "flow-copy-source": "^2.0.9", + "fs-extra": "^10.0.0", + "globby": "^11.0.3", + "husky": "6.0.0", + "lint-staged": "^11.0.0", + "mocha": "^8.4.0", + "prettier": "^2.3.0", + "shx": "^0.3.3", + "source-map": "^0.7.3", + "tiny-benchy": "^2.1.0" + }, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "browser": { + "./dist/node.js": "./dist/wasm.js", + "./dist/wasm-bindings.js": "./dist/wasm-bindings-web.js" + } +} \ No newline at end of file diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/Cargo.toml b/node_modules/@parcel/source-map/parcel_sourcemap_node/Cargo.toml new file mode 100644 index 0000000..5c54e73 --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_node/Cargo.toml @@ -0,0 +1,22 @@ +[package] +authors = ["Jasper De Moor "] +edition = "2018" +name = "parcel_sourcemap_node" +version = "2.1.1" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +napi = {version = "1.7.3", features = ["napi4", "serde-json"]} +napi-derive = "1.1.0" +parcel_sourcemap = {path = "../parcel_sourcemap"} +serde = "1" +serde_json = "1" +rkyv = "0.7.38" + +[target.'cfg(target_os = "macos")'.dependencies] +jemallocator = {version = "0.3.2", features = ["disable_initial_exec_tls"]} + +[build-dependencies] +napi-build = "1.0.2" diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.darwin-arm64.node b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.darwin-arm64.node new file mode 100644 index 0000000..967d09a Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.darwin-arm64.node differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.darwin-x64.node b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.darwin-x64.node new file mode 100644 index 0000000..0691ac3 Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.darwin-x64.node differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm-gnueabihf.node b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm-gnueabihf.node new file mode 100644 index 0000000..96e7b25 Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm-gnueabihf.node differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm64-gnu.node b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm64-gnu.node new file mode 100644 index 0000000..214aba4 Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm64-gnu.node differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm64-musl.node b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm64-musl.node new file mode 100644 index 0000000..8b56cfd Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm64-musl.node differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-x64-gnu.node b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-x64-gnu.node new file mode 100644 index 0000000..b045dca Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-x64-gnu.node differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-x64-musl.node b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-x64-musl.node new file mode 100644 index 0000000..4279fb3 Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-x64-musl.node differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.win32-x64-msvc.node b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.win32-x64-msvc.node new file mode 100644 index 0000000..3b1b547 Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.win32-x64-msvc.node differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/build.js b/node_modules/@parcel/source-map/parcel_sourcemap_node/build.js new file mode 100644 index 0000000..d701178 --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_node/build.js @@ -0,0 +1,46 @@ +const { spawn, execSync } = require('child_process'); + +let release = process.argv.includes('--release'); +build().catch((err) => { + console.error(err); + process.exit(1); +}); + +async function build() { + if (process.platform === 'darwin') { + setupMacBuild(); + } + + await new Promise((resolve, reject) => { + let args = ['build', '--platform', '-c', '../package.json', './artifacts']; + if (release) { + args.push('--release'); + } + + if (process.env.RUST_TARGET) { + args.push('--target', process.env.RUST_TARGET); + } + + let yarn = spawn('napi', args, { + stdio: 'inherit', + cwd: __dirname, + shell: true, + }); + + yarn.on('error', reject); + yarn.on('close', resolve); + }); +} + +// This forces Clang/LLVM to be used as a C compiler instead of GCC. +// This is necessary for cross-compilation for Apple Silicon in GitHub Actions. +function setupMacBuild() { + process.env.CC = execSync('xcrun -f clang', { encoding: 'utf8' }).trim(); + process.env.CXX = execSync('xcrun -f clang++', { encoding: 'utf8' }).trim(); + + let sysRoot = execSync('xcrun --sdk macosx --show-sdk-path', { + encoding: 'utf8', + }).trim(); + process.env.CFLAGS = `-isysroot ${sysRoot} -isystem ${sysRoot}`; + process.env.MACOSX_DEPLOYMENT_TARGET = '10.9'; +} diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/build.rs b/node_modules/@parcel/source-map/parcel_sourcemap_node/build.rs new file mode 100644 index 0000000..9fc2367 --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_node/build.rs @@ -0,0 +1,5 @@ +extern crate napi_build; + +fn main() { + napi_build::setup(); +} diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/index.js b/node_modules/@parcel/source-map/parcel_sourcemap_node/index.js new file mode 100644 index 0000000..19623c3 --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_node/index.js @@ -0,0 +1,15 @@ +let parts = [process.platform, process.arch]; +if (process.platform === 'linux') { + const { MUSL, family } = require('detect-libc'); + if (family === MUSL) { + parts.push('musl'); + } else if (process.arch === 'arm') { + parts.push('gnueabihf'); + } else { + parts.push('gnu'); + } +} else if (process.platform === 'win32') { + parts.push('msvc'); +} + +module.exports = require(`./artifacts/index.${parts.join('-')}.node`); diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/src/lib.rs b/node_modules/@parcel/source-map/parcel_sourcemap_node/src/lib.rs new file mode 100644 index 0000000..dcaf536 --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_node/src/lib.rs @@ -0,0 +1,550 @@ +extern crate napi; +#[macro_use] +extern crate napi_derive; +extern crate parcel_sourcemap; +extern crate rkyv; + +use napi::{ + CallContext, Either, Env, JsBuffer, JsNull, JsNumber, JsObject, JsString, JsTypedArray, + JsUndefined, Property, Result, +}; +use parcel_sourcemap::{Mapping, OriginalLocation, SourceMap, SourceMapError}; +use rkyv::AlignedVec; +use serde_json::{from_str, to_string}; + +#[cfg(target_os = "macos")] +#[global_allocator] +static GLOBAL: jemallocator::Jemalloc = jemallocator::Jemalloc; + +#[js_function(1)] +fn add_source(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let source = ctx.get::(0)?.into_utf8()?; + let source_index = source_map_instance.add_source(source.as_str()?); + + ctx.env.create_uint32(source_index) +} + +#[js_function(1)] +fn get_source(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let source_index = ctx.get::(0)?.get_uint32()?; + match source_map_instance.get_source(source_index) { + Ok(source) => ctx.env.create_string(source), + Err(_err) => ctx.env.create_string(""), + } +} + +fn _get_sources(ctx: &CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let mut napi_sources_array = ctx + .env + .create_array_with_length(source_map_instance.get_sources().len())?; + for (source_index, source) in source_map_instance.get_sources().iter().enumerate() { + napi_sources_array + .set_element(source_index as u32, ctx.env.create_string(source.as_str())?)?; + } + + // Return array + Ok(napi_sources_array) +} + +#[js_function] +fn get_sources(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + let sources_str = to_string(&source_map_instance.get_sources())?; + return ctx.env.create_string(sources_str.as_str()); +} + +fn _get_sources_content(ctx: &CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let mut napi_sources_content_array = ctx + .env + .create_array_with_length(source_map_instance.get_sources_content().len())?; + for (source_index, source_content) in + source_map_instance.get_sources_content().iter().enumerate() + { + napi_sources_content_array.set_element( + source_index as u32, + ctx.env.create_string(source_content.as_str())?, + )?; + } + + // Return array + Ok(napi_sources_content_array) +} + +#[js_function] +fn get_sources_content(ctx: CallContext) -> Result { + _get_sources_content(&ctx) +} + +#[js_function(1)] +fn get_source_index(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let source = ctx.get::(0)?.into_utf8()?; + let source_index = source_map_instance + .get_source_index(source.as_str()?) + .map_err(to_napi_error)?; + match source_index { + Some(i) => ctx.env.create_uint32(i), + None => ctx.env.create_int32(-1), + } +} + +#[js_function(2)] +fn set_source_content_by_source(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let source = ctx.get::(0)?.into_utf8()?; + let source_index: usize = source_map_instance.add_source(source.as_str()?) as usize; + let source_content = ctx.get::(1)?.into_utf8()?; + source_map_instance + .set_source_content(source_index, source_content.as_str()?) + .map_err(to_napi_error)?; + + ctx.env.get_undefined() +} + +#[js_function(1)] +fn get_source_content_by_source(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let source = ctx.get::(0)?.into_utf8()?; + let source_index = source_map_instance + .get_source_index(source.as_str()?) + .map_err(to_napi_error)?; + match source_index { + Some(i) => { + let source_content = source_map_instance + .get_source_content(i) + .map_err(to_napi_error)?; + ctx.env.create_string(source_content) + } + None => ctx.env.create_string(""), + } +} + +#[js_function(1)] +fn add_name(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let name = ctx.get::(0)?.into_utf8()?; + let name_index = source_map_instance.add_name(name.as_str()?); + ctx.env.create_uint32(name_index) +} + +#[js_function(1)] +fn get_name(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let name_index = ctx.get::(0)?.get_uint32()?; + match source_map_instance.get_name(name_index) { + Ok(name) => ctx.env.create_string(name), + Err(_err) => ctx.env.create_string(""), + } +} + +fn _get_names(ctx: &CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let mut napi_names_array = ctx + .env + .create_array_with_length(source_map_instance.get_names().len())?; + for (name_index, name) in source_map_instance.get_names().iter().enumerate() { + napi_names_array.set_element(name_index as u32, ctx.env.create_string(name.as_str())?)?; + } + + // Return array + Ok(napi_names_array) +} + +#[js_function] +fn get_names(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + let names_str = to_string(&source_map_instance.get_names())?; + return ctx.env.create_string(names_str.as_str()); +} + +#[js_function(1)] +fn get_name_index(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let name = ctx.get::(0)?.into_utf8()?; + let name_index = source_map_instance.get_name_index(name.as_str()?); + + match name_index { + Some(i) => ctx.env.create_uint32(i), + None => ctx.env.create_int32(-1), + } +} + +fn mapping_to_js_object(ctx: &CallContext, mapping: &Mapping) -> Result { + let mut mapping_obj = ctx.env.create_object()?; + + let mut generated_position_obj = ctx.env.create_object()?; + generated_position_obj + .set_named_property("line", ctx.env.create_uint32((mapping.generated_line) + 1)?)?; + generated_position_obj + .set_named_property("column", ctx.env.create_uint32(mapping.generated_column)?)?; + mapping_obj.set_named_property("generated", generated_position_obj)?; + + let original_position = mapping.original; + if let Some(original_position) = original_position { + let mut original_position_obj = ctx.env.create_object()?; + original_position_obj.set_named_property( + "line", + ctx.env.create_uint32(original_position.original_line + 1)?, + )?; + original_position_obj.set_named_property( + "column", + ctx.env.create_uint32(original_position.original_column)?, + )?; + mapping_obj.set_named_property("original", original_position_obj)?; + + mapping_obj + .set_named_property("source", ctx.env.create_uint32(original_position.source)?)?; + + if let Some(name) = original_position.name { + mapping_obj.set_named_property("name", ctx.env.create_uint32(name)?)?; + } + } + + Ok(mapping_obj) +} + +#[js_function] +fn get_mappings(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let mut mappings_arr = ctx.env.create_array()?; + for (index, mapping) in source_map_instance.get_mappings().iter().enumerate() { + mappings_arr.set_element(index as u32, mapping_to_js_object(&ctx, mapping)?)?; + } + Ok(mappings_arr) +} + +#[js_function] +fn to_buffer(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let mut buffer_data = AlignedVec::new(); + source_map_instance + .to_buffer(&mut buffer_data) + .map_err(to_napi_error)?; + Ok(ctx + .env + .create_buffer_with_data(buffer_data.into_vec())? + .into_raw()) +} + +#[js_function(2)] +fn add_sourcemap(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let sourcemap_object = ctx.get::(0)?; + let previous_map_instance = ctx.env.unwrap::(&sourcemap_object)?; + let line_offset = ctx.get::(1)?.get_int64()?; + + source_map_instance + .add_sourcemap(previous_map_instance, line_offset) + .map_err(to_napi_error)?; + ctx.env.get_undefined() +} + +#[js_function(6)] +fn add_vlq_map(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let vlq_mappings = ctx.get::(0)?.into_utf8()?; + + let js_sources_arr_input = ctx.get::(1)?.into_utf8()?; + let sources: Vec = from_str(js_sources_arr_input.as_str()?)?; + + let js_sources_content_arr_input = ctx.get::(2)?.into_utf8()?; + let sources_content: Vec = from_str(js_sources_content_arr_input.as_str()?)?; + + let js_names_arr_input = ctx.get::(3)?.into_utf8()?; + let names: Vec = from_str(js_names_arr_input.as_str()?)?; + + let line_offset = ctx.get::(4)?.get_int64()?; + let column_offset = ctx.get::(5)?.get_int64()?; + + source_map_instance + .add_vlq_map( + vlq_mappings.as_slice(), + sources.iter().map(|s| s.as_str()).collect(), + sources_content.iter().map(|s| s.as_str()).collect(), + names.iter().map(|s| s.as_str()).collect(), + line_offset, + column_offset, + ) + .map_err(to_napi_error)?; + + ctx.env.get_undefined() +} + +#[js_function] +fn to_vlq(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let mut vlq_output: Vec = vec![]; + source_map_instance + .write_vlq(&mut vlq_output) + .map_err(to_napi_error)?; + let vlq_string = ctx.env.create_string_latin1(vlq_output.as_slice())?; + let mut result_obj: JsObject = ctx.env.create_object()?; + result_obj.set_named_property("mappings", vlq_string)?; + result_obj.set_named_property("sources", _get_sources(&ctx)?)?; + result_obj.set_named_property("sourcesContent", _get_sources_content(&ctx)?)?; + result_obj.set_named_property("names", _get_names(&ctx)?)?; + + Ok(result_obj) +} + +#[js_function(1)] +fn add_indexed_mappings(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let mappings = ctx.get::(0)?; + let mappings_value = mappings.into_value()?; + let mappings_arr: &[i32] = mappings_value.as_ref(); + let mappings_count = mappings_arr.len(); + + let mut generated_line: u32 = 0; // 0 + let mut generated_column: u32 = 0; // 1 + let mut original_line: i32 = 0; // 2 + let mut original_column: i32 = 0; // 3 + let mut original_source: i32 = 0; // 4 + for (i, value) in mappings_arr.iter().enumerate().take(mappings_count) { + let value = *value; + match i % 6 { + 0 => { + generated_line = value as u32; + } + 1 => { + generated_column = value as u32; + } + 2 => { + original_line = value; + } + 3 => { + original_column = value; + } + 4 => { + original_source = value; + } + 5 => { + source_map_instance.add_mapping( + generated_line, + generated_column, + if original_line > -1 && original_column > -1 && original_source > -1 { + Some(OriginalLocation { + original_line: original_line as u32, + original_column: original_column as u32, + source: original_source as u32, + name: if value > -1 { Some(value as u32) } else { None }, + }) + } else { + None + }, + ); + } + _ => unreachable!(), + } + } + + ctx.env.get_undefined() +} + +#[js_function(2)] +fn offset_lines(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let generated_line = ctx.get::(0)?.get_uint32()?; + let generated_line_offset = ctx.get::(1)?.get_int64()?; + source_map_instance + .offset_lines(generated_line, generated_line_offset) + .map_err(to_napi_error)?; + ctx.env.get_undefined() +} + +#[js_function(3)] +fn offset_columns(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let generated_line = ctx.get::(0)?.get_uint32()?; + let generated_column = ctx.get::(1)?.get_uint32()?; + let generated_column_offset = ctx.get::(2)?.get_int64()?; + + source_map_instance + .offset_columns(generated_line, generated_column, generated_column_offset) + .map_err(to_napi_error)?; + ctx.env.get_undefined() +} + +#[js_function(3)] +fn add_empty_map(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let source = ctx.get::(0)?.into_utf8()?; + let source_content = ctx.get::(1)?.into_utf8()?; + let line_offset = ctx.get::(2)?.get_int64()?; + source_map_instance + .add_empty_map(source.as_str()?, source_content.as_str()?, line_offset) + .map_err(to_napi_error)?; + ctx.env.get_undefined() +} + +#[js_function(1)] +fn extends(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let sourcemap_object = ctx.get::(0)?; + let previous_map_instance = ctx.env.unwrap::(&sourcemap_object)?; + source_map_instance + .extends(previous_map_instance) + .map_err(to_napi_error)?; + ctx.env.get_undefined() +} + +#[js_function(2)] +fn find_closest_mapping(ctx: CallContext) -> Result> { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let generated_line = ctx.get::(0)?.get_uint32()?; + let generated_column = ctx.get::(1)?.get_uint32()?; + match source_map_instance.find_closest_mapping(generated_line, generated_column) { + Some(mapping) => mapping_to_js_object(&ctx, &mapping).map(Either::A), + None => ctx.env.get_null().map(Either::B), + } +} + +#[js_function] +fn get_project_root(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + return ctx + .env + .create_string(source_map_instance.project_root.as_str()); +} + +#[js_function(2)] +fn constructor(ctx: CallContext) -> Result { + let mut this: JsObject = ctx.this_unchecked(); + let project_root = ctx.get::(0)?.into_utf8()?; + let second_argument = ctx.get::>(1)?; + match second_argument { + Either::A(js_buffer) => { + let buffer = js_buffer.into_value()?; + let sourcemap = SourceMap::from_buffer(project_root.as_str()?, &buffer[..]) + .map_err(to_napi_error)?; + ctx.env.wrap(&mut this, sourcemap)?; + } + Either::B(_) => { + ctx.env + .wrap(&mut this, SourceMap::new(project_root.as_str()?))?; + } + } + ctx.env.get_undefined() +} + +#[inline] +fn to_napi_error(err: SourceMapError) -> napi::Error { + napi::Error::new(napi::Status::GenericFailure, err.to_string()) +} + +#[module_exports] +fn init(mut exports: JsObject, env: Env) -> Result<()> { + let add_source_method = Property::new(&env, "addSource")?.with_method(add_source); + let get_source_method = Property::new(&env, "getSource")?.with_method(get_source); + let get_sources_method = Property::new(&env, "getSources")?.with_method(get_sources); + let get_source_index_method = + Property::new(&env, "getSourceIndex")?.with_method(get_source_index); + let set_source_content_by_source_method = + Property::new(&env, "setSourceContentBySource")?.with_method(set_source_content_by_source); + let get_source_content_by_source_method = + Property::new(&env, "getSourceContentBySource")?.with_method(get_source_content_by_source); + let get_sources_content_method = + Property::new(&env, "getSourcesContent")?.with_method(get_sources_content); + let add_name_method = Property::new(&env, "addName")?.with_method(add_name); + let get_name_method = Property::new(&env, "getName")?.with_method(get_name); + let get_names_method = Property::new(&env, "getNames")?.with_method(get_names); + let get_name_index_method = Property::new(&env, "getNameIndex")?.with_method(get_name_index); + let get_mappings_method = Property::new(&env, "getMappings")?.with_method(get_mappings); + let to_buffer_method = Property::new(&env, "toBuffer")?.with_method(to_buffer); + let add_sourcemap_method = Property::new(&env, "addSourceMap")?.with_method(add_sourcemap); + let add_indexed_mappings_method = + Property::new(&env, "addIndexedMappings")?.with_method(add_indexed_mappings); + let add_vlq_map_method = Property::new(&env, "addVLQMap")?.with_method(add_vlq_map); + let to_vlq_method = Property::new(&env, "toVLQ")?.with_method(to_vlq); + let offset_lines_method = Property::new(&env, "offsetLines")?.with_method(offset_lines); + let offset_columns_method = Property::new(&env, "offsetColumns")?.with_method(offset_columns); + let add_empty_map_method = Property::new(&env, "addEmptyMap")?.with_method(add_empty_map); + let extends_method = Property::new(&env, "extends")?.with_method(extends); + let get_project_root_method = + Property::new(&env, "getProjectRoot")?.with_method(get_project_root); + let find_closest_mapping_method = + Property::new(&env, "findClosestMapping")?.with_method(find_closest_mapping); + let sourcemap_class = env.define_class( + "SourceMap", + constructor, + &[ + add_source_method, + get_source_method, + get_sources_method, + get_source_index_method, + set_source_content_by_source_method, + get_source_content_by_source_method, + get_sources_content_method, + add_name_method, + get_name_method, + get_names_method, + get_name_index_method, + get_mappings_method, + add_sourcemap_method, + add_indexed_mappings_method, + add_vlq_map_method, + to_buffer_method, + to_vlq_method, + offset_lines_method, + offset_columns_method, + add_empty_map_method, + extends_method, + find_closest_mapping_method, + get_project_root_method, + ], + )?; + exports.set_named_property("SourceMap", sourcemap_class)?; + Ok(()) +} diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/package.json b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/package.json new file mode 100644 index 0000000..387191b --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/package.json @@ -0,0 +1,12 @@ +{ + "name": "parcel_sourcemap_wasm", + "collaborators": [ + "Jasper De Moor " + ], + "version": "2.1.1", + "files": [ + "parcel_sourcemap_wasm_bg.wasm", + "parcel_sourcemap_wasm.js" + ], + "main": "parcel_sourcemap_wasm.js" +} \ No newline at end of file diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/parcel_sourcemap_wasm.js b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/parcel_sourcemap_wasm.js new file mode 100644 index 0000000..6528e97 --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/parcel_sourcemap_wasm.js @@ -0,0 +1,660 @@ +let imports = {}; +imports['__wbindgen_placeholder__'] = module.exports; +let wasm; +const { TextEncoder, TextDecoder } = require(`util`); + +const heap = new Array(32).fill(undefined); + +heap.push(undefined, null, true, false); + +function getObject(idx) { return heap[idx]; } + +let WASM_VECTOR_LEN = 0; + +let cachegetUint8Memory0 = null; +function getUint8Memory0() { + if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { + cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachegetUint8Memory0; +} + +let cachedTextEncoder = new TextEncoder('utf-8'); + +const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' + ? function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +} + : function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; +}); + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length); + getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len); + + const mem = getUint8Memory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3); + const view = getUint8Memory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +let cachegetInt32Memory0 = null; +function getInt32Memory0() { + if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { + cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachegetInt32Memory0; +} + +let heap_next = heap.length; + +function dropObject(idx) { + if (idx < 36) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} + +let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + +cachedTextDecoder.decode(); + +function getStringFromWasm0(ptr, len) { + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); +} + +let cachegetUint32Memory0 = null; +function getUint32Memory0() { + if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) { + cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer); + } + return cachegetUint32Memory0; +} + +function passArray32ToWasm0(arg, malloc) { + const ptr = malloc(arg.length * 4); + getUint32Memory0().set(arg, ptr / 4); + WASM_VECTOR_LEN = arg.length; + return ptr; +} + +function _assertClass(instance, klass) { + if (!(instance instanceof klass)) { + throw new Error(`expected instance of ${klass.name}`); + } + return instance.ptr; +} +/** +*/ +class SourceMap { + + static __wrap(ptr) { + const obj = Object.create(SourceMap.prototype); + obj.ptr = ptr; + + return obj; + } + + __destroy_into_raw() { + const ptr = this.ptr; + this.ptr = 0; + + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_sourcemap_free(ptr); + } + /** + * @param {string} project_root + * @param {any} buffer + */ + constructor(project_root, buffer) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(project_root, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_new(retptr, ptr0, len0, addHeapObject(buffer)); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return SourceMap.__wrap(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {string} + */ + getProjectRoot() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getProjectRoot(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } + } + /** + * @param {string} vlq_mappings + * @param {any} sources + * @param {any} sources_content + * @param {any} names + * @param {number} line_offset + * @param {number} column_offset + * @returns {any} + */ + addVLQMap(vlq_mappings, sources, sources_content, names, line_offset, column_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(vlq_mappings, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_addVLQMap(retptr, this.ptr, ptr0, len0, addHeapObject(sources), addHeapObject(sources_content), addHeapObject(names), line_offset, column_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + toVLQ() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_toVLQ(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + getMappings() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getMappings(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + getSources() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getSources(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + getSourcesContent() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getSourcesContent(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + getNames() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getNames(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} name + * @returns {number} + */ + addName(name) { + const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.sourcemap_addName(this.ptr, ptr0, len0); + return ret >>> 0; + } + /** + * @param {string} source + * @returns {number} + */ + addSource(source) { + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.sourcemap_addSource(this.ptr, ptr0, len0); + return ret >>> 0; + } + /** + * @param {number} index + * @returns {string} + */ + getName(index) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getName(retptr, this.ptr, index); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } + } + /** + * @param {number} index + * @returns {string} + */ + getSource(index) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getSource(retptr, this.ptr, index); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } + } + /** + * @param {string} name + * @returns {number} + */ + getNameIndex(name) { + const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.sourcemap_getNameIndex(this.ptr, ptr0, len0); + return ret; + } + /** + * @param {string} source + * @returns {any} + */ + getSourceIndex(source) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_getSourceIndex(retptr, this.ptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {Int32Array} mappings_arr + */ + addIndexedMappings(mappings_arr) { + const ptr0 = passArray32ToWasm0(mappings_arr, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_addIndexedMappings(this.ptr, ptr0, len0); + } + /** + * @returns {any} + */ + toBuffer() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_toBuffer(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {SourceMap} previous_map_instance + * @param {number} line_offset + * @returns {any} + */ + addSourceMap(previous_map_instance, line_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + _assertClass(previous_map_instance, SourceMap); + wasm.sourcemap_addSourceMap(retptr, this.ptr, previous_map_instance.ptr, line_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} source + * @param {string} source_content + * @returns {any} + */ + setSourceContentBySource(source, source_content) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passStringToWasm0(source_content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + wasm.sourcemap_setSourceContentBySource(retptr, this.ptr, ptr0, len0, ptr1, len1); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} source + * @returns {any} + */ + getSourceContentBySource(source) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_getSourceContentBySource(retptr, this.ptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} source + * @param {string} source_content + * @param {number} line_offset + * @returns {any} + */ + addEmptyMap(source, source_content, line_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passStringToWasm0(source_content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + wasm.sourcemap_addEmptyMap(retptr, this.ptr, ptr0, len0, ptr1, len1, line_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {SourceMap} previous_map_instance + * @returns {any} + */ + extends(previous_map_instance) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + _assertClass(previous_map_instance, SourceMap); + wasm.sourcemap_extends(retptr, this.ptr, previous_map_instance.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {number} generated_line + * @param {number} generated_column + * @returns {any} + */ + findClosestMapping(generated_line, generated_column) { + const ret = wasm.sourcemap_findClosestMapping(this.ptr, generated_line, generated_column); + return takeObject(ret); + } + /** + * @param {number} generated_line + * @param {number} generated_line_offset + * @returns {any} + */ + offsetLines(generated_line, generated_line_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_offsetLines(retptr, this.ptr, generated_line, generated_line_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {number} generated_line + * @param {number} generated_column + * @param {number} generated_column_offset + * @returns {any} + */ + offsetColumns(generated_line, generated_column, generated_column_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_offsetColumns(retptr, this.ptr, generated_line, generated_column, generated_column_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } +} +module.exports.SourceMap = SourceMap; + +module.exports.__wbindgen_json_serialize = function(arg0, arg1) { + const obj = getObject(arg1); + const ret = JSON.stringify(obj === undefined ? null : obj); + const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len0; + getInt32Memory0()[arg0 / 4 + 0] = ptr0; +}; + +module.exports.__wbg_new_3047bf4b4f02b802 = function(arg0, arg1) { + const ret = new Error(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); +}; + +module.exports.__wbindgen_is_undefined = function(arg0) { + const ret = getObject(arg0) === undefined; + return ret; +}; + +module.exports.__wbindgen_object_drop_ref = function(arg0) { + takeObject(arg0); +}; + +module.exports.__wbg_length_0acb1cf9bbaf8519 = function(arg0) { + const ret = getObject(arg0).length; + return ret; +}; + +module.exports.__wbindgen_memory = function() { + const ret = wasm.memory; + return addHeapObject(ret); +}; + +module.exports.__wbg_buffer_7af23f65f6c64548 = function(arg0) { + const ret = getObject(arg0).buffer; + return addHeapObject(ret); +}; + +module.exports.__wbg_new_cc9018bd6f283b6f = function(arg0) { + const ret = new Uint8Array(getObject(arg0)); + return addHeapObject(ret); +}; + +module.exports.__wbg_set_f25e869e4565d2a2 = function(arg0, arg1, arg2) { + getObject(arg0).set(getObject(arg1), arg2 >>> 0); +}; + +module.exports.__wbindgen_json_parse = function(arg0, arg1) { + const ret = JSON.parse(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); +}; + +module.exports.__wbindgen_number_new = function(arg0) { + const ret = arg0; + return addHeapObject(ret); +}; + +module.exports.__wbg_newwithbyteoffsetandlength_ce1e75f0ce5f7974 = function(arg0, arg1, arg2) { + const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0); + return addHeapObject(ret); +}; + +module.exports.__wbindgen_string_new = function(arg0, arg1) { + const ret = getStringFromWasm0(arg0, arg1); + return addHeapObject(ret); +}; + +module.exports.__wbindgen_throw = function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); +}; + +const path = require('path').join(__dirname, 'parcel_sourcemap_wasm_bg.wasm'); +const bytes = require('fs').readFileSync(path); + +const wasmModule = new WebAssembly.Module(bytes); +const wasmInstance = new WebAssembly.Instance(wasmModule, imports); +wasm = wasmInstance.exports; +module.exports.__wasm = wasm; + diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/parcel_sourcemap_wasm_bg.wasm b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/parcel_sourcemap_wasm_bg.wasm new file mode 100644 index 0000000..c719c37 Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/parcel_sourcemap_wasm_bg.wasm differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/package.json b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/package.json new file mode 100644 index 0000000..1e0ba4b --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/package.json @@ -0,0 +1,13 @@ +{ + "name": "parcel_sourcemap_wasm", + "collaborators": [ + "Jasper De Moor " + ], + "version": "2.1.1", + "files": [ + "parcel_sourcemap_wasm_bg.wasm", + "parcel_sourcemap_wasm.js" + ], + "module": "parcel_sourcemap_wasm.js", + "sideEffects": false +} \ No newline at end of file diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/parcel_sourcemap_wasm.js b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/parcel_sourcemap_wasm.js new file mode 100644 index 0000000..05e7a18 --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/parcel_sourcemap_wasm.js @@ -0,0 +1,689 @@ + +let wasm; + +const heap = new Array(32).fill(undefined); + +heap.push(undefined, null, true, false); + +function getObject(idx) { return heap[idx]; } + +let WASM_VECTOR_LEN = 0; + +let cachegetUint8Memory0 = null; +function getUint8Memory0() { + if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { + cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachegetUint8Memory0; +} + +const cachedTextEncoder = new TextEncoder('utf-8'); + +const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' + ? function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +} + : function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; +}); + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length); + getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len); + + const mem = getUint8Memory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3); + const view = getUint8Memory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +let cachegetInt32Memory0 = null; +function getInt32Memory0() { + if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { + cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachegetInt32Memory0; +} + +let heap_next = heap.length; + +function dropObject(idx) { + if (idx < 36) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} + +const cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + +cachedTextDecoder.decode(); + +function getStringFromWasm0(ptr, len) { + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); +} + +let cachegetUint32Memory0 = null; +function getUint32Memory0() { + if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) { + cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer); + } + return cachegetUint32Memory0; +} + +function passArray32ToWasm0(arg, malloc) { + const ptr = malloc(arg.length * 4); + getUint32Memory0().set(arg, ptr / 4); + WASM_VECTOR_LEN = arg.length; + return ptr; +} + +function _assertClass(instance, klass) { + if (!(instance instanceof klass)) { + throw new Error(`expected instance of ${klass.name}`); + } + return instance.ptr; +} +/** +*/ +export class SourceMap { + + static __wrap(ptr) { + const obj = Object.create(SourceMap.prototype); + obj.ptr = ptr; + + return obj; + } + + __destroy_into_raw() { + const ptr = this.ptr; + this.ptr = 0; + + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_sourcemap_free(ptr); + } + /** + * @param {string} project_root + * @param {any} buffer + */ + constructor(project_root, buffer) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(project_root, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_new(retptr, ptr0, len0, addHeapObject(buffer)); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return SourceMap.__wrap(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {string} + */ + getProjectRoot() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getProjectRoot(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } + } + /** + * @param {string} vlq_mappings + * @param {any} sources + * @param {any} sources_content + * @param {any} names + * @param {number} line_offset + * @param {number} column_offset + * @returns {any} + */ + addVLQMap(vlq_mappings, sources, sources_content, names, line_offset, column_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(vlq_mappings, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_addVLQMap(retptr, this.ptr, ptr0, len0, addHeapObject(sources), addHeapObject(sources_content), addHeapObject(names), line_offset, column_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + toVLQ() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_toVLQ(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + getMappings() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getMappings(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + getSources() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getSources(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + getSourcesContent() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getSourcesContent(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + getNames() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getNames(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} name + * @returns {number} + */ + addName(name) { + const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.sourcemap_addName(this.ptr, ptr0, len0); + return ret >>> 0; + } + /** + * @param {string} source + * @returns {number} + */ + addSource(source) { + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.sourcemap_addSource(this.ptr, ptr0, len0); + return ret >>> 0; + } + /** + * @param {number} index + * @returns {string} + */ + getName(index) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getName(retptr, this.ptr, index); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } + } + /** + * @param {number} index + * @returns {string} + */ + getSource(index) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getSource(retptr, this.ptr, index); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } + } + /** + * @param {string} name + * @returns {number} + */ + getNameIndex(name) { + const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.sourcemap_getNameIndex(this.ptr, ptr0, len0); + return ret; + } + /** + * @param {string} source + * @returns {any} + */ + getSourceIndex(source) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_getSourceIndex(retptr, this.ptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {Int32Array} mappings_arr + */ + addIndexedMappings(mappings_arr) { + const ptr0 = passArray32ToWasm0(mappings_arr, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_addIndexedMappings(this.ptr, ptr0, len0); + } + /** + * @returns {any} + */ + toBuffer() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_toBuffer(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {SourceMap} previous_map_instance + * @param {number} line_offset + * @returns {any} + */ + addSourceMap(previous_map_instance, line_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + _assertClass(previous_map_instance, SourceMap); + wasm.sourcemap_addSourceMap(retptr, this.ptr, previous_map_instance.ptr, line_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} source + * @param {string} source_content + * @returns {any} + */ + setSourceContentBySource(source, source_content) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passStringToWasm0(source_content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + wasm.sourcemap_setSourceContentBySource(retptr, this.ptr, ptr0, len0, ptr1, len1); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} source + * @returns {any} + */ + getSourceContentBySource(source) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_getSourceContentBySource(retptr, this.ptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} source + * @param {string} source_content + * @param {number} line_offset + * @returns {any} + */ + addEmptyMap(source, source_content, line_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passStringToWasm0(source_content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + wasm.sourcemap_addEmptyMap(retptr, this.ptr, ptr0, len0, ptr1, len1, line_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {SourceMap} previous_map_instance + * @returns {any} + */ + extends(previous_map_instance) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + _assertClass(previous_map_instance, SourceMap); + wasm.sourcemap_extends(retptr, this.ptr, previous_map_instance.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {number} generated_line + * @param {number} generated_column + * @returns {any} + */ + findClosestMapping(generated_line, generated_column) { + const ret = wasm.sourcemap_findClosestMapping(this.ptr, generated_line, generated_column); + return takeObject(ret); + } + /** + * @param {number} generated_line + * @param {number} generated_line_offset + * @returns {any} + */ + offsetLines(generated_line, generated_line_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_offsetLines(retptr, this.ptr, generated_line, generated_line_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {number} generated_line + * @param {number} generated_column + * @param {number} generated_column_offset + * @returns {any} + */ + offsetColumns(generated_line, generated_column, generated_column_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_offsetColumns(retptr, this.ptr, generated_line, generated_column, generated_column_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } +} + +async function load(module, imports) { + if (typeof Response === 'function' && module instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === 'function') { + try { + return await WebAssembly.instantiateStreaming(module, imports); + + } catch (e) { + if (module.headers.get('Content-Type') != 'application/wasm') { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + + } else { + throw e; + } + } + } + + const bytes = await module.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + + } else { + const instance = await WebAssembly.instantiate(module, imports); + + if (instance instanceof WebAssembly.Instance) { + return { instance, module }; + + } else { + return instance; + } + } +} + +async function init(input) { + if (typeof input === 'undefined') { + input = new URL('parcel_sourcemap_wasm_bg.wasm', import.meta.url); + } + const imports = {}; + imports.wbg = {}; + imports.wbg.__wbindgen_json_serialize = function(arg0, arg1) { + const obj = getObject(arg1); + const ret = JSON.stringify(obj === undefined ? null : obj); + const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len0; + getInt32Memory0()[arg0 / 4 + 0] = ptr0; + }; + imports.wbg.__wbg_new_3047bf4b4f02b802 = function(arg0, arg1) { + const ret = new Error(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_is_undefined = function(arg0) { + const ret = getObject(arg0) === undefined; + return ret; + }; + imports.wbg.__wbindgen_object_drop_ref = function(arg0) { + takeObject(arg0); + }; + imports.wbg.__wbg_length_0acb1cf9bbaf8519 = function(arg0) { + const ret = getObject(arg0).length; + return ret; + }; + imports.wbg.__wbindgen_memory = function() { + const ret = wasm.memory; + return addHeapObject(ret); + }; + imports.wbg.__wbg_buffer_7af23f65f6c64548 = function(arg0) { + const ret = getObject(arg0).buffer; + return addHeapObject(ret); + }; + imports.wbg.__wbg_new_cc9018bd6f283b6f = function(arg0) { + const ret = new Uint8Array(getObject(arg0)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_set_f25e869e4565d2a2 = function(arg0, arg1, arg2) { + getObject(arg0).set(getObject(arg1), arg2 >>> 0); + }; + imports.wbg.__wbindgen_json_parse = function(arg0, arg1) { + const ret = JSON.parse(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_number_new = function(arg0) { + const ret = arg0; + return addHeapObject(ret); + }; + imports.wbg.__wbg_newwithbyteoffsetandlength_ce1e75f0ce5f7974 = function(arg0, arg1, arg2) { + const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_string_new = function(arg0, arg1) { + const ret = getStringFromWasm0(arg0, arg1); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_throw = function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }; + + if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { + input = fetch(input); + } + + + + const { instance, module } = await load(await input, imports); + + wasm = instance.exports; + init.__wbindgen_wasm_module = module; + + return wasm; +} + +export default init; + diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/parcel_sourcemap_wasm_bg.wasm b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/parcel_sourcemap_wasm_bg.wasm new file mode 100644 index 0000000..77ee917 Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/parcel_sourcemap_wasm_bg.wasm differ diff --git a/node_modules/@parcel/transformer-babel/LICENSE b/node_modules/@parcel/transformer-babel/LICENSE new file mode 100644 index 0000000..7fb9bc9 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION 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/@parcel/transformer-babel/README.md b/node_modules/@parcel/transformer-babel/README.md new file mode 100644 index 0000000..57cb9ed --- /dev/null +++ b/node_modules/@parcel/transformer-babel/README.md @@ -0,0 +1,17 @@ +# @parcel/transformer-babel + +This Parcel transformer plugin is responsible for transforming assets with Babel. It uses `@babel/core` to resolve babel config the same way Babel does and uses that if found. If no filesystem config is found it uses a default config that supports the most common cases. + +## Default config + +- `@babel/preset-env` - Uses the targets defined in `package.json` or a default set of targets if none are defined to pass to `@babel/preset-env` as options. It runs over all source code as well as installed packages that have a browserslist with higher targets than the app being built by Parcel. +- `@babel/plugin-flow-strip-types` - Right now it configures the flow plugin which uses the ast to check if there is a flow directive and strips types if so [TODO: It should do a cheap check of the code and only apply the plugin if a flow directive is found as it may affect parsing when it shouldn't] +- `@babel/plugin-transform-typescript` - Configured for files with extenions `.ts` and `.tsx` +- `@babel/plugin-transform-react-jsx` - Configured if file has extension `.jsx` or if a React like dependency is found as a dependency in package.json. + +## Custom config perf warnings + +Parcel now supports all configuration formats that Babel supports, but some of them come with negative performance impacts. + +- `babel.config.js`/`.babelrc.js` - Since Babel 7, config files as JS are now supported. While this provides flexibility it hurts cacheability. Parcel cannot cache using the contents of the these files because the config they return is non deterministic based on content alone. Imported dependencies may change or the results may be based on environment variables. For this reason Parcel has to resolve load these files on each build and make sure their output is still the same. Another downside to using JS config files is that they end up being `require()`ed by Babel so Parcel cannot rebuild when the file changes in watch mode. To avoid these performance penalties, it is suggested that you use a `babel.config.json` or `.babelrc` file instead. +- `require('@babel')` - With the advent of JS config files, it is now possible to directly require presets and plugins in configs instead of using names or paths that are resolved by Babel. Unfortunately this gives Parcel no information about which plugins/presets were used in a transformation so Parcel will be forced to run the Babel transformations on every build. It is suggested to avoid this type of configuration. diff --git a/node_modules/@parcel/transformer-babel/lib/BabelTransformer.js b/node_modules/@parcel/transformer-babel/lib/BabelTransformer.js new file mode 100644 index 0000000..75b8d49 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/BabelTransformer.js @@ -0,0 +1,151 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _babelErrorUtils = require("./babelErrorUtils"); + +function _plugin() { + const data = require("@parcel/plugin"); + + _plugin = function () { + return data; + }; + + return data; +} + +function _utils() { + const data = require("@parcel/utils"); + + _utils = function () { + return data; + }; + + return data; +} + +function _sourceMap() { + const data = _interopRequireDefault(require("@parcel/source-map")); + + _sourceMap = function () { + return data; + }; + + return data; +} + +function _semver() { + const data = _interopRequireDefault(require("semver")); + + _semver = function () { + return data; + }; + + return data; +} + +var _babel = _interopRequireDefault(require("./babel7")); + +var _config = require("./config"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _default = new (_plugin().Transformer)({ + loadConfig({ + config, + options, + logger + }) { + return (0, _config.load)(config, options, logger); + }, + + canReuseAST({ + ast + }) { + return ast.type === 'babel' && _semver().default.satisfies(ast.version, '^7.0.0'); + }, + + async transform({ + asset, + config, + options + }) { + try { + if (config !== null && config !== void 0 && config.config) { + if (asset.meta.babelPlugins != null && Array.isArray(asset.meta.babelPlugins)) { + await (0, _babel.default)({ + asset, + options, + babelOptions: config, + additionalPlugins: asset.meta.babelPlugins + }); + } else { + await (0, _babel.default)({ + asset, + options, + babelOptions: config + }); + } + } + + return [asset]; + } catch (e) { + throw await (0, _babelErrorUtils.babelErrorEnhancer)(e, asset); + } + }, + + async generate({ + asset, + ast, + options + }) { + let originalSourceMap = await asset.getMap(); + let sourceFileName = (0, _utils().relativeUrl)(options.projectRoot, asset.filePath); + const babelCorePath = await options.packageManager.resolve('@babel/core', asset.filePath, { + range: '^7.12.0', + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall + }); + const { + default: generate + } = await options.packageManager.require('@babel/generator', babelCorePath.resolved); + let { + code, + rawMappings + } = generate(ast.program, { + sourceFileName, + sourceMaps: !!asset.env.sourceMap, + comments: true + }); + let map = new (_sourceMap().default)(options.projectRoot); + + if (rawMappings) { + map.addIndexedMappings(rawMappings); + } + + if (originalSourceMap) { + // The babel AST already contains the correct mappings, but not the source contents. + // We need to copy over the source contents from the original map. + let sourcesContent = originalSourceMap.getSourcesContentMap(); + + for (let filePath in sourcesContent) { + let content = sourcesContent[filePath]; + + if (content != null) { + map.setSourceContent(filePath, content); + } + } + } + + return { + content: code, + map + }; + } + +}); + +exports.default = _default; \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/babel7.js b/node_modules/@parcel/transformer-babel/lib/babel7.js new file mode 100644 index 0000000..03013a4 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/babel7.js @@ -0,0 +1,98 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = babel7; + +function _assert() { + const data = _interopRequireDefault(require("assert")); + + _assert = function () { + return data; + }; + + return data; +} + +function _utils() { + const data = require("@parcel/utils"); + + _utils = function () { + return data; + }; + + return data; +} + +var _remapAstLocations = require("./remapAstLocations"); + +var _package = _interopRequireDefault(require("../package.json")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const transformerVersion = _package.default.version; +(0, _assert().default)(typeof transformerVersion === 'string'); + +async function babel7(opts) { + var _babelOptions$config$, _babelOptions$config$2, _babelOptions$syntaxP; + + let { + asset, + options, + babelOptions, + additionalPlugins = [] + } = opts; + const babelCore = await options.packageManager.require('@babel/core', asset.filePath, { + range: '^7.12.0', + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall + }); + let config = { ...babelOptions.config, + plugins: additionalPlugins.concat(babelOptions.config.plugins), + code: false, + ast: true, + filename: asset.filePath, + babelrc: false, + configFile: false, + parserOpts: { ...babelOptions.config.parserOpts, + sourceFilename: (0, _utils().relativeUrl)(options.projectRoot, asset.filePath), + allowReturnOutsideFunction: true, + strictMode: false, + sourceType: 'module', + plugins: [...((_babelOptions$config$ = (_babelOptions$config$2 = babelOptions.config.parserOpts) === null || _babelOptions$config$2 === void 0 ? void 0 : _babelOptions$config$2.plugins) !== null && _babelOptions$config$ !== void 0 ? _babelOptions$config$ : []), ...((_babelOptions$syntaxP = babelOptions.syntaxPlugins) !== null && _babelOptions$syntaxP !== void 0 ? _babelOptions$syntaxP : []), // Applied by preset-env + 'classProperties', 'classPrivateProperties', 'classPrivateMethods', 'exportDefaultFrom' // 'topLevelAwait' + ] + }, + caller: { + name: 'parcel', + version: transformerVersion, + targets: JSON.stringify(babelOptions.targets), + outputFormat: asset.env.outputFormat + } + }; + let ast = await asset.getAST(); + let res; + + if (ast) { + res = await babelCore.transformFromAstAsync(ast.program, asset.isASTDirty() ? undefined : await asset.getCode(), config); + } else { + res = await babelCore.transformAsync(await asset.getCode(), config); + + if (res.ast) { + let map = await asset.getMap(); + + if (map) { + (0, _remapAstLocations.remapAstLocations)(babelCore.types, res.ast, map); + } + } + } + + if (res.ast) { + asset.setAST({ + type: 'babel', + version: '7.0.0', + program: res.ast + }); + } +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/babelErrorUtils.js b/node_modules/@parcel/transformer-babel/lib/babelErrorUtils.js new file mode 100644 index 0000000..39d776e --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/babelErrorUtils.js @@ -0,0 +1,17 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.babelErrorEnhancer = babelErrorEnhancer; + +async function babelErrorEnhancer(error, asset) { + if (error.loc) { + let start = error.message.startsWith(asset.filePath) ? asset.filePath.length + 1 : 0; + error.message = error.message.slice(start).split('\n')[0].trim(); + } + + error.source = await asset.getCode(); + error.filePath = asset.filePath; + return error; +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/config.js b/node_modules/@parcel/transformer-babel/lib/config.js new file mode 100644 index 0000000..bc6a402 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/config.js @@ -0,0 +1,371 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.load = load; + +function _json() { + const data = _interopRequireDefault(require("json5")); + + _json = function () { + return data; + }; + + return data; +} + +function _path() { + const data = _interopRequireDefault(require("path")); + + _path = function () { + return data; + }; + + return data; +} + +function _utils() { + const data = require("@parcel/utils"); + + _utils = function () { + return data; + }; + + return data; +} + +function _diagnostic() { + const data = require("@parcel/diagnostic"); + + _diagnostic = function () { + return data; + }; + + return data; +} + +var _constants = require("./constants"); + +var _jsx = _interopRequireDefault(require("./jsx")); + +var _flow = _interopRequireDefault(require("./flow")); + +var _utils2 = require("./utils"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const TYPESCRIPT_EXTNAME_RE = /\.tsx?$/; +const JS_EXTNAME_RE = /^\.(js|cjs|mjs)$/; +const BABEL_CONFIG_FILENAMES = ['.babelrc', '.babelrc.js', '.babelrc.json', '.babelrc.cjs', '.babelrc.mjs', '.babelignore', 'babel.config.js', 'babel.config.json', 'babel.config.mjs', 'babel.config.cjs']; + +async function load(config, options, logger) { + var _ref, _ref2, _options$env$BABEL_EN; + + // Don't transpile inside node_modules + if (!config.isSource) { + return; + } // Invalidate when any babel config file is added. + + + for (let fileName of BABEL_CONFIG_FILENAMES) { + config.invalidateOnFileCreate({ + fileName, + aboveFilePath: config.searchPath + }); + } // Do nothing if we cannot resolve any babel config filenames. Checking using our own + // config resolution (which is cached) is much faster than relying on babel. + + + if (!(await (0, _utils().resolveConfig)(options.inputFS, config.searchPath, BABEL_CONFIG_FILENAMES, options.projectRoot))) { + return buildDefaultBabelConfig(options, config); + } + + const babelCore = await options.packageManager.require('@babel/core', config.searchPath, { + range: _constants.BABEL_CORE_RANGE, + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall + }); + config.addDevDependency({ + specifier: '@babel/core', + resolveFrom: config.searchPath, + range: _constants.BABEL_CORE_RANGE + }); + config.invalidateOnEnvChange('BABEL_ENV'); + config.invalidateOnEnvChange('NODE_ENV'); + let babelOptions = { + filename: config.searchPath, + cwd: options.projectRoot, + envName: (_ref = (_ref2 = (_options$env$BABEL_EN = options.env.BABEL_ENV) !== null && _options$env$BABEL_EN !== void 0 ? _options$env$BABEL_EN : options.env.NODE_ENV) !== null && _ref2 !== void 0 ? _ref2 : options.mode === 'production' || options.mode === 'development' ? options.mode : null) !== null && _ref !== void 0 ? _ref : 'development', + showIgnoredFiles: true + }; + let partialConfig = await babelCore.loadPartialConfigAsync(babelOptions); + + let addIncludedFile = file => { + if (JS_EXTNAME_RE.test(_path().default.extname(file))) { + // We need to invalidate on startup in case the config is non-static, + // e.g. uses unknown environment variables, reads from the filesystem, etc. + logger.warn({ + message: `It looks like you're using a JavaScript Babel config file. This means the config cannot be watched for changes, and Babel transformations cannot be cached. You'll need to restart Parcel for changes to this config to take effect. Try using a ${_path().default.basename(file, _path().default.extname(file)) + '.json'} file instead.` + }); + config.invalidateOnStartup(); // But also add the config as a dev dependency so we can at least attempt invalidation in watch mode. + + config.addDevDependency({ + specifier: (0, _utils().relativePath)(options.projectRoot, file), + resolveFrom: _path().default.join(options.projectRoot, 'index'), + // Also invalidate @babel/core when the config or a dependency updates. + // This ensures that the caches in @babel/core are also invalidated. + additionalInvalidations: [{ + specifier: '@babel/core', + resolveFrom: config.searchPath, + range: _constants.BABEL_CORE_RANGE + }] + }); + } else { + config.invalidateOnFileChange(file); + } + }; + + let warnOldVersion = () => { + logger.warn({ + message: 'You are using an old version of @babel/core which does not support the necessary features for Parcel to cache and watch babel config files safely. You may need to restart Parcel for config changes to take effect. Please upgrade to @babel/core 7.12.0 or later to resolve this issue.' + }); + config.invalidateOnStartup(); + }; // Old versions of @babel/core return null from loadPartialConfig when the file should explicitly not be run through babel (ignore/exclude) + + + if (partialConfig == null) { + warnOldVersion(); + return; + } + + if (partialConfig.files == null) { + // If the files property is missing, we're on an old version of @babel/core. + // We need to invalidate on startup because we can't properly track dependencies. + if (partialConfig.hasFilesystemConfig()) { + warnOldVersion(); + + if (typeof partialConfig.babelrcPath === 'string') { + addIncludedFile(partialConfig.babelrcPath); + } + + if (typeof partialConfig.configPath === 'string') { + addIncludedFile(partialConfig.configPath); + } + } + } else { + for (let file of partialConfig.files) { + addIncludedFile(file); + } + } + + if (partialConfig.fileHandling != null && partialConfig.fileHandling !== 'transpile') {} else if (partialConfig.hasFilesystemConfig()) { + // Determine what syntax plugins we need to enable + let syntaxPlugins = []; + + if (TYPESCRIPT_EXTNAME_RE.test(config.searchPath)) { + syntaxPlugins.push('typescript'); + + if (config.searchPath.endsWith('.tsx')) { + syntaxPlugins.push('jsx'); + } + } else if (await (0, _jsx.default)(options, config)) { + syntaxPlugins.push('jsx'); + } // If the config has plugins loaded with require(), or inline plugins in the config, + // we can't cache the result of the compilation because we don't know where they came from. + + + if (hasRequire(partialConfig.options)) { + logger.warn({ + message: 'It looks like you are using `require` to configure Babel plugins or presets. This means Babel transformations cannot be cached and will run on each build. Please use strings to configure Babel instead.' + }); + config.setCacheKey(JSON.stringify(Date.now())); + config.invalidateOnStartup(); + } else { + await warnOnRedundantPlugins(options.inputFS, partialConfig, logger); + definePluginDependencies(config, partialConfig.options, options); + config.setCacheKey((0, _utils().hashObject)(partialConfig.options)); + } + + return { + internal: false, + config: partialConfig.options, + targets: (0, _utils2.enginesToBabelTargets)(config.env), + syntaxPlugins + }; + } else { + return buildDefaultBabelConfig(options, config); + } +} + +async function buildDefaultBabelConfig(options, config) { + // If this is a .ts or .tsx file, we don't need to enable flow. + if (TYPESCRIPT_EXTNAME_RE.test(config.searchPath)) { + return; + } // Detect flow. If not enabled, babel doesn't need to run at all. + + + let babelOptions = await (0, _flow.default)(config, options); + + if (babelOptions == null) { + return; + } // When flow is enabled, we may also need to enable JSX so it parses properly. + + + let syntaxPlugins = []; + + if (await (0, _jsx.default)(options, config)) { + syntaxPlugins.push('jsx'); + } + + definePluginDependencies(config, babelOptions, options); + return { + internal: true, + config: babelOptions, + syntaxPlugins + }; +} + +function hasRequire(options) { + let configItems = [...options.presets, ...options.plugins]; + return configItems.some(item => !item.file); +} + +function definePluginDependencies(config, babelConfig, options) { + if (babelConfig == null) { + return; + } + + let configItems = [...(babelConfig.presets || []), ...(babelConfig.plugins || [])]; + + for (let configItem of configItems) { + // FIXME: this uses a relative path from the project root rather than resolving + // from the config location because configItem.file.request can be a shorthand + // rather than a full package name. + config.addDevDependency({ + specifier: (0, _utils().relativePath)(options.projectRoot, configItem.file.resolved), + resolveFrom: _path().default.join(options.projectRoot, 'index'), + // Also invalidate @babel/core when the plugin or a dependency updates. + // This ensures that the caches in @babel/core are also invalidated. + additionalInvalidations: [{ + specifier: '@babel/core', + resolveFrom: config.searchPath, + range: _constants.BABEL_CORE_RANGE + }] + }); + } +} + +const redundantPresets = new Set(['@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript', '@parcel/babel-preset-env']); + +async function warnOnRedundantPlugins(fs, babelConfig, logger) { + var _babelConfig$config; + + if (babelConfig == null) { + return; + } + + let configPath = (_babelConfig$config = babelConfig.config) !== null && _babelConfig$config !== void 0 ? _babelConfig$config : babelConfig.babelrc; + + if (!configPath) { + return; + } + + let presets = babelConfig.options.presets || []; + let plugins = babelConfig.options.plugins || []; + let foundRedundantPresets = new Set(); + let filteredPresets = presets.filter(preset => { + if (redundantPresets.has(preset.file.request)) { + foundRedundantPresets.add(preset.file.request); + return false; + } + + return true; + }); + + let filePath = _path().default.relative(process.cwd(), configPath); + + let diagnostics = []; + + if (filteredPresets.length === 0 && foundRedundantPresets.size > 0 && plugins.length === 0) { + diagnostics.push({ + message: (0, _diagnostic().md)`Parcel includes transpilation by default. Babel config __${filePath}__ contains only redundant presets. Deleting it may significantly improve build performance.`, + codeFrames: [{ + filePath: configPath, + codeHighlights: await getCodeHighlights(fs, configPath, foundRedundantPresets) + }], + hints: [(0, _diagnostic().md)`Delete __${filePath}__`], + documentationURL: 'https://parceljs.org/languages/javascript/#default-presets' + }); + } else if (foundRedundantPresets.size > 0) { + diagnostics.push({ + message: (0, _diagnostic().md)`Parcel includes transpilation by default. Babel config __${filePath}__ includes the following redundant presets: ${[...foundRedundantPresets].map(p => _diagnostic().md.underline(p))}. Removing these may improve build performance.`, + codeFrames: [{ + filePath: configPath, + codeHighlights: await getCodeHighlights(fs, configPath, foundRedundantPresets) + }], + hints: [(0, _diagnostic().md)`Remove the above presets from __${filePath}__`], + documentationURL: 'https://parceljs.org/languages/javascript/#default-presets' + }); + } + + if (foundRedundantPresets.has('@babel/preset-env')) { + var _babelConfig$config2, _babelConfig$config3; + + diagnostics.push({ + message: "@babel/preset-env does not support Parcel's targets, which will likely result in unnecessary transpilation and larger bundle sizes.", + codeFrames: [{ + filePath: (_babelConfig$config2 = babelConfig.config) !== null && _babelConfig$config2 !== void 0 ? _babelConfig$config2 : babelConfig.babelrc, + codeHighlights: await getCodeHighlights(fs, (_babelConfig$config3 = babelConfig.config) !== null && _babelConfig$config3 !== void 0 ? _babelConfig$config3 : babelConfig.babelrc, new Set(['@babel/preset-env'])) + }], + hints: [`Either remove __@babel/preset-env__ to use Parcel's builtin transpilation, or replace with __@parcel/babel-preset-env__`], + documentationURL: 'https://parceljs.org/languages/javascript/#custom-plugins' + }); + } + + if (diagnostics.length > 0) { + logger.warn(diagnostics); + } +} + +async function getCodeHighlights(fs, filePath, redundantPresets) { + let ext = _path().default.extname(filePath); + + if (ext !== '.js' && ext !== '.cjs' && ext !== '.mjs') { + let contents = await fs.readFile(filePath, 'utf8'); + + let json = _json().default.parse(contents); + + let presets = json.presets || []; + let pointers = []; + + for (let i = 0; i < presets.length; i++) { + if (Array.isArray(presets[i]) && redundantPresets.has(presets[i][0])) { + pointers.push({ + type: 'value', + key: `/presets/${i}/0` + }); + } else if (redundantPresets.has(presets[i])) { + pointers.push({ + type: 'value', + key: `/presets/${i}` + }); + } + } + + if (pointers.length > 0) { + return (0, _diagnostic().generateJSONCodeHighlights)(contents, pointers); + } + } + + return [{ + start: { + line: 1, + column: 1 + }, + end: { + line: 1, + column: 1 + } + }]; +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/constants.js b/node_modules/@parcel/transformer-babel/lib/constants.js new file mode 100644 index 0000000..9c90c9b --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/constants.js @@ -0,0 +1,8 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.BABEL_CORE_RANGE = void 0; +const BABEL_CORE_RANGE = '^7.12.0'; +exports.BABEL_CORE_RANGE = BABEL_CORE_RANGE; \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/flow.js b/node_modules/@parcel/transformer-babel/lib/flow.js new file mode 100644 index 0000000..059f0c1 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/flow.js @@ -0,0 +1,56 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = getFlowOptions; + +var _constants = require("./constants"); + +function _path() { + const data = _interopRequireDefault(require("path")); + + _path = function () { + return data; + }; + + return data; +} + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Generates a babel config for stripping away Flow types. + */ +async function getFlowOptions(config, options) { + if (!config.isSource) { + return null; + } // Only add flow plugin if `flow-bin` is listed as a dependency in the root package.json + + + let conf = await config.getConfigFrom(options.projectRoot + '/index', ['package.json']); + let pkg = conf === null || conf === void 0 ? void 0 : conf.contents; + + if (!pkg || !(pkg.dependencies && pkg.dependencies['flow-bin']) && !(pkg.devDependencies && pkg.devDependencies['flow-bin'])) { + return null; + } + + const babelCore = await options.packageManager.require('@babel/core', config.searchPath, { + range: _constants.BABEL_CORE_RANGE, + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall + }); + await options.packageManager.require('@babel/plugin-transform-flow-strip-types', config.searchPath, { + range: '^7.0.0', + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall + }); + return { + plugins: [babelCore.createConfigItem(['@babel/plugin-transform-flow-strip-types', { + requireDirective: true + }], { + type: 'plugin', + dirname: _path().default.dirname(config.searchPath) + })] + }; +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/jsx.js b/node_modules/@parcel/transformer-babel/lib/jsx.js new file mode 100644 index 0000000..744b016 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/jsx.js @@ -0,0 +1,45 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = isJSX; + +function _path() { + const data = _interopRequireDefault(require("path")); + + _path = function () { + return data; + }; + + return data; +} + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const JSX_EXTENSIONS = new Set(['.jsx', '.tsx']); +const JSX_LIBRARIES = ['react', 'preact', 'nervejs', 'hyperapp']; +/** + * Returns whether an asset is likely JSX. Attempts to detect react or react-like libraries + * along with + */ + +async function isJSX(options, config) { + if (!config.isSource) { + return false; + } + + if (JSX_EXTENSIONS.has(_path().default.extname(config.searchPath))) { + return true; + } + + let pkg = await config.getPackage(); + + if (pkg !== null && pkg !== void 0 && pkg.alias && pkg.alias['react']) { + // e.g.: `{ alias: { "react": "preact/compat" } }` + return true; + } else { + // Find a dependency that implies JSX syntax. + return JSX_LIBRARIES.some(libName => pkg && (pkg.dependencies && pkg.dependencies[libName] || pkg.devDependencies && pkg.devDependencies[libName] || pkg.peerDependencies && pkg.peerDependencies[libName])); + } +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/remapAstLocations.js b/node_modules/@parcel/transformer-babel/lib/remapAstLocations.js new file mode 100644 index 0000000..ba72fba --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/remapAstLocations.js @@ -0,0 +1,59 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.remapAstLocations = remapAstLocations; + +function remapAstLocations(t, ast, map) { + // remap ast to original mappings + // This improves sourcemap accuracy and fixes sourcemaps when scope-hoisting + traverseAll(t, ast.program, node => { + if (node.loc) { + var _node$loc; + + if ((_node$loc = node.loc) !== null && _node$loc !== void 0 && _node$loc.start) { + let mapping = map.findClosestMapping(node.loc.start.line, node.loc.start.column); + + if (mapping !== null && mapping !== void 0 && mapping.original) { + // $FlowFixMe + node.loc.start.line = mapping.original.line; // $FlowFixMe + + node.loc.start.column = mapping.original.column; // $FlowFixMe + + let length = node.loc.end.column - node.loc.start.column; // $FlowFixMe + + node.loc.end.line = mapping.original.line; // $FlowFixMe + + node.loc.end.column = mapping.original.column + length; // $FlowFixMe + + node.loc.filename = mapping.source; + } else { + // Maintain null mappings? + node.loc = null; + } + } + } + }); +} + +function traverseAll(t, node, visitor) { + if (!node) { + return; + } + + visitor(node); + + for (let key of t.VISITOR_KEYS[node.type] || []) { + // $FlowFixMe + let subNode = node[key]; + + if (Array.isArray(subNode)) { + for (let i = 0; i < subNode.length; i++) { + traverseAll(t, subNode[i], visitor); + } + } else { + traverseAll(t, subNode, visitor); + } + } +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/types.js b/node_modules/@parcel/transformer-babel/lib/types.js new file mode 100644 index 0000000..9a390c3 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/types.js @@ -0,0 +1 @@ +"use strict"; \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/utils.js b/node_modules/@parcel/transformer-babel/lib/utils.js new file mode 100644 index 0000000..6183382 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/utils.js @@ -0,0 +1,86 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.enginesToBabelTargets = enginesToBabelTargets; + +function _assert() { + const data = _interopRequireDefault(require("assert")); + + _assert = function () { + return data; + }; + + return data; +} + +function _semver() { + const data = _interopRequireDefault(require("semver")); + + _semver = function () { + return data; + }; + + return data; +} + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Copied from @babel/helper-compilation-targets/lib/options.js +const TargetNames = { + node: 'node', + chrome: 'chrome', + opera: 'opera', + edge: 'edge', + firefox: 'firefox', + safari: 'safari', + ie: 'ie', + ios: 'ios', + android: 'android', + electron: 'electron', + samsung: 'samsung', + rhino: 'rhino' +}; // List of browsers to exclude when the esmodule target is specified. +// Based on https://caniuse.com/#feat=es6-module + +const ESMODULE_BROWSERS = ['not ie <= 11', 'not edge < 16', 'not firefox < 60', 'not chrome < 61', 'not safari < 11', 'not opera < 48', 'not ios_saf < 11', 'not op_mini all', 'not android < 76', 'not blackberry > 0', 'not op_mob > 0', 'not and_chr < 76', 'not and_ff < 68', 'not ie_mob > 0', 'not and_uc > 0', 'not samsung < 8.2', 'not and_qq > 0', 'not baidu > 0', 'not kaios > 0']; + +function enginesToBabelTargets(env) { + // "Targets" is the name @babel/preset-env uses for what Parcel calls engines. + // This should not be confused with Parcel's own targets. + // Unlike Parcel's engines, @babel/preset-env expects to work with minimum + // versions, not semver ranges, of its targets. + let targets = {}; + + for (let engineName of Object.keys(env.engines)) { + let engineValue = env.engines[engineName]; // if the engineValue is a string, it might be a semver range. Use the minimum + // possible version instead. + + if (engineName === 'browsers') { + targets[engineName] = engineValue; + } else { + var _semver$minVersion; + + (0, _assert().default)(typeof engineValue === 'string'); + if (!TargetNames.hasOwnProperty(engineName)) continue; + let minVersion = (_semver$minVersion = _semver().default.minVersion(engineValue)) === null || _semver$minVersion === void 0 ? void 0 : _semver$minVersion.toString(); + targets[engineName] = minVersion !== null && minVersion !== void 0 ? minVersion : engineValue; + } + } + + if (env.outputFormat === 'esmodule' && env.isBrowser()) { + // If there is already a browsers target, add a blacklist to exclude + // instead of using babel's esmodules target. This allows specifying + // a newer set of browsers than the baseline esmodule support list. + // See https://github.com/babel/babel/issues/8809. + if (targets.browsers) { + let browsers = Array.isArray(targets.browsers) ? targets.browsers : [targets.browsers]; + targets.browsers = [...browsers, ...ESMODULE_BROWSERS]; + } else { + targets.esmodules = true; + } + } + + return targets; +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/package.json b/node_modules/@parcel/transformer-babel/package.json new file mode 100644 index 0000000..ca7beff --- /dev/null +++ b/node_modules/@parcel/transformer-babel/package.json @@ -0,0 +1,39 @@ +{ + "name": "@parcel/transformer-babel", + "version": "2.8.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/BabelTransformer.js", + "source": "src/BabelTransformer.js", + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "json5": "^2.2.0", + "nullthrows": "^1.1.1", + "semver": "^5.7.0" + }, + "devDependencies": { + "@babel/core": "^7.12.0", + "@babel/preset-env": "^7.0.0", + "@babel/types": "^7.12.0", + "@parcel/types": "2.8.3" + }, + "gitHead": "349a6caf40ec8abb6a49fcae0765f8f8deb2073d" +} diff --git a/node_modules/@parcel/transformer-babel/src/BabelTransformer.js b/node_modules/@parcel/transformer-babel/src/BabelTransformer.js new file mode 100644 index 0000000..c3db3c5 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/BabelTransformer.js @@ -0,0 +1,94 @@ +// @flow strict-local + +import {babelErrorEnhancer} from './babelErrorUtils'; +import {Transformer} from '@parcel/plugin'; +import {relativeUrl} from '@parcel/utils'; +import SourceMap from '@parcel/source-map'; +import semver from 'semver'; +import babel7 from './babel7'; +import {load} from './config'; + +export default (new Transformer({ + loadConfig({config, options, logger}) { + return load(config, options, logger); + }, + + canReuseAST({ast}) { + return ast.type === 'babel' && semver.satisfies(ast.version, '^7.0.0'); + }, + + async transform({asset, config, options}) { + try { + if (config?.config) { + if ( + asset.meta.babelPlugins != null && + Array.isArray(asset.meta.babelPlugins) + ) { + await babel7({ + asset, + options, + babelOptions: config, + additionalPlugins: asset.meta.babelPlugins, + }); + } else { + await babel7({asset, options, babelOptions: config}); + } + } + + return [asset]; + } catch (e) { + throw await babelErrorEnhancer(e, asset); + } + }, + + async generate({asset, ast, options}) { + let originalSourceMap = await asset.getMap(); + let sourceFileName: string = relativeUrl( + options.projectRoot, + asset.filePath, + ); + + const babelCorePath = await options.packageManager.resolve( + '@babel/core', + asset.filePath, + { + range: '^7.12.0', + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall, + }, + ); + + const {default: generate} = await options.packageManager.require( + '@babel/generator', + babelCorePath.resolved, + ); + + let {code, rawMappings} = generate(ast.program, { + sourceFileName, + sourceMaps: !!asset.env.sourceMap, + comments: true, + }); + + let map = new SourceMap(options.projectRoot); + if (rawMappings) { + map.addIndexedMappings(rawMappings); + } + + if (originalSourceMap) { + // The babel AST already contains the correct mappings, but not the source contents. + // We need to copy over the source contents from the original map. + let sourcesContent = originalSourceMap.getSourcesContentMap(); + for (let filePath in sourcesContent) { + let content = sourcesContent[filePath]; + if (content != null) { + map.setSourceContent(filePath, content); + } + } + } + + return { + content: code, + map, + }; + }, +}): Transformer); diff --git a/node_modules/@parcel/transformer-babel/src/babel7.js b/node_modules/@parcel/transformer-babel/src/babel7.js new file mode 100644 index 0000000..ab526eb --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/babel7.js @@ -0,0 +1,94 @@ +// @flow + +import type {MutableAsset, AST, PluginOptions} from '@parcel/types'; +import typeof * as BabelCore from '@babel/core'; + +import invariant from 'assert'; +import {relativeUrl} from '@parcel/utils'; +import {remapAstLocations} from './remapAstLocations'; + +import packageJson from '../package.json'; + +const transformerVersion: mixed = packageJson.version; +invariant(typeof transformerVersion === 'string'); + +type Babel7TransformOptions = {| + asset: MutableAsset, + options: PluginOptions, + babelOptions: any, + additionalPlugins?: Array, +|}; + +export default async function babel7( + opts: Babel7TransformOptions, +): Promise { + let {asset, options, babelOptions, additionalPlugins = []} = opts; + const babelCore: BabelCore = await options.packageManager.require( + '@babel/core', + asset.filePath, + { + range: '^7.12.0', + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall, + }, + ); + + let config = { + ...babelOptions.config, + plugins: additionalPlugins.concat(babelOptions.config.plugins), + code: false, + ast: true, + filename: asset.filePath, + babelrc: false, + configFile: false, + parserOpts: { + ...babelOptions.config.parserOpts, + sourceFilename: relativeUrl(options.projectRoot, asset.filePath), + allowReturnOutsideFunction: true, + strictMode: false, + sourceType: 'module', + plugins: [ + ...(babelOptions.config.parserOpts?.plugins ?? []), + ...(babelOptions.syntaxPlugins ?? []), + // Applied by preset-env + 'classProperties', + 'classPrivateProperties', + 'classPrivateMethods', + 'exportDefaultFrom', + // 'topLevelAwait' + ], + }, + caller: { + name: 'parcel', + version: transformerVersion, + targets: JSON.stringify(babelOptions.targets), + outputFormat: asset.env.outputFormat, + }, + }; + + let ast = await asset.getAST(); + let res; + if (ast) { + res = await babelCore.transformFromAstAsync( + ast.program, + asset.isASTDirty() ? undefined : await asset.getCode(), + config, + ); + } else { + res = await babelCore.transformAsync(await asset.getCode(), config); + if (res.ast) { + let map = await asset.getMap(); + if (map) { + remapAstLocations(babelCore.types, res.ast, map); + } + } + } + + if (res.ast) { + asset.setAST({ + type: 'babel', + version: '7.0.0', + program: res.ast, + }); + } +} diff --git a/node_modules/@parcel/transformer-babel/src/babelErrorUtils.js b/node_modules/@parcel/transformer-babel/src/babelErrorUtils.js new file mode 100644 index 0000000..9d705d1 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/babelErrorUtils.js @@ -0,0 +1,30 @@ +// @flow +import type {BaseAsset} from '@parcel/types'; + +export type BabelError = Error & { + loc?: { + line: number, + column: number, + ... + }, + source?: string, + filePath?: string, + ... +}; + +export async function babelErrorEnhancer( + error: BabelError, + asset: BaseAsset, +): Promise { + if (error.loc) { + let start = error.message.startsWith(asset.filePath) + ? asset.filePath.length + 1 + : 0; + error.message = error.message.slice(start).split('\n')[0].trim(); + } + + error.source = await asset.getCode(); + error.filePath = asset.filePath; + + return error; +} diff --git a/node_modules/@parcel/transformer-babel/src/config.js b/node_modules/@parcel/transformer-babel/src/config.js new file mode 100644 index 0000000..6649026 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/config.js @@ -0,0 +1,413 @@ +// @flow + +import type {Config, PluginOptions, PluginLogger} from '@parcel/types'; +import typeof * as BabelCore from '@babel/core'; +import type {Diagnostic} from '@parcel/diagnostic'; +import type {BabelConfig} from './types'; + +import json5 from 'json5'; +import path from 'path'; +import {hashObject, relativePath, resolveConfig} from '@parcel/utils'; +import {md, generateJSONCodeHighlights} from '@parcel/diagnostic'; +import {BABEL_CORE_RANGE} from './constants'; + +import isJSX from './jsx'; +import getFlowOptions from './flow'; +import {enginesToBabelTargets} from './utils'; + +const TYPESCRIPT_EXTNAME_RE = /\.tsx?$/; +const JS_EXTNAME_RE = /^\.(js|cjs|mjs)$/; +const BABEL_CONFIG_FILENAMES = [ + '.babelrc', + '.babelrc.js', + '.babelrc.json', + '.babelrc.cjs', + '.babelrc.mjs', + '.babelignore', + 'babel.config.js', + 'babel.config.json', + 'babel.config.mjs', + 'babel.config.cjs', +]; + +type BabelConfigResult = {| + internal: boolean, + config: BabelConfig, + targets?: mixed, + syntaxPlugins?: mixed, +|}; + +export async function load( + config: Config, + options: PluginOptions, + logger: PluginLogger, +): Promise { + // Don't transpile inside node_modules + if (!config.isSource) { + return; + } + + // Invalidate when any babel config file is added. + for (let fileName of BABEL_CONFIG_FILENAMES) { + config.invalidateOnFileCreate({ + fileName, + aboveFilePath: config.searchPath, + }); + } + + // Do nothing if we cannot resolve any babel config filenames. Checking using our own + // config resolution (which is cached) is much faster than relying on babel. + if ( + !(await resolveConfig( + options.inputFS, + config.searchPath, + BABEL_CONFIG_FILENAMES, + options.projectRoot, + )) + ) { + return buildDefaultBabelConfig(options, config); + } + + const babelCore: BabelCore = await options.packageManager.require( + '@babel/core', + config.searchPath, + { + range: BABEL_CORE_RANGE, + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall, + }, + ); + config.addDevDependency({ + specifier: '@babel/core', + resolveFrom: config.searchPath, + range: BABEL_CORE_RANGE, + }); + + config.invalidateOnEnvChange('BABEL_ENV'); + config.invalidateOnEnvChange('NODE_ENV'); + let babelOptions = { + filename: config.searchPath, + cwd: options.projectRoot, + envName: + options.env.BABEL_ENV ?? + options.env.NODE_ENV ?? + (options.mode === 'production' || options.mode === 'development' + ? options.mode + : null) ?? + 'development', + showIgnoredFiles: true, + }; + + let partialConfig: ?{| + [string]: any, + |} = await babelCore.loadPartialConfigAsync(babelOptions); + + let addIncludedFile = file => { + if (JS_EXTNAME_RE.test(path.extname(file))) { + // We need to invalidate on startup in case the config is non-static, + // e.g. uses unknown environment variables, reads from the filesystem, etc. + logger.warn({ + message: `It looks like you're using a JavaScript Babel config file. This means the config cannot be watched for changes, and Babel transformations cannot be cached. You'll need to restart Parcel for changes to this config to take effect. Try using a ${ + path.basename(file, path.extname(file)) + '.json' + } file instead.`, + }); + config.invalidateOnStartup(); + + // But also add the config as a dev dependency so we can at least attempt invalidation in watch mode. + config.addDevDependency({ + specifier: relativePath(options.projectRoot, file), + resolveFrom: path.join(options.projectRoot, 'index'), + // Also invalidate @babel/core when the config or a dependency updates. + // This ensures that the caches in @babel/core are also invalidated. + additionalInvalidations: [ + { + specifier: '@babel/core', + resolveFrom: config.searchPath, + range: BABEL_CORE_RANGE, + }, + ], + }); + } else { + config.invalidateOnFileChange(file); + } + }; + + let warnOldVersion = () => { + logger.warn({ + message: + 'You are using an old version of @babel/core which does not support the necessary features for Parcel to cache and watch babel config files safely. You may need to restart Parcel for config changes to take effect. Please upgrade to @babel/core 7.12.0 or later to resolve this issue.', + }); + config.invalidateOnStartup(); + }; + + // Old versions of @babel/core return null from loadPartialConfig when the file should explicitly not be run through babel (ignore/exclude) + if (partialConfig == null) { + warnOldVersion(); + return; + } + + if (partialConfig.files == null) { + // If the files property is missing, we're on an old version of @babel/core. + // We need to invalidate on startup because we can't properly track dependencies. + if (partialConfig.hasFilesystemConfig()) { + warnOldVersion(); + + if (typeof partialConfig.babelrcPath === 'string') { + addIncludedFile(partialConfig.babelrcPath); + } + + if (typeof partialConfig.configPath === 'string') { + addIncludedFile(partialConfig.configPath); + } + } + } else { + for (let file of partialConfig.files) { + addIncludedFile(file); + } + } + + if ( + partialConfig.fileHandling != null && + partialConfig.fileHandling !== 'transpile' + ) { + return; + } else if (partialConfig.hasFilesystemConfig()) { + // Determine what syntax plugins we need to enable + let syntaxPlugins = []; + if (TYPESCRIPT_EXTNAME_RE.test(config.searchPath)) { + syntaxPlugins.push('typescript'); + if (config.searchPath.endsWith('.tsx')) { + syntaxPlugins.push('jsx'); + } + } else if (await isJSX(options, config)) { + syntaxPlugins.push('jsx'); + } + + // If the config has plugins loaded with require(), or inline plugins in the config, + // we can't cache the result of the compilation because we don't know where they came from. + if (hasRequire(partialConfig.options)) { + logger.warn({ + message: + 'It looks like you are using `require` to configure Babel plugins or presets. This means Babel transformations cannot be cached and will run on each build. Please use strings to configure Babel instead.', + }); + + config.setCacheKey(JSON.stringify(Date.now())); + config.invalidateOnStartup(); + } else { + await warnOnRedundantPlugins(options.inputFS, partialConfig, logger); + definePluginDependencies(config, partialConfig.options, options); + config.setCacheKey(hashObject(partialConfig.options)); + } + + return { + internal: false, + config: partialConfig.options, + targets: enginesToBabelTargets(config.env), + syntaxPlugins, + }; + } else { + return buildDefaultBabelConfig(options, config); + } +} + +async function buildDefaultBabelConfig( + options: PluginOptions, + config: Config, +): Promise { + // If this is a .ts or .tsx file, we don't need to enable flow. + if (TYPESCRIPT_EXTNAME_RE.test(config.searchPath)) { + return; + } + + // Detect flow. If not enabled, babel doesn't need to run at all. + let babelOptions = await getFlowOptions(config, options); + if (babelOptions == null) { + return; + } + + // When flow is enabled, we may also need to enable JSX so it parses properly. + let syntaxPlugins = []; + if (await isJSX(options, config)) { + syntaxPlugins.push('jsx'); + } + + definePluginDependencies(config, babelOptions, options); + return { + internal: true, + config: babelOptions, + syntaxPlugins, + }; +} + +function hasRequire(options) { + let configItems = [...options.presets, ...options.plugins]; + return configItems.some(item => !item.file); +} + +function definePluginDependencies(config, babelConfig: ?BabelConfig, options) { + if (babelConfig == null) { + return; + } + + let configItems = [ + ...(babelConfig.presets || []), + ...(babelConfig.plugins || []), + ]; + for (let configItem of configItems) { + // FIXME: this uses a relative path from the project root rather than resolving + // from the config location because configItem.file.request can be a shorthand + // rather than a full package name. + config.addDevDependency({ + specifier: relativePath(options.projectRoot, configItem.file.resolved), + resolveFrom: path.join(options.projectRoot, 'index'), + // Also invalidate @babel/core when the plugin or a dependency updates. + // This ensures that the caches in @babel/core are also invalidated. + additionalInvalidations: [ + { + specifier: '@babel/core', + resolveFrom: config.searchPath, + range: BABEL_CORE_RANGE, + }, + ], + }); + } +} + +const redundantPresets = new Set([ + '@babel/preset-env', + '@babel/preset-react', + '@babel/preset-typescript', + '@parcel/babel-preset-env', +]); + +async function warnOnRedundantPlugins(fs, babelConfig, logger) { + if (babelConfig == null) { + return; + } + + let configPath = babelConfig.config ?? babelConfig.babelrc; + if (!configPath) { + return; + } + + let presets = babelConfig.options.presets || []; + let plugins = babelConfig.options.plugins || []; + let foundRedundantPresets = new Set(); + + let filteredPresets = presets.filter(preset => { + if (redundantPresets.has(preset.file.request)) { + foundRedundantPresets.add(preset.file.request); + return false; + } + + return true; + }); + + let filePath = path.relative(process.cwd(), configPath); + let diagnostics: Array = []; + + if ( + filteredPresets.length === 0 && + foundRedundantPresets.size > 0 && + plugins.length === 0 + ) { + diagnostics.push({ + message: md`Parcel includes transpilation by default. Babel config __${filePath}__ contains only redundant presets. Deleting it may significantly improve build performance.`, + codeFrames: [ + { + filePath: configPath, + codeHighlights: await getCodeHighlights( + fs, + configPath, + foundRedundantPresets, + ), + }, + ], + hints: [md`Delete __${filePath}__`], + documentationURL: + 'https://parceljs.org/languages/javascript/#default-presets', + }); + } else if (foundRedundantPresets.size > 0) { + diagnostics.push({ + message: md`Parcel includes transpilation by default. Babel config __${filePath}__ includes the following redundant presets: ${[ + ...foundRedundantPresets, + ].map(p => + md.underline(p), + )}. Removing these may improve build performance.`, + codeFrames: [ + { + filePath: configPath, + codeHighlights: await getCodeHighlights( + fs, + configPath, + foundRedundantPresets, + ), + }, + ], + hints: [md`Remove the above presets from __${filePath}__`], + documentationURL: + 'https://parceljs.org/languages/javascript/#default-presets', + }); + } + + if (foundRedundantPresets.has('@babel/preset-env')) { + diagnostics.push({ + message: + "@babel/preset-env does not support Parcel's targets, which will likely result in unnecessary transpilation and larger bundle sizes.", + codeFrames: [ + { + filePath: babelConfig.config ?? babelConfig.babelrc, + codeHighlights: await getCodeHighlights( + fs, + babelConfig.config ?? babelConfig.babelrc, + new Set(['@babel/preset-env']), + ), + }, + ], + hints: [ + `Either remove __@babel/preset-env__ to use Parcel's builtin transpilation, or replace with __@parcel/babel-preset-env__`, + ], + documentationURL: + 'https://parceljs.org/languages/javascript/#custom-plugins', + }); + } + + if (diagnostics.length > 0) { + logger.warn(diagnostics); + } +} + +async function getCodeHighlights(fs, filePath, redundantPresets) { + let ext = path.extname(filePath); + if (ext !== '.js' && ext !== '.cjs' && ext !== '.mjs') { + let contents = await fs.readFile(filePath, 'utf8'); + let json = json5.parse(contents); + + let presets = json.presets || []; + let pointers = []; + for (let i = 0; i < presets.length; i++) { + if (Array.isArray(presets[i]) && redundantPresets.has(presets[i][0])) { + pointers.push({type: 'value', key: `/presets/${i}/0`}); + } else if (redundantPresets.has(presets[i])) { + pointers.push({type: 'value', key: `/presets/${i}`}); + } + } + + if (pointers.length > 0) { + return generateJSONCodeHighlights(contents, pointers); + } + } + + return [ + { + start: { + line: 1, + column: 1, + }, + end: { + line: 1, + column: 1, + }, + }, + ]; +} diff --git a/node_modules/@parcel/transformer-babel/src/constants.js b/node_modules/@parcel/transformer-babel/src/constants.js new file mode 100644 index 0000000..60a9231 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/constants.js @@ -0,0 +1,3 @@ +// @flow strict-local + +export const BABEL_CORE_RANGE = '^7.12.0'; diff --git a/node_modules/@parcel/transformer-babel/src/flow.js b/node_modules/@parcel/transformer-babel/src/flow.js new file mode 100644 index 0000000..5dd47e9 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/flow.js @@ -0,0 +1,66 @@ +// @flow + +import type {Config, PluginOptions, PackageJSON} from '@parcel/types'; +import type {BabelConfig} from './types'; +import typeof * as BabelCore from '@babel/core'; + +import {BABEL_CORE_RANGE} from './constants'; +import path from 'path'; + +/** + * Generates a babel config for stripping away Flow types. + */ +export default async function getFlowOptions( + config: Config, + options: PluginOptions, +): Promise { + if (!config.isSource) { + return null; + } + + // Only add flow plugin if `flow-bin` is listed as a dependency in the root package.json + let conf = await config.getConfigFrom( + options.projectRoot + '/index', + ['package.json'], + ); + let pkg = conf?.contents; + if ( + !pkg || + (!(pkg.dependencies && pkg.dependencies['flow-bin']) && + !(pkg.devDependencies && pkg.devDependencies['flow-bin'])) + ) { + return null; + } + + const babelCore: BabelCore = await options.packageManager.require( + '@babel/core', + config.searchPath, + { + range: BABEL_CORE_RANGE, + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall, + }, + ); + + await options.packageManager.require( + '@babel/plugin-transform-flow-strip-types', + config.searchPath, + { + range: '^7.0.0', + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall, + }, + ); + + return { + plugins: [ + babelCore.createConfigItem( + ['@babel/plugin-transform-flow-strip-types', {requireDirective: true}], + { + type: 'plugin', + dirname: path.dirname(config.searchPath), + }, + ), + ], + }; +} diff --git a/node_modules/@parcel/transformer-babel/src/jsx.js b/node_modules/@parcel/transformer-babel/src/jsx.js new file mode 100644 index 0000000..4b03c12 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/jsx.js @@ -0,0 +1,40 @@ +// @flow strict-local + +import type {Config, PluginOptions} from '@parcel/types'; + +import path from 'path'; + +const JSX_EXTENSIONS = new Set(['.jsx', '.tsx']); +const JSX_LIBRARIES = ['react', 'preact', 'nervejs', 'hyperapp']; + +/** + * Returns whether an asset is likely JSX. Attempts to detect react or react-like libraries + * along with + */ +export default async function isJSX( + options: PluginOptions, + config: Config, +): Promise { + if (!config.isSource) { + return false; + } + + if (JSX_EXTENSIONS.has(path.extname(config.searchPath))) { + return true; + } + + let pkg = await config.getPackage(); + if (pkg?.alias && pkg.alias['react']) { + // e.g.: `{ alias: { "react": "preact/compat" } }` + return true; + } else { + // Find a dependency that implies JSX syntax. + return JSX_LIBRARIES.some( + libName => + pkg && + ((pkg.dependencies && pkg.dependencies[libName]) || + (pkg.devDependencies && pkg.devDependencies[libName]) || + (pkg.peerDependencies && pkg.peerDependencies[libName])), + ); + } +} diff --git a/node_modules/@parcel/transformer-babel/src/remapAstLocations.js b/node_modules/@parcel/transformer-babel/src/remapAstLocations.js new file mode 100644 index 0000000..db650f2 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/remapAstLocations.js @@ -0,0 +1,70 @@ +// @flow strict-local + +import type {File as BabelNodeFile} from '@babel/types'; +import type SourceMap from '@parcel/source-map'; +import type {Node} from '@babel/types'; +import typeof * as BabelTypes from '@babel/types'; + +export function remapAstLocations( + t: BabelTypes, + ast: BabelNodeFile, + map: SourceMap, +) { + // remap ast to original mappings + // This improves sourcemap accuracy and fixes sourcemaps when scope-hoisting + traverseAll(t, ast.program, node => { + if (node.loc) { + if (node.loc?.start) { + let mapping = map.findClosestMapping( + node.loc.start.line, + node.loc.start.column, + ); + + if (mapping?.original) { + // $FlowFixMe + node.loc.start.line = mapping.original.line; + // $FlowFixMe + node.loc.start.column = mapping.original.column; + + // $FlowFixMe + let length = node.loc.end.column - node.loc.start.column; + + // $FlowFixMe + node.loc.end.line = mapping.original.line; + // $FlowFixMe + node.loc.end.column = mapping.original.column + length; + + // $FlowFixMe + node.loc.filename = mapping.source; + } else { + // Maintain null mappings? + node.loc = null; + } + } + } + }); +} + +function traverseAll( + t: BabelTypes, + node: Node, + visitor: (node: Node) => void, +): void { + if (!node) { + return; + } + + visitor(node); + + for (let key of t.VISITOR_KEYS[node.type] || []) { + // $FlowFixMe + let subNode: Node | Array = node[key]; + if (Array.isArray(subNode)) { + for (let i = 0; i < subNode.length; i++) { + traverseAll(t, subNode[i], visitor); + } + } else { + traverseAll(t, subNode, visitor); + } + } +} diff --git a/node_modules/@parcel/transformer-babel/src/types.js b/node_modules/@parcel/transformer-babel/src/types.js new file mode 100644 index 0000000..36a03d1 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/types.js @@ -0,0 +1,6 @@ +// @flow + +export type BabelConfig = {| + plugins?: Array, + presets?: Array, +|}; diff --git a/node_modules/@parcel/transformer-babel/src/utils.js b/node_modules/@parcel/transformer-babel/src/utils.js new file mode 100644 index 0000000..affba15 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/utils.js @@ -0,0 +1,86 @@ +// @flow + +import type {Environment} from '@parcel/types'; +import type {Targets as BabelTargets} from '@babel/preset-env'; + +import invariant from 'assert'; +import semver from 'semver'; + +// Copied from @babel/helper-compilation-targets/lib/options.js +const TargetNames = { + node: 'node', + chrome: 'chrome', + opera: 'opera', + edge: 'edge', + firefox: 'firefox', + safari: 'safari', + ie: 'ie', + ios: 'ios', + android: 'android', + electron: 'electron', + samsung: 'samsung', + rhino: 'rhino', +}; + +// List of browsers to exclude when the esmodule target is specified. +// Based on https://caniuse.com/#feat=es6-module +const ESMODULE_BROWSERS = [ + 'not ie <= 11', + 'not edge < 16', + 'not firefox < 60', + 'not chrome < 61', + 'not safari < 11', + 'not opera < 48', + 'not ios_saf < 11', + 'not op_mini all', + 'not android < 76', + 'not blackberry > 0', + 'not op_mob > 0', + 'not and_chr < 76', + 'not and_ff < 68', + 'not ie_mob > 0', + 'not and_uc > 0', + 'not samsung < 8.2', + 'not and_qq > 0', + 'not baidu > 0', + 'not kaios > 0', +]; + +export function enginesToBabelTargets(env: Environment): BabelTargets { + // "Targets" is the name @babel/preset-env uses for what Parcel calls engines. + // This should not be confused with Parcel's own targets. + // Unlike Parcel's engines, @babel/preset-env expects to work with minimum + // versions, not semver ranges, of its targets. + let targets = {}; + for (let engineName of Object.keys(env.engines)) { + let engineValue = env.engines[engineName]; + + // if the engineValue is a string, it might be a semver range. Use the minimum + // possible version instead. + if (engineName === 'browsers') { + targets[engineName] = engineValue; + } else { + invariant(typeof engineValue === 'string'); + if (!TargetNames.hasOwnProperty(engineName)) continue; + let minVersion = semver.minVersion(engineValue)?.toString(); + targets[engineName] = minVersion ?? engineValue; + } + } + + if (env.outputFormat === 'esmodule' && env.isBrowser()) { + // If there is already a browsers target, add a blacklist to exclude + // instead of using babel's esmodules target. This allows specifying + // a newer set of browsers than the baseline esmodule support list. + // See https://github.com/babel/babel/issues/8809. + if (targets.browsers) { + let browsers = Array.isArray(targets.browsers) + ? targets.browsers + : [targets.browsers]; + targets.browsers = [...browsers, ...ESMODULE_BROWSERS]; + } else { + targets.esmodules = true; + } + } + + return targets; +} diff --git a/node_modules/@parcel/transformer-css/LICENSE b/node_modules/@parcel/transformer-css/LICENSE new file mode 100644 index 0000000..7fb9bc9 --- /dev/null +++ b/node_modules/@parcel/transformer-css/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION 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/@parcel/transformer-css/lib/CSSTransformer.js b/node_modules/@parcel/transformer-css/lib/CSSTransformer.js new file mode 100644 index 0000000..4b030d9 --- /dev/null +++ b/node_modules/@parcel/transformer-css/lib/CSSTransformer.js @@ -0,0 +1,373 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +function _path() { + const data = _interopRequireDefault(require("path")); + + _path = function () { + return data; + }; + + return data; +} + +function _sourceMap() { + const data = _interopRequireDefault(require("@parcel/source-map")); + + _sourceMap = function () { + return data; + }; + + return data; +} + +function _plugin() { + const data = require("@parcel/plugin"); + + _plugin = function () { + return data; + }; + + return data; +} + +function _lightningcss() { + const data = require("lightningcss"); + + _lightningcss = function () { + return data; + }; + + return data; +} + +function _utils() { + const data = require("@parcel/utils"); + + _utils = function () { + return data; + }; + + return data; +} + +function _browserslist() { + const data = _interopRequireDefault(require("browserslist")); + + _browserslist = function () { + return data; + }; + + return data; +} + +function _nullthrows() { + const data = _interopRequireDefault(require("nullthrows")); + + _nullthrows = function () { + return data; + }; + + return data; +} + +function _diagnostic() { + const data = _interopRequireWildcard(require("@parcel/diagnostic")); + + _diagnostic = function () { + return data; + }; + + return data; +} + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _default = new (_plugin().Transformer)({ + async loadConfig({ + config, + options + }) { + let conf = await config.getConfigFrom(options.projectRoot + '/index', [], { + packageKey: '@parcel/transformer-css' + }); + return conf === null || conf === void 0 ? void 0 : conf.contents; + }, + + async transform({ + asset, + config, + options, + logger + }) { + // Normalize the asset's environment so that properties that only affect JS don't cause CSS to be duplicated. + // For example, with ESModule and CommonJS targets, only a single shared CSS bundle should be produced. + let env = asset.env; + asset.setEnvironment({ + context: 'browser', + engines: { + browsers: asset.env.engines.browsers + }, + shouldOptimize: asset.env.shouldOptimize, + shouldScopeHoist: asset.env.shouldScopeHoist, + sourceMap: asset.env.sourceMap + }); + let [code, originalMap] = await Promise.all([asset.getBuffer(), asset.getMap()]); + let targets = getTargets(asset.env.engines.browsers); + let res; + + try { + if (asset.meta.type === 'attr') { + res = (0, _lightningcss().transformStyleAttribute)({ + code, + analyzeDependencies: true, + errorRecovery: (config === null || config === void 0 ? void 0 : config.errorRecovery) || false, + targets + }); + } else { + let cssModules = false; + + if (asset.meta.type !== 'tag' && asset.meta.cssModulesCompiled == null) { + let cssModulesConfig = config === null || config === void 0 ? void 0 : config.cssModules; + + if (asset.isSource && (typeof cssModulesConfig === 'boolean' || cssModulesConfig !== null && cssModulesConfig !== void 0 && cssModulesConfig.global) || /\.module\./.test(asset.filePath)) { + if (cssModulesConfig !== null && cssModulesConfig !== void 0 && cssModulesConfig.dashedIdents && !asset.isSource) { + cssModulesConfig.dashedIdents = false; + } + + cssModules = cssModulesConfig !== null && cssModulesConfig !== void 0 ? cssModulesConfig : true; + } + } + + res = (0, _lightningcss().transform)({ + filename: _path().default.relative(options.projectRoot, asset.filePath), + code, + cssModules, + analyzeDependencies: asset.meta.hasDependencies !== false, + sourceMap: !!asset.env.sourceMap, + drafts: config === null || config === void 0 ? void 0 : config.drafts, + pseudoClasses: config === null || config === void 0 ? void 0 : config.pseudoClasses, + errorRecovery: (config === null || config === void 0 ? void 0 : config.errorRecovery) || false, + targets + }); + } + } catch (err) { + var _err$data; + + err.filePath = asset.filePath; + let diagnostic = (0, _diagnostic().errorToDiagnostic)(err, { + origin: '@parcel/transformer-css' + }); + + if (((_err$data = err.data) === null || _err$data === void 0 ? void 0 : _err$data.type) === 'AmbiguousUrlInCustomProperty' && err.data.url) { + let p = '/' + (0, _utils().relativePath)(options.projectRoot, _path().default.resolve(_path().default.dirname(asset.filePath), err.data.url), false); + diagnostic[0].hints = [`Replace with: url(${p})`]; + diagnostic[0].documentationURL = 'https://parceljs.org/languages/css/#url()'; + } + + throw new (_diagnostic().default)({ + diagnostic + }); + } + + if (res.warnings) { + for (let warning of res.warnings) { + logger.warn({ + message: warning.message, + codeFrames: [{ + filePath: asset.filePath, + codeHighlights: [{ + start: { + line: warning.loc.line, + column: warning.loc.column + }, + end: { + line: warning.loc.line, + column: warning.loc.column + } + }] + }] + }); + } + } + + asset.setBuffer(res.code); + + if (res.map != null) { + let vlqMap = JSON.parse(res.map.toString()); + let map = new (_sourceMap().default)(options.projectRoot); + map.addVLQMap(vlqMap); + + if (originalMap) { + map.extends(originalMap); + } + + asset.setMap(map); + } + + if (res.dependencies) { + for (let dep of res.dependencies) { + let loc = dep.loc; + + if (originalMap) { + loc = (0, _utils().remapSourceLocation)(loc, originalMap); + } + + if (dep.type === 'import' && !res.exports) { + asset.addDependency({ + specifier: dep.url, + specifierType: 'url', + loc, + meta: { + // For the glob resolver to distinguish between `@import` and other URL dependencies. + isCSSImport: true, + media: dep.media + } + }); + } else if (dep.type === 'url') { + asset.addURLDependency(dep.url, { + loc, + meta: { + placeholder: dep.placeholder + } + }); + } + } + } + + let assets = [asset]; + + if (res.exports != null) { + let exports = res.exports; + asset.symbols.ensure(); + asset.symbols.set('default', 'default'); + let dependencies = new Map(); + let locals = new Map(); + let c = 0; + let depjs = ''; + let js = ''; + + for (let key in exports) { + locals.set(exports[key].name, key); + } + + let seen = new Set(); + + let add = key => { + if (seen.has(key)) { + return; + } + + seen.add(key); + let e = exports[key]; + let s = `module.exports[${JSON.stringify(key)}] = \`${e.name}`; + + for (let ref of e.composes) { + s += ' '; + + if (ref.type === 'local') { + add((0, _nullthrows().default)(locals.get(ref.name))); + s += '${' + `module.exports[${JSON.stringify((0, _nullthrows().default)(locals.get(ref.name)))}]` + '}'; + } else if (ref.type === 'global') { + s += ref.name; + } else if (ref.type === 'dependency') { + let d = dependencies.get(ref.specifier); + + if (d == null) { + d = `dep_${c++}`; + depjs += `import * as ${d} from ${JSON.stringify(ref.specifier)};\n`; + dependencies.set(ref.specifier, d); + asset.addDependency({ + specifier: ref.specifier, + specifierType: 'esm' + }); + } + + s += '${' + `${d}[${JSON.stringify(ref.name)}]` + '}'; + } + } + + s += '`;\n'; // If the export is referenced internally (e.g. used @keyframes), add a self-reference + // to the JS so the symbol is retained during tree-shaking. + + if (e.isReferenced) { + s += `module.exports[${JSON.stringify(key)}];\n`; + } + + js += s; + }; + + for (let key in exports) { + asset.symbols.set(key, exports[key].name); + add(key); + } + + if (res.dependencies) { + for (let dep of res.dependencies) { + if (dep.type === 'import') { + // TODO: Figure out how to treeshake this + let d = `dep_$${c++}`; + depjs += `import * as ${d} from ${JSON.stringify(dep.url)};\n`; + js += `for (let key in ${d}) { if (key in module.exports) module.exports[key] += ' ' + ${d}[key]; else module.exports[key] = ${d}[key]; }\n`; + asset.symbols.set('*', '*'); + } + } + } + + if (res.references != null) { + let references = res.references; + + for (let symbol in references) { + let reference = references[symbol]; + asset.addDependency({ + specifier: reference.specifier, + specifierType: 'esm', + symbols: new Map([[reference.name, { + local: symbol, + isWeak: false, + loc: null + }]]) + }); + asset.meta.hasReferences = true; + } + } + + assets.push({ + type: 'js', + content: depjs + js, + dependencies: [], + env + }); + } + + return assets; + } + +}); + +exports.default = _default; +let cache = new Map(); + +function getTargets(browsers) { + if (browsers == null) { + return undefined; + } + + let cached = cache.get(browsers); + + if (cached != null) { + return cached; + } + + let targets = (0, _lightningcss().browserslistToTargets)((0, _browserslist().default)(browsers)); + cache.set(browsers, targets); + return targets; +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-css/package.json b/node_modules/@parcel/transformer-css/package.json new file mode 100644 index 0000000..2333b84 --- /dev/null +++ b/node_modules/@parcel/transformer-css/package.json @@ -0,0 +1,32 @@ +{ + "name": "@parcel/transformer-css", + "version": "2.8.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/CSSTransformer.js", + "source": "src/CSSTransformer.js", + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.8.3" + }, + "dependencies": { + "@parcel/diagnostic": "2.8.3", + "@parcel/plugin": "2.8.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.8.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.16.1", + "nullthrows": "^1.1.1" + }, + "gitHead": "349a6caf40ec8abb6a49fcae0765f8f8deb2073d" +} diff --git a/node_modules/@parcel/transformer-css/src/CSSTransformer.js b/node_modules/@parcel/transformer-css/src/CSSTransformer.js new file mode 100644 index 0000000..fd01f96 --- /dev/null +++ b/node_modules/@parcel/transformer-css/src/CSSTransformer.js @@ -0,0 +1,306 @@ +// @flow strict-local + +import path from 'path'; +import SourceMap from '@parcel/source-map'; +import {Transformer} from '@parcel/plugin'; +import { + transform, + transformStyleAttribute, + browserslistToTargets, +} from 'lightningcss'; +import {remapSourceLocation, relativePath} from '@parcel/utils'; +import browserslist from 'browserslist'; +import nullthrows from 'nullthrows'; +import ThrowableDiagnostic, {errorToDiagnostic} from '@parcel/diagnostic'; + +export default (new Transformer({ + async loadConfig({config, options}) { + let conf = await config.getConfigFrom(options.projectRoot + '/index', [], { + packageKey: '@parcel/transformer-css', + }); + return conf?.contents; + }, + async transform({asset, config, options, logger}) { + // Normalize the asset's environment so that properties that only affect JS don't cause CSS to be duplicated. + // For example, with ESModule and CommonJS targets, only a single shared CSS bundle should be produced. + let env = asset.env; + asset.setEnvironment({ + context: 'browser', + engines: { + browsers: asset.env.engines.browsers, + }, + shouldOptimize: asset.env.shouldOptimize, + shouldScopeHoist: asset.env.shouldScopeHoist, + sourceMap: asset.env.sourceMap, + }); + + let [code, originalMap] = await Promise.all([ + asset.getBuffer(), + asset.getMap(), + ]); + + let targets = getTargets(asset.env.engines.browsers); + let res; + try { + if (asset.meta.type === 'attr') { + res = transformStyleAttribute({ + code, + analyzeDependencies: true, + errorRecovery: config?.errorRecovery || false, + targets, + }); + } else { + let cssModules = false; + if ( + asset.meta.type !== 'tag' && + asset.meta.cssModulesCompiled == null + ) { + let cssModulesConfig = config?.cssModules; + if ( + (asset.isSource && + (typeof cssModulesConfig === 'boolean' || + cssModulesConfig?.global)) || + /\.module\./.test(asset.filePath) + ) { + if (cssModulesConfig?.dashedIdents && !asset.isSource) { + cssModulesConfig.dashedIdents = false; + } + + cssModules = cssModulesConfig ?? true; + } + } + + res = transform({ + filename: path.relative(options.projectRoot, asset.filePath), + code, + cssModules, + analyzeDependencies: asset.meta.hasDependencies !== false, + sourceMap: !!asset.env.sourceMap, + drafts: config?.drafts, + pseudoClasses: config?.pseudoClasses, + errorRecovery: config?.errorRecovery || false, + targets, + }); + } + } catch (err) { + err.filePath = asset.filePath; + let diagnostic = errorToDiagnostic(err, { + origin: '@parcel/transformer-css', + }); + if (err.data?.type === 'AmbiguousUrlInCustomProperty' && err.data.url) { + let p = + '/' + + relativePath( + options.projectRoot, + path.resolve(path.dirname(asset.filePath), err.data.url), + false, + ); + diagnostic[0].hints = [`Replace with: url(${p})`]; + diagnostic[0].documentationURL = + 'https://parceljs.org/languages/css/#url()'; + } + + throw new ThrowableDiagnostic({ + diagnostic, + }); + } + + if (res.warnings) { + for (let warning of res.warnings) { + logger.warn({ + message: warning.message, + codeFrames: [ + { + filePath: asset.filePath, + codeHighlights: [ + { + start: { + line: warning.loc.line, + column: warning.loc.column, + }, + end: { + line: warning.loc.line, + column: warning.loc.column, + }, + }, + ], + }, + ], + }); + } + } + + asset.setBuffer(res.code); + + if (res.map != null) { + let vlqMap = JSON.parse(res.map.toString()); + let map = new SourceMap(options.projectRoot); + map.addVLQMap(vlqMap); + + if (originalMap) { + map.extends(originalMap); + } + + asset.setMap(map); + } + + if (res.dependencies) { + for (let dep of res.dependencies) { + let loc = dep.loc; + if (originalMap) { + loc = remapSourceLocation(loc, originalMap); + } + + if (dep.type === 'import' && !res.exports) { + asset.addDependency({ + specifier: dep.url, + specifierType: 'url', + loc, + meta: { + // For the glob resolver to distinguish between `@import` and other URL dependencies. + isCSSImport: true, + media: dep.media, + }, + }); + } else if (dep.type === 'url') { + asset.addURLDependency(dep.url, { + loc, + meta: { + placeholder: dep.placeholder, + }, + }); + } + } + } + + let assets = [asset]; + + if (res.exports != null) { + let exports = res.exports; + asset.symbols.ensure(); + asset.symbols.set('default', 'default'); + + let dependencies = new Map(); + let locals = new Map(); + let c = 0; + let depjs = ''; + let js = ''; + + let jsDeps = []; + + for (let key in exports) { + locals.set(exports[key].name, key); + } + + let seen = new Set(); + let add = key => { + if (seen.has(key)) { + return; + } + seen.add(key); + + let e = exports[key]; + let s = `module.exports[${JSON.stringify(key)}] = \`${e.name}`; + + for (let ref of e.composes) { + s += ' '; + if (ref.type === 'local') { + add(nullthrows(locals.get(ref.name))); + s += + '${' + + `module.exports[${JSON.stringify( + nullthrows(locals.get(ref.name)), + )}]` + + '}'; + } else if (ref.type === 'global') { + s += ref.name; + } else if (ref.type === 'dependency') { + let d = dependencies.get(ref.specifier); + if (d == null) { + d = `dep_${c++}`; + depjs += `import * as ${d} from ${JSON.stringify( + ref.specifier, + )};\n`; + dependencies.set(ref.specifier, d); + asset.addDependency({ + specifier: ref.specifier, + specifierType: 'esm', + }); + } + s += '${' + `${d}[${JSON.stringify(ref.name)}]` + '}'; + } + } + + s += '`;\n'; + + // If the export is referenced internally (e.g. used @keyframes), add a self-reference + // to the JS so the symbol is retained during tree-shaking. + if (e.isReferenced) { + s += `module.exports[${JSON.stringify(key)}];\n`; + } + + js += s; + }; + + for (let key in exports) { + asset.symbols.set(key, exports[key].name); + add(key); + } + + if (res.dependencies) { + for (let dep of res.dependencies) { + if (dep.type === 'import') { + // TODO: Figure out how to treeshake this + let d = `dep_$${c++}`; + depjs += `import * as ${d} from ${JSON.stringify(dep.url)};\n`; + js += `for (let key in ${d}) { if (key in module.exports) module.exports[key] += ' ' + ${d}[key]; else module.exports[key] = ${d}[key]; }\n`; + asset.symbols.set('*', '*'); + } + } + } + + if (res.references != null) { + let references = res.references; + for (let symbol in references) { + let reference = references[symbol]; + asset.addDependency({ + specifier: reference.specifier, + specifierType: 'esm', + symbols: new Map([ + [reference.name, {local: symbol, isWeak: false, loc: null}], + ]), + }); + + asset.meta.hasReferences = true; + } + } + + assets.push({ + type: 'js', + content: depjs + js, + dependencies: jsDeps, + env, + }); + } + + return assets; + }, +}): Transformer); + +let cache = new Map(); + +function getTargets(browsers) { + if (browsers == null) { + return undefined; + } + + let cached = cache.get(browsers); + if (cached != null) { + return cached; + } + + let targets = browserslistToTargets(browserslist(browsers)); + + cache.set(browsers, targets); + return targets; +} diff --git a/node_modules/@parcel/transformer-html/LICENSE b/node_modules/@parcel/transformer-html/LICENSE new file mode 100644 index 0000000..7fb9bc9 --- /dev/null +++ b/node_modules/@parcel/transformer-html/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION 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/@parcel/transformer-html/lib/HTMLTransformer.js b/node_modules/@parcel/transformer-html/lib/HTMLTransformer.js new file mode 100644 index 0000000..d52f728 --- /dev/null +++ b/node_modules/@parcel/transformer-html/lib/HTMLTransformer.js @@ -0,0 +1,208 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +function _plugin() { + const data = require("@parcel/plugin"); + + _plugin = function () { + return data; + }; + + return data; +} + +function _posthtmlParser() { + const data = require("posthtml-parser"); + + _posthtmlParser = function () { + return data; + }; + + return data; +} + +function _nullthrows() { + const data = _interopRequireDefault(require("nullthrows")); + + _nullthrows = function () { + return data; + }; + + return data; +} + +function _posthtml() { + const data = _interopRequireDefault(require("posthtml")); + + _posthtml = function () { + return data; + }; + + return data; +} + +function _posthtmlRender() { + const data = require("posthtml-render"); + + _posthtmlRender = function () { + return data; + }; + + return data; +} + +function _semver() { + const data = _interopRequireDefault(require("semver")); + + _semver = function () { + return data; + }; + + return data; +} + +var _dependencies = _interopRequireDefault(require("./dependencies")); + +var _inline = _interopRequireDefault(require("./inline")); + +function _diagnostic() { + const data = _interopRequireDefault(require("@parcel/diagnostic")); + + _diagnostic = function () { + return data; + }; + + return data; +} + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _default = new (_plugin().Transformer)({ + canReuseAST({ + ast + }) { + return ast.type === 'posthtml' && _semver().default.satisfies(ast.version, '^0.4.0'); + }, + + async parse({ + asset + }) { + return { + type: 'posthtml', + version: '0.4.1', + program: (0, _posthtmlParser().parser)(await asset.getCode(), { + lowerCaseTags: true, + lowerCaseAttributeNames: true, + sourceLocations: true, + xmlMode: asset.type === 'xhtml' + }) + }; + }, + + async transform({ + asset, + options + }) { + if (asset.type === 'htm') { + asset.type = 'html'; + } + + asset.bundleBehavior = 'isolated'; + let ast = (0, _nullthrows().default)(await asset.getAST()); + let hasModuleScripts; + + try { + hasModuleScripts = (0, _dependencies.default)(asset, ast); + } catch (errors) { + if (Array.isArray(errors)) { + throw new (_diagnostic().default)({ + diagnostic: errors.map(error => ({ + message: error.message, + origin: '@parcel/transformer-html', + codeFrames: [{ + filePath: error.filePath, + language: 'html', + codeHighlights: [error.loc] + }] + })) + }); + } + + throw errors; + } + + const { + assets: inlineAssets, + hasModuleScripts: hasInlineModuleScripts + } = (0, _inline.default)(asset, ast); + const result = [asset, ...inlineAssets]; // empty is added to make sure HMR is working even if user + // didn't add any. + + if (options.hmrOptions && !(hasModuleScripts || hasInlineModuleScripts)) { + const script = { + tag: 'script', + attrs: { + src: asset.addURLDependency('hmr.js', { + priority: 'parallel' + }) + }, + content: [] + }; + const found = findFirstMatch(ast, [{ + tag: 'body' + }, { + tag: 'html' + }]); + + if (found) { + found.content = found.content || []; + found.content.push(script); + } else { + // Insert at the very end. + ast.program.push(script); + } + + asset.setAST(ast); + result.push({ + type: 'js', + content: '', + uniqueKey: 'hmr.js' + }); + } + + return result; + }, + + generate({ + ast, + asset + }) { + return { + content: (0, _posthtmlRender().render)(ast.program, { + closingSingleTag: asset.type === 'xhtml' ? 'slash' : undefined + }) + }; + } + +}); + +exports.default = _default; + +function findFirstMatch(ast, expressions) { + let found; + + for (const expression of expressions) { + (0, _posthtml().default)().match.call(ast.program, expression, node => { + found = node; + return node; + }); + + if (found) { + return found; + } + } +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-html/lib/dependencies.js b/node_modules/@parcel/transformer-html/lib/dependencies.js new file mode 100644 index 0000000..deb4697 --- /dev/null +++ b/node_modules/@parcel/transformer-html/lib/dependencies.js @@ -0,0 +1,262 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = collectDependencies; + +function _posthtml() { + const data = _interopRequireDefault(require("posthtml")); + + _posthtml = function () { + return data; + }; + + return data; +} + +function _srcset() { + const data = require("srcset"); + + _srcset = function () { + return data; + }; + + return data; +} + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// A list of all attributes that may produce a dependency +// Based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes +const ATTRS = { + src: ['script', 'img', 'audio', 'video', 'source', 'track', 'iframe', 'embed', 'amp-img'], + // Using href with is added to make sure HMR is working even if user + // didn't add any. + if (options.hmrOptions && !(hasModuleScripts || hasInlineModuleScripts)) { + const script = { + tag: 'script', + attrs: { + src: asset.addURLDependency('hmr.js', { + priority: 'parallel', + }), + }, + content: [], + }; + + const found = findFirstMatch(ast, [{tag: 'body'}, {tag: 'html'}]); + + if (found) { + found.content = found.content || []; + found.content.push(script); + } else { + // Insert at the very end. + ast.program.push(script); + } + + asset.setAST(ast); + + result.push({ + type: 'js', + content: '', + uniqueKey: 'hmr.js', + }); + } + + return result; + }, + + generate({ast, asset}) { + return { + content: render(ast.program, { + closingSingleTag: asset.type === 'xhtml' ? 'slash' : undefined, + }), + }; + }, +}): Transformer); + +function findFirstMatch( + ast: AST, + expressions: PostHTMLExpression[], +): ?PostHTMLNode { + let found; + + for (const expression of expressions) { + PostHTML().match.call(ast.program, expression, node => { + found = node; + return node; + }); + + if (found) { + return found; + } + } +} diff --git a/node_modules/@parcel/transformer-html/src/dependencies.js b/node_modules/@parcel/transformer-html/src/dependencies.js new file mode 100644 index 0000000..649f88f --- /dev/null +++ b/node_modules/@parcel/transformer-html/src/dependencies.js @@ -0,0 +1,285 @@ +// @flow + +import type {AST, MutableAsset} from '@parcel/types'; +import type {PostHTMLNode} from 'posthtml'; +import PostHTML from 'posthtml'; +import {parse, stringify} from 'srcset'; +// A list of all attributes that may produce a dependency +// Based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes +const ATTRS = { + src: [ + 'script', + 'img', + 'audio', + 'video', + 'source', + 'track', + 'iframe', + 'embed', + 'amp-img', + ], + // Using href with "; +const handler = new DomHandler((error, dom) => { + if (error) { + // Handle error + } else { + // Parsing completed, do something + console.log(dom); + } +}); +const parser = new Parser(handler); +parser.write(rawHtml); +parser.end(); +``` + +Output: + +```javascript +[ + { + data: "Xyz ", + type: "text", + }, + { + type: "script", + name: "script", + attribs: { + language: "javascript", + }, + children: [ + { + data: "var foo = '';<", + type: "text", + }, + ], + }, + { + data: " + + + + + +``` + +## Top level API + +![API map](https://cdn.rawgit.com/csstree/csstree/aaf327e/docs/api-map.svg) + +## License + +MIT diff --git a/node_modules/css-tree/cjs/convertor/create.cjs b/node_modules/css-tree/cjs/convertor/create.cjs new file mode 100644 index 0000000..55c655b --- /dev/null +++ b/node_modules/css-tree/cjs/convertor/create.cjs @@ -0,0 +1,32 @@ +'use strict'; + +const List = require('../utils/List.cjs'); + +function createConvertor(walk) { + return { + fromPlainObject(ast) { + walk(ast, { + enter(node) { + if (node.children && node.children instanceof List.List === false) { + node.children = new List.List().fromArray(node.children); + } + } + }); + + return ast; + }, + toPlainObject(ast) { + walk(ast, { + leave(node) { + if (node.children && node.children instanceof List.List) { + node.children = node.children.toArray(); + } + } + }); + + return ast; + } + }; +} + +exports.createConvertor = createConvertor; diff --git a/node_modules/css-tree/cjs/convertor/index.cjs b/node_modules/css-tree/cjs/convertor/index.cjs new file mode 100644 index 0000000..6654278 --- /dev/null +++ b/node_modules/css-tree/cjs/convertor/index.cjs @@ -0,0 +1,8 @@ +'use strict'; + +const create = require('./create.cjs'); +const index$1 = require('../walker/index.cjs'); + +const index = create.createConvertor(index$1); + +module.exports = index; diff --git a/node_modules/css-tree/cjs/data-patch.cjs b/node_modules/css-tree/cjs/data-patch.cjs new file mode 100644 index 0000000..9103ea4 --- /dev/null +++ b/node_modules/css-tree/cjs/data-patch.cjs @@ -0,0 +1,7 @@ +'use strict'; + +const patch = require('../data/patch.json'); + +const patch$1 = patch; + +module.exports = patch$1; diff --git a/node_modules/css-tree/cjs/data.cjs b/node_modules/css-tree/cjs/data.cjs new file mode 100644 index 0000000..3ef8afd --- /dev/null +++ b/node_modules/css-tree/cjs/data.cjs @@ -0,0 +1,99 @@ +'use strict'; + +const dataPatch = require('./data-patch.cjs'); + +const mdnAtrules = require('mdn-data/css/at-rules.json'); +const mdnProperties = require('mdn-data/css/properties.json'); +const mdnSyntaxes = require('mdn-data/css/syntaxes.json'); + +const extendSyntax = /^\s*\|\s*/; + +function preprocessAtrules(dict) { + const result = Object.create(null); + + for (const atruleName in dict) { + const atrule = dict[atruleName]; + let descriptors = null; + + if (atrule.descriptors) { + descriptors = Object.create(null); + + for (const descriptor in atrule.descriptors) { + descriptors[descriptor] = atrule.descriptors[descriptor].syntax; + } + } + + result[atruleName.substr(1)] = { + prelude: atrule.syntax.trim().replace(/\{(.|\s)+\}/, '').match(/^@\S+\s+([^;\{]*)/)[1].trim() || null, + descriptors + }; + } + + return result; +} + +function patchDictionary(dict, patchDict) { + const result = {}; + + // copy all syntaxes for an original dict + for (const key in dict) { + result[key] = dict[key].syntax || dict[key]; + } + + // apply a patch + for (const key in patchDict) { + if (key in dict) { + if (patchDict[key].syntax) { + result[key] = extendSyntax.test(patchDict[key].syntax) + ? result[key] + ' ' + patchDict[key].syntax.trim() + : patchDict[key].syntax; + } else { + delete result[key]; + } + } else { + if (patchDict[key].syntax) { + result[key] = patchDict[key].syntax.replace(extendSyntax, ''); + } + } + } + + return result; +} + +function patchAtrules(dict, patchDict) { + const result = {}; + + // copy all syntaxes for an original dict + for (const key in dict) { + const atrulePatch = patchDict[key] || {}; + + result[key] = { + prelude: key in patchDict && 'prelude' in atrulePatch + ? atrulePatch.prelude + : dict[key].prelude || null, + descriptors: patchDictionary(dict[key].descriptors || {}, atrulePatch.descriptors || {}) + }; + } + + // apply a patch + for (const key in patchDict) { + if (!hasOwnProperty.call(dict, key)) { + const atrulePatch = patchDict[key] || {}; + + result[key] = { + prelude: atrulePatch.prelude || null, + descriptors: atrulePatch.descriptors && patchDictionary({}, atrulePatch.descriptors) + }; + } + } + + return result; +} + +const definitions = { + types: patchDictionary(mdnSyntaxes, dataPatch.types), + atrules: patchAtrules(preprocessAtrules(mdnAtrules), dataPatch.atrules), + properties: patchDictionary(mdnProperties, dataPatch.properties) +}; + +module.exports = definitions; diff --git a/node_modules/css-tree/cjs/definition-syntax/SyntaxError.cjs b/node_modules/css-tree/cjs/definition-syntax/SyntaxError.cjs new file mode 100644 index 0000000..d24e7ce --- /dev/null +++ b/node_modules/css-tree/cjs/definition-syntax/SyntaxError.cjs @@ -0,0 +1,16 @@ +'use strict'; + +const createCustomError = require('../utils/create-custom-error.cjs'); + +function SyntaxError(message, input, offset) { + return Object.assign(createCustomError.createCustomError('SyntaxError', message), { + input, + offset, + rawMessage: message, + message: message + '\n' + + ' ' + input + '\n' + + '--' + new Array((offset || input.length) + 1).join('-') + '^' + }); +} + +exports.SyntaxError = SyntaxError; diff --git a/node_modules/css-tree/cjs/definition-syntax/generate.cjs b/node_modules/css-tree/cjs/definition-syntax/generate.cjs new file mode 100644 index 0000000..785af06 --- /dev/null +++ b/node_modules/css-tree/cjs/definition-syntax/generate.cjs @@ -0,0 +1,135 @@ +'use strict'; + +function noop(value) { + return value; +} + +function generateMultiplier(multiplier) { + const { min, max, comma } = multiplier; + + if (min === 0 && max === 0) { + return comma ? '#?' : '*'; + } + + if (min === 0 && max === 1) { + return '?'; + } + + if (min === 1 && max === 0) { + return comma ? '#' : '+'; + } + + if (min === 1 && max === 1) { + return ''; + } + + return ( + (comma ? '#' : '') + + (min === max + ? '{' + min + '}' + : '{' + min + ',' + (max !== 0 ? max : '') + '}' + ) + ); +} + +function generateTypeOpts(node) { + switch (node.type) { + case 'Range': + return ( + ' [' + + (node.min === null ? '-∞' : node.min) + + ',' + + (node.max === null ? '∞' : node.max) + + ']' + ); + + default: + throw new Error('Unknown node type `' + node.type + '`'); + } +} + +function generateSequence(node, decorate, forceBraces, compact) { + const combinator = node.combinator === ' ' || compact ? node.combinator : ' ' + node.combinator + ' '; + const result = node.terms + .map(term => internalGenerate(term, decorate, forceBraces, compact)) + .join(combinator); + + if (node.explicit || forceBraces) { + return (compact || result[0] === ',' ? '[' : '[ ') + result + (compact ? ']' : ' ]'); + } + + return result; +} + +function internalGenerate(node, decorate, forceBraces, compact) { + let result; + + switch (node.type) { + case 'Group': + result = + generateSequence(node, decorate, forceBraces, compact) + + (node.disallowEmpty ? '!' : ''); + break; + + case 'Multiplier': + // return since node is a composition + return ( + internalGenerate(node.term, decorate, forceBraces, compact) + + decorate(generateMultiplier(node), node) + ); + + case 'Type': + result = '<' + node.name + (node.opts ? decorate(generateTypeOpts(node.opts), node.opts) : '') + '>'; + break; + + case 'Property': + result = '<\'' + node.name + '\'>'; + break; + + case 'Keyword': + result = node.name; + break; + + case 'AtKeyword': + result = '@' + node.name; + break; + + case 'Function': + result = node.name + '('; + break; + + case 'String': + case 'Token': + result = node.value; + break; + + case 'Comma': + result = ','; + break; + + default: + throw new Error('Unknown node type `' + node.type + '`'); + } + + return decorate(result, node); +} + +function generate(node, options) { + let decorate = noop; + let forceBraces = false; + let compact = false; + + if (typeof options === 'function') { + decorate = options; + } else if (options) { + forceBraces = Boolean(options.forceBraces); + compact = Boolean(options.compact); + if (typeof options.decorate === 'function') { + decorate = options.decorate; + } + } + + return internalGenerate(node, decorate, forceBraces, compact); +} + +exports.generate = generate; diff --git a/node_modules/css-tree/cjs/definition-syntax/index.cjs b/node_modules/css-tree/cjs/definition-syntax/index.cjs new file mode 100644 index 0000000..0afb505 --- /dev/null +++ b/node_modules/css-tree/cjs/definition-syntax/index.cjs @@ -0,0 +1,13 @@ +'use strict'; + +const SyntaxError = require('./SyntaxError.cjs'); +const generate = require('./generate.cjs'); +const parse = require('./parse.cjs'); +const walk = require('./walk.cjs'); + + + +exports.SyntaxError = SyntaxError.SyntaxError; +exports.generate = generate.generate; +exports.parse = parse.parse; +exports.walk = walk.walk; diff --git a/node_modules/css-tree/cjs/definition-syntax/parse.cjs b/node_modules/css-tree/cjs/definition-syntax/parse.cjs new file mode 100644 index 0000000..53eee01 --- /dev/null +++ b/node_modules/css-tree/cjs/definition-syntax/parse.cjs @@ -0,0 +1,588 @@ +'use strict'; + +const tokenizer = require('./tokenizer.cjs'); + +const TAB = 9; +const N = 10; +const F = 12; +const R = 13; +const SPACE = 32; +const EXCLAMATIONMARK = 33; // ! +const NUMBERSIGN = 35; // # +const AMPERSAND = 38; // & +const APOSTROPHE = 39; // ' +const LEFTPARENTHESIS = 40; // ( +const RIGHTPARENTHESIS = 41; // ) +const ASTERISK = 42; // * +const PLUSSIGN = 43; // + +const COMMA = 44; // , +const HYPERMINUS = 45; // - +const LESSTHANSIGN = 60; // < +const GREATERTHANSIGN = 62; // > +const QUESTIONMARK = 63; // ? +const COMMERCIALAT = 64; // @ +const LEFTSQUAREBRACKET = 91; // [ +const RIGHTSQUAREBRACKET = 93; // ] +const LEFTCURLYBRACKET = 123; // { +const VERTICALLINE = 124; // | +const RIGHTCURLYBRACKET = 125; // } +const INFINITY = 8734; // ∞ +const NAME_CHAR = new Uint8Array(128).map((_, idx) => + /[a-zA-Z0-9\-]/.test(String.fromCharCode(idx)) ? 1 : 0 +); +const COMBINATOR_PRECEDENCE = { + ' ': 1, + '&&': 2, + '||': 3, + '|': 4 +}; + +function scanSpaces(tokenizer) { + return tokenizer.substringToPos( + tokenizer.findWsEnd(tokenizer.pos) + ); +} + +function scanWord(tokenizer) { + let end = tokenizer.pos; + + for (; end < tokenizer.str.length; end++) { + const code = tokenizer.str.charCodeAt(end); + if (code >= 128 || NAME_CHAR[code] === 0) { + break; + } + } + + if (tokenizer.pos === end) { + tokenizer.error('Expect a keyword'); + } + + return tokenizer.substringToPos(end); +} + +function scanNumber(tokenizer) { + let end = tokenizer.pos; + + for (; end < tokenizer.str.length; end++) { + const code = tokenizer.str.charCodeAt(end); + if (code < 48 || code > 57) { + break; + } + } + + if (tokenizer.pos === end) { + tokenizer.error('Expect a number'); + } + + return tokenizer.substringToPos(end); +} + +function scanString(tokenizer) { + const end = tokenizer.str.indexOf('\'', tokenizer.pos + 1); + + if (end === -1) { + tokenizer.pos = tokenizer.str.length; + tokenizer.error('Expect an apostrophe'); + } + + return tokenizer.substringToPos(end + 1); +} + +function readMultiplierRange(tokenizer) { + let min = null; + let max = null; + + tokenizer.eat(LEFTCURLYBRACKET); + + min = scanNumber(tokenizer); + + if (tokenizer.charCode() === COMMA) { + tokenizer.pos++; + if (tokenizer.charCode() !== RIGHTCURLYBRACKET) { + max = scanNumber(tokenizer); + } + } else { + max = min; + } + + tokenizer.eat(RIGHTCURLYBRACKET); + + return { + min: Number(min), + max: max ? Number(max) : 0 + }; +} + +function readMultiplier(tokenizer) { + let range = null; + let comma = false; + + switch (tokenizer.charCode()) { + case ASTERISK: + tokenizer.pos++; + + range = { + min: 0, + max: 0 + }; + + break; + + case PLUSSIGN: + tokenizer.pos++; + + range = { + min: 1, + max: 0 + }; + + break; + + case QUESTIONMARK: + tokenizer.pos++; + + range = { + min: 0, + max: 1 + }; + + break; + + case NUMBERSIGN: + tokenizer.pos++; + + comma = true; + + if (tokenizer.charCode() === LEFTCURLYBRACKET) { + range = readMultiplierRange(tokenizer); + } else if (tokenizer.charCode() === QUESTIONMARK) { + // https://www.w3.org/TR/css-values-4/#component-multipliers + // > the # and ? multipliers may be stacked as #? + // In this case just treat "#?" as a single multiplier + // { min: 0, max: 0, comma: true } + tokenizer.pos++; + range = { + min: 0, + max: 0 + }; + } else { + range = { + min: 1, + max: 0 + }; + } + + break; + + case LEFTCURLYBRACKET: + range = readMultiplierRange(tokenizer); + break; + + default: + return null; + } + + return { + type: 'Multiplier', + comma, + min: range.min, + max: range.max, + term: null + }; +} + +function maybeMultiplied(tokenizer, node) { + const multiplier = readMultiplier(tokenizer); + + if (multiplier !== null) { + multiplier.term = node; + + // https://www.w3.org/TR/css-values-4/#component-multipliers + // > The + and # multipliers may be stacked as +#; + // Represent "+#" as nested multipliers: + // { ..., + // term: { + // ..., + // term: node + // } + // } + if (tokenizer.charCode() === NUMBERSIGN && + tokenizer.charCodeAt(tokenizer.pos - 1) === PLUSSIGN) { + return maybeMultiplied(tokenizer, multiplier); + } + + return multiplier; + } + + return node; +} + +function maybeToken(tokenizer) { + const ch = tokenizer.peek(); + + if (ch === '') { + return null; + } + + return { + type: 'Token', + value: ch + }; +} + +function readProperty(tokenizer) { + let name; + + tokenizer.eat(LESSTHANSIGN); + tokenizer.eat(APOSTROPHE); + + name = scanWord(tokenizer); + + tokenizer.eat(APOSTROPHE); + tokenizer.eat(GREATERTHANSIGN); + + return maybeMultiplied(tokenizer, { + type: 'Property', + name + }); +} + +// https://drafts.csswg.org/css-values-3/#numeric-ranges +// 4.1. Range Restrictions and Range Definition Notation +// +// Range restrictions can be annotated in the numeric type notation using CSS bracketed +// range notation—[min,max]—within the angle brackets, after the identifying keyword, +// indicating a closed range between (and including) min and max. +// For example, indicates an integer between 0 and 10, inclusive. +function readTypeRange(tokenizer) { + // use null for Infinity to make AST format JSON serializable/deserializable + let min = null; // -Infinity + let max = null; // Infinity + let sign = 1; + + tokenizer.eat(LEFTSQUAREBRACKET); + + if (tokenizer.charCode() === HYPERMINUS) { + tokenizer.peek(); + sign = -1; + } + + if (sign == -1 && tokenizer.charCode() === INFINITY) { + tokenizer.peek(); + } else { + min = sign * Number(scanNumber(tokenizer)); + + if (NAME_CHAR[tokenizer.charCode()] !== 0) { + min += scanWord(tokenizer); + } + } + + scanSpaces(tokenizer); + tokenizer.eat(COMMA); + scanSpaces(tokenizer); + + if (tokenizer.charCode() === INFINITY) { + tokenizer.peek(); + } else { + sign = 1; + + if (tokenizer.charCode() === HYPERMINUS) { + tokenizer.peek(); + sign = -1; + } + + max = sign * Number(scanNumber(tokenizer)); + + if (NAME_CHAR[tokenizer.charCode()] !== 0) { + max += scanWord(tokenizer); + } + } + + tokenizer.eat(RIGHTSQUAREBRACKET); + + return { + type: 'Range', + min, + max + }; +} + +function readType(tokenizer) { + let name; + let opts = null; + + tokenizer.eat(LESSTHANSIGN); + name = scanWord(tokenizer); + + if (tokenizer.charCode() === LEFTPARENTHESIS && + tokenizer.nextCharCode() === RIGHTPARENTHESIS) { + tokenizer.pos += 2; + name += '()'; + } + + if (tokenizer.charCodeAt(tokenizer.findWsEnd(tokenizer.pos)) === LEFTSQUAREBRACKET) { + scanSpaces(tokenizer); + opts = readTypeRange(tokenizer); + } + + tokenizer.eat(GREATERTHANSIGN); + + return maybeMultiplied(tokenizer, { + type: 'Type', + name, + opts + }); +} + +function readKeywordOrFunction(tokenizer) { + const name = scanWord(tokenizer); + + if (tokenizer.charCode() === LEFTPARENTHESIS) { + tokenizer.pos++; + + return { + type: 'Function', + name + }; + } + + return maybeMultiplied(tokenizer, { + type: 'Keyword', + name + }); +} + +function regroupTerms(terms, combinators) { + function createGroup(terms, combinator) { + return { + type: 'Group', + terms, + combinator, + disallowEmpty: false, + explicit: false + }; + } + + let combinator; + + combinators = Object.keys(combinators) + .sort((a, b) => COMBINATOR_PRECEDENCE[a] - COMBINATOR_PRECEDENCE[b]); + + while (combinators.length > 0) { + combinator = combinators.shift(); + + let i = 0; + let subgroupStart = 0; + + for (; i < terms.length; i++) { + const term = terms[i]; + + if (term.type === 'Combinator') { + if (term.value === combinator) { + if (subgroupStart === -1) { + subgroupStart = i - 1; + } + terms.splice(i, 1); + i--; + } else { + if (subgroupStart !== -1 && i - subgroupStart > 1) { + terms.splice( + subgroupStart, + i - subgroupStart, + createGroup(terms.slice(subgroupStart, i), combinator) + ); + i = subgroupStart + 1; + } + subgroupStart = -1; + } + } + } + + if (subgroupStart !== -1 && combinators.length) { + terms.splice( + subgroupStart, + i - subgroupStart, + createGroup(terms.slice(subgroupStart, i), combinator) + ); + } + } + + return combinator; +} + +function readImplicitGroup(tokenizer) { + const terms = []; + const combinators = {}; + let token; + let prevToken = null; + let prevTokenPos = tokenizer.pos; + + while (token = peek(tokenizer)) { + if (token.type !== 'Spaces') { + if (token.type === 'Combinator') { + // check for combinator in group beginning and double combinator sequence + if (prevToken === null || prevToken.type === 'Combinator') { + tokenizer.pos = prevTokenPos; + tokenizer.error('Unexpected combinator'); + } + + combinators[token.value] = true; + } else if (prevToken !== null && prevToken.type !== 'Combinator') { + combinators[' '] = true; // a b + terms.push({ + type: 'Combinator', + value: ' ' + }); + } + + terms.push(token); + prevToken = token; + prevTokenPos = tokenizer.pos; + } + } + + // check for combinator in group ending + if (prevToken !== null && prevToken.type === 'Combinator') { + tokenizer.pos -= prevTokenPos; + tokenizer.error('Unexpected combinator'); + } + + return { + type: 'Group', + terms, + combinator: regroupTerms(terms, combinators) || ' ', + disallowEmpty: false, + explicit: false + }; +} + +function readGroup(tokenizer) { + let result; + + tokenizer.eat(LEFTSQUAREBRACKET); + result = readImplicitGroup(tokenizer); + tokenizer.eat(RIGHTSQUAREBRACKET); + + result.explicit = true; + + if (tokenizer.charCode() === EXCLAMATIONMARK) { + tokenizer.pos++; + result.disallowEmpty = true; + } + + return result; +} + +function peek(tokenizer) { + let code = tokenizer.charCode(); + + if (code < 128 && NAME_CHAR[code] === 1) { + return readKeywordOrFunction(tokenizer); + } + + switch (code) { + case RIGHTSQUAREBRACKET: + // don't eat, stop scan a group + break; + + case LEFTSQUAREBRACKET: + return maybeMultiplied(tokenizer, readGroup(tokenizer)); + + case LESSTHANSIGN: + return tokenizer.nextCharCode() === APOSTROPHE + ? readProperty(tokenizer) + : readType(tokenizer); + + case VERTICALLINE: + return { + type: 'Combinator', + value: tokenizer.substringToPos( + tokenizer.pos + (tokenizer.nextCharCode() === VERTICALLINE ? 2 : 1) + ) + }; + + case AMPERSAND: + tokenizer.pos++; + tokenizer.eat(AMPERSAND); + + return { + type: 'Combinator', + value: '&&' + }; + + case COMMA: + tokenizer.pos++; + return { + type: 'Comma' + }; + + case APOSTROPHE: + return maybeMultiplied(tokenizer, { + type: 'String', + value: scanString(tokenizer) + }); + + case SPACE: + case TAB: + case N: + case R: + case F: + return { + type: 'Spaces', + value: scanSpaces(tokenizer) + }; + + case COMMERCIALAT: + code = tokenizer.nextCharCode(); + + if (code < 128 && NAME_CHAR[code] === 1) { + tokenizer.pos++; + return { + type: 'AtKeyword', + name: scanWord(tokenizer) + }; + } + + return maybeToken(tokenizer); + + case ASTERISK: + case PLUSSIGN: + case QUESTIONMARK: + case NUMBERSIGN: + case EXCLAMATIONMARK: + // prohibited tokens (used as a multiplier start) + break; + + case LEFTCURLYBRACKET: + // LEFTCURLYBRACKET is allowed since mdn/data uses it w/o quoting + // check next char isn't a number, because it's likely a disjoined multiplier + code = tokenizer.nextCharCode(); + + if (code < 48 || code > 57) { + return maybeToken(tokenizer); + } + + break; + + default: + return maybeToken(tokenizer); + } +} + +function parse(source) { + const tokenizer$1 = new tokenizer.Tokenizer(source); + const result = readImplicitGroup(tokenizer$1); + + if (tokenizer$1.pos !== source.length) { + tokenizer$1.error('Unexpected input'); + } + + // reduce redundant groups with single group term + if (result.terms.length === 1 && result.terms[0].type === 'Group') { + return result.terms[0]; + } + + return result; +} + +exports.parse = parse; diff --git a/node_modules/css-tree/cjs/definition-syntax/tokenizer.cjs b/node_modules/css-tree/cjs/definition-syntax/tokenizer.cjs new file mode 100644 index 0000000..6ab5ece --- /dev/null +++ b/node_modules/css-tree/cjs/definition-syntax/tokenizer.cjs @@ -0,0 +1,56 @@ +'use strict'; + +const SyntaxError = require('./SyntaxError.cjs'); + +const TAB = 9; +const N = 10; +const F = 12; +const R = 13; +const SPACE = 32; + +class Tokenizer { + constructor(str) { + this.str = str; + this.pos = 0; + } + charCodeAt(pos) { + return pos < this.str.length ? this.str.charCodeAt(pos) : 0; + } + charCode() { + return this.charCodeAt(this.pos); + } + nextCharCode() { + return this.charCodeAt(this.pos + 1); + } + nextNonWsCode(pos) { + return this.charCodeAt(this.findWsEnd(pos)); + } + findWsEnd(pos) { + for (; pos < this.str.length; pos++) { + const code = this.str.charCodeAt(pos); + if (code !== R && code !== N && code !== F && code !== SPACE && code !== TAB) { + break; + } + } + + return pos; + } + substringToPos(end) { + return this.str.substring(this.pos, this.pos = end); + } + eat(code) { + if (this.charCode() !== code) { + this.error('Expect `' + String.fromCharCode(code) + '`'); + } + + this.pos++; + } + peek() { + return this.pos < this.str.length ? this.str.charAt(this.pos++) : ''; + } + error(message) { + throw new SyntaxError.SyntaxError(message, this.str, this.pos); + } +} + +exports.Tokenizer = Tokenizer; diff --git a/node_modules/css-tree/cjs/definition-syntax/walk.cjs b/node_modules/css-tree/cjs/definition-syntax/walk.cjs new file mode 100644 index 0000000..728a446 --- /dev/null +++ b/node_modules/css-tree/cjs/definition-syntax/walk.cjs @@ -0,0 +1,56 @@ +'use strict'; + +const noop = function() {}; + +function ensureFunction(value) { + return typeof value === 'function' ? value : noop; +} + +function walk(node, options, context) { + function walk(node) { + enter.call(context, node); + + switch (node.type) { + case 'Group': + node.terms.forEach(walk); + break; + + case 'Multiplier': + walk(node.term); + break; + + case 'Type': + case 'Property': + case 'Keyword': + case 'AtKeyword': + case 'Function': + case 'String': + case 'Token': + case 'Comma': + break; + + default: + throw new Error('Unknown type: ' + node.type); + } + + leave.call(context, node); + } + + let enter = noop; + let leave = noop; + + if (typeof options === 'function') { + enter = options; + } else if (options) { + enter = ensureFunction(options.enter); + leave = ensureFunction(options.leave); + } + + if (enter === noop && leave === noop) { + throw new Error('Neither `enter` nor `leave` walker handler is set or both aren\'t a function'); + } + + walk(node); +} + +exports.walk = walk; diff --git a/node_modules/css-tree/cjs/generator/create.cjs b/node_modules/css-tree/cjs/generator/create.cjs new file mode 100644 index 0000000..ab80f3a --- /dev/null +++ b/node_modules/css-tree/cjs/generator/create.cjs @@ -0,0 +1,103 @@ +'use strict'; + +const index = require('../tokenizer/index.cjs'); +const sourceMap = require('./sourceMap.cjs'); +const tokenBefore = require('./token-before.cjs'); +const types = require('../tokenizer/types.cjs'); + +const REVERSESOLIDUS = 0x005c; // U+005C REVERSE SOLIDUS (\) + +function processChildren(node, delimeter) { + if (typeof delimeter === 'function') { + let prev = null; + + node.children.forEach(node => { + if (prev !== null) { + delimeter.call(this, prev); + } + + this.node(node); + prev = node; + }); + + return; + } + + node.children.forEach(this.node, this); +} + +function processChunk(chunk) { + index.tokenize(chunk, (type, start, end) => { + this.token(type, chunk.slice(start, end)); + }); +} + +function createGenerator(config) { + const types$1 = new Map(); + + for (let name in config.node) { + const item = config.node[name]; + const fn = item.generate || item; + + if (typeof fn === 'function') { + types$1.set(name, item.generate || item); + } + } + + return function(node, options) { + let buffer = ''; + let prevCode = 0; + let handlers = { + node(node) { + if (types$1.has(node.type)) { + types$1.get(node.type).call(publicApi, node); + } else { + throw new Error('Unknown node type: ' + node.type); + } + }, + tokenBefore: tokenBefore.safe, + token(type, value) { + prevCode = this.tokenBefore(prevCode, type, value); + + this.emit(value, type, false); + + if (type === types.Delim && value.charCodeAt(0) === REVERSESOLIDUS) { + this.emit('\n', types.WhiteSpace, true); + } + }, + emit(value) { + buffer += value; + }, + result() { + return buffer; + } + }; + + if (options) { + if (typeof options.decorator === 'function') { + handlers = options.decorator(handlers); + } + + if (options.sourceMap) { + handlers = sourceMap.generateSourceMap(handlers); + } + + if (options.mode in tokenBefore) { + handlers.tokenBefore = tokenBefore[options.mode]; + } + } + + const publicApi = { + node: (node) => handlers.node(node), + children: processChildren, + token: (type, value) => handlers.token(type, value), + tokenize: processChunk + }; + + handlers.node(node); + + return handlers.result(); + }; +} + +exports.createGenerator = createGenerator; diff --git a/node_modules/css-tree/cjs/generator/index.cjs b/node_modules/css-tree/cjs/generator/index.cjs new file mode 100644 index 0000000..5c87cd3 --- /dev/null +++ b/node_modules/css-tree/cjs/generator/index.cjs @@ -0,0 +1,8 @@ +'use strict'; + +const create = require('./create.cjs'); +const generator = require('../syntax/config/generator.cjs'); + +const index = create.createGenerator(generator); + +module.exports = index; diff --git a/node_modules/css-tree/cjs/generator/sourceMap.cjs b/node_modules/css-tree/cjs/generator/sourceMap.cjs new file mode 100644 index 0000000..efbc5b9 --- /dev/null +++ b/node_modules/css-tree/cjs/generator/sourceMap.cjs @@ -0,0 +1,96 @@ +'use strict'; + +const sourceMapGenerator_js = require('source-map-js/lib/source-map-generator.js'); + +const trackNodes = new Set(['Atrule', 'Selector', 'Declaration']); + +function generateSourceMap(handlers) { + const map = new sourceMapGenerator_js.SourceMapGenerator(); + const generated = { + line: 1, + column: 0 + }; + const original = { + line: 0, // should be zero to add first mapping + column: 0 + }; + const activatedGenerated = { + line: 1, + column: 0 + }; + const activatedMapping = { + generated: activatedGenerated + }; + let line = 1; + let column = 0; + let sourceMappingActive = false; + + const origHandlersNode = handlers.node; + handlers.node = function(node) { + if (node.loc && node.loc.start && trackNodes.has(node.type)) { + const nodeLine = node.loc.start.line; + const nodeColumn = node.loc.start.column - 1; + + if (original.line !== nodeLine || + original.column !== nodeColumn) { + original.line = nodeLine; + original.column = nodeColumn; + + generated.line = line; + generated.column = column; + + if (sourceMappingActive) { + sourceMappingActive = false; + if (generated.line !== activatedGenerated.line || + generated.column !== activatedGenerated.column) { + map.addMapping(activatedMapping); + } + } + + sourceMappingActive = true; + map.addMapping({ + source: node.loc.source, + original, + generated + }); + } + } + + origHandlersNode.call(this, node); + + if (sourceMappingActive && trackNodes.has(node.type)) { + activatedGenerated.line = line; + activatedGenerated.column = column; + } + }; + + const origHandlersEmit = handlers.emit; + handlers.emit = function(value, type, auto) { + for (let i = 0; i < value.length; i++) { + if (value.charCodeAt(i) === 10) { // \n + line++; + column = 0; + } else { + column++; + } + } + + origHandlersEmit(value, type, auto); + }; + + const origHandlersResult = handlers.result; + handlers.result = function() { + if (sourceMappingActive) { + map.addMapping(activatedMapping); + } + + return { + css: origHandlersResult(), + map + }; + }; + + return handlers; +} + +exports.generateSourceMap = generateSourceMap; diff --git a/node_modules/css-tree/cjs/generator/token-before.cjs b/node_modules/css-tree/cjs/generator/token-before.cjs new file mode 100644 index 0000000..87bf4a3 --- /dev/null +++ b/node_modules/css-tree/cjs/generator/token-before.cjs @@ -0,0 +1,170 @@ +'use strict'; + +const types = require('../tokenizer/types.cjs'); + +const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+) +const HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-) + +const code = (type, value) => { + if (type === types.Delim) { + type = value; + } + + if (typeof type === 'string') { + const charCode = type.charCodeAt(0); + return charCode > 0x7F ? 0x8000 : charCode << 8; + } + + return type; +}; + +// https://www.w3.org/TR/css-syntax-3/#serialization +// The only requirement for serialization is that it must "round-trip" with parsing, +// that is, parsing the stylesheet must produce the same data structures as parsing, +// serializing, and parsing again, except for consecutive s, +// which may be collapsed into a single token. + +const specPairs = [ + [types.Ident, types.Ident], + [types.Ident, types.Function], + [types.Ident, types.Url], + [types.Ident, types.BadUrl], + [types.Ident, '-'], + [types.Ident, types.Number], + [types.Ident, types.Percentage], + [types.Ident, types.Dimension], + [types.Ident, types.CDC], + [types.Ident, types.LeftParenthesis], + + [types.AtKeyword, types.Ident], + [types.AtKeyword, types.Function], + [types.AtKeyword, types.Url], + [types.AtKeyword, types.BadUrl], + [types.AtKeyword, '-'], + [types.AtKeyword, types.Number], + [types.AtKeyword, types.Percentage], + [types.AtKeyword, types.Dimension], + [types.AtKeyword, types.CDC], + + [types.Hash, types.Ident], + [types.Hash, types.Function], + [types.Hash, types.Url], + [types.Hash, types.BadUrl], + [types.Hash, '-'], + [types.Hash, types.Number], + [types.Hash, types.Percentage], + [types.Hash, types.Dimension], + [types.Hash, types.CDC], + + [types.Dimension, types.Ident], + [types.Dimension, types.Function], + [types.Dimension, types.Url], + [types.Dimension, types.BadUrl], + [types.Dimension, '-'], + [types.Dimension, types.Number], + [types.Dimension, types.Percentage], + [types.Dimension, types.Dimension], + [types.Dimension, types.CDC], + + ['#', types.Ident], + ['#', types.Function], + ['#', types.Url], + ['#', types.BadUrl], + ['#', '-'], + ['#', types.Number], + ['#', types.Percentage], + ['#', types.Dimension], + ['#', types.CDC], // https://github.com/w3c/csswg-drafts/pull/6874 + + ['-', types.Ident], + ['-', types.Function], + ['-', types.Url], + ['-', types.BadUrl], + ['-', '-'], + ['-', types.Number], + ['-', types.Percentage], + ['-', types.Dimension], + ['-', types.CDC], // https://github.com/w3c/csswg-drafts/pull/6874 + + [types.Number, types.Ident], + [types.Number, types.Function], + [types.Number, types.Url], + [types.Number, types.BadUrl], + [types.Number, types.Number], + [types.Number, types.Percentage], + [types.Number, types.Dimension], + [types.Number, '%'], + [types.Number, types.CDC], // https://github.com/w3c/csswg-drafts/pull/6874 + + ['@', types.Ident], + ['@', types.Function], + ['@', types.Url], + ['@', types.BadUrl], + ['@', '-'], + ['@', types.CDC], // https://github.com/w3c/csswg-drafts/pull/6874 + + ['.', types.Number], + ['.', types.Percentage], + ['.', types.Dimension], + + ['+', types.Number], + ['+', types.Percentage], + ['+', types.Dimension], + + ['/', '*'] +]; +// validate with scripts/generate-safe +const safePairs = specPairs.concat([ + [types.Ident, types.Hash], + + [types.Dimension, types.Hash], + + [types.Hash, types.Hash], + + [types.AtKeyword, types.LeftParenthesis], + [types.AtKeyword, types.String], + [types.AtKeyword, types.Colon], + + [types.Percentage, types.Percentage], + [types.Percentage, types.Dimension], + [types.Percentage, types.Function], + [types.Percentage, '-'], + + [types.RightParenthesis, types.Ident], + [types.RightParenthesis, types.Function], + [types.RightParenthesis, types.Percentage], + [types.RightParenthesis, types.Dimension], + [types.RightParenthesis, types.Hash], + [types.RightParenthesis, '-'] +]); + +function createMap(pairs) { + const isWhiteSpaceRequired = new Set( + pairs.map(([prev, next]) => (code(prev) << 16 | code(next))) + ); + + return function(prevCode, type, value) { + const nextCode = code(type, value); + const nextCharCode = value.charCodeAt(0); + const emitWs = + (nextCharCode === HYPHENMINUS && + type !== types.Ident && + type !== types.Function && + type !== types.CDC) || + (nextCharCode === PLUSSIGN) + ? isWhiteSpaceRequired.has(prevCode << 16 | nextCharCode << 8) + : isWhiteSpaceRequired.has(prevCode << 16 | nextCode); + + if (emitWs) { + this.emit(' ', types.WhiteSpace, true); + } + + return nextCode; + }; +} + +const spec = createMap(specPairs); +const safe = createMap(safePairs); + +exports.safe = safe; +exports.spec = spec; diff --git a/node_modules/css-tree/cjs/index.cjs b/node_modules/css-tree/cjs/index.cjs new file mode 100644 index 0000000..b781d15 --- /dev/null +++ b/node_modules/css-tree/cjs/index.cjs @@ -0,0 +1,63 @@ +'use strict'; + +const index$1 = require('./syntax/index.cjs'); +const version = require('./version.cjs'); +const create = require('./syntax/create.cjs'); +const List = require('./utils/List.cjs'); +const Lexer = require('./lexer/Lexer.cjs'); +const index = require('./definition-syntax/index.cjs'); +const clone = require('./utils/clone.cjs'); +const names$1 = require('./utils/names.cjs'); +const ident = require('./utils/ident.cjs'); +const string = require('./utils/string.cjs'); +const url = require('./utils/url.cjs'); +const types = require('./tokenizer/types.cjs'); +const names = require('./tokenizer/names.cjs'); +const TokenStream = require('./tokenizer/TokenStream.cjs'); + +const { + tokenize, + parse, + generate, + lexer, + createLexer, + + walk, + find, + findLast, + findAll, + + toPlainObject, + fromPlainObject, + + fork +} = index$1; + +exports.version = version.version; +exports.createSyntax = create; +exports.List = List.List; +exports.Lexer = Lexer.Lexer; +exports.definitionSyntax = index; +exports.clone = clone.clone; +exports.isCustomProperty = names$1.isCustomProperty; +exports.keyword = names$1.keyword; +exports.property = names$1.property; +exports.vendorPrefix = names$1.vendorPrefix; +exports.ident = ident; +exports.string = string; +exports.url = url; +exports.tokenTypes = types; +exports.tokenNames = names; +exports.TokenStream = TokenStream.TokenStream; +exports.createLexer = createLexer; +exports.find = find; +exports.findAll = findAll; +exports.findLast = findLast; +exports.fork = fork; +exports.fromPlainObject = fromPlainObject; +exports.generate = generate; +exports.lexer = lexer; +exports.parse = parse; +exports.toPlainObject = toPlainObject; +exports.tokenize = tokenize; +exports.walk = walk; diff --git a/node_modules/css-tree/cjs/lexer/Lexer.cjs b/node_modules/css-tree/cjs/lexer/Lexer.cjs new file mode 100644 index 0000000..46380fa --- /dev/null +++ b/node_modules/css-tree/cjs/lexer/Lexer.cjs @@ -0,0 +1,470 @@ +'use strict'; + +const error = require('./error.cjs'); +const names = require('../utils/names.cjs'); +const genericConst = require('./generic-const.cjs'); +const generic = require('./generic.cjs'); +const units = require('./units.cjs'); +const prepareTokens = require('./prepare-tokens.cjs'); +const matchGraph = require('./match-graph.cjs'); +const match = require('./match.cjs'); +const trace = require('./trace.cjs'); +const search = require('./search.cjs'); +const structure = require('./structure.cjs'); +const parse = require('../definition-syntax/parse.cjs'); +const generate = require('../definition-syntax/generate.cjs'); +const walk = require('../definition-syntax/walk.cjs'); + +const cssWideKeywordsSyntax = matchGraph.buildMatchGraph(genericConst.cssWideKeywords.join(' | ')); + +function dumpMapSyntax(map, compact, syntaxAsAst) { + const result = {}; + + for (const name in map) { + if (map[name].syntax) { + result[name] = syntaxAsAst + ? map[name].syntax + : generate.generate(map[name].syntax, { compact }); + } + } + + return result; +} + +function dumpAtruleMapSyntax(map, compact, syntaxAsAst) { + const result = {}; + + for (const [name, atrule] of Object.entries(map)) { + result[name] = { + prelude: atrule.prelude && ( + syntaxAsAst + ? atrule.prelude.syntax + : generate.generate(atrule.prelude.syntax, { compact }) + ), + descriptors: atrule.descriptors && dumpMapSyntax(atrule.descriptors, compact, syntaxAsAst) + }; + } + + return result; +} + +function valueHasVar(tokens) { + for (let i = 0; i < tokens.length; i++) { + if (tokens[i].value.toLowerCase() === 'var(') { + return true; + } + } + + return false; +} + +function buildMatchResult(matched, error, iterations) { + return { + matched, + iterations, + error, + ...trace + }; +} + +function matchSyntax(lexer, syntax, value, useCssWideKeywords) { + const tokens = prepareTokens(value, lexer.syntax); + let result; + + if (valueHasVar(tokens)) { + return buildMatchResult(null, new Error('Matching for a tree with var() is not supported')); + } + + if (useCssWideKeywords) { + result = match.matchAsTree(tokens, lexer.cssWideKeywordsSyntax, lexer); + } + + if (!useCssWideKeywords || !result.match) { + result = match.matchAsTree(tokens, syntax.match, lexer); + if (!result.match) { + return buildMatchResult( + null, + new error.SyntaxMatchError(result.reason, syntax.syntax, value, result), + result.iterations + ); + } + } + + return buildMatchResult(result.match, null, result.iterations); +} + +class Lexer { + constructor(config, syntax, structure$1) { + this.cssWideKeywordsSyntax = cssWideKeywordsSyntax; + this.syntax = syntax; + this.generic = false; + this.units = { ...units }; + this.atrules = Object.create(null); + this.properties = Object.create(null); + this.types = Object.create(null); + this.structure = structure$1 || structure.getStructureFromConfig(config); + + if (config) { + if (config.units) { + for (const group of Object.keys(units)) { + if (Array.isArray(config.units[group])) { + this.units[group] = config.units[group]; + } + } + } + + if (config.types) { + for (const name in config.types) { + this.addType_(name, config.types[name]); + } + } + + if (config.generic) { + this.generic = true; + for (const [name, value] of Object.entries(generic.createGenericTypes(this.units))) { + this.addType_(name, value); + } + } + + if (config.atrules) { + for (const name in config.atrules) { + this.addAtrule_(name, config.atrules[name]); + } + } + + if (config.properties) { + for (const name in config.properties) { + this.addProperty_(name, config.properties[name]); + } + } + } + } + + checkStructure(ast) { + function collectWarning(node, message) { + warns.push({ node, message }); + } + + const structure = this.structure; + const warns = []; + + this.syntax.walk(ast, function(node) { + if (structure.hasOwnProperty(node.type)) { + structure[node.type].check(node, collectWarning); + } else { + collectWarning(node, 'Unknown node type `' + node.type + '`'); + } + }); + + return warns.length ? warns : false; + } + + createDescriptor(syntax, type, name, parent = null) { + const ref = { + type, + name + }; + const descriptor = { + type, + name, + parent, + serializable: typeof syntax === 'string' || (syntax && typeof syntax.type === 'string'), + syntax: null, + match: null + }; + + if (typeof syntax === 'function') { + descriptor.match = matchGraph.buildMatchGraph(syntax, ref); + } else { + if (typeof syntax === 'string') { + // lazy parsing on first access + Object.defineProperty(descriptor, 'syntax', { + get() { + Object.defineProperty(descriptor, 'syntax', { + value: parse.parse(syntax) + }); + + return descriptor.syntax; + } + }); + } else { + descriptor.syntax = syntax; + } + + // lazy graph build on first access + Object.defineProperty(descriptor, 'match', { + get() { + Object.defineProperty(descriptor, 'match', { + value: matchGraph.buildMatchGraph(descriptor.syntax, ref) + }); + + return descriptor.match; + } + }); + } + + return descriptor; + } + addAtrule_(name, syntax) { + if (!syntax) { + return; + } + + this.atrules[name] = { + type: 'Atrule', + name: name, + prelude: syntax.prelude ? this.createDescriptor(syntax.prelude, 'AtrulePrelude', name) : null, + descriptors: syntax.descriptors + ? Object.keys(syntax.descriptors).reduce( + (map, descName) => { + map[descName] = this.createDescriptor(syntax.descriptors[descName], 'AtruleDescriptor', descName, name); + return map; + }, + Object.create(null) + ) + : null + }; + } + addProperty_(name, syntax) { + if (!syntax) { + return; + } + + this.properties[name] = this.createDescriptor(syntax, 'Property', name); + } + addType_(name, syntax) { + if (!syntax) { + return; + } + + this.types[name] = this.createDescriptor(syntax, 'Type', name); + } + + checkAtruleName(atruleName) { + if (!this.getAtrule(atruleName)) { + return new error.SyntaxReferenceError('Unknown at-rule', '@' + atruleName); + } + } + checkAtrulePrelude(atruleName, prelude) { + const error = this.checkAtruleName(atruleName); + + if (error) { + return error; + } + + const atrule = this.getAtrule(atruleName); + + if (!atrule.prelude && prelude) { + return new SyntaxError('At-rule `@' + atruleName + '` should not contain a prelude'); + } + + if (atrule.prelude && !prelude) { + if (!matchSyntax(this, atrule.prelude, '', false).matched) { + return new SyntaxError('At-rule `@' + atruleName + '` should contain a prelude'); + } + } + } + checkAtruleDescriptorName(atruleName, descriptorName) { + const error$1 = this.checkAtruleName(atruleName); + + if (error$1) { + return error$1; + } + + const atrule = this.getAtrule(atruleName); + const descriptor = names.keyword(descriptorName); + + if (!atrule.descriptors) { + return new SyntaxError('At-rule `@' + atruleName + '` has no known descriptors'); + } + + if (!atrule.descriptors[descriptor.name] && + !atrule.descriptors[descriptor.basename]) { + return new error.SyntaxReferenceError('Unknown at-rule descriptor', descriptorName); + } + } + checkPropertyName(propertyName) { + if (!this.getProperty(propertyName)) { + return new error.SyntaxReferenceError('Unknown property', propertyName); + } + } + + matchAtrulePrelude(atruleName, prelude) { + const error = this.checkAtrulePrelude(atruleName, prelude); + + if (error) { + return buildMatchResult(null, error); + } + + const atrule = this.getAtrule(atruleName); + + if (!atrule.prelude) { + return buildMatchResult(null, null); + } + + return matchSyntax(this, atrule.prelude, prelude || '', false); + } + matchAtruleDescriptor(atruleName, descriptorName, value) { + const error = this.checkAtruleDescriptorName(atruleName, descriptorName); + + if (error) { + return buildMatchResult(null, error); + } + + const atrule = this.getAtrule(atruleName); + const descriptor = names.keyword(descriptorName); + + return matchSyntax(this, atrule.descriptors[descriptor.name] || atrule.descriptors[descriptor.basename], value, false); + } + matchDeclaration(node) { + if (node.type !== 'Declaration') { + return buildMatchResult(null, new Error('Not a Declaration node')); + } + + return this.matchProperty(node.property, node.value); + } + matchProperty(propertyName, value) { + // don't match syntax for a custom property at the moment + if (names.property(propertyName).custom) { + return buildMatchResult(null, new Error('Lexer matching doesn\'t applicable for custom properties')); + } + + const error = this.checkPropertyName(propertyName); + + if (error) { + return buildMatchResult(null, error); + } + + return matchSyntax(this, this.getProperty(propertyName), value, true); + } + matchType(typeName, value) { + const typeSyntax = this.getType(typeName); + + if (!typeSyntax) { + return buildMatchResult(null, new error.SyntaxReferenceError('Unknown type', typeName)); + } + + return matchSyntax(this, typeSyntax, value, false); + } + match(syntax, value) { + if (typeof syntax !== 'string' && (!syntax || !syntax.type)) { + return buildMatchResult(null, new error.SyntaxReferenceError('Bad syntax')); + } + + if (typeof syntax === 'string' || !syntax.match) { + syntax = this.createDescriptor(syntax, 'Type', 'anonymous'); + } + + return matchSyntax(this, syntax, value, false); + } + + findValueFragments(propertyName, value, type, name) { + return search.matchFragments(this, value, this.matchProperty(propertyName, value), type, name); + } + findDeclarationValueFragments(declaration, type, name) { + return search.matchFragments(this, declaration.value, this.matchDeclaration(declaration), type, name); + } + findAllFragments(ast, type, name) { + const result = []; + + this.syntax.walk(ast, { + visit: 'Declaration', + enter: (declaration) => { + result.push.apply(result, this.findDeclarationValueFragments(declaration, type, name)); + } + }); + + return result; + } + + getAtrule(atruleName, fallbackBasename = true) { + const atrule = names.keyword(atruleName); + const atruleEntry = atrule.vendor && fallbackBasename + ? this.atrules[atrule.name] || this.atrules[atrule.basename] + : this.atrules[atrule.name]; + + return atruleEntry || null; + } + getAtrulePrelude(atruleName, fallbackBasename = true) { + const atrule = this.getAtrule(atruleName, fallbackBasename); + + return atrule && atrule.prelude || null; + } + getAtruleDescriptor(atruleName, name) { + return this.atrules.hasOwnProperty(atruleName) && this.atrules.declarators + ? this.atrules[atruleName].declarators[name] || null + : null; + } + getProperty(propertyName, fallbackBasename = true) { + const property = names.property(propertyName); + const propertyEntry = property.vendor && fallbackBasename + ? this.properties[property.name] || this.properties[property.basename] + : this.properties[property.name]; + + return propertyEntry || null; + } + getType(name) { + return hasOwnProperty.call(this.types, name) ? this.types[name] : null; + } + + validate() { + function validate(syntax, name, broken, descriptor) { + if (broken.has(name)) { + return broken.get(name); + } + + broken.set(name, false); + if (descriptor.syntax !== null) { + walk.walk(descriptor.syntax, function(node) { + if (node.type !== 'Type' && node.type !== 'Property') { + return; + } + + const map = node.type === 'Type' ? syntax.types : syntax.properties; + const brokenMap = node.type === 'Type' ? brokenTypes : brokenProperties; + + if (!hasOwnProperty.call(map, node.name) || validate(syntax, node.name, brokenMap, map[node.name])) { + broken.set(name, true); + } + }, this); + } + } + + let brokenTypes = new Map(); + let brokenProperties = new Map(); + + for (const key in this.types) { + validate(this, key, brokenTypes, this.types[key]); + } + + for (const key in this.properties) { + validate(this, key, brokenProperties, this.properties[key]); + } + + brokenTypes = [...brokenTypes.keys()].filter(name => brokenTypes.get(name)); + brokenProperties = [...brokenProperties.keys()].filter(name => brokenProperties.get(name)); + + if (brokenTypes.length || brokenProperties.length) { + return { + types: brokenTypes, + properties: brokenProperties + }; + } + + return null; + } + dump(syntaxAsAst, pretty) { + return { + generic: this.generic, + units: this.units, + types: dumpMapSyntax(this.types, !pretty, syntaxAsAst), + properties: dumpMapSyntax(this.properties, !pretty, syntaxAsAst), + atrules: dumpAtruleMapSyntax(this.atrules, !pretty, syntaxAsAst) + }; + } + toString() { + return JSON.stringify(this.dump()); + } +} + +exports.Lexer = Lexer; diff --git a/node_modules/css-tree/cjs/lexer/error.cjs b/node_modules/css-tree/cjs/lexer/error.cjs new file mode 100644 index 0000000..8d252ee --- /dev/null +++ b/node_modules/css-tree/cjs/lexer/error.cjs @@ -0,0 +1,128 @@ +'use strict'; + +const createCustomError = require('../utils/create-custom-error.cjs'); +const generate = require('../definition-syntax/generate.cjs'); + +const defaultLoc = { offset: 0, line: 1, column: 1 }; + +function locateMismatch(matchResult, node) { + const tokens = matchResult.tokens; + const longestMatch = matchResult.longestMatch; + const mismatchNode = longestMatch < tokens.length ? tokens[longestMatch].node || null : null; + const badNode = mismatchNode !== node ? mismatchNode : null; + let mismatchOffset = 0; + let mismatchLength = 0; + let entries = 0; + let css = ''; + let start; + let end; + + for (let i = 0; i < tokens.length; i++) { + const token = tokens[i].value; + + if (i === longestMatch) { + mismatchLength = token.length; + mismatchOffset = css.length; + } + + if (badNode !== null && tokens[i].node === badNode) { + if (i <= longestMatch) { + entries++; + } else { + entries = 0; + } + } + + css += token; + } + + if (longestMatch === tokens.length || entries > 1) { // last + start = fromLoc(badNode || node, 'end') || buildLoc(defaultLoc, css); + end = buildLoc(start); + } else { + start = fromLoc(badNode, 'start') || + buildLoc(fromLoc(node, 'start') || defaultLoc, css.slice(0, mismatchOffset)); + end = fromLoc(badNode, 'end') || + buildLoc(start, css.substr(mismatchOffset, mismatchLength)); + } + + return { + css, + mismatchOffset, + mismatchLength, + start, + end + }; +} + +function fromLoc(node, point) { + const value = node && node.loc && node.loc[point]; + + if (value) { + return 'line' in value ? buildLoc(value) : value; + } + + return null; +} + +function buildLoc({ offset, line, column }, extra) { + const loc = { + offset, + line, + column + }; + + if (extra) { + const lines = extra.split(/\n|\r\n?|\f/); + + loc.offset += extra.length; + loc.line += lines.length - 1; + loc.column = lines.length === 1 ? loc.column + extra.length : lines.pop().length + 1; + } + + return loc; +} + +const SyntaxReferenceError = function(type, referenceName) { + const error = createCustomError.createCustomError( + 'SyntaxReferenceError', + type + (referenceName ? ' `' + referenceName + '`' : '') + ); + + error.reference = referenceName; + + return error; +}; + +const SyntaxMatchError = function(message, syntax, node, matchResult) { + const error = createCustomError.createCustomError('SyntaxMatchError', message); + const { + css, + mismatchOffset, + mismatchLength, + start, + end + } = locateMismatch(matchResult, node); + + error.rawMessage = message; + error.syntax = syntax ? generate.generate(syntax) : ''; + error.css = css; + error.mismatchOffset = mismatchOffset; + error.mismatchLength = mismatchLength; + error.message = message + '\n' + + ' syntax: ' + error.syntax + '\n' + + ' value: ' + (css || '') + '\n' + + ' --------' + new Array(error.mismatchOffset + 1).join('-') + '^'; + + Object.assign(error, start); + error.loc = { + source: (node && node.loc && node.loc.source) || '', + start, + end + }; + + return error; +}; + +exports.SyntaxMatchError = SyntaxMatchError; +exports.SyntaxReferenceError = SyntaxReferenceError; diff --git a/node_modules/css-tree/cjs/lexer/generic-an-plus-b.cjs b/node_modules/css-tree/cjs/lexer/generic-an-plus-b.cjs new file mode 100644 index 0000000..a5dfba3 --- /dev/null +++ b/node_modules/css-tree/cjs/lexer/generic-an-plus-b.cjs @@ -0,0 +1,235 @@ +'use strict'; + +const charCodeDefinitions = require('../tokenizer/char-code-definitions.cjs'); +const types = require('../tokenizer/types.cjs'); +const utils = require('../tokenizer/utils.cjs'); + +const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+) +const HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-) +const N = 0x006E; // U+006E LATIN SMALL LETTER N (n) +const DISALLOW_SIGN = true; +const ALLOW_SIGN = false; + +function isDelim(token, code) { + return token !== null && token.type === types.Delim && token.value.charCodeAt(0) === code; +} + +function skipSC(token, offset, getNextToken) { + while (token !== null && (token.type === types.WhiteSpace || token.type === types.Comment)) { + token = getNextToken(++offset); + } + + return offset; +} + +function checkInteger(token, valueOffset, disallowSign, offset) { + if (!token) { + return 0; + } + + const code = token.value.charCodeAt(valueOffset); + + if (code === PLUSSIGN || code === HYPHENMINUS) { + if (disallowSign) { + // Number sign is not allowed + return 0; + } + valueOffset++; + } + + for (; valueOffset < token.value.length; valueOffset++) { + if (!charCodeDefinitions.isDigit(token.value.charCodeAt(valueOffset))) { + // Integer is expected + return 0; + } + } + + return offset + 1; +} + +// ... +// ... ['+' | '-'] +function consumeB(token, offset_, getNextToken) { + let sign = false; + let offset = skipSC(token, offset_, getNextToken); + + token = getNextToken(offset); + + if (token === null) { + return offset_; + } + + if (token.type !== types.Number) { + if (isDelim(token, PLUSSIGN) || isDelim(token, HYPHENMINUS)) { + sign = true; + offset = skipSC(getNextToken(++offset), offset, getNextToken); + token = getNextToken(offset); + + if (token === null || token.type !== types.Number) { + return 0; + } + } else { + return offset_; + } + } + + if (!sign) { + const code = token.value.charCodeAt(0); + if (code !== PLUSSIGN && code !== HYPHENMINUS) { + // Number sign is expected + return 0; + } + } + + return checkInteger(token, sign ? 0 : 1, sign, offset); +} + +// An+B microsyntax https://www.w3.org/TR/css-syntax-3/#anb +function anPlusB(token, getNextToken) { + /* eslint-disable brace-style*/ + let offset = 0; + + if (!token) { + return 0; + } + + // + if (token.type === types.Number) { + return checkInteger(token, 0, ALLOW_SIGN, offset); // b + } + + // -n + // -n + // -n ['+' | '-'] + // -n- + // + else if (token.type === types.Ident && token.value.charCodeAt(0) === HYPHENMINUS) { + // expect 1st char is N + if (!utils.cmpChar(token.value, 1, N)) { + return 0; + } + + switch (token.value.length) { + // -n + // -n + // -n ['+' | '-'] + case 2: + return consumeB(getNextToken(++offset), offset, getNextToken); + + // -n- + case 3: + if (token.value.charCodeAt(2) !== HYPHENMINUS) { + return 0; + } + + offset = skipSC(getNextToken(++offset), offset, getNextToken); + token = getNextToken(offset); + + return checkInteger(token, 0, DISALLOW_SIGN, offset); + + // + default: + if (token.value.charCodeAt(2) !== HYPHENMINUS) { + return 0; + } + + return checkInteger(token, 3, DISALLOW_SIGN, offset); + } + } + + // '+'? n + // '+'? n + // '+'? n ['+' | '-'] + // '+'? n- + // '+'? + else if (token.type === types.Ident || (isDelim(token, PLUSSIGN) && getNextToken(offset + 1).type === types.Ident)) { + // just ignore a plus + if (token.type !== types.Ident) { + token = getNextToken(++offset); + } + + if (token === null || !utils.cmpChar(token.value, 0, N)) { + return 0; + } + + switch (token.value.length) { + // '+'? n + // '+'? n + // '+'? n ['+' | '-'] + case 1: + return consumeB(getNextToken(++offset), offset, getNextToken); + + // '+'? n- + case 2: + if (token.value.charCodeAt(1) !== HYPHENMINUS) { + return 0; + } + + offset = skipSC(getNextToken(++offset), offset, getNextToken); + token = getNextToken(offset); + + return checkInteger(token, 0, DISALLOW_SIGN, offset); + + // '+'? + default: + if (token.value.charCodeAt(1) !== HYPHENMINUS) { + return 0; + } + + return checkInteger(token, 2, DISALLOW_SIGN, offset); + } + } + + // + // + // + // + // ['+' | '-'] + else if (token.type === types.Dimension) { + let code = token.value.charCodeAt(0); + let sign = code === PLUSSIGN || code === HYPHENMINUS ? 1 : 0; + let i = sign; + + for (; i < token.value.length; i++) { + if (!charCodeDefinitions.isDigit(token.value.charCodeAt(i))) { + break; + } + } + + if (i === sign) { + // Integer is expected + return 0; + } + + if (!utils.cmpChar(token.value, i, N)) { + return 0; + } + + // + // + // ['+' | '-'] + if (i + 1 === token.value.length) { + return consumeB(getNextToken(++offset), offset, getNextToken); + } else { + if (token.value.charCodeAt(i + 1) !== HYPHENMINUS) { + return 0; + } + + // + if (i + 2 === token.value.length) { + offset = skipSC(getNextToken(++offset), offset, getNextToken); + token = getNextToken(offset); + + return checkInteger(token, 0, DISALLOW_SIGN, offset); + } + // + else { + return checkInteger(token, i + 2, DISALLOW_SIGN, offset); + } + } + } + + return 0; +} + +module.exports = anPlusB; diff --git a/node_modules/css-tree/cjs/lexer/generic-const.cjs b/node_modules/css-tree/cjs/lexer/generic-const.cjs new file mode 100644 index 0000000..9b9f615 --- /dev/null +++ b/node_modules/css-tree/cjs/lexer/generic-const.cjs @@ -0,0 +1,12 @@ +'use strict'; + +// https://drafts.csswg.org/css-cascade-5/ +const cssWideKeywords = [ + 'initial', + 'inherit', + 'unset', + 'revert', + 'revert-layer' +]; + +exports.cssWideKeywords = cssWideKeywords; diff --git a/node_modules/css-tree/cjs/lexer/generic-urange.cjs b/node_modules/css-tree/cjs/lexer/generic-urange.cjs new file mode 100644 index 0000000..ce167bb --- /dev/null +++ b/node_modules/css-tree/cjs/lexer/generic-urange.cjs @@ -0,0 +1,149 @@ +'use strict'; + +const charCodeDefinitions = require('../tokenizer/char-code-definitions.cjs'); +const types = require('../tokenizer/types.cjs'); +const utils = require('../tokenizer/utils.cjs'); + +const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+) +const HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-) +const QUESTIONMARK = 0x003F; // U+003F QUESTION MARK (?) +const U = 0x0075; // U+0075 LATIN SMALL LETTER U (u) + +function isDelim(token, code) { + return token !== null && token.type === types.Delim && token.value.charCodeAt(0) === code; +} + +function startsWith(token, code) { + return token.value.charCodeAt(0) === code; +} + +function hexSequence(token, offset, allowDash) { + let hexlen = 0; + + for (let pos = offset; pos < token.value.length; pos++) { + const code = token.value.charCodeAt(pos); + + if (code === HYPHENMINUS && allowDash && hexlen !== 0) { + hexSequence(token, offset + hexlen + 1, false); + return 6; // dissallow following question marks + } + + if (!charCodeDefinitions.isHexDigit(code)) { + return 0; // not a hex digit + } + + if (++hexlen > 6) { + return 0; // too many hex digits + } } + + return hexlen; +} + +function withQuestionMarkSequence(consumed, length, getNextToken) { + if (!consumed) { + return 0; // nothing consumed + } + + while (isDelim(getNextToken(length), QUESTIONMARK)) { + if (++consumed > 6) { + return 0; // too many question marks + } + + length++; + } + + return length; +} + +// https://drafts.csswg.org/css-syntax/#urange +// Informally, the production has three forms: +// U+0001 +// Defines a range consisting of a single code point, in this case the code point "1". +// U+0001-00ff +// Defines a range of codepoints between the first and the second value, in this case +// the range between "1" and "ff" (255 in decimal) inclusive. +// U+00?? +// Defines a range of codepoints where the "?" characters range over all hex digits, +// in this case defining the same as the value U+0000-00ff. +// In each form, a maximum of 6 digits is allowed for each hexadecimal number (if you treat "?" as a hexadecimal digit). +// +// = +// u '+' '?'* | +// u '?'* | +// u '?'* | +// u | +// u | +// u '+' '?'+ +function urange(token, getNextToken) { + let length = 0; + + // should start with `u` or `U` + if (token === null || token.type !== types.Ident || !utils.cmpChar(token.value, 0, U)) { + return 0; + } + + token = getNextToken(++length); + if (token === null) { + return 0; + } + + // u '+' '?'* + // u '+' '?'+ + if (isDelim(token, PLUSSIGN)) { + token = getNextToken(++length); + if (token === null) { + return 0; + } + + if (token.type === types.Ident) { + // u '+' '?'* + return withQuestionMarkSequence(hexSequence(token, 0, true), ++length, getNextToken); + } + + if (isDelim(token, QUESTIONMARK)) { + // u '+' '?'+ + return withQuestionMarkSequence(1, ++length, getNextToken); + } + + // Hex digit or question mark is expected + return 0; + } + + // u '?'* + // u + // u + if (token.type === types.Number) { + const consumedHexLength = hexSequence(token, 1, true); + if (consumedHexLength === 0) { + return 0; + } + + token = getNextToken(++length); + if (token === null) { + // u + return length; + } + + if (token.type === types.Dimension || token.type === types.Number) { + // u + // u + if (!startsWith(token, HYPHENMINUS) || !hexSequence(token, 1, false)) { + return 0; + } + + return length + 1; + } + + // u '?'* + return withQuestionMarkSequence(consumedHexLength, length, getNextToken); + } + + // u '?'* + if (token.type === types.Dimension) { + return withQuestionMarkSequence(hexSequence(token, 1, true), ++length, getNextToken); + } + + return 0; +} + +module.exports = urange; diff --git a/node_modules/css-tree/cjs/lexer/generic.cjs b/node_modules/css-tree/cjs/lexer/generic.cjs new file mode 100644 index 0000000..6b9e5ce --- /dev/null +++ b/node_modules/css-tree/cjs/lexer/generic.cjs @@ -0,0 +1,573 @@ +'use strict'; + +const genericConst = require('./generic-const.cjs'); +const genericAnPlusB = require('./generic-an-plus-b.cjs'); +const genericUrange = require('./generic-urange.cjs'); +const types = require('../tokenizer/types.cjs'); +const charCodeDefinitions = require('../tokenizer/char-code-definitions.cjs'); +const utils = require('../tokenizer/utils.cjs'); + +const calcFunctionNames = ['calc(', '-moz-calc(', '-webkit-calc(']; +const balancePair = new Map([ + [types.Function, types.RightParenthesis], + [types.LeftParenthesis, types.RightParenthesis], + [types.LeftSquareBracket, types.RightSquareBracket], + [types.LeftCurlyBracket, types.RightCurlyBracket] +]); + +// safe char code getter +function charCodeAt(str, index) { + return index < str.length ? str.charCodeAt(index) : 0; +} + +function eqStr(actual, expected) { + return utils.cmpStr(actual, 0, actual.length, expected); +} + +function eqStrAny(actual, expected) { + for (let i = 0; i < expected.length; i++) { + if (eqStr(actual, expected[i])) { + return true; + } + } + + return false; +} + +// IE postfix hack, i.e. 123\0 or 123px\9 +function isPostfixIeHack(str, offset) { + if (offset !== str.length - 2) { + return false; + } + + return ( + charCodeAt(str, offset) === 0x005C && // U+005C REVERSE SOLIDUS (\) + charCodeDefinitions.isDigit(charCodeAt(str, offset + 1)) + ); +} + +function outOfRange(opts, value, numEnd) { + if (opts && opts.type === 'Range') { + const num = Number( + numEnd !== undefined && numEnd !== value.length + ? value.substr(0, numEnd) + : value + ); + + if (isNaN(num)) { + return true; + } + + // FIXME: when opts.min is a string it's a dimension, skip a range validation + // for now since it requires a type covertation which is not implmented yet + if (opts.min !== null && num < opts.min && typeof opts.min !== 'string') { + return true; + } + + // FIXME: when opts.max is a string it's a dimension, skip a range validation + // for now since it requires a type covertation which is not implmented yet + if (opts.max !== null && num > opts.max && typeof opts.max !== 'string') { + return true; + } + } + + return false; +} + +function consumeFunction(token, getNextToken) { + let balanceCloseType = 0; + let balanceStash = []; + let length = 0; + + // balanced token consuming + scan: + do { + switch (token.type) { + case types.RightCurlyBracket: + case types.RightParenthesis: + case types.RightSquareBracket: + if (token.type !== balanceCloseType) { + break scan; + } + + balanceCloseType = balanceStash.pop(); + + if (balanceStash.length === 0) { + length++; + break scan; + } + + break; + + case types.Function: + case types.LeftParenthesis: + case types.LeftSquareBracket: + case types.LeftCurlyBracket: + balanceStash.push(balanceCloseType); + balanceCloseType = balancePair.get(token.type); + break; + } + + length++; + } while (token = getNextToken(length)); + + return length; +} + +// TODO: implement +// can be used wherever , , ,