devflare 0.0.0 → 1.0.0-next.0

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 (198) hide show
  1. package/README.md +737 -1
  2. package/bin/devflare.js +14 -0
  3. package/dist/account-rvrj687w.js +397 -0
  4. package/dist/ai-dx4fr9jh.js +107 -0
  5. package/dist/bridge/client.d.ts +82 -0
  6. package/dist/bridge/client.d.ts.map +1 -0
  7. package/dist/bridge/index.d.ts +7 -0
  8. package/dist/bridge/index.d.ts.map +1 -0
  9. package/dist/bridge/miniflare.d.ts +70 -0
  10. package/dist/bridge/miniflare.d.ts.map +1 -0
  11. package/dist/bridge/protocol.d.ts +146 -0
  12. package/dist/bridge/protocol.d.ts.map +1 -0
  13. package/dist/bridge/proxy.d.ts +49 -0
  14. package/dist/bridge/proxy.d.ts.map +1 -0
  15. package/dist/bridge/serialization.d.ts +83 -0
  16. package/dist/bridge/serialization.d.ts.map +1 -0
  17. package/dist/bridge/server.d.ts +8 -0
  18. package/dist/bridge/server.d.ts.map +1 -0
  19. package/dist/browser-shim/binding-worker.d.ts +7 -0
  20. package/dist/browser-shim/binding-worker.d.ts.map +1 -0
  21. package/dist/browser-shim/handler.d.ts +21 -0
  22. package/dist/browser-shim/handler.d.ts.map +1 -0
  23. package/dist/browser-shim/index.d.ts +3 -0
  24. package/dist/browser-shim/index.d.ts.map +1 -0
  25. package/dist/browser-shim/server.d.ts +25 -0
  26. package/dist/browser-shim/server.d.ts.map +1 -0
  27. package/dist/browser-shim/worker.d.ts +14 -0
  28. package/dist/browser-shim/worker.d.ts.map +1 -0
  29. package/dist/build-mnf6v8gd.js +53 -0
  30. package/dist/bundler/do-bundler.d.ts +42 -0
  31. package/dist/bundler/do-bundler.d.ts.map +1 -0
  32. package/dist/bundler/index.d.ts +2 -0
  33. package/dist/bundler/index.d.ts.map +1 -0
  34. package/dist/cli/bin.d.ts +3 -0
  35. package/dist/cli/bin.d.ts.map +1 -0
  36. package/dist/cli/colors.d.ts +11 -0
  37. package/dist/cli/colors.d.ts.map +1 -0
  38. package/dist/cli/commands/account.d.ts +4 -0
  39. package/dist/cli/commands/account.d.ts.map +1 -0
  40. package/dist/cli/commands/ai.d.ts +3 -0
  41. package/dist/cli/commands/ai.d.ts.map +1 -0
  42. package/dist/cli/commands/build.d.ts +4 -0
  43. package/dist/cli/commands/build.d.ts.map +1 -0
  44. package/dist/cli/commands/deploy.d.ts +4 -0
  45. package/dist/cli/commands/deploy.d.ts.map +1 -0
  46. package/dist/cli/commands/dev.d.ts +4 -0
  47. package/dist/cli/commands/dev.d.ts.map +1 -0
  48. package/dist/cli/commands/doctor.d.ts +4 -0
  49. package/dist/cli/commands/doctor.d.ts.map +1 -0
  50. package/dist/cli/commands/init.d.ts +4 -0
  51. package/dist/cli/commands/init.d.ts.map +1 -0
  52. package/dist/cli/commands/remote.d.ts +4 -0
  53. package/dist/cli/commands/remote.d.ts.map +1 -0
  54. package/dist/cli/commands/types.d.ts +4 -0
  55. package/dist/cli/commands/types.d.ts.map +1 -0
  56. package/dist/cli/dependencies.d.ts +90 -0
  57. package/dist/cli/dependencies.d.ts.map +1 -0
  58. package/dist/cli/index.d.ts +23 -0
  59. package/dist/cli/index.d.ts.map +1 -0
  60. package/dist/cli/wrangler-auth.d.ts +36 -0
  61. package/dist/cli/wrangler-auth.d.ts.map +1 -0
  62. package/dist/cloudflare/account.d.ts +65 -0
  63. package/dist/cloudflare/account.d.ts.map +1 -0
  64. package/dist/cloudflare/api.d.ts +51 -0
  65. package/dist/cloudflare/api.d.ts.map +1 -0
  66. package/dist/cloudflare/auth.d.ts +35 -0
  67. package/dist/cloudflare/auth.d.ts.map +1 -0
  68. package/dist/cloudflare/index.d.ts +107 -0
  69. package/dist/cloudflare/index.d.ts.map +1 -0
  70. package/dist/cloudflare/index.js +13 -0
  71. package/dist/cloudflare/preferences.d.ts +46 -0
  72. package/dist/cloudflare/preferences.d.ts.map +1 -0
  73. package/dist/cloudflare/pricing.d.ts +15 -0
  74. package/dist/cloudflare/pricing.d.ts.map +1 -0
  75. package/dist/cloudflare/remote-config.d.ts +37 -0
  76. package/dist/cloudflare/remote-config.d.ts.map +1 -0
  77. package/dist/cloudflare/types.d.ts +161 -0
  78. package/dist/cloudflare/types.d.ts.map +1 -0
  79. package/dist/cloudflare/usage.d.ts +77 -0
  80. package/dist/cloudflare/usage.d.ts.map +1 -0
  81. package/dist/config/compiler.d.ts +146 -0
  82. package/dist/config/compiler.d.ts.map +1 -0
  83. package/dist/config/define.d.ts +44 -0
  84. package/dist/config/define.d.ts.map +1 -0
  85. package/dist/config/index.d.ts +6 -0
  86. package/dist/config/index.d.ts.map +1 -0
  87. package/dist/config/loader.d.ts +52 -0
  88. package/dist/config/loader.d.ts.map +1 -0
  89. package/dist/config/ref.d.ts +160 -0
  90. package/dist/config/ref.d.ts.map +1 -0
  91. package/dist/config/schema.d.ts +3318 -0
  92. package/dist/config/schema.d.ts.map +1 -0
  93. package/dist/decorators/durable-object.d.ts +59 -0
  94. package/dist/decorators/durable-object.d.ts.map +1 -0
  95. package/dist/decorators/index.d.ts +3 -0
  96. package/dist/decorators/index.d.ts.map +1 -0
  97. package/dist/decorators/index.js +9 -0
  98. package/dist/deploy-nhceck39.js +70 -0
  99. package/dist/dev-qnxet3j9.js +2096 -0
  100. package/dist/dev-server/index.d.ts +2 -0
  101. package/dist/dev-server/index.d.ts.map +1 -0
  102. package/dist/dev-server/server.d.ts +30 -0
  103. package/dist/dev-server/server.d.ts.map +1 -0
  104. package/dist/doctor-e8fy6fj5.js +186 -0
  105. package/dist/durable-object-t4kbb0yt.js +13 -0
  106. package/dist/env.d.ts +48 -0
  107. package/dist/env.d.ts.map +1 -0
  108. package/dist/index-07q6yxyc.js +168 -0
  109. package/dist/index-1xpj0m4r.js +57 -0
  110. package/dist/index-37x76zdn.js +4 -0
  111. package/dist/index-3t6rypgc.js +13 -0
  112. package/dist/index-67qcae0f.js +183 -0
  113. package/dist/index-a855bdsx.js +18 -0
  114. package/dist/index-d8bdkx2h.js +109 -0
  115. package/dist/index-ep3445yc.js +2225 -0
  116. package/dist/index-gz1gndna.js +307 -0
  117. package/dist/index-hcex3rgh.js +266 -0
  118. package/dist/index-m2q41jwa.js +462 -0
  119. package/dist/index-n7rs26ft.js +77 -0
  120. package/dist/index-pf5s73n9.js +1413 -0
  121. package/dist/index-rbht7m9r.js +36 -0
  122. package/dist/index-tfyxa77h.js +850 -0
  123. package/dist/index-tk6ej9dj.js +94 -0
  124. package/dist/index-z14anrqp.js +226 -0
  125. package/dist/index.d.ts +13 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +298 -0
  128. package/dist/init-f9mgmew3.js +186 -0
  129. package/dist/remote-q59qk463.js +97 -0
  130. package/dist/runtime/context.d.ts +46 -0
  131. package/dist/runtime/context.d.ts.map +1 -0
  132. package/dist/runtime/exports.d.ts +118 -0
  133. package/dist/runtime/exports.d.ts.map +1 -0
  134. package/dist/runtime/index.d.ts +4 -0
  135. package/dist/runtime/index.d.ts.map +1 -0
  136. package/dist/runtime/index.js +111 -0
  137. package/dist/runtime/middleware.d.ts +82 -0
  138. package/dist/runtime/middleware.d.ts.map +1 -0
  139. package/dist/runtime/validation.d.ts +37 -0
  140. package/dist/runtime/validation.d.ts.map +1 -0
  141. package/dist/sveltekit/index.d.ts +2 -0
  142. package/dist/sveltekit/index.d.ts.map +1 -0
  143. package/dist/sveltekit/index.js +182 -0
  144. package/dist/sveltekit/platform.d.ts +141 -0
  145. package/dist/sveltekit/platform.d.ts.map +1 -0
  146. package/dist/test/bridge-context.d.ts +73 -0
  147. package/dist/test/bridge-context.d.ts.map +1 -0
  148. package/dist/test/cf.d.ts +130 -0
  149. package/dist/test/cf.d.ts.map +1 -0
  150. package/dist/test/email.d.ts +75 -0
  151. package/dist/test/email.d.ts.map +1 -0
  152. package/dist/test/index.d.ts +22 -0
  153. package/dist/test/index.d.ts.map +1 -0
  154. package/dist/test/index.js +71 -0
  155. package/dist/test/multi-worker-context.d.ts +114 -0
  156. package/dist/test/multi-worker-context.d.ts.map +1 -0
  157. package/dist/test/queue.d.ts +74 -0
  158. package/dist/test/queue.d.ts.map +1 -0
  159. package/dist/test/remote-ai.d.ts +6 -0
  160. package/dist/test/remote-ai.d.ts.map +1 -0
  161. package/dist/test/remote-vectorize.d.ts +6 -0
  162. package/dist/test/remote-vectorize.d.ts.map +1 -0
  163. package/dist/test/resolve-service-bindings.d.ts +68 -0
  164. package/dist/test/resolve-service-bindings.d.ts.map +1 -0
  165. package/dist/test/scheduled.d.ts +58 -0
  166. package/dist/test/scheduled.d.ts.map +1 -0
  167. package/dist/test/should-skip.d.ts +50 -0
  168. package/dist/test/should-skip.d.ts.map +1 -0
  169. package/dist/test/simple-context.d.ts +43 -0
  170. package/dist/test/simple-context.d.ts.map +1 -0
  171. package/dist/test/tail.d.ts +86 -0
  172. package/dist/test/tail.d.ts.map +1 -0
  173. package/dist/test/utilities.d.ts +99 -0
  174. package/dist/test/utilities.d.ts.map +1 -0
  175. package/dist/test/worker.d.ts +76 -0
  176. package/dist/test/worker.d.ts.map +1 -0
  177. package/dist/transform/durable-object.d.ts +46 -0
  178. package/dist/transform/durable-object.d.ts.map +1 -0
  179. package/dist/transform/index.d.ts +3 -0
  180. package/dist/transform/index.d.ts.map +1 -0
  181. package/dist/transform/worker-entrypoint.d.ts +66 -0
  182. package/dist/transform/worker-entrypoint.d.ts.map +1 -0
  183. package/dist/types-5nyrz1sz.js +454 -0
  184. package/dist/utils/entrypoint-discovery.d.ts +29 -0
  185. package/dist/utils/entrypoint-discovery.d.ts.map +1 -0
  186. package/dist/utils/glob.d.ts +33 -0
  187. package/dist/utils/glob.d.ts.map +1 -0
  188. package/dist/utils/resolve-package.d.ts +10 -0
  189. package/dist/utils/resolve-package.d.ts.map +1 -0
  190. package/dist/vite/index.d.ts +3 -0
  191. package/dist/vite/index.d.ts.map +1 -0
  192. package/dist/vite/index.js +339 -0
  193. package/dist/vite/plugin.d.ts +138 -0
  194. package/dist/vite/plugin.d.ts.map +1 -0
  195. package/dist/worker-entrypoint-m9th0rg0.js +13 -0
  196. package/dist/workerName.d.ts +17 -0
  197. package/dist/workerName.d.ts.map +1 -0
  198. package/package.json +111 -1
