devflare 0.0.0 → 1.0.0-next.1

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 (199) hide show
  1. package/LLM.md +976 -0
  2. package/README.md +737 -1
  3. package/bin/devflare.js +14 -0
  4. package/dist/account-rvrj687w.js +397 -0
  5. package/dist/ai-dx4fr9jh.js +107 -0
  6. package/dist/bridge/client.d.ts +82 -0
  7. package/dist/bridge/client.d.ts.map +1 -0
  8. package/dist/bridge/index.d.ts +7 -0
  9. package/dist/bridge/index.d.ts.map +1 -0
  10. package/dist/bridge/miniflare.d.ts +70 -0
  11. package/dist/bridge/miniflare.d.ts.map +1 -0
  12. package/dist/bridge/protocol.d.ts +146 -0
  13. package/dist/bridge/protocol.d.ts.map +1 -0
  14. package/dist/bridge/proxy.d.ts +49 -0
  15. package/dist/bridge/proxy.d.ts.map +1 -0
  16. package/dist/bridge/serialization.d.ts +83 -0
  17. package/dist/bridge/serialization.d.ts.map +1 -0
  18. package/dist/bridge/server.d.ts +8 -0
  19. package/dist/bridge/server.d.ts.map +1 -0
  20. package/dist/browser-shim/binding-worker.d.ts +7 -0
  21. package/dist/browser-shim/binding-worker.d.ts.map +1 -0
  22. package/dist/browser-shim/handler.d.ts +21 -0
  23. package/dist/browser-shim/handler.d.ts.map +1 -0
  24. package/dist/browser-shim/index.d.ts +3 -0
  25. package/dist/browser-shim/index.d.ts.map +1 -0
  26. package/dist/browser-shim/server.d.ts +25 -0
  27. package/dist/browser-shim/server.d.ts.map +1 -0
  28. package/dist/browser-shim/worker.d.ts +14 -0
  29. package/dist/browser-shim/worker.d.ts.map +1 -0
  30. package/dist/build-mnf6v8gd.js +53 -0
  31. package/dist/bundler/do-bundler.d.ts +42 -0
  32. package/dist/bundler/do-bundler.d.ts.map +1 -0
  33. package/dist/bundler/index.d.ts +2 -0
  34. package/dist/bundler/index.d.ts.map +1 -0
  35. package/dist/cli/bin.d.ts +3 -0
  36. package/dist/cli/bin.d.ts.map +1 -0
  37. package/dist/cli/colors.d.ts +11 -0
  38. package/dist/cli/colors.d.ts.map +1 -0
  39. package/dist/cli/commands/account.d.ts +4 -0
  40. package/dist/cli/commands/account.d.ts.map +1 -0
  41. package/dist/cli/commands/ai.d.ts +3 -0
  42. package/dist/cli/commands/ai.d.ts.map +1 -0
  43. package/dist/cli/commands/build.d.ts +4 -0
  44. package/dist/cli/commands/build.d.ts.map +1 -0
  45. package/dist/cli/commands/deploy.d.ts +4 -0
  46. package/dist/cli/commands/deploy.d.ts.map +1 -0
  47. package/dist/cli/commands/dev.d.ts +4 -0
  48. package/dist/cli/commands/dev.d.ts.map +1 -0
  49. package/dist/cli/commands/doctor.d.ts +4 -0
  50. package/dist/cli/commands/doctor.d.ts.map +1 -0
  51. package/dist/cli/commands/init.d.ts +4 -0
  52. package/dist/cli/commands/init.d.ts.map +1 -0
  53. package/dist/cli/commands/remote.d.ts +4 -0
  54. package/dist/cli/commands/remote.d.ts.map +1 -0
  55. package/dist/cli/commands/types.d.ts +4 -0
  56. package/dist/cli/commands/types.d.ts.map +1 -0
  57. package/dist/cli/dependencies.d.ts +90 -0
  58. package/dist/cli/dependencies.d.ts.map +1 -0
  59. package/dist/cli/index.d.ts +23 -0
  60. package/dist/cli/index.d.ts.map +1 -0
  61. package/dist/cli/wrangler-auth.d.ts +36 -0
  62. package/dist/cli/wrangler-auth.d.ts.map +1 -0
  63. package/dist/cloudflare/account.d.ts +65 -0
  64. package/dist/cloudflare/account.d.ts.map +1 -0
  65. package/dist/cloudflare/api.d.ts +51 -0
  66. package/dist/cloudflare/api.d.ts.map +1 -0
  67. package/dist/cloudflare/auth.d.ts +35 -0
  68. package/dist/cloudflare/auth.d.ts.map +1 -0
  69. package/dist/cloudflare/index.d.ts +107 -0
  70. package/dist/cloudflare/index.d.ts.map +1 -0
  71. package/dist/cloudflare/index.js +13 -0
  72. package/dist/cloudflare/preferences.d.ts +46 -0
  73. package/dist/cloudflare/preferences.d.ts.map +1 -0
  74. package/dist/cloudflare/pricing.d.ts +15 -0
  75. package/dist/cloudflare/pricing.d.ts.map +1 -0
  76. package/dist/cloudflare/remote-config.d.ts +37 -0
  77. package/dist/cloudflare/remote-config.d.ts.map +1 -0
  78. package/dist/cloudflare/types.d.ts +161 -0
  79. package/dist/cloudflare/types.d.ts.map +1 -0
  80. package/dist/cloudflare/usage.d.ts +77 -0
  81. package/dist/cloudflare/usage.d.ts.map +1 -0
  82. package/dist/config/compiler.d.ts +146 -0
  83. package/dist/config/compiler.d.ts.map +1 -0
  84. package/dist/config/define.d.ts +44 -0
  85. package/dist/config/define.d.ts.map +1 -0
  86. package/dist/config/index.d.ts +6 -0
  87. package/dist/config/index.d.ts.map +1 -0
  88. package/dist/config/loader.d.ts +52 -0
  89. package/dist/config/loader.d.ts.map +1 -0
  90. package/dist/config/ref.d.ts +160 -0
  91. package/dist/config/ref.d.ts.map +1 -0
  92. package/dist/config/schema.d.ts +3318 -0
  93. package/dist/config/schema.d.ts.map +1 -0
  94. package/dist/decorators/durable-object.d.ts +59 -0
  95. package/dist/decorators/durable-object.d.ts.map +1 -0
  96. package/dist/decorators/index.d.ts +3 -0
  97. package/dist/decorators/index.d.ts.map +1 -0
  98. package/dist/decorators/index.js +9 -0
  99. package/dist/deploy-nhceck39.js +70 -0
  100. package/dist/dev-qnxet3j9.js +2096 -0
  101. package/dist/dev-server/index.d.ts +2 -0
  102. package/dist/dev-server/index.d.ts.map +1 -0
  103. package/dist/dev-server/server.d.ts +30 -0
  104. package/dist/dev-server/server.d.ts.map +1 -0
  105. package/dist/doctor-e8fy6fj5.js +186 -0
  106. package/dist/durable-object-t4kbb0yt.js +13 -0
  107. package/dist/env.d.ts +48 -0
  108. package/dist/env.d.ts.map +1 -0
  109. package/dist/index-07q6yxyc.js +168 -0
  110. package/dist/index-1xpj0m4r.js +57 -0
  111. package/dist/index-37x76zdn.js +4 -0
  112. package/dist/index-3t6rypgc.js +13 -0
  113. package/dist/index-67qcae0f.js +183 -0
  114. package/dist/index-a855bdsx.js +18 -0
  115. package/dist/index-d8bdkx2h.js +109 -0
  116. package/dist/index-ep3445yc.js +2225 -0
  117. package/dist/index-gz1gndna.js +307 -0
  118. package/dist/index-hcex3rgh.js +266 -0
  119. package/dist/index-m2q41jwa.js +462 -0
  120. package/dist/index-n7rs26ft.js +77 -0
  121. package/dist/index-pf5s73n9.js +1413 -0
  122. package/dist/index-rbht7m9r.js +36 -0
  123. package/dist/index-tfyxa77h.js +850 -0
  124. package/dist/index-tk6ej9dj.js +94 -0
  125. package/dist/index-z14anrqp.js +226 -0
  126. package/dist/index.d.ts +13 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +298 -0
  129. package/dist/init-f9mgmew3.js +186 -0
  130. package/dist/remote-q59qk463.js +97 -0
  131. package/dist/runtime/context.d.ts +46 -0
  132. package/dist/runtime/context.d.ts.map +1 -0
  133. package/dist/runtime/exports.d.ts +118 -0
  134. package/dist/runtime/exports.d.ts.map +1 -0
  135. package/dist/runtime/index.d.ts +4 -0
  136. package/dist/runtime/index.d.ts.map +1 -0
  137. package/dist/runtime/index.js +111 -0
  138. package/dist/runtime/middleware.d.ts +82 -0
  139. package/dist/runtime/middleware.d.ts.map +1 -0
  140. package/dist/runtime/validation.d.ts +37 -0
  141. package/dist/runtime/validation.d.ts.map +1 -0
  142. package/dist/sveltekit/index.d.ts +2 -0
  143. package/dist/sveltekit/index.d.ts.map +1 -0
  144. package/dist/sveltekit/index.js +182 -0
  145. package/dist/sveltekit/platform.d.ts +141 -0
  146. package/dist/sveltekit/platform.d.ts.map +1 -0
  147. package/dist/test/bridge-context.d.ts +73 -0
  148. package/dist/test/bridge-context.d.ts.map +1 -0
  149. package/dist/test/cf.d.ts +130 -0
  150. package/dist/test/cf.d.ts.map +1 -0
  151. package/dist/test/email.d.ts +75 -0
  152. package/dist/test/email.d.ts.map +1 -0
  153. package/dist/test/index.d.ts +22 -0
  154. package/dist/test/index.d.ts.map +1 -0
  155. package/dist/test/index.js +71 -0
  156. package/dist/test/multi-worker-context.d.ts +114 -0
  157. package/dist/test/multi-worker-context.d.ts.map +1 -0
  158. package/dist/test/queue.d.ts +74 -0
  159. package/dist/test/queue.d.ts.map +1 -0
  160. package/dist/test/remote-ai.d.ts +6 -0
  161. package/dist/test/remote-ai.d.ts.map +1 -0
  162. package/dist/test/remote-vectorize.d.ts +6 -0
  163. package/dist/test/remote-vectorize.d.ts.map +1 -0
  164. package/dist/test/resolve-service-bindings.d.ts +68 -0
  165. package/dist/test/resolve-service-bindings.d.ts.map +1 -0
  166. package/dist/test/scheduled.d.ts +58 -0
  167. package/dist/test/scheduled.d.ts.map +1 -0
  168. package/dist/test/should-skip.d.ts +50 -0
  169. package/dist/test/should-skip.d.ts.map +1 -0
  170. package/dist/test/simple-context.d.ts +43 -0
  171. package/dist/test/simple-context.d.ts.map +1 -0
  172. package/dist/test/tail.d.ts +86 -0
  173. package/dist/test/tail.d.ts.map +1 -0
  174. package/dist/test/utilities.d.ts +99 -0
  175. package/dist/test/utilities.d.ts.map +1 -0
  176. package/dist/test/worker.d.ts +76 -0
  177. package/dist/test/worker.d.ts.map +1 -0
  178. package/dist/transform/durable-object.d.ts +46 -0
  179. package/dist/transform/durable-object.d.ts.map +1 -0
  180. package/dist/transform/index.d.ts +3 -0
  181. package/dist/transform/index.d.ts.map +1 -0
  182. package/dist/transform/worker-entrypoint.d.ts +66 -0
  183. package/dist/transform/worker-entrypoint.d.ts.map +1 -0
  184. package/dist/types-5nyrz1sz.js +454 -0
  185. package/dist/utils/entrypoint-discovery.d.ts +29 -0
  186. package/dist/utils/entrypoint-discovery.d.ts.map +1 -0
  187. package/dist/utils/glob.d.ts +33 -0
  188. package/dist/utils/glob.d.ts.map +1 -0
  189. package/dist/utils/resolve-package.d.ts +10 -0
  190. package/dist/utils/resolve-package.d.ts.map +1 -0
  191. package/dist/vite/index.d.ts +3 -0
  192. package/dist/vite/index.d.ts.map +1 -0
  193. package/dist/vite/index.js +339 -0
  194. package/dist/vite/plugin.d.ts +138 -0
  195. package/dist/vite/plugin.d.ts.map +1 -0
  196. package/dist/worker-entrypoint-m9th0rg0.js +13 -0
  197. package/dist/workerName.d.ts +17 -0
  198. package/dist/workerName.d.ts.map +1 -0
  199. package/package.json +112 -1
