├── .gitignore ├── .prettierrc ├── README.md ├── package-lock.json ├── package.json ├── src └── index.ts ├── tsconfig.json ├── wrangler.example.toml └── wrangler.toml /.gitignore: -------------------------------------------------------------------------------- 1 | wrangler.toml 2 | 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | lerna-debug.log* 10 | .pnpm-debug.log* 11 | 12 | # Diagnostic reports (https://nodejs.org/api/report.html) 13 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 14 | 15 | # Runtime data 16 | pids 17 | *.pid 18 | *.seed 19 | *.pid.lock 20 | 21 | # Directory for instrumented libs generated by jscoverage/JSCover 22 | lib-cov 23 | 24 | # Coverage directory used by tools like istanbul 25 | coverage 26 | *.lcov 27 | 28 | # nyc test coverage 29 | .nyc_output 30 | 31 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 32 | .grunt 33 | 34 | # Bower dependency directory (https://bower.io/) 35 | bower_components 36 | 37 | # node-waf configuration 38 | .lock-wscript 39 | 40 | # Compiled binary addons (https://nodejs.org/api/addons.html) 41 | build/Release 42 | 43 | # Dependency directories 44 | node_modules/ 45 | jspm_packages/ 46 | 47 | # Snowpack dependency directory (https://snowpack.dev/) 48 | web_modules/ 49 | 50 | # TypeScript cache 51 | *.tsbuildinfo 52 | 53 | # Optional npm cache directory 54 | .npm 55 | 56 | # Optional eslint cache 57 | .eslintcache 58 | 59 | # Optional stylelint cache 60 | .stylelintcache 61 | 62 | # Microbundle cache 63 | .rpt2_cache/ 64 | .rts2_cache_cjs/ 65 | .rts2_cache_es/ 66 | .rts2_cache_umd/ 67 | 68 | # Optional REPL history 69 | .node_repl_history 70 | 71 | # Output of 'npm pack' 72 | *.tgz 73 | 74 | # Yarn Integrity file 75 | .yarn-integrity 76 | 77 | # dotenv environment variable files 78 | .env 79 | .env.development.local 80 | .env.test.local 81 | .env.production.local 82 | .env.local 83 | 84 | # parcel-bundler cache (https://parceljs.org/) 85 | .cache 86 | .parcel-cache 87 | 88 | # Next.js build output 89 | .next 90 | out 91 | 92 | # Nuxt.js build / generate output 93 | .nuxt 94 | dist 95 | 96 | # Gatsby files 97 | .cache/ 98 | # Comment in the public line in if your project uses Gatsby and not Next.js 99 | # https://nextjs.org/blog/next-9-1#public-directory-support 100 | # public 101 | 102 | # vuepress build output 103 | .vuepress/dist 104 | 105 | # vuepress v2.x temp and cache directory 106 | .temp 107 | .cache 108 | 109 | # Docusaurus cache and generated files 110 | .docusaurus 111 | 112 | # Serverless directories 113 | .serverless/ 114 | 115 | # FuseBox cache 116 | .fusebox/ 117 | 118 | # DynamoDB Local files 119 | .dynamodb/ 120 | 121 | # TernJS port file 122 | .tern-port 123 | 124 | # Stores VSCode versions used for testing VSCode extensions 125 | .vscode-test 126 | 127 | # yarn v2 128 | .yarn/cache 129 | .yarn/unplugged 130 | .yarn/build-state.yml 131 | .yarn/install-state.gz 132 | .pnp.* -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "semi": false, 4 | "trailingComma": "all", 5 | "tabWidth": 2, 6 | "printWidth": 142 7 | } 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Cloudflare Workers Puppeteer 2 | 3 | Just playing around with the [Workers Browser Rendering API](https://blog.cloudflare.com/browser-rendering-open-beta/) 4 | 5 | It'll accept an URL, uses the Browser API to capture a screenshot of the full page and saves it to R2. 6 | 7 | **install everything:** 8 | 9 | ```shell 10 | npm i 11 | ``` 12 | 13 | **create R2 bucket:** 14 | 15 | ```shell 16 | npx wrangler r2 bucket create my-bucket 17 | ``` 18 | 19 | rename `wrangler.example.toml` to `wrangler.toml` and add the r2 binding to it: 20 | 21 | ```toml 22 | r2_buckets = [ 23 | { binding = "puppeteer", bucket_name = "my-bucket"} 24 | ] 25 | ``` 26 | 27 | you may want to make the r2 bucket public so you can access the screenshot directly, the Worker will do an redirect. Put the public bucket url into `wrangler.toml` as the `bucketUrl` environment variable. 28 | 29 | **deploy everything:** 30 | 31 | ```shell 32 | npm run deploy 33 | ``` 34 | 35 | **take a screenshot:** 36 | 37 | ``` 38 | https://your-worker.cool.workers.dev/?url=https://www.youtube.com/watch?v=dQw4w9WgXcQ 39 | ``` 40 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "workers-browser", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "workers-browser", 9 | "version": "1.0.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "nanoid": "^4.0.2", 13 | "sanitize-filename": "^1.6.3" 14 | }, 15 | "devDependencies": { 16 | "@cloudflare/puppeteer": "^0.0.5", 17 | "@cloudflare/workers-types": "^4.20230904.0", 18 | "prettier": "^3.0.3", 19 | "wrangler": "^3.7.0" 20 | } 21 | }, 22 | "node_modules/@cloudflare/kv-asset-handler": { 23 | "version": "0.2.0", 24 | "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.2.0.tgz", 25 | "integrity": "sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==", 26 | "dev": true, 27 | "dependencies": { 28 | "mime": "^3.0.0" 29 | } 30 | }, 31 | "node_modules/@cloudflare/puppeteer": { 32 | "version": "0.0.5", 33 | "resolved": "https://registry.npmjs.org/@cloudflare/puppeteer/-/puppeteer-0.0.5.tgz", 34 | "integrity": "sha512-K+DLUmDVSM5UNzFokSqie0LPIFAPvdkLKHWnx8Gmck/M41387aCyLlUjWIeUGV3QifSRwaxTRfeMpELQW0lDZg==", 35 | "dev": true, 36 | "dependencies": { 37 | "debug": "4.3.4", 38 | "devtools-protocol": "0.0.1019158", 39 | "events": "3.3.0", 40 | "stream": "0.0.2", 41 | "url": "0.11.0", 42 | "util": "0.12.5" 43 | }, 44 | "engines": { 45 | "node": ">=14.1.0" 46 | } 47 | }, 48 | "node_modules/@cloudflare/workerd-darwin-64": { 49 | "version": "1.20230904.0", 50 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20230904.0.tgz", 51 | "integrity": "sha512-/GDlmxAFbDtrQwP4zOXFbqOfaPvkDxdsCoEa+KEBcAl5uR98+7WW5/b8naBHX+t26uS7p4bLlImM8J5F1ienRQ==", 52 | "cpu": [ 53 | "x64" 54 | ], 55 | "dev": true, 56 | "optional": true, 57 | "os": [ 58 | "darwin" 59 | ], 60 | "engines": { 61 | "node": ">=16" 62 | } 63 | }, 64 | "node_modules/@cloudflare/workerd-darwin-arm64": { 65 | "version": "1.20230904.0", 66 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20230904.0.tgz", 67 | "integrity": "sha512-x8WXNc2xnDqr5y1iirnNdyx8GZY3rL5xiF7ebK3mKQeB+jFjkhO71yuPTkDCzUWtOvw1Wfd4jbwy4wxacMX4mQ==", 68 | "cpu": [ 69 | "arm64" 70 | ], 71 | "dev": true, 72 | "optional": true, 73 | "os": [ 74 | "darwin" 75 | ], 76 | "engines": { 77 | "node": ">=16" 78 | } 79 | }, 80 | "node_modules/@cloudflare/workerd-linux-64": { 81 | "version": "1.20230904.0", 82 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20230904.0.tgz", 83 | "integrity": "sha512-V58xyMS3oDpKO8Dpdh0r0BXm99OzoGgvWe9ufttVraj/1NTMGELwb6i9ySb8k3F1J9m/sO26+TV7pQc/bGC1VQ==", 84 | "cpu": [ 85 | "x64" 86 | ], 87 | "dev": true, 88 | "optional": true, 89 | "os": [ 90 | "linux" 91 | ], 92 | "engines": { 93 | "node": ">=16" 94 | } 95 | }, 96 | "node_modules/@cloudflare/workerd-linux-arm64": { 97 | "version": "1.20230904.0", 98 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20230904.0.tgz", 99 | "integrity": "sha512-VrDaW+pjb5IAKEnNWtEaFiG377kXKmk5Fu0Era4W+jKzPON2BW/qRb/4LNHXQ4yxg/2HLm7RiUTn7JZtt1qO6A==", 100 | "cpu": [ 101 | "arm64" 102 | ], 103 | "dev": true, 104 | "optional": true, 105 | "os": [ 106 | "linux" 107 | ], 108 | "engines": { 109 | "node": ">=16" 110 | } 111 | }, 112 | "node_modules/@cloudflare/workerd-windows-64": { 113 | "version": "1.20230904.0", 114 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20230904.0.tgz", 115 | "integrity": "sha512-/R/dE8uy+8J2YeXfDhI8/Bg7YUirdbbjH5/l/Vv00ZRE0lC3nPLcYeyBXSwXIQ6/Xht3gN+lksLQgKd0ZWRd+Q==", 116 | "cpu": [ 117 | "x64" 118 | ], 119 | "dev": true, 120 | "optional": true, 121 | "os": [ 122 | "win32" 123 | ], 124 | "engines": { 125 | "node": ">=16" 126 | } 127 | }, 128 | "node_modules/@cloudflare/workers-types": { 129 | "version": "4.20230904.0", 130 | "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20230904.0.tgz", 131 | "integrity": "sha512-IX4oJCe14ctblSPZBlW64BVZ9nYLUo6sD2I5gu3hX0ywByYWm1OuoKm9Xb/Zpbj8Ph18Z7Ryii6u2/ocnncXdA==", 132 | "dev": true 133 | }, 134 | "node_modules/@esbuild-plugins/node-globals-polyfill": { 135 | "version": "0.2.3", 136 | "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", 137 | "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", 138 | "dev": true, 139 | "peerDependencies": { 140 | "esbuild": "*" 141 | } 142 | }, 143 | "node_modules/@esbuild-plugins/node-modules-polyfill": { 144 | "version": "0.2.2", 145 | "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", 146 | "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", 147 | "dev": true, 148 | "dependencies": { 149 | "escape-string-regexp": "^4.0.0", 150 | "rollup-plugin-node-polyfills": "^0.2.1" 151 | }, 152 | "peerDependencies": { 153 | "esbuild": "*" 154 | } 155 | }, 156 | "node_modules/@esbuild/android-arm": { 157 | "version": "0.17.19", 158 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", 159 | "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", 160 | "cpu": [ 161 | "arm" 162 | ], 163 | "dev": true, 164 | "optional": true, 165 | "os": [ 166 | "android" 167 | ], 168 | "engines": { 169 | "node": ">=12" 170 | } 171 | }, 172 | "node_modules/@esbuild/android-arm64": { 173 | "version": "0.17.19", 174 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", 175 | "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", 176 | "cpu": [ 177 | "arm64" 178 | ], 179 | "dev": true, 180 | "optional": true, 181 | "os": [ 182 | "android" 183 | ], 184 | "engines": { 185 | "node": ">=12" 186 | } 187 | }, 188 | "node_modules/@esbuild/android-x64": { 189 | "version": "0.17.19", 190 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", 191 | "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", 192 | "cpu": [ 193 | "x64" 194 | ], 195 | "dev": true, 196 | "optional": true, 197 | "os": [ 198 | "android" 199 | ], 200 | "engines": { 201 | "node": ">=12" 202 | } 203 | }, 204 | "node_modules/@esbuild/darwin-arm64": { 205 | "version": "0.17.19", 206 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", 207 | "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", 208 | "cpu": [ 209 | "arm64" 210 | ], 211 | "dev": true, 212 | "optional": true, 213 | "os": [ 214 | "darwin" 215 | ], 216 | "engines": { 217 | "node": ">=12" 218 | } 219 | }, 220 | "node_modules/@esbuild/darwin-x64": { 221 | "version": "0.17.19", 222 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", 223 | "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", 224 | "cpu": [ 225 | "x64" 226 | ], 227 | "dev": true, 228 | "optional": true, 229 | "os": [ 230 | "darwin" 231 | ], 232 | "engines": { 233 | "node": ">=12" 234 | } 235 | }, 236 | "node_modules/@esbuild/freebsd-arm64": { 237 | "version": "0.17.19", 238 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", 239 | "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", 240 | "cpu": [ 241 | "arm64" 242 | ], 243 | "dev": true, 244 | "optional": true, 245 | "os": [ 246 | "freebsd" 247 | ], 248 | "engines": { 249 | "node": ">=12" 250 | } 251 | }, 252 | "node_modules/@esbuild/freebsd-x64": { 253 | "version": "0.17.19", 254 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", 255 | "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", 256 | "cpu": [ 257 | "x64" 258 | ], 259 | "dev": true, 260 | "optional": true, 261 | "os": [ 262 | "freebsd" 263 | ], 264 | "engines": { 265 | "node": ">=12" 266 | } 267 | }, 268 | "node_modules/@esbuild/linux-arm": { 269 | "version": "0.17.19", 270 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", 271 | "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", 272 | "cpu": [ 273 | "arm" 274 | ], 275 | "dev": true, 276 | "optional": true, 277 | "os": [ 278 | "linux" 279 | ], 280 | "engines": { 281 | "node": ">=12" 282 | } 283 | }, 284 | "node_modules/@esbuild/linux-arm64": { 285 | "version": "0.17.19", 286 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", 287 | "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", 288 | "cpu": [ 289 | "arm64" 290 | ], 291 | "dev": true, 292 | "optional": true, 293 | "os": [ 294 | "linux" 295 | ], 296 | "engines": { 297 | "node": ">=12" 298 | } 299 | }, 300 | "node_modules/@esbuild/linux-ia32": { 301 | "version": "0.17.19", 302 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", 303 | "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", 304 | "cpu": [ 305 | "ia32" 306 | ], 307 | "dev": true, 308 | "optional": true, 309 | "os": [ 310 | "linux" 311 | ], 312 | "engines": { 313 | "node": ">=12" 314 | } 315 | }, 316 | "node_modules/@esbuild/linux-loong64": { 317 | "version": "0.17.19", 318 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", 319 | "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", 320 | "cpu": [ 321 | "loong64" 322 | ], 323 | "dev": true, 324 | "optional": true, 325 | "os": [ 326 | "linux" 327 | ], 328 | "engines": { 329 | "node": ">=12" 330 | } 331 | }, 332 | "node_modules/@esbuild/linux-mips64el": { 333 | "version": "0.17.19", 334 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", 335 | "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", 336 | "cpu": [ 337 | "mips64el" 338 | ], 339 | "dev": true, 340 | "optional": true, 341 | "os": [ 342 | "linux" 343 | ], 344 | "engines": { 345 | "node": ">=12" 346 | } 347 | }, 348 | "node_modules/@esbuild/linux-ppc64": { 349 | "version": "0.17.19", 350 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", 351 | "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", 352 | "cpu": [ 353 | "ppc64" 354 | ], 355 | "dev": true, 356 | "optional": true, 357 | "os": [ 358 | "linux" 359 | ], 360 | "engines": { 361 | "node": ">=12" 362 | } 363 | }, 364 | "node_modules/@esbuild/linux-riscv64": { 365 | "version": "0.17.19", 366 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", 367 | "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", 368 | "cpu": [ 369 | "riscv64" 370 | ], 371 | "dev": true, 372 | "optional": true, 373 | "os": [ 374 | "linux" 375 | ], 376 | "engines": { 377 | "node": ">=12" 378 | } 379 | }, 380 | "node_modules/@esbuild/linux-s390x": { 381 | "version": "0.17.19", 382 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", 383 | "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", 384 | "cpu": [ 385 | "s390x" 386 | ], 387 | "dev": true, 388 | "optional": true, 389 | "os": [ 390 | "linux" 391 | ], 392 | "engines": { 393 | "node": ">=12" 394 | } 395 | }, 396 | "node_modules/@esbuild/linux-x64": { 397 | "version": "0.17.19", 398 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", 399 | "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", 400 | "cpu": [ 401 | "x64" 402 | ], 403 | "dev": true, 404 | "optional": true, 405 | "os": [ 406 | "linux" 407 | ], 408 | "engines": { 409 | "node": ">=12" 410 | } 411 | }, 412 | "node_modules/@esbuild/netbsd-x64": { 413 | "version": "0.17.19", 414 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", 415 | "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", 416 | "cpu": [ 417 | "x64" 418 | ], 419 | "dev": true, 420 | "optional": true, 421 | "os": [ 422 | "netbsd" 423 | ], 424 | "engines": { 425 | "node": ">=12" 426 | } 427 | }, 428 | "node_modules/@esbuild/openbsd-x64": { 429 | "version": "0.17.19", 430 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", 431 | "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", 432 | "cpu": [ 433 | "x64" 434 | ], 435 | "dev": true, 436 | "optional": true, 437 | "os": [ 438 | "openbsd" 439 | ], 440 | "engines": { 441 | "node": ">=12" 442 | } 443 | }, 444 | "node_modules/@esbuild/sunos-x64": { 445 | "version": "0.17.19", 446 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", 447 | "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", 448 | "cpu": [ 449 | "x64" 450 | ], 451 | "dev": true, 452 | "optional": true, 453 | "os": [ 454 | "sunos" 455 | ], 456 | "engines": { 457 | "node": ">=12" 458 | } 459 | }, 460 | "node_modules/@esbuild/win32-arm64": { 461 | "version": "0.17.19", 462 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", 463 | "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", 464 | "cpu": [ 465 | "arm64" 466 | ], 467 | "dev": true, 468 | "optional": true, 469 | "os": [ 470 | "win32" 471 | ], 472 | "engines": { 473 | "node": ">=12" 474 | } 475 | }, 476 | "node_modules/@esbuild/win32-ia32": { 477 | "version": "0.17.19", 478 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", 479 | "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", 480 | "cpu": [ 481 | "ia32" 482 | ], 483 | "dev": true, 484 | "optional": true, 485 | "os": [ 486 | "win32" 487 | ], 488 | "engines": { 489 | "node": ">=12" 490 | } 491 | }, 492 | "node_modules/@esbuild/win32-x64": { 493 | "version": "0.17.19", 494 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", 495 | "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", 496 | "cpu": [ 497 | "x64" 498 | ], 499 | "dev": true, 500 | "optional": true, 501 | "os": [ 502 | "win32" 503 | ], 504 | "engines": { 505 | "node": ">=12" 506 | } 507 | }, 508 | "node_modules/acorn": { 509 | "version": "8.10.0", 510 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 511 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 512 | "dev": true, 513 | "bin": { 514 | "acorn": "bin/acorn" 515 | }, 516 | "engines": { 517 | "node": ">=0.4.0" 518 | } 519 | }, 520 | "node_modules/acorn-walk": { 521 | "version": "8.2.0", 522 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 523 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 524 | "dev": true, 525 | "engines": { 526 | "node": ">=0.4.0" 527 | } 528 | }, 529 | "node_modules/anymatch": { 530 | "version": "3.1.3", 531 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 532 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 533 | "dev": true, 534 | "dependencies": { 535 | "normalize-path": "^3.0.0", 536 | "picomatch": "^2.0.4" 537 | }, 538 | "engines": { 539 | "node": ">= 8" 540 | } 541 | }, 542 | "node_modules/as-table": { 543 | "version": "1.0.55", 544 | "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", 545 | "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", 546 | "dev": true, 547 | "dependencies": { 548 | "printable-characters": "^1.0.42" 549 | } 550 | }, 551 | "node_modules/available-typed-arrays": { 552 | "version": "1.0.5", 553 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", 554 | "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", 555 | "dev": true, 556 | "engines": { 557 | "node": ">= 0.4" 558 | }, 559 | "funding": { 560 | "url": "https://github.com/sponsors/ljharb" 561 | } 562 | }, 563 | "node_modules/base64-js": { 564 | "version": "1.5.1", 565 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 566 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 567 | "dev": true, 568 | "funding": [ 569 | { 570 | "type": "github", 571 | "url": "https://github.com/sponsors/feross" 572 | }, 573 | { 574 | "type": "patreon", 575 | "url": "https://www.patreon.com/feross" 576 | }, 577 | { 578 | "type": "consulting", 579 | "url": "https://feross.org/support" 580 | } 581 | ] 582 | }, 583 | "node_modules/better-sqlite3": { 584 | "version": "8.6.0", 585 | "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-8.6.0.tgz", 586 | "integrity": "sha512-jwAudeiTMTSyby+/SfbHDebShbmC2MCH8mU2+DXi0WJfv13ypEJm47cd3kljmy/H130CazEvkf2Li//ewcMJ1g==", 587 | "dev": true, 588 | "hasInstallScript": true, 589 | "dependencies": { 590 | "bindings": "^1.5.0", 591 | "prebuild-install": "^7.1.1" 592 | } 593 | }, 594 | "node_modules/binary-extensions": { 595 | "version": "2.2.0", 596 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 597 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 598 | "dev": true, 599 | "engines": { 600 | "node": ">=8" 601 | } 602 | }, 603 | "node_modules/bindings": { 604 | "version": "1.5.0", 605 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", 606 | "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", 607 | "dev": true, 608 | "dependencies": { 609 | "file-uri-to-path": "1.0.0" 610 | } 611 | }, 612 | "node_modules/bl": { 613 | "version": "4.1.0", 614 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 615 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 616 | "dev": true, 617 | "dependencies": { 618 | "buffer": "^5.5.0", 619 | "inherits": "^2.0.4", 620 | "readable-stream": "^3.4.0" 621 | } 622 | }, 623 | "node_modules/blake3-wasm": { 624 | "version": "2.1.5", 625 | "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", 626 | "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", 627 | "dev": true 628 | }, 629 | "node_modules/braces": { 630 | "version": "3.0.2", 631 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 632 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 633 | "dev": true, 634 | "dependencies": { 635 | "fill-range": "^7.0.1" 636 | }, 637 | "engines": { 638 | "node": ">=8" 639 | } 640 | }, 641 | "node_modules/buffer": { 642 | "version": "5.7.1", 643 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 644 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 645 | "dev": true, 646 | "funding": [ 647 | { 648 | "type": "github", 649 | "url": "https://github.com/sponsors/feross" 650 | }, 651 | { 652 | "type": "patreon", 653 | "url": "https://www.patreon.com/feross" 654 | }, 655 | { 656 | "type": "consulting", 657 | "url": "https://feross.org/support" 658 | } 659 | ], 660 | "dependencies": { 661 | "base64-js": "^1.3.1", 662 | "ieee754": "^1.1.13" 663 | } 664 | }, 665 | "node_modules/buffer-from": { 666 | "version": "1.1.2", 667 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 668 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 669 | "dev": true 670 | }, 671 | "node_modules/busboy": { 672 | "version": "1.6.0", 673 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 674 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 675 | "dev": true, 676 | "dependencies": { 677 | "streamsearch": "^1.1.0" 678 | }, 679 | "engines": { 680 | "node": ">=10.16.0" 681 | } 682 | }, 683 | "node_modules/call-bind": { 684 | "version": "1.0.2", 685 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 686 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 687 | "dev": true, 688 | "dependencies": { 689 | "function-bind": "^1.1.1", 690 | "get-intrinsic": "^1.0.2" 691 | }, 692 | "funding": { 693 | "url": "https://github.com/sponsors/ljharb" 694 | } 695 | }, 696 | "node_modules/capnp-ts": { 697 | "version": "0.7.0", 698 | "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", 699 | "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", 700 | "dev": true, 701 | "dependencies": { 702 | "debug": "^4.3.1", 703 | "tslib": "^2.2.0" 704 | } 705 | }, 706 | "node_modules/chokidar": { 707 | "version": "3.5.3", 708 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 709 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 710 | "dev": true, 711 | "funding": [ 712 | { 713 | "type": "individual", 714 | "url": "https://paulmillr.com/funding/" 715 | } 716 | ], 717 | "dependencies": { 718 | "anymatch": "~3.1.2", 719 | "braces": "~3.0.2", 720 | "glob-parent": "~5.1.2", 721 | "is-binary-path": "~2.1.0", 722 | "is-glob": "~4.0.1", 723 | "normalize-path": "~3.0.0", 724 | "readdirp": "~3.6.0" 725 | }, 726 | "engines": { 727 | "node": ">= 8.10.0" 728 | }, 729 | "optionalDependencies": { 730 | "fsevents": "~2.3.2" 731 | } 732 | }, 733 | "node_modules/chownr": { 734 | "version": "1.1.4", 735 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 736 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", 737 | "dev": true 738 | }, 739 | "node_modules/cookie": { 740 | "version": "0.5.0", 741 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 742 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 743 | "dev": true, 744 | "engines": { 745 | "node": ">= 0.6" 746 | } 747 | }, 748 | "node_modules/data-uri-to-buffer": { 749 | "version": "2.0.2", 750 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", 751 | "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", 752 | "dev": true 753 | }, 754 | "node_modules/debug": { 755 | "version": "4.3.4", 756 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 757 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 758 | "dev": true, 759 | "dependencies": { 760 | "ms": "2.1.2" 761 | }, 762 | "engines": { 763 | "node": ">=6.0" 764 | }, 765 | "peerDependenciesMeta": { 766 | "supports-color": { 767 | "optional": true 768 | } 769 | } 770 | }, 771 | "node_modules/decompress-response": { 772 | "version": "6.0.0", 773 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 774 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 775 | "dev": true, 776 | "dependencies": { 777 | "mimic-response": "^3.1.0" 778 | }, 779 | "engines": { 780 | "node": ">=10" 781 | }, 782 | "funding": { 783 | "url": "https://github.com/sponsors/sindresorhus" 784 | } 785 | }, 786 | "node_modules/deep-extend": { 787 | "version": "0.6.0", 788 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 789 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 790 | "dev": true, 791 | "engines": { 792 | "node": ">=4.0.0" 793 | } 794 | }, 795 | "node_modules/detect-libc": { 796 | "version": "2.0.2", 797 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", 798 | "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", 799 | "dev": true, 800 | "engines": { 801 | "node": ">=8" 802 | } 803 | }, 804 | "node_modules/devtools-protocol": { 805 | "version": "0.0.1019158", 806 | "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1019158.tgz", 807 | "integrity": "sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ==", 808 | "dev": true 809 | }, 810 | "node_modules/emitter-component": { 811 | "version": "1.1.1", 812 | "resolved": "https://registry.npmjs.org/emitter-component/-/emitter-component-1.1.1.tgz", 813 | "integrity": "sha512-G+mpdiAySMuB7kesVRLuyvYRqDmshB7ReKEVuyBPkzQlmiDiLrt7hHHIy4Aff552bgknVN7B2/d3lzhGO5dvpQ==", 814 | "dev": true 815 | }, 816 | "node_modules/end-of-stream": { 817 | "version": "1.4.4", 818 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 819 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 820 | "dev": true, 821 | "dependencies": { 822 | "once": "^1.4.0" 823 | } 824 | }, 825 | "node_modules/esbuild": { 826 | "version": "0.17.19", 827 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", 828 | "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", 829 | "dev": true, 830 | "hasInstallScript": true, 831 | "bin": { 832 | "esbuild": "bin/esbuild" 833 | }, 834 | "engines": { 835 | "node": ">=12" 836 | }, 837 | "optionalDependencies": { 838 | "@esbuild/android-arm": "0.17.19", 839 | "@esbuild/android-arm64": "0.17.19", 840 | "@esbuild/android-x64": "0.17.19", 841 | "@esbuild/darwin-arm64": "0.17.19", 842 | "@esbuild/darwin-x64": "0.17.19", 843 | "@esbuild/freebsd-arm64": "0.17.19", 844 | "@esbuild/freebsd-x64": "0.17.19", 845 | "@esbuild/linux-arm": "0.17.19", 846 | "@esbuild/linux-arm64": "0.17.19", 847 | "@esbuild/linux-ia32": "0.17.19", 848 | "@esbuild/linux-loong64": "0.17.19", 849 | "@esbuild/linux-mips64el": "0.17.19", 850 | "@esbuild/linux-ppc64": "0.17.19", 851 | "@esbuild/linux-riscv64": "0.17.19", 852 | "@esbuild/linux-s390x": "0.17.19", 853 | "@esbuild/linux-x64": "0.17.19", 854 | "@esbuild/netbsd-x64": "0.17.19", 855 | "@esbuild/openbsd-x64": "0.17.19", 856 | "@esbuild/sunos-x64": "0.17.19", 857 | "@esbuild/win32-arm64": "0.17.19", 858 | "@esbuild/win32-ia32": "0.17.19", 859 | "@esbuild/win32-x64": "0.17.19" 860 | } 861 | }, 862 | "node_modules/escape-string-regexp": { 863 | "version": "4.0.0", 864 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 865 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 866 | "dev": true, 867 | "engines": { 868 | "node": ">=10" 869 | }, 870 | "funding": { 871 | "url": "https://github.com/sponsors/sindresorhus" 872 | } 873 | }, 874 | "node_modules/estree-walker": { 875 | "version": "0.6.1", 876 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 877 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 878 | "dev": true 879 | }, 880 | "node_modules/events": { 881 | "version": "3.3.0", 882 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 883 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 884 | "dev": true, 885 | "engines": { 886 | "node": ">=0.8.x" 887 | } 888 | }, 889 | "node_modules/exit-hook": { 890 | "version": "2.2.1", 891 | "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", 892 | "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", 893 | "dev": true, 894 | "engines": { 895 | "node": ">=6" 896 | }, 897 | "funding": { 898 | "url": "https://github.com/sponsors/sindresorhus" 899 | } 900 | }, 901 | "node_modules/expand-template": { 902 | "version": "2.0.3", 903 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", 904 | "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", 905 | "dev": true, 906 | "engines": { 907 | "node": ">=6" 908 | } 909 | }, 910 | "node_modules/file-uri-to-path": { 911 | "version": "1.0.0", 912 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 913 | "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", 914 | "dev": true 915 | }, 916 | "node_modules/fill-range": { 917 | "version": "7.0.1", 918 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 919 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 920 | "dev": true, 921 | "dependencies": { 922 | "to-regex-range": "^5.0.1" 923 | }, 924 | "engines": { 925 | "node": ">=8" 926 | } 927 | }, 928 | "node_modules/for-each": { 929 | "version": "0.3.3", 930 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 931 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 932 | "dev": true, 933 | "dependencies": { 934 | "is-callable": "^1.1.3" 935 | } 936 | }, 937 | "node_modules/fs-constants": { 938 | "version": "1.0.0", 939 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 940 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", 941 | "dev": true 942 | }, 943 | "node_modules/fsevents": { 944 | "version": "2.3.2", 945 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 946 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 947 | "dev": true, 948 | "hasInstallScript": true, 949 | "optional": true, 950 | "os": [ 951 | "darwin" 952 | ], 953 | "engines": { 954 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 955 | } 956 | }, 957 | "node_modules/function-bind": { 958 | "version": "1.1.1", 959 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 960 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 961 | "dev": true 962 | }, 963 | "node_modules/get-intrinsic": { 964 | "version": "1.2.1", 965 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", 966 | "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", 967 | "dev": true, 968 | "dependencies": { 969 | "function-bind": "^1.1.1", 970 | "has": "^1.0.3", 971 | "has-proto": "^1.0.1", 972 | "has-symbols": "^1.0.3" 973 | }, 974 | "funding": { 975 | "url": "https://github.com/sponsors/ljharb" 976 | } 977 | }, 978 | "node_modules/get-source": { 979 | "version": "2.0.12", 980 | "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", 981 | "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", 982 | "dev": true, 983 | "dependencies": { 984 | "data-uri-to-buffer": "^2.0.0", 985 | "source-map": "^0.6.1" 986 | } 987 | }, 988 | "node_modules/get-source/node_modules/source-map": { 989 | "version": "0.6.1", 990 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 991 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 992 | "dev": true, 993 | "engines": { 994 | "node": ">=0.10.0" 995 | } 996 | }, 997 | "node_modules/github-from-package": { 998 | "version": "0.0.0", 999 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", 1000 | "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", 1001 | "dev": true 1002 | }, 1003 | "node_modules/glob-parent": { 1004 | "version": "5.1.2", 1005 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1006 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1007 | "dev": true, 1008 | "dependencies": { 1009 | "is-glob": "^4.0.1" 1010 | }, 1011 | "engines": { 1012 | "node": ">= 6" 1013 | } 1014 | }, 1015 | "node_modules/glob-to-regexp": { 1016 | "version": "0.4.1", 1017 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 1018 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", 1019 | "dev": true 1020 | }, 1021 | "node_modules/gopd": { 1022 | "version": "1.0.1", 1023 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 1024 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 1025 | "dev": true, 1026 | "dependencies": { 1027 | "get-intrinsic": "^1.1.3" 1028 | }, 1029 | "funding": { 1030 | "url": "https://github.com/sponsors/ljharb" 1031 | } 1032 | }, 1033 | "node_modules/has": { 1034 | "version": "1.0.3", 1035 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1036 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1037 | "dev": true, 1038 | "dependencies": { 1039 | "function-bind": "^1.1.1" 1040 | }, 1041 | "engines": { 1042 | "node": ">= 0.4.0" 1043 | } 1044 | }, 1045 | "node_modules/has-proto": { 1046 | "version": "1.0.1", 1047 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 1048 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 1049 | "dev": true, 1050 | "engines": { 1051 | "node": ">= 0.4" 1052 | }, 1053 | "funding": { 1054 | "url": "https://github.com/sponsors/ljharb" 1055 | } 1056 | }, 1057 | "node_modules/has-symbols": { 1058 | "version": "1.0.3", 1059 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1060 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 1061 | "dev": true, 1062 | "engines": { 1063 | "node": ">= 0.4" 1064 | }, 1065 | "funding": { 1066 | "url": "https://github.com/sponsors/ljharb" 1067 | } 1068 | }, 1069 | "node_modules/has-tostringtag": { 1070 | "version": "1.0.0", 1071 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 1072 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 1073 | "dev": true, 1074 | "dependencies": { 1075 | "has-symbols": "^1.0.2" 1076 | }, 1077 | "engines": { 1078 | "node": ">= 0.4" 1079 | }, 1080 | "funding": { 1081 | "url": "https://github.com/sponsors/ljharb" 1082 | } 1083 | }, 1084 | "node_modules/http-cache-semantics": { 1085 | "version": "4.1.1", 1086 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", 1087 | "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", 1088 | "dev": true 1089 | }, 1090 | "node_modules/ieee754": { 1091 | "version": "1.2.1", 1092 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1093 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 1094 | "dev": true, 1095 | "funding": [ 1096 | { 1097 | "type": "github", 1098 | "url": "https://github.com/sponsors/feross" 1099 | }, 1100 | { 1101 | "type": "patreon", 1102 | "url": "https://www.patreon.com/feross" 1103 | }, 1104 | { 1105 | "type": "consulting", 1106 | "url": "https://feross.org/support" 1107 | } 1108 | ] 1109 | }, 1110 | "node_modules/inherits": { 1111 | "version": "2.0.4", 1112 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1113 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1114 | "dev": true 1115 | }, 1116 | "node_modules/ini": { 1117 | "version": "1.3.8", 1118 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 1119 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 1120 | "dev": true 1121 | }, 1122 | "node_modules/is-arguments": { 1123 | "version": "1.1.1", 1124 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", 1125 | "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", 1126 | "dev": true, 1127 | "dependencies": { 1128 | "call-bind": "^1.0.2", 1129 | "has-tostringtag": "^1.0.0" 1130 | }, 1131 | "engines": { 1132 | "node": ">= 0.4" 1133 | }, 1134 | "funding": { 1135 | "url": "https://github.com/sponsors/ljharb" 1136 | } 1137 | }, 1138 | "node_modules/is-binary-path": { 1139 | "version": "2.1.0", 1140 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1141 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1142 | "dev": true, 1143 | "dependencies": { 1144 | "binary-extensions": "^2.0.0" 1145 | }, 1146 | "engines": { 1147 | "node": ">=8" 1148 | } 1149 | }, 1150 | "node_modules/is-callable": { 1151 | "version": "1.2.7", 1152 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", 1153 | "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", 1154 | "dev": true, 1155 | "engines": { 1156 | "node": ">= 0.4" 1157 | }, 1158 | "funding": { 1159 | "url": "https://github.com/sponsors/ljharb" 1160 | } 1161 | }, 1162 | "node_modules/is-extglob": { 1163 | "version": "2.1.1", 1164 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1165 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1166 | "dev": true, 1167 | "engines": { 1168 | "node": ">=0.10.0" 1169 | } 1170 | }, 1171 | "node_modules/is-generator-function": { 1172 | "version": "1.0.10", 1173 | "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", 1174 | "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", 1175 | "dev": true, 1176 | "dependencies": { 1177 | "has-tostringtag": "^1.0.0" 1178 | }, 1179 | "engines": { 1180 | "node": ">= 0.4" 1181 | }, 1182 | "funding": { 1183 | "url": "https://github.com/sponsors/ljharb" 1184 | } 1185 | }, 1186 | "node_modules/is-glob": { 1187 | "version": "4.0.3", 1188 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1189 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1190 | "dev": true, 1191 | "dependencies": { 1192 | "is-extglob": "^2.1.1" 1193 | }, 1194 | "engines": { 1195 | "node": ">=0.10.0" 1196 | } 1197 | }, 1198 | "node_modules/is-number": { 1199 | "version": "7.0.0", 1200 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1201 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1202 | "dev": true, 1203 | "engines": { 1204 | "node": ">=0.12.0" 1205 | } 1206 | }, 1207 | "node_modules/is-typed-array": { 1208 | "version": "1.1.10", 1209 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", 1210 | "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", 1211 | "dev": true, 1212 | "dependencies": { 1213 | "available-typed-arrays": "^1.0.5", 1214 | "call-bind": "^1.0.2", 1215 | "for-each": "^0.3.3", 1216 | "gopd": "^1.0.1", 1217 | "has-tostringtag": "^1.0.0" 1218 | }, 1219 | "engines": { 1220 | "node": ">= 0.4" 1221 | }, 1222 | "funding": { 1223 | "url": "https://github.com/sponsors/ljharb" 1224 | } 1225 | }, 1226 | "node_modules/kleur": { 1227 | "version": "4.1.5", 1228 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 1229 | "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", 1230 | "dev": true, 1231 | "engines": { 1232 | "node": ">=6" 1233 | } 1234 | }, 1235 | "node_modules/lru-cache": { 1236 | "version": "6.0.0", 1237 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1238 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1239 | "dev": true, 1240 | "dependencies": { 1241 | "yallist": "^4.0.0" 1242 | }, 1243 | "engines": { 1244 | "node": ">=10" 1245 | } 1246 | }, 1247 | "node_modules/magic-string": { 1248 | "version": "0.25.9", 1249 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 1250 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 1251 | "dev": true, 1252 | "dependencies": { 1253 | "sourcemap-codec": "^1.4.8" 1254 | } 1255 | }, 1256 | "node_modules/mime": { 1257 | "version": "3.0.0", 1258 | "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", 1259 | "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", 1260 | "dev": true, 1261 | "bin": { 1262 | "mime": "cli.js" 1263 | }, 1264 | "engines": { 1265 | "node": ">=10.0.0" 1266 | } 1267 | }, 1268 | "node_modules/mimic-response": { 1269 | "version": "3.1.0", 1270 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 1271 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 1272 | "dev": true, 1273 | "engines": { 1274 | "node": ">=10" 1275 | }, 1276 | "funding": { 1277 | "url": "https://github.com/sponsors/sindresorhus" 1278 | } 1279 | }, 1280 | "node_modules/miniflare": { 1281 | "version": "3.20230904.0", 1282 | "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20230904.0.tgz", 1283 | "integrity": "sha512-+OWQqEk8hV7vZaPCoj5dk1lZr4YUy56OiyNZ45/3ITYf+ZxgQOBPWhQhpw1jCahkRKGPa9Aykz01sc+GhPZYDA==", 1284 | "dev": true, 1285 | "dependencies": { 1286 | "acorn": "^8.8.0", 1287 | "acorn-walk": "^8.2.0", 1288 | "better-sqlite3": "^8.1.0", 1289 | "capnp-ts": "^0.7.0", 1290 | "exit-hook": "^2.2.1", 1291 | "glob-to-regexp": "^0.4.1", 1292 | "http-cache-semantics": "^4.1.0", 1293 | "kleur": "^4.1.5", 1294 | "source-map-support": "0.5.21", 1295 | "stoppable": "^1.1.0", 1296 | "undici": "^5.22.1", 1297 | "workerd": "1.20230904.0", 1298 | "ws": "^8.11.0", 1299 | "youch": "^3.2.2", 1300 | "zod": "^3.20.6" 1301 | }, 1302 | "engines": { 1303 | "node": ">=16.13" 1304 | } 1305 | }, 1306 | "node_modules/minimist": { 1307 | "version": "1.2.8", 1308 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 1309 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 1310 | "dev": true, 1311 | "funding": { 1312 | "url": "https://github.com/sponsors/ljharb" 1313 | } 1314 | }, 1315 | "node_modules/mkdirp-classic": { 1316 | "version": "0.5.3", 1317 | "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", 1318 | "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", 1319 | "dev": true 1320 | }, 1321 | "node_modules/ms": { 1322 | "version": "2.1.2", 1323 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1324 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1325 | "dev": true 1326 | }, 1327 | "node_modules/mustache": { 1328 | "version": "4.2.0", 1329 | "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", 1330 | "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", 1331 | "dev": true, 1332 | "bin": { 1333 | "mustache": "bin/mustache" 1334 | } 1335 | }, 1336 | "node_modules/nanoid": { 1337 | "version": "4.0.2", 1338 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", 1339 | "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", 1340 | "funding": [ 1341 | { 1342 | "type": "github", 1343 | "url": "https://github.com/sponsors/ai" 1344 | } 1345 | ], 1346 | "bin": { 1347 | "nanoid": "bin/nanoid.js" 1348 | }, 1349 | "engines": { 1350 | "node": "^14 || ^16 || >=18" 1351 | } 1352 | }, 1353 | "node_modules/napi-build-utils": { 1354 | "version": "1.0.2", 1355 | "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", 1356 | "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", 1357 | "dev": true 1358 | }, 1359 | "node_modules/node-abi": { 1360 | "version": "3.47.0", 1361 | "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.47.0.tgz", 1362 | "integrity": "sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==", 1363 | "dev": true, 1364 | "dependencies": { 1365 | "semver": "^7.3.5" 1366 | }, 1367 | "engines": { 1368 | "node": ">=10" 1369 | } 1370 | }, 1371 | "node_modules/node-forge": { 1372 | "version": "1.3.1", 1373 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", 1374 | "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", 1375 | "dev": true, 1376 | "engines": { 1377 | "node": ">= 6.13.0" 1378 | } 1379 | }, 1380 | "node_modules/normalize-path": { 1381 | "version": "3.0.0", 1382 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1383 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1384 | "dev": true, 1385 | "engines": { 1386 | "node": ">=0.10.0" 1387 | } 1388 | }, 1389 | "node_modules/once": { 1390 | "version": "1.4.0", 1391 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1392 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1393 | "dev": true, 1394 | "dependencies": { 1395 | "wrappy": "1" 1396 | } 1397 | }, 1398 | "node_modules/path-to-regexp": { 1399 | "version": "6.2.1", 1400 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", 1401 | "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", 1402 | "dev": true 1403 | }, 1404 | "node_modules/picomatch": { 1405 | "version": "2.3.1", 1406 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1407 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1408 | "dev": true, 1409 | "engines": { 1410 | "node": ">=8.6" 1411 | }, 1412 | "funding": { 1413 | "url": "https://github.com/sponsors/jonschlinkert" 1414 | } 1415 | }, 1416 | "node_modules/prebuild-install": { 1417 | "version": "7.1.1", 1418 | "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", 1419 | "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", 1420 | "dev": true, 1421 | "dependencies": { 1422 | "detect-libc": "^2.0.0", 1423 | "expand-template": "^2.0.3", 1424 | "github-from-package": "0.0.0", 1425 | "minimist": "^1.2.3", 1426 | "mkdirp-classic": "^0.5.3", 1427 | "napi-build-utils": "^1.0.1", 1428 | "node-abi": "^3.3.0", 1429 | "pump": "^3.0.0", 1430 | "rc": "^1.2.7", 1431 | "simple-get": "^4.0.0", 1432 | "tar-fs": "^2.0.0", 1433 | "tunnel-agent": "^0.6.0" 1434 | }, 1435 | "bin": { 1436 | "prebuild-install": "bin.js" 1437 | }, 1438 | "engines": { 1439 | "node": ">=10" 1440 | } 1441 | }, 1442 | "node_modules/prettier": { 1443 | "version": "3.0.3", 1444 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", 1445 | "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", 1446 | "dev": true, 1447 | "bin": { 1448 | "prettier": "bin/prettier.cjs" 1449 | }, 1450 | "engines": { 1451 | "node": ">=14" 1452 | }, 1453 | "funding": { 1454 | "url": "https://github.com/prettier/prettier?sponsor=1" 1455 | } 1456 | }, 1457 | "node_modules/printable-characters": { 1458 | "version": "1.0.42", 1459 | "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", 1460 | "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", 1461 | "dev": true 1462 | }, 1463 | "node_modules/pump": { 1464 | "version": "3.0.0", 1465 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1466 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1467 | "dev": true, 1468 | "dependencies": { 1469 | "end-of-stream": "^1.1.0", 1470 | "once": "^1.3.1" 1471 | } 1472 | }, 1473 | "node_modules/punycode": { 1474 | "version": "1.3.2", 1475 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 1476 | "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", 1477 | "dev": true 1478 | }, 1479 | "node_modules/querystring": { 1480 | "version": "0.2.0", 1481 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 1482 | "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", 1483 | "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", 1484 | "dev": true, 1485 | "engines": { 1486 | "node": ">=0.4.x" 1487 | } 1488 | }, 1489 | "node_modules/rc": { 1490 | "version": "1.2.8", 1491 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 1492 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 1493 | "dev": true, 1494 | "dependencies": { 1495 | "deep-extend": "^0.6.0", 1496 | "ini": "~1.3.0", 1497 | "minimist": "^1.2.0", 1498 | "strip-json-comments": "~2.0.1" 1499 | }, 1500 | "bin": { 1501 | "rc": "cli.js" 1502 | } 1503 | }, 1504 | "node_modules/readable-stream": { 1505 | "version": "3.6.2", 1506 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 1507 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 1508 | "dev": true, 1509 | "dependencies": { 1510 | "inherits": "^2.0.3", 1511 | "string_decoder": "^1.1.1", 1512 | "util-deprecate": "^1.0.1" 1513 | }, 1514 | "engines": { 1515 | "node": ">= 6" 1516 | } 1517 | }, 1518 | "node_modules/readdirp": { 1519 | "version": "3.6.0", 1520 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1521 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1522 | "dev": true, 1523 | "dependencies": { 1524 | "picomatch": "^2.2.1" 1525 | }, 1526 | "engines": { 1527 | "node": ">=8.10.0" 1528 | } 1529 | }, 1530 | "node_modules/rollup-plugin-inject": { 1531 | "version": "3.0.2", 1532 | "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", 1533 | "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", 1534 | "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", 1535 | "dev": true, 1536 | "dependencies": { 1537 | "estree-walker": "^0.6.1", 1538 | "magic-string": "^0.25.3", 1539 | "rollup-pluginutils": "^2.8.1" 1540 | } 1541 | }, 1542 | "node_modules/rollup-plugin-node-polyfills": { 1543 | "version": "0.2.1", 1544 | "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", 1545 | "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", 1546 | "dev": true, 1547 | "dependencies": { 1548 | "rollup-plugin-inject": "^3.0.0" 1549 | } 1550 | }, 1551 | "node_modules/rollup-pluginutils": { 1552 | "version": "2.8.2", 1553 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 1554 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 1555 | "dev": true, 1556 | "dependencies": { 1557 | "estree-walker": "^0.6.1" 1558 | } 1559 | }, 1560 | "node_modules/safe-buffer": { 1561 | "version": "5.2.1", 1562 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1563 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1564 | "dev": true, 1565 | "funding": [ 1566 | { 1567 | "type": "github", 1568 | "url": "https://github.com/sponsors/feross" 1569 | }, 1570 | { 1571 | "type": "patreon", 1572 | "url": "https://www.patreon.com/feross" 1573 | }, 1574 | { 1575 | "type": "consulting", 1576 | "url": "https://feross.org/support" 1577 | } 1578 | ] 1579 | }, 1580 | "node_modules/sanitize-filename": { 1581 | "version": "1.6.3", 1582 | "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", 1583 | "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", 1584 | "dependencies": { 1585 | "truncate-utf8-bytes": "^1.0.0" 1586 | } 1587 | }, 1588 | "node_modules/selfsigned": { 1589 | "version": "2.1.1", 1590 | "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", 1591 | "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", 1592 | "dev": true, 1593 | "dependencies": { 1594 | "node-forge": "^1" 1595 | }, 1596 | "engines": { 1597 | "node": ">=10" 1598 | } 1599 | }, 1600 | "node_modules/semver": { 1601 | "version": "7.5.4", 1602 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 1603 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 1604 | "dev": true, 1605 | "dependencies": { 1606 | "lru-cache": "^6.0.0" 1607 | }, 1608 | "bin": { 1609 | "semver": "bin/semver.js" 1610 | }, 1611 | "engines": { 1612 | "node": ">=10" 1613 | } 1614 | }, 1615 | "node_modules/simple-concat": { 1616 | "version": "1.0.1", 1617 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", 1618 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", 1619 | "dev": true, 1620 | "funding": [ 1621 | { 1622 | "type": "github", 1623 | "url": "https://github.com/sponsors/feross" 1624 | }, 1625 | { 1626 | "type": "patreon", 1627 | "url": "https://www.patreon.com/feross" 1628 | }, 1629 | { 1630 | "type": "consulting", 1631 | "url": "https://feross.org/support" 1632 | } 1633 | ] 1634 | }, 1635 | "node_modules/simple-get": { 1636 | "version": "4.0.1", 1637 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", 1638 | "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", 1639 | "dev": true, 1640 | "funding": [ 1641 | { 1642 | "type": "github", 1643 | "url": "https://github.com/sponsors/feross" 1644 | }, 1645 | { 1646 | "type": "patreon", 1647 | "url": "https://www.patreon.com/feross" 1648 | }, 1649 | { 1650 | "type": "consulting", 1651 | "url": "https://feross.org/support" 1652 | } 1653 | ], 1654 | "dependencies": { 1655 | "decompress-response": "^6.0.0", 1656 | "once": "^1.3.1", 1657 | "simple-concat": "^1.0.0" 1658 | } 1659 | }, 1660 | "node_modules/source-map": { 1661 | "version": "0.7.4", 1662 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", 1663 | "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", 1664 | "dev": true, 1665 | "engines": { 1666 | "node": ">= 8" 1667 | } 1668 | }, 1669 | "node_modules/source-map-support": { 1670 | "version": "0.5.21", 1671 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 1672 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 1673 | "dev": true, 1674 | "dependencies": { 1675 | "buffer-from": "^1.0.0", 1676 | "source-map": "^0.6.0" 1677 | } 1678 | }, 1679 | "node_modules/source-map-support/node_modules/source-map": { 1680 | "version": "0.6.1", 1681 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1682 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1683 | "dev": true, 1684 | "engines": { 1685 | "node": ">=0.10.0" 1686 | } 1687 | }, 1688 | "node_modules/sourcemap-codec": { 1689 | "version": "1.4.8", 1690 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1691 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 1692 | "deprecated": "Please use @jridgewell/sourcemap-codec instead", 1693 | "dev": true 1694 | }, 1695 | "node_modules/stacktracey": { 1696 | "version": "2.1.8", 1697 | "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", 1698 | "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", 1699 | "dev": true, 1700 | "dependencies": { 1701 | "as-table": "^1.0.36", 1702 | "get-source": "^2.0.12" 1703 | } 1704 | }, 1705 | "node_modules/stoppable": { 1706 | "version": "1.1.0", 1707 | "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", 1708 | "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", 1709 | "dev": true, 1710 | "engines": { 1711 | "node": ">=4", 1712 | "npm": ">=6" 1713 | } 1714 | }, 1715 | "node_modules/stream": { 1716 | "version": "0.0.2", 1717 | "resolved": "https://registry.npmjs.org/stream/-/stream-0.0.2.tgz", 1718 | "integrity": "sha512-gCq3NDI2P35B2n6t76YJuOp7d6cN/C7Rt0577l91wllh0sY9ZBuw9KaSGqH/b0hzn3CWWJbpbW0W0WvQ1H/Q7g==", 1719 | "dev": true, 1720 | "dependencies": { 1721 | "emitter-component": "^1.1.1" 1722 | } 1723 | }, 1724 | "node_modules/streamsearch": { 1725 | "version": "1.1.0", 1726 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 1727 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", 1728 | "dev": true, 1729 | "engines": { 1730 | "node": ">=10.0.0" 1731 | } 1732 | }, 1733 | "node_modules/string_decoder": { 1734 | "version": "1.3.0", 1735 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1736 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1737 | "dev": true, 1738 | "dependencies": { 1739 | "safe-buffer": "~5.2.0" 1740 | } 1741 | }, 1742 | "node_modules/strip-json-comments": { 1743 | "version": "2.0.1", 1744 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1745 | "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", 1746 | "dev": true, 1747 | "engines": { 1748 | "node": ">=0.10.0" 1749 | } 1750 | }, 1751 | "node_modules/tar-fs": { 1752 | "version": "2.1.1", 1753 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", 1754 | "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", 1755 | "dev": true, 1756 | "dependencies": { 1757 | "chownr": "^1.1.1", 1758 | "mkdirp-classic": "^0.5.2", 1759 | "pump": "^3.0.0", 1760 | "tar-stream": "^2.1.4" 1761 | } 1762 | }, 1763 | "node_modules/tar-stream": { 1764 | "version": "2.2.0", 1765 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", 1766 | "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", 1767 | "dev": true, 1768 | "dependencies": { 1769 | "bl": "^4.0.3", 1770 | "end-of-stream": "^1.4.1", 1771 | "fs-constants": "^1.0.0", 1772 | "inherits": "^2.0.3", 1773 | "readable-stream": "^3.1.1" 1774 | }, 1775 | "engines": { 1776 | "node": ">=6" 1777 | } 1778 | }, 1779 | "node_modules/to-regex-range": { 1780 | "version": "5.0.1", 1781 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1782 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1783 | "dev": true, 1784 | "dependencies": { 1785 | "is-number": "^7.0.0" 1786 | }, 1787 | "engines": { 1788 | "node": ">=8.0" 1789 | } 1790 | }, 1791 | "node_modules/truncate-utf8-bytes": { 1792 | "version": "1.0.2", 1793 | "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", 1794 | "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", 1795 | "dependencies": { 1796 | "utf8-byte-length": "^1.0.1" 1797 | } 1798 | }, 1799 | "node_modules/tslib": { 1800 | "version": "2.6.2", 1801 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 1802 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", 1803 | "dev": true 1804 | }, 1805 | "node_modules/tunnel-agent": { 1806 | "version": "0.6.0", 1807 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1808 | "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", 1809 | "dev": true, 1810 | "dependencies": { 1811 | "safe-buffer": "^5.0.1" 1812 | }, 1813 | "engines": { 1814 | "node": "*" 1815 | } 1816 | }, 1817 | "node_modules/undici": { 1818 | "version": "5.23.0", 1819 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.23.0.tgz", 1820 | "integrity": "sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==", 1821 | "dev": true, 1822 | "dependencies": { 1823 | "busboy": "^1.6.0" 1824 | }, 1825 | "engines": { 1826 | "node": ">=14.0" 1827 | } 1828 | }, 1829 | "node_modules/url": { 1830 | "version": "0.11.0", 1831 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 1832 | "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", 1833 | "dev": true, 1834 | "dependencies": { 1835 | "punycode": "1.3.2", 1836 | "querystring": "0.2.0" 1837 | } 1838 | }, 1839 | "node_modules/utf8-byte-length": { 1840 | "version": "1.0.4", 1841 | "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", 1842 | "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" 1843 | }, 1844 | "node_modules/util": { 1845 | "version": "0.12.5", 1846 | "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", 1847 | "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", 1848 | "dev": true, 1849 | "dependencies": { 1850 | "inherits": "^2.0.3", 1851 | "is-arguments": "^1.0.4", 1852 | "is-generator-function": "^1.0.7", 1853 | "is-typed-array": "^1.1.3", 1854 | "which-typed-array": "^1.1.2" 1855 | } 1856 | }, 1857 | "node_modules/util-deprecate": { 1858 | "version": "1.0.2", 1859 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1860 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 1861 | "dev": true 1862 | }, 1863 | "node_modules/which-typed-array": { 1864 | "version": "1.1.9", 1865 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", 1866 | "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", 1867 | "dev": true, 1868 | "dependencies": { 1869 | "available-typed-arrays": "^1.0.5", 1870 | "call-bind": "^1.0.2", 1871 | "for-each": "^0.3.3", 1872 | "gopd": "^1.0.1", 1873 | "has-tostringtag": "^1.0.0", 1874 | "is-typed-array": "^1.1.10" 1875 | }, 1876 | "engines": { 1877 | "node": ">= 0.4" 1878 | }, 1879 | "funding": { 1880 | "url": "https://github.com/sponsors/ljharb" 1881 | } 1882 | }, 1883 | "node_modules/workerd": { 1884 | "version": "1.20230904.0", 1885 | "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20230904.0.tgz", 1886 | "integrity": "sha512-t9znszH0rQGK4mJGvF9L3nN0qKEaObAGx0JkywFtAwH8OkSn+YfQbHNZE+YsJ4qa1hOz1DCNEk08UDFRBaYq4g==", 1887 | "dev": true, 1888 | "hasInstallScript": true, 1889 | "bin": { 1890 | "workerd": "bin/workerd" 1891 | }, 1892 | "engines": { 1893 | "node": ">=16" 1894 | }, 1895 | "optionalDependencies": { 1896 | "@cloudflare/workerd-darwin-64": "1.20230904.0", 1897 | "@cloudflare/workerd-darwin-arm64": "1.20230904.0", 1898 | "@cloudflare/workerd-linux-64": "1.20230904.0", 1899 | "@cloudflare/workerd-linux-arm64": "1.20230904.0", 1900 | "@cloudflare/workerd-windows-64": "1.20230904.0" 1901 | } 1902 | }, 1903 | "node_modules/wrangler": { 1904 | "version": "3.7.0", 1905 | "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.7.0.tgz", 1906 | "integrity": "sha512-7823G5U7WwDIkqaZrxSh/BQ/pxA4WIX3R9GwYfh+MYJj+k5s56KGQ+K/NmY/JbgZsxVEHDjhoYzqDqJebQMZeg==", 1907 | "dev": true, 1908 | "dependencies": { 1909 | "@cloudflare/kv-asset-handler": "^0.2.0", 1910 | "@esbuild-plugins/node-globals-polyfill": "^0.2.3", 1911 | "@esbuild-plugins/node-modules-polyfill": "^0.2.2", 1912 | "blake3-wasm": "^2.1.5", 1913 | "chokidar": "^3.5.3", 1914 | "esbuild": "0.17.19", 1915 | "miniflare": "3.20230904.0", 1916 | "nanoid": "^3.3.3", 1917 | "path-to-regexp": "^6.2.0", 1918 | "selfsigned": "^2.0.1", 1919 | "source-map": "^0.7.4", 1920 | "xxhash-wasm": "^1.0.1" 1921 | }, 1922 | "bin": { 1923 | "wrangler": "bin/wrangler.js", 1924 | "wrangler2": "bin/wrangler.js" 1925 | }, 1926 | "engines": { 1927 | "node": ">=16.13.0" 1928 | }, 1929 | "optionalDependencies": { 1930 | "fsevents": "~2.3.2" 1931 | } 1932 | }, 1933 | "node_modules/wrangler/node_modules/nanoid": { 1934 | "version": "3.3.6", 1935 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 1936 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", 1937 | "dev": true, 1938 | "funding": [ 1939 | { 1940 | "type": "github", 1941 | "url": "https://github.com/sponsors/ai" 1942 | } 1943 | ], 1944 | "bin": { 1945 | "nanoid": "bin/nanoid.cjs" 1946 | }, 1947 | "engines": { 1948 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1949 | } 1950 | }, 1951 | "node_modules/wrappy": { 1952 | "version": "1.0.2", 1953 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1954 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1955 | "dev": true 1956 | }, 1957 | "node_modules/ws": { 1958 | "version": "8.13.0", 1959 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", 1960 | "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", 1961 | "dev": true, 1962 | "engines": { 1963 | "node": ">=10.0.0" 1964 | }, 1965 | "peerDependencies": { 1966 | "bufferutil": "^4.0.1", 1967 | "utf-8-validate": ">=5.0.2" 1968 | }, 1969 | "peerDependenciesMeta": { 1970 | "bufferutil": { 1971 | "optional": true 1972 | }, 1973 | "utf-8-validate": { 1974 | "optional": true 1975 | } 1976 | } 1977 | }, 1978 | "node_modules/xxhash-wasm": { 1979 | "version": "1.0.2", 1980 | "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", 1981 | "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", 1982 | "dev": true 1983 | }, 1984 | "node_modules/yallist": { 1985 | "version": "4.0.0", 1986 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1987 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1988 | "dev": true 1989 | }, 1990 | "node_modules/youch": { 1991 | "version": "3.2.3", 1992 | "resolved": "https://registry.npmjs.org/youch/-/youch-3.2.3.tgz", 1993 | "integrity": "sha512-ZBcWz/uzZaQVdCvfV4uk616Bbpf2ee+F/AvuKDR5EwX/Y4v06xWdtMluqTD7+KlZdM93lLm9gMZYo0sKBS0pgw==", 1994 | "dev": true, 1995 | "dependencies": { 1996 | "cookie": "^0.5.0", 1997 | "mustache": "^4.2.0", 1998 | "stacktracey": "^2.1.8" 1999 | } 2000 | }, 2001 | "node_modules/zod": { 2002 | "version": "3.22.2", 2003 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.2.tgz", 2004 | "integrity": "sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==", 2005 | "dev": true, 2006 | "funding": { 2007 | "url": "https://github.com/sponsors/colinhacks" 2008 | } 2009 | } 2010 | } 2011 | } 2012 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "workers-browser", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "format": "prettier --write '*.{json,js}' 'src/**/*.{js,ts}'", 8 | "deploy": "wrangler deploy" 9 | }, 10 | "author": "Jonas Wagner", 11 | "license": "MIT", 12 | "devDependencies": { 13 | "@cloudflare/puppeteer": "^0.0.5", 14 | "@cloudflare/workers-types": "^4.20230904.0", 15 | "prettier": "^3.0.3", 16 | "wrangler": "^3.7.0" 17 | }, 18 | "dependencies": { 19 | "nanoid": "^4.0.2", 20 | "sanitize-filename": "^1.6.3" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import puppeteer from '@cloudflare/puppeteer' 2 | import sanitize from 'sanitize-filename' 3 | import { nanoid } from 'nanoid' 4 | 5 | export interface Env { 6 | bucketUrl: string 7 | mybrowser: any 8 | puppeteer: R2Bucket 9 | } 10 | 11 | export default { 12 | async fetch(request: Request, env: Env): Promise { 13 | const { searchParams } = new URL(request.url) 14 | let url = searchParams.get('url') 15 | let img: Buffer 16 | if (url) { 17 | const browser = await puppeteer.launch(env.mybrowser) 18 | const page = await browser.newPage() 19 | await page.goto(url) 20 | img = (await page.screenshot({ fullPage: true })) as Buffer 21 | const title = sanitize(await page.title(), { replacement: '-' }) 22 | const id = nanoid(5) 23 | 24 | const titleString = `${title}_${id}.jpg` 25 | 26 | await browser.close() 27 | await env.puppeteer.put(titleString, img) 28 | return Response.redirect(`${env.bucketUrl}/${titleString}`, 307) 29 | } else { 30 | return new Response('Please add the ?url=https://example.com/ parameter') 31 | } 32 | }, 33 | } 34 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Enable incremental compilation */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "esnext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 15 | "lib": ["esnext"] /* Specify a set of bundled library declaration files that describe the target runtime environment. */, 16 | "jsx": "react" /* Specify what JSX code is generated. */, 17 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ 22 | // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | 26 | /* Modules */ 27 | "module": "esnext" /* Specify what module code is generated. */, 28 | // "rootDir": "./", /* Specify the root folder within your source files. */ 29 | "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, 30 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 31 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 32 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 33 | // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ 34 | "types": ["@cloudflare/workers-types"] /* Specify type package names to be included without being referenced in a source file. */, 35 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 36 | "resolveJsonModule": true /* Enable importing .json files */, 37 | // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ 38 | 39 | /* JavaScript Support */ 40 | "allowJs": true /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */, 41 | "checkJs": false /* Enable error reporting in type-checked JavaScript files. */, 42 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ 43 | 44 | /* Emit */ 45 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 46 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 47 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 48 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 49 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ 50 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 51 | // "removeComments": true, /* Disable emitting comments. */ 52 | "noEmit": true /* Disable emitting files from a compilation. */, 53 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 54 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ 55 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 56 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 57 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 58 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 59 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 60 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 61 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 62 | // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ 63 | // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ 64 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 65 | // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ 66 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 67 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 68 | 69 | /* Interop Constraints */ 70 | "isolatedModules": true /* Ensure that each file can be safely transpiled without relying on other imports. */, 71 | "allowSyntheticDefaultImports": true /* Allow 'import x from y' when a module doesn't have a default export. */, 72 | // "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, 73 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 74 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 75 | 76 | /* Type Checking */ 77 | "strict": true /* Enable all strict type-checking options. */, 78 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ 79 | // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ 80 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 81 | // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ 82 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 83 | // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ 84 | // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ 85 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 86 | // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ 87 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ 88 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 89 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 90 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 91 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ 92 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 93 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ 94 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 95 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 96 | 97 | /* Completeness */ 98 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 99 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /wrangler.example.toml: -------------------------------------------------------------------------------- 1 | name = "browser-worker" 2 | main = "src/index.ts" 3 | compatibility_date = "2023-03-14" 4 | node_compat = true 5 | workers_dev = true 6 | 7 | 8 | browser = { binding = "mybrowser", type = "browser" } 9 | r2_buckets = [ 10 | { binding = "puppeteer", bucket_name = "puppeteer"} 11 | ] 12 | 13 | [vars] 14 | bucketUrl = "https://pub-example.r2.dev" -------------------------------------------------------------------------------- /wrangler.toml: -------------------------------------------------------------------------------- 1 | name = "browser-worker" 2 | main = "src/index.ts" 3 | compatibility_date = "2023-03-14" 4 | node_compat = true 5 | workers_dev = true 6 | 7 | 8 | browser = { binding = "mybrowser", type = "browser" } 9 | r2_buckets = [ 10 | { binding = "puppeteer", bucket_name = "puppeteer"} 11 | ] 12 | 13 | [vars] 14 | bucketUrl = "https://pub-example.r2.dev" --------------------------------------------------------------------------------