@lostgradient/weft 0.13.0 → 0.15.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 (114) hide show
  1. package/README.md +3 -8
  2. package/dist/cli/generated/operation-catalog.snapshot.json +977 -77
  3. package/dist/cli/generated/operation-client.generated.d.ts +14 -21
  4. package/dist/cli/help-text.d.ts +3 -3
  5. package/dist/cli/help-text.js +4 -4
  6. package/dist/cli/operation-catalog-snapshot.d.ts +1 -1
  7. package/dist/cli/schedule.js +1 -3
  8. package/dist/cli/serve-registrations.d.ts +3 -3
  9. package/dist/cli/serve-registrations.js +2 -2
  10. package/dist/cli/shutdown.d.ts +11 -0
  11. package/dist/cli/shutdown.js +25 -0
  12. package/dist/cli/validate.d.ts +1 -1
  13. package/dist/cli/version-check.d.ts +1 -1
  14. package/dist/cli/version-check.js +1 -1
  15. package/dist/cli-main.js +10 -29
  16. package/dist/client/http-client-storage.js +7 -35
  17. package/dist/client/http-request.d.ts +8 -9
  18. package/dist/client/http-request.js +3 -25
  19. package/dist/core/aggregate-validation.d.ts +2 -5
  20. package/dist/core/aggregate-validation.js +2 -10
  21. package/dist/core/atomic-state.js +21 -24
  22. package/dist/core/context/parallel-operations.d.ts +0 -2
  23. package/dist/core/context/parallel-operations.js +0 -7
  24. package/dist/core/engine/callback-checkpoint-persistence.d.ts +2 -0
  25. package/dist/core/engine/callback-checkpoint-persistence.js +6 -3
  26. package/dist/core/engine/callback-creators.js +4 -22
  27. package/dist/core/engine/checkpoint-io.d.ts +1 -1
  28. package/dist/core/engine/operations-coordination.js +1 -1
  29. package/dist/core/engine/parallel-dispatch.d.ts +1 -1
  30. package/dist/core/engine/parallel-dispatch.js +1 -1
  31. package/dist/core/engine/review-list-entries.d.ts +1 -1
  32. package/dist/core/engine/review-list-entries.js +6 -30
  33. package/dist/core/engine/schedules.js +4 -1
  34. package/dist/core/engine/timeline-coordinator-detail.d.ts +1 -1
  35. package/dist/core/inline-execution-strategy.js +8 -46
  36. package/dist/core/list-filter-validation.d.ts +2 -5
  37. package/dist/core/list-filter-validation.js +2 -10
  38. package/dist/core/review/index.d.ts +87 -0
  39. package/dist/core/review/index.js +29 -0
  40. package/dist/core/types/schedules.d.ts +13 -31
  41. package/dist/core/validation-issues.d.ts +13 -0
  42. package/dist/core/validation-issues.js +9 -0
  43. package/dist/diagnostics/validate.d.ts +9 -30
  44. package/dist/diagnostics/validate.js +83 -21
  45. package/dist/diagnostics/version-check.d.ts +2 -2
  46. package/dist/http.js +2 -2
  47. package/dist/indexeddb.js +1 -1
  48. package/dist/mcp/session.js +2 -10
  49. package/dist/mcp/tools.js +2 -10
  50. package/dist/mcp/tuple-list-equality.d.ts +1 -0
  51. package/dist/mcp/tuple-list-equality.js +12 -0
  52. package/dist/server/openapi-error-responses.js +0 -14
  53. package/dist/server/operation-catalog/index.d.ts +1 -1
  54. package/dist/server/operation-catalog/raise-fault.d.ts +2 -1
  55. package/dist/server/operation-catalog/types.d.ts +3 -2
  56. package/dist/server/operation-fault.d.ts +1 -4
  57. package/dist/server/operation-fault.js +1 -1
  58. package/dist/server/operation-registry.d.ts +2 -31
  59. package/dist/server/operations/bulk-filter-helpers.d.ts +17 -17
  60. package/dist/server/operations/bulk-filter-helpers.js +16 -37
  61. package/dist/server/operations/bulk-mutate-workflow-tags.d.ts +27 -27
  62. package/dist/server/operations/bulk-signal-workflows.d.ts +26 -26
  63. package/dist/server/operations/create-schedule.js +7 -19
  64. package/dist/server/operations/event-stream-contracts.d.ts +20 -0
  65. package/dist/server/operations/event-stream-contracts.js +67 -0
  66. package/dist/server/operations/fleet-events-sse.js +21 -50
  67. package/dist/server/operations/fleet-events-subscription.js +8 -12
  68. package/dist/server/operations/list-reviews.js +2 -19
  69. package/dist/server/operations/list-workflows.d.ts +43 -43
  70. package/dist/server/operations/list-workflows.js +9 -30
  71. package/dist/server/operations/purge-workflows.d.ts +11 -11
  72. package/dist/server/operations/recover-all.js +1 -10
  73. package/dist/server/operations/schedule-rest-body.d.ts +11 -0
  74. package/dist/server/operations/schedule-rest-body.js +28 -0
  75. package/dist/server/operations/single-workflow-control-operation.d.ts +2 -1
  76. package/dist/server/operations/update-schedule.js +7 -19
  77. package/dist/server/operations/workflow-events-sse.js +29 -67
  78. package/dist/server/operations/workflow-events-subscription.js +9 -27
  79. package/dist/server/runtime/task-polling.js +3 -5
  80. package/dist/server/task-state.d.ts +2 -8
  81. package/dist/server/task-state.js +10 -7
  82. package/dist/storage/bounded-ndjson-response.d.ts +5 -0
  83. package/dist/storage/bounded-ndjson-response.js +33 -0
  84. package/dist/storage/bun-sql.js +52 -49
  85. package/dist/storage/conditional-batch-body.d.ts +7 -0
  86. package/dist/storage/conditional-batch-body.js +14 -0
  87. package/dist/storage/http.js +5 -37
  88. package/dist/storage/lmdb.js +1 -1
  89. package/dist/storage/memory.js +1 -1
  90. package/dist/storage/neon.d.ts +3 -16
  91. package/dist/storage/neon.js +2 -2
  92. package/dist/storage/node-sqlite-loader.d.ts +2 -2
  93. package/dist/storage/node-sqlite.js +32 -17
  94. package/dist/storage/postgres.js +1 -1
  95. package/dist/storage/resolve.js +1 -1
  96. package/dist/storage/scoped-storage.js +1 -1
  97. package/dist/storage/turso.js +1 -1
  98. package/dist/version.d.ts +1 -1
  99. package/dist/version.js +1 -1
  100. package/dist/web-extension.js +1 -1
  101. package/dist/worker/execute-with-interceptors.d.ts +1 -1
  102. package/dist/worker/execute-with-interceptors.js +2 -2
  103. package/dist/worker/index.js +5 -5
  104. package/dist/worker/long-poll.js +3 -4
  105. package/dist/worker/protocol-messages.d.ts +11 -19
  106. package/dist/worker/protocol-schemas.d.ts +8 -8
  107. package/dist/worker/protocol-schemas.js +4 -4
  108. package/dist/worker/protocol-task-result.d.ts +1 -0
  109. package/dist/worker/protocol-task-result.js +1 -3
  110. package/dist/worker/protocol.js +1 -1
  111. package/dist/worker/registry/types.d.ts +2 -7
  112. package/dist/worker/registry.d.ts +3 -9
  113. package/dist/worker/registry.js +2 -5
  114. package/package.json +1 -1
@@ -0,0 +1,33 @@
1
+ export async function* readBoundedNdjsonResponse(response, options) {
2
+ if (response.body === null)
3
+ return;
4
+ const reader = response.body.getReader(), decoder = new TextDecoder;
5
+ let bufferedText = "", bytesRead = 0, reachedEndOfStream = !1;
6
+ try {
7
+ while (!0) {
8
+ const { done, value } = await reader.read();
9
+ if (done) {
10
+ reachedEndOfStream = !0;
11
+ break;
12
+ }
13
+ bytesRead += value.byteLength;
14
+ if (bytesRead > options.maximumBytes)
15
+ throw options.sizeLimitError();
16
+ bufferedText += decoder.decode(value, { stream: !0 });
17
+ const lines = bufferedText.split(`
18
+ `);
19
+ bufferedText = lines.pop() ?? "";
20
+ for (const line of lines)
21
+ yield line;
22
+ }
23
+ bufferedText += decoder.decode();
24
+ if (bufferedText.length > 0)
25
+ yield bufferedText;
26
+ } finally {
27
+ if (!reachedEndOfStream)
28
+ try {
29
+ await reader.cancel();
30
+ } catch {}
31
+ reader.releaseLock();
32
+ }
33
+ }
@@ -2,6 +2,13 @@
2
2
  // src/storage/bun-sql.ts
3
3
  import { Database } from "bun:sqlite";
4
4
 
5
+ // src/storage/capabilities.ts
6
+ function requireStorageCapability(storage, capability, featureName) {
7
+ if (!storage.capabilities()[capability]) {
8
+ throw new Error(`Feature "${featureName}" requires storage capability "${capability}", but this storage backend does not provide it.`);
9
+ }
10
+ }
11
+
5
12
  // src/storage/derived-operations.ts
6
13
  async function storageHasCore(storage, key) {
7
14
  return await storage.get(key) !== null;
@@ -41,13 +48,6 @@ async function storageDeleteRangeCore(storage, prefix, options) {
41
48
  return operations.length;
42
49
  }
43
50
 
44
- // src/storage/capabilities.ts
45
- function requireStorageCapability(storage, capability, featureName) {
46
- if (!storage.capabilities()[capability]) {
47
- throw new Error(`Feature "${featureName}" requires storage capability "${capability}", but this storage backend does not provide it.`);
48
- }
49
- }
50
-
51
51
  // src/storage/interface.ts
52
52
  var MAX_BATCH_OPERATIONS = 1e4;
53
53
  class StorageBatchOperationLimitExceededError extends Error {
@@ -118,6 +118,23 @@ async function storageConditionalBatch(storage, conditions, operations) {
118
118
  return storage.conditionalBatch(conditions, operations);
119
119
  }
120
120
 
121
+ // src/storage/conditional-batch-body.ts
122
+ function runConditionalBatchBody(conditions, operations, handlers) {
123
+ for (const condition of conditions) {
124
+ if (!storageValuesEqual(handlers.read(condition.key), condition.expectedValue)) {
125
+ return false;
126
+ }
127
+ }
128
+ for (const operation of operations) {
129
+ if (operation.type === "put") {
130
+ handlers.put(operation.key, operation.value);
131
+ } else {
132
+ handlers.delete(operation.key);
133
+ }
134
+ }
135
+ return true;
136
+ }
137
+
121
138
  // src/storage/delete-range.ts
122
139
  function normalizeDeleteRangeLimit(limit) {
123
140
  if (limit === undefined) {
@@ -215,6 +232,21 @@ class ScopedStorage {
215
232
  }
216
233
  return key.length === 0 ? `${this.#scopePrefix}:` : `${this.#scopePrefix}:${key}`;
217
234
  }
235
+ #toInnerOperations(operations) {
236
+ return operations.map((operation) => {
237
+ if (operation.type === "put") {
238
+ return {
239
+ type: "put",
240
+ key: this.#toInnerKey(operation.key),
241
+ value: operation.value
242
+ };
243
+ }
244
+ return {
245
+ type: "delete",
246
+ key: this.#toInnerKey(operation.key)
247
+ };
248
+ });
249
+ }
218
250
  #toPublicKey(key) {
219
251
  if (this.#scopePrefix.length === 0) {
220
252
  return key;
@@ -284,37 +316,13 @@ class ScopedStorage {
284
316
  }
285
317
  async batch(operations) {
286
318
  assertStorageBatchOperationCount("batch operations", operations.length);
287
- await this.#storage.batch(operations.map((operation) => {
288
- if (operation.type === "put") {
289
- return {
290
- type: "put",
291
- key: this.#toInnerKey(operation.key),
292
- value: operation.value
293
- };
294
- }
295
- return {
296
- type: "delete",
297
- key: this.#toInnerKey(operation.key)
298
- };
299
- }));
319
+ await this.#storage.batch(this.#toInnerOperations(operations));
300
320
  }
301
321
  async conditionalBatch(conditions, operations) {
302
322
  return storageConditionalBatch(this.#storage, conditions.map((condition) => ({
303
323
  key: this.#toInnerKey(condition.key),
304
324
  expectedValue: condition.expectedValue
305
- })), operations.map((operation) => {
306
- if (operation.type === "put") {
307
- return {
308
- type: "put",
309
- key: this.#toInnerKey(operation.key),
310
- value: operation.value
311
- };
312
- }
313
- return {
314
- type: "delete",
315
- key: this.#toInnerKey(operation.key)
316
- };
317
- }));
325
+ })), this.#toInnerOperations(operations));
318
326
  }
319
327
  async has(key) {
320
328
  return storageHas(this.#storage, this.#toInnerKey(key));
@@ -543,23 +551,18 @@ class BunSQLiteStorage {
543
551
  async conditionalBatch(conditions, operations) {
544
552
  assertStorageBatchOperationCount("conditionalBatch conditions", conditions.length);
545
553
  assertStorageBatchOperationCount("conditionalBatch operations", operations.length);
546
- const conditionalTransaction = this.#database.transaction((pendingConditions, pendingOperations) => {
547
- for (const condition of pendingConditions) {
548
- const row = this.#getStatement.get(condition.key);
549
- const currentValue = row ? new Uint8Array(row.value) : null;
550
- if (!storageValuesEqual(currentValue, condition.expectedValue)) {
551
- return false;
552
- }
553
- }
554
- for (const operation of pendingOperations) {
555
- if (operation.type === "put") {
556
- this.#putStatement.run(operation.key, operation.value);
557
- } else {
558
- this.#deleteStatement.run(operation.key);
559
- }
554
+ const conditionalTransaction = this.#database.transaction((pendingConditions, pendingOperations) => runConditionalBatchBody(pendingConditions, pendingOperations, {
555
+ read: (key) => {
556
+ const row = this.#getStatement.get(key);
557
+ return row ? new Uint8Array(row.value) : null;
558
+ },
559
+ put: (key, value) => {
560
+ this.#putStatement.run(key, value);
561
+ },
562
+ delete: (key) => {
563
+ this.#deleteStatement.run(key);
560
564
  }
561
- return true;
562
- });
565
+ }));
563
566
  return conditionalTransaction(conditions, operations);
564
567
  }