@@ -0,0 +1,94 @@
1
+ import {
2
+ DEFAULT_ENTRYPOINT_PATTERN,
3
+ findFiles
4
+ } from "./index-rbht7m9r.js";
5
+ import {
6
+ __require
7
+ } from "./index-37x76zdn.js";
8
+
9
+ // src/utils/entrypoint-discovery.ts
10
+ import { readdirSync, readFileSync } from "fs";
11
+ import { join } from "path";
12
+ var ENTRYPOINT_CLASS_PATTERN = /export\s+class\s+(\w+)\s+extends\s+WorkerEntrypoint/g;
13
+ function findEntrypointClasses(code) {
14
+ const classes = [];
15
+ ENTRYPOINT_CLASS_PATTERN.lastIndex = 0;
16
+ let match;
17
+ while ((match = ENTRYPOINT_CLASS_PATTERN.exec(code)) !== null) {
18
+ classes.push(match[1]);
19
+ }
20
+ return classes;
21
+ }
22
+ var EP_FILE_PATTERN = /^ep\.[^.]+\.ts$/;
23
+ function discoverEntrypointsSync(dir) {
24
+ const discovered = [];
25
+ try {
26
+ const files = readdirSync(dir, { withFileTypes: true });
27
+ for (const file of files) {
28
+ if (file.isFile() && EP_FILE_PATTERN.test(file.name)) {
29
+ const filePath = join(dir, file.name);
30
+ try {
31
+ const code = readFileSync(filePath, "utf-8");
32
+ const classNames = findEntrypointClasses(code);
33
+ for (const className of classNames) {
34
+ discovered.push({ className, filePath });
35
+ }
36
+ } catch {}
37
+ }
38
+ }
39
+ } catch {}
40
+ return discovered;
41
+ }
42
+ async function discoverEntrypointsAsync(cwd, pattern = DEFAULT_ENTRYPOINT_PATTERN) {
43
+ const fs = await import("node:fs/promises");
44
+ const discovered = [];
45
+ const files = await findFiles(pattern, { cwd });
46
+ for (const filePath of files) {
47
+ try {
48
+ const code = await fs.readFile(filePath, "utf-8");
49
+ const classNames = findEntrypointClasses(code);
50
+ for (const className of classNames) {
51
+ discovered.push({ className, filePath });
52
+ }
53
+ } catch {}
54
+ }
55
+ return discovered;
56
+ }
57
+
58
+ // src/utils/resolve-package.ts
59
+ import { resolve, dirname } from "pathe";
60
+ import { readFileSync as readFileSync2, existsSync } from "node:fs";
61
+ function resolvePackageSpecifier(specifier, fromDir) {
62
+ if (specifier.startsWith(".") || specifier.startsWith("/") || /^[A-Za-z]:/.test(specifier)) {
63
+ return resolve(fromDir, specifier);
64
+ }
65
+ try {
66
+ const parts = specifier.startsWith("@") ? specifier.split("/").slice(0, 2).join("/") : specifier.split("/")[0];
67
+ const subpath = specifier.startsWith("@") ? specifier.split("/").slice(2).join("/") : specifier.split("/").slice(1).join("/");
68
+ const pkgJsonPath = __require.resolve(`${parts}/package.json`, { paths: [fromDir] });
69
+ const pkgDir = dirname(pkgJsonPath);
70
+ if (subpath) {
71
+ const pkgJson = JSON.parse(readFileSync2(pkgJsonPath, "utf-8"));
72
+ const exportPath = pkgJson.exports?.[`./${subpath}`];
73
+ if (exportPath) {
74
+ const targetPath = typeof exportPath === "string" ? exportPath : exportPath.default || exportPath.import;
75
+ return resolve(pkgDir, targetPath);
76
+ }
77
+ const directPath = resolve(pkgDir, `${subpath}.ts`);
78
+ if (existsSync(directPath))
79
+ return directPath;
80
+ const withExt = resolve(pkgDir, subpath);
81
+ if (existsSync(withExt))
82
+ return withExt;
83
+ if (existsSync(`${withExt}.ts`))
84
+ return `${withExt}.ts`;
85
+ if (existsSync(`${withExt}.js`))
86
+ return `${withExt}.js`;
87
+ }
88
+ return pkgDir;
89
+ } catch {
90
+ return resolve(fromDir, specifier);
91
+ }
92
+ }
93
+
94
+ export { discoverEntrypointsSync, discoverEntrypointsAsync, resolvePackageSpecifier };
@@ -0,0 +1,226 @@
1
+ // src/transform/worker-entrypoint.ts
2
+ import ts from "typescript";
3
+ import MagicString from "magic-string";
4
+ function findExportedFunctions(code) {
5
+ const functions = [];
6
+ const sourceFile = ts.createSourceFile("worker.ts", code, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
7
+ function visit(node) {
8
+ if (ts.isFunctionDeclaration(node) && node.name) {
9
+ const modifiers = ts.getModifiers(node);
10
+ const isExported = modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
11
+ const isDefault = modifiers?.some((m) => m.kind === ts.SyntaxKind.DefaultKeyword);
12
+ if (isExported) {
13
+ const isAsync = modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) ?? false;
14
+ const funcName = isDefault ? "fetch" : node.name.text;
15
+ const params = node.parameters.map((p) => code.substring(p.getStart(sourceFile), p.getEnd())).join(", ");
16
+ const returnType = node.type ? code.substring(node.type.getStart(sourceFile), node.type.getEnd()) : undefined;
17
+ functions.push({
18
+ name: funcName,
19
+ isAsync,
20
+ params,
21
+ returnType,
22
+ start: node.getStart(sourceFile),
23
+ end: node.getEnd(),
24
+ isDefault
25
+ });
26
+ }
27
+ }
28
+ if (ts.isFunctionDeclaration(node) && !node.name) {
29
+ const modifiers = ts.getModifiers(node);
30
+ const isExported = modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
31
+ const isDefault = modifiers?.some((m) => m.kind === ts.SyntaxKind.DefaultKeyword);
32
+ if (isExported && isDefault) {
33
+ const isAsync = modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) ?? false;
34
+ const params = node.parameters.map((p) => code.substring(p.getStart(sourceFile), p.getEnd())).join(", ");
35
+ const returnType = node.type ? code.substring(node.type.getStart(sourceFile), node.type.getEnd()) : undefined;
36
+ functions.push({
37
+ name: "fetch",
38
+ isAsync,
39
+ params,
40
+ returnType,
41
+ start: node.getStart(sourceFile),
42
+ end: node.getEnd(),
43
+ isDefault: true
44
+ });
45
+ }
46
+ }
47
+ if (ts.isVariableStatement(node)) {
48
+ const modifiers = ts.getModifiers(node);
49
+ const isExported = modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
50
+ if (isExported) {
51
+ for (const decl of node.declarationList.declarations) {
52
+ if (ts.isIdentifier(decl.name) && decl.initializer) {
53
+ let funcExpr;
54
+ if (ts.isFunctionExpression(decl.initializer)) {
55
+ funcExpr = decl.initializer;
56
+ } else if (ts.isArrowFunction(decl.initializer)) {
57
+ funcExpr = decl.initializer;
58
+ }
59
+ if (funcExpr) {
60
+ const modifiersArr = ts.getModifiers(funcExpr);
61
+ const isAsync = modifiersArr?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) ?? (ts.isArrowFunction(funcExpr) && funcExpr.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword)) ?? false;
62
+ const params = funcExpr.parameters.map((p) => code.substring(p.getStart(sourceFile), p.getEnd())).join(", ");
63
+ const returnType = funcExpr.type ? code.substring(funcExpr.type.getStart(sourceFile), funcExpr.type.getEnd()) : undefined;
64
+ functions.push({
65
+ name: decl.name.text,
66
+ isAsync,
67
+ params,
68
+ returnType,
69
+ start: node.getStart(sourceFile),
70
+ end: node.getEnd()
71
+ });
72
+ }
73
+ }
74
+ }
75
+ }
76
+ }
77
+ ts.forEachChild(node, visit);
78
+ }
79
+ visit(sourceFile);
80
+ return functions;
81
+ }
82
+ function shouldTransformWorker(code, filePath) {
83
+ if (!filePath.endsWith("worker.ts") && !filePath.endsWith("worker.js")) {
84
+ return false;
85
+ }
86
+ const functions = findExportedFunctions(code);
87
+ return functions.length > 0;
88
+ }
89
+ function transformWorkerEntrypoint(code, id, options = {}) {
90
+ const className = options.className ?? "Worker";
91
+ const injectContext = options.injectContext ?? true;
92
+ const functions = findExportedFunctions(code);
93
+ if (functions.length === 0) {
94
+ return null;
95
+ }
96
+ const fetchFn = functions.find((f) => f.name === "fetch");
97
+ const rpcMethods = functions.filter((f) => f.name !== "fetch");
98
+ const s = new MagicString(code);
99
+ const importStatement = `import { WorkerEntrypoint } from 'cloudflare:workers'
100
+ `;
101
+ if (injectContext) {
102
+ s.prepend(`import { runWithContext } from 'devflare/runtime'
103
+ `);
104
+ }
105
+ s.prepend(importStatement);
106
+ for (const fn of functions) {
107
+ const fnCode = code.substring(fn.start, fn.end);
108
+ const internalName = fn.name === "fetch" ? "__originalFetch" : `__original_${fn.name}`;
109
+ if (fn.isDefault) {
110
+ const replacement = fnCode.replace(/^export\s+default\s+(async\s+)?function\s*/, (_, asyncKw) => `const ${internalName} = ${asyncKw || ""}function `);
111
+ s.overwrite(fn.start, fn.end, replacement);
112
+ } else if (fnCode.startsWith("export function") || fnCode.startsWith("export async function")) {
113
+ const replacement = fnCode.replace(/^export\s+(async\s+)?function\s+\w+/, (_, asyncKw) => `${asyncKw || ""}function ${internalName}`);
114
+ s.overwrite(fn.start, fn.end, replacement);
115
+ } else if (fnCode.startsWith("export const")) {
116
+ const replacement = fnCode.replace(/^export\s+const\s+\w+/, () => `const ${internalName}`);
117
+ s.overwrite(fn.start, fn.end, replacement);
118
+ }
119
+ }
120
+ let classBody = `
121
+
122
+ // ============ Devflare WorkerEntrypoint ============
123
+ class ${className} extends WorkerEntrypoint {
124
+ `;
125
+ if (fetchFn) {
126
+ if (injectContext) {
127
+ classBody += ` async fetch(request: Request): Promise<Response> {
128
+ `;
129
+ classBody += ` return runWithContext(
130
+ `;
131
+ classBody += ` this.env,
132
+ `;
133
+ classBody += ` this.ctx,
134
+ `;
135
+ classBody += ` request,
136
+ `;
137
+ classBody += ` () => __originalFetch(request, this.env, this.ctx),
138
+ `;
139
+ classBody += ` 'fetch'
140
+ `;
141
+ classBody += ` )
142
+ `;
143
+ classBody += ` }
144
+ `;
145
+ } else {
146
+ classBody += ` async fetch(request: Request): Promise<Response> {
147
+ `;
148
+ classBody += ` return __originalFetch(request, this.env, this.ctx)
149
+ `;
150
+ classBody += ` }
151
+ `;
152
+ }
153
+ }
154
+ for (const fn of rpcMethods) {
155
+ const asyncPrefix = fn.isAsync ? "async " : "";
156
+ const returnType = fn.returnType ? `: ${fn.returnType}` : "";
157
+ const paramNames = extractParamNames(fn.params);
158
+ classBody += `
159
+ ${asyncPrefix}${fn.name}(${fn.params})${returnType} {
160
+ `;
161
+ classBody += ` return __original_${fn.name}(${paramNames})
162
+ `;
163
+ classBody += ` }
164
+ `;
165
+ }
166
+ classBody += `}
167
+
168
+ `;
169
+ classBody += `export { ${className} }
170
+ `;
171
+ classBody += `export { ${className} as default }
172
+ `;
173
+ classBody += `// ============ End Devflare WorkerEntrypoint ============
174
+ `;
175
+ s.append(classBody);
176
+ return {
177
+ code: s.toString(),
178
+ map: s.generateMap({
179
+ source: id,
180
+ file: id + ".map",
181
+ includeContent: true
182
+ }),
183
+ rpcMethods: rpcMethods.map((fn) => fn.name),
184
+ className
185
+ };
186
+ }
187
+ function extractParamNames(params) {
188
+ if (!params.trim())
189
+ return "";
190
+ const tempCode = `function f(${params}) {}`;
191
+ const sourceFile = ts.createSourceFile("temp.ts", tempCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
192
+ const names = [];
193
+ function visit(node) {
194
+ if (ts.isFunctionDeclaration(node)) {
195
+ for (const param of node.parameters) {
196
+ if (ts.isIdentifier(param.name)) {
197
+ names.push(param.name.text);
198
+ } else if (ts.isObjectBindingPattern(param.name) || ts.isArrayBindingPattern(param.name)) {
199
+ names.push(tempCode.substring(param.name.getStart(sourceFile), param.name.getEnd()));
200
+ }
201
+ }
202
+ }
203
+ ts.forEachChild(node, visit);
204
+ }
205
+ visit(sourceFile);
206
+ return names.join(", ");
207
+ }
208
+ function generateRpcInterface(functions, interfaceName) {
209
+ const rpcMethods = functions.filter((f) => f.name !== "fetch");
210
+ if (rpcMethods.length === 0) {
211
+ return "";
212
+ }
213
+ let output = `export interface ${interfaceName} {
214
+ `;
215
+ for (const fn of rpcMethods) {
216
+ const returnType = fn.returnType ?? "unknown";
217
+ const promiseReturn = returnType.startsWith("Promise<") ? returnType : `Promise<${returnType}>`;
218
+ output += ` ${fn.name}(${fn.params}): ${promiseReturn}
219
+ `;
220
+ }
221
+ output += `}
222
+ `;
223
+ return output;
224
+ }
225
+
226
+ export { findExportedFunctions, shouldTransformWorker, transformWorkerEntrypoint, generateRpcInterface };
@@ -0,0 +1,13 @@
1
+ export { defineConfig, loadConfig, compileConfig, stringifyConfig, configSchema, ConfigNotFoundError, ConfigValidationError, type DevflareConfig, type DevflareConfigInput } from './config';
2
+ export { ref, resolveRef, serviceBinding, type RefResult, type WorkerBinding, type WorkerBindingAccessor } from './config';
3
+ export { workerName } from './workerName';
4
+ export { durableObject, getDurableObjectOptions, type DurableObjectOptions } from './decorators';
5
+ export { findDurableObjectClasses, findDurableObjectClassesDetailed, generateWrapper, transformDurableObject, type DOClassInfo, type WrapperOptions, type TransformResult } from './transform/durable-object';
6
+ export { transformWorkerEntrypoint, findExportedFunctions, shouldTransformWorker, generateRpcInterface, type ExportedFunction, type WorkerTransformOptions, type WorkerTransformResult } from './transform';
7
+ export { runCli, parseArgs } from './cli';
8
+ export type { ParsedArgs, CliOptions, CliResult } from './cli';
9
+ export { setBindingHints, createEnvProxy, initEnv, type EnvProxyOptions, type BindingHints, BridgeClient, getClient, type BridgeClientOptions, startMiniflare, startMiniflareFromConfig, getMiniflare, stopMiniflare, type MiniflareInstance, type MiniflareOptions, gateway } from './bridge';
10
+ export { env } from './env';
11
+ export { createTestContext, createMockTestContext, createMockKV, createMockD1, createMockR2, createMockQueue, createMockEnv, withTestContext, type TestContext, type TestContextOptions, type MockEnvOptions, createBridgeTestContext, stopBridgeTestContext, getBridgeTestContext, testEnv, type BridgeTestContext, type BridgeTestContextOptions } from './test';
12
+ export { defineConfig as default } from './config';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EACN,YAAY,EACZ,UAAU,EACV,aAAa,EACb,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,MAAM,UAAU,CAAA;AAGjB,OAAO,EACN,GAAG,EACH,UAAU,EACV,cAAc,EACd,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,MAAM,UAAU,CAAA;AAGjB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGzC,OAAO,EACN,aAAa,EACb,uBAAuB,EACvB,KAAK,oBAAoB,EACzB,MAAM,cAAc,CAAA;AAGrB,OAAO,EACN,wBAAwB,EACxB,gCAAgC,EAChC,eAAe,EACf,sBAAsB,EACtB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,MAAM,4BAA4B,CAAA;AAGnC,OAAO,EACN,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACzC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAG9D,OAAO,EAEN,eAAe,EACf,cAAc,EACd,OAAO,EACP,KAAK,eAAe,EACpB,KAAK,YAAY,EAGjB,YAAY,EACZ,SAAS,EACT,KAAK,mBAAmB,EAGxB,cAAc,EACd,wBAAwB,EACxB,YAAY,EACZ,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAGrB,OAAO,EACP,MAAM,UAAU,CAAA;AAGjB,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAG3B,OAAO,EACN,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,aAAa,EACb,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAGnB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,OAAO,EACP,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,MAAM,QAAQ,CAAA;AAGf,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,MAAM,UAAU,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,298 @@
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
+ };