devflare 1.0.0-next.5 → 1.0.0-next.6
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 +7 -2
- package/README.md +4 -2
- package/dist/browser.d.ts +50 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +149 -0
- package/dist/{dev-b9dmrj7b.js → dev-7agn9g5s.js} +1 -0
- package/dist/dev-server/server.d.ts.map +1 -1
- package/dist/index-62b3gt2g.js +12 -0
- package/dist/index-9ats0s83.js +70 -0
- package/dist/{index-pf5s73n9.js → index-ccrh4w3t.js} +1 -281
- package/dist/index-k7r18na8.js +0 -0
- package/dist/{index-m2q41jwa.js → index-n3np2d6t.js} +1 -1
- package/dist/index-npc1c8jx.js +44 -0
- package/dist/index-p7g30wd2.js +281 -0
- package/dist/{index-ep3445yc.js → index-rprrn24p.js} +25 -97
- package/dist/{index-07q6yxyc.js → index-v8vvsn9x.js} +1 -0
- package/dist/index.js +25 -26
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +73 -0
- package/dist/sveltekit/index.js +5 -3
- package/dist/test/index.js +10 -5
- package/dist/{types-5nyrz1sz.js → types-vss6vrz7.js} +5 -4
- package/package.json +3 -2
- package/dist/{build-mnf6v8gd.js → build-nz5yrj7f.js} +3 -3
- package/dist/{deploy-nhceck39.js → deploy-a5pcxd5w.js} +3 -3
- package/dist/{doctor-fmgb3d28.js → doctor-v7jy4s3r.js} +3 -3
package/LLM.md
CHANGED
|
@@ -84,7 +84,7 @@ Use package subpaths intentionally.
|
|
|
84
84
|
| Import | What it is for | What it exposes in practice |
|
|
85
85
|
|---|---|---|
|
|
86
86
|
| `devflare` | Main package entrypoint | `defineConfig`, config loading/compilation helpers, `ref()`, unified `env`, CLI helpers, bridge helpers, decorators, transform helpers, test helpers re-exported for convenience, `workerName` |
|
|
87
|
-
| `devflare/runtime` | Worker-safe runtime utilities |
|
|
87
|
+
| `devflare/runtime` | Worker-safe runtime utilities | request-scoped helpers like `env`, `ctx`, `event`, `locals`, `runWithContext`, plus middleware, validation helpers, and decorators |
|
|
88
88
|
| `devflare/test` | Testing API | `createTestContext`, `cf`, `email`, `queue`, `scheduled`, `worker`, `tail`, mock helpers, remote skip helpers, bridge test context |
|
|
89
89
|
| `devflare/vite` | Vite integration | `devflarePlugin`, plugin context helpers, config helpers, Vite-side types |
|
|
90
90
|
| `devflare/sveltekit` | SvelteKit integration | `handle`, `createDevflarePlatform`, `createHandle`, dev/reset helpers, integration types |
|
|
@@ -95,7 +95,12 @@ Use package subpaths intentionally.
|
|
|
95
95
|
|
|
96
96
|
`devflare/runtime` is intentionally **smaller** than the main package.
|
|
97
97
|
|
|
98
|
-
|
|
98
|
+
It now exports the **worker-safe request-scoped runtime helpers** such as `env`, `ctx`, `event`, `locals`, and `runWithContext`.
|
|
99
|
+
|
|
100
|
+
The main `devflare` entrypoint still exports the **unified** `env` proxy that can fall back to test or bridge contexts outside a live request. Use:
|
|
101
|
+
|
|
102
|
+
- `import { env } from 'devflare/runtime'` for worker-only request-scoped runtime access
|
|
103
|
+
- `import { env } from 'devflare'` when you specifically want the unified request/test/bridge-aware proxy
|
|
99
104
|
|
|
100
105
|
### Common main-package exports
|
|
101
106
|
|
package/README.md
CHANGED
|
@@ -119,7 +119,7 @@ Use subpaths intentionally.
|
|
|
119
119
|
| Import | Use for |
|
|
120
120
|
|---|---|
|
|
121
121
|
| `devflare` | main package entrypoint: config helpers, `ref()`, unified `env`, CLI helpers, bridge helpers, decorators, test helpers, `workerName` |
|
|
122
|
-
| `devflare/runtime` | worker-safe middleware/validation/decorator utilities |
|
|
122
|
+
| `devflare/runtime` | worker-safe runtime helpers like `env`, `ctx`, `event`, `locals`, `runWithContext`, plus middleware/validation/decorator utilities |
|
|
123
123
|
| `devflare/test` | `createTestContext`, `cf.*`, mock helpers, bridge test context, skip helpers |
|
|
124
124
|
| `devflare/vite` | Vite integration |
|
|
125
125
|
| `devflare/sveltekit` | SvelteKit integration |
|
|
@@ -128,7 +128,9 @@ Use subpaths intentionally.
|
|
|
128
128
|
|
|
129
129
|
### Important runtime note
|
|
130
130
|
|
|
131
|
-
The published `devflare/runtime` subpath is intentionally smaller than the main package
|
|
131
|
+
The published `devflare/runtime` subpath is intentionally smaller than the main package, but it now includes the worker-safe request-scoped runtime helpers such as `env`, `ctx`, `event`, `locals`, and `runWithContext`.
|
|
132
|
+
|
|
133
|
+
Use `import { env } from 'devflare/runtime'` for request-scoped worker runtime access, or `import { env } from 'devflare'` when you specifically want the unified request/test/bridge-aware proxy.
|
|
132
134
|
|
|
133
135
|
---
|
|
134
136
|
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export { defineConfig } from './config/define';
|
|
2
|
+
export { ref, resolveRef, serviceBinding } from './config/ref';
|
|
3
|
+
export { workerName } from './workerName';
|
|
4
|
+
export { env } from './env';
|
|
5
|
+
export { setBindingHints, createEnvProxy, initEnv, } from './bridge/proxy';
|
|
6
|
+
export type { EnvProxyOptions, BindingHints } from './bridge/proxy';
|
|
7
|
+
export { BridgeClient, getClient } from './bridge/client';
|
|
8
|
+
export type { BridgeClientOptions } from './bridge/client';
|
|
9
|
+
export { durableObject, getDurableObjectOptions, type DurableObjectOptions } from './decorators';
|
|
10
|
+
export declare function loadConfig(..._args: any[]): Promise<never>;
|
|
11
|
+
export declare const compileConfig: (...args: any[]) => any;
|
|
12
|
+
export declare const stringifyConfig: (...args: any[]) => any;
|
|
13
|
+
export declare const configSchema: Record<string, unknown>;
|
|
14
|
+
export declare class ConfigNotFoundError extends Error {
|
|
15
|
+
readonly code = "CONFIG_NOT_FOUND";
|
|
16
|
+
constructor(..._args: any[]);
|
|
17
|
+
}
|
|
18
|
+
export declare class ConfigValidationError extends Error {
|
|
19
|
+
readonly code = "CONFIG_VALIDATION_ERROR";
|
|
20
|
+
constructor(..._args: any[]);
|
|
21
|
+
}
|
|
22
|
+
export declare const runCli: (...args: any[]) => any;
|
|
23
|
+
export declare const parseArgs: (...args: any[]) => any;
|
|
24
|
+
export declare const findDurableObjectClasses: (...args: any[]) => any;
|
|
25
|
+
export declare const findDurableObjectClassesDetailed: (...args: any[]) => any;
|
|
26
|
+
export declare const generateWrapper: (...args: any[]) => any;
|
|
27
|
+
export declare const transformDurableObject: (...args: any[]) => any;
|
|
28
|
+
export declare const transformWorkerEntrypoint: (...args: any[]) => any;
|
|
29
|
+
export declare const findExportedFunctions: (...args: any[]) => any;
|
|
30
|
+
export declare const shouldTransformWorker: (...args: any[]) => any;
|
|
31
|
+
export declare const generateRpcInterface: (...args: any[]) => any;
|
|
32
|
+
export declare const startMiniflare: (...args: any[]) => any;
|
|
33
|
+
export declare const startMiniflareFromConfig: (...args: any[]) => any;
|
|
34
|
+
export declare const getMiniflare: (...args: any[]) => any;
|
|
35
|
+
export declare const stopMiniflare: (...args: any[]) => any;
|
|
36
|
+
export declare const gateway: Record<string, unknown>;
|
|
37
|
+
export declare const createTestContext: (...args: any[]) => any;
|
|
38
|
+
export declare const createMockTestContext: (...args: any[]) => any;
|
|
39
|
+
export declare const createMockKV: (...args: any[]) => any;
|
|
40
|
+
export declare const createMockD1: (...args: any[]) => any;
|
|
41
|
+
export declare const createMockR2: (...args: any[]) => any;
|
|
42
|
+
export declare const createMockQueue: (...args: any[]) => any;
|
|
43
|
+
export declare const createMockEnv: (...args: any[]) => any;
|
|
44
|
+
export declare const withTestContext: (...args: any[]) => any;
|
|
45
|
+
export declare const createBridgeTestContext: (...args: any[]) => any;
|
|
46
|
+
export declare const stopBridgeTestContext: (...args: any[]) => any;
|
|
47
|
+
export declare const getBridgeTestContext: (...args: any[]) => any;
|
|
48
|
+
export declare const testEnv: Record<string, unknown>;
|
|
49
|
+
export { defineConfig as default } from './config/define';
|
|
50
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAG9D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAG3B,OAAO,EACN,eAAe,EACf,cAAc,EACd,OAAO,GACP,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACzD,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAG1D,OAAO,EACN,aAAa,EACb,uBAAuB,EACvB,KAAK,oBAAoB,EACzB,MAAM,cAAc,CAAA;AAgCrB,wBAAsB,UAAU,CAAC,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAEhE;AAED,eAAO,MAAM,aAAa,yBAAuC,CAAA;AACjE,eAAO,MAAM,eAAe,yBAAyC,CAAA;AACrE,eAAO,MAAM,YAAY,yBAAmE,CAAA;AAE5F,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,sBAAqB;IAElC,YAAY,GAAG,KAAK,EAAE,GAAG,EAAE,EAG1B;CACD;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,6BAA4B;IAEzC,YAAY,GAAG,KAAK,EAAE,GAAG,EAAE,EAG1B;CACD;AAED,eAAO,MAAM,MAAM,yBAAgC,CAAA;AACnD,eAAO,MAAM,SAAS,yBAAmC,CAAA;AAEzD,eAAO,MAAM,wBAAwB,yBAAkD,CAAA;AACvF,eAAO,MAAM,gCAAgC,yBAA0D,CAAA;AACvG,eAAO,MAAM,eAAe,yBAAyC,CAAA;AACrE,eAAO,MAAM,sBAAsB,yBAAgD,CAAA;AACnF,eAAO,MAAM,yBAAyB,yBAAmD,CAAA;AACzF,eAAO,MAAM,qBAAqB,yBAA+C,CAAA;AACjF,eAAO,MAAM,qBAAqB,yBAA+C,CAAA;AACjF,eAAO,MAAM,oBAAoB,yBAA8C,CAAA;AAE/E,eAAO,MAAM,cAAc,yBAAwC,CAAA;AACnE,eAAO,MAAM,wBAAwB,yBAAkD,CAAA;AACvF,eAAO,MAAM,YAAY,yBAAsC,CAAA;AAC/D,eAAO,MAAM,aAAa,yBAAuC,CAAA;AACjE,eAAO,MAAM,OAAO,yBAA8D,CAAA;AAElF,eAAO,MAAM,iBAAiB,yBAA2C,CAAA;AACzE,eAAO,MAAM,qBAAqB,yBAA+C,CAAA;AACjF,eAAO,MAAM,YAAY,yBAAsC,CAAA;AAC/D,eAAO,MAAM,YAAY,yBAAsC,CAAA;AAC/D,eAAO,MAAM,YAAY,yBAAsC,CAAA;AAC/D,eAAO,MAAM,eAAe,yBAAyC,CAAA;AACrE,eAAO,MAAM,aAAa,yBAAuC,CAAA;AACjE,eAAO,MAAM,eAAe,yBAAyC,CAAA;AACrE,eAAO,MAAM,uBAAuB,yBAAiD,CAAA;AACrF,eAAO,MAAM,qBAAqB,yBAA+C,CAAA;AACjF,eAAO,MAAM,oBAAoB,yBAA8C,CAAA;AAC/E,eAAO,MAAM,OAAO,yBAA8D,CAAA;AAElF,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAA"}
|
package/dist/browser.js
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import {
|
|
2
|
+
workerName
|
|
3
|
+
} from "./index-62b3gt2g.js";
|
|
4
|
+
import {
|
|
5
|
+
env
|
|
6
|
+
} from "./index-9ats0s83.js";
|
|
7
|
+
import"./index-npc1c8jx.js";
|
|
8
|
+
import {
|
|
9
|
+
BridgeClient,
|
|
10
|
+
createEnvProxy,
|
|
11
|
+
getClient,
|
|
12
|
+
initEnv,
|
|
13
|
+
setBindingHints
|
|
14
|
+
} from "./index-ccrh4w3t.js";
|
|
15
|
+
import {
|
|
16
|
+
defineConfig,
|
|
17
|
+
ref,
|
|
18
|
+
resolveRef,
|
|
19
|
+
serviceBinding
|
|
20
|
+
} from "./index-v8vvsn9x.js";
|
|
21
|
+
import {
|
|
22
|
+
durableObject,
|
|
23
|
+
getDurableObjectOptions
|
|
24
|
+
} from "./index-a855bdsx.js";
|
|
25
|
+
import"./index-37x76zdn.js";
|
|
26
|
+
|
|
27
|
+
// src/browser.ts
|
|
28
|
+
function createUnsupportedApiError(name) {
|
|
29
|
+
return new Error(`${name} is not available in worker/browser bundles. ` + `Import it from the Node-side devflare package entry instead.`);
|
|
30
|
+
}
|
|
31
|
+
function unsupportedFunction(name) {
|
|
32
|
+
return (..._args) => {
|
|
33
|
+
throw createUnsupportedApiError(name);
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function createUnsupportedObject(name) {
|
|
37
|
+
return new Proxy({}, {
|
|
38
|
+
get() {
|
|
39
|
+
throw createUnsupportedApiError(name);
|
|
40
|
+
},
|
|
41
|
+
has() {
|
|
42
|
+
return false;
|
|
43
|
+
},
|
|
44
|
+
ownKeys() {
|
|
45
|
+
return [];
|
|
46
|
+
},
|
|
47
|
+
getOwnPropertyDescriptor() {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
async function loadConfig(..._args) {
|
|
53
|
+
throw createUnsupportedApiError("loadConfig");
|
|
54
|
+
}
|
|
55
|
+
var compileConfig = unsupportedFunction("compileConfig");
|
|
56
|
+
var stringifyConfig = unsupportedFunction("stringifyConfig");
|
|
57
|
+
var configSchema = createUnsupportedObject("configSchema");
|
|
58
|
+
|
|
59
|
+
class ConfigNotFoundError extends Error {
|
|
60
|
+
code = "CONFIG_NOT_FOUND";
|
|
61
|
+
constructor(..._args) {
|
|
62
|
+
super(createUnsupportedApiError("ConfigNotFoundError").message);
|
|
63
|
+
this.name = "ConfigNotFoundError";
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
class ConfigValidationError extends Error {
|
|
68
|
+
code = "CONFIG_VALIDATION_ERROR";
|
|
69
|
+
constructor(..._args) {
|
|
70
|
+
super(createUnsupportedApiError("ConfigValidationError").message);
|
|
71
|
+
this.name = "ConfigValidationError";
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
var runCli = unsupportedFunction("runCli");
|
|
75
|
+
var parseArgs = unsupportedFunction("parseArgs");
|
|
76
|
+
var findDurableObjectClasses = unsupportedFunction("findDurableObjectClasses");
|
|
77
|
+
var findDurableObjectClassesDetailed = unsupportedFunction("findDurableObjectClassesDetailed");
|
|
78
|
+
var generateWrapper = unsupportedFunction("generateWrapper");
|
|
79
|
+
var transformDurableObject = unsupportedFunction("transformDurableObject");
|
|
80
|
+
var transformWorkerEntrypoint = unsupportedFunction("transformWorkerEntrypoint");
|
|
81
|
+
var findExportedFunctions = unsupportedFunction("findExportedFunctions");
|
|
82
|
+
var shouldTransformWorker = unsupportedFunction("shouldTransformWorker");
|
|
83
|
+
var generateRpcInterface = unsupportedFunction("generateRpcInterface");
|
|
84
|
+
var startMiniflare = unsupportedFunction("startMiniflare");
|
|
85
|
+
var startMiniflareFromConfig = unsupportedFunction("startMiniflareFromConfig");
|
|
86
|
+
var getMiniflare = unsupportedFunction("getMiniflare");
|
|
87
|
+
var stopMiniflare = unsupportedFunction("stopMiniflare");
|
|
88
|
+
var gateway = createUnsupportedObject("gateway");
|
|
89
|
+
var createTestContext = unsupportedFunction("createTestContext");
|
|
90
|
+
var createMockTestContext = unsupportedFunction("createMockTestContext");
|
|
91
|
+
var createMockKV = unsupportedFunction("createMockKV");
|
|
92
|
+
var createMockD1 = unsupportedFunction("createMockD1");
|
|
93
|
+
var createMockR2 = unsupportedFunction("createMockR2");
|
|
94
|
+
var createMockQueue = unsupportedFunction("createMockQueue");
|
|
95
|
+
var createMockEnv = unsupportedFunction("createMockEnv");
|
|
96
|
+
var withTestContext = unsupportedFunction("withTestContext");
|
|
97
|
+
var createBridgeTestContext = unsupportedFunction("createBridgeTestContext");
|
|
98
|
+
var stopBridgeTestContext = unsupportedFunction("stopBridgeTestContext");
|
|
99
|
+
var getBridgeTestContext = unsupportedFunction("getBridgeTestContext");
|
|
100
|
+
var testEnv = createUnsupportedObject("testEnv");
|
|
101
|
+
export {
|
|
102
|
+
workerName,
|
|
103
|
+
withTestContext,
|
|
104
|
+
transformWorkerEntrypoint,
|
|
105
|
+
transformDurableObject,
|
|
106
|
+
testEnv,
|
|
107
|
+
stringifyConfig,
|
|
108
|
+
stopMiniflare,
|
|
109
|
+
stopBridgeTestContext,
|
|
110
|
+
startMiniflareFromConfig,
|
|
111
|
+
startMiniflare,
|
|
112
|
+
shouldTransformWorker,
|
|
113
|
+
setBindingHints,
|
|
114
|
+
serviceBinding,
|
|
115
|
+
runCli,
|
|
116
|
+
resolveRef,
|
|
117
|
+
ref,
|
|
118
|
+
parseArgs,
|
|
119
|
+
loadConfig,
|
|
120
|
+
initEnv,
|
|
121
|
+
getMiniflare,
|
|
122
|
+
getDurableObjectOptions,
|
|
123
|
+
getClient,
|
|
124
|
+
getBridgeTestContext,
|
|
125
|
+
generateWrapper,
|
|
126
|
+
generateRpcInterface,
|
|
127
|
+
gateway,
|
|
128
|
+
findExportedFunctions,
|
|
129
|
+
findDurableObjectClassesDetailed,
|
|
130
|
+
findDurableObjectClasses,
|
|
131
|
+
env,
|
|
132
|
+
durableObject,
|
|
133
|
+
defineConfig,
|
|
134
|
+
defineConfig as default,
|
|
135
|
+
createTestContext,
|
|
136
|
+
createMockTestContext,
|
|
137
|
+
createMockR2,
|
|
138
|
+
createMockQueue,
|
|
139
|
+
createMockKV,
|
|
140
|
+
createMockEnv,
|
|
141
|
+
createMockD1,
|
|
142
|
+
createEnvProxy,
|
|
143
|
+
createBridgeTestContext,
|
|
144
|
+
configSchema,
|
|
145
|
+
compileConfig,
|
|
146
|
+
ConfigValidationError,
|
|
147
|
+
ConfigNotFoundError,
|
|
148
|
+
BridgeClient
|
|
149
|
+
};
|
|
@@ -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;AAc3D,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;AAmqBD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,
|
|
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;AAc3D,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;AAmqBD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAmuBpE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// src/workerName.ts
|
|
2
|
+
var workerName = (() => {
|
|
3
|
+
if (typeof __DEVFLARE_WORKER_NAME__ !== "undefined") {
|
|
4
|
+
return __DEVFLARE_WORKER_NAME__;
|
|
5
|
+
}
|
|
6
|
+
if (typeof process !== "undefined" && process.env?.DEVFLARE_WORKER_NAME) {
|
|
7
|
+
return process.env.DEVFLARE_WORKER_NAME;
|
|
8
|
+
}
|
|
9
|
+
return "unknown";
|
|
10
|
+
})();
|
|
11
|
+
|
|
12
|
+
export { workerName };
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getContextOrNull
|
|
3
|
+
} from "./index-npc1c8jx.js";
|
|
4
|
+
import {
|
|
5
|
+
bridgeEnv
|
|
6
|
+
} from "./index-ccrh4w3t.js";
|
|
7
|
+
|
|
8
|
+
// src/env.ts
|
|
9
|
+
var testContextEnv = null;
|
|
10
|
+
var testContextDispose = null;
|
|
11
|
+
function __setTestContext(envBindings, dispose) {
|
|
12
|
+
testContextEnv = envBindings;
|
|
13
|
+
testContextDispose = dispose;
|
|
14
|
+
}
|
|
15
|
+
function __clearTestContext() {
|
|
16
|
+
testContextEnv = null;
|
|
17
|
+
testContextDispose = null;
|
|
18
|
+
}
|
|
19
|
+
var env = new Proxy({}, {
|
|
20
|
+
get(_target, prop) {
|
|
21
|
+
if (prop === "dispose") {
|
|
22
|
+
return async () => {
|
|
23
|
+
if (testContextDispose) {
|
|
24
|
+
await testContextDispose();
|
|
25
|
+
__clearTestContext();
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
const ctx = getContextOrNull();
|
|
30
|
+
if (ctx?.env) {
|
|
31
|
+
return ctx.env[prop];
|
|
32
|
+
}
|
|
33
|
+
if (testContextEnv) {
|
|
34
|
+
return testContextEnv[prop];
|
|
35
|
+
}
|
|
36
|
+
return bridgeEnv[prop];
|
|
37
|
+
},
|
|
38
|
+
has(_target, prop) {
|
|
39
|
+
if (prop === "dispose")
|
|
40
|
+
return true;
|
|
41
|
+
const ctx = getContextOrNull();
|
|
42
|
+
if (ctx?.env) {
|
|
43
|
+
return prop in ctx.env;
|
|
44
|
+
}
|
|
45
|
+
if (testContextEnv) {
|
|
46
|
+
return prop in testContextEnv;
|
|
47
|
+
}
|
|
48
|
+
return prop in bridgeEnv;
|
|
49
|
+
},
|
|
50
|
+
ownKeys(_target) {
|
|
51
|
+
const ctx = getContextOrNull();
|
|
52
|
+
if (ctx?.env) {
|
|
53
|
+
return Reflect.ownKeys(ctx.env);
|
|
54
|
+
}
|
|
55
|
+
if (testContextEnv) {
|
|
56
|
+
return Reflect.ownKeys(testContextEnv);
|
|
57
|
+
}
|
|
58
|
+
return Reflect.ownKeys(bridgeEnv);
|
|
59
|
+
},
|
|
60
|
+
getOwnPropertyDescriptor(_target, prop) {
|
|
61
|
+
if (prop === "dispose") {
|
|
62
|
+
return { configurable: true, enumerable: false, writable: false };
|
|
63
|
+
}
|
|
64
|
+
const ctx = getContextOrNull();
|
|
65
|
+
const source = ctx?.env ?? testContextEnv ?? bridgeEnv;
|
|
66
|
+
return Reflect.getOwnPropertyDescriptor(source, prop);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
export { __setTestContext, __clearTestContext, env };
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
normalizeDOBinding
|
|
3
|
-
} from "./index-hcex3rgh.js";
|
|
4
|
-
import {
|
|
5
|
-
__require
|
|
6
|
-
} from "./index-37x76zdn.js";
|
|
7
|
-
|
|
8
1
|
// src/bridge/protocol.ts
|
|
9
2
|
var BinaryKind = {
|
|
10
3
|
StreamChunk: 1,
|
|
@@ -1137,277 +1130,4 @@ function setBindingHints(hints) {
|
|
|
1137
1130
|
globalEnvProxy = null;
|
|
1138
1131
|
}
|
|
1139
1132
|
|
|
1140
|
-
|
|
1141
|
-
function generateGatewayScript() {
|
|
1142
|
-
return `
|
|
1143
|
-
// Gateway Worker — Provides RPC access to all bindings
|
|
1144
|
-
export default {
|
|
1145
|
-
async fetch(request, env, ctx) {
|
|
1146
|
-
const url = new URL(request.url)
|
|
1147
|
-
|
|
1148
|
-
// Health check
|
|
1149
|
-
if (url.pathname === '/_devflare/health') {
|
|
1150
|
-
return new Response(JSON.stringify({ status: 'ok', bindings: Object.keys(env) }), {
|
|
1151
|
-
headers: { 'Content-Type': 'application/json' }
|
|
1152
|
-
})
|
|
1153
|
-
}
|
|
1154
|
-
|
|
1155
|
-
// RPC endpoint
|
|
1156
|
-
if (url.pathname === '/_devflare/rpc' && request.method === 'POST') {
|
|
1157
|
-
try {
|
|
1158
|
-
const { method, params } = await request.json()
|
|
1159
|
-
const result = await executeRpc(env, method, params)
|
|
1160
|
-
return new Response(JSON.stringify({ ok: true, result }), {
|
|
1161
|
-
headers: { 'Content-Type': 'application/json' }
|
|
1162
|
-
})
|
|
1163
|
-
} catch (error) {
|
|
1164
|
-
return new Response(JSON.stringify({
|
|
1165
|
-
ok: false,
|
|
1166
|
-
error: { code: 'RPC_ERROR', message: error.message }
|
|
1167
|
-
}), {
|
|
1168
|
-
status: 500,
|
|
1169
|
-
headers: { 'Content-Type': 'application/json' }
|
|
1170
|
-
})
|
|
1171
|
-
}
|
|
1172
|
-
}
|
|
1173
|
-
|
|
1174
|
-
return new Response('Devflare Gateway', { status: 200 })
|
|
1175
|
-
}
|
|
1176
|
-
}
|
|
1177
|
-
|
|
1178
|
-
async function executeRpc(env, method, params) {
|
|
1179
|
-
const [bindingName, ...methodPath] = method.split('.')
|
|
1180
|
-
const binding = env[bindingName]
|
|
1181
|
-
|
|
1182
|
-
if (!binding) {
|
|
1183
|
-
throw new Error(\`Binding "\${bindingName}" not found\`)
|
|
1184
|
-
}
|
|
1185
|
-
|
|
1186
|
-
const methodName = methodPath.join('.')
|
|
1187
|
-
|
|
1188
|
-
// KV operations
|
|
1189
|
-
if (methodName === 'get') return binding.get(params[0], params[1])
|
|
1190
|
-
if (methodName === 'put') return binding.put(params[0], params[1], params[2])
|
|
1191
|
-
if (methodName === 'delete') return binding.delete(params[0])
|
|
1192
|
-
if (methodName === 'list') return binding.list(params[0])
|
|
1193
|
-
if (methodName === 'getWithMetadata') return binding.getWithMetadata(params[0], params[1])
|
|
1194
|
-
|
|
1195
|
-
// R2 operations
|
|
1196
|
-
if (methodName === 'head') return binding.head(params[0])
|
|
1197
|
-
if (methodName === 'r2.get') return serializeR2Object(await binding.get(params[0], params[1]))
|
|
1198
|
-
if (methodName === 'r2.put') return serializeR2Object(await binding.put(params[0], params[1], params[2]))
|
|
1199
|
-
if (methodName === 'r2.delete') return binding.delete(params[0])
|
|
1200
|
-
if (methodName === 'r2.list') return serializeR2Objects(await binding.list(params[0]))
|
|
1201
|
-
|
|
1202
|
-
// D1 operations
|
|
1203
|
-
if (methodName === 'exec') return binding.exec(params[0])
|
|
1204
|
-
if (methodName === 'batch') {
|
|
1205
|
-
const statements = params[0].map(s => binding.prepare(s.sql).bind(...(s.bindings || [])))
|
|
1206
|
-
return binding.batch(statements)
|
|
1207
|
-
}
|
|
1208
|
-
if (methodName.startsWith('stmt.')) {
|
|
1209
|
-
const [, stmtMethod] = methodName.split('.')
|
|
1210
|
-
const [sql, ...bindings] = params
|
|
1211
|
-
const stmt = binding.prepare(sql).bind(...bindings.slice(0, -1))
|
|
1212
|
-
|
|
1213
|
-
if (stmtMethod === 'first') return stmt.first(bindings[bindings.length - 1])
|
|
1214
|
-
if (stmtMethod === 'all') return stmt.all()
|
|
1215
|
-
if (stmtMethod === 'run') return stmt.run()
|
|
1216
|
-
if (stmtMethod === 'raw') return stmt.raw(bindings[bindings.length - 1])
|
|
1217
|
-
}
|
|
1218
|
-
|
|
1219
|
-
// DO operations
|
|
1220
|
-
if (methodName === 'idFromName') {
|
|
1221
|
-
const id = binding.idFromName(params[0])
|
|
1222
|
-
return { __type: 'DOId', hex: id.toString() }
|
|
1223
|
-
}
|
|
1224
|
-
if (methodName === 'idFromString') {
|
|
1225
|
-
const id = binding.idFromString(params[0])
|
|
1226
|
-
return { __type: 'DOId', hex: id.toString() }
|
|
1227
|
-
}
|
|
1228
|
-
if (methodName === 'newUniqueId') {
|
|
1229
|
-
const id = binding.newUniqueId(params[0])
|
|
1230
|
-
return { __type: 'DOId', hex: id.toString() }
|
|
1231
|
-
}
|
|
1232
|
-
if (methodName === 'stub.fetch') {
|
|
1233
|
-
const [, doId, serializedReq] = params
|
|
1234
|
-
const id = binding.idFromString(doId.hex)
|
|
1235
|
-
const stub = binding.get(id)
|
|
1236
|
-
const response = await stub.fetch(new Request(serializedReq.url, {
|
|
1237
|
-
method: serializedReq.method,
|
|
1238
|
-
headers: serializedReq.headers,
|
|
1239
|
-
body: serializedReq.body?.type === 'bytes' ? atob(serializedReq.body.data) : undefined
|
|
1240
|
-
}))
|
|
1241
|
-
return serializeResponse(response)
|
|
1242
|
-
}
|
|
1243
|
-
if (methodName === 'stub.rpc') {
|
|
1244
|
-
// DO RPC: Call a method on the DO instance
|
|
1245
|
-
const [, doId, rpcMethod, rpcParams] = params
|
|
1246
|
-
const id = binding.idFromString(doId.hex)
|
|
1247
|
-
const stub = binding.get(id)
|
|
1248
|
-
|
|
1249
|
-
// Use fetch to call the RPC endpoint
|
|
1250
|
-
const response = await stub.fetch(new Request('http://do/_rpc', {
|
|
1251
|
-
method: 'POST',
|
|
1252
|
-
headers: { 'Content-Type': 'application/json' },
|
|
1253
|
-
body: JSON.stringify({ method: rpcMethod, params: rpcParams })
|
|
1254
|
-
}))
|
|
1255
|
-
|
|
1256
|
-
const result = await response.json()
|
|
1257
|
-
if (!result.ok) throw new Error(result.error?.message || 'RPC failed')
|
|
1258
|
-
return result.result
|
|
1259
|
-
}
|
|
1260
|
-
|
|
1261
|
-
// Queue operations
|
|
1262
|
-
if (methodName === 'send') return binding.send(params[0], params[1])
|
|
1263
|
-
if (methodName === 'sendBatch') return binding.sendBatch(params[0], params[1])
|
|
1264
|
-
|
|
1265
|
-
// Generic fallback
|
|
1266
|
-
if (typeof binding[methodName] === 'function') {
|
|
1267
|
-
return binding[methodName](...params)
|
|
1268
|
-
}
|
|
1269
|
-
|
|
1270
|
-
throw new Error(\`Unknown method: \${method}\`)
|
|
1271
|
-
}
|
|
1272
|
-
|
|
1273
|
-
function serializeResponse(response) {
|
|
1274
|
-
return {
|
|
1275
|
-
status: response.status,
|
|
1276
|
-
statusText: response.statusText,
|
|
1277
|
-
headers: [...response.headers.entries()],
|
|
1278
|
-
body: null // Will be streamed separately for large bodies
|
|
1279
|
-
}
|
|
1280
|
-
}
|
|
1281
|
-
|
|
1282
|
-
function serializeR2Object(obj) {
|
|
1283
|
-
if (!obj) return null
|
|
1284
|
-
return {
|
|
1285
|
-
key: obj.key,
|
|
1286
|
-
version: obj.version,
|
|
1287
|
-
size: obj.size,
|
|
1288
|
-
etag: obj.etag,
|
|
1289
|
-
httpEtag: obj.httpEtag,
|
|
1290
|
-
uploaded: obj.uploaded?.toISOString(),
|
|
1291
|
-
httpMetadata: obj.httpMetadata,
|
|
1292
|
-
customMetadata: obj.customMetadata
|
|
1293
|
-
}
|
|
1294
|
-
}
|
|
1295
|
-
|
|
1296
|
-
function serializeR2Objects(result) {
|
|
1297
|
-
if (!result) return null
|
|
1298
|
-
return {
|
|
1299
|
-
objects: result.objects.map(serializeR2Object),
|
|
1300
|
-
truncated: result.truncated,
|
|
1301
|
-
cursor: result.cursor,
|
|
1302
|
-
delimitedPrefixes: result.delimitedPrefixes
|
|
1303
|
-
}
|
|
1304
|
-
}
|
|
1305
|
-
`;
|
|
1306
|
-
}
|
|
1307
|
-
async function startMiniflare(options = {}) {
|
|
1308
|
-
const { Miniflare, Log, LogLevel } = await import("miniflare");
|
|
1309
|
-
const port = options.port ?? 8787;
|
|
1310
|
-
const persistPath = options.persistPath ?? ".devflare/data";
|
|
1311
|
-
const mfConfig = {
|
|
1312
|
-
modules: true,
|
|
1313
|
-
script: generateGatewayScript(),
|
|
1314
|
-
port,
|
|
1315
|
-
host: "127.0.0.1",
|
|
1316
|
-
log: options.verbose ? new Log(LogLevel.DEBUG) : new Log(LogLevel.WARN),
|
|
1317
|
-
compatibilityDate: options.compatibilityDate ?? "2024-01-01",
|
|
1318
|
-
compatibilityFlags: options.compatibilityFlags ?? []
|
|
1319
|
-
};
|
|
1320
|
-
const hasBindings = (val) => {
|
|
1321
|
-
if (!val)
|
|
1322
|
-
return false;
|
|
1323
|
-
if (Array.isArray(val))
|
|
1324
|
-
return val.length > 0;
|
|
1325
|
-
return Object.keys(val).length > 0;
|
|
1326
|
-
};
|
|
1327
|
-
if (hasBindings(options.kvNamespaces)) {
|
|
1328
|
-
mfConfig.kvNamespaces = options.kvNamespaces;
|
|
1329
|
-
if (options.persist) {
|
|
1330
|
-
mfConfig.kvPersist = `${persistPath}/kv`;
|
|
1331
|
-
}
|
|
1332
|
-
}
|
|
1333
|
-
if (hasBindings(options.r2Buckets)) {
|
|
1334
|
-
mfConfig.r2Buckets = options.r2Buckets;
|
|
1335
|
-
if (options.persist) {
|
|
1336
|
-
mfConfig.r2Persist = `${persistPath}/r2`;
|
|
1337
|
-
}
|
|
1338
|
-
}
|
|
1339
|
-
if (hasBindings(options.d1Databases)) {
|
|
1340
|
-
mfConfig.d1Databases = options.d1Databases;
|
|
1341
|
-
if (options.persist) {
|
|
1342
|
-
mfConfig.d1Persist = `${persistPath}/d1`;
|
|
1343
|
-
}
|
|
1344
|
-
}
|
|
1345
|
-
if (options.durableObjects) {
|
|
1346
|
-
mfConfig.durableObjects = options.durableObjects;
|
|
1347
|
-
if (options.persist) {
|
|
1348
|
-
mfConfig.durableObjectsPersist = `${persistPath}/do`;
|
|
1349
|
-
}
|
|
1350
|
-
}
|
|
1351
|
-
if (options.bindings) {
|
|
1352
|
-
mfConfig.bindings = options.bindings;
|
|
1353
|
-
}
|
|
1354
|
-
if (options.queues?.length) {
|
|
1355
|
-
mfConfig.queueProducers = Object.fromEntries(options.queues.map((q) => [q, { queueName: q }]));
|
|
1356
|
-
}
|
|
1357
|
-
const mf = new Miniflare(mfConfig);
|
|
1358
|
-
await mf.ready;
|
|
1359
|
-
return {
|
|
1360
|
-
ready: Promise.resolve(),
|
|
1361
|
-
async dispose() {
|
|
1362
|
-
await mf.dispose();
|
|
1363
|
-
},
|
|
1364
|
-
async getBindings() {
|
|
1365
|
-
return mf.getBindings();
|
|
1366
|
-
},
|
|
1367
|
-
getKVNamespace: mf.getKVNamespace.bind(mf),
|
|
1368
|
-
getR2Bucket: mf.getR2Bucket.bind(mf),
|
|
1369
|
-
getD1Database: mf.getD1Database.bind(mf),
|
|
1370
|
-
getDurableObjectNamespace: mf.getDurableObjectNamespace.bind(mf),
|
|
1371
|
-
dispatchFetch: mf.dispatchFetch.bind(mf),
|
|
1372
|
-
_mf: mf
|
|
1373
|
-
};
|
|
1374
|
-
}
|
|
1375
|
-
async function startMiniflareFromConfig(config, options = {}) {
|
|
1376
|
-
const bindings = config.bindings ?? {};
|
|
1377
|
-
const mfOptions = {
|
|
1378
|
-
...options,
|
|
1379
|
-
compatibilityDate: config.compatibilityDate,
|
|
1380
|
-
compatibilityFlags: config.compatibilityFlags,
|
|
1381
|
-
kvNamespaces: bindings.kv ? bindings.kv : undefined,
|
|
1382
|
-
r2Buckets: bindings.r2 ? bindings.r2 : undefined,
|
|
1383
|
-
d1Databases: bindings.d1 ? bindings.d1 : undefined,
|
|
1384
|
-
queues: bindings.queues?.consumers?.map((c) => c.queue),
|
|
1385
|
-
bindings: config.vars,
|
|
1386
|
-
durableObjects: bindings.durableObjects ? Object.fromEntries(Object.entries(bindings.durableObjects).map(([bindingName, doConfig]) => {
|
|
1387
|
-
const normalized = normalizeDOBinding(doConfig);
|
|
1388
|
-
return [
|
|
1389
|
-
bindingName,
|
|
1390
|
-
{
|
|
1391
|
-
className: normalized.className,
|
|
1392
|
-
scriptPath: normalized.scriptName
|
|
1393
|
-
}
|
|
1394
|
-
];
|
|
1395
|
-
})) : undefined
|
|
1396
|
-
};
|
|
1397
|
-
return startMiniflare(mfOptions);
|
|
1398
|
-
}
|
|
1399
|
-
var globalMiniflare = null;
|
|
1400
|
-
async function getMiniflare(options) {
|
|
1401
|
-
if (!globalMiniflare) {
|
|
1402
|
-
globalMiniflare = await startMiniflare(options);
|
|
1403
|
-
}
|
|
1404
|
-
return globalMiniflare;
|
|
1405
|
-
}
|
|
1406
|
-
async function stopMiniflare() {
|
|
1407
|
-
if (globalMiniflare) {
|
|
1408
|
-
await globalMiniflare.dispose();
|
|
1409
|
-
globalMiniflare = null;
|
|
1410
|
-
}
|
|
1411
|
-
}
|
|
1412
|
-
|
|
1413
|
-
export { BinaryKind, BinaryFlags, encodeBinaryFrame, decodeBinaryFrame, parseJsonMsg, stringifyJsonMsg, serializeValue, deserializeValue, base64Encode, base64Decode, BridgeClient, getClient, createEnvProxy, bridgeEnv, initEnv, setBindingHints, startMiniflare, startMiniflareFromConfig, getMiniflare, stopMiniflare };
|
|
1133
|
+
export { BinaryKind, BinaryFlags, encodeBinaryFrame, decodeBinaryFrame, parseJsonMsg, stringifyJsonMsg, serializeValue, deserializeValue, base64Encode, base64Decode, BridgeClient, getClient, createEnvProxy, bridgeEnv, initEnv, setBindingHints };
|
|
File without changes
|