devflare 1.0.0-next.1 → 1.0.0-next.10

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.
Files changed (123) hide show
  1. package/LLM.md +775 -637
  2. package/R2.md +200 -0
  3. package/README.md +285 -514
  4. package/bin/devflare.js +8 -8
  5. package/dist/{account-rvrj687w.js → account-8psavtg6.js} +27 -4
  6. package/dist/bridge/miniflare.d.ts +6 -0
  7. package/dist/bridge/miniflare.d.ts.map +1 -1
  8. package/dist/bridge/proxy.d.ts +5 -6
  9. package/dist/bridge/proxy.d.ts.map +1 -1
  10. package/dist/bridge/server.d.ts.map +1 -1
  11. package/dist/browser.d.ts +50 -0
  12. package/dist/browser.d.ts.map +1 -0
  13. package/dist/{build-mnf6v8gd.js → build-k36xrzvy.js} +26 -7
  14. package/dist/bundler/do-bundler.d.ts +7 -0
  15. package/dist/bundler/do-bundler.d.ts.map +1 -1
  16. package/dist/cli/commands/account.d.ts.map +1 -1
  17. package/dist/cli/commands/build.d.ts.map +1 -1
  18. package/dist/cli/commands/deploy.d.ts.map +1 -1
  19. package/dist/cli/commands/dev.d.ts.map +1 -1
  20. package/dist/cli/commands/doctor.d.ts.map +1 -1
  21. package/dist/cli/commands/init.d.ts.map +1 -1
  22. package/dist/cli/commands/types.d.ts.map +1 -1
  23. package/dist/cli/config-path.d.ts +5 -0
  24. package/dist/cli/config-path.d.ts.map +1 -0
  25. package/dist/cli/index.d.ts.map +1 -1
  26. package/dist/cli/package-metadata.d.ts +16 -0
  27. package/dist/cli/package-metadata.d.ts.map +1 -0
  28. package/dist/config/compiler.d.ts +7 -0
  29. package/dist/config/compiler.d.ts.map +1 -1
  30. package/dist/config/index.d.ts +1 -1
  31. package/dist/config/index.d.ts.map +1 -1
  32. package/dist/config/schema.d.ts +2575 -1221
  33. package/dist/config/schema.d.ts.map +1 -1
  34. package/dist/{deploy-nhceck39.js → deploy-dbvfq8vq.js} +33 -15
  35. package/dist/{dev-qnxet3j9.js → dev-rk8p6pse.js} +900 -234
  36. package/dist/dev-server/miniflare-log.d.ts +12 -0
  37. package/dist/dev-server/miniflare-log.d.ts.map +1 -0
  38. package/dist/dev-server/runtime-stdio.d.ts +8 -0
  39. package/dist/dev-server/runtime-stdio.d.ts.map +1 -0
  40. package/dist/dev-server/server.d.ts +2 -0
  41. package/dist/dev-server/server.d.ts.map +1 -1
  42. package/dist/dev-server/vite-utils.d.ts +37 -0
  43. package/dist/dev-server/vite-utils.d.ts.map +1 -0
  44. package/dist/{doctor-e8fy6fj5.js → doctor-06y8nxd4.js} +73 -50
  45. package/dist/{durable-object-t4kbb0yt.js → durable-object-yt8v1dyn.js} +1 -1
  46. package/dist/index-05fyzwne.js +195 -0
  47. package/dist/index-1p814k7s.js +227 -0
  48. package/dist/{index-hcex3rgh.js → index-1phx14av.js} +84 -7
  49. package/dist/{index-tk6ej9dj.js → index-2q3pmzrx.js} +12 -16
  50. package/dist/{index-pf5s73n9.js → index-59df49vn.js} +11 -281
  51. package/dist/index-5yxg30va.js +304 -0
  52. package/dist/index-62b3gt2g.js +12 -0
  53. package/dist/index-6h8xbs75.js +44 -0
  54. package/dist/{index-67qcae0f.js → index-6v3wjg1r.js} +16 -1
  55. package/dist/index-8gtqgb3q.js +529 -0
  56. package/dist/{index-gz1gndna.js → index-9wt9x09k.js} +42 -62
  57. package/dist/index-fef08w43.js +231 -0
  58. package/dist/{index-ep3445yc.js → index-jht2j546.js} +393 -170
  59. package/dist/index-k7r18na8.js +0 -0
  60. package/dist/{index-m2q41jwa.js → index-n932ytmq.js} +9 -1
  61. package/dist/index-pwgyy2q9.js +39 -0
  62. package/dist/{index-07q6yxyc.js → index-v8vvsn9x.js} +1 -0
  63. package/dist/index-vky23txa.js +70 -0
  64. package/dist/index-vs49yxn4.js +322 -0
  65. package/dist/{index-z14anrqp.js → index-wfbfz02q.js} +14 -15
  66. package/dist/index-ws68xvq2.js +311 -0
  67. package/dist/index-y1d8za14.js +196 -0
  68. package/dist/{init-f9mgmew3.js → init-na2atvz2.js} +42 -55
  69. package/dist/router/types.d.ts +24 -0
  70. package/dist/router/types.d.ts.map +1 -0
  71. package/dist/runtime/context.d.ts +249 -8
  72. package/dist/runtime/context.d.ts.map +1 -1
  73. package/dist/runtime/exports.d.ts +50 -55
  74. package/dist/runtime/exports.d.ts.map +1 -1
  75. package/dist/runtime/index.d.ts +8 -1
  76. package/dist/runtime/index.d.ts.map +1 -1
  77. package/dist/runtime/middleware.d.ts +77 -60
  78. package/dist/runtime/middleware.d.ts.map +1 -1
  79. package/dist/runtime/router.d.ts +7 -0
  80. package/dist/runtime/router.d.ts.map +1 -0
  81. package/dist/runtime/validation.d.ts +1 -1
  82. package/dist/runtime/validation.d.ts.map +1 -1
  83. package/dist/src/browser.js +150 -0
  84. package/dist/src/cli/index.js +10 -0
  85. package/dist/{cloudflare → src/cloudflare}/index.js +3 -3
  86. package/dist/{decorators → src/decorators}/index.js +2 -2
  87. package/dist/src/index.js +132 -0
  88. package/dist/src/runtime/index.js +111 -0
  89. package/dist/{sveltekit → src/sveltekit}/index.js +14 -6
  90. package/dist/{test → src/test}/index.js +22 -13
  91. package/dist/{vite → src/vite}/index.js +128 -59
  92. package/dist/sveltekit/platform.d.ts.map +1 -1
  93. package/dist/test/bridge-context.d.ts +5 -2
  94. package/dist/test/bridge-context.d.ts.map +1 -1
  95. package/dist/test/cf.d.ts +25 -11
  96. package/dist/test/cf.d.ts.map +1 -1
  97. package/dist/test/email.d.ts +16 -7
  98. package/dist/test/email.d.ts.map +1 -1
  99. package/dist/test/queue.d.ts.map +1 -1
  100. package/dist/test/resolve-service-bindings.d.ts.map +1 -1
  101. package/dist/test/scheduled.d.ts.map +1 -1
  102. package/dist/test/simple-context.d.ts +1 -1
  103. package/dist/test/simple-context.d.ts.map +1 -1
  104. package/dist/test/tail.d.ts +2 -1
  105. package/dist/test/tail.d.ts.map +1 -1
  106. package/dist/test/worker.d.ts +6 -0
  107. package/dist/test/worker.d.ts.map +1 -1
  108. package/dist/transform/durable-object.d.ts.map +1 -1
  109. package/dist/transform/worker-entrypoint.d.ts.map +1 -1
  110. package/dist/{types-5nyrz1sz.js → types-x9q7t491.js} +30 -16
  111. package/dist/utils/entrypoint-discovery.d.ts +6 -3
  112. package/dist/utils/entrypoint-discovery.d.ts.map +1 -1
  113. package/dist/utils/send-email.d.ts +15 -0
  114. package/dist/utils/send-email.d.ts.map +1 -0
  115. package/dist/vite/plugin.d.ts.map +1 -1
  116. package/dist/worker-entry/composed-worker.d.ts +13 -0
  117. package/dist/worker-entry/composed-worker.d.ts.map +1 -0
  118. package/dist/worker-entry/routes.d.ts +22 -0
  119. package/dist/worker-entry/routes.d.ts.map +1 -0
  120. package/dist/{worker-entrypoint-m9th0rg0.js → worker-entrypoint-c259fmfs.js} +1 -1
  121. package/package.json +21 -19
  122. package/dist/index.js +0 -298
  123. package/dist/runtime/index.js +0 -111
@@ -1,24 +1,28 @@
1
+ import {
2
+ resolveConfigCandidatePath
3
+ } from "./index-pwgyy2q9.js";
4
+ import {
5
+ getDependencies
6
+ } from "./index-1xpj0m4r.js";
1
7
  import {
2
8
  discoverEntrypointsAsync,
3
9
  resolvePackageSpecifier
4
- } from "./index-tk6ej9dj.js";
10
+ } from "./index-2q3pmzrx.js";
11
+ import {
12
+ findDurableObjectClasses
13
+ } from "./index-9wt9x09k.js";
5
14
  import {
6
15
  DEFAULT_DO_PATTERN,
7
16
  DEFAULT_ENTRYPOINT_PATTERN,
8
17
  findFiles
9
18
  } from "./index-rbht7m9r.js";
10
- import {
11
- findDurableObjectClasses
12
- } from "./index-gz1gndna.js";
13
- import"./index-07q6yxyc.js";
14
- import"./index-67qcae0f.js";
19
+ import"./index-k7r18na8.js";
20
+ import"./index-v8vvsn9x.js";
21
+ import"./index-6v3wjg1r.js";
15
22
  import {
16
23
  loadConfig,
17
24
  normalizeDOBinding
18
- } from "./index-hcex3rgh.js";
19
- import {
20
- getDependencies
21
- } from "./index-1xpj0m4r.js";
25
+ } from "./index-1phx14av.js";
22
26
  import {
23
27
  __require
24
28
  } from "./index-37x76zdn.js";
@@ -98,7 +102,6 @@ async function findInterfaceTypes(searchDirs) {
98
102
  return interfaces;
99
103
  }
100
104
  async function resolveReferencedConfigs(configPath, cwd) {
101
- const fs = await import("node:fs/promises");
102
105
  const referenced = [];
103
106
  const { refs, serviceBindings, doBindings } = await parseConfigForRefs(configPath);
104
107
  if (refs.length === 0) {
@@ -106,12 +109,12 @@ async function resolveReferencedConfigs(configPath, cwd) {
106
109
  }
107
110
  const configDir = dirname(configPath);
108
111
  for (const ref of refs) {
109
- let refConfigPath = resolvePackageSpecifier(ref.importPath, configDir);
110
- if (!refConfigPath.endsWith(".ts") && !refConfigPath.endsWith(".js")) {
111
- refConfigPath += ".ts";
112
+ const refImportPath = resolvePackageSpecifier(ref.importPath, configDir);
113
+ const refConfigPath = await resolveConfigCandidatePath(refImportPath);
114
+ if (!refConfigPath) {
115
+ continue;
112
116
  }
113
117
  try {
114
- await fs.access(refConfigPath);
115
118
  const refDir = dirname(refConfigPath);
116
119
  const entrypoints = await discoverEntrypointsAsync(refDir, DEFAULT_ENTRYPOINT_PATTERN);
117
120
  const refDOs = await discoverDurableObjects(refDir, DEFAULT_DO_PATTERN);
@@ -256,6 +259,11 @@ function generateBindingMembers(config, doClassMap, crossWorkerDOMap, serviceBin
256
259
  lines.push(`${indent}${binding}: AnalyticsEngineDataset`);
257
260
  }
258
261
  }
262
+ if (config.bindings.sendEmail) {
263
+ for (const binding of Object.keys(config.bindings.sendEmail)) {
264
+ lines.push(`${indent}${binding}: SendEmail`);
265
+ }
266
+ }
259
267
  }
260
268
  if (config.vars) {
261
269
  for (const key of Object.keys(config.vars)) {
@@ -316,6 +324,8 @@ function generateBindingTypes(config, discoveredDOs, discoveredEntrypoints, refe
316
324
  usedTypes.add("Fetcher");
317
325
  if (config.bindings.analyticsEngine && Object.keys(config.bindings.analyticsEngine).length > 0)
318
326
  usedTypes.add("AnalyticsEngineDataset");
327
+ if (config.bindings.sendEmail && Object.keys(config.bindings.sendEmail).length > 0)
328
+ usedTypes.add("SendEmail");
319
329
  }
320
330
  const lines = [
321
331
  "// Generated by devflare - DO NOT EDIT",
@@ -370,8 +380,12 @@ async function runTypesCommand(parsed, logger, options) {
370
380
  const outputPath = parsed.options.output || "env.d.ts";
371
381
  logger.info("Generating TypeScript types...");
372
382
  try {
373
- const actualConfigPath = configPath ? resolve(cwd, configPath) : resolve(cwd, "devflare.config.ts");
374
383
  const config = await loadConfig({ cwd, configFile: configPath });
384
+ const requestedConfigPath = configPath ? resolve(cwd, configPath) : cwd;
385
+ const actualConfigPath = await resolveConfigCandidatePath(requestedConfigPath);
386
+ if (!actualConfigPath) {
387
+ throw new Error("Could not resolve the loaded devflare config file path");
388
+ }
375
389
  const doPattern = typeof config.files?.durableObjects === "string" ? config.files.durableObjects : DEFAULT_DO_PATTERN;
376
390
  let discoveredDOs = [];
377
391
  if (config.files?.durableObjects !== false) {
@@ -12,11 +12,14 @@ export interface DiscoveredEntrypoint {
12
12
  */
13
13
  export declare function findEntrypointClasses(code: string): string[];
14
14
  /**
15
- * Discover entrypoint classes from ep.*.ts files in a directory (synchronous)
16
- * @param dir - Directory to scan
15
+ * Discover entrypoint classes from a glob pattern synchronously.
16
+ * Respects `.gitignore` automatically.
17
+ *
18
+ * @param cwd - Working directory for glob resolution
19
+ * @param pattern - Glob pattern for entrypoint files (default: recursive `ep.*.{ts,js}` matching)
17
20
  * @returns Array of discovered entrypoints
18
21
  */
19
- export declare function discoverEntrypointsSync(dir: string): DiscoveredEntrypoint[];
22
+ export declare function discoverEntrypointsSync(cwd: string, pattern?: string): DiscoveredEntrypoint[];
20
23
  /**
21
24
  * Discover entrypoint classes from ep.*.ts files using glob pattern (async).
22
25
  * Respects .gitignore automatically.
@@ -1 +1 @@
1
- {"version":3,"file":"entrypoint-discovery.d.ts","sourceRoot":"","sources":["../../src/utils/entrypoint-discovery.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CAChB;AAYD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAY5D;AAWD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,EAAE,CA0B3E;AAMD;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC7C,GAAG,EAAE,MAAM,EACX,OAAO,SAA6B,GAClC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAoBjC"}
1
+ {"version":3,"file":"entrypoint-discovery.d.ts","sourceRoot":"","sources":["../../src/utils/entrypoint-discovery.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CAChB;AAYD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAY5D;AAMD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,SAA6B,GAClC,oBAAoB,EAAE,CAuBxB;AAMD;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC7C,GAAG,EAAE,MAAM,EACX,OAAO,SAA6B,GAClC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAoBjC"}
@@ -0,0 +1,15 @@
1
+ export interface LocalSendEmailBindingConfig {
2
+ destinationAddress?: string;
3
+ allowedDestinationAddresses?: string[];
4
+ allowedSenderAddresses?: string[];
5
+ }
6
+ export declare function createEmailMessageRaw(raw: unknown): string | ReadableStream<Uint8Array>;
7
+ export declare function normalizeSendEmailMessage(message: unknown): Parameters<SendEmail['send']>[0];
8
+ export declare function wrapSendEmailBinding(binding: SendEmail): SendEmail;
9
+ export declare function createLocalSendEmailBinding(config?: LocalSendEmailBindingConfig, options?: {
10
+ onSend?: (message: Parameters<SendEmail['send']>[0]) => void | Promise<void>;
11
+ }): SendEmail;
12
+ export declare function setLocalSendEmailBindings(bindings: Record<string, LocalSendEmailBindingConfig>): void;
13
+ export declare function clearLocalSendEmailBindings(): void;
14
+ export declare function wrapEnvSendEmailBindings<TEnv>(env: TEnv): TEnv;
15
+ //# sourceMappingURL=send-email.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-email.d.ts","sourceRoot":"","sources":["../../src/utils/send-email.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,2BAA2B;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAA;IACtC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAA;CACjC;AA0HD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAcvF;AAED,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,OAAO,GACd,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAsBlC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,CAmBlE;AAED,wBAAgB,2BAA2B,CAC1C,MAAM,GAAE,2BAAgC,EACxC,OAAO,GAAE;IACR,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACvE,GACJ,SAAS,CA0CX;AAED,wBAAgB,yBAAyB,CACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,GACnD,IAAI,CAMN;AAED,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAiBD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,CAqD9D"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/vite/plugin.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,EAAiC,MAAM,MAAM,CAAA;AAGjE,OAAO,EAIN,KAAK,cAAc,EACnB,MAAM,oBAAoB,CAAA;AAW3B,MAAM,WAAW,qBAAqB;IACrC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACrC;;OAEG;IACH,cAAc,EAAE,cAAc,GAAG,IAAI,CAAA;IAErC;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAEhD;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,qBAAqB,EAAE,qBAAqB,GAAG,IAAI,CAAA;IAEnD;;OAEG;IACH,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAA;CACxC;AAED,MAAM,WAAW,iBAAiB;IACjC,gDAA8C;IAC9C,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAC5B,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAWD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAExD;AA8FD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,MAAM,CAmR1E;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,GAAE;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAQxC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,GAAE;IACjD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,OAAO,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,gBAAgB,EAAE,qBAAqB,EAAE,CAAA;CACzC,CAAC,CAiCD;AAGD,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/vite/plugin.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,EAAiC,MAAM,MAAM,CAAA;AAGjE,OAAO,EAIN,KAAK,cAAc,EACnB,MAAM,oBAAoB,CAAA;AAY3B,MAAM,WAAW,qBAAqB;IACrC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACrC;;OAEG;IACH,cAAc,EAAE,cAAc,GAAG,IAAI,CAAA;IAErC;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAEhD;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,qBAAqB,EAAE,qBAAqB,GAAG,IAAI,CAAA;IAEnD;;OAEG;IACH,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAA;CACxC;AAED,MAAM,WAAW,iBAAiB;IACjC,gDAA8C;IAC9C,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAC5B,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAkBD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAExD;AAwND;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,MAAM,CAuO1E;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,GAAE;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAaxC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,GAAE;IACjD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,OAAO,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,gBAAgB,EAAE,qBAAqB,EAAE,CAAA;CACzC,CAAC,CAsCD;AAGD,eAAe,cAAc,CAAA"}
@@ -0,0 +1,13 @@
1
+ import type { DevflareConfig } from '../config';
2
+ export interface WorkerSurfacePaths {
3
+ fetch: string | null;
4
+ queue: string | null;
5
+ scheduled: string | null;
6
+ email: string | null;
7
+ }
8
+ export interface PrepareComposedWorkerEntrypointOptions {
9
+ devInternalEmail?: boolean;
10
+ }
11
+ export declare function resolveWorkerSurfacePaths(cwd: string, config: DevflareConfig): Promise<WorkerSurfacePaths>;
12
+ export declare function prepareComposedWorkerEntrypoint(cwd: string, config: DevflareConfig, environment?: string, options?: PrepareComposedWorkerEntrypointOptions): Promise<string | null>;
13
+ //# sourceMappingURL=composed-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composed-worker.d.ts","sourceRoot":"","sources":["../../src/worker-entry/composed-worker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AA+B/C,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB;AAUD,MAAM,WAAW,sCAAsC;IACtD,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC1B;AA8CD,wBAAsB,yBAAyB,CAC9C,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,cAAc,GACpB,OAAO,CAAC,kBAAkB,CAAC,CAO7B;AAuPD,wBAAsB,+BAA+B,CACpD,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,cAAc,EACtB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE,sCAA2C,GAClD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwCxB"}
@@ -0,0 +1,22 @@
1
+ import type { DevflareConfig } from '../config';
2
+ import type { RouteSegment } from '../router/types';
3
+ export declare const DEFAULT_ROUTE_DIR = "src/routes";
4
+ export interface DiscoveredRoute {
5
+ readonly absolutePath: string;
6
+ readonly filePath: string;
7
+ readonly routePath: string;
8
+ readonly segments: readonly RouteSegment[];
9
+ }
10
+ export interface RouteDiscoveryResult {
11
+ readonly dir: string;
12
+ readonly absoluteDir: string;
13
+ readonly prefix: string;
14
+ readonly routes: readonly DiscoveredRoute[];
15
+ }
16
+ export declare function getRouteDirectoryCandidate(cwd: string, config: DevflareConfig): {
17
+ dir: string;
18
+ absoluteDir: string;
19
+ prefix: string;
20
+ } | null;
21
+ export declare function discoverRoutes(cwd: string, config: DevflareConfig): Promise<RouteDiscoveryResult | null>;
22
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/worker-entry/routes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAGnD,eAAO,MAAM,iBAAiB,eAAe,CAAA;AAW7C,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAA;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;CAC3C;AAkMD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAY3I;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CA2D9G"}
@@ -3,7 +3,7 @@ import {
3
3
  generateRpcInterface,
4
4
  shouldTransformWorker,
5
5
  transformWorkerEntrypoint
6
- } from "./index-z14anrqp.js";
6
+ } from "./index-wfbfz02q.js";
7
7
  import"./index-37x76zdn.js";
8
8
  export {
9
9
  transformWorkerEntrypoint,
package/package.json CHANGED
@@ -1,45 +1,46 @@
1
1
  {
2
2
  "name": "devflare",
3
- "version": "1.0.0-next.1",
3
+ "version": "1.0.0-next.10",
4
4
  "description": "Devflare is a developer-first toolkit for Cloudflare Workers that sits on top of Miniflare and Wrangler-compatible config",
5
5
  "type": "module",
6
- "main": "./dist/index.js",
6
+ "main": "./dist/src/index.js",
7
7
  "types": "./dist/index.d.ts",
8
8
  "exports": {
9
9
  ".": {
10
10
  "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js",
12
- "default": "./dist/index.js"
11
+ "browser": "./dist/src/browser.js",
12
+ "import": "./dist/src/index.js",
13
+ "default": "./dist/src/index.js"
13
14
  },
14
15
  "./runtime": {
15
16
  "types": "./dist/runtime/index.d.ts",
16
- "import": "./dist/runtime/index.js",
17
- "default": "./dist/runtime/index.js"
17
+ "import": "./dist/src/runtime/index.js",
18
+ "default": "./dist/src/runtime/index.js"
18
19
  },
19
20
  "./test": {
20
21
  "types": "./dist/test/index.d.ts",
21
- "import": "./dist/test/index.js",
22
- "default": "./dist/test/index.js"
22
+ "import": "./dist/src/test/index.js",
23
+ "default": "./dist/src/test/index.js"
23
24
  },
24
25
  "./vite": {
25
26
  "types": "./dist/vite/index.d.ts",
26
- "import": "./dist/vite/index.js",
27
- "default": "./dist/vite/index.js"
27
+ "import": "./dist/src/vite/index.js",
28
+ "default": "./dist/src/vite/index.js"
28
29
  },
29
30
  "./sveltekit": {
30
31
  "types": "./dist/sveltekit/index.d.ts",
31
- "import": "./dist/sveltekit/index.js",
32
- "default": "./dist/sveltekit/index.js"
32
+ "import": "./dist/src/sveltekit/index.js",
33
+ "default": "./dist/src/sveltekit/index.js"
33
34
  },
34
35
  "./cloudflare": {
35
36
  "types": "./dist/cloudflare/index.d.ts",
36
- "import": "./dist/cloudflare/index.js",
37
- "default": "./dist/cloudflare/index.js"
37
+ "import": "./dist/src/cloudflare/index.js",
38
+ "default": "./dist/src/cloudflare/index.js"
38
39
  },
39
40
  "./decorators": {
40
41
  "types": "./dist/decorators/index.d.ts",
41
- "import": "./dist/decorators/index.js",
42
- "default": "./dist/decorators/index.js"
42
+ "import": "./dist/src/decorators/index.js",
43
+ "default": "./dist/src/decorators/index.js"
43
44
  }
44
45
  },
45
46
  "bin": {
@@ -48,11 +49,12 @@
48
49
  "files": [
49
50
  "dist",
50
51
  "bin",
51
- "LLM.md"
52
+ "LLM.md",
53
+ "R2.md"
52
54
  ],
53
55
  "scripts": {
54
56
  "prebuild": "node -e \"require('fs').rmSync('./dist', { recursive: true, force: true })\"",
55
- "build": "bun build ./src/index.ts ./src/runtime/index.ts ./src/test/index.ts ./src/vite/index.ts ./src/sveltekit/index.ts ./src/cloudflare/index.ts ./src/decorators/index.ts --outdir ./dist --splitting --target node --packages=external && tsgo --declaration --emitDeclarationOnly --noEmit false --outDir ./dist",
57
+ "build": "bun build ./src/index.ts ./src/browser.ts ./src/cli/index.ts ./src/runtime/index.ts ./src/test/index.ts ./src/vite/index.ts ./src/sveltekit/index.ts ./src/cloudflare/index.ts ./src/decorators/index.ts --outdir ./dist --splitting --target node --packages=external && tsgo --declaration --emitDeclarationOnly --noEmit false --outDir ./dist",
56
58
  "dev": "bun --watch ./src/cli/index.ts",
57
59
  "test": "bun test",
58
60
  "test:watch": "bun test --watch",
@@ -74,7 +76,7 @@
74
76
  "pathe": "^2.0.2",
75
77
  "picomatch": "^4.0.3",
76
78
  "puppeteer-core": "^24.5.0",
77
- "rolldown": "^1.0.0-beta.59",
79
+ "rolldown": "^1.0.0-rc.12",
78
80
  "ws": "^8.19.0",
79
81
  "zod": "^3.24.1"
80
82
  },
package/dist/index.js DELETED
@@ -1,298 +0,0 @@
1
- import {
2
- createBridgeTestContext,
3
- createMockD1,
4
- createMockEnv,
5
- createMockKV,
6
- createMockQueue,
7
- createMockR2,
8
- createMockTestContext,
9
- createTestContext,
10
- env,
11
- getBridgeTestContext,
12
- stopBridgeTestContext,
13
- testEnv,
14
- withTestContext
15
- } from "./index-ep3445yc.js";
16
- import {
17
- findExportedFunctions,
18
- generateRpcInterface,
19
- shouldTransformWorker,
20
- transformWorkerEntrypoint
21
- } from "./index-z14anrqp.js";
22
- import"./index-tk6ej9dj.js";
23
- import"./index-d8bdkx2h.js";
24
- import"./index-rbht7m9r.js";
25
- import {
26
- findDurableObjectClasses,
27
- findDurableObjectClassesDetailed,
28
- generateWrapper,
29
- transformDurableObject
30
- } from "./index-gz1gndna.js";
31
- import {
32
- server_default
33
- } from "./index-m2q41jwa.js";
34
- import {
35
- BridgeClient,
36
- createEnvProxy,
37
- getClient,
38
- getMiniflare,
39
- initEnv,
40
- setBindingHints,
41
- startMiniflare,
42
- startMiniflareFromConfig,
43
- stopMiniflare
44
- } from "./index-pf5s73n9.js";
45
- import {
46
- defineConfig,
47
- ref,
48
- resolveRef,
49
- serviceBinding
50
- } from "./index-07q6yxyc.js";
51
- import {
52
- compileConfig,
53
- stringifyConfig
54
- } from "./index-67qcae0f.js";
55
- import {
56
- ConfigNotFoundError,
57
- ConfigValidationError,
58
- configSchema,
59
- loadConfig
60
- } from "./index-hcex3rgh.js";
61
- import"./index-tfyxa77h.js";
62
- import {
63
- durableObject,
64
- getDurableObjectOptions
65
- } from "./index-a855bdsx.js";
66
- import {
67
- __require
68
- } from "./index-37x76zdn.js";
69
- // src/workerName.ts
70
- var workerName = (() => {
71
- if (typeof __DEVFLARE_WORKER_NAME__ !== "undefined") {
72
- return __DEVFLARE_WORKER_NAME__;
73
- }
74
- if (typeof process !== "undefined" && process.env?.DEVFLARE_WORKER_NAME) {
75
- return process.env.DEVFLARE_WORKER_NAME;
76
- }
77
- return "unknown";
78
- })();
79
- // src/cli/index.ts
80
- import { createConsola } from "consola";
81
- var COMMANDS = ["init", "dev", "build", "deploy", "types", "doctor", "account", "ai", "remote", "help", "version"];
82
- var VERSION = "0.1.0";
83
- function parseArgs(argv) {
84
- const args = [];
85
- const options = {};
86
- let command = "help";
87
- let unknownCommand;
88
- let i = 0;
89
- while (i < argv.length) {
90
- const arg = argv[i];
91
- if (arg === "--help" || arg === "-h") {
92
- return { command: "help", args: [], options: {} };
93
- }
94
- if (arg === "--version" || arg === "-v") {
95
- return { command: "version", args: [], options: {} };
96
- }
97
- if (arg.startsWith("-") && !/^-\d/.test(arg)) {
98
- const isLongFlag = arg.startsWith("--");
99
- const key = isLongFlag ? arg.slice(2) : arg.slice(1);
100
- const nextArg = argv[i + 1];
101
- if (nextArg && !nextArg.startsWith("-")) {
102
- options[key] = nextArg;
103
- i += 2;
104
- } else {
105
- options[key] = true;
106
- i++;
107
- }
108
- } else if (!command || command === "help") {
109
- if (COMMANDS.includes(arg)) {
110
- command = arg;
111
- } else {
112
- command = "help";
113
- unknownCommand = arg;
114
- }
115
- i++;
116
- } else {
117
- args.push(arg);
118
- i++;
119
- }
120
- }
121
- return { command, args, options, unknownCommand };
122
- }
123
- function getHelpText() {
124
- return `
125
- devflare - Config Compiler + CLI Orchestrator for Cloudflare Workers
126
-
127
- Usage:
128
- devflare <command> [options]
129
-
130
- Commands:
131
- init [name] Create a new devflare project
132
- dev Start unified development server
133
- build Build for production
134
- deploy Deploy to Cloudflare
135
- types Generate TypeScript types
136
- doctor Check project configuration
137
- account View Cloudflare account info
138
- ai View AI models and pricing
139
- remote Manage remote test mode (AI, Vectorize)
140
-
141
- Global Options:
142
- -h, --help Show help
143
- -v, --version Show version
144
- --config <path> Path to config file
145
- --debug Enable debug mode
146
-
147
- Dev Command Options:
148
- --port <port> Vite dev server port (default: 5173)
149
- --persist Persist Miniflare storage data
150
- --verbose Enable verbose logging
151
- --log Log all output to .log-{datetime} file AND terminal
152
- --log-temp Log all output to .log file (overwritten) AND terminal
153
-
154
- Dev Server Features:
155
- • Vite HMR for frontend (instant updates)
156
- • Miniflare for ALL Cloudflare bindings (KV, D1, R2, DOs, Queues, AI)
157
- • Rolldown for fast DO bundling with watch mode
158
- • DO hot reload when files change (no restart needed)
159
- • WebSocket bridge for seamless Node.js ↔ Miniflare communication
160
-
161
- Examples:
162
- devflare init my-app
163
- devflare dev # Start unified dev server
164
- devflare dev --port 3000 # Custom Vite port
165
- devflare dev --persist # Persist storage between restarts
166
- devflare dev --log-temp # Log output to .log file
167
- devflare build
168
- devflare deploy --env production
169
- `.trim();
170
- }
171
- async function runCli(argv, options = {}) {
172
- const logger = createConsola({
173
- level: options.silent ? -999 : 3,
174
- formatOptions: {
175
- date: false
176
- }
177
- });
178
- const parsed = parseArgs(argv);
179
- if (parsed.unknownCommand) {
180
- logger.error(`Unknown command: ${parsed.unknownCommand}`);
181
- logger.info("Run `devflare --help` for available commands");
182
- return { exitCode: 1 };
183
- }
184
- switch (parsed.command) {
185
- case "help":
186
- logger.info(getHelpText());
187
- return { exitCode: 0, output: getHelpText() };
188
- case "version":
189
- logger.info(`devflare v${VERSION}`);
190
- return { exitCode: 0, output: VERSION };
191
- case "init":
192
- return runInit(parsed, logger, options);
193
- case "dev":
194
- return runDev(parsed, logger, options);
195
- case "build":
196
- return runBuild(parsed, logger, options);
197
- case "deploy":
198
- return runDeploy(parsed, logger, options);
199
- case "types":
200
- return runTypes(parsed, logger, options);
201
- case "doctor":
202
- return runDoctor(parsed, logger, options);
203
- case "account":
204
- return runAccount(parsed, logger, options);
205
- case "ai":
206
- return runAI();
207
- case "remote":
208
- return runRemote(parsed, logger, options);
209
- default:
210
- logger.error(`Unknown command: ${parsed.command}`);
211
- return { exitCode: 1 };
212
- }
213
- }
214
- async function runInit(parsed, logger, options) {
215
- const { runInitCommand } = await import("./init-f9mgmew3.js");
216
- return runInitCommand(parsed, logger, options);
217
- }
218
- async function runDev(parsed, logger, options) {
219
- const { runDevCommand } = await import("./dev-qnxet3j9.js");
220
- return runDevCommand(parsed, logger, options);
221
- }
222
- async function runBuild(parsed, logger, options) {
223
- const { runBuildCommand } = await import("./build-mnf6v8gd.js");
224
- return runBuildCommand(parsed, logger, options);
225
- }
226
- async function runDeploy(parsed, logger, options) {
227
- const { runDeployCommand } = await import("./deploy-nhceck39.js");
228
- return runDeployCommand(parsed, logger, options);
229
- }
230
- async function runTypes(parsed, logger, options) {
231
- const { runTypesCommand } = await import("./types-5nyrz1sz.js");
232
- return runTypesCommand(parsed, logger, options);
233
- }
234
- async function runDoctor(parsed, logger, options) {
235
- const { runDoctorCommand } = await import("./doctor-e8fy6fj5.js");
236
- return runDoctorCommand(parsed, logger, options);
237
- }
238
- async function runAccount(parsed, logger, options) {
239
- const { runAccountCommand } = await import("./account-rvrj687w.js");
240
- return runAccountCommand(parsed, logger, options);
241
- }
242
- async function runAI() {
243
- const { runAICommand } = await import("./ai-dx4fr9jh.js");
244
- return runAICommand();
245
- }
246
- async function runRemote(parsed, logger, options) {
247
- const { runRemoteCommand } = await import("./remote-q59qk463.js");
248
- return runRemoteCommand(parsed, logger, options);
249
- }
250
- export {
251
- workerName,
252
- withTestContext,
253
- transformWorkerEntrypoint,
254
- transformDurableObject,
255
- testEnv,
256
- stringifyConfig,
257
- stopMiniflare,
258
- stopBridgeTestContext,
259
- startMiniflareFromConfig,
260
- startMiniflare,
261
- shouldTransformWorker,
262
- setBindingHints,
263
- serviceBinding,
264
- runCli,
265
- resolveRef,
266
- ref,
267
- parseArgs,
268
- loadConfig,
269
- initEnv,
270
- getMiniflare,
271
- getDurableObjectOptions,
272
- getClient,
273
- getBridgeTestContext,
274
- generateWrapper,
275
- generateRpcInterface,
276
- server_default as gateway,
277
- findExportedFunctions,
278
- findDurableObjectClassesDetailed,
279
- findDurableObjectClasses,
280
- env,
281
- durableObject,
282
- defineConfig,
283
- defineConfig as default,
284
- createTestContext,
285
- createMockTestContext,
286
- createMockR2,
287
- createMockQueue,
288
- createMockKV,
289
- createMockEnv,
290
- createMockD1,
291
- createEnvProxy,
292
- createBridgeTestContext,
293
- configSchema,
294
- compileConfig,
295
- ConfigValidationError,
296
- ConfigNotFoundError,
297
- BridgeClient
298
- };