devflare 1.0.0-next.16 → 1.0.0-next.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LLM.md +688 -229
- package/README.md +70 -8
- package/bin/devflare.js +1 -1
- package/dist/{account-fw8nafav.js → account-0evqkmnc.js} +8 -8
- package/dist/{account-0w8wdzjv.js → account-0v11zbzk.js} +9 -9
- package/dist/{account-eygq6qx7.js → account-2w85efas.js} +9 -9
- package/dist/{account-pzq69nys.js → account-61gw9s7t.js} +9 -9
- package/dist/account-65sk9q34.js +475 -0
- package/dist/account-77vx7q2f.js +475 -0
- package/dist/account-7z38mgqf.js +475 -0
- package/dist/account-8wgprpbt.js +475 -0
- package/dist/account-9gt3tej1.js +475 -0
- package/dist/account-dtndtbad.js +475 -0
- package/dist/account-e95v7f4s.js +475 -0
- package/dist/account-fbyyptg7.js +475 -0
- package/dist/account-gnzhz1c9.js +475 -0
- package/dist/account-m6jq6fnp.js +475 -0
- package/dist/account-mvnfagh9.js +475 -0
- package/dist/account-p0crq2gh.js +475 -0
- package/dist/account-qkcevx7a.js +475 -0
- package/dist/account-txwqg1rx.js +475 -0
- package/dist/account-w5n5bjh2.js +475 -0
- package/dist/account-zd61t0ey.js +475 -0
- package/dist/api-11gkk043.js +33 -0
- package/dist/api-2n6dd2ws.js +33 -0
- package/dist/api-dbxvch9h.js +33 -0
- package/dist/api-p9hf69kr.js +33 -0
- package/dist/api-r10j00ev.js +33 -0
- package/dist/api-senf2569.js +33 -0
- package/dist/api-swcgnp72.js +33 -0
- package/dist/{api-d6ekexs5.js → api-th82mps4.js} +3 -1
- package/dist/bridge/client.d.ts +29 -6
- package/dist/bridge/client.d.ts.map +1 -1
- package/dist/bridge/gateway-runtime.d.ts +8 -0
- package/dist/bridge/gateway-runtime.d.ts.map +1 -0
- package/dist/bridge/index.d.ts +2 -2
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/log.d.ts +5 -0
- package/dist/bridge/log.d.ts.map +1 -0
- package/dist/bridge/miniflare.d.ts.map +1 -1
- package/dist/bridge/proxy.d.ts +7 -5
- package/dist/bridge/proxy.d.ts.map +1 -1
- package/dist/bridge/serialization.d.ts +36 -16
- package/dist/bridge/serialization.d.ts.map +1 -1
- package/dist/bridge/server.d.ts +1 -0
- package/dist/bridge/server.d.ts.map +1 -1
- package/dist/bridge/v2/body-streams.d.ts +53 -0
- package/dist/bridge/v2/body-streams.d.ts.map +1 -0
- package/dist/bridge/v2/codec.d.ts +106 -0
- package/dist/bridge/v2/codec.d.ts.map +1 -0
- package/dist/bridge/v2/control-messages.d.ts +51 -0
- package/dist/bridge/v2/control-messages.d.ts.map +1 -0
- package/dist/bridge/v2/frames.d.ts +109 -0
- package/dist/bridge/v2/frames.d.ts.map +1 -0
- package/dist/bridge/v2/index.d.ts +11 -0
- package/dist/bridge/v2/index.d.ts.map +1 -0
- package/dist/bridge/v2/legacy-protocol.d.ts +146 -0
- package/dist/bridge/v2/legacy-protocol.d.ts.map +1 -0
- package/dist/bridge/v2/legacy-serialization.d.ts +103 -0
- package/dist/bridge/v2/legacy-serialization.d.ts.map +1 -0
- package/dist/bridge/v2/serialization.d.ts +48 -0
- package/dist/bridge/v2/serialization.d.ts.map +1 -0
- package/dist/bridge/v2/transport.d.ts +31 -0
- package/dist/bridge/v2/transport.d.ts.map +1 -0
- package/dist/bridge/v2/value-codec.d.ts +61 -0
- package/dist/bridge/v2/value-codec.d.ts.map +1 -0
- package/dist/bridge/v2/value-serialization.d.ts +103 -0
- package/dist/bridge/v2/value-serialization.d.ts.map +1 -0
- package/dist/bridge/v2/wire.d.ts +170 -0
- package/dist/bridge/v2/wire.d.ts.map +1 -0
- package/dist/bridge/v2/ws-relay.d.ts +53 -0
- package/dist/bridge/v2/ws-relay.d.ts.map +1 -0
- package/dist/browser-shim/server.d.ts +63 -0
- package/dist/browser-shim/server.d.ts.map +1 -1
- package/dist/browser.d.ts +396 -38
- package/dist/browser.d.ts.map +1 -1
- package/dist/{src/browser.js → browser.js} +19 -33
- package/dist/build-07mjrvsn.js +53 -0
- package/dist/build-0rfr8k1s.js +53 -0
- package/dist/build-1313sg73.js +52 -0
- package/dist/build-1hnntbks.js +53 -0
- package/dist/build-1r3myv0k.js +53 -0
- package/dist/build-28561w5v.js +54 -0
- package/dist/build-50yqpwb3.js +54 -0
- package/dist/build-55z8psd6.js +53 -0
- package/dist/build-5b9wj2p0.js +53 -0
- package/dist/build-5frhzh1m.js +53 -0
- package/dist/{build-p3r3117t.js → build-6ye9vnab.js} +8 -9
- package/dist/build-8gv18jrq.js +52 -0
- package/dist/build-9bgqypy6.js +53 -0
- package/dist/{build-506kjhcm.js → build-9em4ymqn.js} +12 -13
- package/dist/build-eh3x12qc.js +52 -0
- package/dist/build-emhyycp7.js +53 -0
- package/dist/build-f1m9jn7b.js +53 -0
- package/dist/build-ffe72jjv.js +54 -0
- package/dist/build-fx90y6za.js +53 -0
- package/dist/build-h31egsze.js +53 -0
- package/dist/build-hpczwagb.js +53 -0
- package/dist/{build-1kmkwqgh.js → build-hpkbanpw.js} +16 -15
- package/dist/build-j2re91xe.js +54 -0
- package/dist/{build-66866ahs.js → build-j78389rg.js} +12 -13
- package/dist/build-m3kckn5g.js +53 -0
- package/dist/build-mf3thcjm.js +53 -0
- package/dist/build-n3n5bv37.js +52 -0
- package/dist/build-ngfy4v5x.js +53 -0
- package/dist/build-pr843h0d.js +52 -0
- package/dist/build-qyg2b45p.js +52 -0
- package/dist/build-r6884kyt.js +53 -0
- package/dist/build-re370wkf.js +53 -0
- package/dist/build-vvndgwg0.js +52 -0
- package/dist/build-wp559jkf.js +54 -0
- package/dist/{build-g1adm3ww.js → build-x4r67275.js} +12 -13
- package/dist/build-xp4pfhvv.js +52 -0
- package/dist/build-y489r2h9.js +54 -0
- package/dist/build-y6g4bvx5.js +52 -0
- package/dist/build-yvn0yhwx.js +52 -0
- package/dist/build-z4vmhs5c.js +53 -0
- package/dist/bundler/defaults.d.ts +23 -0
- package/dist/bundler/defaults.d.ts.map +1 -0
- package/dist/bundler/do-bundler.d.ts.map +1 -1
- package/dist/bundler/index.d.ts +1 -0
- package/dist/bundler/index.d.ts.map +1 -1
- package/dist/bundler/rolldown-shared.d.ts +29 -0
- package/dist/bundler/rolldown-shared.d.ts.map +1 -1
- package/dist/bundler/worker-bundler.d.ts.map +1 -1
- package/dist/bundler/worker-compat.d.ts.map +1 -1
- package/dist/cli/build-manifest.d.ts +54 -0
- package/dist/cli/build-manifest.d.ts.map +1 -0
- package/dist/cli/commands/build-artifacts.d.ts +13 -0
- package/dist/cli/commands/build-artifacts.d.ts.map +1 -1
- package/dist/cli/commands/deploy.d.ts.map +1 -1
- package/dist/cli/dependencies.d.ts +1 -0
- package/dist/cli/dependencies.d.ts.map +1 -1
- package/dist/cli/deploy-strategy.d.ts +3 -3
- package/dist/cli/deploy-strategy.d.ts.map +1 -1
- package/dist/cli/help-pages/pages/core.d.ts.map +1 -1
- package/dist/cli/index.js +12 -0
- package/dist/cli/preview-bindings.d.ts +8 -1
- package/dist/cli/preview-bindings.d.ts.map +1 -1
- package/dist/cli/preview.d.ts +1 -2
- package/dist/cli/preview.d.ts.map +1 -1
- package/dist/cloudflare/account-resources.d.ts.map +1 -1
- package/dist/cloudflare/api.d.ts +67 -3
- package/dist/cloudflare/api.d.ts.map +1 -1
- package/dist/cloudflare/auth.d.ts.map +1 -1
- package/dist/{src/cloudflare → cloudflare}/index.js +7 -7
- package/dist/cloudflare/known-permission-group-ids.generated.d.ts +10 -0
- package/dist/cloudflare/known-permission-group-ids.generated.d.ts.map +1 -0
- package/dist/cloudflare/kv-namespace.d.ts +2 -1
- package/dist/cloudflare/kv-namespace.d.ts.map +1 -1
- package/dist/cloudflare/preferences.d.ts +7 -0
- package/dist/cloudflare/preferences.d.ts.map +1 -1
- package/dist/cloudflare/preview-registry-inference.d.ts +14 -0
- package/dist/cloudflare/preview-registry-inference.d.ts.map +1 -0
- package/dist/cloudflare/preview-registry-records.d.ts +3 -60
- package/dist/cloudflare/preview-registry-records.d.ts.map +1 -1
- package/dist/cloudflare/preview-registry-shape.d.ts +47 -0
- package/dist/cloudflare/preview-registry-shape.d.ts.map +1 -0
- package/dist/cloudflare/preview-registry-transport.d.ts +4 -0
- package/dist/cloudflare/preview-registry-transport.d.ts.map +1 -0
- package/dist/cloudflare/preview-urls.d.ts +3 -0
- package/dist/cloudflare/preview-urls.d.ts.map +1 -0
- package/dist/cloudflare/tokens.d.ts +23 -0
- package/dist/cloudflare/tokens.d.ts.map +1 -1
- package/dist/cloudflare/types.d.ts +1 -1
- package/dist/cloudflare/types.d.ts.map +1 -1
- package/dist/cloudflare/usage.d.ts +30 -2
- package/dist/cloudflare/usage.d.ts.map +1 -1
- package/dist/config/binding-resolution-helpers.d.ts +36 -0
- package/dist/config/binding-resolution-helpers.d.ts.map +1 -0
- package/dist/config/compatibility.d.ts +3 -0
- package/dist/config/compatibility.d.ts.map +1 -0
- package/dist/config/compiler.d.ts +61 -20
- package/dist/config/compiler.d.ts.map +1 -1
- package/dist/config/deploy-resources.d.ts +58 -0
- package/dist/config/deploy-resources.d.ts.map +1 -0
- package/dist/config/index.d.ts +5 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/preview-resources.d.ts +6 -0
- package/dist/config/preview-resources.d.ts.map +1 -1
- package/dist/config/preview.d.ts.map +1 -1
- package/dist/config/ref.d.ts +14 -1
- package/dist/config/ref.d.ts.map +1 -1
- package/dist/config/resolve-phased.d.ts +72 -0
- package/dist/config/resolve-phased.d.ts.map +1 -0
- package/dist/config/resolve.d.ts +7 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resource-resolution.d.ts +26 -6
- package/dist/config/resource-resolution.d.ts.map +1 -1
- package/dist/config/schema-bindings.d.ts +262 -0
- package/dist/config/schema-bindings.d.ts.map +1 -1
- package/dist/config/schema-env.d.ts +375 -39
- package/dist/config/schema-env.d.ts.map +1 -1
- package/dist/config/schema-normalization.d.ts +26 -2
- package/dist/config/schema-normalization.d.ts.map +1 -1
- package/dist/config/schema.d.ts +994 -63
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/service-bindings-validation.d.ts +36 -0
- package/dist/config/service-bindings-validation.d.ts.map +1 -0
- package/dist/{config-hwdqjse7.js → config-1japnjmx.js} +5 -5
- package/dist/{config-q0g5qdga.js → config-287wjn1m.js} +6 -6
- package/dist/{config-fjwke42y.js → config-4x6vq82e.js} +6 -6
- package/dist/{config-pxvewrhv.js → config-5n0avhcx.js} +6 -6
- package/dist/config-70s2ap5j.js +59 -0
- package/dist/config-7hge8ze6.js +59 -0
- package/dist/config-7rbp7aek.js +59 -0
- package/dist/config-b8xbbmta.js +59 -0
- package/dist/config-baee5690.js +59 -0
- package/dist/config-bczpc1ey.js +59 -0
- package/dist/{src/config-entry.js → config-entry.js} +3 -3
- package/dist/config-fhmwzaw6.js +59 -0
- package/dist/config-g9vkfa4x.js +59 -0
- package/dist/config-gpexkzth.js +59 -0
- package/dist/config-nspw7sgv.js +59 -0
- package/dist/config-ntm4x9wt.js +59 -0
- package/dist/config-nv6hfpg6.js +59 -0
- package/dist/config-pjc33wew.js +59 -0
- package/dist/config-pnz2e8s3.js +59 -0
- package/dist/config-qts6nh6g.js +59 -0
- package/dist/config-sg2xrdt4.js +59 -0
- package/dist/config-vzwckat3.js +59 -0
- package/dist/config-x90dkmm7.js +59 -0
- package/dist/{src/decorators → decorators}/index.js +2 -2
- package/dist/deploy-1s6nv5rp.js +921 -0
- package/dist/{deploy-ykpcjkc2.js → deploy-30ph1rrd.js} +263 -32
- package/dist/{deploy-ex4g5avz.js → deploy-39dmfn9d.js} +338 -38
- package/dist/deploy-44n2pshy.js +1016 -0
- package/dist/deploy-45qxpsfe.js +921 -0
- package/dist/deploy-64e57w1g.js +1040 -0
- package/dist/deploy-82j43vta.js +1040 -0
- package/dist/deploy-99m8qhpa.js +1041 -0
- package/dist/deploy-9twkd32f.js +1040 -0
- package/dist/deploy-a2eq2c1n.js +1040 -0
- package/dist/{deploy-csfhdr64.js → deploy-a3pb1qs5.js} +259 -29
- package/dist/deploy-agbtfm04.js +921 -0
- package/dist/{deploy-jnb0bhka.js → deploy-aswbtbf3.js} +361 -49
- package/dist/deploy-bqf3kxy5.js +972 -0
- package/dist/deploy-fv4z648h.js +921 -0
- package/dist/deploy-gsybda2f.js +1038 -0
- package/dist/deploy-h17nzysm.js +921 -0
- package/dist/deploy-hc89h4wg.js +1045 -0
- package/dist/deploy-jey5pnqn.js +1040 -0
- package/dist/deploy-jv0yfqvk.js +1040 -0
- package/dist/deploy-kn3z6spd.js +941 -0
- package/dist/deploy-m22xmz9w.js +921 -0
- package/dist/deploy-nefp2njy.js +1038 -0
- package/dist/deploy-ppp8pg6w.js +1038 -0
- package/dist/deploy-qah2eag6.js +1041 -0
- package/dist/deploy-qdq2gpad.js +1045 -0
- package/dist/deploy-r1yf8913.js +1038 -0
- package/dist/deploy-r8nam9rr.js +1038 -0
- package/dist/deploy-rrm4a0xw.js +921 -0
- package/dist/deploy-s0tfnc12.js +1040 -0
- package/dist/deploy-s636ks9k.js +1041 -0
- package/dist/deploy-sany8t54.js +1045 -0
- package/dist/deploy-skqn61j3.js +1038 -0
- package/dist/deploy-smv2870h.js +921 -0
- package/dist/deploy-sp16nxs5.js +972 -0
- package/dist/deploy-sr805bvq.js +921 -0
- package/dist/deploy-t9dehmn0.js +1041 -0
- package/dist/deploy-taxt7njz.js +1041 -0
- package/dist/deploy-tnfvfh9m.js +1040 -0
- package/dist/deploy-w5f8db4s.js +1040 -0
- package/dist/deploy-wsxcectr.js +921 -0
- package/dist/deploy-xyfbhj3v.js +1038 -0
- package/dist/deploy-yv1y5xaa.js +921 -0
- package/dist/deploy-z3ejw37k.js +1040 -0
- package/dist/{dev-8nssqatr.js → dev-02tgdc4f.js} +199 -448
- package/dist/dev-0tqhveye.js +2314 -0
- package/dist/dev-3dj2gkfq.js +2314 -0
- package/dist/dev-3e0etsww.js +2314 -0
- package/dist/dev-47dk7c13.js +2314 -0
- package/dist/dev-4a2a31cm.js +2314 -0
- package/dist/dev-4w1stcn8.js +2427 -0
- package/dist/dev-5wkh1z4a.js +2188 -0
- package/dist/dev-6t22zmey.js +2350 -0
- package/dist/dev-89p1sdv7.js +2395 -0
- package/dist/dev-8d1gxjky.js +2427 -0
- package/dist/dev-8yawx3cv.js +2314 -0
- package/dist/dev-9h4p8a0c.js +2393 -0
- package/dist/dev-9xmttj4c.js +2314 -0
- package/dist/dev-at6gy2td.js +2427 -0
- package/dist/dev-bkbz97z0.js +2314 -0
- package/dist/{dev-grznx8fn.js → dev-ct3344kv.js} +199 -448
- package/dist/{dev-7ef5e2j1.js → dev-dg8dh5c1.js} +123 -298
- package/dist/dev-dr5jb965.js +2427 -0
- package/dist/dev-e4sjqtbq.js +2314 -0
- package/dist/dev-ecq26mg4.js +2350 -0
- package/dist/dev-ef237vgp.js +2324 -0
- package/dist/dev-enbdg4st.js +2314 -0
- package/dist/dev-jcrxg8hq.js +2160 -0
- package/dist/dev-jk0gqges.js +2432 -0
- package/dist/dev-k62936am.js +2314 -0
- package/dist/dev-k8ptbvrs.js +2160 -0
- package/dist/dev-kqm107h4.js +2422 -0
- package/dist/dev-n0gx7eya.js +2350 -0
- package/dist/dev-n23m6rtb.js +2314 -0
- package/dist/dev-ny8fmkzg.js +2432 -0
- package/dist/dev-p1c65cga.js +2386 -0
- package/dist/dev-p4fjbb4h.js +2395 -0
- package/dist/dev-pnfcv79z.js +2160 -0
- package/dist/dev-qnrrv5ey.js +2393 -0
- package/dist/dev-qqysg50t.js +2427 -0
- package/dist/dev-r9f3n11q.js +2410 -0
- package/dist/dev-s0815dw4.js +2427 -0
- package/dist/dev-s4tpkg60.js +2314 -0
- package/dist/dev-s82fcesg.js +2314 -0
- package/dist/dev-s9sz53me.js +2401 -0
- package/dist/dev-sdka7z0d.js +2427 -0
- package/dist/dev-server/d1-migrations.d.ts +22 -0
- package/dist/dev-server/d1-migrations.d.ts.map +1 -1
- package/dist/dev-server/dev-server-state.d.ts +56 -0
- package/dist/dev-server/dev-server-state.d.ts.map +1 -0
- package/dist/dev-server/gateway-script.d.ts +14 -1
- package/dist/dev-server/gateway-script.d.ts.map +1 -1
- package/dist/dev-server/miniflare-bindings.d.ts +16 -0
- package/dist/dev-server/miniflare-bindings.d.ts.map +1 -0
- package/dist/dev-server/miniflare-dev-config.d.ts +30 -0
- package/dist/dev-server/miniflare-dev-config.d.ts.map +1 -0
- package/dist/dev-server/miniflare-worker-config.d.ts +44 -0
- package/dist/dev-server/miniflare-worker-config.d.ts.map +1 -0
- package/dist/dev-server/reload-queue.d.ts +13 -0
- package/dist/dev-server/reload-queue.d.ts.map +1 -0
- package/dist/dev-server/server-startup-helpers.d.ts +84 -0
- package/dist/dev-server/server-startup-helpers.d.ts.map +1 -0
- package/dist/dev-server/server.d.ts.map +1 -1
- package/dist/dev-server/vite-utils.d.ts +18 -0
- package/dist/dev-server/vite-utils.d.ts.map +1 -1
- package/dist/dev-server/worker-source-watcher.d.ts +6 -0
- package/dist/dev-server/worker-source-watcher.d.ts.map +1 -1
- package/dist/dev-t3tjscah.js +2350 -0
- package/dist/dev-t50kdb1j.js +2338 -0
- package/dist/dev-t5xf55pt.js +2314 -0
- package/dist/dev-t63c44bb.js +2314 -0
- package/dist/dev-wg3d38sy.js +2433 -0
- package/dist/dev-wh4rfgsh.js +2427 -0
- package/dist/{dev-2pd33m28.js → dev-wjh8gdd1.js} +200 -325
- package/dist/dev-xzxy9qvq.js +2314 -0
- package/dist/dev-yymaq4ph.js +2392 -0
- package/dist/dev-zg2w2ve3.js +2422 -0
- package/dist/dev-zsb2xk1x.js +2427 -0
- package/dist/dev-zty3yhzg.js +2324 -0
- package/dist/{doctor-04ammrrh.js → doctor-3mqavqg3.js} +10 -10
- package/dist/{doctor-fzkznce1.js → doctor-5nek32fz.js} +10 -10
- package/dist/{doctor-sa5xv1bz.js → doctor-7ra1w0sk.js} +10 -10
- package/dist/doctor-ak830a0k.js +245 -0
- package/dist/doctor-bye3cs8a.js +245 -0
- package/dist/{doctor-fmjj65mc.js → doctor-c5m9pmwq.js} +8 -8
- package/dist/doctor-cqfkgxvw.js +245 -0
- package/dist/doctor-e1h9mhzp.js +245 -0
- package/dist/doctor-fmqsrafk.js +245 -0
- package/dist/doctor-hgs7wr5g.js +245 -0
- package/dist/doctor-j8ytsy94.js +245 -0
- package/dist/doctor-mcmkgp6e.js +245 -0
- package/dist/doctor-qb6m2exc.js +245 -0
- package/dist/doctor-qq4tsh8q.js +245 -0
- package/dist/doctor-tecv869a.js +245 -0
- package/dist/doctor-wg0245pe.js +245 -0
- package/dist/doctor-z3jfqxtz.js +245 -0
- package/dist/durable-object-4hey8fgy.js +13 -0
- package/dist/durable-object-v3gsnybk.js +13 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/index-0krb65s3.js +215 -0
- package/dist/index-0mantew0.js +513 -0
- package/dist/{index-p03n4qet.js → index-0mezg6ar.js} +26 -21
- package/dist/{index-mqekt778.js → index-0tk2rs0q.js} +1 -1
- package/dist/{index-h18pxvzs.js → index-124e9t4t.js} +1 -1
- package/dist/{index-na3mnm1k.js → index-1546yrn0.js} +2 -2
- package/dist/index-15fpa5tx.js +232 -0
- package/dist/{index-jb75kwa4.js → index-18mp5v50.js} +33 -14
- package/dist/{index-4v9bc2pc.js → index-195tc6qh.js} +26 -21
- package/dist/{index-0kfzdywd.js → index-1bg8w2gf.js} +1 -1
- package/dist/index-1d4jg11n.js +542 -0
- package/dist/index-1e2qtrmj.js +188 -0
- package/dist/{index-v5nmqthy.js → index-1ghhgb9d.js} +2 -2
- package/dist/index-1nhd9nkd.js +232 -0
- package/dist/{index-6psz1h4c.js → index-1wn8mjep.js} +116 -96
- package/dist/index-1xhd5czz.js +185 -0
- package/dist/index-2a2g4fwp.js +993 -0
- package/dist/{index-fvsadj32.js → index-2bmtj21z.js} +2 -2
- package/dist/{index-816krz9p.js → index-2dpmd14d.js} +1 -1
- package/dist/{index-3ke5d2vn.js → index-2fa0afdp.js} +173 -30
- package/dist/{index-d8etnfef.js → index-2rcrefqd.js} +173 -30
- package/dist/index-2t2m5148.js +1372 -0
- package/dist/index-2vbzamev.js +437 -0
- package/dist/index-2vdep9h0.js +993 -0
- package/dist/{index-zfhq6s96.js → index-2y90j9cz.js} +2 -2
- package/dist/index-33ep0z9x.js +385 -0
- package/dist/index-37jgbaw6.js +1372 -0
- package/dist/index-380ncsqc.js +977 -0
- package/dist/{index-thna1tkd.js → index-3e1x39fc.js} +111 -26
- package/dist/index-3e7by9sy.js +223 -0
- package/dist/{index-xk9djfjp.js → index-3egad6wm.js} +34 -15
- package/dist/index-3f8rzmjw.js +232 -0
- package/dist/index-3vd4r37r.js +1372 -0
- package/dist/index-3vgn5e89.js +1682 -0
- package/dist/index-3x7k3t0f.js +513 -0
- package/dist/index-3xfe2dst.js +399 -0
- package/dist/index-464j1zb4.js +513 -0
- package/dist/{index-pnbs1b8k.js → index-48rxsj95.js} +110 -25
- package/dist/index-4bezcdd1.js +385 -0
- package/dist/index-4fp11z9e.js +973 -0
- package/dist/{index-m3fmw6mx.js → index-4knecthc.js} +2 -2
- package/dist/index-502y7w13.js +538 -0
- package/dist/index-50mxxb4q.js +185 -0
- package/dist/index-5achzspr.js +185 -0
- package/dist/index-5ef3jmv7.js +1372 -0
- package/dist/index-5eswe8yv.js +844 -0
- package/dist/index-5gevxfgs.js +513 -0
- package/dist/index-5gmf048z.js +817 -0
- package/dist/index-5jtkxpjf.js +971 -0
- package/dist/{index-72mve6vh.js → index-5m85bd9x.js} +1 -1
- package/dist/{index-4rrttqj5.js → index-5n5nn0a8.js} +62 -176
- package/dist/index-5p3bgjwr.js +808 -0
- package/dist/index-5vzcszr2.js +1230 -0
- package/dist/index-5w77r4w9.js +513 -0
- package/dist/index-62srkqcm.js +168 -0
- package/dist/index-63cgqe43.js +1372 -0
- package/dist/index-65e7xx1a.js +19 -0
- package/dist/index-65qrje14.js +185 -0
- package/dist/index-66sx3b3v.js +385 -0
- package/dist/{index-b8m6883k.js → index-678j0n13.js} +2 -2
- package/dist/{index-epw1jxz5.js → index-6ftrth7n.js} +194 -180
- package/dist/index-6g90pvxa.js +215 -0
- package/dist/index-6j4m5x2d.js +1372 -0
- package/dist/{index-7v583xan.js → index-6jwpke14.js} +13 -46
- package/dist/index-6knsjvxh.js +1372 -0
- package/dist/index-6kwq6yf8.js +979 -0
- package/dist/index-6mg4yvc6.js +74 -0
- package/dist/{index-e9yw4d6y.js → index-6phry941.js} +5 -5
- package/dist/index-6r59wbek.js +232 -0
- package/dist/index-6sf815ps.js +74 -0
- package/dist/index-6zd89k6y.js +1230 -0
- package/dist/{index-ry131z23.js → index-71rwg0cn.js} +62 -176
- package/dist/index-75ex2m0x.js +695 -0
- package/dist/{index-htzf0py1.js → index-79exzs3q.js} +194 -180
- package/dist/{index-1sp39f2f.js → index-7bxj118m.js} +62 -176
- package/dist/index-7c6np4mq.js +397 -0
- package/dist/{index-7x0ybbtx.js → index-7cm339qz.js} +5 -5
- package/dist/index-7e359eb5.js +895 -0
- package/dist/index-7eqyr4j8.js +70 -0
- package/dist/index-7k278fgz.js +273 -0
- package/dist/index-7kazxkjt.js +1372 -0
- package/dist/index-7m0x8m9r.js +844 -0
- package/dist/index-7p74smg8.js +1372 -0
- package/dist/index-7q8fke3k.js +188 -0
- package/dist/index-7qk6eafn.js +1682 -0
- package/dist/{index-yzddwp02.js → index-7vbjt6ba.js} +110 -93
- package/dist/{index-7kcxjhta.js → index-7z4b0vgd.js} +19 -5
- package/dist/index-82xn4azv.js +74 -0
- package/dist/index-83wns7cz.js +70 -0
- package/dist/index-852945d4.js +413 -0
- package/dist/{index-8t5nb4qx.js → index-86rvj79f.js} +5 -5
- package/dist/index-88tcq0t4.js +542 -0
- package/dist/{index-q4kaz181.js → index-8evn52g1.js} +279 -268
- package/dist/index-8jkf4nsd.js +695 -0
- package/dist/{index-sqrksgb2.js → index-8nx4ce3e.js} +7 -7
- package/dist/index-8q1bcnrh.js +1372 -0
- package/dist/index-8t5gynct.js +971 -0
- package/dist/index-905svbb6.js +470 -0
- package/dist/index-94cb0sac.js +1372 -0
- package/dist/index-95mmvbw7.js +538 -0
- package/dist/index-97x94h0m.js +438 -0
- package/dist/index-9an9qqr1.js +728 -0
- package/dist/index-9d125myk.js +1372 -0
- package/dist/index-9gg0kqw0.js +470 -0
- package/dist/index-9ryw7mcw.js +971 -0
- package/dist/index-a3e13a7m.js +478 -0
- package/dist/index-a6j44jmr.js +1372 -0
- package/dist/index-a75ejnvt.js +1711 -0
- package/dist/index-ab2nck1h.js +1372 -0
- package/dist/index-abrqnq3e.js +488 -0
- package/dist/index-afjbpgb1.js +1218 -0
- package/dist/index-at89fpde.js +470 -0
- package/dist/{index-cgbvmse6.js → index-awr0tp6p.js} +1 -1
- package/dist/index-b1be9bdh.js +1372 -0
- package/dist/index-b1xs3wc4.js +513 -0
- package/dist/index-b50x7seh.js +513 -0
- package/dist/{index-9az6s7ad.js → index-b5ra8w3q.js} +1 -1
- package/dist/index-b64sbzgv.js +884 -0
- package/dist/index-b7r8ntpm.js +1372 -0
- package/dist/index-ba9gyy13.js +513 -0
- package/dist/{index-k29yjhv0.js → index-bb66mn7p.js} +1 -1
- package/dist/index-bc5pvbbd.js +1193 -0
- package/dist/index-bj0mk3dw.js +74 -0
- package/dist/index-bj3a8dr0.js +1372 -0
- package/dist/index-bk3eez1g.js +513 -0
- package/dist/index-btjx137w.js +774 -0
- package/dist/index-btrfqp9h.js +133 -0
- package/dist/index-bx6gangy.js +402 -0
- package/dist/index-c0tc0yts.js +471 -0
- package/dist/{index-6jef5emv.js → index-c0whkev9.js} +27 -3
- package/dist/index-ca96qkva.js +1372 -0
- package/dist/index-cdtzkedk.js +993 -0
- package/dist/index-cejgenma.js +1372 -0
- package/dist/index-cp8jt5pr.js +52 -0
- package/dist/index-cpz69pek.js +1372 -0
- package/dist/{index-gs4y9gdf.js → index-crrdegk5.js} +2 -2
- package/dist/index-cskszwkx.js +1372 -0
- package/dist/index-cxf22a0s.js +74 -0
- package/dist/index-cy3c3w81.js +270 -0
- package/dist/index-d5dgb1j6.js +74 -0
- package/dist/index-da397xcx.js +1372 -0
- package/dist/index-damyy8bw.js +1372 -0
- package/dist/{index-x9cwdxw5.js → index-dd6fwwmq.js} +3 -3
- package/dist/index-dh1954bp.js +52 -0
- package/dist/index-djp2wd1f.js +1372 -0
- package/dist/{index-0apbm26n.js → index-dmbdj6va.js} +111 -94
- package/dist/index-dmf76tac.js +1372 -0
- package/dist/index-dphr32gc.js +420 -0
- package/dist/index-dxh2qyyw.js +52 -0
- package/dist/index-dzayfxjy.js +492 -0
- package/dist/index-e05q77kt.js +397 -0
- package/dist/index-e11b1fb2.js +495 -0
- package/dist/index-e3zvspqj.js +968 -0
- package/dist/index-e4tzzbn9.js +1372 -0
- package/dist/index-e5ct1gwb.js +1372 -0
- package/dist/index-e7ptcz1a.js +1372 -0
- package/dist/index-e7wt0203.js +513 -0
- package/dist/{index-61jsjnsv.js → index-ebwsvf9t.js} +110 -25
- package/dist/index-ed73jn3d.js +185 -0
- package/dist/index-ed7n5d07.js +185 -0
- package/dist/index-ejs2a4kd.js +513 -0
- package/dist/index-esjrgt3y.js +467 -0
- package/dist/index-ev03khsd.js +513 -0
- package/dist/index-f1gsqm54.js +168 -0
- package/dist/index-f90314kt.js +52 -0
- package/dist/index-f9mhsept.js +185 -0
- package/dist/index-fa6zwffw.js +70 -0
- package/dist/index-fama7kpt.js +52 -0
- package/dist/index-fgk87mk2.js +1067 -0
- package/dist/index-fkyvxe4b.js +968 -0
- package/dist/index-g0h40xke.js +513 -0
- package/dist/index-g0rqh52c.js +385 -0
- package/dist/{index-0eqksag4.js → index-g170d619.js} +13 -46
- package/dist/index-g3qtxkms.js +881 -0
- package/dist/index-gactvqcs.js +467 -0
- package/dist/index-gaew61v4.js +470 -0
- package/dist/index-gba371j7.js +542 -0
- package/dist/index-gegyyfnw.js +1372 -0
- package/dist/index-get7he2s.js +133 -0
- package/dist/index-gn5wy09x.js +205 -0
- package/dist/{index-2pb7b9mw.js → index-gtbgzwfs.js} +62 -176
- package/dist/index-gtpz0gkz.js +185 -0
- package/dist/index-h1s66pmp.js +52 -0
- package/dist/{index-11m5a8wd.js → index-h8r2d8y5.js} +112 -26
- package/dist/index-heeqwrfd.js +385 -0
- package/dist/{index-7g8zyws4.js → index-hheb5dyt.js} +2 -2
- package/dist/index-hjz2x9nq.js +441 -0
- package/dist/index-hkex7ns5.js +513 -0
- package/dist/index-hmbctwv6.js +517 -0
- package/dist/index-hpzasdhw.js +513 -0
- package/dist/index-hqdr9wdm.js +74 -0
- package/dist/index-hrvz8d26.js +1372 -0
- package/dist/index-hyvhnf6r.js +971 -0
- package/dist/index-j2kc5rbv.js +895 -0
- package/dist/index-j2xdxwsz.js +133 -0
- package/dist/index-j47hhb3r.js +694 -0
- package/dist/index-j5aphr5x.js +185 -0
- package/dist/index-j68v36q1.js +188 -0
- package/dist/index-j7cf22x7.js +968 -0
- package/dist/index-j7xxrbnr.js +694 -0
- package/dist/index-jptqxkew.js +470 -0
- package/dist/index-jsymy3mb.js +781 -0
- package/dist/index-jwvy32xk.js +188 -0
- package/dist/index-jxe1b19v.js +133 -0
- package/dist/index-jz96ry5g.js +513 -0
- package/dist/index-k6wtsgs1.js +971 -0
- package/dist/index-kawa49m8.js +371 -0
- package/dist/index-key4e5c9.js +168 -0
- package/dist/index-khbmdrn2.js +884 -0
- package/dist/index-kpzfwex6.js +264 -0
- package/dist/index-kse4gn99.js +74 -0
- package/dist/index-ktscz0r2.js +264 -0
- package/dist/index-kybmjvad.js +1212 -0
- package/dist/index-kzm9cea8.js +185 -0
- package/dist/index-m2d74gqg.js +808 -0
- package/dist/index-m56w7mjt.js +513 -0
- package/dist/index-m95ha3n4.js +264 -0
- package/dist/index-ma151p8g.js +264 -0
- package/dist/index-mg8vwqxf.js +514 -0
- package/dist/index-mhdsywhs.js +264 -0
- package/dist/index-mjgx910r.js +895 -0
- package/dist/index-mkrmaea3.js +185 -0
- package/dist/index-mkxnyyjn.js +264 -0
- package/dist/index-mp5mrst6.js +1372 -0
- package/dist/index-ms15cr86.js +513 -0
- package/dist/index-mt99xkc6.js +133 -0
- package/dist/index-mttv6k25.js +881 -0
- package/dist/index-myxfx52v.js +385 -0
- package/dist/index-mzw7732t.js +74 -0
- package/dist/index-n3mjwz22.js +188 -0
- package/dist/index-n3yksgz0.js +1372 -0
- package/dist/{index-9n6djthj.js → index-n4jr3dmk.js} +32 -38
- package/dist/index-n5drt64b.js +74 -0
- package/dist/index-n8frmffg.js +264 -0
- package/dist/index-n8k8chde.js +694 -0
- package/dist/index-na796ka6.js +994 -0
- package/dist/index-nbs4q0qg.js +1218 -0
- package/dist/index-newpq2zf.js +968 -0
- package/dist/index-nexg9p7j.js +1271 -0
- package/dist/index-nfm8tb5n.js +74 -0
- package/dist/index-nga2tg9z.js +1372 -0
- package/dist/{index-43dq8yx8.js → index-ngbzr9gz.js} +111 -94
- package/dist/index-nh90nk7j.js +380 -0
- package/dist/index-njnmfxm5.js +1372 -0
- package/dist/index-nqma24j3.js +385 -0
- package/dist/index-ntddf5d9.js +993 -0
- package/dist/index-nte9n8w9.js +538 -0
- package/dist/index-ntxp7ke1.js +264 -0
- package/dist/index-nwxnmw41.js +264 -0
- package/dist/index-p1xe5eem.js +513 -0
- package/dist/{index-wztc9stx.js → index-p477xm52.js} +13 -46
- package/dist/index-p8nmkrgw.js +470 -0
- package/dist/{index-yqbxjysa.js → index-p97s12vf.js} +50 -43
- package/dist/index-p9hvv0yd.js +401 -0
- package/dist/index-pac7wv88.js +307 -0
- package/dist/index-ptp2pfq1.js +52 -0
- package/dist/index-pyeycp3f.js +74 -0
- package/dist/index-q23xf3vr.js +479 -0
- package/dist/index-q34rvh5a.js +247 -0
- package/dist/{index-j185x270.js → index-q5errwrj.js} +53 -46
- package/dist/{index-2jnrqbny.js → index-q5nhzc9m.js} +4 -88
- package/dist/index-q8f4kawk.js +204 -0
- package/dist/index-qer8zv2r.js +997 -0
- package/dist/index-qhyy018y.js +467 -0
- package/dist/index-qmhdydwy.js +70 -0
- package/dist/index-qpmvca5j.js +470 -0
- package/dist/index-qr96vaj1.js +52 -0
- package/dist/{index-74198nxd.js → index-qtyhg3dn.js} +53 -46
- package/dist/index-qye17gq5.js +264 -0
- package/dist/index-r0839f5k.js +133 -0
- package/dist/index-r1rqg72v.js +1372 -0
- package/dist/index-rbckga8p.js +971 -0
- package/dist/index-rbxb5x2w.js +1372 -0
- package/dist/index-rck779bj.js +739 -0
- package/dist/index-rfn2gt5f.js +1658 -0
- package/dist/index-rg21w26a.js +470 -0
- package/dist/index-rgcz45t0.js +1372 -0
- package/dist/index-rhnd376q.js +133 -0
- package/dist/index-rjc5z3w6.js +971 -0
- package/dist/index-rkhtayd6.js +385 -0
- package/dist/index-rm8srzmv.js +371 -0
- package/dist/index-rmhk5j03.js +968 -0
- package/dist/index-rp4t86bt.js +993 -0
- package/dist/index-rpq5ktdy.js +264 -0
- package/dist/index-rpsmhdd4.js +1218 -0
- package/dist/index-rqpakjyr.js +470 -0
- package/dist/index-rttk33x6.js +232 -0
- package/dist/index-rwa82e89.js +385 -0
- package/dist/index-rz185crv.js +695 -0
- package/dist/index-s22verzj.js +1218 -0
- package/dist/index-s2s3g1nt.js +133 -0
- package/dist/index-s7ytytth.js +781 -0
- package/dist/index-sefnpzwa.js +185 -0
- package/dist/index-sgxw0xzd.js +513 -0
- package/dist/index-stc0caq6.js +1009 -0
- package/dist/index-svz82w9h.js +513 -0
- package/dist/index-sx49e8x9.js +884 -0
- package/dist/index-sxadwvw9.js +185 -0
- package/dist/index-sxn223fz.js +1372 -0
- package/dist/index-sy0c2mh0.js +1372 -0
- package/dist/index-syeh1hca.js +264 -0
- package/dist/index-t18wyhgf.js +418 -0
- package/dist/index-t4fhcx1n.js +71 -0
- package/dist/index-td4hbgj5.js +1372 -0
- package/dist/{index-hjy8ctpc.js → index-tkvt9mmq.js} +47 -14
- package/dist/index-tmmcf4m6.js +808 -0
- package/dist/index-tpgs5v64.js +366 -0
- package/dist/index-tt4fsv91.js +412 -0
- package/dist/{index-t08te69w.js → index-tte89s31.js} +28 -11
- package/dist/index-tvjg7swe.js +1372 -0
- package/dist/index-txndxr4w.js +513 -0
- package/dist/index-tyh5jc55.js +990 -0
- package/dist/index-tyt0wa52.js +470 -0
- package/dist/index-tyt3wcfr.js +1372 -0
- package/dist/index-v3znz08m.js +968 -0
- package/dist/index-v78xbj6n.js +808 -0
- package/dist/index-v915brjk.js +1372 -0
- package/dist/index-v922fmsx.js +52 -0
- package/dist/index-v9w1bbfe.js +842 -0
- package/dist/index-vbbgtm8p.js +513 -0
- package/dist/{index-k6vq6kkt.js → index-vcjgrmzj.js} +3 -3
- package/dist/{index-9ba1etyz.js → index-vdewcg1r.js} +204 -54
- package/dist/index-vhqww6tt.js +307 -0
- package/dist/index-vse8620z.js +1372 -0
- package/dist/index-vtjp46c3.js +52 -0
- package/dist/{index-jwd8pcb2.js → index-vxhxk8mf.js} +53 -46
- package/dist/index-w3azfsa0.js +695 -0
- package/dist/index-w4tq35dn.js +52 -0
- package/dist/index-w5qxvxzq.js +991 -0
- package/dist/index-w5sedpqn.js +986 -0
- package/dist/index-waha3chv.js +1230 -0
- package/dist/index-wdxww0kj.js +1006 -0
- package/dist/index-wdy5y07x.js +1372 -0
- package/dist/index-wf9pnh6j.js +385 -0
- package/dist/index-wnnbbbkt.js +1192 -0
- package/dist/index-wvcmvtjf.js +1372 -0
- package/dist/index-x0jbntp0.js +470 -0
- package/dist/index-x6scc3nx.js +70 -0
- package/dist/index-x8e2wsbv.js +971 -0
- package/dist/index-xec4p3v5.js +560 -0
- package/dist/index-xgfyxpfs.js +1218 -0
- package/dist/index-xm9hp9xc.js +1372 -0
- package/dist/index-xp7zkxcx.js +1372 -0
- package/dist/index-xrbj0ebk.js +185 -0
- package/dist/index-xskax7r3.js +50 -0
- package/dist/index-xvk5n96q.js +694 -0
- package/dist/index-xy1jvt4w.js +1229 -0
- package/dist/index-xzg9hhf3.js +470 -0
- package/dist/index-xzpg0kaz.js +70 -0
- package/dist/index-y3q6qvv3.js +316 -0
- package/dist/index-y44ts1dk.js +52 -0
- package/dist/index-y5nt1wjb.js +971 -0
- package/dist/index-y82b8w14.js +1372 -0
- package/dist/index-yb07t3c5.js +1372 -0
- package/dist/index-yc3xz3vm.js +431 -0
- package/dist/index-yeaqrevg.js +1372 -0
- package/dist/index-ygwsd1nn.js +438 -0
- package/dist/index-yhdavjk7.js +371 -0
- package/dist/index-yjhns95b.js +188 -0
- package/dist/index-yk23p7he.js +1372 -0
- package/dist/index-ykfgpsmm.js +190 -0
- package/dist/index-ymz3cfab.js +968 -0
- package/dist/index-yq9g1sq7.js +264 -0
- package/dist/index-ys5q9ch9.js +366 -0
- package/dist/index-yt0n4p46.js +973 -0
- package/dist/index-ytq1t9jx.js +232 -0
- package/dist/index-ywmtmf3b.js +513 -0
- package/dist/index-yzb44q6d.js +1372 -0
- package/dist/index-z043xk61.js +133 -0
- package/dist/index-z0gsf674.js +431 -0
- package/dist/index-z32n0ndp.js +1372 -0
- package/dist/index-z4qgk76w.js +1372 -0
- package/dist/{index-yc0gcchc.js → index-z8njfj2g.js} +11 -44
- package/dist/{index-0w826dsr.js → index-z9fjnwa8.js} +21 -3
- package/dist/{index-1xpj0m4r.js → index-z9gy8w6b.js} +1 -1
- package/dist/index-zapkc14c.js +264 -0
- package/dist/index-zes6w8yr.js +185 -0
- package/dist/index-zgrqest7.js +695 -0
- package/dist/index-zsngz131.js +1372 -0
- package/dist/index-zxhc6sb0.js +192 -0
- package/dist/index.d.ts +1 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -0
- package/dist/{init-r4hnxan3.js → init-wfh63bfz.js} +1 -1
- package/dist/{login-5bsxxpvc.js → login-1amyp1jy.js} +10 -10
- package/dist/{login-bhaw72zc.js → login-1cdwn1dj.js} +11 -11
- package/dist/{login-2hnz4m4n.js → login-456h8jk3.js} +11 -11
- package/dist/{login-6tzvczw2.js → login-4n470c4j.js} +11 -11
- package/dist/login-4sh7s849.js +77 -0
- package/dist/login-5dmkf0pz.js +77 -0
- package/dist/login-88tp4gbb.js +77 -0
- package/dist/login-b51faqpc.js +77 -0
- package/dist/login-bxyjqmbj.js +77 -0
- package/dist/login-c4649qss.js +77 -0
- package/dist/login-d80a2qxd.js +77 -0
- package/dist/login-dp0napaz.js +77 -0
- package/dist/login-j3r6z2t4.js +77 -0
- package/dist/login-jkfkdjg4.js +77 -0
- package/dist/login-kch6f2yj.js +77 -0
- package/dist/login-pmqh94ws.js +77 -0
- package/dist/login-rc82x5j8.js +77 -0
- package/dist/login-tvppwyx2.js +77 -0
- package/dist/login-w76jx22q.js +77 -0
- package/dist/login-ze7y36rc.js +77 -0
- package/dist/{previews-gm3z0syj.js → previews-02jmcwft.js} +140 -94
- package/dist/previews-31bq82km.js +1225 -0
- package/dist/{previews-j9ymq4ys.js → previews-62pcvvpe.js} +140 -95
- package/dist/{previews-3rn8mz2c.js → previews-76fxkp59.js} +140 -94
- package/dist/previews-844bp6kf.js +1214 -0
- package/dist/previews-8amn46qv.js +1214 -0
- package/dist/previews-a5xbkksy.js +1214 -0
- package/dist/previews-bgnryzav.js +1214 -0
- package/dist/previews-bkhv9dnr.js +1214 -0
- package/dist/previews-c2c64z5m.js +1214 -0
- package/dist/previews-e4wgscsb.js +1214 -0
- package/dist/previews-ew4reetn.js +1214 -0
- package/dist/previews-hzqke1fg.js +1214 -0
- package/dist/previews-j8wa3sge.js +1214 -0
- package/dist/previews-k5n6vhpm.js +1214 -0
- package/dist/previews-n4sdyxa5.js +1214 -0
- package/dist/previews-npwrwb0b.js +1214 -0
- package/dist/previews-q8ph9wbe.js +1214 -0
- package/dist/previews-rfswrh7q.js +1214 -0
- package/dist/previews-s0y5yp8s.js +1214 -0
- package/dist/previews-s5b6mnz5.js +1214 -0
- package/dist/{previews-d487qde5.js → previews-sdte4984.js} +23 -23
- package/dist/previews-t5tdm6t0.js +1225 -0
- package/dist/previews-tk7vpzj9.js +1214 -0
- package/dist/previews-tqt4pk27.js +1214 -0
- package/dist/previews-vqg4psk2.js +1225 -0
- package/dist/{productions-x9p0pym1.js → productions-4abj58kx.js} +12 -12
- package/dist/{productions-5ev5qweg.js → productions-4dpec71r.js} +13 -13
- package/dist/{productions-120xg0aq.js → productions-4nedsanh.js} +13 -13
- package/dist/{productions-p5rbgp2f.js → productions-5c58yafp.js} +13 -13
- package/dist/{productions-me3tdvr9.js → productions-5xq5cjhx.js} +13 -13
- package/dist/productions-6dr0bmd7.js +505 -0
- package/dist/productions-8f6s8dqr.js +505 -0
- package/dist/productions-a2hcwwzf.js +505 -0
- package/dist/productions-b7svyjp7.js +505 -0
- package/dist/productions-bf2cnr05.js +505 -0
- package/dist/productions-dkgry3gv.js +505 -0
- package/dist/productions-eqh105tk.js +505 -0
- package/dist/productions-etvcm7yf.js +505 -0
- package/dist/productions-f1zpbmjz.js +505 -0
- package/dist/productions-j14pvx93.js +505 -0
- package/dist/productions-j7s1ywvg.js +505 -0
- package/dist/productions-jp3v3q3p.js +505 -0
- package/dist/productions-m9p42amj.js +505 -0
- package/dist/productions-mxbneawa.js +505 -0
- package/dist/productions-np4exh9p.js +505 -0
- package/dist/productions-rr1hqgda.js +505 -0
- package/dist/productions-rtf9ksgg.js +505 -0
- package/dist/productions-w2nzftcz.js +505 -0
- package/dist/productions-wbks5h7e.js +505 -0
- package/dist/productions-y99ayk6h.js +505 -0
- package/dist/productions-zpqyw5gm.js +505 -0
- package/dist/runtime/context-events.d.ts.map +1 -1
- package/dist/runtime/context.d.ts +8 -1
- package/dist/runtime/context.d.ts.map +1 -1
- package/dist/runtime/exports.d.ts +1 -4
- package/dist/runtime/exports.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +3 -3
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/{src/runtime → runtime}/index.js +22 -7
- package/dist/runtime/middleware.d.ts +55 -0
- package/dist/runtime/middleware.d.ts.map +1 -1
- package/dist/runtime/router/index.d.ts +7 -0
- package/dist/runtime/router/index.d.ts.map +1 -0
- package/dist/runtime/router/types.d.ts +24 -0
- package/dist/runtime/router/types.d.ts.map +1 -0
- package/dist/runtime/validation.d.ts +9 -1
- package/dist/runtime/validation.d.ts.map +1 -1
- package/dist/{src/sveltekit → sveltekit}/index.js +36 -71
- package/dist/sveltekit/platform.d.ts +10 -0
- package/dist/sveltekit/platform.d.ts.map +1 -1
- package/dist/test/binding-hints.d.ts +11 -0
- package/dist/test/binding-hints.d.ts.map +1 -0
- package/dist/test/bridge-context.d.ts +7 -0
- package/dist/test/bridge-context.d.ts.map +1 -1
- package/dist/test/index.d.ts +0 -1
- package/dist/test/index.d.ts.map +1 -1
- package/dist/{index-2x53aqjm.js → test/index.js} +836 -774
- package/dist/test/simple-context-bindings.d.ts +13 -0
- package/dist/test/simple-context-bindings.d.ts.map +1 -0
- package/dist/test/simple-context-env.d.ts +35 -0
- package/dist/test/simple-context-env.d.ts.map +1 -0
- package/dist/test/simple-context-gateway-script.d.ts.map +1 -1
- package/dist/test/simple-context-handlers.d.ts +12 -0
- package/dist/test/simple-context-handlers.d.ts.map +1 -0
- package/dist/test/simple-context-lifecycle.d.ts +32 -0
- package/dist/test/simple-context-lifecycle.d.ts.map +1 -0
- package/dist/test/simple-context-mfconfig.d.ts +7 -0
- package/dist/test/simple-context-mfconfig.d.ts.map +1 -0
- package/dist/test/simple-context-multi-worker.d.ts +16 -0
- package/dist/test/simple-context-multi-worker.d.ts.map +1 -0
- package/dist/test/simple-context-runtime.d.ts +19 -0
- package/dist/test/simple-context-runtime.d.ts.map +1 -0
- package/dist/test/simple-context-startup.d.ts +11 -0
- package/dist/test/simple-context-startup.d.ts.map +1 -0
- package/dist/test/simple-context-transport.d.ts +14 -0
- package/dist/test/simple-context-transport.d.ts.map +1 -0
- package/dist/test/simple-context.d.ts +6 -3
- package/dist/test/simple-context.d.ts.map +1 -1
- package/dist/test/utilities.d.ts +13 -5
- package/dist/test/utilities.d.ts.map +1 -1
- package/dist/test/worker.d.ts +1 -1
- package/dist/test/worker.d.ts.map +1 -1
- package/dist/{token-kedhcret.js → token-3b9wws58.js} +3 -3
- package/dist/{token-m8jmnjwk.js → token-47kcz18j.js} +3 -3
- package/dist/token-exz78pth.js +419 -0
- package/dist/token-fcthx92c.js +419 -0
- package/dist/token-grwp8z4q.js +419 -0
- package/dist/token-jkmm44z2.js +419 -0
- package/dist/token-qxtvzm3b.js +419 -0
- package/dist/token-rq8mvtz9.js +419 -0
- package/dist/token-sct51r47.js +419 -0
- package/dist/token-sfgxcgen.js +419 -0
- package/dist/transform/durable-object.d.ts.map +1 -1
- package/dist/transform/worker-entrypoint.d.ts +5 -0
- package/dist/transform/worker-entrypoint.d.ts.map +1 -1
- package/dist/types-0qv4xces.js +572 -0
- package/dist/types-2nvrs9jg.js +572 -0
- package/dist/types-2pbe8kzw.js +572 -0
- package/dist/types-2zyt0m43.js +572 -0
- package/dist/types-4xxer9ep.js +572 -0
- package/dist/{types-6e5yx6km.js → types-5t5y7a5n.js} +9 -9
- package/dist/{types-1gwr2ex6.js → types-5wd2rygw.js} +9 -9
- package/dist/types-7j3ykgx7.js +572 -0
- package/dist/types-8g78x34n.js +572 -0
- package/dist/types-e6d336q3.js +572 -0
- package/dist/types-hqh2fx0x.js +572 -0
- package/dist/types-j12xmdnd.js +572 -0
- package/dist/types-jqn26et3.js +572 -0
- package/dist/types-n0mxbq26.js +572 -0
- package/dist/types-naz9hvw5.js +572 -0
- package/dist/{types-p0gckpn6.js → types-qjcd1jks.js} +7 -7
- package/dist/types-r9zb8sw1.js +572 -0
- package/dist/types-rv5xwgsn.js +572 -0
- package/dist/types-t39njdqx.js +572 -0
- package/dist/types-tkgch3xv.js +572 -0
- package/dist/{types-0sqwkp7x.js → types-vvtb7rrh.js} +9 -9
- package/dist/types-w1grncdj.js +572 -0
- package/dist/types-wmw49exb.js +572 -0
- package/dist/types-ymxz9jga.js +572 -0
- package/dist/utils/resolve-package.d.ts.map +1 -1
- package/dist/utils/send-email.js +19 -0
- package/dist/vite/config-file.d.ts.map +1 -1
- package/dist/{src/vite → vite}/index.js +12 -11
- package/dist/vite/plugin-config-hook.d.ts +28 -0
- package/dist/vite/plugin-config-hook.d.ts.map +1 -0
- package/dist/vite/plugin-context.d.ts +25 -0
- package/dist/vite/plugin-context.d.ts.map +1 -0
- package/dist/vite/plugin-durable-objects.d.ts +18 -0
- package/dist/vite/plugin-durable-objects.d.ts.map +1 -0
- package/dist/vite/plugin-programmatic.d.ts +44 -0
- package/dist/vite/plugin-programmatic.d.ts.map +1 -0
- package/dist/vite/plugin-transform.d.ts +41 -0
- package/dist/vite/plugin-transform.d.ts.map +1 -0
- package/dist/vite/plugin.d.ts +6 -39
- package/dist/vite/plugin.d.ts.map +1 -1
- package/dist/{worker-y9ha6g44.js → worker-18ceqscc.js} +11 -11
- package/dist/{worker-0srh2jfr.js → worker-1yqpwte2.js} +12 -12
- package/dist/{worker-qtam8grz.js → worker-2aw27zxy.js} +12 -12
- package/dist/{worker-4xrfd10a.js → worker-45tp4a8f.js} +12 -12
- package/dist/worker-68zttchg.js +513 -0
- package/dist/worker-729cf3fh.js +513 -0
- package/dist/worker-aydzxt4f.js +513 -0
- package/dist/worker-ejdxma7k.js +513 -0
- package/dist/worker-entry/composed-worker.d.ts +1 -0
- package/dist/worker-entry/composed-worker.d.ts.map +1 -1
- package/dist/worker-entry/durable-object-discovery.d.ts +20 -0
- package/dist/worker-entry/durable-object-discovery.d.ts.map +1 -0
- package/dist/worker-entry/extensions.d.ts +5 -0
- package/dist/worker-entry/extensions.d.ts.map +1 -0
- package/dist/worker-entry/routes.d.ts +1 -1
- package/dist/worker-entry/routes.d.ts.map +1 -1
- package/dist/worker-entry/surface-paths.d.ts +13 -4
- package/dist/worker-entry/surface-paths.d.ts.map +1 -1
- package/dist/worker-entrypoint-4xp7msd7.js +16 -0
- package/dist/worker-entrypoint-f1v9y4s8.js +15 -0
- package/dist/{worker-qzm0b7br.js → worker-f6xqjg65.js} +12 -12
- package/dist/worker-fdnn62de.js +513 -0
- package/dist/worker-frnh95rg.js +513 -0
- package/dist/worker-k55nfrmp.js +513 -0
- package/dist/worker-kqc6w7ry.js +513 -0
- package/dist/worker-ksvcq8be.js +513 -0
- package/dist/worker-mjzfstv5.js +513 -0
- package/dist/worker-p4rtsndj.js +513 -0
- package/dist/worker-p6d53qan.js +513 -0
- package/dist/worker-qh2qbv97.js +513 -0
- package/dist/worker-r234vnv9.js +513 -0
- package/dist/worker-r47bv7gt.js +513 -0
- package/dist/worker-s4nvbqsm.js +513 -0
- package/dist/worker-ttj7vwce.js +513 -0
- package/dist/worker-wv4jdneg.js +513 -0
- package/dist/worker-xcbscr75.js +513 -0
- package/dist/worker-ywwkf3cp.js +513 -0
- package/dist/worker-z8wtk0sh.js +513 -0
- package/package.json +138 -123
- package/dist/account-s66jb15j.js +0 -475
- package/dist/browser-shim/worker.d.ts +0 -14
- package/dist/browser-shim/worker.d.ts.map +0 -1
- package/dist/deploy-7nmzc9r8.js +0 -609
- package/dist/deploy-tp0g6qdp.js +0 -609
- package/dist/index-091sh1ma.js +0 -1229
- package/dist/index-f85s8gj3.js +0 -2649
- package/dist/index-fe2ngvh7.js +0 -1229
- package/dist/index-hfj1a2c4.js +0 -2649
- package/dist/index-maxpsfk8.js +0 -402
- package/dist/index-mbdmrner.js +0 -402
- package/dist/index-mea5bc45.js +0 -418
- package/dist/index-sgb7c8nm.js +0 -402
- package/dist/index-vt4yxkmf.js +0 -470
- package/dist/index-wyq6c6yj.js +0 -402
- package/dist/index-zyt5byt6.js +0 -2649
- package/dist/login-x8tgckqm.js +0 -77
- package/dist/previews-q031mx34.js +0 -1168
- package/dist/src/cli/index.js +0 -12
- package/dist/src/index.js +0 -144
- package/dist/src/test/index.js +0 -77
|
@@ -1,220 +1,82 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getRemoteModeStatus,
|
|
3
3
|
isRemoteModeActive
|
|
4
|
-
} from "
|
|
4
|
+
} from "../index-d8bdkx2h.js";
|
|
5
5
|
import {
|
|
6
6
|
discoverEntrypointsSync
|
|
7
|
-
} from "
|
|
7
|
+
} from "../index-zt22fe2j.js";
|
|
8
|
+
import {
|
|
9
|
+
resolvePackageSpecifier
|
|
10
|
+
} from "../index-t4fhcx1n.js";
|
|
8
11
|
import {
|
|
9
12
|
canProceedWithTest
|
|
10
|
-
} from "
|
|
13
|
+
} from "../index-15fpa5tx.js";
|
|
11
14
|
import {
|
|
12
15
|
transformWorkerEntrypoint
|
|
13
|
-
} from "
|
|
14
|
-
import {
|
|
15
|
-
resolvePackageSpecifier
|
|
16
|
-
} from "./index-82f1z98k.js";
|
|
17
|
-
import {
|
|
18
|
-
__clearTestContext,
|
|
19
|
-
__setTestContext
|
|
20
|
-
} from "./index-m3fmw6mx.js";
|
|
16
|
+
} from "../index-7k278fgz.js";
|
|
21
17
|
import {
|
|
22
18
|
createRouteResolve,
|
|
23
19
|
invokeFetchModule,
|
|
24
20
|
matchFetchRoute,
|
|
25
21
|
resolveFetchHandler
|
|
26
|
-
} from "
|
|
22
|
+
} from "../index-tt4fsv91.js";
|
|
27
23
|
import {
|
|
24
|
+
__clearTestContext,
|
|
25
|
+
__setTestContext,
|
|
28
26
|
createEmailEvent,
|
|
29
27
|
createFetchEvent,
|
|
30
28
|
createQueueEvent,
|
|
31
29
|
createScheduledEvent,
|
|
32
30
|
createTailEvent,
|
|
31
|
+
env,
|
|
33
32
|
runWithContext,
|
|
34
33
|
runWithEventContext
|
|
35
|
-
} from "
|
|
34
|
+
} from "../index-esjrgt3y.js";
|
|
35
|
+
import"../index-a855bdsx.js";
|
|
36
36
|
import {
|
|
37
37
|
discoverRoutes
|
|
38
|
-
} from "
|
|
38
|
+
} from "../index-3e7by9sy.js";
|
|
39
39
|
import {
|
|
40
40
|
DEFAULT_DO_PATTERN,
|
|
41
41
|
findFiles,
|
|
42
42
|
findFilesSync
|
|
43
|
-
} from "
|
|
43
|
+
} from "../index-rbht7m9r.js";
|
|
44
|
+
import"../index-65e7xx1a.js";
|
|
44
45
|
import {
|
|
45
46
|
findDurableObjectClasses
|
|
46
|
-
} from "
|
|
47
|
+
} from "../index-vhqww6tt.js";
|
|
47
48
|
import {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
} from "./index-ry131z23.js";
|
|
49
|
+
extractBindingHints
|
|
50
|
+
} from "../index-xskax7r3.js";
|
|
51
51
|
import {
|
|
52
52
|
BridgeClient,
|
|
53
53
|
createEnvProxy,
|
|
54
54
|
setBindingHints
|
|
55
|
-
} from "
|
|
55
|
+
} from "../index-a75ejnvt.js";
|
|
56
56
|
import {
|
|
57
57
|
createLocalSendEmailBinding,
|
|
58
58
|
wrapEnvSendEmailBindings
|
|
59
|
-
} from "
|
|
59
|
+
} from "../index-124e9t4t.js";
|
|
60
|
+
import"../index-kawa49m8.js";
|
|
60
61
|
import {
|
|
61
62
|
getLocalD1DatabaseIdentifier,
|
|
62
63
|
loadConfig,
|
|
63
64
|
normalizeDOBinding,
|
|
64
65
|
resolveConfigPath
|
|
65
|
-
} from "
|
|
66
|
+
} from "../index-5vzcszr2.js";
|
|
66
67
|
import {
|
|
67
68
|
getEffectiveAccountId,
|
|
68
69
|
getPrimaryAccount
|
|
69
|
-
} from "
|
|
70
|
+
} from "../index-1d4jg11n.js";
|
|
70
71
|
import {
|
|
71
72
|
getApiToken,
|
|
72
73
|
isAuthenticated
|
|
73
|
-
} from "
|
|
74
|
+
} from "../index-mg8vwqxf.js";
|
|
75
|
+
import"../index-c0whkev9.js";
|
|
76
|
+
import"../index-q8f4kawk.js";
|
|
74
77
|
import {
|
|
75
78
|
__require
|
|
76
|
-
} from "
|
|
77
|
-
|
|
78
|
-
// src/test/simple-context.ts
|
|
79
|
-
import { dirname as dirname4, join as join9, resolve as resolve2 } from "path";
|
|
80
|
-
|
|
81
|
-
// src/test/remote-cloudflare.ts
|
|
82
|
-
function createRemoteCloudflareClient(accountId) {
|
|
83
|
-
let resolvedAccountId = null;
|
|
84
|
-
async function getAccountId() {
|
|
85
|
-
if (accountId) {
|
|
86
|
-
return accountId;
|
|
87
|
-
}
|
|
88
|
-
if (resolvedAccountId) {
|
|
89
|
-
return resolvedAccountId;
|
|
90
|
-
}
|
|
91
|
-
const primary = await getPrimaryAccount();
|
|
92
|
-
if (!primary) {
|
|
93
|
-
throw new Error("No Cloudflare account found. Run: bunx wrangler login");
|
|
94
|
-
}
|
|
95
|
-
const { accountId: effectiveId } = await getEffectiveAccountId(primary.id);
|
|
96
|
-
resolvedAccountId = effectiveId;
|
|
97
|
-
return effectiveId;
|
|
98
|
-
}
|
|
99
|
-
async function getToken() {
|
|
100
|
-
const token = await getApiToken();
|
|
101
|
-
if (!token) {
|
|
102
|
-
throw new Error("Not authenticated. Run: bunx wrangler login");
|
|
103
|
-
}
|
|
104
|
-
return token;
|
|
105
|
-
}
|
|
106
|
-
async function jsonRequest(options) {
|
|
107
|
-
const [acctId, token] = await Promise.all([getAccountId(), getToken()]);
|
|
108
|
-
const response = await fetch(`https://api.cloudflare.com/client/v4/accounts/${acctId}${options.path}`, {
|
|
109
|
-
method: options.method,
|
|
110
|
-
headers: {
|
|
111
|
-
Authorization: `Bearer ${token}`,
|
|
112
|
-
"Content-Type": options.contentType ?? "application/json"
|
|
113
|
-
},
|
|
114
|
-
body: options.body
|
|
115
|
-
});
|
|
116
|
-
if (!response.ok) {
|
|
117
|
-
const errorText = await response.text();
|
|
118
|
-
throw new Error(`${options.serviceLabel} API error (${response.status}): ${errorText}`);
|
|
119
|
-
}
|
|
120
|
-
const result = await response.json();
|
|
121
|
-
if (!result.success) {
|
|
122
|
-
const message = result.errors?.[0]?.message || `Unknown ${options.serviceLabel} error`;
|
|
123
|
-
throw new Error(`${options.serviceLabel} API error: ${message}`);
|
|
124
|
-
}
|
|
125
|
-
return result.result;
|
|
126
|
-
}
|
|
127
|
-
return {
|
|
128
|
-
getAccountId,
|
|
129
|
-
getToken,
|
|
130
|
-
jsonRequest
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
// src/test/remote-ai.ts
|
|
135
|
-
function createRemoteAI(accountId) {
|
|
136
|
-
const cloudflare = createRemoteCloudflareClient(accountId);
|
|
137
|
-
const ai = {
|
|
138
|
-
async run(model, inputs) {
|
|
139
|
-
return cloudflare.jsonRequest({
|
|
140
|
-
method: "POST",
|
|
141
|
-
path: `/ai/run/${model}`,
|
|
142
|
-
serviceLabel: "AI",
|
|
143
|
-
body: JSON.stringify(inputs)
|
|
144
|
-
});
|
|
145
|
-
},
|
|
146
|
-
gateway(_gatewayId) {
|
|
147
|
-
console.warn("AI Gateway is not supported in remote test mode");
|
|
148
|
-
return ai;
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
return ai;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// src/test/remote-vectorize.ts
|
|
155
|
-
function createRemoteVectorize(indexName, accountId) {
|
|
156
|
-
const cloudflare = createRemoteCloudflareClient(accountId);
|
|
157
|
-
async function apiRequest(method, endpoint, body) {
|
|
158
|
-
return cloudflare.jsonRequest({
|
|
159
|
-
method,
|
|
160
|
-
path: `/vectorize/v2/indexes/${indexName}${endpoint}`,
|
|
161
|
-
serviceLabel: "Vectorize",
|
|
162
|
-
body: body ? JSON.stringify(body) : undefined
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
async function ndjsonRequest(endpoint, vectors) {
|
|
166
|
-
const ndjson = vectors.map((v) => JSON.stringify(v)).join(`
|
|
167
|
-
`);
|
|
168
|
-
return cloudflare.jsonRequest({
|
|
169
|
-
method: "POST",
|
|
170
|
-
path: `/vectorize/v2/indexes/${indexName}${endpoint}`,
|
|
171
|
-
serviceLabel: "Vectorize",
|
|
172
|
-
contentType: "application/x-ndjson",
|
|
173
|
-
body: ndjson
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
const vectorize = {
|
|
177
|
-
async describe() {
|
|
178
|
-
return apiRequest("GET", "");
|
|
179
|
-
},
|
|
180
|
-
async query(vector, options) {
|
|
181
|
-
const vectorArray = Array.isArray(vector) ? vector : Array.from(vector);
|
|
182
|
-
return apiRequest("POST", "/query", {
|
|
183
|
-
vector: vectorArray,
|
|
184
|
-
topK: options?.topK ?? 10,
|
|
185
|
-
returnValues: options?.returnValues ?? false,
|
|
186
|
-
returnMetadata: options?.returnMetadata ?? "none",
|
|
187
|
-
namespace: options?.namespace,
|
|
188
|
-
filter: options?.filter
|
|
189
|
-
});
|
|
190
|
-
},
|
|
191
|
-
async insert(vectors) {
|
|
192
|
-
const result = await ndjsonRequest("/insert", vectors);
|
|
193
|
-
return {
|
|
194
|
-
count: result.count,
|
|
195
|
-
ids: result.ids || vectors.map((v) => v.id)
|
|
196
|
-
};
|
|
197
|
-
},
|
|
198
|
-
async upsert(vectors) {
|
|
199
|
-
const result = await ndjsonRequest("/upsert", vectors);
|
|
200
|
-
return {
|
|
201
|
-
count: result.count,
|
|
202
|
-
ids: result.ids || vectors.map((v) => v.id)
|
|
203
|
-
};
|
|
204
|
-
},
|
|
205
|
-
async deleteByIds(ids) {
|
|
206
|
-
const result = await apiRequest("POST", "/delete-by-ids", { ids });
|
|
207
|
-
return {
|
|
208
|
-
count: result.count,
|
|
209
|
-
ids
|
|
210
|
-
};
|
|
211
|
-
},
|
|
212
|
-
async getByIds(ids) {
|
|
213
|
-
return apiRequest("POST", "/get-by-ids", { ids });
|
|
214
|
-
}
|
|
215
|
-
};
|
|
216
|
-
return vectorize;
|
|
217
|
-
}
|
|
79
|
+
} from "../index-37x76zdn.js";
|
|
218
80
|
|
|
219
81
|
// src/test/resolve-service-bindings.ts
|
|
220
82
|
import { dirname, join, resolve } from "path";
|
|
@@ -656,11 +518,30 @@ export default {
|
|
|
656
518
|
|
|
657
519
|
async function executeRpc(env, method, params) {
|
|
658
520
|
const [bindingName, ...rest] = method.split('.')
|
|
659
|
-
|
|
521
|
+
let op = rest.join('.')
|
|
660
522
|
const binding = env[bindingName]
|
|
661
523
|
const RAW_EMAIL = 'EmailMessage::raw'
|
|
662
524
|
if (!binding) throw new Error('Binding not found: ' + bindingName)
|
|
663
525
|
|
|
526
|
+
// Normalize namespaced op names (kv.*, r2.*, d1.*, do.*, queue.*, ai.*, var.*)
|
|
527
|
+
// down to the legacy verbs this dispatcher historically used. The bridge
|
|
528
|
+
// proxy always emits namespaced forms (see src/bridge/proxy.ts and B3 in
|
|
529
|
+
// REMAINING.md); this keeps the dispatcher backwards-compatible while the
|
|
530
|
+
// rest of the codebase converges on the namespaced convention.
|
|
531
|
+
if (op.indexOf('kv.') === 0) op = op.slice(3)
|
|
532
|
+
else if (op.indexOf('do.') === 0) {
|
|
533
|
+
const tail = op.slice(3)
|
|
534
|
+
if (tail === 'fetch') op = 'stub.fetch'
|
|
535
|
+
else if (tail === 'rpc') op = 'stub.rpc'
|
|
536
|
+
else op = tail
|
|
537
|
+
}
|
|
538
|
+
else if (op.indexOf('queue.') === 0) op = op.slice(6)
|
|
539
|
+
else if (op.indexOf('ai.') === 0) op = op.slice(3)
|
|
540
|
+
else if (op.indexOf('var.') === 0) op = op.slice(4)
|
|
541
|
+
else if (op.indexOf('d1.stmt.') === 0) op = 'prepare.' + op.slice('d1.stmt.'.length)
|
|
542
|
+
else if (op.indexOf('d1.') === 0) op = op.slice(3)
|
|
543
|
+
// r2.* and email.* keep their existing prefixes
|
|
544
|
+
|
|
664
545
|
// KV operations
|
|
665
546
|
if (op === 'get') return binding.get(params[0], params[1])
|
|
666
547
|
if (op === 'put') return binding.put(params[0], params[1], params[2])
|
|
@@ -673,7 +554,7 @@ async function executeRpc(env, method, params) {
|
|
|
673
554
|
if (op === 'r2.put') return binding.put(params[0], params[1], params[2])
|
|
674
555
|
if (op === 'r2.delete') return binding.delete(params[0])
|
|
675
556
|
if (op === 'r2.list') return binding.list(params[0])
|
|
676
|
-
if (op === 'head') return binding.head(params[0])
|
|
557
|
+
if (op === 'r2.head' || op === 'head') return binding.head(params[0])
|
|
677
558
|
|
|
678
559
|
// D1 operations
|
|
679
560
|
if (op === 'exec') return binding.exec(params[0])
|
|
@@ -947,7 +828,7 @@ async function resolveLocalDurableObjects(config, configDir) {
|
|
|
947
828
|
}
|
|
948
829
|
let scriptPath;
|
|
949
830
|
let nativeRpc = false;
|
|
950
|
-
if (doInfo.scriptName) {
|
|
831
|
+
if (doInfo.kind === "cross-worker" && doInfo.scriptName) {
|
|
951
832
|
scriptPath = join3(configDir, "src", doInfo.scriptName);
|
|
952
833
|
try {
|
|
953
834
|
const code = await readFile(scriptPath, "utf-8");
|
|
@@ -1082,80 +963,245 @@ async function buildDurableObjectGateway(config, configDir, transportFile) {
|
|
|
1082
963
|
};
|
|
1083
964
|
}
|
|
1084
965
|
|
|
1085
|
-
// src/test/
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
var configDir = null;
|
|
1092
|
-
var testEnvGetter = null;
|
|
1093
|
-
function configureEmail(options = {}) {
|
|
1094
|
-
if (options.port) {
|
|
1095
|
-
miniflarePort = options.port;
|
|
1096
|
-
}
|
|
1097
|
-
emailHandlerPath = options.handlerPath ?? emailHandlerPath;
|
|
1098
|
-
configDir = options.configDir ?? configDir;
|
|
1099
|
-
testEnvGetter = options.getEnv ?? testEnvGetter;
|
|
1100
|
-
}
|
|
1101
|
-
function buildRawEmail(options) {
|
|
1102
|
-
if (options.raw) {
|
|
1103
|
-
return options.raw;
|
|
1104
|
-
}
|
|
1105
|
-
const lines = [];
|
|
1106
|
-
const messageId = `<${Date.now()}-${Math.random().toString(36).slice(2)}@devflare.dev>`;
|
|
1107
|
-
const date = new Date().toUTCString();
|
|
1108
|
-
lines.push(`From: ${options.from}`);
|
|
1109
|
-
lines.push(`To: ${options.to}`);
|
|
1110
|
-
lines.push(`Date: ${date}`);
|
|
1111
|
-
lines.push(`Message-ID: ${messageId}`);
|
|
1112
|
-
if (options.subject) {
|
|
1113
|
-
lines.push(`Subject: ${options.subject}`);
|
|
1114
|
-
}
|
|
1115
|
-
if (options.headers) {
|
|
1116
|
-
for (const [key, value] of Object.entries(options.headers)) {
|
|
1117
|
-
lines.push(`${key}: ${value}`);
|
|
966
|
+
// src/test/remote-cloudflare.ts
|
|
967
|
+
function createRemoteCloudflareClient(accountId) {
|
|
968
|
+
let resolvedAccountId = null;
|
|
969
|
+
async function getAccountId() {
|
|
970
|
+
if (accountId) {
|
|
971
|
+
return accountId;
|
|
1118
972
|
}
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
lines.push("Content-Type: text/plain; charset=UTF-8");
|
|
1122
|
-
lines.push("");
|
|
1123
|
-
lines.push(options.body ?? "");
|
|
1124
|
-
return lines.join(`\r
|
|
1125
|
-
`);
|
|
1126
|
-
}
|
|
1127
|
-
function createEmailHeaders(rawEmail) {
|
|
1128
|
-
const headers = new Headers;
|
|
1129
|
-
const lines = rawEmail.split(/\r?\n/);
|
|
1130
|
-
for (const line of lines) {
|
|
1131
|
-
if (!line.trim()) {
|
|
1132
|
-
break;
|
|
973
|
+
if (resolvedAccountId) {
|
|
974
|
+
return resolvedAccountId;
|
|
1133
975
|
}
|
|
1134
|
-
const
|
|
1135
|
-
if (
|
|
1136
|
-
|
|
976
|
+
const primary = await getPrimaryAccount();
|
|
977
|
+
if (!primary) {
|
|
978
|
+
throw new Error("No Cloudflare account found. Run: bunx wrangler login");
|
|
1137
979
|
}
|
|
1138
|
-
|
|
980
|
+
const { accountId: effectiveId } = await getEffectiveAccountId(primary.id);
|
|
981
|
+
resolvedAccountId = effectiveId;
|
|
982
|
+
return effectiveId;
|
|
1139
983
|
}
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
start(controller) {
|
|
1145
|
-
controller.enqueue(new TextEncoder().encode(rawEmail));
|
|
1146
|
-
controller.close();
|
|
984
|
+
async function getToken() {
|
|
985
|
+
const token = await getApiToken();
|
|
986
|
+
if (!token) {
|
|
987
|
+
throw new Error("Not authenticated. Run: bunx wrangler login");
|
|
1147
988
|
}
|
|
1148
|
-
|
|
1149
|
-
}
|
|
1150
|
-
function resolveEmailHandler(module) {
|
|
1151
|
-
if (typeof module.default === "function") {
|
|
1152
|
-
return module.default;
|
|
1153
|
-
}
|
|
1154
|
-
if (module.default && typeof module.default.email === "function") {
|
|
1155
|
-
return module.default.email.bind(module.default);
|
|
989
|
+
return token;
|
|
1156
990
|
}
|
|
1157
|
-
|
|
1158
|
-
|
|
991
|
+
async function jsonRequest(options) {
|
|
992
|
+
const [acctId, token] = await Promise.all([getAccountId(), getToken()]);
|
|
993
|
+
const response = await fetch(`https://api.cloudflare.com/client/v4/accounts/${acctId}${options.path}`, {
|
|
994
|
+
method: options.method,
|
|
995
|
+
headers: {
|
|
996
|
+
Authorization: `Bearer ${token}`,
|
|
997
|
+
"Content-Type": options.contentType ?? "application/json"
|
|
998
|
+
},
|
|
999
|
+
body: options.body
|
|
1000
|
+
});
|
|
1001
|
+
if (!response.ok) {
|
|
1002
|
+
const errorText = await response.text();
|
|
1003
|
+
throw new Error(`${options.serviceLabel} API error (${response.status}): ${errorText}`);
|
|
1004
|
+
}
|
|
1005
|
+
const result = await response.json();
|
|
1006
|
+
if (!result.success) {
|
|
1007
|
+
const message = result.errors?.[0]?.message || `Unknown ${options.serviceLabel} error`;
|
|
1008
|
+
throw new Error(`${options.serviceLabel} API error: ${message}`);
|
|
1009
|
+
}
|
|
1010
|
+
return result.result;
|
|
1011
|
+
}
|
|
1012
|
+
return {
|
|
1013
|
+
getAccountId,
|
|
1014
|
+
getToken,
|
|
1015
|
+
jsonRequest
|
|
1016
|
+
};
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
// src/test/remote-ai.ts
|
|
1020
|
+
function createRemoteAI(accountId) {
|
|
1021
|
+
const cloudflare = createRemoteCloudflareClient(accountId);
|
|
1022
|
+
const ai = {
|
|
1023
|
+
async run(model, inputs) {
|
|
1024
|
+
return cloudflare.jsonRequest({
|
|
1025
|
+
method: "POST",
|
|
1026
|
+
path: `/ai/run/${model}`,
|
|
1027
|
+
serviceLabel: "AI",
|
|
1028
|
+
body: JSON.stringify(inputs)
|
|
1029
|
+
});
|
|
1030
|
+
},
|
|
1031
|
+
gateway(_gatewayId) {
|
|
1032
|
+
console.warn("AI Gateway is not supported in remote test mode");
|
|
1033
|
+
return ai;
|
|
1034
|
+
}
|
|
1035
|
+
};
|
|
1036
|
+
return ai;
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
// src/test/remote-vectorize.ts
|
|
1040
|
+
function createRemoteVectorize(indexName, accountId) {
|
|
1041
|
+
const cloudflare = createRemoteCloudflareClient(accountId);
|
|
1042
|
+
async function apiRequest(method, endpoint, body) {
|
|
1043
|
+
return cloudflare.jsonRequest({
|
|
1044
|
+
method,
|
|
1045
|
+
path: `/vectorize/v2/indexes/${indexName}${endpoint}`,
|
|
1046
|
+
serviceLabel: "Vectorize",
|
|
1047
|
+
body: body ? JSON.stringify(body) : undefined
|
|
1048
|
+
});
|
|
1049
|
+
}
|
|
1050
|
+
async function ndjsonRequest(endpoint, vectors) {
|
|
1051
|
+
const ndjson = vectors.map((v) => JSON.stringify(v)).join(`
|
|
1052
|
+
`);
|
|
1053
|
+
return cloudflare.jsonRequest({
|
|
1054
|
+
method: "POST",
|
|
1055
|
+
path: `/vectorize/v2/indexes/${indexName}${endpoint}`,
|
|
1056
|
+
serviceLabel: "Vectorize",
|
|
1057
|
+
contentType: "application/x-ndjson",
|
|
1058
|
+
body: ndjson
|
|
1059
|
+
});
|
|
1060
|
+
}
|
|
1061
|
+
const vectorize = {
|
|
1062
|
+
async describe() {
|
|
1063
|
+
return apiRequest("GET", "");
|
|
1064
|
+
},
|
|
1065
|
+
async query(vector, options) {
|
|
1066
|
+
const vectorArray = Array.isArray(vector) ? vector : Array.from(vector);
|
|
1067
|
+
return apiRequest("POST", "/query", {
|
|
1068
|
+
vector: vectorArray,
|
|
1069
|
+
topK: options?.topK ?? 10,
|
|
1070
|
+
returnValues: options?.returnValues ?? false,
|
|
1071
|
+
returnMetadata: options?.returnMetadata ?? "none",
|
|
1072
|
+
namespace: options?.namespace,
|
|
1073
|
+
filter: options?.filter
|
|
1074
|
+
});
|
|
1075
|
+
},
|
|
1076
|
+
async insert(vectors) {
|
|
1077
|
+
const result = await ndjsonRequest("/insert", vectors);
|
|
1078
|
+
return {
|
|
1079
|
+
count: result.count,
|
|
1080
|
+
ids: result.ids || vectors.map((v) => v.id)
|
|
1081
|
+
};
|
|
1082
|
+
},
|
|
1083
|
+
async upsert(vectors) {
|
|
1084
|
+
const result = await ndjsonRequest("/upsert", vectors);
|
|
1085
|
+
return {
|
|
1086
|
+
count: result.count,
|
|
1087
|
+
ids: result.ids || vectors.map((v) => v.id)
|
|
1088
|
+
};
|
|
1089
|
+
},
|
|
1090
|
+
async deleteByIds(ids) {
|
|
1091
|
+
const result = await apiRequest("POST", "/delete-by-ids", { ids });
|
|
1092
|
+
return {
|
|
1093
|
+
count: result.count,
|
|
1094
|
+
ids
|
|
1095
|
+
};
|
|
1096
|
+
},
|
|
1097
|
+
async getByIds(ids) {
|
|
1098
|
+
return apiRequest("POST", "/get-by-ids", { ids });
|
|
1099
|
+
}
|
|
1100
|
+
};
|
|
1101
|
+
return vectorize;
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
// src/test/simple-context-bindings.ts
|
|
1105
|
+
function buildRemoteAndStaticBindings(config) {
|
|
1106
|
+
const remoteBindings = {};
|
|
1107
|
+
if (isRemoteModeActive()) {
|
|
1108
|
+
if (config.bindings?.ai) {
|
|
1109
|
+
const aiBindingName = config.bindings.ai.binding || "AI";
|
|
1110
|
+
remoteBindings[aiBindingName] = createRemoteAI(config.accountId);
|
|
1111
|
+
}
|
|
1112
|
+
if (config.bindings?.vectorize) {
|
|
1113
|
+
for (const [name, vectorConfig] of Object.entries(config.bindings.vectorize)) {
|
|
1114
|
+
remoteBindings[name] = createRemoteVectorize(vectorConfig.indexName, config.accountId);
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
if (config.vars) {
|
|
1119
|
+
for (const [key, value] of Object.entries(config.vars)) {
|
|
1120
|
+
remoteBindings[key] = value;
|
|
1121
|
+
}
|
|
1122
|
+
}
|
|
1123
|
+
if (config.bindings?.sendEmail) {
|
|
1124
|
+
for (const [name, binding] of Object.entries(config.bindings.sendEmail)) {
|
|
1125
|
+
remoteBindings[name] = createLocalSendEmailBinding(binding);
|
|
1126
|
+
}
|
|
1127
|
+
}
|
|
1128
|
+
return remoteBindings;
|
|
1129
|
+
}
|
|
1130
|
+
|
|
1131
|
+
// src/test/email.ts
|
|
1132
|
+
import { join as join4 } from "path";
|
|
1133
|
+
var miniflarePort = 8787;
|
|
1134
|
+
var emailListeners = [];
|
|
1135
|
+
var sentEmails = [];
|
|
1136
|
+
var emailHandlerPath = null;
|
|
1137
|
+
var configDir = null;
|
|
1138
|
+
var testEnvGetter = null;
|
|
1139
|
+
function configureEmail(options = {}) {
|
|
1140
|
+
if (options.port) {
|
|
1141
|
+
miniflarePort = options.port;
|
|
1142
|
+
}
|
|
1143
|
+
emailHandlerPath = options.handlerPath ?? emailHandlerPath;
|
|
1144
|
+
configDir = options.configDir ?? configDir;
|
|
1145
|
+
testEnvGetter = options.getEnv ?? testEnvGetter;
|
|
1146
|
+
}
|
|
1147
|
+
function buildRawEmail(options) {
|
|
1148
|
+
if (options.raw) {
|
|
1149
|
+
return options.raw;
|
|
1150
|
+
}
|
|
1151
|
+
const lines = [];
|
|
1152
|
+
const messageId = `<${Date.now()}-${Math.random().toString(36).slice(2)}@devflare.dev>`;
|
|
1153
|
+
const date = new Date().toUTCString();
|
|
1154
|
+
lines.push(`From: ${options.from}`);
|
|
1155
|
+
lines.push(`To: ${options.to}`);
|
|
1156
|
+
lines.push(`Date: ${date}`);
|
|
1157
|
+
lines.push(`Message-ID: ${messageId}`);
|
|
1158
|
+
if (options.subject) {
|
|
1159
|
+
lines.push(`Subject: ${options.subject}`);
|
|
1160
|
+
}
|
|
1161
|
+
if (options.headers) {
|
|
1162
|
+
for (const [key, value] of Object.entries(options.headers)) {
|
|
1163
|
+
lines.push(`${key}: ${value}`);
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
1166
|
+
lines.push("MIME-Version: 1.0");
|
|
1167
|
+
lines.push("Content-Type: text/plain; charset=UTF-8");
|
|
1168
|
+
lines.push("");
|
|
1169
|
+
lines.push(options.body ?? "");
|
|
1170
|
+
return lines.join(`\r
|
|
1171
|
+
`);
|
|
1172
|
+
}
|
|
1173
|
+
function createEmailHeaders(rawEmail) {
|
|
1174
|
+
const headers = new Headers;
|
|
1175
|
+
const lines = rawEmail.split(/\r?\n/);
|
|
1176
|
+
for (const line of lines) {
|
|
1177
|
+
if (!line.trim()) {
|
|
1178
|
+
break;
|
|
1179
|
+
}
|
|
1180
|
+
const colonIndex = line.indexOf(":");
|
|
1181
|
+
if (colonIndex <= 0) {
|
|
1182
|
+
continue;
|
|
1183
|
+
}
|
|
1184
|
+
headers.append(line.slice(0, colonIndex).trim(), line.slice(colonIndex + 1).trim());
|
|
1185
|
+
}
|
|
1186
|
+
return headers;
|
|
1187
|
+
}
|
|
1188
|
+
function createRawEmailStream(rawEmail) {
|
|
1189
|
+
return new ReadableStream({
|
|
1190
|
+
start(controller) {
|
|
1191
|
+
controller.enqueue(new TextEncoder().encode(rawEmail));
|
|
1192
|
+
controller.close();
|
|
1193
|
+
}
|
|
1194
|
+
});
|
|
1195
|
+
}
|
|
1196
|
+
function resolveEmailHandler(module) {
|
|
1197
|
+
if (typeof module.default === "function") {
|
|
1198
|
+
return module.default;
|
|
1199
|
+
}
|
|
1200
|
+
if (module.default && typeof module.default.email === "function") {
|
|
1201
|
+
return module.default.email.bind(module.default);
|
|
1202
|
+
}
|
|
1203
|
+
if (typeof module.email === "function") {
|
|
1204
|
+
return module.email;
|
|
1159
1205
|
}
|
|
1160
1206
|
return null;
|
|
1161
1207
|
}
|
|
@@ -1354,8 +1400,8 @@ NaN`);
|
|
|
1354
1400
|
passThroughOnException() {},
|
|
1355
1401
|
props: {}
|
|
1356
1402
|
};
|
|
1357
|
-
const
|
|
1358
|
-
const queueEvent = createQueueEvent(batch,
|
|
1403
|
+
const env2 = testEnvGetter2();
|
|
1404
|
+
const queueEvent = createQueueEvent(batch, env2, ctx);
|
|
1359
1405
|
await runWithEventContext(queueEvent, () => queueHandler(queueEvent));
|
|
1360
1406
|
await Promise.all(waitUntilPromises);
|
|
1361
1407
|
const acked = [];
|
|
@@ -1434,8 +1480,8 @@ NaN`);
|
|
|
1434
1480
|
passThroughOnException() {},
|
|
1435
1481
|
props: {}
|
|
1436
1482
|
};
|
|
1437
|
-
const
|
|
1438
|
-
const scheduledEvent = createScheduledEvent(controller,
|
|
1483
|
+
const env2 = testEnvGetter3();
|
|
1484
|
+
const scheduledEvent = createScheduledEvent(controller, env2, ctx);
|
|
1439
1485
|
try {
|
|
1440
1486
|
await runWithEventContext(scheduledEvent, () => scheduledHandler(scheduledEvent));
|
|
1441
1487
|
await Promise.all(waitUntilPromises);
|
|
@@ -1519,8 +1565,8 @@ NaN`);
|
|
|
1519
1565
|
passThroughOnException() {},
|
|
1520
1566
|
props: {}
|
|
1521
1567
|
};
|
|
1522
|
-
const
|
|
1523
|
-
const tailEvent = createTailEvent(traceItems,
|
|
1568
|
+
const env2 = testEnvGetter4();
|
|
1569
|
+
const tailEvent = createTailEvent(traceItems, env2, ctx);
|
|
1524
1570
|
try {
|
|
1525
1571
|
await runWithEventContext(tailEvent, () => tailHandler(tailEvent));
|
|
1526
1572
|
await Promise.all(waitUntilPromises);
|
|
@@ -1620,9 +1666,9 @@ async function fetch2(request, options) {
|
|
|
1620
1666
|
passThroughOnException() {},
|
|
1621
1667
|
props: {}
|
|
1622
1668
|
};
|
|
1623
|
-
const
|
|
1669
|
+
const env2 = getEnv();
|
|
1624
1670
|
const initialRouteMatch = routeModules.length > 0 ? matchFetchRoute(routeModules, req) : null;
|
|
1625
|
-
const fetchEvent = createFetchEvent(req,
|
|
1671
|
+
const fetchEvent = createFetchEvent(req, env2, ctx, {
|
|
1626
1672
|
params: initialRouteMatch?.params ?? {}
|
|
1627
1673
|
});
|
|
1628
1674
|
const response = await runWithEventContext(fetchEvent, () => invokeFetchModule(handlerModule, fetchEvent, routeModules.length > 0 ? createRouteResolve(routeModules, fetchEvent) : undefined));
|
|
@@ -1652,56 +1698,203 @@ var worker = {
|
|
|
1652
1698
|
patch
|
|
1653
1699
|
};
|
|
1654
1700
|
|
|
1655
|
-
// src/test/simple-context.ts
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1701
|
+
// src/test/simple-context-env.ts
|
|
1702
|
+
function configureSurfaceHandlers(input) {
|
|
1703
|
+
const { handlerPaths, configDir: configDir6, activePort, getEnv } = input;
|
|
1704
|
+
configureQueue({
|
|
1705
|
+
handlerPath: handlerPaths.queue,
|
|
1706
|
+
configDir: configDir6,
|
|
1707
|
+
getEnv
|
|
1708
|
+
});
|
|
1709
|
+
configureScheduled({
|
|
1710
|
+
handlerPath: handlerPaths.scheduled,
|
|
1711
|
+
configDir: configDir6,
|
|
1712
|
+
getEnv
|
|
1713
|
+
});
|
|
1714
|
+
configureWorker({
|
|
1715
|
+
handlerPath: handlerPaths.fetch,
|
|
1716
|
+
routes: handlerPaths.routes?.routes.map((route) => ({
|
|
1717
|
+
filePath: route.filePath,
|
|
1718
|
+
routePath: route.routePath,
|
|
1719
|
+
segments: route.segments
|
|
1720
|
+
})) ?? [],
|
|
1721
|
+
configDir: configDir6,
|
|
1722
|
+
getEnv
|
|
1723
|
+
});
|
|
1724
|
+
configureTail({
|
|
1725
|
+
handlerPath: handlerPaths.tail,
|
|
1726
|
+
configDir: configDir6,
|
|
1727
|
+
getEnv
|
|
1728
|
+
});
|
|
1729
|
+
configureEmail({
|
|
1730
|
+
port: activePort,
|
|
1731
|
+
handlerPath: handlerPaths.email,
|
|
1732
|
+
configDir: configDir6,
|
|
1733
|
+
getEnv
|
|
1734
|
+
});
|
|
1681
1735
|
}
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
} catch (error) {
|
|
1690
|
-
lastError = error;
|
|
1691
|
-
client.disconnect();
|
|
1692
|
-
if (attempt >= TEST_CONTEXT_BRIDGE_CONNECT_RETRY_ATTEMPTS || !isRetriableTestContextStartupError(error)) {
|
|
1693
|
-
throw error;
|
|
1736
|
+
function createBridgeEnvAccessor(state, hints, shouldPreferBridgeBinding) {
|
|
1737
|
+
return new Proxy({}, {
|
|
1738
|
+
get(_, prop) {
|
|
1739
|
+
const hint = hints[prop];
|
|
1740
|
+
const prefersBridgeBinding = shouldPreferBridgeBinding(hint);
|
|
1741
|
+
if (state.remoteBindings && prop in state.remoteBindings) {
|
|
1742
|
+
return state.remoteBindings[prop];
|
|
1694
1743
|
}
|
|
1695
|
-
|
|
1744
|
+
if (!prefersBridgeBinding && state.miniflareBindings && prop in state.miniflareBindings) {
|
|
1745
|
+
return state.miniflareBindings[prop];
|
|
1746
|
+
}
|
|
1747
|
+
if (state.envProxy) {
|
|
1748
|
+
return state.envProxy[prop];
|
|
1749
|
+
}
|
|
1750
|
+
if (prefersBridgeBinding && state.miniflareBindings && prop in state.miniflareBindings) {
|
|
1751
|
+
return state.miniflareBindings[prop];
|
|
1752
|
+
}
|
|
1753
|
+
return;
|
|
1754
|
+
},
|
|
1755
|
+
has(_, prop) {
|
|
1756
|
+
return Boolean(state.remoteBindings && prop in state.remoteBindings || state.miniflareBindings && prop in state.miniflareBindings || state.envProxy !== null);
|
|
1696
1757
|
}
|
|
1697
|
-
}
|
|
1698
|
-
throw lastError instanceof Error ? lastError : new Error("Bridge-backed test context could not connect to the WebSocket gateway.");
|
|
1758
|
+
});
|
|
1699
1759
|
}
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1760
|
+
function createMultiWorkerEnvAccessor(state) {
|
|
1761
|
+
return new Proxy({}, {
|
|
1762
|
+
get(_, prop) {
|
|
1763
|
+
if (state.remoteBindings && prop in state.remoteBindings) {
|
|
1764
|
+
return state.remoteBindings[prop];
|
|
1765
|
+
}
|
|
1766
|
+
if (state.miniflareBindings && prop in state.miniflareBindings) {
|
|
1767
|
+
return state.miniflareBindings[prop];
|
|
1768
|
+
}
|
|
1769
|
+
return;
|
|
1770
|
+
},
|
|
1771
|
+
has(_, prop) {
|
|
1772
|
+
return Boolean(state.remoteBindings && prop in state.remoteBindings || state.miniflareBindings && prop in state.miniflareBindings);
|
|
1773
|
+
}
|
|
1774
|
+
});
|
|
1775
|
+
}
|
|
1776
|
+
|
|
1777
|
+
// src/test/simple-context-handlers.ts
|
|
1778
|
+
import { join as join9 } from "path";
|
|
1779
|
+
var DEFAULT_FETCH_PATH = "src/fetch.ts";
|
|
1780
|
+
var DEFAULT_QUEUE_PATH = "src/queue.ts";
|
|
1781
|
+
var DEFAULT_SCHEDULED_PATH = "src/scheduled.ts";
|
|
1782
|
+
var DEFAULT_EMAIL_PATH = "src/email.ts";
|
|
1783
|
+
var DEFAULT_TAIL_PATH = "src/tail.ts";
|
|
1784
|
+
async function resolveHandlerPath(configDir6, configValue, defaultPath) {
|
|
1785
|
+
if (typeof configValue === "string") {
|
|
1786
|
+
return configValue;
|
|
1787
|
+
}
|
|
1788
|
+
if (configValue === false) {
|
|
1789
|
+
return null;
|
|
1790
|
+
}
|
|
1791
|
+
const defaultAbsolute = join9(configDir6, defaultPath);
|
|
1792
|
+
try {
|
|
1793
|
+
const fs = await import("fs/promises");
|
|
1794
|
+
await fs.access(defaultAbsolute);
|
|
1795
|
+
return defaultPath;
|
|
1796
|
+
} catch {
|
|
1797
|
+
return null;
|
|
1798
|
+
}
|
|
1799
|
+
}
|
|
1800
|
+
async function resolveHandlerPaths(configDir6, config) {
|
|
1801
|
+
const [fetch3, queue2, scheduled2, email2, tail2, routes] = await Promise.all([
|
|
1802
|
+
resolveHandlerPath(configDir6, config.files?.fetch, DEFAULT_FETCH_PATH),
|
|
1803
|
+
resolveHandlerPath(configDir6, config.files?.queue, DEFAULT_QUEUE_PATH),
|
|
1804
|
+
resolveHandlerPath(configDir6, config.files?.scheduled, DEFAULT_SCHEDULED_PATH),
|
|
1805
|
+
resolveHandlerPath(configDir6, config.files?.email, DEFAULT_EMAIL_PATH),
|
|
1806
|
+
resolveHandlerPath(configDir6, undefined, DEFAULT_TAIL_PATH),
|
|
1807
|
+
discoverRoutes(configDir6, config)
|
|
1808
|
+
]);
|
|
1809
|
+
return { fetch: fetch3, queue: queue2, scheduled: scheduled2, email: email2, tail: tail2, routes };
|
|
1810
|
+
}
|
|
1811
|
+
|
|
1812
|
+
// src/test/simple-context-lifecycle.ts
|
|
1813
|
+
import { dirname as dirname4, resolve as resolve2 } from "path";
|
|
1814
|
+
async function resolveTestContextConfig(configPath, callerDir = getCallerDirectory()) {
|
|
1815
|
+
let absolutePath;
|
|
1816
|
+
if (configPath) {
|
|
1817
|
+
absolutePath = resolve2(callerDir, configPath);
|
|
1818
|
+
} else {
|
|
1819
|
+
const found = await findNearestConfig(callerDir);
|
|
1820
|
+
if (!found) {
|
|
1821
|
+
throw new Error(`Could not find a devflare config file. Searched upward from: ${callerDir}
|
|
1822
|
+
` + `Expected one of: devflare.config.ts, devflare.config.mts, devflare.config.js, devflare.config.mjs
|
|
1823
|
+
` + `Either create a config file or provide an explicit path: createTestContext('./path/to/config.ts')`);
|
|
1824
|
+
}
|
|
1825
|
+
absolutePath = found;
|
|
1826
|
+
}
|
|
1827
|
+
const configDir6 = dirname4(absolutePath);
|
|
1828
|
+
const config = await loadConfig({
|
|
1829
|
+
cwd: configDir6,
|
|
1830
|
+
configFile: absolutePath.split(/[/\\]/).pop()
|
|
1831
|
+
});
|
|
1832
|
+
return { absolutePath, configDir: configDir6, config };
|
|
1833
|
+
}
|
|
1834
|
+
function createDisposeContext(state) {
|
|
1835
|
+
return async () => {
|
|
1836
|
+
if (state.client) {
|
|
1837
|
+
await state.client.disconnect();
|
|
1838
|
+
state.client = null;
|
|
1839
|
+
}
|
|
1840
|
+
if (state.miniflare) {
|
|
1841
|
+
await state.miniflare.dispose();
|
|
1842
|
+
state.miniflare = null;
|
|
1843
|
+
}
|
|
1844
|
+
state.envProxy = null;
|
|
1845
|
+
state.transportDecode = null;
|
|
1846
|
+
state.remoteBindings = null;
|
|
1847
|
+
state.miniflareBindings = null;
|
|
1848
|
+
resetQueueState();
|
|
1849
|
+
resetScheduledState();
|
|
1850
|
+
resetWorkerState();
|
|
1851
|
+
resetTailState();
|
|
1852
|
+
resetEmailState();
|
|
1853
|
+
__clearTestContext();
|
|
1854
|
+
};
|
|
1855
|
+
}
|
|
1856
|
+
|
|
1857
|
+
// src/test/simple-context-startup.ts
|
|
1858
|
+
var TEST_CONTEXT_STARTUP_RETRY_ATTEMPTS = 3;
|
|
1859
|
+
var TEST_CONTEXT_STARTUP_RETRY_DELAY_MS = 75;
|
|
1860
|
+
var TEST_CONTEXT_BRIDGE_CONNECT_RETRY_ATTEMPTS = 8;
|
|
1861
|
+
var TEST_CONTEXT_BRIDGE_CONNECT_RETRY_DELAY_MS = 150;
|
|
1862
|
+
function isRetriableTestContextStartupError(error) {
|
|
1863
|
+
if (!(error instanceof Error)) {
|
|
1864
|
+
return false;
|
|
1865
|
+
}
|
|
1866
|
+
const message = error.message.toLowerCase();
|
|
1867
|
+
return message.includes("websocket connection failed") || message.includes("connection timeout: ws://") || message.includes("econnrefused") || message.includes("eaddrinuse") || message.includes("address already in use");
|
|
1868
|
+
}
|
|
1869
|
+
async function waitForTestContextStartupRetry() {
|
|
1870
|
+
await new Promise((resolve3) => setTimeout(resolve3, TEST_CONTEXT_STARTUP_RETRY_DELAY_MS));
|
|
1871
|
+
}
|
|
1872
|
+
async function waitForBridgeClientRetry() {
|
|
1873
|
+
await new Promise((resolve3) => setTimeout(resolve3, TEST_CONTEXT_BRIDGE_CONNECT_RETRY_DELAY_MS));
|
|
1874
|
+
}
|
|
1875
|
+
async function connectBridgeClientWithRetry(url) {
|
|
1876
|
+
let lastError;
|
|
1877
|
+
for (let attempt = 1;attempt <= TEST_CONTEXT_BRIDGE_CONNECT_RETRY_ATTEMPTS; attempt++) {
|
|
1878
|
+
const client = new BridgeClient({ url });
|
|
1879
|
+
try {
|
|
1880
|
+
await client.connect();
|
|
1881
|
+
return client;
|
|
1882
|
+
} catch (error) {
|
|
1883
|
+
lastError = error;
|
|
1884
|
+
client.disconnect();
|
|
1885
|
+
if (attempt >= TEST_CONTEXT_BRIDGE_CONNECT_RETRY_ATTEMPTS || !isRetriableTestContextStartupError(error)) {
|
|
1886
|
+
throw error;
|
|
1887
|
+
}
|
|
1888
|
+
await waitForBridgeClientRetry();
|
|
1889
|
+
}
|
|
1890
|
+
}
|
|
1891
|
+
throw lastError instanceof Error ? lastError : new Error("Bridge-backed test context could not connect to the WebSocket gateway.");
|
|
1892
|
+
}
|
|
1893
|
+
async function startBridgeBackedTestContext(mfConfig) {
|
|
1894
|
+
const { Miniflare } = await import("miniflare");
|
|
1895
|
+
for (let attempt = 1;attempt <= TEST_CONTEXT_STARTUP_RETRY_ATTEMPTS; attempt++) {
|
|
1896
|
+
const port = await getAvailablePort();
|
|
1897
|
+
let miniflare = null;
|
|
1705
1898
|
let client = null;
|
|
1706
1899
|
try {
|
|
1707
1900
|
miniflare = new Miniflare({
|
|
@@ -1732,89 +1925,118 @@ async function startBridgeBackedTestContext(mfConfig) {
|
|
|
1732
1925
|
}
|
|
1733
1926
|
throw new Error("Bridge-backed test context startup exhausted all retry attempts.");
|
|
1734
1927
|
}
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
if (
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
const
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1928
|
+
|
|
1929
|
+
// src/test/simple-context-runtime.ts
|
|
1930
|
+
async function bootTestRuntime(mfConfig, usesMultiWorker) {
|
|
1931
|
+
if (usesMultiWorker) {
|
|
1932
|
+
const { Miniflare } = await import("miniflare");
|
|
1933
|
+
const activePort = await getAvailablePort();
|
|
1934
|
+
const miniflare = new Miniflare({
|
|
1935
|
+
...mfConfig,
|
|
1936
|
+
port: activePort
|
|
1937
|
+
});
|
|
1938
|
+
await miniflare.ready;
|
|
1939
|
+
const miniflareBindings = wrapEnvSendEmailBindings(await miniflare.getBindings());
|
|
1940
|
+
return { activePort, miniflare, miniflareBindings, client: null };
|
|
1748
1941
|
}
|
|
1749
|
-
const
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
}
|
|
1942
|
+
const started = await startBridgeBackedTestContext(mfConfig);
|
|
1943
|
+
return {
|
|
1944
|
+
activePort: started.port,
|
|
1945
|
+
miniflare: started.miniflare,
|
|
1946
|
+
miniflareBindings: started.miniflareBindings,
|
|
1947
|
+
client: started.client
|
|
1948
|
+
};
|
|
1949
|
+
}
|
|
1950
|
+
|
|
1951
|
+
// src/test/simple-context-transport.ts
|
|
1952
|
+
import { join as join10 } from "path";
|
|
1953
|
+
async function loadTransportDecoders(configDir6, transportFile) {
|
|
1954
|
+
const transportPath = join10(configDir6, transportFile);
|
|
1955
|
+
const transportModule = await import(transportPath);
|
|
1956
|
+
if (!transportModule.transport) {
|
|
1957
|
+
console.warn(`[devflare] Warning: Transport file "${transportFile}" does not export a named "transport" object.
|
|
1958
|
+
Expected: export const transport = { ... }
|
|
1959
|
+
Transport encoding/decoding will be disabled.`);
|
|
1960
|
+
return null;
|
|
1765
1961
|
}
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1962
|
+
const decoders = new Map;
|
|
1963
|
+
for (const [typeName, transporter] of Object.entries(transportModule.transport)) {
|
|
1964
|
+
const t = transporter;
|
|
1965
|
+
decoders.set(typeName, t.decode);
|
|
1770
1966
|
}
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1967
|
+
return decoders;
|
|
1968
|
+
}
|
|
1969
|
+
function decodeTransportValue(decoders, value) {
|
|
1970
|
+
if (!decoders || value === null || typeof value !== "object") {
|
|
1971
|
+
return value;
|
|
1775
1972
|
}
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1973
|
+
if ("__transport" in value) {
|
|
1974
|
+
const encoded = value;
|
|
1975
|
+
const decoder = decoders.get(encoded.__transport);
|
|
1976
|
+
if (decoder) {
|
|
1977
|
+
return decoder(encoded.value);
|
|
1780
1978
|
}
|
|
1781
1979
|
}
|
|
1782
|
-
if (
|
|
1783
|
-
|
|
1784
|
-
hints[name] = "r2";
|
|
1785
|
-
}
|
|
1980
|
+
if (Array.isArray(value)) {
|
|
1981
|
+
return value.map((item) => decodeTransportValue(decoders, item));
|
|
1786
1982
|
}
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
}
|
|
1983
|
+
const result = {};
|
|
1984
|
+
for (const [k, v] of Object.entries(value)) {
|
|
1985
|
+
result[k] = decodeTransportValue(decoders, v);
|
|
1791
1986
|
}
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1987
|
+
return result;
|
|
1988
|
+
}
|
|
1989
|
+
|
|
1990
|
+
// src/test/simple-context-multi-worker.ts
|
|
1991
|
+
function applyMultiWorkerConfig(mfConfig, config, serviceBindingResolution, doBindingResolution) {
|
|
1992
|
+
const primaryDurableObjects = {
|
|
1993
|
+
...mfConfig.durableObjects || {},
|
|
1994
|
+
...doBindingResolution?.crossWorkerDOBindings || {}
|
|
1995
|
+
};
|
|
1996
|
+
const primaryWorker = {
|
|
1997
|
+
name: config.name ?? "primary",
|
|
1998
|
+
modules: true,
|
|
1999
|
+
script: mfConfig.script,
|
|
2000
|
+
compatibilityDate: config.compatibilityDate ?? "2025-01-01",
|
|
2001
|
+
...mfConfig.kvNamespaces && { kvNamespaces: mfConfig.kvNamespaces },
|
|
2002
|
+
...mfConfig.r2Buckets && { r2Buckets: mfConfig.r2Buckets },
|
|
2003
|
+
...mfConfig.d1Databases && { d1Databases: mfConfig.d1Databases },
|
|
2004
|
+
...mfConfig.email && { email: mfConfig.email },
|
|
2005
|
+
...Object.keys(primaryDurableObjects).length > 0 && { durableObjects: primaryDurableObjects },
|
|
2006
|
+
...serviceBindingResolution?.primaryServiceBindings && {
|
|
2007
|
+
serviceBindings: serviceBindingResolution.primaryServiceBindings
|
|
1795
2008
|
}
|
|
1796
|
-
}
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
2009
|
+
};
|
|
2010
|
+
const additionalWorkers = [
|
|
2011
|
+
...serviceBindingResolution?.workers || [],
|
|
2012
|
+
...doBindingResolution?.workers || []
|
|
2013
|
+
];
|
|
2014
|
+
const workersByName = new Map;
|
|
2015
|
+
for (const worker2 of additionalWorkers) {
|
|
2016
|
+
if (!workersByName.has(worker2.name)) {
|
|
2017
|
+
workersByName.set(worker2.name, worker2);
|
|
2018
|
+
continue;
|
|
1800
2019
|
}
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
2020
|
+
const existing = workersByName.get(worker2.name);
|
|
2021
|
+
if (worker2.durableObjects) {
|
|
2022
|
+
existing.durableObjects = {
|
|
2023
|
+
...existing.durableObjects || {},
|
|
2024
|
+
...worker2.durableObjects
|
|
2025
|
+
};
|
|
1805
2026
|
}
|
|
1806
2027
|
}
|
|
1807
|
-
const
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
2028
|
+
const workers = [primaryWorker, ...workersByName.values()];
|
|
2029
|
+
delete mfConfig.script;
|
|
2030
|
+
delete mfConfig.modules;
|
|
2031
|
+
delete mfConfig.kvNamespaces;
|
|
2032
|
+
delete mfConfig.r2Buckets;
|
|
2033
|
+
delete mfConfig.d1Databases;
|
|
2034
|
+
delete mfConfig.durableObjects;
|
|
2035
|
+
mfConfig.workers = workers;
|
|
2036
|
+
}
|
|
2037
|
+
|
|
2038
|
+
// src/test/simple-context-mfconfig.ts
|
|
2039
|
+
function buildInlineBridgeMfConfig(config) {
|
|
1818
2040
|
const localWorkerBindings = config.vars ?? {};
|
|
1819
2041
|
const mfConfig = {
|
|
1820
2042
|
modules: true
|
|
@@ -1856,21 +2078,44 @@ Either create a config file or provide an explicit path: createTestContext('./pa
|
|
|
1856
2078
|
}))
|
|
1857
2079
|
};
|
|
1858
2080
|
}
|
|
2081
|
+
return mfConfig;
|
|
2082
|
+
}
|
|
2083
|
+
|
|
2084
|
+
// src/test/simple-context.ts
|
|
2085
|
+
function createTestContextState() {
|
|
2086
|
+
return {
|
|
2087
|
+
client: null,
|
|
2088
|
+
miniflare: null,
|
|
2089
|
+
envProxy: null,
|
|
2090
|
+
transportDecode: null,
|
|
2091
|
+
remoteBindings: null,
|
|
2092
|
+
miniflareBindings: null
|
|
2093
|
+
};
|
|
2094
|
+
}
|
|
2095
|
+
function shouldPreferBridgeBinding(hint) {
|
|
2096
|
+
return hint === "do" || hint === "service";
|
|
2097
|
+
}
|
|
2098
|
+
async function createTestContext(configPath) {
|
|
2099
|
+
const state = createTestContextState();
|
|
2100
|
+
const { configDir: configDir6, config } = await resolveTestContextConfig(configPath);
|
|
2101
|
+
state.remoteBindings = buildRemoteAndStaticBindings(config);
|
|
2102
|
+
const hints = extractBindingHints(config);
|
|
2103
|
+
const decodeTransport = (value) => decodeTransportValue(state.transportDecode, value);
|
|
2104
|
+
const needsMultiWorkerForServices = hasServiceBindings(config);
|
|
2105
|
+
const needsMultiWorkerForDOs = hasCrossWorkerDOs(config);
|
|
2106
|
+
const needsMultiWorker = needsMultiWorkerForServices || needsMultiWorkerForDOs;
|
|
2107
|
+
let serviceBindingResolution = null;
|
|
2108
|
+
let doBindingResolution = null;
|
|
2109
|
+
if (needsMultiWorkerForServices) {
|
|
2110
|
+
serviceBindingResolution = await resolveServiceBindings(config, configDir6);
|
|
2111
|
+
}
|
|
2112
|
+
if (needsMultiWorkerForDOs) {
|
|
2113
|
+
doBindingResolution = await resolveDOBindings(config, configDir6);
|
|
2114
|
+
}
|
|
2115
|
+
const mfConfig = buildInlineBridgeMfConfig(config);
|
|
1859
2116
|
const transportFile = resolveTransportFile(configDir6, config.files?.transport);
|
|
1860
2117
|
if (transportFile) {
|
|
1861
|
-
|
|
1862
|
-
const transportModule = await import(transportPath);
|
|
1863
|
-
if (!transportModule.transport) {
|
|
1864
|
-
console.warn(`[devflare] Warning: Transport file "${transportFile}" does not export a named "transport" object.
|
|
1865
|
-
Expected: export const transport = { ... }
|
|
1866
|
-
Transport encoding/decoding will be disabled.`);
|
|
1867
|
-
} else {
|
|
1868
|
-
globalTransportDecode = new Map;
|
|
1869
|
-
for (const [typeName, transporter] of Object.entries(transportModule.transport)) {
|
|
1870
|
-
const t = transporter;
|
|
1871
|
-
globalTransportDecode.set(typeName, t.decode);
|
|
1872
|
-
}
|
|
1873
|
-
}
|
|
2118
|
+
state.transportDecode = await loadTransportDecoders(configDir6, transportFile);
|
|
1874
2119
|
}
|
|
1875
2120
|
const gateway = await buildDurableObjectGateway(config, configDir6, transportFile);
|
|
1876
2121
|
mfConfig.script = gateway.script;
|
|
@@ -1880,243 +2125,59 @@ Transport encoding/decoding will be disabled.`);
|
|
|
1880
2125
|
const hasMultiWorkerServices = serviceBindingResolution && serviceBindingResolution.workers.length > 0;
|
|
1881
2126
|
const hasMultiWorkerDOs = doBindingResolution && doBindingResolution.workers.length > 0;
|
|
1882
2127
|
if (hasMultiWorkerServices || hasMultiWorkerDOs) {
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
...mfConfig.kvNamespaces && { kvNamespaces: mfConfig.kvNamespaces },
|
|
1893
|
-
...mfConfig.r2Buckets && { r2Buckets: mfConfig.r2Buckets },
|
|
1894
|
-
...mfConfig.d1Databases && { d1Databases: mfConfig.d1Databases },
|
|
1895
|
-
...mfConfig.email && { email: mfConfig.email },
|
|
1896
|
-
...Object.keys(primaryDurableObjects).length > 0 && { durableObjects: primaryDurableObjects },
|
|
1897
|
-
...serviceBindingResolution?.primaryServiceBindings && { serviceBindings: serviceBindingResolution.primaryServiceBindings }
|
|
1898
|
-
};
|
|
1899
|
-
const additionalWorkers = [
|
|
1900
|
-
...serviceBindingResolution?.workers || [],
|
|
1901
|
-
...doBindingResolution?.workers || []
|
|
1902
|
-
];
|
|
1903
|
-
const workersByName = new Map;
|
|
1904
|
-
for (const worker2 of additionalWorkers) {
|
|
1905
|
-
if (!workersByName.has(worker2.name)) {
|
|
1906
|
-
workersByName.set(worker2.name, worker2);
|
|
1907
|
-
continue;
|
|
1908
|
-
}
|
|
1909
|
-
const existing = workersByName.get(worker2.name);
|
|
1910
|
-
if (worker2.durableObjects) {
|
|
1911
|
-
existing.durableObjects = {
|
|
1912
|
-
...existing.durableObjects || {},
|
|
1913
|
-
...worker2.durableObjects
|
|
1914
|
-
};
|
|
1915
|
-
}
|
|
1916
|
-
}
|
|
1917
|
-
const workers = [primaryWorker, ...workersByName.values()];
|
|
1918
|
-
delete mfConfig.script;
|
|
1919
|
-
delete mfConfig.modules;
|
|
1920
|
-
delete mfConfig.kvNamespaces;
|
|
1921
|
-
delete mfConfig.r2Buckets;
|
|
1922
|
-
delete mfConfig.d1Databases;
|
|
1923
|
-
delete mfConfig.durableObjects;
|
|
1924
|
-
mfConfig.workers = workers;
|
|
1925
|
-
}
|
|
1926
|
-
let activePort;
|
|
1927
|
-
if (hasMultiWorkerServices || hasMultiWorkerDOs) {
|
|
1928
|
-
const { Miniflare } = await import("miniflare");
|
|
1929
|
-
activePort = await getAvailablePort();
|
|
1930
|
-
globalMiniflare = new Miniflare({
|
|
1931
|
-
...mfConfig,
|
|
1932
|
-
port: activePort
|
|
1933
|
-
});
|
|
1934
|
-
await globalMiniflare.ready;
|
|
1935
|
-
globalMiniflareBindings = wrapEnvSendEmailBindings(await globalMiniflare.getBindings());
|
|
1936
|
-
} else {
|
|
1937
|
-
const startedBridgeBackedTestContext = await startBridgeBackedTestContext(mfConfig);
|
|
1938
|
-
activePort = startedBridgeBackedTestContext.port;
|
|
1939
|
-
globalMiniflare = startedBridgeBackedTestContext.miniflare;
|
|
1940
|
-
globalMiniflareBindings = startedBridgeBackedTestContext.miniflareBindings;
|
|
1941
|
-
globalClient = startedBridgeBackedTestContext.client;
|
|
1942
|
-
}
|
|
1943
|
-
const disposeContext = async () => {
|
|
1944
|
-
if (globalClient) {
|
|
1945
|
-
await globalClient.disconnect();
|
|
1946
|
-
globalClient = null;
|
|
1947
|
-
}
|
|
1948
|
-
if (globalMiniflare) {
|
|
1949
|
-
await globalMiniflare.dispose();
|
|
1950
|
-
globalMiniflare = null;
|
|
1951
|
-
}
|
|
1952
|
-
globalEnvProxy = null;
|
|
1953
|
-
globalTransportDecode = null;
|
|
1954
|
-
globalRemoteBindings = null;
|
|
1955
|
-
globalMiniflareBindings = null;
|
|
1956
|
-
resetQueueState();
|
|
1957
|
-
resetScheduledState();
|
|
1958
|
-
resetWorkerState();
|
|
1959
|
-
resetTailState();
|
|
1960
|
-
resetEmailState();
|
|
1961
|
-
__clearTestContext();
|
|
1962
|
-
};
|
|
2128
|
+
applyMultiWorkerConfig(mfConfig, config, serviceBindingResolution, doBindingResolution);
|
|
2129
|
+
}
|
|
2130
|
+
const usesMultiWorker = Boolean(hasMultiWorkerServices || hasMultiWorkerDOs);
|
|
2131
|
+
const runtime = await bootTestRuntime(mfConfig, usesMultiWorker);
|
|
2132
|
+
const activePort = runtime.activePort;
|
|
2133
|
+
state.miniflare = runtime.miniflare;
|
|
2134
|
+
state.miniflareBindings = runtime.miniflareBindings;
|
|
2135
|
+
state.client = runtime.client;
|
|
2136
|
+
const disposeContext = createDisposeContext(state);
|
|
1963
2137
|
const getTestEnv = () => {
|
|
1964
2138
|
return new Proxy({}, {
|
|
1965
2139
|
get(_, prop) {
|
|
1966
|
-
if (
|
|
1967
|
-
return
|
|
2140
|
+
if (state.remoteBindings && prop in state.remoteBindings) {
|
|
2141
|
+
return state.remoteBindings[prop];
|
|
1968
2142
|
}
|
|
1969
|
-
if (hints[prop] === "sendEmail" &&
|
|
1970
|
-
return
|
|
2143
|
+
if (hints[prop] === "sendEmail" && state.envProxy && prop in state.envProxy) {
|
|
2144
|
+
return state.envProxy[prop];
|
|
1971
2145
|
}
|
|
1972
|
-
if (
|
|
1973
|
-
return
|
|
2146
|
+
if (state.miniflareBindings && prop in state.miniflareBindings) {
|
|
2147
|
+
return state.miniflareBindings[prop];
|
|
1974
2148
|
}
|
|
1975
|
-
if (
|
|
1976
|
-
return
|
|
2149
|
+
if (state.envProxy && prop in state.envProxy) {
|
|
2150
|
+
return state.envProxy[prop];
|
|
1977
2151
|
}
|
|
1978
2152
|
return;
|
|
1979
2153
|
},
|
|
1980
2154
|
has(_, prop) {
|
|
1981
|
-
return Boolean(
|
|
2155
|
+
return Boolean(state.remoteBindings && prop in state.remoteBindings || state.miniflareBindings && prop in state.miniflareBindings || state.envProxy && prop in state.envProxy);
|
|
1982
2156
|
}
|
|
1983
2157
|
});
|
|
1984
2158
|
};
|
|
1985
|
-
const
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
const emailPath = config.files?.email;
|
|
1989
|
-
const DEFAULT_FETCH_PATH = "src/fetch.ts";
|
|
1990
|
-
const DEFAULT_QUEUE_PATH = "src/queue.ts";
|
|
1991
|
-
const DEFAULT_SCHEDULED_PATH = "src/scheduled.ts";
|
|
1992
|
-
const DEFAULT_EMAIL_PATH = "src/email.ts";
|
|
1993
|
-
const DEFAULT_TAIL_PATH = "src/tail.ts";
|
|
1994
|
-
const resolvePath = async (configValue, defaultPath) => {
|
|
1995
|
-
if (typeof configValue === "string") {
|
|
1996
|
-
return configValue;
|
|
1997
|
-
}
|
|
1998
|
-
if (configValue === false) {
|
|
1999
|
-
return null;
|
|
2000
|
-
}
|
|
2001
|
-
const defaultAbsolute = join9(configDir6, defaultPath);
|
|
2002
|
-
try {
|
|
2003
|
-
const fs = await import("fs/promises");
|
|
2004
|
-
await fs.access(defaultAbsolute);
|
|
2005
|
-
return defaultPath;
|
|
2006
|
-
} catch {
|
|
2007
|
-
return null;
|
|
2008
|
-
}
|
|
2009
|
-
};
|
|
2010
|
-
const [resolvedFetchPath, resolvedQueuePath, resolvedScheduledPath, resolvedEmailPath, resolvedTailPath, resolvedRoutes] = await Promise.all([
|
|
2011
|
-
resolvePath(fetchPath, DEFAULT_FETCH_PATH),
|
|
2012
|
-
resolvePath(queuePath, DEFAULT_QUEUE_PATH),
|
|
2013
|
-
resolvePath(scheduledPath, DEFAULT_SCHEDULED_PATH),
|
|
2014
|
-
resolvePath(emailPath, DEFAULT_EMAIL_PATH),
|
|
2015
|
-
resolvePath(undefined, DEFAULT_TAIL_PATH),
|
|
2016
|
-
discoverRoutes(configDir6, config)
|
|
2017
|
-
]);
|
|
2018
|
-
configureQueue({
|
|
2019
|
-
handlerPath: resolvedQueuePath,
|
|
2020
|
-
configDir: configDir6,
|
|
2021
|
-
getEnv: getTestEnv
|
|
2022
|
-
});
|
|
2023
|
-
configureScheduled({
|
|
2024
|
-
handlerPath: resolvedScheduledPath,
|
|
2025
|
-
configDir: configDir6,
|
|
2026
|
-
getEnv: getTestEnv
|
|
2027
|
-
});
|
|
2028
|
-
configureWorker({
|
|
2029
|
-
handlerPath: resolvedFetchPath,
|
|
2030
|
-
routes: resolvedRoutes?.routes.map((route) => ({
|
|
2031
|
-
filePath: route.filePath,
|
|
2032
|
-
routePath: route.routePath,
|
|
2033
|
-
segments: route.segments
|
|
2034
|
-
})) ?? [],
|
|
2159
|
+
const handlerPaths = await resolveHandlerPaths(configDir6, config);
|
|
2160
|
+
configureSurfaceHandlers({
|
|
2161
|
+
handlerPaths,
|
|
2035
2162
|
configDir: configDir6,
|
|
2163
|
+
activePort,
|
|
2036
2164
|
getEnv: getTestEnv
|
|
2037
2165
|
});
|
|
2038
|
-
|
|
2039
|
-
handlerPath: resolvedTailPath,
|
|
2040
|
-
configDir: configDir6,
|
|
2041
|
-
getEnv: getTestEnv
|
|
2042
|
-
});
|
|
2043
|
-
configureEmail({
|
|
2044
|
-
port: activePort,
|
|
2045
|
-
handlerPath: resolvedEmailPath,
|
|
2046
|
-
configDir: configDir6,
|
|
2047
|
-
getEnv: getTestEnv
|
|
2048
|
-
});
|
|
2049
|
-
if (hasMultiWorkerServices || hasMultiWorkerDOs) {
|
|
2166
|
+
if (usesMultiWorker) {
|
|
2050
2167
|
setBindingHints(hints);
|
|
2051
|
-
|
|
2052
|
-
get(_, prop) {
|
|
2053
|
-
if (globalRemoteBindings && prop in globalRemoteBindings) {
|
|
2054
|
-
return globalRemoteBindings[prop];
|
|
2055
|
-
}
|
|
2056
|
-
if (globalMiniflareBindings && prop in globalMiniflareBindings) {
|
|
2057
|
-
return globalMiniflareBindings[prop];
|
|
2058
|
-
}
|
|
2059
|
-
return;
|
|
2060
|
-
},
|
|
2061
|
-
has(_, prop) {
|
|
2062
|
-
return Boolean(globalRemoteBindings && prop in globalRemoteBindings || globalMiniflareBindings && prop in globalMiniflareBindings);
|
|
2063
|
-
}
|
|
2064
|
-
});
|
|
2065
|
-
__setTestContext(envAccessor2, disposeContext);
|
|
2168
|
+
__setTestContext(createMultiWorkerEnvAccessor(state), disposeContext);
|
|
2066
2169
|
return;
|
|
2067
2170
|
}
|
|
2068
|
-
const bridgeClient =
|
|
2171
|
+
const bridgeClient = state.client;
|
|
2069
2172
|
if (!bridgeClient) {
|
|
2070
2173
|
throw new Error("Bridge-backed test context did not initialize a client.");
|
|
2071
2174
|
}
|
|
2072
2175
|
setBindingHints(hints);
|
|
2073
|
-
|
|
2176
|
+
state.envProxy = createEnvProxy({
|
|
2074
2177
|
client: bridgeClient,
|
|
2075
2178
|
transformResult: (result) => decodeTransport(result)
|
|
2076
2179
|
});
|
|
2077
|
-
|
|
2078
|
-
get(_, prop) {
|
|
2079
|
-
const hint = hints[prop];
|
|
2080
|
-
const prefersBridgeBinding = shouldPreferBridgeBinding(hint);
|
|
2081
|
-
if (globalRemoteBindings && prop in globalRemoteBindings) {
|
|
2082
|
-
return globalRemoteBindings[prop];
|
|
2083
|
-
}
|
|
2084
|
-
if (!prefersBridgeBinding && globalMiniflareBindings && prop in globalMiniflareBindings) {
|
|
2085
|
-
return globalMiniflareBindings[prop];
|
|
2086
|
-
}
|
|
2087
|
-
if (globalEnvProxy) {
|
|
2088
|
-
return globalEnvProxy[prop];
|
|
2089
|
-
}
|
|
2090
|
-
if (prefersBridgeBinding && globalMiniflareBindings && prop in globalMiniflareBindings) {
|
|
2091
|
-
return globalMiniflareBindings[prop];
|
|
2092
|
-
}
|
|
2093
|
-
return;
|
|
2094
|
-
},
|
|
2095
|
-
has(_, prop) {
|
|
2096
|
-
return Boolean(globalRemoteBindings && prop in globalRemoteBindings || globalMiniflareBindings && prop in globalMiniflareBindings || globalEnvProxy !== null);
|
|
2097
|
-
}
|
|
2098
|
-
});
|
|
2099
|
-
__setTestContext(envAccessor, disposeContext);
|
|
2100
|
-
}
|
|
2101
|
-
function decodeTransport(value) {
|
|
2102
|
-
if (!globalTransportDecode || value === null || typeof value !== "object") {
|
|
2103
|
-
return value;
|
|
2104
|
-
}
|
|
2105
|
-
if ("__transport" in value) {
|
|
2106
|
-
const encoded = value;
|
|
2107
|
-
const decoder = globalTransportDecode.get(encoded.__transport);
|
|
2108
|
-
if (decoder) {
|
|
2109
|
-
return decoder(encoded.value);
|
|
2110
|
-
}
|
|
2111
|
-
}
|
|
2112
|
-
if (Array.isArray(value)) {
|
|
2113
|
-
return value.map(decodeTransport);
|
|
2114
|
-
}
|
|
2115
|
-
const result = {};
|
|
2116
|
-
for (const [k, v] of Object.entries(value)) {
|
|
2117
|
-
result[k] = decodeTransport(v);
|
|
2118
|
-
}
|
|
2119
|
-
return result;
|
|
2180
|
+
__setTestContext(createBridgeEnvAccessor(state, hints, shouldPreferBridgeBinding), disposeContext);
|
|
2120
2181
|
}
|
|
2121
2182
|
// src/test/cf.ts
|
|
2122
2183
|
var cf = {
|
|
@@ -2252,56 +2313,88 @@ async function withTestContext(options, handler) {
|
|
|
2252
2313
|
return runWithContext(testCtx.env, testCtx.ctx, options.request ?? null, handler, options.type ?? "fetch");
|
|
2253
2314
|
}
|
|
2254
2315
|
function createMockKV(initialData = {}) {
|
|
2255
|
-
const store = new Map
|
|
2316
|
+
const store = new Map;
|
|
2256
2317
|
const metadata = new Map;
|
|
2318
|
+
const encoder = new TextEncoder;
|
|
2319
|
+
const decoder = new TextDecoder;
|
|
2320
|
+
for (const [key, value] of Object.entries(initialData)) {
|
|
2321
|
+
store.set(key, encoder.encode(value));
|
|
2322
|
+
}
|
|
2323
|
+
const toBytes = async (value) => {
|
|
2324
|
+
if (typeof value === "string") {
|
|
2325
|
+
return encoder.encode(value);
|
|
2326
|
+
}
|
|
2327
|
+
if (value instanceof ArrayBuffer) {
|
|
2328
|
+
return new Uint8Array(value.slice(0));
|
|
2329
|
+
}
|
|
2330
|
+
if (ArrayBuffer.isView(value)) {
|
|
2331
|
+
const view = value;
|
|
2332
|
+
const copy = new Uint8Array(view.byteLength);
|
|
2333
|
+
copy.set(new Uint8Array(view.buffer, view.byteOffset, view.byteLength));
|
|
2334
|
+
return copy;
|
|
2335
|
+
}
|
|
2336
|
+
const reader = value.getReader();
|
|
2337
|
+
const chunks = [];
|
|
2338
|
+
let total = 0;
|
|
2339
|
+
while (true) {
|
|
2340
|
+
const result = await reader.read();
|
|
2341
|
+
if (result.done)
|
|
2342
|
+
break;
|
|
2343
|
+
if (result.value) {
|
|
2344
|
+
const chunk = result.value instanceof Uint8Array ? result.value : new Uint8Array(result.value);
|
|
2345
|
+
chunks.push(chunk);
|
|
2346
|
+
total += chunk.length;
|
|
2347
|
+
}
|
|
2348
|
+
}
|
|
2349
|
+
const combined = new Uint8Array(total);
|
|
2350
|
+
let offset = 0;
|
|
2351
|
+
for (const chunk of chunks) {
|
|
2352
|
+
combined.set(chunk, offset);
|
|
2353
|
+
offset += chunk.length;
|
|
2354
|
+
}
|
|
2355
|
+
return combined;
|
|
2356
|
+
};
|
|
2357
|
+
const decodeBytes = (bytes, type) => {
|
|
2358
|
+
switch (type) {
|
|
2359
|
+
case "json":
|
|
2360
|
+
return JSON.parse(decoder.decode(bytes));
|
|
2361
|
+
case "arrayBuffer": {
|
|
2362
|
+
const copy = new Uint8Array(bytes.length);
|
|
2363
|
+
copy.set(bytes);
|
|
2364
|
+
return copy.buffer;
|
|
2365
|
+
}
|
|
2366
|
+
case "stream": {
|
|
2367
|
+
const copy = new Uint8Array(bytes.length);
|
|
2368
|
+
copy.set(bytes);
|
|
2369
|
+
return new ReadableStream({
|
|
2370
|
+
start(controller) {
|
|
2371
|
+
controller.enqueue(copy);
|
|
2372
|
+
controller.close();
|
|
2373
|
+
}
|
|
2374
|
+
});
|
|
2375
|
+
}
|
|
2376
|
+
default:
|
|
2377
|
+
return decoder.decode(bytes);
|
|
2378
|
+
}
|
|
2379
|
+
};
|
|
2380
|
+
const resolveType = (options) => {
|
|
2381
|
+
const type = typeof options === "string" ? options : options?.type ?? "text";
|
|
2382
|
+
return type;
|
|
2383
|
+
};
|
|
2257
2384
|
return {
|
|
2258
2385
|
async get(key, options) {
|
|
2259
|
-
const
|
|
2260
|
-
if (
|
|
2386
|
+
const bytes = store.get(key);
|
|
2387
|
+
if (bytes === undefined)
|
|
2261
2388
|
return null;
|
|
2262
|
-
|
|
2263
|
-
switch (type) {
|
|
2264
|
-
case "json":
|
|
2265
|
-
return JSON.parse(value);
|
|
2266
|
-
case "arrayBuffer":
|
|
2267
|
-
return new TextEncoder().encode(value).buffer;
|
|
2268
|
-
case "stream":
|
|
2269
|
-
return new ReadableStream({
|
|
2270
|
-
start(controller) {
|
|
2271
|
-
controller.enqueue(new TextEncoder().encode(value));
|
|
2272
|
-
controller.close();
|
|
2273
|
-
}
|
|
2274
|
-
});
|
|
2275
|
-
default:
|
|
2276
|
-
return value;
|
|
2277
|
-
}
|
|
2389
|
+
return decodeBytes(bytes, resolveType(options));
|
|
2278
2390
|
},
|
|
2279
|
-
async put(key, value,
|
|
2280
|
-
|
|
2281
|
-
|
|
2282
|
-
} else if (value instanceof ArrayBuffer) {
|
|
2283
|
-
store.set(key, new TextDecoder().decode(value));
|
|
2284
|
-
} else {
|
|
2285
|
-
const reader = value.getReader();
|
|
2286
|
-
const chunks = [];
|
|
2287
|
-
let done = false;
|
|
2288
|
-
while (!done) {
|
|
2289
|
-
const result = await reader.read();
|
|
2290
|
-
done = result.done;
|
|
2291
|
-
if (result.value)
|
|
2292
|
-
chunks.push(result.value);
|
|
2293
|
-
}
|
|
2294
|
-
const combined = new Uint8Array(chunks.reduce((acc, c) => acc + c.length, 0));
|
|
2295
|
-
let offset = 0;
|
|
2296
|
-
for (const chunk of chunks) {
|
|
2297
|
-
combined.set(chunk, offset);
|
|
2298
|
-
offset += chunk.length;
|
|
2299
|
-
}
|
|
2300
|
-
store.set(key, new TextDecoder().decode(combined));
|
|
2301
|
-
}
|
|
2391
|
+
async put(key, value, _options) {
|
|
2392
|
+
const bytes = await toBytes(value);
|
|
2393
|
+
store.set(key, bytes);
|
|
2302
2394
|
},
|
|
2303
2395
|
async delete(key) {
|
|
2304
2396
|
store.delete(key);
|
|
2397
|
+
metadata.delete(key);
|
|
2305
2398
|
},
|
|
2306
2399
|
async list(options) {
|
|
2307
2400
|
const prefix = options?.prefix ?? "";
|
|
@@ -2314,52 +2407,106 @@ function createMockKV(initialData = {}) {
|
|
|
2314
2407
|
};
|
|
2315
2408
|
},
|
|
2316
2409
|
async getWithMetadata(key, options) {
|
|
2410
|
+
const bytes = store.get(key);
|
|
2317
2411
|
return {
|
|
2318
|
-
value:
|
|
2412
|
+
value: bytes === undefined ? null : decodeBytes(bytes, resolveType(options)),
|
|
2319
2413
|
metadata: metadata.get(key) ?? null
|
|
2320
2414
|
};
|
|
2321
2415
|
}
|
|
2322
2416
|
};
|
|
2323
2417
|
}
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2327
|
-
|
|
2328
|
-
|
|
2329
|
-
|
|
2330
|
-
|
|
2331
|
-
|
|
2332
|
-
|
|
2333
|
-
|
|
2334
|
-
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2342
|
-
|
|
2343
|
-
|
|
2344
|
-
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
};
|
|
2353
|
-
}
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
2418
|
+
var TABLE_NAME_RE = /(?:from|into|update)\s+["'`]?([a-zA-Z_][a-zA-Z0-9_]*)["'`]?/i;
|
|
2419
|
+
var extractTable = (sql) => {
|
|
2420
|
+
const match = TABLE_NAME_RE.exec(sql);
|
|
2421
|
+
return match ? match[1] : null;
|
|
2422
|
+
};
|
|
2423
|
+
var detectOp = (sql) => {
|
|
2424
|
+
const trimmed = sql.trimStart().toLowerCase();
|
|
2425
|
+
if (trimmed.startsWith("select"))
|
|
2426
|
+
return "select";
|
|
2427
|
+
if (trimmed.startsWith("insert"))
|
|
2428
|
+
return "insert";
|
|
2429
|
+
if (trimmed.startsWith("update"))
|
|
2430
|
+
return "update";
|
|
2431
|
+
if (trimmed.startsWith("delete"))
|
|
2432
|
+
return "delete";
|
|
2433
|
+
return "other";
|
|
2434
|
+
};
|
|
2435
|
+
function createMockD1(mockResultsOrOptions = []) {
|
|
2436
|
+
const options = Array.isArray(mockResultsOrOptions) ? { results: mockResultsOrOptions } : mockResultsOrOptions;
|
|
2437
|
+
const tables = new Map;
|
|
2438
|
+
for (const [name, rows] of Object.entries(options.fixtures ?? {})) {
|
|
2439
|
+
tables.set(name, [...rows]);
|
|
2440
|
+
}
|
|
2441
|
+
const fallback = options.results ?? [];
|
|
2442
|
+
const resolveRows = (sql) => {
|
|
2443
|
+
const op = detectOp(sql);
|
|
2444
|
+
const table = extractTable(sql);
|
|
2445
|
+
if (table && tables.has(table)) {
|
|
2446
|
+
return { rows: tables.get(table) ?? [], op, table };
|
|
2447
|
+
}
|
|
2448
|
+
return { rows: [...fallback], op, table };
|
|
2449
|
+
};
|
|
2450
|
+
const createStatement = (sql) => {
|
|
2451
|
+
let boundValues = [];
|
|
2452
|
+
const statement = {
|
|
2453
|
+
bind(...values) {
|
|
2454
|
+
boundValues = values;
|
|
2455
|
+
return statement;
|
|
2456
|
+
},
|
|
2457
|
+
async first(column) {
|
|
2458
|
+
const { rows } = resolveRows(sql);
|
|
2459
|
+
const row = rows[0];
|
|
2460
|
+
if (!row)
|
|
2461
|
+
return null;
|
|
2462
|
+
if (column)
|
|
2463
|
+
return row[column];
|
|
2464
|
+
return row;
|
|
2465
|
+
},
|
|
2466
|
+
async all() {
|
|
2467
|
+
const { rows } = resolveRows(sql);
|
|
2468
|
+
return {
|
|
2469
|
+
results: rows,
|
|
2470
|
+
success: true,
|
|
2471
|
+
meta: { duration: 0, changes: 0, last_row_id: 0 }
|
|
2472
|
+
};
|
|
2473
|
+
},
|
|
2474
|
+
async run() {
|
|
2475
|
+
const { op, table } = resolveRows(sql);
|
|
2476
|
+
let changes = 0;
|
|
2477
|
+
let lastRowId = 0;
|
|
2478
|
+
if (op === "insert" && table) {
|
|
2479
|
+
const rows = tables.get(table) ?? [];
|
|
2480
|
+
const bound = boundValues.length > 0 ? Object.fromEntries(boundValues.map((v, i) => [`col${i}`, v])) : {};
|
|
2481
|
+
rows.push(bound);
|
|
2482
|
+
tables.set(table, rows);
|
|
2483
|
+
changes = 1;
|
|
2484
|
+
lastRowId = rows.length;
|
|
2485
|
+
} else if (op === "delete" && table) {
|
|
2486
|
+
const rows = tables.get(table) ?? [];
|
|
2487
|
+
changes = rows.length;
|
|
2488
|
+
tables.set(table, []);
|
|
2489
|
+
} else if (op === "update" && table) {
|
|
2490
|
+
changes = (tables.get(table) ?? []).length;
|
|
2491
|
+
}
|
|
2492
|
+
return {
|
|
2493
|
+
results: [],
|
|
2494
|
+
success: true,
|
|
2495
|
+
meta: { duration: 0, changes, last_row_id: lastRowId }
|
|
2496
|
+
};
|
|
2497
|
+
},
|
|
2498
|
+
async raw(_options) {
|
|
2499
|
+
const { rows } = resolveRows(sql);
|
|
2500
|
+
return rows.map((row) => Object.values(row));
|
|
2501
|
+
}
|
|
2502
|
+
};
|
|
2503
|
+
return statement;
|
|
2504
|
+
};
|
|
2358
2505
|
return {
|
|
2359
2506
|
prepare(query) {
|
|
2360
|
-
return createStatement();
|
|
2507
|
+
return createStatement(query);
|
|
2361
2508
|
},
|
|
2362
|
-
async exec(
|
|
2509
|
+
async exec(_query) {
|
|
2363
2510
|
return {
|
|
2364
2511
|
results: [],
|
|
2365
2512
|
success: true,
|
|
@@ -2376,7 +2523,7 @@ function createMockD1(mockResults = []) {
|
|
|
2376
2523
|
async dump() {
|
|
2377
2524
|
return new ArrayBuffer(0);
|
|
2378
2525
|
},
|
|
2379
|
-
withSession(
|
|
2526
|
+
withSession(_constraintOrBookmark) {
|
|
2380
2527
|
return this;
|
|
2381
2528
|
}
|
|
2382
2529
|
};
|
|
@@ -2539,111 +2686,26 @@ function createMockEnv(options = {}) {
|
|
|
2539
2686
|
}
|
|
2540
2687
|
return env2;
|
|
2541
2688
|
}
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
verbose: options.verbose ?? false
|
|
2566
|
-
});
|
|
2567
|
-
}
|
|
2568
|
-
const bindings = wrapEnvSendEmailBindings(await miniflare.getBindings());
|
|
2569
|
-
if (config?.bindings) {
|
|
2570
|
-
const hints = {};
|
|
2571
|
-
if (config.bindings.kv) {
|
|
2572
|
-
Object.keys(config.bindings.kv).forEach((name) => {
|
|
2573
|
-
hints[name] = "kv";
|
|
2574
|
-
});
|
|
2575
|
-
}
|
|
2576
|
-
if (config.bindings.r2) {
|
|
2577
|
-
Object.keys(config.bindings.r2).forEach((name) => {
|
|
2578
|
-
hints[name] = "r2";
|
|
2579
|
-
});
|
|
2580
|
-
}
|
|
2581
|
-
if (config.bindings.d1) {
|
|
2582
|
-
Object.keys(config.bindings.d1).forEach((name) => {
|
|
2583
|
-
hints[name] = "d1";
|
|
2584
|
-
});
|
|
2585
|
-
}
|
|
2586
|
-
if (config.bindings.durableObjects) {
|
|
2587
|
-
Object.keys(config.bindings.durableObjects).forEach((name) => {
|
|
2588
|
-
hints[name] = "do";
|
|
2589
|
-
});
|
|
2590
|
-
}
|
|
2591
|
-
if (config.bindings.queues?.consumers) {
|
|
2592
|
-
config.bindings.queues.consumers.forEach((c) => {
|
|
2593
|
-
hints[c.queue] = "queue";
|
|
2594
|
-
});
|
|
2595
|
-
}
|
|
2596
|
-
if (config.bindings.ai)
|
|
2597
|
-
hints[config.bindings.ai.binding] = "ai";
|
|
2598
|
-
if (config.bindings.sendEmail) {
|
|
2599
|
-
Object.keys(config.bindings.sendEmail).forEach((name) => {
|
|
2600
|
-
hints[name] = "sendEmail";
|
|
2601
|
-
});
|
|
2602
|
-
}
|
|
2603
|
-
setBindingHints(hints);
|
|
2604
|
-
}
|
|
2605
|
-
const ctx = {
|
|
2606
|
-
env: bindings,
|
|
2607
|
-
miniflare,
|
|
2608
|
-
async stop() {
|
|
2609
|
-
await miniflare.dispose();
|
|
2610
|
-
globalTestContext = null;
|
|
2611
|
-
},
|
|
2612
|
-
async reset() {
|
|
2613
|
-
for (const [name, binding] of Object.entries(bindings)) {
|
|
2614
|
-
if (isKVNamespace(binding)) {
|
|
2615
|
-
const kv = binding;
|
|
2616
|
-
const { keys } = await kv.list();
|
|
2617
|
-
for (const key of keys) {
|
|
2618
|
-
await kv.delete(key.name);
|
|
2619
|
-
}
|
|
2620
|
-
}
|
|
2621
|
-
}
|
|
2622
|
-
}
|
|
2623
|
-
};
|
|
2624
|
-
globalTestContext = ctx;
|
|
2625
|
-
return ctx;
|
|
2626
|
-
}
|
|
2627
|
-
async function stopBridgeTestContext() {
|
|
2628
|
-
if (globalTestContext) {
|
|
2629
|
-
await globalTestContext.stop();
|
|
2630
|
-
}
|
|
2631
|
-
}
|
|
2632
|
-
function getBridgeTestContext() {
|
|
2633
|
-
if (!globalTestContext) {
|
|
2634
|
-
throw new Error("Bridge test context not initialized. Call createBridgeTestContext() in beforeAll().");
|
|
2635
|
-
}
|
|
2636
|
-
return globalTestContext;
|
|
2637
|
-
}
|
|
2638
|
-
var testEnv = new Proxy({}, {
|
|
2639
|
-
get(target, prop) {
|
|
2640
|
-
if (typeof prop !== "string")
|
|
2641
|
-
return;
|
|
2642
|
-
const ctx = getBridgeTestContext();
|
|
2643
|
-
return ctx.env[prop];
|
|
2644
|
-
}
|
|
2645
|
-
});
|
|
2646
|
-
function isKVNamespace(binding) {
|
|
2647
|
-
return typeof binding === "object" && binding !== null && "get" in binding && "put" in binding && "delete" in binding && "list" in binding;
|
|
2648
|
-
}
|
|
2649
|
-
export { clearBundleCache, hasServiceBindings, resolveServiceBindings, hasCrossWorkerDOs, resolveDOBindings, email, queue, scheduled, tail, worker, createTestContext, cf, shouldSkip, createMockTestContext, withTestContext, createMockKV, createMockD1, createMockR2, createMockQueue, createMockEnv, createBridgeTestContext, stopBridgeTestContext, getBridgeTestContext, testEnv };
|
|
2689
|
+
export {
|
|
2690
|
+
worker,
|
|
2691
|
+
withTestContext,
|
|
2692
|
+
tail,
|
|
2693
|
+
shouldSkip,
|
|
2694
|
+
scheduled,
|
|
2695
|
+
resolveServiceBindings,
|
|
2696
|
+
resolveDOBindings,
|
|
2697
|
+
queue,
|
|
2698
|
+
hasServiceBindings,
|
|
2699
|
+
hasCrossWorkerDOs,
|
|
2700
|
+
env,
|
|
2701
|
+
email,
|
|
2702
|
+
createTestContext,
|
|
2703
|
+
createMockTestContext,
|
|
2704
|
+
createMockR2,
|
|
2705
|
+
createMockQueue,
|
|
2706
|
+
createMockKV,
|
|
2707
|
+
createMockEnv,
|
|
2708
|
+
createMockD1,
|
|
2709
|
+
clearBundleCache,
|
|
2710
|
+
cf
|
|
2711
|
+
};
|