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.
- package/LLM.md +976 -0
- package/README.md +737 -1
- package/bin/devflare.js +14 -0
- package/dist/account-rvrj687w.js +397 -0
- package/dist/ai-dx4fr9jh.js +107 -0
- package/dist/bridge/client.d.ts +82 -0
- package/dist/bridge/client.d.ts.map +1 -0
- package/dist/bridge/index.d.ts +7 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/miniflare.d.ts +70 -0
- package/dist/bridge/miniflare.d.ts.map +1 -0
- package/dist/bridge/protocol.d.ts +146 -0
- package/dist/bridge/protocol.d.ts.map +1 -0
- package/dist/bridge/proxy.d.ts +49 -0
- package/dist/bridge/proxy.d.ts.map +1 -0
- package/dist/bridge/serialization.d.ts +83 -0
- package/dist/bridge/serialization.d.ts.map +1 -0
- package/dist/bridge/server.d.ts +8 -0
- package/dist/bridge/server.d.ts.map +1 -0
- package/dist/browser-shim/binding-worker.d.ts +7 -0
- package/dist/browser-shim/binding-worker.d.ts.map +1 -0
- package/dist/browser-shim/handler.d.ts +21 -0
- package/dist/browser-shim/handler.d.ts.map +1 -0
- package/dist/browser-shim/index.d.ts +3 -0
- package/dist/browser-shim/index.d.ts.map +1 -0
- package/dist/browser-shim/server.d.ts +25 -0
- package/dist/browser-shim/server.d.ts.map +1 -0
- package/dist/browser-shim/worker.d.ts +14 -0
- package/dist/browser-shim/worker.d.ts.map +1 -0
- package/dist/build-mnf6v8gd.js +53 -0
- package/dist/bundler/do-bundler.d.ts +42 -0
- package/dist/bundler/do-bundler.d.ts.map +1 -0
- package/dist/bundler/index.d.ts +2 -0
- package/dist/bundler/index.d.ts.map +1 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/colors.d.ts +11 -0
- package/dist/cli/colors.d.ts.map +1 -0
- package/dist/cli/commands/account.d.ts +4 -0
- package/dist/cli/commands/account.d.ts.map +1 -0
- package/dist/cli/commands/ai.d.ts +3 -0
- package/dist/cli/commands/ai.d.ts.map +1 -0
- package/dist/cli/commands/build.d.ts +4 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/deploy.d.ts +4 -0
- package/dist/cli/commands/deploy.d.ts.map +1 -0
- package/dist/cli/commands/dev.d.ts +4 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/doctor.d.ts +4 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/init.d.ts +4 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/remote.d.ts +4 -0
- package/dist/cli/commands/remote.d.ts.map +1 -0
- package/dist/cli/commands/types.d.ts +4 -0
- package/dist/cli/commands/types.d.ts.map +1 -0
- package/dist/cli/dependencies.d.ts +90 -0
- package/dist/cli/dependencies.d.ts.map +1 -0
- package/dist/cli/index.d.ts +23 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/wrangler-auth.d.ts +36 -0
- package/dist/cli/wrangler-auth.d.ts.map +1 -0
- package/dist/cloudflare/account.d.ts +65 -0
- package/dist/cloudflare/account.d.ts.map +1 -0
- package/dist/cloudflare/api.d.ts +51 -0
- package/dist/cloudflare/api.d.ts.map +1 -0
- package/dist/cloudflare/auth.d.ts +35 -0
- package/dist/cloudflare/auth.d.ts.map +1 -0
- package/dist/cloudflare/index.d.ts +107 -0
- package/dist/cloudflare/index.d.ts.map +1 -0
- package/dist/cloudflare/index.js +13 -0
- package/dist/cloudflare/preferences.d.ts +46 -0
- package/dist/cloudflare/preferences.d.ts.map +1 -0
- package/dist/cloudflare/pricing.d.ts +15 -0
- package/dist/cloudflare/pricing.d.ts.map +1 -0
- package/dist/cloudflare/remote-config.d.ts +37 -0
- package/dist/cloudflare/remote-config.d.ts.map +1 -0
- package/dist/cloudflare/types.d.ts +161 -0
- package/dist/cloudflare/types.d.ts.map +1 -0
- package/dist/cloudflare/usage.d.ts +77 -0
- package/dist/cloudflare/usage.d.ts.map +1 -0
- package/dist/config/compiler.d.ts +146 -0
- package/dist/config/compiler.d.ts.map +1 -0
- package/dist/config/define.d.ts +44 -0
- package/dist/config/define.d.ts.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/loader.d.ts +52 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/ref.d.ts +160 -0
- package/dist/config/ref.d.ts.map +1 -0
- package/dist/config/schema.d.ts +3318 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/decorators/durable-object.d.ts +59 -0
- package/dist/decorators/durable-object.d.ts.map +1 -0
- package/dist/decorators/index.d.ts +3 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +9 -0
- package/dist/deploy-nhceck39.js +70 -0
- package/dist/dev-qnxet3j9.js +2096 -0
- package/dist/dev-server/index.d.ts +2 -0
- package/dist/dev-server/index.d.ts.map +1 -0
- package/dist/dev-server/server.d.ts +30 -0
- package/dist/dev-server/server.d.ts.map +1 -0
- package/dist/doctor-e8fy6fj5.js +186 -0
- package/dist/durable-object-t4kbb0yt.js +13 -0
- package/dist/env.d.ts +48 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/index-07q6yxyc.js +168 -0
- package/dist/index-1xpj0m4r.js +57 -0
- package/dist/index-37x76zdn.js +4 -0
- package/dist/index-3t6rypgc.js +13 -0
- package/dist/index-67qcae0f.js +183 -0
- package/dist/index-a855bdsx.js +18 -0
- package/dist/index-d8bdkx2h.js +109 -0
- package/dist/index-ep3445yc.js +2225 -0
- package/dist/index-gz1gndna.js +307 -0
- package/dist/index-hcex3rgh.js +266 -0
- package/dist/index-m2q41jwa.js +462 -0
- package/dist/index-n7rs26ft.js +77 -0
- package/dist/index-pf5s73n9.js +1413 -0
- package/dist/index-rbht7m9r.js +36 -0
- package/dist/index-tfyxa77h.js +850 -0
- package/dist/index-tk6ej9dj.js +94 -0
- package/dist/index-z14anrqp.js +226 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +298 -0
- package/dist/init-f9mgmew3.js +186 -0
- package/dist/remote-q59qk463.js +97 -0
- package/dist/runtime/context.d.ts +46 -0
- package/dist/runtime/context.d.ts.map +1 -0
- package/dist/runtime/exports.d.ts +118 -0
- package/dist/runtime/exports.d.ts.map +1 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +111 -0
- package/dist/runtime/middleware.d.ts +82 -0
- package/dist/runtime/middleware.d.ts.map +1 -0
- package/dist/runtime/validation.d.ts +37 -0
- package/dist/runtime/validation.d.ts.map +1 -0
- package/dist/sveltekit/index.d.ts +2 -0
- package/dist/sveltekit/index.d.ts.map +1 -0
- package/dist/sveltekit/index.js +182 -0
- package/dist/sveltekit/platform.d.ts +141 -0
- package/dist/sveltekit/platform.d.ts.map +1 -0
- package/dist/test/bridge-context.d.ts +73 -0
- package/dist/test/bridge-context.d.ts.map +1 -0
- package/dist/test/cf.d.ts +130 -0
- package/dist/test/cf.d.ts.map +1 -0
- package/dist/test/email.d.ts +75 -0
- package/dist/test/email.d.ts.map +1 -0
- package/dist/test/index.d.ts +22 -0
- package/dist/test/index.d.ts.map +1 -0
- package/dist/test/index.js +71 -0
- package/dist/test/multi-worker-context.d.ts +114 -0
- package/dist/test/multi-worker-context.d.ts.map +1 -0
- package/dist/test/queue.d.ts +74 -0
- package/dist/test/queue.d.ts.map +1 -0
- package/dist/test/remote-ai.d.ts +6 -0
- package/dist/test/remote-ai.d.ts.map +1 -0
- package/dist/test/remote-vectorize.d.ts +6 -0
- package/dist/test/remote-vectorize.d.ts.map +1 -0
- package/dist/test/resolve-service-bindings.d.ts +68 -0
- package/dist/test/resolve-service-bindings.d.ts.map +1 -0
- package/dist/test/scheduled.d.ts +58 -0
- package/dist/test/scheduled.d.ts.map +1 -0
- package/dist/test/should-skip.d.ts +50 -0
- package/dist/test/should-skip.d.ts.map +1 -0
- package/dist/test/simple-context.d.ts +43 -0
- package/dist/test/simple-context.d.ts.map +1 -0
- package/dist/test/tail.d.ts +86 -0
- package/dist/test/tail.d.ts.map +1 -0
- package/dist/test/utilities.d.ts +99 -0
- package/dist/test/utilities.d.ts.map +1 -0
- package/dist/test/worker.d.ts +76 -0
- package/dist/test/worker.d.ts.map +1 -0
- package/dist/transform/durable-object.d.ts +46 -0
- package/dist/transform/durable-object.d.ts.map +1 -0
- package/dist/transform/index.d.ts +3 -0
- package/dist/transform/index.d.ts.map +1 -0
- package/dist/transform/worker-entrypoint.d.ts +66 -0
- package/dist/transform/worker-entrypoint.d.ts.map +1 -0
- package/dist/types-5nyrz1sz.js +454 -0
- package/dist/utils/entrypoint-discovery.d.ts +29 -0
- package/dist/utils/entrypoint-discovery.d.ts.map +1 -0
- package/dist/utils/glob.d.ts +33 -0
- package/dist/utils/glob.d.ts.map +1 -0
- package/dist/utils/resolve-package.d.ts +10 -0
- package/dist/utils/resolve-package.d.ts.map +1 -0
- package/dist/vite/index.d.ts +3 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +339 -0
- package/dist/vite/plugin.d.ts +138 -0
- package/dist/vite/plugin.d.ts.map +1 -0
- package/dist/worker-entrypoint-m9th0rg0.js +13 -0
- package/dist/workerName.d.ts +17 -0
- package/dist/workerName.d.ts.map +1 -0
- 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 };
|
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
};
|