devflare 1.0.0-next.15 → 1.0.0-next.16
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 +9360 -1819
- package/README.md +313 -39
- package/bin/devflare.js +17 -7
- package/dist/account-0w8wdzjv.js +475 -0
- package/dist/account-eygq6qx7.js +475 -0
- package/dist/account-fw8nafav.js +475 -0
- package/dist/account-pzq69nys.js +475 -0
- package/dist/account-s66jb15j.js +475 -0
- package/dist/api-d6ekexs5.js +25 -0
- package/dist/bridge/index.d.ts +1 -1
- package/dist/bridge/index.d.ts.map +1 -1
- 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 +0 -4
- package/dist/bridge/proxy.d.ts.map +1 -1
- package/dist/bridge/serialization.d.ts.map +1 -1
- package/dist/bridge/server.d.ts +1 -1
- package/dist/bridge/server.d.ts.map +1 -1
- package/dist/browser-shim/handler.d.ts +1 -1
- package/dist/browser-shim/handler.d.ts.map +1 -1
- package/dist/browser.d.ts +1648 -38
- package/dist/browser.d.ts.map +1 -1
- package/dist/build-1kmkwqgh.js +53 -0
- package/dist/build-506kjhcm.js +53 -0
- package/dist/build-66866ahs.js +53 -0
- package/dist/build-g1adm3ww.js +53 -0
- package/dist/build-p3r3117t.js +53 -0
- package/dist/bundler/do-bundler.d.ts.map +1 -1
- package/dist/bundler/rolldown-shared.d.ts +24 -0
- package/dist/bundler/rolldown-shared.d.ts.map +1 -0
- package/dist/bundler/worker-bundler.d.ts +0 -1
- package/dist/bundler/worker-bundler.d.ts.map +1 -1
- 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 +27 -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/deploy.d.ts.map +1 -1
- 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/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 +44 -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 +2 -1
- package/dist/cli/config-path.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/preview-bindings.d.ts +42 -0
- package/dist/cli/preview-bindings.d.ts.map +1 -0
- package/dist/cli/preview.d.ts +11 -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 +4 -0
- package/dist/cloudflare/api.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/kv-namespace.d.ts +3 -0
- package/dist/cloudflare/kv-namespace.d.ts.map +1 -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-records.d.ts +61 -0
- package/dist/cloudflare/preview-registry-records.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-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/registry-schema.d.ts +253 -0
- package/dist/cloudflare/registry-schema.d.ts.map +1 -0
- package/dist/cloudflare/tokens.d.ts +18 -0
- package/dist/cloudflare/tokens.d.ts.map +1 -0
- package/dist/cloudflare/types.d.ts +122 -5
- package/dist/cloudflare/types.d.ts.map +1 -1
- package/dist/cloudflare/usage.d.ts.map +1 -1
- package/dist/config/compiler.d.ts +4 -0
- package/dist/config/compiler.d.ts.map +1 -1
- 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 +4 -3
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/preview-resources.d.ts +77 -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 +0 -22
- package/dist/config/ref.d.ts.map +1 -1
- package/dist/config/resolve.d.ts +1 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resource-resolution.d.ts +21 -5
- package/dist/config/resource-resolution.d.ts.map +1 -1
- package/dist/config/schema-bindings.d.ts +693 -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 +1341 -0
- package/dist/config/schema-env.d.ts.map +1 -0
- package/dist/config/schema-normalization.d.ts +64 -0
- package/dist/config/schema-normalization.d.ts.map +1 -0
- package/dist/config/schema-runtime.d.ts +230 -0
- package/dist/config/schema-runtime.d.ts.map +1 -0
- package/dist/config/schema.d.ts +542 -3736
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config-entry.d.ts +5 -0
- package/dist/config-entry.d.ts.map +1 -0
- package/dist/{config-v9tr4rts.js → config-fjwke42y.js} +6 -4
- package/dist/config-hwdqjse7.js +59 -0
- package/dist/config-pxvewrhv.js +59 -0
- package/dist/config-q0g5qdga.js +59 -0
- package/dist/decorators/durable-object.d.ts.map +1 -1
- package/dist/deploy-7nmzc9r8.js +609 -0
- package/dist/deploy-csfhdr64.js +691 -0
- package/dist/deploy-ex4g5avz.js +621 -0
- package/dist/deploy-jnb0bhka.js +609 -0
- package/dist/deploy-tp0g6qdp.js +609 -0
- package/dist/deploy-ykpcjkc2.js +690 -0
- package/dist/{dev-ymtphbkg.js → dev-2pd33m28.js} +386 -348
- package/dist/dev-7ef5e2j1.js +2409 -0
- package/dist/dev-8nssqatr.js +2409 -0
- package/dist/dev-grznx8fn.js +2409 -0
- package/dist/dev-server/d1-migrations.d.ts +14 -0
- package/dist/dev-server/d1-migrations.d.ts.map +1 -0
- package/dist/dev-server/gateway-script.d.ts +8 -0
- package/dist/dev-server/gateway-script.d.ts.map +1 -0
- package/dist/dev-server/runtime-stdio.d.ts.map +1 -1
- package/dist/dev-server/server.d.ts.map +1 -1
- package/dist/dev-server/vite-process.d.ts +14 -0
- package/dist/dev-server/vite-process.d.ts.map +1 -0
- package/dist/dev-server/vite-utils.d.ts +1 -1
- package/dist/dev-server/vite-utils.d.ts.map +1 -1
- package/dist/dev-server/worker-source-watcher.d.ts +11 -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/{doctor-xv4gm1h4.js → doctor-04ammrrh.js} +67 -32
- package/dist/doctor-fmjj65mc.js +245 -0
- package/dist/doctor-fzkznce1.js +245 -0
- package/dist/doctor-sa5xv1bz.js +245 -0
- package/dist/index-091sh1ma.js +1229 -0
- package/dist/index-0apbm26n.js +788 -0
- package/dist/index-0eqksag4.js +418 -0
- package/dist/{index-k8vh558d.js → index-0kfzdywd.js} +15 -2
- package/dist/index-0w826dsr.js +379 -0
- package/dist/{index-5s1bz1e0.js → index-11m5a8wd.js} +100 -22
- package/dist/{index-0rsa2c1t.js → index-1sp39f2f.js} +110 -57
- package/dist/index-2jnrqbny.js +1301 -0
- package/dist/index-2pb7b9mw.js +378 -0
- package/dist/{index-3a4mmn57.js → index-2x53aqjm.js} +1065 -890
- package/dist/index-3ke5d2vn.js +1229 -0
- package/dist/index-43dq8yx8.js +788 -0
- package/dist/index-4rrttqj5.js +378 -0
- package/dist/index-4v9bc2pc.js +1367 -0
- package/dist/index-61jsjnsv.js +280 -0
- package/dist/index-6jef5emv.js +176 -0
- package/dist/index-6psz1h4c.js +788 -0
- package/dist/index-72mve6vh.js +168 -0
- package/dist/{index-zvgc3e0c.js → index-74198nxd.js} +159 -63
- package/dist/{index-7bq4xq84.js → index-7g8zyws4.js} +7 -12
- package/dist/index-7kcxjhta.js +456 -0
- package/dist/index-7v583xan.js +418 -0
- package/dist/index-7x0ybbtx.js +133 -0
- package/dist/index-816krz9p.js +52 -0
- package/dist/index-82f1z98k.js +41 -0
- package/dist/index-8t5nb4qx.js +133 -0
- package/dist/index-9az6s7ad.js +52 -0
- package/dist/{index-59df49vn.js → index-9ba1etyz.js} +29 -51
- package/dist/{index-001mw014.js → index-9fbtk7gv.js} +134 -248
- package/dist/index-9n6djthj.js +490 -0
- package/dist/index-aabgympv.js +39 -0
- package/dist/index-b8m6883k.js +74 -0
- package/dist/{index-5yxg30va.js → index-cgbvmse6.js} +15 -6
- package/dist/index-d8etnfef.js +1229 -0
- package/dist/index-e9yw4d6y.js +133 -0
- package/dist/index-epw1jxz5.js +1204 -0
- package/dist/index-f85s8gj3.js +2649 -0
- package/dist/index-fe2ngvh7.js +1229 -0
- package/dist/index-fvsadj32.js +192 -0
- package/dist/index-gs4y9gdf.js +456 -0
- package/dist/{index-fef08w43.js → index-h18pxvzs.js} +7 -6
- package/dist/index-hfj1a2c4.js +2649 -0
- package/dist/{index-8gtqgb3q.js → index-hjy8ctpc.js} +14 -92
- package/dist/index-htzf0py1.js +1204 -0
- package/dist/index-j185x270.js +897 -0
- package/dist/index-jb75kwa4.js +519 -0
- package/dist/index-jwd8pcb2.js +897 -0
- package/dist/index-k29yjhv0.js +52 -0
- package/dist/index-k6vq6kkt.js +456 -0
- package/dist/{index-vky23txa.js → index-m3fmw6mx.js} +2 -2
- package/dist/index-maxpsfk8.js +402 -0
- package/dist/index-mbdmrner.js +402 -0
- package/dist/index-mea5bc45.js +418 -0
- package/dist/index-mqekt778.js +185 -0
- package/dist/index-na3mnm1k.js +74 -0
- package/dist/index-p03n4qet.js +1367 -0
- package/dist/index-p296ban8.js +191 -0
- package/dist/index-pnbs1b8k.js +280 -0
- package/dist/index-q4kaz181.js +1207 -0
- package/dist/index-ry131z23.js +378 -0
- package/dist/index-sgb7c8nm.js +402 -0
- package/dist/index-sqrksgb2.js +133 -0
- package/dist/index-stgn34cr.js +148 -0
- package/dist/{index-v8vvsn9x.js → index-t08te69w.js} +1 -18
- package/dist/index-thna1tkd.js +280 -0
- package/dist/index-v5nmqthy.js +74 -0
- package/dist/{index-n932ytmq.js → index-vt4yxkmf.js} +2 -2
- package/dist/index-wyq6c6yj.js +402 -0
- package/dist/index-wztc9stx.js +418 -0
- package/dist/index-x9cwdxw5.js +456 -0
- package/dist/index-xk9djfjp.js +519 -0
- package/dist/index-yc0gcchc.js +418 -0
- package/dist/index-yqbxjysa.js +897 -0
- package/dist/index-yzddwp02.js +788 -0
- package/dist/index-zfhq6s96.js +74 -0
- package/dist/index-zt22fe2j.js +54 -0
- package/dist/index-zyt5byt6.js +2649 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/{init-na2atvz2.js → init-r4hnxan3.js} +24 -17
- package/dist/login-2hnz4m4n.js +77 -0
- package/dist/login-5bsxxpvc.js +77 -0
- package/dist/login-6tzvczw2.js +77 -0
- package/dist/login-bhaw72zc.js +77 -0
- package/dist/login-x8tgckqm.js +77 -0
- package/dist/previews-3rn8mz2c.js +1168 -0
- package/dist/previews-d487qde5.js +1200 -0
- package/dist/previews-gm3z0syj.js +1168 -0
- package/dist/previews-j9ymq4ys.js +1169 -0
- package/dist/previews-q031mx34.js +1168 -0
- package/dist/productions-120xg0aq.js +505 -0
- package/dist/productions-5ev5qweg.js +505 -0
- package/dist/productions-me3tdvr9.js +505 -0
- package/dist/productions-p5rbgp2f.js +505 -0
- package/dist/productions-x9p0pym1.js +505 -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 +6 -267
- package/dist/runtime/context.d.ts.map +1 -1
- package/dist/runtime/exports.d.ts +3 -3
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/middleware.d.ts +8 -38
- package/dist/runtime/middleware.d.ts.map +1 -1
- package/dist/src/browser.js +9 -17
- package/dist/src/cli/index.js +3 -1
- package/dist/src/cloudflare/index.js +49 -3
- package/dist/src/config-entry.js +14 -0
- package/dist/src/index.js +24 -20
- package/dist/src/runtime/index.js +3 -9
- package/dist/src/sveltekit/index.js +10 -8
- package/dist/src/test/index.js +16 -19
- package/dist/src/vite/index.js +7 -5
- package/dist/sveltekit/platform.d.ts +1 -1
- package/dist/sveltekit/platform.d.ts.map +1 -1
- package/dist/test/cf.d.ts +10 -10
- package/dist/test/email.d.ts.map +1 -1
- package/dist/test/index.d.ts +1 -6
- package/dist/test/index.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/test/scheduled.d.ts.map +1 -1
- package/dist/test/should-skip.d.ts +0 -18
- package/dist/test/should-skip.d.ts.map +1 -1
- 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-gateway-script.d.ts +2 -0
- package/dist/test/simple-context-gateway-script.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.d.ts +1 -23
- package/dist/test/simple-context.d.ts.map +1 -1
- package/dist/test/tail.d.ts.map +1 -1
- package/dist/test/worker.d.ts.map +1 -1
- package/dist/token-kedhcret.js +419 -0
- package/dist/token-m8jmnjwk.js +419 -0
- package/dist/{types-158m16vd.js → types-0sqwkp7x.js} +244 -140
- package/dist/types-1gwr2ex6.js +572 -0
- package/dist/types-6e5yx6km.js +572 -0
- package/dist/types-p0gckpn6.js +572 -0
- package/dist/utils/send-email.d.ts.map +1 -1
- package/dist/vite/config-file.d.ts.map +1 -1
- package/dist/vite/plugin.d.ts.map +1 -1
- package/dist/worker-0srh2jfr.js +513 -0
- package/dist/worker-4xrfd10a.js +513 -0
- package/dist/worker-entry/composed-worker.d.ts +0 -7
- package/dist/worker-entry/composed-worker.d.ts.map +1 -1
- package/dist/worker-entry/surface-paths.d.ts +15 -0
- package/dist/worker-entry/surface-paths.d.ts.map +1 -0
- package/dist/worker-qtam8grz.js +513 -0
- package/dist/worker-qzm0b7br.js +513 -0
- package/dist/worker-y9ha6g44.js +513 -0
- package/package.json +17 -10
- package/R2.md +0 -200
- package/dist/account-spa7gzsn.js +0 -421
- package/dist/build-zv25ke4s.js +0 -102
- package/dist/deploy-6xmqvv06.js +0 -118
- package/dist/index-2q3pmzrx.js +0 -90
- package/dist/index-6nb7w45m.js +0 -79
- package/dist/index-tksw7gpy.js +0 -503
- package/dist/index-v43z02tr.js +0 -205
- package/dist/index-xdq9ery1.js +0 -664
- package/dist/test/multi-worker-context.d.ts +0 -114
- package/dist/test/multi-worker-context.d.ts.map +0 -1
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import {
|
|
2
|
+
apiDelete,
|
|
3
|
+
apiGetAll,
|
|
4
|
+
apiPost,
|
|
5
|
+
apiPut
|
|
6
|
+
} from "./index-0w826dsr.js";
|
|
7
|
+
|
|
8
|
+
// src/cloudflare/tokens.ts
|
|
9
|
+
var MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS = 300;
|
|
10
|
+
var DEVFLARE_MANAGED_TOKEN_PREFIX = "devflare-";
|
|
11
|
+
var ACCOUNT_OWNED_TOKEN_SCOPE = "com.cloudflare.api.account";
|
|
12
|
+
var ACCOUNT_API_TOKENS_PERMISSION_GROUP_NAME_PATTERN = /^Account API Tokens\b/i;
|
|
13
|
+
var DEVFLARE_MANAGED_TOKEN_NAME_PATTERN = /^devflare-/i;
|
|
14
|
+
var DEVFLARE_PERMISSION_GROUP_NAME_PATTERNS = [
|
|
15
|
+
/^Account Analytics Read$/i,
|
|
16
|
+
/^Account Settings Read$/i,
|
|
17
|
+
/^Analytics Read$/i,
|
|
18
|
+
/^AI /i,
|
|
19
|
+
/^Browser Rendering /i,
|
|
20
|
+
/^D1 (Metadata Read|Read|Write)$/i,
|
|
21
|
+
/^Email (Routing|Sending) /i,
|
|
22
|
+
/^Hyperdrive /i,
|
|
23
|
+
/^Queues /i,
|
|
24
|
+
/^Vectorize /i,
|
|
25
|
+
/^Workers /i
|
|
26
|
+
];
|
|
27
|
+
function dedupePermissionGroups(permissionGroups) {
|
|
28
|
+
const seenIds = new Set;
|
|
29
|
+
return permissionGroups.filter((permissionGroup) => {
|
|
30
|
+
if (seenIds.has(permissionGroup.id)) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
seenIds.add(permissionGroup.id);
|
|
34
|
+
return true;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function dedupePermissionGroupIds(permissionGroupIds) {
|
|
38
|
+
return Array.from(new Set(permissionGroupIds.map((id) => id.trim()).filter(Boolean)));
|
|
39
|
+
}
|
|
40
|
+
function excludeAccountApiTokensPermissionGroups(permissionGroups) {
|
|
41
|
+
return permissionGroups.filter((permissionGroup) => {
|
|
42
|
+
return !ACCOUNT_API_TOKENS_PERMISSION_GROUP_NAME_PATTERN.test(permissionGroup.name);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function keepAccountOwnedTokenCompatiblePermissionGroups(permissionGroups) {
|
|
46
|
+
return permissionGroups.filter((permissionGroup) => {
|
|
47
|
+
return permissionGroup.scopes.some((scope) => scope.trim() === ACCOUNT_OWNED_TOKEN_SCOPE);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function selectReusableAccountOwnedTokenPermissionGroups(permissionGroups) {
|
|
51
|
+
return dedupePermissionGroups(excludeAccountApiTokensPermissionGroups(keepAccountOwnedTokenCompatiblePermissionGroups(permissionGroups)));
|
|
52
|
+
}
|
|
53
|
+
function parseOptionalDate(value) {
|
|
54
|
+
if (!value) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const parsed = new Date(value);
|
|
58
|
+
return Number.isNaN(parsed.getTime()) ? undefined : parsed;
|
|
59
|
+
}
|
|
60
|
+
function mapAccountOwnedAPITokenPolicy(policy) {
|
|
61
|
+
return {
|
|
62
|
+
id: policy.id,
|
|
63
|
+
effect: policy.effect,
|
|
64
|
+
permissionGroups: policy.permission_groups?.map((permissionGroup) => ({
|
|
65
|
+
id: permissionGroup.id,
|
|
66
|
+
name: permissionGroup.name
|
|
67
|
+
}))
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function mapAccountOwnedAPIToken(token) {
|
|
71
|
+
return {
|
|
72
|
+
id: token.id,
|
|
73
|
+
name: token.name ?? token.id,
|
|
74
|
+
status: token.status,
|
|
75
|
+
value: token.value,
|
|
76
|
+
issuedOn: parseOptionalDate(token.issued_on),
|
|
77
|
+
modifiedOn: parseOptionalDate(token.modified_on),
|
|
78
|
+
lastUsedOn: parseOptionalDate(token.last_used_on),
|
|
79
|
+
policies: token.policies?.map(mapAccountOwnedAPITokenPolicy)
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function isDevflareManagedTokenName(name) {
|
|
83
|
+
return DEVFLARE_MANAGED_TOKEN_NAME_PATTERN.test(name.trim());
|
|
84
|
+
}
|
|
85
|
+
function normalizeDevflareTokenName(name) {
|
|
86
|
+
const trimmedName = name.trim();
|
|
87
|
+
if (!trimmedName) {
|
|
88
|
+
throw new Error("Devflare token name cannot be empty");
|
|
89
|
+
}
|
|
90
|
+
const suffix = isDevflareManagedTokenName(trimmedName) ? trimmedName.replace(DEVFLARE_MANAGED_TOKEN_NAME_PATTERN, "") : trimmedName;
|
|
91
|
+
if (!suffix) {
|
|
92
|
+
throw new Error("Devflare token name cannot be empty");
|
|
93
|
+
}
|
|
94
|
+
return `${DEVFLARE_MANAGED_TOKEN_PREFIX}${suffix}`;
|
|
95
|
+
}
|
|
96
|
+
function stripDevflareTokenNamePrefix(name) {
|
|
97
|
+
const trimmedName = name.trim();
|
|
98
|
+
if (!trimmedName) {
|
|
99
|
+
return trimmedName;
|
|
100
|
+
}
|
|
101
|
+
const strippedName = trimmedName.replace(DEVFLARE_MANAGED_TOKEN_NAME_PATTERN, "");
|
|
102
|
+
return strippedName || trimmedName;
|
|
103
|
+
}
|
|
104
|
+
function filterDevflareManagedTokens(tokens) {
|
|
105
|
+
return tokens.filter((token) => isDevflareManagedTokenName(token.name));
|
|
106
|
+
}
|
|
107
|
+
function selectDevflarePermissionGroups(permissionGroups) {
|
|
108
|
+
const selectedPermissionGroups = dedupePermissionGroups(selectReusableAccountOwnedTokenPermissionGroups(permissionGroups).filter((permissionGroup) => {
|
|
109
|
+
return DEVFLARE_PERMISSION_GROUP_NAME_PATTERNS.some((pattern) => {
|
|
110
|
+
return pattern.test(permissionGroup.name);
|
|
111
|
+
});
|
|
112
|
+
}));
|
|
113
|
+
if (selectedPermissionGroups.length === 0) {
|
|
114
|
+
throw new Error("Could not map the available Cloudflare permission groups to a Devflare token policy.");
|
|
115
|
+
}
|
|
116
|
+
if (selectedPermissionGroups.length > MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS) {
|
|
117
|
+
throw new Error(`Devflare selected ${selectedPermissionGroups.length} permission groups, which exceeds Cloudflare's ${MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS}-group limit for account-owned tokens.`);
|
|
118
|
+
}
|
|
119
|
+
return selectedPermissionGroups;
|
|
120
|
+
}
|
|
121
|
+
function selectAllReusablePermissionGroups(permissionGroups) {
|
|
122
|
+
const selectedPermissionGroups = selectReusableAccountOwnedTokenPermissionGroups(permissionGroups);
|
|
123
|
+
if (selectedPermissionGroups.length === 0) {
|
|
124
|
+
throw new Error("Could not find any reusable account-scoped Cloudflare permission groups for this Devflare token.");
|
|
125
|
+
}
|
|
126
|
+
if (selectedPermissionGroups.length > MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS) {
|
|
127
|
+
throw new Error(`Devflare selected ${selectedPermissionGroups.length} permission groups, which exceeds Cloudflare's ${MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS}-group limit for account-owned tokens.`);
|
|
128
|
+
}
|
|
129
|
+
return selectedPermissionGroups;
|
|
130
|
+
}
|
|
131
|
+
async function listAccountTokenPermissionGroups(accountId, options) {
|
|
132
|
+
const permissionGroups = await apiGetAll(`/accounts/${accountId}/tokens/permission_groups`, options);
|
|
133
|
+
return dedupePermissionGroups(permissionGroups);
|
|
134
|
+
}
|
|
135
|
+
async function listAccountOwnedAPITokens(accountId, options) {
|
|
136
|
+
const tokens = await apiGetAll(`/accounts/${accountId}/tokens`, options);
|
|
137
|
+
return tokens.map(mapAccountOwnedAPIToken);
|
|
138
|
+
}
|
|
139
|
+
async function deleteAccountOwnedAPIToken(accountId, tokenId, options) {
|
|
140
|
+
return apiDelete(`/accounts/${accountId}/tokens/${tokenId}`, options);
|
|
141
|
+
}
|
|
142
|
+
async function rollAccountOwnedAPITokenValue(accountId, tokenId, options) {
|
|
143
|
+
return apiPut(`/accounts/${accountId}/tokens/${tokenId}/value`, {}, options);
|
|
144
|
+
}
|
|
145
|
+
async function createAccountOwnedAPIToken(accountId, options, clientOptions) {
|
|
146
|
+
const permissionGroupIds = dedupePermissionGroupIds(options.permissionGroupIds);
|
|
147
|
+
if (permissionGroupIds.length === 0) {
|
|
148
|
+
throw new Error("Cannot create a Devflare token without any permission groups");
|
|
149
|
+
}
|
|
150
|
+
if (permissionGroupIds.length > MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS) {
|
|
151
|
+
throw new Error(`Cannot create a Devflare token with more than ${MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS} permission groups.`);
|
|
152
|
+
}
|
|
153
|
+
const createdToken = await apiPost(`/accounts/${accountId}/tokens`, {
|
|
154
|
+
name: options.name,
|
|
155
|
+
policies: [
|
|
156
|
+
{
|
|
157
|
+
effect: "allow",
|
|
158
|
+
resources: {
|
|
159
|
+
[`com.cloudflare.api.account.${accountId}`]: "*"
|
|
160
|
+
},
|
|
161
|
+
permission_groups: permissionGroupIds.map((id) => ({ id }))
|
|
162
|
+
}
|
|
163
|
+
]
|
|
164
|
+
}, clientOptions);
|
|
165
|
+
return mapAccountOwnedAPIToken(createdToken);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export { normalizeDevflareTokenName, stripDevflareTokenNamePrefix, filterDevflareManagedTokens, selectDevflarePermissionGroups, selectAllReusablePermissionGroups, listAccountTokenPermissionGroups, listAccountOwnedAPITokens, deleteAccountOwnedAPIToken, rollAccountOwnedAPITokenValue, createAccountOwnedAPIToken };
|
|
@@ -11,25 +11,31 @@ import {
|
|
|
11
11
|
import {
|
|
12
12
|
compileConfig,
|
|
13
13
|
compileToProgrammaticConfig,
|
|
14
|
+
isolateViteBuildOutputPaths,
|
|
15
|
+
rebaseWranglerConfigPaths,
|
|
14
16
|
writeWranglerConfig
|
|
15
|
-
} from "./index-
|
|
17
|
+
} from "./index-pnbs1b8k.js";
|
|
16
18
|
import {
|
|
17
19
|
loadConfig,
|
|
18
20
|
loadResolvedConfig,
|
|
21
|
+
normalizeDOBinding,
|
|
19
22
|
resolveConfigForEnvironment,
|
|
20
23
|
resolveConfigForLocalRuntime,
|
|
21
24
|
resolveConfigPath,
|
|
22
25
|
resolveConfigResources
|
|
23
|
-
} from "./index-
|
|
26
|
+
} from "./index-6psz1h4c.js";
|
|
24
27
|
import {
|
|
25
28
|
__require
|
|
26
29
|
} from "./index-37x76zdn.js";
|
|
27
30
|
|
|
28
31
|
// src/vite/plugin.ts
|
|
29
|
-
import { isAbsolute,
|
|
32
|
+
import { isAbsolute, resolve as resolve3 } from "pathe";
|
|
30
33
|
|
|
31
34
|
// src/worker-entry/composed-worker.ts
|
|
32
|
-
import { dirname, relative, resolve } from "pathe";
|
|
35
|
+
import { dirname, relative, resolve as resolve2 } from "pathe";
|
|
36
|
+
|
|
37
|
+
// src/worker-entry/surface-paths.ts
|
|
38
|
+
import { resolve } from "pathe";
|
|
33
39
|
var DEFAULT_FETCH_ENTRY_FILES = [
|
|
34
40
|
"src/fetch.ts",
|
|
35
41
|
"src/fetch.js",
|
|
@@ -54,20 +60,22 @@ var DEFAULT_EMAIL_ENTRY_FILES = [
|
|
|
54
60
|
"src/email.mts",
|
|
55
61
|
"src/email.mjs"
|
|
56
62
|
];
|
|
57
|
-
async function resolveWorkerHandlerPath(cwd, configuredPath, defaultEntries) {
|
|
63
|
+
async function resolveWorkerHandlerPath(cwd, configuredPath, defaultEntries, surfaceName = "worker") {
|
|
58
64
|
if (configuredPath === false) {
|
|
59
65
|
return null;
|
|
60
66
|
}
|
|
61
67
|
const fs = await import("node:fs/promises");
|
|
62
|
-
const candidates = new Set;
|
|
63
68
|
if (typeof configuredPath === "string" && configuredPath) {
|
|
64
|
-
|
|
69
|
+
const absolutePath = resolve(cwd, configuredPath);
|
|
70
|
+
try {
|
|
71
|
+
await fs.access(absolutePath);
|
|
72
|
+
return absolutePath;
|
|
73
|
+
} catch {
|
|
74
|
+
throw new Error(`Configured ${surfaceName} handler "${configuredPath}" was not found`);
|
|
75
|
+
}
|
|
65
76
|
}
|
|
66
77
|
for (const defaultEntry of defaultEntries) {
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
for (const candidate of candidates) {
|
|
70
|
-
const absolutePath = resolve(cwd, candidate);
|
|
78
|
+
const absolutePath = resolve(cwd, defaultEntry);
|
|
71
79
|
try {
|
|
72
80
|
await fs.access(absolutePath);
|
|
73
81
|
return absolutePath;
|
|
@@ -79,12 +87,17 @@ async function resolveWorkerHandlerPath(cwd, configuredPath, defaultEntries) {
|
|
|
79
87
|
}
|
|
80
88
|
async function resolveWorkerSurfacePaths(cwd, config) {
|
|
81
89
|
return {
|
|
82
|
-
fetch: await resolveWorkerHandlerPath(cwd, config.files?.fetch, DEFAULT_FETCH_ENTRY_FILES),
|
|
83
|
-
queue: await resolveWorkerHandlerPath(cwd, config.files?.queue, DEFAULT_QUEUE_ENTRY_FILES),
|
|
84
|
-
scheduled: await resolveWorkerHandlerPath(cwd, config.files?.scheduled, DEFAULT_SCHEDULED_ENTRY_FILES),
|
|
85
|
-
email: await resolveWorkerHandlerPath(cwd, config.files?.email, DEFAULT_EMAIL_ENTRY_FILES)
|
|
90
|
+
fetch: await resolveWorkerHandlerPath(cwd, config.files?.fetch, DEFAULT_FETCH_ENTRY_FILES, "fetch"),
|
|
91
|
+
queue: await resolveWorkerHandlerPath(cwd, config.files?.queue, DEFAULT_QUEUE_ENTRY_FILES, "queue"),
|
|
92
|
+
scheduled: await resolveWorkerHandlerPath(cwd, config.files?.scheduled, DEFAULT_SCHEDULED_ENTRY_FILES, "scheduled"),
|
|
93
|
+
email: await resolveWorkerHandlerPath(cwd, config.files?.email, DEFAULT_EMAIL_ENTRY_FILES, "email")
|
|
86
94
|
};
|
|
87
95
|
}
|
|
96
|
+
function hasWorkerSurfacePaths(surfacePaths) {
|
|
97
|
+
return Object.values(surfacePaths).some((surfacePath) => typeof surfacePath === "string" && surfacePath.length > 0);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// src/worker-entry/composed-worker.ts
|
|
88
101
|
function toImportSpecifier(fromFilePath, toFilePath) {
|
|
89
102
|
const specifier = relative(dirname(fromFilePath), toFilePath).replace(/\\/g, "/");
|
|
90
103
|
return specifier.startsWith(".") ? specifier : `./${specifier}`;
|
|
@@ -101,12 +114,65 @@ function createGeneratedRouteModuleImports(entryPath, routeDiscovery) {
|
|
|
101
114
|
segmentsJson: JSON.stringify(route.segments)
|
|
102
115
|
}));
|
|
103
116
|
}
|
|
104
|
-
function
|
|
105
|
-
|
|
117
|
+
async function createGeneratedDurableObjectExports(entryPath, cwd, config) {
|
|
118
|
+
if (config.files?.durableObjects === false || !config.bindings?.durableObjects) {
|
|
119
|
+
return [];
|
|
120
|
+
}
|
|
121
|
+
const localClassNames = new Set(Object.values(config.bindings.durableObjects).map((binding) => normalizeDOBinding(binding)).filter((binding) => !binding.scriptName).map((binding) => binding.className));
|
|
122
|
+
if (localClassNames.size === 0) {
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
125
|
+
const fs = await import("node:fs/promises");
|
|
126
|
+
const pattern = typeof config.files?.durableObjects === "string" ? config.files.durableObjects : DEFAULT_DO_PATTERN;
|
|
127
|
+
const matchedFiles = await findFiles(pattern, { cwd });
|
|
128
|
+
const exports = [];
|
|
129
|
+
const discoveredClassNames = new Set;
|
|
130
|
+
for (const filePath of matchedFiles) {
|
|
131
|
+
try {
|
|
132
|
+
const code = await fs.readFile(filePath, "utf-8");
|
|
133
|
+
const classNames = findDurableObjectClasses(code).filter((className) => localClassNames.has(className));
|
|
134
|
+
if (classNames.length === 0) {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
for (const className of classNames) {
|
|
138
|
+
discoveredClassNames.add(className);
|
|
139
|
+
}
|
|
140
|
+
exports.push({
|
|
141
|
+
importPath: toImportSpecifier(entryPath, filePath),
|
|
142
|
+
filePath,
|
|
143
|
+
classNames
|
|
144
|
+
});
|
|
145
|
+
} catch {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const missingClassNames = Array.from(localClassNames).filter((className) => !discoveredClassNames.has(className));
|
|
150
|
+
if (missingClassNames.length > 0) {
|
|
151
|
+
throw new Error(`Failed to discover local Durable Object class${missingClassNames.length === 1 ? "" : "es"} ${missingClassNames.join(", ")} for worker composition. Ensure files.durableObjects matches the source file pattern for your do.* files.`);
|
|
152
|
+
}
|
|
153
|
+
return exports;
|
|
106
154
|
}
|
|
107
|
-
function
|
|
155
|
+
function needsComposedWorkerEntrypoint(cwd, surfacePaths, config, routeDiscovery) {
|
|
156
|
+
const hasAdditionalWorkerSurfaces = Boolean(surfacePaths.queue || surfacePaths.scheduled || surfacePaths.email || routeDiscovery?.routes.length);
|
|
157
|
+
if (hasAdditionalWorkerSurfaces) {
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
if (!surfacePaths.fetch) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
const assetsDirectory = config.assets?.directory;
|
|
164
|
+
if (assetsDirectory) {
|
|
165
|
+
const generatedAssetsWorkerPath = resolve2(cwd, assetsDirectory, "_worker.js");
|
|
166
|
+
if (surfacePaths.fetch === generatedAssetsWorkerPath) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return Boolean(surfacePaths.fetch);
|
|
171
|
+
}
|
|
172
|
+
function getComposedWorkerEntrypointSource(surfaceImportPaths, configuredLocalSendEmailBindings = {}, durableObjectExports = [], routeImports = [], options = {}) {
|
|
108
173
|
const importLines = [`import { createEmailEvent, createFetchEvent, createQueueEvent, createRouteResolve, createScheduledEvent, invokeFetchModule, matchFetchRoute, runWithEventContext, setLocalSendEmailBindings } from 'devflare/runtime'`];
|
|
109
174
|
const moduleFallbackLines = [];
|
|
175
|
+
const durableObjectExportLines = durableObjectExports.map(({ classNames, importPath }) => `export { ${classNames.join(", ")} } from '${importPath}'`);
|
|
110
176
|
const localSendEmailBindings = JSON.stringify(configuredLocalSendEmailBindings);
|
|
111
177
|
const routeManifestEntries = routeImports.map(({ identifier, filePath, routePath, segmentsJson }) => {
|
|
112
178
|
return ` { filePath: ${JSON.stringify(filePath)}, routePath: ${JSON.stringify(routePath)}, segments: ${segmentsJson}, module: ${identifier} }`;
|
|
@@ -200,6 +266,8 @@ ${importLines.join(`
|
|
|
200
266
|
`)}
|
|
201
267
|
${moduleFallbackLines.join(`
|
|
202
268
|
`)}
|
|
269
|
+
${durableObjectExportLines.join(`
|
|
270
|
+
`)}
|
|
203
271
|
|
|
204
272
|
setLocalSendEmailBindings(${localSendEmailBindings})
|
|
205
273
|
|
|
@@ -306,12 +374,12 @@ async function prepareComposedWorkerEntrypoint(cwd, config, environment, options
|
|
|
306
374
|
}
|
|
307
375
|
const surfacePaths = await resolveWorkerSurfacePaths(cwd, resolvedConfig);
|
|
308
376
|
const routeDiscovery = await discoverRoutes(cwd, resolvedConfig);
|
|
309
|
-
if (!needsComposedWorkerEntrypoint(surfacePaths, routeDiscovery)) {
|
|
377
|
+
if (!needsComposedWorkerEntrypoint(cwd, surfacePaths, resolvedConfig, routeDiscovery)) {
|
|
310
378
|
return null;
|
|
311
379
|
}
|
|
312
380
|
const fs = await import("node:fs/promises");
|
|
313
|
-
const entryDir =
|
|
314
|
-
const entryPath =
|
|
381
|
+
const entryDir = resolve2(cwd, ".devflare", "worker-entrypoints");
|
|
382
|
+
const entryPath = resolve2(entryDir, "main.ts");
|
|
315
383
|
await fs.mkdir(entryDir, { recursive: true });
|
|
316
384
|
const surfaceImportPaths = {
|
|
317
385
|
fetch: surfacePaths.fetch ? toImportSpecifier(entryPath, surfacePaths.fetch) : null,
|
|
@@ -319,8 +387,9 @@ async function prepareComposedWorkerEntrypoint(cwd, config, environment, options
|
|
|
319
387
|
scheduled: surfacePaths.scheduled ? toImportSpecifier(entryPath, surfacePaths.scheduled) : null,
|
|
320
388
|
email: surfacePaths.email ? toImportSpecifier(entryPath, surfacePaths.email) : null
|
|
321
389
|
};
|
|
390
|
+
const durableObjectExports = await createGeneratedDurableObjectExports(entryPath, cwd, resolvedConfig);
|
|
322
391
|
const routeImports = createGeneratedRouteModuleImports(entryPath, routeDiscovery);
|
|
323
|
-
await fs.writeFile(entryPath, getComposedWorkerEntrypointSource(surfaceImportPaths, resolvedConfig.bindings?.sendEmail ?? {}, routeImports, options));
|
|
392
|
+
await fs.writeFile(entryPath, getComposedWorkerEntrypointSource(surfaceImportPaths, resolvedConfig.bindings?.sendEmail ?? {}, durableObjectExports, routeImports, options));
|
|
324
393
|
return ".devflare/worker-entrypoints/main.ts";
|
|
325
394
|
}
|
|
326
395
|
|
|
@@ -395,13 +464,6 @@ function createAuxiliaryWorkerConfig(wranglerConfig, discovery) {
|
|
|
395
464
|
}
|
|
396
465
|
};
|
|
397
466
|
}
|
|
398
|
-
function rebaseMainPathForConfigDir(projectRoot, configDir, mainEntry) {
|
|
399
|
-
if (!mainEntry) {
|
|
400
|
-
return mainEntry;
|
|
401
|
-
}
|
|
402
|
-
const absoluteMainPath = isAbsolute(mainEntry) ? mainEntry : resolve2(projectRoot, mainEntry);
|
|
403
|
-
return relative2(configDir, absoluteMainPath).replace(/\\/g, "/");
|
|
404
|
-
}
|
|
405
467
|
function logDiscoveredDurableObjects(projectRoot, discovery) {
|
|
406
468
|
if (!discovery || discovery.files.size === 0) {
|
|
407
469
|
return;
|
|
@@ -413,9 +475,12 @@ function logDiscoveredDurableObjects(projectRoot, discovery) {
|
|
|
413
475
|
}
|
|
414
476
|
async function buildPluginContextState(projectRoot, devflareConfig, environment, mode = "serve") {
|
|
415
477
|
const effectiveConfig = mode === "build" ? await resolveConfigResources(devflareConfig, { environment }) : resolveConfigForLocalRuntime(devflareConfig, environment);
|
|
416
|
-
const
|
|
417
|
-
const
|
|
418
|
-
const
|
|
478
|
+
const compiledWranglerConfig = compileConfig(effectiveConfig);
|
|
479
|
+
const wranglerConfig = mode === "build" ? isolateViteBuildOutputPaths(projectRoot, compiledWranglerConfig) : compiledWranglerConfig;
|
|
480
|
+
const cloudflareConfig = {
|
|
481
|
+
...mode === "build" ? isolateViteBuildOutputPaths(projectRoot, compileToProgrammaticConfig(effectiveConfig)) : compileToProgrammaticConfig(effectiveConfig)
|
|
482
|
+
};
|
|
483
|
+
const composedMainEntry = mode === "build" ? null : await prepareComposedWorkerEntrypoint(projectRoot, effectiveConfig, environment);
|
|
419
484
|
if (composedMainEntry) {
|
|
420
485
|
wranglerConfig.main = composedMainEntry;
|
|
421
486
|
cloudflareConfig.main = composedMainEntry;
|
|
@@ -451,10 +516,10 @@ async function buildPluginContextState(projectRoot, devflareConfig, environment,
|
|
|
451
516
|
};
|
|
452
517
|
}
|
|
453
518
|
async function ensureGeneratedConfigDir(projectRoot) {
|
|
454
|
-
const configDir =
|
|
519
|
+
const configDir = resolve3(projectRoot, CONFIG_DIR);
|
|
455
520
|
const fs = await import("node:fs/promises");
|
|
456
521
|
await fs.mkdir(configDir, { recursive: true });
|
|
457
|
-
const gitignorePath =
|
|
522
|
+
const gitignorePath = resolve3(configDir, ".gitignore");
|
|
458
523
|
try {
|
|
459
524
|
await fs.access(gitignorePath);
|
|
460
525
|
} catch {
|
|
@@ -465,17 +530,12 @@ async function ensureGeneratedConfigDir(projectRoot) {
|
|
|
465
530
|
}
|
|
466
531
|
async function writeGeneratedWranglerConfig(projectRoot, wranglerConfig) {
|
|
467
532
|
const configDir = await ensureGeneratedConfigDir(projectRoot);
|
|
468
|
-
const wranglerFileConfig =
|
|
469
|
-
...wranglerConfig,
|
|
470
|
-
...wranglerConfig.main && {
|
|
471
|
-
main: rebaseMainPathForConfigDir(projectRoot, configDir, wranglerConfig.main)
|
|
472
|
-
}
|
|
473
|
-
};
|
|
533
|
+
const wranglerFileConfig = rebaseWranglerConfigPaths(projectRoot, configDir, wranglerConfig);
|
|
474
534
|
await writeWranglerConfig(configDir, wranglerFileConfig, "wrangler.jsonc");
|
|
475
535
|
}
|
|
476
536
|
async function resolvePluginConfigPath(projectRoot, configPath) {
|
|
477
537
|
if (configPath) {
|
|
478
|
-
return isAbsolute(configPath) ? configPath :
|
|
538
|
+
return isAbsolute(configPath) ? configPath : resolve3(projectRoot, configPath);
|
|
479
539
|
}
|
|
480
540
|
return await resolveConfigPath(projectRoot) ?? null;
|
|
481
541
|
}
|
|
@@ -598,7 +658,7 @@ export default { fetch: () => new Response("No DOs") }`;
|
|
|
598
658
|
configureServer(server) {
|
|
599
659
|
if (!watchConfig)
|
|
600
660
|
return;
|
|
601
|
-
const fullConfigPath = resolvedPluginConfigPath ??
|
|
661
|
+
const fullConfigPath = resolvedPluginConfigPath ?? resolve3(projectRoot, configPath || "devflare.config.ts");
|
|
602
662
|
server.watcher.add(fullConfigPath);
|
|
603
663
|
server.watcher.on("change", async (changedPath) => {
|
|
604
664
|
if (changedPath === fullConfigPath) {
|
|
@@ -704,7 +764,6 @@ async function getDevflareConfigs(options = {}) {
|
|
|
704
764
|
return { cloudflareConfig, auxiliaryWorkers };
|
|
705
765
|
}
|
|
706
766
|
// src/vite/config-file.ts
|
|
707
|
-
import { loadConfigFromFile, mergeConfig } from "vite";
|
|
708
767
|
var CONFIG_DIR2 = ".devflare";
|
|
709
768
|
var GENERATED_VITE_CONFIG_FILENAME = "vite.config.mjs";
|
|
710
769
|
function hasInlineViteConfig(viteConfig) {
|
|
@@ -720,30 +779,34 @@ function resolveEffectiveViteProject(detection, config, environment) {
|
|
|
720
779
|
wantsViteIntegration: detection.wantsViteIntegration || hasDevflareConfig
|
|
721
780
|
};
|
|
722
781
|
}
|
|
723
|
-
function
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
return
|
|
782
|
+
function isPromiseLike(value) {
|
|
783
|
+
return (typeof value === "object" || typeof value === "function") && value !== null && typeof value.then === "function";
|
|
784
|
+
}
|
|
785
|
+
function normalizePluginOptions(pluginOption) {
|
|
786
|
+
if (typeof pluginOption === "undefined") {
|
|
787
|
+
return [];
|
|
729
788
|
}
|
|
730
|
-
|
|
731
|
-
|
|
789
|
+
return Array.isArray(pluginOption) ? pluginOption : [pluginOption];
|
|
790
|
+
}
|
|
791
|
+
function removePluginByName(pluginOption, pluginName) {
|
|
792
|
+
if (Array.isArray(pluginOption)) {
|
|
793
|
+
const filteredPlugins = pluginOption.map((nestedPlugin) => removePluginByName(nestedPlugin, pluginName)).filter((nestedPlugin) => typeof nestedPlugin !== "undefined");
|
|
794
|
+
return filteredPlugins.length > 0 ? filteredPlugins : undefined;
|
|
732
795
|
}
|
|
733
|
-
if (typeof pluginOption
|
|
734
|
-
return
|
|
796
|
+
if (!pluginOption || typeof pluginOption === "boolean" || isPromiseLike(pluginOption)) {
|
|
797
|
+
return pluginOption;
|
|
735
798
|
}
|
|
736
|
-
|
|
737
|
-
return plugins;
|
|
799
|
+
return pluginOption.name === pluginName ? undefined : pluginOption;
|
|
738
800
|
}
|
|
739
801
|
function withInjectedDevflarePlugin(config, pluginOptions) {
|
|
740
|
-
const existingPlugins =
|
|
802
|
+
const existingPlugins = normalizePluginOptions(config.plugins).map((pluginOption) => removePluginByName(pluginOption, "devflare")).filter((pluginOption) => typeof pluginOption !== "undefined");
|
|
741
803
|
return {
|
|
742
804
|
...config,
|
|
743
805
|
plugins: [devflarePlugin(pluginOptions), ...existingPlugins]
|
|
744
806
|
};
|
|
745
807
|
}
|
|
746
808
|
async function resolveViteUserConfig(configEnv, options = {}) {
|
|
809
|
+
const { loadConfigFromFile, mergeConfig } = await import("vite");
|
|
747
810
|
const cwd = options.cwd ?? process.cwd();
|
|
748
811
|
const devflareConfig = await loadConfig({
|
|
749
812
|
cwd,
|
|
@@ -765,10 +828,10 @@ async function resolveViteUserConfig(configEnv, options = {}) {
|
|
|
765
828
|
}
|
|
766
829
|
async function ensureGeneratedConfigDir2(cwd) {
|
|
767
830
|
const fs = await import("node:fs/promises");
|
|
768
|
-
const { resolve:
|
|
769
|
-
const configDir =
|
|
831
|
+
const { resolve: resolve4 } = await import("pathe");
|
|
832
|
+
const configDir = resolve4(cwd, CONFIG_DIR2);
|
|
770
833
|
await fs.mkdir(configDir, { recursive: true });
|
|
771
|
-
const gitignorePath =
|
|
834
|
+
const gitignorePath = resolve4(configDir, ".gitignore");
|
|
772
835
|
try {
|
|
773
836
|
await fs.access(gitignorePath);
|
|
774
837
|
} catch {
|
|
@@ -777,13 +840,46 @@ async function ensureGeneratedConfigDir2(cwd) {
|
|
|
777
840
|
}
|
|
778
841
|
return configDir;
|
|
779
842
|
}
|
|
843
|
+
async function resolveDevflarePackageRoot(currentFilePath) {
|
|
844
|
+
const fs = await import("node:fs/promises");
|
|
845
|
+
const { dirname: dirname2 } = await import("node:path");
|
|
846
|
+
const { resolve: resolve4 } = await import("pathe");
|
|
847
|
+
let currentDir = dirname2(currentFilePath);
|
|
848
|
+
while (true) {
|
|
849
|
+
const packageJsonPath = resolve4(currentDir, "package.json");
|
|
850
|
+
try {
|
|
851
|
+
const packageJson = JSON.parse(await fs.readFile(packageJsonPath, "utf-8"));
|
|
852
|
+
if (packageJson.name === "devflare") {
|
|
853
|
+
return currentDir;
|
|
854
|
+
}
|
|
855
|
+
} catch {}
|
|
856
|
+
const parentDir = dirname2(currentDir);
|
|
857
|
+
if (parentDir === currentDir) {
|
|
858
|
+
break;
|
|
859
|
+
}
|
|
860
|
+
currentDir = parentDir;
|
|
861
|
+
}
|
|
862
|
+
throw new Error("Could not resolve the devflare package root for generated Vite config imports.");
|
|
863
|
+
}
|
|
864
|
+
async function resolveGeneratedViteImportPath(configDir) {
|
|
865
|
+
const { extname, sep } = await import("node:path");
|
|
866
|
+
const { fileURLToPath } = await import("node:url");
|
|
867
|
+
const { relative: relative3, resolve: resolve4 } = await import("pathe");
|
|
868
|
+
const currentFilePath = fileURLToPath(import.meta.url);
|
|
869
|
+
const currentExtension = extname(currentFilePath);
|
|
870
|
+
const packageRoot = await resolveDevflarePackageRoot(currentFilePath);
|
|
871
|
+
const viteEntryPath = currentFilePath.includes(`${sep}dist${sep}`) ? resolve4(packageRoot, "dist/src/vite/index.js") : resolve4(packageRoot, `src/vite/index${currentExtension}`);
|
|
872
|
+
const relativeImportPath = relative3(configDir, viteEntryPath);
|
|
873
|
+
return relativeImportPath.startsWith(".") ? relativeImportPath : `./${relativeImportPath}`;
|
|
874
|
+
}
|
|
780
875
|
async function writeGeneratedViteConfig(options) {
|
|
781
876
|
const fs = await import("node:fs/promises");
|
|
782
|
-
const { resolve:
|
|
877
|
+
const { resolve: resolve4 } = await import("pathe");
|
|
783
878
|
const configDir = await ensureGeneratedConfigDir2(options.cwd);
|
|
784
|
-
const generatedConfigPath =
|
|
879
|
+
const generatedConfigPath = resolve4(configDir, GENERATED_VITE_CONFIG_FILENAME);
|
|
880
|
+
const viteImportPath = await resolveGeneratedViteImportPath(configDir);
|
|
785
881
|
const content = `import { defineConfig } from 'vite'
|
|
786
|
-
import { resolveViteUserConfig } from
|
|
882
|
+
import { resolveViteUserConfig } from ${JSON.stringify(viteImportPath)}
|
|
787
883
|
|
|
788
884
|
export default defineConfig(async (env) => {
|
|
789
885
|
return await resolveViteUserConfig(env, {
|
|
@@ -798,4 +894,4 @@ export default defineConfig(async (env) => {
|
|
|
798
894
|
await fs.writeFile(generatedConfigPath, content, "utf-8");
|
|
799
895
|
return generatedConfigPath;
|
|
800
896
|
}
|
|
801
|
-
export { prepareComposedWorkerEntrypoint, getPluginContext, devflarePlugin, getCloudflareConfig, getDevflareConfigs, hasInlineViteConfig, resolveEffectiveViteProject, resolveViteUserConfig, writeGeneratedViteConfig };
|
|
897
|
+
export { DEFAULT_FETCH_ENTRY_FILES, DEFAULT_QUEUE_ENTRY_FILES, DEFAULT_SCHEDULED_ENTRY_FILES, DEFAULT_EMAIL_ENTRY_FILES, resolveWorkerSurfacePaths, hasWorkerSurfacePaths, prepareComposedWorkerEntrypoint, getPluginContext, devflarePlugin, getCloudflareConfig, getDevflareConfigs, hasInlineViteConfig, resolveEffectiveViteProject, resolveViteUserConfig, writeGeneratedViteConfig };
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
apiPost,
|
|
2
|
+
DEVFLARE_KV_NAMESPACE_TITLE,
|
|
4
3
|
getEffectiveAccountId,
|
|
5
|
-
|
|
4
|
+
getOrCreateNamedKVNamespace,
|
|
5
|
+
getPrimaryAccount
|
|
6
|
+
} from "./index-xk9djfjp.js";
|
|
7
|
+
import {
|
|
6
8
|
isAuthenticated,
|
|
7
9
|
kvGet,
|
|
8
10
|
kvPut
|
|
9
|
-
} from "./index-
|
|
11
|
+
} from "./index-0w826dsr.js";
|
|
10
12
|
|
|
11
13
|
// src/cloudflare/usage.ts
|
|
12
|
-
var DEVFLARE_KV_NAMESPACE_TITLE = "devflare-usage";
|
|
13
14
|
var USAGE_KEY_PREFIX = "usage:";
|
|
14
15
|
var LIMITS_KEY = "limits";
|
|
15
16
|
var DEFAULT_LIMITS = {
|
|
@@ -19,13 +20,7 @@ var DEFAULT_LIMITS = {
|
|
|
19
20
|
enabled: true
|
|
20
21
|
};
|
|
21
22
|
async function getOrCreateUsageNamespace(accountId) {
|
|
22
|
-
|
|
23
|
-
const existing = namespaces.find((ns) => ns.title === DEVFLARE_KV_NAMESPACE_TITLE);
|
|
24
|
-
if (existing) {
|
|
25
|
-
return existing.id;
|
|
26
|
-
}
|
|
27
|
-
const created = await apiPost(`/accounts/${accountId}/storage/kv/namespaces`, { title: DEVFLARE_KV_NAMESPACE_TITLE });
|
|
28
|
-
return created.id;
|
|
23
|
+
return getOrCreateNamedKVNamespace(accountId, DEVFLARE_KV_NAMESPACE_TITLE);
|
|
29
24
|
}
|
|
30
25
|
function getTodayDate() {
|
|
31
26
|
return new Date().toISOString().split("T")[0];
|