├── .editorconfig
├── .gitignore
├── .prettierrc
├── LICENSE
├── README.md
├── package-lock.json
├── package.json
├── src
├── config.js
├── index.js
├── redirect.js
└── rss.js
└── wrangler.toml
/.editorconfig:
--------------------------------------------------------------------------------
1 | # http://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | indent_style = tab
6 | tab_width = 2
7 | end_of_line = lf
8 | charset = utf-8
9 | trim_trailing_whitespace = true
10 | insert_final_newline = true
11 |
12 | [*.yml]
13 | indent_style = space
14 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 |
3 | logs
4 | _.log
5 | npm-debug.log_
6 | yarn-debug.log*
7 | yarn-error.log*
8 | lerna-debug.log*
9 | .pnpm-debug.log*
10 |
11 | # Diagnostic reports (https://nodejs.org/api/report.html)
12 |
13 | report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
14 |
15 | # Runtime data
16 |
17 | pids
18 | _.pid
19 | _.seed
20 | \*.pid.lock
21 |
22 | # Directory for instrumented libs generated by jscoverage/JSCover
23 |
24 | lib-cov
25 |
26 | # Coverage directory used by tools like istanbul
27 |
28 | coverage
29 | \*.lcov
30 |
31 | # nyc test coverage
32 |
33 | .nyc_output
34 |
35 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
36 |
37 | .grunt
38 |
39 | # Bower dependency directory (https://bower.io/)
40 |
41 | bower_components
42 |
43 | # node-waf configuration
44 |
45 | .lock-wscript
46 |
47 | # Compiled binary addons (https://nodejs.org/api/addons.html)
48 |
49 | build/Release
50 |
51 | # Dependency directories
52 |
53 | node_modules/
54 | jspm_packages/
55 |
56 | # Snowpack dependency directory (https://snowpack.dev/)
57 |
58 | web_modules/
59 |
60 | # TypeScript cache
61 |
62 | \*.tsbuildinfo
63 |
64 | # Optional npm cache directory
65 |
66 | .npm
67 |
68 | # Optional eslint cache
69 |
70 | .eslintcache
71 |
72 | # Optional stylelint cache
73 |
74 | .stylelintcache
75 |
76 | # Microbundle cache
77 |
78 | .rpt2_cache/
79 | .rts2_cache_cjs/
80 | .rts2_cache_es/
81 | .rts2_cache_umd/
82 |
83 | # Optional REPL history
84 |
85 | .node_repl_history
86 |
87 | # Output of 'npm pack'
88 |
89 | \*.tgz
90 |
91 | # Yarn Integrity file
92 |
93 | .yarn-integrity
94 |
95 | # dotenv environment variable files
96 |
97 | .env
98 | .env.development.local
99 | .env.test.local
100 | .env.production.local
101 | .env.local
102 |
103 | # parcel-bundler cache (https://parceljs.org/)
104 |
105 | .cache
106 | .parcel-cache
107 |
108 | # Next.js build output
109 |
110 | .next
111 | out
112 |
113 | # Nuxt.js build / generate output
114 |
115 | .nuxt
116 | dist
117 |
118 | # Gatsby files
119 |
120 | .cache/
121 |
122 | # Comment in the public line in if your project uses Gatsby and not Next.js
123 |
124 | # https://nextjs.org/blog/next-9-1#public-directory-support
125 |
126 | # public
127 |
128 | # vuepress build output
129 |
130 | .vuepress/dist
131 |
132 | # vuepress v2.x temp and cache directory
133 |
134 | .temp
135 | .cache
136 |
137 | # Docusaurus cache and generated files
138 |
139 | .docusaurus
140 |
141 | # Serverless directories
142 |
143 | .serverless/
144 |
145 | # FuseBox cache
146 |
147 | .fusebox/
148 |
149 | # DynamoDB Local files
150 |
151 | .dynamodb/
152 |
153 | # TernJS port file
154 |
155 | .tern-port
156 |
157 | # Stores VSCode versions used for testing VSCode extensions
158 |
159 | .vscode-test
160 |
161 | # yarn v2
162 |
163 | .yarn/cache
164 | .yarn/unplugged
165 | .yarn/build-state.yml
166 | .yarn/install-state.gz
167 | .pnp.\*
168 |
169 | # wrangler project
170 |
171 | .dev.vars
172 | .wrangler/
173 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "printWidth": 140,
3 | "singleQuote": true,
4 | "semi": true,
5 | "useTabs": true
6 | }
7 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2023 Bramus Van Damme - https://www.bram.us/
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is furnished
8 | to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in all
11 | copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # RSS Feeds for web.dev (Cloudflare Worker)
2 |
3 | This repo contains a Cloudflare Worker that generates RSS Feeds for the various types of Dynamic Content that [https://web.dev/](https://web.dev/) has. The worker parses the [raw data](#raw-data-feeds) and transforms them to [RSS 2.0](https://www.rssboard.org/rss-specification).
4 |
5 | ## Live Endpoints
6 |
7 | - Blog: ~~https://web-dev-rss.bramus.workers.dev/blog~~ _(redirects to the official https://web.dev/blog/feed.xml)_
8 | - Articles: ~~https://web-dev-rss.bramus.workers.dev/articles~~ _(redirects to the official https://web.dev/articles/feed.xml)_
9 | - Case Studies: https://web-dev-rss.bramus.workers.dev/case-studies
10 |
11 | ## Dev
12 |
13 | - `npm i`
14 | - `npm run dev`
15 | - Now go visit http://localhost:8787/
16 |
17 | ## Deploy
18 |
19 | - `npm run deploy`
20 | - Now go visit https://web-dev-rss.bramus.workers.dev/
21 |
22 | ## Raw Data Feeds
23 |
24 | ### Blog
25 |
26 | ```bash
27 | curl 'https://web.dev/_d/dynamic_content' \
28 | -H 'accept: */*' \
29 | -H 'accept-language: en-US,en;q=0.9,nl;q=0.8,fr;q=0.7' \
30 | -H 'content-type: text/plain;charset=UTF-8' \
31 | --data-raw '[null,null,null,"type:blog",null,null,null,null,10,null,null,null,2]' \
32 | --compressed
33 | ```
34 |
35 | ### Articles
36 |
37 | ```bash
38 | curl 'https://web.dev/_d/dynamic_content' \
39 | -H 'accept: */*' \
40 | -H 'accept-language: en-US,en;q=0.9,nl;q=0.8,fr;q=0.7' \
41 | -H 'content-type: text/plain;charset=UTF-8' \
42 | --data-raw '[null,null,null,"family_url:/articles",null,null,null,null,10,null,null,null,2]' \
43 | --compressed
44 | ```
45 |
46 | ### Case Studies
47 |
48 | ```bash
49 | curl 'https://web.dev/_d/dynamic_content' \
50 | -H 'accept: */*' \
51 | -H 'accept-language: en-US,en;q=0.9,nl;q=0.8,fr;q=0.7' \
52 | -H 'content-type: text/plain;charset=UTF-8' \
53 | --data-raw '[null,null,null,"keyword:casestudy",null,null,null,null,10,null,null,null,2]' \
54 | --compressed
55 | ```
56 |
57 | ## License
58 |
59 | This project is released under the MIT public license. See the enclosed `LICENSE` for details.
60 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "web-dev-rss",
3 | "version": "1.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "web-dev-rss",
9 | "version": "1.0.0",
10 | "devDependencies": {
11 | "itty-router": "^3.0.12",
12 | "wrangler": "^3.0.0"
13 | }
14 | },
15 | "node_modules/@cloudflare/kv-asset-handler": {
16 | "version": "0.2.0",
17 | "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.2.0.tgz",
18 | "integrity": "sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==",
19 | "dev": true,
20 | "dependencies": {
21 | "mime": "^3.0.0"
22 | }
23 | },
24 | "node_modules/@cloudflare/workerd-darwin-64": {
25 | "version": "1.20231010.0",
26 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20231010.0.tgz",
27 | "integrity": "sha512-LM9ePAh88EGoQkYisAfdLMEDzcaMinRer0mY11GOiN4A9ZU+6APRVvhh5JBRzI0F6Dkb8nHtrzhisioWCRaY1w==",
28 | "cpu": [
29 | "x64"
30 | ],
31 | "dev": true,
32 | "optional": true,
33 | "os": [
34 | "darwin"
35 | ],
36 | "engines": {
37 | "node": ">=16"
38 | }
39 | },
40 | "node_modules/@cloudflare/workerd-darwin-arm64": {
41 | "version": "1.20231010.0",
42 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20231010.0.tgz",
43 | "integrity": "sha512-Vr7Z1O+vJRCnVeWaF0YSv0EMHiMRY7yYCxr7O509FzvJAXsZuXZ7DYC5TAD7a8HSeeqsxFTAbF9jg0y9A2wKVw==",
44 | "cpu": [
45 | "arm64"
46 | ],
47 | "dev": true,
48 | "optional": true,
49 | "os": [
50 | "darwin"
51 | ],
52 | "engines": {
53 | "node": ">=16"
54 | }
55 | },
56 | "node_modules/@cloudflare/workerd-linux-64": {
57 | "version": "1.20231010.0",
58 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20231010.0.tgz",
59 | "integrity": "sha512-l9oDVPVhPEOHr1JpcGnLSsIf1h8sZnvcIC2Tl1zt+3p/KGFyGqGyAZJMLUoMJ54Q07oRE1x3KAu+JcWWEvdxpg==",
60 | "cpu": [
61 | "x64"
62 | ],
63 | "dev": true,
64 | "optional": true,
65 | "os": [
66 | "linux"
67 | ],
68 | "engines": {
69 | "node": ">=16"
70 | }
71 | },
72 | "node_modules/@cloudflare/workerd-linux-arm64": {
73 | "version": "1.20231010.0",
74 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20231010.0.tgz",
75 | "integrity": "sha512-NBmYsJu+ns2W8WHcDnglfqLV5O3FP7lXpoTSTvpM64mhexmemdMlOJX5gpRuarTula3fA+GzEehinUojwM9/1g==",
76 | "cpu": [
77 | "arm64"
78 | ],
79 | "dev": true,
80 | "optional": true,
81 | "os": [
82 | "linux"
83 | ],
84 | "engines": {
85 | "node": ">=16"
86 | }
87 | },
88 | "node_modules/@cloudflare/workerd-windows-64": {
89 | "version": "1.20231010.0",
90 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20231010.0.tgz",
91 | "integrity": "sha512-jWiG71Rvuh4FYdEpOP1+BAygdguTlMYYy+v5d4ZOjxDkl+V8aR86EEtDQrv/QLUJFbpcoEX25SxXnN5UMKtjhQ==",
92 | "cpu": [
93 | "x64"
94 | ],
95 | "dev": true,
96 | "optional": true,
97 | "os": [
98 | "win32"
99 | ],
100 | "engines": {
101 | "node": ">=16"
102 | }
103 | },
104 | "node_modules/@esbuild-plugins/node-globals-polyfill": {
105 | "version": "0.2.3",
106 | "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz",
107 | "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==",
108 | "dev": true,
109 | "peerDependencies": {
110 | "esbuild": "*"
111 | }
112 | },
113 | "node_modules/@esbuild-plugins/node-modules-polyfill": {
114 | "version": "0.2.2",
115 | "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz",
116 | "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==",
117 | "dev": true,
118 | "dependencies": {
119 | "escape-string-regexp": "^4.0.0",
120 | "rollup-plugin-node-polyfills": "^0.2.1"
121 | },
122 | "peerDependencies": {
123 | "esbuild": "*"
124 | }
125 | },
126 | "node_modules/@esbuild/android-arm": {
127 | "version": "0.17.19",
128 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz",
129 | "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==",
130 | "cpu": [
131 | "arm"
132 | ],
133 | "dev": true,
134 | "optional": true,
135 | "os": [
136 | "android"
137 | ],
138 | "engines": {
139 | "node": ">=12"
140 | }
141 | },
142 | "node_modules/@esbuild/android-arm64": {
143 | "version": "0.17.19",
144 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz",
145 | "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==",
146 | "cpu": [
147 | "arm64"
148 | ],
149 | "dev": true,
150 | "optional": true,
151 | "os": [
152 | "android"
153 | ],
154 | "engines": {
155 | "node": ">=12"
156 | }
157 | },
158 | "node_modules/@esbuild/android-x64": {
159 | "version": "0.17.19",
160 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz",
161 | "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==",
162 | "cpu": [
163 | "x64"
164 | ],
165 | "dev": true,
166 | "optional": true,
167 | "os": [
168 | "android"
169 | ],
170 | "engines": {
171 | "node": ">=12"
172 | }
173 | },
174 | "node_modules/@esbuild/darwin-arm64": {
175 | "version": "0.17.19",
176 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz",
177 | "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==",
178 | "cpu": [
179 | "arm64"
180 | ],
181 | "dev": true,
182 | "optional": true,
183 | "os": [
184 | "darwin"
185 | ],
186 | "engines": {
187 | "node": ">=12"
188 | }
189 | },
190 | "node_modules/@esbuild/darwin-x64": {
191 | "version": "0.17.19",
192 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz",
193 | "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==",
194 | "cpu": [
195 | "x64"
196 | ],
197 | "dev": true,
198 | "optional": true,
199 | "os": [
200 | "darwin"
201 | ],
202 | "engines": {
203 | "node": ">=12"
204 | }
205 | },
206 | "node_modules/@esbuild/freebsd-arm64": {
207 | "version": "0.17.19",
208 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz",
209 | "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==",
210 | "cpu": [
211 | "arm64"
212 | ],
213 | "dev": true,
214 | "optional": true,
215 | "os": [
216 | "freebsd"
217 | ],
218 | "engines": {
219 | "node": ">=12"
220 | }
221 | },
222 | "node_modules/@esbuild/freebsd-x64": {
223 | "version": "0.17.19",
224 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz",
225 | "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==",
226 | "cpu": [
227 | "x64"
228 | ],
229 | "dev": true,
230 | "optional": true,
231 | "os": [
232 | "freebsd"
233 | ],
234 | "engines": {
235 | "node": ">=12"
236 | }
237 | },
238 | "node_modules/@esbuild/linux-arm": {
239 | "version": "0.17.19",
240 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz",
241 | "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==",
242 | "cpu": [
243 | "arm"
244 | ],
245 | "dev": true,
246 | "optional": true,
247 | "os": [
248 | "linux"
249 | ],
250 | "engines": {
251 | "node": ">=12"
252 | }
253 | },
254 | "node_modules/@esbuild/linux-arm64": {
255 | "version": "0.17.19",
256 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz",
257 | "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==",
258 | "cpu": [
259 | "arm64"
260 | ],
261 | "dev": true,
262 | "optional": true,
263 | "os": [
264 | "linux"
265 | ],
266 | "engines": {
267 | "node": ">=12"
268 | }
269 | },
270 | "node_modules/@esbuild/linux-ia32": {
271 | "version": "0.17.19",
272 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz",
273 | "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==",
274 | "cpu": [
275 | "ia32"
276 | ],
277 | "dev": true,
278 | "optional": true,
279 | "os": [
280 | "linux"
281 | ],
282 | "engines": {
283 | "node": ">=12"
284 | }
285 | },
286 | "node_modules/@esbuild/linux-loong64": {
287 | "version": "0.17.19",
288 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz",
289 | "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==",
290 | "cpu": [
291 | "loong64"
292 | ],
293 | "dev": true,
294 | "optional": true,
295 | "os": [
296 | "linux"
297 | ],
298 | "engines": {
299 | "node": ">=12"
300 | }
301 | },
302 | "node_modules/@esbuild/linux-mips64el": {
303 | "version": "0.17.19",
304 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz",
305 | "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==",
306 | "cpu": [
307 | "mips64el"
308 | ],
309 | "dev": true,
310 | "optional": true,
311 | "os": [
312 | "linux"
313 | ],
314 | "engines": {
315 | "node": ">=12"
316 | }
317 | },
318 | "node_modules/@esbuild/linux-ppc64": {
319 | "version": "0.17.19",
320 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz",
321 | "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==",
322 | "cpu": [
323 | "ppc64"
324 | ],
325 | "dev": true,
326 | "optional": true,
327 | "os": [
328 | "linux"
329 | ],
330 | "engines": {
331 | "node": ">=12"
332 | }
333 | },
334 | "node_modules/@esbuild/linux-riscv64": {
335 | "version": "0.17.19",
336 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz",
337 | "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==",
338 | "cpu": [
339 | "riscv64"
340 | ],
341 | "dev": true,
342 | "optional": true,
343 | "os": [
344 | "linux"
345 | ],
346 | "engines": {
347 | "node": ">=12"
348 | }
349 | },
350 | "node_modules/@esbuild/linux-s390x": {
351 | "version": "0.17.19",
352 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz",
353 | "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==",
354 | "cpu": [
355 | "s390x"
356 | ],
357 | "dev": true,
358 | "optional": true,
359 | "os": [
360 | "linux"
361 | ],
362 | "engines": {
363 | "node": ">=12"
364 | }
365 | },
366 | "node_modules/@esbuild/linux-x64": {
367 | "version": "0.17.19",
368 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz",
369 | "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==",
370 | "cpu": [
371 | "x64"
372 | ],
373 | "dev": true,
374 | "optional": true,
375 | "os": [
376 | "linux"
377 | ],
378 | "engines": {
379 | "node": ">=12"
380 | }
381 | },
382 | "node_modules/@esbuild/netbsd-x64": {
383 | "version": "0.17.19",
384 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz",
385 | "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==",
386 | "cpu": [
387 | "x64"
388 | ],
389 | "dev": true,
390 | "optional": true,
391 | "os": [
392 | "netbsd"
393 | ],
394 | "engines": {
395 | "node": ">=12"
396 | }
397 | },
398 | "node_modules/@esbuild/openbsd-x64": {
399 | "version": "0.17.19",
400 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz",
401 | "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==",
402 | "cpu": [
403 | "x64"
404 | ],
405 | "dev": true,
406 | "optional": true,
407 | "os": [
408 | "openbsd"
409 | ],
410 | "engines": {
411 | "node": ">=12"
412 | }
413 | },
414 | "node_modules/@esbuild/sunos-x64": {
415 | "version": "0.17.19",
416 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz",
417 | "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==",
418 | "cpu": [
419 | "x64"
420 | ],
421 | "dev": true,
422 | "optional": true,
423 | "os": [
424 | "sunos"
425 | ],
426 | "engines": {
427 | "node": ">=12"
428 | }
429 | },
430 | "node_modules/@esbuild/win32-arm64": {
431 | "version": "0.17.19",
432 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz",
433 | "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==",
434 | "cpu": [
435 | "arm64"
436 | ],
437 | "dev": true,
438 | "optional": true,
439 | "os": [
440 | "win32"
441 | ],
442 | "engines": {
443 | "node": ">=12"
444 | }
445 | },
446 | "node_modules/@esbuild/win32-ia32": {
447 | "version": "0.17.19",
448 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz",
449 | "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==",
450 | "cpu": [
451 | "ia32"
452 | ],
453 | "dev": true,
454 | "optional": true,
455 | "os": [
456 | "win32"
457 | ],
458 | "engines": {
459 | "node": ">=12"
460 | }
461 | },
462 | "node_modules/@esbuild/win32-x64": {
463 | "version": "0.17.19",
464 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz",
465 | "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==",
466 | "cpu": [
467 | "x64"
468 | ],
469 | "dev": true,
470 | "optional": true,
471 | "os": [
472 | "win32"
473 | ],
474 | "engines": {
475 | "node": ">=12"
476 | }
477 | },
478 | "node_modules/@fastify/busboy": {
479 | "version": "2.0.0",
480 | "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz",
481 | "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==",
482 | "dev": true,
483 | "engines": {
484 | "node": ">=14"
485 | }
486 | },
487 | "node_modules/acorn": {
488 | "version": "8.10.0",
489 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
490 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
491 | "dev": true,
492 | "bin": {
493 | "acorn": "bin/acorn"
494 | },
495 | "engines": {
496 | "node": ">=0.4.0"
497 | }
498 | },
499 | "node_modules/acorn-walk": {
500 | "version": "8.2.0",
501 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
502 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
503 | "dev": true,
504 | "engines": {
505 | "node": ">=0.4.0"
506 | }
507 | },
508 | "node_modules/anymatch": {
509 | "version": "3.1.3",
510 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
511 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
512 | "dev": true,
513 | "dependencies": {
514 | "normalize-path": "^3.0.0",
515 | "picomatch": "^2.0.4"
516 | },
517 | "engines": {
518 | "node": ">= 8"
519 | }
520 | },
521 | "node_modules/as-table": {
522 | "version": "1.0.55",
523 | "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz",
524 | "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==",
525 | "dev": true,
526 | "dependencies": {
527 | "printable-characters": "^1.0.42"
528 | }
529 | },
530 | "node_modules/binary-extensions": {
531 | "version": "2.2.0",
532 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
533 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
534 | "dev": true,
535 | "engines": {
536 | "node": ">=8"
537 | }
538 | },
539 | "node_modules/blake3-wasm": {
540 | "version": "2.1.5",
541 | "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz",
542 | "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==",
543 | "dev": true
544 | },
545 | "node_modules/braces": {
546 | "version": "3.0.2",
547 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
548 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
549 | "dev": true,
550 | "dependencies": {
551 | "fill-range": "^7.0.1"
552 | },
553 | "engines": {
554 | "node": ">=8"
555 | }
556 | },
557 | "node_modules/buffer-from": {
558 | "version": "1.1.2",
559 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
560 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
561 | "dev": true
562 | },
563 | "node_modules/capnp-ts": {
564 | "version": "0.7.0",
565 | "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz",
566 | "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==",
567 | "dev": true,
568 | "dependencies": {
569 | "debug": "^4.3.1",
570 | "tslib": "^2.2.0"
571 | }
572 | },
573 | "node_modules/chokidar": {
574 | "version": "3.5.3",
575 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
576 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
577 | "dev": true,
578 | "funding": [
579 | {
580 | "type": "individual",
581 | "url": "https://paulmillr.com/funding/"
582 | }
583 | ],
584 | "dependencies": {
585 | "anymatch": "~3.1.2",
586 | "braces": "~3.0.2",
587 | "glob-parent": "~5.1.2",
588 | "is-binary-path": "~2.1.0",
589 | "is-glob": "~4.0.1",
590 | "normalize-path": "~3.0.0",
591 | "readdirp": "~3.6.0"
592 | },
593 | "engines": {
594 | "node": ">= 8.10.0"
595 | },
596 | "optionalDependencies": {
597 | "fsevents": "~2.3.2"
598 | }
599 | },
600 | "node_modules/cookie": {
601 | "version": "0.5.0",
602 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
603 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
604 | "dev": true,
605 | "engines": {
606 | "node": ">= 0.6"
607 | }
608 | },
609 | "node_modules/data-uri-to-buffer": {
610 | "version": "2.0.2",
611 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz",
612 | "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==",
613 | "dev": true
614 | },
615 | "node_modules/debug": {
616 | "version": "4.3.4",
617 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
618 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
619 | "dev": true,
620 | "dependencies": {
621 | "ms": "2.1.2"
622 | },
623 | "engines": {
624 | "node": ">=6.0"
625 | },
626 | "peerDependenciesMeta": {
627 | "supports-color": {
628 | "optional": true
629 | }
630 | }
631 | },
632 | "node_modules/esbuild": {
633 | "version": "0.17.19",
634 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz",
635 | "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==",
636 | "dev": true,
637 | "hasInstallScript": true,
638 | "bin": {
639 | "esbuild": "bin/esbuild"
640 | },
641 | "engines": {
642 | "node": ">=12"
643 | },
644 | "optionalDependencies": {
645 | "@esbuild/android-arm": "0.17.19",
646 | "@esbuild/android-arm64": "0.17.19",
647 | "@esbuild/android-x64": "0.17.19",
648 | "@esbuild/darwin-arm64": "0.17.19",
649 | "@esbuild/darwin-x64": "0.17.19",
650 | "@esbuild/freebsd-arm64": "0.17.19",
651 | "@esbuild/freebsd-x64": "0.17.19",
652 | "@esbuild/linux-arm": "0.17.19",
653 | "@esbuild/linux-arm64": "0.17.19",
654 | "@esbuild/linux-ia32": "0.17.19",
655 | "@esbuild/linux-loong64": "0.17.19",
656 | "@esbuild/linux-mips64el": "0.17.19",
657 | "@esbuild/linux-ppc64": "0.17.19",
658 | "@esbuild/linux-riscv64": "0.17.19",
659 | "@esbuild/linux-s390x": "0.17.19",
660 | "@esbuild/linux-x64": "0.17.19",
661 | "@esbuild/netbsd-x64": "0.17.19",
662 | "@esbuild/openbsd-x64": "0.17.19",
663 | "@esbuild/sunos-x64": "0.17.19",
664 | "@esbuild/win32-arm64": "0.17.19",
665 | "@esbuild/win32-ia32": "0.17.19",
666 | "@esbuild/win32-x64": "0.17.19"
667 | }
668 | },
669 | "node_modules/escape-string-regexp": {
670 | "version": "4.0.0",
671 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
672 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
673 | "dev": true,
674 | "engines": {
675 | "node": ">=10"
676 | },
677 | "funding": {
678 | "url": "https://github.com/sponsors/sindresorhus"
679 | }
680 | },
681 | "node_modules/estree-walker": {
682 | "version": "0.6.1",
683 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
684 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
685 | "dev": true
686 | },
687 | "node_modules/exit-hook": {
688 | "version": "2.2.1",
689 | "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz",
690 | "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==",
691 | "dev": true,
692 | "engines": {
693 | "node": ">=6"
694 | },
695 | "funding": {
696 | "url": "https://github.com/sponsors/sindresorhus"
697 | }
698 | },
699 | "node_modules/fill-range": {
700 | "version": "7.0.1",
701 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
702 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
703 | "dev": true,
704 | "dependencies": {
705 | "to-regex-range": "^5.0.1"
706 | },
707 | "engines": {
708 | "node": ">=8"
709 | }
710 | },
711 | "node_modules/fsevents": {
712 | "version": "2.3.3",
713 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
714 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
715 | "dev": true,
716 | "hasInstallScript": true,
717 | "optional": true,
718 | "os": [
719 | "darwin"
720 | ],
721 | "engines": {
722 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
723 | }
724 | },
725 | "node_modules/get-source": {
726 | "version": "2.0.12",
727 | "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz",
728 | "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==",
729 | "dev": true,
730 | "dependencies": {
731 | "data-uri-to-buffer": "^2.0.0",
732 | "source-map": "^0.6.1"
733 | }
734 | },
735 | "node_modules/glob-parent": {
736 | "version": "5.1.2",
737 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
738 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
739 | "dev": true,
740 | "dependencies": {
741 | "is-glob": "^4.0.1"
742 | },
743 | "engines": {
744 | "node": ">= 6"
745 | }
746 | },
747 | "node_modules/glob-to-regexp": {
748 | "version": "0.4.1",
749 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
750 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
751 | "dev": true
752 | },
753 | "node_modules/is-binary-path": {
754 | "version": "2.1.0",
755 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
756 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
757 | "dev": true,
758 | "dependencies": {
759 | "binary-extensions": "^2.0.0"
760 | },
761 | "engines": {
762 | "node": ">=8"
763 | }
764 | },
765 | "node_modules/is-extglob": {
766 | "version": "2.1.1",
767 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
768 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
769 | "dev": true,
770 | "engines": {
771 | "node": ">=0.10.0"
772 | }
773 | },
774 | "node_modules/is-glob": {
775 | "version": "4.0.3",
776 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
777 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
778 | "dev": true,
779 | "dependencies": {
780 | "is-extglob": "^2.1.1"
781 | },
782 | "engines": {
783 | "node": ">=0.10.0"
784 | }
785 | },
786 | "node_modules/is-number": {
787 | "version": "7.0.0",
788 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
789 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
790 | "dev": true,
791 | "engines": {
792 | "node": ">=0.12.0"
793 | }
794 | },
795 | "node_modules/itty-router": {
796 | "version": "3.0.12",
797 | "resolved": "https://registry.npmjs.org/itty-router/-/itty-router-3.0.12.tgz",
798 | "integrity": "sha512-s98XTPhle6GGbaFf0kYrOD3Q8gyhnqvOqkwYijC3AmkceNKqWUp13YHg6dWmqmVv4pP7l7c94XI92I0EXVGO0w==",
799 | "dev": true
800 | },
801 | "node_modules/magic-string": {
802 | "version": "0.25.9",
803 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
804 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
805 | "dev": true,
806 | "dependencies": {
807 | "sourcemap-codec": "^1.4.8"
808 | }
809 | },
810 | "node_modules/mime": {
811 | "version": "3.0.0",
812 | "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
813 | "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
814 | "dev": true,
815 | "bin": {
816 | "mime": "cli.js"
817 | },
818 | "engines": {
819 | "node": ">=10.0.0"
820 | }
821 | },
822 | "node_modules/miniflare": {
823 | "version": "3.20231010.0",
824 | "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20231010.0.tgz",
825 | "integrity": "sha512-VETY+/OhJ1RN+yrFpPUqBZysb2R8wXvyx3vzaRZS2qO1aGNKeGASa/vxCvNcBF+gt8UdbWMOalSXX8zY0IgWZA==",
826 | "dev": true,
827 | "dependencies": {
828 | "acorn": "^8.8.0",
829 | "acorn-walk": "^8.2.0",
830 | "capnp-ts": "^0.7.0",
831 | "exit-hook": "^2.2.1",
832 | "glob-to-regexp": "^0.4.1",
833 | "source-map-support": "0.5.21",
834 | "stoppable": "^1.1.0",
835 | "undici": "^5.22.1",
836 | "workerd": "1.20231010.0",
837 | "ws": "^8.11.0",
838 | "youch": "^3.2.2",
839 | "zod": "^3.20.6"
840 | },
841 | "engines": {
842 | "node": ">=16.13"
843 | }
844 | },
845 | "node_modules/ms": {
846 | "version": "2.1.2",
847 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
848 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
849 | "dev": true
850 | },
851 | "node_modules/mustache": {
852 | "version": "4.2.0",
853 | "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
854 | "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
855 | "dev": true,
856 | "bin": {
857 | "mustache": "bin/mustache"
858 | }
859 | },
860 | "node_modules/nanoid": {
861 | "version": "3.3.6",
862 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
863 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
864 | "dev": true,
865 | "funding": [
866 | {
867 | "type": "github",
868 | "url": "https://github.com/sponsors/ai"
869 | }
870 | ],
871 | "bin": {
872 | "nanoid": "bin/nanoid.cjs"
873 | },
874 | "engines": {
875 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
876 | }
877 | },
878 | "node_modules/node-forge": {
879 | "version": "1.3.1",
880 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
881 | "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
882 | "dev": true,
883 | "engines": {
884 | "node": ">= 6.13.0"
885 | }
886 | },
887 | "node_modules/normalize-path": {
888 | "version": "3.0.0",
889 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
890 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
891 | "dev": true,
892 | "engines": {
893 | "node": ">=0.10.0"
894 | }
895 | },
896 | "node_modules/path-to-regexp": {
897 | "version": "6.2.1",
898 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz",
899 | "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==",
900 | "dev": true
901 | },
902 | "node_modules/picomatch": {
903 | "version": "2.3.1",
904 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
905 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
906 | "dev": true,
907 | "engines": {
908 | "node": ">=8.6"
909 | },
910 | "funding": {
911 | "url": "https://github.com/sponsors/jonschlinkert"
912 | }
913 | },
914 | "node_modules/printable-characters": {
915 | "version": "1.0.42",
916 | "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz",
917 | "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==",
918 | "dev": true
919 | },
920 | "node_modules/readdirp": {
921 | "version": "3.6.0",
922 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
923 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
924 | "dev": true,
925 | "dependencies": {
926 | "picomatch": "^2.2.1"
927 | },
928 | "engines": {
929 | "node": ">=8.10.0"
930 | }
931 | },
932 | "node_modules/rollup-plugin-inject": {
933 | "version": "3.0.2",
934 | "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz",
935 | "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==",
936 | "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.",
937 | "dev": true,
938 | "dependencies": {
939 | "estree-walker": "^0.6.1",
940 | "magic-string": "^0.25.3",
941 | "rollup-pluginutils": "^2.8.1"
942 | }
943 | },
944 | "node_modules/rollup-plugin-node-polyfills": {
945 | "version": "0.2.1",
946 | "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz",
947 | "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==",
948 | "dev": true,
949 | "dependencies": {
950 | "rollup-plugin-inject": "^3.0.0"
951 | }
952 | },
953 | "node_modules/rollup-pluginutils": {
954 | "version": "2.8.2",
955 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
956 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==",
957 | "dev": true,
958 | "dependencies": {
959 | "estree-walker": "^0.6.1"
960 | }
961 | },
962 | "node_modules/selfsigned": {
963 | "version": "2.1.1",
964 | "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz",
965 | "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==",
966 | "dev": true,
967 | "dependencies": {
968 | "node-forge": "^1"
969 | },
970 | "engines": {
971 | "node": ">=10"
972 | }
973 | },
974 | "node_modules/source-map": {
975 | "version": "0.6.1",
976 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
977 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
978 | "dev": true,
979 | "engines": {
980 | "node": ">=0.10.0"
981 | }
982 | },
983 | "node_modules/source-map-support": {
984 | "version": "0.5.21",
985 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
986 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
987 | "dev": true,
988 | "dependencies": {
989 | "buffer-from": "^1.0.0",
990 | "source-map": "^0.6.0"
991 | }
992 | },
993 | "node_modules/sourcemap-codec": {
994 | "version": "1.4.8",
995 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
996 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
997 | "deprecated": "Please use @jridgewell/sourcemap-codec instead",
998 | "dev": true
999 | },
1000 | "node_modules/stacktracey": {
1001 | "version": "2.1.8",
1002 | "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz",
1003 | "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==",
1004 | "dev": true,
1005 | "dependencies": {
1006 | "as-table": "^1.0.36",
1007 | "get-source": "^2.0.12"
1008 | }
1009 | },
1010 | "node_modules/stoppable": {
1011 | "version": "1.1.0",
1012 | "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
1013 | "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==",
1014 | "dev": true,
1015 | "engines": {
1016 | "node": ">=4",
1017 | "npm": ">=6"
1018 | }
1019 | },
1020 | "node_modules/to-regex-range": {
1021 | "version": "5.0.1",
1022 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1023 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1024 | "dev": true,
1025 | "dependencies": {
1026 | "is-number": "^7.0.0"
1027 | },
1028 | "engines": {
1029 | "node": ">=8.0"
1030 | }
1031 | },
1032 | "node_modules/tslib": {
1033 | "version": "2.6.2",
1034 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
1035 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
1036 | "dev": true
1037 | },
1038 | "node_modules/undici": {
1039 | "version": "5.26.3",
1040 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.3.tgz",
1041 | "integrity": "sha512-H7n2zmKEWgOllKkIUkLvFmsJQj062lSm3uA4EYApG8gLuiOM0/go9bIoC3HVaSnfg4xunowDE2i9p8drkXuvDw==",
1042 | "dev": true,
1043 | "dependencies": {
1044 | "@fastify/busboy": "^2.0.0"
1045 | },
1046 | "engines": {
1047 | "node": ">=14.0"
1048 | }
1049 | },
1050 | "node_modules/workerd": {
1051 | "version": "1.20231010.0",
1052 | "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20231010.0.tgz",
1053 | "integrity": "sha512-ghxfBU8fBSBDa8fCBPfzWivYsWpewYftgy70N308C+acQ5AaKNM1QTdkQNm9YWeC5Jpl1YvBX04ojt7lCc3juw==",
1054 | "dev": true,
1055 | "hasInstallScript": true,
1056 | "bin": {
1057 | "workerd": "bin/workerd"
1058 | },
1059 | "engines": {
1060 | "node": ">=16"
1061 | },
1062 | "optionalDependencies": {
1063 | "@cloudflare/workerd-darwin-64": "1.20231010.0",
1064 | "@cloudflare/workerd-darwin-arm64": "1.20231010.0",
1065 | "@cloudflare/workerd-linux-64": "1.20231010.0",
1066 | "@cloudflare/workerd-linux-arm64": "1.20231010.0",
1067 | "@cloudflare/workerd-windows-64": "1.20231010.0"
1068 | }
1069 | },
1070 | "node_modules/wrangler": {
1071 | "version": "3.13.1",
1072 | "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.13.1.tgz",
1073 | "integrity": "sha512-CY73h4lfPx/3CmkC/tPj66DRRZ9Y42sMcHys6B6tjCILUo950IeOvnsj759el3/ewFLY4kG4jCrrrikan6TE+Q==",
1074 | "dev": true,
1075 | "dependencies": {
1076 | "@cloudflare/kv-asset-handler": "^0.2.0",
1077 | "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
1078 | "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
1079 | "blake3-wasm": "^2.1.5",
1080 | "chokidar": "^3.5.3",
1081 | "esbuild": "0.17.19",
1082 | "miniflare": "3.20231010.0",
1083 | "nanoid": "^3.3.3",
1084 | "path-to-regexp": "^6.2.0",
1085 | "selfsigned": "^2.0.1",
1086 | "source-map": "0.6.1",
1087 | "source-map-support": "0.5.21",
1088 | "xxhash-wasm": "^1.0.1"
1089 | },
1090 | "bin": {
1091 | "wrangler": "bin/wrangler.js",
1092 | "wrangler2": "bin/wrangler.js"
1093 | },
1094 | "engines": {
1095 | "node": ">=16.13.0"
1096 | },
1097 | "optionalDependencies": {
1098 | "fsevents": "~2.3.2"
1099 | }
1100 | },
1101 | "node_modules/ws": {
1102 | "version": "8.14.2",
1103 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz",
1104 | "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==",
1105 | "dev": true,
1106 | "engines": {
1107 | "node": ">=10.0.0"
1108 | },
1109 | "peerDependencies": {
1110 | "bufferutil": "^4.0.1",
1111 | "utf-8-validate": ">=5.0.2"
1112 | },
1113 | "peerDependenciesMeta": {
1114 | "bufferutil": {
1115 | "optional": true
1116 | },
1117 | "utf-8-validate": {
1118 | "optional": true
1119 | }
1120 | }
1121 | },
1122 | "node_modules/xxhash-wasm": {
1123 | "version": "1.0.2",
1124 | "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz",
1125 | "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==",
1126 | "dev": true
1127 | },
1128 | "node_modules/youch": {
1129 | "version": "3.3.2",
1130 | "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.2.tgz",
1131 | "integrity": "sha512-9cwz/z7abtcHOIuH45nzmUFCZbyJA1nLqlirKvyNRx4wDMhqsBaifAJzBej7L4fsVPjFxYq3NK3GAcfvZsydFw==",
1132 | "dev": true,
1133 | "dependencies": {
1134 | "cookie": "^0.5.0",
1135 | "mustache": "^4.2.0",
1136 | "stacktracey": "^2.1.8"
1137 | }
1138 | },
1139 | "node_modules/zod": {
1140 | "version": "3.22.4",
1141 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz",
1142 | "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==",
1143 | "dev": true,
1144 | "funding": {
1145 | "url": "https://github.com/sponsors/colinhacks"
1146 | }
1147 | }
1148 | },
1149 | "dependencies": {
1150 | "@cloudflare/kv-asset-handler": {
1151 | "version": "0.2.0",
1152 | "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.2.0.tgz",
1153 | "integrity": "sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==",
1154 | "dev": true,
1155 | "requires": {
1156 | "mime": "^3.0.0"
1157 | }
1158 | },
1159 | "@cloudflare/workerd-darwin-64": {
1160 | "version": "1.20231010.0",
1161 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20231010.0.tgz",
1162 | "integrity": "sha512-LM9ePAh88EGoQkYisAfdLMEDzcaMinRer0mY11GOiN4A9ZU+6APRVvhh5JBRzI0F6Dkb8nHtrzhisioWCRaY1w==",
1163 | "dev": true,
1164 | "optional": true
1165 | },
1166 | "@cloudflare/workerd-darwin-arm64": {
1167 | "version": "1.20231010.0",
1168 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20231010.0.tgz",
1169 | "integrity": "sha512-Vr7Z1O+vJRCnVeWaF0YSv0EMHiMRY7yYCxr7O509FzvJAXsZuXZ7DYC5TAD7a8HSeeqsxFTAbF9jg0y9A2wKVw==",
1170 | "dev": true,
1171 | "optional": true
1172 | },
1173 | "@cloudflare/workerd-linux-64": {
1174 | "version": "1.20231010.0",
1175 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20231010.0.tgz",
1176 | "integrity": "sha512-l9oDVPVhPEOHr1JpcGnLSsIf1h8sZnvcIC2Tl1zt+3p/KGFyGqGyAZJMLUoMJ54Q07oRE1x3KAu+JcWWEvdxpg==",
1177 | "dev": true,
1178 | "optional": true
1179 | },
1180 | "@cloudflare/workerd-linux-arm64": {
1181 | "version": "1.20231010.0",
1182 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20231010.0.tgz",
1183 | "integrity": "sha512-NBmYsJu+ns2W8WHcDnglfqLV5O3FP7lXpoTSTvpM64mhexmemdMlOJX5gpRuarTula3fA+GzEehinUojwM9/1g==",
1184 | "dev": true,
1185 | "optional": true
1186 | },
1187 | "@cloudflare/workerd-windows-64": {
1188 | "version": "1.20231010.0",
1189 | "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20231010.0.tgz",
1190 | "integrity": "sha512-jWiG71Rvuh4FYdEpOP1+BAygdguTlMYYy+v5d4ZOjxDkl+V8aR86EEtDQrv/QLUJFbpcoEX25SxXnN5UMKtjhQ==",
1191 | "dev": true,
1192 | "optional": true
1193 | },
1194 | "@esbuild-plugins/node-globals-polyfill": {
1195 | "version": "0.2.3",
1196 | "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz",
1197 | "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==",
1198 | "dev": true,
1199 | "requires": {}
1200 | },
1201 | "@esbuild-plugins/node-modules-polyfill": {
1202 | "version": "0.2.2",
1203 | "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz",
1204 | "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==",
1205 | "dev": true,
1206 | "requires": {
1207 | "escape-string-regexp": "^4.0.0",
1208 | "rollup-plugin-node-polyfills": "^0.2.1"
1209 | }
1210 | },
1211 | "@esbuild/android-arm": {
1212 | "version": "0.17.19",
1213 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz",
1214 | "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==",
1215 | "dev": true,
1216 | "optional": true
1217 | },
1218 | "@esbuild/android-arm64": {
1219 | "version": "0.17.19",
1220 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz",
1221 | "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==",
1222 | "dev": true,
1223 | "optional": true
1224 | },
1225 | "@esbuild/android-x64": {
1226 | "version": "0.17.19",
1227 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz",
1228 | "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==",
1229 | "dev": true,
1230 | "optional": true
1231 | },
1232 | "@esbuild/darwin-arm64": {
1233 | "version": "0.17.19",
1234 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz",
1235 | "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==",
1236 | "dev": true,
1237 | "optional": true
1238 | },
1239 | "@esbuild/darwin-x64": {
1240 | "version": "0.17.19",
1241 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz",
1242 | "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==",
1243 | "dev": true,
1244 | "optional": true
1245 | },
1246 | "@esbuild/freebsd-arm64": {
1247 | "version": "0.17.19",
1248 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz",
1249 | "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==",
1250 | "dev": true,
1251 | "optional": true
1252 | },
1253 | "@esbuild/freebsd-x64": {
1254 | "version": "0.17.19",
1255 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz",
1256 | "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==",
1257 | "dev": true,
1258 | "optional": true
1259 | },
1260 | "@esbuild/linux-arm": {
1261 | "version": "0.17.19",
1262 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz",
1263 | "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==",
1264 | "dev": true,
1265 | "optional": true
1266 | },
1267 | "@esbuild/linux-arm64": {
1268 | "version": "0.17.19",
1269 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz",
1270 | "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==",
1271 | "dev": true,
1272 | "optional": true
1273 | },
1274 | "@esbuild/linux-ia32": {
1275 | "version": "0.17.19",
1276 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz",
1277 | "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==",
1278 | "dev": true,
1279 | "optional": true
1280 | },
1281 | "@esbuild/linux-loong64": {
1282 | "version": "0.17.19",
1283 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz",
1284 | "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==",
1285 | "dev": true,
1286 | "optional": true
1287 | },
1288 | "@esbuild/linux-mips64el": {
1289 | "version": "0.17.19",
1290 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz",
1291 | "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==",
1292 | "dev": true,
1293 | "optional": true
1294 | },
1295 | "@esbuild/linux-ppc64": {
1296 | "version": "0.17.19",
1297 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz",
1298 | "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==",
1299 | "dev": true,
1300 | "optional": true
1301 | },
1302 | "@esbuild/linux-riscv64": {
1303 | "version": "0.17.19",
1304 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz",
1305 | "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==",
1306 | "dev": true,
1307 | "optional": true
1308 | },
1309 | "@esbuild/linux-s390x": {
1310 | "version": "0.17.19",
1311 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz",
1312 | "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==",
1313 | "dev": true,
1314 | "optional": true
1315 | },
1316 | "@esbuild/linux-x64": {
1317 | "version": "0.17.19",
1318 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz",
1319 | "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==",
1320 | "dev": true,
1321 | "optional": true
1322 | },
1323 | "@esbuild/netbsd-x64": {
1324 | "version": "0.17.19",
1325 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz",
1326 | "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==",
1327 | "dev": true,
1328 | "optional": true
1329 | },
1330 | "@esbuild/openbsd-x64": {
1331 | "version": "0.17.19",
1332 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz",
1333 | "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==",
1334 | "dev": true,
1335 | "optional": true
1336 | },
1337 | "@esbuild/sunos-x64": {
1338 | "version": "0.17.19",
1339 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz",
1340 | "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==",
1341 | "dev": true,
1342 | "optional": true
1343 | },
1344 | "@esbuild/win32-arm64": {
1345 | "version": "0.17.19",
1346 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz",
1347 | "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==",
1348 | "dev": true,
1349 | "optional": true
1350 | },
1351 | "@esbuild/win32-ia32": {
1352 | "version": "0.17.19",
1353 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz",
1354 | "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==",
1355 | "dev": true,
1356 | "optional": true
1357 | },
1358 | "@esbuild/win32-x64": {
1359 | "version": "0.17.19",
1360 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz",
1361 | "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==",
1362 | "dev": true,
1363 | "optional": true
1364 | },
1365 | "@fastify/busboy": {
1366 | "version": "2.0.0",
1367 | "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz",
1368 | "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==",
1369 | "dev": true
1370 | },
1371 | "acorn": {
1372 | "version": "8.10.0",
1373 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
1374 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
1375 | "dev": true
1376 | },
1377 | "acorn-walk": {
1378 | "version": "8.2.0",
1379 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
1380 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
1381 | "dev": true
1382 | },
1383 | "anymatch": {
1384 | "version": "3.1.3",
1385 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
1386 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
1387 | "dev": true,
1388 | "requires": {
1389 | "normalize-path": "^3.0.0",
1390 | "picomatch": "^2.0.4"
1391 | }
1392 | },
1393 | "as-table": {
1394 | "version": "1.0.55",
1395 | "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz",
1396 | "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==",
1397 | "dev": true,
1398 | "requires": {
1399 | "printable-characters": "^1.0.42"
1400 | }
1401 | },
1402 | "binary-extensions": {
1403 | "version": "2.2.0",
1404 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
1405 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
1406 | "dev": true
1407 | },
1408 | "blake3-wasm": {
1409 | "version": "2.1.5",
1410 | "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz",
1411 | "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==",
1412 | "dev": true
1413 | },
1414 | "braces": {
1415 | "version": "3.0.2",
1416 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
1417 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
1418 | "dev": true,
1419 | "requires": {
1420 | "fill-range": "^7.0.1"
1421 | }
1422 | },
1423 | "buffer-from": {
1424 | "version": "1.1.2",
1425 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
1426 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
1427 | "dev": true
1428 | },
1429 | "capnp-ts": {
1430 | "version": "0.7.0",
1431 | "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz",
1432 | "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==",
1433 | "dev": true,
1434 | "requires": {
1435 | "debug": "^4.3.1",
1436 | "tslib": "^2.2.0"
1437 | }
1438 | },
1439 | "chokidar": {
1440 | "version": "3.5.3",
1441 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
1442 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
1443 | "dev": true,
1444 | "requires": {
1445 | "anymatch": "~3.1.2",
1446 | "braces": "~3.0.2",
1447 | "fsevents": "~2.3.2",
1448 | "glob-parent": "~5.1.2",
1449 | "is-binary-path": "~2.1.0",
1450 | "is-glob": "~4.0.1",
1451 | "normalize-path": "~3.0.0",
1452 | "readdirp": "~3.6.0"
1453 | }
1454 | },
1455 | "cookie": {
1456 | "version": "0.5.0",
1457 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
1458 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
1459 | "dev": true
1460 | },
1461 | "data-uri-to-buffer": {
1462 | "version": "2.0.2",
1463 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz",
1464 | "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==",
1465 | "dev": true
1466 | },
1467 | "debug": {
1468 | "version": "4.3.4",
1469 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
1470 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
1471 | "dev": true,
1472 | "requires": {
1473 | "ms": "2.1.2"
1474 | }
1475 | },
1476 | "esbuild": {
1477 | "version": "0.17.19",
1478 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz",
1479 | "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==",
1480 | "dev": true,
1481 | "requires": {
1482 | "@esbuild/android-arm": "0.17.19",
1483 | "@esbuild/android-arm64": "0.17.19",
1484 | "@esbuild/android-x64": "0.17.19",
1485 | "@esbuild/darwin-arm64": "0.17.19",
1486 | "@esbuild/darwin-x64": "0.17.19",
1487 | "@esbuild/freebsd-arm64": "0.17.19",
1488 | "@esbuild/freebsd-x64": "0.17.19",
1489 | "@esbuild/linux-arm": "0.17.19",
1490 | "@esbuild/linux-arm64": "0.17.19",
1491 | "@esbuild/linux-ia32": "0.17.19",
1492 | "@esbuild/linux-loong64": "0.17.19",
1493 | "@esbuild/linux-mips64el": "0.17.19",
1494 | "@esbuild/linux-ppc64": "0.17.19",
1495 | "@esbuild/linux-riscv64": "0.17.19",
1496 | "@esbuild/linux-s390x": "0.17.19",
1497 | "@esbuild/linux-x64": "0.17.19",
1498 | "@esbuild/netbsd-x64": "0.17.19",
1499 | "@esbuild/openbsd-x64": "0.17.19",
1500 | "@esbuild/sunos-x64": "0.17.19",
1501 | "@esbuild/win32-arm64": "0.17.19",
1502 | "@esbuild/win32-ia32": "0.17.19",
1503 | "@esbuild/win32-x64": "0.17.19"
1504 | }
1505 | },
1506 | "escape-string-regexp": {
1507 | "version": "4.0.0",
1508 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
1509 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
1510 | "dev": true
1511 | },
1512 | "estree-walker": {
1513 | "version": "0.6.1",
1514 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
1515 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
1516 | "dev": true
1517 | },
1518 | "exit-hook": {
1519 | "version": "2.2.1",
1520 | "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz",
1521 | "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==",
1522 | "dev": true
1523 | },
1524 | "fill-range": {
1525 | "version": "7.0.1",
1526 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
1527 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
1528 | "dev": true,
1529 | "requires": {
1530 | "to-regex-range": "^5.0.1"
1531 | }
1532 | },
1533 | "fsevents": {
1534 | "version": "2.3.3",
1535 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
1536 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
1537 | "dev": true,
1538 | "optional": true
1539 | },
1540 | "get-source": {
1541 | "version": "2.0.12",
1542 | "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz",
1543 | "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==",
1544 | "dev": true,
1545 | "requires": {
1546 | "data-uri-to-buffer": "^2.0.0",
1547 | "source-map": "^0.6.1"
1548 | }
1549 | },
1550 | "glob-parent": {
1551 | "version": "5.1.2",
1552 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1553 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1554 | "dev": true,
1555 | "requires": {
1556 | "is-glob": "^4.0.1"
1557 | }
1558 | },
1559 | "glob-to-regexp": {
1560 | "version": "0.4.1",
1561 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
1562 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
1563 | "dev": true
1564 | },
1565 | "is-binary-path": {
1566 | "version": "2.1.0",
1567 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1568 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1569 | "dev": true,
1570 | "requires": {
1571 | "binary-extensions": "^2.0.0"
1572 | }
1573 | },
1574 | "is-extglob": {
1575 | "version": "2.1.1",
1576 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1577 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1578 | "dev": true
1579 | },
1580 | "is-glob": {
1581 | "version": "4.0.3",
1582 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1583 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1584 | "dev": true,
1585 | "requires": {
1586 | "is-extglob": "^2.1.1"
1587 | }
1588 | },
1589 | "is-number": {
1590 | "version": "7.0.0",
1591 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1592 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1593 | "dev": true
1594 | },
1595 | "itty-router": {
1596 | "version": "3.0.12",
1597 | "resolved": "https://registry.npmjs.org/itty-router/-/itty-router-3.0.12.tgz",
1598 | "integrity": "sha512-s98XTPhle6GGbaFf0kYrOD3Q8gyhnqvOqkwYijC3AmkceNKqWUp13YHg6dWmqmVv4pP7l7c94XI92I0EXVGO0w==",
1599 | "dev": true
1600 | },
1601 | "magic-string": {
1602 | "version": "0.25.9",
1603 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
1604 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
1605 | "dev": true,
1606 | "requires": {
1607 | "sourcemap-codec": "^1.4.8"
1608 | }
1609 | },
1610 | "mime": {
1611 | "version": "3.0.0",
1612 | "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
1613 | "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
1614 | "dev": true
1615 | },
1616 | "miniflare": {
1617 | "version": "3.20231010.0",
1618 | "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20231010.0.tgz",
1619 | "integrity": "sha512-VETY+/OhJ1RN+yrFpPUqBZysb2R8wXvyx3vzaRZS2qO1aGNKeGASa/vxCvNcBF+gt8UdbWMOalSXX8zY0IgWZA==",
1620 | "dev": true,
1621 | "requires": {
1622 | "acorn": "^8.8.0",
1623 | "acorn-walk": "^8.2.0",
1624 | "capnp-ts": "^0.7.0",
1625 | "exit-hook": "^2.2.1",
1626 | "glob-to-regexp": "^0.4.1",
1627 | "source-map-support": "0.5.21",
1628 | "stoppable": "^1.1.0",
1629 | "undici": "^5.22.1",
1630 | "workerd": "1.20231010.0",
1631 | "ws": "^8.11.0",
1632 | "youch": "^3.2.2",
1633 | "zod": "^3.20.6"
1634 | }
1635 | },
1636 | "ms": {
1637 | "version": "2.1.2",
1638 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1639 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1640 | "dev": true
1641 | },
1642 | "mustache": {
1643 | "version": "4.2.0",
1644 | "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
1645 | "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
1646 | "dev": true
1647 | },
1648 | "nanoid": {
1649 | "version": "3.3.6",
1650 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
1651 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
1652 | "dev": true
1653 | },
1654 | "node-forge": {
1655 | "version": "1.3.1",
1656 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
1657 | "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
1658 | "dev": true
1659 | },
1660 | "normalize-path": {
1661 | "version": "3.0.0",
1662 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1663 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1664 | "dev": true
1665 | },
1666 | "path-to-regexp": {
1667 | "version": "6.2.1",
1668 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz",
1669 | "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==",
1670 | "dev": true
1671 | },
1672 | "picomatch": {
1673 | "version": "2.3.1",
1674 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1675 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1676 | "dev": true
1677 | },
1678 | "printable-characters": {
1679 | "version": "1.0.42",
1680 | "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz",
1681 | "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==",
1682 | "dev": true
1683 | },
1684 | "readdirp": {
1685 | "version": "3.6.0",
1686 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
1687 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
1688 | "dev": true,
1689 | "requires": {
1690 | "picomatch": "^2.2.1"
1691 | }
1692 | },
1693 | "rollup-plugin-inject": {
1694 | "version": "3.0.2",
1695 | "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz",
1696 | "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==",
1697 | "dev": true,
1698 | "requires": {
1699 | "estree-walker": "^0.6.1",
1700 | "magic-string": "^0.25.3",
1701 | "rollup-pluginutils": "^2.8.1"
1702 | }
1703 | },
1704 | "rollup-plugin-node-polyfills": {
1705 | "version": "0.2.1",
1706 | "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz",
1707 | "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==",
1708 | "dev": true,
1709 | "requires": {
1710 | "rollup-plugin-inject": "^3.0.0"
1711 | }
1712 | },
1713 | "rollup-pluginutils": {
1714 | "version": "2.8.2",
1715 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
1716 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==",
1717 | "dev": true,
1718 | "requires": {
1719 | "estree-walker": "^0.6.1"
1720 | }
1721 | },
1722 | "selfsigned": {
1723 | "version": "2.1.1",
1724 | "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz",
1725 | "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==",
1726 | "dev": true,
1727 | "requires": {
1728 | "node-forge": "^1"
1729 | }
1730 | },
1731 | "source-map": {
1732 | "version": "0.6.1",
1733 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1734 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1735 | "dev": true
1736 | },
1737 | "source-map-support": {
1738 | "version": "0.5.21",
1739 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
1740 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
1741 | "dev": true,
1742 | "requires": {
1743 | "buffer-from": "^1.0.0",
1744 | "source-map": "^0.6.0"
1745 | }
1746 | },
1747 | "sourcemap-codec": {
1748 | "version": "1.4.8",
1749 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
1750 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
1751 | "dev": true
1752 | },
1753 | "stacktracey": {
1754 | "version": "2.1.8",
1755 | "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz",
1756 | "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==",
1757 | "dev": true,
1758 | "requires": {
1759 | "as-table": "^1.0.36",
1760 | "get-source": "^2.0.12"
1761 | }
1762 | },
1763 | "stoppable": {
1764 | "version": "1.1.0",
1765 | "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
1766 | "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==",
1767 | "dev": true
1768 | },
1769 | "to-regex-range": {
1770 | "version": "5.0.1",
1771 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1772 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1773 | "dev": true,
1774 | "requires": {
1775 | "is-number": "^7.0.0"
1776 | }
1777 | },
1778 | "tslib": {
1779 | "version": "2.6.2",
1780 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
1781 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
1782 | "dev": true
1783 | },
1784 | "undici": {
1785 | "version": "5.26.3",
1786 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.3.tgz",
1787 | "integrity": "sha512-H7n2zmKEWgOllKkIUkLvFmsJQj062lSm3uA4EYApG8gLuiOM0/go9bIoC3HVaSnfg4xunowDE2i9p8drkXuvDw==",
1788 | "dev": true,
1789 | "requires": {
1790 | "@fastify/busboy": "^2.0.0"
1791 | }
1792 | },
1793 | "workerd": {
1794 | "version": "1.20231010.0",
1795 | "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20231010.0.tgz",
1796 | "integrity": "sha512-ghxfBU8fBSBDa8fCBPfzWivYsWpewYftgy70N308C+acQ5AaKNM1QTdkQNm9YWeC5Jpl1YvBX04ojt7lCc3juw==",
1797 | "dev": true,
1798 | "requires": {
1799 | "@cloudflare/workerd-darwin-64": "1.20231010.0",
1800 | "@cloudflare/workerd-darwin-arm64": "1.20231010.0",
1801 | "@cloudflare/workerd-linux-64": "1.20231010.0",
1802 | "@cloudflare/workerd-linux-arm64": "1.20231010.0",
1803 | "@cloudflare/workerd-windows-64": "1.20231010.0"
1804 | }
1805 | },
1806 | "wrangler": {
1807 | "version": "3.13.1",
1808 | "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.13.1.tgz",
1809 | "integrity": "sha512-CY73h4lfPx/3CmkC/tPj66DRRZ9Y42sMcHys6B6tjCILUo950IeOvnsj759el3/ewFLY4kG4jCrrrikan6TE+Q==",
1810 | "dev": true,
1811 | "requires": {
1812 | "@cloudflare/kv-asset-handler": "^0.2.0",
1813 | "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
1814 | "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
1815 | "blake3-wasm": "^2.1.5",
1816 | "chokidar": "^3.5.3",
1817 | "esbuild": "0.17.19",
1818 | "fsevents": "~2.3.2",
1819 | "miniflare": "3.20231010.0",
1820 | "nanoid": "^3.3.3",
1821 | "path-to-regexp": "^6.2.0",
1822 | "selfsigned": "^2.0.1",
1823 | "source-map": "0.6.1",
1824 | "source-map-support": "0.5.21",
1825 | "xxhash-wasm": "^1.0.1"
1826 | }
1827 | },
1828 | "ws": {
1829 | "version": "8.14.2",
1830 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz",
1831 | "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==",
1832 | "dev": true,
1833 | "requires": {}
1834 | },
1835 | "xxhash-wasm": {
1836 | "version": "1.0.2",
1837 | "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz",
1838 | "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==",
1839 | "dev": true
1840 | },
1841 | "youch": {
1842 | "version": "3.3.2",
1843 | "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.2.tgz",
1844 | "integrity": "sha512-9cwz/z7abtcHOIuH45nzmUFCZbyJA1nLqlirKvyNRx4wDMhqsBaifAJzBej7L4fsVPjFxYq3NK3GAcfvZsydFw==",
1845 | "dev": true,
1846 | "requires": {
1847 | "cookie": "^0.5.0",
1848 | "mustache": "^4.2.0",
1849 | "stacktracey": "^2.1.8"
1850 | }
1851 | },
1852 | "zod": {
1853 | "version": "3.22.4",
1854 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz",
1855 | "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==",
1856 | "dev": true
1857 | }
1858 | }
1859 | }
1860 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "web-dev-rss",
3 | "version": "1.0.0",
4 | "private": true,
5 | "scripts": {
6 | "deploy": "wrangler deploy",
7 | "dev": "wrangler dev",
8 | "start": "wrangler dev"
9 | },
10 | "devDependencies": {
11 | "itty-router": "^3.0.12",
12 | "wrangler": "^3.0.0"
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/config.js:
--------------------------------------------------------------------------------
1 | const redirects = {
2 | blog: 'https://web.dev/blog/feed.xml',
3 | articles: 'https://web.dev/articles/feed.xml',
4 | };
5 |
6 | const endpoint = 'https://web.dev/_d/dynamic_content';
7 |
8 | const data = {
9 | blog: '[null,null,null,"type:blog",null,null,null,null,10,null,null,null,2]',
10 | articles: '[null,null,null,"family_url:/articles",null,null,null,null,10,null,null,null,2]',
11 | 'case-studies': '[null,null,null,"keyword:casestudy",null,null,null,null,10,null,null,null,2]',
12 | };
13 |
14 | const headers = {
15 | accept: '*/*',
16 | 'accept-language': 'en-US,en;q=0.9,nl;q=0.8,fr;q=0.7',
17 | 'content-type': 'text/plain;charset=UTF-8',
18 | };
19 |
20 | export { redirects, endpoint, data, headers };
21 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import handleRedirect from './redirect';
2 | import handleRSS from './rss';
3 |
4 | export default {
5 | async fetch(request, env, ctx) {
6 | const redirect = await handleRedirect.fetch(request);
7 | if (redirect.status != 404) return redirect;
8 |
9 | const rss = await handleRSS.fetch(request);
10 | if (rss.status != 404) return rss;
11 |
12 | return new Response('Invalid Feed', { status: 404 });
13 | },
14 | };
15 |
--------------------------------------------------------------------------------
/src/redirect.js:
--------------------------------------------------------------------------------
1 | import { redirects } from './config.js';
2 |
3 | export default {
4 | async fetch(request) {
5 | const url = new URL(request.url);
6 | const content_type = url.pathname.replace(/^\//, '').replace(/\/$/, ''); // Trim off leading and trailing /
7 |
8 | if (!Object.keys(redirects).includes(content_type)) {
9 | return new Response(null, { status: 404 });
10 | }
11 |
12 | return Response.redirect(redirects[content_type], 301);
13 | },
14 | };
15 |
--------------------------------------------------------------------------------
/src/rss.js:
--------------------------------------------------------------------------------
1 | import { data, endpoint, headers } from './config.js';
2 |
3 | const getRawDataFromOrigin = async (what) => {
4 | const feed_req = await fetch(endpoint, {
5 | headers,
6 | body: data[what],
7 | method: 'POST',
8 | });
9 |
10 | let feed_text = await feed_req.text();
11 | feed_text = feed_text.replace(")]}'\n", ''); // For some mysterious reason the API response is not valid JSON/JS but contains some gibberish at the start
12 |
13 | const raw_data = JSON.parse(feed_text);
14 |
15 | return raw_data;
16 | };
17 |
18 | const buildItem = (item) => {
19 | // @TODO: Escaping?
20 | return `-
21 | ${item.title}
22 | ${item.link.replace('?hl=en', '')}
23 | ${item.link.replace('?hl=en', '')}
24 |
25 | ${new Date(item.timestamp).toUTCString()}
26 |
`;
27 | };
28 |
29 | const buildFeed = (self_url, content_type, items) => {
30 | return `
31 |
32 |
33 | Web.dev RSS (${content_type})
34 |
35 | https://www.web.dev/
36 | ${new Date(items[0].timestamp).toUTCString()}
37 | en-US
38 | RSS Feed for web.dev content (${content_type})
39 | ${items.map((item) => buildItem(item)).join('\n')}
40 |
41 | `;
42 | };
43 |
44 | export default {
45 | async fetch(request) {
46 | const url = new URL(request.url);
47 | const content_type = url.pathname.replace(/^\//, '').replace(/\/$/, ''); // Trim off leading and trailing /
48 |
49 | if (!Object.keys(data).includes(content_type)) {
50 | return new Response(null, { status: 404 });
51 | }
52 |
53 | let raw_data = null;
54 | try {
55 | raw_data = await getRawDataFromOrigin(content_type);
56 | } catch (e) {
57 | return new Response('Could not fetch data from origin server', { status: 504 });
58 | }
59 |
60 | const items = raw_data[0].map((item) => ({
61 | title: item[0],
62 | link: item[6],
63 | author: item[17],
64 | description: item[4],
65 | timestamp: item[5][0] * 1000,
66 | }));
67 |
68 | const feed_text = buildFeed(request.url, content_type, items);
69 |
70 | const response = new Response(feed_text.trim());
71 | response.headers.set('Content-type', 'text/xml;charset=UTF-8');
72 |
73 | return response;
74 | },
75 | };
76 |
--------------------------------------------------------------------------------
/wrangler.toml:
--------------------------------------------------------------------------------
1 | name = "web-dev-rss"
2 | main = "src/index.js"
3 | compatibility_date = "2023-10-10"
4 |
5 | # Variable bindings. These are arbitrary, plaintext strings (similar to environment variables)
6 | # Note: Use secrets to store sensitive data.
7 | # Docs: https://developers.cloudflare.com/workers/platform/environment-variables
8 | # [vars]
9 | # MY_VARIABLE = "production_value"
10 |
11 | # Bind a KV Namespace. Use KV as persistent storage for small key-value pairs.
12 | # Docs: https://developers.cloudflare.com/workers/runtime-apis/kv
13 | # [[kv_namespaces]]
14 | # binding = "MY_KV_NAMESPACE"
15 | # id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
16 |
17 | # Bind an R2 Bucket. Use R2 to store arbitrarily large blobs of data, such as files.
18 | # Docs: https://developers.cloudflare.com/r2/api/workers/workers-api-usage/
19 | # [[r2_buckets]]
20 | # binding = "MY_BUCKET"
21 | # bucket_name = "my-bucket"
22 |
23 | # Bind a Queue producer. Use this binding to schedule an arbitrary task that may be processed later by a Queue consumer.
24 | # Docs: https://developers.cloudflare.com/queues/get-started
25 | # [[queues.producers]]
26 | # binding = "MY_QUEUE"
27 | # queue = "my-queue"
28 |
29 | # Bind a Queue consumer. Queue Consumers can retrieve tasks scheduled by Producers to act on them.
30 | # Docs: https://developers.cloudflare.com/queues/get-started
31 | # [[queues.consumers]]
32 | # queue = "my-queue"
33 |
34 | # Bind another Worker service. Use this binding to call another Worker without network overhead.
35 | # Docs: https://developers.cloudflare.com/workers/platform/services
36 | # [[services]]
37 | # binding = "MY_SERVICE"
38 | # service = "my-service"
39 |
40 | # Bind a Durable Object. Durable objects are a scale-to-zero compute primitive based on the actor model.
41 | # Durable Objects can live for as long as needed. Use these when you need a long-running "server", such as in realtime apps.
42 | # Docs: https://developers.cloudflare.com/workers/runtime-apis/durable-objects
43 | # [[durable_objects.bindings]]
44 | # name = "MY_DURABLE_OBJECT"
45 | # class_name = "MyDurableObject"
46 |
47 | # Durable Object migrations.
48 | # Docs: https://developers.cloudflare.com/workers/learning/using-durable-objects#configure-durable-object-classes-with-migrations
49 | # [[migrations]]
50 | # tag = "v1"
51 | # new_classes = ["MyDurableObject"]
52 |
--------------------------------------------------------------------------------