devflare 1.0.0-next.19 → 1.0.0-next.20
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 +6807 -888
- package/README.md +375 -957
- package/dist/account-05zgta47.js +475 -0
- package/dist/account-b2ag1esh.js +475 -0
- package/dist/account-bxtcz61a.js +475 -0
- package/dist/account-gyfqg964.js +475 -0
- package/dist/account-q6pvs9d9.js +475 -0
- package/dist/account-rp4zbvw1.js +475 -0
- package/dist/bridge/client.d.ts +5 -0
- package/dist/bridge/client.d.ts.map +1 -1
- package/dist/bridge/gateway-runtime.d.ts +1 -1
- package/dist/bridge/gateway-runtime.d.ts.map +1 -1
- package/dist/bridge/miniflare.d.ts +67 -0
- package/dist/bridge/miniflare.d.ts.map +1 -1
- package/dist/bridge/proxy.d.ts +2 -1
- package/dist/bridge/proxy.d.ts.map +1 -1
- package/dist/bridge/server.d.ts.map +1 -1
- package/dist/browser.d.ts +2520 -40
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +3 -3
- package/dist/build-2s5paw5p.js +54 -0
- package/dist/build-4c350cp7.js +54 -0
- package/dist/build-e7wym63t.js +54 -0
- package/dist/build-ge6qp3t4.js +54 -0
- package/dist/build-ta8c6t11.js +54 -0
- package/dist/build-wvjj8f28.js +54 -0
- package/dist/build-ypg6f2kw.js +54 -0
- package/dist/build-yts8wwgf.js +54 -0
- package/dist/build-yzkdqexs.js +54 -0
- package/dist/cli/build-manifest.d.ts +12 -0
- package/dist/cli/build-manifest.d.ts.map +1 -1
- 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/secrets.d.ts +4 -0
- package/dist/cli/commands/secrets.d.ts.map +1 -0
- package/dist/cli/commands/type-generation/generator.d.ts +67 -1
- package/dist/cli/commands/type-generation/generator.d.ts.map +1 -1
- package/dist/cli/help-pages/pages/core.d.ts +1 -1
- package/dist/cli/help-pages/pages/core.d.ts.map +1 -1
- package/dist/cli/help-pages/shared.d.ts +1 -1
- package/dist/cli/help-pages/shared.d.ts.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -2
- package/dist/cli/package-metadata.d.ts.map +1 -1
- package/dist/cli/preview-bindings.d.ts.map +1 -1
- package/dist/cloudflare/index.js +2 -2
- package/dist/cloudflare/preview-registry-store.d.ts +1 -1
- package/dist/cloudflare/preview-registry-store.d.ts.map +1 -1
- package/dist/cloudflare/types.d.ts +1 -1
- package/dist/cloudflare/types.d.ts.map +1 -1
- package/dist/config/binding-resolution-helpers.d.ts +5 -0
- package/dist/config/binding-resolution-helpers.d.ts.map +1 -1
- 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 +11 -175
- package/dist/config/compiler.d.ts.map +1 -1
- package/dist/config/deploy-resources.d.ts.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.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.map +1 -1
- package/dist/config/preview.d.ts.map +1 -1
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resource-resolution.d.ts.map +1 -1
- package/dist/config/schema-bindings.d.ts +559 -19
- package/dist/config/schema-bindings.d.ts.map +1 -1
- package/dist/config/schema-env.d.ts +1306 -34
- package/dist/config/schema-env.d.ts.map +1 -1
- package/dist/config/schema-normalization.d.ts +97 -1
- package/dist/config/schema-normalization.d.ts.map +1 -1
- package/dist/config/schema-runtime.d.ts +245 -7
- package/dist/config/schema-runtime.d.ts.map +1 -1
- package/dist/config/schema.d.ts +2976 -57
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config-6m0n7d84.js +59 -0
- package/dist/config-7cf004ag.js +59 -0
- package/dist/config-b98dp58n.js +59 -0
- package/dist/config-cf3djhqy.js +59 -0
- package/dist/config-entry.js +1 -1
- package/dist/config-wa7hm0w9.js +59 -0
- package/dist/deploy-1jfagtn9.js +1055 -0
- package/dist/deploy-2afw0jfg.js +1055 -0
- package/dist/deploy-2fzj68kq.js +1055 -0
- package/dist/deploy-57nzn9wj.js +1045 -0
- package/dist/deploy-asyryrvm.js +1055 -0
- package/dist/deploy-hc927rw6.js +1045 -0
- package/dist/deploy-pnnf8tgy.js +1045 -0
- package/dist/deploy-q33bw715.js +1055 -0
- package/dist/deploy-tmdgecs3.js +1055 -0
- package/dist/deploy-v0y8kczr.js +1055 -0
- package/dist/deploy-xhj6zbcx.js +1055 -0
- package/dist/dev-1mvcts8w.js +2515 -0
- package/dist/dev-2a283xts.js +2515 -0
- package/dist/dev-62nhytf8.js +2505 -0
- package/dist/dev-75acm2xj.js +2478 -0
- package/dist/dev-802rg9dp.js +2515 -0
- package/dist/dev-d1bb2t0f.js +2515 -0
- package/dist/dev-dwry8494.js +2489 -0
- package/dist/dev-g6112y4w.js +2515 -0
- package/dist/dev-h2kneh95.js +2496 -0
- package/dist/dev-kybq3mwr.js +2489 -0
- package/dist/dev-n8qndkyg.js +2512 -0
- package/dist/dev-p32fkbwf.js +2489 -0
- package/dist/dev-qm9d4mfh.js +2478 -0
- package/dist/dev-rcthnse5.js +2473 -0
- package/dist/dev-server/dev-server-state.d.ts +1 -0
- package/dist/dev-server/dev-server-state.d.ts.map +1 -1
- package/dist/dev-server/miniflare-bindings.d.ts +44 -1
- package/dist/dev-server/miniflare-bindings.d.ts.map +1 -1
- package/dist/dev-server/miniflare-dev-config.d.ts +1 -0
- package/dist/dev-server/miniflare-dev-config.d.ts.map +1 -1
- package/dist/dev-server/miniflare-log.d.ts +8 -0
- package/dist/dev-server/miniflare-log.d.ts.map +1 -1
- package/dist/dev-server/miniflare-worker-config.d.ts +31 -1
- package/dist/dev-server/miniflare-worker-config.d.ts.map +1 -1
- package/dist/dev-server/server.d.ts.map +1 -1
- package/dist/dev-server/vite-process.d.ts +1 -0
- package/dist/dev-server/vite-process.d.ts.map +1 -1
- package/dist/dev-tgwja5mz.js +2496 -0
- package/dist/doctor-2shhdak6.js +245 -0
- package/dist/doctor-5g73w40j.js +245 -0
- package/dist/doctor-gamefzcs.js +245 -0
- package/dist/doctor-rn53ctfs.js +245 -0
- package/dist/index-01kehw41.js +348 -0
- package/dist/index-06bg0z9y.js +185 -0
- package/dist/index-0d7tw5r4.js +136 -0
- package/dist/index-0m6e4mxz.js +133 -0
- package/dist/index-0vah20er.js +1410 -0
- package/dist/index-0wa0ebm1.js +68 -0
- package/dist/index-1714y3cz.js +1410 -0
- package/dist/index-1qs5gcm7.js +895 -0
- package/dist/index-29k04v43.js +574 -0
- package/dist/index-2jywf4pz.js +1372 -0
- package/dist/index-2qhk9nbx.js +1372 -0
- package/dist/index-2vq6bveq.js +574 -0
- package/dist/index-36h8gkhb.js +1088 -0
- package/dist/index-38fq7pww.js +560 -0
- package/dist/index-3bxqn033.js +1410 -0
- package/dist/index-3jme4hgw.js +1234 -0
- package/dist/index-3p7s9mk9.js +360 -0
- package/dist/index-47w35sft.js +244 -0
- package/dist/index-4by4c7rm.js +52 -0
- package/dist/index-4phjwd6h.js +412 -0
- package/dist/index-4z5jrw0j.js +594 -0
- package/dist/index-51mzqy0d.js +895 -0
- package/dist/index-53pqqpq9.js +74 -0
- package/dist/index-5enq8ntr.js +1766 -0
- package/dist/index-5fnq9r9m.js +1410 -0
- package/dist/index-5w9f2b17.js +695 -0
- package/dist/index-627srx16.js +45 -0
- package/dist/index-6bqgf5x8.js +227 -0
- package/dist/index-6xknvbyk.js +1088 -0
- package/dist/index-7ef3ktz5.js +1372 -0
- package/dist/index-7hpjfdzh.js +185 -0
- package/dist/index-8052df4m.js +627 -0
- package/dist/index-82epjzrr.js +1410 -0
- package/dist/index-82z7rvz6.js +1238 -0
- package/dist/index-8atc1yb9.js +68 -0
- package/dist/index-8tj0awnv.js +476 -0
- package/dist/index-8x745h59.js +1069 -0
- package/dist/index-9bawzcny.js +574 -0
- package/dist/index-9bjjqdfc.js +236 -0
- package/dist/index-9d7x3vfr.js +236 -0
- package/dist/index-9nf8zs4p.js +1069 -0
- package/dist/index-acwbmagz.js +412 -0
- package/dist/index-aqjdaem7.js +74 -0
- package/dist/index-b6448fd0.js +133 -0
- package/dist/index-b9j55r7q.js +240 -0
- package/dist/index-bdatd1za.js +1372 -0
- package/dist/index-c3nxftnp.js +699 -0
- package/dist/index-c643s0gv.js +488 -0
- package/dist/index-d2md1j3d.js +185 -0
- package/dist/index-dbr6bfz6.js +528 -0
- package/dist/index-dd1g0g7e.js +360 -0
- package/dist/index-dktb9az5.js +1372 -0
- package/dist/index-dm9q84c7.js +360 -0
- package/dist/index-f51mkh13.js +1088 -0
- package/dist/index-f86n1fpd.js +55 -0
- package/dist/index-fnk0tkw7.js +412 -0
- package/dist/index-g5aq66bj.js +1534 -0
- package/dist/index-gj5qh491.js +54 -0
- package/dist/index-gq39t0rx.js +895 -0
- package/dist/index-h5dqna7q.js +1410 -0
- package/dist/index-hjs9j2g9.js +895 -0
- package/dist/index-hn5nbxbt.js +147 -0
- package/dist/index-hpjh0qjx.js +1723 -0
- package/dist/index-hs6ekcfs.js +412 -0
- package/dist/index-jdzrvnfj.js +52 -0
- package/dist/index-jg720mq7.js +476 -0
- package/dist/index-jrzddxvt.js +2167 -0
- package/dist/index-kgstnk6g.js +239 -0
- package/dist/index-khnw972v.js +117 -0
- package/dist/index-kwqff3ba.js +1410 -0
- package/dist/index-m2v0fj08.js +74 -0
- package/dist/index-mjve6tqn.js +447 -0
- package/dist/index-mkxzgn0q.js +1372 -0
- package/dist/index-mzmq3v0d.js +1088 -0
- package/dist/index-ng9n3znd.js +1372 -0
- package/dist/index-nhbkm2ba.js +467 -0
- package/dist/index-nrfhk0k5.js +1088 -0
- package/dist/index-p0zppqxm.js +467 -0
- package/dist/index-pkxf6h87.js +895 -0
- package/dist/index-pqp4312v.js +52 -0
- package/dist/index-pw9jn6kz.js +574 -0
- package/dist/index-q31ne0xa.js +412 -0
- package/dist/index-qf2dkqxh.js +249 -0
- package/dist/index-qmtdf7k5.js +639 -0
- package/dist/index-qwgr4q7s.js +37 -0
- package/dist/index-rab2dfh3.js +494 -0
- package/dist/index-rz7rx80s.js +1410 -0
- package/dist/index-s37h3jgk.js +572 -0
- package/dist/index-sb705m7d.js +52 -0
- package/dist/index-syscwrjp.js +1576 -0
- package/dist/index-t14zr0ys.js +1063 -0
- package/dist/index-tjc99447.js +68 -0
- package/dist/index-v35460hf.js +574 -0
- package/dist/index-v7q00d1e.js +1410 -0
- package/dist/index-vkkmx4xe.js +1372 -0
- package/dist/index-vrps1gky.js +2202 -0
- package/dist/index-w4c9vmvg.js +1517 -0
- package/dist/index-wqd8n2qk.js +574 -0
- package/dist/index-x12e6fzy.js +476 -0
- package/dist/index-xagpz645.js +2199 -0
- package/dist/index-xbth1r6e.js +572 -0
- package/dist/index-xm9fqhcb.js +447 -0
- package/dist/index-y59hnmd0.js +132 -0
- package/dist/index-y7mkb00x.js +133 -0
- package/dist/index-z40mjts9.js +212 -0
- package/dist/index-z5k5bjc7.js +1218 -0
- package/dist/index-z73sytma.js +895 -0
- package/dist/index-zjv6apef.js +1410 -0
- package/dist/index.js +8 -8
- package/dist/init-cwpergap.js +180 -0
- package/dist/login-83bjfhvz.js +77 -0
- package/dist/login-ddw888xb.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-vd0m3xr4.js +77 -0
- package/dist/previews-2wfvsjfy.js +1337 -0
- package/dist/previews-31feb8r3.js +1337 -0
- package/dist/previews-3w4pxqby.js +1337 -0
- package/dist/previews-93ttrf5f.js +1337 -0
- package/dist/previews-bdrefjzx.js +1337 -0
- package/dist/previews-cfcn56b4.js +1337 -0
- package/dist/previews-mssq1hrm.js +1337 -0
- package/dist/previews-tcaz1gt8.js +1337 -0
- package/dist/productions-4h80j2c7.js +505 -0
- package/dist/productions-86jaqt7m.js +505 -0
- package/dist/productions-bn2q31my.js +505 -0
- package/dist/productions-dv8g7f6g.js +505 -0
- package/dist/productions-e2m9s4tr.js +505 -0
- package/dist/productions-fgshs1m7.js +505 -0
- package/dist/productions-hphmt68n.js +505 -0
- package/dist/productions-vhq7yx86.js +505 -0
- package/dist/runtime/index.js +8 -8
- 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 +163 -26
- 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 +8 -0
- 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.map +1 -1
- package/dist/test/cf.d.ts +3 -3
- package/dist/test/containers.d.ts +87 -0
- package/dist/test/containers.d.ts.map +1 -0
- package/dist/test/index.d.ts +4 -1
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +2833 -543
- 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/should-skip.d.ts +14 -0
- package/dist/test/should-skip.d.ts.map +1 -1
- package/dist/test/simple-context-bindings.d.ts.map +1 -1
- package/dist/test/simple-context-durable-objects.d.ts.map +1 -1
- package/dist/test/simple-context-gateway-script.d.ts +1 -1
- package/dist/test/simple-context-gateway-script.d.ts.map +1 -1
- package/dist/test/simple-context-lifecycle.d.ts.map +1 -1
- package/dist/test/simple-context-mfconfig.d.ts +4 -1
- package/dist/test/simple-context-mfconfig.d.ts.map +1 -1
- package/dist/test/simple-context-multi-worker.d.ts.map +1 -1
- package/dist/test/simple-context-startup.d.ts.map +1 -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 -106
- package/dist/test/utilities.d.ts.map +1 -1
- package/dist/types-2ejrbba1.js +695 -0
- package/dist/types-7jkbm95a.js +695 -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-j4s6qcrc.js +695 -0
- package/dist/utils/send-email.d.ts.map +1 -1
- package/dist/utils/send-email.js +1 -1
- package/dist/vite/index.js +6 -6
- package/dist/vite/plugin-context.d.ts.map +1 -1
- package/dist/worker-663em30d.js +513 -0
- package/dist/worker-argxc7fb.js +513 -0
- package/dist/worker-entry/composed-worker.d.ts.map +1 -1
- package/dist/worker-entry/surface-paths.d.ts +2 -0
- package/dist/worker-entry/surface-paths.d.ts.map +1 -1
- package/dist/worker-fcdsnj14.js +513 -0
- package/dist/worker-fk42rzse.js +513 -0
- package/dist/worker-jkemk8d2.js +513 -0
- package/dist/worker-m4ze8djx.js +513 -0
- package/dist/worker-wnan5dca.js +513 -0
- package/dist/worker-yw3atfb1.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 +13 -12
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
// src/shims/local-media-bindings.ts
|
|
2
|
+
function emptyNodeStream() {
|
|
3
|
+
return new ReadableStream({
|
|
4
|
+
start(controller) {
|
|
5
|
+
controller.close();
|
|
6
|
+
}
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
function normalizeNodeContentType(value, fallback) {
|
|
10
|
+
if (!value)
|
|
11
|
+
return fallback;
|
|
12
|
+
if (value.includes("/"))
|
|
13
|
+
return value;
|
|
14
|
+
if (value === "jpg" || value === "jpeg")
|
|
15
|
+
return "image/jpeg";
|
|
16
|
+
if (value === "png")
|
|
17
|
+
return "image/png";
|
|
18
|
+
if (value === "webp")
|
|
19
|
+
return "image/webp";
|
|
20
|
+
if (value === "avif")
|
|
21
|
+
return "image/avif";
|
|
22
|
+
if (value === "mp4")
|
|
23
|
+
return "video/mp4";
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
async function readNodeBytes(stream) {
|
|
27
|
+
const buffer = await new Response(stream ?? emptyNodeStream()).arrayBuffer();
|
|
28
|
+
return new Uint8Array(buffer);
|
|
29
|
+
}
|
|
30
|
+
function streamFromNodeBytes(bytes) {
|
|
31
|
+
const copy = new Uint8Array(bytes.byteLength);
|
|
32
|
+
copy.set(bytes);
|
|
33
|
+
return new Response(copy).body ?? emptyNodeStream();
|
|
34
|
+
}
|
|
35
|
+
function createUnsupportedHostedImagesBinding() {
|
|
36
|
+
const unsupported = () => {
|
|
37
|
+
throw new Error("Devflare local Images hosted API is not implemented. Use transform/info APIs locally, or connect to Cloudflare for hosted image storage.");
|
|
38
|
+
};
|
|
39
|
+
return {
|
|
40
|
+
image(_imageId) {
|
|
41
|
+
return {
|
|
42
|
+
details: unsupported,
|
|
43
|
+
bytes: unsupported,
|
|
44
|
+
update: unsupported,
|
|
45
|
+
delete: unsupported
|
|
46
|
+
};
|
|
47
|
+
},
|
|
48
|
+
upload: unsupported,
|
|
49
|
+
list: unsupported
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function createNodeImageResult(bytes, contentType) {
|
|
53
|
+
return {
|
|
54
|
+
response() {
|
|
55
|
+
return new Response(streamFromNodeBytes(bytes), {
|
|
56
|
+
headers: { "Content-Type": contentType }
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
contentType() {
|
|
60
|
+
return contentType;
|
|
61
|
+
},
|
|
62
|
+
image() {
|
|
63
|
+
return streamFromNodeBytes(bytes);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function createNodeImageTransformer(bytesPromise) {
|
|
68
|
+
const transformer = {
|
|
69
|
+
transform(_transform) {
|
|
70
|
+
return transformer;
|
|
71
|
+
},
|
|
72
|
+
draw(_image, _options) {
|
|
73
|
+
return transformer;
|
|
74
|
+
},
|
|
75
|
+
async output(options) {
|
|
76
|
+
return createNodeImageResult(await bytesPromise, normalizeNodeContentType(options?.format, "image/png"));
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
return transformer;
|
|
80
|
+
}
|
|
81
|
+
function createLocalImagesBinding() {
|
|
82
|
+
return {
|
|
83
|
+
async info(stream) {
|
|
84
|
+
const bytes = await readNodeBytes(stream);
|
|
85
|
+
return {
|
|
86
|
+
format: "image/png",
|
|
87
|
+
fileSize: bytes.byteLength,
|
|
88
|
+
width: 1,
|
|
89
|
+
height: 1
|
|
90
|
+
};
|
|
91
|
+
},
|
|
92
|
+
input(stream) {
|
|
93
|
+
return createNodeImageTransformer(readNodeBytes(stream));
|
|
94
|
+
},
|
|
95
|
+
hosted: createUnsupportedHostedImagesBinding()
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function createNodeMediaResult(bytesPromise, contentType) {
|
|
99
|
+
return {
|
|
100
|
+
async media() {
|
|
101
|
+
return streamFromNodeBytes(await bytesPromise);
|
|
102
|
+
},
|
|
103
|
+
async response() {
|
|
104
|
+
return new Response(streamFromNodeBytes(await bytesPromise), {
|
|
105
|
+
headers: { "Content-Type": contentType }
|
|
106
|
+
});
|
|
107
|
+
},
|
|
108
|
+
async contentType() {
|
|
109
|
+
return contentType;
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function createNodeMediaTransformer(bytesPromise) {
|
|
114
|
+
const output = (options = {}) => createNodeMediaResult(bytesPromise, normalizeNodeContentType(options.format, "video/mp4"));
|
|
115
|
+
return {
|
|
116
|
+
transform(_transform) {
|
|
117
|
+
return {
|
|
118
|
+
output(options) {
|
|
119
|
+
return output(options);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
},
|
|
123
|
+
output(options) {
|
|
124
|
+
return output(options);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function createLocalMediaBinding() {
|
|
129
|
+
return {
|
|
130
|
+
input(stream) {
|
|
131
|
+
return createNodeMediaTransformer(readNodeBytes(stream));
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
var LOCAL_MEDIA_BINDING_SCRIPT = `
|
|
136
|
+
import { RpcTarget, WorkerEntrypoint } from 'cloudflare:workers'
|
|
137
|
+
|
|
138
|
+
function emptyStream() {
|
|
139
|
+
return new ReadableStream({
|
|
140
|
+
start(controller) {
|
|
141
|
+
controller.close()
|
|
142
|
+
}
|
|
143
|
+
})
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function normalizeContentType(value, fallback) {
|
|
147
|
+
if (typeof value !== 'string' || value.length === 0) return fallback
|
|
148
|
+
if (value.includes('/')) return value
|
|
149
|
+
if (value === 'jpg') return 'image/jpeg'
|
|
150
|
+
if (value === 'jpeg') return 'image/jpeg'
|
|
151
|
+
if (value === 'png') return 'image/png'
|
|
152
|
+
if (value === 'webp') return 'image/webp'
|
|
153
|
+
if (value === 'avif') return 'image/avif'
|
|
154
|
+
if (value === 'mp4') return 'video/mp4'
|
|
155
|
+
return value
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
async function readBytes(stream) {
|
|
159
|
+
return await new Response(stream || emptyStream()).arrayBuffer()
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function streamFromBytes(bytes) {
|
|
163
|
+
return new Response(bytes.slice(0)).body || emptyStream()
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function createBodyReader(bytes) {
|
|
167
|
+
return function takeBody() {
|
|
168
|
+
return streamFromBytes(bytes)
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
class LocalImageResult extends RpcTarget {
|
|
173
|
+
constructor(takeBody, contentType) {
|
|
174
|
+
super()
|
|
175
|
+
this.takeBody = takeBody
|
|
176
|
+
this.contentTypeValue = contentType
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
response() {
|
|
180
|
+
return new Response(this.takeBody(), {
|
|
181
|
+
headers: { 'Content-Type': this.contentTypeValue }
|
|
182
|
+
})
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
contentType() {
|
|
186
|
+
return this.contentTypeValue
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
image() {
|
|
190
|
+
return this.takeBody()
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
class LocalImageTransformer extends RpcTarget {
|
|
195
|
+
constructor(bytes) {
|
|
196
|
+
super()
|
|
197
|
+
this.takeBody = createBodyReader(bytes)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
transform() {
|
|
201
|
+
return this
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
draw() {
|
|
205
|
+
return this
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
async output(options = {}) {
|
|
209
|
+
return new LocalImageResult(
|
|
210
|
+
this.takeBody,
|
|
211
|
+
normalizeContentType(options.format, 'image/png')
|
|
212
|
+
)
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
function createHostedImagesBinding() {
|
|
217
|
+
const unsupported = () => {
|
|
218
|
+
throw new Error('Devflare local Images hosted API is not implemented. Use the transform/info APIs locally, or connect to Cloudflare for hosted image storage.')
|
|
219
|
+
}
|
|
220
|
+
return {
|
|
221
|
+
image() {
|
|
222
|
+
return {
|
|
223
|
+
details: unsupported,
|
|
224
|
+
bytes: unsupported,
|
|
225
|
+
update: unsupported,
|
|
226
|
+
delete: unsupported
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
upload: unsupported,
|
|
230
|
+
list: unsupported
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
export class LocalImagesBinding extends WorkerEntrypoint {
|
|
235
|
+
async info(stream) {
|
|
236
|
+
const bytes = await readBytes(stream)
|
|
237
|
+
return {
|
|
238
|
+
format: 'image/png',
|
|
239
|
+
fileSize: bytes.byteLength,
|
|
240
|
+
width: 1,
|
|
241
|
+
height: 1
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
async input(stream) {
|
|
246
|
+
return new LocalImageTransformer(await readBytes(stream))
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
get hosted() {
|
|
250
|
+
return createHostedImagesBinding()
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
class LocalMediaResult extends RpcTarget {
|
|
255
|
+
constructor(takeBody, contentType) {
|
|
256
|
+
super()
|
|
257
|
+
this.takeBody = takeBody
|
|
258
|
+
this.contentTypeValue = contentType
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
async media() {
|
|
262
|
+
return this.takeBody()
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
async response() {
|
|
266
|
+
return new Response(this.takeBody(), {
|
|
267
|
+
headers: { 'Content-Type': this.contentTypeValue }
|
|
268
|
+
})
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
async contentType() {
|
|
272
|
+
return this.contentTypeValue
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
class LocalMediaTransformationGenerator extends RpcTarget {
|
|
277
|
+
constructor(takeBody) {
|
|
278
|
+
super()
|
|
279
|
+
this.takeBody = takeBody
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
output(options = {}) {
|
|
283
|
+
return new LocalMediaResult(
|
|
284
|
+
this.takeBody,
|
|
285
|
+
normalizeContentType(options.format, 'video/mp4')
|
|
286
|
+
)
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
class LocalMediaTransformer extends RpcTarget {
|
|
291
|
+
constructor(bytes) {
|
|
292
|
+
super()
|
|
293
|
+
this.takeBody = createBodyReader(bytes)
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
transform() {
|
|
297
|
+
return new LocalMediaTransformationGenerator(this.takeBody)
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
output(options = {}) {
|
|
301
|
+
return new LocalMediaResult(
|
|
302
|
+
this.takeBody,
|
|
303
|
+
normalizeContentType(options.format, 'video/mp4')
|
|
304
|
+
)
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
export class LocalMediaBinding extends WorkerEntrypoint {
|
|
309
|
+
async input(stream) {
|
|
310
|
+
return new LocalMediaTransformer(await readBytes(stream))
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
export default {
|
|
315
|
+
fetch() {
|
|
316
|
+
return new Response('Devflare local Images/Media binding')
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
`;
|
|
320
|
+
function toLocalShimWorkerName(kind, bindingName, index) {
|
|
321
|
+
const slug = bindingName.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || kind;
|
|
322
|
+
return `devflare-local-${kind}-${index}-${slug}`;
|
|
323
|
+
}
|
|
324
|
+
function getEntrypoint(kind) {
|
|
325
|
+
return kind === "images" ? "LocalImagesBinding" : "LocalMediaBinding";
|
|
326
|
+
}
|
|
327
|
+
function buildLocalBindingShimServiceConfig(config) {
|
|
328
|
+
const entries = [
|
|
329
|
+
...Object.keys(config.bindings?.images ?? {}).map((bindingName) => ({
|
|
330
|
+
bindingName,
|
|
331
|
+
kind: "images"
|
|
332
|
+
})),
|
|
333
|
+
...Object.keys(config.bindings?.media ?? {}).map((bindingName) => ({
|
|
334
|
+
bindingName,
|
|
335
|
+
kind: "media"
|
|
336
|
+
}))
|
|
337
|
+
];
|
|
338
|
+
return {
|
|
339
|
+
localBindingNames: entries.map((entry) => entry.bindingName),
|
|
340
|
+
serviceBindings: Object.fromEntries(entries.map((entry, index) => {
|
|
341
|
+
const workerName = toLocalShimWorkerName(entry.kind, entry.bindingName, index);
|
|
342
|
+
return [
|
|
343
|
+
entry.bindingName,
|
|
344
|
+
{
|
|
345
|
+
name: workerName,
|
|
346
|
+
entrypoint: getEntrypoint(entry.kind)
|
|
347
|
+
}
|
|
348
|
+
];
|
|
349
|
+
})),
|
|
350
|
+
workers: entries.map((entry, index) => ({
|
|
351
|
+
name: toLocalShimWorkerName(entry.kind, entry.bindingName, index),
|
|
352
|
+
modules: true,
|
|
353
|
+
script: LOCAL_MEDIA_BINDING_SCRIPT,
|
|
354
|
+
compatibilityDate: config.compatibilityDate ?? "2025-01-01",
|
|
355
|
+
...config.compatibilityFlags && { compatibilityFlags: config.compatibilityFlags }
|
|
356
|
+
}))
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
export { createLocalImagesBinding, createLocalMediaBinding, buildLocalBindingShimServiceConfig };
|