devflare 1.0.0-next.2 → 1.0.0-next.21
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 +15743 -1751
- package/README.md +383 -605
- package/bin/devflare.js +14 -4
- package/dist/account-05zgta47.js +475 -0
- package/dist/account-0evqkmnc.js +475 -0
- package/dist/account-0v11zbzk.js +475 -0
- package/dist/account-2w85efas.js +475 -0
- package/dist/account-61gw9s7t.js +475 -0
- 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-b2ag1esh.js +475 -0
- package/dist/account-bxtcz61a.js +475 -0
- package/dist/account-d43d1eqs.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-gyfqg964.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-q6pvs9d9.js +475 -0
- package/dist/account-qkcevx7a.js +475 -0
- package/dist/account-rp4zbvw1.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-th82mps4.js +27 -0
- package/dist/bridge/client.d.ts +34 -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 +3 -3
- 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 +73 -0
- package/dist/bridge/miniflare.d.ts.map +1 -1
- package/dist/bridge/protocol.d.ts +1 -1
- package/dist/bridge/protocol.d.ts.map +1 -1
- package/dist/bridge/proxy.d.ts +9 -11
- 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 +2 -1
- 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/handler.d.ts +1 -1
- package/dist/browser-shim/handler.d.ts.map +1 -1
- package/dist/browser-shim/server.d.ts +63 -0
- package/dist/browser-shim/server.d.ts.map +1 -1
- package/dist/browser.d.ts +4505 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +145 -0
- 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-2s5paw5p.js +54 -0
- package/dist/build-4c350cp7.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-6ye9vnab.js +52 -0
- package/dist/build-8gv18jrq.js +52 -0
- package/dist/build-9bgqypy6.js +53 -0
- package/dist/build-9em4ymqn.js +52 -0
- package/dist/build-b1z6wqet.js +54 -0
- package/dist/build-e7wym63t.js +54 -0
- 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-ge6qp3t4.js +54 -0
- package/dist/build-h31egsze.js +53 -0
- package/dist/build-hpczwagb.js +53 -0
- package/dist/build-hpkbanpw.js +54 -0
- package/dist/build-j2re91xe.js +54 -0
- package/dist/build-j78389rg.js +52 -0
- 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-ta8c6t11.js +54 -0
- package/dist/build-vvndgwg0.js +52 -0
- package/dist/build-wp559jkf.js +54 -0
- package/dist/build-wvjj8f28.js +54 -0
- package/dist/build-x4r67275.js +52 -0
- package/dist/build-x7maz3eb.js +54 -0
- package/dist/build-xp4pfhvv.js +52 -0
- package/dist/build-y489r2h9.js +54 -0
- package/dist/build-y6g4bvx5.js +52 -0
- package/dist/build-ypg6f2kw.js +54 -0
- package/dist/build-yts8wwgf.js +54 -0
- package/dist/build-yvn0yhwx.js +52 -0
- package/dist/build-yzkdqexs.js +54 -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 +7 -0
- package/dist/bundler/do-bundler.d.ts.map +1 -1
- package/dist/bundler/index.d.ts +2 -0
- package/dist/bundler/index.d.ts.map +1 -1
- package/dist/bundler/rolldown-shared.d.ts +53 -0
- package/dist/bundler/rolldown-shared.d.ts.map +1 -0
- package/dist/bundler/worker-bundler.d.ts +13 -0
- package/dist/bundler/worker-bundler.d.ts.map +1 -0
- package/dist/bundler/worker-compat.d.ts +4 -0
- package/dist/bundler/worker-compat.d.ts.map +1 -0
- package/dist/cli/build-manifest.d.ts +66 -0
- package/dist/cli/build-manifest.d.ts.map +1 -0
- package/dist/cli/command-utils.d.ts +18 -0
- package/dist/cli/command-utils.d.ts.map +1 -0
- package/dist/cli/commands/account.d.ts +1 -1
- package/dist/cli/commands/account.d.ts.map +1 -1
- package/dist/cli/commands/build-artifacts.d.ts +40 -0
- package/dist/cli/commands/build-artifacts.d.ts.map +1 -0
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/config.d.ts +4 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/deploy/metadata.d.ts +18 -0
- package/dist/cli/commands/deploy/metadata.d.ts.map +1 -0
- package/dist/cli/commands/deploy/prepare.d.ts +23 -0
- package/dist/cli/commands/deploy/prepare.d.ts.map +1 -0
- package/dist/cli/commands/deploy/runtime.d.ts +4 -0
- package/dist/cli/commands/deploy/runtime.d.ts.map +1 -0
- package/dist/cli/commands/deploy/verification.d.ts +36 -0
- package/dist/cli/commands/deploy/verification.d.ts.map +1 -0
- package/dist/cli/commands/deploy.d.ts +2 -2
- package/dist/cli/commands/deploy.d.ts.map +1 -1
- package/dist/cli/commands/dev.d.ts +1 -0
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/login.d.ts +4 -0
- package/dist/cli/commands/login.d.ts.map +1 -0
- package/dist/cli/commands/previews-support/cleanup.d.ts +9 -0
- package/dist/cli/commands/previews-support/cleanup.d.ts.map +1 -0
- package/dist/cli/commands/previews-support/family.d.ts +10 -0
- package/dist/cli/commands/previews-support/family.d.ts.map +1 -0
- package/dist/cli/commands/previews-support/render.d.ts +8 -0
- package/dist/cli/commands/previews-support/render.d.ts.map +1 -0
- package/dist/cli/commands/previews-support/theme.d.ts +10 -0
- package/dist/cli/commands/previews-support/theme.d.ts.map +1 -0
- package/dist/cli/commands/previews-support/types.d.ts +70 -0
- package/dist/cli/commands/previews-support/types.d.ts.map +1 -0
- package/dist/cli/commands/previews.d.ts +4 -0
- package/dist/cli/commands/previews.d.ts.map +1 -0
- package/dist/cli/commands/productions.d.ts +4 -0
- package/dist/cli/commands/productions.d.ts.map +1 -0
- package/dist/cli/commands/secrets.d.ts +4 -0
- package/dist/cli/commands/secrets.d.ts.map +1 -0
- package/dist/cli/commands/token.d.ts +4 -0
- package/dist/cli/commands/token.d.ts.map +1 -0
- package/dist/cli/commands/type-generation/discovery.d.ts +7 -0
- package/dist/cli/commands/type-generation/discovery.d.ts.map +1 -0
- package/dist/cli/commands/type-generation/generator.d.ts +110 -0
- package/dist/cli/commands/type-generation/generator.d.ts.map +1 -0
- package/dist/cli/commands/type-generation/models.d.ts +27 -0
- package/dist/cli/commands/type-generation/models.d.ts.map +1 -0
- package/dist/cli/commands/types.d.ts.map +1 -1
- package/dist/cli/commands/worker.d.ts +4 -0
- package/dist/cli/commands/worker.d.ts.map +1 -0
- package/dist/cli/config-path.d.ts +6 -0
- package/dist/cli/config-path.d.ts.map +1 -0
- package/dist/cli/dependencies.d.ts +1 -0
- package/dist/cli/dependencies.d.ts.map +1 -1
- package/dist/cli/deploy-strategy.d.ts +17 -0
- package/dist/cli/deploy-strategy.d.ts.map +1 -0
- package/dist/cli/deploy-target.d.ts +17 -0
- package/dist/cli/deploy-target.d.ts.map +1 -0
- package/dist/cli/generated-artifacts.d.ts +12 -0
- package/dist/cli/generated-artifacts.d.ts.map +1 -0
- package/dist/cli/help-pages/pages/account.d.ts +3 -0
- package/dist/cli/help-pages/pages/account.d.ts.map +1 -0
- package/dist/cli/help-pages/pages/core.d.ts +4 -0
- package/dist/cli/help-pages/pages/core.d.ts.map +1 -0
- package/dist/cli/help-pages/pages/index.d.ts +3 -0
- package/dist/cli/help-pages/pages/index.d.ts.map +1 -0
- package/dist/cli/help-pages/pages/misc.d.ts +3 -0
- package/dist/cli/help-pages/pages/misc.d.ts.map +1 -0
- package/dist/cli/help-pages/pages/previews.d.ts +3 -0
- package/dist/cli/help-pages/pages/previews.d.ts.map +1 -0
- package/dist/cli/help-pages/pages/productions.d.ts +3 -0
- package/dist/cli/help-pages/pages/productions.d.ts.map +1 -0
- package/dist/cli/help-pages/render.d.ts +12 -0
- package/dist/cli/help-pages/render.d.ts.map +1 -0
- package/dist/cli/help-pages/shared.d.ts +15 -0
- package/dist/cli/help-pages/shared.d.ts.map +1 -0
- package/dist/cli/help-pages/types.d.ts +23 -0
- package/dist/cli/help-pages/types.d.ts.map +1 -0
- package/dist/cli/help.d.ts +6 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +12 -0
- package/dist/cli/package-metadata.d.ts +16 -0
- package/dist/cli/package-metadata.d.ts.map +1 -0
- package/dist/cli/preview-bindings.d.ts +49 -0
- package/dist/cli/preview-bindings.d.ts.map +1 -0
- package/dist/cli/preview.d.ts +10 -0
- package/dist/cli/preview.d.ts.map +1 -0
- package/dist/cli/ui.d.ts +37 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/workspace-build-guard.d.ts +14 -0
- package/dist/cli/workspace-build-guard.d.ts.map +1 -0
- package/dist/cloudflare/account-core.d.ts +6 -0
- package/dist/cloudflare/account-core.d.ts.map +1 -0
- package/dist/cloudflare/account-resources.d.ts +40 -0
- package/dist/cloudflare/account-resources.d.ts.map +1 -0
- package/dist/cloudflare/account-status.d.ts +11 -0
- package/dist/cloudflare/account-status.d.ts.map +1 -0
- package/dist/cloudflare/account-workers.d.ts +14 -0
- package/dist/cloudflare/account-workers.d.ts.map +1 -0
- package/dist/cloudflare/account.d.ts +7 -64
- package/dist/cloudflare/account.d.ts.map +1 -1
- package/dist/cloudflare/api.d.ts +71 -3
- package/dist/cloudflare/api.d.ts.map +1 -1
- package/dist/cloudflare/auth.d.ts.map +1 -1
- package/dist/cloudflare/index.d.ts +57 -2
- package/dist/cloudflare/index.d.ts.map +1 -1
- package/dist/cloudflare/index.js +49 -2
- 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 +4 -0
- package/dist/cloudflare/kv-namespace.d.ts.map +1 -0
- package/dist/cloudflare/preferences.d.ts +7 -0
- package/dist/cloudflare/preferences.d.ts.map +1 -1
- package/dist/cloudflare/preview-registry-cache.d.ts +6 -0
- package/dist/cloudflare/preview-registry-cache.d.ts.map +1 -0
- 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 +4 -0
- package/dist/cloudflare/preview-registry-records.d.ts.map +1 -0
- 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-store.d.ts +14 -0
- package/dist/cloudflare/preview-registry-store.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-registry-types.d.ts +103 -0
- package/dist/cloudflare/preview-registry-types.d.ts.map +1 -0
- package/dist/cloudflare/preview-registry.d.ts +42 -0
- package/dist/cloudflare/preview-registry.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/registry-schema.d.ts +253 -0
- package/dist/cloudflare/registry-schema.d.ts.map +1 -0
- package/dist/cloudflare/tokens.d.ts +41 -0
- package/dist/cloudflare/tokens.d.ts.map +1 -0
- package/dist/cloudflare/types.d.ts +124 -7
- 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 +41 -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/bindings.d.ts +14 -0
- package/dist/config/compiler/bindings.d.ts.map +1 -0
- package/dist/config/compiler/core-helpers.d.ts +6 -0
- package/dist/config/compiler/core-helpers.d.ts.map +1 -0
- package/dist/config/compiler/do-workers.d.ts +34 -0
- package/dist/config/compiler/do-workers.d.ts.map +1 -0
- package/dist/config/compiler/paths.d.ts +18 -0
- package/dist/config/compiler/paths.d.ts.map +1 -0
- package/dist/config/compiler/types.d.ts +267 -0
- package/dist/config/compiler/types.d.ts.map +1 -0
- package/dist/config/compiler.d.ts +22 -134
- 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/framework-providers.d.ts +9 -0
- package/dist/config/framework-providers.d.ts.map +1 -0
- package/dist/config/index.d.ts +10 -4
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/loader.d.ts +1 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/local-dev-vars.d.ts +15 -0
- package/dist/config/local-dev-vars.d.ts.map +1 -0
- package/dist/config/preview-resources.d.ts +83 -0
- package/dist/config/preview-resources.d.ts.map +1 -0
- package/dist/config/preview.d.ts +31 -0
- package/dist/config/preview.d.ts.map +1 -0
- package/dist/config/ref.d.ts +14 -23
- 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 +11 -0
- package/dist/config/resolve.d.ts.map +1 -0
- package/dist/config/resource-resolution.d.ts +80 -0
- package/dist/config/resource-resolution.d.ts.map +1 -0
- package/dist/config/schema-bindings.d.ts +1495 -0
- package/dist/config/schema-bindings.d.ts.map +1 -0
- package/dist/config/schema-build.d.ts +67 -0
- package/dist/config/schema-build.d.ts.map +1 -0
- package/dist/config/schema-env.d.ts +2949 -0
- package/dist/config/schema-env.d.ts.map +1 -0
- package/dist/config/schema-normalization.d.ts +184 -0
- package/dist/config/schema-normalization.d.ts.map +1 -0
- package/dist/config/schema-runtime.d.ts +468 -0
- package/dist/config/schema-runtime.d.ts.map +1 -0
- package/dist/config/schema.d.ts +4056 -1875
- 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-1japnjmx.js +59 -0
- package/dist/config-287wjn1m.js +59 -0
- package/dist/config-4x6vq82e.js +59 -0
- package/dist/config-5n0avhcx.js +59 -0
- package/dist/config-6m0n7d84.js +59 -0
- package/dist/config-70s2ap5j.js +59 -0
- package/dist/config-7cf004ag.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-b98dp58n.js +59 -0
- package/dist/config-baee5690.js +59 -0
- package/dist/config-bczpc1ey.js +59 -0
- package/dist/config-cf3djhqy.js +59 -0
- package/dist/config-entry.d.ts +5 -0
- package/dist/config-entry.d.ts.map +1 -0
- package/dist/config-entry.js +14 -0
- 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-qj5jw8km.js +93 -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-wa7hm0w9.js +59 -0
- package/dist/config-x90dkmm7.js +59 -0
- package/dist/decorators/durable-object.d.ts.map +1 -1
- package/dist/deploy-1jfagtn9.js +1055 -0
- package/dist/deploy-1s6nv5rp.js +921 -0
- package/dist/deploy-2afw0jfg.js +1055 -0
- package/dist/deploy-2fzj68kq.js +1055 -0
- package/dist/deploy-30ph1rrd.js +921 -0
- package/dist/deploy-39dmfn9d.js +921 -0
- package/dist/deploy-44n2pshy.js +1016 -0
- package/dist/deploy-45qxpsfe.js +921 -0
- package/dist/deploy-57nzn9wj.js +1045 -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-a3pb1qs5.js +921 -0
- package/dist/deploy-agbtfm04.js +921 -0
- package/dist/deploy-aswbtbf3.js +921 -0
- package/dist/deploy-asyryrvm.js +1055 -0
- 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-hc927rw6.js +1045 -0
- package/dist/deploy-jey5pnqn.js +1040 -0
- package/dist/deploy-jf3yczsz.js +1055 -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-pnnf8tgy.js +1045 -0
- package/dist/deploy-ppp8pg6w.js +1038 -0
- package/dist/deploy-q33bw715.js +1055 -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-tmdgecs3.js +1055 -0
- package/dist/deploy-tnfvfh9m.js +1040 -0
- package/dist/deploy-v0y8kczr.js +1055 -0
- package/dist/deploy-w5f8db4s.js +1040 -0
- package/dist/deploy-wsxcectr.js +921 -0
- package/dist/deploy-xhj6zbcx.js +1055 -0
- package/dist/deploy-xqm869nf.js +1055 -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-02tgdc4f.js +2160 -0
- package/dist/dev-0tqhveye.js +2314 -0
- package/dist/dev-1mvcts8w.js +2515 -0
- package/dist/dev-2a283xts.js +2515 -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-62nhytf8.js +2505 -0
- package/dist/dev-6t22zmey.js +2350 -0
- package/dist/dev-75acm2xj.js +2478 -0
- package/dist/dev-802rg9dp.js +2515 -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-bgpxrwms.js +2551 -0
- package/dist/dev-bkbz97z0.js +2314 -0
- package/dist/dev-ct3344kv.js +2160 -0
- package/dist/dev-d1bb2t0f.js +2515 -0
- package/dist/{dev-qnxet3j9.js → dev-dg8dh5c1.js} +947 -809
- package/dist/dev-dr5jb965.js +2427 -0
- package/dist/dev-dwry8494.js +2489 -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-g6112y4w.js +2515 -0
- package/dist/dev-h2kneh95.js +2496 -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-kybq3mwr.js +2489 -0
- package/dist/dev-kzs65xcr.js +2551 -0
- package/dist/dev-n0gx7eya.js +2350 -0
- package/dist/dev-n23m6rtb.js +2314 -0
- package/dist/dev-n8qndkyg.js +2512 -0
- package/dist/dev-ny8fmkzg.js +2432 -0
- package/dist/dev-p1c65cga.js +2386 -0
- package/dist/dev-p32fkbwf.js +2489 -0
- package/dist/dev-p4fjbb4h.js +2395 -0
- package/dist/dev-pnfcv79z.js +2160 -0
- package/dist/dev-qm9d4mfh.js +2478 -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-rcthnse5.js +2473 -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 +36 -0
- package/dist/dev-server/d1-migrations.d.ts.map +1 -0
- package/dist/dev-server/dev-server-state.d.ts +59 -0
- package/dist/dev-server/dev-server-state.d.ts.map +1 -0
- package/dist/dev-server/gateway-script.d.ts +21 -0
- package/dist/dev-server/gateway-script.d.ts.map +1 -0
- package/dist/dev-server/miniflare-bindings.d.ts +59 -0
- package/dist/dev-server/miniflare-bindings.d.ts.map +1 -0
- package/dist/dev-server/miniflare-dev-config.d.ts +35 -0
- package/dist/dev-server/miniflare-dev-config.d.ts.map +1 -0
- package/dist/dev-server/miniflare-log.d.ts +20 -0
- package/dist/dev-server/miniflare-log.d.ts.map +1 -0
- package/dist/dev-server/miniflare-worker-config.d.ts +74 -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/runtime-stdio.d.ts +8 -0
- package/dist/dev-server/runtime-stdio.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 +2 -0
- package/dist/dev-server/server.d.ts.map +1 -1
- package/dist/dev-server/vite-process.d.ts +15 -0
- package/dist/dev-server/vite-process.d.ts.map +1 -0
- package/dist/dev-server/vite-utils.d.ts +55 -0
- package/dist/dev-server/vite-utils.d.ts.map +1 -0
- package/dist/dev-server/worker-source-watcher.d.ts +17 -0
- package/dist/dev-server/worker-source-watcher.d.ts.map +1 -0
- package/dist/dev-server/worker-surface-paths.d.ts +6 -0
- package/dist/dev-server/worker-surface-paths.d.ts.map +1 -0
- 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-tgwja5mz.js +2496 -0
- package/dist/dev-wg3d38sy.js +2433 -0
- package/dist/dev-wh4rfgsh.js +2427 -0
- package/dist/dev-wjh8gdd1.js +2284 -0
- package/dist/dev-xzxy9qvq.js +2314 -0
- package/dist/dev-yymaq4ph.js +2392 -0
- package/dist/dev-zg2w2ve3.js +2422 -0
- package/dist/dev-zgx7fhe9.js +2553 -0
- package/dist/dev-zsb2xk1x.js +2427 -0
- package/dist/dev-zty3yhzg.js +2324 -0
- package/dist/doctor-0a2brpyz.js +259 -0
- package/dist/doctor-2shhdak6.js +245 -0
- package/dist/doctor-3mqavqg3.js +245 -0
- package/dist/doctor-5g73w40j.js +245 -0
- package/dist/doctor-5nek32fz.js +245 -0
- package/dist/doctor-7ra1w0sk.js +245 -0
- package/dist/doctor-ak830a0k.js +245 -0
- package/dist/doctor-bye3cs8a.js +245 -0
- package/dist/doctor-c5m9pmwq.js +245 -0
- package/dist/doctor-cqfkgxvw.js +245 -0
- package/dist/doctor-e1h9mhzp.js +245 -0
- package/dist/doctor-fmqsrafk.js +245 -0
- package/dist/doctor-gamefzcs.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-rn53ctfs.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-t4kbb0yt.js → durable-object-4hey8fgy.js} +1 -1
- package/dist/durable-object-v3gsnybk.js +13 -0
- package/dist/durable-object-yt8v1dyn.js +13 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/index-01kehw41.js +348 -0
- package/dist/index-05pbj4hy.js +1193 -0
- package/dist/index-06bg0z9y.js +185 -0
- package/dist/index-0d7tw5r4.js +136 -0
- package/dist/index-0krb65s3.js +215 -0
- package/dist/index-0m6e4mxz.js +133 -0
- package/dist/index-0mantew0.js +513 -0
- package/dist/index-0mezg6ar.js +1372 -0
- package/dist/index-0tk2rs0q.js +185 -0
- package/dist/index-0vah20er.js +1410 -0
- package/dist/index-0wa0ebm1.js +68 -0
- package/dist/index-124e9t4t.js +232 -0
- package/dist/index-1546yrn0.js +74 -0
- package/dist/index-15fpa5tx.js +232 -0
- package/dist/index-1714y3cz.js +1410 -0
- package/dist/index-18mp5v50.js +538 -0
- package/dist/index-195tc6qh.js +1372 -0
- package/dist/index-1bg8w2gf.js +52 -0
- package/dist/index-1d4jg11n.js +542 -0
- package/dist/index-1e2qtrmj.js +188 -0
- package/dist/index-1ghhgb9d.js +74 -0
- package/dist/index-1nhd9nkd.js +232 -0
- package/dist/index-1p814k7s.js +227 -0
- package/dist/index-1qs5gcm7.js +895 -0
- package/dist/index-1wn8mjep.js +808 -0
- package/dist/index-1xhd5czz.js +185 -0
- package/dist/index-29k04v43.js +574 -0
- package/dist/index-2a2g4fwp.js +993 -0
- package/dist/index-2bmtj21z.js +192 -0
- package/dist/index-2dpmd14d.js +52 -0
- package/dist/index-2fa0afdp.js +1372 -0
- package/dist/index-2jywf4pz.js +1372 -0
- package/dist/index-2qhk9nbx.js +1372 -0
- package/dist/index-2rcrefqd.js +1372 -0
- package/dist/index-2t2m5148.js +1372 -0
- package/dist/index-2vbzamev.js +437 -0
- package/dist/index-2vdep9h0.js +993 -0
- package/dist/index-2vq6bveq.js +574 -0
- package/dist/index-2y90j9cz.js +74 -0
- package/dist/index-33ep0z9x.js +385 -0
- package/dist/index-36h8gkhb.js +1088 -0
- package/dist/index-37jgbaw6.js +1372 -0
- package/dist/index-380ncsqc.js +977 -0
- package/dist/index-38fq7pww.js +560 -0
- package/dist/index-3bxqn033.js +1410 -0
- package/dist/index-3e1x39fc.js +365 -0
- package/dist/index-3e7by9sy.js +223 -0
- package/dist/index-3edvz3hs.js +124 -0
- package/dist/index-3egad6wm.js +538 -0
- package/dist/index-3f8rzmjw.js +232 -0
- package/dist/index-3jme4hgw.js +1234 -0
- package/dist/index-3p7s9mk9.js +360 -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-47w35sft.js +244 -0
- package/dist/index-48rxsj95.js +365 -0
- package/dist/index-4bezcdd1.js +385 -0
- package/dist/index-4by4c7rm.js +52 -0
- package/dist/index-4fp11z9e.js +973 -0
- package/dist/index-4knecthc.js +70 -0
- package/dist/index-4phjwd6h.js +412 -0
- package/dist/index-4z5jrw0j.js +594 -0
- package/dist/index-502y7w13.js +538 -0
- package/dist/index-50em8s6c.js +898 -0
- package/dist/index-50mxxb4q.js +185 -0
- package/dist/index-51mzqy0d.js +895 -0
- package/dist/index-53pqqpq9.js +74 -0
- package/dist/index-5achzspr.js +185 -0
- package/dist/index-5ef3jmv7.js +1372 -0
- package/dist/index-5enq8ntr.js +1766 -0
- package/dist/index-5eswe8yv.js +844 -0
- package/dist/index-5fnq9r9m.js +1410 -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-5m85bd9x.js +168 -0
- package/dist/index-5n5nn0a8.js +264 -0
- package/dist/index-5p3bgjwr.js +808 -0
- package/dist/index-5vzcszr2.js +1230 -0
- package/dist/index-5w77r4w9.js +513 -0
- package/dist/index-5w9f2b17.js +695 -0
- package/dist/index-627srx16.js +45 -0
- package/dist/index-62b3gt2g.js +12 -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-666tdx14.js +895 -0
- package/dist/index-66sx3b3v.js +385 -0
- package/dist/index-678j0n13.js +74 -0
- package/dist/index-6bqgf5x8.js +227 -0
- package/dist/index-6ftrth7n.js +1218 -0
- package/dist/index-6g90pvxa.js +215 -0
- package/dist/index-6h8xbs75.js +44 -0
- package/dist/index-6j4m5x2d.js +1372 -0
- package/dist/index-6jwpke14.js +385 -0
- package/dist/index-6knsjvxh.js +1372 -0
- package/dist/index-6kwq6yf8.js +979 -0
- package/dist/index-6mg4yvc6.js +74 -0
- package/dist/index-6phry941.js +133 -0
- package/dist/index-6r59wbek.js +232 -0
- package/dist/index-6sf815ps.js +74 -0
- package/dist/index-6xknvbyk.js +1088 -0
- package/dist/index-6zd89k6y.js +1230 -0
- package/dist/index-71rwg0cn.js +264 -0
- package/dist/index-75ex2m0x.js +695 -0
- package/dist/index-79exzs3q.js +1218 -0
- package/dist/index-7bxj118m.js +264 -0
- package/dist/index-7c6np4mq.js +397 -0
- package/dist/index-7cm339qz.js +133 -0
- package/dist/index-7e359eb5.js +895 -0
- package/dist/index-7ef3ktz5.js +1372 -0
- package/dist/index-7eqyr4j8.js +70 -0
- package/dist/index-7hpjfdzh.js +185 -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-7r7dfpcm.js +133 -0
- package/dist/index-7vbjt6ba.js +805 -0
- package/dist/index-7z4b0vgd.js +470 -0
- package/dist/index-8052df4m.js +627 -0
- package/dist/index-82epjzrr.js +1410 -0
- package/dist/index-82f1z98k.js +41 -0
- package/dist/index-82xn4azv.js +74 -0
- package/dist/index-82z7rvz6.js +1238 -0
- package/dist/index-83wns7cz.js +70 -0
- package/dist/index-852945d4.js +413 -0
- package/dist/index-86rvj79f.js +133 -0
- package/dist/index-88tcq0t4.js +542 -0
- package/dist/index-8atc1yb9.js +68 -0
- package/dist/index-8evn52g1.js +1218 -0
- package/dist/index-8jkf4nsd.js +695 -0
- package/dist/index-8nx4ce3e.js +133 -0
- package/dist/index-8p7rxkbs.js +1426 -0
- package/dist/index-8q1bcnrh.js +1372 -0
- package/dist/index-8t5gynct.js +971 -0
- package/dist/index-8tj0awnv.js +476 -0
- package/dist/index-8x745h59.js +1069 -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-9bawzcny.js +574 -0
- package/dist/index-9bjjqdfc.js +236 -0
- package/dist/index-9d125myk.js +1372 -0
- package/dist/index-9d7x3vfr.js +236 -0
- package/dist/index-9fbtk7gv.js +817 -0
- package/dist/index-9gg0kqw0.js +470 -0
- package/dist/index-9nf8zs4p.js +1069 -0
- package/dist/index-9ryw7mcw.js +971 -0
- package/dist/{index-gz1gndna.js → index-9wt9x09k.js} +42 -62
- package/dist/index-a3e13a7m.js +478 -0
- package/dist/index-a6j44jmr.js +1372 -0
- package/dist/index-a75ejnvt.js +1711 -0
- package/dist/index-aabgympv.js +39 -0
- package/dist/index-ab2nck1h.js +1372 -0
- package/dist/index-abrqnq3e.js +488 -0
- package/dist/index-acwbmagz.js +412 -0
- package/dist/index-afjbpgb1.js +1218 -0
- package/dist/index-aqjdaem7.js +74 -0
- package/dist/index-aqrwyy57.js +288 -0
- package/dist/index-at89fpde.js +470 -0
- package/dist/index-awr0tp6p.js +313 -0
- package/dist/index-b1be9bdh.js +1372 -0
- package/dist/index-b1xs3wc4.js +513 -0
- package/dist/index-b50x7seh.js +513 -0
- package/dist/index-b5ra8w3q.js +52 -0
- package/dist/index-b6448fd0.js +133 -0
- package/dist/index-b64sbzgv.js +884 -0
- package/dist/index-b7r8ntpm.js +1372 -0
- package/dist/index-b9j55r7q.js +240 -0
- package/dist/index-ba9gyy13.js +513 -0
- package/dist/index-bb66mn7p.js +52 -0
- package/dist/index-bc5pvbbd.js +1193 -0
- package/dist/index-bdatd1za.js +1372 -0
- package/dist/index-bj0mk3dw.js +74 -0
- package/dist/index-bj3a8dr0.js +1372 -0
- package/dist/index-bj5avaba.js +109 -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-c0whkev9.js +200 -0
- package/dist/index-c3nxftnp.js +699 -0
- package/dist/index-c643s0gv.js +488 -0
- 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-crrdegk5.js +456 -0
- package/dist/index-cskszwkx.js +1372 -0
- package/dist/index-cxf22a0s.js +74 -0
- package/dist/index-cy3c3w81.js +270 -0
- package/dist/index-d2md1j3d.js +185 -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-dbr6bfz6.js +528 -0
- package/dist/index-dd1g0g7e.js +360 -0
- package/dist/index-dd6fwwmq.js +456 -0
- package/dist/index-dgww0ewn.js +574 -0
- package/dist/index-dh1954bp.js +52 -0
- package/dist/index-djp2wd1f.js +1372 -0
- package/dist/index-dktb9az5.js +1372 -0
- package/dist/index-dm9q84c7.js +360 -0
- package/dist/index-dmbdj6va.js +805 -0
- 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-ebwsvf9t.js +365 -0
- 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-f1yshy4s.js +412 -0
- package/dist/index-f51mkh13.js +1088 -0
- package/dist/index-f86n1fpd.js +55 -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-fnk0tkw7.js +412 -0
- package/dist/index-g0h40xke.js +513 -0
- package/dist/index-g0rqh52c.js +385 -0
- package/dist/index-g170d619.js +385 -0
- package/dist/index-g3qtxkms.js +881 -0
- package/dist/index-g5aq66bj.js +1534 -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-gj5qh491.js +54 -0
- package/dist/index-gn5wy09x.js +205 -0
- package/dist/index-gq39t0rx.js +895 -0
- package/dist/index-gtbgzwfs.js +264 -0
- package/dist/index-gtpz0gkz.js +185 -0
- package/dist/index-h1s66pmp.js +52 -0
- package/dist/index-h5dqna7q.js +1410 -0
- package/dist/index-h8r2d8y5.js +366 -0
- package/dist/index-heeqwrfd.js +385 -0
- package/dist/index-hheb5dyt.js +192 -0
- package/dist/index-hjs9j2g9.js +895 -0
- package/dist/index-hjz2x9nq.js +441 -0
- package/dist/index-hkex7ns5.js +513 -0
- package/dist/index-hmbctwv6.js +517 -0
- package/dist/index-hn5nbxbt.js +147 -0
- package/dist/index-hpjh0qjx.js +1723 -0
- package/dist/index-hpwa6vsw.js +239 -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-hs6ekcfs.js +412 -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-jdzrvnfj.js +52 -0
- package/dist/index-jg720mq7.js +476 -0
- package/dist/index-jptqxkew.js +470 -0
- package/dist/index-jrzddxvt.js +2167 -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-k7m5f1dg.js +200 -0
- package/dist/index-kawa49m8.js +371 -0
- package/dist/index-key4e5c9.js +168 -0
- package/dist/index-kgstnk6g.js +239 -0
- package/dist/index-khbmdrn2.js +884 -0
- package/dist/index-khnw972v.js +117 -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-kwqff3ba.js +1410 -0
- package/dist/index-kxc4gtyt.js +574 -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-m2v0fj08.js +74 -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-mjve6tqn.js +447 -0
- package/dist/index-mkrmaea3.js +185 -0
- package/dist/index-mkxnyyjn.js +264 -0
- package/dist/index-mkxzgn0q.js +1372 -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-mzmq3v0d.js +1088 -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-n4jr3dmk.js +484 -0
- 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-ng9n3znd.js +1372 -0
- package/dist/index-nga2tg9z.js +1372 -0
- package/dist/index-ngbzr9gz.js +805 -0
- package/dist/index-nh90nk7j.js +380 -0
- package/dist/index-nhbkm2ba.js +467 -0
- package/dist/index-njnmfxm5.js +1372 -0
- package/dist/index-nqma24j3.js +385 -0
- package/dist/index-nrfhk0k5.js +1088 -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-nxkesg55.js +68 -0
- package/dist/index-p0zppqxm.js +467 -0
- package/dist/index-p1xe5eem.js +513 -0
- package/dist/index-p296ban8.js +191 -0
- package/dist/index-p477xm52.js +385 -0
- package/dist/index-p7q23nce.js +1031 -0
- package/dist/index-p8nmkrgw.js +470 -0
- package/dist/index-p97s12vf.js +904 -0
- package/dist/index-p9hvv0yd.js +401 -0
- package/dist/index-pac7wv88.js +307 -0
- package/dist/index-pkxf6h87.js +895 -0
- package/dist/index-pqp4312v.js +52 -0
- package/dist/index-pt49cgjv.js +1426 -0
- package/dist/index-ptp2pfq1.js +52 -0
- package/dist/index-pw9jn6kz.js +574 -0
- package/dist/index-pyeycp3f.js +74 -0
- package/dist/index-q23xf3vr.js +479 -0
- package/dist/index-q31ne0xa.js +412 -0
- package/dist/index-q34rvh5a.js +247 -0
- package/dist/index-q5errwrj.js +904 -0
- package/dist/index-q5nhzc9m.js +1217 -0
- package/dist/index-q8f4kawk.js +204 -0
- package/dist/index-qer8zv2r.js +997 -0
- package/dist/index-qf2dkqxh.js +249 -0
- package/dist/index-qhyy018y.js +467 -0
- package/dist/index-qmhdydwy.js +70 -0
- package/dist/index-qmtdf7k5.js +639 -0
- package/dist/index-qpmvca5j.js +470 -0
- package/dist/index-qr96vaj1.js +52 -0
- package/dist/index-qtyhg3dn.js +904 -0
- package/dist/index-qwgr4q7s.js +37 -0
- package/dist/index-qye17gq5.js +264 -0
- package/dist/index-r0839f5k.js +133 -0
- package/dist/index-r1rqg72v.js +1372 -0
- package/dist/index-rab2dfh3.js +494 -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-rp0aye39.js +1426 -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-rz7rx80s.js +1410 -0
- package/dist/index-s22verzj.js +1218 -0
- package/dist/index-s2s3g1nt.js +133 -0
- package/dist/index-s37h3jgk.js +572 -0
- package/dist/index-s7ytytth.js +781 -0
- package/dist/index-sb705m7d.js +52 -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-stgn34cr.js +148 -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-syscwrjp.js +1576 -0
- package/dist/index-t14zr0ys.js +1063 -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-tjc99447.js +68 -0
- package/dist/index-tknbyxzn.js +2202 -0
- package/dist/index-tkvt9mmq.js +484 -0
- package/dist/index-tmmcf4m6.js +808 -0
- package/dist/index-tpgs5v64.js +366 -0
- package/dist/index-tt4fsv91.js +412 -0
- package/dist/{index-07q6yxyc.js → index-tte89s31.js} +30 -29
- 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-v35460hf.js +574 -0
- package/dist/index-v3znz08m.js +968 -0
- package/dist/index-v78xbj6n.js +808 -0
- package/dist/index-v7q00d1e.js +1410 -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-vcjgrmzj.js +456 -0
- package/dist/{index-pf5s73n9.js → index-vdewcg1r.js} +243 -385
- package/dist/index-vhqww6tt.js +307 -0
- package/dist/index-vkkmx4xe.js +1372 -0
- package/dist/index-vrps1gky.js +2202 -0
- package/dist/index-vse8620z.js +1372 -0
- package/dist/index-vt803j3b.js +1372 -0
- package/dist/index-vtjp46c3.js +52 -0
- package/dist/index-vxhxk8mf.js +904 -0
- package/dist/index-w3azfsa0.js +695 -0
- package/dist/index-w4c9vmvg.js +1517 -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-z14anrqp.js → index-wfbfz02q.js} +14 -15
- package/dist/index-wnnbbbkt.js +1192 -0
- package/dist/index-wqd8n2qk.js +574 -0
- package/dist/index-wvcmvtjf.js +1372 -0
- package/dist/index-x0jbntp0.js +470 -0
- package/dist/index-x12e6fzy.js +476 -0
- package/dist/index-x6scc3nx.js +70 -0
- package/dist/index-x8e2wsbv.js +971 -0
- package/dist/index-xagpz645.js +2199 -0
- package/dist/index-xbth1r6e.js +572 -0
- package/dist/index-xec4p3v5.js +560 -0
- package/dist/index-xgfyxpfs.js +1218 -0
- package/dist/index-xm9fqhcb.js +447 -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-y1d8za14.js +196 -0
- package/dist/index-y3q6qvv3.js +316 -0
- package/dist/index-y44ts1dk.js +52 -0
- package/dist/index-y59hnmd0.js +132 -0
- package/dist/index-y5nt1wjb.js +971 -0
- package/dist/index-y7mkb00x.js +133 -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-z40mjts9.js +212 -0
- package/dist/index-z4qgk76w.js +1372 -0
- package/dist/index-z5k5bjc7.js +1218 -0
- package/dist/index-z73sytma.js +895 -0
- package/dist/index-z8njfj2g.js +385 -0
- package/dist/index-z9fjnwa8.js +397 -0
- 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-zjv6apef.js +1410 -0
- package/dist/index-zsngz131.js +1372 -0
- package/dist/index-zt22fe2j.js +54 -0
- package/dist/index-zxhc6sb0.js +192 -0
- package/dist/index.d.ts +2 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -269
- package/dist/{init-f9mgmew3.js → init-cwpergap.js} +63 -69
- package/dist/init-wfh63bfz.js +180 -0
- package/dist/login-1amyp1jy.js +77 -0
- package/dist/login-1cdwn1dj.js +77 -0
- package/dist/login-456h8jk3.js +77 -0
- package/dist/login-4n470c4j.js +77 -0
- package/dist/login-4sh7s849.js +77 -0
- package/dist/login-5dmkf0pz.js +77 -0
- package/dist/login-7yex6ppq.js +77 -0
- package/dist/login-83bjfhvz.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-ddw888xb.js +77 -0
- package/dist/login-dp0napaz.js +77 -0
- package/dist/login-e7pytkdc.js +77 -0
- package/dist/login-fe0brfcr.js +77 -0
- package/dist/login-h7sm5trm.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-vd0m3xr4.js +77 -0
- package/dist/login-w76jx22q.js +77 -0
- package/dist/login-ze7y36rc.js +77 -0
- package/dist/previews-02jmcwft.js +1214 -0
- package/dist/previews-2wfvsjfy.js +1337 -0
- package/dist/previews-31bq82km.js +1225 -0
- package/dist/previews-31feb8r3.js +1337 -0
- package/dist/previews-3w4pxqby.js +1337 -0
- package/dist/previews-62pcvvpe.js +1214 -0
- package/dist/previews-6fepv94a.js +1225 -0
- package/dist/previews-76fxkp59.js +1214 -0
- package/dist/previews-844bp6kf.js +1214 -0
- package/dist/previews-8amn46qv.js +1214 -0
- package/dist/previews-93ttrf5f.js +1337 -0
- package/dist/previews-a5xbkksy.js +1214 -0
- package/dist/previews-bdrefjzx.js +1337 -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-cfcn56b4.js +1337 -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-mssq1hrm.js +1337 -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-sdte4984.js +1200 -0
- package/dist/previews-t5tdm6t0.js +1225 -0
- package/dist/previews-tcaz1gt8.js +1337 -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-2t9q8f57.js +505 -0
- package/dist/productions-4abj58kx.js +505 -0
- package/dist/productions-4dpec71r.js +505 -0
- package/dist/productions-4h80j2c7.js +505 -0
- package/dist/productions-4nedsanh.js +505 -0
- package/dist/productions-5c58yafp.js +505 -0
- package/dist/productions-5xq5cjhx.js +505 -0
- package/dist/productions-6dr0bmd7.js +505 -0
- package/dist/productions-86jaqt7m.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-bn2q31my.js +505 -0
- package/dist/productions-dkgry3gv.js +505 -0
- package/dist/productions-dv8g7f6g.js +505 -0
- package/dist/productions-e2m9s4tr.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-fgshs1m7.js +505 -0
- package/dist/productions-hphmt68n.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-vhq7yx86.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/router/types.d.ts +24 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/runtime/context-events.d.ts +13 -0
- package/dist/runtime/context-events.d.ts.map +1 -0
- package/dist/runtime/context-types.d.ts +82 -0
- package/dist/runtime/context-types.d.ts.map +1 -0
- package/dist/runtime/context.d.ts +27 -40
- package/dist/runtime/context.d.ts.map +1 -1
- package/dist/runtime/exports.d.ts +47 -55
- package/dist/runtime/exports.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +8 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +108 -99
- package/dist/runtime/middleware.d.ts +102 -60
- 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/router.d.ts +7 -0
- package/dist/runtime/router.d.ts.map +1 -0
- package/dist/runtime/validation.d.ts +10 -2
- package/dist/runtime/validation.d.ts.map +1 -1
- package/dist/secrets/local-secrets.d.ts +46 -0
- package/dist/secrets/local-secrets.d.ts.map +1 -0
- package/dist/secrets-8wcj47nh.js +91 -0
- package/dist/secrets-b2ww34ta.js +91 -0
- package/dist/secrets-b7g4z621.js +91 -0
- package/dist/shims/local-media-bindings.d.ts +19 -0
- package/dist/shims/local-media-bindings.d.ts.map +1 -0
- package/dist/shims/local-worker-loader.d.ts +3 -0
- package/dist/shims/local-worker-loader.d.ts.map +1 -0
- package/dist/sveltekit/index.js +187 -75
- package/dist/sveltekit/local-bindings.d.ts +4 -0
- package/dist/sveltekit/local-bindings.d.ts.map +1 -0
- package/dist/sveltekit/platform.d.ts +19 -1
- package/dist/sveltekit/platform.d.ts.map +1 -1
- package/dist/test/ai-search.d.ts +39 -0
- package/dist/test/ai-search.d.ts.map +1 -0
- 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 +12 -2
- package/dist/test/bridge-context.d.ts.map +1 -1
- package/dist/test/cf.d.ts +35 -21
- package/dist/test/cf.d.ts.map +1 -1
- package/dist/test/containers.d.ts +87 -0
- package/dist/test/containers.d.ts.map +1 -0
- package/dist/test/email.d.ts +16 -7
- package/dist/test/email.d.ts.map +1 -1
- package/dist/test/index.d.ts +5 -8
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +4595 -43
- package/dist/test/local-worker-loader.d.ts +3 -0
- package/dist/test/local-worker-loader.d.ts.map +1 -0
- package/dist/test/offline-bindings.d.ts +65 -0
- package/dist/test/offline-bindings.d.ts.map +1 -0
- package/dist/test/queue.d.ts.map +1 -1
- package/dist/test/remote-ai.d.ts.map +1 -1
- package/dist/test/remote-cloudflare.d.ts +13 -0
- package/dist/test/remote-cloudflare.d.ts.map +1 -0
- package/dist/test/remote-vectorize.d.ts.map +1 -1
- package/dist/test/resolve-service-bindings.d.ts +63 -3
- package/dist/test/resolve-service-bindings.d.ts.map +1 -1
- package/dist/test/scheduled.d.ts.map +1 -1
- package/dist/test/should-skip.d.ts +14 -18
- package/dist/test/should-skip.d.ts.map +1 -1
- 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-durable-objects.d.ts +6 -0
- package/dist/test/simple-context-durable-objects.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 +2 -0
- package/dist/test/simple-context-gateway-script.d.ts.map +1 -0
- 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 +10 -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-paths.d.ts +40 -0
- package/dist/test/simple-context-paths.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 +7 -26
- package/dist/test/simple-context.d.ts.map +1 -1
- package/dist/test/tail.d.ts +2 -1
- package/dist/test/tail.d.ts.map +1 -1
- package/dist/test/utilities/artifacts.d.ts +11 -0
- package/dist/test/utilities/artifacts.d.ts.map +1 -0
- package/dist/test/utilities/context.d.ts +39 -0
- package/dist/test/utilities/context.d.ts.map +1 -0
- package/dist/test/utilities/d1.d.ts +21 -0
- package/dist/test/utilities/d1.d.ts.map +1 -0
- package/dist/test/utilities/env.d.ts +40 -0
- package/dist/test/utilities/env.d.ts.map +1 -0
- package/dist/test/utilities/kv.d.ts +11 -0
- package/dist/test/utilities/kv.d.ts.map +1 -0
- package/dist/test/utilities/media.d.ts +16 -0
- package/dist/test/utilities/media.d.ts.map +1 -0
- package/dist/test/utilities/platform.d.ts +38 -0
- package/dist/test/utilities/platform.d.ts.map +1 -0
- package/dist/test/utilities/queue.d.ts +5 -0
- package/dist/test/utilities/queue.d.ts.map +1 -0
- package/dist/test/utilities/r2.d.ts +12 -0
- package/dist/test/utilities/r2.d.ts.map +1 -0
- package/dist/test/utilities/workflows.d.ts +26 -0
- package/dist/test/utilities/workflows.d.ts.map +1 -0
- package/dist/test/utilities.d.ts +10 -98
- package/dist/test/utilities.d.ts.map +1 -1
- package/dist/test/worker.d.ts +6 -0
- package/dist/test/worker.d.ts.map +1 -1
- package/dist/token-3b9wws58.js +419 -0
- package/dist/token-47kcz18j.js +419 -0
- package/dist/token-a2b38w0z.js +419 -0
- 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-5nyrz1sz.js → types-0qv4xces.js} +266 -148
- package/dist/types-2ejrbba1.js +695 -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-5t5y7a5n.js +572 -0
- package/dist/types-5wd2rygw.js +572 -0
- package/dist/types-7j3ykgx7.js +572 -0
- package/dist/types-7jkbm95a.js +695 -0
- package/dist/types-8g78x34n.js +572 -0
- package/dist/types-a2fk9yns.js +695 -0
- package/dist/types-dyb3c6zw.js +695 -0
- package/dist/types-e2n9f3pd.js +695 -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-j4s6qcrc.js +695 -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-qjcd1jks.js +572 -0
- 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-vhvt4hvm.js +693 -0
- package/dist/types-vvtb7rrh.js +572 -0
- package/dist/types-w1grncdj.js +572 -0
- package/dist/types-wmw49exb.js +572 -0
- package/dist/types-ymxz9jga.js +572 -0
- package/dist/utils/entrypoint-discovery.d.ts +6 -3
- package/dist/utils/entrypoint-discovery.d.ts.map +1 -1
- package/dist/utils/resolve-package.d.ts.map +1 -1
- package/dist/utils/send-email.d.ts +15 -0
- package/dist/utils/send-email.d.ts.map +1 -0
- package/dist/utils/send-email.js +19 -0
- package/dist/vite/config-file.d.ts +25 -0
- package/dist/vite/config-file.d.ts.map +1 -0
- package/dist/vite/index.d.ts +1 -0
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +25 -331
- 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 +27 -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-service-bindings.d.ts +13 -0
- package/dist/vite/plugin-service-bindings.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 +10 -41
- package/dist/vite/plugin.d.ts.map +1 -1
- package/dist/worker-18ceqscc.js +513 -0
- package/dist/worker-1yqpwte2.js +513 -0
- package/dist/worker-2aw27zxy.js +513 -0
- package/dist/worker-45tp4a8f.js +513 -0
- package/dist/worker-663em30d.js +513 -0
- package/dist/worker-68zttchg.js +513 -0
- package/dist/worker-729cf3fh.js +513 -0
- package/dist/worker-99tew196.js +513 -0
- package/dist/worker-argxc7fb.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 +7 -0
- package/dist/worker-entry/composed-worker.d.ts.map +1 -0
- 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 +22 -0
- package/dist/worker-entry/routes.d.ts.map +1 -0
- package/dist/worker-entry/surface-paths.d.ts +26 -0
- package/dist/worker-entry/surface-paths.d.ts.map +1 -0
- package/dist/worker-entrypoint-3rmzd4c1.js +15 -0
- package/dist/worker-entrypoint-4xp7msd7.js +16 -0
- package/dist/{worker-entrypoint-m9th0rg0.js → worker-entrypoint-c259fmfs.js} +1 -1
- package/dist/worker-entrypoint-f1v9y4s8.js +15 -0
- package/dist/worker-f6xqjg65.js +513 -0
- package/dist/worker-fcdsnj14.js +513 -0
- package/dist/worker-fdnn62de.js +513 -0
- package/dist/worker-fk42rzse.js +513 -0
- package/dist/worker-frnh95rg.js +513 -0
- package/dist/worker-jkemk8d2.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-m4ze8djx.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-wnan5dca.js +513 -0
- package/dist/worker-wv4jdneg.js +513 -0
- package/dist/worker-xcbscr75.js +513 -0
- package/dist/worker-yw3atfb1.js +513 -0
- package/dist/worker-ywwkf3cp.js +513 -0
- package/dist/worker-z8wtk0sh.js +513 -0
- package/dist/workflows/local-workflow-entrypoints.d.ts +7 -0
- package/dist/workflows/local-workflow-entrypoints.d.ts.map +1 -0
- package/package.json +140 -115
- package/dist/account-rvrj687w.js +0 -397
- package/dist/browser-shim/worker.d.ts +0 -14
- package/dist/browser-shim/worker.d.ts.map +0 -1
- package/dist/build-mnf6v8gd.js +0 -53
- package/dist/deploy-nhceck39.js +0 -70
- package/dist/doctor-e8fy6fj5.js +0 -186
- package/dist/index-67qcae0f.js +0 -183
- package/dist/index-ep3445yc.js +0 -2225
- package/dist/index-hcex3rgh.js +0 -266
- package/dist/index-m2q41jwa.js +0 -462
- package/dist/index-n7rs26ft.js +0 -77
- package/dist/index-tfyxa77h.js +0 -850
- package/dist/index-tk6ej9dj.js +0 -94
- package/dist/test/multi-worker-context.d.ts +0 -114
- package/dist/test/multi-worker-context.d.ts.map +0 -1
|
@@ -1,321 +1,67 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
bundleWorkerEntry,
|
|
3
|
+
createDOBundler
|
|
4
|
+
} from "./index-9fbtk7gv.js";
|
|
4
5
|
import {
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
detectViteProject,
|
|
7
|
+
stopSpawnedProcessTree,
|
|
8
|
+
waitForViteReady
|
|
9
|
+
} from "./index-y1d8za14.js";
|
|
7
10
|
import {
|
|
8
|
-
|
|
9
|
-
|
|
11
|
+
createCliTheme,
|
|
12
|
+
cyanBold,
|
|
13
|
+
dim,
|
|
14
|
+
logLine,
|
|
15
|
+
yellow
|
|
16
|
+
} from "./index-stgn34cr.js";
|
|
17
|
+
import"./index-3t6rypgc.js";
|
|
18
|
+
import {
|
|
19
|
+
DEFAULT_EMAIL_ENTRY_FILES,
|
|
20
|
+
DEFAULT_FETCH_ENTRY_FILES,
|
|
21
|
+
DEFAULT_QUEUE_ENTRY_FILES,
|
|
22
|
+
DEFAULT_SCHEDULED_ENTRY_FILES,
|
|
23
|
+
hasWorkerSurfacePaths,
|
|
24
|
+
prepareComposedWorkerEntrypoint,
|
|
25
|
+
resolveEffectiveViteProject,
|
|
26
|
+
resolveWorkerSurfacePaths,
|
|
27
|
+
writeGeneratedViteConfig
|
|
28
|
+
} from "./index-p97s12vf.js";
|
|
29
|
+
import {
|
|
30
|
+
discoverRoutes,
|
|
31
|
+
getRouteDirectoryCandidate
|
|
32
|
+
} from "./index-1p814k7s.js";
|
|
33
|
+
import"./index-rbht7m9r.js";
|
|
34
|
+
import"./index-9wt9x09k.js";
|
|
35
|
+
import {
|
|
36
|
+
GATEWAY_RUNTIME_JS
|
|
37
|
+
} from "./index-q34rvh5a.js";
|
|
38
|
+
import {
|
|
39
|
+
clearLocalSendEmailBindings,
|
|
40
|
+
setLocalSendEmailBindings
|
|
41
|
+
} from "./index-124e9t4t.js";
|
|
42
|
+
import"./index-n8k8chde.js";
|
|
43
|
+
import {
|
|
44
|
+
getLocalD1DatabaseIdentifier,
|
|
45
|
+
getLocalKVNamespaceIdentifier,
|
|
46
|
+
getSingleBrowserBindingName,
|
|
47
|
+
loadConfig,
|
|
48
|
+
resolveConfigPath
|
|
49
|
+
} from "./index-dmbdj6va.js";
|
|
50
|
+
import"./index-nte9n8w9.js";
|
|
51
|
+
import"./index-z9fjnwa8.js";
|
|
52
|
+
import"./index-p296ban8.js";
|
|
53
|
+
import"./index-tte89s31.js";
|
|
10
54
|
import {
|
|
11
55
|
__require
|
|
12
56
|
} from "./index-37x76zdn.js";
|
|
13
57
|
|
|
14
58
|
// src/cli/commands/dev.ts
|
|
15
59
|
import { createConsola } from "consola";
|
|
16
|
-
import { resolve as
|
|
60
|
+
import { relative, resolve as resolve4 } from "pathe";
|
|
17
61
|
|
|
18
62
|
// src/dev-server/server.ts
|
|
19
|
-
import { resolve as
|
|
63
|
+
import { resolve as resolve3 } from "pathe";
|
|
20
64
|
|
|
21
|
-
// src/bundler/do-bundler.ts
|
|
22
|
-
import { resolve, dirname, relative } from "pathe";
|
|
23
|
-
import picomatch from "picomatch";
|
|
24
|
-
function classToBindingName(className) {
|
|
25
|
-
return className.replace(/([a-z0-9])([A-Z])/g, "$1_$2").replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2").toUpperCase();
|
|
26
|
-
}
|
|
27
|
-
async function discoverDOs(cwd, pattern) {
|
|
28
|
-
const fs = await import("node:fs/promises");
|
|
29
|
-
const discovered = [];
|
|
30
|
-
const files = await findFiles(pattern, { cwd });
|
|
31
|
-
for (const filePath of files) {
|
|
32
|
-
try {
|
|
33
|
-
const code = await fs.readFile(filePath, "utf-8");
|
|
34
|
-
const classNames = findDurableObjectClasses(code);
|
|
35
|
-
for (const className of classNames) {
|
|
36
|
-
discovered.push({
|
|
37
|
-
filePath,
|
|
38
|
-
className,
|
|
39
|
-
bindingName: classToBindingName(className)
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
} catch {}
|
|
43
|
-
}
|
|
44
|
-
return discovered;
|
|
45
|
-
}
|
|
46
|
-
function stripDecoratorSyntax(code) {
|
|
47
|
-
let result = code;
|
|
48
|
-
result = result.replace(/@durableObject\s*\([^)]*\)\s*\n?\s*(?=export\s+class)/g, "");
|
|
49
|
-
result = result.replace(/import\s*\{([^}]*)\bdurableObject\b[^}]*\}\s*from\s*['"]devflare\/runtime['"]\s*;?/g, (match, imports) => {
|
|
50
|
-
const cleanedImports = imports.split(",").map((s) => s.trim()).filter((s) => !s.startsWith("durableObject")).join(", ");
|
|
51
|
-
if (cleanedImports.trim() === "") {
|
|
52
|
-
return "";
|
|
53
|
-
}
|
|
54
|
-
return `import { ${cleanedImports} } from 'devflare/runtime'`;
|
|
55
|
-
});
|
|
56
|
-
return result;
|
|
57
|
-
}
|
|
58
|
-
async function bundleDOFile(sourcePath, className, outDir, cwd) {
|
|
59
|
-
const { rolldown } = await import("rolldown");
|
|
60
|
-
const fs = await import("node:fs/promises");
|
|
61
|
-
await fs.mkdir(outDir, { recursive: true });
|
|
62
|
-
const sourceCode = await fs.readFile(sourcePath, "utf-8");
|
|
63
|
-
const cleanedCode = stripDecoratorSyntax(sourceCode);
|
|
64
|
-
const entryCode = `${cleanedCode}
|
|
65
|
-
|
|
66
|
-
// Default export for worker (required by Miniflare)
|
|
67
|
-
export default {
|
|
68
|
-
async fetch(request) {
|
|
69
|
-
return new Response('DO Worker for ${className}', { status: 200 });
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
`;
|
|
73
|
-
const tempFilePath = resolve(outDir, `_temp_${className}.ts`);
|
|
74
|
-
await fs.writeFile(tempFilePath, entryCode, "utf-8");
|
|
75
|
-
const classOutDir = resolve(outDir, className);
|
|
76
|
-
try {
|
|
77
|
-
await fs.rm(classOutDir, { recursive: true, force: true });
|
|
78
|
-
} catch {}
|
|
79
|
-
await fs.mkdir(classOutDir, { recursive: true });
|
|
80
|
-
const debugShimCode = `
|
|
81
|
-
// Debug module shim for local development
|
|
82
|
-
const createDebug = (namespace) => {
|
|
83
|
-
const logger = (...args) => {
|
|
84
|
-
if (createDebug.enabled) console.debug(\`[\${namespace}]\`, ...args)
|
|
85
|
-
}
|
|
86
|
-
logger.enabled = false
|
|
87
|
-
logger.namespace = namespace
|
|
88
|
-
logger.extend = (sub) => createDebug(\`\${namespace}:\${sub}\`)
|
|
89
|
-
return logger
|
|
90
|
-
}
|
|
91
|
-
createDebug.enabled = false
|
|
92
|
-
createDebug.formatters = {}
|
|
93
|
-
export default createDebug
|
|
94
|
-
`;
|
|
95
|
-
const debugShimPath = resolve(outDir, "_debug_shim.js");
|
|
96
|
-
await fs.writeFile(debugShimPath, debugShimCode, "utf-8");
|
|
97
|
-
const bundle = await rolldown({
|
|
98
|
-
input: tempFilePath,
|
|
99
|
-
platform: "neutral",
|
|
100
|
-
tsconfig: resolve(cwd, "tsconfig.json"),
|
|
101
|
-
external: [
|
|
102
|
-
/^cloudflare:/,
|
|
103
|
-
/^node:/,
|
|
104
|
-
"buffer",
|
|
105
|
-
"crypto",
|
|
106
|
-
"events",
|
|
107
|
-
"http",
|
|
108
|
-
"https",
|
|
109
|
-
"net",
|
|
110
|
-
"os",
|
|
111
|
-
"path",
|
|
112
|
-
"stream",
|
|
113
|
-
"tls",
|
|
114
|
-
"url",
|
|
115
|
-
"util",
|
|
116
|
-
"zlib",
|
|
117
|
-
"fs",
|
|
118
|
-
"child_process",
|
|
119
|
-
"async_hooks",
|
|
120
|
-
"querystring",
|
|
121
|
-
"string_decoder",
|
|
122
|
-
"assert",
|
|
123
|
-
"dns"
|
|
124
|
-
],
|
|
125
|
-
resolve: {
|
|
126
|
-
alias: {
|
|
127
|
-
debug: debugShimPath
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
const outFile = resolve(classOutDir, "index.js");
|
|
132
|
-
await bundle.write({
|
|
133
|
-
file: outFile,
|
|
134
|
-
format: "esm",
|
|
135
|
-
sourcemap: false,
|
|
136
|
-
inlineDynamicImports: true
|
|
137
|
-
});
|
|
138
|
-
await bundle.close();
|
|
139
|
-
try {
|
|
140
|
-
await fs.unlink(tempFilePath);
|
|
141
|
-
} catch {}
|
|
142
|
-
return resolve(classOutDir, "index.js");
|
|
143
|
-
}
|
|
144
|
-
async function bundleAllDOs(discovered, outDir, cwd, logger) {
|
|
145
|
-
const fs = await import("node:fs/promises");
|
|
146
|
-
const bundles = new Map;
|
|
147
|
-
const classes = new Map;
|
|
148
|
-
const sourceFiles = new Map;
|
|
149
|
-
const errors = [];
|
|
150
|
-
for (const do_ of discovered) {
|
|
151
|
-
const existing = sourceFiles.get(do_.filePath) || [];
|
|
152
|
-
existing.push(do_.className);
|
|
153
|
-
sourceFiles.set(do_.filePath, existing);
|
|
154
|
-
}
|
|
155
|
-
for (const do_ of discovered) {
|
|
156
|
-
try {
|
|
157
|
-
logger?.debug(`Bundling ${do_.className} from ${do_.filePath}`);
|
|
158
|
-
const outFile = await bundleDOFile(do_.filePath, do_.className, outDir, cwd);
|
|
159
|
-
bundles.set(do_.bindingName, outFile);
|
|
160
|
-
classes.set(do_.bindingName, do_.className);
|
|
161
|
-
logger?.debug(` → ${outFile}`);
|
|
162
|
-
} catch (error) {
|
|
163
|
-
const err = error instanceof Error ? error : new Error(String(error));
|
|
164
|
-
errors.push(err);
|
|
165
|
-
logger?.error(`Failed to bundle ${do_.className}:`, err.message);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
return { bundles, classes, sourceFiles, errors };
|
|
169
|
-
}
|
|
170
|
-
function createDOBundler(options) {
|
|
171
|
-
const { cwd, pattern, outDir, logger, onRebuild } = options;
|
|
172
|
-
let result = {
|
|
173
|
-
bundles: new Map,
|
|
174
|
-
classes: new Map,
|
|
175
|
-
sourceFiles: new Map,
|
|
176
|
-
errors: []
|
|
177
|
-
};
|
|
178
|
-
let watcher = null;
|
|
179
|
-
let chokidarWatcher = null;
|
|
180
|
-
async function build() {
|
|
181
|
-
const discovered = await discoverDOs(cwd, pattern);
|
|
182
|
-
if (discovered.length === 0) {
|
|
183
|
-
logger?.debug("No DOs found matching pattern:", pattern);
|
|
184
|
-
return result;
|
|
185
|
-
}
|
|
186
|
-
logger?.info(`Found ${discovered.length} Durable Object(s)`);
|
|
187
|
-
for (const do_ of discovered) {
|
|
188
|
-
logger?.info(` • ${do_.className} → ${do_.bindingName}`);
|
|
189
|
-
}
|
|
190
|
-
result = await bundleAllDOs(discovered, outDir, cwd, logger);
|
|
191
|
-
if (result.errors.length === 0) {
|
|
192
|
-
logger?.success(`Bundled ${result.bundles.size} DO(s) to ${outDir}`);
|
|
193
|
-
}
|
|
194
|
-
return result;
|
|
195
|
-
}
|
|
196
|
-
async function watch() {
|
|
197
|
-
const chokidar = await import("chokidar");
|
|
198
|
-
const files = await findFiles(pattern, { cwd });
|
|
199
|
-
let dirsToWatch;
|
|
200
|
-
if (files.length > 0) {
|
|
201
|
-
dirsToWatch = [...new Set(files.map((f) => dirname(f)))];
|
|
202
|
-
} else {
|
|
203
|
-
const patternDir = dirname(pattern);
|
|
204
|
-
const absolutePatternDir = resolve(cwd, patternDir === "." ? "" : patternDir) || cwd;
|
|
205
|
-
dirsToWatch = [absolutePatternDir];
|
|
206
|
-
logger?.debug(`No DO files yet, watching pattern directory: ${absolutePatternDir}`);
|
|
207
|
-
}
|
|
208
|
-
logger?.info(`Watching ${files.length} DO file(s) in ${dirsToWatch.length} director(ies)...`);
|
|
209
|
-
const isWindows = process.platform === "win32";
|
|
210
|
-
chokidarWatcher = chokidar.watch(dirsToWatch, {
|
|
211
|
-
ignoreInitial: true,
|
|
212
|
-
usePolling: isWindows,
|
|
213
|
-
interval: isWindows ? 300 : undefined,
|
|
214
|
-
awaitWriteFinish: {
|
|
215
|
-
stabilityThreshold: 100,
|
|
216
|
-
pollInterval: 50
|
|
217
|
-
},
|
|
218
|
-
depth: 0
|
|
219
|
-
});
|
|
220
|
-
const normalizePath = (p) => {
|
|
221
|
-
let normalized = p.replace(/\\/g, "/");
|
|
222
|
-
if (isWindows && /^[a-zA-Z]:/.test(normalized)) {
|
|
223
|
-
normalized = normalized[0].toLowerCase() + normalized.slice(1);
|
|
224
|
-
}
|
|
225
|
-
return normalized;
|
|
226
|
-
};
|
|
227
|
-
const isMatch = picomatch(pattern, {
|
|
228
|
-
cwd,
|
|
229
|
-
dot: true,
|
|
230
|
-
matchBase: false
|
|
231
|
-
});
|
|
232
|
-
const matchesPattern = (filePath) => {
|
|
233
|
-
const normalizedPath = normalizePath(filePath);
|
|
234
|
-
const relativePath = relative(normalizePath(cwd), normalizedPath);
|
|
235
|
-
return isMatch(relativePath);
|
|
236
|
-
};
|
|
237
|
-
let isRebuilding = false;
|
|
238
|
-
let pendingRebuild = null;
|
|
239
|
-
let rebuildTimeout = null;
|
|
240
|
-
const scheduleRebuild = (changedPath) => {
|
|
241
|
-
if (rebuildTimeout) {
|
|
242
|
-
clearTimeout(rebuildTimeout);
|
|
243
|
-
}
|
|
244
|
-
rebuildTimeout = setTimeout(() => {
|
|
245
|
-
triggerRebuild(changedPath);
|
|
246
|
-
}, 150);
|
|
247
|
-
};
|
|
248
|
-
const triggerRebuild = async (changedPath) => {
|
|
249
|
-
if (isRebuilding) {
|
|
250
|
-
pendingRebuild = changedPath;
|
|
251
|
-
logger?.debug(`Rebuild already in progress, queuing: ${changedPath}`);
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
isRebuilding = true;
|
|
255
|
-
try {
|
|
256
|
-
logger?.info(`DO file changed: ${changedPath}`);
|
|
257
|
-
logger?.info("Rebuilding DOs...");
|
|
258
|
-
const startTime = Date.now();
|
|
259
|
-
result = await build();
|
|
260
|
-
const elapsed = Date.now() - startTime;
|
|
261
|
-
logger?.success(`DO rebuild complete (${elapsed}ms)`);
|
|
262
|
-
await onRebuild?.(result);
|
|
263
|
-
} catch (error) {
|
|
264
|
-
logger?.error("DO rebuild failed:", error);
|
|
265
|
-
} finally {
|
|
266
|
-
isRebuilding = false;
|
|
267
|
-
if (pendingRebuild) {
|
|
268
|
-
const nextPath = pendingRebuild;
|
|
269
|
-
pendingRebuild = null;
|
|
270
|
-
triggerRebuild(nextPath);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
};
|
|
274
|
-
chokidarWatcher.on("change", (filePath) => {
|
|
275
|
-
if (matchesPattern(filePath)) {
|
|
276
|
-
logger?.debug(`File changed: ${filePath}`);
|
|
277
|
-
scheduleRebuild(filePath);
|
|
278
|
-
}
|
|
279
|
-
});
|
|
280
|
-
chokidarWatcher.on("add", (filePath) => {
|
|
281
|
-
if (matchesPattern(filePath)) {
|
|
282
|
-
logger?.debug(`File added: ${filePath}`);
|
|
283
|
-
scheduleRebuild(filePath);
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
chokidarWatcher.on("unlink", (filePath) => {
|
|
287
|
-
if (matchesPattern(filePath)) {
|
|
288
|
-
logger?.debug(`File removed: ${filePath}`);
|
|
289
|
-
scheduleRebuild(filePath);
|
|
290
|
-
}
|
|
291
|
-
});
|
|
292
|
-
chokidarWatcher.on("ready", () => {
|
|
293
|
-
logger?.info("DO file watcher ready");
|
|
294
|
-
});
|
|
295
|
-
chokidarWatcher.on("error", (error) => {
|
|
296
|
-
logger?.error("DO file watcher error:", error);
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
async function close() {
|
|
300
|
-
if (watcher) {
|
|
301
|
-
await watcher.close();
|
|
302
|
-
watcher = null;
|
|
303
|
-
}
|
|
304
|
-
if (chokidarWatcher) {
|
|
305
|
-
await chokidarWatcher.close();
|
|
306
|
-
chokidarWatcher = null;
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
function getResult() {
|
|
310
|
-
return result;
|
|
311
|
-
}
|
|
312
|
-
return {
|
|
313
|
-
build,
|
|
314
|
-
watch,
|
|
315
|
-
close,
|
|
316
|
-
getResult
|
|
317
|
-
};
|
|
318
|
-
}
|
|
319
65
|
// src/browser-shim/server.ts
|
|
320
66
|
import { homedir } from "node:os";
|
|
321
67
|
import { join } from "node:path";
|
|
@@ -328,8 +74,6 @@ import {
|
|
|
328
74
|
detectBrowserPlatform,
|
|
329
75
|
Browser as BrowserType
|
|
330
76
|
} from "@puppeteer/browsers";
|
|
331
|
-
var sessions = new Map;
|
|
332
|
-
var history = [];
|
|
333
77
|
var cachedExecutablePath = null;
|
|
334
78
|
async function ensureChrome(cacheDir, logger) {
|
|
335
79
|
if (cachedExecutablePath && existsSync(cachedExecutablePath)) {
|
|
@@ -369,8 +113,45 @@ function createBrowserShim(options = {}) {
|
|
|
369
113
|
} = options;
|
|
370
114
|
let server = null;
|
|
371
115
|
let executablePath = null;
|
|
116
|
+
const sessions = new Map;
|
|
117
|
+
const history = [];
|
|
372
118
|
let WebSocketServerClass = null;
|
|
373
119
|
let WebSocketClass = null;
|
|
120
|
+
const maxRequestBodyBytes = 1024 * 1024;
|
|
121
|
+
function getRequestOrigin(req) {
|
|
122
|
+
const origin = req.headers.origin;
|
|
123
|
+
if (typeof origin === "string") {
|
|
124
|
+
return origin;
|
|
125
|
+
}
|
|
126
|
+
if (Array.isArray(origin) && origin[0]) {
|
|
127
|
+
return origin[0];
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
function isLoopbackOrigin(origin) {
|
|
132
|
+
try {
|
|
133
|
+
const url = new URL(origin);
|
|
134
|
+
return url.hostname === "127.0.0.1" || url.hostname === "localhost" || url.hostname === "::1" || url.hostname === "[::1]";
|
|
135
|
+
} catch {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function applyCorsHeaders(req, res) {
|
|
140
|
+
const origin = getRequestOrigin(req);
|
|
141
|
+
if (!origin) {
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
if (!isLoopbackOrigin(origin)) {
|
|
145
|
+
res.writeHead(403, { "Content-Type": "application/json" });
|
|
146
|
+
res.end(JSON.stringify({ error: "Forbidden origin" }));
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
res.setHeader("Access-Control-Allow-Origin", origin);
|
|
150
|
+
res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
|
|
151
|
+
res.setHeader("Access-Control-Allow-Headers", "Content-Type");
|
|
152
|
+
res.setHeader("Vary", "Origin");
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
374
155
|
async function acquireSession(acquireOptions) {
|
|
375
156
|
if (!executablePath) {
|
|
376
157
|
throw new Error("Chrome not initialized");
|
|
@@ -449,9 +230,9 @@ function createBrowserShim(options = {}) {
|
|
|
449
230
|
const url = new URL(req.url || "/", `http://${host}:${port}`);
|
|
450
231
|
const method = req.method || "GET";
|
|
451
232
|
logger?.debug(`[BrowserShim] ${method} ${url.pathname}${url.search ? url.search : ""}`);
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
233
|
+
if (!applyCorsHeaders(req, res)) {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
455
236
|
if (method === "OPTIONS") {
|
|
456
237
|
res.writeHead(204);
|
|
457
238
|
res.end();
|
|
@@ -537,10 +318,19 @@ function createBrowserShim(options = {}) {
|
|
|
537
318
|
res.end("Not found");
|
|
538
319
|
}
|
|
539
320
|
function readBody(req) {
|
|
540
|
-
return new Promise((
|
|
321
|
+
return new Promise((resolve, reject) => {
|
|
541
322
|
const chunks = [];
|
|
542
|
-
|
|
543
|
-
req.on("
|
|
323
|
+
let totalBytes = 0;
|
|
324
|
+
req.on("data", (chunk) => {
|
|
325
|
+
totalBytes += chunk.length;
|
|
326
|
+
if (totalBytes > maxRequestBodyBytes) {
|
|
327
|
+
req.destroy();
|
|
328
|
+
reject(new Error(`Request body exceeds ${maxRequestBodyBytes} bytes`));
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
chunks.push(chunk);
|
|
332
|
+
});
|
|
333
|
+
req.on("end", () => resolve(Buffer.concat(chunks).toString()));
|
|
544
334
|
req.on("error", reject);
|
|
545
335
|
});
|
|
546
336
|
}
|
|
@@ -573,6 +363,14 @@ function createBrowserShim(options = {}) {
|
|
|
573
363
|
if (WebSocketServerClass) {
|
|
574
364
|
const wss = new WebSocketServerClass({ noServer: true });
|
|
575
365
|
server.on("upgrade", (request, socket, head) => {
|
|
366
|
+
const origin = getRequestOrigin(request);
|
|
367
|
+
if (origin && !isLoopbackOrigin(origin)) {
|
|
368
|
+
socket.write(`HTTP/1.1 403 Forbidden\r
|
|
369
|
+
\r
|
|
370
|
+
`);
|
|
371
|
+
socket.destroy();
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
576
374
|
const url = new URL(request.url || "/", `http://${host}:${port}`);
|
|
577
375
|
if (url.pathname !== "/v1/connectDevtools") {
|
|
578
376
|
socket.destroy();
|
|
@@ -681,21 +479,21 @@ function createBrowserShim(options = {}) {
|
|
|
681
479
|
});
|
|
682
480
|
});
|
|
683
481
|
}
|
|
684
|
-
await new Promise((
|
|
482
|
+
await new Promise((resolve, reject) => {
|
|
685
483
|
server.on("error", reject);
|
|
686
484
|
server.listen(port, host, () => {
|
|
687
|
-
|
|
485
|
+
resolve();
|
|
688
486
|
});
|
|
689
487
|
});
|
|
690
488
|
logger?.success(`Browser shim server ready on http://${host}:${port}`);
|
|
691
489
|
}
|
|
692
490
|
async function stop() {
|
|
693
|
-
for (const sessionId of sessions.keys()) {
|
|
491
|
+
for (const sessionId of Array.from(sessions.keys())) {
|
|
694
492
|
await closeSession(sessionId, 3, "ServerShutdown");
|
|
695
493
|
}
|
|
696
494
|
if (server) {
|
|
697
|
-
await new Promise((
|
|
698
|
-
server.close(() =>
|
|
495
|
+
await new Promise((resolve) => {
|
|
496
|
+
server.close(() => resolve());
|
|
699
497
|
});
|
|
700
498
|
server = null;
|
|
701
499
|
}
|
|
@@ -1087,55 +885,157 @@ async function checkRemoteBindingRequirements(config) {
|
|
|
1087
885
|
};
|
|
1088
886
|
}
|
|
1089
887
|
|
|
1090
|
-
// src/dev-server/
|
|
1091
|
-
|
|
888
|
+
// src/dev-server/d1-migrations.ts
|
|
889
|
+
import { resolve } from "pathe";
|
|
890
|
+
var MIGRATION_RETRY_DELAYS_MS = [500, 1000, 1500, 2000];
|
|
891
|
+
function collectMigrationStatements(sql) {
|
|
892
|
+
const cleanedSql = sql.split(`
|
|
893
|
+
`).filter((line) => !line.trim().startsWith("--")).join(`
|
|
894
|
+
`);
|
|
895
|
+
return cleanedSql.split(";").map((statement) => statement.trim()).filter((statement) => statement.length > 0);
|
|
896
|
+
}
|
|
897
|
+
function getErrorMessage(error) {
|
|
898
|
+
return error instanceof Error ? error.message : String(error);
|
|
899
|
+
}
|
|
900
|
+
async function waitForRetry(delayMs) {
|
|
901
|
+
await new Promise((resolvePromise) => setTimeout(resolvePromise, delayMs));
|
|
902
|
+
}
|
|
903
|
+
async function applyMigrationsToBinding(options) {
|
|
904
|
+
const { bindingName, statements, miniflarePort, logger } = options;
|
|
905
|
+
let lastError;
|
|
906
|
+
for (let attempt = 0;attempt <= MIGRATION_RETRY_DELAYS_MS.length; attempt++) {
|
|
907
|
+
if (attempt > 0) {
|
|
908
|
+
await waitForRetry(MIGRATION_RETRY_DELAYS_MS[attempt - 1]);
|
|
909
|
+
}
|
|
910
|
+
try {
|
|
911
|
+
const response = await fetch(`http://127.0.0.1:${miniflarePort}/_devflare/migrate`, {
|
|
912
|
+
method: "POST",
|
|
913
|
+
headers: { "Content-Type": "application/json" },
|
|
914
|
+
body: JSON.stringify({ bindingName, statements })
|
|
915
|
+
});
|
|
916
|
+
if (!response.ok) {
|
|
917
|
+
const text = await response.text();
|
|
918
|
+
throw new Error(`HTTP ${response.status}: ${text}`);
|
|
919
|
+
}
|
|
920
|
+
const result = await response.json();
|
|
921
|
+
if (result.success) {
|
|
922
|
+
logger?.success(`D1 migrations applied to ${bindingName}`);
|
|
923
|
+
return;
|
|
924
|
+
}
|
|
925
|
+
throw new Error(result.error || "Unknown error");
|
|
926
|
+
} catch (error) {
|
|
927
|
+
lastError = error;
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
logger?.warn(`Failed to apply migrations to ${bindingName}: ${getErrorMessage(lastError)}`);
|
|
931
|
+
}
|
|
932
|
+
async function runD1Migrations(options) {
|
|
933
|
+
const { cwd, config, miniflarePort, logger } = options;
|
|
934
|
+
if (!config?.bindings?.d1) {
|
|
935
|
+
return;
|
|
936
|
+
}
|
|
937
|
+
const { existsSync: existsSync2, readdirSync, readFileSync, statSync } = await import("node:fs");
|
|
938
|
+
const migrationsDir = resolve(cwd, "migrations");
|
|
939
|
+
if (!existsSync2(migrationsDir)) {
|
|
940
|
+
logger?.debug("No migrations/ directory found, skipping D1 migrations");
|
|
941
|
+
return;
|
|
942
|
+
}
|
|
943
|
+
const sharedFiles = readdirSync(migrationsDir).filter((file) => file.endsWith(".sql")).sort();
|
|
944
|
+
let sharedStatements = null;
|
|
945
|
+
if (sharedFiles.length > 0) {
|
|
946
|
+
sharedStatements = [];
|
|
947
|
+
for (const file of sharedFiles) {
|
|
948
|
+
const sql = readFileSync(resolve(migrationsDir, file), "utf-8");
|
|
949
|
+
const fileStatements = collectMigrationStatements(sql);
|
|
950
|
+
sharedStatements.push(...fileStatements);
|
|
951
|
+
logger?.debug(`Shared file ${file}: ${fileStatements.length} statement(s)`);
|
|
952
|
+
}
|
|
953
|
+
}
|
|
954
|
+
for (const [bindingName] of Object.entries(config.bindings.d1)) {
|
|
955
|
+
const perBindingDir = resolve(migrationsDir, bindingName);
|
|
956
|
+
const hasPerBindingDir = existsSync2(perBindingDir) && statSync(perBindingDir).isDirectory();
|
|
957
|
+
let statements = [];
|
|
958
|
+
let fileCount = 0;
|
|
959
|
+
let sourceLabel = "";
|
|
960
|
+
if (hasPerBindingDir) {
|
|
961
|
+
const perBindingFiles = readdirSync(perBindingDir).filter((file) => file.endsWith(".sql")).sort();
|
|
962
|
+
if (perBindingFiles.length === 0) {
|
|
963
|
+
logger?.debug(`No SQL migration files in migrations/${bindingName}/, skipping ${bindingName}`);
|
|
964
|
+
continue;
|
|
965
|
+
}
|
|
966
|
+
for (const file of perBindingFiles) {
|
|
967
|
+
const sql = readFileSync(resolve(perBindingDir, file), "utf-8");
|
|
968
|
+
const fileStatements = collectMigrationStatements(sql);
|
|
969
|
+
statements.push(...fileStatements);
|
|
970
|
+
logger?.debug(`File ${bindingName}/${file}: ${fileStatements.length} statement(s)`);
|
|
971
|
+
}
|
|
972
|
+
fileCount = perBindingFiles.length;
|
|
973
|
+
sourceLabel = `migrations/${bindingName}/`;
|
|
974
|
+
} else if (sharedStatements !== null) {
|
|
975
|
+
statements = sharedStatements;
|
|
976
|
+
fileCount = sharedFiles.length;
|
|
977
|
+
sourceLabel = "migrations/ [shared fallback]";
|
|
978
|
+
} else {
|
|
979
|
+
logger?.debug(`No migrations found for ${bindingName}, skipping`);
|
|
980
|
+
continue;
|
|
981
|
+
}
|
|
982
|
+
logger?.info(`Running ${fileCount} D1 migration(s) for ${bindingName} (from ${sourceLabel})`);
|
|
983
|
+
if (statements.length === 0) {
|
|
984
|
+
logger?.debug(`No executable D1 migration statements for ${bindingName}`);
|
|
985
|
+
continue;
|
|
986
|
+
}
|
|
987
|
+
await applyMigrationsToBinding({
|
|
988
|
+
bindingName,
|
|
989
|
+
statements,
|
|
990
|
+
miniflarePort,
|
|
991
|
+
logger
|
|
992
|
+
});
|
|
993
|
+
}
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
// src/dev-server/gateway-script.ts
|
|
997
|
+
function getGatewayScript(wsRoutes = [], debug = false, appServiceBindingName = null) {
|
|
1092
998
|
const wsRoutesJson = JSON.stringify(wsRoutes);
|
|
999
|
+
const appServiceBindingJson = JSON.stringify(appServiceBindingName);
|
|
1093
1000
|
return `
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
//
|
|
1001
|
+
${GATEWAY_RUNTIME_JS}
|
|
1002
|
+
|
|
1003
|
+
// Bridge Gateway Worker — Dev Server
|
|
1004
|
+
// Handles WebSocket RPC, DO WS proxying, HTTP transfer, D1 migration, email ingest
|
|
1097
1005
|
|
|
1098
1006
|
const DEBUG = ${debug}
|
|
1099
1007
|
const log = (...args) => DEBUG && console.log('[Gateway]', ...args)
|
|
1100
1008
|
|
|
1101
|
-
const activeStreams = new Map()
|
|
1102
1009
|
const wsProxies = new Map()
|
|
1103
|
-
const incomingStreams = new Map()
|
|
1104
1010
|
|
|
1105
|
-
// WebSocket routes configuration (injected at build time)
|
|
1106
1011
|
const WS_ROUTES = ${wsRoutesJson}
|
|
1012
|
+
const APP_SERVICE_BINDING = ${appServiceBindingJson}
|
|
1107
1013
|
|
|
1108
1014
|
export default {
|
|
1109
1015
|
async fetch(request, env, ctx) {
|
|
1110
1016
|
const url = new URL(request.url)
|
|
1111
1017
|
const isWebSocket = request.headers.get('Upgrade') === 'websocket'
|
|
1112
1018
|
|
|
1113
|
-
// Check if this is a WebSocket request matching a DO route
|
|
1114
1019
|
if (isWebSocket) {
|
|
1115
1020
|
const matchedRoute = matchWsRoute(url.pathname)
|
|
1116
1021
|
if (matchedRoute) {
|
|
1117
1022
|
return handleDoWebSocket(request, env, url, matchedRoute)
|
|
1118
1023
|
}
|
|
1119
|
-
// Otherwise handle as bridge RPC WebSocket
|
|
1120
1024
|
return handleBridgeWebSocket(request, env, ctx)
|
|
1121
1025
|
}
|
|
1122
1026
|
|
|
1123
|
-
// HTTP endpoint for large file transfers
|
|
1124
1027
|
if (url.pathname.startsWith('/_devflare/transfer/')) {
|
|
1125
1028
|
return handleHttpTransfer(request, env, url)
|
|
1126
1029
|
}
|
|
1127
1030
|
|
|
1128
|
-
// D1 migration endpoint
|
|
1129
1031
|
if (url.pathname === '/_devflare/migrate' && request.method === 'POST') {
|
|
1130
1032
|
return handleMigration(request, env)
|
|
1131
1033
|
}
|
|
1132
1034
|
|
|
1133
|
-
// Email handler endpoint (simulates incoming email)
|
|
1134
1035
|
if (url.pathname === '/cdn-cgi/handler/email' && request.method === 'POST') {
|
|
1135
1036
|
return handleEmailIncoming(request, env, ctx, url)
|
|
1136
1037
|
}
|
|
1137
1038
|
|
|
1138
|
-
// Health check
|
|
1139
1039
|
if (url.pathname === '/_devflare/health') {
|
|
1140
1040
|
return new Response(JSON.stringify({
|
|
1141
1041
|
ok: true,
|
|
@@ -1144,11 +1044,17 @@ export default {
|
|
|
1144
1044
|
}), { headers: { 'Content-Type': 'application/json' } })
|
|
1145
1045
|
}
|
|
1146
1046
|
|
|
1047
|
+
if (APP_SERVICE_BINDING) {
|
|
1048
|
+
const appWorker = env[APP_SERVICE_BINDING]
|
|
1049
|
+
if (appWorker && typeof appWorker.fetch === 'function') {
|
|
1050
|
+
return appWorker.fetch(request)
|
|
1051
|
+
}
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1147
1054
|
return new Response('Devflare Bridge Gateway', { status: 200 })
|
|
1148
1055
|
}
|
|
1149
1056
|
}
|
|
1150
1057
|
|
|
1151
|
-
// Handle D1 migrations
|
|
1152
1058
|
async function handleMigration(request, env) {
|
|
1153
1059
|
try {
|
|
1154
1060
|
const { bindingName, statements } = await request.json()
|
|
@@ -1175,92 +1081,48 @@ async function handleMigration(request, env) {
|
|
|
1175
1081
|
}
|
|
1176
1082
|
}
|
|
1177
1083
|
}
|
|
1178
|
-
|
|
1179
|
-
// Verify table exists after migration
|
|
1084
|
+
|
|
1180
1085
|
try {
|
|
1181
1086
|
const tables = await db.prepare("SELECT name FROM sqlite_master WHERE type='table'").all()
|
|
1182
1087
|
log('Tables after migration:', JSON.stringify(tables))
|
|
1183
1088
|
} catch (e) {
|
|
1184
1089
|
log('Error listing tables:', e.message)
|
|
1185
1090
|
}
|
|
1186
|
-
|
|
1091
|
+
|
|
1187
1092
|
return Response.json({ success: true, results })
|
|
1188
1093
|
} catch (error) {
|
|
1189
1094
|
return Response.json({ error: error?.message || String(error) }, { status: 500 })
|
|
1190
1095
|
}
|
|
1191
1096
|
}
|
|
1192
1097
|
|
|
1193
|
-
// Handle incoming email (simulates email() handler)
|
|
1194
1098
|
async function handleEmailIncoming(request, env, ctx, url) {
|
|
1195
1099
|
try {
|
|
1196
1100
|
const from = url.searchParams.get('from') || 'unknown@example.com'
|
|
1197
1101
|
const to = url.searchParams.get('to') || 'worker@example.com'
|
|
1198
1102
|
const rawBody = await request.text()
|
|
1199
|
-
|
|
1103
|
+
|
|
1200
1104
|
log('Email incoming:', { from, to, bodyLength: rawBody.length })
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
const value = line.slice(colonIdx + 1).trim()
|
|
1220
|
-
headers.append(key, value)
|
|
1221
|
-
}
|
|
1222
|
-
}
|
|
1223
|
-
|
|
1224
|
-
// Create ReadableStream from raw email
|
|
1225
|
-
const rawStream = new ReadableStream({
|
|
1226
|
-
start(controller) {
|
|
1227
|
-
controller.enqueue(new TextEncoder().encode(rawBody))
|
|
1228
|
-
controller.close()
|
|
1229
|
-
}
|
|
1230
|
-
})
|
|
1231
|
-
|
|
1232
|
-
// Create ForwardableEmailMessage-like object
|
|
1233
|
-
const emailMessage = {
|
|
1234
|
-
from,
|
|
1235
|
-
to,
|
|
1236
|
-
headers,
|
|
1237
|
-
raw: rawStream,
|
|
1238
|
-
rawSize: rawBody.length,
|
|
1239
|
-
|
|
1240
|
-
setReject(reason) {
|
|
1241
|
-
log('Email rejected:', reason)
|
|
1242
|
-
},
|
|
1243
|
-
|
|
1244
|
-
async forward(rcptTo, extraHeaders) {
|
|
1245
|
-
log('Email forwarded to:', rcptTo)
|
|
1246
|
-
return Promise.resolve()
|
|
1247
|
-
},
|
|
1248
|
-
|
|
1249
|
-
async reply(message) {
|
|
1250
|
-
log('Email reply sent to:', message.from)
|
|
1251
|
-
return Promise.resolve()
|
|
1105
|
+
|
|
1106
|
+
if (APP_SERVICE_BINDING) {
|
|
1107
|
+
const appWorker = env[APP_SERVICE_BINDING]
|
|
1108
|
+
if (appWorker && typeof appWorker.fetch === 'function') {
|
|
1109
|
+
const response = await appWorker.fetch(new Request('http://devflare.internal/_devflare/internal/email', {
|
|
1110
|
+
method: 'POST',
|
|
1111
|
+
headers: {
|
|
1112
|
+
'x-devflare-event': 'email',
|
|
1113
|
+
'x-devflare-email-from': from,
|
|
1114
|
+
'x-devflare-email-to': to,
|
|
1115
|
+
'content-type': request.headers.get('content-type') || 'text/plain'
|
|
1116
|
+
},
|
|
1117
|
+
body: rawBody
|
|
1118
|
+
}))
|
|
1119
|
+
|
|
1120
|
+
if (!response.ok) {
|
|
1121
|
+
return response
|
|
1122
|
+
}
|
|
1252
1123
|
}
|
|
1253
1124
|
}
|
|
1254
|
-
|
|
1255
|
-
// Look for email handler in the worker module
|
|
1256
|
-
// For now, we call via a special RPC method that DO workers can implement
|
|
1257
|
-
// The email binding should be configured in the worker
|
|
1258
|
-
|
|
1259
|
-
// Check if there's an EMAIL_HANDLER binding (special DO for email handling)
|
|
1260
|
-
if (env.__emailHandler && typeof env.__emailHandler.email === 'function') {
|
|
1261
|
-
await env.__emailHandler.email(emailMessage, env, ctx)
|
|
1262
|
-
}
|
|
1263
|
-
|
|
1125
|
+
|
|
1264
1126
|
return new Response(JSON.stringify({ ok: true, from, to }), {
|
|
1265
1127
|
headers: { 'Content-Type': 'application/json' }
|
|
1266
1128
|
})
|
|
@@ -1270,10 +1132,8 @@ async function handleEmailIncoming(request, env, ctx, url) {
|
|
|
1270
1132
|
}
|
|
1271
1133
|
}
|
|
1272
1134
|
|
|
1273
|
-
// Match URL path against configured WS routes
|
|
1274
1135
|
function matchWsRoute(pathname) {
|
|
1275
1136
|
for (const route of WS_ROUTES) {
|
|
1276
|
-
// Simple exact match for now (could add glob/regex later)
|
|
1277
1137
|
if (pathname === route.pattern || pathname.startsWith(route.pattern + '?')) {
|
|
1278
1138
|
return route
|
|
1279
1139
|
}
|
|
@@ -1281,31 +1141,23 @@ function matchWsRoute(pathname) {
|
|
|
1281
1141
|
return null
|
|
1282
1142
|
}
|
|
1283
1143
|
|
|
1284
|
-
// Handle WebSocket upgrade that should go to a Durable Object
|
|
1285
1144
|
async function handleDoWebSocket(request, env, url, route) {
|
|
1286
1145
|
try {
|
|
1287
|
-
// Get the DO namespace
|
|
1288
1146
|
const namespace = env[route.doNamespace]
|
|
1289
1147
|
if (!namespace) {
|
|
1290
1148
|
console.error('[Gateway] DO namespace not found:', route.doNamespace)
|
|
1291
1149
|
return new Response('DO namespace not found: ' + route.doNamespace, { status: 500 })
|
|
1292
1150
|
}
|
|
1293
1151
|
|
|
1294
|
-
// Get the instance ID from query params
|
|
1295
1152
|
const idValue = url.searchParams.get(route.idParam) || 'default'
|
|
1296
|
-
|
|
1297
|
-
// Get or create DO instance
|
|
1298
1153
|
const doId = namespace.idFromName(idValue)
|
|
1299
1154
|
const stub = namespace.get(doId)
|
|
1300
1155
|
|
|
1301
|
-
// Construct the forward URL for the DO
|
|
1302
1156
|
const forwardUrl = new URL(route.forwardPath, url.origin)
|
|
1303
|
-
// Forward all query params
|
|
1304
1157
|
url.searchParams.forEach((v, k) => forwardUrl.searchParams.set(k, v))
|
|
1305
1158
|
|
|
1306
1159
|
log('Forwarding WebSocket to DO:', route.doNamespace, 'id:', idValue, 'path:', forwardUrl.pathname)
|
|
1307
1160
|
|
|
1308
|
-
// Forward the request to the DO
|
|
1309
1161
|
return stub.fetch(forwardUrl.toString(), {
|
|
1310
1162
|
method: request.method,
|
|
1311
1163
|
headers: request.headers
|
|
@@ -1316,7 +1168,6 @@ async function handleDoWebSocket(request, env, url, route) {
|
|
|
1316
1168
|
}
|
|
1317
1169
|
}
|
|
1318
1170
|
|
|
1319
|
-
// Handle bridge RPC WebSocket (for Node.js Vite server communication)
|
|
1320
1171
|
function handleBridgeWebSocket(request, env, ctx) {
|
|
1321
1172
|
const { 0: client, 1: server } = new WebSocketPair()
|
|
1322
1173
|
server.accept()
|
|
@@ -1332,7 +1183,6 @@ function handleBridgeWebSocket(request, env, ctx) {
|
|
|
1332
1183
|
})
|
|
1333
1184
|
|
|
1334
1185
|
server.addEventListener('close', () => {
|
|
1335
|
-
activeStreams.clear()
|
|
1336
1186
|
wsProxies.clear()
|
|
1337
1187
|
})
|
|
1338
1188
|
|
|
@@ -1363,160 +1213,9 @@ async function handleRpcCall(msg, ws, env, ctx) {
|
|
|
1363
1213
|
ws.send(JSON.stringify({
|
|
1364
1214
|
t: 'rpc.err',
|
|
1365
1215
|
id: msg.id,
|
|
1366
|
-
error: { code: error
|
|
1367
|
-
}))
|
|
1368
|
-
}
|
|
1369
|
-
}
|
|
1370
|
-
|
|
1371
|
-
async function executeRpcMethod(method, params, env, ctx) {
|
|
1372
|
-
const parts = method.split('.')
|
|
1373
|
-
const bindingName = parts[0]
|
|
1374
|
-
const operation = parts.slice(1).join('.')
|
|
1375
|
-
const binding = env[bindingName]
|
|
1376
|
-
|
|
1377
|
-
if (!binding) throw new Error('Binding not found: ' + bindingName)
|
|
1378
|
-
|
|
1379
|
-
// KV operations
|
|
1380
|
-
if (operation === 'get') return binding.get(params[0], params[1])
|
|
1381
|
-
if (operation === 'put') return binding.put(params[0], params[1], params[2])
|
|
1382
|
-
if (operation === 'delete') return binding.delete(params[0])
|
|
1383
|
-
if (operation === 'list') return binding.list(params[0])
|
|
1384
|
-
if (operation === 'getWithMetadata') return binding.getWithMetadata(params[0], params[1])
|
|
1385
|
-
|
|
1386
|
-
// R2 operations
|
|
1387
|
-
if (operation === 'head') return serializeR2Object(await binding.head(params[0]))
|
|
1388
|
-
if (operation === 'r2.get') {
|
|
1389
|
-
const obj = await binding.get(params[0], params[1])
|
|
1390
|
-
if (!obj) return null
|
|
1391
|
-
const body = await obj.arrayBuffer()
|
|
1392
|
-
return serializeR2ObjectBody(obj, arrayBufferToBase64(body))
|
|
1393
|
-
}
|
|
1394
|
-
if (operation === 'r2.put') {
|
|
1395
|
-
// Deserialize the value if it's a serialized ArrayBuffer/Uint8Array
|
|
1396
|
-
let value = params[1]
|
|
1397
|
-
if (value && typeof value === 'object') {
|
|
1398
|
-
if (value.__type === 'ArrayBuffer') {
|
|
1399
|
-
value = base64ToArrayBuffer(value.data)
|
|
1400
|
-
} else if (value.__type === 'Uint8Array') {
|
|
1401
|
-
value = base64ToArrayBuffer(value.data)
|
|
1402
|
-
}
|
|
1403
|
-
}
|
|
1404
|
-
return serializeR2Object(await binding.put(params[0], value, params[2]))
|
|
1405
|
-
}
|
|
1406
|
-
if (operation === 'r2.delete') return binding.delete(params[0])
|
|
1407
|
-
if (operation === 'r2.list') return serializeR2Objects(await binding.list(params[0]))
|
|
1408
|
-
|
|
1409
|
-
// D1 operations
|
|
1410
|
-
if (operation === 'exec') return binding.exec(params[0])
|
|
1411
|
-
if (operation.startsWith('stmt.')) {
|
|
1412
|
-
log('D1 RPC:', bindingName, operation, 'sql:', String(params[0]).slice(0, 60))
|
|
1413
|
-
const mode = operation.split('.')[1]
|
|
1414
|
-
const [sql, ...rest] = params
|
|
1415
|
-
|
|
1416
|
-
// For first/raw, the last element is the column/options parameter (may be undefined)
|
|
1417
|
-
// For all/run, rest contains only bindings
|
|
1418
|
-
let bindings = rest
|
|
1419
|
-
let extraParam = undefined
|
|
1420
|
-
|
|
1421
|
-
if (mode === 'first' || mode === 'raw') {
|
|
1422
|
-
// Last element is the column/options (may be undefined)
|
|
1423
|
-
extraParam = rest[rest.length - 1]
|
|
1424
|
-
bindings = rest.slice(0, -1)
|
|
1425
|
-
}
|
|
1426
|
-
|
|
1427
|
-
let stmt = binding.prepare(sql)
|
|
1428
|
-
if (bindings.length > 0) stmt = stmt.bind(...bindings)
|
|
1429
|
-
|
|
1430
|
-
if (mode === 'first') {
|
|
1431
|
-
// Only pass column if it's a non-empty string
|
|
1432
|
-
if (typeof extraParam === 'string' && extraParam.length > 0) {
|
|
1433
|
-
return stmt.first(extraParam)
|
|
1434
|
-
}
|
|
1435
|
-
return stmt.first()
|
|
1436
|
-
}
|
|
1437
|
-
if (mode === 'all') return stmt.all()
|
|
1438
|
-
if (mode === 'run') return stmt.run()
|
|
1439
|
-
if (mode === 'raw') return stmt.raw(extraParam)
|
|
1440
|
-
}
|
|
1441
|
-
|
|
1442
|
-
// DO operations
|
|
1443
|
-
if (operation === 'idFromName') {
|
|
1444
|
-
const id = binding.idFromName(params[0])
|
|
1445
|
-
return { __type: 'DOId', hex: id.toString() }
|
|
1446
|
-
}
|
|
1447
|
-
if (operation === 'idFromString') {
|
|
1448
|
-
const id = binding.idFromString(params[0])
|
|
1449
|
-
return { __type: 'DOId', hex: id.toString() }
|
|
1450
|
-
}
|
|
1451
|
-
if (operation === 'newUniqueId') {
|
|
1452
|
-
const id = binding.newUniqueId(params[0])
|
|
1453
|
-
return { __type: 'DOId', hex: id.toString() }
|
|
1454
|
-
}
|
|
1455
|
-
if (operation === 'stub.fetch') {
|
|
1456
|
-
const [, serializedId, serializedReq] = params
|
|
1457
|
-
log('stub.fetch request:', {
|
|
1458
|
-
url: serializedReq.url,
|
|
1459
|
-
method: serializedReq.method,
|
|
1460
|
-
headers: serializedReq.headers,
|
|
1461
|
-
hasBody: !!serializedReq.body
|
|
1462
|
-
})
|
|
1463
|
-
const id = binding.idFromString(serializedId.hex)
|
|
1464
|
-
const stub = binding.get(id)
|
|
1465
|
-
try {
|
|
1466
|
-
const response = await stub.fetch(new Request(serializedReq.url, {
|
|
1467
|
-
method: serializedReq.method,
|
|
1468
|
-
headers: serializedReq.headers,
|
|
1469
|
-
body: serializedReq.body?.type === 'bytes' ? base64ToArrayBuffer(serializedReq.body.data) : undefined
|
|
1470
|
-
}))
|
|
1471
|
-
// Clone to read body for logging if there's an error
|
|
1472
|
-
const cloned = response.clone()
|
|
1473
|
-
const serialized = await serializeResponse(response)
|
|
1474
|
-
log('stub.fetch response:', {
|
|
1475
|
-
status: serialized.status,
|
|
1476
|
-
headers: serialized.headers,
|
|
1477
|
-
bodyLength: serialized.body?.data?.length || 0
|
|
1478
|
-
})
|
|
1479
|
-
// If 500, log the body content
|
|
1480
|
-
if (response.status >= 400) {
|
|
1481
|
-
const errBody = await cloned.text()
|
|
1482
|
-
log('Error response body:', errBody)
|
|
1483
|
-
}
|
|
1484
|
-
return serialized
|
|
1485
|
-
} catch (err) {
|
|
1486
|
-
console.error('[Gateway] stub.fetch error:', err)
|
|
1487
|
-
throw err
|
|
1488
|
-
}
|
|
1489
|
-
}
|
|
1490
|
-
if (operation === 'stub.rpc') {
|
|
1491
|
-
const [, serializedId, methodName, args] = params
|
|
1492
|
-
const id = binding.idFromString(serializedId.hex)
|
|
1493
|
-
const stub = binding.get(id)
|
|
1494
|
-
const response = await stub.fetch(new Request('http://do/_rpc', {
|
|
1495
|
-
method: 'POST',
|
|
1496
|
-
headers: { 'Content-Type': 'application/json' },
|
|
1497
|
-
body: JSON.stringify({ method: methodName, params: args })
|
|
1216
|
+
error: { code: error?.code || 'INTERNAL_ERROR', message: error?.message || String(error) }
|
|
1498
1217
|
}))
|
|
1499
|
-
const result = await response.json()
|
|
1500
|
-
if (!result.ok) throw new Error(result.error?.message || 'RPC failed')
|
|
1501
|
-
return result.result
|
|
1502
|
-
}
|
|
1503
|
-
|
|
1504
|
-
// Queue operations
|
|
1505
|
-
if (operation === 'send') return binding.send(params[0], params[1])
|
|
1506
|
-
if (operation === 'sendBatch') return binding.sendBatch(params[0], params[1])
|
|
1507
|
-
|
|
1508
|
-
// Email send operations (send_email binding)
|
|
1509
|
-
if (operation === 'email.send') {
|
|
1510
|
-
log('Email send:', { from: params[0]?.from, to: params[0]?.to })
|
|
1511
|
-
// In local dev, we just log the email - Miniflare handles writing to file
|
|
1512
|
-
if (binding && typeof binding.send === 'function') {
|
|
1513
|
-
return binding.send(params[0])
|
|
1514
|
-
}
|
|
1515
|
-
// Return success even if no real binding (simulated)
|
|
1516
|
-
return { ok: true, simulated: true }
|
|
1517
1218
|
}
|
|
1518
|
-
|
|
1519
|
-
throw new Error('Unknown operation: ' + method)
|
|
1520
1219
|
}
|
|
1521
1220
|
|
|
1522
1221
|
async function handleWsOpen(msg, ws, env) {
|
|
@@ -1575,7 +1274,7 @@ async function handleHttpTransfer(request, env, url) {
|
|
|
1575
1274
|
|
|
1576
1275
|
if (request.method === 'PUT' || request.method === 'POST') {
|
|
1577
1276
|
const result = await bucket.put(key, request.body)
|
|
1578
|
-
return new Response(JSON.stringify(result), { headers: { 'Content-Type': 'application/json' } })
|
|
1277
|
+
return new Response(JSON.stringify(serializeR2Object(result)), { headers: { 'Content-Type': 'application/json' } })
|
|
1579
1278
|
}
|
|
1580
1279
|
|
|
1581
1280
|
if (request.method === 'GET') {
|
|
@@ -1591,71 +1290,253 @@ async function handleHttpTransfer(request, env, url) {
|
|
|
1591
1290
|
|
|
1592
1291
|
return new Response('Method not allowed', { status: 405 })
|
|
1593
1292
|
}
|
|
1293
|
+
`;
|
|
1294
|
+
}
|
|
1594
1295
|
|
|
1595
|
-
//
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
key: obj.key,
|
|
1601
|
-
version: obj.version,
|
|
1602
|
-
size: obj.size,
|
|
1603
|
-
etag: obj.etag,
|
|
1604
|
-
httpEtag: obj.httpEtag,
|
|
1605
|
-
checksums: obj.checksums,
|
|
1606
|
-
uploaded: obj.uploaded?.toISOString(),
|
|
1607
|
-
httpMetadata: obj.httpMetadata,
|
|
1608
|
-
customMetadata: obj.customMetadata,
|
|
1609
|
-
range: obj.range,
|
|
1610
|
-
storageClass: obj.storageClass
|
|
1611
|
-
}
|
|
1296
|
+
// src/dev-server/miniflare-log.ts
|
|
1297
|
+
var ANSI_ESCAPE_REGEX = /\u001B\[[0-9;]*m/g;
|
|
1298
|
+
var COMPATIBILITY_DATE_FALLBACK_REGEX = /^The latest compatibility date supported by the installed Cloudflare Workers Runtime is "([^"]+)", but you've requested "([^"]+)"\. Falling back to "([^"]+)"\.\.\.$/;
|
|
1299
|
+
function normalizeMiniflareMessage(message) {
|
|
1300
|
+
return message.replace(ANSI_ESCAPE_REGEX, "").replace(/\s+/g, " ").trim();
|
|
1612
1301
|
}
|
|
1613
|
-
function
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
httpEtag: obj.httpEtag,
|
|
1622
|
-
checksums: obj.checksums,
|
|
1623
|
-
uploaded: obj.uploaded?.toISOString(),
|
|
1624
|
-
httpMetadata: obj.httpMetadata,
|
|
1625
|
-
customMetadata: obj.customMetadata,
|
|
1626
|
-
range: obj.range,
|
|
1627
|
-
storageClass: obj.storageClass,
|
|
1628
|
-
bodyData
|
|
1629
|
-
}
|
|
1302
|
+
function formatCompatibilityDateFallbackNotice(message) {
|
|
1303
|
+
const normalizedMessage = normalizeMiniflareMessage(message);
|
|
1304
|
+
const match = COMPATIBILITY_DATE_FALLBACK_REGEX.exec(normalizedMessage);
|
|
1305
|
+
if (!match) {
|
|
1306
|
+
return null;
|
|
1307
|
+
}
|
|
1308
|
+
const [, _supportedDate, requestedDate, fallbackDate] = match;
|
|
1309
|
+
return `Using latest supported Cloudflare Workers Runtime compatibility date ${fallbackDate} (requested ${requestedDate})`;
|
|
1630
1310
|
}
|
|
1631
|
-
function
|
|
1632
|
-
|
|
1633
|
-
|
|
1311
|
+
function createCompatibilityAwareMiniflareLog(BaseLog, level, logger) {
|
|
1312
|
+
const log = new BaseLog(level);
|
|
1313
|
+
const originalWarn = log.warn.bind(log);
|
|
1314
|
+
const originalInfo = log.info.bind(log);
|
|
1315
|
+
log.warn = (message) => {
|
|
1316
|
+
const notice = formatCompatibilityDateFallbackNotice(message);
|
|
1317
|
+
if (!notice) {
|
|
1318
|
+
originalWarn(message);
|
|
1319
|
+
return;
|
|
1320
|
+
}
|
|
1321
|
+
if (logger) {
|
|
1322
|
+
logger.info(notice);
|
|
1323
|
+
return;
|
|
1324
|
+
}
|
|
1325
|
+
originalInfo(notice);
|
|
1326
|
+
};
|
|
1327
|
+
return log;
|
|
1634
1328
|
}
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1329
|
+
|
|
1330
|
+
// src/dev-server/runtime-stdio.ts
|
|
1331
|
+
import { createInterface } from "node:readline";
|
|
1332
|
+
function writeStdout(logger, message) {
|
|
1333
|
+
if (typeof logger?.log === "function") {
|
|
1334
|
+
logger.log(message);
|
|
1335
|
+
return;
|
|
1336
|
+
}
|
|
1337
|
+
if (typeof logger?.info === "function") {
|
|
1338
|
+
logger.info(message);
|
|
1339
|
+
return;
|
|
1340
|
+
}
|
|
1341
|
+
console.log(message);
|
|
1645
1342
|
}
|
|
1646
|
-
function
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1343
|
+
function writeStderr(logger, message) {
|
|
1344
|
+
if (typeof logger?.error === "function") {
|
|
1345
|
+
logger.error(message);
|
|
1346
|
+
return;
|
|
1347
|
+
}
|
|
1348
|
+
console.error(message);
|
|
1651
1349
|
}
|
|
1652
|
-
function
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1350
|
+
function createRuntimeStdioForwarder(logger) {
|
|
1351
|
+
return (stdout, stderr) => {
|
|
1352
|
+
createInterface({ input: stdout }).on("line", (data) => {
|
|
1353
|
+
writeStdout(logger, data);
|
|
1354
|
+
});
|
|
1355
|
+
createInterface({ input: stderr }).on("line", (data) => {
|
|
1356
|
+
writeStderr(logger, data);
|
|
1357
|
+
});
|
|
1358
|
+
};
|
|
1657
1359
|
}
|
|
1658
|
-
|
|
1360
|
+
|
|
1361
|
+
// src/dev-server/vite-process.ts
|
|
1362
|
+
import { spawn } from "node:child_process";
|
|
1363
|
+
async function startViteProcess(options) {
|
|
1364
|
+
const {
|
|
1365
|
+
cwd,
|
|
1366
|
+
vitePort,
|
|
1367
|
+
miniflarePort,
|
|
1368
|
+
generatedViteConfigPath,
|
|
1369
|
+
logger
|
|
1370
|
+
} = options;
|
|
1371
|
+
const args = ["vite", "dev", "--port", String(vitePort)];
|
|
1372
|
+
if (generatedViteConfigPath) {
|
|
1373
|
+
args.push("--config", generatedViteConfigPath);
|
|
1374
|
+
}
|
|
1375
|
+
const viteProcess = spawn("bunx", args, {
|
|
1376
|
+
cwd,
|
|
1377
|
+
stdio: ["inherit", "pipe", "pipe"],
|
|
1378
|
+
windowsHide: true,
|
|
1379
|
+
env: {
|
|
1380
|
+
...process.env,
|
|
1381
|
+
DEVFLARE_DEV: "true",
|
|
1382
|
+
DEVFLARE_BRIDGE_PORT: String(miniflarePort),
|
|
1383
|
+
FORCE_COLOR: "1"
|
|
1384
|
+
}
|
|
1385
|
+
});
|
|
1386
|
+
const readyUrl = await waitForViteReady(viteProcess, {
|
|
1387
|
+
onStdout(chunk) {
|
|
1388
|
+
process.stdout.write(chunk);
|
|
1389
|
+
},
|
|
1390
|
+
onStderr(chunk) {
|
|
1391
|
+
process.stderr.write(chunk);
|
|
1392
|
+
}
|
|
1393
|
+
});
|
|
1394
|
+
if (readyUrl) {
|
|
1395
|
+
logger?.success(`Vite dev server started on ${readyUrl}`);
|
|
1396
|
+
return viteProcess;
|
|
1397
|
+
}
|
|
1398
|
+
logger?.warn("Vite process started, but the final local URL could not be confirmed yet");
|
|
1399
|
+
return viteProcess;
|
|
1400
|
+
}
|
|
1401
|
+
|
|
1402
|
+
// src/dev-server/worker-surface-paths.ts
|
|
1403
|
+
import { dirname, resolve as resolve2 } from "pathe";
|
|
1404
|
+
var DEFAULT_TRANSPORT_ENTRY_FILES = [
|
|
1405
|
+
"src/transport.ts",
|
|
1406
|
+
"src/transport.js",
|
|
1407
|
+
"src/transport.mts",
|
|
1408
|
+
"src/transport.mjs"
|
|
1409
|
+
];
|
|
1410
|
+
var resolveMainWorkerSurfacePaths = resolveWorkerSurfacePaths;
|
|
1411
|
+
function addWorkerWatchRoots(roots, cwd, configuredPath, defaultEntries) {
|
|
1412
|
+
if (configuredPath === false || configuredPath === null) {
|
|
1413
|
+
return;
|
|
1414
|
+
}
|
|
1415
|
+
if (typeof configuredPath === "string" && configuredPath) {
|
|
1416
|
+
roots.add(dirname(resolve2(cwd, configuredPath)));
|
|
1417
|
+
return;
|
|
1418
|
+
}
|
|
1419
|
+
for (const defaultEntry of defaultEntries) {
|
|
1420
|
+
roots.add(dirname(resolve2(cwd, defaultEntry)));
|
|
1421
|
+
}
|
|
1422
|
+
}
|
|
1423
|
+
function collectWorkerWatchRoots(cwd, config, mainWorkerSurfacePaths) {
|
|
1424
|
+
const roots = new Set;
|
|
1425
|
+
for (const surfacePath of Object.values(mainWorkerSurfacePaths)) {
|
|
1426
|
+
if (surfacePath) {
|
|
1427
|
+
roots.add(dirname(surfacePath));
|
|
1428
|
+
}
|
|
1429
|
+
}
|
|
1430
|
+
addWorkerWatchRoots(roots, cwd, config.files?.fetch, DEFAULT_FETCH_ENTRY_FILES);
|
|
1431
|
+
addWorkerWatchRoots(roots, cwd, config.files?.queue, DEFAULT_QUEUE_ENTRY_FILES);
|
|
1432
|
+
addWorkerWatchRoots(roots, cwd, config.files?.scheduled, DEFAULT_SCHEDULED_ENTRY_FILES);
|
|
1433
|
+
addWorkerWatchRoots(roots, cwd, config.files?.email, DEFAULT_EMAIL_ENTRY_FILES);
|
|
1434
|
+
addWorkerWatchRoots(roots, cwd, config.files?.transport, DEFAULT_TRANSPORT_ENTRY_FILES);
|
|
1435
|
+
const routeDirectory = getRouteDirectoryCandidate(cwd, config);
|
|
1436
|
+
if (routeDirectory) {
|
|
1437
|
+
roots.add(routeDirectory.absoluteDir);
|
|
1438
|
+
}
|
|
1439
|
+
return [...roots];
|
|
1440
|
+
}
|
|
1441
|
+
|
|
1442
|
+
// src/dev-server/worker-source-watcher.ts
|
|
1443
|
+
async function startWorkerSourceWatcher(options) {
|
|
1444
|
+
const { watchTargets, resolvedWorkerConfigPath, logger, onConfigChange, onWorkerChange } = options;
|
|
1445
|
+
if (watchTargets.length === 0) {
|
|
1446
|
+
return null;
|
|
1447
|
+
}
|
|
1448
|
+
const chokidar = await import("chokidar");
|
|
1449
|
+
const isWindows = process.platform === "win32";
|
|
1450
|
+
const ignoredSegments = ["/node_modules/", "/.git/", "/.devflare/", "/dist/"];
|
|
1451
|
+
const normalizePath = (filePath) => filePath.replace(/\\/g, "/");
|
|
1452
|
+
const isIgnoredPath = (filePath) => {
|
|
1453
|
+
const normalizedPath = normalizePath(filePath);
|
|
1454
|
+
return ignoredSegments.some((segment) => normalizedPath.includes(segment));
|
|
1455
|
+
};
|
|
1456
|
+
let reloadTimeout = null;
|
|
1457
|
+
let reloadInProgress = false;
|
|
1458
|
+
let pendingReloadPath = null;
|
|
1459
|
+
const flushPendingReload = async () => {
|
|
1460
|
+
if (!pendingReloadPath) {
|
|
1461
|
+
return;
|
|
1462
|
+
}
|
|
1463
|
+
const nextPath = pendingReloadPath;
|
|
1464
|
+
pendingReloadPath = null;
|
|
1465
|
+
await triggerReload(nextPath);
|
|
1466
|
+
};
|
|
1467
|
+
const triggerReload = async (filePath) => {
|
|
1468
|
+
if (reloadInProgress) {
|
|
1469
|
+
pendingReloadPath = filePath;
|
|
1470
|
+
return;
|
|
1471
|
+
}
|
|
1472
|
+
reloadInProgress = true;
|
|
1473
|
+
try {
|
|
1474
|
+
const normalizedConfigPath = resolvedWorkerConfigPath ? normalizePath(resolvedWorkerConfigPath) : null;
|
|
1475
|
+
if (normalizedConfigPath && normalizePath(filePath) === normalizedConfigPath) {
|
|
1476
|
+
logger?.info(`Devflare config changed: ${filePath}`);
|
|
1477
|
+
await onConfigChange();
|
|
1478
|
+
return;
|
|
1479
|
+
}
|
|
1480
|
+
logger?.info(`Worker source changed: ${filePath}`);
|
|
1481
|
+
await onWorkerChange();
|
|
1482
|
+
} catch (error) {
|
|
1483
|
+
logger?.error("Worker source reload failed:", error);
|
|
1484
|
+
} finally {
|
|
1485
|
+
reloadInProgress = false;
|
|
1486
|
+
await flushPendingReload();
|
|
1487
|
+
}
|
|
1488
|
+
};
|
|
1489
|
+
const scheduleReload = (filePath) => {
|
|
1490
|
+
if (reloadTimeout) {
|
|
1491
|
+
clearTimeout(reloadTimeout);
|
|
1492
|
+
}
|
|
1493
|
+
reloadTimeout = setTimeout(() => {
|
|
1494
|
+
reloadTimeout = null;
|
|
1495
|
+
triggerReload(filePath);
|
|
1496
|
+
}, 150);
|
|
1497
|
+
};
|
|
1498
|
+
const watcher = chokidar.watch(watchTargets, {
|
|
1499
|
+
ignoreInitial: true,
|
|
1500
|
+
usePolling: isWindows,
|
|
1501
|
+
interval: isWindows ? 300 : undefined,
|
|
1502
|
+
awaitWriteFinish: {
|
|
1503
|
+
stabilityThreshold: 100,
|
|
1504
|
+
pollInterval: 50
|
|
1505
|
+
},
|
|
1506
|
+
ignored: (filePath) => isIgnoredPath(filePath)
|
|
1507
|
+
});
|
|
1508
|
+
const onFileEvent = (filePath) => {
|
|
1509
|
+
if (isIgnoredPath(filePath)) {
|
|
1510
|
+
return;
|
|
1511
|
+
}
|
|
1512
|
+
scheduleReload(filePath);
|
|
1513
|
+
};
|
|
1514
|
+
watcher.on("change", onFileEvent);
|
|
1515
|
+
watcher.on("add", onFileEvent);
|
|
1516
|
+
watcher.on("unlink", onFileEvent);
|
|
1517
|
+
watcher.on("error", (error) => {
|
|
1518
|
+
logger?.error("Worker source watcher error:", error);
|
|
1519
|
+
});
|
|
1520
|
+
await new Promise((resolvePromise, rejectPromise) => {
|
|
1521
|
+
const handleReady = () => {
|
|
1522
|
+
watcher.off("error", handleInitialError);
|
|
1523
|
+
logger?.info(`Worker source watcher ready (${watchTargets.length} target(s))`);
|
|
1524
|
+
resolvePromise();
|
|
1525
|
+
};
|
|
1526
|
+
const handleInitialError = (error) => {
|
|
1527
|
+
watcher.off("ready", handleReady);
|
|
1528
|
+
rejectPromise(error instanceof Error ? error : new Error(String(error)));
|
|
1529
|
+
};
|
|
1530
|
+
watcher.once("ready", handleReady);
|
|
1531
|
+
watcher.once("error", handleInitialError);
|
|
1532
|
+
});
|
|
1533
|
+
return watcher;
|
|
1534
|
+
}
|
|
1535
|
+
|
|
1536
|
+
// src/dev-server/server.ts
|
|
1537
|
+
var INTERNAL_APP_SERVICE_BINDING = "__DEVFLARE_APP";
|
|
1538
|
+
function formatErrorMessage(error) {
|
|
1539
|
+
return error instanceof Error ? error.message : String(error);
|
|
1659
1540
|
}
|
|
1660
1541
|
function createDevServer(options) {
|
|
1661
1542
|
const {
|
|
@@ -1663,6 +1544,7 @@ function createDevServer(options) {
|
|
|
1663
1544
|
configPath,
|
|
1664
1545
|
vitePort = 5173,
|
|
1665
1546
|
miniflarePort = 8787,
|
|
1547
|
+
enableVite = true,
|
|
1666
1548
|
persist = true,
|
|
1667
1549
|
logger,
|
|
1668
1550
|
verbose = false,
|
|
@@ -1670,15 +1552,76 @@ function createDevServer(options) {
|
|
|
1670
1552
|
} = options;
|
|
1671
1553
|
let miniflare = null;
|
|
1672
1554
|
let doBundler = null;
|
|
1555
|
+
let workerSourceWatcher = null;
|
|
1556
|
+
let workerWatchTargets = [];
|
|
1673
1557
|
let viteProcess = null;
|
|
1674
1558
|
let config = null;
|
|
1675
1559
|
let browserShim = null;
|
|
1676
1560
|
let browserShimPort = 8788;
|
|
1561
|
+
let mainWorkerSurfacePaths = {
|
|
1562
|
+
fetch: null,
|
|
1563
|
+
queue: null,
|
|
1564
|
+
scheduled: null,
|
|
1565
|
+
email: null
|
|
1566
|
+
};
|
|
1567
|
+
let resolvedWorkerConfigPath = null;
|
|
1568
|
+
let mainWorkerScriptPath = null;
|
|
1569
|
+
let bundledMainWorkerScriptPath = null;
|
|
1570
|
+
let currentDoResult = null;
|
|
1571
|
+
let mainWorkerRoutes = null;
|
|
1572
|
+
let generatedViteConfigPath = null;
|
|
1573
|
+
let reloadChain = Promise.resolve();
|
|
1574
|
+
async function bundleMainWorker() {
|
|
1575
|
+
if (!mainWorkerScriptPath || !config) {
|
|
1576
|
+
bundledMainWorkerScriptPath = null;
|
|
1577
|
+
return;
|
|
1578
|
+
}
|
|
1579
|
+
bundledMainWorkerScriptPath = await bundleWorkerEntry({
|
|
1580
|
+
cwd,
|
|
1581
|
+
inputFile: mainWorkerScriptPath,
|
|
1582
|
+
outFile: resolve3(cwd, ".devflare", "worker-entrypoints", "main.js"),
|
|
1583
|
+
rolldownOptions: config.rolldown?.options,
|
|
1584
|
+
sourcemap: config.rolldown?.sourcemap,
|
|
1585
|
+
minify: config.rolldown?.minify,
|
|
1586
|
+
logger
|
|
1587
|
+
});
|
|
1588
|
+
logger?.debug(`Bundled main worker → ${bundledMainWorkerScriptPath}`);
|
|
1589
|
+
}
|
|
1677
1590
|
function buildMiniflareConfig(doResult) {
|
|
1678
1591
|
if (!config)
|
|
1679
1592
|
throw new Error("Config not loaded");
|
|
1680
|
-
const
|
|
1681
|
-
const
|
|
1593
|
+
const loadedConfig = config;
|
|
1594
|
+
const bindings = loadedConfig.bindings ?? {};
|
|
1595
|
+
const persistPath = resolve3(cwd, ".devflare/data");
|
|
1596
|
+
const appWorkerName = loadedConfig.name;
|
|
1597
|
+
const shouldRunMainWorker = !enableVite && (hasWorkerSurfacePaths(mainWorkerSurfacePaths) || Boolean(mainWorkerRoutes?.routes.length));
|
|
1598
|
+
const queueProducers = (() => {
|
|
1599
|
+
if (!bindings.queues?.producers) {
|
|
1600
|
+
return;
|
|
1601
|
+
}
|
|
1602
|
+
const producers = {};
|
|
1603
|
+
for (const [bindingName, queueName] of Object.entries(bindings.queues.producers)) {
|
|
1604
|
+
producers[bindingName] = { queueName };
|
|
1605
|
+
}
|
|
1606
|
+
return producers;
|
|
1607
|
+
})();
|
|
1608
|
+
const queueConsumers = (() => {
|
|
1609
|
+
if (!bindings.queues?.consumers || bindings.queues.consumers.length === 0) {
|
|
1610
|
+
return;
|
|
1611
|
+
}
|
|
1612
|
+
const consumers = {};
|
|
1613
|
+
for (const consumer of bindings.queues.consumers) {
|
|
1614
|
+
consumers[consumer.queue] = {
|
|
1615
|
+
...consumer.maxBatchSize !== undefined && { maxBatchSize: consumer.maxBatchSize },
|
|
1616
|
+
...consumer.maxBatchTimeout !== undefined && { maxBatchTimeout: consumer.maxBatchTimeout },
|
|
1617
|
+
...consumer.maxRetries !== undefined && { maxRetries: consumer.maxRetries },
|
|
1618
|
+
...consumer.deadLetterQueue && { deadLetterQueue: consumer.deadLetterQueue },
|
|
1619
|
+
...consumer.maxConcurrency !== undefined && { maxConcurrency: consumer.maxConcurrency },
|
|
1620
|
+
...consumer.retryDelay !== undefined && { retryDelay: consumer.retryDelay }
|
|
1621
|
+
};
|
|
1622
|
+
}
|
|
1623
|
+
return consumers;
|
|
1624
|
+
})();
|
|
1682
1625
|
const sharedOptions = {
|
|
1683
1626
|
port: miniflarePort,
|
|
1684
1627
|
host: "127.0.0.1",
|
|
@@ -1687,19 +1630,93 @@ function createDevServer(options) {
|
|
|
1687
1630
|
d1Persist: persist ? `${persistPath}/d1` : undefined,
|
|
1688
1631
|
durableObjectsPersist: persist ? `${persistPath}/do` : undefined
|
|
1689
1632
|
};
|
|
1690
|
-
const
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1633
|
+
const createServiceBindings = (extraBindings = {}) => {
|
|
1634
|
+
const serviceBindings = {};
|
|
1635
|
+
if (bindings.services) {
|
|
1636
|
+
for (const [bindingName, serviceConfig] of Object.entries(bindings.services)) {
|
|
1637
|
+
serviceBindings[bindingName] = {
|
|
1638
|
+
name: serviceConfig.service,
|
|
1639
|
+
...serviceConfig.entrypoint && { entrypoint: serviceConfig.entrypoint }
|
|
1640
|
+
};
|
|
1641
|
+
}
|
|
1642
|
+
}
|
|
1643
|
+
for (const [bindingName, target] of Object.entries(extraBindings)) {
|
|
1644
|
+
serviceBindings[bindingName] = target;
|
|
1645
|
+
}
|
|
1646
|
+
return Object.keys(serviceBindings).length > 0 ? serviceBindings : undefined;
|
|
1701
1647
|
};
|
|
1702
|
-
|
|
1648
|
+
const sendEmailConfig = bindings.sendEmail ? {
|
|
1649
|
+
send_email: Object.entries(bindings.sendEmail).map(([name, binding]) => ({
|
|
1650
|
+
name,
|
|
1651
|
+
...binding.destinationAddress && {
|
|
1652
|
+
destination_address: binding.destinationAddress
|
|
1653
|
+
},
|
|
1654
|
+
...binding.allowedDestinationAddresses && {
|
|
1655
|
+
allowed_destination_addresses: binding.allowedDestinationAddresses
|
|
1656
|
+
},
|
|
1657
|
+
...binding.allowedSenderAddresses && {
|
|
1658
|
+
allowed_sender_addresses: binding.allowedSenderAddresses
|
|
1659
|
+
}
|
|
1660
|
+
}))
|
|
1661
|
+
} : undefined;
|
|
1662
|
+
const createWorkerConfig = (options2) => {
|
|
1663
|
+
const baseFlags = loadedConfig.compatibilityFlags ?? [];
|
|
1664
|
+
const compatFlags = baseFlags.includes("nodejs_compat") ? baseFlags : [...baseFlags, "nodejs_compat"];
|
|
1665
|
+
const workerBindings = loadedConfig.vars ?? {};
|
|
1666
|
+
const workerConfig = {
|
|
1667
|
+
name: options2.name,
|
|
1668
|
+
modules: true,
|
|
1669
|
+
compatibilityDate: loadedConfig.compatibilityDate,
|
|
1670
|
+
compatibilityFlags: compatFlags,
|
|
1671
|
+
...bindings.kv && {
|
|
1672
|
+
kvNamespaces: Object.fromEntries(Object.entries(bindings.kv).map(([bindingName, bindingConfig]) => {
|
|
1673
|
+
return [bindingName, getLocalKVNamespaceIdentifier(bindingConfig)];
|
|
1674
|
+
}))
|
|
1675
|
+
},
|
|
1676
|
+
...bindings.r2 && { r2Buckets: bindings.r2 },
|
|
1677
|
+
...bindings.d1 && {
|
|
1678
|
+
d1Databases: Object.fromEntries(Object.entries(bindings.d1).map(([bindingName, bindingConfig]) => {
|
|
1679
|
+
return [bindingName, getLocalD1DatabaseIdentifier(bindingConfig)];
|
|
1680
|
+
}))
|
|
1681
|
+
},
|
|
1682
|
+
...Object.keys(workerBindings).length > 0 && { bindings: workerBindings },
|
|
1683
|
+
...sendEmailConfig && { email: sendEmailConfig },
|
|
1684
|
+
...queueProducers && { queueProducers },
|
|
1685
|
+
...options2.queueConsumers && { queueConsumers: options2.queueConsumers },
|
|
1686
|
+
...options2.triggers && { triggers: options2.triggers }
|
|
1687
|
+
};
|
|
1688
|
+
if (options2.scriptPath) {
|
|
1689
|
+
workerConfig.scriptPath = options2.scriptPath;
|
|
1690
|
+
workerConfig.modulesRoot = cwd;
|
|
1691
|
+
workerConfig.modulesRules = [
|
|
1692
|
+
{ type: "ESModule", include: ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.mjs"] },
|
|
1693
|
+
{ type: "CommonJS", include: ["**/*.js", "**/*.cjs"] },
|
|
1694
|
+
{ type: "ESModule", include: ["**/*.jsx"] }
|
|
1695
|
+
];
|
|
1696
|
+
}
|
|
1697
|
+
if (options2.script) {
|
|
1698
|
+
workerConfig.script = options2.script;
|
|
1699
|
+
}
|
|
1700
|
+
if (options2.durableObjects && Object.keys(options2.durableObjects).length > 0) {
|
|
1701
|
+
workerConfig.durableObjects = options2.durableObjects;
|
|
1702
|
+
}
|
|
1703
|
+
if (options2.serviceBindings && Object.keys(options2.serviceBindings).length > 0) {
|
|
1704
|
+
workerConfig.serviceBindings = options2.serviceBindings;
|
|
1705
|
+
}
|
|
1706
|
+
return workerConfig;
|
|
1707
|
+
};
|
|
1708
|
+
const gatewayWorker = createWorkerConfig({
|
|
1709
|
+
name: "gateway",
|
|
1710
|
+
script: getGatewayScript(loadedConfig.wsRoutes, debug, shouldRunMainWorker ? INTERNAL_APP_SERVICE_BINDING : null),
|
|
1711
|
+
serviceBindings: shouldRunMainWorker ? createServiceBindings({
|
|
1712
|
+
[INTERNAL_APP_SERVICE_BINDING]: { name: appWorkerName }
|
|
1713
|
+
}) : createServiceBindings()
|
|
1714
|
+
});
|
|
1715
|
+
gatewayWorker.routes = ["*"];
|
|
1716
|
+
const hasDurableObjectBundles = !!doResult && doResult.bundles.size > 0;
|
|
1717
|
+
const browserBindingName = getSingleBrowserBindingName(bindings.browser);
|
|
1718
|
+
const needsBrowserWorker = Boolean(browserBindingName && (hasDurableObjectBundles || shouldRunMainWorker));
|
|
1719
|
+
if (!shouldRunMainWorker && !hasDurableObjectBundles && !needsBrowserWorker) {
|
|
1703
1720
|
return {
|
|
1704
1721
|
...sharedOptions,
|
|
1705
1722
|
...gatewayWorker
|
|
@@ -1708,56 +1725,64 @@ function createDevServer(options) {
|
|
|
1708
1725
|
const workers = [];
|
|
1709
1726
|
const durableObjects = {};
|
|
1710
1727
|
const browserShimUrl = `http://127.0.0.1:${browserShimPort}`;
|
|
1711
|
-
const browserBindingName = bindings.browser?.binding;
|
|
1712
1728
|
const browserWorkerName = "browser-binding";
|
|
1713
|
-
|
|
1714
|
-
const
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
const
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1729
|
+
if (shouldRunMainWorker && mainWorkerScriptPath) {
|
|
1730
|
+
const mainWorkerServiceBindings = createServiceBindings(browserBindingName ? {
|
|
1731
|
+
[browserBindingName]: { name: browserWorkerName }
|
|
1732
|
+
} : {});
|
|
1733
|
+
const mainWorkerConfig = createWorkerConfig({
|
|
1734
|
+
name: appWorkerName,
|
|
1735
|
+
scriptPath: bundledMainWorkerScriptPath ?? mainWorkerScriptPath,
|
|
1736
|
+
serviceBindings: mainWorkerServiceBindings,
|
|
1737
|
+
queueConsumers,
|
|
1738
|
+
triggers: loadedConfig.triggers?.crons?.length ? { crons: loadedConfig.triggers.crons } : undefined
|
|
1739
|
+
});
|
|
1740
|
+
workers.push(mainWorkerConfig);
|
|
1741
|
+
}
|
|
1742
|
+
if (doResult) {
|
|
1743
|
+
for (const [bindingName, bundlePath] of doResult.bundles) {
|
|
1744
|
+
const className = doResult.classes.get(bindingName);
|
|
1745
|
+
if (!className)
|
|
1746
|
+
continue;
|
|
1747
|
+
const workerName = `do-${bindingName.toLowerCase()}`;
|
|
1748
|
+
const workerConfig = createWorkerConfig({
|
|
1749
|
+
name: workerName,
|
|
1750
|
+
scriptPath: bundlePath,
|
|
1751
|
+
durableObjects: {
|
|
1752
|
+
[bindingName]: className
|
|
1753
|
+
},
|
|
1754
|
+
serviceBindings: createServiceBindings(browserBindingName ? {
|
|
1755
|
+
[browserBindingName]: { name: browserWorkerName }
|
|
1756
|
+
} : {})
|
|
1757
|
+
});
|
|
1758
|
+
if (browserBindingName) {
|
|
1759
|
+
logger?.debug(`DO ${workerName} has browser service binding: ${browserBindingName} → ${browserWorkerName}`);
|
|
1733
1760
|
}
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1761
|
+
logger?.debug(`DO ${workerName} config:`, JSON.stringify(workerConfig, null, 2));
|
|
1762
|
+
workers.push(workerConfig);
|
|
1763
|
+
durableObjects[bindingName] = {
|
|
1764
|
+
className,
|
|
1765
|
+
scriptName: workerName
|
|
1739
1766
|
};
|
|
1740
|
-
logger?.debug(`DO ${workerName} has browser service binding: ${browserBindingName} → ${browserWorkerName}`);
|
|
1741
1767
|
}
|
|
1742
|
-
logger?.debug(`DO ${workerName} config:`, JSON.stringify(workerConfig, null, 2));
|
|
1743
|
-
workers.push(workerConfig);
|
|
1744
|
-
durableObjects[bindingName] = {
|
|
1745
|
-
className,
|
|
1746
|
-
scriptName: workerName
|
|
1747
|
-
};
|
|
1748
1768
|
}
|
|
1749
|
-
if (
|
|
1750
|
-
const browserWorker = {
|
|
1769
|
+
if (needsBrowserWorker) {
|
|
1770
|
+
const browserWorker = createWorkerConfig({
|
|
1751
1771
|
name: browserWorkerName,
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
compatibilityDate: config.compatibilityDate,
|
|
1755
|
-
compatibilityFlags: config.compatibilityFlags ?? []
|
|
1756
|
-
};
|
|
1772
|
+
script: getBrowserBindingScript(browserShimUrl, debug)
|
|
1773
|
+
});
|
|
1757
1774
|
workers.push(browserWorker);
|
|
1758
1775
|
logger?.info(`Browser binding worker configured: ${browserBindingName} → ${browserShimUrl}`);
|
|
1759
1776
|
}
|
|
1760
|
-
|
|
1777
|
+
if (Object.keys(durableObjects).length > 0) {
|
|
1778
|
+
gatewayWorker.durableObjects = durableObjects;
|
|
1779
|
+
if (shouldRunMainWorker) {
|
|
1780
|
+
const mainWorker = workers.find((worker) => worker.name === appWorkerName);
|
|
1781
|
+
if (mainWorker) {
|
|
1782
|
+
mainWorker.durableObjects = durableObjects;
|
|
1783
|
+
}
|
|
1784
|
+
}
|
|
1785
|
+
}
|
|
1761
1786
|
return {
|
|
1762
1787
|
...sharedOptions,
|
|
1763
1788
|
workers: [gatewayWorker, ...workers]
|
|
@@ -1766,132 +1791,177 @@ function createDevServer(options) {
|
|
|
1766
1791
|
async function startMiniflare(doResult) {
|
|
1767
1792
|
const { Miniflare, Log, LogLevel } = await import("miniflare");
|
|
1768
1793
|
const mfConfig = buildMiniflareConfig(doResult);
|
|
1769
|
-
mfConfig.log =
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
logger?.info(
|
|
1782
|
-
|
|
1783
|
-
|
|
1794
|
+
mfConfig.log = createCompatibilityAwareMiniflareLog(Log, LogLevel.DEBUG, logger);
|
|
1795
|
+
mfConfig.handleRuntimeStdio = createRuntimeStdioForwarder(logger);
|
|
1796
|
+
const shouldLogMiniflareDiagnostics = verbose || debug;
|
|
1797
|
+
if (shouldLogMiniflareDiagnostics) {
|
|
1798
|
+
logger?.info("=== MINIFLARE CONFIG DEBUG ===");
|
|
1799
|
+
logger?.info("Full config:", JSON.stringify(mfConfig, (key, value) => {
|
|
1800
|
+
if (key === "script" && typeof value === "string" && value.length > 200) {
|
|
1801
|
+
return value.substring(0, 200) + "...[truncated]";
|
|
1802
|
+
}
|
|
1803
|
+
return value;
|
|
1804
|
+
}, 2));
|
|
1805
|
+
if (mfConfig.workers) {
|
|
1806
|
+
logger?.info("Workers order:");
|
|
1807
|
+
for (const w of mfConfig.workers) {
|
|
1808
|
+
logger?.info(` → ${w.name}:`);
|
|
1809
|
+
logger?.info(` script: ${w.script ? "inline" : w.scriptPath}`);
|
|
1810
|
+
logger?.info(` browserRendering: ${JSON.stringify(w.browserRendering)}`);
|
|
1811
|
+
logger?.info(` durableObjects: ${JSON.stringify(w.durableObjects)}`);
|
|
1812
|
+
}
|
|
1784
1813
|
}
|
|
1785
1814
|
}
|
|
1786
1815
|
miniflare = new Miniflare(mfConfig);
|
|
1787
1816
|
await miniflare.ready;
|
|
1788
1817
|
logger?.success(`Miniflare ready on http://localhost:${miniflarePort}`);
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1818
|
+
if (shouldLogMiniflareDiagnostics) {
|
|
1819
|
+
try {
|
|
1820
|
+
const gatewayBindings = await miniflare.getBindings("gateway");
|
|
1821
|
+
logger?.info("Gateway worker bindings:", Object.keys(gatewayBindings));
|
|
1822
|
+
if (mfConfig.workers) {
|
|
1823
|
+
for (const w of mfConfig.workers) {
|
|
1824
|
+
if (w.name !== "gateway") {
|
|
1825
|
+
try {
|
|
1826
|
+
const doBindings = await miniflare.getBindings(w.name);
|
|
1827
|
+
logger?.info(`${w.name} worker bindings:`, Object.keys(doBindings));
|
|
1828
|
+
if ("BROWSER" in doBindings) {
|
|
1829
|
+
logger?.success(`${w.name} has BROWSER binding!`);
|
|
1830
|
+
} else {
|
|
1831
|
+
logger?.warn(`${w.name} is MISSING BROWSER binding`);
|
|
1832
|
+
}
|
|
1833
|
+
} catch (error) {
|
|
1834
|
+
logger?.debug(`Skipping binding diagnostics for ${w.name}: ${formatErrorMessage(error)}`);
|
|
1802
1835
|
}
|
|
1803
|
-
} catch (e) {
|
|
1804
|
-
logger?.warn(`Could not get bindings for ${w.name}:`, e);
|
|
1805
1836
|
}
|
|
1806
1837
|
}
|
|
1807
1838
|
}
|
|
1839
|
+
} catch (error) {
|
|
1840
|
+
logger?.debug(`Skipping Miniflare binding diagnostics: ${formatErrorMessage(error)}`);
|
|
1808
1841
|
}
|
|
1809
|
-
} catch (e) {
|
|
1810
|
-
logger?.warn("Error getting bindings:", e);
|
|
1811
1842
|
}
|
|
1812
1843
|
}
|
|
1813
1844
|
async function reloadMiniflare(doResult) {
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1845
|
+
currentDoResult = doResult;
|
|
1846
|
+
const queuedReload = reloadChain.then(async () => {
|
|
1847
|
+
if (!miniflare)
|
|
1848
|
+
return;
|
|
1849
|
+
const { Log, LogLevel } = await import("miniflare");
|
|
1850
|
+
const mfConfig = buildMiniflareConfig(currentDoResult);
|
|
1851
|
+
mfConfig.log = createCompatibilityAwareMiniflareLog(Log, LogLevel.DEBUG, logger);
|
|
1852
|
+
mfConfig.handleRuntimeStdio = createRuntimeStdioForwarder(logger);
|
|
1853
|
+
logger?.info("Reloading Miniflare...");
|
|
1854
|
+
await miniflare.setOptions(mfConfig);
|
|
1855
|
+
logger?.success("Miniflare reloaded");
|
|
1856
|
+
});
|
|
1857
|
+
reloadChain = queuedReload.catch(() => {});
|
|
1858
|
+
await queuedReload;
|
|
1822
1859
|
}
|
|
1823
|
-
async function
|
|
1824
|
-
if (
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1860
|
+
async function resolveWorkerConfigWatchPath() {
|
|
1861
|
+
if (configPath) {
|
|
1862
|
+
const explicitPath = resolve3(cwd, configPath);
|
|
1863
|
+
const fs = await import("node:fs/promises");
|
|
1864
|
+
try {
|
|
1865
|
+
await fs.access(explicitPath);
|
|
1866
|
+
return explicitPath;
|
|
1867
|
+
} catch {}
|
|
1868
|
+
}
|
|
1869
|
+
return await resolveConfigPath(cwd) ?? null;
|
|
1870
|
+
}
|
|
1871
|
+
async function refreshWorkerOnlySurfaceState() {
|
|
1872
|
+
if (!config) {
|
|
1830
1873
|
return;
|
|
1831
1874
|
}
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1875
|
+
mainWorkerSurfacePaths = await resolveMainWorkerSurfacePaths(cwd, config);
|
|
1876
|
+
mainWorkerRoutes = await discoverRoutes(cwd, config);
|
|
1877
|
+
const composedMainEntry = await prepareComposedWorkerEntrypoint(cwd, config, undefined, {
|
|
1878
|
+
devInternalEmail: true
|
|
1879
|
+
});
|
|
1880
|
+
mainWorkerScriptPath = composedMainEntry ? resolve3(cwd, composedMainEntry) : null;
|
|
1881
|
+
if (mainWorkerScriptPath) {
|
|
1882
|
+
await bundleMainWorker();
|
|
1883
|
+
} else {
|
|
1884
|
+
bundledMainWorkerScriptPath = null;
|
|
1885
|
+
}
|
|
1886
|
+
await syncWorkerWatchTargets();
|
|
1887
|
+
}
|
|
1888
|
+
function getWorkerWatchTargets() {
|
|
1889
|
+
if (enableVite || !config) {
|
|
1890
|
+
return [];
|
|
1891
|
+
}
|
|
1892
|
+
const targets = collectWorkerWatchRoots(cwd, config, mainWorkerSurfacePaths);
|
|
1893
|
+
if (resolvedWorkerConfigPath) {
|
|
1894
|
+
targets.push(resolvedWorkerConfigPath);
|
|
1895
|
+
}
|
|
1896
|
+
return [...new Set(targets)];
|
|
1897
|
+
}
|
|
1898
|
+
async function syncWorkerWatchTargets() {
|
|
1899
|
+
if (!workerSourceWatcher) {
|
|
1835
1900
|
return;
|
|
1836
1901
|
}
|
|
1837
|
-
|
|
1838
|
-
const
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
logger?.debug(`File ${file}: ${statements.length} statement(s)`);
|
|
1847
|
-
}
|
|
1848
|
-
for (const [bindingName] of Object.entries(config.bindings.d1)) {
|
|
1849
|
-
for (let attempt = 0;attempt < 5; attempt++) {
|
|
1850
|
-
await new Promise((r) => setTimeout(r, 500 * (attempt + 1)));
|
|
1851
|
-
try {
|
|
1852
|
-
const response = await fetch(`http://127.0.0.1:${miniflarePort}/_devflare/migrate`, {
|
|
1853
|
-
method: "POST",
|
|
1854
|
-
headers: { "Content-Type": "application/json" },
|
|
1855
|
-
body: JSON.stringify({ bindingName, statements: allStatements })
|
|
1856
|
-
});
|
|
1857
|
-
if (!response.ok) {
|
|
1858
|
-
const text = await response.text();
|
|
1859
|
-
throw new Error(`HTTP ${response.status}: ${text}`);
|
|
1860
|
-
}
|
|
1861
|
-
const result = await response.json();
|
|
1862
|
-
if (result.success) {
|
|
1863
|
-
logger?.success(`D1 migrations applied to ${bindingName}`);
|
|
1864
|
-
break;
|
|
1865
|
-
} else {
|
|
1866
|
-
throw new Error(result.error || "Unknown error");
|
|
1867
|
-
}
|
|
1868
|
-
} catch (error) {
|
|
1869
|
-
if (attempt === 4) {
|
|
1870
|
-
logger?.warn(`Failed to apply migrations to ${bindingName}: ${error}`);
|
|
1871
|
-
}
|
|
1872
|
-
}
|
|
1873
|
-
}
|
|
1902
|
+
const nextWatchTargets = getWorkerWatchTargets();
|
|
1903
|
+
const nextWatchTargetSet = new Set(nextWatchTargets);
|
|
1904
|
+
const targetsToRemove = workerWatchTargets.filter((target) => !nextWatchTargetSet.has(target));
|
|
1905
|
+
const targetsToAdd = nextWatchTargets.filter((target) => !workerWatchTargets.includes(target));
|
|
1906
|
+
if (targetsToRemove.length > 0) {
|
|
1907
|
+
await workerSourceWatcher.unwatch(targetsToRemove);
|
|
1908
|
+
}
|
|
1909
|
+
if (targetsToAdd.length > 0) {
|
|
1910
|
+
workerSourceWatcher.add(targetsToAdd);
|
|
1874
1911
|
}
|
|
1912
|
+
workerWatchTargets = nextWatchTargets;
|
|
1875
1913
|
}
|
|
1876
|
-
async function
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1914
|
+
async function reloadWorkerOnlyConfig() {
|
|
1915
|
+
config = await loadConfig({ cwd, configFile: configPath });
|
|
1916
|
+
setLocalSendEmailBindings(config.bindings?.sendEmail ?? {});
|
|
1917
|
+
resolvedWorkerConfigPath = await resolveWorkerConfigWatchPath();
|
|
1918
|
+
await refreshWorkerOnlySurfaceState();
|
|
1919
|
+
await reloadMiniflare(currentDoResult);
|
|
1920
|
+
}
|
|
1921
|
+
async function startWorkerSourceWatcher2() {
|
|
1922
|
+
if (enableVite || !config) {
|
|
1923
|
+
return;
|
|
1924
|
+
}
|
|
1925
|
+
const watchTargets = getWorkerWatchTargets();
|
|
1926
|
+
if (watchTargets.length === 0) {
|
|
1927
|
+
return;
|
|
1928
|
+
}
|
|
1929
|
+
workerWatchTargets = watchTargets;
|
|
1930
|
+
workerSourceWatcher = await startWorkerSourceWatcher({
|
|
1931
|
+
watchTargets,
|
|
1932
|
+
resolvedWorkerConfigPath,
|
|
1933
|
+
logger,
|
|
1934
|
+
onConfigChange: reloadWorkerOnlyConfig,
|
|
1935
|
+
onWorkerChange: async () => {
|
|
1936
|
+
await refreshWorkerOnlySurfaceState();
|
|
1937
|
+
await reloadMiniflare(currentDoResult);
|
|
1887
1938
|
}
|
|
1888
1939
|
});
|
|
1889
|
-
logger?.success(`Vite dev server started on http://localhost:${vitePort}`);
|
|
1890
1940
|
}
|
|
1891
1941
|
async function start() {
|
|
1892
1942
|
logger?.info("Starting unified dev server...");
|
|
1893
1943
|
config = await loadConfig({ cwd, configFile: configPath });
|
|
1944
|
+
setLocalSendEmailBindings(config.bindings?.sendEmail ?? {});
|
|
1945
|
+
resolvedWorkerConfigPath = await resolveWorkerConfigWatchPath();
|
|
1894
1946
|
logger?.debug("Loaded config:", config.name);
|
|
1947
|
+
if (enableVite) {
|
|
1948
|
+
const viteProject = await detectViteProject(cwd);
|
|
1949
|
+
generatedViteConfigPath = await writeGeneratedViteConfig({
|
|
1950
|
+
cwd,
|
|
1951
|
+
configPath,
|
|
1952
|
+
localConfigPath: viteProject.viteConfigPath,
|
|
1953
|
+
bridgePort: miniflarePort
|
|
1954
|
+
});
|
|
1955
|
+
logger?.debug(`Generated Vite config → ${generatedViteConfigPath}`);
|
|
1956
|
+
}
|
|
1957
|
+
await refreshWorkerOnlySurfaceState();
|
|
1958
|
+
if (!enableVite && (hasWorkerSurfacePaths(mainWorkerSurfacePaths) || Boolean(mainWorkerRoutes?.routes.length))) {
|
|
1959
|
+
const detectedWorkerHandlers = Object.entries(mainWorkerSurfacePaths).filter(([, surfacePath]) => !!surfacePath).map(([surfaceName, surfacePath]) => `${surfaceName}=${surfacePath}`);
|
|
1960
|
+
const detectedRouteHandlers = mainWorkerRoutes?.routes.map((route) => `route=${route.filePath}`) ?? [];
|
|
1961
|
+
logger?.info(`Worker handlers detected: ${[...detectedWorkerHandlers, ...detectedRouteHandlers].join(", ")}`);
|
|
1962
|
+
} else if (!enableVite) {
|
|
1963
|
+
logger?.warn("No local worker handler entry was found for worker-only mode");
|
|
1964
|
+
}
|
|
1895
1965
|
const remoteCheck = await checkRemoteBindingRequirements(config);
|
|
1896
1966
|
if (remoteCheck.hasRemoteBindings) {
|
|
1897
1967
|
logger?.info("");
|
|
@@ -1917,7 +1987,7 @@ function createDevServer(options) {
|
|
|
1917
1987
|
logger?.info("");
|
|
1918
1988
|
}
|
|
1919
1989
|
}
|
|
1920
|
-
const browserBinding = config.bindings?.browser
|
|
1990
|
+
const browserBinding = getSingleBrowserBindingName(config.bindings?.browser);
|
|
1921
1991
|
if (browserBinding) {
|
|
1922
1992
|
logger?.info(`Starting Browser Rendering shim (binding: ${browserBinding})...`);
|
|
1923
1993
|
browserShim = createBrowserShim({
|
|
@@ -1931,48 +2001,62 @@ function createDevServer(options) {
|
|
|
1931
2001
|
const doPattern = config.files?.durableObjects;
|
|
1932
2002
|
let doResult = null;
|
|
1933
2003
|
if (typeof doPattern === "string" && doPattern) {
|
|
1934
|
-
const outDir =
|
|
2004
|
+
const outDir = resolve3(cwd, ".devflare/do-bundles");
|
|
1935
2005
|
doBundler = createDOBundler({
|
|
1936
2006
|
cwd,
|
|
1937
2007
|
pattern: doPattern,
|
|
1938
2008
|
outDir,
|
|
2009
|
+
rolldownOptions: config.rolldown?.options,
|
|
2010
|
+
sourcemap: config.rolldown?.sourcemap,
|
|
2011
|
+
minify: config.rolldown?.minify,
|
|
1939
2012
|
logger,
|
|
1940
2013
|
onRebuild: async (result) => {
|
|
1941
2014
|
await reloadMiniflare(result);
|
|
1942
2015
|
}
|
|
1943
2016
|
});
|
|
1944
2017
|
doResult = await doBundler.build();
|
|
2018
|
+
currentDoResult = doResult;
|
|
1945
2019
|
await doBundler.watch();
|
|
1946
2020
|
}
|
|
2021
|
+
currentDoResult = doResult;
|
|
1947
2022
|
await startMiniflare(doResult);
|
|
1948
|
-
await
|
|
2023
|
+
await startWorkerSourceWatcher2();
|
|
2024
|
+
if (enableVite) {
|
|
2025
|
+
viteProcess = await startViteProcess({
|
|
2026
|
+
cwd,
|
|
2027
|
+
vitePort,
|
|
2028
|
+
miniflarePort,
|
|
2029
|
+
generatedViteConfigPath,
|
|
2030
|
+
logger
|
|
2031
|
+
});
|
|
2032
|
+
} else {
|
|
2033
|
+
logger?.info("Vite startup skipped (no effective Vite config found for this package)");
|
|
2034
|
+
}
|
|
1949
2035
|
await new Promise((r) => setTimeout(r, 1000));
|
|
1950
|
-
await runD1Migrations();
|
|
1951
|
-
const cleanup = async () => {
|
|
1952
|
-
logger?.info("Shutting down...");
|
|
1953
|
-
await stop();
|
|
1954
|
-
process.exit(0);
|
|
1955
|
-
};
|
|
1956
|
-
process.on("SIGINT", cleanup);
|
|
1957
|
-
process.on("SIGTERM", cleanup);
|
|
2036
|
+
await runD1Migrations({ cwd, config, miniflarePort, logger });
|
|
1958
2037
|
}
|
|
1959
2038
|
async function stop() {
|
|
1960
2039
|
if (doBundler) {
|
|
1961
2040
|
await doBundler.close();
|
|
1962
2041
|
doBundler = null;
|
|
1963
2042
|
}
|
|
2043
|
+
if (workerSourceWatcher) {
|
|
2044
|
+
await workerSourceWatcher.close();
|
|
2045
|
+
workerSourceWatcher = null;
|
|
2046
|
+
}
|
|
1964
2047
|
if (miniflare) {
|
|
1965
2048
|
await miniflare.dispose();
|
|
1966
2049
|
miniflare = null;
|
|
1967
2050
|
}
|
|
1968
2051
|
if (viteProcess) {
|
|
1969
|
-
viteProcess
|
|
2052
|
+
await stopSpawnedProcessTree(viteProcess);
|
|
1970
2053
|
viteProcess = null;
|
|
1971
2054
|
}
|
|
1972
2055
|
if (browserShim) {
|
|
1973
2056
|
await browserShim.stop();
|
|
1974
2057
|
browserShim = null;
|
|
1975
2058
|
}
|
|
2059
|
+
clearLocalSendEmailBindings();
|
|
1976
2060
|
}
|
|
1977
2061
|
function getMiniflare() {
|
|
1978
2062
|
return miniflare;
|
|
@@ -1991,15 +2075,16 @@ async function createLogWriter(cwd, options) {
|
|
|
1991
2075
|
const fs = await import("node:fs");
|
|
1992
2076
|
let logPath;
|
|
1993
2077
|
if (options.logTemp) {
|
|
1994
|
-
logPath =
|
|
2078
|
+
logPath = resolve4(cwd, ".log");
|
|
1995
2079
|
} else {
|
|
1996
2080
|
const now = new Date;
|
|
1997
2081
|
const timestamp = now.toISOString().replace(/[:.]/g, "-").replace("T", "_").slice(0, 19);
|
|
1998
|
-
logPath =
|
|
2082
|
+
logPath = resolve4(cwd, `.log-${timestamp}`);
|
|
1999
2083
|
}
|
|
2000
2084
|
const fileStream = fs.createWriteStream(logPath, { flags: "w" });
|
|
2001
2085
|
const ansiRegex = /\x1b\[[0-9;]*m/g;
|
|
2002
2086
|
return {
|
|
2087
|
+
path: logPath,
|
|
2003
2088
|
write(data, source) {
|
|
2004
2089
|
const str = typeof data === "string" ? data : data.toString();
|
|
2005
2090
|
if (!str.trim())
|
|
@@ -2025,13 +2110,16 @@ async function runDevCommand(parsed, logger, options) {
|
|
|
2025
2110
|
const persistEnabled = parsed.options.persist === true;
|
|
2026
2111
|
const debugEnabled = parsed.options.debug === true || process.env.DEVFLARE_DEBUG === "true";
|
|
2027
2112
|
const verbose = parsed.options.verbose === true || debugEnabled;
|
|
2113
|
+
const theme = createCliTheme(parsed.options);
|
|
2114
|
+
const config = await loadConfig({ cwd, configFile: configPath });
|
|
2115
|
+
const viteProject = resolveEffectiveViteProject(await detectViteProject(cwd), config);
|
|
2028
2116
|
const logWriter = await createLogWriter(cwd, {
|
|
2029
2117
|
log: logEnabled,
|
|
2030
2118
|
logTemp: logTempEnabled
|
|
2031
2119
|
});
|
|
2032
2120
|
if (logWriter) {
|
|
2033
|
-
const logFile =
|
|
2034
|
-
logger
|
|
2121
|
+
const logFile = relative(cwd, logWriter.path) || ".log";
|
|
2122
|
+
logLine(logger, `${dim("logging", theme)} ${logFile}`);
|
|
2035
2123
|
}
|
|
2036
2124
|
const devLogger = createConsola({
|
|
2037
2125
|
level: verbose ? 4 : 3
|
|
@@ -2044,6 +2132,7 @@ async function runDevCommand(parsed, logger, options) {
|
|
|
2044
2132
|
logWriter.write(formatted);
|
|
2045
2133
|
};
|
|
2046
2134
|
};
|
|
2135
|
+
Object.assign(devLogger.log, wrapLog(devLogger.log.bind(devLogger)));
|
|
2047
2136
|
Object.assign(devLogger.info, wrapLog(devLogger.info.bind(devLogger)));
|
|
2048
2137
|
Object.assign(devLogger.error, wrapLog(devLogger.error.bind(devLogger), "[ERROR]"));
|
|
2049
2138
|
Object.assign(devLogger.warn, wrapLog(devLogger.warn.bind(devLogger), "[WARN]"));
|
|
@@ -2051,43 +2140,92 @@ async function runDevCommand(parsed, logger, options) {
|
|
|
2051
2140
|
Object.assign(devLogger.debug, wrapLog(devLogger.debug.bind(devLogger), "[DEBUG]"));
|
|
2052
2141
|
}
|
|
2053
2142
|
try {
|
|
2054
|
-
logger
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2143
|
+
logLine(logger);
|
|
2144
|
+
if (viteProject.shouldStartVite) {
|
|
2145
|
+
logLine(logger, `${cyanBold("dev", theme)} ${dim("Unified Dev Server", theme)}`);
|
|
2146
|
+
logLine(logger, " ├─ Vite: Full HMR for frontend");
|
|
2147
|
+
logLine(logger, " ├─ Miniflare: All Cloudflare bindings");
|
|
2148
|
+
logLine(logger, " ├─ Rolldown: Worker + DO bundling with watch");
|
|
2149
|
+
logLine(logger, " └─ Bridge: WebSocket RPC connection");
|
|
2150
|
+
} else {
|
|
2151
|
+
logLine(logger, `${cyanBold("dev", theme)} ${dim("Worker Dev Server", theme)}`);
|
|
2152
|
+
logLine(logger, " ├─ Miniflare: All Cloudflare bindings");
|
|
2153
|
+
logLine(logger, " ├─ Rolldown: Worker + DO bundling with watch");
|
|
2154
|
+
logLine(logger, " └─ Vite: Disabled (no effective Vite config found)");
|
|
2155
|
+
if (viteProject.wantsViteIntegration) {
|
|
2156
|
+
logger.warn("Vite-related settings were detected, but no effective Vite config was available");
|
|
2157
|
+
logger.warn("Skipping Vite startup and running in worker-only mode");
|
|
2158
|
+
}
|
|
2159
|
+
}
|
|
2160
|
+
logLine(logger);
|
|
2061
2161
|
const devServer = createDevServer({
|
|
2062
2162
|
cwd,
|
|
2063
2163
|
configPath,
|
|
2064
2164
|
vitePort: port ? parseInt(port, 10) : 5173,
|
|
2065
2165
|
miniflarePort: 8787,
|
|
2166
|
+
enableVite: viteProject.shouldStartVite,
|
|
2066
2167
|
persist: persistEnabled,
|
|
2067
2168
|
logger: devLogger,
|
|
2068
2169
|
verbose,
|
|
2069
2170
|
debug: debugEnabled
|
|
2070
2171
|
});
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2172
|
+
let isCleaningUp = false;
|
|
2173
|
+
const cleanupHandlers = new Map;
|
|
2174
|
+
const removeCleanupHandlers = () => {
|
|
2175
|
+
for (const [event, handler] of cleanupHandlers) {
|
|
2176
|
+
process.off(event, handler);
|
|
2177
|
+
}
|
|
2178
|
+
cleanupHandlers.clear();
|
|
2077
2179
|
};
|
|
2078
|
-
|
|
2079
|
-
|
|
2180
|
+
const cleanup = async (exitCode, reason) => {
|
|
2181
|
+
if (isCleaningUp) {
|
|
2182
|
+
return;
|
|
2183
|
+
}
|
|
2184
|
+
isCleaningUp = true;
|
|
2185
|
+
removeCleanupHandlers();
|
|
2186
|
+
if (reason) {
|
|
2187
|
+
const message = reason instanceof Error ? reason.stack ?? reason.message : String(reason);
|
|
2188
|
+
logger.error(message);
|
|
2189
|
+
}
|
|
2190
|
+
logLine(logger);
|
|
2191
|
+
logLine(logger, `${yellow("dev", theme)} ${dim("Shutting down…", theme)}`);
|
|
2192
|
+
try {
|
|
2193
|
+
await devServer.stop();
|
|
2194
|
+
} finally {
|
|
2195
|
+
logWriter?.close();
|
|
2196
|
+
process.exit(exitCode);
|
|
2197
|
+
}
|
|
2198
|
+
};
|
|
2199
|
+
const registerCleanupHandler = (event, handler) => {
|
|
2200
|
+
cleanupHandlers.set(event, handler);
|
|
2201
|
+
process.on(event, handler);
|
|
2202
|
+
};
|
|
2203
|
+
registerCleanupHandler("SIGINT", () => {
|
|
2204
|
+
cleanup(0);
|
|
2205
|
+
});
|
|
2206
|
+
registerCleanupHandler("SIGTERM", () => {
|
|
2207
|
+
cleanup(0);
|
|
2208
|
+
});
|
|
2209
|
+
registerCleanupHandler("SIGHUP", () => {
|
|
2210
|
+
cleanup(0);
|
|
2211
|
+
});
|
|
2212
|
+
registerCleanupHandler("uncaughtException", (error) => {
|
|
2213
|
+
cleanup(1, error);
|
|
2214
|
+
});
|
|
2215
|
+
registerCleanupHandler("unhandledRejection", (reason) => {
|
|
2216
|
+
cleanup(1, reason);
|
|
2217
|
+
});
|
|
2080
2218
|
await devServer.start();
|
|
2081
2219
|
await new Promise(() => {});
|
|
2082
2220
|
return { exitCode: 0 };
|
|
2083
2221
|
} catch (error) {
|
|
2222
|
+
logWriter?.close();
|
|
2084
2223
|
if (error instanceof Error) {
|
|
2085
2224
|
logger.error("Dev server failed:", error.message);
|
|
2086
2225
|
if (verbose) {
|
|
2087
2226
|
logger.error(error.stack);
|
|
2088
2227
|
}
|
|
2089
2228
|
}
|
|
2090
|
-
logWriter?.close();
|
|
2091
2229
|
return { exitCode: 1 };
|
|
2092
2230
|
}
|
|
2093
2231
|
}
|