565
568
  async query(sql, parameters) {
@@ -0,0 +1,7 @@
1
+ import { type BatchOperation, type ConditionalBatchCondition } from './interface.ts';
2
+ export interface ConditionalBatchBodyHandlers {
3
+ read(key: string): Uint8Array | null;
4
+ put(key: string, value: Uint8Array): void;
5
+ delete(key: string): void;
6
+ }
7
+ export declare function runConditionalBatchBody(conditions: ConditionalBatchCondition[], operations: BatchOperation[], handlers: ConditionalBatchBodyHandlers): boolean;
@@ -0,0 +1,14 @@
1
+ import {
2
+ storageValuesEqual
3
+ } from "./interface.js";
4
+ export function runConditionalBatchBody(conditions, operations, handlers) {
5
+ for (const condition of conditions)
6
+ if (!storageValuesEqual(handlers.read(condition.key), condition.expectedValue))
7
+ return !1;
8
+ for (const operation of operations)
9
+ if (operation.type === "put")
10
+ handlers.put(operation.key, operation.value);
11
+ else
12
+ handlers.delete(operation.key);
13
+ return !0;
14
+ }
@@ -1,3 +1,4 @@
1
+ import { readBoundedNdjsonResponse } from "./bounded-ndjson-response.js";
1
2
  import { decodeBase64ToBytes, encodeBytesToBase64, isRecord } from "./byte-encoding.js";
2
3
  import { normalizeDeleteRangeOptions } from "./delete-range.js";
3
4
  import {
@@ -47,42 +48,6 @@ function parseScanLine(line) {
47
48
  const entry = parseScanEntry(JSON.parse(line));
48
49
  return [entry.key, decodeBase64ToBytes(entry.value)];
49
50
  }
50
- function assertScanResponseSize(bytesRead) {
51
- if (bytesRead > MAX_SCAN_RESPONSE_BYTES)
52
- throw Error("HTTPStorage scan response exceeded the maximum allowed size.");
53
- }
54
- async function* readNdjsonLines(response) {
55
- if (response.body === null)
56
- return;
57
- const reader = response.body.getReader(), decoder = new TextDecoder;
58
- let bufferedText = "", bytesRead = 0, reachedEndOfStream = !1;
59
- try {
60
- while (!0) {
61
- const { done, value } = await reader.read();
62
- if (done) {
63
- reachedEndOfStream = !0;
64
- break;
65
- }
66
- bytesRead += value.byteLength;
67
- assertScanResponseSize(bytesRead);
68
- bufferedText += decoder.decode(value, { stream: !0 });
69
- const lines = bufferedText.split(`
70
- `);
71
- bufferedText = lines.pop() ?? "";
72
- for (const line of lines)
73
- yield line;
74
- }
75
- bufferedText += decoder.decode();
76
- if (bufferedText.length > 0)
77
- yield bufferedText;
78
- } finally {
79
- try {
80
- if (!reachedEndOfStream)
81
- await reader.cancel();
82
- } catch {}
83
- reader.releaseLock();
84
- }
85
- }
86
51
 
87
52
  export class HTTPStorage {
88
53
  #baseUrl;
@@ -151,7 +116,10 @@ export class HTTPStorage {
151
116
  method: "GET",
152
117
  headers: { accept: "application/x-ndjson" }
153
118
  });
154
- for await (const line of readNdjsonLines(response)) {
119
+ for await (const line of readBoundedNdjsonResponse(response, {
120
+ maximumBytes: MAX_SCAN_RESPONSE_BYTES,
121
+ sizeLimitError: () => Error("HTTPStorage scan response exceeded the maximum allowed size.")
122
+ })) {
155
123
  const entry = parseScanLine(line);
156
124
  if (entry !== null)
157
125
  yield entry;
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var d=import.meta.require,p=(_,F,E)=>{if(F!=null){if(typeof F!=="object"&&typeof F!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let X;if(E)X=F[Symbol.asyncDispose];if(X===void 0)X=F[Symbol.dispose];if(typeof X!=="function")throw TypeError("Object not disposable");_.push([E,X,F])}else if(E)_.push([E]);return F},a=(_,F,E)=>{let X=(G)=>F=E?new SuppressedError(G,F,"An error was suppressed during disposal"):(E=!0,G),U=(G)=>{while(G=_.pop())try{var Z=G[1]&&G[1].call(G[2]);if(G[0])return Promise.resolve(Z).then(U,(M)=>(X(M),U()))}catch(M){X(M)}if(E)throw F};return U()};function L(_,F,E){if(!_.capabilities()[F])throw Error(`Feature "${E}" requires storage capability "${F}", but this storage backend does not provide it.`)}function x(_){let F=_.capabilities(),E=[];if(F.persistence!=="local"&&F.persistence!=="remote")E.push(`persistence must be "local" or "remote" (got "${F.persistence}")`);if(F.readAfterWrite!=="linearizable")E.push(`readAfterWrite must be "linearizable" (got "${F.readAfterWrite}")`);if(F.scanConsistency!=="snapshot")E.push(`scanConsistency must be "snapshot" (got "${F.scanConsistency}")`);if(!F.atomicBatch)E.push("atomicBatch must be true");if(!F.conditionalBatch)E.push("conditionalBatch must be true");if(E.length>0)throw Error(`Storage is not durable enough for recovery: ${E.join("; ")}.`)}var D="default";async function T(_,F){return await _.get(F)!==null}async function*j(_,F,E){for await(let[X]of _.scan(F,E))yield X}async function W(_,F){let E=0;for await(let X of j(_,F))E++;return E}async function B(_,F){let E=[];for await(let X of j(_,F))E.push({type:"delete",key:X});if(E.length===0)return 0;return await _.batch(E),E.length}async function C(_,F,E){let X=[];for await(let U of j(_,F,E))X.push({type:"delete",key:U});if(X.length===0)return 0;return await _.batch(X),X.length}var g=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var N=1e4,F_=1e4;class z extends Error{code="StorageBatchOperationLimitExceededError";cap=N;count;target;constructor(_,F){super(`${_} count ${F} exceeds MAX_BATCH_OPERATIONS (${N}).`);this.name="StorageBatchOperationLimitExceededError",this.target=_,this.count=F}}function Q(_,F){if(F>N)throw new z(_,F)}function V(_){return _.length>0?_.slice(0,-1)+String.fromCharCode(_.charCodeAt(_.length-1)+1):"\xFF"}function R(_,F={}){if(F.gt!==void 0&&_<=F.gt)return!1;if(F.gte!==void 0&&_<F.gte)return!1;if(F.lt!==void 0&&_>=F.lt)return!1;if(F.lte!==void 0&&_>F.lte)return!1;return!0}function K(_,F){if(_===null||F===null)return _===F;if(_.byteLength!==F.byteLength)return!1;for(let E=0;E<_.byteLength;E++)if(_[E]!==F[E])return!1;return!0}async function v(_,F){if(_.has)return _.has(F);return T(_,F)}function h(_,F,E){if(_.keys)return _.keys(F,E);return j(_,F,E)}async function P(_,F){if(_.count)return _.count(F);return W(_,F)}async function O(_,F){if(_.deletePrefix)return _.deletePrefix(F);return B(_,F)}async function E_(_,F){Q("batch operations",F.length),await _.batch(F)}async function b(_,F,E){if(Q("conditionalBatch conditions",F.length),Q("conditionalBatch operations",E.length),L(_,"conditionalBatch","storageConditionalBatch"),!_.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return _.conditionalBatch(F,E)}function Y(_){return encodeURIComponent(_)}function Y_(_){return decodeURIComponent(_)}function X_(_){try{return decodeURIComponent(_)}catch{return null}}var J=(_)=>String(_).padStart(16,"0"),I="0",w="1",A=(_,F,E,X)=>`sig:${Y(_)}:${Y(F)}:${X}:${Y(E)}`,U_={workflow:(_)=>`wf:${Y(_)}`,checkpoint:(_)=>`wf:${Y(_)}:ckpt`,checkpointHistory:(_,F)=>`wf:${Y(_)}:ckpt:${String(F).padStart(10,"0")}`,timelinePrefix:(_)=>`wf:${Y(_)}:timeline:`,timeline:(_,F)=>`wf:${Y(_)}:timeline:${String(F).padStart(10,"0")}`,schedule:(_)=>`schedule:${Y(_)}`,scheduleTick:(_,F)=>`schedule-due:${String(_).padStart(16,"0")}:${Y(F)}`,scheduleRun:(_)=>`schedule-run:${Y(_)}`,scheduleRunLink:(_)=>`schedule-run-link:${Y(_)}`,scheduleRunBySchedulePrefix:(_)=>`schedule-run-by-schedule:${Y(_)}:`,scheduleRunBySchedule:(_,F)=>`schedule-run-by-schedule:${Y(_)}:${Y(F)}`,operation:(_,F,E)=>`op:${_}:${J(F)}:${E}`,operationInflight:(_)=>`op:inflight:${_}`,operationQueued:(_)=>`op:queued:${_}`,operationResolved:(_)=>`op:resolved:${_}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(_)=>`op:dead-letter:${_}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(_,F,E)=>`audit:bulk:${J(_)}:${Y(F)}:${Y(E)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(_,F)=>`op:resolved-by-time:${J(_)}:${Y(F)}`,asyncActivity:(_,F)=>`async-act:v1:${Y(_)}:${Y(F)}`,asyncActivityResolution:(_,F)=>`async-act:v1:${Y(_)}:${Y(F)}:resolution`,activityReconciliationPrefix:(_)=>`actrec:v1:${Y(_)}:`,activityReconciliation:(_,F,E)=>`actrec:v1:${Y(_)}:${Y(F)}:${E}`,eventPrefix:(_)=>`ev:${Y(_)}:`,event:(_,F)=>`ev:${Y(_)}:${String(F).padStart(10,"0")}`,eventHead:(_)=>`ev:${Y(_)}:head`,eventWatermark:(_)=>`ev:${Y(_)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(_)=>`fleet-event:${String(_).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(_)=>`fleet-event-by-workflow:${Y(_)}:`,fleetEventByWorkflow:(_,F)=>`fleet-event-by-workflow:${Y(_)}:${String(F).padStart(10,"0")}`,signal:(_,F,E)=>A(_,F,E,w),startSignal:(_,F,E)=>A(_,F,E,I),signalSequence:(_)=>`sigseq:v1:${Y(_)}`,signalAcceptedResponsePrefix:(_)=>`sigres:v1:${Y(_)}:`,signalAcceptedResponse:(_,F,E)=>`sigres:v1:${Y(_)}:${Y(F)}:${Y(E)}`,deadline:(_,F)=>`wf-deadline:${J(_)}:${Y(F)}`,terminalCleanup:(_,F)=>`wf-cleanup:${J(_)}:${Y(F)}`,teardownTimer:(_,F)=>`wf-teardown:${J(_)}:${Y(F)}`,delayedStart:(_,F)=>`wf-delayed:${J(_)}:${Y(F)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(_,F)=>`wf-terminal:${J(_)}:${Y(F)}`,attribute:(_)=>`attr:${Y(_)}`,attributeIndex:(_,F,E)=>`idx:${_}:${F}:${Y(E)}`,tagIndex:(_,F)=>`tag:${Y(_)}:${Y(F)}`,updatePrefix:(_)=>`upd:${Y(_)}:`,update:(_,F)=>`upd:${Y(_)}:${F}`,updateResponse:(_)=>`upr:${_}`,updateIdempotency:(_,F)=>`upk:${Y(_)}:${F}`,startIdempotency:(_)=>`start-idem:${Y(_)}`,startIdempotencySignalId:(_)=>`start-idem:${_}`,livenessPrefix:()=>"liveness:",liveness:(_)=>`liveness:${Y(_)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(_,F,E)=>`budget:${_}:${F}:${E}`,review:(_,F)=>`review:${Y(_)}:${F}`,workflowHeaders:(_)=>`wf-headers:${Y(_)}`,childCancellationPrefix:(_)=>`child-cancel:${Y(_)}:`,childCancellation:(_,F)=>`child-cancel:${Y(_)}:${Y(F)}`,childWorkflowByParentPrefix:(_,F)=>`child-by-parent:${Y(_)}:${F===void 0?"":`${Y(F)}:`}`,childWorkflowByParent:(_,F,E)=>`child-by-parent:${Y(_)}:${F===void 0?"":`${Y(F)}:`}${Y(E)}`,terminalCleanupNeeded:(_)=>`wf-cleanup-needed:${Y(_)}`,workflowConcurrency:(_,F)=>`wf-concurrency:${Y(_)}:${Y(F)}`,workflowConcurrencyHolder:(_)=>`wf-concurrency-holder:${Y(_)}`,workflowHasServices:(_)=>`wf-has-services:${Y(_)}`,finalizerState:(_)=>`wf-finalizer-state:${Y(_)}`,teardownOwed:(_)=>`wf-teardown-needed:${Y(_)}`,teardownSucceeded:(_)=>`wf-teardown-succeeded:${Y(_)}`,teardownDeadLetter:(_)=>`wf-teardown-deadletter:${Y(_)}`,offload:(_,F)=>`offload:${Y(_)}:${F}`,archive:(_,F)=>`archive:${Y(_)}:${F}`,stateExecution:(_,F)=>`state:execution:${Y(_)}:${Y(F)}`,stateWorkflow:(_,F)=>`state:workflow-scope:${D}:${Y(_)}:${Y(F)}`,streamChunkPrefix:(_,F)=>`blob:${Y(_)}:${F}:chunk:`,streamChunk:(_,F,E)=>`blob:${Y(_)}:${F}:chunk:${String(E).padStart(10,"0")}`,streamTail:(_,F)=>`blob:${Y(_)}:${F}:tail`,streamMetadata:(_,F)=>`blob:${Y(_)}:${F}:meta`,budgetCharged:(_)=>`budget-charged:${_}`,toolEffect:(_,F,E)=>`tool-effect:${Y(_)}:${F}:${E}`,workflowVisibilityStatus:(_,F)=>`wf-idx-status:${Y(_)}:${Y(F)}`,workflowVisibilityType:(_,F)=>`wf-idx-type:${Y(_)}:${Y(F)}`,workflowVisibilityCreated:(_,F)=>`wf-idx-created:${J(_)}:${Y(F)}`,workflowVisibilityUpdated:(_,F)=>`wf-idx-updated:${J(_)}:${Y(F)}`,workflowVisibilityDeadline:(_,F)=>`wf-idx-deadline:${J(_)}:${Y(F)}`,workflowVisibilityManifest:(_)=>`wf-idx-manifest:${Y(_)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function k(_){if(_===void 0)return;if(typeof _!=="number"||!Number.isInteger(_)||_<0)throw Error("deleteRange limit must be a finite non-negative integer");return _===0?0:_}function H(_){let F={},E=!1;for(let U of["gt","gte","lt","lte"]){let G=_[U];if(G===void 0)continue;if(typeof G!=="string")throw Error("deleteRange bounds must be strings");F[U]=G,E=!0}if(!E)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let X=k(_.limit);if(X!==void 0)F.limit=X;return F}async function m(_,F,E){let X=H(E);if(_.deleteRange)return _.deleteRange(F,X);return C(_,F,X)}function S(_){return _.replaceAll(/:+$/g,"")}function l(_,F){let E=S(_),X=S(F);if(E.length===0)return X;if(X.length===0)return E;return`${E}:${X}`}class q{#_;#Y;constructor(_,F){this.#_=_,this.#Y=S(F)}#F(_){if(this.#Y.length===0)return _;return _.length===0?`${this.#Y}:`:`${this.#Y}:${_}`}#E(_){if(this.#Y.length===0)return _;return _.slice(this.#Y.length+1)}#X(_={}){let F={};if(_.limit!==void 0)F.limit=_.limit;if(_.reverse!==void 0)F.reverse=_.reverse;if(_.gt!==void 0)F.gt=this.#F(_.gt);if(_.gte!==void 0)F.gte=this.#F(_.gte);if(_.lt!==void 0)F.lt=this.#F(_.lt);if(_.lte!==void 0)F.lte=this.#F(_.lte);return F}#U(_){let F={};if(_.limit!==void 0)F.limit=_.limit;if(_.gt!==void 0)F.gt=this.#F(_.gt);if(_.gte!==void 0)F.gte=this.#F(_.gte);if(_.lt!==void 0)F.lt=this.#F(_.lt);if(_.lte!==void 0)F.lte=this.#F(_.lte);return F}capabilities(){return this.#_.capabilities()}scoped(_){return new q(this.#_,l(this.#Y,_))}async get(_){return this.#_.get(this.#F(_))}async put(_,F){await this.#_.put(this.#F(_),F)}async delete(_){await this.#_.delete(this.#F(_))}async*scan(_,F){for await(let[E,X]of this.#_.scan(this.#F(_),this.#X(F)))yield[this.#E(E),X]}async batch(_){Q("batch operations",_.length),await this.#_.batch(_.map((F)=>{if(F.type==="put")return{type:"put",key:this.#F(F.key),value:F.value};return{type:"delete",key:this.#F(F.key)}}))}async conditionalBatch(_,F){return b(this.#_,_.map((E)=>({key:this.#F(E.key),expectedValue:E.expectedValue})),F.map((E)=>{if(E.type==="put")return{type:"put",key:this.#F(E.key),value:E.value};return{type:"delete",key:this.#F(E.key)}}))}async has(_){return v(this.#_,this.#F(_))}async deletePrefix(_){return O(this.#_,this.#F(_))}async deleteRange(_,F){let E=this.#U(H(F));return m(this.#_,this.#F(_),E)}async*keys(_,F){for await(let E of h(this.#_,this.#F(_),this.#X(F)))yield this.#E(E)}async count(_){return P(this.#_,this.#F(_))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}function c(_,F){return new q(_,F)}import*as u from"lmdb";class f{#_;#Y=!1;#F=null;constructor(_){this.#_=u.open({path:_,encoding:"binary"})}#E(){if(this.#Y)throw Error("LMDBStorage is closed")}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!1}}async get(_){this.#E();let F=this.#_.get(_);if(F===void 0)return null;return new Uint8Array(F)}async put(_,F){this.#E(),await this.#_.put(_,Buffer.from(F))}async delete(_){this.#E(),await this.#_.remove(_)}async has(_){return this.#E(),this.#_.doesExist(_)}async deletePrefix(_){this.#E();let F=[];for await(let E of this.keys(_))F.push(E);if(F.length===0)return 0;return await this.#_.batch(()=>{for(let E of F)this.#_.remove(E)}),F.length}async deleteRange(_,F){this.#E();let E=H(F),X=[];for await(let U of this.keys(_,E))X.push(U);if(X.length===0)return 0;return await this.#_.batch(()=>{for(let U of X)this.#_.remove(U)}),X.length}async*scan(_,F={}){this.#E();let{limit:E,reverse:X}=F,U=V(_),G=X?this.#_.getRange({start:U,end:_,reverse:!0}):this.#_.getRange({start:_,end:U}),Z=0,M=!1;for(let{key:$,value:y}of G){if(!$.startsWith(_)){if(X&&!M)continue;break}if(M=!0,!R($,F))continue;if(E!==void 0&&Z>=E)break;yield[$,new Uint8Array(y)],Z++}}async*keys(_,F={}){this.#E();let{limit:E,reverse:X}=F,U=V(_),G=X?this.#_.getKeys({start:U,end:_,reverse:!0}):this.#_.getKeys({start:_,end:U}),Z=0,M=!1;for(let $ of G){if(!$.startsWith(_)){if(X&&!M)continue;break}if(M=!0,!R($,F))continue;if(E!==void 0&&Z>=E)break;yield $,Z++}}async count(_){this.#E();let F=V(_);return this.#_.getKeysCount({start:_,end:F})}scoped(_){return this.#E(),c(this,_)}async batch(_){if(this.#E(),Q("batch operations",_.length),_.length===0)return;await this.#_.batch(()=>{for(let F of _)if(F.type==="put")this.#_.put(F.key,Buffer.from(F.value));else this.#_.remove(F.key)})}async conditionalBatch(_,F){return this.#E(),Q("conditionalBatch conditions",_.length),Q("conditionalBatch operations",F.length),this.#_.transactionSync(()=>{for(let X of _){let U=this.#_.get(X.key),G=U===void 0?null:new Uint8Array(U);if(!K(G,X.expectedValue))return!1}for(let X of F)if(X.type==="put")this.#_.putSync(X.key,Buffer.from(X.value));else this.#_.removeSync(X.key);return!0})}close(){return this.#Y=!0,this.#F??=(async()=>{await Promise.resolve(),await this.#_.close()})(),this.#F}[Symbol.dispose](){this.close()}}export{f as LMDBStorage};
2
+ var d=import.meta.require,p=(_,F,E)=>{if(F!=null){if(typeof F!=="object"&&typeof F!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let X;if(E)X=F[Symbol.asyncDispose];if(X===void 0)X=F[Symbol.dispose];if(typeof X!=="function")throw TypeError("Object not disposable");_.push([E,X,F])}else if(E)_.push([E]);return F},a=(_,F,E)=>{let X=(G)=>F=E?new SuppressedError(G,F,"An error was suppressed during disposal"):(E=!0,G),U=(G)=>{while(G=_.pop())try{var Z=G[1]&&G[1].call(G[2]);if(G[0])return Promise.resolve(Z).then(U,(M)=>(X(M),U()))}catch(M){X(M)}if(E)throw F};return U()};function L(_,F,E){if(!_.capabilities()[F])throw Error(`Feature "${E}" requires storage capability "${F}", but this storage backend does not provide it.`)}function x(_){let F=_.capabilities(),E=[];if(F.persistence!=="local"&&F.persistence!=="remote")E.push(`persistence must be "local" or "remote" (got "${F.persistence}")`);if(F.readAfterWrite!=="linearizable")E.push(`readAfterWrite must be "linearizable" (got "${F.readAfterWrite}")`);if(F.scanConsistency!=="snapshot")E.push(`scanConsistency must be "snapshot" (got "${F.scanConsistency}")`);if(!F.atomicBatch)E.push("atomicBatch must be true");if(!F.conditionalBatch)E.push("conditionalBatch must be true");if(E.length>0)throw Error(`Storage is not durable enough for recovery: ${E.join("; ")}.`)}var D="default";async function T(_,F){return await _.get(F)!==null}async function*j(_,F,E){for await(let[X]of _.scan(F,E))yield X}async function W(_,F){let E=0;for await(let X of j(_,F))E++;return E}async function B(_,F){let E=[];for await(let X of j(_,F))E.push({type:"delete",key:X});if(E.length===0)return 0;return await _.batch(E),E.length}async function C(_,F,E){let X=[];for await(let U of j(_,F,E))X.push({type:"delete",key:U});if(X.length===0)return 0;return await _.batch(X),X.length}var g=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var N=1e4,F_=1e4;class z extends Error{code="StorageBatchOperationLimitExceededError";cap=N;count;target;constructor(_,F){super(`${_} count ${F} exceeds MAX_BATCH_OPERATIONS (${N}).`);this.name="StorageBatchOperationLimitExceededError",this.target=_,this.count=F}}function Q(_,F){if(F>N)throw new z(_,F)}function V(_){return _.length>0?_.slice(0,-1)+String.fromCharCode(_.charCodeAt(_.length-1)+1):"\xFF"}function R(_,F={}){if(F.gt!==void 0&&_<=F.gt)return!1;if(F.gte!==void 0&&_<F.gte)return!1;if(F.lt!==void 0&&_>=F.lt)return!1;if(F.lte!==void 0&&_>F.lte)return!1;return!0}function K(_,F){if(_===null||F===null)return _===F;if(_.byteLength!==F.byteLength)return!1;for(let E=0;E<_.byteLength;E++)if(_[E]!==F[E])return!1;return!0}async function v(_,F){if(_.has)return _.has(F);return T(_,F)}function h(_,F,E){if(_.keys)return _.keys(F,E);return j(_,F,E)}async function P(_,F){if(_.count)return _.count(F);return W(_,F)}async function O(_,F){if(_.deletePrefix)return _.deletePrefix(F);return B(_,F)}async function E_(_,F){Q("batch operations",F.length),await _.batch(F)}async function b(_,F,E){if(Q("conditionalBatch conditions",F.length),Q("conditionalBatch operations",E.length),L(_,"conditionalBatch","storageConditionalBatch"),!_.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return _.conditionalBatch(F,E)}function Y(_){return encodeURIComponent(_)}function Y_(_){return decodeURIComponent(_)}function X_(_){try{return decodeURIComponent(_)}catch{return null}}var J=(_)=>String(_).padStart(16,"0"),I="0",w="1",A=(_,F,E,X)=>`sig:${Y(_)}:${Y(F)}:${X}:${Y(E)}`,U_={workflow:(_)=>`wf:${Y(_)}`,checkpoint:(_)=>`wf:${Y(_)}:ckpt`,checkpointHistory:(_,F)=>`wf:${Y(_)}:ckpt:${String(F).padStart(10,"0")}`,timelinePrefix:(_)=>`wf:${Y(_)}:timeline:`,timeline:(_,F)=>`wf:${Y(_)}:timeline:${String(F).padStart(10,"0")}`,schedule:(_)=>`schedule:${Y(_)}`,scheduleTick:(_,F)=>`schedule-due:${String(_).padStart(16,"0")}:${Y(F)}`,scheduleRun:(_)=>`schedule-run:${Y(_)}`,scheduleRunLink:(_)=>`schedule-run-link:${Y(_)}`,scheduleRunBySchedulePrefix:(_)=>`schedule-run-by-schedule:${Y(_)}:`,scheduleRunBySchedule:(_,F)=>`schedule-run-by-schedule:${Y(_)}:${Y(F)}`,operation:(_,F,E)=>`op:${_}:${J(F)}:${E}`,operationInflight:(_)=>`op:inflight:${_}`,operationQueued:(_)=>`op:queued:${_}`,operationResolved:(_)=>`op:resolved:${_}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(_)=>`op:dead-letter:${_}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(_,F,E)=>`audit:bulk:${J(_)}:${Y(F)}:${Y(E)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(_,F)=>`op:resolved-by-time:${J(_)}:${Y(F)}`,asyncActivity:(_,F)=>`async-act:v1:${Y(_)}:${Y(F)}`,asyncActivityResolution:(_,F)=>`async-act:v1:${Y(_)}:${Y(F)}:resolution`,activityReconciliationPrefix:(_)=>`actrec:v1:${Y(_)}:`,activityReconciliation:(_,F,E)=>`actrec:v1:${Y(_)}:${Y(F)}:${E}`,eventPrefix:(_)=>`ev:${Y(_)}:`,event:(_,F)=>`ev:${Y(_)}:${String(F).padStart(10,"0")}`,eventHead:(_)=>`ev:${Y(_)}:head`,eventWatermark:(_)=>`ev:${Y(_)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(_)=>`fleet-event:${String(_).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(_)=>`fleet-event-by-workflow:${Y(_)}:`,fleetEventByWorkflow:(_,F)=>`fleet-event-by-workflow:${Y(_)}:${String(F).padStart(10,"0")}`,signal:(_,F,E)=>A(_,F,E,w),startSignal:(_,F,E)=>A(_,F,E,I),signalSequence:(_)=>`sigseq:v1:${Y(_)}`,signalAcceptedResponsePrefix:(_)=>`sigres:v1:${Y(_)}:`,signalAcceptedResponse:(_,F,E)=>`sigres:v1:${Y(_)}:${Y(F)}:${Y(E)}`,deadline:(_,F)=>`wf-deadline:${J(_)}:${Y(F)}`,terminalCleanup:(_,F)=>`wf-cleanup:${J(_)}:${Y(F)}`,teardownTimer:(_,F)=>`wf-teardown:${J(_)}:${Y(F)}`,delayedStart:(_,F)=>`wf-delayed:${J(_)}:${Y(F)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(_,F)=>`wf-terminal:${J(_)}:${Y(F)}`,attribute:(_)=>`attr:${Y(_)}`,attributeIndex:(_,F,E)=>`idx:${_}:${F}:${Y(E)}`,tagIndex:(_,F)=>`tag:${Y(_)}:${Y(F)}`,updatePrefix:(_)=>`upd:${Y(_)}:`,update:(_,F)=>`upd:${Y(_)}:${F}`,updateResponse:(_)=>`upr:${_}`,updateIdempotency:(_,F)=>`upk:${Y(_)}:${F}`,startIdempotency:(_)=>`start-idem:${Y(_)}`,startIdempotencySignalId:(_)=>`start-idem:${_}`,livenessPrefix:()=>"liveness:",liveness:(_)=>`liveness:${Y(_)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(_,F,E)=>`budget:${_}:${F}:${E}`,review:(_,F)=>`review:${Y(_)}:${F}`,workflowHeaders:(_)=>`wf-headers:${Y(_)}`,childCancellationPrefix:(_)=>`child-cancel:${Y(_)}:`,childCancellation:(_,F)=>`child-cancel:${Y(_)}:${Y(F)}`,childWorkflowByParentPrefix:(_,F)=>`child-by-parent:${Y(_)}:${F===void 0?"":`${Y(F)}:`}`,childWorkflowByParent:(_,F,E)=>`child-by-parent:${Y(_)}:${F===void 0?"":`${Y(F)}:`}${Y(E)}`,terminalCleanupNeeded:(_)=>`wf-cleanup-needed:${Y(_)}`,workflowConcurrency:(_,F)=>`wf-concurrency:${Y(_)}:${Y(F)}`,workflowConcurrencyHolder:(_)=>`wf-concurrency-holder:${Y(_)}`,workflowHasServices:(_)=>`wf-has-services:${Y(_)}`,finalizerState:(_)=>`wf-finalizer-state:${Y(_)}`,teardownOwed:(_)=>`wf-teardown-needed:${Y(_)}`,teardownSucceeded:(_)=>`wf-teardown-succeeded:${Y(_)}`,teardownDeadLetter:(_)=>`wf-teardown-deadletter:${Y(_)}`,offload:(_,F)=>`offload:${Y(_)}:${F}`,archive:(_,F)=>`archive:${Y(_)}:${F}`,stateExecution:(_,F)=>`state:execution:${Y(_)}:${Y(F)}`,stateWorkflow:(_,F)=>`state:workflow-scope:${D}:${Y(_)}:${Y(F)}`,streamChunkPrefix:(_,F)=>`blob:${Y(_)}:${F}:chunk:`,streamChunk:(_,F,E)=>`blob:${Y(_)}:${F}:chunk:${String(E).padStart(10,"0")}`,streamTail:(_,F)=>`blob:${Y(_)}:${F}:tail`,streamMetadata:(_,F)=>`blob:${Y(_)}:${F}:meta`,budgetCharged:(_)=>`budget-charged:${_}`,toolEffect:(_,F,E)=>`tool-effect:${Y(_)}:${F}:${E}`,workflowVisibilityStatus:(_,F)=>`wf-idx-status:${Y(_)}:${Y(F)}`,workflowVisibilityType:(_,F)=>`wf-idx-type:${Y(_)}:${Y(F)}`,workflowVisibilityCreated:(_,F)=>`wf-idx-created:${J(_)}:${Y(F)}`,workflowVisibilityUpdated:(_,F)=>`wf-idx-updated:${J(_)}:${Y(F)}`,workflowVisibilityDeadline:(_,F)=>`wf-idx-deadline:${J(_)}:${Y(F)}`,workflowVisibilityManifest:(_)=>`wf-idx-manifest:${Y(_)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function k(_){if(_===void 0)return;if(typeof _!=="number"||!Number.isInteger(_)||_<0)throw Error("deleteRange limit must be a finite non-negative integer");return _===0?0:_}function H(_){let F={},E=!1;for(let U of["gt","gte","lt","lte"]){let G=_[U];if(G===void 0)continue;if(typeof G!=="string")throw Error("deleteRange bounds must be strings");F[U]=G,E=!0}if(!E)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let X=k(_.limit);if(X!==void 0)F.limit=X;return F}async function m(_,F,E){let X=H(E);if(_.deleteRange)return _.deleteRange(F,X);return C(_,F,X)}function S(_){return _.replaceAll(/:+$/g,"")}function l(_,F){let E=S(_),X=S(F);if(E.length===0)return X;if(X.length===0)return E;return`${E}:${X}`}class q{#_;#Y;constructor(_,F){this.#_=_,this.#Y=S(F)}#F(_){if(this.#Y.length===0)return _;return _.length===0?`${this.#Y}:`:`${this.#Y}:${_}`}#E(_){return _.map((F)=>{if(F.type==="put")return{type:"put",key:this.#F(F.key),value:F.value};return{type:"delete",key:this.#F(F.key)}})}#X(_){if(this.#Y.length===0)return _;return _.slice(this.#Y.length+1)}#U(_={}){let F={};if(_.limit!==void 0)F.limit=_.limit;if(_.reverse!==void 0)F.reverse=_.reverse;if(_.gt!==void 0)F.gt=this.#F(_.gt);if(_.gte!==void 0)F.gte=this.#F(_.gte);if(_.lt!==void 0)F.lt=this.#F(_.lt);if(_.lte!==void 0)F.lte=this.#F(_.lte);return F}#G(_){let F={};if(_.limit!==void 0)F.limit=_.limit;if(_.gt!==void 0)F.gt=this.#F(_.gt);if(_.gte!==void 0)F.gte=this.#F(_.gte);if(_.lt!==void 0)F.lt=this.#F(_.lt);if(_.lte!==void 0)F.lte=this.#F(_.lte);return F}capabilities(){return this.#_.capabilities()}scoped(_){return new q(this.#_,l(this.#Y,_))}async get(_){return this.#_.get(this.#F(_))}async put(_,F){await this.#_.put(this.#F(_),F)}async delete(_){await this.#_.delete(this.#F(_))}async*scan(_,F){for await(let[E,X]of this.#_.scan(this.#F(_),this.#U(F)))yield[this.#X(E),X]}async batch(_){Q("batch operations",_.length),await this.#_.batch(this.#E(_))}async conditionalBatch(_,F){return b(this.#_,_.map((E)=>({key:this.#F(E.key),expectedValue:E.expectedValue})),this.#E(F))}async has(_){return v(this.#_,this.#F(_))}async deletePrefix(_){return O(this.#_,this.#F(_))}async deleteRange(_,F){let E=this.#G(H(F));return m(this.#_,this.#F(_),E)}async*keys(_,F){for await(let E of h(this.#_,this.#F(_),this.#U(F)))yield this.#X(E)}async count(_){return P(this.#_,this.#F(_))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}function c(_,F){return new q(_,F)}import*as u from"lmdb";class f{#_;#Y=!1;#F=null;constructor(_){this.#_=u.open({path:_,encoding:"binary"})}#E(){if(this.#Y)throw Error("LMDBStorage is closed")}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!1}}async get(_){this.#E();let F=this.#_.get(_);if(F===void 0)return null;return new Uint8Array(F)}async put(_,F){this.#E(),await this.#_.put(_,Buffer.from(F))}async delete(_){this.#E(),await this.#_.remove(_)}async has(_){return this.#E(),this.#_.doesExist(_)}async deletePrefix(_){this.#E();let F=[];for await(let E of this.keys(_))F.push(E);if(F.length===0)return 0;return await this.#_.batch(()=>{for(let E of F)this.#_.remove(E)}),F.length}async deleteRange(_,F){this.#E();let E=H(F),X=[];for await(let U of this.keys(_,E))X.push(U);if(X.length===0)return 0;return await this.#_.batch(()=>{for(let U of X)this.#_.remove(U)}),X.length}async*scan(_,F={}){this.#E();let{limit:E,reverse:X}=F,U=V(_),G=X?this.#_.getRange({start:U,end:_,reverse:!0}):this.#_.getRange({start:_,end:U}),Z=0,M=!1;for(let{key:$,value:y}of G){if(!$.startsWith(_)){if(X&&!M)continue;break}if(M=!0,!R($,F))continue;if(E!==void 0&&Z>=E)break;yield[$,new Uint8Array(y)],Z++}}async*keys(_,F={}){this.#E();let{limit:E,reverse:X}=F,U=V(_),G=X?this.#_.getKeys({start:U,end:_,reverse:!0}):this.#_.getKeys({start:_,end:U}),Z=0,M=!1;for(let $ of G){if(!$.startsWith(_)){if(X&&!M)continue;break}if(M=!0,!R($,F))continue;if(E!==void 0&&Z>=E)break;yield $,Z++}}async count(_){this.#E();let F=V(_);return this.#_.getKeysCount({start:_,end:F})}scoped(_){return this.#E(),c(this,_)}async batch(_){if(this.#E(),Q("batch operations",_.length),_.length===0)return;await this.#_.batch(()=>{for(let F of _)if(F.type==="put")this.#_.put(F.key,Buffer.from(F.value));else this.#_.remove(F.key)})}async conditionalBatch(_,F){return this.#E(),Q("conditionalBatch conditions",_.length),Q("conditionalBatch operations",F.length),this.#_.transactionSync(()=>{for(let X of _){let U=this.#_.get(X.key),G=U===void 0?null:new Uint8Array(U);if(!K(G,X.expectedValue))return!1}for(let X of F)if(X.type==="put")this.#_.putSync(X.key,Buffer.from(X.value));else this.#_.removeSync(X.key);return!0})}close(){return this.#Y=!0,this.#F??=(async()=>{await Promise.resolve(),await this.#_.close()})(),this.#F}[Symbol.dispose](){this.close()}}export{f as LMDBStorage};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var k=import.meta.require,l=(_,F,Y)=>{if(F!=null){if(typeof F!=="object"&&typeof F!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let E;if(Y)E=F[Symbol.asyncDispose];if(E===void 0)E=F[Symbol.dispose];if(typeof E!=="function")throw TypeError("Object not disposable");_.push([Y,E,F])}else if(Y)_.push([Y]);return F},d=(_,F,Y)=>{let E=(U)=>F=Y?new SuppressedError(U,F,"An error was suppressed during disposal"):(Y=!0,U),G=(U)=>{while(U=_.pop())try{var M=U[1]&&U[1].call(U[2]);if(U[0])return Promise.resolve(M).then(G,(J)=>(E(J),G()))}catch(J){E(J)}if(Y)throw F};return G()};function L(_,F,Y){if(!_.capabilities()[F])throw Error(`Feature "${Y}" requires storage capability "${F}", but this storage backend does not provide it.`)}function u(_){let F=_.capabilities(),Y=[];if(F.persistence!=="local"&&F.persistence!=="remote")Y.push(`persistence must be "local" or "remote" (got "${F.persistence}")`);if(F.readAfterWrite!=="linearizable")Y.push(`readAfterWrite must be "linearizable" (got "${F.readAfterWrite}")`);if(F.scanConsistency!=="snapshot")Y.push(`scanConsistency must be "snapshot" (got "${F.scanConsistency}")`);if(!F.atomicBatch)Y.push("atomicBatch must be true");if(!F.conditionalBatch)Y.push("conditionalBatch must be true");if(Y.length>0)throw Error(`Storage is not durable enough for recovery: ${Y.join("; ")}.`)}var D="default";async function C(_,F){return await _.get(F)!==null}async function*V(_,F,Y){for await(let[E]of _.scan(F,Y))yield E}async function R(_,F){let Y=0;for await(let E of V(_,F))Y++;return Y}async function B(_,F){let Y=[];for await(let E of V(_,F))Y.push({type:"delete",key:E});if(Y.length===0)return 0;return await _.batch(Y),Y.length}async function A(_,F,Y){let E=[];for await(let G of V(_,F,Y))E.push({type:"delete",key:G});if(E.length===0)return 0;return await _.batch(E),E.length}var g=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var N=1e4,o=1e4;class z extends Error{code="StorageBatchOperationLimitExceededError";cap=N;count;target;constructor(_,F){super(`${_} count ${F} exceeds MAX_BATCH_OPERATIONS (${N}).`);this.name="StorageBatchOperationLimitExceededError",this.target=_,this.count=F}}function Z(_,F){if(F>N)throw new z(_,F)}function $(_){return _.length>0?_.slice(0,-1)+String.fromCharCode(_.charCodeAt(_.length-1)+1):"\xFF"}function H(_,F={}){if(F.gt!==void 0&&_<=F.gt)return!1;if(F.gte!==void 0&&_<F.gte)return!1;if(F.lt!==void 0&&_>=F.lt)return!1;if(F.lte!==void 0&&_>F.lte)return!1;return!0}function P(_,F){if(_===null||F===null)return _===F;if(_.byteLength!==F.byteLength)return!1;for(let Y=0;Y<_.byteLength;Y++)if(_[Y]!==F[Y])return!1;return!0}async function v(_,F){if(_.has)return _.has(F);return C(_,F)}function O(_,F,Y){if(_.keys)return _.keys(F,Y);return V(_,F,Y)}async function h(_,F){if(_.count)return _.count(F);return R(_,F)}async function K(_,F){if(_.deletePrefix)return _.deletePrefix(F);return B(_,F)}async function __(_,F){Z("batch operations",F.length),await _.batch(F)}async function b(_,F,Y){if(Z("conditionalBatch conditions",F.length),Z("conditionalBatch operations",Y.length),L(_,"conditionalBatch","storageConditionalBatch"),!_.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return _.conditionalBatch(F,Y)}function X(_){return encodeURIComponent(_)}function F_(_){return decodeURIComponent(_)}function Y_(_){try{return decodeURIComponent(_)}catch{return null}}var Q=(_)=>String(_).padStart(16,"0"),x="0",y="1",S=(_,F,Y,E)=>`sig:${X(_)}:${X(F)}:${E}:${X(Y)}`,X_={workflow:(_)=>`wf:${X(_)}`,checkpoint:(_)=>`wf:${X(_)}:ckpt`,checkpointHistory:(_,F)=>`wf:${X(_)}:ckpt:${String(F).padStart(10,"0")}`,timelinePrefix:(_)=>`wf:${X(_)}:timeline:`,timeline:(_,F)=>`wf:${X(_)}:timeline:${String(F).padStart(10,"0")}`,schedule:(_)=>`schedule:${X(_)}`,scheduleTick:(_,F)=>`schedule-due:${String(_).padStart(16,"0")}:${X(F)}`,scheduleRun:(_)=>`schedule-run:${X(_)}`,scheduleRunLink:(_)=>`schedule-run-link:${X(_)}`,scheduleRunBySchedulePrefix:(_)=>`schedule-run-by-schedule:${X(_)}:`,scheduleRunBySchedule:(_,F)=>`schedule-run-by-schedule:${X(_)}:${X(F)}`,operation:(_,F,Y)=>`op:${_}:${Q(F)}:${Y}`,operationInflight:(_)=>`op:inflight:${_}`,operationQueued:(_)=>`op:queued:${_}`,operationResolved:(_)=>`op:resolved:${_}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(_)=>`op:dead-letter:${_}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(_,F,Y)=>`audit:bulk:${Q(_)}:${X(F)}:${X(Y)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(_,F)=>`op:resolved-by-time:${Q(_)}:${X(F)}`,asyncActivity:(_,F)=>`async-act:v1:${X(_)}:${X(F)}`,asyncActivityResolution:(_,F)=>`async-act:v1:${X(_)}:${X(F)}:resolution`,activityReconciliationPrefix:(_)=>`actrec:v1:${X(_)}:`,activityReconciliation:(_,F,Y)=>`actrec:v1:${X(_)}:${X(F)}:${Y}`,eventPrefix:(_)=>`ev:${X(_)}:`,event:(_,F)=>`ev:${X(_)}:${String(F).padStart(10,"0")}`,eventHead:(_)=>`ev:${X(_)}:head`,eventWatermark:(_)=>`ev:${X(_)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(_)=>`fleet-event:${String(_).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(_)=>`fleet-event-by-workflow:${X(_)}:`,fleetEventByWorkflow:(_,F)=>`fleet-event-by-workflow:${X(_)}:${String(F).padStart(10,"0")}`,signal:(_,F,Y)=>S(_,F,Y,y),startSignal:(_,F,Y)=>S(_,F,Y,x),signalSequence:(_)=>`sigseq:v1:${X(_)}`,signalAcceptedResponsePrefix:(_)=>`sigres:v1:${X(_)}:`,signalAcceptedResponse:(_,F,Y)=>`sigres:v1:${X(_)}:${X(F)}:${X(Y)}`,deadline:(_,F)=>`wf-deadline:${Q(_)}:${X(F)}`,terminalCleanup:(_,F)=>`wf-cleanup:${Q(_)}:${X(F)}`,teardownTimer:(_,F)=>`wf-teardown:${Q(_)}:${X(F)}`,delayedStart:(_,F)=>`wf-delayed:${Q(_)}:${X(F)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(_,F)=>`wf-terminal:${Q(_)}:${X(F)}`,attribute:(_)=>`attr:${X(_)}`,attributeIndex:(_,F,Y)=>`idx:${_}:${F}:${X(Y)}`,tagIndex:(_,F)=>`tag:${X(_)}:${X(F)}`,updatePrefix:(_)=>`upd:${X(_)}:`,update:(_,F)=>`upd:${X(_)}:${F}`,updateResponse:(_)=>`upr:${_}`,updateIdempotency:(_,F)=>`upk:${X(_)}:${F}`,startIdempotency:(_)=>`start-idem:${X(_)}`,startIdempotencySignalId:(_)=>`start-idem:${_}`,livenessPrefix:()=>"liveness:",liveness:(_)=>`liveness:${X(_)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(_,F,Y)=>`budget:${_}:${F}:${Y}`,review:(_,F)=>`review:${X(_)}:${F}`,workflowHeaders:(_)=>`wf-headers:${X(_)}`,childCancellationPrefix:(_)=>`child-cancel:${X(_)}:`,childCancellation:(_,F)=>`child-cancel:${X(_)}:${X(F)}`,childWorkflowByParentPrefix:(_,F)=>`child-by-parent:${X(_)}:${F===void 0?"":`${X(F)}:`}`,childWorkflowByParent:(_,F,Y)=>`child-by-parent:${X(_)}:${F===void 0?"":`${X(F)}:`}${X(Y)}`,terminalCleanupNeeded:(_)=>`wf-cleanup-needed:${X(_)}`,workflowConcurrency:(_,F)=>`wf-concurrency:${X(_)}:${X(F)}`,workflowConcurrencyHolder:(_)=>`wf-concurrency-holder:${X(_)}`,workflowHasServices:(_)=>`wf-has-services:${X(_)}`,finalizerState:(_)=>`wf-finalizer-state:${X(_)}`,teardownOwed:(_)=>`wf-teardown-needed:${X(_)}`,teardownSucceeded:(_)=>`wf-teardown-succeeded:${X(_)}`,teardownDeadLetter:(_)=>`wf-teardown-deadletter:${X(_)}`,offload:(_,F)=>`offload:${X(_)}:${F}`,archive:(_,F)=>`archive:${X(_)}:${F}`,stateExecution:(_,F)=>`state:execution:${X(_)}:${X(F)}`,stateWorkflow:(_,F)=>`state:workflow-scope:${D}:${X(_)}:${X(F)}`,streamChunkPrefix:(_,F)=>`blob:${X(_)}:${F}:chunk:`,streamChunk:(_,F,Y)=>`blob:${X(_)}:${F}:chunk:${String(Y).padStart(10,"0")}`,streamTail:(_,F)=>`blob:${X(_)}:${F}:tail`,streamMetadata:(_,F)=>`blob:${X(_)}:${F}:meta`,budgetCharged:(_)=>`budget-charged:${_}`,toolEffect:(_,F,Y)=>`tool-effect:${X(_)}:${F}:${Y}`,workflowVisibilityStatus:(_,F)=>`wf-idx-status:${X(_)}:${X(F)}`,workflowVisibilityType:(_,F)=>`wf-idx-type:${X(_)}:${X(F)}`,workflowVisibilityCreated:(_,F)=>`wf-idx-created:${Q(_)}:${X(F)}`,workflowVisibilityUpdated:(_,F)=>`wf-idx-updated:${Q(_)}:${X(F)}`,workflowVisibilityDeadline:(_,F)=>`wf-idx-deadline:${Q(_)}:${X(F)}`,workflowVisibilityManifest:(_)=>`wf-idx-manifest:${X(_)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function I(_){if(_===void 0)return;if(typeof _!=="number"||!Number.isInteger(_)||_<0)throw Error("deleteRange limit must be a finite non-negative integer");return _===0?0:_}function j(_){let F={},Y=!1;for(let G of["gt","gte","lt","lte"]){let U=_[G];if(U===void 0)continue;if(typeof U!=="string")throw Error("deleteRange bounds must be strings");F[G]=U,Y=!0}if(!Y)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let E=I(_.limit);if(E!==void 0)F.limit=E;return F}async function m(_,F,Y){let E=j(Y);if(_.deleteRange)return _.deleteRange(F,E);return A(_,F,E)}function q(_){return _.replaceAll(/:+$/g,"")}function w(_,F){let Y=q(_),E=q(F);if(Y.length===0)return E;if(E.length===0)return Y;return`${Y}:${E}`}class T{#_;#Y;constructor(_,F){this.#_=_,this.#Y=q(F)}#F(_){if(this.#Y.length===0)return _;return _.length===0?`${this.#Y}:`:`${this.#Y}:${_}`}#X(_){if(this.#Y.length===0)return _;return _.slice(this.#Y.length+1)}#E(_={}){let F={};if(_.limit!==void 0)F.limit=_.limit;if(_.reverse!==void 0)F.reverse=_.reverse;if(_.gt!==void 0)F.gt=this.#F(_.gt);if(_.gte!==void 0)F.gte=this.#F(_.gte);if(_.lt!==void 0)F.lt=this.#F(_.lt);if(_.lte!==void 0)F.lte=this.#F(_.lte);return F}#U(_){let F={};if(_.limit!==void 0)F.limit=_.limit;if(_.gt!==void 0)F.gt=this.#F(_.gt);if(_.gte!==void 0)F.gte=this.#F(_.gte);if(_.lt!==void 0)F.lt=this.#F(_.lt);if(_.lte!==void 0)F.lte=this.#F(_.lte);return F}capabilities(){return this.#_.capabilities()}scoped(_){return new T(this.#_,w(this.#Y,_))}async get(_){return this.#_.get(this.#F(_))}async put(_,F){await this.#_.put(this.#F(_),F)}async delete(_){await this.#_.delete(this.#F(_))}async*scan(_,F){for await(let[Y,E]of this.#_.scan(this.#F(_),this.#E(F)))yield[this.#X(Y),E]}async batch(_){Z("batch operations",_.length),await this.#_.batch(_.map((F)=>{if(F.type==="put")return{type:"put",key:this.#F(F.key),value:F.value};return{type:"delete",key:this.#F(F.key)}}))}async conditionalBatch(_,F){return b(this.#_,_.map((Y)=>({key:this.#F(Y.key),expectedValue:Y.expectedValue})),F.map((Y)=>{if(Y.type==="put")return{type:"put",key:this.#F(Y.key),value:Y.value};return{type:"delete",key:this.#F(Y.key)}}))}async has(_){return v(this.#_,this.#F(_))}async deletePrefix(_){return K(this.#_,this.#F(_))}async deleteRange(_,F){let Y=this.#U(j(F));return m(this.#_,this.#F(_),Y)}async*keys(_,F){for await(let Y of O(this.#_,this.#F(_),this.#E(F)))yield this.#X(Y)}async count(_){return h(this.#_,this.#F(_))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}function c(_,F){return new T(_,F)}class f{#_;constructor(){this.#_=new Map}capabilities(){return{persistence:"ephemeral",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#Y(_,F,Y){return _>=F&&_<Y}#F(_,F){let Y=[];for(let E of this.#_.keys())if(this.#Y(E,_,F))Y.push(E);return Y.toSorted()}async get(_){return this.#_.get(_)??null}async put(_,F){this.#_.set(_,F)}async delete(_){this.#_.delete(_)}async*scan(_,F={}){let{limit:Y,reverse:E}=F,G=$(_),U=this.#F(_,G);if(U=U.filter((J)=>H(J,F)),E)U.reverse();let M=0;for(let J of U){if(Y!==void 0&&M>=Y)break;let W=this.#_.get(J);if(W!==void 0)yield[J,W],M++}}async batch(_){Z("batch operations",_.length),this.#X(_)}#X(_){for(let F of _)if(F.type==="put")this.#_.set(F.key,F.value);else this.#_.delete(F.key)}async conditionalBatch(_,F){Z("conditionalBatch conditions",_.length),Z("conditionalBatch operations",F.length);for(let Y of _){let E=this.#_.get(Y.key)??null;if(!P(E,Y.expectedValue))return!1}return this.#X(F),!0}async has(_){return this.#_.has(_)}async deletePrefix(_){let F=$(_),Y=this.#F(_,F);for(let E of Y)this.#_.delete(E);return Y.length}async deleteRange(_,F){let Y=j(F),E=$(_),G=this.#F(_,E).filter((M)=>H(M,Y)),U=Y.limit===void 0?G:G.slice(0,Y.limit);for(let M of U)this.#_.delete(M);return U.length}async*keys(_,F={}){let{limit:Y,reverse:E}=F,G=$(_),U=this.#F(_,G);if(U=U.filter((J)=>H(J,F)),E)U.reverse();let M=0;for(let J of U){if(Y!==void 0&&M>=Y)break;yield J,M++}}async count(_){let F=$(_);return this.#F(_,F).length}scoped(_){return c(this,_)}get size(){return this.#_.size}clear(){this.#_.clear()}snapshot(){let _=new Map;for(let[F,Y]of this.#_)_.set(F,new Uint8Array(Y));return _}[Symbol.dispose](){this.#_.clear()}}export{f as MemoryStorage};
2
+ var k=import.meta.require,l=(_,F,Y)=>{if(F!=null){if(typeof F!=="object"&&typeof F!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let E;if(Y)E=F[Symbol.asyncDispose];if(E===void 0)E=F[Symbol.dispose];if(typeof E!=="function")throw TypeError("Object not disposable");_.push([Y,E,F])}else if(Y)_.push([Y]);return F},d=(_,F,Y)=>{let E=(U)=>F=Y?new SuppressedError(U,F,"An error was suppressed during disposal"):(Y=!0,U),G=(U)=>{while(U=_.pop())try{var M=U[1]&&U[1].call(U[2]);if(U[0])return Promise.resolve(M).then(G,(J)=>(E(J),G()))}catch(J){E(J)}if(Y)throw F};return G()};function L(_,F,Y){if(!_.capabilities()[F])throw Error(`Feature "${Y}" requires storage capability "${F}", but this storage backend does not provide it.`)}function u(_){let F=_.capabilities(),Y=[];if(F.persistence!=="local"&&F.persistence!=="remote")Y.push(`persistence must be "local" or "remote" (got "${F.persistence}")`);if(F.readAfterWrite!=="linearizable")Y.push(`readAfterWrite must be "linearizable" (got "${F.readAfterWrite}")`);if(F.scanConsistency!=="snapshot")Y.push(`scanConsistency must be "snapshot" (got "${F.scanConsistency}")`);if(!F.atomicBatch)Y.push("atomicBatch must be true");if(!F.conditionalBatch)Y.push("conditionalBatch must be true");if(Y.length>0)throw Error(`Storage is not durable enough for recovery: ${Y.join("; ")}.`)}var D="default";async function C(_,F){return await _.get(F)!==null}async function*V(_,F,Y){for await(let[E]of _.scan(F,Y))yield E}async function R(_,F){let Y=0;for await(let E of V(_,F))Y++;return Y}async function B(_,F){let Y=[];for await(let E of V(_,F))Y.push({type:"delete",key:E});if(Y.length===0)return 0;return await _.batch(Y),Y.length}async function A(_,F,Y){let E=[];for await(let G of V(_,F,Y))E.push({type:"delete",key:G});if(E.length===0)return 0;return await _.batch(E),E.length}var g=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var N=1e4,o=1e4;class z extends Error{code="StorageBatchOperationLimitExceededError";cap=N;count;target;constructor(_,F){super(`${_} count ${F} exceeds MAX_BATCH_OPERATIONS (${N}).`);this.name="StorageBatchOperationLimitExceededError",this.target=_,this.count=F}}function Z(_,F){if(F>N)throw new z(_,F)}function $(_){return _.length>0?_.slice(0,-1)+String.fromCharCode(_.charCodeAt(_.length-1)+1):"\xFF"}function H(_,F={}){if(F.gt!==void 0&&_<=F.gt)return!1;if(F.gte!==void 0&&_<F.gte)return!1;if(F.lt!==void 0&&_>=F.lt)return!1;if(F.lte!==void 0&&_>F.lte)return!1;return!0}function P(_,F){if(_===null||F===null)return _===F;if(_.byteLength!==F.byteLength)return!1;for(let Y=0;Y<_.byteLength;Y++)if(_[Y]!==F[Y])return!1;return!0}async function v(_,F){if(_.has)return _.has(F);return C(_,F)}function K(_,F,Y){if(_.keys)return _.keys(F,Y);return V(_,F,Y)}async function h(_,F){if(_.count)return _.count(F);return R(_,F)}async function O(_,F){if(_.deletePrefix)return _.deletePrefix(F);return B(_,F)}async function __(_,F){Z("batch operations",F.length),await _.batch(F)}async function b(_,F,Y){if(Z("conditionalBatch conditions",F.length),Z("conditionalBatch operations",Y.length),L(_,"conditionalBatch","storageConditionalBatch"),!_.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return _.conditionalBatch(F,Y)}function X(_){return encodeURIComponent(_)}function F_(_){return decodeURIComponent(_)}function Y_(_){try{return decodeURIComponent(_)}catch{return null}}var Q=(_)=>String(_).padStart(16,"0"),x="0",y="1",S=(_,F,Y,E)=>`sig:${X(_)}:${X(F)}:${E}:${X(Y)}`,X_={workflow:(_)=>`wf:${X(_)}`,checkpoint:(_)=>`wf:${X(_)}:ckpt`,checkpointHistory:(_,F)=>`wf:${X(_)}:ckpt:${String(F).padStart(10,"0")}`,timelinePrefix:(_)=>`wf:${X(_)}:timeline:`,timeline:(_,F)=>`wf:${X(_)}:timeline:${String(F).padStart(10,"0")}`,schedule:(_)=>`schedule:${X(_)}`,scheduleTick:(_,F)=>`schedule-due:${String(_).padStart(16,"0")}:${X(F)}`,scheduleRun:(_)=>`schedule-run:${X(_)}`,scheduleRunLink:(_)=>`schedule-run-link:${X(_)}`,scheduleRunBySchedulePrefix:(_)=>`schedule-run-by-schedule:${X(_)}:`,scheduleRunBySchedule:(_,F)=>`schedule-run-by-schedule:${X(_)}:${X(F)}`,operation:(_,F,Y)=>`op:${_}:${Q(F)}:${Y}`,operationInflight:(_)=>`op:inflight:${_}`,operationQueued:(_)=>`op:queued:${_}`,operationResolved:(_)=>`op:resolved:${_}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(_)=>`op:dead-letter:${_}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(_,F,Y)=>`audit:bulk:${Q(_)}:${X(F)}:${X(Y)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(_,F)=>`op:resolved-by-time:${Q(_)}:${X(F)}`,asyncActivity:(_,F)=>`async-act:v1:${X(_)}:${X(F)}`,asyncActivityResolution:(_,F)=>`async-act:v1:${X(_)}:${X(F)}:resolution`,activityReconciliationPrefix:(_)=>`actrec:v1:${X(_)}:`,activityReconciliation:(_,F,Y)=>`actrec:v1:${X(_)}:${X(F)}:${Y}`,eventPrefix:(_)=>`ev:${X(_)}:`,event:(_,F)=>`ev:${X(_)}:${String(F).padStart(10,"0")}`,eventHead:(_)=>`ev:${X(_)}:head`,eventWatermark:(_)=>`ev:${X(_)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(_)=>`fleet-event:${String(_).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(_)=>`fleet-event-by-workflow:${X(_)}:`,fleetEventByWorkflow:(_,F)=>`fleet-event-by-workflow:${X(_)}:${String(F).padStart(10,"0")}`,signal:(_,F,Y)=>S(_,F,Y,y),startSignal:(_,F,Y)=>S(_,F,Y,x),signalSequence:(_)=>`sigseq:v1:${X(_)}`,signalAcceptedResponsePrefix:(_)=>`sigres:v1:${X(_)}:`,signalAcceptedResponse:(_,F,Y)=>`sigres:v1:${X(_)}:${X(F)}:${X(Y)}`,deadline:(_,F)=>`wf-deadline:${Q(_)}:${X(F)}`,terminalCleanup:(_,F)=>`wf-cleanup:${Q(_)}:${X(F)}`,teardownTimer:(_,F)=>`wf-teardown:${Q(_)}:${X(F)}`,delayedStart:(_,F)=>`wf-delayed:${Q(_)}:${X(F)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(_,F)=>`wf-terminal:${Q(_)}:${X(F)}`,attribute:(_)=>`attr:${X(_)}`,attributeIndex:(_,F,Y)=>`idx:${_}:${F}:${X(Y)}`,tagIndex:(_,F)=>`tag:${X(_)}:${X(F)}`,updatePrefix:(_)=>`upd:${X(_)}:`,update:(_,F)=>`upd:${X(_)}:${F}`,updateResponse:(_)=>`upr:${_}`,updateIdempotency:(_,F)=>`upk:${X(_)}:${F}`,startIdempotency:(_)=>`start-idem:${X(_)}`,startIdempotencySignalId:(_)=>`start-idem:${_}`,livenessPrefix:()=>"liveness:",liveness:(_)=>`liveness:${X(_)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(_,F,Y)=>`budget:${_}:${F}:${Y}`,review:(_,F)=>`review:${X(_)}:${F}`,workflowHeaders:(_)=>`wf-headers:${X(_)}`,childCancellationPrefix:(_)=>`child-cancel:${X(_)}:`,childCancellation:(_,F)=>`child-cancel:${X(_)}:${X(F)}`,childWorkflowByParentPrefix:(_,F)=>`child-by-parent:${X(_)}:${F===void 0?"":`${X(F)}:`}`,childWorkflowByParent:(_,F,Y)=>`child-by-parent:${X(_)}:${F===void 0?"":`${X(F)}:`}${X(Y)}`,terminalCleanupNeeded:(_)=>`wf-cleanup-needed:${X(_)}`,workflowConcurrency:(_,F)=>`wf-concurrency:${X(_)}:${X(F)}`,workflowConcurrencyHolder:(_)=>`wf-concurrency-holder:${X(_)}`,workflowHasServices:(_)=>`wf-has-services:${X(_)}`,finalizerState:(_)=>`wf-finalizer-state:${X(_)}`,teardownOwed:(_)=>`wf-teardown-needed:${X(_)}`,teardownSucceeded:(_)=>`wf-teardown-succeeded:${X(_)}`,teardownDeadLetter:(_)=>`wf-teardown-deadletter:${X(_)}`,offload:(_,F)=>`offload:${X(_)}:${F}`,archive:(_,F)=>`archive:${X(_)}:${F}`,stateExecution:(_,F)=>`state:execution:${X(_)}:${X(F)}`,stateWorkflow:(_,F)=>`state:workflow-scope:${D}:${X(_)}:${X(F)}`,streamChunkPrefix:(_,F)=>`blob:${X(_)}:${F}:chunk:`,streamChunk:(_,F,Y)=>`blob:${X(_)}:${F}:chunk:${String(Y).padStart(10,"0")}`,streamTail:(_,F)=>`blob:${X(_)}:${F}:tail`,streamMetadata:(_,F)=>`blob:${X(_)}:${F}:meta`,budgetCharged:(_)=>`budget-charged:${_}`,toolEffect:(_,F,Y)=>`tool-effect:${X(_)}:${F}:${Y}`,workflowVisibilityStatus:(_,F)=>`wf-idx-status:${X(_)}:${X(F)}`,workflowVisibilityType:(_,F)=>`wf-idx-type:${X(_)}:${X(F)}`,workflowVisibilityCreated:(_,F)=>`wf-idx-created:${Q(_)}:${X(F)}`,workflowVisibilityUpdated:(_,F)=>`wf-idx-updated:${Q(_)}:${X(F)}`,workflowVisibilityDeadline:(_,F)=>`wf-idx-deadline:${Q(_)}:${X(F)}`,workflowVisibilityManifest:(_)=>`wf-idx-manifest:${X(_)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function I(_){if(_===void 0)return;if(typeof _!=="number"||!Number.isInteger(_)||_<0)throw Error("deleteRange limit must be a finite non-negative integer");return _===0?0:_}function j(_){let F={},Y=!1;for(let G of["gt","gte","lt","lte"]){let U=_[G];if(U===void 0)continue;if(typeof U!=="string")throw Error("deleteRange bounds must be strings");F[G]=U,Y=!0}if(!Y)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let E=I(_.limit);if(E!==void 0)F.limit=E;return F}async function m(_,F,Y){let E=j(Y);if(_.deleteRange)return _.deleteRange(F,E);return A(_,F,E)}function q(_){return _.replaceAll(/:+$/g,"")}function w(_,F){let Y=q(_),E=q(F);if(Y.length===0)return E;if(E.length===0)return Y;return`${Y}:${E}`}class T{#_;#Y;constructor(_,F){this.#_=_,this.#Y=q(F)}#F(_){if(this.#Y.length===0)return _;return _.length===0?`${this.#Y}:`:`${this.#Y}:${_}`}#X(_){return _.map((F)=>{if(F.type==="put")return{type:"put",key:this.#F(F.key),value:F.value};return{type:"delete",key:this.#F(F.key)}})}#E(_){if(this.#Y.length===0)return _;return _.slice(this.#Y.length+1)}#U(_={}){let F={};if(_.limit!==void 0)F.limit=_.limit;if(_.reverse!==void 0)F.reverse=_.reverse;if(_.gt!==void 0)F.gt=this.#F(_.gt);if(_.gte!==void 0)F.gte=this.#F(_.gte);if(_.lt!==void 0)F.lt=this.#F(_.lt);if(_.lte!==void 0)F.lte=this.#F(_.lte);return F}#G(_){let F={};if(_.limit!==void 0)F.limit=_.limit;if(_.gt!==void 0)F.gt=this.#F(_.gt);if(_.gte!==void 0)F.gte=this.#F(_.gte);if(_.lt!==void 0)F.lt=this.#F(_.lt);if(_.lte!==void 0)F.lte=this.#F(_.lte);return F}capabilities(){return this.#_.capabilities()}scoped(_){return new T(this.#_,w(this.#Y,_))}async get(_){return this.#_.get(this.#F(_))}async put(_,F){await this.#_.put(this.#F(_),F)}async delete(_){await this.#_.delete(this.#F(_))}async*scan(_,F){for await(let[Y,E]of this.#_.scan(this.#F(_),this.#U(F)))yield[this.#E(Y),E]}async batch(_){Z("batch operations",_.length),await this.#_.batch(this.#X(_))}async conditionalBatch(_,F){return b(this.#_,_.map((Y)=>({key:this.#F(Y.key),expectedValue:Y.expectedValue})),this.#X(F))}async has(_){return v(this.#_,this.#F(_))}async deletePrefix(_){return O(this.#_,this.#F(_))}async deleteRange(_,F){let Y=this.#G(j(F));return m(this.#_,this.#F(_),Y)}async*keys(_,F){for await(let Y of K(this.#_,this.#F(_),this.#U(F)))yield this.#E(Y)}async count(_){return h(this.#_,this.#F(_))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}function c(_,F){return new T(_,F)}class f{#_;constructor(){this.#_=new Map}capabilities(){return{persistence:"ephemeral",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#Y(_,F,Y){return _>=F&&_<Y}#F(_,F){let Y=[];for(let E of this.#_.keys())if(this.#Y(E,_,F))Y.push(E);return Y.toSorted()}async get(_){return this.#_.get(_)??null}async put(_,F){this.#_.set(_,F)}async delete(_){this.#_.delete(_)}async*scan(_,F={}){let{limit:Y,reverse:E}=F,G=$(_),U=this.#F(_,G);if(U=U.filter((J)=>H(J,F)),E)U.reverse();let M=0;for(let J of U){if(Y!==void 0&&M>=Y)break;let W=this.#_.get(J);if(W!==void 0)yield[J,W],M++}}async batch(_){Z("batch operations",_.length),this.#X(_)}#X(_){for(let F of _)if(F.type==="put")this.#_.set(F.key,F.value);else this.#_.delete(F.key)}async conditionalBatch(_,F){Z("conditionalBatch conditions",_.length),Z("conditionalBatch operations",F.length);for(let Y of _){let E=this.#_.get(Y.key)??null;if(!P(E,Y.expectedValue))return!1}return this.#X(F),!0}async has(_){return this.#_.has(_)}async deletePrefix(_){let F=$(_),Y=this.#F(_,F);for(let E of Y)this.#_.delete(E);return Y.length}async deleteRange(_,F){let Y=j(F),E=$(_),G=this.#F(_,E).filter((M)=>H(M,Y)),U=Y.limit===void 0?G:G.slice(0,Y.limit);for(let M of U)this.#_.delete(M);return U.length}async*keys(_,F={}){let{limit:Y,reverse:E}=F,G=$(_),U=this.#F(_,G);if(U=U.filter((J)=>H(J,F)),E)U.reverse();let M=0;for(let J of U){if(Y!==void 0&&M>=Y)break;yield J,M++}}async count(_){let F=$(_);return this.#F(_,F).length}scoped(_){return c(this,_)}get size(){return this.#_.size}clear(){this.#_.clear()}snapshot(){let _=new Map;for(let[F,Y]of this.#_)_.set(F,new Uint8Array(Y));return _}[Symbol.dispose](){this.#_.clear()}}export{f as MemoryStorage};
@@ -1,20 +1,7 @@
1
- import { PostgresKeyValueStorage, type PostgresKeyValueStorageOptions, type PostgresPool, type PostgresPoolClient } from './postgres-key-value-storage.ts';
1
+ import { PostgresKeyValueStorage, type PostgresKeyValueStorageOptions, type PostgresPool } from './postgres-key-value-storage.ts';
2
2
  /**
3
- * A connection that can run a single interactive transaction, obtained from
4
- * {@link NeonPool.connect}. Alias of the driver-agnostic
5
- * {@link PostgresPoolClient}; kept for backward-compatible imports.
6
- */
7
- export type NeonPoolClient = PostgresPoolClient;
8
- /**
9
- * Minimal structural view of a node-postgres `Pool`. The Neon serverless `Pool`
10
- * satisfies this; the PGlite test backend is wrapped to satisfy it too. Alias of
11
- * the driver-agnostic {@link PostgresPool}; kept for backward-compatible imports.
12
- */
13
- export type NeonPool = PostgresPool;
14
- /**
15
- * Configuration for connecting to a Neon (or any Postgres) database. Alias of the
16
- * shared {@link PostgresKeyValueStorageOptions}; `url` is optional and required
17
- * only when no `pool` is supplied.
3
+ * Configuration for connecting {@link NeonStorage} to a Neon database.
4
+ * `url` is optional and required only when no `pool` is supplied.
18
5
  *
19
6
  * @example
20
7
  * ```ts
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- var ZX=import.meta.require,SX=(X,Y,_)=>{if(Y!=null){if(typeof Y!=="object"&&typeof Y!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let Z;if(_)Z=Y[Symbol.asyncDispose];if(Z===void 0)Z=Y[Symbol.dispose];if(typeof Z!=="function")throw TypeError("Object not disposable");X.push([_,Z,Y])}else if(_)X.push([_]);return Y},zX=(X,Y,_)=>{let Z=(G)=>Y=_?new SuppressedError(G,Y,"An error was suppressed during disposal"):(_=!0,G),$=(G)=>{while(G=X.pop())try{var M=G[1]&&G[1].call(G[2]);if(G[0])return Promise.resolve(M).then($,(F)=>(Z(F),$()))}catch(F){Z(F)}if(_)throw Y};return $()};function E(X,Y,_){if(!X.capabilities()[Y])throw Error(`Feature "${_}" requires storage capability "${Y}", but this storage backend does not provide it.`)}function GX(X){let Y=X.capabilities(),_=[];if(Y.persistence!=="local"&&Y.persistence!=="remote")_.push(`persistence must be "local" or "remote" (got "${Y.persistence}")`);if(Y.readAfterWrite!=="linearizable")_.push(`readAfterWrite must be "linearizable" (got "${Y.readAfterWrite}")`);if(Y.scanConsistency!=="snapshot")_.push(`scanConsistency must be "snapshot" (got "${Y.scanConsistency}")`);if(!Y.atomicBatch)_.push("atomicBatch must be true");if(!Y.conditionalBatch)_.push("conditionalBatch must be true");if(_.length>0)throw Error(`Storage is not durable enough for recovery: ${_.join("; ")}.`)}var L="default";async function R(X,Y){return await X.get(Y)!==null}async function*V(X,Y,_){for await(let[Z]of X.scan(Y,_))yield Z}async function v(X,Y){let _=0;for await(let Z of V(X,Y))_++;return _}async function q(X,Y){let _=[];for await(let Z of V(X,Y))_.push({type:"delete",key:Z});if(_.length===0)return 0;return await X.batch(_),_.length}async function P(X,Y,_){let Z=[];for await(let $ of V(X,Y,_))Z.push({type:"delete",key:$});if(Z.length===0)return 0;return await X.batch(Z),Z.length}var $X=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var D=1e4,xX=1e4;class b extends Error{code="StorageBatchOperationLimitExceededError";cap=D;count;target;constructor(X,Y){super(`${X} count ${Y} exceeds MAX_BATCH_OPERATIONS (${D}).`);this.name="StorageBatchOperationLimitExceededError",this.target=X,this.count=Y}}function U(X,Y){if(Y>D)throw new b(X,Y)}function x(X){return X.length>0?X.slice(0,-1)+String.fromCharCode(X.charCodeAt(X.length-1)+1):"\xFF"}function yX(X,Y={}){if(Y.gt!==void 0&&X<=Y.gt)return!1;if(Y.gte!==void 0&&X<Y.gte)return!1;if(Y.lt!==void 0&&X>=Y.lt)return!1;if(Y.lte!==void 0&&X>Y.lte)return!1;return!0}function y(X,Y){if(X===null||Y===null)return X===Y;if(X.byteLength!==Y.byteLength)return!1;for(let _=0;_<X.byteLength;_++)if(X[_]!==Y[_])return!1;return!0}async function I(X,Y){if(X.has)return X.has(Y);return R(X,Y)}function m(X,Y,_){if(X.keys)return X.keys(Y,_);return V(X,Y,_)}async function g(X,Y){if(X.count)return X.count(Y);return v(X,Y)}async function u(X,Y){if(X.deletePrefix)return X.deletePrefix(Y);return q(X,Y)}async function IX(X,Y){U("batch operations",Y.length),await X.batch(Y)}async function k(X,Y,_){if(U("conditionalBatch conditions",Y.length),U("conditionalBatch operations",_.length),E(X,"conditionalBatch","storageConditionalBatch"),!X.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return X.conditionalBatch(Y,_)}function J(X){return encodeURIComponent(X)}function mX(X){return decodeURIComponent(X)}function gX(X){try{return decodeURIComponent(X)}catch{return null}}var H=(X)=>String(X).padStart(16,"0"),MX="0",FX="1",h=(X,Y,_,Z)=>`sig:${J(X)}:${J(Y)}:${Z}:${J(_)}`,uX={workflow:(X)=>`wf:${J(X)}`,checkpoint:(X)=>`wf:${J(X)}:ckpt`,checkpointHistory:(X,Y)=>`wf:${J(X)}:ckpt:${String(Y).padStart(10,"0")}`,timelinePrefix:(X)=>`wf:${J(X)}:timeline:`,timeline:(X,Y)=>`wf:${J(X)}:timeline:${String(Y).padStart(10,"0")}`,schedule:(X)=>`schedule:${J(X)}`,scheduleTick:(X,Y)=>`schedule-due:${String(X).padStart(16,"0")}:${J(Y)}`,scheduleRun:(X)=>`schedule-run:${J(X)}`,scheduleRunLink:(X)=>`schedule-run-link:${J(X)}`,scheduleRunBySchedulePrefix:(X)=>`schedule-run-by-schedule:${J(X)}:`,scheduleRunBySchedule:(X,Y)=>`schedule-run-by-schedule:${J(X)}:${J(Y)}`,operation:(X,Y,_)=>`op:${X}:${H(Y)}:${_}`,operationInflight:(X)=>`op:inflight:${X}`,operationQueued:(X)=>`op:queued:${X}`,operationResolved:(X)=>`op:resolved:${X}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(X)=>`op:dead-letter:${X}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(X,Y,_)=>`audit:bulk:${H(X)}:${J(Y)}:${J(_)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(X,Y)=>`op:resolved-by-time:${H(X)}:${J(Y)}`,asyncActivity:(X,Y)=>`async-act:v1:${J(X)}:${J(Y)}`,asyncActivityResolution:(X,Y)=>`async-act:v1:${J(X)}:${J(Y)}:resolution`,activityReconciliationPrefix:(X)=>`actrec:v1:${J(X)}:`,activityReconciliation:(X,Y,_)=>`actrec:v1:${J(X)}:${J(Y)}:${_}`,eventPrefix:(X)=>`ev:${J(X)}:`,event:(X,Y)=>`ev:${J(X)}:${String(Y).padStart(10,"0")}`,eventHead:(X)=>`ev:${J(X)}:head`,eventWatermark:(X)=>`ev:${J(X)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(X)=>`fleet-event:${String(X).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(X)=>`fleet-event-by-workflow:${J(X)}:`,fleetEventByWorkflow:(X,Y)=>`fleet-event-by-workflow:${J(X)}:${String(Y).padStart(10,"0")}`,signal:(X,Y,_)=>h(X,Y,_,FX),startSignal:(X,Y,_)=>h(X,Y,_,MX),signalSequence:(X)=>`sigseq:v1:${J(X)}`,signalAcceptedResponsePrefix:(X)=>`sigres:v1:${J(X)}:`,signalAcceptedResponse:(X,Y,_)=>`sigres:v1:${J(X)}:${J(Y)}:${J(_)}`,deadline:(X,Y)=>`wf-deadline:${H(X)}:${J(Y)}`,terminalCleanup:(X,Y)=>`wf-cleanup:${H(X)}:${J(Y)}`,teardownTimer:(X,Y)=>`wf-teardown:${H(X)}:${J(Y)}`,delayedStart:(X,Y)=>`wf-delayed:${H(X)}:${J(Y)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(X,Y)=>`wf-terminal:${H(X)}:${J(Y)}`,attribute:(X)=>`attr:${J(X)}`,attributeIndex:(X,Y,_)=>`idx:${X}:${Y}:${J(_)}`,tagIndex:(X,Y)=>`tag:${J(X)}:${J(Y)}`,updatePrefix:(X)=>`upd:${J(X)}:`,update:(X,Y)=>`upd:${J(X)}:${Y}`,updateResponse:(X)=>`upr:${X}`,updateIdempotency:(X,Y)=>`upk:${J(X)}:${Y}`,startIdempotency:(X)=>`start-idem:${J(X)}`,startIdempotencySignalId:(X)=>`start-idem:${X}`,livenessPrefix:()=>"liveness:",liveness:(X)=>`liveness:${J(X)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(X,Y,_)=>`budget:${X}:${Y}:${_}`,review:(X,Y)=>`review:${J(X)}:${Y}`,workflowHeaders:(X)=>`wf-headers:${J(X)}`,childCancellationPrefix:(X)=>`child-cancel:${J(X)}:`,childCancellation:(X,Y)=>`child-cancel:${J(X)}:${J(Y)}`,childWorkflowByParentPrefix:(X,Y)=>`child-by-parent:${J(X)}:${Y===void 0?"":`${J(Y)}:`}`,childWorkflowByParent:(X,Y,_)=>`child-by-parent:${J(X)}:${Y===void 0?"":`${J(Y)}:`}${J(_)}`,terminalCleanupNeeded:(X)=>`wf-cleanup-needed:${J(X)}`,workflowConcurrency:(X,Y)=>`wf-concurrency:${J(X)}:${J(Y)}`,workflowConcurrencyHolder:(X)=>`wf-concurrency-holder:${J(X)}`,workflowHasServices:(X)=>`wf-has-services:${J(X)}`,finalizerState:(X)=>`wf-finalizer-state:${J(X)}`,teardownOwed:(X)=>`wf-teardown-needed:${J(X)}`,teardownSucceeded:(X)=>`wf-teardown-succeeded:${J(X)}`,teardownDeadLetter:(X)=>`wf-teardown-deadletter:${J(X)}`,offload:(X,Y)=>`offload:${J(X)}:${Y}`,archive:(X,Y)=>`archive:${J(X)}:${Y}`,stateExecution:(X,Y)=>`state:execution:${J(X)}:${J(Y)}`,stateWorkflow:(X,Y)=>`state:workflow-scope:${L}:${J(X)}:${J(Y)}`,streamChunkPrefix:(X,Y)=>`blob:${J(X)}:${Y}:chunk:`,streamChunk:(X,Y,_)=>`blob:${J(X)}:${Y}:chunk:${String(_).padStart(10,"0")}`,streamTail:(X,Y)=>`blob:${J(X)}:${Y}:tail`,streamMetadata:(X,Y)=>`blob:${J(X)}:${Y}:meta`,budgetCharged:(X)=>`budget-charged:${X}`,toolEffect:(X,Y,_)=>`tool-effect:${J(X)}:${Y}:${_}`,workflowVisibilityStatus:(X,Y)=>`wf-idx-status:${J(X)}:${J(Y)}`,workflowVisibilityType:(X,Y)=>`wf-idx-type:${J(X)}:${J(Y)}`,workflowVisibilityCreated:(X,Y)=>`wf-idx-created:${H(X)}:${J(Y)}`,workflowVisibilityUpdated:(X,Y)=>`wf-idx-updated:${H(X)}:${J(Y)}`,workflowVisibilityDeadline:(X,Y)=>`wf-idx-deadline:${H(X)}:${J(Y)}`,workflowVisibilityManifest:(X)=>`wf-idx-manifest:${J(X)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function HX(X){if(X===void 0)return;if(typeof X!=="number"||!Number.isInteger(X)||X<0)throw Error("deleteRange limit must be a finite non-negative integer");return X===0?0:X}function Q(X){let Y={},_=!1;for(let $ of["gt","gte","lt","lte"]){let G=X[$];if(G===void 0)continue;if(typeof G!=="string")throw Error("deleteRange bounds must be strings");Y[$]=G,_=!0}if(!_)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Z=HX(X.limit);if(Z!==void 0)Y.limit=Z;return Y}async function c(X,Y,_){let Z=Q(_);if(X.deleteRange)return X.deleteRange(Y,Z);return P(X,Y,Z)}function C(X){return X.replaceAll(/:+$/g,"")}function UX(X,Y){let _=C(X),Z=C(Y);if(_.length===0)return Z;if(Z.length===0)return _;return`${_}:${Z}`}class A{#X;#Y;constructor(X,Y){this.#X=X,this.#Y=C(Y)}#_(X){if(this.#Y.length===0)return X;return X.length===0?`${this.#Y}:`:`${this.#Y}:${X}`}#Z(X){if(this.#Y.length===0)return X;return X.slice(this.#Y.length+1)}#G(X={}){let Y={};if(X.limit!==void 0)Y.limit=X.limit;if(X.reverse!==void 0)Y.reverse=X.reverse;if(X.gt!==void 0)Y.gt=this.#_(X.gt);if(X.gte!==void 0)Y.gte=this.#_(X.gte);if(X.lt!==void 0)Y.lt=this.#_(X.lt);if(X.lte!==void 0)Y.lte=this.#_(X.lte);return Y}#$(X){let Y={};if(X.limit!==void 0)Y.limit=X.limit;if(X.gt!==void 0)Y.gt=this.#_(X.gt);if(X.gte!==void 0)Y.gte=this.#_(X.gte);if(X.lt!==void 0)Y.lt=this.#_(X.lt);if(X.lte!==void 0)Y.lte=this.#_(X.lte);return Y}capabilities(){return this.#X.capabilities()}scoped(X){return new A(this.#X,UX(this.#Y,X))}async get(X){return this.#X.get(this.#_(X))}async put(X,Y){await this.#X.put(this.#_(X),Y)}async delete(X){await this.#X.delete(this.#_(X))}async*scan(X,Y){for await(let[_,Z]of this.#X.scan(this.#_(X),this.#G(Y)))yield[this.#Z(_),Z]}async batch(X){U("batch operations",X.length),await this.#X.batch(X.map((Y)=>{if(Y.type==="put")return{type:"put",key:this.#_(Y.key),value:Y.value};return{type:"delete",key:this.#_(Y.key)}}))}async conditionalBatch(X,Y){return k(this.#X,X.map((_)=>({key:this.#_(_.key),expectedValue:_.expectedValue})),Y.map((_)=>{if(_.type==="put")return{type:"put",key:this.#_(_.key),value:_.value};return{type:"delete",key:this.#_(_.key)}}))}async has(X){return I(this.#X,this.#_(X))}async deletePrefix(X){return u(this.#X,this.#_(X))}async deleteRange(X,Y){let _=this.#$(Q(Y));return c(this.#X,this.#_(X),_)}async*keys(X,Y){for await(let _ of m(this.#X,this.#_(X),this.#G(Y)))yield this.#Z(_)}async count(X){return g(this.#X,this.#_(X))}[Symbol.dispose](){this.#X[Symbol.dispose]()}}function w(X,Y){return new A(X,Y)}function f(X,Y){let _,Z,$=!1,G=()=>{if($)throw Error(`${Y.storageName} pool has been disposed and cannot be reused. Construct a new adapter.`);return _??=Y.loadPool(X).catch((M)=>{throw _=void 0,QX(M,Y)}),_};return{query:async(M,F)=>{return(await G()).query(M,F)},connect:async()=>{return(await G()).connect()},end:async()=>{return $=!0,Z??=(async()=>{if(_===void 0)return;await(await _.catch(()=>{return}))?.end()})(),Z}}}var VX=/cannot find module|module_not_found|failed to resolve|could not resolve/i;function QX(X,Y){let _=X instanceof Error?X.message:String(X);if(VX.test(_))return Error(`${Y.storageName} requires the optional peer dependency "${Y.driverName}". Install it in your application with: bun add ${Y.driverName} (or npm install ${Y.driverName}).`,{cause:X});return X instanceof Error?X:Error(_)}function N(X){return X.rowCount??X.affectedRows??X.rows.length}function j(X){if(X instanceof Uint8Array)return new Uint8Array(X);return new Uint8Array(X)}function B(X){return Buffer.from(X)}function K(X){let Y=new Map,_=new Set;for(let Z of X)if(Z.type==="put")_.delete(Z.key),Y.set(Z.key,Z.value);else Y.delete(Z.key),_.add(Z.key);return{puts:Y,deletes:_}}async function d(X,Y,_){if(_.length===0)return!0;let Z=_.map((M)=>M.key),$=await X.query(Y.selectValuesByKeys,[Z]),G=new Map;for(let M of $.rows){let F=M.value;if(F!==null&&F!==void 0)G.set(M.key,j(F))}for(let M of _){let F=G.get(M.key)??null;if(!y(F,M.expectedValue))return!1}return!0}async function S(X,Y,_){if(_.puts.size>0){let Z=[],$=[];for(let[G,M]of _.puts)Z.push(G),$.push(B(M));await X.query(Y.upsertValuesByKeys,[Z,$])}if(_.deletes.size>0)await X.query(Y.deleteValuesByKeys,[[..._.deletes]])}var p=/^[a-z_][a-z0-9_]*$/i;function l(X,Y,_){if(!p.test(X))throw Error(`${_} storage ${Y} name "${X}" is not a valid ${_} identifier. Use only letters, digits, and underscores, starting with a letter or underscore (matching ${p.source}).`)}var a="kv";function z(X,Y){l(X,Y,"Postgres")}function n(X){let{schema:Y,table:_}=X;if(Y===void 0&&_===void 0)return a;let Z=_??a;if(z(Z,"table"),Y===void 0)return`"${Z}"`;return z(Y,"schema"),`"${Y}"."${Z}"`}function W(X){return[X,x(X)]}function i(X,Y){let{gt:_,gte:Z,lt:$,lte:G}=Y,M=W(X),F=["key >= $1 AND key < $2"];if(_!==void 0)M.push(_),F.push(`key > $${M.length}`);if(Z!==void 0)M.push(Z),F.push(`key >= $${M.length}`);if($!==void 0)M.push($),F.push(`key < $${M.length}`);if(G!==void 0)M.push(G),F.push(`key <= $${M.length}`);return{conditions:F,parameters:M}}function s(X,Y={}){let{limit:_,reverse:Z}=Y,{conditions:$,parameters:G}=i(X,Y),M=Z?"DESC":"ASC",F="";if(_!==void 0)G.push(_),F=` LIMIT $${G.length}`;return{parameters:G,whereOrderLimit:`WHERE ${$.join(" AND ")} ORDER BY key ${M}${F}`}}function r(X){let Y=`CREATE TABLE IF NOT EXISTS ${X} (
2
+ var ZX=import.meta.require,SX=(X,Y,_)=>{if(Y!=null){if(typeof Y!=="object"&&typeof Y!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let Z;if(_)Z=Y[Symbol.asyncDispose];if(Z===void 0)Z=Y[Symbol.dispose];if(typeof Z!=="function")throw TypeError("Object not disposable");X.push([_,Z,Y])}else if(_)X.push([_]);return Y},zX=(X,Y,_)=>{let Z=(G)=>Y=_?new SuppressedError(G,Y,"An error was suppressed during disposal"):(_=!0,G),$=(G)=>{while(G=X.pop())try{var M=G[1]&&G[1].call(G[2]);if(G[0])return Promise.resolve(M).then($,(F)=>(Z(F),$()))}catch(F){Z(F)}if(_)throw Y};return $()};function E(X,Y,_){if(!X.capabilities()[Y])throw Error(`Feature "${_}" requires storage capability "${Y}", but this storage backend does not provide it.`)}function GX(X){let Y=X.capabilities(),_=[];if(Y.persistence!=="local"&&Y.persistence!=="remote")_.push(`persistence must be "local" or "remote" (got "${Y.persistence}")`);if(Y.readAfterWrite!=="linearizable")_.push(`readAfterWrite must be "linearizable" (got "${Y.readAfterWrite}")`);if(Y.scanConsistency!=="snapshot")_.push(`scanConsistency must be "snapshot" (got "${Y.scanConsistency}")`);if(!Y.atomicBatch)_.push("atomicBatch must be true");if(!Y.conditionalBatch)_.push("conditionalBatch must be true");if(_.length>0)throw Error(`Storage is not durable enough for recovery: ${_.join("; ")}.`)}var L="default";async function R(X,Y){return await X.get(Y)!==null}async function*V(X,Y,_){for await(let[Z]of X.scan(Y,_))yield Z}async function v(X,Y){let _=0;for await(let Z of V(X,Y))_++;return _}async function q(X,Y){let _=[];for await(let Z of V(X,Y))_.push({type:"delete",key:Z});if(_.length===0)return 0;return await X.batch(_),_.length}async function P(X,Y,_){let Z=[];for await(let $ of V(X,Y,_))Z.push({type:"delete",key:$});if(Z.length===0)return 0;return await X.batch(Z),Z.length}var $X=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var D=1e4,xX=1e4;class b extends Error{code="StorageBatchOperationLimitExceededError";cap=D;count;target;constructor(X,Y){super(`${X} count ${Y} exceeds MAX_BATCH_OPERATIONS (${D}).`);this.name="StorageBatchOperationLimitExceededError",this.target=X,this.count=Y}}function U(X,Y){if(Y>D)throw new b(X,Y)}function x(X){return X.length>0?X.slice(0,-1)+String.fromCharCode(X.charCodeAt(X.length-1)+1):"\xFF"}function yX(X,Y={}){if(Y.gt!==void 0&&X<=Y.gt)return!1;if(Y.gte!==void 0&&X<Y.gte)return!1;if(Y.lt!==void 0&&X>=Y.lt)return!1;if(Y.lte!==void 0&&X>Y.lte)return!1;return!0}function y(X,Y){if(X===null||Y===null)return X===Y;if(X.byteLength!==Y.byteLength)return!1;for(let _=0;_<X.byteLength;_++)if(X[_]!==Y[_])return!1;return!0}async function I(X,Y){if(X.has)return X.has(Y);return R(X,Y)}function m(X,Y,_){if(X.keys)return X.keys(Y,_);return V(X,Y,_)}async function g(X,Y){if(X.count)return X.count(Y);return v(X,Y)}async function u(X,Y){if(X.deletePrefix)return X.deletePrefix(Y);return q(X,Y)}async function IX(X,Y){U("batch operations",Y.length),await X.batch(Y)}async function k(X,Y,_){if(U("conditionalBatch conditions",Y.length),U("conditionalBatch operations",_.length),E(X,"conditionalBatch","storageConditionalBatch"),!X.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return X.conditionalBatch(Y,_)}function J(X){return encodeURIComponent(X)}function mX(X){return decodeURIComponent(X)}function gX(X){try{return decodeURIComponent(X)}catch{return null}}var H=(X)=>String(X).padStart(16,"0"),MX="0",FX="1",h=(X,Y,_,Z)=>`sig:${J(X)}:${J(Y)}:${Z}:${J(_)}`,uX={workflow:(X)=>`wf:${J(X)}`,checkpoint:(X)=>`wf:${J(X)}:ckpt`,checkpointHistory:(X,Y)=>`wf:${J(X)}:ckpt:${String(Y).padStart(10,"0")}`,timelinePrefix:(X)=>`wf:${J(X)}:timeline:`,timeline:(X,Y)=>`wf:${J(X)}:timeline:${String(Y).padStart(10,"0")}`,schedule:(X)=>`schedule:${J(X)}`,scheduleTick:(X,Y)=>`schedule-due:${String(X).padStart(16,"0")}:${J(Y)}`,scheduleRun:(X)=>`schedule-run:${J(X)}`,scheduleRunLink:(X)=>`schedule-run-link:${J(X)}`,scheduleRunBySchedulePrefix:(X)=>`schedule-run-by-schedule:${J(X)}:`,scheduleRunBySchedule:(X,Y)=>`schedule-run-by-schedule:${J(X)}:${J(Y)}`,operation:(X,Y,_)=>`op:${X}:${H(Y)}:${_}`,operationInflight:(X)=>`op:inflight:${X}`,operationQueued:(X)=>`op:queued:${X}`,operationResolved:(X)=>`op:resolved:${X}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(X)=>`op:dead-letter:${X}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(X,Y,_)=>`audit:bulk:${H(X)}:${J(Y)}:${J(_)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(X,Y)=>`op:resolved-by-time:${H(X)}:${J(Y)}`,asyncActivity:(X,Y)=>`async-act:v1:${J(X)}:${J(Y)}`,asyncActivityResolution:(X,Y)=>`async-act:v1:${J(X)}:${J(Y)}:resolution`,activityReconciliationPrefix:(X)=>`actrec:v1:${J(X)}:`,activityReconciliation:(X,Y,_)=>`actrec:v1:${J(X)}:${J(Y)}:${_}`,eventPrefix:(X)=>`ev:${J(X)}:`,event:(X,Y)=>`ev:${J(X)}:${String(Y).padStart(10,"0")}`,eventHead:(X)=>`ev:${J(X)}:head`,eventWatermark:(X)=>`ev:${J(X)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(X)=>`fleet-event:${String(X).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(X)=>`fleet-event-by-workflow:${J(X)}:`,fleetEventByWorkflow:(X,Y)=>`fleet-event-by-workflow:${J(X)}:${String(Y).padStart(10,"0")}`,signal:(X,Y,_)=>h(X,Y,_,FX),startSignal:(X,Y,_)=>h(X,Y,_,MX),signalSequence:(X)=>`sigseq:v1:${J(X)}`,signalAcceptedResponsePrefix:(X)=>`sigres:v1:${J(X)}:`,signalAcceptedResponse:(X,Y,_)=>`sigres:v1:${J(X)}:${J(Y)}:${J(_)}`,deadline:(X,Y)=>`wf-deadline:${H(X)}:${J(Y)}`,terminalCleanup:(X,Y)=>`wf-cleanup:${H(X)}:${J(Y)}`,teardownTimer:(X,Y)=>`wf-teardown:${H(X)}:${J(Y)}`,delayedStart:(X,Y)=>`wf-delayed:${H(X)}:${J(Y)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(X,Y)=>`wf-terminal:${H(X)}:${J(Y)}`,attribute:(X)=>`attr:${J(X)}`,attributeIndex:(X,Y,_)=>`idx:${X}:${Y}:${J(_)}`,tagIndex:(X,Y)=>`tag:${J(X)}:${J(Y)}`,updatePrefix:(X)=>`upd:${J(X)}:`,update:(X,Y)=>`upd:${J(X)}:${Y}`,updateResponse:(X)=>`upr:${X}`,updateIdempotency:(X,Y)=>`upk:${J(X)}:${Y}`,startIdempotency:(X)=>`start-idem:${J(X)}`,startIdempotencySignalId:(X)=>`start-idem:${X}`,livenessPrefix:()=>"liveness:",liveness:(X)=>`liveness:${J(X)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(X,Y,_)=>`budget:${X}:${Y}:${_}`,review:(X,Y)=>`review:${J(X)}:${Y}`,workflowHeaders:(X)=>`wf-headers:${J(X)}`,childCancellationPrefix:(X)=>`child-cancel:${J(X)}:`,childCancellation:(X,Y)=>`child-cancel:${J(X)}:${J(Y)}`,childWorkflowByParentPrefix:(X,Y)=>`child-by-parent:${J(X)}:${Y===void 0?"":`${J(Y)}:`}`,childWorkflowByParent:(X,Y,_)=>`child-by-parent:${J(X)}:${Y===void 0?"":`${J(Y)}:`}${J(_)}`,terminalCleanupNeeded:(X)=>`wf-cleanup-needed:${J(X)}`,workflowConcurrency:(X,Y)=>`wf-concurrency:${J(X)}:${J(Y)}`,workflowConcurrencyHolder:(X)=>`wf-concurrency-holder:${J(X)}`,workflowHasServices:(X)=>`wf-has-services:${J(X)}`,finalizerState:(X)=>`wf-finalizer-state:${J(X)}`,teardownOwed:(X)=>`wf-teardown-needed:${J(X)}`,teardownSucceeded:(X)=>`wf-teardown-succeeded:${J(X)}`,teardownDeadLetter:(X)=>`wf-teardown-deadletter:${J(X)}`,offload:(X,Y)=>`offload:${J(X)}:${Y}`,archive:(X,Y)=>`archive:${J(X)}:${Y}`,stateExecution:(X,Y)=>`state:execution:${J(X)}:${J(Y)}`,stateWorkflow:(X,Y)=>`state:workflow-scope:${L}:${J(X)}:${J(Y)}`,streamChunkPrefix:(X,Y)=>`blob:${J(X)}:${Y}:chunk:`,streamChunk:(X,Y,_)=>`blob:${J(X)}:${Y}:chunk:${String(_).padStart(10,"0")}`,streamTail:(X,Y)=>`blob:${J(X)}:${Y}:tail`,streamMetadata:(X,Y)=>`blob:${J(X)}:${Y}:meta`,budgetCharged:(X)=>`budget-charged:${X}`,toolEffect:(X,Y,_)=>`tool-effect:${J(X)}:${Y}:${_}`,workflowVisibilityStatus:(X,Y)=>`wf-idx-status:${J(X)}:${J(Y)}`,workflowVisibilityType:(X,Y)=>`wf-idx-type:${J(X)}:${J(Y)}`,workflowVisibilityCreated:(X,Y)=>`wf-idx-created:${H(X)}:${J(Y)}`,workflowVisibilityUpdated:(X,Y)=>`wf-idx-updated:${H(X)}:${J(Y)}`,workflowVisibilityDeadline:(X,Y)=>`wf-idx-deadline:${H(X)}:${J(Y)}`,workflowVisibilityManifest:(X)=>`wf-idx-manifest:${J(X)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function HX(X){if(X===void 0)return;if(typeof X!=="number"||!Number.isInteger(X)||X<0)throw Error("deleteRange limit must be a finite non-negative integer");return X===0?0:X}function Q(X){let Y={},_=!1;for(let $ of["gt","gte","lt","lte"]){let G=X[$];if(G===void 0)continue;if(typeof G!=="string")throw Error("deleteRange bounds must be strings");Y[$]=G,_=!0}if(!_)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Z=HX(X.limit);if(Z!==void 0)Y.limit=Z;return Y}async function c(X,Y,_){let Z=Q(_);if(X.deleteRange)return X.deleteRange(Y,Z);return P(X,Y,Z)}function C(X){return X.replaceAll(/:+$/g,"")}function UX(X,Y){let _=C(X),Z=C(Y);if(_.length===0)return Z;if(Z.length===0)return _;return`${_}:${Z}`}class A{#X;#Y;constructor(X,Y){this.#X=X,this.#Y=C(Y)}#_(X){if(this.#Y.length===0)return X;return X.length===0?`${this.#Y}:`:`${this.#Y}:${X}`}#Z(X){return X.map((Y)=>{if(Y.type==="put")return{type:"put",key:this.#_(Y.key),value:Y.value};return{type:"delete",key:this.#_(Y.key)}})}#G(X){if(this.#Y.length===0)return X;return X.slice(this.#Y.length+1)}#$(X={}){let Y={};if(X.limit!==void 0)Y.limit=X.limit;if(X.reverse!==void 0)Y.reverse=X.reverse;if(X.gt!==void 0)Y.gt=this.#_(X.gt);if(X.gte!==void 0)Y.gte=this.#_(X.gte);if(X.lt!==void 0)Y.lt=this.#_(X.lt);if(X.lte!==void 0)Y.lte=this.#_(X.lte);return Y}#J(X){let Y={};if(X.limit!==void 0)Y.limit=X.limit;if(X.gt!==void 0)Y.gt=this.#_(X.gt);if(X.gte!==void 0)Y.gte=this.#_(X.gte);if(X.lt!==void 0)Y.lt=this.#_(X.lt);if(X.lte!==void 0)Y.lte=this.#_(X.lte);return Y}capabilities(){return this.#X.capabilities()}scoped(X){return new A(this.#X,UX(this.#Y,X))}async get(X){return this.#X.get(this.#_(X))}async put(X,Y){await this.#X.put(this.#_(X),Y)}async delete(X){await this.#X.delete(this.#_(X))}async*scan(X,Y){for await(let[_,Z]of this.#X.scan(this.#_(X),this.#$(Y)))yield[this.#G(_),Z]}async batch(X){U("batch operations",X.length),await this.#X.batch(this.#Z(X))}async conditionalBatch(X,Y){return k(this.#X,X.map((_)=>({key:this.#_(_.key),expectedValue:_.expectedValue})),this.#Z(Y))}async has(X){return I(this.#X,this.#_(X))}async deletePrefix(X){return u(this.#X,this.#_(X))}async deleteRange(X,Y){let _=this.#J(Q(Y));return c(this.#X,this.#_(X),_)}async*keys(X,Y){for await(let _ of m(this.#X,this.#_(X),this.#$(Y)))yield this.#G(_)}async count(X){return g(this.#X,this.#_(X))}[Symbol.dispose](){this.#X[Symbol.dispose]()}}function w(X,Y){return new A(X,Y)}function f(X,Y){let _,Z,$=!1,G=()=>{if($)throw Error(`${Y.storageName} pool has been disposed and cannot be reused. Construct a new adapter.`);return _??=Y.loadPool(X).catch((M)=>{throw _=void 0,QX(M,Y)}),_};return{query:async(M,F)=>{return(await G()).query(M,F)},connect:async()=>{return(await G()).connect()},end:async()=>{return $=!0,Z??=(async()=>{if(_===void 0)return;await(await _.catch(()=>{return}))?.end()})(),Z}}}var VX=/cannot find module|module_not_found|failed to resolve|could not resolve/i;function QX(X,Y){let _=X instanceof Error?X.message:String(X);if(VX.test(_))return Error(`${Y.storageName} requires the optional peer dependency "${Y.driverName}". Install it in your application with: bun add ${Y.driverName} (or npm install ${Y.driverName}).`,{cause:X});return X instanceof Error?X:Error(_)}function K(X){return X.rowCount??X.affectedRows??X.rows.length}function j(X){if(X instanceof Uint8Array)return new Uint8Array(X);return new Uint8Array(X)}function B(X){return Buffer.from(X)}function N(X){let Y=new Map,_=new Set;for(let Z of X)if(Z.type==="put")_.delete(Z.key),Y.set(Z.key,Z.value);else Y.delete(Z.key),_.add(Z.key);return{puts:Y,deletes:_}}async function d(X,Y,_){if(_.length===0)return!0;let Z=_.map((M)=>M.key),$=await X.query(Y.selectValuesByKeys,[Z]),G=new Map;for(let M of $.rows){let F=M.value;if(F!==null&&F!==void 0)G.set(M.key,j(F))}for(let M of _){let F=G.get(M.key)??null;if(!y(F,M.expectedValue))return!1}return!0}async function S(X,Y,_){if(_.puts.size>0){let Z=[],$=[];for(let[G,M]of _.puts)Z.push(G),$.push(B(M));await X.query(Y.upsertValuesByKeys,[Z,$])}if(_.deletes.size>0)await X.query(Y.deleteValuesByKeys,[[..._.deletes]])}var p=/^[a-z_][a-z0-9_]*$/i;function l(X,Y,_){if(!p.test(X))throw Error(`${_} storage ${Y} name "${X}" is not a valid ${_} identifier. Use only letters, digits, and underscores, starting with a letter or underscore (matching ${p.source}).`)}var a="kv";function z(X,Y){l(X,Y,"Postgres")}function n(X){let{schema:Y,table:_}=X;if(Y===void 0&&_===void 0)return a;let Z=_??a;if(z(Z,"table"),Y===void 0)return`"${Z}"`;return z(Y,"schema"),`"${Y}"."${Z}"`}function W(X){return[X,x(X)]}function i(X,Y){let{gt:_,gte:Z,lt:$,lte:G}=Y,M=W(X),F=["key >= $1 AND key < $2"];if(_!==void 0)M.push(_),F.push(`key > $${M.length}`);if(Z!==void 0)M.push(Z),F.push(`key >= $${M.length}`);if($!==void 0)M.push($),F.push(`key < $${M.length}`);if(G!==void 0)M.push(G),F.push(`key <= $${M.length}`);return{conditions:F,parameters:M}}function s(X,Y={}){let{limit:_,reverse:Z}=Y,{conditions:$,parameters:G}=i(X,Y),M=Z?"DESC":"ASC",F="";if(_!==void 0)G.push(_),F=` LIMIT $${G.length}`;return{parameters:G,whereOrderLimit:`WHERE ${$.join(" AND ")} ORDER BY key ${M}${F}`}}function r(X){let Y=`CREATE TABLE IF NOT EXISTS ${X} (
3
3
  key TEXT COLLATE "C" PRIMARY KEY,
4
4
  value BYTEA NOT NULL
5
5
  )`,_=`
@@ -12,4 +12,4 @@ var ZX=import.meta.require,SX=(X,Y,_)=>{if(Y!=null){if(typeof Y!=="object"&&type
12
12
  FROM pg_attribute a
13
13
  LEFT JOIN pg_collation co ON co.oid = a.attcollation
14
14
  WHERE a.attrelid = to_regclass($1) AND a.attname = 'key' AND a.attnum > 0
15
- `,selectValueByKey:`SELECT value FROM ${X} WHERE key = $1`,upsertValueByKey:`INSERT INTO ${X} (key, value) VALUES ($1, $2) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`,deleteValueByKey:`DELETE FROM ${X} WHERE key = $1`,selectKeyPresence:`SELECT 1 AS present FROM ${X} WHERE key = $1 LIMIT 1`,countKeysByPrefix:`SELECT COUNT(*) AS count FROM ${X} WHERE key >= $1 AND key < $2`,deleteKeysByPrefix:`DELETE FROM ${X} WHERE key >= $1 AND key < $2`,selectValuesByKeys:`SELECT key, value FROM ${X} WHERE key = ANY($1)`,upsertValuesByKeys:`INSERT INTO ${X} (key, value) SELECT * FROM unnest($1::text[], $2::bytea[]) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`,deleteValuesByKeys:`DELETE FROM ${X} WHERE key = ANY($1)`,keyValueRangeSelect(Z,$={}){let{parameters:G,whereOrderLimit:M}=s(Z,$);return{parameters:G,sql:`SELECT key, value FROM ${X} ${M}`}},keyRangeSelect(Z,$={}){let{parameters:G,whereOrderLimit:M}=s(Z,$);return{parameters:G,sql:`SELECT key FROM ${X} ${M}`}},keyRangeDelete(Z,$){let{conditions:G,parameters:M}=i(Z,$),F=G.join(" AND ");if($.limit===void 0)return{parameters:M,sql:`DELETE FROM ${X} WHERE ${F}`};return M.push($.limit),{parameters:M,sql:`DELETE FROM ${X} WHERE key IN (SELECT key FROM ${X} WHERE ${F} ORDER BY key ASC LIMIT $${M.length})`}}}}var t="BEGIN ISOLATION LEVEL SERIALIZABLE",o="BEGIN ISOLATION LEVEL READ COMMITTED",e="BEGIN READ ONLY",XX="COMMIT",O="ROLLBACK";function YX(X){return z(X,"schema"),`CREATE SCHEMA IF NOT EXISTS "${X}"`}var jX=/^PRAGMA\b/iu,BX=/^PRAGMA\s+(?:[A-Z_][A-Z0-9_]*\.)?[A-Z_][A-Z0-9_]*\s*$/iu,WX=/^SELECT\b/iu;function EX(X){return X.trim().replace(/;+\s*$/u,"").trim()}function LX(X){return BX.test(X)}function _X(X){let Y=EX(X);if(Y.length===0)throw Error("Storage query must not be empty.");if(Y.includes(";"))throw Error("Storage query must contain exactly one read-only statement.");if(WX.test(Y))return;if(jX.test(Y)&&LX(Y))return;throw Error("Storage query only supports read-only SELECT and PRAGMA statements.")}var DX=new Set(["40001","40P01"]),JX=5;function CX(X){if(typeof X!=="object"||X===null||!("code"in X))return!1;let Y=X.code;return typeof Y==="string"&&DX.has(Y)}class T{#X;#Y;#_;#Z;#G;#$;constructor(X,Y){if(this.#G=X.pool===void 0,X.pool===void 0){if(X.url===void 0)throw Error("PostgresKeyValueStorage requires either a `url` to build a pool from, or a pre-built `pool`; neither was provided.");this.#X=Y(X.url)}else this.#X=X.pool;this.#_=X.schema;let _=n({schema:X.schema,table:X.table});this.#Y=r(_)}capabilities(){return{persistence:"remote",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#J(){return this.#Z??=this.#H().catch((X)=>{throw this.#Z=void 0,X}),this.#Z}async#H(){if(this.#_!==void 0)await this.#X.query(YX(this.#_));await this.#X.query(this.#Y.createTable),await this.#U()}async#U(){let Y=(await this.#X.query(this.#Y.selectKeyCollation,[this.#Y.tableReference])).rows[0]?.collation;if(Y==="C")return;let _=Y===void 0?"no such table":typeof Y==="string"?`"${Y}"`:"an unexpected collation value";throw Error(`Postgres storage requires the ${this.#Y.tableReference} table's "key" column to use COLLATE "C" (found ${_}). A table created without COLLATE "C" sorts keys by the database locale, which breaks Weft's lexicographic prefix scans. Use a fresh table, or recreate it as: CREATE TABLE ${this.#Y.tableReference} (key TEXT COLLATE "C" PRIMARY KEY, value BYTEA NOT NULL).`)}async get(X){await this.#J();let _=(await this.#X.query(this.#Y.selectValueByKey,[X])).rows[0];if(_===void 0)return null;let Z=_.value;if(Z===null||Z===void 0)return null;return j(Z)}async put(X,Y){await this.#J(),await this.#X.query(this.#Y.upsertValueByKey,[X,B(Y)])}async delete(X){await this.#J(),await this.#X.query(this.#Y.deleteValueByKey,[X])}async has(X){return await this.#J(),(await this.#X.query(this.#Y.selectKeyPresence,[X])).rows.length>0}async deletePrefix(X){await this.#J();let[Y,_]=W(X),Z=await this.#X.query(this.#Y.deleteKeysByPrefix,[Y,_]);return N(Z)}async deleteRange(X,Y){await this.#J();let _=Q(Y),{parameters:Z,sql:$}=this.#Y.keyRangeDelete(X,_),G=await this.#X.query($,Z);return N(G)}async*scan(X,Y={}){await this.#J();let{parameters:_,sql:Z}=this.#Y.keyValueRangeSelect(X,Y),$=await this.#X.query(Z,_);for(let G of $.rows)yield[G.key,j(G.value)]}async*keys(X,Y={}){await this.#J();let{parameters:_,sql:Z}=this.#Y.keyRangeSelect(X,Y),$=await this.#X.query(Z,_);for(let G of $.rows)yield G.key}async count(X){await this.#J();let[Y,_]=W(X),Z=await this.#X.query(this.#Y.countKeysByPrefix,[Y,_]);return Number(Z.rows[0]?.count??0)}scoped(X){return w(this,X)}async#M(X,Y,_=()=>!0){let Z=await this.#X.connect();try{await Z.query(X);try{let $=await Y(Z);return await Z.query(_($)?XX:O),$}catch($){throw await Z.query(O).catch(()=>{}),$}}finally{Z.release()}}async batch(X){if(U("batch operations",X.length),X.length===0)return;await this.#J(),await this.#M(o,async(Y)=>{await S(Y,this.#Y,K(X))})}async conditionalBatch(X,Y){U("conditionalBatch conditions",X.length),U("conditionalBatch operations",Y.length),await this.#J();let _=K(Y),Z;for(let $=0;$<JX;$+=1)try{return await this.#M(t,async(G)=>{if(!await d(G,this.#Y,X))return!1;return await S(G,this.#Y,_),!0},(G)=>G)}catch(G){if(!CX(G))throw G;Z=G}throw Error(`conditionalBatch exhausted ${JX} attempts after retryable transaction failures`,{cause:Z})}async query(X,Y){return await this.#J(),_X(X),this.#M(e,async(_)=>{return(await _.query(X,Y??[])).rows})}#F(){if(!this.#G)return Promise.resolve();return this.#$??=this.#X.end(),this.#$}[Symbol.dispose](){this.#F().catch(()=>{})}async[Symbol.asyncDispose](){await this.#F()}}function AX(X){return f(X,{driverName:"@neondatabase/serverless",storageName:"NeonStorage",loadPool:(Y)=>import("@neondatabase/serverless").then(({Pool:_})=>new _({connectionString:Y}))})}class NX extends T{constructor(X,Y=AX){super(X,Y)}}export{NX as NeonStorage};
15
+ `,selectValueByKey:`SELECT value FROM ${X} WHERE key = $1`,upsertValueByKey:`INSERT INTO ${X} (key, value) VALUES ($1, $2) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`,deleteValueByKey:`DELETE FROM ${X} WHERE key = $1`,selectKeyPresence:`SELECT 1 AS present FROM ${X} WHERE key = $1 LIMIT 1`,countKeysByPrefix:`SELECT COUNT(*) AS count FROM ${X} WHERE key >= $1 AND key < $2`,deleteKeysByPrefix:`DELETE FROM ${X} WHERE key >= $1 AND key < $2`,selectValuesByKeys:`SELECT key, value FROM ${X} WHERE key = ANY($1)`,upsertValuesByKeys:`INSERT INTO ${X} (key, value) SELECT * FROM unnest($1::text[], $2::bytea[]) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`,deleteValuesByKeys:`DELETE FROM ${X} WHERE key = ANY($1)`,keyValueRangeSelect(Z,$={}){let{parameters:G,whereOrderLimit:M}=s(Z,$);return{parameters:G,sql:`SELECT key, value FROM ${X} ${M}`}},keyRangeSelect(Z,$={}){let{parameters:G,whereOrderLimit:M}=s(Z,$);return{parameters:G,sql:`SELECT key FROM ${X} ${M}`}},keyRangeDelete(Z,$){let{conditions:G,parameters:M}=i(Z,$),F=G.join(" AND ");if($.limit===void 0)return{parameters:M,sql:`DELETE FROM ${X} WHERE ${F}`};return M.push($.limit),{parameters:M,sql:`DELETE FROM ${X} WHERE key IN (SELECT key FROM ${X} WHERE ${F} ORDER BY key ASC LIMIT $${M.length})`}}}}var t="BEGIN ISOLATION LEVEL SERIALIZABLE",o="BEGIN ISOLATION LEVEL READ COMMITTED",e="BEGIN READ ONLY",XX="COMMIT",O="ROLLBACK";function YX(X){return z(X,"schema"),`CREATE SCHEMA IF NOT EXISTS "${X}"`}var jX=/^PRAGMA\b/iu,BX=/^PRAGMA\s+(?:[A-Z_][A-Z0-9_]*\.)?[A-Z_][A-Z0-9_]*\s*$/iu,WX=/^SELECT\b/iu;function EX(X){return X.trim().replace(/;+\s*$/u,"").trim()}function LX(X){return BX.test(X)}function _X(X){let Y=EX(X);if(Y.length===0)throw Error("Storage query must not be empty.");if(Y.includes(";"))throw Error("Storage query must contain exactly one read-only statement.");if(WX.test(Y))return;if(jX.test(Y)&&LX(Y))return;throw Error("Storage query only supports read-only SELECT and PRAGMA statements.")}var DX=new Set(["40001","40P01"]),JX=5;function CX(X){if(typeof X!=="object"||X===null||!("code"in X))return!1;let Y=X.code;return typeof Y==="string"&&DX.has(Y)}class T{#X;#Y;#_;#Z;#G;#$;constructor(X,Y){if(this.#G=X.pool===void 0,X.pool===void 0){if(X.url===void 0)throw Error("PostgresKeyValueStorage requires either a `url` to build a pool from, or a pre-built `pool`; neither was provided.");this.#X=Y(X.url)}else this.#X=X.pool;this.#_=X.schema;let _=n({schema:X.schema,table:X.table});this.#Y=r(_)}capabilities(){return{persistence:"remote",readAfterWrite:"linearizable",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#J(){return this.#Z??=this.#H().catch((X)=>{throw this.#Z=void 0,X}),this.#Z}async#H(){if(this.#_!==void 0)await this.#X.query(YX(this.#_));await this.#X.query(this.#Y.createTable),await this.#U()}async#U(){let Y=(await this.#X.query(this.#Y.selectKeyCollation,[this.#Y.tableReference])).rows[0]?.collation;if(Y==="C")return;let _=Y===void 0?"no such table":typeof Y==="string"?`"${Y}"`:"an unexpected collation value";throw Error(`Postgres storage requires the ${this.#Y.tableReference} table's "key" column to use COLLATE "C" (found ${_}). A table created without COLLATE "C" sorts keys by the database locale, which breaks Weft's lexicographic prefix scans. Use a fresh table, or recreate it as: CREATE TABLE ${this.#Y.tableReference} (key TEXT COLLATE "C" PRIMARY KEY, value BYTEA NOT NULL).`)}async get(X){await this.#J();let _=(await this.#X.query(this.#Y.selectValueByKey,[X])).rows[0];if(_===void 0)return null;let Z=_.value;if(Z===null||Z===void 0)return null;return j(Z)}async put(X,Y){await this.#J(),await this.#X.query(this.#Y.upsertValueByKey,[X,B(Y)])}async delete(X){await this.#J(),await this.#X.query(this.#Y.deleteValueByKey,[X])}async has(X){return await this.#J(),(await this.#X.query(this.#Y.selectKeyPresence,[X])).rows.length>0}async deletePrefix(X){await this.#J();let[Y,_]=W(X),Z=await this.#X.query(this.#Y.deleteKeysByPrefix,[Y,_]);return K(Z)}async deleteRange(X,Y){await this.#J();let _=Q(Y),{parameters:Z,sql:$}=this.#Y.keyRangeDelete(X,_),G=await this.#X.query($,Z);return K(G)}async*scan(X,Y={}){await this.#J();let{parameters:_,sql:Z}=this.#Y.keyValueRangeSelect(X,Y),$=await this.#X.query(Z,_);for(let G of $.rows)yield[G.key,j(G.value)]}async*keys(X,Y={}){await this.#J();let{parameters:_,sql:Z}=this.#Y.keyRangeSelect(X,Y),$=await this.#X.query(Z,_);for(let G of $.rows)yield G.key}async count(X){await this.#J();let[Y,_]=W(X),Z=await this.#X.query(this.#Y.countKeysByPrefix,[Y,_]);return Number(Z.rows[0]?.count??0)}scoped(X){return w(this,X)}async#M(X,Y,_=()=>!0){let Z=await this.#X.connect();try{await Z.query(X);try{let $=await Y(Z);return await Z.query(_($)?XX:O),$}catch($){throw await Z.query(O).catch(()=>{}),$}}finally{Z.release()}}async batch(X){if(U("batch operations",X.length),X.length===0)return;await this.#J(),await this.#M(o,async(Y)=>{await S(Y,this.#Y,N(X))})}async conditionalBatch(X,Y){U("conditionalBatch conditions",X.length),U("conditionalBatch operations",Y.length),await this.#J();let _=N(Y),Z;for(let $=0;$<JX;$+=1)try{return await this.#M(t,async(G)=>{if(!await d(G,this.#Y,X))return!1;return await S(G,this.#Y,_),!0},(G)=>G)}catch(G){if(!CX(G))throw G;Z=G}throw Error(`conditionalBatch exhausted ${JX} attempts after retryable transaction failures`,{cause:Z})}async query(X,Y){return await this.#J(),_X(X),this.#M(e,async(_)=>{return(await _.query(X,Y??[])).rows})}#F(){if(!this.#G)return Promise.resolve();return this.#$??=this.#X.end(),this.#$}[Symbol.dispose](){this.#F().catch(()=>{})}async[Symbol.asyncDispose](){await this.#F()}}function AX(X){return f(X,{driverName:"@neondatabase/serverless",storageName:"NeonStorage",loadPool:(Y)=>import("@neondatabase/serverless").then(({Pool:_})=>new _({connectionString:Y}))})}class KX extends T{constructor(X,Y=AX){super(X,Y)}}export{KX as NeonStorage};
@@ -17,12 +17,12 @@ export type BetterSqliteStatement = {
17
17
  get(...parameters: unknown[]): Record<string, unknown> | undefined;
18
18
  all(...parameters: unknown[]): Record<string, unknown>[];
19
19
  };
20
- export type BetterSqliteTransaction = (...args: unknown[]) => unknown;
20
+ export type BetterSqliteTransaction = <TArguments extends unknown[], TResult>(...args: TArguments) => TResult;
21
21
  export type BetterSqliteDatabase = {
22
22
  pragma(source: string): unknown;
23
23
  exec(source: string): void;
24
24
  prepare(source: string): BetterSqliteStatement;
25
- transaction(fn: (...args: unknown[]) => unknown): BetterSqliteTransaction;
25
+ transaction<TArguments extends unknown[], TResult>(fn: (...args: TArguments) => TResult): BetterSqliteTransaction;
26
26
  close(): void;
27
27
  };
28
28
  export type BetterSqliteConstructor = new (path: string) => BetterSqliteDatabase;
@@ -115,6 +115,23 @@ async function storageConditionalBatch(storage, conditions, operations) {
115
115
  return storage.conditionalBatch(conditions, operations);
116
116
  }
117
117
 
118
+ // src/storage/conditional-batch-body.ts
119
+ function runConditionalBatchBody(conditions, operations, handlers) {
120
+ for (const condition of conditions) {
121
+ if (!storageValuesEqual(handlers.read(condition.key), condition.expectedValue)) {
122
+ return false;
123
+ }
124
+ }
125
+ for (const operation of operations) {
126
+ if (operation.type === "put") {
127
+ handlers.put(operation.key, operation.value);
128
+ } else {
129
+ handlers.delete(operation.key);
130
+ }
131
+ }
132
+ return true;
133
+ }
134
+
118
135
  // src/storage/node-sqlite-loader.ts
119
136
  import { createRequire } from "module";
120
137
  var DatabaseConstructor;
@@ -320,25 +337,23 @@ class NodeSQLiteStorage {
320
337
  async conditionalBatch(conditions, operations) {
321
338
  assertStorageBatchOperationCount("conditionalBatch conditions", conditions.length);
322
339
  assertStorageBatchOperationCount("conditionalBatch operations", operations.length);
323
- const conditionalTransaction = this.#database.transaction((...arguments_) => {
324
- const pendingConditions = arguments_[0];
325
- const pendingOperations = arguments_[1];
326
- for (const condition of pendingConditions) {
327
- const row = this.#getStatement.get(condition.key);
328
- const currentValue = row ? new Uint8Array(row.value) : null;
329
- if (!storageValuesEqual(currentValue, condition.expectedValue)) {
330
- return false;
331
- }
332
- }
333
- for (const operation of pendingOperations) {
334
- if (operation.type === "put") {
335
- this.#putStatement.run(operation.key, operation.value);
336
- } else {
337
- this.#deleteStatement.run(operation.key);
340
+ const conditionalTransaction = this.#database.transaction((pendingConditions, pendingOperations) => runConditionalBatchBody(pendingConditions, pendingOperations, {
341
+ read: (key) => {
342
+ const row = this.#getStatement.get(key);
343
+ if (!row)
344
+ return null;
345
+ if (!(row["value"] instanceof Uint8Array)) {
346
+ throw new Error("SQLite value must be a byte array");
338
347
  }
348
+ return new Uint8Array(row["value"]);
349
+ },
350
+ put: (key, value) => {
351
+ this.#putStatement.run(key, value);
352
+ },
353
+ delete: (key) => {
354
+ this.#deleteStatement.run(key);
339
355
  }
340
- return true;
341
- });
356
+ }));
342
357
  return Boolean(conditionalTransaction(conditions, operations));
343
358
  }
344
359
  [Symbol.dispose]() {