@@ -0,0 +1,22 @@
1
+ export { createTestContext, env, type DevflareEnv, type TestEnv } from './simple-context';
2
+ export { cf } from './cf';
3
+ export { email } from './email';
4
+ export { queue } from './queue';
5
+ export { scheduled } from './scheduled';
6
+ export { worker } from './worker';
7
+ export { tail } from './tail';
8
+ export type { EmailSendOptions, ReceivedEmail, EmailReceiveCallback } from './email';
9
+ export type { QueueMessageOptions, QueueTriggerResult } from './queue';
10
+ export type { ScheduledTriggerOptions, ScheduledTriggerResult } from './scheduled';
11
+ export type { WorkerFetchOptions } from './worker';
12
+ export type { TraceItemOptions, TailTriggerResult } from './tail';
13
+ export { hasServiceBindings, resolveServiceBindings, hasCrossWorkerDOs, resolveDOBindings, clearBundleCache, type ResolvedWorker, type ServiceBindingResolution, type DOBindingResolution } from './resolve-service-bindings';
14
+ export {
15
+ /** @deprecated Use createTestContext() instead */
16
+ createMultiWorkerContext,
17
+ /** @deprecated Use worker.ts pattern instead */
18
+ createEntrypointScript, type WorkerConfig, type MultiWorkerContextOptions, type MultiWorkerContext } from './multi-worker-context';
19
+ export { shouldSkip, isRemoteModeEnabled } from './should-skip';
20
+ export { createMockTestContext, createMockKV, createMockD1, createMockR2, createMockQueue, createMockEnv, withTestContext, type TestContext, type TestContextOptions, type MockEnvOptions } from './utilities';
21
+ export { createBridgeTestContext, stopBridgeTestContext, getBridgeTestContext, testEnv, type BridgeTestContext, type BridgeTestContextOptions } from './bridge-context';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,iBAAiB,EACjB,GAAG,EACH,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAA;AACzB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAG7B,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACpF,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AACtE,YAAY,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAClF,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAClD,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAGjE,OAAO,EACN,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,MAAM,4BAA4B,CAAA;AAInC,OAAO;AACN,kDAAkD;AAClD,wBAAwB;AACxB,gDAAgD;AAChD,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EACvB,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAG/D,OAAO,EACN,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,aAAa,EACb,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,MAAM,aAAa,CAAA;AAGpB,OAAO,EACN,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,OAAO,EACP,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,71 @@
1
+ import {
2
+ cf,
3
+ clearBundleCache,
4
+ createBridgeTestContext,
5
+ createEntrypointScript,
6
+ createMockD1,
7
+ createMockEnv,
8
+ createMockKV,
9
+ createMockQueue,
10
+ createMockR2,
11
+ createMockTestContext,
12
+ createMultiWorkerContext,
13
+ createTestContext,
14
+ email,
15
+ env,
16
+ getBridgeTestContext,
17
+ hasCrossWorkerDOs,
18
+ hasServiceBindings,
19
+ isRemoteModeEnabled,
20
+ queue,
21
+ resolveDOBindings,
22
+ resolveServiceBindings,
23
+ scheduled,
24
+ shouldSkip,
25
+ stopBridgeTestContext,
26
+ tail,
27
+ testEnv,
28
+ withTestContext,
29
+ worker
30
+ } from "../index-ep3445yc.js";
31
+ import"../index-z14anrqp.js";
32
+ import"../index-tk6ej9dj.js";
33
+ import"../index-d8bdkx2h.js";
34
+ import"../index-rbht7m9r.js";
35
+ import"../index-gz1gndna.js";
36
+ import"../index-pf5s73n9.js";
37
+ import"../index-07q6yxyc.js";
38
+ import"../index-67qcae0f.js";
39
+ import"../index-hcex3rgh.js";
40
+ import"../index-tfyxa77h.js";
41
+ import"../index-37x76zdn.js";
42
+ export {
43
+ worker,
44
+ withTestContext,
45
+ testEnv,
46
+ tail,
47
+ stopBridgeTestContext,
48
+ shouldSkip,
49
+ scheduled,
50
+ resolveServiceBindings,
51
+ resolveDOBindings,
52
+ queue,
53
+ isRemoteModeEnabled,
54
+ hasServiceBindings,
55
+ hasCrossWorkerDOs,
56
+ getBridgeTestContext,
57
+ env,
58
+ email,
59
+ createTestContext,
60
+ createMultiWorkerContext,
61
+ createMockTestContext,
62
+ createMockR2,
63
+ createMockQueue,
64
+ createMockKV,
65
+ createMockEnv,
66
+ createMockD1,
67
+ createEntrypointScript,
68
+ createBridgeTestContext,
69
+ clearBundleCache,
70
+ cf
71
+ };
@@ -0,0 +1,114 @@
1
+ import type { Miniflare } from 'miniflare';
2
+ /**
3
+ * Configuration for a worker in a multi-worker test
4
+ */
5
+ export interface WorkerConfig {
6
+ /** Worker name (used for service binding references) */
7
+ name: string;
8
+ /** Worker script code as string */
9
+ script: string;
10
+ /** Whether the script uses ES modules (default: true) */
11
+ modules?: boolean;
12
+ /** Compatibility date (default: '2025-01-01') */
13
+ compatibilityDate?: string;
14
+ /**
15
+ * Service bindings to other workers
16
+ * Key: binding name, Value: worker name or { name, entrypoint }
17
+ */
18
+ serviceBindings?: Record<string, string | {
19
+ name: string;
20
+ entrypoint: string;
21
+ }>;
22
+ }
23
+ /**
24
+ * Options for creating a multi-worker test context
25
+ */
26
+ export interface MultiWorkerContextOptions {
27
+ /** Array of worker configurations */
28
+ workers: WorkerConfig[];
29
+ /**
30
+ * Name of the primary worker (receives HTTP requests)
31
+ * Defaults to first worker in the array
32
+ */
33
+ primary?: string;
34
+ }
35
+ /**
36
+ * Result of creating a multi-worker test context
37
+ */
38
+ export interface MultiWorkerContext<TEnv = Record<string, unknown>> {
39
+ /** Miniflare instance */
40
+ mf: Miniflare;
41
+ /** Environment bindings from the primary worker */
42
+ env: TEnv;
43
+ /** Dispatch a fetch request to the primary worker */
44
+ fetch: (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
45
+ /** Dispose of the context (cleanup) */
46
+ dispose: () => Promise<void>;
47
+ }
48
+ /**
49
+ * @deprecated Use `createTestContext()` instead. It now automatically detects service bindings
50
+ * from `ref()` metadata in your devflare.config.ts and sets up multi-worker Miniflare.
51
+ *
52
+ * Create a multi-worker test context for testing RPC between workers.
53
+ *
54
+ * @example
55
+ * ```ts
56
+ * const gatewayScript = `
57
+ * export default {
58
+ * async fetch(request, env) {
59
+ * const sum = await env.MATH.add(1, 2)
60
+ * return Response.json({ sum })
61
+ * }
62
+ * }
63
+ * `
64
+ *
65
+ * const mathScript = `
66
+ * import { WorkerEntrypoint } from 'cloudflare:workers'
67
+ * export class MathService extends WorkerEntrypoint {
68
+ * add(a, b) { return a + b }
69
+ * }
70
+ * `
71
+ *
72
+ * const ctx = await createMultiWorkerContext({
73
+ * workers: [
74
+ * { name: 'gateway', script: gatewayScript, serviceBindings: { MATH: { name: 'math', entrypoint: 'MathService' } } },
75
+ * { name: 'math', script: mathScript }
76
+ * ],
77
+ * primary: 'gateway'
78
+ * })
79
+ *
80
+ * // Direct RPC test
81
+ * const sum = await ctx.env.MATH.add(1, 2)
82
+ * expect(sum).toBe(3)
83
+ *
84
+ * // HTTP test (gateway using RPC internally)
85
+ * const response = await ctx.fetch('http://localhost/')
86
+ * const data = await response.json()
87
+ * expect(data.sum).toBe(3)
88
+ *
89
+ * await ctx.dispose()
90
+ * ```
91
+ */
92
+ export declare function createMultiWorkerContext<TEnv = Record<string, unknown>>(options: MultiWorkerContextOptions): Promise<MultiWorkerContext<TEnv>>;
93
+ /**
94
+ * @deprecated Use `worker.ts` files with exported functions instead. devflare automatically
95
+ * transforms these into WorkerEntrypoint classes during bundling.
96
+ *
97
+ * Helper to create a WorkerEntrypoint class script from exported functions.
98
+ * Use this when you want to test against the transformed version of a worker.ts file.
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * const script = createEntrypointScript('MathService', {
103
+ * add: '(a, b) { return a + b }',
104
+ * multiply: '(a, b) { return a * b }'
105
+ * })
106
+ * // Result: import { WorkerEntrypoint } from 'cloudflare:workers'
107
+ * // export class MathService extends WorkerEntrypoint {
108
+ * // add(a, b) { return a + b }
109
+ * // multiply(a, b) { return a * b }
110
+ * // }
111
+ * ```
112
+ */
113
+ export declare function createEntrypointScript(className: string, methods: Record<string, string>): string;
114
+ //# sourceMappingURL=multi-worker-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-worker-context.d.ts","sourceRoot":"","sources":["../../src/test/multi-worker-context.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAM1C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAA;IAEZ,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAA;IAEd,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC/E;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACzC,qCAAqC;IACrC,OAAO,EAAE,YAAY,EAAE,CAAA;IAEvB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjE,yBAAyB;IACzB,EAAE,EAAE,SAAS,CAAA;IAEb,mDAAmD;IACnD,GAAG,EAAE,IAAI,CAAA;IAET,qDAAqD;IACrD,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IAE/E,uCAAuC;IACvC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5B;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5E,OAAO,EAAE,yBAAyB,GAChC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAiEnC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CACrC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAWR"}
@@ -0,0 +1,74 @@
1
+ export interface QueueMessageOptions<T = unknown> {
2
+ /** Unique message ID (auto-generated if not provided) */
3
+ id?: string;
4
+ /** Message body */
5
+ body: T;
6
+ /** Timestamp when message was enqueued (defaults to now) */
7
+ timestamp?: Date;
8
+ /** Number of times this message has been retried */
9
+ attempts?: number;
10
+ }
11
+ export interface QueueTriggerResult {
12
+ /** Messages that were acknowledged */
13
+ acked: string[];
14
+ /** Messages that were retried */
15
+ retried: string[];
16
+ /** Messages that were explicitly failed with noRetry */
17
+ failed: string[];
18
+ /** Total messages processed */
19
+ total: number;
20
+ }
21
+ /**
22
+ * Configure the queue test helper
23
+ * @internal Called by createTestContext to set up handler path and env
24
+ */
25
+ export declare function configureQueue(options: {
26
+ handlerPath: string | null;
27
+ configDir: string;
28
+ getEnv: () => Record<string, unknown>;
29
+ }): void;
30
+ /**
31
+ * Reset queue helper state
32
+ * @internal Called when test context is disposed
33
+ */
34
+ export declare function resetQueueState(): void;
35
+ /**
36
+ * Trigger the queue handler with a batch of messages.
37
+ * This directly invokes the queue handler function from your config.
38
+ *
39
+ * @param messages - Array of message options or bodies
40
+ * @returns Result object with acked/retried/failed message IDs
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * // Trigger with message bodies (IDs auto-generated)
45
+ * const result = await cf.queue.trigger([
46
+ * { type: 'process', data: { x: 1 } },
47
+ * { type: 'cleanup', data: {} }
48
+ * ])
49
+ *
50
+ * // Trigger with full message options
51
+ * const result = await cf.queue.trigger([
52
+ * { id: 'msg-1', body: { type: 'process' }, attempts: 2 }
53
+ * ])
54
+ * ```
55
+ */
56
+ declare function trigger<T = unknown>(messages: Array<QueueMessageOptions<T> | T>): Promise<QueueTriggerResult>;
57
+ /**
58
+ * Convenience method to trigger the queue handler with a single message.
59
+ *
60
+ * @param message - Message body or options
61
+ * @returns Result object
62
+ *
63
+ * @example
64
+ * ```ts
65
+ * await cf.queue.send({ type: 'process', data: { x: 1 } })
66
+ * ```
67
+ */
68
+ declare function send<T = unknown>(message: QueueMessageOptions<T> | T): Promise<QueueTriggerResult>;
69
+ export declare const queue: {
70
+ trigger: typeof trigger;
71
+ send: typeof send;
72
+ };
73
+ export {};
74
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/test/queue.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,mBAAmB,CAAC,CAAC,GAAG,OAAO;IAC/C,yDAAyD;IACzD,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,mBAAmB;IACnB,IAAI,EAAE,CAAC,CAAA;IACP,4DAA4D;IAC5D,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,kBAAkB;IAClC,sCAAsC;IACtC,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,iCAAiC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,wDAAwD;IACxD,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAA;CACb;AAcD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACvC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC,GAAG,IAAI,CAIP;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAItC;AA+DD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,iBAAe,OAAO,CAAC,CAAC,GAAG,OAAO,EACjC,QAAQ,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GACzC,OAAO,CAAC,kBAAkB,CAAC,CAuF7B;AAED;;;;;;;;;;GAUG;AACH,iBAAe,IAAI,CAAC,CAAC,GAAG,OAAO,EAC9B,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAE7B;AAMD,eAAO,MAAM,KAAK;;;CAGjB,CAAA"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Creates a remote AI binding that calls Cloudflare's REST API.
3
+ * Matches the Workers AI binding interface.
4
+ */
5
+ export declare function createRemoteAI(accountId?: string): Ai;
6
+ //# sourceMappingURL=remote-ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-ai.d.ts","sourceRoot":"","sources":["../../src/test/remote-ai.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,EAAE,CAqErD"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Creates a remote Vectorize binding that calls Cloudflare's REST API.
3
+ * Matches the Workers Vectorize binding interface.
4
+ */
5
+ export declare function createRemoteVectorize(indexName: string, accountId?: string): VectorizeIndex;
6
+ //# sourceMappingURL=remote-vectorize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-vectorize.d.ts","sourceRoot":"","sources":["../../src/test/remote-vectorize.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,CAyJ3F"}
@@ -0,0 +1,68 @@
1
+ import { type DevflareConfig } from '../config';
2
+ /**
3
+ * Clear the bundle cache (useful between test suites)
4
+ */
5
+ export declare function clearBundleCache(): void;
6
+ /**
7
+ * Resolved worker configuration for Miniflare
8
+ */
9
+ export interface ResolvedWorker {
10
+ /** Worker name */
11
+ name: string;
12
+ /** Bundled script code */
13
+ script: string;
14
+ /** Whether the script uses ES modules */
15
+ modules: boolean;
16
+ /** Compatibility date */
17
+ compatibilityDate: string;
18
+ /** Service bindings to other workers */
19
+ serviceBindings?: Record<string, {
20
+ name: string;
21
+ entrypoint?: string;
22
+ }>;
23
+ /** Durable Object bindings (className → wrapperClassName) */
24
+ durableObjects?: Record<string, string>;
25
+ }
26
+ /**
27
+ * Result of resolving service bindings
28
+ */
29
+ export interface ServiceBindingResolution {
30
+ /** All resolved workers (including primary) */
31
+ workers: ResolvedWorker[];
32
+ /** Service bindings for the primary worker */
33
+ primaryServiceBindings: Record<string, {
34
+ name: string;
35
+ entrypoint?: string;
36
+ }>;
37
+ }
38
+ /**
39
+ * Check if a config has service bindings that need multi-worker setup
40
+ */
41
+ export declare function hasServiceBindings(config: DevflareConfig): boolean;
42
+ /**
43
+ * Resolve service bindings from a config
44
+ * Returns the workers array and service bindings for Miniflare setup
45
+ */
46
+ export declare function resolveServiceBindings(config: DevflareConfig, configDir: string): Promise<ServiceBindingResolution>;
47
+ /**
48
+ * Result of resolving cross-worker DO bindings
49
+ */
50
+ export interface DOBindingResolution {
51
+ /** Workers that host cross-worker DOs */
52
+ workers: ResolvedWorker[];
53
+ /** DO bindings for the primary worker (pointing to cross-worker DO hosting workers) */
54
+ crossWorkerDOBindings: Record<string, {
55
+ className: string;
56
+ scriptName: string;
57
+ }>;
58
+ }
59
+ /**
60
+ * Check if a config has cross-worker DO bindings
61
+ */
62
+ export declare function hasCrossWorkerDOs(config: DevflareConfig): boolean;
63
+ /**
64
+ * Resolve cross-worker DO bindings
65
+ * Returns workers to set up and DO bindings for the primary worker
66
+ */
67
+ export declare function resolveDOBindings(config: DevflareConfig, configDir: string): Promise<DOBindingResolution>;
68
+ //# sourceMappingURL=resolve-service-bindings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-service-bindings.d.ts","sourceRoot":"","sources":["../../src/test/resolve-service-bindings.ts"],"names":[],"mappings":"AASA,OAAO,EAAsB,KAAK,cAAc,EAAgD,MAAM,WAAW,CAAA;AAgFjH;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,yCAAyC;IACzC,OAAO,EAAE,OAAO,CAAA;IAChB,yBAAyB;IACzB,iBAAiB,EAAE,MAAM,CAAA;IACzB,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACvE,+DAA6D;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACxC,+CAA+C;IAC/C,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,8CAA8C;IAC9C,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC7E;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAIlE;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC3C,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,wBAAwB,CAAC,CAkDnC;AAwLD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,yCAAyC;IACzC,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,uFAAuF;IACvF,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAChF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAQjE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACtC,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,mBAAmB,CAAC,CAgD9B"}
@@ -0,0 +1,58 @@
1
+ export interface ScheduledTriggerOptions {
2
+ /** Cron expression that triggered this event */
3
+ cron?: string;
4
+ /** Scheduled time (defaults to now) */
5
+ scheduledTime?: number | Date;
6
+ }
7
+ export interface ScheduledTriggerResult {
8
+ /** Whether the handler completed successfully */
9
+ success: boolean;
10
+ /** Error message if handler threw */
11
+ error?: string;
12
+ /** Cron expression used */
13
+ cron: string;
14
+ /** Scheduled time */
15
+ scheduledTime: number;
16
+ }
17
+ /**
18
+ * Configure the scheduled test helper
19
+ * @internal Called by createTestContext to set up handler path and env
20
+ */
21
+ export declare function configureScheduled(options: {
22
+ handlerPath: string | null;
23
+ configDir: string;
24
+ getEnv: () => Record<string, unknown>;
25
+ }): void;
26
+ /**
27
+ * Reset scheduled helper state
28
+ * @internal Called when test context is disposed
29
+ */
30
+ export declare function resetScheduledState(): void;
31
+ /**
32
+ * Trigger the scheduled handler.
33
+ * This directly invokes the scheduled handler function from your config.
34
+ *
35
+ * @param cronOrOptions - Cron expression string or options object
36
+ * @returns Result object with success status
37
+ *
38
+ * @example
39
+ * // Trigger with specific cron expression (every 6 hours)
40
+ * await cf.scheduled.trigger('0 0,6,12,18 * * *')
41
+ *
42
+ * @example
43
+ * // Trigger with options (Weekly Monday at midnight)
44
+ * await cf.scheduled.trigger({
45
+ * cron: '0 0 * * 1',
46
+ * scheduledTime: new Date('2026-01-13T00:00:00Z')
47
+ * })
48
+ *
49
+ * @example
50
+ * // Trigger without cron (just scheduled time)
51
+ * await cf.scheduled.trigger()
52
+ */
53
+ declare function trigger(cronOrOptions?: string | ScheduledTriggerOptions): Promise<ScheduledTriggerResult>;
54
+ export declare const scheduled: {
55
+ trigger: typeof trigger;
56
+ };
57
+ export {};
58
+ //# sourceMappingURL=scheduled.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduled.d.ts","sourceRoot":"","sources":["../../src/test/scheduled.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,uBAAuB;IACvC,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACtC,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAA;IAChB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,qBAAqB;IACrB,aAAa,EAAE,MAAM,CAAA;CACrB;AAcD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC3C,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC,GAAG,IAAI,CAIP;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,iBAAe,OAAO,CACrB,aAAa,CAAC,EAAE,MAAM,GAAG,uBAAuB,GAC9C,OAAO,CAAC,sBAAsB,CAAC,CAkFjC;AAMD,eAAO,MAAM,SAAS;;CAErB,CAAA"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Check if remote mode is explicitly enabled via environment variable.
3
+ * Supports DEVFLARE_REMOTE=1, true, yes
4
+ *
5
+ * @deprecated Use isRemoteModeActive() instead, which also checks stored config.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { isRemoteModeEnabled } from 'devflare/test'
10
+ *
11
+ * if (isRemoteModeEnabled()) {
12
+ * // Use real remote bindings
13
+ * } else {
14
+ * // Use local emulation or skip
15
+ * }
16
+ * ```
17
+ */
18
+ export declare function isRemoteModeEnabled(): boolean;
19
+ /**
20
+ * Skip helper with property-based access for each service.
21
+ * Each property returns a Promise<boolean> where true = SKIP the tests.
22
+ *
23
+ * Usage:
24
+ * ```ts
25
+ * import { shouldSkip } from 'devflare/test'
26
+ *
27
+ * describe.skipIf(shouldSkip.ai)('AI tests', () => {
28
+ * // These tests only run when authenticated and within limits
29
+ * })
30
+ * ```
31
+ */
32
+ export declare const shouldSkip: {
33
+ /** Skip AI tests if not authenticated or over limits */
34
+ readonly ai: Promise<boolean>;
35
+ /** Skip Vectorize tests if not authenticated or over limits */
36
+ readonly vectorize: Promise<boolean>;
37
+ /** Skip Workers tests if not authenticated or over limits */
38
+ readonly workers: Promise<boolean>;
39
+ /** Skip KV tests if not authenticated or over limits */
40
+ readonly kv: Promise<boolean>;
41
+ /** Skip D1 tests if not authenticated or over limits */
42
+ readonly d1: Promise<boolean>;
43
+ /** Skip R2 tests if not authenticated or over limits */
44
+ readonly r2: Promise<boolean>;
45
+ /** Skip Queues tests if not authenticated or over limits */
46
+ readonly queues: Promise<boolean>;
47
+ /** Skip Durable Objects tests if not authenticated or over limits */
48
+ readonly durableObjects: Promise<boolean>;
49
+ };
50
+ //# sourceMappingURL=should-skip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"should-skip.d.ts","sourceRoot":"","sources":["../../src/test/should-skip.ts"],"names":[],"mappings":"AA6BA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAmID;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,UAAU;IACtB,wDAAwD;;IAKxD,+DAA+D;;IAK/D,6DAA6D;;IAK7D,wDAAwD;;IAKxD,wDAAwD;;IAKxD,wDAAwD;;IAKxD,4DAA4D;;IAK5D,qEAAqE;;CAI5D,CAAA"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Create a test context from a devflare config file.
3
+ * This starts Miniflare with the configured bindings and sets up the bridge.
4
+ *
5
+ * @param configPath - Optional path to config file. If not provided, searches
6
+ * upward from the test file for devflare.config.ts.
7
+ * If provided, path is resolved relative to the test file.
8
+ */
9
+ export declare function createTestContext(configPath?: string): Promise<void>;
10
+ /**
11
+ * Test environment interface - extend this in your project's env.d.ts
12
+ * The generated env.d.ts declares `interface Env { ... }` in global scope
13
+ */
14
+ export interface TestEnv {
15
+ dispose(): Promise<void>;
16
+ }
17
+ /**
18
+ * Base environment type - augmented by user's env.d.ts via module augmentation.
19
+ * Projects should run `devflare types` to generate env.d.ts which extends
20
+ * this interface with proper binding types.
21
+ *
22
+ * @example Generated env.d.ts:
23
+ * ```ts
24
+ * declare global {
25
+ * interface DevflareEnv {
26
+ * COUNTER: DurableObjectNamespace
27
+ * }
28
+ * }
29
+ * ```
30
+ */
31
+ export interface DevflareEnv {
32
+ }
33
+ /**
34
+ * @deprecated Use `import { env } from 'devflare'` instead.
35
+ * This export is kept for backwards compatibility.
36
+ *
37
+ * The unified env from 'devflare' works everywhere:
38
+ * - Inside request handlers (uses request context)
39
+ * - In tests (after createTestContext())
40
+ * - In dev mode scripts (uses bridge)
41
+ */
42
+ export { env } from '../env';
43
+ //# sourceMappingURL=simple-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-context.d.ts","sourceRoot":"","sources":["../../src/test/simple-context.ts"],"names":[],"mappings":"AAiKA;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAse1E;AA+BD;;;GAGG;AACH,MAAM,WAAW,OAAO;IACvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACxB;AAED;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,WAAW;CAAI;AAEhC;;;;;;;;GAQG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA"}
@@ -0,0 +1,86 @@
1
+ import type { TraceItem, TraceLog, TraceException } from '@cloudflare/workers-types';
2
+ export interface TraceItemOptions {
3
+ /** Name of the worker that produced this trace */
4
+ scriptName?: string;
5
+ /** Outcome of the event */
6
+ outcome?: 'ok' | 'exception' | 'exceededCpu' | 'exceededMemory' | 'unknown';
7
+ /** Timestamp of the event */
8
+ eventTimestamp?: number;
9
+ /** Logs produced during the event */
10
+ logs?: TraceLog[];
11
+ /** Exceptions thrown during the event */
12
+ exceptions?: TraceException[];
13
+ /** Event details (request, scheduled, etc.) */
14
+ event?: TraceItem['event'];
15
+ /** Script version info */
16
+ scriptVersion?: {
17
+ id: string;
18
+ };
19
+ /** Dispatch namespace (for namespaced workers) */
20
+ dispatchNamespace?: string;
21
+ /** Script tags */
22
+ scriptTags?: string[];
23
+ /** Diagnostics channel events */
24
+ diagnosticsChannelEvents?: unknown[];
25
+ }
26
+ export interface TailTriggerResult {
27
+ /** Whether the handler completed successfully */
28
+ success: boolean;
29
+ /** Error message if handler threw */
30
+ error?: string;
31
+ /** Number of trace items processed */
32
+ itemCount: number;
33
+ }
34
+ /**
35
+ * Configure the tail test helper
36
+ * @internal Called by createTestContext to set up handler path and env
37
+ */
38
+ export declare function configureTail(options: {
39
+ handlerPath: string | null;
40
+ configDir: string;
41
+ getEnv: () => Record<string, unknown>;
42
+ }): void;
43
+ /**
44
+ * Reset tail helper state
45
+ * @internal Called when test context is disposed
46
+ */
47
+ export declare function resetTailState(): void;
48
+ /**
49
+ * Trigger the tail handler with trace items.
50
+ * This directly invokes the tail handler function from your config.
51
+ *
52
+ * @param items - Array of trace items or trace item options
53
+ * @returns Result object with success status
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * // Trigger with full trace items
58
+ * await cf.tail.trigger([
59
+ * {
60
+ * scriptName: 'my-worker',
61
+ * outcome: 'ok',
62
+ * logs: [{ level: 'log', message: ['Request processed'], timestamp: Date.now() }]
63
+ * }
64
+ * ])
65
+ *
66
+ * // Trigger with minimal options (defaults applied)
67
+ * await cf.tail.trigger([
68
+ * { logs: [{ level: 'error', message: ['Something failed'], timestamp: Date.now() }] }
69
+ * ])
70
+ * ```
71
+ */
72
+ declare function trigger(items: Array<TraceItem | TraceItemOptions>): Promise<TailTriggerResult>;
73
+ /**
74
+ * Create a TraceItem with sensible defaults.
75
+ * Useful for building test data.
76
+ *
77
+ * @param options - Partial trace item options
78
+ * @returns Complete TraceItem
79
+ */
80
+ declare function create(options?: TraceItemOptions): TraceItem;
81
+ export declare const tail: {
82
+ trigger: typeof trigger;
83
+ create: typeof create;
84
+ };
85
+ export {};
86
+ //# sourceMappingURL=tail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tail.d.ts","sourceRoot":"","sources":["../../src/test/tail.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAOpF,MAAM,WAAW,gBAAgB;IAChC,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,IAAI,GAAG,WAAW,GAAG,aAAa,GAAG,gBAAgB,GAAG,SAAS,CAAA;IAC3E,6BAA6B;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,qCAAqC;IACrC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAA;IACjB,yCAAyC;IACzC,UAAU,CAAC,EAAE,cAAc,EAAE,CAAA;IAC7B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC1B,0BAA0B;IAC1B,aAAa,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9B,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,iCAAiC;IACjC,wBAAwB,CAAC,EAAE,OAAO,EAAE,CAAA;CACpC;AAED,MAAM,WAAW,iBAAiB;IACjC,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAA;IAChB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAA;CACjB;AAcD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC,GAAG,IAAI,CAIP;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAIrC;AAiCD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,iBAAe,OAAO,CACrB,KAAK,EAAE,KAAK,CAAC,SAAS,GAAG,gBAAgB,CAAC,GACxC,OAAO,CAAC,iBAAiB,CAAC,CAoE5B;AAED;;;;;;GAMG;AACH,iBAAS,MAAM,CAAC,OAAO,GAAE,gBAAqB,GAAG,SAAS,CAEzD;AAMD,eAAO,MAAM,IAAI;;;CAGhB,CAAA"}