init
This commit is contained in:
commit
56ee41aa6c
|
|
@ -0,0 +1,8 @@
|
||||||
|
```
|
||||||
|
npm install
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
npm run deploy
|
||||||
|
```
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
../acorn/bin/acorn
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
../esbuild/bin/esbuild
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
../mime/cli.js
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
../miniflare/bootstrap.js
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
../mustache/bin/mustache
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
../nanoid/bin/nanoid.cjs
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
../resolve/bin/resolve
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
../workerd/bin/workerd
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
../wrangler/bin/wrangler.js
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
../wrangler/bin/wrangler.js
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"userId": "ad1d0e4c7015e13a515c12756a2a6ede"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"account": {
|
||||||
|
"id": "668f77372ab4b05320529bb83c2928ea",
|
||||||
|
"name": "Regdomains111@proton.me's Account"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
{"clientTcpRtt":23,"longitude":"60.65240","httpProtocol":"HTTP/1.1","tlsCipher":"AEAD-AES256-GCM-SHA384","continent":"EU","asn":28890,"clientAcceptEncoding":"br, gzip, deflate","country":"RU","tlsClientExtensionsSha1":"Y7DIC8A6G0/aXviZ8ie/xDbJb7g=","verifiedBotCategory":"","tlsClientAuth":{"certIssuerDNLegacy":"","certIssuerSKI":"","certSubjectDNRFC2253":"","certSubjectDNLegacy":"","certFingerprintSHA256":"","certNotBefore":"","certSKI":"","certSerial":"","certIssuerDN":"","certVerified":"NONE","certNotAfter":"","certSubjectDN":"","certPresented":"0","certRevoked":"0","certIssuerSerial":"","certIssuerDNRFC2253":"","certFingerprintSHA1":""},"tlsExportedAuthenticator":{"clientFinished":"0fc4d9e28c3d34e0c852c6bae52476baacdcee5d3e00ac612eca6bac7e7a643a850c4cf6f57b2caeaf38b07904c6cdcd","clientHandshake":"e94834865fcf1e1cd64f77e8f4ef8d93b2409a737580ddd0f25492501a48e1442319d2313a4e14385dbb93fc36043081","serverHandshake":"6e49bc5f8ec3bbd6e63af7a420607d515cad384d4b7cc62eb7bbdd68cb87356f9836f146c0874fe93241e1924f5a9206","serverFinished":"5b07f3883068f426d1b9dc494040ce47818e2c1e1ee6e7d5e68fb118b9eb4832e05ad456d029336dcaf043e280afe59e"},"tlsVersion":"TLSv1.3","city":"Yekaterinburg","timezone":"Asia/Yekaterinburg","colo":"DME","tlsClientHelloLength":"380","edgeRequestKeepAliveStatus":1,"postalCode":"620066","region":"Sverdlovsk Oblast","latitude":"56.84390","requestPriority":"","regionCode":"SVE","asOrganization":"Insys","tlsClientRandom":"GWdMwqExACWZOQ8G7QEPQpzBqWgXy21ul7PY3QkCudg=","botManagement":{"corporateProxy":false,"verifiedBot":false,"jsDetection":{"passed":false},"staticResource":false,"detectionIds":{},"score":99}}
|
||||||
|
|
@ -0,0 +1,886 @@
|
||||||
|
{
|
||||||
|
"name": "one-link",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"node_modules/@cloudflare/kv-asset-handler": {
|
||||||
|
"version": "0.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.2.tgz",
|
||||||
|
"integrity": "sha512-EeEjMobfuJrwoctj7FA1y1KEbM0+Q1xSjobIEyie9k4haVEBB7vkDvsasw1pM3rO39mL2akxIAzLMUAtrMHZhA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"mime": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.13"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@cloudflare/workerd-darwin-arm64": {
|
||||||
|
"version": "1.20240419.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240419.0.tgz",
|
||||||
|
"integrity": "sha512-z4etQSPiD5Gcjs962LiC7ZdmXnN6SGof5KrYoFiSI9X9kUvpuGH/lnjVVPd+NnVNeDU2kzmcAIgyZjkjTaqVXQ==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@cloudflare/workers-types": {
|
||||||
|
"version": "4.20240512.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20240512.0.tgz",
|
||||||
|
"integrity": "sha512-o2yTEWg+YK/I1t/Me+dA0oarO0aCbjibp6wSeaw52DSE9tDyKJ7S+Qdyw/XsMrKn4t8kF6f/YOba+9O4MJfW9w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/@cspotcode/source-map-support": {
|
||||||
|
"version": "0.8.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
|
||||||
|
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@jridgewell/trace-mapping": "0.3.9"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild-plugins/node-globals-polyfill": {
|
||||||
|
"version": "0.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz",
|
||||||
|
"integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==",
|
||||||
|
"dev": true,
|
||||||
|
"peerDependencies": {
|
||||||
|
"esbuild": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild-plugins/node-modules-polyfill": {
|
||||||
|
"version": "0.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz",
|
||||||
|
"integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"escape-string-regexp": "^4.0.0",
|
||||||
|
"rollup-plugin-node-polyfills": "^0.2.1"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"esbuild": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/darwin-arm64": {
|
||||||
|
"version": "0.17.19",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz",
|
||||||
|
"integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@fastify/busboy": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@jridgewell/resolve-uri": {
|
||||||
|
"version": "3.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
||||||
|
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
|
||||||
|
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@jridgewell/resolve-uri": "^3.0.3",
|
||||||
|
"@jridgewell/sourcemap-codec": "^1.4.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/node": {
|
||||||
|
"version": "20.12.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz",
|
||||||
|
"integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"undici-types": "~5.26.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/node-forge": {
|
||||||
|
"version": "1.3.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
|
||||||
|
"integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/acorn": {
|
||||||
|
"version": "8.11.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
|
||||||
|
"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"acorn": "bin/acorn"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/acorn-walk": {
|
||||||
|
"version": "8.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
|
||||||
|
"integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/anymatch": {
|
||||||
|
"version": "3.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
|
||||||
|
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"normalize-path": "^3.0.0",
|
||||||
|
"picomatch": "^2.0.4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/as-table": {
|
||||||
|
"version": "1.0.55",
|
||||||
|
"resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz",
|
||||||
|
"integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"printable-characters": "^1.0.42"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/binary-extensions": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/blake3-wasm": {
|
||||||
|
"version": "2.1.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz",
|
||||||
|
"integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==",
|
||||||
|
"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/capnp-ts": {
|
||||||
|
"version": "0.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz",
|
||||||
|
"integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"debug": "^4.3.1",
|
||||||
|
"tslib": "^2.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/chokidar": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"anymatch": "~3.1.2",
|
||||||
|
"braces": "~3.0.2",
|
||||||
|
"glob-parent": "~5.1.2",
|
||||||
|
"is-binary-path": "~2.1.0",
|
||||||
|
"is-glob": "~4.0.1",
|
||||||
|
"normalize-path": "~3.0.0",
|
||||||
|
"readdirp": "~3.6.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 8.10.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://paulmillr.com/funding/"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"fsevents": "~2.3.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/cookie": {
|
||||||
|
"version": "0.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
|
||||||
|
"integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/data-uri-to-buffer": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/debug": {
|
||||||
|
"version": "4.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||||
|
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"ms": "2.1.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"supports-color": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/esbuild": {
|
||||||
|
"version": "0.17.19",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz",
|
||||||
|
"integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==",
|
||||||
|
"dev": true,
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"bin": {
|
||||||
|
"esbuild": "bin/esbuild"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"@esbuild/android-arm": "0.17.19",
|
||||||
|
"@esbuild/android-arm64": "0.17.19",
|
||||||
|
"@esbuild/android-x64": "0.17.19",
|
||||||
|
"@esbuild/darwin-arm64": "0.17.19",
|
||||||
|
"@esbuild/darwin-x64": "0.17.19",
|
||||||
|
"@esbuild/freebsd-arm64": "0.17.19",
|
||||||
|
"@esbuild/freebsd-x64": "0.17.19",
|
||||||
|
"@esbuild/linux-arm": "0.17.19",
|
||||||
|
"@esbuild/linux-arm64": "0.17.19",
|
||||||
|
"@esbuild/linux-ia32": "0.17.19",
|
||||||
|
"@esbuild/linux-loong64": "0.17.19",
|
||||||
|
"@esbuild/linux-mips64el": "0.17.19",
|
||||||
|
"@esbuild/linux-ppc64": "0.17.19",
|
||||||
|
"@esbuild/linux-riscv64": "0.17.19",
|
||||||
|
"@esbuild/linux-s390x": "0.17.19",
|
||||||
|
"@esbuild/linux-x64": "0.17.19",
|
||||||
|
"@esbuild/netbsd-x64": "0.17.19",
|
||||||
|
"@esbuild/openbsd-x64": "0.17.19",
|
||||||
|
"@esbuild/sunos-x64": "0.17.19",
|
||||||
|
"@esbuild/win32-arm64": "0.17.19",
|
||||||
|
"@esbuild/win32-ia32": "0.17.19",
|
||||||
|
"@esbuild/win32-x64": "0.17.19"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/escape-string-regexp": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/estree-walker": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/exit-hook": {
|
||||||
|
"version": "2.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz",
|
||||||
|
"integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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/fsevents": {
|
||||||
|
"version": "2.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
||||||
|
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
|
||||||
|
"dev": true,
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/function-bind": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
||||||
|
"dev": true,
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/get-source": {
|
||||||
|
"version": "2.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz",
|
||||||
|
"integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"data-uri-to-buffer": "^2.0.0",
|
||||||
|
"source-map": "^0.6.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/glob-parent": {
|
||||||
|
"version": "5.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
||||||
|
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"is-glob": "^4.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/glob-to-regexp": {
|
||||||
|
"version": "0.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
|
||||||
|
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/hasown": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"function-bind": "^1.1.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/hono": {
|
||||||
|
"version": "4.3.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/hono/-/hono-4.3.6.tgz",
|
||||||
|
"integrity": "sha512-2IqXwrxWF4tG2AR7b5tMYn+KEnWK8UvdC/NUSbOKWj/Kj11OJqel58FxyiXLK5CcKLiL8aGtTe4lkBKXyaHMBQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/is-binary-path": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"binary-extensions": "^2.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/is-core-module": {
|
||||||
|
"version": "2.13.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
|
||||||
|
"integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"hasown": "^2.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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-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/magic-string": {
|
||||||
|
"version": "0.25.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
|
||||||
|
"integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"sourcemap-codec": "^1.4.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mime": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"mime": "cli.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/miniflare": {
|
||||||
|
"version": "3.20240419.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240419.1.tgz",
|
||||||
|
"integrity": "sha512-Q9n0W07uUD/u0c/b03E4iogeXOAMjZnE3P7B5Yi8sPaZAx6TYWwjurGBja+Pg2yILN2iMaliEobfVyAKss33cA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@cspotcode/source-map-support": "0.8.1",
|
||||||
|
"acorn": "^8.8.0",
|
||||||
|
"acorn-walk": "^8.2.0",
|
||||||
|
"capnp-ts": "^0.7.0",
|
||||||
|
"exit-hook": "^2.2.1",
|
||||||
|
"glob-to-regexp": "^0.4.1",
|
||||||
|
"stoppable": "^1.1.0",
|
||||||
|
"undici": "^5.28.2",
|
||||||
|
"workerd": "1.20240419.0",
|
||||||
|
"ws": "^8.11.0",
|
||||||
|
"youch": "^3.2.2",
|
||||||
|
"zod": "^3.20.6"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"miniflare": "bootstrap.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.13"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ms": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/mustache": {
|
||||||
|
"version": "4.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
|
||||||
|
"integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"mustache": "bin/mustache"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/nanoid": {
|
||||||
|
"version": "3.3.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
|
||||||
|
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
|
||||||
|
"dev": true,
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/ai"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bin": {
|
||||||
|
"nanoid": "bin/nanoid.cjs"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/node-forge": {
|
||||||
|
"version": "1.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
|
||||||
|
"integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6.13.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/normalize-path": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/path-parse": {
|
||||||
|
"version": "1.0.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
|
||||||
|
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/path-to-regexp": {
|
||||||
|
"version": "6.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz",
|
||||||
|
"integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==",
|
||||||
|
"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/printable-characters": {
|
||||||
|
"version": "1.0.42",
|
||||||
|
"resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz",
|
||||||
|
"integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/readdirp": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"picomatch": "^2.2.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/resolve": {
|
||||||
|
"version": "1.22.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
|
||||||
|
"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"is-core-module": "^2.13.0",
|
||||||
|
"path-parse": "^1.0.7",
|
||||||
|
"supports-preserve-symlinks-flag": "^1.0.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"resolve": "bin/resolve"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/resolve.exports": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/rollup-plugin-inject": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz",
|
||||||
|
"integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==",
|
||||||
|
"deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"estree-walker": "^0.6.1",
|
||||||
|
"magic-string": "^0.25.3",
|
||||||
|
"rollup-pluginutils": "^2.8.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/rollup-plugin-node-polyfills": {
|
||||||
|
"version": "0.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz",
|
||||||
|
"integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"rollup-plugin-inject": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/rollup-pluginutils": {
|
||||||
|
"version": "2.8.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
|
||||||
|
"integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"estree-walker": "^0.6.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/selfsigned": {
|
||||||
|
"version": "2.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz",
|
||||||
|
"integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@types/node-forge": "^1.3.0",
|
||||||
|
"node-forge": "^1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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/sourcemap-codec": {
|
||||||
|
"version": "1.4.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
|
||||||
|
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
|
||||||
|
"deprecated": "Please use @jridgewell/sourcemap-codec instead",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/stacktracey": {
|
||||||
|
"version": "2.1.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz",
|
||||||
|
"integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"as-table": "^1.0.36",
|
||||||
|
"get-source": "^2.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/stoppable": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4",
|
||||||
|
"npm": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/supports-preserve-symlinks-flag": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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.6.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
|
||||||
|
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/undici": {
|
||||||
|
"version": "5.28.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz",
|
||||||
|
"integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@fastify/busboy": "^2.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/undici-types": {
|
||||||
|
"version": "5.26.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
|
||||||
|
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/workerd": {
|
||||||
|
"version": "1.20240419.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240419.0.tgz",
|
||||||
|
"integrity": "sha512-9yV98KpkQgG+bdEsKEW8i1AYZgxns6NVSfdOVEB2Ue1pTMtIEYfUyqUE+O2amisRrfaC3Pw4EvjtTmVaoetfeg==",
|
||||||
|
"dev": true,
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"bin": {
|
||||||
|
"workerd": "bin/workerd"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"@cloudflare/workerd-darwin-64": "1.20240419.0",
|
||||||
|
"@cloudflare/workerd-darwin-arm64": "1.20240419.0",
|
||||||
|
"@cloudflare/workerd-linux-64": "1.20240419.0",
|
||||||
|
"@cloudflare/workerd-linux-arm64": "1.20240419.0",
|
||||||
|
"@cloudflare/workerd-windows-64": "1.20240419.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/wrangler": {
|
||||||
|
"version": "3.55.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.55.0.tgz",
|
||||||
|
"integrity": "sha512-VhtCioKxOdVqkHa8jQ6C6bX3by2Ko0uM0DKzrA+6lBZvfDUlGDWSOPiG+1fOHBHj2JTVBntxWCztXP6L+Udr8w==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@cloudflare/kv-asset-handler": "0.3.2",
|
||||||
|
"@esbuild-plugins/node-globals-polyfill": "^0.2.3",
|
||||||
|
"@esbuild-plugins/node-modules-polyfill": "^0.2.2",
|
||||||
|
"blake3-wasm": "^2.1.5",
|
||||||
|
"chokidar": "^3.5.3",
|
||||||
|
"esbuild": "0.17.19",
|
||||||
|
"miniflare": "3.20240419.1",
|
||||||
|
"nanoid": "^3.3.3",
|
||||||
|
"path-to-regexp": "^6.2.0",
|
||||||
|
"resolve": "^1.22.8",
|
||||||
|
"resolve.exports": "^2.0.2",
|
||||||
|
"selfsigned": "^2.0.1",
|
||||||
|
"source-map": "0.6.1",
|
||||||
|
"xxhash-wasm": "^1.0.1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"wrangler": "bin/wrangler.js",
|
||||||
|
"wrangler2": "bin/wrangler.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.17.0"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"fsevents": "~2.3.2"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@cloudflare/workers-types": "^4.20240419.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@cloudflare/workers-types": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ws": {
|
||||||
|
"version": "8.17.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz",
|
||||||
|
"integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"bufferutil": "^4.0.1",
|
||||||
|
"utf-8-validate": ">=5.0.2"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"bufferutil": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"utf-8-validate": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/xxhash-wasm": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/youch": {
|
||||||
|
"version": "3.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/youch/-/youch-3.3.3.tgz",
|
||||||
|
"integrity": "sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"cookie": "^0.5.0",
|
||||||
|
"mustache": "^4.2.0",
|
||||||
|
"stacktracey": "^2.1.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/zod": {
|
||||||
|
"version": "3.23.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
|
||||||
|
"integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
|
||||||
|
"dev": true,
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/colinhacks"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,346 @@
|
||||||
|
# @cloudflare/kv-asset-handler
|
||||||
|
|
||||||
|
[](https://www.npmjs.com/package/@cloudflare/kv-asset-handler)
|
||||||
|
[](https://github.com/cloudflare/kv-asset-handler/actions/workflows/test.yml)
|
||||||
|
[](https://github.com/cloudflare/kv-asset-handler/actions/workflows/lint.yml)
|
||||||
|
|
||||||
|
`kv-asset-handler` is an open-source library for managing the retrieval of static assets from [Workers KV](https://developers.cloudflare.com/workers/runtime-apis/kv) inside of a [Cloudflare Workers](https://workers.dev) function. `kv-asset-handler` is designed for use with [Workers Sites](https://developers.cloudflare.com/workers/platform/sites), a feature included in [Wrangler](https://github.com/cloudflare/wrangler), our command-line tool for deploying Workers projects.
|
||||||
|
|
||||||
|
`kv-asset-handler` runs as part of a Cloudflare Workers function, so it allows you to customize _how_ and _when_ your static assets are loaded, as well as customize how those assets behave before they're sent to the client.
|
||||||
|
|
||||||
|
Most users and sites will not need these customizations, and just want to serve their statically built applications. For that simple use-case, you can check out [Cloudflare Pages](https://pages.cloudflare.com), our batteries-included approach to deploying static sites on Cloudflare's edge network. Workers Sites was designed as a precursor to Cloudflare Pages, so check out Pages if you just want to deploy your static site without any special customizations!
|
||||||
|
|
||||||
|
For users who _do_ want to customize their assets, and want to build complex experiences on top of their static assets, `kv-asset-handler` (and the default [Workers Sites template](https://github.com/cloudflare/worker-sites-template), which is provided for use with Wrangler + Workers Sites) allows you to customize caching behavior, headers, and anything else about how your Workers function loads the static assets for your site stored in Workers KV.
|
||||||
|
|
||||||
|
The Cloudflare Workers Discord server is an active place where Workers users get help, share feedback, and collaborate on making our platform better. The `#workers` channel in particular is a great place to chat about `kv-asset-handler`, and building cool experiences for your users using these tools! If you have questions, want to share what you're working on, or give feedback, [join us in Discord and say hello](https://discord.cloudflare.com)!
|
||||||
|
|
||||||
|
- [Installation](#installation)
|
||||||
|
- [Usage](#usage)
|
||||||
|
- [`getAssetFromKV`](#getassetfromkv)
|
||||||
|
- [Example](#example)
|
||||||
|
* [Return](#return)
|
||||||
|
* [Optional Arguments](#optional-arguments)
|
||||||
|
- [`mapRequestToAsset`](#maprequesttoasset)
|
||||||
|
- [Example](#example-1)
|
||||||
|
- [`cacheControl`](#cachecontrol)
|
||||||
|
- [`browserTTL`](#browserttl)
|
||||||
|
- [`edgeTTL`](#edgettl)
|
||||||
|
- [`bypassCache`](#bypasscache)
|
||||||
|
- [`ASSET_NAMESPACE` (required for ES Modules)](#asset_namespace-required-for-es-modules)
|
||||||
|
- [`ASSET_MANIFEST` (required for ES Modules)](#asset_manifest-required-for-es-modules)
|
||||||
|
- [`defaultETag`](#defaultetag-optional)
|
||||||
|
|
||||||
|
* [Helper functions](#helper-functions)
|
||||||
|
- [`mapRequestToAsset`](#maprequesttoasset-1)
|
||||||
|
- [`serveSinglePageApp`](#servesinglepageapp)
|
||||||
|
* [Cache revalidation and etags](#cache-revalidation-and-etags)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Add this package to your `package.json` by running this in the root of your
|
||||||
|
project's directory:
|
||||||
|
|
||||||
|
```
|
||||||
|
npm i @cloudflare/kv-asset-handler
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
This package was designed to work with [Worker Sites](https://workers.cloudflare.com/sites).
|
||||||
|
|
||||||
|
## `getAssetFromKV`
|
||||||
|
|
||||||
|
getAssetFromKV(Evt) => Promise<Response>
|
||||||
|
|
||||||
|
`getAssetFromKV` is an async function that takes an `Evt` object (containing a `Request` and a [`waitUntil`](https://developers.cloudflare.com/workers/runtime-apis/fetch-event#waituntil)) and returns a `Response` object if the request matches an asset in KV, otherwise it will throw a `KVError`.
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
|
||||||
|
This example checks for the existence of a value in KV, and returns it if it's there, and returns a 404 if it is not. It also serves index.html from `/`.
|
||||||
|
|
||||||
|
### Return
|
||||||
|
|
||||||
|
`getAssetFromKV` returns a `Promise<Response>` with `Response` being the body of the asset requested.
|
||||||
|
|
||||||
|
Known errors to be thrown are:
|
||||||
|
|
||||||
|
- MethodNotAllowedError
|
||||||
|
- NotFoundError
|
||||||
|
- InternalError
|
||||||
|
|
||||||
|
#### ES Modules
|
||||||
|
|
||||||
|
```js
|
||||||
|
import manifestJSON from "__STATIC_CONTENT_MANIFEST";
|
||||||
|
import {
|
||||||
|
getAssetFromKV,
|
||||||
|
MethodNotAllowedError,
|
||||||
|
NotFoundError,
|
||||||
|
} from "@cloudflare/kv-asset-handler";
|
||||||
|
|
||||||
|
const assetManifest = JSON.parse(manifestJSON);
|
||||||
|
|
||||||
|
export default {
|
||||||
|
async fetch(request, env, ctx) {
|
||||||
|
if (request.url.includes("/docs")) {
|
||||||
|
try {
|
||||||
|
return await getAssetFromKV(
|
||||||
|
{
|
||||||
|
request,
|
||||||
|
waitUntil(promise) {
|
||||||
|
return ctx.waitUntil(promise);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ASSET_NAMESPACE: env.__STATIC_CONTENT,
|
||||||
|
ASSET_MANIFEST: assetManifest,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
if (e instanceof NotFoundError) {
|
||||||
|
// ...
|
||||||
|
} else if (e instanceof MethodNotAllowedError) {
|
||||||
|
// ...
|
||||||
|
} else {
|
||||||
|
return new Response("An unexpected error occurred", { status: 500 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else return fetch(request);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Service Worker
|
||||||
|
|
||||||
|
```js
|
||||||
|
import {
|
||||||
|
getAssetFromKV,
|
||||||
|
MethodNotAllowedError,
|
||||||
|
NotFoundError,
|
||||||
|
} from "@cloudflare/kv-asset-handler";
|
||||||
|
|
||||||
|
addEventListener("fetch", (event) => {
|
||||||
|
event.respondWith(handleEvent(event));
|
||||||
|
});
|
||||||
|
|
||||||
|
async function handleEvent(event) {
|
||||||
|
if (event.request.url.includes("/docs")) {
|
||||||
|
try {
|
||||||
|
return await getAssetFromKV(event);
|
||||||
|
} catch (e) {
|
||||||
|
if (e instanceof NotFoundError) {
|
||||||
|
// ...
|
||||||
|
} else if (e instanceof MethodNotAllowedError) {
|
||||||
|
// ...
|
||||||
|
} else {
|
||||||
|
return new Response("An unexpected error occurred", { status: 500 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else return fetch(event.request);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Optional Arguments
|
||||||
|
|
||||||
|
You can customize the behavior of `getAssetFromKV` by passing the following properties as an object into the second argument.
|
||||||
|
|
||||||
|
```
|
||||||
|
getAssetFromKV(event, { mapRequestToAsset: ... })
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `mapRequestToAsset`
|
||||||
|
|
||||||
|
mapRequestToAsset(Request) => Request
|
||||||
|
|
||||||
|
Maps the incoming request to the value that will be looked up in Cloudflare's KV
|
||||||
|
|
||||||
|
By default, mapRequestToAsset is set to the exported function [`mapRequestToAsset`](#maprequesttoasset-1). This works for most static site generators, but you can customize this behavior by passing your own function as `mapRequestToAsset`. The function should take a `Request` object as its only argument, and return a new `Request` object with an updated path to be looked up in the asset manifest/KV.
|
||||||
|
|
||||||
|
For SPA mapping pass in the [`serveSinglePageApp`](#servesinglepageapp) function
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
|
||||||
|
Strip `/docs` from any incoming request before looking up an asset in Cloudflare's KV.
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { getAssetFromKV, mapRequestToAsset } from '@cloudflare/kv-asset-handler'
|
||||||
|
...
|
||||||
|
const customKeyModifier = request => {
|
||||||
|
let url = request.url
|
||||||
|
//custom key mapping optional
|
||||||
|
url = url.replace('/docs', '').replace(/^\/+/, '')
|
||||||
|
return mapRequestToAsset(new Request(url, request))
|
||||||
|
}
|
||||||
|
let asset = await getAssetFromKV(event, { mapRequestToAsset: customKeyModifier })
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `cacheControl`
|
||||||
|
|
||||||
|
type: object
|
||||||
|
|
||||||
|
`cacheControl` allows you to configure options for both the Cloudflare Cache accessed by your Worker, and the browser cache headers sent along with your Workers' responses. The default values are as follows:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
let cacheControl = {
|
||||||
|
browserTTL: null, // do not set cache control ttl on responses
|
||||||
|
edgeTTL: 2 * 60 * 60 * 24, // 2 days
|
||||||
|
bypassCache: false, // do not bypass Cloudflare's cache
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
##### `browserTTL`
|
||||||
|
|
||||||
|
type: number | null
|
||||||
|
nullable: true
|
||||||
|
|
||||||
|
Sets the `Cache-Control: max-age` header on the response returned from the Worker. By default set to `null` which will not add the header at all.
|
||||||
|
|
||||||
|
##### `edgeTTL`
|
||||||
|
|
||||||
|
type: number | null
|
||||||
|
nullable: true
|
||||||
|
|
||||||
|
Sets the `Cache-Control: max-age` header on the response used as the edge cache key. By default set to 2 days (`2 * 60 * 60 * 24`). When null will not cache on the edge at all.
|
||||||
|
|
||||||
|
##### `bypassCache`
|
||||||
|
|
||||||
|
type: boolean
|
||||||
|
|
||||||
|
Determines whether to cache requests on Cloudflare's edge cache. By default set to `false` (recommended for production builds). Useful for development when you need to eliminate the cache's effect on testing.
|
||||||
|
|
||||||
|
#### `ASSET_NAMESPACE` (required for ES Modules)
|
||||||
|
|
||||||
|
type: KV Namespace Binding
|
||||||
|
|
||||||
|
The binding name to the KV Namespace populated with key/value entries of files for the Worker to serve. By default, Workers Sites uses a [binding to a Workers KV Namespace](https://developers.cloudflare.com/workers/reference/storage/api/#namespaces) named `__STATIC_CONTENT`.
|
||||||
|
|
||||||
|
It is further assumed that this namespace consists of static assets such as HTML, CSS, JavaScript, or image files, keyed off of a relative path that roughly matches the assumed URL pathname of the incoming request.
|
||||||
|
|
||||||
|
In ES Modules format, this argument is required, and can be gotten from `env`.
|
||||||
|
|
||||||
|
##### ES Module
|
||||||
|
|
||||||
|
```js
|
||||||
|
return getAssetFromKV(
|
||||||
|
{
|
||||||
|
request,
|
||||||
|
waitUntil(promise) {
|
||||||
|
return ctx.waitUntil(promise)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ASSET_NAMESPACE: env.__STATIC_CONTENT,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Service Worker
|
||||||
|
|
||||||
|
```
|
||||||
|
return getAssetFromKV(event, { ASSET_NAMESPACE: MY_NAMESPACE })
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `ASSET_MANIFEST` (required for ES Modules)
|
||||||
|
|
||||||
|
type: text blob (JSON formatted) or object
|
||||||
|
|
||||||
|
The mapping of requested file path to the key stored on Cloudflare.
|
||||||
|
|
||||||
|
Workers Sites with Wrangler bundles up a text blob that maps request paths to content-hashed keys that are generated by Wrangler as a cache-busting measure. If this option/binding is not present, the function will fallback to using the raw pathname to look up your asset in KV. If, for whatever reason, you have rolled your own implementation of this, you can include your own by passing a stringified JSON object where the keys are expected paths, and the values are the expected keys in your KV namespace.
|
||||||
|
|
||||||
|
In ES Modules format, this argument is required, and can be imported.
|
||||||
|
|
||||||
|
##### ES Module
|
||||||
|
|
||||||
|
```js
|
||||||
|
import manifestJSON from '__STATIC_CONTENT_MANIFEST'
|
||||||
|
let manifest = JSON.parse(manifestJSON)
|
||||||
|
manifest['index.html'] = 'index.special.html'
|
||||||
|
|
||||||
|
return getAssetFromKV(
|
||||||
|
{
|
||||||
|
request,
|
||||||
|
waitUntil(promise) {
|
||||||
|
return ctx.waitUntil(promise)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ASSET_MANIFEST: manifest,
|
||||||
|
// ...
|
||||||
|
},
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Service Worker
|
||||||
|
|
||||||
|
```
|
||||||
|
let assetManifest = { "index.html": "index.special.html" }
|
||||||
|
return getAssetFromKV(event, { ASSET_MANIFEST: assetManifest })
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `defaultMimeType` (optional)
|
||||||
|
|
||||||
|
type: string
|
||||||
|
|
||||||
|
This is the mime type that will be used for files with unrecognized or missing extensions. The default value is `'text/plain'`.
|
||||||
|
|
||||||
|
If you are serving a static site and would like to use extensionless HTML files instead of index.html files, set this to `'text/html'`.
|
||||||
|
|
||||||
|
#### `defaultDocument` (optional)
|
||||||
|
|
||||||
|
type: string
|
||||||
|
|
||||||
|
This is the default document that will be concatenated for requests ends in `'/'` or without a valid mime type like `'/about'` or `'/about.me'`. The default value is `'index.html'`.
|
||||||
|
|
||||||
|
#### `defaultETag` (optional)
|
||||||
|
|
||||||
|
type: `'strong' | 'weak'`
|
||||||
|
|
||||||
|
This determines the format of the response [ETag header](https://developer.mozilla.org/docs/Web/HTTP/Headers/ETag). If the resource is in the cache, the ETag will always be weakened before being returned.
|
||||||
|
The default value is `'strong'`.
|
||||||
|
|
||||||
|
# Helper functions
|
||||||
|
|
||||||
|
## `mapRequestToAsset`
|
||||||
|
|
||||||
|
mapRequestToAsset(Request) => Request
|
||||||
|
|
||||||
|
The default function for mapping incoming requests to keys in Cloudflare's KV.
|
||||||
|
|
||||||
|
Takes any path that ends in `/` or evaluates to an HTML file and appends `index.html` or `/index.html` for lookup in your Workers KV namespace.
|
||||||
|
|
||||||
|
## `serveSinglePageApp`
|
||||||
|
|
||||||
|
serveSinglePageApp(Request) => Request
|
||||||
|
|
||||||
|
A custom handler for mapping requests to a single root: `index.html`. The most common use case is single-page applications - frameworks with in-app routing - such as React Router, VueJS, etc. It takes zero arguments.
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { getAssetFromKV, serveSinglePageApp } from '@cloudflare/kv-asset-handler'
|
||||||
|
...
|
||||||
|
let asset = await getAssetFromKV(event, { mapRequestToAsset: serveSinglePageApp })
|
||||||
|
```
|
||||||
|
|
||||||
|
# Cache revalidation and etags
|
||||||
|
|
||||||
|
All responses served from cache (including those with `cf-cache-status: MISS`) include an `etag` response header that identifies the version of the resource. The `etag` value is identical to the path key used in the `ASSET_MANIFEST`. It is updated each time an asset changes and looks like this: `etag: <filename>.<hash of file contents>.<extension>` (ex. `etag: index.54321.html`).
|
||||||
|
|
||||||
|
Resources served with an `etag` allow browsers to use the `if-none-match` request header to make conditional requests for that resource in the future. This has two major benefits:
|
||||||
|
|
||||||
|
- When a request's `if-none-match` value matches the `etag` of the resource in Cloudflare cache, Cloudflare will send a `304 Not Modified` response without a body, saving bandwidth.
|
||||||
|
- Changes to a file on the server are immediately reflected in the browser - even when the cache control directive `max-age` is unexpired.
|
||||||
|
|
||||||
|
#### Disable the `etag`
|
||||||
|
|
||||||
|
To turn `etags` **off**, you must bypass cache:
|
||||||
|
|
||||||
|
```js
|
||||||
|
/* Turn etags off */
|
||||||
|
let cacheControl = {
|
||||||
|
bypassCache: true,
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Syntax and comparison context
|
||||||
|
|
||||||
|
`kv-asset-handler` sets and evaluates etags as [strong validators](https://developer.mozilla.org/en-US/docs/Web/HTTP/Conditional_requests#Strong_validation). To preserve `etag` integrity, the format of the value deviates from the [RFC2616 recommendation to enclose the `etag` with quotation marks](https://tools.ietf.org/html/rfc2616#section-3.11). This is intentional. Cloudflare cache applies the `W/` prefix to all `etags` that use quoted-strings -- a process that converts the `etag` to a "weak validator" when served to a client.
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
import { CacheControl, InternalError, MethodNotAllowedError, NotFoundError, Options } from "./types";
|
||||||
|
declare global {
|
||||||
|
var __STATIC_CONTENT: any, __STATIC_CONTENT_MANIFEST: string;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* maps the path of incoming request to the request pathKey to look up
|
||||||
|
* in bucket and in cache
|
||||||
|
* e.g. for a path '/' returns '/index.html' which serves
|
||||||
|
* the content of bucket/index.html
|
||||||
|
* @param {Request} request incoming request
|
||||||
|
*/
|
||||||
|
declare const mapRequestToAsset: (request: Request, options?: Partial<Options>) => Request;
|
||||||
|
/**
|
||||||
|
* maps the path of incoming request to /index.html if it evaluates to
|
||||||
|
* any HTML file.
|
||||||
|
* @param {Request} request incoming request
|
||||||
|
*/
|
||||||
|
declare function serveSinglePageApp(request: Request, options?: Partial<Options>): Request;
|
||||||
|
/**
|
||||||
|
* takes the path of the incoming request, gathers the appropriate content from KV, and returns
|
||||||
|
* the response
|
||||||
|
*
|
||||||
|
* @param {FetchEvent} event the fetch event of the triggered request
|
||||||
|
* @param {{mapRequestToAsset: (string: Request) => Request, cacheControl: {bypassCache:boolean, edgeTTL: number, browserTTL:number}, ASSET_NAMESPACE: any, ASSET_MANIFEST:any}} [options] configurable options
|
||||||
|
* @param {CacheControl} [options.cacheControl] determine how to cache on Cloudflare and the browser
|
||||||
|
* @param {typeof(options.mapRequestToAsset)} [options.mapRequestToAsset] maps the path of incoming request to the request pathKey to look up
|
||||||
|
* @param {Object | string} [options.ASSET_NAMESPACE] the binding to the namespace that script references
|
||||||
|
* @param {any} [options.ASSET_MANIFEST] the map of the key to cache and store in KV
|
||||||
|
* */
|
||||||
|
type Evt = {
|
||||||
|
request: Request;
|
||||||
|
waitUntil: (promise: Promise<any>) => void;
|
||||||
|
};
|
||||||
|
declare const getAssetFromKV: (event: Evt, options?: Partial<Options>) => Promise<Response>;
|
||||||
|
export { getAssetFromKV, mapRequestToAsset, serveSinglePageApp };
|
||||||
|
export { Options, CacheControl, MethodNotAllowedError, NotFoundError, InternalError, };
|
||||||
|
|
@ -0,0 +1,275 @@
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.InternalError = exports.NotFoundError = exports.MethodNotAllowedError = exports.serveSinglePageApp = exports.mapRequestToAsset = exports.getAssetFromKV = void 0;
|
||||||
|
const mime = require("mime");
|
||||||
|
const types_1 = require("./types");
|
||||||
|
Object.defineProperty(exports, "InternalError", { enumerable: true, get: function () { return types_1.InternalError; } });
|
||||||
|
Object.defineProperty(exports, "MethodNotAllowedError", { enumerable: true, get: function () { return types_1.MethodNotAllowedError; } });
|
||||||
|
Object.defineProperty(exports, "NotFoundError", { enumerable: true, get: function () { return types_1.NotFoundError; } });
|
||||||
|
const defaultCacheControl = {
|
||||||
|
browserTTL: null,
|
||||||
|
edgeTTL: 2 * 60 * 60 * 24,
|
||||||
|
bypassCache: false, // do not bypass Cloudflare's cache
|
||||||
|
};
|
||||||
|
const parseStringAsObject = (maybeString) => typeof maybeString === "string"
|
||||||
|
? JSON.parse(maybeString)
|
||||||
|
: maybeString;
|
||||||
|
const getAssetFromKVDefaultOptions = {
|
||||||
|
ASSET_NAMESPACE: typeof __STATIC_CONTENT !== "undefined" ? __STATIC_CONTENT : undefined,
|
||||||
|
ASSET_MANIFEST: typeof __STATIC_CONTENT_MANIFEST !== "undefined"
|
||||||
|
? parseStringAsObject(__STATIC_CONTENT_MANIFEST)
|
||||||
|
: {},
|
||||||
|
cacheControl: defaultCacheControl,
|
||||||
|
defaultMimeType: "text/plain",
|
||||||
|
defaultDocument: "index.html",
|
||||||
|
pathIsEncoded: false,
|
||||||
|
defaultETag: "strong",
|
||||||
|
};
|
||||||
|
function assignOptions(options) {
|
||||||
|
// Assign any missing options passed in to the default
|
||||||
|
// options.mapRequestToAsset is handled manually later
|
||||||
|
return Object.assign({}, getAssetFromKVDefaultOptions, options);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* maps the path of incoming request to the request pathKey to look up
|
||||||
|
* in bucket and in cache
|
||||||
|
* e.g. for a path '/' returns '/index.html' which serves
|
||||||
|
* the content of bucket/index.html
|
||||||
|
* @param {Request} request incoming request
|
||||||
|
*/
|
||||||
|
const mapRequestToAsset = (request, options) => {
|
||||||
|
options = assignOptions(options);
|
||||||
|
const parsedUrl = new URL(request.url);
|
||||||
|
let pathname = parsedUrl.pathname;
|
||||||
|
if (pathname.endsWith("/")) {
|
||||||
|
// If path looks like a directory append options.defaultDocument
|
||||||
|
// e.g. If path is /about/ -> /about/index.html
|
||||||
|
pathname = pathname.concat(options.defaultDocument);
|
||||||
|
}
|
||||||
|
else if (!mime.getType(pathname)) {
|
||||||
|
// If path doesn't look like valid content
|
||||||
|
// e.g. /about.me -> /about.me/index.html
|
||||||
|
pathname = pathname.concat("/" + options.defaultDocument);
|
||||||
|
}
|
||||||
|
parsedUrl.pathname = pathname;
|
||||||
|
return new Request(parsedUrl.toString(), request);
|
||||||
|
};
|
||||||
|
exports.mapRequestToAsset = mapRequestToAsset;
|
||||||
|
/**
|
||||||
|
* maps the path of incoming request to /index.html if it evaluates to
|
||||||
|
* any HTML file.
|
||||||
|
* @param {Request} request incoming request
|
||||||
|
*/
|
||||||
|
function serveSinglePageApp(request, options) {
|
||||||
|
options = assignOptions(options);
|
||||||
|
// First apply the default handler, which already has logic to detect
|
||||||
|
// paths that should map to HTML files.
|
||||||
|
request = mapRequestToAsset(request, options);
|
||||||
|
const parsedUrl = new URL(request.url);
|
||||||
|
// Detect if the default handler decided to map to
|
||||||
|
// a HTML file in some specific directory.
|
||||||
|
if (parsedUrl.pathname.endsWith(".html")) {
|
||||||
|
// If expected HTML file was missing, just return the root index.html (or options.defaultDocument)
|
||||||
|
return new Request(`${parsedUrl.origin}/${options.defaultDocument}`, request);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// The default handler decided this is not an HTML page. It's probably
|
||||||
|
// an image, CSS, or JS file. Leave it as-is.
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.serveSinglePageApp = serveSinglePageApp;
|
||||||
|
const getAssetFromKV = async (event, options) => {
|
||||||
|
options = assignOptions(options);
|
||||||
|
const request = event.request;
|
||||||
|
const ASSET_NAMESPACE = options.ASSET_NAMESPACE;
|
||||||
|
const ASSET_MANIFEST = parseStringAsObject(options.ASSET_MANIFEST);
|
||||||
|
if (typeof ASSET_NAMESPACE === "undefined") {
|
||||||
|
throw new types_1.InternalError(`there is no KV namespace bound to the script`);
|
||||||
|
}
|
||||||
|
const rawPathKey = new URL(request.url).pathname.replace(/^\/+/, ""); // strip any preceding /'s
|
||||||
|
let pathIsEncoded = options.pathIsEncoded;
|
||||||
|
let requestKey;
|
||||||
|
// if options.mapRequestToAsset is explicitly passed in, always use it and assume user has own intentions
|
||||||
|
// otherwise handle request as normal, with default mapRequestToAsset below
|
||||||
|
if (options.mapRequestToAsset) {
|
||||||
|
requestKey = options.mapRequestToAsset(request);
|
||||||
|
}
|
||||||
|
else if (ASSET_MANIFEST[rawPathKey]) {
|
||||||
|
requestKey = request;
|
||||||
|
}
|
||||||
|
else if (ASSET_MANIFEST[decodeURIComponent(rawPathKey)]) {
|
||||||
|
pathIsEncoded = true;
|
||||||
|
requestKey = request;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const mappedRequest = mapRequestToAsset(request);
|
||||||
|
const mappedRawPathKey = new URL(mappedRequest.url).pathname.replace(/^\/+/, "");
|
||||||
|
if (ASSET_MANIFEST[decodeURIComponent(mappedRawPathKey)]) {
|
||||||
|
pathIsEncoded = true;
|
||||||
|
requestKey = mappedRequest;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// use default mapRequestToAsset
|
||||||
|
requestKey = mapRequestToAsset(request, options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const SUPPORTED_METHODS = ["GET", "HEAD"];
|
||||||
|
if (!SUPPORTED_METHODS.includes(requestKey.method)) {
|
||||||
|
throw new types_1.MethodNotAllowedError(`${requestKey.method} is not a valid request method`);
|
||||||
|
}
|
||||||
|
const parsedUrl = new URL(requestKey.url);
|
||||||
|
const pathname = pathIsEncoded
|
||||||
|
? decodeURIComponent(parsedUrl.pathname)
|
||||||
|
: parsedUrl.pathname; // decode percentage encoded path only when necessary
|
||||||
|
// pathKey is the file path to look up in the manifest
|
||||||
|
let pathKey = pathname.replace(/^\/+/, ""); // remove prepended /
|
||||||
|
// @ts-ignore
|
||||||
|
const cache = caches.default;
|
||||||
|
let mimeType = mime.getType(pathKey) || options.defaultMimeType;
|
||||||
|
if (mimeType.startsWith("text") || mimeType === "application/javascript") {
|
||||||
|
mimeType += "; charset=utf-8";
|
||||||
|
}
|
||||||
|
let shouldEdgeCache = false; // false if storing in KV by raw file path i.e. no hash
|
||||||
|
// check manifest for map from file path to hash
|
||||||
|
if (typeof ASSET_MANIFEST !== "undefined") {
|
||||||
|
if (ASSET_MANIFEST[pathKey]) {
|
||||||
|
pathKey = ASSET_MANIFEST[pathKey];
|
||||||
|
// if path key is in asset manifest, we can assume it contains a content hash and can be cached
|
||||||
|
shouldEdgeCache = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// TODO this excludes search params from cache, investigate ideal behavior
|
||||||
|
let cacheKey = new Request(`${parsedUrl.origin}/${pathKey}`, request);
|
||||||
|
// if argument passed in for cacheControl is a function then
|
||||||
|
// evaluate that function. otherwise return the Object passed in
|
||||||
|
// or default Object
|
||||||
|
const evalCacheOpts = (() => {
|
||||||
|
switch (typeof options.cacheControl) {
|
||||||
|
case "function":
|
||||||
|
return options.cacheControl(request);
|
||||||
|
case "object":
|
||||||
|
return options.cacheControl;
|
||||||
|
default:
|
||||||
|
return defaultCacheControl;
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
// formats the etag depending on the response context. if the entityId
|
||||||
|
// is invalid, returns an empty string (instead of null) to prevent the
|
||||||
|
// the potentially disastrous scenario where the value of the Etag resp
|
||||||
|
// header is "null". Could be modified in future to base64 encode etc
|
||||||
|
const formatETag = (entityId = pathKey, validatorType = options.defaultETag) => {
|
||||||
|
if (!entityId) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
switch (validatorType) {
|
||||||
|
case "weak":
|
||||||
|
if (!entityId.startsWith("W/")) {
|
||||||
|
if (entityId.startsWith(`"`) && entityId.endsWith(`"`)) {
|
||||||
|
return `W/${entityId}`;
|
||||||
|
}
|
||||||
|
return `W/"${entityId}"`;
|
||||||
|
}
|
||||||
|
return entityId;
|
||||||
|
case "strong":
|
||||||
|
if (entityId.startsWith(`W/"`)) {
|
||||||
|
entityId = entityId.replace("W/", "");
|
||||||
|
}
|
||||||
|
if (!entityId.endsWith(`"`)) {
|
||||||
|
entityId = `"${entityId}"`;
|
||||||
|
}
|
||||||
|
return entityId;
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
options.cacheControl = Object.assign({}, defaultCacheControl, evalCacheOpts);
|
||||||
|
// override shouldEdgeCache if options say to bypassCache
|
||||||
|
if (options.cacheControl.bypassCache ||
|
||||||
|
options.cacheControl.edgeTTL === null ||
|
||||||
|
request.method == "HEAD") {
|
||||||
|
shouldEdgeCache = false;
|
||||||
|
}
|
||||||
|
// only set max-age if explicitly passed in a number as an arg
|
||||||
|
const shouldSetBrowserCache = typeof options.cacheControl.browserTTL === "number";
|
||||||
|
let response = null;
|
||||||
|
if (shouldEdgeCache) {
|
||||||
|
response = await cache.match(cacheKey);
|
||||||
|
}
|
||||||
|
if (response) {
|
||||||
|
if (response.status > 300 && response.status < 400) {
|
||||||
|
if (response.body && "cancel" in Object.getPrototypeOf(response.body)) {
|
||||||
|
// Body exists and environment supports readable streams
|
||||||
|
response.body.cancel();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Environment doesnt support readable streams, or null repsonse body. Nothing to do
|
||||||
|
}
|
||||||
|
response = new Response(null, response);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// fixes #165
|
||||||
|
let opts = {
|
||||||
|
headers: new Headers(response.headers),
|
||||||
|
status: 0,
|
||||||
|
statusText: "",
|
||||||
|
};
|
||||||
|
opts.headers.set("cf-cache-status", "HIT");
|
||||||
|
if (response.status) {
|
||||||
|
opts.status = response.status;
|
||||||
|
opts.statusText = response.statusText;
|
||||||
|
}
|
||||||
|
else if (opts.headers.has("Content-Range")) {
|
||||||
|
opts.status = 206;
|
||||||
|
opts.statusText = "Partial Content";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
opts.status = 200;
|
||||||
|
opts.statusText = "OK";
|
||||||
|
}
|
||||||
|
response = new Response(response.body, opts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const body = await ASSET_NAMESPACE.get(pathKey, "arrayBuffer");
|
||||||
|
if (body === null) {
|
||||||
|
throw new types_1.NotFoundError(`could not find ${pathKey} in your content namespace`);
|
||||||
|
}
|
||||||
|
response = new Response(body);
|
||||||
|
if (shouldEdgeCache) {
|
||||||
|
response.headers.set("Accept-Ranges", "bytes");
|
||||||
|
response.headers.set("Content-Length", String(body.byteLength));
|
||||||
|
// set etag before cache insertion
|
||||||
|
if (!response.headers.has("etag")) {
|
||||||
|
response.headers.set("etag", formatETag(pathKey));
|
||||||
|
}
|
||||||
|
// determine Cloudflare cache behavior
|
||||||
|
response.headers.set("Cache-Control", `max-age=${options.cacheControl.edgeTTL}`);
|
||||||
|
event.waitUntil(cache.put(cacheKey, response.clone()));
|
||||||
|
response.headers.set("CF-Cache-Status", "MISS");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
response.headers.set("Content-Type", mimeType);
|
||||||
|
if (response.status === 304) {
|
||||||
|
let etag = formatETag(response.headers.get("etag"));
|
||||||
|
let ifNoneMatch = cacheKey.headers.get("if-none-match");
|
||||||
|
let proxyCacheStatus = response.headers.get("CF-Cache-Status");
|
||||||
|
if (etag) {
|
||||||
|
if (ifNoneMatch && ifNoneMatch === etag && proxyCacheStatus === "MISS") {
|
||||||
|
response.headers.set("CF-Cache-Status", "EXPIRED");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
response.headers.set("CF-Cache-Status", "REVALIDATED");
|
||||||
|
}
|
||||||
|
response.headers.set("etag", formatETag(etag, "weak"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (shouldSetBrowserCache) {
|
||||||
|
response.headers.set("Cache-Control", `max-age=${options.cacheControl.browserTTL}`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
response.headers.delete("Cache-Control");
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
};
|
||||||
|
exports.getAssetFromKV = getAssetFromKV;
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
export declare const getEvent: (request: Request) => any;
|
||||||
|
export declare const mockKV: (store: any) => {
|
||||||
|
get: (path: string) => any;
|
||||||
|
};
|
||||||
|
export declare const mockManifest: () => string;
|
||||||
|
export declare const mockCaches: () => {
|
||||||
|
default: {
|
||||||
|
match(key: any): Promise<any>;
|
||||||
|
put(key: any, val: Response): Promise<void>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
export declare function mockRequestScope(): void;
|
||||||
|
export declare function mockGlobalScope(): void;
|
||||||
|
export declare const sleep: (milliseconds: number) => Promise<unknown>;
|
||||||
|
|
@ -0,0 +1,148 @@
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.sleep = exports.mockGlobalScope = exports.mockRequestScope = exports.mockCaches = exports.mockManifest = exports.mockKV = exports.getEvent = void 0;
|
||||||
|
const makeServiceWorkerEnv = require("service-worker-mock");
|
||||||
|
const HASH = "123HASHBROWN";
|
||||||
|
const getEvent = (request) => {
|
||||||
|
const waitUntil = async (callback) => {
|
||||||
|
await callback;
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
request,
|
||||||
|
waitUntil,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exports.getEvent = getEvent;
|
||||||
|
const store = {
|
||||||
|
"key1.123HASHBROWN.txt": "val1",
|
||||||
|
"key1.123HASHBROWN.png": "val1",
|
||||||
|
"index.123HASHBROWN.html": "index.html",
|
||||||
|
"cache.123HASHBROWN.html": "cache me if you can",
|
||||||
|
"测试.123HASHBROWN.html": "My filename is non-ascii",
|
||||||
|
"%not-really-percent-encoded.123HASHBROWN.html": "browser percent encoded",
|
||||||
|
"%2F.123HASHBROWN.html": "user percent encoded",
|
||||||
|
"你好.123HASHBROWN.html": "I shouldnt be served",
|
||||||
|
"%E4%BD%A0%E5%A5%BD.123HASHBROWN.html": "Im important",
|
||||||
|
"nohash.txt": "no hash but still got some result",
|
||||||
|
"sub/blah.123HASHBROWN.png": "picturedis",
|
||||||
|
"sub/index.123HASHBROWN.html": "picturedis",
|
||||||
|
"client.123HASHBROWN": "important file",
|
||||||
|
"client.123HASHBROWN/index.html": "Im here but serve my big bro above",
|
||||||
|
"image.123HASHBROWN.png": "imagepng",
|
||||||
|
"image.123HASHBROWN.webp": "imagewebp",
|
||||||
|
"你好/index.123HASHBROWN.html": "My path is non-ascii",
|
||||||
|
};
|
||||||
|
const mockKV = (store) => {
|
||||||
|
return {
|
||||||
|
get: (path) => store[path] || null,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exports.mockKV = mockKV;
|
||||||
|
const mockManifest = () => {
|
||||||
|
return JSON.stringify({
|
||||||
|
"key1.txt": `key1.${HASH}.txt`,
|
||||||
|
"key1.png": `key1.${HASH}.png`,
|
||||||
|
"cache.html": `cache.${HASH}.html`,
|
||||||
|
"测试.html": `测试.${HASH}.html`,
|
||||||
|
"你好.html": `你好.${HASH}.html`,
|
||||||
|
"%not-really-percent-encoded.html": `%not-really-percent-encoded.${HASH}.html`,
|
||||||
|
"%2F.html": `%2F.${HASH}.html`,
|
||||||
|
"%E4%BD%A0%E5%A5%BD.html": `%E4%BD%A0%E5%A5%BD.${HASH}.html`,
|
||||||
|
"index.html": `index.${HASH}.html`,
|
||||||
|
"sub/blah.png": `sub/blah.${HASH}.png`,
|
||||||
|
"sub/index.html": `sub/index.${HASH}.html`,
|
||||||
|
client: `client.${HASH}`,
|
||||||
|
"client/index.html": `client.${HASH}`,
|
||||||
|
"image.png": `image.${HASH}.png`,
|
||||||
|
"image.webp": `image.${HASH}.webp`,
|
||||||
|
"你好/index.html": `你好/index.${HASH}.html`,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
exports.mockManifest = mockManifest;
|
||||||
|
let cacheStore = new Map();
|
||||||
|
const mockCaches = () => {
|
||||||
|
return {
|
||||||
|
default: {
|
||||||
|
async match(key) {
|
||||||
|
let cacheKey = {
|
||||||
|
url: key.url,
|
||||||
|
headers: {},
|
||||||
|
};
|
||||||
|
let response;
|
||||||
|
if (key.headers.has("if-none-match")) {
|
||||||
|
let makeStrongEtag = key.headers
|
||||||
|
.get("if-none-match")
|
||||||
|
.replace("W/", "");
|
||||||
|
Reflect.set(cacheKey.headers, "etag", makeStrongEtag);
|
||||||
|
response = cacheStore.get(JSON.stringify(cacheKey));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// if client doesn't send if-none-match, we need to iterate through these keys
|
||||||
|
// and just test the URL
|
||||||
|
const activeCacheKeys = Array.from(cacheStore.keys());
|
||||||
|
for (const cacheStoreKey of activeCacheKeys) {
|
||||||
|
if (JSON.parse(cacheStoreKey).url === key.url) {
|
||||||
|
response = cacheStore.get(cacheStoreKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// TODO: write test to accomodate for rare scenarios with where range requests accomodate etags
|
||||||
|
if (response && !key.headers.has("if-none-match")) {
|
||||||
|
// this appears overly verbose, but is necessary to document edge cache behavior
|
||||||
|
// The Range request header triggers the response header Content-Range ...
|
||||||
|
const range = key.headers.get("range");
|
||||||
|
if (range) {
|
||||||
|
response.headers.set("content-range", `bytes ${range.split("=").pop()}/${response.headers.get("content-length")}`);
|
||||||
|
}
|
||||||
|
// ... which we are using in this repository to set status 206
|
||||||
|
if (response.headers.has("content-range")) {
|
||||||
|
response.status = 206;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
response.status = 200;
|
||||||
|
}
|
||||||
|
let etag = response.headers.get("etag");
|
||||||
|
if (etag && !etag.includes("W/")) {
|
||||||
|
response.headers.set("etag", `W/${etag}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
},
|
||||||
|
async put(key, val) {
|
||||||
|
let headers = new Headers(val.headers);
|
||||||
|
let url = new URL(key.url);
|
||||||
|
let resWithBody = new Response(val.body, { headers, status: 200 });
|
||||||
|
let resNoBody = new Response(null, { headers, status: 304 });
|
||||||
|
let cacheKey = {
|
||||||
|
url: key.url,
|
||||||
|
headers: {
|
||||||
|
etag: `"${url.pathname.replace("/", "")}"`,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
cacheStore.set(JSON.stringify(cacheKey), resNoBody);
|
||||||
|
cacheKey.headers = {};
|
||||||
|
cacheStore.set(JSON.stringify(cacheKey), resWithBody);
|
||||||
|
return;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
};
|
||||||
|
exports.mockCaches = mockCaches;
|
||||||
|
// mocks functionality used inside worker request
|
||||||
|
function mockRequestScope() {
|
||||||
|
Object.assign(global, makeServiceWorkerEnv());
|
||||||
|
Object.assign(global, { __STATIC_CONTENT_MANIFEST: (0, exports.mockManifest)() });
|
||||||
|
Object.assign(global, { __STATIC_CONTENT: (0, exports.mockKV)(store) });
|
||||||
|
Object.assign(global, { caches: (0, exports.mockCaches)() });
|
||||||
|
}
|
||||||
|
exports.mockRequestScope = mockRequestScope;
|
||||||
|
// mocks functionality used on global isolate scope. such as the KV namespace bind
|
||||||
|
function mockGlobalScope() {
|
||||||
|
Object.assign(global, { __STATIC_CONTENT_MANIFEST: (0, exports.mockManifest)() });
|
||||||
|
Object.assign(global, { __STATIC_CONTENT: (0, exports.mockKV)(store) });
|
||||||
|
}
|
||||||
|
exports.mockGlobalScope = mockGlobalScope;
|
||||||
|
const sleep = (milliseconds) => {
|
||||||
|
return new Promise((resolve) => setTimeout(resolve, milliseconds));
|
||||||
|
};
|
||||||
|
exports.sleep = sleep;
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
export type CacheControl = {
|
||||||
|
browserTTL: number;
|
||||||
|
edgeTTL: number;
|
||||||
|
bypassCache: boolean;
|
||||||
|
};
|
||||||
|
export type AssetManifestType = Record<string, string>;
|
||||||
|
export type Options = {
|
||||||
|
cacheControl: ((req: Request) => Partial<CacheControl>) | Partial<CacheControl>;
|
||||||
|
ASSET_NAMESPACE: any;
|
||||||
|
ASSET_MANIFEST: AssetManifestType | string;
|
||||||
|
mapRequestToAsset?: (req: Request, options?: Partial<Options>) => Request;
|
||||||
|
defaultMimeType: string;
|
||||||
|
defaultDocument: string;
|
||||||
|
pathIsEncoded: boolean;
|
||||||
|
defaultETag: "strong" | "weak";
|
||||||
|
};
|
||||||
|
export declare class KVError extends Error {
|
||||||
|
constructor(message?: string, status?: number);
|
||||||
|
status: number;
|
||||||
|
}
|
||||||
|
export declare class MethodNotAllowedError extends KVError {
|
||||||
|
constructor(message?: string, status?: number);
|
||||||
|
}
|
||||||
|
export declare class NotFoundError extends KVError {
|
||||||
|
constructor(message?: string, status?: number);
|
||||||
|
}
|
||||||
|
export declare class InternalError extends KVError {
|
||||||
|
constructor(message?: string, status?: number);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.InternalError = exports.NotFoundError = exports.MethodNotAllowedError = exports.KVError = void 0;
|
||||||
|
class KVError extends Error {
|
||||||
|
constructor(message, status = 500) {
|
||||||
|
super(message);
|
||||||
|
// see: typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html
|
||||||
|
Object.setPrototypeOf(this, new.target.prototype); // restore prototype chain
|
||||||
|
this.name = KVError.name; // stack traces display correctly now
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.KVError = KVError;
|
||||||
|
class MethodNotAllowedError extends KVError {
|
||||||
|
constructor(message = `Not a valid request method`, status = 405) {
|
||||||
|
super(message, status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.MethodNotAllowedError = MethodNotAllowedError;
|
||||||
|
class NotFoundError extends KVError {
|
||||||
|
constructor(message = `Not Found`, status = 404) {
|
||||||
|
super(message, status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.NotFoundError = NotFoundError;
|
||||||
|
class InternalError extends KVError {
|
||||||
|
constructor(message = `Internal Error in KV Asset Handler`, status = 500) {
|
||||||
|
super(message, status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.InternalError = InternalError;
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
{
|
||||||
|
"name": "@cloudflare/kv-asset-handler",
|
||||||
|
"version": "0.3.2",
|
||||||
|
"description": "Routes requests to KV assets",
|
||||||
|
"main": "dist/index.js",
|
||||||
|
"types": "dist/index.d.ts",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/cloudflare/workers-sdk.git",
|
||||||
|
"directory": "packages/kv-asset-handler"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"kv",
|
||||||
|
"cloudflare",
|
||||||
|
"workers",
|
||||||
|
"wrangler",
|
||||||
|
"assets"
|
||||||
|
],
|
||||||
|
"files": [
|
||||||
|
"src",
|
||||||
|
"dist",
|
||||||
|
"!src/test",
|
||||||
|
"!dist/test"
|
||||||
|
],
|
||||||
|
"author": "wrangler@cloudflare.com",
|
||||||
|
"license": "MIT OR Apache-2.0",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/cloudflare/workers-sdk/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/cloudflare/workers-sdk#readme",
|
||||||
|
"dependencies": {
|
||||||
|
"mime": "^3.0.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@ava/typescript": "^4.1.0",
|
||||||
|
"@cloudflare/workers-types": "^4.20240419.0",
|
||||||
|
"@types/mime": "^3.0.4",
|
||||||
|
"@types/node": "^18.11.12",
|
||||||
|
"ava": "^6.0.1",
|
||||||
|
"service-worker-mock": "^2.0.5"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.13"
|
||||||
|
},
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"workers-sdk": {
|
||||||
|
"prerelease": true
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc -d",
|
||||||
|
"pretest": "npm run build",
|
||||||
|
"test": "ava dist/test/*.js --verbose",
|
||||||
|
"test:ci": "npm run build && ava dist/test/*.js --verbose"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,355 @@
|
||||||
|
import * as mime from "mime";
|
||||||
|
import {
|
||||||
|
AssetManifestType,
|
||||||
|
CacheControl,
|
||||||
|
InternalError,
|
||||||
|
MethodNotAllowedError,
|
||||||
|
NotFoundError,
|
||||||
|
Options,
|
||||||
|
} from "./types";
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
var __STATIC_CONTENT: any, __STATIC_CONTENT_MANIFEST: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const defaultCacheControl: CacheControl = {
|
||||||
|
browserTTL: null,
|
||||||
|
edgeTTL: 2 * 60 * 60 * 24, // 2 days
|
||||||
|
bypassCache: false, // do not bypass Cloudflare's cache
|
||||||
|
};
|
||||||
|
|
||||||
|
const parseStringAsObject = <T>(maybeString: string | T): T =>
|
||||||
|
typeof maybeString === "string"
|
||||||
|
? (JSON.parse(maybeString) as T)
|
||||||
|
: maybeString;
|
||||||
|
|
||||||
|
const getAssetFromKVDefaultOptions: Partial<Options> = {
|
||||||
|
ASSET_NAMESPACE:
|
||||||
|
typeof __STATIC_CONTENT !== "undefined" ? __STATIC_CONTENT : undefined,
|
||||||
|
ASSET_MANIFEST:
|
||||||
|
typeof __STATIC_CONTENT_MANIFEST !== "undefined"
|
||||||
|
? parseStringAsObject<AssetManifestType>(__STATIC_CONTENT_MANIFEST)
|
||||||
|
: {},
|
||||||
|
cacheControl: defaultCacheControl,
|
||||||
|
defaultMimeType: "text/plain",
|
||||||
|
defaultDocument: "index.html",
|
||||||
|
pathIsEncoded: false,
|
||||||
|
defaultETag: "strong",
|
||||||
|
};
|
||||||
|
|
||||||
|
function assignOptions(options?: Partial<Options>): Options {
|
||||||
|
// Assign any missing options passed in to the default
|
||||||
|
// options.mapRequestToAsset is handled manually later
|
||||||
|
return <Options>Object.assign({}, getAssetFromKVDefaultOptions, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* maps the path of incoming request to the request pathKey to look up
|
||||||
|
* in bucket and in cache
|
||||||
|
* e.g. for a path '/' returns '/index.html' which serves
|
||||||
|
* the content of bucket/index.html
|
||||||
|
* @param {Request} request incoming request
|
||||||
|
*/
|
||||||
|
const mapRequestToAsset = (request: Request, options?: Partial<Options>) => {
|
||||||
|
options = assignOptions(options);
|
||||||
|
|
||||||
|
const parsedUrl = new URL(request.url);
|
||||||
|
let pathname = parsedUrl.pathname;
|
||||||
|
|
||||||
|
if (pathname.endsWith("/")) {
|
||||||
|
// If path looks like a directory append options.defaultDocument
|
||||||
|
// e.g. If path is /about/ -> /about/index.html
|
||||||
|
pathname = pathname.concat(options.defaultDocument);
|
||||||
|
} else if (!mime.getType(pathname)) {
|
||||||
|
// If path doesn't look like valid content
|
||||||
|
// e.g. /about.me -> /about.me/index.html
|
||||||
|
pathname = pathname.concat("/" + options.defaultDocument);
|
||||||
|
}
|
||||||
|
|
||||||
|
parsedUrl.pathname = pathname;
|
||||||
|
return new Request(parsedUrl.toString(), request);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* maps the path of incoming request to /index.html if it evaluates to
|
||||||
|
* any HTML file.
|
||||||
|
* @param {Request} request incoming request
|
||||||
|
*/
|
||||||
|
function serveSinglePageApp(
|
||||||
|
request: Request,
|
||||||
|
options?: Partial<Options>
|
||||||
|
): Request {
|
||||||
|
options = assignOptions(options);
|
||||||
|
|
||||||
|
// First apply the default handler, which already has logic to detect
|
||||||
|
// paths that should map to HTML files.
|
||||||
|
request = mapRequestToAsset(request, options);
|
||||||
|
|
||||||
|
const parsedUrl = new URL(request.url);
|
||||||
|
|
||||||
|
// Detect if the default handler decided to map to
|
||||||
|
// a HTML file in some specific directory.
|
||||||
|
if (parsedUrl.pathname.endsWith(".html")) {
|
||||||
|
// If expected HTML file was missing, just return the root index.html (or options.defaultDocument)
|
||||||
|
return new Request(
|
||||||
|
`${parsedUrl.origin}/${options.defaultDocument}`,
|
||||||
|
request
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// The default handler decided this is not an HTML page. It's probably
|
||||||
|
// an image, CSS, or JS file. Leave it as-is.
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* takes the path of the incoming request, gathers the appropriate content from KV, and returns
|
||||||
|
* the response
|
||||||
|
*
|
||||||
|
* @param {FetchEvent} event the fetch event of the triggered request
|
||||||
|
* @param {{mapRequestToAsset: (string: Request) => Request, cacheControl: {bypassCache:boolean, edgeTTL: number, browserTTL:number}, ASSET_NAMESPACE: any, ASSET_MANIFEST:any}} [options] configurable options
|
||||||
|
* @param {CacheControl} [options.cacheControl] determine how to cache on Cloudflare and the browser
|
||||||
|
* @param {typeof(options.mapRequestToAsset)} [options.mapRequestToAsset] maps the path of incoming request to the request pathKey to look up
|
||||||
|
* @param {Object | string} [options.ASSET_NAMESPACE] the binding to the namespace that script references
|
||||||
|
* @param {any} [options.ASSET_MANIFEST] the map of the key to cache and store in KV
|
||||||
|
* */
|
||||||
|
|
||||||
|
type Evt = {
|
||||||
|
request: Request;
|
||||||
|
waitUntil: (promise: Promise<any>) => void;
|
||||||
|
};
|
||||||
|
|
||||||
|
const getAssetFromKV = async (
|
||||||
|
event: Evt,
|
||||||
|
options?: Partial<Options>
|
||||||
|
): Promise<Response> => {
|
||||||
|
options = assignOptions(options);
|
||||||
|
|
||||||
|
const request = event.request;
|
||||||
|
const ASSET_NAMESPACE = options.ASSET_NAMESPACE;
|
||||||
|
const ASSET_MANIFEST = parseStringAsObject<AssetManifestType>(
|
||||||
|
options.ASSET_MANIFEST
|
||||||
|
);
|
||||||
|
|
||||||
|
if (typeof ASSET_NAMESPACE === "undefined") {
|
||||||
|
throw new InternalError(`there is no KV namespace bound to the script`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const rawPathKey = new URL(request.url).pathname.replace(/^\/+/, ""); // strip any preceding /'s
|
||||||
|
let pathIsEncoded = options.pathIsEncoded;
|
||||||
|
let requestKey;
|
||||||
|
// if options.mapRequestToAsset is explicitly passed in, always use it and assume user has own intentions
|
||||||
|
// otherwise handle request as normal, with default mapRequestToAsset below
|
||||||
|
if (options.mapRequestToAsset) {
|
||||||
|
requestKey = options.mapRequestToAsset(request);
|
||||||
|
} else if (ASSET_MANIFEST[rawPathKey]) {
|
||||||
|
requestKey = request;
|
||||||
|
} else if (ASSET_MANIFEST[decodeURIComponent(rawPathKey)]) {
|
||||||
|
pathIsEncoded = true;
|
||||||
|
requestKey = request;
|
||||||
|
} else {
|
||||||
|
const mappedRequest = mapRequestToAsset(request);
|
||||||
|
const mappedRawPathKey = new URL(mappedRequest.url).pathname.replace(
|
||||||
|
/^\/+/,
|
||||||
|
""
|
||||||
|
);
|
||||||
|
if (ASSET_MANIFEST[decodeURIComponent(mappedRawPathKey)]) {
|
||||||
|
pathIsEncoded = true;
|
||||||
|
requestKey = mappedRequest;
|
||||||
|
} else {
|
||||||
|
// use default mapRequestToAsset
|
||||||
|
requestKey = mapRequestToAsset(request, options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const SUPPORTED_METHODS = ["GET", "HEAD"];
|
||||||
|
if (!SUPPORTED_METHODS.includes(requestKey.method)) {
|
||||||
|
throw new MethodNotAllowedError(
|
||||||
|
`${requestKey.method} is not a valid request method`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const parsedUrl = new URL(requestKey.url);
|
||||||
|
const pathname = pathIsEncoded
|
||||||
|
? decodeURIComponent(parsedUrl.pathname)
|
||||||
|
: parsedUrl.pathname; // decode percentage encoded path only when necessary
|
||||||
|
|
||||||
|
// pathKey is the file path to look up in the manifest
|
||||||
|
let pathKey = pathname.replace(/^\/+/, ""); // remove prepended /
|
||||||
|
|
||||||
|
// @ts-ignore
|
||||||
|
const cache = caches.default;
|
||||||
|
let mimeType = mime.getType(pathKey) || options.defaultMimeType;
|
||||||
|
if (mimeType.startsWith("text") || mimeType === "application/javascript") {
|
||||||
|
mimeType += "; charset=utf-8";
|
||||||
|
}
|
||||||
|
|
||||||
|
let shouldEdgeCache = false; // false if storing in KV by raw file path i.e. no hash
|
||||||
|
// check manifest for map from file path to hash
|
||||||
|
if (typeof ASSET_MANIFEST !== "undefined") {
|
||||||
|
if (ASSET_MANIFEST[pathKey]) {
|
||||||
|
pathKey = ASSET_MANIFEST[pathKey];
|
||||||
|
// if path key is in asset manifest, we can assume it contains a content hash and can be cached
|
||||||
|
shouldEdgeCache = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO this excludes search params from cache, investigate ideal behavior
|
||||||
|
let cacheKey = new Request(`${parsedUrl.origin}/${pathKey}`, request);
|
||||||
|
|
||||||
|
// if argument passed in for cacheControl is a function then
|
||||||
|
// evaluate that function. otherwise return the Object passed in
|
||||||
|
// or default Object
|
||||||
|
const evalCacheOpts = (() => {
|
||||||
|
switch (typeof options.cacheControl) {
|
||||||
|
case "function":
|
||||||
|
return options.cacheControl(request);
|
||||||
|
case "object":
|
||||||
|
return options.cacheControl;
|
||||||
|
default:
|
||||||
|
return defaultCacheControl;
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
// formats the etag depending on the response context. if the entityId
|
||||||
|
// is invalid, returns an empty string (instead of null) to prevent the
|
||||||
|
// the potentially disastrous scenario where the value of the Etag resp
|
||||||
|
// header is "null". Could be modified in future to base64 encode etc
|
||||||
|
const formatETag = (
|
||||||
|
entityId: any = pathKey,
|
||||||
|
validatorType: string = options.defaultETag
|
||||||
|
) => {
|
||||||
|
if (!entityId) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
switch (validatorType) {
|
||||||
|
case "weak":
|
||||||
|
if (!entityId.startsWith("W/")) {
|
||||||
|
if (entityId.startsWith(`"`) && entityId.endsWith(`"`)) {
|
||||||
|
return `W/${entityId}`;
|
||||||
|
}
|
||||||
|
return `W/"${entityId}"`;
|
||||||
|
}
|
||||||
|
return entityId;
|
||||||
|
case "strong":
|
||||||
|
if (entityId.startsWith(`W/"`)) {
|
||||||
|
entityId = entityId.replace("W/", "");
|
||||||
|
}
|
||||||
|
if (!entityId.endsWith(`"`)) {
|
||||||
|
entityId = `"${entityId}"`;
|
||||||
|
}
|
||||||
|
return entityId;
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
options.cacheControl = Object.assign({}, defaultCacheControl, evalCacheOpts);
|
||||||
|
|
||||||
|
// override shouldEdgeCache if options say to bypassCache
|
||||||
|
if (
|
||||||
|
options.cacheControl.bypassCache ||
|
||||||
|
options.cacheControl.edgeTTL === null ||
|
||||||
|
request.method == "HEAD"
|
||||||
|
) {
|
||||||
|
shouldEdgeCache = false;
|
||||||
|
}
|
||||||
|
// only set max-age if explicitly passed in a number as an arg
|
||||||
|
const shouldSetBrowserCache =
|
||||||
|
typeof options.cacheControl.browserTTL === "number";
|
||||||
|
|
||||||
|
let response = null;
|
||||||
|
if (shouldEdgeCache) {
|
||||||
|
response = await cache.match(cacheKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response) {
|
||||||
|
if (response.status > 300 && response.status < 400) {
|
||||||
|
if (response.body && "cancel" in Object.getPrototypeOf(response.body)) {
|
||||||
|
// Body exists and environment supports readable streams
|
||||||
|
response.body.cancel();
|
||||||
|
} else {
|
||||||
|
// Environment doesnt support readable streams, or null repsonse body. Nothing to do
|
||||||
|
}
|
||||||
|
response = new Response(null, response);
|
||||||
|
} else {
|
||||||
|
// fixes #165
|
||||||
|
let opts = {
|
||||||
|
headers: new Headers(response.headers),
|
||||||
|
status: 0,
|
||||||
|
statusText: "",
|
||||||
|
};
|
||||||
|
|
||||||
|
opts.headers.set("cf-cache-status", "HIT");
|
||||||
|
|
||||||
|
if (response.status) {
|
||||||
|
opts.status = response.status;
|
||||||
|
opts.statusText = response.statusText;
|
||||||
|
} else if (opts.headers.has("Content-Range")) {
|
||||||
|
opts.status = 206;
|
||||||
|
opts.statusText = "Partial Content";
|
||||||
|
} else {
|
||||||
|
opts.status = 200;
|
||||||
|
opts.statusText = "OK";
|
||||||
|
}
|
||||||
|
response = new Response(response.body, opts);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const body = await ASSET_NAMESPACE.get(pathKey, "arrayBuffer");
|
||||||
|
if (body === null) {
|
||||||
|
throw new NotFoundError(
|
||||||
|
`could not find ${pathKey} in your content namespace`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
response = new Response(body);
|
||||||
|
|
||||||
|
if (shouldEdgeCache) {
|
||||||
|
response.headers.set("Accept-Ranges", "bytes");
|
||||||
|
response.headers.set("Content-Length", String(body.byteLength));
|
||||||
|
// set etag before cache insertion
|
||||||
|
if (!response.headers.has("etag")) {
|
||||||
|
response.headers.set("etag", formatETag(pathKey));
|
||||||
|
}
|
||||||
|
// determine Cloudflare cache behavior
|
||||||
|
response.headers.set(
|
||||||
|
"Cache-Control",
|
||||||
|
`max-age=${options.cacheControl.edgeTTL}`
|
||||||
|
);
|
||||||
|
event.waitUntil(cache.put(cacheKey, response.clone()));
|
||||||
|
response.headers.set("CF-Cache-Status", "MISS");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
response.headers.set("Content-Type", mimeType);
|
||||||
|
|
||||||
|
if (response.status === 304) {
|
||||||
|
let etag = formatETag(response.headers.get("etag"));
|
||||||
|
let ifNoneMatch = cacheKey.headers.get("if-none-match");
|
||||||
|
let proxyCacheStatus = response.headers.get("CF-Cache-Status");
|
||||||
|
if (etag) {
|
||||||
|
if (ifNoneMatch && ifNoneMatch === etag && proxyCacheStatus === "MISS") {
|
||||||
|
response.headers.set("CF-Cache-Status", "EXPIRED");
|
||||||
|
} else {
|
||||||
|
response.headers.set("CF-Cache-Status", "REVALIDATED");
|
||||||
|
}
|
||||||
|
response.headers.set("etag", formatETag(etag, "weak"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (shouldSetBrowserCache) {
|
||||||
|
response.headers.set(
|
||||||
|
"Cache-Control",
|
||||||
|
`max-age=${options.cacheControl.browserTTL}`
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
response.headers.delete("Cache-Control");
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
};
|
||||||
|
|
||||||
|
export { getAssetFromKV, mapRequestToAsset, serveSinglePageApp };
|
||||||
|
export {
|
||||||
|
Options,
|
||||||
|
CacheControl,
|
||||||
|
MethodNotAllowedError,
|
||||||
|
NotFoundError,
|
||||||
|
InternalError,
|
||||||
|
};
|
||||||
|
|
@ -0,0 +1,152 @@
|
||||||
|
const makeServiceWorkerEnv = require("service-worker-mock");
|
||||||
|
|
||||||
|
const HASH = "123HASHBROWN";
|
||||||
|
|
||||||
|
export const getEvent = (request: Request): any => {
|
||||||
|
const waitUntil = async (callback: any) => {
|
||||||
|
await callback;
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
request,
|
||||||
|
waitUntil,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
const store: any = {
|
||||||
|
"key1.123HASHBROWN.txt": "val1",
|
||||||
|
"key1.123HASHBROWN.png": "val1",
|
||||||
|
"index.123HASHBROWN.html": "index.html",
|
||||||
|
"cache.123HASHBROWN.html": "cache me if you can",
|
||||||
|
"测试.123HASHBROWN.html": "My filename is non-ascii",
|
||||||
|
"%not-really-percent-encoded.123HASHBROWN.html": "browser percent encoded",
|
||||||
|
"%2F.123HASHBROWN.html": "user percent encoded",
|
||||||
|
"你好.123HASHBROWN.html": "I shouldnt be served",
|
||||||
|
"%E4%BD%A0%E5%A5%BD.123HASHBROWN.html": "Im important",
|
||||||
|
"nohash.txt": "no hash but still got some result",
|
||||||
|
"sub/blah.123HASHBROWN.png": "picturedis",
|
||||||
|
"sub/index.123HASHBROWN.html": "picturedis",
|
||||||
|
"client.123HASHBROWN": "important file",
|
||||||
|
"client.123HASHBROWN/index.html": "Im here but serve my big bro above",
|
||||||
|
"image.123HASHBROWN.png": "imagepng",
|
||||||
|
"image.123HASHBROWN.webp": "imagewebp",
|
||||||
|
"你好/index.123HASHBROWN.html": "My path is non-ascii",
|
||||||
|
};
|
||||||
|
export const mockKV = (store: any) => {
|
||||||
|
return {
|
||||||
|
get: (path: string) => store[path] || null,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export const mockManifest = () => {
|
||||||
|
return JSON.stringify({
|
||||||
|
"key1.txt": `key1.${HASH}.txt`,
|
||||||
|
"key1.png": `key1.${HASH}.png`,
|
||||||
|
"cache.html": `cache.${HASH}.html`,
|
||||||
|
"测试.html": `测试.${HASH}.html`,
|
||||||
|
"你好.html": `你好.${HASH}.html`,
|
||||||
|
"%not-really-percent-encoded.html": `%not-really-percent-encoded.${HASH}.html`,
|
||||||
|
"%2F.html": `%2F.${HASH}.html`,
|
||||||
|
"%E4%BD%A0%E5%A5%BD.html": `%E4%BD%A0%E5%A5%BD.${HASH}.html`,
|
||||||
|
"index.html": `index.${HASH}.html`,
|
||||||
|
"sub/blah.png": `sub/blah.${HASH}.png`,
|
||||||
|
"sub/index.html": `sub/index.${HASH}.html`,
|
||||||
|
client: `client.${HASH}`,
|
||||||
|
"client/index.html": `client.${HASH}`,
|
||||||
|
"image.png": `image.${HASH}.png`,
|
||||||
|
"image.webp": `image.${HASH}.webp`,
|
||||||
|
"你好/index.html": `你好/index.${HASH}.html`,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
let cacheStore: any = new Map();
|
||||||
|
interface CacheKey {
|
||||||
|
url: object;
|
||||||
|
headers: object;
|
||||||
|
}
|
||||||
|
export const mockCaches = () => {
|
||||||
|
return {
|
||||||
|
default: {
|
||||||
|
async match(key: any) {
|
||||||
|
let cacheKey: CacheKey = {
|
||||||
|
url: key.url,
|
||||||
|
headers: {},
|
||||||
|
};
|
||||||
|
let response;
|
||||||
|
if (key.headers.has("if-none-match")) {
|
||||||
|
let makeStrongEtag = key.headers
|
||||||
|
.get("if-none-match")
|
||||||
|
.replace("W/", "");
|
||||||
|
Reflect.set(cacheKey.headers, "etag", makeStrongEtag);
|
||||||
|
response = cacheStore.get(JSON.stringify(cacheKey));
|
||||||
|
} else {
|
||||||
|
// if client doesn't send if-none-match, we need to iterate through these keys
|
||||||
|
// and just test the URL
|
||||||
|
const activeCacheKeys: Array<string> = Array.from(cacheStore.keys());
|
||||||
|
for (const cacheStoreKey of activeCacheKeys) {
|
||||||
|
if (JSON.parse(cacheStoreKey).url === key.url) {
|
||||||
|
response = cacheStore.get(cacheStoreKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// TODO: write test to accomodate for rare scenarios with where range requests accomodate etags
|
||||||
|
if (response && !key.headers.has("if-none-match")) {
|
||||||
|
// this appears overly verbose, but is necessary to document edge cache behavior
|
||||||
|
// The Range request header triggers the response header Content-Range ...
|
||||||
|
const range = key.headers.get("range");
|
||||||
|
if (range) {
|
||||||
|
response.headers.set(
|
||||||
|
"content-range",
|
||||||
|
`bytes ${range.split("=").pop()}/${response.headers.get(
|
||||||
|
"content-length"
|
||||||
|
)}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// ... which we are using in this repository to set status 206
|
||||||
|
if (response.headers.has("content-range")) {
|
||||||
|
response.status = 206;
|
||||||
|
} else {
|
||||||
|
response.status = 200;
|
||||||
|
}
|
||||||
|
let etag = response.headers.get("etag");
|
||||||
|
if (etag && !etag.includes("W/")) {
|
||||||
|
response.headers.set("etag", `W/${etag}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
},
|
||||||
|
async put(key: any, val: Response) {
|
||||||
|
let headers = new Headers(val.headers);
|
||||||
|
let url = new URL(key.url);
|
||||||
|
let resWithBody = new Response(val.body, { headers, status: 200 });
|
||||||
|
let resNoBody = new Response(null, { headers, status: 304 });
|
||||||
|
let cacheKey: CacheKey = {
|
||||||
|
url: key.url,
|
||||||
|
headers: {
|
||||||
|
etag: `"${url.pathname.replace("/", "")}"`,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
cacheStore.set(JSON.stringify(cacheKey), resNoBody);
|
||||||
|
cacheKey.headers = {};
|
||||||
|
cacheStore.set(JSON.stringify(cacheKey), resWithBody);
|
||||||
|
return;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// mocks functionality used inside worker request
|
||||||
|
export function mockRequestScope() {
|
||||||
|
Object.assign(global, makeServiceWorkerEnv());
|
||||||
|
Object.assign(global, { __STATIC_CONTENT_MANIFEST: mockManifest() });
|
||||||
|
Object.assign(global, { __STATIC_CONTENT: mockKV(store) });
|
||||||
|
Object.assign(global, { caches: mockCaches() });
|
||||||
|
}
|
||||||
|
|
||||||
|
// mocks functionality used on global isolate scope. such as the KV namespace bind
|
||||||
|
export function mockGlobalScope() {
|
||||||
|
Object.assign(global, { __STATIC_CONTENT_MANIFEST: mockManifest() });
|
||||||
|
Object.assign(global, { __STATIC_CONTENT: mockKV(store) });
|
||||||
|
}
|
||||||
|
|
||||||
|
export const sleep = (milliseconds: number) => {
|
||||||
|
return new Promise((resolve) => setTimeout(resolve, milliseconds));
|
||||||
|
};
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
export type CacheControl = {
|
||||||
|
browserTTL: number;
|
||||||
|
edgeTTL: number;
|
||||||
|
bypassCache: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type AssetManifestType = Record<string, string>;
|
||||||
|
|
||||||
|
export type Options = {
|
||||||
|
cacheControl:
|
||||||
|
| ((req: Request) => Partial<CacheControl>)
|
||||||
|
| Partial<CacheControl>;
|
||||||
|
ASSET_NAMESPACE: any;
|
||||||
|
ASSET_MANIFEST: AssetManifestType | string;
|
||||||
|
mapRequestToAsset?: (req: Request, options?: Partial<Options>) => Request;
|
||||||
|
defaultMimeType: string;
|
||||||
|
defaultDocument: string;
|
||||||
|
pathIsEncoded: boolean;
|
||||||
|
defaultETag: "strong" | "weak";
|
||||||
|
};
|
||||||
|
|
||||||
|
export class KVError extends Error {
|
||||||
|
constructor(message?: string, status: number = 500) {
|
||||||
|
super(message);
|
||||||
|
// see: typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html
|
||||||
|
Object.setPrototypeOf(this, new.target.prototype); // restore prototype chain
|
||||||
|
this.name = KVError.name; // stack traces display correctly now
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
status: number;
|
||||||
|
}
|
||||||
|
export class MethodNotAllowedError extends KVError {
|
||||||
|
constructor(
|
||||||
|
message: string = `Not a valid request method`,
|
||||||
|
status: number = 405
|
||||||
|
) {
|
||||||
|
super(message, status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export class NotFoundError extends KVError {
|
||||||
|
constructor(message: string = `Not Found`, status: number = 404) {
|
||||||
|
super(message, status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export class InternalError extends KVError {
|
||||||
|
constructor(
|
||||||
|
message: string = `Internal Error in KV Asset Handler`,
|
||||||
|
status: number = 500
|
||||||
|
) {
|
||||||
|
super(message, status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
# 👷 `workerd` for macOS ARM 64-bit, Cloudflare's JavaScript/Wasm Runtime
|
||||||
|
|
||||||
|
`workerd` is a JavaScript / Wasm server runtime based on the same code that powers
|
||||||
|
[Cloudflare Workers](https://workers.dev).
|
||||||
|
|
||||||
|
See https://github.com/cloudflare/workerd for details.
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"name": "@cloudflare/workerd-darwin-arm64",
|
||||||
|
"description": "👷 workerd for macOS ARM 64-bit, Cloudflare's JavaScript/Wasm Runtime",
|
||||||
|
"repository": "https://github.com/cloudflare/workerd",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"preferUnplugged": false,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16"
|
||||||
|
},
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
],
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"version": "1.20240419.0"
|
||||||
|
}
|
||||||
4848
node_modules/@cloudflare/workers-types/2021-11-03/index.d.ts
generated
vendored
Executable file
4848
node_modules/@cloudflare/workers-types/2021-11-03/index.d.ts
generated
vendored
Executable file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
4874
node_modules/@cloudflare/workers-types/2022-01-31/index.d.ts
generated
vendored
Executable file
4874
node_modules/@cloudflare/workers-types/2022-01-31/index.d.ts
generated
vendored
Executable file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
4900
node_modules/@cloudflare/workers-types/2022-03-21/index.d.ts
generated
vendored
Executable file
4900
node_modules/@cloudflare/workers-types/2022-03-21/index.d.ts
generated
vendored
Executable file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
4901
node_modules/@cloudflare/workers-types/2022-08-04/index.d.ts
generated
vendored
Executable file
4901
node_modules/@cloudflare/workers-types/2022-08-04/index.d.ts
generated
vendored
Executable file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
4900
node_modules/@cloudflare/workers-types/2022-10-31/index.d.ts
generated
vendored
Executable file
4900
node_modules/@cloudflare/workers-types/2022-10-31/index.d.ts
generated
vendored
Executable file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
4896
node_modules/@cloudflare/workers-types/2022-11-30/index.d.ts
generated
vendored
Executable file
4896
node_modules/@cloudflare/workers-types/2022-11-30/index.d.ts
generated
vendored
Executable file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
4897
node_modules/@cloudflare/workers-types/2023-03-01/index.d.ts
generated
vendored
Executable file
4897
node_modules/@cloudflare/workers-types/2023-03-01/index.d.ts
generated
vendored
Executable file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
4897
node_modules/@cloudflare/workers-types/2023-07-01/index.d.ts
generated
vendored
Executable file
4897
node_modules/@cloudflare/workers-types/2023-07-01/index.d.ts
generated
vendored
Executable file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,128 @@
|
||||||
|
# Cloudflare Workers Types
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install -D @cloudflare/workers-types
|
||||||
|
-- Or
|
||||||
|
yarn add -D @cloudflare/workers-types
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
The following is a minimal `tsconfig.json` for use alongside this package:
|
||||||
|
|
||||||
|
**`tsconfig.json`**
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "esnext",
|
||||||
|
"module": "esnext",
|
||||||
|
"lib": ["esnext"],
|
||||||
|
"types": ["@cloudflare/workers-types"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Compatibility dates
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The Cloudflare Workers runtime manages backwards compatibility through the use of [Compatibility Dates](https://developers.cloudflare.com/workers/platform/compatibility-dates/). Using different compatibility dates affects the runtime types available to your Worker, and so it's important you specify the correct entrypoint to the `workers-types` package to match your compatibility date (which is usually set in your `wrangler.toml` configuration file). `workers-types` currently exposes the following entrypoints to choose from:
|
||||||
|
|
||||||
|
- `@cloudflare/workers-types`
|
||||||
|
|
||||||
|
The default entrypoint exposes the runtime types for a compatibility date before `2021-11-03`.
|
||||||
|
|
||||||
|
- `@cloudflare/workers-types/2021-11-03`
|
||||||
|
|
||||||
|
This entrypoint exposes the runtime types for a compatibility date between `2021-11-03` and `2022-01-31`.
|
||||||
|
|
||||||
|
- `@cloudflare/workers-types/2022-01-31`
|
||||||
|
|
||||||
|
This entrypoint exposes the runtime types for a compatibility date between `2022-01-31` and `2022-03-21`.
|
||||||
|
|
||||||
|
- `@cloudflare/workers-types/2022-03-21`
|
||||||
|
|
||||||
|
This entrypoint exposes the runtime types for a compatibility date between `2022-03-21` and `2022-08-04`.
|
||||||
|
|
||||||
|
- `@cloudflare/workers-types/2022-08-04`
|
||||||
|
|
||||||
|
This entrypoint exposes the runtime types for a compatibility date between `2022-08-04` and `2022-10-31`.
|
||||||
|
|
||||||
|
- `@cloudflare/workers-types/2022-10-31`
|
||||||
|
|
||||||
|
This entrypoint exposes the runtime types for a compatibility date between `2022-10-31` and `2022-11-30`.
|
||||||
|
|
||||||
|
- `@cloudflare/workers-types/2022-11-30`
|
||||||
|
|
||||||
|
This entrypoint exposes the runtime types for a compatibility date between `2022-11-30` and `2023-03-01`.
|
||||||
|
|
||||||
|
- `@cloudflare/workers-types/2023-03-01`
|
||||||
|
|
||||||
|
This entrypoint exposes the runtime types for a compatibility date between `2023-03-01` and `2023-07-01`.
|
||||||
|
|
||||||
|
- `@cloudflare/workers-types/2023-07-01`
|
||||||
|
|
||||||
|
This entrypoint exposes the runtime types for a compatibility date after `2023-07-01`.
|
||||||
|
|
||||||
|
- `@cloudflare/workers-types/experimental`
|
||||||
|
|
||||||
|
This entrypoint exposes the runtime types for the latest compatibility date. The types exposed by this entrypoint will change over time to always reflect the latest version of the Workers runtime.
|
||||||
|
|
||||||
|
To use one of these entrypoints, you need to specify them in your `tsconfig.json`. For example, this is a sample `tsconfig.json` for using the `2022-08-04` entrypoint.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "esnext",
|
||||||
|
"module": "esnext",
|
||||||
|
"lib": ["esnext"],
|
||||||
|
"types": ["@cloudflare/workers-types/2022-08-04"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Importable Types
|
||||||
|
|
||||||
|
It's not always possible (or desirable) to modify the `tsconfig.json` settings for a project to include all the Cloudflare Workers types. For use cases like that, this package provides importable versions of its types, which are usable with no additional `tsconfig.json` setup. For example:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import type { Request as WorkerRequest, ExecutionContext } from "@cloudflare/workers-types/experimental"
|
||||||
|
|
||||||
|
export default {
|
||||||
|
fetch(request: WorkerRequest, env: unknown, ctx: ExecutionContext) {
|
||||||
|
return new Response("OK")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Using bindings
|
||||||
|
|
||||||
|
It's recommended that you create a type file for any bindings your Worker uses. Create a file named
|
||||||
|
`worker-configuration.d.ts` in your src directory.
|
||||||
|
|
||||||
|
If you're using Module Workers, it should look like this:
|
||||||
|
```typescript
|
||||||
|
// worker-configuration.d.ts
|
||||||
|
interface Env {
|
||||||
|
MY_ENV_VAR: string;
|
||||||
|
MY_SECRET: string;
|
||||||
|
myKVNamespace: KVNamespace;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
For Service Workers, it should augment the global scope:
|
||||||
|
```typescript
|
||||||
|
// worker-configuration.d.ts
|
||||||
|
declare global {
|
||||||
|
const MY_ENV_VAR: string;
|
||||||
|
const MY_SECRET: string;
|
||||||
|
const myKVNamespace: KVNamespace;
|
||||||
|
}
|
||||||
|
export {}
|
||||||
|
```
|
||||||
|
|
||||||
|
Wrangler can also generate this for you automatically from your `wrangler.toml` configuration file, using the `wrangler types` command.
|
||||||
|
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<svg viewBox="0 0 540 280" width="540px" height="280px" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<rect width="540" height="280" style="fill: rgb(255, 255, 255);"/>
|
||||||
|
<g transform="matrix(1, 0, 0, 1, 61.018997, -319.418854)">
|
||||||
|
<rect x="128.981" y="349.42" width="340" height="30" style="fill: rgb(238, 238, 238);"/>
|
||||||
|
<text style="font-family: monospace; font-size: 14px; white-space: pre;" x="135.709" y="369.298">@cloudflare/workers-types</text>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1, 0, 0, 1, 61.018997, -289.418793)">
|
||||||
|
<rect x="128.981" y="349.42" width="340" height="30" style="fill: rgb(221, 221, 221);"/>
|
||||||
|
<text style="font-family: monospace; font-size: 14px; white-space: pre;"><tspan x="135.709" y="369.298">@cloudflare/workers-types/</tspan><tspan style="fill: rgb(0, 85, 220); font-weight: 700;">2021-11-03</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1, 0, 0, 1, 61.018997, -259.418793)">
|
||||||
|
<rect x="128.981" y="349.42" width="340" height="30" style="fill: rgb(238, 238, 238);"/>
|
||||||
|
<text style="font-family: monospace; font-size: 14px; white-space: pre;"><tspan x="135.709" y="369.298">@cloudflare/workers-types/</tspan><tspan style="fill: rgb(0, 54, 130); font-weight: 700;">2022-01-31</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1, 0, 0, 1, 61.018997, -229.418869)">
|
||||||
|
<rect x="128.981" y="349.42" width="340" height="30" style="fill: rgb(221, 221, 221);"/>
|
||||||
|
<text style="font-family: monospace; font-size: 14px; white-space: pre;"><tspan x="135.709" y="369.298">@cloudflare/workers-types/</tspan><tspan style="fill: rgb(0, 85, 220); font-weight: 700;">2022-03-21</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1, 0, 0, 1, 61.018997, -199.418839)">
|
||||||
|
<rect x="128.981" y="349.42" width="340" height="30" style="fill: rgb(238, 238, 238);"/>
|
||||||
|
<text style="font-family: monospace; font-size: 14px; white-space: pre;"><tspan x="135.709" y="369.298">@cloudflare/workers-types/</tspan><tspan style="fill: rgb(0, 54, 130); font-weight: 700;">2022-08-04</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1, 0, 0, 1, 61.018997, -169.418839)">
|
||||||
|
<rect x="128.981" y="349.42" width="340" height="30" style="fill: rgb(221, 221, 221);"/>
|
||||||
|
<text style="font-family: monospace; font-size: 14px; white-space: pre;"><tspan x="135.709" y="369.298">@cloudflare/workers-types/</tspan><tspan style="fill: rgb(0, 85, 220); font-weight: 700;">2022-10-31</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1, 0, 0, 1, 61.017925, -139.418854)">
|
||||||
|
<rect x="128.981" y="349.42" width="340" height="30" style="fill: rgb(238, 238, 238);"/>
|
||||||
|
<text style="font-family: monospace; font-size: 14px; white-space: pre;"><tspan x="135.709" y="369.298">@cloudflare/workers-types/</tspan><tspan style="fill: rgb(0, 54, 130); font-weight: 700;">2022-11-30</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1, 0, 0, 1, 61.017925, -109.418816)">
|
||||||
|
<rect x="128.981" y="349.42" width="340" height="30" style="fill: rgb(221, 221, 221);"/>
|
||||||
|
<text style="font-family: monospace; font-size: 14px; white-space: pre;" x="135.709" y="369.298">@cloudflare/workers-types/experimental</text>
|
||||||
|
</g>
|
||||||
|
<line style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0);" x1="160" y1="60" x2="190" y2="60"/>
|
||||||
|
<line style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0);" x1="160" y1="90" x2="190" y2="90"/>
|
||||||
|
<line style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0);" x1="160" y1="120" x2="190" y2="120"/>
|
||||||
|
<line style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0);" x1="160" y1="150" x2="190" y2="150"/>
|
||||||
|
<line style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0);" x1="160" y1="180" x2="190" y2="180"/>
|
||||||
|
<line style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0);" x1="160" y1="210" x2="190" y2="210"/>
|
||||||
|
<line style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0);" x1="175" y1="60" x2="175" y2="240"/>
|
||||||
|
<line style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0); stroke-dasharray: 2px;" x1="175" y1="30" x2="175" y2="60"/>
|
||||||
|
<line style="fill: rgb(216, 216, 216); stroke: rgb(0, 0, 0); stroke-dasharray: 2px;" x1="175" y1="240" x2="175" y2="270"/>
|
||||||
|
<text style="fill: rgb(51, 51, 51); font-family: monospace; font-size: 14px; font-weight: 700; text-anchor: middle; white-space: pre;" transform="matrix(1, 0, 0, 1, 307.347992, -77.253761)"><tspan x="52.652" y="98.052">types Entrypoint</tspan></text>
|
||||||
|
<text style="fill: rgb(51, 51, 51); font-family: monospace; font-size: 14px; font-weight: 700; text-anchor: end; white-space: pre;" x="157.185" y="20.798">compatibility_date</text>
|
||||||
|
<text style="fill: rgb(0, 85, 220); font-family: monospace; font-size: 14px; font-weight: 700; text-anchor: end; white-space: pre;" x="153.994" y="64.798">2021-11-03</text>
|
||||||
|
<text style="fill: rgb(0, 54, 130); font-family: monospace; font-size: 14px; font-weight: 700; text-anchor: end; white-space: pre;" x="153.994" y="94.798">2022-01-31</text>
|
||||||
|
<text style="fill: rgb(0, 85, 220); font-family: monospace; font-size: 14px; font-weight: 700; text-anchor: end; white-space: pre;" x="153.994" y="124.798">2022-03-21</text>
|
||||||
|
<text style="fill: rgb(0, 54, 130); font-family: monospace; font-size: 14px; font-weight: 700; text-anchor: end; white-space: pre;" x="153.994" y="154.798">2022-08-04</text>
|
||||||
|
<text style="fill: rgb(0, 85, 220); font-family: monospace; font-size: 14px; font-weight: 700; text-anchor: end; white-space: pre;" x="153.994" y="184.798">2022-10-31</text>
|
||||||
|
<text style="fill: rgb(0, 54, 130); font-family: monospace; font-size: 14px; font-weight: 700; text-anchor: end; white-space: pre;" x="153.994" y="214.798">2022-11-30</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.4 KiB |
4972
node_modules/@cloudflare/workers-types/experimental/index.d.ts
generated
vendored
Executable file
4972
node_modules/@cloudflare/workers-types/experimental/index.d.ts
generated
vendored
Executable file
File diff suppressed because it is too large
Load Diff
4911
node_modules/@cloudflare/workers-types/experimental/index.ts
generated
vendored
Executable file
4911
node_modules/@cloudflare/workers-types/experimental/index.ts
generated
vendored
Executable file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"name": "@cloudflare/workers-types",
|
||||||
|
"description": "TypeScript typings for Cloudflare Workers",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/cloudflare/workerd"
|
||||||
|
},
|
||||||
|
"author": "Cloudflare Workers DevProd Team <workers-devprod@cloudflare.com> (https://workers.cloudflare.com)",
|
||||||
|
"license": "MIT OR Apache-2.0",
|
||||||
|
"version": "4.20240512.0"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2014 Evan Wallace
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
@ -0,0 +1,289 @@
|
||||||
|
# Source Map Support
|
||||||
|
|
||||||
|
[](https://npmjs.org/package/@cspotcode/source-map-support)
|
||||||
|
[](https://npmjs.org/package/@cspotcode/source-map-support)
|
||||||
|
[](https://github.com/cspotcode/node-source-map-support/actions?query=workflow%3A%22Continuous+Integration%22)
|
||||||
|
|
||||||
|
This module provides source map support for stack traces in node via the [V8 stack trace API](https://github.com/v8/v8/wiki/Stack-Trace-API). It uses the [source-map](https://github.com/mozilla/source-map) module to replace the paths and line numbers of source-mapped files with their original paths and line numbers. The output mimics node's stack trace format with the goal of making every compile-to-JS language more of a first-class citizen. Source maps are completely general (not specific to any one language) so you can use source maps with multiple compile-to-JS languages in the same node process.
|
||||||
|
|
||||||
|
## Installation and Usage
|
||||||
|
|
||||||
|
#### Node support
|
||||||
|
|
||||||
|
```
|
||||||
|
$ npm install @cspotcode/source-map-support
|
||||||
|
```
|
||||||
|
|
||||||
|
Source maps can be generated using libraries such as [source-map-index-generator](https://github.com/twolfson/source-map-index-generator). Once you have a valid source map, place a source mapping comment somewhere in the file (usually done automatically or with an option by your transpiler):
|
||||||
|
|
||||||
|
```
|
||||||
|
//# sourceMappingURL=path/to/source.map
|
||||||
|
```
|
||||||
|
|
||||||
|
If multiple sourceMappingURL comments exist in one file, the last sourceMappingURL comment will be
|
||||||
|
respected (e.g. if a file mentions the comment in code, or went through multiple transpilers).
|
||||||
|
The path should either be absolute or relative to the compiled file.
|
||||||
|
|
||||||
|
From here you have two options.
|
||||||
|
|
||||||
|
##### CLI Usage
|
||||||
|
|
||||||
|
```bash
|
||||||
|
node -r @cspotcode/source-map-support/register compiled.js
|
||||||
|
# Or to enable hookRequire
|
||||||
|
node -r @cspotcode/source-map-support/register-hook-require compiled.js
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Programmatic Usage
|
||||||
|
|
||||||
|
Put the following line at the top of the compiled file.
|
||||||
|
|
||||||
|
```js
|
||||||
|
require('@cspotcode/source-map-support').install();
|
||||||
|
```
|
||||||
|
|
||||||
|
It is also possible to install the source map support directly by
|
||||||
|
requiring the `register` module which can be handy with ES6:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import '@cspotcode/source-map-support/register'
|
||||||
|
|
||||||
|
// Instead of:
|
||||||
|
import sourceMapSupport from '@cspotcode/source-map-support'
|
||||||
|
sourceMapSupport.install()
|
||||||
|
```
|
||||||
|
Note: if you're using babel-register, it includes source-map-support already.
|
||||||
|
|
||||||
|
It is also very useful with Mocha:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ mocha --require @cspotcode/source-map-support/register tests/
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Browser support
|
||||||
|
|
||||||
|
This library also works in Chrome. While the DevTools console already supports source maps, the V8 engine doesn't and `Error.prototype.stack` will be incorrect without this library. Everything will just work if you deploy your source files using [browserify](http://browserify.org/). Just make sure to pass the `--debug` flag to the browserify command so your source maps are included in the bundled code.
|
||||||
|
|
||||||
|
This library also works if you use another build process or just include the source files directly. In this case, include the file `browser-source-map-support.js` in your page and call `sourceMapSupport.install()`. It contains the whole library already bundled for the browser using browserify.
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script src="browser-source-map-support.js"></script>
|
||||||
|
<script>sourceMapSupport.install();</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
This library also works if you use AMD (Asynchronous Module Definition), which is used in tools like [RequireJS](http://requirejs.org/). Just list `browser-source-map-support` as a dependency:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script>
|
||||||
|
define(['browser-source-map-support'], function(sourceMapSupport) {
|
||||||
|
sourceMapSupport.install();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Options
|
||||||
|
|
||||||
|
This module installs two things: a change to the `stack` property on `Error` objects and a handler for uncaught exceptions that mimics node's default exception handler (the handler can be seen in the demos below). You may want to disable the handler if you have your own uncaught exception handler. This can be done by passing an argument to the installer:
|
||||||
|
|
||||||
|
```js
|
||||||
|
require('@cspotcode/source-map-support').install({
|
||||||
|
handleUncaughtExceptions: false
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
This module loads source maps from the filesystem by default. You can provide alternate loading behavior through a callback as shown below. For example, [Meteor](https://github.com/meteor) keeps all source maps cached in memory to avoid disk access.
|
||||||
|
|
||||||
|
```js
|
||||||
|
require('@cspotcode/source-map-support').install({
|
||||||
|
retrieveSourceMap: function(source) {
|
||||||
|
if (source === 'compiled.js') {
|
||||||
|
return {
|
||||||
|
url: 'original.js',
|
||||||
|
map: fs.readFileSync('compiled.js.map', 'utf8')
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
The module will by default assume a browser environment if XMLHttpRequest and window are defined. If either of these do not exist it will instead assume a node environment.
|
||||||
|
In some rare cases, e.g. when running a browser emulation and where both variables are also set, you can explictly specify the environment to be either 'browser' or 'node'.
|
||||||
|
|
||||||
|
```js
|
||||||
|
require('@cspotcode/source-map-support').install({
|
||||||
|
environment: 'node'
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
To support files with inline source maps, the `hookRequire` options can be specified, which will monitor all source files for inline source maps.
|
||||||
|
|
||||||
|
|
||||||
|
```js
|
||||||
|
require('@cspotcode/source-map-support').install({
|
||||||
|
hookRequire: true
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
This monkey patches the `require` module loading chain, so is not enabled by default and is not recommended for any sort of production usage.
|
||||||
|
|
||||||
|
## Demos
|
||||||
|
|
||||||
|
#### Basic Demo
|
||||||
|
|
||||||
|
original.js:
|
||||||
|
|
||||||
|
```js
|
||||||
|
throw new Error('test'); // This is the original code
|
||||||
|
```
|
||||||
|
|
||||||
|
compiled.js:
|
||||||
|
|
||||||
|
```js
|
||||||
|
require('@cspotcode/source-map-support').install();
|
||||||
|
|
||||||
|
throw new Error('test'); // This is the compiled code
|
||||||
|
// The next line defines the sourceMapping.
|
||||||
|
//# sourceMappingURL=compiled.js.map
|
||||||
|
```
|
||||||
|
|
||||||
|
compiled.js.map:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"file": "compiled.js",
|
||||||
|
"sources": ["original.js"],
|
||||||
|
"names": [],
|
||||||
|
"mappings": ";;AAAA,MAAM,IAAI"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Run compiled.js using node (notice how the stack trace uses original.js instead of compiled.js):
|
||||||
|
|
||||||
|
```
|
||||||
|
$ node compiled.js
|
||||||
|
|
||||||
|
original.js:1
|
||||||
|
throw new Error('test'); // This is the original code
|
||||||
|
^
|
||||||
|
Error: test
|
||||||
|
at Object.<anonymous> (original.js:1:7)
|
||||||
|
at Module._compile (module.js:456:26)
|
||||||
|
at Object.Module._extensions..js (module.js:474:10)
|
||||||
|
at Module.load (module.js:356:32)
|
||||||
|
at Function.Module._load (module.js:312:12)
|
||||||
|
at Function.Module.runMain (module.js:497:10)
|
||||||
|
at startup (node.js:119:16)
|
||||||
|
at node.js:901:3
|
||||||
|
```
|
||||||
|
|
||||||
|
#### TypeScript Demo
|
||||||
|
|
||||||
|
demo.ts:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
declare function require(name: string);
|
||||||
|
require('@cspotcode/source-map-support').install();
|
||||||
|
class Foo {
|
||||||
|
constructor() { this.bar(); }
|
||||||
|
bar() { throw new Error('this is a demo'); }
|
||||||
|
}
|
||||||
|
new Foo();
|
||||||
|
```
|
||||||
|
|
||||||
|
Compile and run the file using the TypeScript compiler from the terminal:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ npm install source-map-support typescript
|
||||||
|
$ node_modules/typescript/bin/tsc -sourcemap demo.ts
|
||||||
|
$ node demo.js
|
||||||
|
|
||||||
|
demo.ts:5
|
||||||
|
bar() { throw new Error('this is a demo'); }
|
||||||
|
^
|
||||||
|
Error: this is a demo
|
||||||
|
at Foo.bar (demo.ts:5:17)
|
||||||
|
at new Foo (demo.ts:4:24)
|
||||||
|
at Object.<anonymous> (demo.ts:7:1)
|
||||||
|
at Module._compile (module.js:456:26)
|
||||||
|
at Object.Module._extensions..js (module.js:474:10)
|
||||||
|
at Module.load (module.js:356:32)
|
||||||
|
at Function.Module._load (module.js:312:12)
|
||||||
|
at Function.Module.runMain (module.js:497:10)
|
||||||
|
at startup (node.js:119:16)
|
||||||
|
at node.js:901:3
|
||||||
|
```
|
||||||
|
|
||||||
|
There is also the option to use `-r source-map-support/register` with typescript, without the need add the `require('@cspotcode/source-map-support').install()` in the code base:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ npm install source-map-support typescript
|
||||||
|
$ node_modules/typescript/bin/tsc -sourcemap demo.ts
|
||||||
|
$ node -r source-map-support/register demo.js
|
||||||
|
|
||||||
|
demo.ts:5
|
||||||
|
bar() { throw new Error('this is a demo'); }
|
||||||
|
^
|
||||||
|
Error: this is a demo
|
||||||
|
at Foo.bar (demo.ts:5:17)
|
||||||
|
at new Foo (demo.ts:4:24)
|
||||||
|
at Object.<anonymous> (demo.ts:7:1)
|
||||||
|
at Module._compile (module.js:456:26)
|
||||||
|
at Object.Module._extensions..js (module.js:474:10)
|
||||||
|
at Module.load (module.js:356:32)
|
||||||
|
at Function.Module._load (module.js:312:12)
|
||||||
|
at Function.Module.runMain (module.js:497:10)
|
||||||
|
at startup (node.js:119:16)
|
||||||
|
at node.js:901:3
|
||||||
|
```
|
||||||
|
|
||||||
|
#### CoffeeScript Demo
|
||||||
|
|
||||||
|
demo.coffee:
|
||||||
|
|
||||||
|
```coffee
|
||||||
|
require('@cspotcode/source-map-support').install()
|
||||||
|
foo = ->
|
||||||
|
bar = -> throw new Error 'this is a demo'
|
||||||
|
bar()
|
||||||
|
foo()
|
||||||
|
```
|
||||||
|
|
||||||
|
Compile and run the file using the CoffeeScript compiler from the terminal:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm install @cspotcode/source-map-support coffeescript
|
||||||
|
$ node_modules/.bin/coffee --map --compile demo.coffee
|
||||||
|
$ node demo.js
|
||||||
|
|
||||||
|
demo.coffee:3
|
||||||
|
bar = -> throw new Error 'this is a demo'
|
||||||
|
^
|
||||||
|
Error: this is a demo
|
||||||
|
at bar (demo.coffee:3:22)
|
||||||
|
at foo (demo.coffee:4:3)
|
||||||
|
at Object.<anonymous> (demo.coffee:5:1)
|
||||||
|
at Object.<anonymous> (demo.coffee:1:1)
|
||||||
|
at Module._compile (module.js:456:26)
|
||||||
|
at Object.Module._extensions..js (module.js:474:10)
|
||||||
|
at Module.load (module.js:356:32)
|
||||||
|
at Function.Module._load (module.js:312:12)
|
||||||
|
at Function.Module.runMain (module.js:497:10)
|
||||||
|
at startup (node.js:119:16)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tests
|
||||||
|
|
||||||
|
This repo contains both automated tests for node and manual tests for the browser. The automated tests can be run using mocha (type `mocha` in the root directory). To run the manual tests:
|
||||||
|
|
||||||
|
* Build the tests using `build.js`
|
||||||
|
* Launch the HTTP server (`npm run serve-tests`) and visit
|
||||||
|
* http://127.0.0.1:1336/amd-test
|
||||||
|
* http://127.0.0.1:1336/browser-test
|
||||||
|
* http://127.0.0.1:1336/browserify-test - **Currently not working** due to a bug with browserify (see [pull request #66](https://github.com/evanw/node-source-map-support/pull/66) for details).
|
||||||
|
* For `header-test`, run `server.js` inside that directory and visit http://127.0.0.1:1337/
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This code is available under the [MIT license](http://opensource.org/licenses/MIT).
|
||||||
114
node_modules/@cspotcode/source-map-support/browser-source-map-support.js
generated
vendored
Normal file
114
node_modules/@cspotcode/source-map-support/browser-source-map-support.js
generated
vendored
Normal file
|
|
@ -0,0 +1,114 @@
|
||||||
|
/*
|
||||||
|
* Support for source maps in V8 stack traces
|
||||||
|
* https://github.com/evanw/node-source-map-support
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
The buffer module from node.js, for the browser.
|
||||||
|
|
||||||
|
@author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
|
||||||
|
license MIT
|
||||||
|
*/
|
||||||
|
(this.define||function(R,U){this.sourceMapSupport=U()})("browser-source-map-support",function(R){(function e(C,J,A){function p(f,c){if(!J[f]){if(!C[f]){var l="function"==typeof require&&require;if(!c&&l)return l(f,!0);if(t)return t(f,!0);throw Error("Cannot find module '"+f+"'");}l=J[f]={exports:{}};C[f][0].call(l.exports,function(q){var r=C[f][1][q];return p(r?r:q)},l,l.exports,e,C,J,A)}return J[f].exports}for(var t="function"==typeof require&&require,m=0;m<A.length;m++)p(A[m]);return p})({1:[function(C,
|
||||||
|
J,A){R=C("./source-map-support")},{"./source-map-support":21}],2:[function(C,J,A){(function(e){function p(m){m=m.charCodeAt(0);if(43===m)return 62;if(47===m)return 63;if(48>m)return-1;if(58>m)return m-48+52;if(91>m)return m-65;if(123>m)return m-97+26}var t="undefined"!==typeof Uint8Array?Uint8Array:Array;e.toByteArray=function(m){function f(d){q[k++]=d}if(0<m.length%4)throw Error("Invalid string. Length must be a multiple of 4");var c=m.length;var l="="===m.charAt(c-2)?2:"="===m.charAt(c-1)?1:0;var q=
|
||||||
|
new t(3*m.length/4-l);var r=0<l?m.length-4:m.length;var k=0;for(c=0;c<r;c+=4){var u=p(m.charAt(c))<<18|p(m.charAt(c+1))<<12|p(m.charAt(c+2))<<6|p(m.charAt(c+3));f((u&16711680)>>16);f((u&65280)>>8);f(u&255)}2===l?(u=p(m.charAt(c))<<2|p(m.charAt(c+1))>>4,f(u&255)):1===l&&(u=p(m.charAt(c))<<10|p(m.charAt(c+1))<<4|p(m.charAt(c+2))>>2,f(u>>8&255),f(u&255));return q};e.fromByteArray=function(m){var f=m.length%3,c="",l;var q=0;for(l=m.length-f;q<l;q+=3){var r=(m[q]<<16)+(m[q+1]<<8)+m[q+2];r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>
|
||||||
|
18&63)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>12&63)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>6&63)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r&63);c+=r}switch(f){case 1:r=m[m.length-1];c+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>2);c+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r<<4&63);c+="==";break;case 2:r=(m[m.length-2]<<8)+
|
||||||
|
m[m.length-1],c+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>10),c+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>4&63),c+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r<<2&63),c+="="}return c}})("undefined"===typeof A?this.base64js={}:A)},{}],3:[function(C,J,A){},{}],4:[function(C,J,A){(function(e){var p=Object.prototype.toString,t="function"===typeof e.alloc&&"function"===typeof e.allocUnsafe&&"function"===
|
||||||
|
typeof e.from;J.exports=function(m,f,c){if("number"===typeof m)throw new TypeError('"value" argument must not be a number');if("ArrayBuffer"===p.call(m).slice(8,-1)){f>>>=0;var l=m.byteLength-f;if(0>l)throw new RangeError("'offset' is out of bounds");if(void 0===c)c=l;else if(c>>>=0,c>l)throw new RangeError("'length' is out of bounds");return t?e.from(m.slice(f,f+c)):new e(new Uint8Array(m.slice(f,f+c)))}if("string"===typeof m){c=f;if("string"!==typeof c||""===c)c="utf8";if(!e.isEncoding(c))throw new TypeError('"encoding" must be a valid string encoding');
|
||||||
|
return t?e.from(m,c):new e(m,c)}return t?e.from(m):new e(m)}}).call(this,C("buffer").Buffer)},{buffer:5}],5:[function(C,J,A){function e(a,b,h){if(!(this instanceof e))return new e(a,b,h);var w=typeof a;if("number"===w)var y=0<a?a>>>0:0;else if("string"===w){if("base64"===b)for(a=(a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")).replace(L,"");0!==a.length%4;)a+="=";y=e.byteLength(a,b)}else if("object"===w&&null!==a)"Buffer"===a.type&&z(a.data)&&(a=a.data),y=0<+a.length?Math.floor(+a.length):0;else throw new TypeError("must start with number, buffer, array or string");
|
||||||
|
if(this.length>G)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+G.toString(16)+" bytes");if(e.TYPED_ARRAY_SUPPORT)var I=e._augment(new Uint8Array(y));else I=this,I.length=y,I._isBuffer=!0;if(e.TYPED_ARRAY_SUPPORT&&"number"===typeof a.byteLength)I._set(a);else{var K=a;if(z(K)||e.isBuffer(K)||K&&"object"===typeof K&&"number"===typeof K.length)if(e.isBuffer(a))for(b=0;b<y;b++)I[b]=a.readUInt8(b);else for(b=0;b<y;b++)I[b]=(a[b]%256+256)%256;else if("string"===w)I.write(a,
|
||||||
|
0,b);else if("number"===w&&!e.TYPED_ARRAY_SUPPORT&&!h)for(b=0;b<y;b++)I[b]=0}return I}function p(a,b,h){var w="";for(h=Math.min(a.length,h);b<h;b++)w+=String.fromCharCode(a[b]);return w}function t(a,b,h){if(0!==a%1||0>a)throw new RangeError("offset is not uint");if(a+b>h)throw new RangeError("Trying to access beyond buffer length");}function m(a,b,h,w,y,I){if(!e.isBuffer(a))throw new TypeError("buffer must be a Buffer instance");if(b>y||b<I)throw new TypeError("value is out of bounds");if(h+w>a.length)throw new TypeError("index out of range");
|
||||||
|
}function f(a,b,h,w){0>b&&(b=65535+b+1);for(var y=0,I=Math.min(a.length-h,2);y<I;y++)a[h+y]=(b&255<<8*(w?y:1-y))>>>8*(w?y:1-y)}function c(a,b,h,w){0>b&&(b=4294967295+b+1);for(var y=0,I=Math.min(a.length-h,4);y<I;y++)a[h+y]=b>>>8*(w?y:3-y)&255}function l(a,b,h,w,y,I){if(b>y||b<I)throw new TypeError("value is out of bounds");if(h+w>a.length)throw new TypeError("index out of range");}function q(a,b,h,w,y){y||l(a,b,h,4,3.4028234663852886E38,-3.4028234663852886E38);v.write(a,b,h,w,23,4);return h+4}function r(a,
|
||||||
|
b,h,w,y){y||l(a,b,h,8,1.7976931348623157E308,-1.7976931348623157E308);v.write(a,b,h,w,52,8);return h+8}function k(a){for(var b=[],h=0;h<a.length;h++){var w=a.charCodeAt(h);if(127>=w)b.push(w);else{var y=h;55296<=w&&57343>=w&&h++;w=encodeURIComponent(a.slice(y,h+1)).substr(1).split("%");for(y=0;y<w.length;y++)b.push(parseInt(w[y],16))}}return b}function u(a){for(var b=[],h=0;h<a.length;h++)b.push(a.charCodeAt(h)&255);return b}function d(a,b,h,w,y){y&&(w-=w%y);for(y=0;y<w&&!(y+h>=b.length||y>=a.length);y++)b[y+
|
||||||
|
h]=a[y];return y}function g(a){try{return decodeURIComponent(a)}catch(b){return String.fromCharCode(65533)}}var n=C("base64-js"),v=C("ieee754"),z=C("is-array");A.Buffer=e;A.SlowBuffer=e;A.INSPECT_MAX_BYTES=50;e.poolSize=8192;var G=1073741823;e.TYPED_ARRAY_SUPPORT=function(){try{var a=new ArrayBuffer(0),b=new Uint8Array(a);b.foo=function(){return 42};return 42===b.foo()&&"function"===typeof b.subarray&&0===(new Uint8Array(1)).subarray(1,1).byteLength}catch(h){return!1}}();e.isBuffer=function(a){return!(null==
|
||||||
|
a||!a._isBuffer)};e.compare=function(a,b){if(!e.isBuffer(a)||!e.isBuffer(b))throw new TypeError("Arguments must be Buffers");for(var h=a.length,w=b.length,y=0,I=Math.min(h,w);y<I&&a[y]===b[y];y++);y!==I&&(h=a[y],w=b[y]);return h<w?-1:w<h?1:0};e.isEncoding=function(a){switch(String(a).toLowerCase()){case "hex":case "utf8":case "utf-8":case "ascii":case "binary":case "base64":case "raw":case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":return!0;default:return!1}};e.concat=function(a,b){if(!z(a))throw new TypeError("Usage: Buffer.concat(list[, length])");
|
||||||
|
if(0===a.length)return new e(0);if(1===a.length)return a[0];var h;if(void 0===b)for(h=b=0;h<a.length;h++)b+=a[h].length;var w=new e(b),y=0;for(h=0;h<a.length;h++){var I=a[h];I.copy(w,y);y+=I.length}return w};e.byteLength=function(a,b){a+="";switch(b||"utf8"){case "ascii":case "binary":case "raw":var h=a.length;break;case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":h=2*a.length;break;case "hex":h=a.length>>>1;break;case "utf8":case "utf-8":h=k(a).length;break;case "base64":h=n.toByteArray(a).length;
|
||||||
|
break;default:h=a.length}return h};e.prototype.length=void 0;e.prototype.parent=void 0;e.prototype.toString=function(a,b,h){var w=!1;b>>>=0;h=void 0===h||Infinity===h?this.length:h>>>0;a||(a="utf8");0>b&&(b=0);h>this.length&&(h=this.length);if(h<=b)return"";for(;;)switch(a){case "hex":a=b;b=h;h=this.length;if(!a||0>a)a=0;if(!b||0>b||b>h)b=h;w="";for(h=a;h<b;h++)a=w,w=this[h],w=16>w?"0"+w.toString(16):w.toString(16),w=a+w;return w;case "utf8":case "utf-8":w=a="";for(h=Math.min(this.length,h);b<h;b++)127>=
|
||||||
|
this[b]?(a+=g(w)+String.fromCharCode(this[b]),w=""):w+="%"+this[b].toString(16);return a+g(w);case "ascii":return p(this,b,h);case "binary":return p(this,b,h);case "base64":return b=0===b&&h===this.length?n.fromByteArray(this):n.fromByteArray(this.slice(b,h)),b;case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":b=this.slice(b,h);h="";for(a=0;a<b.length;a+=2)h+=String.fromCharCode(b[a]+256*b[a+1]);return h;default:if(w)throw new TypeError("Unknown encoding: "+a);a=(a+"").toLowerCase();w=!0}};
|
||||||
|
e.prototype.equals=function(a){if(!e.isBuffer(a))throw new TypeError("Argument must be a Buffer");return 0===e.compare(this,a)};e.prototype.inspect=function(){var a="",b=A.INSPECT_MAX_BYTES;0<this.length&&(a=this.toString("hex",0,b).match(/.{2}/g).join(" "),this.length>b&&(a+=" ... "));return"<Buffer "+a+">"};e.prototype.compare=function(a){if(!e.isBuffer(a))throw new TypeError("Argument must be a Buffer");return e.compare(this,a)};e.prototype.get=function(a){console.log(".get() is deprecated. Access using array indexes instead.");
|
||||||
|
return this.readUInt8(a)};e.prototype.set=function(a,b){console.log(".set() is deprecated. Access using array indexes instead.");return this.writeUInt8(a,b)};e.prototype.write=function(a,b,h,w){if(isFinite(b))isFinite(h)||(w=h,h=void 0);else{var y=w;w=b;b=h;h=y}b=Number(b)||0;y=this.length-b;h?(h=Number(h),h>y&&(h=y)):h=y;w=String(w||"utf8").toLowerCase();switch(w){case "hex":b=Number(b)||0;w=this.length-b;h?(h=Number(h),h>w&&(h=w)):h=w;w=a.length;if(0!==w%2)throw Error("Invalid hex string");h>w/
|
||||||
|
2&&(h=w/2);for(w=0;w<h;w++){y=parseInt(a.substr(2*w,2),16);if(isNaN(y))throw Error("Invalid hex string");this[b+w]=y}a=w;break;case "utf8":case "utf-8":a=d(k(a),this,b,h);break;case "ascii":a=d(u(a),this,b,h);break;case "binary":a=d(u(a),this,b,h);break;case "base64":a=d(n.toByteArray(a),this,b,h);break;case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":y=[];for(var I=0;I<a.length;I++){var K=a.charCodeAt(I);w=K>>8;K%=256;y.push(K);y.push(w)}a=d(y,this,b,h,2);break;default:throw new TypeError("Unknown encoding: "+
|
||||||
|
w);}return a};e.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};e.prototype.slice=function(a,b){var h=this.length;a=~~a;b=void 0===b?h:~~b;0>a?(a+=h,0>a&&(a=0)):a>h&&(a=h);0>b?(b+=h,0>b&&(b=0)):b>h&&(b=h);b<a&&(b=a);if(e.TYPED_ARRAY_SUPPORT)return e._augment(this.subarray(a,b));h=b-a;for(var w=new e(h,void 0,!0),y=0;y<h;y++)w[y]=this[y+a];return w};e.prototype.readUInt8=function(a,b){b||t(a,1,this.length);return this[a]};e.prototype.readUInt16LE=
|
||||||
|
function(a,b){b||t(a,2,this.length);return this[a]|this[a+1]<<8};e.prototype.readUInt16BE=function(a,b){b||t(a,2,this.length);return this[a]<<8|this[a+1]};e.prototype.readUInt32LE=function(a,b){b||t(a,4,this.length);return(this[a]|this[a+1]<<8|this[a+2]<<16)+16777216*this[a+3]};e.prototype.readUInt32BE=function(a,b){b||t(a,4,this.length);return 16777216*this[a]+(this[a+1]<<16|this[a+2]<<8|this[a+3])};e.prototype.readInt8=function(a,b){b||t(a,1,this.length);return this[a]&128?-1*(255-this[a]+1):this[a]};
|
||||||
|
e.prototype.readInt16LE=function(a,b){b||t(a,2,this.length);var h=this[a]|this[a+1]<<8;return h&32768?h|4294901760:h};e.prototype.readInt16BE=function(a,b){b||t(a,2,this.length);var h=this[a+1]|this[a]<<8;return h&32768?h|4294901760:h};e.prototype.readInt32LE=function(a,b){b||t(a,4,this.length);return this[a]|this[a+1]<<8|this[a+2]<<16|this[a+3]<<24};e.prototype.readInt32BE=function(a,b){b||t(a,4,this.length);return this[a]<<24|this[a+1]<<16|this[a+2]<<8|this[a+3]};e.prototype.readFloatLE=function(a,
|
||||||
|
b){b||t(a,4,this.length);return v.read(this,a,!0,23,4)};e.prototype.readFloatBE=function(a,b){b||t(a,4,this.length);return v.read(this,a,!1,23,4)};e.prototype.readDoubleLE=function(a,b){b||t(a,8,this.length);return v.read(this,a,!0,52,8)};e.prototype.readDoubleBE=function(a,b){b||t(a,8,this.length);return v.read(this,a,!1,52,8)};e.prototype.writeUInt8=function(a,b,h){a=+a;b>>>=0;h||m(this,a,b,1,255,0);e.TYPED_ARRAY_SUPPORT||(a=Math.floor(a));this[b]=a;return b+1};e.prototype.writeUInt16LE=function(a,
|
||||||
|
b,h){a=+a;b>>>=0;h||m(this,a,b,2,65535,0);e.TYPED_ARRAY_SUPPORT?(this[b]=a,this[b+1]=a>>>8):f(this,a,b,!0);return b+2};e.prototype.writeUInt16BE=function(a,b,h){a=+a;b>>>=0;h||m(this,a,b,2,65535,0);e.TYPED_ARRAY_SUPPORT?(this[b]=a>>>8,this[b+1]=a):f(this,a,b,!1);return b+2};e.prototype.writeUInt32LE=function(a,b,h){a=+a;b>>>=0;h||m(this,a,b,4,4294967295,0);e.TYPED_ARRAY_SUPPORT?(this[b+3]=a>>>24,this[b+2]=a>>>16,this[b+1]=a>>>8,this[b]=a):c(this,a,b,!0);return b+4};e.prototype.writeUInt32BE=function(a,
|
||||||
|
b,h){a=+a;b>>>=0;h||m(this,a,b,4,4294967295,0);e.TYPED_ARRAY_SUPPORT?(this[b]=a>>>24,this[b+1]=a>>>16,this[b+2]=a>>>8,this[b+3]=a):c(this,a,b,!1);return b+4};e.prototype.writeInt8=function(a,b,h){a=+a;b>>>=0;h||m(this,a,b,1,127,-128);e.TYPED_ARRAY_SUPPORT||(a=Math.floor(a));0>a&&(a=255+a+1);this[b]=a;return b+1};e.prototype.writeInt16LE=function(a,b,h){a=+a;b>>>=0;h||m(this,a,b,2,32767,-32768);e.TYPED_ARRAY_SUPPORT?(this[b]=a,this[b+1]=a>>>8):f(this,a,b,!0);return b+2};e.prototype.writeInt16BE=function(a,
|
||||||
|
b,h){a=+a;b>>>=0;h||m(this,a,b,2,32767,-32768);e.TYPED_ARRAY_SUPPORT?(this[b]=a>>>8,this[b+1]=a):f(this,a,b,!1);return b+2};e.prototype.writeInt32LE=function(a,b,h){a=+a;b>>>=0;h||m(this,a,b,4,2147483647,-2147483648);e.TYPED_ARRAY_SUPPORT?(this[b]=a,this[b+1]=a>>>8,this[b+2]=a>>>16,this[b+3]=a>>>24):c(this,a,b,!0);return b+4};e.prototype.writeInt32BE=function(a,b,h){a=+a;b>>>=0;h||m(this,a,b,4,2147483647,-2147483648);0>a&&(a=4294967295+a+1);e.TYPED_ARRAY_SUPPORT?(this[b]=a>>>24,this[b+1]=a>>>16,this[b+
|
||||||
|
2]=a>>>8,this[b+3]=a):c(this,a,b,!1);return b+4};e.prototype.writeFloatLE=function(a,b,h){return q(this,a,b,!0,h)};e.prototype.writeFloatBE=function(a,b,h){return q(this,a,b,!1,h)};e.prototype.writeDoubleLE=function(a,b,h){return r(this,a,b,!0,h)};e.prototype.writeDoubleBE=function(a,b,h){return r(this,a,b,!1,h)};e.prototype.copy=function(a,b,h,w){h||(h=0);w||0===w||(w=this.length);b||(b=0);if(w!==h&&0!==a.length&&0!==this.length){if(w<h)throw new TypeError("sourceEnd < sourceStart");if(0>b||b>=a.length)throw new TypeError("targetStart out of bounds");
|
||||||
|
if(0>h||h>=this.length)throw new TypeError("sourceStart out of bounds");if(0>w||w>this.length)throw new TypeError("sourceEnd out of bounds");w>this.length&&(w=this.length);a.length-b<w-h&&(w=a.length-b+h);w-=h;if(1E3>w||!e.TYPED_ARRAY_SUPPORT)for(var y=0;y<w;y++)a[y+b]=this[y+h];else a._set(this.subarray(h,h+w),b)}};e.prototype.fill=function(a,b,h){a||(a=0);b||(b=0);h||(h=this.length);if(h<b)throw new TypeError("end < start");if(h!==b&&0!==this.length){if(0>b||b>=this.length)throw new TypeError("start out of bounds");
|
||||||
|
if(0>h||h>this.length)throw new TypeError("end out of bounds");if("number"===typeof a)for(;b<h;b++)this[b]=a;else{a=k(a.toString());for(var w=a.length;b<h;b++)this[b]=a[b%w]}return this}};e.prototype.toArrayBuffer=function(){if("undefined"!==typeof Uint8Array){if(e.TYPED_ARRAY_SUPPORT)return(new e(this)).buffer;for(var a=new Uint8Array(this.length),b=0,h=a.length;b<h;b+=1)a[b]=this[b];return a.buffer}throw new TypeError("Buffer.toArrayBuffer not supported in this browser");};var D=e.prototype;e._augment=
|
||||||
|
function(a){a.constructor=e;a._isBuffer=!0;a._get=a.get;a._set=a.set;a.get=D.get;a.set=D.set;a.write=D.write;a.toString=D.toString;a.toLocaleString=D.toString;a.toJSON=D.toJSON;a.equals=D.equals;a.compare=D.compare;a.copy=D.copy;a.slice=D.slice;a.readUInt8=D.readUInt8;a.readUInt16LE=D.readUInt16LE;a.readUInt16BE=D.readUInt16BE;a.readUInt32LE=D.readUInt32LE;a.readUInt32BE=D.readUInt32BE;a.readInt8=D.readInt8;a.readInt16LE=D.readInt16LE;a.readInt16BE=D.readInt16BE;a.readInt32LE=D.readInt32LE;a.readInt32BE=
|
||||||
|
D.readInt32BE;a.readFloatLE=D.readFloatLE;a.readFloatBE=D.readFloatBE;a.readDoubleLE=D.readDoubleLE;a.readDoubleBE=D.readDoubleBE;a.writeUInt8=D.writeUInt8;a.writeUInt16LE=D.writeUInt16LE;a.writeUInt16BE=D.writeUInt16BE;a.writeUInt32LE=D.writeUInt32LE;a.writeUInt32BE=D.writeUInt32BE;a.writeInt8=D.writeInt8;a.writeInt16LE=D.writeInt16LE;a.writeInt16BE=D.writeInt16BE;a.writeInt32LE=D.writeInt32LE;a.writeInt32BE=D.writeInt32BE;a.writeFloatLE=D.writeFloatLE;a.writeFloatBE=D.writeFloatBE;a.writeDoubleLE=
|
||||||
|
D.writeDoubleLE;a.writeDoubleBE=D.writeDoubleBE;a.fill=D.fill;a.inspect=D.inspect;a.toArrayBuffer=D.toArrayBuffer;return a};var L=/[^+\/0-9A-z]/g},{"base64-js":2,ieee754:6,"is-array":7}],6:[function(C,J,A){A.read=function(e,p,t,m,f){var c=8*f-m-1;var l=(1<<c)-1,q=l>>1,r=-7;f=t?f-1:0;var k=t?-1:1,u=e[p+f];f+=k;t=u&(1<<-r)-1;u>>=-r;for(r+=c;0<r;t=256*t+e[p+f],f+=k,r-=8);c=t&(1<<-r)-1;t>>=-r;for(r+=m;0<r;c=256*c+e[p+f],f+=k,r-=8);if(0===t)t=1-q;else{if(t===l)return c?NaN:Infinity*(u?-1:1);c+=Math.pow(2,
|
||||||
|
m);t-=q}return(u?-1:1)*c*Math.pow(2,t-m)};A.write=function(e,p,t,m,f,c){var l,q=8*c-f-1,r=(1<<q)-1,k=r>>1,u=23===f?Math.pow(2,-24)-Math.pow(2,-77):0;c=m?0:c-1;var d=m?1:-1,g=0>p||0===p&&0>1/p?1:0;p=Math.abs(p);isNaN(p)||Infinity===p?(p=isNaN(p)?1:0,m=r):(m=Math.floor(Math.log(p)/Math.LN2),1>p*(l=Math.pow(2,-m))&&(m--,l*=2),p=1<=m+k?p+u/l:p+u*Math.pow(2,1-k),2<=p*l&&(m++,l/=2),m+k>=r?(p=0,m=r):1<=m+k?(p=(p*l-1)*Math.pow(2,f),m+=k):(p=p*Math.pow(2,k-1)*Math.pow(2,f),m=0));for(;8<=f;e[t+c]=p&255,c+=
|
||||||
|
d,p/=256,f-=8);m=m<<f|p;for(q+=f;0<q;e[t+c]=m&255,c+=d,m/=256,q-=8);e[t+c-d]|=128*g}},{}],7:[function(C,J,A){var e=Object.prototype.toString;J.exports=Array.isArray||function(p){return!!p&&"[object Array]"==e.call(p)}},{}],8:[function(C,J,A){(function(e){function p(c,l){for(var q=0,r=c.length-1;0<=r;r--){var k=c[r];"."===k?c.splice(r,1):".."===k?(c.splice(r,1),q++):q&&(c.splice(r,1),q--)}if(l)for(;q--;q)c.unshift("..");return c}function t(c,l){if(c.filter)return c.filter(l);for(var q=[],r=0;r<c.length;r++)l(c[r],
|
||||||
|
r,c)&&q.push(c[r]);return q}var m=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;A.resolve=function(){for(var c="",l=!1,q=arguments.length-1;-1<=q&&!l;q--){var r=0<=q?arguments[q]:e.cwd();if("string"!==typeof r)throw new TypeError("Arguments to path.resolve must be strings");r&&(c=r+"/"+c,l="/"===r.charAt(0))}c=p(t(c.split("/"),function(k){return!!k}),!l).join("/");return(l?"/":"")+c||"."};A.normalize=function(c){var l=A.isAbsolute(c),q="/"===f(c,-1);(c=p(t(c.split("/"),function(r){return!!r}),
|
||||||
|
!l).join("/"))||l||(c=".");c&&q&&(c+="/");return(l?"/":"")+c};A.isAbsolute=function(c){return"/"===c.charAt(0)};A.join=function(){var c=Array.prototype.slice.call(arguments,0);return A.normalize(t(c,function(l,q){if("string"!==typeof l)throw new TypeError("Arguments to path.join must be strings");return l}).join("/"))};A.relative=function(c,l){function q(n){for(var v=0;v<n.length&&""===n[v];v++);for(var z=n.length-1;0<=z&&""===n[z];z--);return v>z?[]:n.slice(v,z-v+1)}c=A.resolve(c).substr(1);l=A.resolve(l).substr(1);
|
||||||
|
for(var r=q(c.split("/")),k=q(l.split("/")),u=Math.min(r.length,k.length),d=u,g=0;g<u;g++)if(r[g]!==k[g]){d=g;break}u=[];for(g=d;g<r.length;g++)u.push("..");u=u.concat(k.slice(d));return u.join("/")};A.sep="/";A.delimiter=":";A.dirname=function(c){var l=m.exec(c).slice(1);c=l[0];l=l[1];if(!c&&!l)return".";l&&(l=l.substr(0,l.length-1));return c+l};A.basename=function(c,l){var q=m.exec(c).slice(1)[2];l&&q.substr(-1*l.length)===l&&(q=q.substr(0,q.length-l.length));return q};A.extname=function(c){return m.exec(c).slice(1)[3]};
|
||||||
|
var f="b"==="ab".substr(-1)?function(c,l,q){return c.substr(l,q)}:function(c,l,q){0>l&&(l=c.length+l);return c.substr(l,q)}}).call(this,C("g5I+bs"))},{"g5I+bs":9}],9:[function(C,J,A){function e(){}C=J.exports={};C.nextTick=function(){if("undefined"!==typeof window&&window.setImmediate)return function(t){return window.setImmediate(t)};if("undefined"!==typeof window&&window.postMessage&&window.addEventListener){var p=[];window.addEventListener("message",function(t){var m=t.source;m!==window&&null!==
|
||||||
|
m||"process-tick"!==t.data||(t.stopPropagation(),0<p.length&&p.shift()())},!0);return function(t){p.push(t);window.postMessage("process-tick","*")}}return function(t){setTimeout(t,0)}}();C.title="browser";C.browser=!0;C.env={};C.argv=[];C.on=e;C.addListener=e;C.once=e;C.off=e;C.removeListener=e;C.removeAllListeners=e;C.emit=e;C.binding=function(p){throw Error("process.binding is not supported");};C.cwd=function(){return"/"};C.chdir=function(p){throw Error("process.chdir is not supported");}},{}],
|
||||||
|
10:[function(C,J,A){function e(){this._array=[];this._set=m?new Map:Object.create(null)}var p=C("./util"),t=Object.prototype.hasOwnProperty,m="undefined"!==typeof Map;e.fromArray=function(f,c){for(var l=new e,q=0,r=f.length;q<r;q++)l.add(f[q],c);return l};e.prototype.size=function(){return m?this._set.size:Object.getOwnPropertyNames(this._set).length};e.prototype.add=function(f,c){var l=m?f:p.toSetString(f),q=m?this.has(f):t.call(this._set,l),r=this._array.length;q&&!c||this._array.push(f);q||(m?
|
||||||
|
this._set.set(f,r):this._set[l]=r)};e.prototype.has=function(f){if(m)return this._set.has(f);f=p.toSetString(f);return t.call(this._set,f)};e.prototype.indexOf=function(f){if(m){var c=this._set.get(f);if(0<=c)return c}else if(c=p.toSetString(f),t.call(this._set,c))return this._set[c];throw Error('"'+f+'" is not in the set.');};e.prototype.at=function(f){if(0<=f&&f<this._array.length)return this._array[f];throw Error("No element indexed by "+f);};e.prototype.toArray=function(){return this._array.slice()};
|
||||||
|
A.ArraySet=e},{"./util":19}],11:[function(C,J,A){var e=C("./base64");A.encode=function(p){var t="",m=0>p?(-p<<1)+1:p<<1;do p=m&31,m>>>=5,0<m&&(p|=32),t+=e.encode(p);while(0<m);return t};A.decode=function(p,t,m){var f=p.length,c=0,l=0;do{if(t>=f)throw Error("Expected more digits in base 64 VLQ value.");var q=e.decode(p.charCodeAt(t++));if(-1===q)throw Error("Invalid base64 digit: "+p.charAt(t-1));var r=!!(q&32);q&=31;c+=q<<l;l+=5}while(r);p=c>>1;m.value=1===(c&1)?-p:p;m.rest=t}},{"./base64":12}],12:[function(C,
|
||||||
|
J,A){var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");A.encode=function(p){if(0<=p&&p<e.length)return e[p];throw new TypeError("Must be between 0 and 63: "+p);};A.decode=function(p){return 65<=p&&90>=p?p-65:97<=p&&122>=p?p-97+26:48<=p&&57>=p?p-48+52:43==p?62:47==p?63:-1}},{}],13:[function(C,J,A){function e(p,t,m,f,c,l){var q=Math.floor((t-p)/2)+p,r=c(m,f[q],!0);return 0===r?q:0<r?1<t-q?e(q,t,m,f,c,l):l==A.LEAST_UPPER_BOUND?t<f.length?t:-1:q:1<q-p?e(p,q,m,f,c,l):l==
|
||||||
|
A.LEAST_UPPER_BOUND?q:0>p?-1:p}A.GREATEST_LOWER_BOUND=1;A.LEAST_UPPER_BOUND=2;A.search=function(p,t,m,f){if(0===t.length)return-1;p=e(-1,t.length,p,t,m,f||A.GREATEST_LOWER_BOUND);if(0>p)return-1;for(;0<=p-1&&0===m(t[p],t[p-1],!0);)--p;return p}},{}],14:[function(C,J,A){function e(){this._array=[];this._sorted=!0;this._last={generatedLine:-1,generatedColumn:0}}var p=C("./util");e.prototype.unsortedForEach=function(t,m){this._array.forEach(t,m)};e.prototype.add=function(t){var m=this._last,f=m.generatedLine,
|
||||||
|
c=t.generatedLine,l=m.generatedColumn,q=t.generatedColumn;c>f||c==f&&q>=l||0>=p.compareByGeneratedPositionsInflated(m,t)?this._last=t:this._sorted=!1;this._array.push(t)};e.prototype.toArray=function(){this._sorted||(this._array.sort(p.compareByGeneratedPositionsInflated),this._sorted=!0);return this._array};A.MappingList=e},{"./util":19}],15:[function(C,J,A){function e(t,m,f){var c=t[m];t[m]=t[f];t[f]=c}function p(t,m,f,c){if(f<c){var l=f-1;e(t,Math.round(f+Math.random()*(c-f)),c);for(var q=t[c],
|
||||||
|
r=f;r<c;r++)0>=m(t[r],q)&&(l+=1,e(t,l,r));e(t,l+1,r);l+=1;p(t,m,f,l-1);p(t,m,l+1,c)}}A.quickSort=function(t,m){p(t,m,0,t.length-1)}},{}],16:[function(C,J,A){function e(k,u){var d=k;"string"===typeof k&&(d=f.parseSourceMapInput(k));return null!=d.sections?new m(d,u):new p(d,u)}function p(k,u){var d=k;"string"===typeof k&&(d=f.parseSourceMapInput(k));var g=f.getArg(d,"version"),n=f.getArg(d,"sources"),v=f.getArg(d,"names",[]),z=f.getArg(d,"sourceRoot",null),G=f.getArg(d,"sourcesContent",null),D=f.getArg(d,
|
||||||
|
"mappings");d=f.getArg(d,"file",null);if(g!=this._version)throw Error("Unsupported version: "+g);z&&(z=f.normalize(z));n=n.map(String).map(f.normalize).map(function(L){return z&&f.isAbsolute(z)&&f.isAbsolute(L)?f.relative(z,L):L});this._names=l.fromArray(v.map(String),!0);this._sources=l.fromArray(n,!0);this.sourceRoot=z;this.sourcesContent=G;this._mappings=D;this._sourceMapURL=u;this.file=d}function t(){this.generatedColumn=this.generatedLine=0;this.name=this.originalColumn=this.originalLine=this.source=
|
||||||
|
null}function m(k,u){var d=k;"string"===typeof k&&(d=f.parseSourceMapInput(k));var g=f.getArg(d,"version");d=f.getArg(d,"sections");if(g!=this._version)throw Error("Unsupported version: "+g);this._sources=new l;this._names=new l;var n={line:-1,column:0};this._sections=d.map(function(v){if(v.url)throw Error("Support for url field in sections not implemented.");var z=f.getArg(v,"offset"),G=f.getArg(z,"line"),D=f.getArg(z,"column");if(G<n.line||G===n.line&&D<n.column)throw Error("Section offsets must be ordered and non-overlapping.");
|
||||||
|
n=z;return{generatedOffset:{generatedLine:G+1,generatedColumn:D+1},consumer:new e(f.getArg(v,"map"),u)}})}var f=C("./util"),c=C("./binary-search"),l=C("./array-set").ArraySet,q=C("./base64-vlq"),r=C("./quick-sort").quickSort;e.fromSourceMap=function(k){return p.fromSourceMap(k)};e.prototype._version=3;e.prototype.__generatedMappings=null;Object.defineProperty(e.prototype,"_generatedMappings",{configurable:!0,enumerable:!0,get:function(){this.__generatedMappings||this._parseMappings(this._mappings,
|
||||||
|
this.sourceRoot);return this.__generatedMappings}});e.prototype.__originalMappings=null;Object.defineProperty(e.prototype,"_originalMappings",{configurable:!0,enumerable:!0,get:function(){this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot);return this.__originalMappings}});e.prototype._charIsMappingSeparator=function(k,u){var d=k.charAt(u);return";"===d||","===d};e.prototype._parseMappings=function(k,u){throw Error("Subclasses must implement _parseMappings");};e.GENERATED_ORDER=
|
||||||
|
1;e.ORIGINAL_ORDER=2;e.GREATEST_LOWER_BOUND=1;e.LEAST_UPPER_BOUND=2;e.prototype.eachMapping=function(k,u,d){u=u||null;switch(d||e.GENERATED_ORDER){case e.GENERATED_ORDER:d=this._generatedMappings;break;case e.ORIGINAL_ORDER:d=this._originalMappings;break;default:throw Error("Unknown order of iteration.");}var g=this.sourceRoot;d.map(function(n){var v=null===n.source?null:this._sources.at(n.source);v=f.computeSourceURL(g,v,this._sourceMapURL);return{source:v,generatedLine:n.generatedLine,generatedColumn:n.generatedColumn,
|
||||||
|
originalLine:n.originalLine,originalColumn:n.originalColumn,name:null===n.name?null:this._names.at(n.name)}},this).forEach(k,u)};e.prototype.allGeneratedPositionsFor=function(k){var u=f.getArg(k,"line"),d={source:f.getArg(k,"source"),originalLine:u,originalColumn:f.getArg(k,"column",0)};null!=this.sourceRoot&&(d.source=f.relative(this.sourceRoot,d.source));if(!this._sources.has(d.source))return[];d.source=this._sources.indexOf(d.source);var g=[];d=this._findMapping(d,this._originalMappings,"originalLine",
|
||||||
|
"originalColumn",f.compareByOriginalPositions,c.LEAST_UPPER_BOUND);if(0<=d){var n=this._originalMappings[d];if(void 0===k.column)for(u=n.originalLine;n&&n.originalLine===u;)g.push({line:f.getArg(n,"generatedLine",null),column:f.getArg(n,"generatedColumn",null),lastColumn:f.getArg(n,"lastGeneratedColumn",null)}),n=this._originalMappings[++d];else for(k=n.originalColumn;n&&n.originalLine===u&&n.originalColumn==k;)g.push({line:f.getArg(n,"generatedLine",null),column:f.getArg(n,"generatedColumn",null),
|
||||||
|
lastColumn:f.getArg(n,"lastGeneratedColumn",null)}),n=this._originalMappings[++d]}return g};A.SourceMapConsumer=e;p.prototype=Object.create(e.prototype);p.prototype.consumer=e;p.fromSourceMap=function(k,u){var d=Object.create(p.prototype),g=d._names=l.fromArray(k._names.toArray(),!0),n=d._sources=l.fromArray(k._sources.toArray(),!0);d.sourceRoot=k._sourceRoot;d.sourcesContent=k._generateSourcesContent(d._sources.toArray(),d.sourceRoot);d.file=k._file;d._sourceMapURL=u;for(var v=k._mappings.toArray().slice(),
|
||||||
|
z=d.__generatedMappings=[],G=d.__originalMappings=[],D=0,L=v.length;D<L;D++){var a=v[D],b=new t;b.generatedLine=a.generatedLine;b.generatedColumn=a.generatedColumn;a.source&&(b.source=n.indexOf(a.source),b.originalLine=a.originalLine,b.originalColumn=a.originalColumn,a.name&&(b.name=g.indexOf(a.name)),G.push(b));z.push(b)}r(d.__originalMappings,f.compareByOriginalPositions);return d};p.prototype._version=3;Object.defineProperty(p.prototype,"sources",{get:function(){return this._sources.toArray().map(function(k){return f.computeSourceURL(this.sourceRoot,
|
||||||
|
k,this._sourceMapURL)},this)}});p.prototype._parseMappings=function(k,u){for(var d=1,g=0,n=0,v=0,z=0,G=0,D=k.length,L=0,a={},b={},h=[],w=[],y,I,K,N,P;L<D;)if(";"===k.charAt(L))d++,L++,g=0;else if(","===k.charAt(L))L++;else{y=new t;y.generatedLine=d;for(N=L;N<D&&!this._charIsMappingSeparator(k,N);N++);I=k.slice(L,N);if(K=a[I])L+=I.length;else{for(K=[];L<N;)q.decode(k,L,b),P=b.value,L=b.rest,K.push(P);if(2===K.length)throw Error("Found a source, but no line and column");if(3===K.length)throw Error("Found a source and line, but no column");
|
||||||
|
a[I]=K}y.generatedColumn=g+K[0];g=y.generatedColumn;1<K.length&&(y.source=z+K[1],z+=K[1],y.originalLine=n+K[2],n=y.originalLine,y.originalLine+=1,y.originalColumn=v+K[3],v=y.originalColumn,4<K.length&&(y.name=G+K[4],G+=K[4]));w.push(y);"number"===typeof y.originalLine&&h.push(y)}r(w,f.compareByGeneratedPositionsDeflated);this.__generatedMappings=w;r(h,f.compareByOriginalPositions);this.__originalMappings=h};p.prototype._findMapping=function(k,u,d,g,n,v){if(0>=k[d])throw new TypeError("Line must be greater than or equal to 1, got "+
|
||||||
|
k[d]);if(0>k[g])throw new TypeError("Column must be greater than or equal to 0, got "+k[g]);return c.search(k,u,n,v)};p.prototype.computeColumnSpans=function(){for(var k=0;k<this._generatedMappings.length;++k){var u=this._generatedMappings[k];if(k+1<this._generatedMappings.length){var d=this._generatedMappings[k+1];if(u.generatedLine===d.generatedLine){u.lastGeneratedColumn=d.generatedColumn-1;continue}}u.lastGeneratedColumn=Infinity}};p.prototype.originalPositionFor=function(k){var u={generatedLine:f.getArg(k,
|
||||||
|
"line"),generatedColumn:f.getArg(k,"column")};k=this._findMapping(u,this._generatedMappings,"generatedLine","generatedColumn",f.compareByGeneratedPositionsDeflated,f.getArg(k,"bias",e.GREATEST_LOWER_BOUND));if(0<=k&&(k=this._generatedMappings[k],k.generatedLine===u.generatedLine)){u=f.getArg(k,"source",null);null!==u&&(u=this._sources.at(u),u=f.computeSourceURL(this.sourceRoot,u,this._sourceMapURL));var d=f.getArg(k,"name",null);null!==d&&(d=this._names.at(d));return{source:u,line:f.getArg(k,"originalLine",
|
||||||
|
null),column:f.getArg(k,"originalColumn",null),name:d}}return{source:null,line:null,column:null,name:null}};p.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(k){return null==k}):!1};p.prototype.sourceContentFor=function(k,u){if(!this.sourcesContent)return null;var d=k;null!=this.sourceRoot&&(d=f.relative(this.sourceRoot,d));if(this._sources.has(d))return this.sourcesContent[this._sources.indexOf(d)];
|
||||||
|
var g=this.sources,n;for(n=0;n<g.length;++n)if(g[n]==k)return this.sourcesContent[n];var v;if(null!=this.sourceRoot&&(v=f.urlParse(this.sourceRoot))){g=d.replace(/^file:\/\//,"");if("file"==v.scheme&&this._sources.has(g))return this.sourcesContent[this._sources.indexOf(g)];if((!v.path||"/"==v.path)&&this._sources.has("/"+d))return this.sourcesContent[this._sources.indexOf("/"+d)]}if(u)return null;throw Error('"'+d+'" is not in the SourceMap.');};p.prototype.generatedPositionFor=function(k){var u=
|
||||||
|
f.getArg(k,"source");null!=this.sourceRoot&&(u=f.relative(this.sourceRoot,u));if(!this._sources.has(u))return{line:null,column:null,lastColumn:null};u=this._sources.indexOf(u);u={source:u,originalLine:f.getArg(k,"line"),originalColumn:f.getArg(k,"column")};k=this._findMapping(u,this._originalMappings,"originalLine","originalColumn",f.compareByOriginalPositions,f.getArg(k,"bias",e.GREATEST_LOWER_BOUND));return 0<=k&&(k=this._originalMappings[k],k.source===u.source)?{line:f.getArg(k,"generatedLine",
|
||||||
|
null),column:f.getArg(k,"generatedColumn",null),lastColumn:f.getArg(k,"lastGeneratedColumn",null)}:{line:null,column:null,lastColumn:null}};A.BasicSourceMapConsumer=p;m.prototype=Object.create(e.prototype);m.prototype.constructor=e;m.prototype._version=3;Object.defineProperty(m.prototype,"sources",{get:function(){for(var k=[],u=0;u<this._sections.length;u++)for(var d=0;d<this._sections[u].consumer.sources.length;d++)k.push(this._sections[u].consumer.sources[d]);return k}});m.prototype.originalPositionFor=
|
||||||
|
function(k){var u={generatedLine:f.getArg(k,"line"),generatedColumn:f.getArg(k,"column")},d=c.search(u,this._sections,function(g,n){var v=g.generatedLine-n.generatedOffset.generatedLine;return v?v:g.generatedColumn-n.generatedOffset.generatedColumn});return(d=this._sections[d])?d.consumer.originalPositionFor({line:u.generatedLine-(d.generatedOffset.generatedLine-1),column:u.generatedColumn-(d.generatedOffset.generatedLine===u.generatedLine?d.generatedOffset.generatedColumn-1:0),bias:k.bias}):{source:null,
|
||||||
|
line:null,column:null,name:null}};m.prototype.hasContentsOfAllSources=function(){return this._sections.every(function(k){return k.consumer.hasContentsOfAllSources()})};m.prototype.sourceContentFor=function(k,u){for(var d=0;d<this._sections.length;d++){var g=this._sections[d].consumer.sourceContentFor(k,!0);if(g)return g}if(u)return null;throw Error('"'+k+'" is not in the SourceMap.');};m.prototype.generatedPositionFor=function(k){for(var u=0;u<this._sections.length;u++){var d=this._sections[u];if(-1!==
|
||||||
|
d.consumer.sources.indexOf(f.getArg(k,"source"))){var g=d.consumer.generatedPositionFor(k);if(g)return{line:g.line+(d.generatedOffset.generatedLine-1),column:g.column+(d.generatedOffset.generatedLine===g.line?d.generatedOffset.generatedColumn-1:0)}}}return{line:null,column:null}};m.prototype._parseMappings=function(k,u){this.__generatedMappings=[];this.__originalMappings=[];for(var d=0;d<this._sections.length;d++)for(var g=this._sections[d],n=g.consumer._generatedMappings,v=0;v<n.length;v++){var z=
|
||||||
|
n[v],G=g.consumer._sources.at(z.source);G=f.computeSourceURL(g.consumer.sourceRoot,G,this._sourceMapURL);this._sources.add(G);G=this._sources.indexOf(G);var D=null;z.name&&(D=g.consumer._names.at(z.name),this._names.add(D),D=this._names.indexOf(D));z={source:G,generatedLine:z.generatedLine+(g.generatedOffset.generatedLine-1),generatedColumn:z.generatedColumn+(g.generatedOffset.generatedLine===z.generatedLine?g.generatedOffset.generatedColumn-1:0),originalLine:z.originalLine,originalColumn:z.originalColumn,
|
||||||
|
name:D};this.__generatedMappings.push(z);"number"===typeof z.originalLine&&this.__originalMappings.push(z)}r(this.__generatedMappings,f.compareByGeneratedPositionsDeflated);r(this.__originalMappings,f.compareByOriginalPositions)};A.IndexedSourceMapConsumer=m},{"./array-set":10,"./base64-vlq":11,"./binary-search":13,"./quick-sort":15,"./util":19}],17:[function(C,J,A){function e(c){c||(c={});this._file=t.getArg(c,"file",null);this._sourceRoot=t.getArg(c,"sourceRoot",null);this._skipValidation=t.getArg(c,
|
||||||
|
"skipValidation",!1);this._sources=new m;this._names=new m;this._mappings=new f;this._sourcesContents=null}var p=C("./base64-vlq"),t=C("./util"),m=C("./array-set").ArraySet,f=C("./mapping-list").MappingList;e.prototype._version=3;e.fromSourceMap=function(c){var l=c.sourceRoot,q=new e({file:c.file,sourceRoot:l});c.eachMapping(function(r){var k={generated:{line:r.generatedLine,column:r.generatedColumn}};null!=r.source&&(k.source=r.source,null!=l&&(k.source=t.relative(l,k.source)),k.original={line:r.originalLine,
|
||||||
|
column:r.originalColumn},null!=r.name&&(k.name=r.name));q.addMapping(k)});c.sources.forEach(function(r){var k=r;null!==l&&(k=t.relative(l,r));q._sources.has(k)||q._sources.add(k);k=c.sourceContentFor(r);null!=k&&q.setSourceContent(r,k)});return q};e.prototype.addMapping=function(c){var l=t.getArg(c,"generated"),q=t.getArg(c,"original",null),r=t.getArg(c,"source",null);c=t.getArg(c,"name",null);this._skipValidation||this._validateMapping(l,q,r,c);null!=r&&(r=String(r),this._sources.has(r)||this._sources.add(r));
|
||||||
|
null!=c&&(c=String(c),this._names.has(c)||this._names.add(c));this._mappings.add({generatedLine:l.line,generatedColumn:l.column,originalLine:null!=q&&q.line,originalColumn:null!=q&&q.column,source:r,name:c})};e.prototype.setSourceContent=function(c,l){var q=c;null!=this._sourceRoot&&(q=t.relative(this._sourceRoot,q));null!=l?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[t.toSetString(q)]=l):this._sourcesContents&&(delete this._sourcesContents[t.toSetString(q)],
|
||||||
|
0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))};e.prototype.applySourceMap=function(c,l,q){var r=l;if(null==l){if(null==c.file)throw Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');r=c.file}var k=this._sourceRoot;null!=k&&(r=t.relative(k,r));var u=new m,d=new m;this._mappings.unsortedForEach(function(g){if(g.source===r&&null!=g.originalLine){var n=c.originalPositionFor({line:g.originalLine,
|
||||||
|
column:g.originalColumn});null!=n.source&&(g.source=n.source,null!=q&&(g.source=t.join(q,g.source)),null!=k&&(g.source=t.relative(k,g.source)),g.originalLine=n.line,g.originalColumn=n.column,null!=n.name&&(g.name=n.name))}n=g.source;null==n||u.has(n)||u.add(n);g=g.name;null==g||d.has(g)||d.add(g)},this);this._sources=u;this._names=d;c.sources.forEach(function(g){var n=c.sourceContentFor(g);null!=n&&(null!=q&&(g=t.join(q,g)),null!=k&&(g=t.relative(k,g)),this.setSourceContent(g,n))},this)};e.prototype._validateMapping=
|
||||||
|
function(c,l,q,r){if(l&&"number"!==typeof l.line&&"number"!==typeof l.column)throw Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if(!(c&&"line"in c&&"column"in c&&0<c.line&&0<=c.column&&!l&&!q&&!r||c&&"line"in c&&"column"in c&&l&&"line"in l&&"column"in l&&0<c.line&&0<=c.column&&0<l.line&&0<=l.column&&
|
||||||
|
q))throw Error("Invalid mapping: "+JSON.stringify({generated:c,source:q,original:l,name:r}));};e.prototype._serializeMappings=function(){for(var c=0,l=1,q=0,r=0,k=0,u=0,d="",g,n,v,z=this._mappings.toArray(),G=0,D=z.length;G<D;G++){n=z[G];g="";if(n.generatedLine!==l)for(c=0;n.generatedLine!==l;)g+=";",l++;else if(0<G){if(!t.compareByGeneratedPositionsInflated(n,z[G-1]))continue;g+=","}g+=p.encode(n.generatedColumn-c);c=n.generatedColumn;null!=n.source&&(v=this._sources.indexOf(n.source),g+=p.encode(v-
|
||||||
|
u),u=v,g+=p.encode(n.originalLine-1-r),r=n.originalLine-1,g+=p.encode(n.originalColumn-q),q=n.originalColumn,null!=n.name&&(n=this._names.indexOf(n.name),g+=p.encode(n-k),k=n));d+=g}return d};e.prototype._generateSourcesContent=function(c,l){return c.map(function(q){if(!this._sourcesContents)return null;null!=l&&(q=t.relative(l,q));q=t.toSetString(q);return Object.prototype.hasOwnProperty.call(this._sourcesContents,q)?this._sourcesContents[q]:null},this)};e.prototype.toJSON=function(){var c={version:this._version,
|
||||||
|
sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};null!=this._file&&(c.file=this._file);null!=this._sourceRoot&&(c.sourceRoot=this._sourceRoot);this._sourcesContents&&(c.sourcesContent=this._generateSourcesContent(c.sources,c.sourceRoot));return c};e.prototype.toString=function(){return JSON.stringify(this.toJSON())};A.SourceMapGenerator=e},{"./array-set":10,"./base64-vlq":11,"./mapping-list":14,"./util":19}],18:[function(C,J,A){function e(f,c,l,q,r){this.children=
|
||||||
|
[];this.sourceContents={};this.line=null==f?null:f;this.column=null==c?null:c;this.source=null==l?null:l;this.name=null==r?null:r;this.$$$isSourceNode$$$=!0;null!=q&&this.add(q)}var p=C("./source-map-generator").SourceMapGenerator,t=C("./util"),m=/(\r?\n)/;e.fromStringWithSourceMap=function(f,c,l){function q(z,G){if(null===z||void 0===z.source)r.add(G);else{var D=l?t.join(l,z.source):z.source;r.add(new e(z.originalLine,z.originalColumn,D,G,z.name))}}var r=new e,k=f.split(m),u=0,d=function(){var z=
|
||||||
|
u<k.length?k[u++]:void 0,G=(u<k.length?k[u++]:void 0)||"";return z+G},g=1,n=0,v=null;c.eachMapping(function(z){if(null!==v)if(g<z.generatedLine)q(v,d()),g++,n=0;else{var G=k[u]||"",D=G.substr(0,z.generatedColumn-n);k[u]=G.substr(z.generatedColumn-n);n=z.generatedColumn;q(v,D);v=z;return}for(;g<z.generatedLine;)r.add(d()),g++;n<z.generatedColumn&&(G=k[u]||"",r.add(G.substr(0,z.generatedColumn)),k[u]=G.substr(z.generatedColumn),n=z.generatedColumn);v=z},this);u<k.length&&(v&&q(v,d()),r.add(k.splice(u).join("")));
|
||||||
|
c.sources.forEach(function(z){var G=c.sourceContentFor(z);null!=G&&(null!=l&&(z=t.join(l,z)),r.setSourceContent(z,G))});return r};e.prototype.add=function(f){if(Array.isArray(f))f.forEach(function(c){this.add(c)},this);else if(f.$$$isSourceNode$$$||"string"===typeof f)f&&this.children.push(f);else throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+f);return this};e.prototype.prepend=function(f){if(Array.isArray(f))for(var c=f.length-1;0<=c;c--)this.prepend(f[c]);
|
||||||
|
else if(f.$$$isSourceNode$$$||"string"===typeof f)this.children.unshift(f);else throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+f);return this};e.prototype.walk=function(f){for(var c,l=0,q=this.children.length;l<q;l++)c=this.children[l],c.$$$isSourceNode$$$?c.walk(f):""!==c&&f(c,{source:this.source,line:this.line,column:this.column,name:this.name})};e.prototype.join=function(f){var c,l=this.children.length;if(0<l){var q=[];for(c=0;c<l-1;c++)q.push(this.children[c]),
|
||||||
|
q.push(f);q.push(this.children[c]);this.children=q}return this};e.prototype.replaceRight=function(f,c){var l=this.children[this.children.length-1];l.$$$isSourceNode$$$?l.replaceRight(f,c):"string"===typeof l?this.children[this.children.length-1]=l.replace(f,c):this.children.push("".replace(f,c));return this};e.prototype.setSourceContent=function(f,c){this.sourceContents[t.toSetString(f)]=c};e.prototype.walkSourceContents=function(f){for(var c=0,l=this.children.length;c<l;c++)this.children[c].$$$isSourceNode$$$&&
|
||||||
|
this.children[c].walkSourceContents(f);var q=Object.keys(this.sourceContents);c=0;for(l=q.length;c<l;c++)f(t.fromSetString(q[c]),this.sourceContents[q[c]])};e.prototype.toString=function(){var f="";this.walk(function(c){f+=c});return f};e.prototype.toStringWithSourceMap=function(f){var c="",l=1,q=0,r=new p(f),k=!1,u=null,d=null,g=null,n=null;this.walk(function(v,z){c+=v;null!==z.source&&null!==z.line&&null!==z.column?(u===z.source&&d===z.line&&g===z.column&&n===z.name||r.addMapping({source:z.source,
|
||||||
|
original:{line:z.line,column:z.column},generated:{line:l,column:q},name:z.name}),u=z.source,d=z.line,g=z.column,n=z.name,k=!0):k&&(r.addMapping({generated:{line:l,column:q}}),u=null,k=!1);for(var G=0,D=v.length;G<D;G++)10===v.charCodeAt(G)?(l++,q=0,G+1===D?(u=null,k=!1):k&&r.addMapping({source:z.source,original:{line:z.line,column:z.column},generated:{line:l,column:q},name:z.name})):q++});this.walkSourceContents(function(v,z){r.setSourceContent(v,z)});return{code:c,map:r}};A.SourceNode=e},{"./source-map-generator":17,
|
||||||
|
"./util":19}],19:[function(C,J,A){function e(d){return(d=d.match(k))?{scheme:d[1],auth:d[2],host:d[3],port:d[4],path:d[5]}:null}function p(d){var g="";d.scheme&&(g+=d.scheme+":");g+="//";d.auth&&(g+=d.auth+"@");d.host&&(g+=d.host);d.port&&(g+=":"+d.port);d.path&&(g+=d.path);return g}function t(d){var g=d,n=e(d);if(n){if(!n.path)return d;g=n.path}d=A.isAbsolute(g);g=g.split(/\/+/);for(var v,z=0,G=g.length-1;0<=G;G--)v=g[G],"."===v?g.splice(G,1):".."===v?z++:0<z&&(""===v?(g.splice(G+1,z),z=0):(g.splice(G,
|
||||||
|
2),z--));g=g.join("/");""===g&&(g=d?"/":".");return n?(n.path=g,p(n)):g}function m(d,g){""===d&&(d=".");""===g&&(g=".");var n=e(g),v=e(d);v&&(d=v.path||"/");if(n&&!n.scheme)return v&&(n.scheme=v.scheme),p(n);if(n||g.match(u))return g;if(v&&!v.host&&!v.path)return v.host=g,p(v);n="/"===g.charAt(0)?g:t(d.replace(/\/+$/,"")+"/"+g);return v?(v.path=n,p(v)):n}function f(d){return d}function c(d){return q(d)?"$"+d:d}function l(d){return q(d)?d.slice(1):d}function q(d){if(!d)return!1;var g=d.length;if(9>
|
||||||
|
g||95!==d.charCodeAt(g-1)||95!==d.charCodeAt(g-2)||111!==d.charCodeAt(g-3)||116!==d.charCodeAt(g-4)||111!==d.charCodeAt(g-5)||114!==d.charCodeAt(g-6)||112!==d.charCodeAt(g-7)||95!==d.charCodeAt(g-8)||95!==d.charCodeAt(g-9))return!1;for(g-=10;0<=g;g--)if(36!==d.charCodeAt(g))return!1;return!0}function r(d,g){return d===g?0:null===d?1:null===g?-1:d>g?1:-1}A.getArg=function(d,g,n){if(g in d)return d[g];if(3===arguments.length)return n;throw Error('"'+g+'" is a required argument.');};var k=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,
|
||||||
|
u=/^data:.+,.+$/;A.urlParse=e;A.urlGenerate=p;A.normalize=t;A.join=m;A.isAbsolute=function(d){return"/"===d.charAt(0)||k.test(d)};A.relative=function(d,g){""===d&&(d=".");d=d.replace(/\/$/,"");for(var n=0;0!==g.indexOf(d+"/");){var v=d.lastIndexOf("/");if(0>v)return g;d=d.slice(0,v);if(d.match(/^([^\/]+:\/)?\/*$/))return g;++n}return Array(n+1).join("../")+g.substr(d.length+1)};C=!("__proto__"in Object.create(null));A.toSetString=C?f:c;A.fromSetString=C?f:l;A.compareByOriginalPositions=function(d,
|
||||||
|
g,n){var v=r(d.source,g.source);if(0!==v)return v;v=d.originalLine-g.originalLine;if(0!==v)return v;v=d.originalColumn-g.originalColumn;if(0!==v||n)return v;v=d.generatedColumn-g.generatedColumn;if(0!==v)return v;v=d.generatedLine-g.generatedLine;return 0!==v?v:r(d.name,g.name)};A.compareByGeneratedPositionsDeflated=function(d,g,n){var v=d.generatedLine-g.generatedLine;if(0!==v)return v;v=d.generatedColumn-g.generatedColumn;if(0!==v||n)return v;v=r(d.source,g.source);if(0!==v)return v;v=d.originalLine-
|
||||||
|
g.originalLine;if(0!==v)return v;v=d.originalColumn-g.originalColumn;return 0!==v?v:r(d.name,g.name)};A.compareByGeneratedPositionsInflated=function(d,g){var n=d.generatedLine-g.generatedLine;if(0!==n)return n;n=d.generatedColumn-g.generatedColumn;if(0!==n)return n;n=r(d.source,g.source);if(0!==n)return n;n=d.originalLine-g.originalLine;if(0!==n)return n;n=d.originalColumn-g.originalColumn;return 0!==n?n:r(d.name,g.name)};A.parseSourceMapInput=function(d){return JSON.parse(d.replace(/^\)]}'[^\n]*\n/,
|
||||||
|
""))};A.computeSourceURL=function(d,g,n){g=g||"";d&&("/"!==d[d.length-1]&&"/"!==g[0]&&(d+="/"),g=d+g);if(n){d=e(n);if(!d)throw Error("sourceMapURL could not be parsed");d.path&&(n=d.path.lastIndexOf("/"),0<=n&&(d.path=d.path.substring(0,n+1)));g=m(p(d),g)}return t(g)}},{}],20:[function(C,J,A){A.SourceMapGenerator=C("./lib/source-map-generator").SourceMapGenerator;A.SourceMapConsumer=C("./lib/source-map-consumer").SourceMapConsumer;A.SourceNode=C("./lib/source-node").SourceNode},{"./lib/source-map-consumer":16,
|
||||||
|
"./lib/source-map-generator":17,"./lib/source-node":18}],21:[function(C,J,A){(function(e){function p(){return"browser"===a?!0:"node"===a?!1:"undefined"!==typeof window&&"function"===typeof XMLHttpRequest&&!(window.require&&window.module&&window.process&&"renderer"===window.process.type)}function t(x){return function(B){for(var F=0;F<x.length;F++){var E=x[F](B);if(E)return E}return null}}function m(x,B){if(!x)return B;var F=n.dirname(x),E=/^\w+:\/\/[^\/]*/.exec(F);E=E?E[0]:"";var H=F.slice(E.length);
|
||||||
|
return E&&/^\/\w:/.test(H)?(E+="/",E+n.resolve(F.slice(E.length),B).replace(/\\/g,"/")):E+n.resolve(F.slice(E.length),B)}function f(x){var B=h[x.source];if(!B){var F=N(x.source);F?(B=h[x.source]={url:F.url,map:new g(F.map)},B.map.sourcesContent&&B.map.sources.forEach(function(E,H){var M=B.map.sourcesContent[H];if(M){var S=m(B.url,E);b[S]=M}})):B=h[x.source]={url:null,map:null}}return B&&B.map&&"function"===typeof B.map.originalPositionFor&&(F=B.map.originalPositionFor(x),null!==F.source)?(F.source=
|
||||||
|
m(B.url,F.source),F):x}function c(x){var B=/^eval at ([^(]+) \((.+):(\d+):(\d+)\)$/.exec(x);return B?(x=f({source:B[2],line:+B[3],column:B[4]-1}),"eval at "+B[1]+" ("+x.source+":"+x.line+":"+(x.column+1)+")"):(B=/^eval at ([^(]+) \((.+)\)$/.exec(x))?"eval at "+B[1]+" ("+c(B[2])+")":x}function l(){var x="";if(this.isNative())x="native";else{var B=this.getScriptNameOrSourceURL();!B&&this.isEval()&&(x=this.getEvalOrigin(),x+=", ");x=B?x+B:x+"<anonymous>";B=this.getLineNumber();null!=B&&(x+=":"+B,(B=
|
||||||
|
this.getColumnNumber())&&(x+=":"+B))}B="";var F=this.getFunctionName(),E=!0,H=this.isConstructor();if(this.isToplevel()||H)H?B+="new "+(F||"<anonymous>"):F?B+=F:(B+=x,E=!1);else{H=this.getTypeName();"[object Object]"===H&&(H="null");var M=this.getMethodName();F?(H&&0!=F.indexOf(H)&&(B+=H+"."),B+=F,M&&F.indexOf("."+M)!=F.length-M.length-1&&(B+=" [as "+M+"]")):B+=H+"."+(M||"<anonymous>")}E&&(B+=" ("+x+")");return B}function q(x){var B={};Object.getOwnPropertyNames(Object.getPrototypeOf(x)).forEach(function(F){B[F]=
|
||||||
|
/^(?:is|get)/.test(F)?function(){return x[F].call(x)}:x[F]});B.toString=l;return B}function r(x,B){void 0===B&&(B={nextPosition:null,curPosition:null});if(x.isNative())return B.curPosition=null,x;var F=x.getFileName()||x.getScriptNameOrSourceURL();if(F){var E=x.getLineNumber(),H=x.getColumnNumber()-1,M=/^v(10\.1[6-9]|10\.[2-9][0-9]|10\.[0-9]{3,}|1[2-9]\d*|[2-9]\d|\d{3,}|11\.11)/,S=M.test;var V="object"===typeof e&&null!==e?e.version:"";M=S.call(M,V)?0:62;1===E&&H>M&&!p()&&!x.isEval()&&(H-=M);var O=
|
||||||
|
f({source:F,line:E,column:H});B.curPosition=O;x=q(x);var T=x.getFunctionName;x.getFunctionName=function(){return null==B.nextPosition?T():B.nextPosition.name||T()};x.getFileName=function(){return O.source};x.getLineNumber=function(){return O.line};x.getColumnNumber=function(){return O.column+1};x.getScriptNameOrSourceURL=function(){return O.source};return x}var Q=x.isEval()&&x.getEvalOrigin();Q&&(Q=c(Q),x=q(x),x.getEvalOrigin=function(){return Q});return x}function k(x,B){L&&(b={},h={});for(var F=
|
||||||
|
(x.name||"Error")+": "+(x.message||""),E={nextPosition:null,curPosition:null},H=[],M=B.length-1;0<=M;M--)H.push("\n at "+r(B[M],E)),E.nextPosition=E.curPosition;E.curPosition=E.nextPosition=null;return F+H.reverse().join("")}function u(x){var B=/\n at [^(]+ \((.*):(\d+):(\d+)\)/.exec(x.stack);if(B){x=B[1];var F=+B[2];B=+B[3];var E=b[x];if(!E&&v&&v.existsSync(x))try{E=v.readFileSync(x,"utf8")}catch(H){E=""}if(E&&(E=E.split(/(?:\r\n|\r|\n)/)[F-1]))return x+":"+F+"\n"+E+"\n"+Array(B).join(" ")+
|
||||||
|
"^"}return null}function d(){var x=e.emit;e.emit=function(B){if("uncaughtException"===B){var F=arguments[1]&&arguments[1].stack,E=0<this.listeners(B).length;if(F&&!E){F=arguments[1];E=u(F);var H="object"===typeof e&&null!==e?e.stderr:void 0;H&&H._handle&&H._handle.setBlocking&&H._handle.setBlocking(!0);E&&(console.error(),console.error(E));console.error(F.stack);"object"===typeof e&&null!==e&&"function"===typeof e.exit&&e.exit(1);return}}return x.apply(this,arguments)}}var g=C("source-map").SourceMapConsumer,
|
||||||
|
n=C("path");try{var v=C("fs");v.existsSync&&v.readFileSync||(v=null)}catch(x){}var z=C("buffer-from"),G=!1,D=!1,L=!1,a="auto",b={},h={},w=/^data:application\/json[^,]+base64,/,y=[],I=[],K=t(y);y.push(function(x){x=x.trim();/^file:/.test(x)&&(x=x.replace(/file:\/\/\/(\w:)?/,function(E,H){return H?"":"/"}));if(x in b)return b[x];var B="";try{if(v)v.existsSync(x)&&(B=v.readFileSync(x,"utf8"));else{var F=new XMLHttpRequest;F.open("GET",x,!1);F.send(null);4===F.readyState&&200===F.status&&(B=F.responseText)}}catch(E){}return b[x]=
|
||||||
|
B});var N=t(I);I.push(function(x){a:{if(p())try{var B=new XMLHttpRequest;B.open("GET",x,!1);B.send(null);var F=B.getResponseHeader("SourceMap")||B.getResponseHeader("X-SourceMap");if(F){var E=F;break a}}catch(M){}E=K(x);B=/(?:\/\/[@#][\s]*sourceMappingURL=([^\s'"]+)[\s]*$)|(?:\/\*[@#][\s]*sourceMappingURL=([^\s*'"]+)[\s]*(?:\*\/)[\s]*$)/mg;for(var H;F=B.exec(E);)H=F;E=H?H[1]:null}if(!E)return null;w.test(E)?(H=E.slice(E.indexOf(",")+1),H=z(H,"base64").toString(),E=x):(E=m(x,E),H=K(E));return H?{url:E,
|
||||||
|
map:H}:null});var P=y.slice(0),W=I.slice(0);A.wrapCallSite=r;A.getErrorSource=u;A.mapSourcePosition=f;A.retrieveSourceMap=N;A.install=function(x){x=x||{};if(x.environment&&(a=x.environment,-1===["node","browser","auto"].indexOf(a)))throw Error("environment "+a+" was unknown. Available options are {auto, browser, node}");x.retrieveFile&&(x.overrideRetrieveFile&&(y.length=0),y.unshift(x.retrieveFile));x.retrieveSourceMap&&(x.overrideRetrieveSourceMap&&(I.length=0),I.unshift(x.retrieveSourceMap));if(x.hookRequire&&
|
||||||
|
!p()){var B=J.require("module"),F=B.prototype._compile;F.__sourceMapSupport||(B.prototype._compile=function(E,H){b[H]=E;h[H]=void 0;return F.call(this,E,H)},B.prototype._compile.__sourceMapSupport=!0)}L||(L="emptyCacheBetweenOperations"in x?x.emptyCacheBetweenOperations:!1);G||(G=!0,Error.prepareStackTrace=k);if(!D){x="handleUncaughtExceptions"in x?x.handleUncaughtExceptions:!0;try{!1===J.require("worker_threads").isMainThread&&(x=!1)}catch(E){}x&&"object"===typeof e&&null!==e&&"function"===typeof e.on&&
|
||||||
|
(D=!0,d())}};A.resetRetrieveHandlers=function(){y.length=0;I.length=0;y=P.slice(0);I=W.slice(0);N=t(I);K=t(y)}}).call(this,C("g5I+bs"))},{"buffer-from":4,fs:3,"g5I+bs":9,path:8,"source-map":20}]},{},[1]);return R});
|
||||||
|
|
@ -0,0 +1,50 @@
|
||||||
|
{
|
||||||
|
"name": "@cspotcode/source-map-support",
|
||||||
|
"description": "Fixes stack traces for files with source maps",
|
||||||
|
"version": "0.8.1",
|
||||||
|
"main": "./source-map-support.js",
|
||||||
|
"types": "./source-map-support.d.ts",
|
||||||
|
"scripts": {
|
||||||
|
"build": "node build.js",
|
||||||
|
"serve-tests": "http-server -p 1336",
|
||||||
|
"test": "mocha"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"/register.d.ts",
|
||||||
|
"/register.js",
|
||||||
|
"/register-hook-require.d.ts",
|
||||||
|
"/register-hook-require.js",
|
||||||
|
"/source-map-support.d.ts",
|
||||||
|
"/source-map-support.js",
|
||||||
|
"/browser-source-map-support.js"
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"@jridgewell/trace-mapping": "0.3.9"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/lodash": "^4.14.182",
|
||||||
|
"browserify": "^4.2.3",
|
||||||
|
"coffeescript": "^1.12.7",
|
||||||
|
"http-server": "^0.11.1",
|
||||||
|
"lodash": "^4.17.21",
|
||||||
|
"mocha": "^3.5.3",
|
||||||
|
"semver": "^7.3.7",
|
||||||
|
"source-map": "0.6.1",
|
||||||
|
"webpack": "^1.15.0"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/cspotcode/node-source-map-support"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/cspotcode/node-source-map-support/issues"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"volta": {
|
||||||
|
"node": "16.11.0",
|
||||||
|
"npm": "7.24.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
7
node_modules/@cspotcode/source-map-support/register-hook-require.d.ts
generated
vendored
Executable file
7
node_modules/@cspotcode/source-map-support/register-hook-require.d.ts
generated
vendored
Executable file
|
|
@ -0,0 +1,7 @@
|
||||||
|
// tslint:disable:no-useless-files
|
||||||
|
|
||||||
|
// For following usage:
|
||||||
|
// import '@cspotcode/source-map-support/register-hook-require'
|
||||||
|
// Instead of:
|
||||||
|
// import sourceMapSupport from '@cspotcode/source-map-support'
|
||||||
|
// sourceMapSupport.install({hookRequire: true})
|
||||||
3
node_modules/@cspotcode/source-map-support/register-hook-require.js
generated
vendored
Normal file
3
node_modules/@cspotcode/source-map-support/register-hook-require.js
generated
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
require('./').install({
|
||||||
|
hookRequire: true
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
// tslint:disable:no-useless-files
|
||||||
|
|
||||||
|
// For following usage:
|
||||||
|
// import '@cspotcode/source-map-support/register'
|
||||||
|
// Instead of:
|
||||||
|
// import sourceMapSupport from '@cspotcode/source-map-support'
|
||||||
|
// sourceMapSupport.install()
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
require('./').install();
|
||||||
76
node_modules/@cspotcode/source-map-support/source-map-support.d.ts
generated
vendored
Executable file
76
node_modules/@cspotcode/source-map-support/source-map-support.d.ts
generated
vendored
Executable file
|
|
@ -0,0 +1,76 @@
|
||||||
|
// Type definitions for source-map-support 0.5
|
||||||
|
// Project: https://github.com/evanw/node-source-map-support
|
||||||
|
// Definitions by: Bart van der Schoor <https://github.com/Bartvds>
|
||||||
|
// Jason Cheatham <https://github.com/jason0x43>
|
||||||
|
// Alcedo Nathaniel De Guzman Jr <https://github.com/natealcedo>
|
||||||
|
// Griffin Yourick <https://github.com/tough-griff>
|
||||||
|
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||||
|
|
||||||
|
export interface RawSourceMap {
|
||||||
|
version: 3;
|
||||||
|
sources: string[];
|
||||||
|
names: string[];
|
||||||
|
sourceRoot?: string;
|
||||||
|
sourcesContent?: string[];
|
||||||
|
mappings: string;
|
||||||
|
file: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output of retrieveSourceMap().
|
||||||
|
* From source-map-support:
|
||||||
|
* The map field may be either a string or the parsed JSON object (i.e.,
|
||||||
|
* it must be a valid argument to the SourceMapConsumer constructor).
|
||||||
|
*/
|
||||||
|
export interface UrlAndMap {
|
||||||
|
url: string;
|
||||||
|
map: string | RawSourceMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options to install().
|
||||||
|
*/
|
||||||
|
export interface Options {
|
||||||
|
handleUncaughtExceptions?: boolean | undefined;
|
||||||
|
hookRequire?: boolean | undefined;
|
||||||
|
emptyCacheBetweenOperations?: boolean | undefined;
|
||||||
|
environment?: 'auto' | 'browser' | 'node' | undefined;
|
||||||
|
overrideRetrieveFile?: boolean | undefined;
|
||||||
|
overrideRetrieveSourceMap?: boolean | undefined;
|
||||||
|
retrieveFile?(path: string): string;
|
||||||
|
retrieveSourceMap?(source: string): UrlAndMap | null;
|
||||||
|
/**
|
||||||
|
* Set false to disable redirection of require / import `source-map-support` to `@cspotcode/source-map-support`
|
||||||
|
*/
|
||||||
|
redirectConflictingLibrary?: boolean;
|
||||||
|
/**
|
||||||
|
* Callback will be called every time we redirect due to `redirectConflictingLibrary`
|
||||||
|
* This allows consumers to log helpful warnings if they choose.
|
||||||
|
* @param parent NodeJS.Module which made the require() or require.resolve() call
|
||||||
|
* @param options options object internally passed to node's `_resolveFilename` hook
|
||||||
|
*/
|
||||||
|
onConflictingLibraryRedirect?: (request: string, parent: any, isMain: boolean, options: any, redirectedRequest: string) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Position {
|
||||||
|
source: string;
|
||||||
|
line: number;
|
||||||
|
column: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function wrapCallSite(frame: any /* StackFrame */): any /* StackFrame */;
|
||||||
|
export function getErrorSource(error: Error): string | null;
|
||||||
|
export function mapSourcePosition(position: Position): Position;
|
||||||
|
export function retrieveSourceMap(source: string): UrlAndMap | null;
|
||||||
|
export function resetRetrieveHandlers(): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install SourceMap support.
|
||||||
|
* @param options Can be used to e.g. disable uncaughtException handler.
|
||||||
|
*/
|
||||||
|
export function install(options?: Options): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uninstall SourceMap support.
|
||||||
|
*/
|
||||||
|
export function uninstall(): void;
|
||||||
|
|
@ -0,0 +1,938 @@
|
||||||
|
const { TraceMap, originalPositionFor, AnyMap } = require('@jridgewell/trace-mapping');
|
||||||
|
var path = require('path');
|
||||||
|
const { fileURLToPath, pathToFileURL } = require('url');
|
||||||
|
var util = require('util');
|
||||||
|
|
||||||
|
var fs;
|
||||||
|
try {
|
||||||
|
fs = require('fs');
|
||||||
|
if (!fs.existsSync || !fs.readFileSync) {
|
||||||
|
// fs doesn't have all methods we need
|
||||||
|
fs = null;
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
/* nop */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requires a module which is protected against bundler minification.
|
||||||
|
*
|
||||||
|
* @param {NodeModule} mod
|
||||||
|
* @param {string} request
|
||||||
|
*/
|
||||||
|
function dynamicRequire(mod, request) {
|
||||||
|
return mod.require(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {{
|
||||||
|
* enabled: boolean;
|
||||||
|
* originalValue: any;
|
||||||
|
* installedValue: any;
|
||||||
|
* }} HookState
|
||||||
|
* Used for installing and uninstalling hooks
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Increment this if the format of sharedData changes in a breaking way.
|
||||||
|
var sharedDataVersion = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @template T
|
||||||
|
* @param {T} defaults
|
||||||
|
* @returns {T}
|
||||||
|
*/
|
||||||
|
function initializeSharedData(defaults) {
|
||||||
|
var sharedDataKey = 'source-map-support/sharedData';
|
||||||
|
if (typeof Symbol !== 'undefined') {
|
||||||
|
sharedDataKey = Symbol.for(sharedDataKey);
|
||||||
|
}
|
||||||
|
var sharedData = this[sharedDataKey];
|
||||||
|
if (!sharedData) {
|
||||||
|
sharedData = { version: sharedDataVersion };
|
||||||
|
if (Object.defineProperty) {
|
||||||
|
Object.defineProperty(this, sharedDataKey, { value: sharedData });
|
||||||
|
} else {
|
||||||
|
this[sharedDataKey] = sharedData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (sharedDataVersion !== sharedData.version) {
|
||||||
|
throw new Error("Multiple incompatible instances of source-map-support were loaded");
|
||||||
|
}
|
||||||
|
for (var key in defaults) {
|
||||||
|
if (!(key in sharedData)) {
|
||||||
|
sharedData[key] = defaults[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sharedData;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If multiple instances of source-map-support are loaded into the same
|
||||||
|
// context, they shouldn't overwrite each other. By storing handlers, caches,
|
||||||
|
// and other state on a shared object, different instances of
|
||||||
|
// source-map-support can work together in a limited way. This does require
|
||||||
|
// that future versions of source-map-support continue to support the fields on
|
||||||
|
// this object. If this internal contract ever needs to be broken, increment
|
||||||
|
// sharedDataVersion. (This version number is not the same as any of the
|
||||||
|
// package's version numbers, which should reflect the *external* API of
|
||||||
|
// source-map-support.)
|
||||||
|
var sharedData = initializeSharedData({
|
||||||
|
|
||||||
|
// Only install once if called multiple times
|
||||||
|
// Remember how the environment looked before installation so we can restore if able
|
||||||
|
/** @type {HookState} */
|
||||||
|
errorPrepareStackTraceHook: undefined,
|
||||||
|
/** @type {HookState} */
|
||||||
|
processEmitHook: undefined,
|
||||||
|
/** @type {HookState} */
|
||||||
|
moduleResolveFilenameHook: undefined,
|
||||||
|
|
||||||
|
/** @type {Array<(request: string, parent: any, isMain: boolean, options: any, redirectedRequest: string) => void>} */
|
||||||
|
onConflictingLibraryRedirectArr: [],
|
||||||
|
|
||||||
|
// If true, the caches are reset before a stack trace formatting operation
|
||||||
|
emptyCacheBetweenOperations: false,
|
||||||
|
|
||||||
|
// Maps a file path to a string containing the file contents
|
||||||
|
fileContentsCache: Object.create(null),
|
||||||
|
|
||||||
|
// Maps a file path to a source map for that file
|
||||||
|
/** @type {Record<string, {url: string, map: TraceMap}} */
|
||||||
|
sourceMapCache: Object.create(null),
|
||||||
|
|
||||||
|
// Priority list of retrieve handlers
|
||||||
|
retrieveFileHandlers: [],
|
||||||
|
retrieveMapHandlers: [],
|
||||||
|
|
||||||
|
// Priority list of internally-implemented handlers.
|
||||||
|
// When resetting state, we must keep these.
|
||||||
|
internalRetrieveFileHandlers: [],
|
||||||
|
internalRetrieveMapHandlers: [],
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// Supports {browser, node, auto}
|
||||||
|
var environment = "auto";
|
||||||
|
|
||||||
|
// Regex for detecting source maps
|
||||||
|
var reSourceMap = /^data:application\/json[^,]+base64,/;
|
||||||
|
|
||||||
|
function isInBrowser() {
|
||||||
|
if (environment === "browser")
|
||||||
|
return true;
|
||||||
|
if (environment === "node")
|
||||||
|
return false;
|
||||||
|
return ((typeof window !== 'undefined') && (typeof XMLHttpRequest === 'function') && !(window.require && window.module && window.process && window.process.type === "renderer"));
|
||||||
|
}
|
||||||
|
|
||||||
|
function hasGlobalProcessEventEmitter() {
|
||||||
|
return ((typeof process === 'object') && (process !== null) && (typeof process.on === 'function'));
|
||||||
|
}
|
||||||
|
|
||||||
|
function tryFileURLToPath(v) {
|
||||||
|
if(isFileUrl(v)) {
|
||||||
|
return fileURLToPath(v);
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO un-copy these from resolve-uri; see if they can be exported from that lib
|
||||||
|
function isFileUrl(input) {
|
||||||
|
return input.startsWith('file:');
|
||||||
|
}
|
||||||
|
function isAbsoluteUrl(input) {
|
||||||
|
return schemeRegex.test(input);
|
||||||
|
}
|
||||||
|
// Matches the scheme of a URL, eg "http://"
|
||||||
|
const schemeRegex = /^[\w+.-]+:\/\//;
|
||||||
|
function isSchemeRelativeUrl(input) {
|
||||||
|
return input.startsWith('//');
|
||||||
|
}
|
||||||
|
|
||||||
|
// #region Caches
|
||||||
|
/** @param {string} pathOrFileUrl */
|
||||||
|
function getCacheKey(pathOrFileUrl) {
|
||||||
|
if(pathOrFileUrl.startsWith('node:')) return pathOrFileUrl;
|
||||||
|
if(isFileUrl(pathOrFileUrl)) {
|
||||||
|
// Must normalize spaces to %20, stuff like that
|
||||||
|
return new URL(pathOrFileUrl).toString();
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
return pathToFileURL(pathOrFileUrl).toString();
|
||||||
|
} catch {
|
||||||
|
return pathOrFileUrl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function getFileContentsCache(key) {
|
||||||
|
return sharedData.fileContentsCache[getCacheKey(key)];
|
||||||
|
}
|
||||||
|
function hasFileContentsCacheFromKey(key) {
|
||||||
|
return Object.prototype.hasOwnProperty.call(sharedData.fileContentsCache, key);
|
||||||
|
}
|
||||||
|
function getFileContentsCacheFromKey(key) {
|
||||||
|
return sharedData.fileContentsCache[key];
|
||||||
|
}
|
||||||
|
function setFileContentsCache(key, value) {
|
||||||
|
return sharedData.fileContentsCache[getCacheKey(key)] = value;
|
||||||
|
}
|
||||||
|
function getSourceMapCache(key) {
|
||||||
|
return sharedData.sourceMapCache[getCacheKey(key)];
|
||||||
|
}
|
||||||
|
function setSourceMapCache(key, value) {
|
||||||
|
return sharedData.sourceMapCache[getCacheKey(key)] = value;
|
||||||
|
}
|
||||||
|
function clearCaches() {
|
||||||
|
sharedData.fileContentsCache = Object.create(null);
|
||||||
|
sharedData.sourceMapCache = Object.create(null);
|
||||||
|
}
|
||||||
|
// #endregion Caches
|
||||||
|
|
||||||
|
function handlerExec(list, internalList) {
|
||||||
|
return function(arg) {
|
||||||
|
for (var i = 0; i < list.length; i++) {
|
||||||
|
var ret = list[i](arg);
|
||||||
|
if (ret) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (var i = 0; i < internalList.length; i++) {
|
||||||
|
var ret = internalList[i](arg);
|
||||||
|
if (ret) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var retrieveFile = handlerExec(sharedData.retrieveFileHandlers, sharedData.internalRetrieveFileHandlers);
|
||||||
|
|
||||||
|
sharedData.internalRetrieveFileHandlers.push(function(path) {
|
||||||
|
// Trim the path to make sure there is no extra whitespace.
|
||||||
|
path = path.trim();
|
||||||
|
if (/^file:/.test(path)) {
|
||||||
|
// existsSync/readFileSync can't handle file protocol, but once stripped, it works
|
||||||
|
path = path.replace(/file:\/\/\/(\w:)?/, function(protocol, drive) {
|
||||||
|
return drive ?
|
||||||
|
'' : // file:///C:/dir/file -> C:/dir/file
|
||||||
|
'/'; // file:///root-dir/file -> /root-dir/file
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const key = getCacheKey(path);
|
||||||
|
if(hasFileContentsCacheFromKey(key)) {
|
||||||
|
return getFileContentsCacheFromKey(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
var contents = '';
|
||||||
|
try {
|
||||||
|
if (!fs) {
|
||||||
|
// Use SJAX if we are in the browser
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.open('GET', path, /** async */ false);
|
||||||
|
xhr.send(null);
|
||||||
|
if (xhr.readyState === 4 && xhr.status === 200) {
|
||||||
|
contents = xhr.responseText;
|
||||||
|
}
|
||||||
|
} else if (fs.existsSync(path)) {
|
||||||
|
// Otherwise, use the filesystem
|
||||||
|
contents = fs.readFileSync(path, 'utf8');
|
||||||
|
}
|
||||||
|
} catch (er) {
|
||||||
|
/* ignore any errors */
|
||||||
|
}
|
||||||
|
|
||||||
|
return setFileContentsCache(path, contents);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Support URLs relative to a directory, but be careful about a protocol prefix
|
||||||
|
// in case we are in the browser (i.e. directories may start with "http://" or "file:///")
|
||||||
|
function supportRelativeURL(file, url) {
|
||||||
|
if(!file) return url;
|
||||||
|
// given that this happens within error formatting codepath, probably best to
|
||||||
|
// fallback instead of throwing if anything goes wrong
|
||||||
|
try {
|
||||||
|
// if should output a URL
|
||||||
|
if(isAbsoluteUrl(file) || isSchemeRelativeUrl(file)) {
|
||||||
|
if(isAbsoluteUrl(url) || isSchemeRelativeUrl(url)) {
|
||||||
|
return new URL(url, file).toString();
|
||||||
|
}
|
||||||
|
if(path.isAbsolute(url)) {
|
||||||
|
return new URL(pathToFileURL(url), file).toString();
|
||||||
|
}
|
||||||
|
// url is relative path or URL
|
||||||
|
return new URL(url.replace(/\\/g, '/'), file).toString();
|
||||||
|
}
|
||||||
|
// if should output a path (unless URL is something like https://)
|
||||||
|
if(path.isAbsolute(file)) {
|
||||||
|
if(isFileUrl(url)) {
|
||||||
|
return fileURLToPath(url);
|
||||||
|
}
|
||||||
|
if(isSchemeRelativeUrl(url)) {
|
||||||
|
return fileURLToPath(new URL(url, 'file://'));
|
||||||
|
}
|
||||||
|
if(isAbsoluteUrl(url)) {
|
||||||
|
// url is a non-file URL
|
||||||
|
// Go with the URL
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
if(path.isAbsolute(url)) {
|
||||||
|
// Normalize at all? decodeURI or normalize slashes?
|
||||||
|
return path.normalize(url);
|
||||||
|
}
|
||||||
|
// url is relative path or URL
|
||||||
|
return path.join(file, '..', decodeURI(url));
|
||||||
|
}
|
||||||
|
// If we get here, file is relative.
|
||||||
|
// Shouldn't happen since node identifies modules with absolute paths or URLs.
|
||||||
|
// But we can take a stab at returning something meaningful anyway.
|
||||||
|
if(isAbsoluteUrl(url) || isSchemeRelativeUrl(url)) {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
return path.join(file, '..', url);
|
||||||
|
} catch(e) {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return pathOrUrl in the same style as matchStyleOf: either a file URL or a native path
|
||||||
|
function matchStyleOfPathOrUrl(matchStyleOf, pathOrUrl) {
|
||||||
|
try {
|
||||||
|
if(isAbsoluteUrl(matchStyleOf) || isSchemeRelativeUrl(matchStyleOf)) {
|
||||||
|
if(isAbsoluteUrl(pathOrUrl) || isSchemeRelativeUrl(pathOrUrl)) return pathOrUrl;
|
||||||
|
if(path.isAbsolute(pathOrUrl)) return pathToFileURL(pathOrUrl).toString();
|
||||||
|
} else if(path.isAbsolute(matchStyleOf)) {
|
||||||
|
if(isAbsoluteUrl(pathOrUrl) || isSchemeRelativeUrl(pathOrUrl)) {
|
||||||
|
return fileURLToPath(new URL(pathOrUrl, 'file://'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pathOrUrl;
|
||||||
|
} catch(e) {
|
||||||
|
return pathOrUrl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function retrieveSourceMapURL(source) {
|
||||||
|
var fileData;
|
||||||
|
|
||||||
|
if (isInBrowser()) {
|
||||||
|
try {
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.open('GET', source, false);
|
||||||
|
xhr.send(null);
|
||||||
|
fileData = xhr.readyState === 4 ? xhr.responseText : null;
|
||||||
|
|
||||||
|
// Support providing a sourceMappingURL via the SourceMap header
|
||||||
|
var sourceMapHeader = xhr.getResponseHeader("SourceMap") ||
|
||||||
|
xhr.getResponseHeader("X-SourceMap");
|
||||||
|
if (sourceMapHeader) {
|
||||||
|
return sourceMapHeader;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the URL of the source map
|
||||||
|
fileData = retrieveFile(tryFileURLToPath(source));
|
||||||
|
var re = /(?:\/\/[@#][\s]*sourceMappingURL=([^\s'"]+)[\s]*$)|(?:\/\*[@#][\s]*sourceMappingURL=([^\s*'"]+)[\s]*(?:\*\/)[\s]*$)/mg;
|
||||||
|
// Keep executing the search to find the *last* sourceMappingURL to avoid
|
||||||
|
// picking up sourceMappingURLs from comments, strings, etc.
|
||||||
|
var lastMatch, match;
|
||||||
|
while (match = re.exec(fileData)) lastMatch = match;
|
||||||
|
if (!lastMatch) return null;
|
||||||
|
return lastMatch[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
// Can be overridden by the retrieveSourceMap option to install. Takes a
|
||||||
|
// generated source filename; returns a {map, optional url} object, or null if
|
||||||
|
// there is no source map. The map field may be either a string or the parsed
|
||||||
|
// JSON object (ie, it must be a valid argument to the SourceMapConsumer
|
||||||
|
// constructor).
|
||||||
|
/** @type {(source: string) => import('./source-map-support').UrlAndMap | null} */
|
||||||
|
var retrieveSourceMap = handlerExec(sharedData.retrieveMapHandlers, sharedData.internalRetrieveMapHandlers);
|
||||||
|
sharedData.internalRetrieveMapHandlers.push(function(source) {
|
||||||
|
var sourceMappingURL = retrieveSourceMapURL(source);
|
||||||
|
if (!sourceMappingURL) return null;
|
||||||
|
|
||||||
|
// Read the contents of the source map
|
||||||
|
var sourceMapData;
|
||||||
|
if (reSourceMap.test(sourceMappingURL)) {
|
||||||
|
// Support source map URL as a data url
|
||||||
|
var rawData = sourceMappingURL.slice(sourceMappingURL.indexOf(',') + 1);
|
||||||
|
sourceMapData = Buffer.from(rawData, "base64").toString();
|
||||||
|
sourceMappingURL = source;
|
||||||
|
} else {
|
||||||
|
// Support source map URLs relative to the source URL
|
||||||
|
sourceMappingURL = supportRelativeURL(source, sourceMappingURL);
|
||||||
|
sourceMapData = retrieveFile(tryFileURLToPath(sourceMappingURL));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sourceMapData) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
url: sourceMappingURL,
|
||||||
|
map: sourceMapData
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
function mapSourcePosition(position) {
|
||||||
|
var sourceMap = getSourceMapCache(position.source);
|
||||||
|
if (!sourceMap) {
|
||||||
|
// Call the (overrideable) retrieveSourceMap function to get the source map.
|
||||||
|
var urlAndMap = retrieveSourceMap(position.source);
|
||||||
|
if (urlAndMap) {
|
||||||
|
sourceMap = setSourceMapCache(position.source, {
|
||||||
|
url: urlAndMap.url,
|
||||||
|
map: new AnyMap(urlAndMap.map, urlAndMap.url)
|
||||||
|
});
|
||||||
|
|
||||||
|
// Overwrite trace-mapping's resolutions, because they do not handle
|
||||||
|
// Windows paths the way we want.
|
||||||
|
// TODO Remove now that windows path support was added to resolve-uri and thus trace-mapping?
|
||||||
|
sourceMap.map.resolvedSources = sourceMap.map.sources.map(s => supportRelativeURL(sourceMap.url, s));
|
||||||
|
|
||||||
|
// Load all sources stored inline with the source map into the file cache
|
||||||
|
// to pretend like they are already loaded. They may not exist on disk.
|
||||||
|
if (sourceMap.map.sourcesContent) {
|
||||||
|
sourceMap.map.resolvedSources.forEach(function(resolvedSource, i) {
|
||||||
|
var contents = sourceMap.map.sourcesContent[i];
|
||||||
|
if (contents) {
|
||||||
|
setFileContentsCache(resolvedSource, contents);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sourceMap = setSourceMapCache(position.source, {
|
||||||
|
url: null,
|
||||||
|
map: null
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resolve the source URL relative to the URL of the source map
|
||||||
|
if (sourceMap && sourceMap.map) {
|
||||||
|
var originalPosition = originalPositionFor(sourceMap.map, position);
|
||||||
|
|
||||||
|
// Only return the original position if a matching line was found. If no
|
||||||
|
// matching line is found then we return position instead, which will cause
|
||||||
|
// the stack trace to print the path and line for the compiled file. It is
|
||||||
|
// better to give a precise location in the compiled file than a vague
|
||||||
|
// location in the original file.
|
||||||
|
if (originalPosition.source !== null) {
|
||||||
|
// originalPosition.source has *already* been resolved against sourceMap.url
|
||||||
|
// so is *already* as absolute as possible.
|
||||||
|
// However, we want to ensure we output in same format as input: URL or native path
|
||||||
|
originalPosition.source = matchStyleOfPathOrUrl(
|
||||||
|
position.source, originalPosition.source);
|
||||||
|
return originalPosition;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parses code generated by FormatEvalOrigin(), a function inside V8:
|
||||||
|
// https://code.google.com/p/v8/source/browse/trunk/src/messages.js
|
||||||
|
function mapEvalOrigin(origin) {
|
||||||
|
// Most eval() calls are in this format
|
||||||
|
var match = /^eval at ([^(]+) \((.+):(\d+):(\d+)\)$/.exec(origin);
|
||||||
|
if (match) {
|
||||||
|
var position = mapSourcePosition({
|
||||||
|
source: match[2],
|
||||||
|
line: +match[3],
|
||||||
|
column: match[4] - 1
|
||||||
|
});
|
||||||
|
return 'eval at ' + match[1] + ' (' + position.source + ':' +
|
||||||
|
position.line + ':' + (position.column + 1) + ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse nested eval() calls using recursion
|
||||||
|
match = /^eval at ([^(]+) \((.+)\)$/.exec(origin);
|
||||||
|
if (match) {
|
||||||
|
return 'eval at ' + match[1] + ' (' + mapEvalOrigin(match[2]) + ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure we still return useful information if we didn't find anything
|
||||||
|
return origin;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is copied almost verbatim from the V8 source code at
|
||||||
|
// https://code.google.com/p/v8/source/browse/trunk/src/messages.js
|
||||||
|
// Update 2022-04-29:
|
||||||
|
// https://github.com/v8/v8/blob/98f6f100c5ab8e390e51422747c4ef644d5ac6f2/src/builtins/builtins-callsite.cc#L175-L179
|
||||||
|
// https://github.com/v8/v8/blob/98f6f100c5ab8e390e51422747c4ef644d5ac6f2/src/objects/call-site-info.cc#L795-L804
|
||||||
|
// https://github.com/v8/v8/blob/98f6f100c5ab8e390e51422747c4ef644d5ac6f2/src/objects/call-site-info.cc#L717-L750
|
||||||
|
// The implementation of wrapCallSite() used to just forward to the actual source
|
||||||
|
// code of CallSite.prototype.toString but unfortunately a new release of V8
|
||||||
|
// did something to the prototype chain and broke the shim. The only fix I
|
||||||
|
// could find was copy/paste.
|
||||||
|
function CallSiteToString() {
|
||||||
|
var fileName;
|
||||||
|
var fileLocation = "";
|
||||||
|
if (this.isNative()) {
|
||||||
|
fileLocation = "native";
|
||||||
|
} else {
|
||||||
|
fileName = this.getScriptNameOrSourceURL();
|
||||||
|
if (!fileName && this.isEval()) {
|
||||||
|
fileLocation = this.getEvalOrigin();
|
||||||
|
fileLocation += ", "; // Expecting source position to follow.
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fileName) {
|
||||||
|
fileLocation += fileName;
|
||||||
|
} else {
|
||||||
|
// Source code does not originate from a file and is not native, but we
|
||||||
|
// can still get the source position inside the source string, e.g. in
|
||||||
|
// an eval string.
|
||||||
|
fileLocation += "<anonymous>";
|
||||||
|
}
|
||||||
|
var lineNumber = this.getLineNumber();
|
||||||
|
if (lineNumber != null) {
|
||||||
|
fileLocation += ":" + lineNumber;
|
||||||
|
var columnNumber = this.getColumnNumber();
|
||||||
|
if (columnNumber) {
|
||||||
|
fileLocation += ":" + columnNumber;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var line = "";
|
||||||
|
var isAsync = this.isAsync ? this.isAsync() : false;
|
||||||
|
if(isAsync) {
|
||||||
|
line += 'async ';
|
||||||
|
var isPromiseAll = this.isPromiseAll ? this.isPromiseAll() : false;
|
||||||
|
var isPromiseAny = this.isPromiseAny ? this.isPromiseAny() : false;
|
||||||
|
if(isPromiseAny || isPromiseAll) {
|
||||||
|
line += isPromiseAll ? 'Promise.all (index ' : 'Promise.any (index ';
|
||||||
|
var promiseIndex = this.getPromiseIndex();
|
||||||
|
line += promiseIndex + ')';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var functionName = this.getFunctionName();
|
||||||
|
var addSuffix = true;
|
||||||
|
var isConstructor = this.isConstructor();
|
||||||
|
var isMethodCall = !(this.isToplevel() || isConstructor);
|
||||||
|
if (isMethodCall) {
|
||||||
|
var typeName = this.getTypeName();
|
||||||
|
// Fixes shim to be backward compatable with Node v0 to v4
|
||||||
|
if (typeName === "[object Object]") {
|
||||||
|
typeName = "null";
|
||||||
|
}
|
||||||
|
var methodName = this.getMethodName();
|
||||||
|
if (functionName) {
|
||||||
|
if (typeName && functionName.indexOf(typeName) != 0) {
|
||||||
|
line += typeName + ".";
|
||||||
|
}
|
||||||
|
line += functionName;
|
||||||
|
if (methodName && functionName.indexOf("." + methodName) != functionName.length - methodName.length - 1) {
|
||||||
|
line += " [as " + methodName + "]";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
line += typeName + "." + (methodName || "<anonymous>");
|
||||||
|
}
|
||||||
|
} else if (isConstructor) {
|
||||||
|
line += "new " + (functionName || "<anonymous>");
|
||||||
|
} else if (functionName) {
|
||||||
|
line += functionName;
|
||||||
|
} else {
|
||||||
|
line += fileLocation;
|
||||||
|
addSuffix = false;
|
||||||
|
}
|
||||||
|
if (addSuffix) {
|
||||||
|
line += " (" + fileLocation + ")";
|
||||||
|
}
|
||||||
|
return line;
|
||||||
|
}
|
||||||
|
|
||||||
|
function cloneCallSite(frame) {
|
||||||
|
var object = {};
|
||||||
|
Object.getOwnPropertyNames(Object.getPrototypeOf(frame)).forEach(function(name) {
|
||||||
|
object[name] = /^(?:is|get)/.test(name) ? function() { return frame[name].call(frame); } : frame[name];
|
||||||
|
});
|
||||||
|
object.toString = CallSiteToString;
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
function wrapCallSite(frame, state) {
|
||||||
|
// provides interface backward compatibility
|
||||||
|
if (state === undefined) {
|
||||||
|
state = { nextPosition: null, curPosition: null }
|
||||||
|
}
|
||||||
|
if(frame.isNative()) {
|
||||||
|
state.curPosition = null;
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Most call sites will return the source file from getFileName(), but code
|
||||||
|
// passed to eval() ending in "//# sourceURL=..." will return the source file
|
||||||
|
// from getScriptNameOrSourceURL() instead
|
||||||
|
var source = frame.getFileName() || frame.getScriptNameOrSourceURL();
|
||||||
|
if (source) {
|
||||||
|
// v8 does not expose its internal isWasm, etc methods, so we do this instead.
|
||||||
|
if(source.startsWith('wasm://')) {
|
||||||
|
state.curPosition = null;
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
var line = frame.getLineNumber();
|
||||||
|
var column = frame.getColumnNumber() - 1;
|
||||||
|
|
||||||
|
// Fix position in Node where some (internal) code is prepended.
|
||||||
|
// See https://github.com/evanw/node-source-map-support/issues/36
|
||||||
|
// Header removed in node at ^10.16 || >=11.11.0
|
||||||
|
// v11 is not an LTS candidate, we can just test the one version with it.
|
||||||
|
// Test node versions for: 10.16-19, 10.20+, 12-19, 20-99, 100+, or 11.11
|
||||||
|
var noHeader = /^v(10\.1[6-9]|10\.[2-9][0-9]|10\.[0-9]{3,}|1[2-9]\d*|[2-9]\d|\d{3,}|11\.11)/;
|
||||||
|
var headerLength = noHeader.test(process.version) ? 0 : 62;
|
||||||
|
if (line === 1 && column > headerLength && !isInBrowser() && !frame.isEval()) {
|
||||||
|
column -= headerLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
var position = mapSourcePosition({
|
||||||
|
source: source,
|
||||||
|
line: line,
|
||||||
|
column: column
|
||||||
|
});
|
||||||
|
state.curPosition = position;
|
||||||
|
frame = cloneCallSite(frame);
|
||||||
|
var originalFunctionName = frame.getFunctionName;
|
||||||
|
frame.getFunctionName = function() {
|
||||||
|
if (state.nextPosition == null) {
|
||||||
|
return originalFunctionName();
|
||||||
|
}
|
||||||
|
return state.nextPosition.name || originalFunctionName();
|
||||||
|
};
|
||||||
|
frame.getFileName = function() { return position.source; };
|
||||||
|
frame.getLineNumber = function() { return position.line; };
|
||||||
|
frame.getColumnNumber = function() { return position.column + 1; };
|
||||||
|
frame.getScriptNameOrSourceURL = function() { return position.source; };
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Code called using eval() needs special handling
|
||||||
|
var origin = frame.isEval() && frame.getEvalOrigin();
|
||||||
|
if (origin) {
|
||||||
|
origin = mapEvalOrigin(origin);
|
||||||
|
frame = cloneCallSite(frame);
|
||||||
|
frame.getEvalOrigin = function() { return origin; };
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we get here then we were unable to change the source position
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
var kIsNodeError = undefined;
|
||||||
|
try {
|
||||||
|
// Get a deliberate ERR_INVALID_ARG_TYPE
|
||||||
|
// TODO is there a better way to reliably get an instance of NodeError?
|
||||||
|
path.resolve(123);
|
||||||
|
} catch(e) {
|
||||||
|
const symbols = Object.getOwnPropertySymbols(e);
|
||||||
|
const symbol = symbols.find(function (s) {return s.toString().indexOf('kIsNodeError') >= 0});
|
||||||
|
if(symbol) kIsNodeError = symbol;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ErrorPrototypeToString = (err) =>Error.prototype.toString.call(err);
|
||||||
|
|
||||||
|
/** @param {HookState} hookState */
|
||||||
|
function createPrepareStackTrace(hookState) {
|
||||||
|
return prepareStackTrace;
|
||||||
|
|
||||||
|
// This function is part of the V8 stack trace API, for more info see:
|
||||||
|
// https://v8.dev/docs/stack-trace-api
|
||||||
|
function prepareStackTrace(error, stack) {
|
||||||
|
if(!hookState.enabled) return hookState.originalValue.apply(this, arguments);
|
||||||
|
|
||||||
|
if (sharedData.emptyCacheBetweenOperations) {
|
||||||
|
clearCaches();
|
||||||
|
}
|
||||||
|
|
||||||
|
// node gives its own errors special treatment. Mimic that behavior
|
||||||
|
// https://github.com/nodejs/node/blob/3cbaabc4622df1b4009b9d026a1a970bdbae6e89/lib/internal/errors.js#L118-L128
|
||||||
|
// https://github.com/nodejs/node/pull/39182
|
||||||
|
var errorString;
|
||||||
|
if (kIsNodeError) {
|
||||||
|
if(kIsNodeError in error) {
|
||||||
|
errorString = `${error.name} [${error.code}]: ${error.message}`;
|
||||||
|
} else {
|
||||||
|
errorString = ErrorPrototypeToString(error);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var name = error.name || 'Error';
|
||||||
|
var message = error.message || '';
|
||||||
|
errorString = message ? name + ": " + message : name;
|
||||||
|
}
|
||||||
|
|
||||||
|
var state = { nextPosition: null, curPosition: null };
|
||||||
|
var processedStack = [];
|
||||||
|
for (var i = stack.length - 1; i >= 0; i--) {
|
||||||
|
processedStack.push('\n at ' + wrapCallSite(stack[i], state));
|
||||||
|
state.nextPosition = state.curPosition;
|
||||||
|
}
|
||||||
|
state.curPosition = state.nextPosition = null;
|
||||||
|
return errorString + processedStack.reverse().join('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate position and snippet of original source with pointer
|
||||||
|
function getErrorSource(error) {
|
||||||
|
var match = /\n at [^(]+ \((.*):(\d+):(\d+)\)/.exec(error.stack);
|
||||||
|
if (match) {
|
||||||
|
var source = match[1];
|
||||||
|
var line = +match[2];
|
||||||
|
var column = +match[3];
|
||||||
|
|
||||||
|
// Support the inline sourceContents inside the source map
|
||||||
|
var contents = getFileContentsCache(source);
|
||||||
|
|
||||||
|
const sourceAsPath = tryFileURLToPath(source);
|
||||||
|
|
||||||
|
// Support files on disk
|
||||||
|
if (!contents && fs && fs.existsSync(sourceAsPath)) {
|
||||||
|
try {
|
||||||
|
contents = fs.readFileSync(sourceAsPath, 'utf8');
|
||||||
|
} catch (er) {
|
||||||
|
contents = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Format the line from the original source code like node does
|
||||||
|
if (contents) {
|
||||||
|
var code = contents.split(/(?:\r\n|\r|\n)/)[line - 1];
|
||||||
|
if (code) {
|
||||||
|
return source + ':' + line + '\n' + code + '\n' +
|
||||||
|
new Array(column).join(' ') + '^';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function printFatalErrorUponExit (error) {
|
||||||
|
var source = getErrorSource(error);
|
||||||
|
|
||||||
|
// Ensure error is printed synchronously and not truncated
|
||||||
|
if (process.stderr._handle && process.stderr._handle.setBlocking) {
|
||||||
|
process.stderr._handle.setBlocking(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (source) {
|
||||||
|
console.error(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Matches node's behavior for colorized output
|
||||||
|
console.error(
|
||||||
|
util.inspect(error, {
|
||||||
|
customInspect: false,
|
||||||
|
colors: process.stderr.isTTY
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function shimEmitUncaughtException () {
|
||||||
|
const originalValue = process.emit;
|
||||||
|
var hook = sharedData.processEmitHook = {
|
||||||
|
enabled: true,
|
||||||
|
originalValue,
|
||||||
|
installedValue: undefined
|
||||||
|
};
|
||||||
|
var isTerminatingDueToFatalException = false;
|
||||||
|
var fatalException;
|
||||||
|
|
||||||
|
process.emit = sharedData.processEmitHook.installedValue = function (type) {
|
||||||
|
const hadListeners = originalValue.apply(this, arguments);
|
||||||
|
if(hook.enabled) {
|
||||||
|
if (type === 'uncaughtException' && !hadListeners) {
|
||||||
|
isTerminatingDueToFatalException = true;
|
||||||
|
fatalException = arguments[1];
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
if (type === 'exit' && isTerminatingDueToFatalException) {
|
||||||
|
printFatalErrorUponExit(fatalException);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return hadListeners;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var originalRetrieveFileHandlers = sharedData.retrieveFileHandlers.slice(0);
|
||||||
|
var originalRetrieveMapHandlers = sharedData.retrieveMapHandlers.slice(0);
|
||||||
|
|
||||||
|
exports.wrapCallSite = wrapCallSite;
|
||||||
|
exports.getErrorSource = getErrorSource;
|
||||||
|
exports.mapSourcePosition = mapSourcePosition;
|
||||||
|
exports.retrieveSourceMap = retrieveSourceMap;
|
||||||
|
|
||||||
|
exports.install = function(options) {
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
if (options.environment) {
|
||||||
|
environment = options.environment;
|
||||||
|
if (["node", "browser", "auto"].indexOf(environment) === -1) {
|
||||||
|
throw new Error("environment " + environment + " was unknown. Available options are {auto, browser, node}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use dynamicRequire to avoid including in browser bundles
|
||||||
|
var Module = dynamicRequire(module, 'module');
|
||||||
|
|
||||||
|
// Redirect subsequent imports of "source-map-support"
|
||||||
|
// to this package
|
||||||
|
const {redirectConflictingLibrary = true, onConflictingLibraryRedirect} = options;
|
||||||
|
if(redirectConflictingLibrary) {
|
||||||
|
if (!sharedData.moduleResolveFilenameHook) {
|
||||||
|
const originalValue = Module._resolveFilename;
|
||||||
|
const moduleResolveFilenameHook = sharedData.moduleResolveFilenameHook = {
|
||||||
|
enabled: true,
|
||||||
|
originalValue,
|
||||||
|
installedValue: undefined,
|
||||||
|
}
|
||||||
|
Module._resolveFilename = sharedData.moduleResolveFilenameHook.installedValue = function (request, parent, isMain, options) {
|
||||||
|
if (moduleResolveFilenameHook.enabled) {
|
||||||
|
// Match all source-map-support entrypoints: source-map-support, source-map-support/register
|
||||||
|
let requestRedirect;
|
||||||
|
if (request === 'source-map-support') {
|
||||||
|
requestRedirect = './';
|
||||||
|
} else if (request === 'source-map-support/register') {
|
||||||
|
requestRedirect = './register';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (requestRedirect !== undefined) {
|
||||||
|
const newRequest = require.resolve(requestRedirect);
|
||||||
|
for (const cb of sharedData.onConflictingLibraryRedirectArr) {
|
||||||
|
cb(request, parent, isMain, options, newRequest);
|
||||||
|
}
|
||||||
|
request = newRequest;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return originalValue.call(this, request, parent, isMain, options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (onConflictingLibraryRedirect) {
|
||||||
|
sharedData.onConflictingLibraryRedirectArr.push(onConflictingLibraryRedirect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allow sources to be found by methods other than reading the files
|
||||||
|
// directly from disk.
|
||||||
|
if (options.retrieveFile) {
|
||||||
|
if (options.overrideRetrieveFile) {
|
||||||
|
sharedData.retrieveFileHandlers.length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sharedData.retrieveFileHandlers.unshift(options.retrieveFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allow source maps to be found by methods other than reading the files
|
||||||
|
// directly from disk.
|
||||||
|
if (options.retrieveSourceMap) {
|
||||||
|
if (options.overrideRetrieveSourceMap) {
|
||||||
|
sharedData.retrieveMapHandlers.length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sharedData.retrieveMapHandlers.unshift(options.retrieveSourceMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Support runtime transpilers that include inline source maps
|
||||||
|
if (options.hookRequire && !isInBrowser()) {
|
||||||
|
var $compile = Module.prototype._compile;
|
||||||
|
|
||||||
|
if (!$compile.__sourceMapSupport) {
|
||||||
|
Module.prototype._compile = function(content, filename) {
|
||||||
|
setFileContentsCache(filename, content);
|
||||||
|
setSourceMapCache(filename, undefined);
|
||||||
|
return $compile.call(this, content, filename);
|
||||||
|
};
|
||||||
|
|
||||||
|
Module.prototype._compile.__sourceMapSupport = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure options
|
||||||
|
if (!sharedData.emptyCacheBetweenOperations) {
|
||||||
|
sharedData.emptyCacheBetweenOperations = 'emptyCacheBetweenOperations' in options ?
|
||||||
|
options.emptyCacheBetweenOperations : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Install the error reformatter
|
||||||
|
if (!sharedData.errorPrepareStackTraceHook) {
|
||||||
|
const originalValue = Error.prepareStackTrace;
|
||||||
|
sharedData.errorPrepareStackTraceHook = {
|
||||||
|
enabled: true,
|
||||||
|
originalValue,
|
||||||
|
installedValue: undefined
|
||||||
|
};
|
||||||
|
Error.prepareStackTrace = sharedData.errorPrepareStackTraceHook.installedValue = createPrepareStackTrace(sharedData.errorPrepareStackTraceHook);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sharedData.processEmitHook) {
|
||||||
|
var installHandler = 'handleUncaughtExceptions' in options ?
|
||||||
|
options.handleUncaughtExceptions : true;
|
||||||
|
|
||||||
|
// Do not override 'uncaughtException' with our own handler in Node.js
|
||||||
|
// Worker threads. Workers pass the error to the main thread as an event,
|
||||||
|
// rather than printing something to stderr and exiting.
|
||||||
|
try {
|
||||||
|
// We need to use `dynamicRequire` because `require` on it's own will be optimized by WebPack/Browserify.
|
||||||
|
var worker_threads = dynamicRequire(module, 'worker_threads');
|
||||||
|
if (worker_threads.isMainThread === false) {
|
||||||
|
installHandler = false;
|
||||||
|
}
|
||||||
|
} catch(e) {}
|
||||||
|
|
||||||
|
// Provide the option to not install the uncaught exception handler. This is
|
||||||
|
// to support other uncaught exception handlers (in test frameworks, for
|
||||||
|
// example). If this handler is not installed and there are no other uncaught
|
||||||
|
// exception handlers, uncaught exceptions will be caught by node's built-in
|
||||||
|
// exception handler and the process will still be terminated. However, the
|
||||||
|
// generated JavaScript code will be shown above the stack trace instead of
|
||||||
|
// the original source code.
|
||||||
|
if (installHandler && hasGlobalProcessEventEmitter()) {
|
||||||
|
shimEmitUncaughtException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.uninstall = function() {
|
||||||
|
if(sharedData.processEmitHook) {
|
||||||
|
// Disable behavior
|
||||||
|
sharedData.processEmitHook.enabled = false;
|
||||||
|
// If possible, remove our hook function. May not be possible if subsequent third-party hooks have wrapped around us.
|
||||||
|
if(process.emit === sharedData.processEmitHook.installedValue) {
|
||||||
|
process.emit = sharedData.processEmitHook.originalValue;
|
||||||
|
}
|
||||||
|
sharedData.processEmitHook = undefined;
|
||||||
|
}
|
||||||
|
if(sharedData.errorPrepareStackTraceHook) {
|
||||||
|
// Disable behavior
|
||||||
|
sharedData.errorPrepareStackTraceHook.enabled = false;
|
||||||
|
// If possible or necessary, remove our hook function.
|
||||||
|
// In vanilla environments, prepareStackTrace is `undefined`.
|
||||||
|
// We cannot delegate to `undefined` the way we can to a function w/`.apply()`; our only option is to remove the function.
|
||||||
|
// If we are the *first* hook installed, and another was installed on top of us, we have no choice but to remove both.
|
||||||
|
if(Error.prepareStackTrace === sharedData.errorPrepareStackTraceHook.installedValue || typeof sharedData.errorPrepareStackTraceHook.originalValue !== 'function') {
|
||||||
|
Error.prepareStackTrace = sharedData.errorPrepareStackTraceHook.originalValue;
|
||||||
|
}
|
||||||
|
sharedData.errorPrepareStackTraceHook = undefined;
|
||||||
|
}
|
||||||
|
if (sharedData.moduleResolveFilenameHook) {
|
||||||
|
// Disable behavior
|
||||||
|
sharedData.moduleResolveFilenameHook.enabled = false;
|
||||||
|
// If possible, remove our hook function. May not be possible if subsequent third-party hooks have wrapped around us.
|
||||||
|
var Module = dynamicRequire(module, 'module');
|
||||||
|
if(Module._resolveFilename === sharedData.moduleResolveFilenameHook.installedValue) {
|
||||||
|
Module._resolveFilename = sharedData.moduleResolveFilenameHook.originalValue;
|
||||||
|
}
|
||||||
|
sharedData.moduleResolveFilenameHook = undefined;
|
||||||
|
}
|
||||||
|
sharedData.onConflictingLibraryRedirectArr.length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.resetRetrieveHandlers = function() {
|
||||||
|
sharedData.retrieveFileHandlers.length = 0;
|
||||||
|
sharedData.retrieveMapHandlers.length = 0;
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1 @@
|
||||||
|
export { Buffer } from '_node-buffer-polyfill_.js'
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
export { process } from '_node-process-polyfill_.js'
|
||||||
7
node_modules/@esbuild-plugins/node-globals-polyfill/dist/index.d.ts
generated
vendored
Normal file
7
node_modules/@esbuild-plugins/node-globals-polyfill/dist/index.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
import * as esbuild from 'esbuild';
|
||||||
|
export declare function NodeGlobalsPolyfillPlugin({ buffer, process, }?: {
|
||||||
|
buffer?: boolean | undefined;
|
||||||
|
process?: boolean | undefined;
|
||||||
|
}): esbuild.Plugin;
|
||||||
|
export default NodeGlobalsPolyfillPlugin;
|
||||||
|
//# sourceMappingURL=index.d.ts.map
|
||||||
1
node_modules/@esbuild-plugins/node-globals-polyfill/dist/index.d.ts.map
generated
vendored
Normal file
1
node_modules/@esbuild-plugins/node-globals-polyfill/dist/index.d.ts.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAElC,wBAAgB,yBAAyB,CAAC,EACtC,MAAc,EAEd,OAAc,GACjB;;;CAAK,GAAG,OAAO,CAAC,MAAM,CAyEtB;AAED,eAAe,yBAAyB,CAAA"}
|
||||||
|
|
@ -0,0 +1,80 @@
|
||||||
|
"use strict";
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.NodeGlobalsPolyfillPlugin = void 0;
|
||||||
|
const path_1 = __importDefault(require("path"));
|
||||||
|
function NodeGlobalsPolyfillPlugin({ buffer = false,
|
||||||
|
// define = {},
|
||||||
|
process = true, } = {}) {
|
||||||
|
return {
|
||||||
|
name: 'node-globals-polyfill',
|
||||||
|
setup({ initialOptions, onResolve, onLoad }) {
|
||||||
|
onResolve({ filter: /_node-buffer-polyfill_\.js/ }, (arg) => {
|
||||||
|
return {
|
||||||
|
path: path_1.default.resolve(__dirname, '../Buffer.js'),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
onResolve({ filter: /_node-process-polyfill_\.js/ }, (arg) => {
|
||||||
|
return {
|
||||||
|
path: path_1.default.resolve(__dirname, '../process.js'),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
// TODO esbuild cannot use virtual modules for inject: https://github.com/evanw/esbuild/issues/2762
|
||||||
|
// onLoad({ filter: /_virtual-process-polyfill_\.js/ }, (arg) => {
|
||||||
|
// const data = fs
|
||||||
|
// .readFileSync(path.resolve(__dirname, '../process.js'))
|
||||||
|
// .toString()
|
||||||
|
// const keys = Object.keys(define)
|
||||||
|
// return {
|
||||||
|
// loader: 'js',
|
||||||
|
// contents: data.replace(
|
||||||
|
// `const defines = {}`,
|
||||||
|
// 'const defines = {\n' +
|
||||||
|
// keys
|
||||||
|
// .filter((x) => x.startsWith('process.'))
|
||||||
|
// .sort((a, b) => a.length - b.length)
|
||||||
|
// .map(
|
||||||
|
// (k) =>
|
||||||
|
// ` ${JSON.stringify(k).replace(
|
||||||
|
// 'process.',
|
||||||
|
// '',
|
||||||
|
// )}: ${define[k]},`,
|
||||||
|
// )
|
||||||
|
// .join('\n') +
|
||||||
|
// '\n}',
|
||||||
|
// ),
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
onResolve({ filter: /_virtual-process-polyfill_\.js/ }, () => {
|
||||||
|
return {
|
||||||
|
path: path_1.default.resolve(__dirname, '../process.js'),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
onResolve({ filter: /_virtual-buffer-polyfill_\.js/ }, () => {
|
||||||
|
return {
|
||||||
|
path: path_1.default.resolve(__dirname, '../_buffer.js'),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const polyfills = [];
|
||||||
|
if (process) {
|
||||||
|
polyfills.push(path_1.default.resolve(__dirname, '../_virtual-process-polyfill_.js'));
|
||||||
|
}
|
||||||
|
if (buffer) {
|
||||||
|
polyfills.push(path_1.default.resolve(__dirname, '../_virtual-buffer-polyfill_.js'));
|
||||||
|
}
|
||||||
|
if (initialOptions.inject) {
|
||||||
|
initialOptions.inject.push(...polyfills);
|
||||||
|
// handle duplicate plugin
|
||||||
|
initialOptions.inject = [...new Set(initialOptions.inject)];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
initialOptions.inject = [...polyfills];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
exports.NodeGlobalsPolyfillPlugin = NodeGlobalsPolyfillPlugin;
|
||||||
|
exports.default = NodeGlobalsPolyfillPlugin;
|
||||||
|
//# sourceMappingURL=index.js.map
|
||||||
1
node_modules/@esbuild-plugins/node-globals-polyfill/dist/index.js.map
generated
vendored
Normal file
1
node_modules/@esbuild-plugins/node-globals-polyfill/dist/index.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AAIvB,SAAgB,yBAAyB,CAAC,EACtC,MAAM,GAAG,KAAK;AACd,eAAe;AACf,OAAO,GAAG,IAAI,GACjB,GAAG,EAAE;IACF,OAAO;QACH,IAAI,EAAE,uBAAuB;QAC7B,KAAK,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE;YACvC,SAAS,CAAC,EAAE,MAAM,EAAE,4BAA4B,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxD,OAAO;oBACH,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC;iBAChD,CAAA;YACL,CAAC,CAAC,CAAA;YACF,SAAS,CAAC,EAAE,MAAM,EAAE,6BAA6B,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;gBACzD,OAAO;oBACH,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC;iBACjD,CAAA;YACL,CAAC,CAAC,CAAA;YAEF,mGAAmG;YACnG,kEAAkE;YAClE,sBAAsB;YACtB,kEAAkE;YAClE,sBAAsB;YAEtB,uCAAuC;YACvC,eAAe;YACf,wBAAwB;YACxB,kCAAkC;YAClC,oCAAoC;YACpC,sCAAsC;YACtC,uBAAuB;YACvB,+DAA+D;YAC/D,2DAA2D;YAC3D,4BAA4B;YAC5B,iCAAiC;YACjC,8DAA8D;YAC9D,8CAA8C;YAC9C,sCAAsC;YACtC,kDAAkD;YAClD,wBAAwB;YACxB,oCAAoC;YACpC,yBAAyB;YACzB,aAAa;YACb,QAAQ;YACR,KAAK;YACL,SAAS,CAAC,EAAE,MAAM,EAAE,gCAAgC,EAAE,EAAE,GAAG,EAAE;gBACzD,OAAO;oBACH,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC;iBACjD,CAAA;YACL,CAAC,CAAC,CAAA;YACF,SAAS,CAAC,EAAE,MAAM,EAAE,+BAA+B,EAAE,EAAE,GAAG,EAAE;gBACxD,OAAO;oBACH,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC;iBACjD,CAAA;YACL,CAAC,CAAC,CAAA;YAEF,MAAM,SAAS,GAAa,EAAE,CAAA;YAC9B,IAAI,OAAO,EAAE;gBACT,SAAS,CAAC,IAAI,CACV,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kCAAkC,CAAC,CAC9D,CAAA;aACJ;YACD,IAAI,MAAM,EAAE;gBACR,SAAS,CAAC,IAAI,CACV,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAC7D,CAAA;aACJ;YACD,IAAI,cAAc,CAAC,MAAM,EAAE;gBACvB,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;gBACxC,0BAA0B;gBAC1B,cAAc,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;aAC9D;iBAAM;gBACH,cAAc,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAA;aACzC;QACL,CAAC;KACJ,CAAA;AACL,CAAC;AA7ED,8DA6EC;AAED,kBAAe,yBAAyB,CAAA"}
|
||||||
2
node_modules/@esbuild-plugins/node-globals-polyfill/dist/index.test.d.ts
generated
vendored
Normal file
2
node_modules/@esbuild-plugins/node-globals-polyfill/dist/index.test.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
export {};
|
||||||
|
//# sourceMappingURL=index.test.d.ts.map
|
||||||
1
node_modules/@esbuild-plugins/node-globals-polyfill/dist/index.test.d.ts.map
generated
vendored
Normal file
1
node_modules/@esbuild-plugins/node-globals-polyfill/dist/index.test.d.ts.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
|
||||||
139
node_modules/@esbuild-plugins/node-globals-polyfill/dist/index.test.js
generated
vendored
Normal file
139
node_modules/@esbuild-plugins/node-globals-polyfill/dist/index.test.js
generated
vendored
Normal file
|
|
@ -0,0 +1,139 @@
|
||||||
|
"use strict";
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const esbuild_1 = require("esbuild");
|
||||||
|
const test_support_1 = require("test-support");
|
||||||
|
const _1 = require(".");
|
||||||
|
require('debug').enable(require('../package.json').name);
|
||||||
|
test('process works', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield test_support_1.writeFiles({
|
||||||
|
'entry.ts': `process.version`,
|
||||||
|
});
|
||||||
|
const res = yield esbuild_1.build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
inject: [require.resolve('../process')],
|
||||||
|
});
|
||||||
|
const output = res.outputFiles[0].text;
|
||||||
|
// console.log(output)
|
||||||
|
eval(output);
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test('process is tree shaken', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield test_support_1.writeFiles({
|
||||||
|
'entry.ts': `console.log('hei')`,
|
||||||
|
});
|
||||||
|
const res = yield esbuild_1.build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
inject: [require.resolve('../process')],
|
||||||
|
});
|
||||||
|
const output = res.outputFiles[0].text;
|
||||||
|
expect(output).not.toContain('process');
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
// TODO esbuild cannot use virtual modules for inject: https://github.com/evanw/esbuild/issues/2762
|
||||||
|
test('process env vars are replaced with ones from define', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield test_support_1.writeFiles({
|
||||||
|
'entry.ts': `if (process.env.VAR !== 'hello') { throw new Error('process.env.VAR not right: ' + process.env.VAR) }`,
|
||||||
|
});
|
||||||
|
const res = yield esbuild_1.build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
define: {
|
||||||
|
'process.env.VAR': '"hello"',
|
||||||
|
},
|
||||||
|
plugins: [_1.NodeGlobalsPolyfillPlugin({})],
|
||||||
|
});
|
||||||
|
const output = res.outputFiles[0].text;
|
||||||
|
eval(output);
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test('Buffer works', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield test_support_1.writeFiles({
|
||||||
|
'entry.ts': `console.log(Buffer.from('xxx').toString())`,
|
||||||
|
});
|
||||||
|
const res = yield esbuild_1.build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
inject: [require.resolve('../Buffer')],
|
||||||
|
});
|
||||||
|
const output = res.outputFiles[0].text;
|
||||||
|
// console.log(output)
|
||||||
|
eval(output);
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test('Buffer is tree shaken', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield test_support_1.writeFiles({
|
||||||
|
'entry.ts': `console.log('hei')`,
|
||||||
|
});
|
||||||
|
const res = yield esbuild_1.build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
inject: [require.resolve('../Buffer')],
|
||||||
|
});
|
||||||
|
const output = res.outputFiles[0].text;
|
||||||
|
expect(output).not.toContain('Buffer');
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test('Buffer works using plugin', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield test_support_1.writeFiles({
|
||||||
|
'entry.ts': `
|
||||||
|
let buf = new Buffer(256);
|
||||||
|
let len = buf.write("Simply Easy Learning");
|
||||||
|
console.log("Octets written : "+ len);`,
|
||||||
|
});
|
||||||
|
const res = yield esbuild_1.build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
plugins: [_1.NodeGlobalsPolyfillPlugin({ buffer: true })],
|
||||||
|
});
|
||||||
|
const output = res.outputFiles[0].text;
|
||||||
|
// console.log(output)
|
||||||
|
eval(output);
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test('process works using plugin', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield test_support_1.writeFiles({
|
||||||
|
'entry.ts': `console.log(process.cwd())`,
|
||||||
|
});
|
||||||
|
const res = yield esbuild_1.build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
plugins: [_1.NodeGlobalsPolyfillPlugin({ process: true })],
|
||||||
|
});
|
||||||
|
const output = res.outputFiles[0].text;
|
||||||
|
// console.log(output)
|
||||||
|
eval(output);
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
//# sourceMappingURL=index.test.js.map
|
||||||
1
node_modules/@esbuild-plugins/node-globals-polyfill/dist/index.test.js.map
generated
vendored
Normal file
1
node_modules/@esbuild-plugins/node-globals-polyfill/dist/index.test.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
import * as esbuild from 'esbuild';
|
||||||
|
export declare function NodeGlobalsPolyfillPlugin({ buffer, process, }?: {
|
||||||
|
buffer?: boolean | undefined;
|
||||||
|
process?: boolean | undefined;
|
||||||
|
}): esbuild.Plugin;
|
||||||
|
export default NodeGlobalsPolyfillPlugin;
|
||||||
|
//# sourceMappingURL=index.d.ts.map
|
||||||
1
node_modules/@esbuild-plugins/node-globals-polyfill/esm/index.d.ts.map
generated
vendored
Normal file
1
node_modules/@esbuild-plugins/node-globals-polyfill/esm/index.d.ts.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAElC,wBAAgB,yBAAyB,CAAC,EACtC,MAAc,EAEd,OAAc,GACjB;;;CAAK,GAAG,OAAO,CAAC,MAAM,CAyEtB;AAED,eAAe,yBAAyB,CAAA"}
|
||||||
|
|
@ -0,0 +1,73 @@
|
||||||
|
import path from 'path';
|
||||||
|
export function NodeGlobalsPolyfillPlugin({ buffer = false,
|
||||||
|
// define = {},
|
||||||
|
process = true, } = {}) {
|
||||||
|
return {
|
||||||
|
name: 'node-globals-polyfill',
|
||||||
|
setup({ initialOptions, onResolve, onLoad }) {
|
||||||
|
onResolve({ filter: /_node-buffer-polyfill_\.js/ }, (arg) => {
|
||||||
|
return {
|
||||||
|
path: path.resolve(__dirname, '../Buffer.js'),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
onResolve({ filter: /_node-process-polyfill_\.js/ }, (arg) => {
|
||||||
|
return {
|
||||||
|
path: path.resolve(__dirname, '../process.js'),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
// TODO esbuild cannot use virtual modules for inject: https://github.com/evanw/esbuild/issues/2762
|
||||||
|
// onLoad({ filter: /_virtual-process-polyfill_\.js/ }, (arg) => {
|
||||||
|
// const data = fs
|
||||||
|
// .readFileSync(path.resolve(__dirname, '../process.js'))
|
||||||
|
// .toString()
|
||||||
|
// const keys = Object.keys(define)
|
||||||
|
// return {
|
||||||
|
// loader: 'js',
|
||||||
|
// contents: data.replace(
|
||||||
|
// `const defines = {}`,
|
||||||
|
// 'const defines = {\n' +
|
||||||
|
// keys
|
||||||
|
// .filter((x) => x.startsWith('process.'))
|
||||||
|
// .sort((a, b) => a.length - b.length)
|
||||||
|
// .map(
|
||||||
|
// (k) =>
|
||||||
|
// ` ${JSON.stringify(k).replace(
|
||||||
|
// 'process.',
|
||||||
|
// '',
|
||||||
|
// )}: ${define[k]},`,
|
||||||
|
// )
|
||||||
|
// .join('\n') +
|
||||||
|
// '\n}',
|
||||||
|
// ),
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
onResolve({ filter: /_virtual-process-polyfill_\.js/ }, () => {
|
||||||
|
return {
|
||||||
|
path: path.resolve(__dirname, '../process.js'),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
onResolve({ filter: /_virtual-buffer-polyfill_\.js/ }, () => {
|
||||||
|
return {
|
||||||
|
path: path.resolve(__dirname, '../_buffer.js'),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const polyfills = [];
|
||||||
|
if (process) {
|
||||||
|
polyfills.push(path.resolve(__dirname, '../_virtual-process-polyfill_.js'));
|
||||||
|
}
|
||||||
|
if (buffer) {
|
||||||
|
polyfills.push(path.resolve(__dirname, '../_virtual-buffer-polyfill_.js'));
|
||||||
|
}
|
||||||
|
if (initialOptions.inject) {
|
||||||
|
initialOptions.inject.push(...polyfills);
|
||||||
|
// handle duplicate plugin
|
||||||
|
initialOptions.inject = [...new Set(initialOptions.inject)];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
initialOptions.inject = [...polyfills];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
export default NodeGlobalsPolyfillPlugin;
|
||||||
|
//# sourceMappingURL=index.js.map
|
||||||
1
node_modules/@esbuild-plugins/node-globals-polyfill/esm/index.js.map
generated
vendored
Normal file
1
node_modules/@esbuild-plugins/node-globals-polyfill/esm/index.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAIvB,MAAM,UAAU,yBAAyB,CAAC,EACtC,MAAM,GAAG,KAAK;AACd,eAAe;AACf,OAAO,GAAG,IAAI,GACjB,GAAG,EAAE;IACF,OAAO;QACH,IAAI,EAAE,uBAAuB;QAC7B,KAAK,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE;YACvC,SAAS,CAAC,EAAE,MAAM,EAAE,4BAA4B,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxD,OAAO;oBACH,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC;iBAChD,CAAA;YACL,CAAC,CAAC,CAAA;YACF,SAAS,CAAC,EAAE,MAAM,EAAE,6BAA6B,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;gBACzD,OAAO;oBACH,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC;iBACjD,CAAA;YACL,CAAC,CAAC,CAAA;YAEF,mGAAmG;YACnG,kEAAkE;YAClE,sBAAsB;YACtB,kEAAkE;YAClE,sBAAsB;YAEtB,uCAAuC;YACvC,eAAe;YACf,wBAAwB;YACxB,kCAAkC;YAClC,oCAAoC;YACpC,sCAAsC;YACtC,uBAAuB;YACvB,+DAA+D;YAC/D,2DAA2D;YAC3D,4BAA4B;YAC5B,iCAAiC;YACjC,8DAA8D;YAC9D,8CAA8C;YAC9C,sCAAsC;YACtC,kDAAkD;YAClD,wBAAwB;YACxB,oCAAoC;YACpC,yBAAyB;YACzB,aAAa;YACb,QAAQ;YACR,KAAK;YACL,SAAS,CAAC,EAAE,MAAM,EAAE,gCAAgC,EAAE,EAAE,GAAG,EAAE;gBACzD,OAAO;oBACH,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC;iBACjD,CAAA;YACL,CAAC,CAAC,CAAA;YACF,SAAS,CAAC,EAAE,MAAM,EAAE,+BAA+B,EAAE,EAAE,GAAG,EAAE;gBACxD,OAAO;oBACH,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC;iBACjD,CAAA;YACL,CAAC,CAAC,CAAA;YAEF,MAAM,SAAS,GAAa,EAAE,CAAA;YAC9B,IAAI,OAAO,EAAE;gBACT,SAAS,CAAC,IAAI,CACV,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kCAAkC,CAAC,CAC9D,CAAA;aACJ;YACD,IAAI,MAAM,EAAE;gBACR,SAAS,CAAC,IAAI,CACV,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAC7D,CAAA;aACJ;YACD,IAAI,cAAc,CAAC,MAAM,EAAE;gBACvB,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;gBACxC,0BAA0B;gBAC1B,cAAc,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;aAC9D;iBAAM;gBACH,cAAc,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAA;aACzC;QACL,CAAC;KACJ,CAAA;AACL,CAAC;AAED,eAAe,yBAAyB,CAAA"}
|
||||||
2
node_modules/@esbuild-plugins/node-globals-polyfill/esm/index.test.d.ts
generated
vendored
Normal file
2
node_modules/@esbuild-plugins/node-globals-polyfill/esm/index.test.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
export {};
|
||||||
|
//# sourceMappingURL=index.test.d.ts.map
|
||||||
1
node_modules/@esbuild-plugins/node-globals-polyfill/esm/index.test.d.ts.map
generated
vendored
Normal file
1
node_modules/@esbuild-plugins/node-globals-polyfill/esm/index.test.d.ts.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
|
||||||
137
node_modules/@esbuild-plugins/node-globals-polyfill/esm/index.test.js
generated
vendored
Normal file
137
node_modules/@esbuild-plugins/node-globals-polyfill/esm/index.test.js
generated
vendored
Normal file
|
|
@ -0,0 +1,137 @@
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
import { build } from 'esbuild';
|
||||||
|
import { writeFiles } from 'test-support';
|
||||||
|
import { NodeGlobalsPolyfillPlugin } from '.';
|
||||||
|
require('debug').enable(require('../package.json').name);
|
||||||
|
test('process works', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield writeFiles({
|
||||||
|
'entry.ts': `process.version`,
|
||||||
|
});
|
||||||
|
const res = yield build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
inject: [require.resolve('../process')],
|
||||||
|
});
|
||||||
|
const output = res.outputFiles[0].text;
|
||||||
|
// console.log(output)
|
||||||
|
eval(output);
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test('process is tree shaken', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield writeFiles({
|
||||||
|
'entry.ts': `console.log('hei')`,
|
||||||
|
});
|
||||||
|
const res = yield build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
inject: [require.resolve('../process')],
|
||||||
|
});
|
||||||
|
const output = res.outputFiles[0].text;
|
||||||
|
expect(output).not.toContain('process');
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
// TODO esbuild cannot use virtual modules for inject: https://github.com/evanw/esbuild/issues/2762
|
||||||
|
test('process env vars are replaced with ones from define', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield writeFiles({
|
||||||
|
'entry.ts': `if (process.env.VAR !== 'hello') { throw new Error('process.env.VAR not right: ' + process.env.VAR) }`,
|
||||||
|
});
|
||||||
|
const res = yield build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
define: {
|
||||||
|
'process.env.VAR': '"hello"',
|
||||||
|
},
|
||||||
|
plugins: [NodeGlobalsPolyfillPlugin({})],
|
||||||
|
});
|
||||||
|
const output = res.outputFiles[0].text;
|
||||||
|
eval(output);
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test('Buffer works', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield writeFiles({
|
||||||
|
'entry.ts': `console.log(Buffer.from('xxx').toString())`,
|
||||||
|
});
|
||||||
|
const res = yield build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
inject: [require.resolve('../Buffer')],
|
||||||
|
});
|
||||||
|
const output = res.outputFiles[0].text;
|
||||||
|
// console.log(output)
|
||||||
|
eval(output);
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test('Buffer is tree shaken', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield writeFiles({
|
||||||
|
'entry.ts': `console.log('hei')`,
|
||||||
|
});
|
||||||
|
const res = yield build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
inject: [require.resolve('../Buffer')],
|
||||||
|
});
|
||||||
|
const output = res.outputFiles[0].text;
|
||||||
|
expect(output).not.toContain('Buffer');
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test('Buffer works using plugin', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield writeFiles({
|
||||||
|
'entry.ts': `
|
||||||
|
let buf = new Buffer(256);
|
||||||
|
let len = buf.write("Simply Easy Learning");
|
||||||
|
console.log("Octets written : "+ len);`,
|
||||||
|
});
|
||||||
|
const res = yield build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
plugins: [NodeGlobalsPolyfillPlugin({ buffer: true })],
|
||||||
|
});
|
||||||
|
const output = res.outputFiles[0].text;
|
||||||
|
// console.log(output)
|
||||||
|
eval(output);
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test('process works using plugin', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield writeFiles({
|
||||||
|
'entry.ts': `console.log(process.cwd())`,
|
||||||
|
});
|
||||||
|
const res = yield build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
plugins: [NodeGlobalsPolyfillPlugin({ process: true })],
|
||||||
|
});
|
||||||
|
const output = res.outputFiles[0].text;
|
||||||
|
// console.log(output)
|
||||||
|
eval(output);
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
//# sourceMappingURL=index.test.js.map
|
||||||
1
node_modules/@esbuild-plugins/node-globals-polyfill/esm/index.test.js.map
generated
vendored
Normal file
1
node_modules/@esbuild-plugins/node-globals-polyfill/esm/index.test.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
{
|
||||||
|
"name": "@esbuild-plugins/node-globals-polyfill",
|
||||||
|
"version": "0.2.3",
|
||||||
|
"description": "",
|
||||||
|
"preferUnplugged": true,
|
||||||
|
"sideEffects": false,
|
||||||
|
"main": "dist/index.js",
|
||||||
|
"module": "esm/index.js",
|
||||||
|
"types": "dist/index.d.ts",
|
||||||
|
"repository": "https://github.com/remorses/esbuild-plugins.git",
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc && tsc -m es6 --outDir esm",
|
||||||
|
"watch": "tsc -w"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"dist",
|
||||||
|
"src",
|
||||||
|
"esm",
|
||||||
|
"Buffer.js",
|
||||||
|
"process.js",
|
||||||
|
"_buffer.js",
|
||||||
|
"_process.js"
|
||||||
|
],
|
||||||
|
"keywords": [],
|
||||||
|
"author": "Tommaso De Rossi, morse <beats.by.morse@gmail.com>",
|
||||||
|
"license": "ISC",
|
||||||
|
"devDependencies": {
|
||||||
|
"test-support": "*"
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"peerDependencies": {
|
||||||
|
"esbuild": "*"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,245 @@
|
||||||
|
// shim for using process in browser
|
||||||
|
// based off https://github.com/defunctzombie/node-process/blob/master/browser.js
|
||||||
|
|
||||||
|
function defaultSetTimout() {
|
||||||
|
throw new Error('setTimeout has not been defined')
|
||||||
|
}
|
||||||
|
function defaultClearTimeout() {
|
||||||
|
throw new Error('clearTimeout has not been defined')
|
||||||
|
}
|
||||||
|
var cachedSetTimeout = defaultSetTimout
|
||||||
|
var cachedClearTimeout = defaultClearTimeout
|
||||||
|
if (typeof global.setTimeout === 'function') {
|
||||||
|
cachedSetTimeout = setTimeout
|
||||||
|
}
|
||||||
|
if (typeof global.clearTimeout === 'function') {
|
||||||
|
cachedClearTimeout = clearTimeout
|
||||||
|
}
|
||||||
|
|
||||||
|
function runTimeout(fun) {
|
||||||
|
if (cachedSetTimeout === setTimeout) {
|
||||||
|
//normal enviroments in sane situations
|
||||||
|
return setTimeout(fun, 0)
|
||||||
|
}
|
||||||
|
// if setTimeout wasn't available but was latter defined
|
||||||
|
if (
|
||||||
|
(cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) &&
|
||||||
|
setTimeout
|
||||||
|
) {
|
||||||
|
cachedSetTimeout = setTimeout
|
||||||
|
return setTimeout(fun, 0)
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
// when when somebody has screwed with setTimeout but no I.E. maddness
|
||||||
|
return cachedSetTimeout(fun, 0)
|
||||||
|
} catch (e) {
|
||||||
|
try {
|
||||||
|
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
|
||||||
|
return cachedSetTimeout.call(null, fun, 0)
|
||||||
|
} catch (e) {
|
||||||
|
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
|
||||||
|
return cachedSetTimeout.call(this, fun, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function runClearTimeout(marker) {
|
||||||
|
if (cachedClearTimeout === clearTimeout) {
|
||||||
|
//normal enviroments in sane situations
|
||||||
|
return clearTimeout(marker)
|
||||||
|
}
|
||||||
|
// if clearTimeout wasn't available but was latter defined
|
||||||
|
if (
|
||||||
|
(cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) &&
|
||||||
|
clearTimeout
|
||||||
|
) {
|
||||||
|
cachedClearTimeout = clearTimeout
|
||||||
|
return clearTimeout(marker)
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
// when when somebody has screwed with setTimeout but no I.E. maddness
|
||||||
|
return cachedClearTimeout(marker)
|
||||||
|
} catch (e) {
|
||||||
|
try {
|
||||||
|
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
|
||||||
|
return cachedClearTimeout.call(null, marker)
|
||||||
|
} catch (e) {
|
||||||
|
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
|
||||||
|
// Some versions of I.E. have different rules for clearTimeout vs setTimeout
|
||||||
|
return cachedClearTimeout.call(this, marker)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var queue = []
|
||||||
|
var draining = false
|
||||||
|
var currentQueue
|
||||||
|
var queueIndex = -1
|
||||||
|
|
||||||
|
function cleanUpNextTick() {
|
||||||
|
if (!draining || !currentQueue) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
draining = false
|
||||||
|
if (currentQueue.length) {
|
||||||
|
queue = currentQueue.concat(queue)
|
||||||
|
} else {
|
||||||
|
queueIndex = -1
|
||||||
|
}
|
||||||
|
if (queue.length) {
|
||||||
|
drainQueue()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function drainQueue() {
|
||||||
|
if (draining) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var timeout = runTimeout(cleanUpNextTick)
|
||||||
|
draining = true
|
||||||
|
|
||||||
|
var len = queue.length
|
||||||
|
while (len) {
|
||||||
|
currentQueue = queue
|
||||||
|
queue = []
|
||||||
|
while (++queueIndex < len) {
|
||||||
|
if (currentQueue) {
|
||||||
|
currentQueue[queueIndex].run()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
queueIndex = -1
|
||||||
|
len = queue.length
|
||||||
|
}
|
||||||
|
currentQueue = null
|
||||||
|
draining = false
|
||||||
|
runClearTimeout(timeout)
|
||||||
|
}
|
||||||
|
function nextTick(fun) {
|
||||||
|
var args = new Array(arguments.length - 1)
|
||||||
|
if (arguments.length > 1) {
|
||||||
|
for (var i = 1; i < arguments.length; i++) {
|
||||||
|
args[i - 1] = arguments[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
queue.push(new Item(fun, args))
|
||||||
|
if (queue.length === 1 && !draining) {
|
||||||
|
runTimeout(drainQueue)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// v8 likes predictible objects
|
||||||
|
function Item(fun, array) {
|
||||||
|
this.fun = fun
|
||||||
|
this.array = array
|
||||||
|
}
|
||||||
|
Item.prototype.run = function() {
|
||||||
|
this.fun.apply(null, this.array)
|
||||||
|
}
|
||||||
|
var title = 'browser'
|
||||||
|
var platform = 'browser'
|
||||||
|
var browser = true
|
||||||
|
var env = {}
|
||||||
|
var argv = []
|
||||||
|
var version = '' // empty string to avoid regexp issues
|
||||||
|
var versions = {}
|
||||||
|
var release = {}
|
||||||
|
var config = {}
|
||||||
|
|
||||||
|
function noop() {}
|
||||||
|
|
||||||
|
var on = noop
|
||||||
|
var addListener = noop
|
||||||
|
var once = noop
|
||||||
|
var off = noop
|
||||||
|
var removeListener = noop
|
||||||
|
var removeAllListeners = noop
|
||||||
|
var emit = noop
|
||||||
|
|
||||||
|
function binding(name) {
|
||||||
|
throw new Error('process.binding is not supported')
|
||||||
|
}
|
||||||
|
|
||||||
|
function cwd() {
|
||||||
|
return '/'
|
||||||
|
}
|
||||||
|
function chdir(dir) {
|
||||||
|
throw new Error('process.chdir is not supported')
|
||||||
|
}
|
||||||
|
function umask() {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js
|
||||||
|
var performance = global.performance || {}
|
||||||
|
var performanceNow =
|
||||||
|
performance.now ||
|
||||||
|
performance.mozNow ||
|
||||||
|
performance.msNow ||
|
||||||
|
performance.oNow ||
|
||||||
|
performance.webkitNow ||
|
||||||
|
function() {
|
||||||
|
return new Date().getTime()
|
||||||
|
}
|
||||||
|
|
||||||
|
// generate timestamp or delta
|
||||||
|
// see http://nodejs.org/api/process.html#process_process_hrtime
|
||||||
|
function hrtime(previousTimestamp) {
|
||||||
|
var clocktime = performanceNow.call(performance) * 1e-3
|
||||||
|
var seconds = Math.floor(clocktime)
|
||||||
|
var nanoseconds = Math.floor((clocktime % 1) * 1e9)
|
||||||
|
if (previousTimestamp) {
|
||||||
|
seconds = seconds - previousTimestamp[0]
|
||||||
|
nanoseconds = nanoseconds - previousTimestamp[1]
|
||||||
|
if (nanoseconds < 0) {
|
||||||
|
seconds--
|
||||||
|
nanoseconds += 1e9
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [seconds, nanoseconds]
|
||||||
|
}
|
||||||
|
|
||||||
|
var startTime = new Date()
|
||||||
|
function uptime() {
|
||||||
|
var currentTime = new Date()
|
||||||
|
var dif = currentTime - startTime
|
||||||
|
return dif / 1000
|
||||||
|
}
|
||||||
|
|
||||||
|
export var process = {
|
||||||
|
nextTick: nextTick,
|
||||||
|
title: title,
|
||||||
|
browser: browser,
|
||||||
|
env: env,
|
||||||
|
argv: argv,
|
||||||
|
version: version,
|
||||||
|
versions: versions,
|
||||||
|
on: on,
|
||||||
|
addListener: addListener,
|
||||||
|
once: once,
|
||||||
|
off: off,
|
||||||
|
removeListener: removeListener,
|
||||||
|
removeAllListeners: removeAllListeners,
|
||||||
|
emit: emit,
|
||||||
|
binding: binding,
|
||||||
|
cwd: cwd,
|
||||||
|
chdir: chdir,
|
||||||
|
umask: umask,
|
||||||
|
hrtime: hrtime,
|
||||||
|
platform: platform,
|
||||||
|
release: release,
|
||||||
|
config: config,
|
||||||
|
uptime: uptime,
|
||||||
|
}
|
||||||
|
|
||||||
|
// replace process.env.VAR with define
|
||||||
|
|
||||||
|
const defines = {}
|
||||||
|
Object.keys(defines).forEach((key) => {
|
||||||
|
const segs = key.split('.')
|
||||||
|
let target = process
|
||||||
|
for (let i = 0; i < segs.length; i++) {
|
||||||
|
const seg = segs[i]
|
||||||
|
if (i === segs.length - 1) {
|
||||||
|
target[seg] = defines[key]
|
||||||
|
} else {
|
||||||
|
target = target[seg] || (target[seg] = {})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
155
node_modules/@esbuild-plugins/node-globals-polyfill/src/index.test.ts
generated
vendored
Normal file
155
node_modules/@esbuild-plugins/node-globals-polyfill/src/index.test.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,155 @@
|
||||||
|
import { build } from 'esbuild'
|
||||||
|
import { writeFiles } from 'test-support'
|
||||||
|
import { NodeGlobalsPolyfillPlugin } from '.'
|
||||||
|
|
||||||
|
require('debug').enable(require('../package.json').name)
|
||||||
|
|
||||||
|
test('process works', async () => {
|
||||||
|
const {
|
||||||
|
unlink,
|
||||||
|
paths: [ENTRY],
|
||||||
|
} = await writeFiles({
|
||||||
|
'entry.ts': `process.version`,
|
||||||
|
})
|
||||||
|
const res = await build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
inject: [require.resolve('../process')],
|
||||||
|
})
|
||||||
|
const output = res.outputFiles[0].text
|
||||||
|
// console.log(output)
|
||||||
|
eval(output)
|
||||||
|
unlink()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('process is tree shaken', async () => {
|
||||||
|
const {
|
||||||
|
unlink,
|
||||||
|
paths: [ENTRY],
|
||||||
|
} = await writeFiles({
|
||||||
|
'entry.ts': `console.log('hei')`,
|
||||||
|
})
|
||||||
|
const res = await build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
inject: [require.resolve('../process')],
|
||||||
|
})
|
||||||
|
const output = res.outputFiles[0].text
|
||||||
|
expect(output).not.toContain('process')
|
||||||
|
unlink()
|
||||||
|
})
|
||||||
|
|
||||||
|
// TODO esbuild cannot use virtual modules for inject: https://github.com/evanw/esbuild/issues/2762
|
||||||
|
test('process env vars are replaced with ones from define', async () => {
|
||||||
|
const {
|
||||||
|
unlink,
|
||||||
|
paths: [ENTRY],
|
||||||
|
} = await writeFiles({
|
||||||
|
'entry.ts': `if (process.env.VAR !== 'hello') { throw new Error('process.env.VAR not right: ' + process.env.VAR) }`,
|
||||||
|
})
|
||||||
|
const res = await build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
define: {
|
||||||
|
'process.env.VAR': '"hello"',
|
||||||
|
},
|
||||||
|
plugins: [NodeGlobalsPolyfillPlugin({})],
|
||||||
|
})
|
||||||
|
const output = res.outputFiles[0].text
|
||||||
|
eval(output)
|
||||||
|
unlink()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('Buffer works', async () => {
|
||||||
|
const {
|
||||||
|
unlink,
|
||||||
|
paths: [ENTRY],
|
||||||
|
} = await writeFiles({
|
||||||
|
'entry.ts': `console.log(Buffer.from('xxx').toString())`,
|
||||||
|
})
|
||||||
|
const res = await build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
inject: [require.resolve('../Buffer')],
|
||||||
|
})
|
||||||
|
const output = res.outputFiles[0].text
|
||||||
|
// console.log(output)
|
||||||
|
eval(output)
|
||||||
|
unlink()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('Buffer is tree shaken', async () => {
|
||||||
|
const {
|
||||||
|
unlink,
|
||||||
|
paths: [ENTRY],
|
||||||
|
} = await writeFiles({
|
||||||
|
'entry.ts': `console.log('hei')`,
|
||||||
|
})
|
||||||
|
const res = await build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
inject: [require.resolve('../Buffer')],
|
||||||
|
})
|
||||||
|
const output = res.outputFiles[0].text
|
||||||
|
expect(output).not.toContain('Buffer')
|
||||||
|
unlink()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('Buffer works using plugin', async () => {
|
||||||
|
const {
|
||||||
|
unlink,
|
||||||
|
paths: [ENTRY],
|
||||||
|
} = await writeFiles({
|
||||||
|
'entry.ts': `
|
||||||
|
let buf = new Buffer(256);
|
||||||
|
let len = buf.write("Simply Easy Learning");
|
||||||
|
console.log("Octets written : "+ len);`,
|
||||||
|
})
|
||||||
|
const res = await build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
plugins: [NodeGlobalsPolyfillPlugin({ buffer: true })],
|
||||||
|
})
|
||||||
|
const output = res.outputFiles[0].text
|
||||||
|
// console.log(output)
|
||||||
|
eval(output)
|
||||||
|
unlink()
|
||||||
|
})
|
||||||
|
test('process works using plugin', async () => {
|
||||||
|
const {
|
||||||
|
unlink,
|
||||||
|
paths: [ENTRY],
|
||||||
|
} = await writeFiles({
|
||||||
|
'entry.ts': `console.log(process.cwd())`,
|
||||||
|
})
|
||||||
|
const res = await build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
plugins: [NodeGlobalsPolyfillPlugin({ process: true })],
|
||||||
|
})
|
||||||
|
const output = res.outputFiles[0].text
|
||||||
|
// console.log(output)
|
||||||
|
eval(output)
|
||||||
|
unlink()
|
||||||
|
})
|
||||||
|
|
@ -0,0 +1,84 @@
|
||||||
|
import path from 'path'
|
||||||
|
import fs from 'fs'
|
||||||
|
import * as esbuild from 'esbuild'
|
||||||
|
|
||||||
|
export function NodeGlobalsPolyfillPlugin({
|
||||||
|
buffer = false,
|
||||||
|
// define = {},
|
||||||
|
process = true,
|
||||||
|
} = {}): esbuild.Plugin {
|
||||||
|
return {
|
||||||
|
name: 'node-globals-polyfill',
|
||||||
|
setup({ initialOptions, onResolve, onLoad }) {
|
||||||
|
onResolve({ filter: /_node-buffer-polyfill_\.js/ }, (arg) => {
|
||||||
|
return {
|
||||||
|
path: path.resolve(__dirname, '../Buffer.js'),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
onResolve({ filter: /_node-process-polyfill_\.js/ }, (arg) => {
|
||||||
|
return {
|
||||||
|
path: path.resolve(__dirname, '../process.js'),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// TODO esbuild cannot use virtual modules for inject: https://github.com/evanw/esbuild/issues/2762
|
||||||
|
// onLoad({ filter: /_virtual-process-polyfill_\.js/ }, (arg) => {
|
||||||
|
// const data = fs
|
||||||
|
// .readFileSync(path.resolve(__dirname, '../process.js'))
|
||||||
|
// .toString()
|
||||||
|
|
||||||
|
// const keys = Object.keys(define)
|
||||||
|
// return {
|
||||||
|
// loader: 'js',
|
||||||
|
// contents: data.replace(
|
||||||
|
// `const defines = {}`,
|
||||||
|
// 'const defines = {\n' +
|
||||||
|
// keys
|
||||||
|
// .filter((x) => x.startsWith('process.'))
|
||||||
|
// .sort((a, b) => a.length - b.length)
|
||||||
|
// .map(
|
||||||
|
// (k) =>
|
||||||
|
// ` ${JSON.stringify(k).replace(
|
||||||
|
// 'process.',
|
||||||
|
// '',
|
||||||
|
// )}: ${define[k]},`,
|
||||||
|
// )
|
||||||
|
// .join('\n') +
|
||||||
|
// '\n}',
|
||||||
|
// ),
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
onResolve({ filter: /_virtual-process-polyfill_\.js/ }, () => {
|
||||||
|
return {
|
||||||
|
path: path.resolve(__dirname, '../process.js'),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
onResolve({ filter: /_virtual-buffer-polyfill_\.js/ }, () => {
|
||||||
|
return {
|
||||||
|
path: path.resolve(__dirname, '../_buffer.js'),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const polyfills: string[] = []
|
||||||
|
if (process) {
|
||||||
|
polyfills.push(
|
||||||
|
path.resolve(__dirname, '../_virtual-process-polyfill_.js'),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
if (buffer) {
|
||||||
|
polyfills.push(
|
||||||
|
path.resolve(__dirname, '../_virtual-buffer-polyfill_.js'),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
if (initialOptions.inject) {
|
||||||
|
initialOptions.inject.push(...polyfills)
|
||||||
|
// handle duplicate plugin
|
||||||
|
initialOptions.inject = [...new Set(initialOptions.inject)]
|
||||||
|
} else {
|
||||||
|
initialOptions.inject = [...polyfills]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default NodeGlobalsPolyfillPlugin
|
||||||
8
node_modules/@esbuild-plugins/node-modules-polyfill/dist/index.d.ts
generated
vendored
Normal file
8
node_modules/@esbuild-plugins/node-modules-polyfill/dist/index.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
import { Plugin } from 'esbuild';
|
||||||
|
export interface NodePolyfillsOptions {
|
||||||
|
name?: string;
|
||||||
|
namespace?: string;
|
||||||
|
}
|
||||||
|
export declare function NodeModulesPolyfillPlugin(options?: NodePolyfillsOptions): Plugin;
|
||||||
|
export default NodeModulesPolyfillPlugin;
|
||||||
|
//# sourceMappingURL=index.d.ts.map
|
||||||
1
node_modules/@esbuild-plugins/node-modules-polyfill/dist/index.d.ts.map
generated
vendored
Normal file
1
node_modules/@esbuild-plugins/node-modules-polyfill/dist/index.d.ts.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,MAAM,EAAE,MAAM,SAAS,CAAA;AAkB/C,MAAM,WAAW,oBAAoB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,yBAAyB,CACrC,OAAO,GAAE,oBAAyB,GACnC,MAAM,CAwFR;AAmBD,eAAe,yBAAyB,CAAA"}
|
||||||
127
node_modules/@esbuild-plugins/node-modules-polyfill/dist/index.js
generated
vendored
Normal file
127
node_modules/@esbuild-plugins/node-modules-polyfill/dist/index.js
generated
vendored
Normal file
|
|
@ -0,0 +1,127 @@
|
||||||
|
"use strict";
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.NodeModulesPolyfillPlugin = void 0;
|
||||||
|
const escape_string_regexp_1 = __importDefault(require("escape-string-regexp"));
|
||||||
|
const fs_1 = __importDefault(require("fs"));
|
||||||
|
const path_1 = __importDefault(require("path"));
|
||||||
|
const polyfills_1 = require("./polyfills");
|
||||||
|
// import { NodeResolvePlugin } from '@esbuild-plugins/node-resolve'
|
||||||
|
const NAME = 'node-modules-polyfills';
|
||||||
|
const NAMESPACE = NAME;
|
||||||
|
function removeEndingSlash(importee) {
|
||||||
|
if (importee && importee.slice(-1) === '/') {
|
||||||
|
importee = importee.slice(0, -1);
|
||||||
|
}
|
||||||
|
return importee;
|
||||||
|
}
|
||||||
|
function NodeModulesPolyfillPlugin(options = {}) {
|
||||||
|
const { namespace = NAMESPACE, name = NAME } = options;
|
||||||
|
if (namespace.endsWith('commonjs')) {
|
||||||
|
throw new Error(`namespace ${namespace} must not end with commonjs`);
|
||||||
|
}
|
||||||
|
// this namespace is needed to make ES modules expose their default export to require: require('assert') will give you import('assert').default
|
||||||
|
const commonjsNamespace = namespace + '-commonjs';
|
||||||
|
const polyfilledBuiltins = polyfills_1.builtinsPolyfills();
|
||||||
|
const polyfilledBuiltinsNames = [...polyfilledBuiltins.keys()];
|
||||||
|
return {
|
||||||
|
name,
|
||||||
|
setup: function setup({ onLoad, onResolve, initialOptions }) {
|
||||||
|
var _a;
|
||||||
|
// polyfills contain global keyword, it must be defined
|
||||||
|
if ((initialOptions === null || initialOptions === void 0 ? void 0 : initialOptions.define) && !((_a = initialOptions.define) === null || _a === void 0 ? void 0 : _a.global)) {
|
||||||
|
initialOptions.define['global'] = 'globalThis';
|
||||||
|
}
|
||||||
|
else if (!(initialOptions === null || initialOptions === void 0 ? void 0 : initialOptions.define)) {
|
||||||
|
initialOptions.define = { global: 'globalThis' };
|
||||||
|
}
|
||||||
|
// TODO these polyfill module cannot import anything, is that ok?
|
||||||
|
function loader(args) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
try {
|
||||||
|
const argsPath = args.path.replace(/^node:/, '');
|
||||||
|
const isCommonjs = args.namespace.endsWith('commonjs');
|
||||||
|
const resolved = polyfilledBuiltins.get(removeEndingSlash(argsPath));
|
||||||
|
const contents = yield (yield fs_1.default.promises.readFile(resolved)).toString();
|
||||||
|
let resolveDir = path_1.default.dirname(resolved);
|
||||||
|
if (isCommonjs) {
|
||||||
|
return {
|
||||||
|
loader: 'js',
|
||||||
|
contents: commonJsTemplate({
|
||||||
|
importPath: argsPath,
|
||||||
|
}),
|
||||||
|
resolveDir,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
loader: 'js',
|
||||||
|
contents,
|
||||||
|
resolveDir,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
console.error('node-modules-polyfill', e);
|
||||||
|
return {
|
||||||
|
contents: `export {}`,
|
||||||
|
loader: 'js',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
onLoad({ filter: /.*/, namespace }, loader);
|
||||||
|
onLoad({ filter: /.*/, namespace: commonjsNamespace }, loader);
|
||||||
|
const filter = new RegExp([
|
||||||
|
...polyfilledBuiltinsNames,
|
||||||
|
...polyfilledBuiltinsNames.map((n) => `node:${n}`),
|
||||||
|
]
|
||||||
|
.map(escape_string_regexp_1.default)
|
||||||
|
.join('|'));
|
||||||
|
function resolver(args) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
const argsPath = args.path.replace(/^node:/, '');
|
||||||
|
const ignoreRequire = args.namespace === commonjsNamespace;
|
||||||
|
if (!polyfilledBuiltins.has(argsPath)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const isCommonjs = !ignoreRequire && args.kind === 'require-call';
|
||||||
|
return {
|
||||||
|
namespace: isCommonjs ? commonjsNamespace : namespace,
|
||||||
|
path: argsPath,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
onResolve({ filter }, resolver);
|
||||||
|
// onResolve({ filter: /.*/, namespace }, resolver)
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
exports.NodeModulesPolyfillPlugin = NodeModulesPolyfillPlugin;
|
||||||
|
function commonJsTemplate({ importPath }) {
|
||||||
|
return `
|
||||||
|
const polyfill = require('${importPath}')
|
||||||
|
|
||||||
|
if (polyfill && polyfill.default) {
|
||||||
|
module.exports = polyfill.default
|
||||||
|
for (let k in polyfill) {
|
||||||
|
module.exports[k] = polyfill[k]
|
||||||
|
}
|
||||||
|
} else if (polyfill) {
|
||||||
|
module.exports = polyfill
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
exports.default = NodeModulesPolyfillPlugin;
|
||||||
|
//# sourceMappingURL=index.js.map
|
||||||
1
node_modules/@esbuild-plugins/node-modules-polyfill/dist/index.js.map
generated
vendored
Normal file
1
node_modules/@esbuild-plugins/node-modules-polyfill/dist/index.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
||||||
2
node_modules/@esbuild-plugins/node-modules-polyfill/dist/index.test.d.ts
generated
vendored
Normal file
2
node_modules/@esbuild-plugins/node-modules-polyfill/dist/index.test.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
export {};
|
||||||
|
//# sourceMappingURL=index.test.d.ts.map
|
||||||
1
node_modules/@esbuild-plugins/node-modules-polyfill/dist/index.test.d.ts.map
generated
vendored
Normal file
1
node_modules/@esbuild-plugins/node-modules-polyfill/dist/index.test.d.ts.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
|
||||||
183
node_modules/@esbuild-plugins/node-modules-polyfill/dist/index.test.js
generated
vendored
Normal file
183
node_modules/@esbuild-plugins/node-modules-polyfill/dist/index.test.js
generated
vendored
Normal file
|
|
@ -0,0 +1,183 @@
|
||||||
|
"use strict";
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const esbuild_1 = require("esbuild");
|
||||||
|
const test_support_1 = require("test-support");
|
||||||
|
const fs_1 = __importDefault(require("fs"));
|
||||||
|
const _1 = __importDefault(require("."));
|
||||||
|
const node_globals_polyfill_1 = __importDefault(require("@esbuild-plugins/node-globals-polyfill"));
|
||||||
|
require('debug').enable(require('../package.json').name);
|
||||||
|
test('works', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield test_support_1.writeFiles({
|
||||||
|
'entry.ts': `import {x} from './utils'; console.log(x);`,
|
||||||
|
'utils.ts': `import path from 'path'; import { Buffer } from 'buffer'; export const x = path.resolve(Buffer.from('x').toString());`,
|
||||||
|
});
|
||||||
|
// const outfile = randomOutputFile()
|
||||||
|
const res = yield esbuild_1.build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
plugins: [_1.default()],
|
||||||
|
});
|
||||||
|
eval(res.outputFiles[0].text);
|
||||||
|
// console.log(res.outputFiles[0].text)
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test('works with SafeBuffer and other package consumers', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield test_support_1.writeFiles({
|
||||||
|
'entry.ts': `import {Buffer as SafeBuffer} from './safe-buffer'; console.log(SafeBuffer);`,
|
||||||
|
'safe-buffer.ts': fs_1.default
|
||||||
|
.readFileSync(require.resolve('safe-buffer'))
|
||||||
|
.toString(),
|
||||||
|
});
|
||||||
|
// const outfile = randomOutputFile()
|
||||||
|
const res = yield esbuild_1.build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
plugins: [_1.default()],
|
||||||
|
});
|
||||||
|
// console.log(
|
||||||
|
// res.outputFiles[0].text
|
||||||
|
// .split('\n')
|
||||||
|
// .map((x, i) => i + ' ' + x)
|
||||||
|
// .join('\n'),
|
||||||
|
// )
|
||||||
|
eval(res.outputFiles[0].text);
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test('events works', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield test_support_1.writeFiles({
|
||||||
|
'entry.ts': `
|
||||||
|
import EventEmitter from 'events';
|
||||||
|
|
||||||
|
class Test extends EventEmitter {
|
||||||
|
constructor() { };
|
||||||
|
}
|
||||||
|
console.log(Test)
|
||||||
|
`,
|
||||||
|
});
|
||||||
|
// const outfile = randomOutputFile()
|
||||||
|
const res = yield esbuild_1.build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
plugins: [_1.default()],
|
||||||
|
});
|
||||||
|
// console.log(res.outputFiles[0].text)
|
||||||
|
eval(res.outputFiles[0].text);
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test('require can use default export', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield test_support_1.writeFiles({
|
||||||
|
'entry.ts': `
|
||||||
|
const assert = require('assert')
|
||||||
|
// console.log(assert)
|
||||||
|
assert('ok')
|
||||||
|
`,
|
||||||
|
});
|
||||||
|
// const outfile = randomOutputFile()
|
||||||
|
const res = yield esbuild_1.build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
plugins: [_1.default()],
|
||||||
|
});
|
||||||
|
// console.log(res.outputFiles[0].text)
|
||||||
|
eval(res.outputFiles[0].text);
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test.skip('crypto', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield test_support_1.writeFiles({
|
||||||
|
'entry.ts': `import { randomBytes } from 'crypto'; console.log(randomBytes(20).toString('hex'))`,
|
||||||
|
});
|
||||||
|
// const outfile = randomOutputFile()
|
||||||
|
const res = yield esbuild_1.build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
plugins: [_1.default()],
|
||||||
|
});
|
||||||
|
eval(res.outputFiles[0].text);
|
||||||
|
// console.log(res.outputFiles[0].text)
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test.skip('fs', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield test_support_1.writeFiles({
|
||||||
|
'entry.ts': `import { readFile } from 'fs'; console.log(readFile(''))`,
|
||||||
|
});
|
||||||
|
// const outfile = randomOutputFile()
|
||||||
|
const res = yield esbuild_1.build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
plugins: [_1.default()],
|
||||||
|
});
|
||||||
|
eval(res.outputFiles[0].text);
|
||||||
|
// console.log(res.outputFiles[0].text)
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test('does not include global keyword', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield test_support_1.writeFiles({
|
||||||
|
'entry.ts': `import {x} from './utils'; console.log(x);`,
|
||||||
|
'utils.ts': `import path from 'path'; import { Buffer } from 'buffer'; export const x = path.resolve(Buffer.from('x').toString());`,
|
||||||
|
});
|
||||||
|
// const outfile = randomOutputFile()
|
||||||
|
const res = yield esbuild_1.build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
plugins: [_1.default()],
|
||||||
|
});
|
||||||
|
const text = res.outputFiles[0].text;
|
||||||
|
eval(text);
|
||||||
|
expect(text).not.toContain(/\bglobal\b/);
|
||||||
|
// console.log(res.outputFiles[0].text)
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
test('works with globals polyfills', () => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
const { unlink, paths: [ENTRY], } = yield test_support_1.writeFiles({
|
||||||
|
'entry.ts': `import {x} from './utils'; console.log(x);`,
|
||||||
|
'utils.ts': `import path from 'path'; import { Buffer } from 'buffer'; export const x = path.resolve(Buffer.from('x').toString());`,
|
||||||
|
});
|
||||||
|
// const outfile = randomOutputFile()
|
||||||
|
const res = yield esbuild_1.build({
|
||||||
|
entryPoints: [ENTRY],
|
||||||
|
write: false,
|
||||||
|
format: 'esm',
|
||||||
|
target: 'es2017',
|
||||||
|
bundle: true,
|
||||||
|
plugins: [_1.default(), node_globals_polyfill_1.default()],
|
||||||
|
});
|
||||||
|
const text = res.outputFiles[0].text;
|
||||||
|
eval(text);
|
||||||
|
console.log(text);
|
||||||
|
// console.log(res.outputFiles[0].text)
|
||||||
|
unlink();
|
||||||
|
}));
|
||||||
|
//# sourceMappingURL=index.test.js.map
|
||||||
1
node_modules/@esbuild-plugins/node-modules-polyfill/dist/index.test.js.map
generated
vendored
Normal file
1
node_modules/@esbuild-plugins/node-modules-polyfill/dist/index.test.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
||||||
2
node_modules/@esbuild-plugins/node-modules-polyfill/dist/polyfills.d.ts
generated
vendored
Normal file
2
node_modules/@esbuild-plugins/node-modules-polyfill/dist/polyfills.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
export declare function builtinsPolyfills(): Map<any, any>;
|
||||||
|
//# sourceMappingURL=polyfills.d.ts.map
|
||||||
1
node_modules/@esbuild-plugins/node-modules-polyfill/dist/polyfills.d.ts.map
generated
vendored
Normal file
1
node_modules/@esbuild-plugins/node-modules-polyfill/dist/polyfills.d.ts.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"polyfills.d.ts","sourceRoot":"","sources":["../src/polyfills.ts"],"names":[],"mappings":"AAQA,wBAAgB,iBAAiB,kBA8IhC"}
|
||||||
61
node_modules/@esbuild-plugins/node-modules-polyfill/dist/polyfills.js
generated
vendored
Normal file
61
node_modules/@esbuild-plugins/node-modules-polyfill/dist/polyfills.js
generated
vendored
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
"use strict";
|
||||||
|
// Taken from https://github.com/ionic-team/rollup-plugin-node-polyfills/blob/master/src/modules.ts
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.builtinsPolyfills = void 0;
|
||||||
|
const EMPTY_PATH = require.resolve('rollup-plugin-node-polyfills/polyfills/empty.js');
|
||||||
|
function builtinsPolyfills() {
|
||||||
|
const libs = new Map();
|
||||||
|
libs.set('process', require.resolve('rollup-plugin-node-polyfills/polyfills/process-es6'));
|
||||||
|
libs.set('buffer', require.resolve('rollup-plugin-node-polyfills/polyfills/buffer-es6'));
|
||||||
|
libs.set('util', require.resolve('rollup-plugin-node-polyfills/polyfills/util'));
|
||||||
|
libs.set('sys', libs.get('util'));
|
||||||
|
libs.set('events', require.resolve('rollup-plugin-node-polyfills/polyfills/events'));
|
||||||
|
libs.set('stream', require.resolve('rollup-plugin-node-polyfills/polyfills/stream'));
|
||||||
|
libs.set('path', require.resolve('rollup-plugin-node-polyfills/polyfills/path'));
|
||||||
|
libs.set('querystring', require.resolve('rollup-plugin-node-polyfills/polyfills/qs'));
|
||||||
|
libs.set('punycode', require.resolve('rollup-plugin-node-polyfills/polyfills/punycode'));
|
||||||
|
libs.set('url', require.resolve('rollup-plugin-node-polyfills/polyfills/url'));
|
||||||
|
libs.set('string_decoder', require.resolve('rollup-plugin-node-polyfills/polyfills/string-decoder'));
|
||||||
|
libs.set('http', require.resolve('rollup-plugin-node-polyfills/polyfills/http'));
|
||||||
|
libs.set('https', require.resolve('rollup-plugin-node-polyfills/polyfills/http'));
|
||||||
|
libs.set('os', require.resolve('rollup-plugin-node-polyfills/polyfills/os'));
|
||||||
|
libs.set('assert', require.resolve('rollup-plugin-node-polyfills/polyfills/assert'));
|
||||||
|
libs.set('constants', require.resolve('rollup-plugin-node-polyfills/polyfills/constants'));
|
||||||
|
libs.set('_stream_duplex', require.resolve('rollup-plugin-node-polyfills/polyfills/readable-stream/duplex'));
|
||||||
|
libs.set('_stream_passthrough', require.resolve('rollup-plugin-node-polyfills/polyfills/readable-stream/passthrough'));
|
||||||
|
libs.set('_stream_readable', require.resolve('rollup-plugin-node-polyfills/polyfills/readable-stream/readable'));
|
||||||
|
libs.set('_stream_writable', require.resolve('rollup-plugin-node-polyfills/polyfills/readable-stream/writable'));
|
||||||
|
libs.set('_stream_transform', require.resolve('rollup-plugin-node-polyfills/polyfills/readable-stream/transform'));
|
||||||
|
libs.set('timers', require.resolve('rollup-plugin-node-polyfills/polyfills/timers'));
|
||||||
|
libs.set('console', require.resolve('rollup-plugin-node-polyfills/polyfills/console'));
|
||||||
|
libs.set('vm', require.resolve('rollup-plugin-node-polyfills/polyfills/vm'));
|
||||||
|
libs.set('zlib', require.resolve('rollup-plugin-node-polyfills/polyfills/zlib'));
|
||||||
|
libs.set('tty', require.resolve('rollup-plugin-node-polyfills/polyfills/tty'));
|
||||||
|
libs.set('domain', require.resolve('rollup-plugin-node-polyfills/polyfills/domain'));
|
||||||
|
// not shimmed
|
||||||
|
libs.set('dns', EMPTY_PATH);
|
||||||
|
libs.set('dgram', EMPTY_PATH);
|
||||||
|
libs.set('child_process', EMPTY_PATH);
|
||||||
|
libs.set('cluster', EMPTY_PATH);
|
||||||
|
libs.set('module', EMPTY_PATH);
|
||||||
|
libs.set('net', EMPTY_PATH);
|
||||||
|
libs.set('readline', EMPTY_PATH);
|
||||||
|
libs.set('repl', EMPTY_PATH);
|
||||||
|
libs.set('tls', EMPTY_PATH);
|
||||||
|
libs.set('fs', EMPTY_PATH);
|
||||||
|
libs.set('crypto', EMPTY_PATH);
|
||||||
|
// libs.set(
|
||||||
|
// 'fs',
|
||||||
|
// require.resolve('rollup-plugin-node-polyfills/polyfills/browserify-fs'),
|
||||||
|
// )
|
||||||
|
// TODO enable crypto and fs https://github.com/ionic-team/rollup-plugin-node-polyfills/issues/20
|
||||||
|
// libs.set(
|
||||||
|
// 'crypto',
|
||||||
|
// require.resolve(
|
||||||
|
// 'rollup-plugin-node-polyfills/polyfills/crypto-browserify',
|
||||||
|
// ),
|
||||||
|
// )
|
||||||
|
return libs;
|
||||||
|
}
|
||||||
|
exports.builtinsPolyfills = builtinsPolyfills;
|
||||||
|
//# sourceMappingURL=polyfills.js.map
|
||||||
1
node_modules/@esbuild-plugins/node-modules-polyfill/dist/polyfills.js.map
generated
vendored
Normal file
1
node_modules/@esbuild-plugins/node-modules-polyfill/dist/polyfills.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"polyfills.js","sourceRoot":"","sources":["../src/polyfills.ts"],"names":[],"mappings":"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"}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
import { Plugin } from 'esbuild';
|
||||||
|
export interface NodePolyfillsOptions {
|
||||||
|
name?: string;
|
||||||
|
namespace?: string;
|
||||||
|
}
|
||||||
|
export declare function NodeModulesPolyfillPlugin(options?: NodePolyfillsOptions): Plugin;
|
||||||
|
export default NodeModulesPolyfillPlugin;
|
||||||
|
//# sourceMappingURL=index.d.ts.map
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue