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
@@ -0,0 +1,12 @@
1
+ export interface MiniflareCompatibilityLogger {
2
+ info(message: string): void;
3
+ }
4
+ interface MiniflareLogLike {
5
+ warn(message: string): void;
6
+ info(message: string): void;
7
+ }
8
+ type MiniflareLogConstructor = new (level?: number) => MiniflareLogLike;
9
+ export declare function formatCompatibilityDateFallbackNotice(message: string): string | null;
10
+ export declare function createCompatibilityAwareMiniflareLog<TBase extends MiniflareLogConstructor>(BaseLog: TBase, level: number, logger?: MiniflareCompatibilityLogger): InstanceType<TBase>;
11
+ export {};
12
+ //# sourceMappingURL=miniflare-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"miniflare-log.d.ts","sourceRoot":"","sources":["../../src/dev-server/miniflare-log.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,4BAA4B;IAC5C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED,UAAU,gBAAgB;IACzB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED,KAAK,uBAAuB,GAAG,KAAK,KAAK,CAAC,EAAE,MAAM,KAAK,gBAAgB,CAAA;AASvE,wBAAgB,qCAAqC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUpF;AAED,wBAAgB,oCAAoC,CAAC,KAAK,SAAS,uBAAuB,EACzF,OAAO,EAAE,KAAK,EACd,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,4BAA4B,GACnC,YAAY,CAAC,KAAK,CAAC,CAsBrB"}
@@ -0,0 +1,8 @@
1
+ import type { Readable } from 'node:stream';
2
+ export interface RuntimeStdioLogger {
3
+ log?(message: string): void;
4
+ info?(message: string): void;
5
+ error?(message: string): void;
6
+ }
7
+ export declare function createRuntimeStdioForwarder(logger?: RuntimeStdioLogger): (stdout: Readable, stderr: Readable) => void;
8
+ //# sourceMappingURL=runtime-stdio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-stdio.d.ts","sourceRoot":"","sources":["../../src/dev-server/runtime-stdio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,MAAM,WAAW,kBAAkB;IAClC,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAyBD,wBAAgB,2BAA2B,CAAC,MAAM,CAAC,EAAE,kBAAkB,gDAUtE"}
@@ -9,6 +9,8 @@ export interface DevServerOptions {
9
9
  vitePort?: number;
10
10
  /** Miniflare port for gateway (default: 8787) */
11
11
  miniflarePort?: number;
12
+ /** Whether to start Vite for this package */
13
+ enableVite?: boolean;
12
14
  /** Persist storage data */
13
15
  persist?: boolean;
14
16
  /** Logger instance */
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dev-server/server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,WAAW,CAAA;AAa3D,MAAM,WAAW,gBAAgB;IAChC,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,sBAAsB;IACtB,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,OAAO,CAAA;CACf;AAED,MAAM,WAAW,SAAS;IACzB,2BAA2B;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,0BAA0B;IAC1B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,yCAAyC;IACzC,YAAY,IAAI,aAAa,GAAG,IAAI,CAAA;CACpC;AA2kBD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAmepE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dev-server/server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,WAAW,CAAA;AAmB3D,MAAM,WAAW,gBAAgB;IAChC,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,sBAAsB;IACtB,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,OAAO,CAAA;CACf;AAED,MAAM,WAAW,SAAS;IACzB,2BAA2B;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,0BAA0B;IAC1B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,yCAAyC;IACzC,YAAY,IAAI,aAAa,GAAG,IAAI,CAAA;CACpC;AAmtBD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CA64BpE"}
@@ -0,0 +1,37 @@
1
+ export declare const VITE_CONFIG_FILES: readonly ["vite.config.ts", "vite.config.js", "vite.config.mts", "vite.config.mjs", "vite.config.cts", "vite.config.cjs"];
2
+ export interface ViteProjectFileSystem {
3
+ access(path: string): Promise<void>;
4
+ readFile(path: string, encoding: BufferEncoding): Promise<string>;
5
+ }
6
+ export interface ViteProjectDetection {
7
+ viteConfigPath: string | null;
8
+ hasLocalViteDependency: boolean;
9
+ hasLocalCloudflareVitePluginDependency: boolean;
10
+ shouldStartVite: boolean;
11
+ wantsViteIntegration: boolean;
12
+ }
13
+ export interface SpawnedLikeProcess {
14
+ pid?: number;
15
+ stdout: NodeJS.ReadableStream | null;
16
+ stderr: NodeJS.ReadableStream | null;
17
+ readonly killed: boolean;
18
+ kill(signal?: NodeJS.Signals): boolean;
19
+ on(event: 'exit', handler: (code: number | null, signal: NodeJS.Signals | null) => void): SpawnedLikeProcess;
20
+ on(event: 'error', handler: (error: Error) => void): SpawnedLikeProcess;
21
+ }
22
+ export interface WaitForViteReadyOptions {
23
+ timeoutMs?: number;
24
+ onStdout?: (chunk: string | Buffer) => void;
25
+ onStderr?: (chunk: string | Buffer) => void;
26
+ }
27
+ export interface StopProcessTreeOptions {
28
+ platform?: NodeJS.Platform;
29
+ timeoutMs?: number;
30
+ runCommand?: (command: string, args: string[]) => Promise<void>;
31
+ }
32
+ export declare function detectViteProject(cwd: string, fs?: ViteProjectFileSystem): Promise<ViteProjectDetection>;
33
+ export declare function stripAnsi(value: string): string;
34
+ export declare function extractViteReadyUrl(output: string): string | null;
35
+ export declare function waitForViteReady(process: SpawnedLikeProcess, options?: WaitForViteReadyOptions): Promise<string | null>;
36
+ export declare function stopSpawnedProcessTree(process: Pick<SpawnedLikeProcess, 'pid' | 'kill' | 'killed' | 'on'>, options?: StopProcessTreeOptions): Promise<void>;
37
+ //# sourceMappingURL=vite-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-utils.d.ts","sourceRoot":"","sources":["../../src/dev-server/vite-utils.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,iBAAiB,2HAOpB,CAAA;AAEV,MAAM,WAAW,qBAAqB;IACrC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACjE;AAED,MAAM,WAAW,oBAAoB;IACpC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,sBAAsB,EAAE,OAAO,CAAA;IAC/B,sCAAsC,EAAE,OAAO,CAAA;IAC/C,eAAe,EAAE,OAAO,CAAA;IACxB,oBAAoB,EAAE,OAAO,CAAA;CAC7B;AAED,MAAM,WAAW,kBAAkB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAA;IACpC,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,CAAA;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAA;IACtC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,KAAK,IAAI,GAAG,kBAAkB,CAAA;IAC5G,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,kBAAkB,CAAA;CACvE;AAED,MAAM,WAAW,uBAAuB;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAA;IAC3C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAA;CAC3C;AAED,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/D;AAwBD,wBAAsB,iBAAiB,CACtC,GAAG,EAAE,MAAM,EACX,EAAE,CAAC,EAAE,qBAAqB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAoC/B;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoBjE;AAED,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,kBAAkB,EAC3B,OAAO,GAAE,uBAA4B,GACnC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuDxB;AA2CD,wBAAsB,sBAAsB,CAC3C,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,EACnE,OAAO,GAAE,sBAA2B,GAClC,OAAO,CAAC,IAAI,CAAC,CAwCf"}
@@ -1,29 +1,41 @@
1
1
  import {
2
- loadConfig,
3
- resolveConfigPath
4
- } from "./index-hcex3rgh.js";
2
+ detectViteProject
3
+ } from "./index-y1d8za14.js";
4
+ import {
5
+ formatSupportedConfigFilenames,
6
+ resolveConfigCandidatePath
7
+ } from "./index-pwgyy2q9.js";
5
8
  import {
6
9
  getDependencies
7
10
  } from "./index-1xpj0m4r.js";
11
+ import {
12
+ loadConfig
13
+ } from "./index-1phx14av.js";
8
14
  import"./index-37x76zdn.js";
9
15
 
10
16
  // src/cli/commands/doctor.ts
11
- import { resolve } from "pathe";
17
+ import { basename, dirname, relative, resolve } from "pathe";
12
18
  async function runDoctorCommand(parsed, logger, options) {
13
19
  const cwd = options.cwd || process.cwd();
20
+ const requestedConfigOption = parsed.options.config;
21
+ const requestedConfigPath = requestedConfigOption ? resolve(cwd, requestedConfigOption) : cwd;
14
22
  const checks = [];
15
23
  const { fs } = await getDependencies();
24
+ const viteProject = await detectViteProject(cwd, fs);
16
25
  logger.info(`Running diagnostics...
17
26
  `);
18
- try {
19
- const configPath = await resolveConfigPath(cwd);
27
+ const configPath = await resolveConfigCandidatePath(requestedConfigPath);
28
+ if (configPath) {
20
29
  checks.push({
21
30
  name: "Config File",
22
31
  status: "pass",
23
32
  message: `Found: ${configPath}`
24
33
  });
25
34
  try {
26
- const config = await loadConfig({ cwd });
35
+ const config = requestedConfigOption ? await loadConfig({
36
+ cwd: dirname(configPath),
37
+ configFile: basename(configPath)
38
+ }) : await loadConfig({ cwd });
27
39
  checks.push({
28
40
  name: "Config Valid",
29
41
  status: "pass",
@@ -36,11 +48,11 @@ async function runDoctorCommand(parsed, logger, options) {
36
48
  message: error instanceof Error ? error.message : "Unknown error"
37
49
  });
38
50
  }
39
- } catch {
51
+ } else {
40
52
  checks.push({
41
53
  name: "Config File",
42
54
  status: "fail",
43
- message: "devflare.config.ts not found. Run `devflare init` to create one."
55
+ message: `${formatSupportedConfigFilenames()} not found. Run \`devflare init\` to create one.`
44
56
  });
45
57
  }
46
58
  const packageJsonPath = resolve(cwd, "package.json");
@@ -67,63 +79,63 @@ async function runDoctorCommand(parsed, logger, options) {
67
79
  message: "devflare not in dependencies"
68
80
  });
69
81
  }
70
- if (deps.vite) {
82
+ } catch {
83
+ checks.push({
84
+ name: "package.json",
85
+ status: "fail",
86
+ message: "package.json not found"
87
+ });
88
+ }
89
+ if (viteProject.wantsViteIntegration) {
90
+ checks.push({
91
+ name: "Vite Integration",
92
+ status: "pass",
93
+ message: "Enabled for this package"
94
+ });
95
+ if (viteProject.hasLocalViteDependency) {
71
96
  checks.push({
72
97
  name: "vite dep",
73
98
  status: "pass",
74
- message: `Version: ${deps.vite}`
99
+ message: "Found in package.json"
75
100
  });
76
101
  } else {
77
102
  checks.push({
78
103
  name: "vite dep",
79
- status: "fail",
80
- message: "vite required but not found"
104
+ status: "warn",
105
+ message: "Not declared in this package.json (workspace-hoisted installs may still work)"
81
106
  });
82
107
  }
83
- if (deps["@cloudflare/vite-plugin"]) {
108
+ if (viteProject.hasLocalCloudflareVitePluginDependency) {
84
109
  checks.push({
85
110
  name: "@cloudflare/vite-plugin",
86
111
  status: "pass",
87
- message: `Version: ${deps["@cloudflare/vite-plugin"]}`
112
+ message: "Found in package.json"
88
113
  });
89
114
  } else {
90
115
  checks.push({
91
116
  name: "@cloudflare/vite-plugin",
92
- status: "fail",
93
- message: "@cloudflare/vite-plugin required but not found"
117
+ status: "warn",
118
+ message: "Not declared in this package.json"
94
119
  });
95
120
  }
96
- } catch {
97
- checks.push({
98
- name: "package.json",
99
- status: "fail",
100
- message: "package.json not found"
101
- });
102
- }
103
- const viteConfigPaths = [
104
- "vite.config.ts",
105
- "vite.config.js",
106
- "vite.config.mts",
107
- "vite.config.mjs"
108
- ];
109
- let viteConfigFound = false;
110
- for (const configName of viteConfigPaths) {
111
- try {
112
- await fs.access(resolve(cwd, configName));
113
- viteConfigFound = true;
121
+ if (viteProject.viteConfigPath) {
114
122
  checks.push({
115
123
  name: "Vite Config",
116
124
  status: "pass",
117
- message: `Found: ${configName}`
125
+ message: `Found: ${viteProject.viteConfigPath}`
118
126
  });
119
- break;
120
- } catch {}
121
- }
122
- if (!viteConfigFound) {
127
+ } else {
128
+ checks.push({
129
+ name: "Vite Config",
130
+ status: "warn",
131
+ message: "No vite.config found. Create one with @cloudflare/vite-plugin"
132
+ });
133
+ }
134
+ } else {
123
135
  checks.push({
124
- name: "Vite Config",
125
- status: "warn",
126
- message: "No vite.config found. Create one with @cloudflare/vite-plugin"
136
+ name: "Vite Integration",
137
+ status: "pass",
138
+ message: "Not enabled for this package (worker-only mode)"
127
139
  });
128
140
  }
129
141
  try {
@@ -141,18 +153,29 @@ async function runDoctorCommand(parsed, logger, options) {
141
153
  });
142
154
  }
143
155
  try {
144
- await fs.access(resolve(cwd, "wrangler.jsonc"));
156
+ const projectWranglerPath = resolve(cwd, "wrangler.jsonc");
157
+ await fs.access(projectWranglerPath);
145
158
  checks.push({
146
159
  name: "wrangler.jsonc",
147
160
  status: "pass",
148
- message: "Found (generated)"
161
+ message: `Found: ${relative(cwd, projectWranglerPath) || "wrangler.jsonc"}`
149
162
  });
150
163
  } catch {
151
- checks.push({
152
- name: "wrangler.jsonc",
153
- status: "warn",
154
- message: "Not found. Run `devflare dev` or `devflare build` to generate."
155
- });
164
+ try {
165
+ const viteWranglerPath = resolve(cwd, ".devflare", "wrangler.jsonc");
166
+ await fs.access(viteWranglerPath);
167
+ checks.push({
168
+ name: "wrangler.jsonc",
169
+ status: "pass",
170
+ message: `Found: ${relative(cwd, viteWranglerPath)} (Vite-generated)`
171
+ });
172
+ } catch {
173
+ checks.push({
174
+ name: "wrangler.jsonc",
175
+ status: "warn",
176
+ message: "Not found. Run `devflare build` or `devflare deploy` to generate `wrangler.jsonc`, or use `devflare/vite` to populate `.devflare/wrangler.jsonc`."
177
+ });
178
+ }
156
179
  }
157
180
  let hasFailures = false;
158
181
  let hasWarnings = false;
@@ -3,7 +3,7 @@ import {
3
3
  findDurableObjectClassesDetailed,
4
4
  generateWrapper,
5
5
  transformDurableObject
6
- } from "./index-gz1gndna.js";
6
+ } from "./index-9wt9x09k.js";
7
7
  import"./index-37x76zdn.js";
8
8
  export {
9
9
  transformDurableObject,
@@ -0,0 +1,195 @@
1
+ import {
2
+ getPackageVersion
3
+ } from "./index-6h8xbs75.js";
4
+ import {
5
+ __require
6
+ } from "./index-37x76zdn.js";
7
+
8
+ // src/cli/index.ts
9
+ import { createConsola } from "consola";
10
+ var COMMANDS = ["init", "dev", "build", "deploy", "types", "doctor", "account", "ai", "remote", "help", "version"];
11
+ function parseArgs(argv) {
12
+ const args = [];
13
+ const options = {};
14
+ let command = "help";
15
+ let unknownCommand;
16
+ let i = 0;
17
+ while (i < argv.length) {
18
+ const arg = argv[i];
19
+ if (arg === "--help" || arg === "-h") {
20
+ return { command: "help", args: [], options: {} };
21
+ }
22
+ if (arg === "--version" || arg === "-v") {
23
+ return { command: "version", args: [], options: {} };
24
+ }
25
+ if (arg.startsWith("-") && !/^-\d/.test(arg)) {
26
+ const isLongFlag = arg.startsWith("--");
27
+ const key = isLongFlag ? arg.slice(2) : arg.slice(1);
28
+ const nextArg = argv[i + 1];
29
+ if (nextArg && !nextArg.startsWith("-")) {
30
+ options[key] = nextArg;
31
+ i += 2;
32
+ } else {
33
+ options[key] = true;
34
+ i++;
35
+ }
36
+ } else if (!command || command === "help") {
37
+ if (COMMANDS.includes(arg)) {
38
+ command = arg;
39
+ } else {
40
+ command = "help";
41
+ unknownCommand = arg;
42
+ }
43
+ i++;
44
+ } else {
45
+ args.push(arg);
46
+ i++;
47
+ }
48
+ }
49
+ return { command, args, options, unknownCommand };
50
+ }
51
+ function getHelpText() {
52
+ return `
53
+ devflare - Config compiler + CLI orchestrator for Cloudflare Workers
54
+
55
+ Usage:
56
+ devflare <command> [options]
57
+
58
+ Commands:
59
+ init [name] Create a new devflare project
60
+ dev Start the development server
61
+ build Build for production
62
+ deploy Deploy to Cloudflare
63
+ types Generate TypeScript types
64
+ doctor Check project configuration
65
+ account View Cloudflare account info
66
+ ai View AI models and pricing
67
+ remote Manage remote test mode (AI, Vectorize)
68
+ help Show command overview
69
+ version Show the installed devflare version
70
+
71
+ Common Options:
72
+ --config <path> Used by dev, build, deploy, types, and doctor
73
+ --debug Enable debug output for supported commands
74
+ -h, --help Show help
75
+ -v, --version Show version
76
+
77
+ Dev Options:
78
+ --port <port> Preferred Vite dev server port (default: 5173)
79
+ --persist Persist Miniflare storage data
80
+ --verbose Enable verbose logging
81
+ --log Log all output to a timestamped .log-* file and the terminal
82
+ --log-temp Log all output to .log (overwritten) and the terminal
83
+
84
+ Build / Deploy:
85
+ build --env <name> Use config.env[name]
86
+ deploy --env <name> Use config.env[name]
87
+ deploy --dry-run Print the generated Wrangler config without deploying
88
+
89
+ Types / Doctor:
90
+ types --output <path> Write generated types to a custom path
91
+ doctor --config <path> Check a specific devflare config file
92
+
93
+ Account / Remote:
94
+ account --account <id> Use a specific Cloudflare account
95
+ remote status Show current remote-mode status
96
+ remote enable [minutes] Enable remote mode (default: 30 minutes)
97
+ remote disable Disable remote mode
98
+
99
+ Notes:
100
+ • Worker-only mode is the default when the current package has no local vite.config.*
101
+ • Vite is started only when the current package provides a local vite.config.*
102
+ • Higher-level build flows currently synthesize a composed worker entry when worker surfaces are discovered
103
+
104
+ Examples:
105
+ devflare init my-app
106
+ devflare dev # Start worker-only or unified dev server
107
+ devflare dev --port 3000 # Custom Vite port when Vite is enabled
108
+ devflare dev --persist # Persist storage between restarts
109
+ devflare dev --log-temp # Log output to .log file
110
+ devflare build
111
+ devflare deploy --env production
112
+ `.trim();
113
+ }
114
+ async function runCli(argv, options = {}) {
115
+ const logger = createConsola({
116
+ level: options.silent ? -999 : 3,
117
+ formatOptions: {
118
+ date: false
119
+ }
120
+ });
121
+ const parsed = parseArgs(argv);
122
+ if (parsed.unknownCommand) {
123
+ logger.error(`Unknown command: ${parsed.unknownCommand}`);
124
+ logger.info("Run `devflare --help` for available commands");
125
+ return { exitCode: 1 };
126
+ }
127
+ switch (parsed.command) {
128
+ case "help":
129
+ logger.info(getHelpText());
130
+ return { exitCode: 0, output: getHelpText() };
131
+ case "version":
132
+ const version = await getPackageVersion();
133
+ logger.info(`devflare v${version}`);
134
+ return { exitCode: 0, output: version };
135
+ case "init":
136
+ return runInit(parsed, logger, options);
137
+ case "dev":
138
+ return runDev(parsed, logger, options);
139
+ case "build":
140
+ return runBuild(parsed, logger, options);
141
+ case "deploy":
142
+ return runDeploy(parsed, logger, options);
143
+ case "types":
144
+ return runTypes(parsed, logger, options);
145
+ case "doctor":
146
+ return runDoctor(parsed, logger, options);
147
+ case "account":
148
+ return runAccount(parsed, logger, options);
149
+ case "ai":
150
+ return runAI();
151
+ case "remote":
152
+ return runRemote(parsed, logger, options);
153
+ default:
154
+ logger.error(`Unknown command: ${parsed.command}`);
155
+ return { exitCode: 1 };
156
+ }
157
+ }
158
+ async function runInit(parsed, logger, options) {
159
+ const { runInitCommand } = await import("./init-na2atvz2.js");
160
+ return runInitCommand(parsed, logger, options);
161
+ }
162
+ async function runDev(parsed, logger, options) {
163
+ const { runDevCommand } = await import("./dev-rk8p6pse.js");
164
+ return runDevCommand(parsed, logger, options);
165
+ }
166
+ async function runBuild(parsed, logger, options) {
167
+ const { runBuildCommand } = await import("./build-k36xrzvy.js");
168
+ return runBuildCommand(parsed, logger, options);
169
+ }
170
+ async function runDeploy(parsed, logger, options) {
171
+ const { runDeployCommand } = await import("./deploy-dbvfq8vq.js");
172
+ return runDeployCommand(parsed, logger, options);
173
+ }
174
+ async function runTypes(parsed, logger, options) {
175
+ const { runTypesCommand } = await import("./types-x9q7t491.js");
176
+ return runTypesCommand(parsed, logger, options);
177
+ }
178
+ async function runDoctor(parsed, logger, options) {
179
+ const { runDoctorCommand } = await import("./doctor-06y8nxd4.js");
180
+ return runDoctorCommand(parsed, logger, options);
181
+ }
182
+ async function runAccount(parsed, logger, options) {
183
+ const { runAccountCommand } = await import("./account-8psavtg6.js");
184
+ return runAccountCommand(parsed, logger, options);
185
+ }
186
+ async function runAI() {
187
+ const { runAICommand } = await import("./ai-dx4fr9jh.js");
188
+ return runAICommand();
189
+ }
190
+ async function runRemote(parsed, logger, options) {
191
+ const { runRemoteCommand } = await import("./remote-q59qk463.js");
192
+ return runRemoteCommand(parsed, logger, options);
193
+ }
194
+
195
+ export { parseArgs, runCli };