@lostgradient/weft 0.11.0 → 0.12.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 (83) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/generated/operation-catalog.snapshot.json +4671 -0
  3. package/dist/cli/generated/operation-client.generated.d.ts +1 -0
  4. package/dist/cli/index.js +1 -0
  5. package/dist/cli-main.js +227 -401
  6. package/dist/client/http-operations.js +7 -1
  7. package/dist/client/http-request.d.ts +23 -1
  8. package/dist/client/http-request.js +12 -3
  9. package/dist/client/index.d.ts +2 -0
  10. package/dist/client/index.js +7 -0
  11. package/dist/connection.d.ts +8 -0
  12. package/dist/connection.js +41 -17
  13. package/dist/core/engine/callback-creators-core.js +2 -1
  14. package/dist/core/engine/index.d.ts +43 -0
  15. package/dist/core/engine/lifecycle/shared.d.ts +25 -0
  16. package/dist/core/engine/lifecycle/transition.js +19 -9
  17. package/dist/core/types/definition-schema-to-json.d.ts +11 -0
  18. package/dist/core/types/definition-schema-to-json.js +11 -2
  19. package/dist/http.js +2 -0
  20. package/dist/indexeddb.js +1 -0
  21. package/dist/json-schema.js +3 -3
  22. package/dist/mcp/cli.js +63 -61
  23. package/dist/mcp/http.d.ts +7 -2
  24. package/dist/mcp/session.d.ts +3 -3
  25. package/dist/mcp/session.js +3 -2
  26. package/dist/mcp/stdio.d.ts +7 -2
  27. package/dist/observability/index.js +2 -2
  28. package/dist/runtime/portable.d.ts +33 -0
  29. package/dist/runtime/portable.js +17 -6
  30. package/dist/server/engine-event-feed-backend.d.ts +22 -3
  31. package/dist/server/fleet-event-feed.d.ts +65 -0
  32. package/dist/server/handler/index.d.ts +11 -2
  33. package/dist/server/handler/index.js +7 -0
  34. package/dist/server/handler.js +1 -56
  35. package/dist/server/index.d.ts +12 -1
  36. package/dist/server/index.js +87 -64
  37. package/dist/server/operations/submit-review-decision.d.ts +2 -0
  38. package/dist/server/operations/submit-review-decision.js +19 -2
  39. package/dist/server/replay-live-feed-internals.d.ts +19 -0
  40. package/dist/server/replay-live-feed-internals.js +76 -0
  41. package/dist/server/runtime/authentication-bridge.d.ts +2 -2
  42. package/dist/server/serve-internals.js +3 -3
  43. package/dist/server/workflow-event-feed.d.ts +100 -11
  44. package/dist/server/workflow-event-feed.js +1 -140
  45. package/dist/service-worker/index.d.ts +8 -2
  46. package/dist/service-worker/index.js +37 -56
  47. package/dist/service-worker/setup.d.ts +6 -2
  48. package/dist/storage/auto.js +1 -1
  49. package/dist/storage/bun-sql.js +3 -3
  50. package/dist/storage/cloudflare-durable-object-sql.d.ts +75 -0
  51. package/dist/storage/cloudflare-durable-object-sql.js +0 -0
  52. package/dist/storage/cloudflare-value-codec.d.ts +65 -0
  53. package/dist/storage/cloudflare-value-codec.js +46 -0
  54. package/dist/storage/cloudflare.d.ts +140 -0
  55. package/dist/storage/cloudflare.js +127 -0
  56. package/dist/storage/compressed-storage.js +1 -1
  57. package/dist/storage/http.js +200 -2
  58. package/dist/storage/index.d.ts +1 -0
  59. package/dist/storage/indexeddb.js +311 -1
  60. package/dist/storage/interface.js +1 -1
  61. package/dist/storage/lmdb.js +1 -1
  62. package/dist/storage/memory.js +1 -1
  63. package/dist/storage/neon.js +4 -4
  64. package/dist/storage/node-sqlite.js +3 -3
  65. package/dist/storage/postgres-key-value-queries.d.ts +6 -0
  66. package/dist/storage/postgres-key-value-queries.js +2 -3
  67. package/dist/storage/postgres.js +4 -4
  68. package/dist/storage/resolve.js +1 -1
  69. package/dist/storage/scoped-storage.js +1 -1
  70. package/dist/storage/sql-identifier.d.ts +35 -0
  71. package/dist/storage/sql-identifier.js +5 -0
  72. package/dist/storage/sqlite-key-value-queries.d.ts +11 -6
  73. package/dist/storage/sqlite-key-value-queries.js +3 -3
  74. package/dist/storage/testing.js +1 -1
  75. package/dist/storage/turso.js +2 -2
  76. package/dist/storage/typed-storage.js +138 -2
  77. package/dist/storage/web-extension.js +298 -1
  78. package/dist/testing/index.js +21 -60
  79. package/dist/version.d.ts +1 -1
  80. package/dist/version.js +1 -1
  81. package/dist/web-extension.js +1 -0
  82. package/dist/worker/protocol.js +1 -1
  83. package/package.json +8 -3
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var u=Object.defineProperty;var x=(E)=>E;function y(E,_){this[E]=x.bind(null,_)}var a=(E,_)=>{for(var F in _)u(E,F,{get:_[F],enumerable:!0,configurable:!0,set:y.bind(_,F)})};var Q=(E,_)=>()=>(E&&(_=E(E=0)),_);var p=import.meta.require,s=(E,_,F)=>{if(_!=null){if(typeof _!=="object"&&typeof _!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let Y;if(F)Y=_[Symbol.asyncDispose];if(Y===void 0)Y=_[Symbol.dispose];if(typeof Y!=="function")throw TypeError("Object not disposable");E.push([F,Y,_])}else if(F)E.push([F]);return _},n=(E,_,F)=>{let Y=(X)=>_=F?new SuppressedError(X,_,"An error was suppressed during disposal"):(F=!0,X),V=(X)=>{while(X=E.pop())try{var m=X[1]&&X[1].call(X[2]);if(X[0])return Promise.resolve(m).then(V,(Z)=>(Y(Z),V()))}catch(Z){Y(Z)}if(F)throw _};return V()};function $(E,_,F){if(!E.capabilities()[_])throw Error(`Feature "${F}" requires storage capability "${_}", but this storage backend does not provide it.`)}function g(E){let _=E.capabilities(),F=[];if(_.persistence!=="local"&&_.persistence!=="remote")F.push(`persistence must be "local" or "remote" (got "${_.persistence}")`);if(_.readAfterWrite!=="linearizable")F.push(`readAfterWrite must be "linearizable" (got "${_.readAfterWrite}")`);if(_.scanConsistency!=="snapshot")F.push(`scanConsistency must be "snapshot" (got "${_.scanConsistency}")`);if(!_.atomicBatch)F.push("atomicBatch must be true");if(!_.conditionalBatch)F.push("conditionalBatch must be true");if(F.length>0)throw Error(`Storage is not durable enough for recovery: ${F.join("; ")}.`)}var T="default";async function R(E,_){return await E.get(_)!==null}async function*J(E,_,F){for await(let[Y]of E.scan(_,F))yield Y}async function D(E,_){let F=0;for await(let Y of J(E,_))F++;return F}async function B(E,_){let F=[];for await(let Y of J(E,_))F.push({type:"delete",key:Y});if(F.length===0)return 0;return await E.batch(F),F.length}async function C(E,_,F){let Y=[];for await(let V of J(E,_,F))Y.push({type:"delete",key:V});if(Y.length===0)return 0;return await E.batch(Y),Y.length}var I;var N=Q(()=>{I=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","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-terminal:"]});function M(E,_){if(_>j)throw new A(E,_)}function YE(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function XE(E,_={}){if(_.gt!==void 0&&E<=_.gt)return!1;if(_.gte!==void 0&&E<_.gte)return!1;if(_.lt!==void 0&&E>=_.lt)return!1;if(_.lte!==void 0&&E>_.lte)return!1;return!0}function UE(E,_){if(E===null||_===null)return E===_;if(E.byteLength!==_.byteLength)return!1;for(let F=0;F<E.byteLength;F++)if(E[F]!==_[F])return!1;return!0}async function v(E,_){if(E.has)return E.has(_);return R(E,_)}function z(E,_,F){if(E.keys)return E.keys(_,F);return J(E,_,F)}async function h(E,_){if(E.count)return E.count(_);return D(E,_)}async function O(E,_){if(E.deletePrefix)return E.deletePrefix(_);return B(E,_)}async function VE(E,_){M("batch operations",_.length),await E.batch(_)}async function P(E,_,F){if(M("conditionalBatch conditions",_.length),M("conditionalBatch operations",F.length),$(E,"conditionalBatch","storageConditionalBatch"),!E.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return E.conditionalBatch(_,F)}function W(E){return encodeURIComponent(E)}function GE(E){return decodeURIComponent(E)}function JE(E){try{return decodeURIComponent(E)}catch{return null}}var j=1e4,WE=1e4,A,U=(E)=>String(E).padStart(16,"0"),k="0",f="1",q=(E,_,F,Y)=>`sig:${W(E)}:${W(_)}:${Y}:${W(F)}`,ME;var K=Q(()=>{N();A=class A extends Error{code="StorageBatchOperationLimitExceededError";cap=j;count;target;constructor(E,_){super(`${E} count ${_} exceeds MAX_BATCH_OPERATIONS (${j}).`);this.name="StorageBatchOperationLimitExceededError",this.target=E,this.count=_}};ME={workflow:(E)=>`wf:${W(E)}`,checkpoint:(E)=>`wf:${W(E)}:ckpt`,checkpointHistory:(E,_)=>`wf:${W(E)}:ckpt:${String(_).padStart(10,"0")}`,timelinePrefix:(E)=>`wf:${W(E)}:timeline:`,timeline:(E,_)=>`wf:${W(E)}:timeline:${String(_).padStart(10,"0")}`,schedule:(E)=>`schedule:${W(E)}`,scheduleTick:(E,_)=>`schedule-due:${String(E).padStart(16,"0")}:${W(_)}`,scheduleRun:(E)=>`schedule-run:${W(E)}`,operation:(E,_,F)=>`op:${E}:${U(_)}:${F}`,operationInflight:(E)=>`op:inflight:${E}`,operationQueued:(E)=>`op:queued:${E}`,operationResolved:(E)=>`op:resolved:${E}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(E)=>`op:dead-letter:${E}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(E,_,F)=>`audit:bulk:${U(E)}:${W(_)}:${W(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${U(E)}:${W(_)}`,asyncActivity:(E,_)=>`async-act:v1:${W(E)}:${W(_)}`,asyncActivityResolution:(E,_)=>`async-act:v1:${W(E)}:${W(_)}:resolution`,activityReconciliationPrefix:(E)=>`actrec:v1:${W(E)}:`,activityReconciliation:(E,_,F)=>`actrec:v1:${W(E)}:${W(_)}:${F}`,eventPrefix:(E)=>`ev:${W(E)}:`,event:(E,_)=>`ev:${W(E)}:${String(_).padStart(10,"0")}`,eventHead:(E)=>`ev:${W(E)}:head`,eventWatermark:(E)=>`ev:${W(E)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(E)=>`fleet-event:${String(E).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(E)=>`fleet-event-by-workflow:${W(E)}:`,fleetEventByWorkflow:(E,_)=>`fleet-event-by-workflow:${W(E)}:${String(_).padStart(10,"0")}`,signal:(E,_,F)=>q(E,_,F,f),startSignal:(E,_,F)=>q(E,_,F,k),signalSequence:(E)=>`sigseq:v1:${W(E)}`,signalAcceptedResponsePrefix:(E)=>`sigres:v1:${W(E)}:`,signalAcceptedResponse:(E,_,F)=>`sigres:v1:${W(E)}:${W(_)}:${W(F)}`,deadline:(E,_)=>`wf-deadline:${U(E)}:${W(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${U(E)}:${W(_)}`,teardownTimer:(E,_)=>`wf-teardown:${U(E)}:${W(_)}`,delayedStart:(E,_)=>`wf-delayed:${U(E)}:${W(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${U(E)}:${W(_)}`,attribute:(E)=>`attr:${W(E)}`,attributeIndex:(E,_,F)=>`idx:${E}:${_}:${W(F)}`,tagIndex:(E,_)=>`tag:${W(E)}:${W(_)}`,updatePrefix:(E)=>`upd:${W(E)}:`,update:(E,_)=>`upd:${W(E)}:${_}`,updateResponse:(E)=>`upr:${E}`,updateIdempotency:(E,_)=>`upk:${W(E)}:${_}`,startIdempotency:(E)=>`start-idem:${W(E)}`,startIdempotencySignalId:(E)=>`start-idem:${E}`,livenessPrefix:()=>"liveness:",liveness:(E)=>`liveness:${W(E)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(E,_,F)=>`budget:${E}:${_}:${F}`,review:(E,_)=>`review:${W(E)}:${_}`,workflowHeaders:(E)=>`wf-headers:${W(E)}`,childCancellationPrefix:(E)=>`child-cancel:${W(E)}:`,childCancellation:(E,_)=>`child-cancel:${W(E)}:${W(_)}`,terminalCleanupNeeded:(E)=>`wf-cleanup-needed:${W(E)}`,workflowConcurrency:(E,_)=>`wf-concurrency:${W(E)}:${W(_)}`,workflowConcurrencyHolder:(E)=>`wf-concurrency-holder:${W(E)}`,workflowHasServices:(E)=>`wf-has-services:${W(E)}`,finalizerState:(E)=>`wf-finalizer-state:${W(E)}`,teardownOwed:(E)=>`wf-teardown-needed:${W(E)}`,teardownDeadLetter:(E)=>`wf-teardown-deadletter:${W(E)}`,offload:(E,_)=>`offload:${W(E)}:${_}`,archive:(E,_)=>`archive:${W(E)}:${_}`,stateExecution:(E,_)=>`state:execution:${W(E)}:${W(_)}`,stateWorkflow:(E,_)=>`state:workflow-scope:${T}:${W(E)}:${W(_)}`,streamChunkPrefix:(E,_)=>`blob:${W(E)}:${_}:chunk:`,streamChunk:(E,_,F)=>`blob:${W(E)}:${_}:chunk:${String(F).padStart(10,"0")}`,streamTail:(E,_)=>`blob:${W(E)}:${_}:tail`,streamMetadata:(E,_)=>`blob:${W(E)}:${_}:meta`,budgetCharged:(E)=>`budget-charged:${E}`,toolEffect:(E,_,F)=>`tool-effect:${W(E)}:${_}:${F}`,workflowVisibilityStatus:(E,_)=>`wf-idx-status:${W(E)}:${W(_)}`,workflowVisibilityType:(E,_)=>`wf-idx-type:${W(E)}:${W(_)}`,workflowVisibilityCreated:(E,_)=>`wf-idx-created:${U(E)}:${W(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${U(E)}:${W(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${U(E)}:${W(_)}`,workflowVisibilityManifest:(E)=>`wf-idx-manifest:${W(E)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});function w(E){if(E===void 0)return;if(typeof E!=="number"||!Number.isInteger(E)||E<0)throw Error("deleteRange limit must be a finite non-negative integer");return E===0?0:E}function H(E){let _={},F=!1;for(let V of["gt","gte","lt","lte"]){let X=E[V];if(X===void 0)continue;if(typeof X!=="string")throw Error("deleteRange bounds must be strings");_[V]=X,F=!0}if(!F)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Y=w(E.limit);if(Y!==void 0)_.limit=Y;return _}async function b(E,_,F){let Y=H(F);if(E.deleteRange)return E.deleteRange(_,Y);return C(E,_,Y)}var c=()=>{};function S(E){return E.replaceAll(/:+$/g,"")}function l(E,_){let F=S(E),Y=S(_);if(F.length===0)return Y;if(Y.length===0)return F;return`${F}:${Y}`}function RE(E,_){return new L(E,_)}var L;var d=Q(()=>{c();K();L=class L{#_;#F;constructor(E,_){this.#_=E,this.#F=S(_)}#E(E){if(this.#F.length===0)return E;return E.length===0?`${this.#F}:`:`${this.#F}:${E}`}#W(E){if(this.#F.length===0)return E;return E.slice(this.#F.length+1)}#Y(E={}){let _={};if(E.limit!==void 0)_.limit=E.limit;if(E.reverse!==void 0)_.reverse=E.reverse;if(E.gt!==void 0)_.gt=this.#E(E.gt);if(E.gte!==void 0)_.gte=this.#E(E.gte);if(E.lt!==void 0)_.lt=this.#E(E.lt);if(E.lte!==void 0)_.lte=this.#E(E.lte);return _}#X(E){let _={};if(E.limit!==void 0)_.limit=E.limit;if(E.gt!==void 0)_.gt=this.#E(E.gt);if(E.gte!==void 0)_.gte=this.#E(E.gte);if(E.lt!==void 0)_.lt=this.#E(E.lt);if(E.lte!==void 0)_.lte=this.#E(E.lte);return _}capabilities(){return this.#_.capabilities()}scoped(E){return new L(this.#_,l(this.#F,E))}async get(E){return this.#_.get(this.#E(E))}async put(E,_){await this.#_.put(this.#E(E),_)}async delete(E){await this.#_.delete(this.#E(E))}async*scan(E,_){for await(let[F,Y]of this.#_.scan(this.#E(E),this.#Y(_)))yield[this.#W(F),Y]}async batch(E){M("batch operations",E.length),await this.#_.batch(E.map((_)=>{if(_.type==="put")return{type:"put",key:this.#E(_.key),value:_.value};return{type:"delete",key:this.#E(_.key)}}))}async conditionalBatch(E,_){return P(this.#_,E.map((F)=>({key:this.#E(F.key),expectedValue:F.expectedValue})),_.map((F)=>{if(F.type==="put")return{type:"put",key:this.#E(F.key),value:F.value};return{type:"delete",key:this.#E(F.key)}}))}async has(E){return v(this.#_,this.#E(E))}async deletePrefix(E){return O(this.#_,this.#E(E))}async deleteRange(E,_){let F=this.#X(H(_));return b(this.#_,this.#E(E),F)}async*keys(E,_){for await(let F of z(this.#_,this.#E(E),this.#Y(_)))yield this.#W(F)}async count(E){return h(this.#_,this.#E(E))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}});d();export{RE as scopedStorage,L as ScopedStorage};
2
+ var x=import.meta.require,y=(E,_,F)=>{if(_!=null){if(typeof _!=="object"&&typeof _!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let Y;if(F)Y=_[Symbol.asyncDispose];if(Y===void 0)Y=_[Symbol.dispose];if(typeof Y!=="function")throw TypeError("Object not disposable");E.push([F,Y,_])}else if(F)E.push([F]);return _},g=(E,_,F)=>{let Y=(X)=>_=F?new SuppressedError(X,_,"An error was suppressed during disposal"):(F=!0,X),V=(X)=>{while(X=E.pop())try{var O=X[1]&&X[1].call(X[2]);if(X[0])return Promise.resolve(O).then(V,(M)=>(Y(M),V()))}catch(M){Y(M)}if(F)throw _};return V()};function Q(E,_,F){if(!E.capabilities()[_])throw Error(`Feature "${F}" requires storage capability "${_}", but this storage backend does not provide it.`)}function P(E){let _=E.capabilities(),F=[];if(_.persistence!=="local"&&_.persistence!=="remote")F.push(`persistence must be "local" or "remote" (got "${_.persistence}")`);if(_.readAfterWrite!=="linearizable")F.push(`readAfterWrite must be "linearizable" (got "${_.readAfterWrite}")`);if(_.scanConsistency!=="snapshot")F.push(`scanConsistency must be "snapshot" (got "${_.scanConsistency}")`);if(!_.atomicBatch)F.push("atomicBatch must be true");if(!_.conditionalBatch)F.push("conditionalBatch must be true");if(F.length>0)throw Error(`Storage is not durable enough for recovery: ${F.join("; ")}.`)}var Z="default";async function S(E,_){return await E.get(_)!==null}async function*G(E,_,F){for await(let[Y]of E.scan(_,F))yield Y}async function L(E,_){let F=0;for await(let Y of G(E,_))F++;return F}async function R(E,_){let F=[];for await(let Y of G(E,_))F.push({type:"delete",key:Y});if(F.length===0)return 0;return await E.batch(F),F.length}async function D(E,_,F){let Y=[];for await(let V of G(E,_,F))Y.push({type:"delete",key:V});if(Y.length===0)return 0;return await E.batch(Y),Y.length}var K=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","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-terminal:"];var $=1e4,s=1e4;class C extends Error{code="StorageBatchOperationLimitExceededError";cap=$;count;target;constructor(E,_){super(`${E} count ${_} exceeds MAX_BATCH_OPERATIONS (${$}).`);this.name="StorageBatchOperationLimitExceededError",this.target=E,this.count=_}}function J(E,_){if(_>$)throw new C(E,_)}function n(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function r(E,_={}){if(_.gt!==void 0&&E<=_.gt)return!1;if(_.gte!==void 0&&E<_.gte)return!1;if(_.lt!==void 0&&E>=_.lt)return!1;if(_.lte!==void 0&&E>_.lte)return!1;return!0}function t(E,_){if(E===null||_===null)return E===_;if(E.byteLength!==_.byteLength)return!1;for(let F=0;F<E.byteLength;F++)if(E[F]!==_[F])return!1;return!0}async function N(E,_){if(E.has)return E.has(_);return S(E,_)}function q(E,_,F){if(E.keys)return E.keys(_,F);return G(E,_,F)}async function A(E,_){if(E.count)return E.count(_);return L(E,_)}async function v(E,_){if(E.deletePrefix)return E.deletePrefix(_);return R(E,_)}async function i(E,_){J("batch operations",_.length),await E.batch(_)}async function z(E,_,F){if(J("conditionalBatch conditions",_.length),J("conditionalBatch operations",F.length),Q(E,"conditionalBatch","storageConditionalBatch"),!E.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return E.conditionalBatch(_,F)}function W(E){return encodeURIComponent(E)}function e(E){return decodeURIComponent(E)}function o(E){try{return decodeURIComponent(E)}catch{return null}}var U=(E)=>String(E).padStart(16,"0"),b="0",c="1",B=(E,_,F,Y)=>`sig:${W(E)}:${W(_)}:${Y}:${W(F)}`,EE={workflow:(E)=>`wf:${W(E)}`,checkpoint:(E)=>`wf:${W(E)}:ckpt`,checkpointHistory:(E,_)=>`wf:${W(E)}:ckpt:${String(_).padStart(10,"0")}`,timelinePrefix:(E)=>`wf:${W(E)}:timeline:`,timeline:(E,_)=>`wf:${W(E)}:timeline:${String(_).padStart(10,"0")}`,schedule:(E)=>`schedule:${W(E)}`,scheduleTick:(E,_)=>`schedule-due:${String(E).padStart(16,"0")}:${W(_)}`,scheduleRun:(E)=>`schedule-run:${W(E)}`,operation:(E,_,F)=>`op:${E}:${U(_)}:${F}`,operationInflight:(E)=>`op:inflight:${E}`,operationQueued:(E)=>`op:queued:${E}`,operationResolved:(E)=>`op:resolved:${E}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(E)=>`op:dead-letter:${E}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(E,_,F)=>`audit:bulk:${U(E)}:${W(_)}:${W(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${U(E)}:${W(_)}`,asyncActivity:(E,_)=>`async-act:v1:${W(E)}:${W(_)}`,asyncActivityResolution:(E,_)=>`async-act:v1:${W(E)}:${W(_)}:resolution`,activityReconciliationPrefix:(E)=>`actrec:v1:${W(E)}:`,activityReconciliation:(E,_,F)=>`actrec:v1:${W(E)}:${W(_)}:${F}`,eventPrefix:(E)=>`ev:${W(E)}:`,event:(E,_)=>`ev:${W(E)}:${String(_).padStart(10,"0")}`,eventHead:(E)=>`ev:${W(E)}:head`,eventWatermark:(E)=>`ev:${W(E)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(E)=>`fleet-event:${String(E).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(E)=>`fleet-event-by-workflow:${W(E)}:`,fleetEventByWorkflow:(E,_)=>`fleet-event-by-workflow:${W(E)}:${String(_).padStart(10,"0")}`,signal:(E,_,F)=>B(E,_,F,c),startSignal:(E,_,F)=>B(E,_,F,b),signalSequence:(E)=>`sigseq:v1:${W(E)}`,signalAcceptedResponsePrefix:(E)=>`sigres:v1:${W(E)}:`,signalAcceptedResponse:(E,_,F)=>`sigres:v1:${W(E)}:${W(_)}:${W(F)}`,deadline:(E,_)=>`wf-deadline:${U(E)}:${W(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${U(E)}:${W(_)}`,teardownTimer:(E,_)=>`wf-teardown:${U(E)}:${W(_)}`,delayedStart:(E,_)=>`wf-delayed:${U(E)}:${W(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${U(E)}:${W(_)}`,attribute:(E)=>`attr:${W(E)}`,attributeIndex:(E,_,F)=>`idx:${E}:${_}:${W(F)}`,tagIndex:(E,_)=>`tag:${W(E)}:${W(_)}`,updatePrefix:(E)=>`upd:${W(E)}:`,update:(E,_)=>`upd:${W(E)}:${_}`,updateResponse:(E)=>`upr:${E}`,updateIdempotency:(E,_)=>`upk:${W(E)}:${_}`,startIdempotency:(E)=>`start-idem:${W(E)}`,startIdempotencySignalId:(E)=>`start-idem:${E}`,livenessPrefix:()=>"liveness:",liveness:(E)=>`liveness:${W(E)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(E,_,F)=>`budget:${E}:${_}:${F}`,review:(E,_)=>`review:${W(E)}:${_}`,workflowHeaders:(E)=>`wf-headers:${W(E)}`,childCancellationPrefix:(E)=>`child-cancel:${W(E)}:`,childCancellation:(E,_)=>`child-cancel:${W(E)}:${W(_)}`,terminalCleanupNeeded:(E)=>`wf-cleanup-needed:${W(E)}`,workflowConcurrency:(E,_)=>`wf-concurrency:${W(E)}:${W(_)}`,workflowConcurrencyHolder:(E)=>`wf-concurrency-holder:${W(E)}`,workflowHasServices:(E)=>`wf-has-services:${W(E)}`,finalizerState:(E)=>`wf-finalizer-state:${W(E)}`,teardownOwed:(E)=>`wf-teardown-needed:${W(E)}`,teardownDeadLetter:(E)=>`wf-teardown-deadletter:${W(E)}`,offload:(E,_)=>`offload:${W(E)}:${_}`,archive:(E,_)=>`archive:${W(E)}:${_}`,stateExecution:(E,_)=>`state:execution:${W(E)}:${W(_)}`,stateWorkflow:(E,_)=>`state:workflow-scope:${Z}:${W(E)}:${W(_)}`,streamChunkPrefix:(E,_)=>`blob:${W(E)}:${_}:chunk:`,streamChunk:(E,_,F)=>`blob:${W(E)}:${_}:chunk:${String(F).padStart(10,"0")}`,streamTail:(E,_)=>`blob:${W(E)}:${_}:tail`,streamMetadata:(E,_)=>`blob:${W(E)}:${_}:meta`,budgetCharged:(E)=>`budget-charged:${E}`,toolEffect:(E,_,F)=>`tool-effect:${W(E)}:${_}:${F}`,workflowVisibilityStatus:(E,_)=>`wf-idx-status:${W(E)}:${W(_)}`,workflowVisibilityType:(E,_)=>`wf-idx-type:${W(E)}:${W(_)}`,workflowVisibilityCreated:(E,_)=>`wf-idx-created:${U(E)}:${W(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${U(E)}:${W(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${U(E)}:${W(_)}`,workflowVisibilityManifest:(E)=>`wf-idx-manifest:${W(E)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function m(E){if(E===void 0)return;if(typeof E!=="number"||!Number.isInteger(E)||E<0)throw Error("deleteRange limit must be a finite non-negative integer");return E===0?0:E}function T(E){let _={},F=!1;for(let V of["gt","gte","lt","lte"]){let X=E[V];if(X===void 0)continue;if(typeof X!=="string")throw Error("deleteRange bounds must be strings");_[V]=X,F=!0}if(!F)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Y=m(E.limit);if(Y!==void 0)_.limit=Y;return _}async function h(E,_,F){let Y=T(F);if(E.deleteRange)return E.deleteRange(_,Y);return D(E,_,Y)}function j(E){return E.replaceAll(/:+$/g,"")}function u(E,_){let F=j(E),Y=j(_);if(F.length===0)return Y;if(Y.length===0)return F;return`${F}:${Y}`}class H{#_;#F;constructor(E,_){this.#_=E,this.#F=j(_)}#E(E){if(this.#F.length===0)return E;return E.length===0?`${this.#F}:`:`${this.#F}:${E}`}#W(E){if(this.#F.length===0)return E;return E.slice(this.#F.length+1)}#Y(E={}){let _={};if(E.limit!==void 0)_.limit=E.limit;if(E.reverse!==void 0)_.reverse=E.reverse;if(E.gt!==void 0)_.gt=this.#E(E.gt);if(E.gte!==void 0)_.gte=this.#E(E.gte);if(E.lt!==void 0)_.lt=this.#E(E.lt);if(E.lte!==void 0)_.lte=this.#E(E.lte);return _}#X(E){let _={};if(E.limit!==void 0)_.limit=E.limit;if(E.gt!==void 0)_.gt=this.#E(E.gt);if(E.gte!==void 0)_.gte=this.#E(E.gte);if(E.lt!==void 0)_.lt=this.#E(E.lt);if(E.lte!==void 0)_.lte=this.#E(E.lte);return _}capabilities(){return this.#_.capabilities()}scoped(E){return new H(this.#_,u(this.#F,E))}async get(E){return this.#_.get(this.#E(E))}async put(E,_){await this.#_.put(this.#E(E),_)}async delete(E){await this.#_.delete(this.#E(E))}async*scan(E,_){for await(let[F,Y]of this.#_.scan(this.#E(E),this.#Y(_)))yield[this.#W(F),Y]}async batch(E){J("batch operations",E.length),await this.#_.batch(E.map((_)=>{if(_.type==="put")return{type:"put",key:this.#E(_.key),value:_.value};return{type:"delete",key:this.#E(_.key)}}))}async conditionalBatch(E,_){return z(this.#_,E.map((F)=>({key:this.#E(F.key),expectedValue:F.expectedValue})),_.map((F)=>{if(F.type==="put")return{type:"put",key:this.#E(F.key),value:F.value};return{type:"delete",key:this.#E(F.key)}}))}async has(E){return N(this.#_,this.#E(E))}async deletePrefix(E){return v(this.#_,this.#E(E))}async deleteRange(E,_){let F=this.#X(T(_));return h(this.#_,this.#E(E),F)}async*keys(E,_){for await(let F of q(this.#_,this.#E(E),this.#Y(_)))yield this.#W(F)}async count(E){return A(this.#_,this.#E(E))}[Symbol.dispose](){this.#_[Symbol.dispose]()}}function JE(E,_){return new H(E,_)}export{JE as scopedStorage,H as ScopedStorage};
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Driver-neutral SQL identifier validation shared by adapters that must
3
+ * interpolate a caller-configured schema/table name directly into SQL text
4
+ * (identifiers cannot be bound as query parameters).
5
+ *
6
+ * Originally lived only in `postgres-key-value-queries.ts` as
7
+ * `assertPostgresIdentifier`; extracted here so a second dialect
8
+ * (`cloudflare.ts`) can validate its configurable table name without
9
+ * duplicating the pattern or the injection-safety reasoning.
10
+ *
11
+ * @module storage/sql-identifier
12
+ */
13
+ /**
14
+ * The strict identifier grammar every adapter using this module accepts:
15
+ * a letter or underscore, followed by letters, digits, or underscores. The
16
+ * pattern excludes the `"` quote character, so no quote-doubling is required
17
+ * when the validated identifier is later wrapped in double quotes.
18
+ */
19
+ export declare const SQL_IDENTIFIER_PATTERN: RegExp;
20
+ /**
21
+ * Validate a SQL identifier (schema or table name) against
22
+ * {@link SQL_IDENTIFIER_PATTERN}. Identifiers cannot be bound as query
23
+ * parameters, so they must be interpolated into SQL text — this validation,
24
+ * run once at construction, is the injection guard that makes interpolation
25
+ * safe.
26
+ *
27
+ * Internal helper: not exported from any package subpath. Callers reach it
28
+ * transitively through dialect-specific wrappers such as
29
+ * `assertPostgresIdentifier` (Postgres) and the Cloudflare Durable Object
30
+ * adapter's table-name validation. No `@example` here for that reason, like
31
+ * the derived `*Core` helpers in `./derived-operations.ts`.
32
+ *
33
+ * @throws {Error} When `value` does not match {@link SQL_IDENTIFIER_PATTERN}.
34
+ */
35
+ export declare function assertSqlIdentifier(value: string, role: string, dialect: string): void;
@@ -0,0 +1,5 @@
1
+ export const SQL_IDENTIFIER_PATTERN = /^[a-z_][a-z0-9_]*$/i;
2
+ export function assertSqlIdentifier(value, role, dialect) {
3
+ if (!SQL_IDENTIFIER_PATTERN.test(value))
4
+ throw Error(`${dialect} storage ${role} name "${value}" is not a valid ${dialect} identifier. Use only letters, digits, and underscores, starting with a letter or underscore (matching ${SQL_IDENTIFIER_PATTERN.source}).`);
5
+ }
@@ -20,21 +20,26 @@ export type SqliteBuiltQuery = {
20
20
  export declare function buildSqlitePrefixRangeParameters(prefix: string): [string, string];
21
21
  export declare function buildSqliteKeyRangeQuery(prefix: string, options?: ScanOptions): SqliteKeyRangeQuery;
22
22
  /**
23
- * Build a bounded-range `DELETE` for the `kv` table from already-validated
23
+ * Build a bounded-range `DELETE` for a `kv`-shaped table from already-validated
24
24
  * delete options.
25
25
  *
26
- * Without `limit`, emits a plain `DELETE FROM kv WHERE <conditions>` — no
26
+ * Without `limit`, emits a plain `DELETE FROM <table> WHERE <conditions>` — no
27
27
  * ordering, since order is meaningless when deleting the whole matched range.
28
28
  * With `limit`, emits a portable subquery form so the lowest (ascending) keys
29
- * are deleted first: `DELETE FROM kv WHERE key IN (SELECT key FROM kv WHERE
30
- * <conditions> ORDER BY key ASC LIMIT ?)`. The subquery avoids relying on
31
- * `DELETE ... ORDER BY ... LIMIT`, which requires the
29
+ * are deleted first: `DELETE FROM <table> WHERE key IN (SELECT key FROM
30
+ * <table> WHERE <conditions> ORDER BY key ASC LIMIT ?)`. The subquery avoids
31
+ * relying on `DELETE ... ORDER BY ... LIMIT`, which requires the
32
32
  * `SQLITE_ENABLE_UPDATE_DELETE_LIMIT` compile flag and is not available on
33
33
  * libSQL/Turso.
34
34
  *
35
35
  * Requires {@link NormalizedDeleteRangeOptions}: the type guarantees at least
36
36
  * one bound is present, so this builder can never produce a whole-prefix wipe.
37
+ *
38
+ * `table` defaults to the unqualified `kv` so every existing caller (which all
39
+ * use the fixed `kv` table) emits byte-identical SQL. Adapters with a
40
+ * caller-configured table name (validated as a strict SQL identifier before it
41
+ * reaches this builder) pass their own table reference.
37
42
  */
38
- export declare function buildSqliteKeyRangeDelete(prefix: string, options: NormalizedDeleteRangeOptions): SqliteBuiltQuery;
43
+ export declare function buildSqliteKeyRangeDelete(prefix: string, options: NormalizedDeleteRangeOptions, table?: string): SqliteBuiltQuery;
39
44
  export declare function buildSqliteKeyValueRangeSelect(prefix: string, options?: ScanOptions): SqliteBuiltQuery;
40
45
  export declare function buildSqliteKeyRangeSelect(prefix: string, options?: ScanOptions): SqliteBuiltQuery;
@@ -35,17 +35,17 @@ export function buildSqliteKeyRangeQuery(prefix, options = {}) {
35
35
  sqlSuffix: `WHERE ${conditions.join(" AND ")} ORDER BY key ${direction}${limitClause}`
36
36
  };
37
37
  }
38
- export function buildSqliteKeyRangeDelete(prefix, options) {
38
+ export function buildSqliteKeyRangeDelete(prefix, options, table = "kv") {
39
39
  const { conditions, parameters } = buildSqliteKeyRangeConditions(prefix, options), whereClause = conditions.join(" AND ");
40
40
  if (options.limit === void 0)
41
41
  return {
42
42
  parameters,
43
- sql: `DELETE FROM kv WHERE ${whereClause}`
43
+ sql: `DELETE FROM ${table} WHERE ${whereClause}`
44
44
  };
45
45
  parameters.push(options.limit);
46
46
  return {
47
47
  parameters,
48
- sql: `DELETE FROM kv WHERE key IN (SELECT key FROM kv WHERE ${whereClause} ORDER BY key ASC LIMIT ?)`
48
+ sql: `DELETE FROM ${table} WHERE key IN (SELECT key FROM ${table} WHERE ${whereClause} ORDER BY key ASC LIMIT ?)`
49
49
  };
50
50
  }
51
51
  export function buildSqliteKeyValueRangeSelect(prefix, options = {}) {
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var I=Object.defineProperty;var f=(E)=>E;function g(E,_){this[E]=f.bind(null,_)}var s=(E,_)=>{for(var F in _)I(E,F,{get:_[F],enumerable:!0,configurable:!0,set:g.bind(_,F)})};var h=(E,_)=>()=>(E&&(_=E(E=0)),_);var i=import.meta.require,K=(E,_,F)=>{if(_!=null){if(typeof _!=="object"&&typeof _!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let R;if(F)R=_[Symbol.asyncDispose];if(R===void 0)R=_[Symbol.dispose];if(typeof R!=="function")throw TypeError("Object not disposable");E.push([F,R,_])}else if(F)E.push([F]);return _},O=(E,_,F)=>{let R=(W)=>_=F?new SuppressedError(W,_,"An error was suppressed during disposal"):(F=!0,W),S=(W)=>{while(W=E.pop())try{var Y=W[1]&&W[1].call(W[2]);if(W[0])return Promise.resolve(Y).then(S,(U)=>(R(U),S()))}catch(U){R(U)}if(F)throw _};return S()};function N(E,_,F){if(!E.capabilities()[_])throw Error(`Feature "${F}" requires storage capability "${_}", but this storage backend does not provide it.`)}function p(E){let _=E.capabilities(),F=[];if(_.persistence!=="local"&&_.persistence!=="remote")F.push(`persistence must be "local" or "remote" (got "${_.persistence}")`);if(_.readAfterWrite!=="linearizable")F.push(`readAfterWrite must be "linearizable" (got "${_.readAfterWrite}")`);if(_.scanConsistency!=="snapshot")F.push(`scanConsistency must be "snapshot" (got "${_.scanConsistency}")`);if(!_.atomicBatch)F.push("atomicBatch must be true");if(!_.conditionalBatch)F.push("conditionalBatch must be true");if(F.length>0)throw Error(`Storage is not durable enough for recovery: ${F.join("; ")}.`)}var q="default";async function v(E,_){return await E.get(_)!==null}async function*j(E,_,F){for await(let[R]of E.scan(_,F))yield R}async function m(E,_){let F=0;for await(let R of j(E,_))F++;return F}async function u(E,_){let F=[];for await(let R of j(E,_))F.push({type:"delete",key:R});if(F.length===0)return 0;return await E.batch(F),F.length}async function e(E,_,F){let R=[];for await(let S of j(E,_,F))R.push({type:"delete",key:S});if(R.length===0)return 0;return await E.batch(R),R.length}var n;var b=h(()=>{n=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","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-terminal:"]});function A(E,_){if(_>C)throw new y(E,_)}function SE(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function YE(E,_={}){if(_.gt!==void 0&&E<=_.gt)return!1;if(_.gte!==void 0&&E<_.gte)return!1;if(_.lt!==void 0&&E>=_.lt)return!1;if(_.lte!==void 0&&E>_.lte)return!1;return!0}function UE(E,_){if(E===null||_===null)return E===_;if(E.byteLength!==_.byteLength)return!1;for(let F=0;F<E.byteLength;F++)if(E[F]!==_[F])return!1;return!0}async function XE(E,_){if(E.has)return E.has(_);return v(E,_)}function LE(E,_,F){if(E.keys)return E.keys(_,F);return j(E,_,F)}async function VE(E,_){if(E.count)return E.count(_);return m(E,_)}async function GE(E,_){if(E.deletePrefix)return E.deletePrefix(_);return u(E,_)}async function JE(E,_){A("batch operations",_.length),await E.batch(_)}async function z(E,_,F){if(A("conditionalBatch conditions",_.length),A("conditionalBatch operations",F.length),N(E,"conditionalBatch","storageConditionalBatch"),!E.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return E.conditionalBatch(_,F)}function P(E){return encodeURIComponent(E)}function KE(E){return decodeURIComponent(E)}function OE(E){try{return decodeURIComponent(E)}catch{return null}}var C=1e4,WE=1e4,y,Q=(E)=>String(E).padStart(16,"0"),k="0",l="1",x=(E,_,F,R)=>`sig:${P(E)}:${P(_)}:${R}:${P(F)}`,QE;var c=h(()=>{b();y=class y extends Error{code="StorageBatchOperationLimitExceededError";cap=C;count;target;constructor(E,_){super(`${E} count ${_} exceeds MAX_BATCH_OPERATIONS (${C}).`);this.name="StorageBatchOperationLimitExceededError",this.target=E,this.count=_}};QE={workflow:(E)=>`wf:${P(E)}`,checkpoint:(E)=>`wf:${P(E)}:ckpt`,checkpointHistory:(E,_)=>`wf:${P(E)}:ckpt:${String(_).padStart(10,"0")}`,timelinePrefix:(E)=>`wf:${P(E)}:timeline:`,timeline:(E,_)=>`wf:${P(E)}:timeline:${String(_).padStart(10,"0")}`,schedule:(E)=>`schedule:${P(E)}`,scheduleTick:(E,_)=>`schedule-due:${String(E).padStart(16,"0")}:${P(_)}`,scheduleRun:(E)=>`schedule-run:${P(E)}`,operation:(E,_,F)=>`op:${E}:${Q(_)}:${F}`,operationInflight:(E)=>`op:inflight:${E}`,operationQueued:(E)=>`op:queued:${E}`,operationResolved:(E)=>`op:resolved:${E}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(E)=>`op:dead-letter:${E}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(E,_,F)=>`audit:bulk:${Q(E)}:${P(_)}:${P(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${Q(E)}:${P(_)}`,asyncActivity:(E,_)=>`async-act:v1:${P(E)}:${P(_)}`,asyncActivityResolution:(E,_)=>`async-act:v1:${P(E)}:${P(_)}:resolution`,activityReconciliationPrefix:(E)=>`actrec:v1:${P(E)}:`,activityReconciliation:(E,_,F)=>`actrec:v1:${P(E)}:${P(_)}:${F}`,eventPrefix:(E)=>`ev:${P(E)}:`,event:(E,_)=>`ev:${P(E)}:${String(_).padStart(10,"0")}`,eventHead:(E)=>`ev:${P(E)}:head`,eventWatermark:(E)=>`ev:${P(E)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(E)=>`fleet-event:${String(E).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(E)=>`fleet-event-by-workflow:${P(E)}:`,fleetEventByWorkflow:(E,_)=>`fleet-event-by-workflow:${P(E)}:${String(_).padStart(10,"0")}`,signal:(E,_,F)=>x(E,_,F,l),startSignal:(E,_,F)=>x(E,_,F,k),signalSequence:(E)=>`sigseq:v1:${P(E)}`,signalAcceptedResponsePrefix:(E)=>`sigres:v1:${P(E)}:`,signalAcceptedResponse:(E,_,F)=>`sigres:v1:${P(E)}:${P(_)}:${P(F)}`,deadline:(E,_)=>`wf-deadline:${Q(E)}:${P(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${Q(E)}:${P(_)}`,teardownTimer:(E,_)=>`wf-teardown:${Q(E)}:${P(_)}`,delayedStart:(E,_)=>`wf-delayed:${Q(E)}:${P(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${Q(E)}:${P(_)}`,attribute:(E)=>`attr:${P(E)}`,attributeIndex:(E,_,F)=>`idx:${E}:${_}:${P(F)}`,tagIndex:(E,_)=>`tag:${P(E)}:${P(_)}`,updatePrefix:(E)=>`upd:${P(E)}:`,update:(E,_)=>`upd:${P(E)}:${_}`,updateResponse:(E)=>`upr:${E}`,updateIdempotency:(E,_)=>`upk:${P(E)}:${_}`,startIdempotency:(E)=>`start-idem:${P(E)}`,startIdempotencySignalId:(E)=>`start-idem:${E}`,livenessPrefix:()=>"liveness:",liveness:(E)=>`liveness:${P(E)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(E,_,F)=>`budget:${E}:${_}:${F}`,review:(E,_)=>`review:${P(E)}:${_}`,workflowHeaders:(E)=>`wf-headers:${P(E)}`,childCancellationPrefix:(E)=>`child-cancel:${P(E)}:`,childCancellation:(E,_)=>`child-cancel:${P(E)}:${P(_)}`,terminalCleanupNeeded:(E)=>`wf-cleanup-needed:${P(E)}`,workflowConcurrency:(E,_)=>`wf-concurrency:${P(E)}:${P(_)}`,workflowConcurrencyHolder:(E)=>`wf-concurrency-holder:${P(E)}`,workflowHasServices:(E)=>`wf-has-services:${P(E)}`,finalizerState:(E)=>`wf-finalizer-state:${P(E)}`,teardownOwed:(E)=>`wf-teardown-needed:${P(E)}`,teardownDeadLetter:(E)=>`wf-teardown-deadletter:${P(E)}`,offload:(E,_)=>`offload:${P(E)}:${_}`,archive:(E,_)=>`archive:${P(E)}:${_}`,stateExecution:(E,_)=>`state:execution:${P(E)}:${P(_)}`,stateWorkflow:(E,_)=>`state:workflow-scope:${q}:${P(E)}:${P(_)}`,streamChunkPrefix:(E,_)=>`blob:${P(E)}:${_}:chunk:`,streamChunk:(E,_,F)=>`blob:${P(E)}:${_}:chunk:${String(F).padStart(10,"0")}`,streamTail:(E,_)=>`blob:${P(E)}:${_}:tail`,streamMetadata:(E,_)=>`blob:${P(E)}:${_}:meta`,budgetCharged:(E)=>`budget-charged:${E}`,toolEffect:(E,_,F)=>`tool-effect:${P(E)}:${_}:${F}`,workflowVisibilityStatus:(E,_)=>`wf-idx-status:${P(E)}:${P(_)}`,workflowVisibilityType:(E,_)=>`wf-idx-type:${P(E)}:${P(_)}`,workflowVisibilityCreated:(E,_)=>`wf-idx-created:${Q(E)}:${P(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${Q(E)}:${P(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${Q(E)}:${P(_)}`,workflowVisibilityManifest:(E)=>`wf-idx-manifest:${P(E)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});c();import{describe as H,expect as V,it as J}from"bun:test";var w=new TextEncoder,d=new TextDecoder;function L(E){return w.encode(E)}function D(E){return d.decode(E)}async function Z(E){let _=[];for await(let F of E)_.push(F);return _}function a(E){let _=E.capabilities();V(["ephemeral","local","remote"]).toContain(_.persistence??""),V(["linearizable","session","eventual"]).toContain(_.readAfterWrite),V(["snapshot","best-effort"]).toContain(_.scanConsistency),V(typeof _.atomicBatch).toBe("boolean"),V(typeof _.conditionalBatch).toBe("boolean"),V(typeof _.boundedRangeDelete).toBe("boolean")}function ME(E,_){H(`${E} binary and large-scan conformance`,()=>{J("round-trips binary values correctly",async()=>{let F=await _.create();try{let R=new Uint8Array([0,1,127,128,255,42,0,13,10]);await F.put("binary",R);let S=await F.get("binary");V(S).toEqual(R)}finally{F[Symbol.dispose]()}}),J("returns 1000 scanned keys in sorted order",async()=>{let F=await _.create();try{let R=Array.from({length:1000},(W,Y)=>({type:"put",key:`item:${String(Y).padStart(4,"0")}`,value:L(String(Y))}));await F.batch(R);let S=await Z(F.scan("item:"));V(S).toHaveLength(1000);for(let W=0;W<S.length;W+=1)V(S[W][0]).toBe(`item:${String(W).padStart(4,"0")}`)}finally{F[Symbol.dispose]()}})})}function TE(E,_){let{create:F,expected:R}=_;H(`${E} capabilities() conformance`,()=>{if(J("reports a well-formed capability shape",async()=>{let W=[];try{const S=K(W,await F(),0);a(S)}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("reports the expected capability row",async()=>{let W=[];try{const S=K(W,await F(),0);V(S.capabilities()).toEqual(R)}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("satisfies its declared read-after-write level",async()=>{let Y=[];try{const S=K(Y,await F(),0);await S.put("raw:key",L("written"));let W=await S.get("raw:key");if(R.readAfterWrite!=="eventual")V(W).not.toBeNull(),V(D(W)).toBe("written")}catch(U){var X=U,G=1}finally{O(Y,X,G)}}),R.scanConsistency==="snapshot")J("does not observe a key inserted after the scan began (snapshot)",async()=>{let X=[];try{const S=K(X,await F(),0);await S.put("scan:a",L("1"));await S.put("scan:b",L("2"));let W=S.scan("scan:")[Symbol.asyncIterator]();let Y=await W.next();V(Y.done).toBe(!1);await S.put("scan:c",L("3"));let U=[];if(!Y.done)U.push(Y.value[0]);for(let B=await W.next();!B.done;B=await W.next())U.push(B.value[0]);V(U).not.toContain("scan:c");V(U).toContain("scan:a");V(U).toContain("scan:b")}catch(G){var M=G,T=1}finally{O(X,M,T)}});if(R.conditionalBatch)J("applies nothing when a conditionalBatch precondition mismatches",async()=>{let Y=[];try{const S=K(Y,await F(),0);await S.put("cas:key",L("initial"));let W=await z(S,[{key:"cas:key",expectedValue:L("wrong")}],[{type:"put",key:"cas:key",value:L("changed")}]);V(W).toBe(!1);V(D(await S.get("cas:key"))).toBe("initial")}catch(U){var X=U,G=1}finally{O(Y,X,G)}}),J("reports conditionalBatch before running compare-and-swap assertions",async()=>{let W=[];try{const S=K(W,await F(),0);V(S.capabilities().conditionalBatch).toBe(!0)}catch(Y){var U=Y,X=1}finally{O(W,U,X)}})})}function BE(E,_){let{create:F}=_;H(`${E} concurrent conditionalBatch conformance`,()=>{J("lets exactly one of two contending conditionalBatch calls win",async()=>{let X=[];try{const R=K(X,await F(),0);V(R.capabilities().conditionalBatch).toBe(!0);await R.put("cas:counter",L("start"));let S=[{key:"cas:counter",expectedValue:L("start")}];let[W,Y]=await Promise.all([z(R,S,[{type:"put",key:"cas:counter",value:L("first")}]),z(R,S,[{type:"put",key:"cas:counter",value:L("second")}])]);V([W,Y].filter(Boolean)).toHaveLength(1);let U=D(await R.get("cas:counter"));V(U).toBe(W?"first":"second")}catch(G){var M=G,T=1}finally{O(X,M,T)}})})}function NE(E,_){let{create:F}=_;H(`${E} basic storage contract`,()=>{J("get on empty storage returns null",async()=>{let W=[];try{const R=K(W,await F(),0);let S=await R.get("nonexistent");V(S).toBeNull()}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("put then get returns same bytes",async()=>{let Y=[];try{const R=K(Y,await F(),0);let S=L("hello");await R.put("key",S);let W=await R.get("key");V(W).toEqual(S)}catch(U){var X=U,G=1}finally{O(Y,X,G)}}),J("put with same key overwrites previous value",async()=>{let W=[];try{const R=K(W,await F(),0);await R.put("key",L("first"));await R.put("key",L("second"));let S=await R.get("key");V(D(S)).toBe("second")}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("delete removes key, subsequent get returns null",async()=>{let W=[];try{const R=K(W,await F(),0);await R.put("key",L("value"));await R.delete("key");let S=await R.get("key");V(S).toBeNull()}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with prefix returns only matching keys, sorted lexicographically",async()=>{let W=[];try{const R=K(W,await F(),0);await R.put("wf:b",L("b"));await R.put("wf:a",L("a"));await R.put("wf:c",L("c"));await R.put("other:x",L("x"));let S=await Z(R.scan("wf:"));V(S.map(([G])=>G)).toEqual(["wf:a","wf:b","wf:c"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with limit returns at most N entries",async()=>{let W=[];try{const R=K(W,await F(),0);await R.put("p:a",L("a"));await R.put("p:b",L("b"));await R.put("p:c",L("c"));let S=await Z(R.scan("p:",{limit:2}));V(S).toHaveLength(2);V(S.map(([G])=>G)).toEqual(["p:a","p:b"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with reverse returns in reverse order",async()=>{let W=[];try{const R=K(W,await F(),0);await R.put("p:a",L("a"));await R.put("p:b",L("b"));await R.put("p:c",L("c"));let S=await Z(R.scan("p:",{reverse:!0}));V(S.map(([G])=>G)).toEqual(["p:c","p:b","p:a"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with gt/lt bounds",async()=>{let W=[];try{const R=K(W,await F(),0);await R.put("p:a",L("a"));await R.put("p:b",L("b"));await R.put("p:c",L("c"));await R.put("p:d",L("d"));let S=await Z(R.scan("p:",{gt:"p:a",lt:"p:d"}));V(S.map(([G])=>G)).toEqual(["p:b","p:c"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with empty prefix returns all keys",async()=>{let W=[];try{const R=K(W,await F(),0);await R.put("alpha",L("a"));await R.put("beta",L("b"));await R.put("gamma",L("c"));let S=await Z(R.scan(""));V(S.map(([G])=>G)).toEqual(["alpha","beta","gamma"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}})})}export{TE as runStorageCapabilityConformance,BE as runConcurrentConditionalBatchConformance,ME as runBinaryAndLargeScanStorageConformance,NE as runBasicStorageContract};
2
+ var p=import.meta.require,K=(E,_,F)=>{if(_!=null){if(typeof _!=="object"&&typeof _!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let R;if(F)R=_[Symbol.asyncDispose];if(R===void 0)R=_[Symbol.dispose];if(typeof R!=="function")throw TypeError("Object not disposable");E.push([F,R,_])}else if(F)E.push([F]);return _},O=(E,_,F)=>{let R=(W)=>_=F?new SuppressedError(W,_,"An error was suppressed during disposal"):(F=!0,W),S=(W)=>{while(W=E.pop())try{var Y=W[1]&&W[1].call(W[2]);if(W[0])return Promise.resolve(Y).then(S,(U)=>(R(U),S()))}catch(U){R(U)}if(F)throw _};return S()};function B(E,_,F){if(!E.capabilities()[_])throw Error(`Feature "${F}" requires storage capability "${_}", but this storage backend does not provide it.`)}function b(E){let _=E.capabilities(),F=[];if(_.persistence!=="local"&&_.persistence!=="remote")F.push(`persistence must be "local" or "remote" (got "${_.persistence}")`);if(_.readAfterWrite!=="linearizable")F.push(`readAfterWrite must be "linearizable" (got "${_.readAfterWrite}")`);if(_.scanConsistency!=="snapshot")F.push(`scanConsistency must be "snapshot" (got "${_.scanConsistency}")`);if(!_.atomicBatch)F.push("atomicBatch must be true");if(!_.conditionalBatch)F.push("conditionalBatch must be true");if(F.length>0)throw Error(`Storage is not durable enough for recovery: ${F.join("; ")}.`)}var N="default";async function A(E,_){return await E.get(_)!==null}async function*$(E,_,F){for await(let[R]of E.scan(_,F))yield R}async function h(E,_){let F=0;for await(let R of $(E,_))F++;return F}async function v(E,_){let F=[];for await(let R of $(E,_))F.push({type:"delete",key:R});if(F.length===0)return 0;return await E.batch(F),F.length}async function w(E,_,F){let R=[];for await(let S of $(E,_,F))R.push({type:"delete",key:S});if(R.length===0)return 0;return await E.batch(R),R.length}var x=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","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-terminal:"];var q=1e4,t=1e4;class u extends Error{code="StorageBatchOperationLimitExceededError";cap=q;count;target;constructor(E,_){super(`${E} count ${_} exceeds MAX_BATCH_OPERATIONS (${q}).`);this.name="StorageBatchOperationLimitExceededError",this.target=E,this.count=_}}function C(E,_){if(_>q)throw new u(E,_)}function o(E){return E.length>0?E.slice(0,-1)+String.fromCharCode(E.charCodeAt(E.length-1)+1):"\xFF"}function e(E,_={}){if(_.gt!==void 0&&E<=_.gt)return!1;if(_.gte!==void 0&&E<_.gte)return!1;if(_.lt!==void 0&&E>=_.lt)return!1;if(_.lte!==void 0&&E>_.lte)return!1;return!0}function EE(E,_){if(E===null||_===null)return E===_;if(E.byteLength!==_.byteLength)return!1;for(let F=0;F<E.byteLength;F++)if(E[F]!==_[F])return!1;return!0}async function _E(E,_){if(E.has)return E.has(_);return A(E,_)}function FE(E,_,F){if(E.keys)return E.keys(_,F);return $(E,_,F)}async function PE(E,_){if(E.count)return E.count(_);return h(E,_)}async function RE(E,_){if(E.deletePrefix)return E.deletePrefix(_);return v(E,_)}async function WE(E,_){C("batch operations",_.length),await E.batch(_)}async function j(E,_,F){if(C("conditionalBatch conditions",_.length),C("conditionalBatch operations",F.length),B(E,"conditionalBatch","storageConditionalBatch"),!E.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return E.conditionalBatch(_,F)}function P(E){return encodeURIComponent(E)}function SE(E){return decodeURIComponent(E)}function YE(E){try{return decodeURIComponent(E)}catch{return null}}var Q=(E)=>String(E).padStart(16,"0"),y="0",c="1",m=(E,_,F,R)=>`sig:${P(E)}:${P(_)}:${R}:${P(F)}`,UE={workflow:(E)=>`wf:${P(E)}`,checkpoint:(E)=>`wf:${P(E)}:ckpt`,checkpointHistory:(E,_)=>`wf:${P(E)}:ckpt:${String(_).padStart(10,"0")}`,timelinePrefix:(E)=>`wf:${P(E)}:timeline:`,timeline:(E,_)=>`wf:${P(E)}:timeline:${String(_).padStart(10,"0")}`,schedule:(E)=>`schedule:${P(E)}`,scheduleTick:(E,_)=>`schedule-due:${String(E).padStart(16,"0")}:${P(_)}`,scheduleRun:(E)=>`schedule-run:${P(E)}`,operation:(E,_,F)=>`op:${E}:${Q(_)}:${F}`,operationInflight:(E)=>`op:inflight:${E}`,operationQueued:(E)=>`op:queued:${E}`,operationResolved:(E)=>`op:resolved:${E}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(E)=>`op:dead-letter:${E}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(E,_,F)=>`audit:bulk:${Q(E)}:${P(_)}:${P(F)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(E,_)=>`op:resolved-by-time:${Q(E)}:${P(_)}`,asyncActivity:(E,_)=>`async-act:v1:${P(E)}:${P(_)}`,asyncActivityResolution:(E,_)=>`async-act:v1:${P(E)}:${P(_)}:resolution`,activityReconciliationPrefix:(E)=>`actrec:v1:${P(E)}:`,activityReconciliation:(E,_,F)=>`actrec:v1:${P(E)}:${P(_)}:${F}`,eventPrefix:(E)=>`ev:${P(E)}:`,event:(E,_)=>`ev:${P(E)}:${String(_).padStart(10,"0")}`,eventHead:(E)=>`ev:${P(E)}:head`,eventWatermark:(E)=>`ev:${P(E)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(E)=>`fleet-event:${String(E).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(E)=>`fleet-event-by-workflow:${P(E)}:`,fleetEventByWorkflow:(E,_)=>`fleet-event-by-workflow:${P(E)}:${String(_).padStart(10,"0")}`,signal:(E,_,F)=>m(E,_,F,c),startSignal:(E,_,F)=>m(E,_,F,y),signalSequence:(E)=>`sigseq:v1:${P(E)}`,signalAcceptedResponsePrefix:(E)=>`sigres:v1:${P(E)}:`,signalAcceptedResponse:(E,_,F)=>`sigres:v1:${P(E)}:${P(_)}:${P(F)}`,deadline:(E,_)=>`wf-deadline:${Q(E)}:${P(_)}`,terminalCleanup:(E,_)=>`wf-cleanup:${Q(E)}:${P(_)}`,teardownTimer:(E,_)=>`wf-teardown:${Q(E)}:${P(_)}`,delayedStart:(E,_)=>`wf-delayed:${Q(E)}:${P(_)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(E,_)=>`wf-terminal:${Q(E)}:${P(_)}`,attribute:(E)=>`attr:${P(E)}`,attributeIndex:(E,_,F)=>`idx:${E}:${_}:${P(F)}`,tagIndex:(E,_)=>`tag:${P(E)}:${P(_)}`,updatePrefix:(E)=>`upd:${P(E)}:`,update:(E,_)=>`upd:${P(E)}:${_}`,updateResponse:(E)=>`upr:${E}`,updateIdempotency:(E,_)=>`upk:${P(E)}:${_}`,startIdempotency:(E)=>`start-idem:${P(E)}`,startIdempotencySignalId:(E)=>`start-idem:${E}`,livenessPrefix:()=>"liveness:",liveness:(E)=>`liveness:${P(E)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(E,_,F)=>`budget:${E}:${_}:${F}`,review:(E,_)=>`review:${P(E)}:${_}`,workflowHeaders:(E)=>`wf-headers:${P(E)}`,childCancellationPrefix:(E)=>`child-cancel:${P(E)}:`,childCancellation:(E,_)=>`child-cancel:${P(E)}:${P(_)}`,terminalCleanupNeeded:(E)=>`wf-cleanup-needed:${P(E)}`,workflowConcurrency:(E,_)=>`wf-concurrency:${P(E)}:${P(_)}`,workflowConcurrencyHolder:(E)=>`wf-concurrency-holder:${P(E)}`,workflowHasServices:(E)=>`wf-has-services:${P(E)}`,finalizerState:(E)=>`wf-finalizer-state:${P(E)}`,teardownOwed:(E)=>`wf-teardown-needed:${P(E)}`,teardownDeadLetter:(E)=>`wf-teardown-deadletter:${P(E)}`,offload:(E,_)=>`offload:${P(E)}:${_}`,archive:(E,_)=>`archive:${P(E)}:${_}`,stateExecution:(E,_)=>`state:execution:${P(E)}:${P(_)}`,stateWorkflow:(E,_)=>`state:workflow-scope:${N}:${P(E)}:${P(_)}`,streamChunkPrefix:(E,_)=>`blob:${P(E)}:${_}:chunk:`,streamChunk:(E,_,F)=>`blob:${P(E)}:${_}:chunk:${String(F).padStart(10,"0")}`,streamTail:(E,_)=>`blob:${P(E)}:${_}:tail`,streamMetadata:(E,_)=>`blob:${P(E)}:${_}:meta`,budgetCharged:(E)=>`budget-charged:${E}`,toolEffect:(E,_,F)=>`tool-effect:${P(E)}:${_}:${F}`,workflowVisibilityStatus:(E,_)=>`wf-idx-status:${P(E)}:${P(_)}`,workflowVisibilityType:(E,_)=>`wf-idx-type:${P(E)}:${P(_)}`,workflowVisibilityCreated:(E,_)=>`wf-idx-created:${Q(E)}:${P(_)}`,workflowVisibilityUpdated:(E,_)=>`wf-idx-updated:${Q(E)}:${P(_)}`,workflowVisibilityDeadline:(E,_)=>`wf-idx-deadline:${Q(E)}:${P(_)}`,workflowVisibilityManifest:(E)=>`wf-idx-manifest:${P(E)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};import{describe as D,expect as V,it as J}from"bun:test";var I=new TextEncoder,f=new TextDecoder;function L(E){return I.encode(E)}function z(E){return f.decode(E)}async function Z(E){let _=[];for await(let F of E)_.push(F);return _}function g(E){let _=E.capabilities();V(["ephemeral","local","remote"]).toContain(_.persistence??""),V(["linearizable","session","eventual"]).toContain(_.readAfterWrite),V(["snapshot","best-effort"]).toContain(_.scanConsistency),V(typeof _.atomicBatch).toBe("boolean"),V(typeof _.conditionalBatch).toBe("boolean"),V(typeof _.boundedRangeDelete).toBe("boolean")}function OE(E,_){D(`${E} binary and large-scan conformance`,()=>{J("round-trips binary values correctly",async()=>{let F=await _.create();try{let R=new Uint8Array([0,1,127,128,255,42,0,13,10]);await F.put("binary",R);let S=await F.get("binary");V(S).toEqual(R)}finally{F[Symbol.dispose]()}}),J("returns 1000 scanned keys in sorted order",async()=>{let F=await _.create();try{let R=Array.from({length:1000},(W,Y)=>({type:"put",key:`item:${String(Y).padStart(4,"0")}`,value:L(String(Y))}));await F.batch(R);let S=await Z(F.scan("item:"));V(S).toHaveLength(1000);for(let W=0;W<S.length;W+=1)V(S[W][0]).toBe(`item:${String(W).padStart(4,"0")}`)}finally{F[Symbol.dispose]()}})})}function QE(E,_){let{create:F,expected:R}=_;D(`${E} capabilities() conformance`,()=>{if(J("reports a well-formed capability shape",async()=>{let W=[];try{const S=K(W,await F(),0);g(S)}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("reports the expected capability row",async()=>{let W=[];try{const S=K(W,await F(),0);V(S.capabilities()).toEqual(R)}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("satisfies its declared read-after-write level",async()=>{let Y=[];try{const S=K(Y,await F(),0);await S.put("raw:key",L("written"));let W=await S.get("raw:key");if(R.readAfterWrite!=="eventual")V(W).not.toBeNull(),V(z(W)).toBe("written")}catch(U){var X=U,G=1}finally{O(Y,X,G)}}),R.scanConsistency==="snapshot")J("does not observe a key inserted after the scan began (snapshot)",async()=>{let X=[];try{const S=K(X,await F(),0);await S.put("scan:a",L("1"));await S.put("scan:b",L("2"));let W=S.scan("scan:")[Symbol.asyncIterator]();let Y=await W.next();V(Y.done).toBe(!1);await S.put("scan:c",L("3"));let U=[];if(!Y.done)U.push(Y.value[0]);for(let T=await W.next();!T.done;T=await W.next())U.push(T.value[0]);V(U).not.toContain("scan:c");V(U).toContain("scan:a");V(U).toContain("scan:b")}catch(G){var H=G,M=1}finally{O(X,H,M)}});if(R.conditionalBatch)J("applies nothing when a conditionalBatch precondition mismatches",async()=>{let Y=[];try{const S=K(Y,await F(),0);await S.put("cas:key",L("initial"));let W=await j(S,[{key:"cas:key",expectedValue:L("wrong")}],[{type:"put",key:"cas:key",value:L("changed")}]);V(W).toBe(!1);V(z(await S.get("cas:key"))).toBe("initial")}catch(U){var X=U,G=1}finally{O(Y,X,G)}}),J("reports conditionalBatch before running compare-and-swap assertions",async()=>{let W=[];try{const S=K(W,await F(),0);V(S.capabilities().conditionalBatch).toBe(!0)}catch(Y){var U=Y,X=1}finally{O(W,U,X)}})})}function ZE(E,_){let{create:F}=_;D(`${E} concurrent conditionalBatch conformance`,()=>{J("lets exactly one of two contending conditionalBatch calls win",async()=>{let X=[];try{const R=K(X,await F(),0);V(R.capabilities().conditionalBatch).toBe(!0);await R.put("cas:counter",L("start"));let S=[{key:"cas:counter",expectedValue:L("start")}];let[W,Y]=await Promise.all([j(R,S,[{type:"put",key:"cas:counter",value:L("first")}]),j(R,S,[{type:"put",key:"cas:counter",value:L("second")}])]);V([W,Y].filter(Boolean)).toHaveLength(1);let U=z(await R.get("cas:counter"));V(U).toBe(W?"first":"second")}catch(G){var H=G,M=1}finally{O(X,H,M)}})})}function $E(E,_){let{create:F}=_;D(`${E} basic storage contract`,()=>{J("get on empty storage returns null",async()=>{let W=[];try{const R=K(W,await F(),0);let S=await R.get("nonexistent");V(S).toBeNull()}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("put then get returns same bytes",async()=>{let Y=[];try{const R=K(Y,await F(),0);let S=L("hello");await R.put("key",S);let W=await R.get("key");V(W).toEqual(S)}catch(U){var X=U,G=1}finally{O(Y,X,G)}}),J("put with same key overwrites previous value",async()=>{let W=[];try{const R=K(W,await F(),0);await R.put("key",L("first"));await R.put("key",L("second"));let S=await R.get("key");V(z(S)).toBe("second")}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("delete removes key, subsequent get returns null",async()=>{let W=[];try{const R=K(W,await F(),0);await R.put("key",L("value"));await R.delete("key");let S=await R.get("key");V(S).toBeNull()}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with prefix returns only matching keys, sorted lexicographically",async()=>{let W=[];try{const R=K(W,await F(),0);await R.put("wf:b",L("b"));await R.put("wf:a",L("a"));await R.put("wf:c",L("c"));await R.put("other:x",L("x"));let S=await Z(R.scan("wf:"));V(S.map(([G])=>G)).toEqual(["wf:a","wf:b","wf:c"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with limit returns at most N entries",async()=>{let W=[];try{const R=K(W,await F(),0);await R.put("p:a",L("a"));await R.put("p:b",L("b"));await R.put("p:c",L("c"));let S=await Z(R.scan("p:",{limit:2}));V(S).toHaveLength(2);V(S.map(([G])=>G)).toEqual(["p:a","p:b"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with reverse returns in reverse order",async()=>{let W=[];try{const R=K(W,await F(),0);await R.put("p:a",L("a"));await R.put("p:b",L("b"));await R.put("p:c",L("c"));let S=await Z(R.scan("p:",{reverse:!0}));V(S.map(([G])=>G)).toEqual(["p:c","p:b","p:a"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with gt/lt bounds",async()=>{let W=[];try{const R=K(W,await F(),0);await R.put("p:a",L("a"));await R.put("p:b",L("b"));await R.put("p:c",L("c"));await R.put("p:d",L("d"));let S=await Z(R.scan("p:",{gt:"p:a",lt:"p:d"}));V(S.map(([G])=>G)).toEqual(["p:b","p:c"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}}),J("scan with empty prefix returns all keys",async()=>{let W=[];try{const R=K(W,await F(),0);await R.put("alpha",L("a"));await R.put("beta",L("b"));await R.put("gamma",L("c"));let S=await Z(R.scan(""));V(S.map(([G])=>G)).toEqual(["alpha","beta","gamma"])}catch(Y){var U=Y,X=1}finally{O(W,U,X)}})})}export{QE as runStorageCapabilityConformance,ZE as runConcurrentConditionalBatchConformance,OE as runBinaryAndLargeScanStorageConformance,$E as runBasicStorageContract};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- var GF=Object.defineProperty;var jF=(F)=>F;function HF(F,W){this[F]=jF.bind(null,W)}var EF=(F,W)=>{for(var X in W)GF(F,X,{get:W[X],enumerable:!0,configurable:!0,set:HF.bind(W,X)})};var D=(F,W)=>()=>(F&&(W=F(F=0)),W);var SF=import.meta.require,TF=(F,W,X)=>{if(W!=null){if(typeof W!=="object"&&typeof W!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let Z;if(X)Z=W[Symbol.asyncDispose];if(Z===void 0)Z=W[Symbol.dispose];if(typeof Z!=="function")throw TypeError("Object not disposable");F.push([X,Z,W])}else if(X)F.push([X]);return W},bF=(F,W,X)=>{let Z=(G)=>W=X?new SuppressedError(G,W,"An error was suppressed during disposal"):(X=!0,G),$=(G)=>{while(G=F.pop())try{var H=G[1]&&G[1].call(G[2]);if(G[0])return Promise.resolve(H).then($,(j)=>(Z(j),$()))}catch(j){Z(j)}if(X)throw W};return $()};function v(F,W,X){if(!F.capabilities()[W])throw Error(`Feature "${X}" requires storage capability "${W}", but this storage backend does not provide it.`)}function MF(F){let W=F.capabilities(),X=[];if(W.persistence!=="local"&&W.persistence!=="remote")X.push(`persistence must be "local" or "remote" (got "${W.persistence}")`);if(W.readAfterWrite!=="linearizable")X.push(`readAfterWrite must be "linearizable" (got "${W.readAfterWrite}")`);if(W.scanConsistency!=="snapshot")X.push(`scanConsistency must be "snapshot" (got "${W.scanConsistency}")`);if(!W.atomicBatch)X.push("atomicBatch must be true");if(!W.conditionalBatch)X.push("conditionalBatch must be true");if(X.length>0)throw Error(`Storage is not durable enough for recovery: ${X.join("; ")}.`)}var h="default";async function q(F,W){return await F.get(W)!==null}async function*N(F,W,X){for await(let[Z]of F.scan(W,X))yield Z}async function K(F,W){let X=0;for await(let Z of N(F,W))X++;return X}async function E(F,W){let X=[];for await(let Z of N(F,W))X.push({type:"delete",key:Z});if(X.length===0)return 0;return await F.batch(X),X.length}async function S(F,W,X){let Z=[];for await(let $ of N(F,W,X))Z.push({type:"delete",key:$});if(Z.length===0)return 0;return await F.batch(Z),Z.length}var UF;var T=D(()=>{UF=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","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-terminal:"]});function U(F,W){if(W>_)throw new m(F,W)}function c(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"\xFF"}function fF(F,W={}){if(W.gt!==void 0&&F<=W.gt)return!1;if(W.gte!==void 0&&F<W.gte)return!1;if(W.lt!==void 0&&F>=W.lt)return!1;if(W.lte!==void 0&&F>W.lte)return!1;return!0}function x(F,W){if(F===null||W===null)return F===W;if(F.byteLength!==W.byteLength)return!1;for(let X=0;X<F.byteLength;X++)if(F[X]!==W[X])return!1;return!0}async function u(F,W){if(F.has)return F.has(W);return q(F,W)}function y(F,W,X){if(F.keys)return F.keys(W,X);return N(F,W,X)}async function g(F,W){if(F.count)return F.count(W);return K(F,W)}async function I(F,W){if(F.deletePrefix)return F.deletePrefix(W);return E(F,W)}async function dF(F,W){U("batch operations",W.length),await F.batch(W)}async function k(F,W,X){if(U("conditionalBatch conditions",W.length),U("conditionalBatch operations",X.length),v(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(W,X)}function J(F){return encodeURIComponent(F)}function lF(F){return decodeURIComponent(F)}function pF(F){try{return decodeURIComponent(F)}catch{return null}}var _=1e4,wF=1e4,m,M=(F)=>String(F).padStart(16,"0"),DF="0",QF="1",b=(F,W,X,Z)=>`sig:${J(F)}:${J(W)}:${Z}:${J(X)}`,aF;var R=D(()=>{T();m=class m extends Error{code="StorageBatchOperationLimitExceededError";cap=_;count;target;constructor(F,W){super(`${F} count ${W} exceeds MAX_BATCH_OPERATIONS (${_}).`);this.name="StorageBatchOperationLimitExceededError",this.target=F,this.count=W}};aF={workflow:(F)=>`wf:${J(F)}`,checkpoint:(F)=>`wf:${J(F)}:ckpt`,checkpointHistory:(F,W)=>`wf:${J(F)}:ckpt:${String(W).padStart(10,"0")}`,timelinePrefix:(F)=>`wf:${J(F)}:timeline:`,timeline:(F,W)=>`wf:${J(F)}:timeline:${String(W).padStart(10,"0")}`,schedule:(F)=>`schedule:${J(F)}`,scheduleTick:(F,W)=>`schedule-due:${String(F).padStart(16,"0")}:${J(W)}`,scheduleRun:(F)=>`schedule-run:${J(F)}`,operation:(F,W,X)=>`op:${F}:${M(W)}:${X}`,operationInflight:(F)=>`op:inflight:${F}`,operationQueued:(F)=>`op:queued:${F}`,operationResolved:(F)=>`op:resolved:${F}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(F)=>`op:dead-letter:${F}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(F,W,X)=>`audit:bulk:${M(F)}:${J(W)}:${J(X)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,W)=>`op:resolved-by-time:${M(F)}:${J(W)}`,asyncActivity:(F,W)=>`async-act:v1:${J(F)}:${J(W)}`,asyncActivityResolution:(F,W)=>`async-act:v1:${J(F)}:${J(W)}:resolution`,activityReconciliationPrefix:(F)=>`actrec:v1:${J(F)}:`,activityReconciliation:(F,W,X)=>`actrec:v1:${J(F)}:${J(W)}:${X}`,eventPrefix:(F)=>`ev:${J(F)}:`,event:(F,W)=>`ev:${J(F)}:${String(W).padStart(10,"0")}`,eventHead:(F)=>`ev:${J(F)}:head`,eventWatermark:(F)=>`ev:${J(F)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(F)=>`fleet-event:${String(F).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(F)=>`fleet-event-by-workflow:${J(F)}:`,fleetEventByWorkflow:(F,W)=>`fleet-event-by-workflow:${J(F)}:${String(W).padStart(10,"0")}`,signal:(F,W,X)=>b(F,W,X,QF),startSignal:(F,W,X)=>b(F,W,X,DF),signalSequence:(F)=>`sigseq:v1:${J(F)}`,signalAcceptedResponsePrefix:(F)=>`sigres:v1:${J(F)}:`,signalAcceptedResponse:(F,W,X)=>`sigres:v1:${J(F)}:${J(W)}:${J(X)}`,deadline:(F,W)=>`wf-deadline:${M(F)}:${J(W)}`,terminalCleanup:(F,W)=>`wf-cleanup:${M(F)}:${J(W)}`,teardownTimer:(F,W)=>`wf-teardown:${M(F)}:${J(W)}`,delayedStart:(F,W)=>`wf-delayed:${M(F)}:${J(W)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,W)=>`wf-terminal:${M(F)}:${J(W)}`,attribute:(F)=>`attr:${J(F)}`,attributeIndex:(F,W,X)=>`idx:${F}:${W}:${J(X)}`,tagIndex:(F,W)=>`tag:${J(F)}:${J(W)}`,updatePrefix:(F)=>`upd:${J(F)}:`,update:(F,W)=>`upd:${J(F)}:${W}`,updateResponse:(F)=>`upr:${F}`,updateIdempotency:(F,W)=>`upk:${J(F)}:${W}`,startIdempotency:(F)=>`start-idem:${J(F)}`,startIdempotencySignalId:(F)=>`start-idem:${F}`,livenessPrefix:()=>"liveness:",liveness:(F)=>`liveness:${J(F)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(F,W,X)=>`budget:${F}:${W}:${X}`,review:(F,W)=>`review:${J(F)}:${W}`,workflowHeaders:(F)=>`wf-headers:${J(F)}`,childCancellationPrefix:(F)=>`child-cancel:${J(F)}:`,childCancellation:(F,W)=>`child-cancel:${J(F)}:${J(W)}`,terminalCleanupNeeded:(F)=>`wf-cleanup-needed:${J(F)}`,workflowConcurrency:(F,W)=>`wf-concurrency:${J(F)}:${J(W)}`,workflowConcurrencyHolder:(F)=>`wf-concurrency-holder:${J(F)}`,workflowHasServices:(F)=>`wf-has-services:${J(F)}`,finalizerState:(F)=>`wf-finalizer-state:${J(F)}`,teardownOwed:(F)=>`wf-teardown-needed:${J(F)}`,teardownDeadLetter:(F)=>`wf-teardown-deadletter:${J(F)}`,offload:(F,W)=>`offload:${J(F)}:${W}`,archive:(F,W)=>`archive:${J(F)}:${W}`,stateExecution:(F,W)=>`state:execution:${J(F)}:${J(W)}`,stateWorkflow:(F,W)=>`state:workflow-scope:${h}:${J(F)}:${J(W)}`,streamChunkPrefix:(F,W)=>`blob:${J(F)}:${W}:chunk:`,streamChunk:(F,W,X)=>`blob:${J(F)}:${W}:chunk:${String(X).padStart(10,"0")}`,streamTail:(F,W)=>`blob:${J(F)}:${W}:tail`,streamMetadata:(F,W)=>`blob:${J(F)}:${W}:meta`,budgetCharged:(F)=>`budget-charged:${F}`,toolEffect:(F,W,X)=>`tool-effect:${J(F)}:${W}:${X}`,workflowVisibilityStatus:(F,W)=>`wf-idx-status:${J(F)}:${J(W)}`,workflowVisibilityType:(F,W)=>`wf-idx-type:${J(F)}:${J(W)}`,workflowVisibilityCreated:(F,W)=>`wf-idx-created:${M(F)}:${J(W)}`,workflowVisibilityUpdated:(F,W)=>`wf-idx-updated:${M(F)}:${J(W)}`,workflowVisibilityDeadline:(F,W)=>`wf-idx-deadline:${M(F)}:${J(W)}`,workflowVisibilityManifest:(F)=>`wf-idx-manifest:${J(F)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});function NF(F){if(F===void 0)return;if(typeof F!=="number"||!Number.isInteger(F)||F<0)throw Error("deleteRange limit must be a finite non-negative integer");return F===0?0:F}function V(F){let W={},X=!1;for(let $ of["gt","gte","lt","lte"]){let G=F[$];if(G===void 0)continue;if(typeof G!=="string")throw Error("deleteRange bounds must be strings");W[$]=G,X=!0}if(!X)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Z=NF(F.limit);if(Z!==void 0)W.limit=Z;return W}async function w(F,W,X){let Z=V(X);if(F.deleteRange)return F.deleteRange(W,Z);return S(F,W,Z)}var z=()=>{};function P(F){return F.replaceAll(/:+$/g,"")}function VF(F,W){let X=P(F),Z=P(W);if(X.length===0)return Z;if(Z.length===0)return X;return`${X}:${Z}`}function f(F,W){return new A(F,W)}var A;var d=D(()=>{z();R();A=class A{#F;#J;constructor(F,W){this.#F=F,this.#J=P(W)}#W(F){if(this.#J.length===0)return F;return F.length===0?`${this.#J}:`:`${this.#J}:${F}`}#X(F){if(this.#J.length===0)return F;return F.slice(this.#J.length+1)}#Z(F={}){let W={};if(F.limit!==void 0)W.limit=F.limit;if(F.reverse!==void 0)W.reverse=F.reverse;if(F.gt!==void 0)W.gt=this.#W(F.gt);if(F.gte!==void 0)W.gte=this.#W(F.gte);if(F.lt!==void 0)W.lt=this.#W(F.lt);if(F.lte!==void 0)W.lte=this.#W(F.lte);return W}#$(F){let W={};if(F.limit!==void 0)W.limit=F.limit;if(F.gt!==void 0)W.gt=this.#W(F.gt);if(F.gte!==void 0)W.gte=this.#W(F.gte);if(F.lt!==void 0)W.lt=this.#W(F.lt);if(F.lte!==void 0)W.lte=this.#W(F.lte);return W}capabilities(){return this.#F.capabilities()}scoped(F){return new A(this.#F,VF(this.#J,F))}async get(F){return this.#F.get(this.#W(F))}async put(F,W){await this.#F.put(this.#W(F),W)}async delete(F){await this.#F.delete(this.#W(F))}async*scan(F,W){for await(let[X,Z]of this.#F.scan(this.#W(F),this.#Z(W)))yield[this.#X(X),Z]}async batch(F){U("batch operations",F.length),await this.#F.batch(F.map((W)=>{if(W.type==="put")return{type:"put",key:this.#W(W.key),value:W.value};return{type:"delete",key:this.#W(W.key)}}))}async conditionalBatch(F,W){return k(this.#F,F.map((X)=>({key:this.#W(X.key),expectedValue:X.expectedValue})),W.map((X)=>{if(X.type==="put")return{type:"put",key:this.#W(X.key),value:X.value};return{type:"delete",key:this.#W(X.key)}}))}async has(F){return u(this.#F,this.#W(F))}async deletePrefix(F){return I(this.#F,this.#W(F))}async deleteRange(F,W){let X=this.#$(V(W));return w(this.#F,this.#W(F),X)}async*keys(F,W){for await(let X of y(this.#F,this.#W(F),this.#Z(W)))yield this.#X(X)}async count(F){return g(this.#F,this.#W(F))}[Symbol.dispose](){this.#F[Symbol.dispose]()}}});function CF(F){return F.trim().replace(/;+\s*$/u,"").trim()}function OF(F){return RF.test(F)}function l(F){let W=CF(F);if(W.length===0)throw Error("Storage query must not be empty.");if(W.includes(";"))throw Error("Storage query must contain exactly one read-only statement.");if(BF.test(W))return;if(YF.test(W)&&OF(W))return;throw Error("Storage query only supports read-only SELECT and PRAGMA statements.")}var YF,RF,BF;var p=D(()=>{YF=/^PRAGMA\b/iu,RF=/^PRAGMA\s+(?:[A-Z_][A-Z0-9_]*\.)?[A-Z_][A-Z0-9_]*\s*$/iu,BF=/^SELECT\b/iu});function O(F){return[F,c(F)]}function i(F,W){let{gt:X,gte:Z,lt:$,lte:G}=W,H=["key >= ? AND key < ?"],j=O(F);if(X!==void 0)H.push("key > ?"),j.push(X);if(Z!==void 0)H.push("key >= ?"),j.push(Z);if($!==void 0)H.push("key < ?"),j.push($);if(G!==void 0)H.push("key <= ?"),j.push(G);return{conditions:H,parameters:j}}function t(F,W={}){let{limit:X,reverse:Z}=W,{conditions:$,parameters:G}=i(F,W),H=Z?"DESC":"ASC",j=X!==void 0?" LIMIT ?":"";if(X!==void 0)G.push(X);return{parameters:G,sqlSuffix:`WHERE ${$.join(" AND ")} ORDER BY key ${H}${j}`}}function e(F,W){let{conditions:X,parameters:Z}=i(F,W),$=X.join(" AND ");if(W.limit===void 0)return{parameters:Z,sql:`DELETE FROM kv WHERE ${$}`};return Z.push(W.limit),{parameters:Z,sql:`DELETE FROM kv WHERE key IN (SELECT key FROM kv WHERE ${$} ORDER BY key ASC LIMIT ?)`}}function o(F,W={}){let{parameters:X,sqlSuffix:Z}=t(F,W);return{parameters:X,sql:`SELECT key, value FROM kv ${Z}`}}function FF(F,W={}){let{parameters:X,sqlSuffix:Z}=t(F,W);return{parameters:X,sql:`SELECT key FROM kv ${Z}`}}var a=`CREATE TABLE IF NOT EXISTS kv (
2
+ var CF=import.meta.require,OF=(F,W,X)=>{if(W!=null){if(typeof W!=="object"&&typeof W!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let Z;if(X)Z=W[Symbol.asyncDispose];if(Z===void 0)Z=W[Symbol.dispose];if(typeof Z!=="function")throw TypeError("Object not disposable");F.push([X,Z,W])}else if(X)F.push([X]);return W},vF=(F,W,X)=>{let Z=(G)=>W=X?new SuppressedError(G,W,"An error was suppressed during disposal"):(X=!0,G),$=(G)=>{while(G=F.pop())try{var H=G[1]&&G[1].call(G[2]);if(G[0])return Promise.resolve(H).then($,(j)=>(Z(j),$()))}catch(j){Z(j)}if(X)throw W};return $()};function B(F,W,X){if(!F.capabilities()[W])throw Error(`Feature "${X}" requires storage capability "${W}", but this storage backend does not provide it.`)}function e(F){let W=F.capabilities(),X=[];if(W.persistence!=="local"&&W.persistence!=="remote")X.push(`persistence must be "local" or "remote" (got "${W.persistence}")`);if(W.readAfterWrite!=="linearizable")X.push(`readAfterWrite must be "linearizable" (got "${W.readAfterWrite}")`);if(W.scanConsistency!=="snapshot")X.push(`scanConsistency must be "snapshot" (got "${W.scanConsistency}")`);if(!W.atomicBatch)X.push("atomicBatch must be true");if(!W.conditionalBatch)X.push("conditionalBatch must be true");if(X.length>0)throw Error(`Storage is not durable enough for recovery: ${X.join("; ")}.`)}var C="default";async function z(F,W){return await F.get(W)!==null}async function*D(F,W,X){for await(let[Z]of F.scan(W,X))yield Z}async function P(F,W){let X=0;for await(let Z of D(F,W))X++;return X}async function A(F,W){let X=[];for await(let Z of D(F,W))X.push({type:"delete",key:Z});if(X.length===0)return 0;return await F.batch(X),X.length}async function L(F,W,X){let Z=[];for await(let $ of D(F,W,X))Z.push({type:"delete",key:$});if(Z.length===0)return 0;return await F.batch(Z),Z.length}var o=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","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-terminal:"];var O=1e4,EF=1e4;class K extends Error{code="StorageBatchOperationLimitExceededError";cap=O;count;target;constructor(F,W){super(`${F} count ${W} exceeds MAX_BATCH_OPERATIONS (${O}).`);this.name="StorageBatchOperationLimitExceededError",this.target=F,this.count=W}}function U(F,W){if(W>O)throw new K(F,W)}function E(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"\xFF"}function SF(F,W={}){if(W.gt!==void 0&&F<=W.gt)return!1;if(W.gte!==void 0&&F<W.gte)return!1;if(W.lt!==void 0&&F>=W.lt)return!1;if(W.lte!==void 0&&F>W.lte)return!1;return!0}function S(F,W){if(F===null||W===null)return F===W;if(F.byteLength!==W.byteLength)return!1;for(let X=0;X<F.byteLength;X++)if(F[X]!==W[X])return!1;return!0}async function T(F,W){if(F.has)return F.has(W);return z(F,W)}function b(F,W,X){if(F.keys)return F.keys(W,X);return D(F,W,X)}async function m(F,W){if(F.count)return F.count(W);return P(F,W)}async function c(F,W){if(F.deletePrefix)return F.deletePrefix(W);return A(F,W)}async function TF(F,W){U("batch operations",W.length),await F.batch(W)}async function x(F,W,X){if(U("conditionalBatch conditions",W.length),U("conditionalBatch operations",X.length),B(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(W,X)}function J(F){return encodeURIComponent(F)}function bF(F){return decodeURIComponent(F)}function mF(F){try{return decodeURIComponent(F)}catch{return null}}var M=(F)=>String(F).padStart(16,"0"),FF="0",WF="1",q=(F,W,X,Z)=>`sig:${J(F)}:${J(W)}:${Z}:${J(X)}`,cF={workflow:(F)=>`wf:${J(F)}`,checkpoint:(F)=>`wf:${J(F)}:ckpt`,checkpointHistory:(F,W)=>`wf:${J(F)}:ckpt:${String(W).padStart(10,"0")}`,timelinePrefix:(F)=>`wf:${J(F)}:timeline:`,timeline:(F,W)=>`wf:${J(F)}:timeline:${String(W).padStart(10,"0")}`,schedule:(F)=>`schedule:${J(F)}`,scheduleTick:(F,W)=>`schedule-due:${String(F).padStart(16,"0")}:${J(W)}`,scheduleRun:(F)=>`schedule-run:${J(F)}`,operation:(F,W,X)=>`op:${F}:${M(W)}:${X}`,operationInflight:(F)=>`op:inflight:${F}`,operationQueued:(F)=>`op:queued:${F}`,operationResolved:(F)=>`op:resolved:${F}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(F)=>`op:dead-letter:${F}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(F,W,X)=>`audit:bulk:${M(F)}:${J(W)}:${J(X)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,W)=>`op:resolved-by-time:${M(F)}:${J(W)}`,asyncActivity:(F,W)=>`async-act:v1:${J(F)}:${J(W)}`,asyncActivityResolution:(F,W)=>`async-act:v1:${J(F)}:${J(W)}:resolution`,activityReconciliationPrefix:(F)=>`actrec:v1:${J(F)}:`,activityReconciliation:(F,W,X)=>`actrec:v1:${J(F)}:${J(W)}:${X}`,eventPrefix:(F)=>`ev:${J(F)}:`,event:(F,W)=>`ev:${J(F)}:${String(W).padStart(10,"0")}`,eventHead:(F)=>`ev:${J(F)}:head`,eventWatermark:(F)=>`ev:${J(F)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(F)=>`fleet-event:${String(F).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(F)=>`fleet-event-by-workflow:${J(F)}:`,fleetEventByWorkflow:(F,W)=>`fleet-event-by-workflow:${J(F)}:${String(W).padStart(10,"0")}`,signal:(F,W,X)=>q(F,W,X,WF),startSignal:(F,W,X)=>q(F,W,X,FF),signalSequence:(F)=>`sigseq:v1:${J(F)}`,signalAcceptedResponsePrefix:(F)=>`sigres:v1:${J(F)}:`,signalAcceptedResponse:(F,W,X)=>`sigres:v1:${J(F)}:${J(W)}:${J(X)}`,deadline:(F,W)=>`wf-deadline:${M(F)}:${J(W)}`,terminalCleanup:(F,W)=>`wf-cleanup:${M(F)}:${J(W)}`,teardownTimer:(F,W)=>`wf-teardown:${M(F)}:${J(W)}`,delayedStart:(F,W)=>`wf-delayed:${M(F)}:${J(W)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,W)=>`wf-terminal:${M(F)}:${J(W)}`,attribute:(F)=>`attr:${J(F)}`,attributeIndex:(F,W,X)=>`idx:${F}:${W}:${J(X)}`,tagIndex:(F,W)=>`tag:${J(F)}:${J(W)}`,updatePrefix:(F)=>`upd:${J(F)}:`,update:(F,W)=>`upd:${J(F)}:${W}`,updateResponse:(F)=>`upr:${F}`,updateIdempotency:(F,W)=>`upk:${J(F)}:${W}`,startIdempotency:(F)=>`start-idem:${J(F)}`,startIdempotencySignalId:(F)=>`start-idem:${F}`,livenessPrefix:()=>"liveness:",liveness:(F)=>`liveness:${J(F)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(F,W,X)=>`budget:${F}:${W}:${X}`,review:(F,W)=>`review:${J(F)}:${W}`,workflowHeaders:(F)=>`wf-headers:${J(F)}`,childCancellationPrefix:(F)=>`child-cancel:${J(F)}:`,childCancellation:(F,W)=>`child-cancel:${J(F)}:${J(W)}`,terminalCleanupNeeded:(F)=>`wf-cleanup-needed:${J(F)}`,workflowConcurrency:(F,W)=>`wf-concurrency:${J(F)}:${J(W)}`,workflowConcurrencyHolder:(F)=>`wf-concurrency-holder:${J(F)}`,workflowHasServices:(F)=>`wf-has-services:${J(F)}`,finalizerState:(F)=>`wf-finalizer-state:${J(F)}`,teardownOwed:(F)=>`wf-teardown-needed:${J(F)}`,teardownDeadLetter:(F)=>`wf-teardown-deadletter:${J(F)}`,offload:(F,W)=>`offload:${J(F)}:${W}`,archive:(F,W)=>`archive:${J(F)}:${W}`,stateExecution:(F,W)=>`state:execution:${J(F)}:${J(W)}`,stateWorkflow:(F,W)=>`state:workflow-scope:${C}:${J(F)}:${J(W)}`,streamChunkPrefix:(F,W)=>`blob:${J(F)}:${W}:chunk:`,streamChunk:(F,W,X)=>`blob:${J(F)}:${W}:chunk:${String(X).padStart(10,"0")}`,streamTail:(F,W)=>`blob:${J(F)}:${W}:tail`,streamMetadata:(F,W)=>`blob:${J(F)}:${W}:meta`,budgetCharged:(F)=>`budget-charged:${F}`,toolEffect:(F,W,X)=>`tool-effect:${J(F)}:${W}:${X}`,workflowVisibilityStatus:(F,W)=>`wf-idx-status:${J(F)}:${J(W)}`,workflowVisibilityType:(F,W)=>`wf-idx-type:${J(F)}:${J(W)}`,workflowVisibilityCreated:(F,W)=>`wf-idx-created:${M(F)}:${J(W)}`,workflowVisibilityUpdated:(F,W)=>`wf-idx-updated:${M(F)}:${J(W)}`,workflowVisibilityDeadline:(F,W)=>`wf-idx-deadline:${M(F)}:${J(W)}`,workflowVisibilityManifest:(F)=>`wf-idx-manifest:${J(F)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function XF(F){if(F===void 0)return;if(typeof F!=="number"||!Number.isInteger(F)||F<0)throw Error("deleteRange limit must be a finite non-negative integer");return F===0?0:F}function Q(F){let W={},X=!1;for(let $ of["gt","gte","lt","lte"]){let G=F[$];if(G===void 0)continue;if(typeof G!=="string")throw Error("deleteRange bounds must be strings");W[$]=G,X=!0}if(!X)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Z=XF(F.limit);if(Z!==void 0)W.limit=Z;return W}async function u(F,W,X){let Z=Q(X);if(F.deleteRange)return F.deleteRange(W,Z);return L(F,W,Z)}function v(F){return F.replaceAll(/:+$/g,"")}function JF(F,W){let X=v(F),Z=v(W);if(X.length===0)return Z;if(Z.length===0)return X;return`${X}:${Z}`}class h{#F;#J;constructor(F,W){this.#F=F,this.#J=v(W)}#W(F){if(this.#J.length===0)return F;return F.length===0?`${this.#J}:`:`${this.#J}:${F}`}#X(F){if(this.#J.length===0)return F;return F.slice(this.#J.length+1)}#Z(F={}){let W={};if(F.limit!==void 0)W.limit=F.limit;if(F.reverse!==void 0)W.reverse=F.reverse;if(F.gt!==void 0)W.gt=this.#W(F.gt);if(F.gte!==void 0)W.gte=this.#W(F.gte);if(F.lt!==void 0)W.lt=this.#W(F.lt);if(F.lte!==void 0)W.lte=this.#W(F.lte);return W}#$(F){let W={};if(F.limit!==void 0)W.limit=F.limit;if(F.gt!==void 0)W.gt=this.#W(F.gt);if(F.gte!==void 0)W.gte=this.#W(F.gte);if(F.lt!==void 0)W.lt=this.#W(F.lt);if(F.lte!==void 0)W.lte=this.#W(F.lte);return W}capabilities(){return this.#F.capabilities()}scoped(F){return new h(this.#F,JF(this.#J,F))}async get(F){return this.#F.get(this.#W(F))}async put(F,W){await this.#F.put(this.#W(F),W)}async delete(F){await this.#F.delete(this.#W(F))}async*scan(F,W){for await(let[X,Z]of this.#F.scan(this.#W(F),this.#Z(W)))yield[this.#X(X),Z]}async batch(F){U("batch operations",F.length),await this.#F.batch(F.map((W)=>{if(W.type==="put")return{type:"put",key:this.#W(W.key),value:W.value};return{type:"delete",key:this.#W(W.key)}}))}async conditionalBatch(F,W){return x(this.#F,F.map((X)=>({key:this.#W(X.key),expectedValue:X.expectedValue})),W.map((X)=>{if(X.type==="put")return{type:"put",key:this.#W(X.key),value:X.value};return{type:"delete",key:this.#W(X.key)}}))}async has(F){return T(this.#F,this.#W(F))}async deletePrefix(F){return c(this.#F,this.#W(F))}async deleteRange(F,W){let X=this.#$(Q(W));return u(this.#F,this.#W(F),X)}async*keys(F,W){for await(let X of b(this.#F,this.#W(F),this.#Z(W)))yield this.#X(X)}async count(F){return m(this.#F,this.#W(F))}[Symbol.dispose](){this.#F[Symbol.dispose]()}}function y(F,W){return new h(F,W)}import{createClient as MF}from"@libsql/client";var ZF=/^PRAGMA\b/iu,$F=/^PRAGMA\s+(?:[A-Z_][A-Z0-9_]*\.)?[A-Z_][A-Z0-9_]*\s*$/iu,GF=/^SELECT\b/iu;function jF(F){return F.trim().replace(/;+\s*$/u,"").trim()}function HF(F){return $F.test(F)}function g(F){let W=jF(F);if(W.length===0)throw Error("Storage query must not be empty.");if(W.includes(";"))throw Error("Storage query must contain exactly one read-only statement.");if(GF.test(W))return;if(ZF.test(W)&&HF(W))return;throw Error("Storage query only supports read-only SELECT and PRAGMA statements.")}var I=`CREATE TABLE IF NOT EXISTS kv (
3
3
  key TEXT PRIMARY KEY,
4
4
  value BLOB NOT NULL
5
- ) WITHOUT ROWID`,L="SELECT value FROM kv WHERE key = ?",B="INSERT INTO kv (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",C="DELETE FROM kv WHERE key = ?",s="SELECT 1 AS present FROM kv WHERE key = ? LIMIT 1",n="SELECT COUNT(*) AS count FROM kv WHERE key >= ? AND key < ?",r="DELETE FROM kv WHERE key >= ? AND key < ?";var WF=D(()=>{R()});z();R();p();d();WF();import{createClient as vF}from"@libsql/client";var XF=`${a};`,Y=10,hF=new Set(["SQLITE_BUSY","SQLITE_LOCKED"]);function JF(F){return typeof F==="object"&&F!==null&&"code"in F&&typeof F.code==="string"&&hF.has(F.code)}async function _F(F){return F.transaction("write")}async function zF(F){try{await F.rollback()}catch{}}async function ZF(F){await new Promise((W)=>{setTimeout(W,Math.min(F*5,50))})}async function PF(F,W){for(let X=1;X<=Y;X++)try{await F.batch(W,"write");return}catch(Z){if(!JF(Z)||X===Y)throw Z;await ZF(X)}}async function AF(F,W){for(let X of W){let $=(await F.execute({sql:L,args:[X.key]})).rows[0]?.value,G=$===null||$===void 0?null:new Uint8Array($);if(!x(G,X.expectedValue))return!1}return!0}async function LF(F,W){for(let X of W)if(X.type==="put")await F.execute({sql:B,args:[X.key,X.value]});else await F.execute({sql:C,args:[X.key]})}function qF(F){if(F==="file::memory:"||F===":memory:")return"ephemeral";if(F.startsWith("file:"))return"local";return"remote"}class KF{#F;#J;#W=!1;constructor(F){this.#J=qF(F.url),this.#F=vF(F.authToken?{url:F.url,authToken:F.authToken}:{url:F.url})}capabilities(){return{persistence:this.#J,readAfterWrite:"session",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}async#X(){if(this.#W)return;await this.#F.executeMultiple(XF),this.#W=!0}async get(F){await this.#X();let W=await this.#F.execute({sql:L,args:[F]});if(W.rows.length===0)return null;let X=W.rows[0].value;if(X===null||X===void 0)return null;return new Uint8Array(X)}async put(F,W){await this.#X(),await this.#F.execute({sql:B,args:[F,W]})}async delete(F){await this.#X(),await this.#F.execute({sql:C,args:[F]})}async has(F){return await this.#X(),(await this.#F.execute({sql:s,args:[F]})).rows.length>0}async deletePrefix(F){await this.#X();let[W,X]=O(F);return(await this.#F.execute({sql:r,args:[W,X]})).rowsAffected}async deleteRange(F,W){await this.#X();let X=V(W),{parameters:Z,sql:$}=e(F,X);return(await this.#F.execute({sql:$,args:Z})).rowsAffected}async*scan(F,W={}){await this.#X();let{parameters:X,sql:Z}=o(F,W),$=await this.#F.execute({sql:Z,args:X});for(let G of $.rows){let{key:H,value:j}=G,$F=new Uint8Array(j);yield[H,$F]}}async*keys(F,W={}){await this.#X();let{parameters:X,sql:Z}=FF(F,W),$=await this.#F.execute({sql:Z,args:X});for(let G of $.rows)yield G.key}async count(F){await this.#X();let[W,X]=O(F),Z=await this.#F.execute({sql:n,args:[W,X]});return Number(Z.rows[0]?.count??0)}scoped(F){return f(this,F)}async batch(F){if(U("batch operations",F.length),F.length===0)return;await this.#X();let W=F.map((X)=>{if(X.type==="put")return{sql:B,args:[X.key,X.value]};return{sql:C,args:[X.key]}});await PF(this.#F,W)}async conditionalBatch(F,W){U("conditionalBatch conditions",F.length),U("conditionalBatch operations",W.length),await this.#X();let X;for(let Z=1;Z<=Y;Z++){let $;try{if($=await _F(this.#F),await $.executeMultiple(XF),!await AF($,F))return await $.rollback(),!1;return await LF($,W),await $.commit(),!0}catch(G){if($!==void 0)await zF($);if(!JF(G))throw G;if(X=G,Z<Y)await ZF(Z)}}throw Error(`conditionalBatch exhausted ${Y} attempts after SQLite contention failures`,{cause:X})}async query(F,W){return await this.#X(),l(F),(await this.#F.execute({sql:F,args:W??[]})).rows}[Symbol.dispose](){this.#F.close()}}export{KF as TursoStorage};
5
+ ) WITHOUT ROWID`,_="SELECT value FROM kv WHERE key = ?",V="INSERT INTO kv (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",Y="DELETE FROM kv WHERE key = ?",k="SELECT 1 AS present FROM kv WHERE key = ? LIMIT 1",w="SELECT COUNT(*) AS count FROM kv WHERE key >= ? AND key < ?",f="DELETE FROM kv WHERE key >= ? AND key < ?";function R(F){return[F,E(F)]}function d(F,W){let{gt:X,gte:Z,lt:$,lte:G}=W,H=["key >= ? AND key < ?"],j=R(F);if(X!==void 0)H.push("key > ?"),j.push(X);if(Z!==void 0)H.push("key >= ?"),j.push(Z);if($!==void 0)H.push("key < ?"),j.push($);if(G!==void 0)H.push("key <= ?"),j.push(G);return{conditions:H,parameters:j}}function l(F,W={}){let{limit:X,reverse:Z}=W,{conditions:$,parameters:G}=d(F,W),H=Z?"DESC":"ASC",j=X!==void 0?" LIMIT ?":"";if(X!==void 0)G.push(X);return{parameters:G,sqlSuffix:`WHERE ${$.join(" AND ")} ORDER BY key ${H}${j}`}}function p(F,W,X="kv"){let{conditions:Z,parameters:$}=d(F,W),G=Z.join(" AND ");if(W.limit===void 0)return{parameters:$,sql:`DELETE FROM ${X} WHERE ${G}`};return $.push(W.limit),{parameters:$,sql:`DELETE FROM ${X} WHERE key IN (SELECT key FROM ${X} WHERE ${G} ORDER BY key ASC LIMIT ?)`}}function a(F,W={}){let{parameters:X,sqlSuffix:Z}=l(F,W);return{parameters:X,sql:`SELECT key, value FROM kv ${Z}`}}function s(F,W={}){let{parameters:X,sqlSuffix:Z}=l(F,W);return{parameters:X,sql:`SELECT key FROM kv ${Z}`}}var n=`${I};`,N=10,UF=new Set(["SQLITE_BUSY","SQLITE_LOCKED"]);function r(F){return typeof F==="object"&&F!==null&&"code"in F&&typeof F.code==="string"&&UF.has(F.code)}async function DF(F){return F.transaction("write")}async function QF(F){try{await F.rollback()}catch{}}async function i(F){await new Promise((W)=>{setTimeout(W,Math.min(F*5,50))})}async function NF(F,W){for(let X=1;X<=N;X++)try{await F.batch(W,"write");return}catch(Z){if(!r(Z)||X===N)throw Z;await i(X)}}async function VF(F,W){for(let X of W){let $=(await F.execute({sql:_,args:[X.key]})).rows[0]?.value,G=$===null||$===void 0?null:new Uint8Array($);if(!S(G,X.expectedValue))return!1}return!0}async function YF(F,W){for(let X of W)if(X.type==="put")await F.execute({sql:V,args:[X.key,X.value]});else await F.execute({sql:Y,args:[X.key]})}function RF(F){if(F==="file::memory:"||F===":memory:")return"ephemeral";if(F.startsWith("file:"))return"local";return"remote"}class BF{#F;#J;#W=!1;constructor(F){this.#J=RF(F.url),this.#F=MF(F.authToken?{url:F.url,authToken:F.authToken}:{url:F.url})}capabilities(){return{persistence:this.#J,readAfterWrite:"session",scanConsistency:"snapshot",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}async#X(){if(this.#W)return;await this.#F.executeMultiple(n),this.#W=!0}async get(F){await this.#X();let W=await this.#F.execute({sql:_,args:[F]});if(W.rows.length===0)return null;let X=W.rows[0].value;if(X===null||X===void 0)return null;return new Uint8Array(X)}async put(F,W){await this.#X(),await this.#F.execute({sql:V,args:[F,W]})}async delete(F){await this.#X(),await this.#F.execute({sql:Y,args:[F]})}async has(F){return await this.#X(),(await this.#F.execute({sql:k,args:[F]})).rows.length>0}async deletePrefix(F){await this.#X();let[W,X]=R(F);return(await this.#F.execute({sql:f,args:[W,X]})).rowsAffected}async deleteRange(F,W){await this.#X();let X=Q(W),{parameters:Z,sql:$}=p(F,X);return(await this.#F.execute({sql:$,args:Z})).rowsAffected}async*scan(F,W={}){await this.#X();let{parameters:X,sql:Z}=a(F,W),$=await this.#F.execute({sql:Z,args:X});for(let G of $.rows){let{key:H,value:j}=G,t=new Uint8Array(j);yield[H,t]}}async*keys(F,W={}){await this.#X();let{parameters:X,sql:Z}=s(F,W),$=await this.#F.execute({sql:Z,args:X});for(let G of $.rows)yield G.key}async count(F){await this.#X();let[W,X]=R(F),Z=await this.#F.execute({sql:w,args:[W,X]});return Number(Z.rows[0]?.count??0)}scoped(F){return y(this,F)}async batch(F){if(U("batch operations",F.length),F.length===0)return;await this.#X();let W=F.map((X)=>{if(X.type==="put")return{sql:V,args:[X.key,X.value]};return{sql:Y,args:[X.key]}});await NF(this.#F,W)}async conditionalBatch(F,W){U("conditionalBatch conditions",F.length),U("conditionalBatch operations",W.length),await this.#X();let X;for(let Z=1;Z<=N;Z++){let $;try{if($=await DF(this.#F),await $.executeMultiple(n),!await VF($,F))return await $.rollback(),!1;return await YF($,W),await $.commit(),!0}catch(G){if($!==void 0)await QF($);if(!r(G))throw G;if(X=G,Z<N)await i(Z)}}throw Error(`conditionalBatch exhausted ${N} attempts after SQLite contention failures`,{cause:X})}async query(F,W){return await this.#X(),g(F),(await this.#F.execute({sql:F,args:W??[]})).rows}[Symbol.dispose](){this.#F.close()}}export{BF as TursoStorage};
@@ -1,2 +1,138 @@
1
- // @bun
2
- var a0=Object.defineProperty;var o0=($)=>$;function t0($,Z){this[$]=o0.bind(null,Z)}var _6=($,Z)=>{for(var Q in Z)a0($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:t0.bind(Z,Q)})};var J=($,Z)=>()=>($&&(Z=$($=0)),Z);var C6=import.meta.require,S6=($,Z,Q)=>{if(Z!=null){if(typeof Z!=="object"&&typeof Z!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let W;if(Q)W=Z[Symbol.asyncDispose];if(W===void 0)W=Z[Symbol.dispose];if(typeof W!=="function")throw TypeError("Object not disposable");$.push([Q,W,Z])}else if(Q)$.push([Q]);return Z},B6=($,Z,Q)=>{let W=(F)=>Z=Q?new SuppressedError(F,Z,"An error was suppressed during disposal"):(Q=!0,F),G=(F)=>{while(F=$.pop())try{var K=F[1]&&F[1].call(F[2]);if(F[0])return Promise.resolve(K).then(G,(H)=>(W(H),G()))}catch(H){W(H)}if(Q)throw Z};return G()};function p($,Z,Q){if(!$.capabilities()[Z])throw Error(`Feature "${Q}" requires storage capability "${Z}", but this storage backend does not provide it.`)}function e0($){let Z=$.capabilities(),Q=[];if(Z.persistence!=="local"&&Z.persistence!=="remote")Q.push(`persistence must be "local" or "remote" (got "${Z.persistence}")`);if(Z.readAfterWrite!=="linearizable")Q.push(`readAfterWrite must be "linearizable" (got "${Z.readAfterWrite}")`);if(Z.scanConsistency!=="snapshot")Q.push(`scanConsistency must be "snapshot" (got "${Z.scanConsistency}")`);if(!Z.atomicBatch)Q.push("atomicBatch must be true");if(!Z.conditionalBatch)Q.push("conditionalBatch must be true");if(Q.length>0)throw Error(`Storage is not durable enough for recovery: ${Q.join("; ")}.`)}var c="default";async function G0($,Z){return await $.get(Z)!==null}async function*O($,Z,Q){for await(let[W]of $.scan(Z,Q))yield W}async function q0($,Z){let Q=0;for await(let W of O($,Z))Q++;return Q}async function F0($,Z){let Q=[];for await(let W of O($,Z))Q.push({type:"delete",key:W});if(Q.length===0)return 0;return await $.batch(Q),Q.length}async function K0($,Z,Q){let W=[];for await(let G of O($,Z,Q))W.push({type:"delete",key:G});if(W.length===0)return 0;return await $.batch(W),W.length}var $$;var H0=J(()=>{$$=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","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-terminal:"]});function z($,Z){if(Z>l)throw new X0($,Z)}function k6($){return $.length>0?$.slice(0,-1)+String.fromCharCode($.charCodeAt($.length-1)+1):"\xFF"}function m6($,Z={}){if(Z.gt!==void 0&&$<=Z.gt)return!1;if(Z.gte!==void 0&&$<Z.gte)return!1;if(Z.lt!==void 0&&$>=Z.lt)return!1;if(Z.lte!==void 0&&$>Z.lte)return!1;return!0}function w6($,Z){if($===null||Z===null)return $===Z;if($.byteLength!==Z.byteLength)return!1;for(let Q=0;Q<$.byteLength;Q++)if($[Q]!==Z[Q])return!1;return!0}async function Y0($,Z){if($.has)return $.has(Z);return G0($,Z)}function V0($,Z,Q){if($.keys)return $.keys(Z,Q);return O($,Z,Q)}async function P0($,Z){if($.count)return $.count(Z);return q0($,Z)}async function M0($,Z){if($.deletePrefix)return $.deletePrefix(Z);return F0($,Z)}async function j6($,Z){z("batch operations",Z.length),await $.batch(Z)}async function N0($,Z,Q){if(z("conditionalBatch conditions",Z.length),z("conditionalBatch operations",Q.length),p($,"conditionalBatch","storageConditionalBatch"),!$.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return $.conditionalBatch(Z,Q)}function q($){return encodeURIComponent($)}function h6($){return decodeURIComponent($)}function g6($){try{return decodeURIComponent($)}catch{return null}}var l=1e4,E6=1e4,X0,P=($)=>String($).padStart(16,"0"),Z$="0",Q$="1",J0=($,Z,Q,W)=>`sig:${q($)}:${q(Z)}:${W}:${q(Q)}`,b6;var R0=J(()=>{H0();X0=class X0 extends Error{code="StorageBatchOperationLimitExceededError";cap=l;count;target;constructor($,Z){super(`${$} count ${Z} exceeds MAX_BATCH_OPERATIONS (${l}).`);this.name="StorageBatchOperationLimitExceededError",this.target=$,this.count=Z}};b6={workflow:($)=>`wf:${q($)}`,checkpoint:($)=>`wf:${q($)}:ckpt`,checkpointHistory:($,Z)=>`wf:${q($)}:ckpt:${String(Z).padStart(10,"0")}`,timelinePrefix:($)=>`wf:${q($)}:timeline:`,timeline:($,Z)=>`wf:${q($)}:timeline:${String(Z).padStart(10,"0")}`,schedule:($)=>`schedule:${q($)}`,scheduleTick:($,Z)=>`schedule-due:${String($).padStart(16,"0")}:${q(Z)}`,scheduleRun:($)=>`schedule-run:${q($)}`,operation:($,Z,Q)=>`op:${$}:${P(Z)}:${Q}`,operationInflight:($)=>`op:inflight:${$}`,operationQueued:($)=>`op:queued:${$}`,operationResolved:($)=>`op:resolved:${$}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:($)=>`op:dead-letter:${$}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:($,Z,Q)=>`audit:bulk:${P($)}:${q(Z)}:${q(Q)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:($,Z)=>`op:resolved-by-time:${P($)}:${q(Z)}`,asyncActivity:($,Z)=>`async-act:v1:${q($)}:${q(Z)}`,asyncActivityResolution:($,Z)=>`async-act:v1:${q($)}:${q(Z)}:resolution`,activityReconciliationPrefix:($)=>`actrec:v1:${q($)}:`,activityReconciliation:($,Z,Q)=>`actrec:v1:${q($)}:${q(Z)}:${Q}`,eventPrefix:($)=>`ev:${q($)}:`,event:($,Z)=>`ev:${q($)}:${String(Z).padStart(10,"0")}`,eventHead:($)=>`ev:${q($)}:head`,eventWatermark:($)=>`ev:${q($)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:($)=>`fleet-event:${String($).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:($)=>`fleet-event-by-workflow:${q($)}:`,fleetEventByWorkflow:($,Z)=>`fleet-event-by-workflow:${q($)}:${String(Z).padStart(10,"0")}`,signal:($,Z,Q)=>J0($,Z,Q,Q$),startSignal:($,Z,Q)=>J0($,Z,Q,Z$),signalSequence:($)=>`sigseq:v1:${q($)}`,signalAcceptedResponsePrefix:($)=>`sigres:v1:${q($)}:`,signalAcceptedResponse:($,Z,Q)=>`sigres:v1:${q($)}:${q(Z)}:${q(Q)}`,deadline:($,Z)=>`wf-deadline:${P($)}:${q(Z)}`,terminalCleanup:($,Z)=>`wf-cleanup:${P($)}:${q(Z)}`,teardownTimer:($,Z)=>`wf-teardown:${P($)}:${q(Z)}`,delayedStart:($,Z)=>`wf-delayed:${P($)}:${q(Z)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:($,Z)=>`wf-terminal:${P($)}:${q(Z)}`,attribute:($)=>`attr:${q($)}`,attributeIndex:($,Z,Q)=>`idx:${$}:${Z}:${q(Q)}`,tagIndex:($,Z)=>`tag:${q($)}:${q(Z)}`,updatePrefix:($)=>`upd:${q($)}:`,update:($,Z)=>`upd:${q($)}:${Z}`,updateResponse:($)=>`upr:${$}`,updateIdempotency:($,Z)=>`upk:${q($)}:${Z}`,startIdempotency:($)=>`start-idem:${q($)}`,startIdempotencySignalId:($)=>`start-idem:${$}`,livenessPrefix:()=>"liveness:",liveness:($)=>`liveness:${q($)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:($,Z,Q)=>`budget:${$}:${Z}:${Q}`,review:($,Z)=>`review:${q($)}:${Z}`,workflowHeaders:($)=>`wf-headers:${q($)}`,childCancellationPrefix:($)=>`child-cancel:${q($)}:`,childCancellation:($,Z)=>`child-cancel:${q($)}:${q(Z)}`,terminalCleanupNeeded:($)=>`wf-cleanup-needed:${q($)}`,workflowConcurrency:($,Z)=>`wf-concurrency:${q($)}:${q(Z)}`,workflowConcurrencyHolder:($)=>`wf-concurrency-holder:${q($)}`,workflowHasServices:($)=>`wf-has-services:${q($)}`,finalizerState:($)=>`wf-finalizer-state:${q($)}`,teardownOwed:($)=>`wf-teardown-needed:${q($)}`,teardownDeadLetter:($)=>`wf-teardown-deadletter:${q($)}`,offload:($,Z)=>`offload:${q($)}:${Z}`,archive:($,Z)=>`archive:${q($)}:${Z}`,stateExecution:($,Z)=>`state:execution:${q($)}:${q(Z)}`,stateWorkflow:($,Z)=>`state:workflow-scope:${c}:${q($)}:${q(Z)}`,streamChunkPrefix:($,Z)=>`blob:${q($)}:${Z}:chunk:`,streamChunk:($,Z,Q)=>`blob:${q($)}:${Z}:chunk:${String(Q).padStart(10,"0")}`,streamTail:($,Z)=>`blob:${q($)}:${Z}:tail`,streamMetadata:($,Z)=>`blob:${q($)}:${Z}:meta`,budgetCharged:($)=>`budget-charged:${$}`,toolEffect:($,Z,Q)=>`tool-effect:${q($)}:${Z}:${Q}`,workflowVisibilityStatus:($,Z)=>`wf-idx-status:${q($)}:${q(Z)}`,workflowVisibilityType:($,Z)=>`wf-idx-type:${q($)}:${q(Z)}`,workflowVisibilityCreated:($,Z)=>`wf-idx-created:${P($)}:${q(Z)}`,workflowVisibilityUpdated:($,Z)=>`wf-idx-updated:${P($)}:${q(Z)}`,workflowVisibilityDeadline:($,Z)=>`wf-idx-deadline:${P($)}:${q(Z)}`,workflowVisibilityManifest:($)=>`wf-idx-manifest:${q($)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});function U0($){let Z=$.length,Q=0,W=0;while(W<Z){let G=$.charCodeAt(W++);if((G&4294967168)===0){Q++;continue}else if((G&4294965248)===0)Q+=2;else{if(G>=55296&&G<=56319){if(W<Z){let F=$.charCodeAt(W);if((F&64512)===56320)++W,G=((G&1023)<<10)+(F&1023)+65536}}if((G&4294901760)===0)Q+=3;else Q+=4}}return Q}function W$($,Z,Q){let W=$.length,G=Q,F=0;while(F<W){let K=$.charCodeAt(F++);if((K&4294967168)===0){Z[G++]=K;continue}else if((K&4294965248)===0)Z[G++]=K>>6&31|192;else{if(K>=55296&&K<=56319){if(F<W){let H=$.charCodeAt(F);if((H&64512)===56320)++F,K=((K&1023)<<10)+(H&1023)+65536}}if((K&4294901760)===0)Z[G++]=K>>12&15|224,Z[G++]=K>>6&63|128;else Z[G++]=K>>18&7|240,Z[G++]=K>>12&63|128,Z[G++]=K>>6&63|128}Z[G++]=K&63|128}}function F$($,Z,Q){G$.encodeInto($,Z.subarray(Q))}function _0($,Z,Q){if($.length>q$)F$($,Z,Q);else W$($,Z,Q)}function n($,Z,Q){let W=Z,G=W+Q,F=[],K="";while(W<G){let H=$[W++];if((H&128)===0)F.push(H);else if((H&224)===192){let A=$[W++]&63;F.push((H&31)<<6|A)}else if((H&240)===224){let A=$[W++]&63,v=$[W++]&63;F.push((H&31)<<12|A<<6|v)}else if((H&248)===240){let A=$[W++]&63,v=$[W++]&63,s0=$[W++]&63,U=(H&7)<<18|A<<12|v<<6|s0;if(U>65535)U-=65536,F.push(U>>>10&1023|55296),U=56320|U&1023;F.push(U)}else F.push(H);if(F.length>=K$)K+=String.fromCharCode(...F),F.length=0}if(F.length>0)K+=String.fromCharCode(...F);return K}function X$($,Z,Q){let W=$.subarray(Z,Z+Q);return H$.decode(W)}function C0($,Z,Q){if(Q>J$)return X$($,Z,Q);else return n($,Z,Q)}var G$,q$=50,K$=4096,H$,J$=200;var I=J(()=>{G$=new TextEncoder;H$=new TextDecoder});class _{type;data;constructor($,Z){this.type=$,this.data=Z}}var Y;var d=J(()=>{Y=class Y extends Error{constructor($){super($);let Z=Object.create(Y.prototype);Object.setPrototypeOf(this,Z),Object.defineProperty(this,"name",{configurable:!0,enumerable:!1,value:Y.name})}}});function S0($,Z,Q){let W=Q/4294967296,G=Q;$.setUint32(Z,W),$.setUint32(Z+4,G)}function E($,Z,Q){let W=Math.floor(Q/4294967296),G=Q;$.setUint32(Z,W),$.setUint32(Z+4,G)}function k($,Z){let Q=$.getInt32(Z),W=$.getUint32(Z+4);return Q*4294967296+W}function B0($,Z){let Q=$.getUint32(Z),W=$.getUint32(Z+4);return Q*4294967296+W}var C=4294967295;function M$({sec:$,nsec:Z}){if($>=0&&Z>=0&&$<=P$)if(Z===0&&$<=V$){let Q=new Uint8Array(4);return new DataView(Q.buffer).setUint32(0,$),Q}else{let Q=$/4294967296,W=$&4294967295,G=new Uint8Array(8),F=new DataView(G.buffer);return F.setUint32(0,Z<<2|Q&3),F.setUint32(4,W),G}else{let Q=new Uint8Array(12),W=new DataView(Q.buffer);return W.setUint32(0,Z),E(W,4,$),Q}}function N$($){let Z=$.getTime(),Q=Math.floor(Z/1000),W=(Z-Q*1000)*1e6,G=Math.floor(W/1e9);return{sec:Q+G,nsec:W-G*1e9}}function R$($){if($ instanceof Date){let Z=N$($);return M$(Z)}else return null}function U$($){let Z=new DataView($.buffer,$.byteOffset,$.byteLength);switch($.byteLength){case 4:{let Q=Z.getUint32(0),W=0;return{sec:Q,nsec:0}}case 8:{let Q=Z.getUint32(0),W=Z.getUint32(4),G=(Q&3)*4294967296+W,F=Q>>>2;return{sec:G,nsec:F}}case 12:{let Q=k(Z,4),W=Z.getUint32(0);return{sec:Q,nsec:W}}default:throw new Y(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${$.length}`)}}function _$($){let Z=U$($);return new Date(Z.sec*1000+Z.nsec/1e6)}var Y$=-1,V$=4294967295,P$=17179869183,A0;var O0=J(()=>{d();A0={type:Y$,encode:R$,decode:_$}});var R;var m=J(()=>{O0();R=class R{static defaultCodec=new R;__brand;builtInEncoders=[];builtInDecoders=[];encoders=[];decoders=[];constructor(){this.register(A0)}register({type:$,encode:Z,decode:Q}){if($>=0)this.encoders[$]=Z,this.decoders[$]=Q;else{let W=-1-$;this.builtInEncoders[W]=Z,this.builtInDecoders[W]=Q}}tryToEncode($,Z){for(let Q=0;Q<this.builtInEncoders.length;Q++){let W=this.builtInEncoders[Q];if(W!=null){let G=W($,Z);if(G!=null){let F=-1-Q;return new _(F,G)}}}for(let Q=0;Q<this.encoders.length;Q++){let W=this.encoders[Q];if(W!=null){let G=W($,Z);if(G!=null)return new _(Q,G)}}if($ instanceof _)return $;return null}decode($,Z,Q){let W=Z<0?this.builtInDecoders[-1-Z]:this.decoders[Z];if(W)return W($,Z,Q);else return new _(Z,$)}}});function C$($){return $ instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&$ instanceof SharedArrayBuffer}function T($){if($ instanceof Uint8Array)return $;else if(ArrayBuffer.isView($))return new Uint8Array($.buffer,$.byteOffset,$.byteLength);else if(C$($))return new Uint8Array($);else return Uint8Array.from($)}class w{extensionCodec;context;useBigInt64;maxDepth;initialBufferSize;sortKeys;forceFloat32;ignoreUndefined;forceIntegerToFloat;pos;view;bytes;entered=!1;constructor($){this.extensionCodec=$?.extensionCodec??R.defaultCodec,this.context=$?.context,this.useBigInt64=$?.useBigInt64??!1,this.maxDepth=$?.maxDepth??S$,this.initialBufferSize=$?.initialBufferSize??B$,this.sortKeys=$?.sortKeys??!1,this.forceFloat32=$?.forceFloat32??!1,this.ignoreUndefined=$?.ignoreUndefined??!1,this.forceIntegerToFloat=$?.forceIntegerToFloat??!1,this.pos=0,this.view=new DataView(new ArrayBuffer(this.initialBufferSize)),this.bytes=new Uint8Array(this.view.buffer)}clone(){return new w({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,maxDepth:this.maxDepth,initialBufferSize:this.initialBufferSize,sortKeys:this.sortKeys,forceFloat32:this.forceFloat32,ignoreUndefined:this.ignoreUndefined,forceIntegerToFloat:this.forceIntegerToFloat})}reinitializeState(){this.pos=0}encodeSharedRef($){if(this.entered)return this.clone().encodeSharedRef($);try{return this.entered=!0,this.reinitializeState(),this.doEncode($,1),this.bytes.subarray(0,this.pos)}finally{this.entered=!1}}encode($){if(this.entered)return this.clone().encode($);try{return this.entered=!0,this.reinitializeState(),this.doEncode($,1),this.bytes.slice(0,this.pos)}finally{this.entered=!1}}doEncode($,Z){if(Z>this.maxDepth)throw Error(`Too deep objects in depth ${Z}`);if($==null)this.encodeNil();else if(typeof $==="boolean")this.encodeBoolean($);else if(typeof $==="number")if(!this.forceIntegerToFloat)this.encodeNumber($);else this.encodeNumberAsFloat($);else if(typeof $==="string")this.encodeString($);else if(this.useBigInt64&&typeof $==="bigint")this.encodeBigInt64($);else this.encodeObject($,Z)}ensureBufferSizeToWrite($){let Z=this.pos+$;if(this.view.byteLength<Z)this.resizeBuffer(Z*2)}resizeBuffer($){let Z=new ArrayBuffer($),Q=new Uint8Array(Z),W=new DataView(Z);Q.set(this.bytes),this.view=W,this.bytes=Q}encodeNil(){this.writeU8(192)}encodeBoolean($){if($===!1)this.writeU8(194);else this.writeU8(195)}encodeNumber($){if(!this.forceIntegerToFloat&&Number.isSafeInteger($))if($>=0)if($<128)this.writeU8($);else if($<256)this.writeU8(204),this.writeU8($);else if($<65536)this.writeU8(205),this.writeU16($);else if($<4294967296)this.writeU8(206),this.writeU32($);else if(!this.useBigInt64)this.writeU8(207),this.writeU64($);else this.encodeNumberAsFloat($);else if($>=-32)this.writeU8(224|$+32);else if($>=-128)this.writeU8(208),this.writeI8($);else if($>=-32768)this.writeU8(209),this.writeI16($);else if($>=-2147483648)this.writeU8(210),this.writeI32($);else if(!this.useBigInt64)this.writeU8(211),this.writeI64($);else this.encodeNumberAsFloat($);else this.encodeNumberAsFloat($)}encodeNumberAsFloat($){if(this.forceFloat32)this.writeU8(202),this.writeF32($);else this.writeU8(203),this.writeF64($)}encodeBigInt64($){if($>=BigInt(0))this.writeU8(207),this.writeBigUint64($);else this.writeU8(211),this.writeBigInt64($)}writeStringHeader($){if($<32)this.writeU8(160+$);else if($<256)this.writeU8(217),this.writeU8($);else if($<65536)this.writeU8(218),this.writeU16($);else if($<4294967296)this.writeU8(219),this.writeU32($);else throw Error(`Too long string: ${$} bytes in UTF-8`)}encodeString($){let Q=U0($);this.ensureBufferSizeToWrite(5+Q),this.writeStringHeader(Q),_0($,this.bytes,this.pos),this.pos+=Q}encodeObject($,Z){let Q=this.extensionCodec.tryToEncode($,this.context);if(Q!=null)this.encodeExtension(Q);else if(Array.isArray($))this.encodeArray($,Z);else if(ArrayBuffer.isView($))this.encodeBinary($);else if(typeof $==="object")this.encodeMap($,Z);else throw Error(`Unrecognized object: ${Object.prototype.toString.apply($)}`)}encodeBinary($){let Z=$.byteLength;if(Z<256)this.writeU8(196),this.writeU8(Z);else if(Z<65536)this.writeU8(197),this.writeU16(Z);else if(Z<4294967296)this.writeU8(198),this.writeU32(Z);else throw Error(`Too large binary: ${Z}`);let Q=T($);this.writeU8a(Q)}encodeArray($,Z){let Q=$.length;if(Q<16)this.writeU8(144+Q);else if(Q<65536)this.writeU8(220),this.writeU16(Q);else if(Q<4294967296)this.writeU8(221),this.writeU32(Q);else throw Error(`Too large array: ${Q}`);for(let W of $)this.doEncode(W,Z+1)}countWithoutUndefined($,Z){let Q=0;for(let W of Z)if($[W]!==void 0)Q++;return Q}encodeMap($,Z){let Q=Object.keys($);if(this.sortKeys)Q.sort();let W=this.ignoreUndefined?this.countWithoutUndefined($,Q):Q.length;if(W<16)this.writeU8(128+W);else if(W<65536)this.writeU8(222),this.writeU16(W);else if(W<4294967296)this.writeU8(223),this.writeU32(W);else throw Error(`Too large map object: ${W}`);for(let G of Q){let F=$[G];if(!(this.ignoreUndefined&&F===void 0))this.encodeString(G),this.doEncode(F,Z+1)}}encodeExtension($){if(typeof $.data==="function"){let Q=$.data(this.pos+6),W=Q.length;if(W>=4294967296)throw Error(`Too large extension object: ${W}`);this.writeU8(201),this.writeU32(W),this.writeI8($.type),this.writeU8a(Q);return}let Z=$.data.length;if(Z===1)this.writeU8(212);else if(Z===2)this.writeU8(213);else if(Z===4)this.writeU8(214);else if(Z===8)this.writeU8(215);else if(Z===16)this.writeU8(216);else if(Z<256)this.writeU8(199),this.writeU8(Z);else if(Z<65536)this.writeU8(200),this.writeU16(Z);else if(Z<4294967296)this.writeU8(201),this.writeU32(Z);else throw Error(`Too large extension object: ${Z}`);this.writeI8($.type),this.writeU8a($.data)}writeU8($){this.ensureBufferSizeToWrite(1),this.view.setUint8(this.pos,$),this.pos++}writeU8a($){let Z=$.length;this.ensureBufferSizeToWrite(Z),this.bytes.set($,this.pos),this.pos+=Z}writeI8($){this.ensureBufferSizeToWrite(1),this.view.setInt8(this.pos,$),this.pos++}writeU16($){this.ensureBufferSizeToWrite(2),this.view.setUint16(this.pos,$),this.pos+=2}writeI16($){this.ensureBufferSizeToWrite(2),this.view.setInt16(this.pos,$),this.pos+=2}writeU32($){this.ensureBufferSizeToWrite(4),this.view.setUint32(this.pos,$),this.pos+=4}writeI32($){this.ensureBufferSizeToWrite(4),this.view.setInt32(this.pos,$),this.pos+=4}writeF32($){this.ensureBufferSizeToWrite(4),this.view.setFloat32(this.pos,$),this.pos+=4}writeF64($){this.ensureBufferSizeToWrite(8),this.view.setFloat64(this.pos,$),this.pos+=8}writeU64($){this.ensureBufferSizeToWrite(8),S0(this.view,this.pos,$),this.pos+=8}writeI64($){this.ensureBufferSizeToWrite(8),E(this.view,this.pos,$),this.pos+=8}writeBigUint64($){this.ensureBufferSizeToWrite(8),this.view.setBigUint64(this.pos,$),this.pos+=8}writeBigInt64($){this.ensureBufferSizeToWrite(8),this.view.setBigInt64(this.pos,$),this.pos+=8}}var S$=100,B$=2048;var z0=J(()=>{I();m()});function M($,Z){return new w(Z).encodeSharedRef($)}var T0=J(()=>{z0()});function j($){return`${$<0?"-":""}0x${Math.abs($).toString(16).padStart(2,"0")}`}class u{hit=0;miss=0;caches;maxKeyLength;maxLengthPerKey;constructor($=A$,Z=O$){this.maxKeyLength=$,this.maxLengthPerKey=Z,this.caches=[];for(let Q=0;Q<this.maxKeyLength;Q++)this.caches.push([])}canBeCached($){return $>0&&$<=this.maxKeyLength}find($,Z,Q){let W=this.caches[Q-1];$:for(let G of W){let F=G.bytes;for(let K=0;K<Q;K++)if(F[K]!==$[Z+K])continue $;return G.str}return null}store($,Z){let Q=this.caches[$.length-1],W={bytes:$,str:Z};if(Q.length>=this.maxLengthPerKey)Q[Math.random()*Q.length|0]=W;else Q.push(W)}decode($,Z,Q){let W=this.find($,Z,Q);if(W!=null)return this.hit++,W;this.miss++;let G=n($,Z,Q),F=Uint8Array.prototype.slice.call($,Z,Z+Q);return this.store(F,G),G}}var A$=16,O$=16;var D0=J(()=>{I()});class I0{stack=[];stackHeadPosition=-1;get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState($){let Z=this.getUninitializedStateFromPool();Z.type=i,Z.position=0,Z.size=$,Z.array=Array($)}pushMapState($){let Z=this.getUninitializedStateFromPool();Z.type=L,Z.readCount=0,Z.size=$,Z.map={}}getUninitializedStateFromPool(){if(this.stackHeadPosition++,this.stackHeadPosition===this.stack.length){let $={type:void 0,size:0,array:void 0,position:0,readCount:0,map:void 0,key:null};this.stack.push($)}return this.stack[this.stackHeadPosition]}release($){if(this.stack[this.stackHeadPosition]!==$)throw Error("Invalid stack state. Released state is not on top of the stack.");if($.type===i){let Q=$;Q.size=0,Q.array=void 0,Q.position=0,Q.type=void 0}if($.type===L||$.type===x0){let Q=$;Q.size=0,Q.map=void 0,Q.readCount=0,Q.type=void 0}this.stackHeadPosition--}reset(){this.stack.length=0,this.stackHeadPosition=-1}}class h{extensionCodec;context;useBigInt64;rawStrings;maxStrLength;maxBinLength;maxArrayLength;maxMapLength;maxExtLength;keyDecoder;mapKeyConverter;totalPos=0;pos=0;view=r;bytes=T$;headByte=D;stack=new I0;entered=!1;constructor($){this.extensionCodec=$?.extensionCodec??R.defaultCodec,this.context=$?.context,this.useBigInt64=$?.useBigInt64??!1,this.rawStrings=$?.rawStrings??!1,this.maxStrLength=$?.maxStrLength??C,this.maxBinLength=$?.maxBinLength??C,this.maxArrayLength=$?.maxArrayLength??C,this.maxMapLength=$?.maxMapLength??C,this.maxExtLength=$?.maxExtLength??C,this.keyDecoder=$?.keyDecoder!==void 0?$.keyDecoder:D$,this.mapKeyConverter=$?.mapKeyConverter??z$}clone(){return new h({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,rawStrings:this.rawStrings,maxStrLength:this.maxStrLength,maxBinLength:this.maxBinLength,maxArrayLength:this.maxArrayLength,maxMapLength:this.maxMapLength,maxExtLength:this.maxExtLength,keyDecoder:this.keyDecoder})}reinitializeState(){this.totalPos=0,this.headByte=D,this.stack.reset()}setBuffer($){let Z=T($);this.bytes=Z,this.view=new DataView(Z.buffer,Z.byteOffset,Z.byteLength),this.pos=0}appendBuffer($){if(this.headByte===D&&!this.hasRemaining(1))this.setBuffer($);else{let Z=this.bytes.subarray(this.pos),Q=T($),W=new Uint8Array(Z.length+Q.length);W.set(Z),W.set(Q,Z.length),this.setBuffer(W)}}hasRemaining($){return this.view.byteLength-this.pos>=$}createExtraByteError($){let{view:Z,pos:Q}=this;return RangeError(`Extra ${Z.byteLength-Q} of ${Z.byteLength} byte(s) found at buffer[${$}]`)}decode($){if(this.entered)return this.clone().decode($);try{this.entered=!0,this.reinitializeState(),this.setBuffer($);let Z=this.doDecodeSync();if(this.hasRemaining(1))throw this.createExtraByteError(this.pos);return Z}finally{this.entered=!1}}*decodeMulti($){if(this.entered){yield*this.clone().decodeMulti($);return}try{this.entered=!0,this.reinitializeState(),this.setBuffer($);while(this.hasRemaining(1))yield this.doDecodeSync()}finally{this.entered=!1}}async decodeAsync($){if(this.entered)return this.clone().decodeAsync($);try{this.entered=!0;let Z=!1,Q;for await(let K of $){if(Z)throw this.entered=!1,this.createExtraByteError(this.totalPos);this.appendBuffer(K);try{Q=this.doDecodeSync(),Z=!0}catch(H){if(!(H instanceof RangeError))throw H}this.totalPos+=this.pos}if(Z){if(this.hasRemaining(1))throw this.createExtraByteError(this.totalPos);return Q}let{headByte:W,pos:G,totalPos:F}=this;throw RangeError(`Insufficient data in parsing ${j(W)} at ${F} (${G} in the current buffer)`)}finally{this.entered=!1}}decodeArrayStream($){return this.decodeMultiAsync($,!0)}decodeStream($){return this.decodeMultiAsync($,!1)}async*decodeMultiAsync($,Z){if(this.entered){yield*this.clone().decodeMultiAsync($,Z);return}try{this.entered=!0;let Q=Z,W=-1;for await(let G of $){if(Z&&W===0)throw this.createExtraByteError(this.totalPos);if(this.appendBuffer(G),Q)W=this.readArraySize(),Q=!1,this.complete();try{while(!0)if(yield this.doDecodeSync(),--W===0)break}catch(F){if(!(F instanceof RangeError))throw F}this.totalPos+=this.pos}}finally{this.entered=!1}}doDecodeSync(){$:while(!0){let $=this.readHeadByte(),Z;if($>=224)Z=$-256;else if($<192)if($<128)Z=$;else if($<144){let W=$-128;if(W!==0){this.pushMapState(W),this.complete();continue $}else Z={}}else if($<160){let W=$-144;if(W!==0){this.pushArrayState(W),this.complete();continue $}else Z=[]}else{let W=$-160;Z=this.decodeString(W,0)}else if($===192)Z=null;else if($===194)Z=!1;else if($===195)Z=!0;else if($===202)Z=this.readF32();else if($===203)Z=this.readF64();else if($===204)Z=this.readU8();else if($===205)Z=this.readU16();else if($===206)Z=this.readU32();else if($===207)if(this.useBigInt64)Z=this.readU64AsBigInt();else Z=this.readU64();else if($===208)Z=this.readI8();else if($===209)Z=this.readI16();else if($===210)Z=this.readI32();else if($===211)if(this.useBigInt64)Z=this.readI64AsBigInt();else Z=this.readI64();else if($===217){let W=this.lookU8();Z=this.decodeString(W,1)}else if($===218){let W=this.lookU16();Z=this.decodeString(W,2)}else if($===219){let W=this.lookU32();Z=this.decodeString(W,4)}else if($===220){let W=this.readU16();if(W!==0){this.pushArrayState(W),this.complete();continue $}else Z=[]}else if($===221){let W=this.readU32();if(W!==0){this.pushArrayState(W),this.complete();continue $}else Z=[]}else if($===222){let W=this.readU16();if(W!==0){this.pushMapState(W),this.complete();continue $}else Z={}}else if($===223){let W=this.readU32();if(W!==0){this.pushMapState(W),this.complete();continue $}else Z={}}else if($===196){let W=this.lookU8();Z=this.decodeBinary(W,1)}else if($===197){let W=this.lookU16();Z=this.decodeBinary(W,2)}else if($===198){let W=this.lookU32();Z=this.decodeBinary(W,4)}else if($===212)Z=this.decodeExtension(1,0);else if($===213)Z=this.decodeExtension(2,0);else if($===214)Z=this.decodeExtension(4,0);else if($===215)Z=this.decodeExtension(8,0);else if($===216)Z=this.decodeExtension(16,0);else if($===199){let W=this.lookU8();Z=this.decodeExtension(W,1)}else if($===200){let W=this.lookU16();Z=this.decodeExtension(W,2)}else if($===201){let W=this.lookU32();Z=this.decodeExtension(W,4)}else throw new Y(`Unrecognized type byte: ${j($)}`);this.complete();let Q=this.stack;while(Q.length>0){let W=Q.top();if(W.type===i)if(W.array[W.position]=Z,W.position++,W.position===W.size)Z=W.array,Q.release(W);else continue $;else if(W.type===L){if(Z==="__proto__")throw new Y("The key __proto__ is not allowed");W.key=this.mapKeyConverter(Z),W.type=x0;continue $}else if(W.map[W.key]=Z,W.readCount++,W.readCount===W.size)Z=W.map,Q.release(W);else{W.key=null,W.type=L;continue $}}return Z}}readHeadByte(){if(this.headByte===D)this.headByte=this.readU8();return this.headByte}complete(){this.headByte=D}readArraySize(){let $=this.readHeadByte();switch($){case 220:return this.readU16();case 221:return this.readU32();default:if($<160)return $-144;else throw new Y(`Unrecognized array type byte: ${j($)}`)}}pushMapState($){if($>this.maxMapLength)throw new Y(`Max length exceeded: map length (${$}) > maxMapLengthLength (${this.maxMapLength})`);this.stack.pushMapState($)}pushArrayState($){if($>this.maxArrayLength)throw new Y(`Max length exceeded: array length (${$}) > maxArrayLength (${this.maxArrayLength})`);this.stack.pushArrayState($)}decodeString($,Z){if(!this.rawStrings||this.stateIsMapKey())return this.decodeUtf8String($,Z);return this.decodeBinary($,Z)}decodeUtf8String($,Z){if($>this.maxStrLength)throw new Y(`Max length exceeded: UTF-8 byte length (${$}) > maxStrLength (${this.maxStrLength})`);if(this.bytes.byteLength<this.pos+Z+$)throw L0;let Q=this.pos+Z,W;if(this.stateIsMapKey()&&this.keyDecoder?.canBeCached($))W=this.keyDecoder.decode(this.bytes,Q,$);else W=C0(this.bytes,Q,$);return this.pos+=Z+$,W}stateIsMapKey(){if(this.stack.length>0)return this.stack.top().type===L;return!1}decodeBinary($,Z){if($>this.maxBinLength)throw new Y(`Max length exceeded: bin length (${$}) > maxBinLength (${this.maxBinLength})`);if(!this.hasRemaining($+Z))throw L0;let Q=this.pos+Z,W=this.bytes.subarray(Q,Q+$);return this.pos+=Z+$,W}decodeExtension($,Z){if($>this.maxExtLength)throw new Y(`Max length exceeded: ext length (${$}) > maxExtLength (${this.maxExtLength})`);let Q=this.view.getInt8(this.pos+Z),W=this.decodeBinary($,Z+1);return this.extensionCodec.decode(W,Q,this.context)}lookU8(){return this.view.getUint8(this.pos)}lookU16(){return this.view.getUint16(this.pos)}lookU32(){return this.view.getUint32(this.pos)}readU8(){let $=this.view.getUint8(this.pos);return this.pos++,$}readI8(){let $=this.view.getInt8(this.pos);return this.pos++,$}readU16(){let $=this.view.getUint16(this.pos);return this.pos+=2,$}readI16(){let $=this.view.getInt16(this.pos);return this.pos+=2,$}readU32(){let $=this.view.getUint32(this.pos);return this.pos+=4,$}readI32(){let $=this.view.getInt32(this.pos);return this.pos+=4,$}readU64(){let $=B0(this.view,this.pos);return this.pos+=8,$}readI64(){let $=k(this.view,this.pos);return this.pos+=8,$}readU64AsBigInt(){let $=this.view.getBigUint64(this.pos);return this.pos+=8,$}readI64AsBigInt(){let $=this.view.getBigInt64(this.pos);return this.pos+=8,$}readF32(){let $=this.view.getFloat32(this.pos);return this.pos+=4,$}readF64(){let $=this.view.getFloat64(this.pos);return this.pos+=8,$}}var i="array",L="map_key",x0="map_value",z$=($)=>{if(typeof $==="string"||typeof $==="number")return $;throw new Y("The type of key must be string or number but "+typeof $)},D=-1,r,T$,L0,D$;var E0=J(()=>{m();I();D0();d();r=new DataView(new ArrayBuffer(0)),T$=new Uint8Array(r.buffer);try{r.getInt8(0)}catch($){if(!($ instanceof RangeError))throw Error("This module is not supported in the current JavaScript engine because DataView does not throw RangeError on out-of-bounds access")}L0=RangeError("Insufficient data"),D$=new u});function N($,Z){return new h(Z).decode($)}var k0=J(()=>{E0()});var g=J(()=>{T0();k0();m()});function s($){if(typeof $==="object"&&$!==null&&!Array.isArray($))return $;return{}}function b($){return Array.isArray($)?$:[]}function m0($){if(!($ instanceof Date))return null;let Z=new ArrayBuffer(8);return new DataView(Z).setFloat64(0,$.getTime()),new Uint8Array(Z)}function w0($){let Z=new DataView($.buffer,$.byteOffset,$.byteLength).getFloat64(0);return new Date(Z)}function n8($){return typeof $==="string"&&x$.has($)}var a,L$,x$;var j0=J(()=>{a=class a extends Error{code;constructor($,Z,Q){super(Z,Q);this.code=$,this.name=$}};L$={WorkflowAlreadyExistsError:!0,BulkDeleteRequiresTerminalWorkflowsError:!0,BulkOperationConfirmationError:!0,WorkflowTypeNotRegisteredForRecoveryError:!0,EngineCreateNameMismatchError:!0,EngineDisposedError:!0,WorkflowNotFoundError:!0,WorkflowNotRegisteredError:!0,WorkflowConcurrencyLimitExceededError:!0,WorkflowSuspendNotSupportedError:!0,ActivityResolutionError:!0,BranchTopologyChangedError:!0,PersistedDataIncompatibleError:!0,WorkflowTimeoutError:!0,HttpClientError:!0,WorkerProtocolIncompatibleError:!0,UpdateTimeoutError:!0,UpdateValidationError:!0,WorkflowTerminalError:!0,WorkflowBuilderError:!0,VersionMismatchError:!0,EffectReplayConflictError:!0,ReviewTimeoutError:!0,AtomicStateConflictError:!0,StandardSchemaValidationError:!0,ActivityReconciliationCapabilityError:!0,ActivityReconciliationConflictError:!0,ActivityReconciliationIndeterminateError:!0,DurableActivityScopeError:!0,DurableActivityUnsupportedError:!0,AsyncActivityTokenNotFoundError:!0,ActivityScheduleToCloseTimeoutError:!0,ActivityPerAttemptTimeoutError:!0,PayloadSizeExceededError:!0,StartOrSignalConflictError:!0,WorkflowTeardownPendingError:!0,IdempotencyKeyPurgedError:!0},x$=new Set(Object.keys(L$))});function o($){return h0.has($.constructor)}function g0($,Z){$.register({type:I$,encode(Q){if(typeof Q!=="object"||Q===null)return null;let W=h0.get(Q.constructor);if(W===void 0)return null;let G=Z(W.handlers.toJSON(Q),new Set);return M({tag:W.tag,data:G},{extensionCodec:$})},decode(Q){let W=N(Q,{extensionCodec:$});if(typeof W!=="object"||W===null||!("tag"in W))throw Error("Corrupt custom-serializer payload: missing tag.");let{tag:G,data:F}=W;if(typeof G!=="string")throw Error("Corrupt custom-serializer payload: tag is not a string.");let K=E$.get(G);if(K===void 0)throw Error(`No serializer registered for tag "${G}". Register it (with the same tag) before decoding a checkpoint that used it.`);return K.handlers.fromJSON(F)}})}var I$=100,h0,E$;var b0=J(()=>{g();h0=new Map,E$=new Map});function b$($,Z){if(Z<=200)return JSON.stringify($);return`${Z}-byte string starting ${JSON.stringify($.slice(0,120))}`}function y$($,Z){let Q=g$.encode($).byteLength;if(Q>y0)throw new e({source:$,flags:Z,sourceByteLength:Q,reason:`because source exceeds the ${y0}-byte limit.`});try{return new RegExp($,Z)}catch(W){let G=W instanceof Error?W.message:String(W);throw new e({source:$,flags:Z,sourceByteLength:Q,reason:`because ${G}`,cause:W})}}function v$($){return typeof $==="object"&&$!==null&&"__tag"in $&&$.__tag===f0}function $0($,Z){if(!B($,Z))return $;return S($,new Set)}function S($,Z){if($===void 0)return f$;if($===null||typeof $!=="object")return $;if(Z.has($))return $;Z.add($);try{return p$($,Z)}finally{Z.delete($)}}function p$($,Z){if(Array.isArray($))return c$($,Z);if($ instanceof Map)return l$($,Z);if($ instanceof Set)return n$($,Z);if(v0($))return $;return d$($,Z)}function c$($,Z){let Q=Array.from({length:$.length});for(let W=0;W<$.length;W++)Q[W]=S($[W],Z);return Q}function l$($,Z){let Q=new Map;for(let[W,G]of $)Q.set(S(W,Z),S(G,Z));return Q}function n$($,Z){let Q=new Set;for(let W of $)Q.add(S(W,Z));return Q}function v0($){return $ instanceof Date||$ instanceof RegExp||$ instanceof Error||$ instanceof Uint8Array||$ instanceof ArrayBuffer||o($)}function d$($,Z){let Q=$,W={};for(let G of Object.keys(Q))W[G]=S(Q[G],Z);return W}function B($,Z){if($===void 0)return!0;if($===null||typeof $!=="object")return!1;if(Z.has($))return!1;if(v0($))return!1;Z.add($);try{if(Array.isArray($))return u$($,Z);if($ instanceof Map)return i$($,Z);if($ instanceof Set)return r$($,Z);return s$($,Z)}finally{Z.delete($)}}function u$($,Z){for(let Q=0;Q<$.length;Q++)if(B($[Q],Z))return!0;return!1}function i$($,Z){for(let[Q,W]of $)if(B(Q,Z)||B(W,Z))return!0;return!1}function r$($,Z){for(let Q of $)if(B(Q,Z))return!0;return!1}function s$($,Z){let Q=$;for(let W of Object.keys(Q))if(B(Q[W],Z))return!0;return!1}var k$=1,t=2,m$=3,w$=4,j$=5,h$=6,y0=65535,g$,e,V,f0,f$;var p0=J(()=>{g();j0();b0();g$=new TextEncoder;e=class e extends a{extensionType;source;flags;sourceByteLength;constructor($){super("RegExpExtensionDecodeError",`RegExp extension type ${t} could not be decoded: source=${b$($.source,$.sourceByteLength)} flags=${JSON.stringify($.flags)} ${$.reason}`,$.cause===void 0?void 0:{cause:$.cause});this.extensionType=t,this.source=$.source,this.flags=$.flags,this.sourceByteLength=$.sourceByteLength}};V=new R;g0(V,$0);V.register({type:k$,encode:m0,decode:w0});V.register({type:t,encode($){if($ instanceof RegExp)return M({source:$.source,flags:$.flags});return null},decode($){let Z=s(N($)),Q=typeof Z.source==="string"?Z.source:"",W=typeof Z.flags==="string"?Z.flags:"";return y$(Q,W)}});V.register({type:m$,encode($){if($ instanceof Map){let Z=[...$.entries()];return M(Z,{extensionCodec:V})}return null},decode($){let Q=b(N($,{extensionCodec:V})).map((W)=>{let G=b(W);return[G[0],G[1]]});return new Map(Q)}});V.register({type:w$,encode($){if($ instanceof Set){let Z=[...$.values()];return M(Z,{extensionCodec:V})}return null},decode($){let Z=b(N($,{extensionCodec:V}));return new Set(Z)}});f0=Symbol("UndefinedSentinel"),f$=Object.freeze({__tag:f0});V.register({type:j$,encode($){if(v$($))return new Uint8Array(0);return null},decode(){return}});V.register({type:h$,encode($){if($ instanceof Error&&!o($))return M({name:$.name,message:$.message,stack:$.stack});return null},decode($){let Z=s(N($)),Q=typeof Z.name==="string"?Z.name:"Error",W=typeof Z.message==="string"?Z.message:"",G=typeof Z.stack==="string"?Z.stack:void 0,F=Error(W);if(F.name=Q,G!==void 0)F.stack=G;return F}})});function Z0($){let Z=$0($,new Set);return M(Z,{extensionCodec:V})}function Q0($){return N($,{extensionCodec:V})}var c0=J(()=>{g();p0()});function y($,Z=""){let Q=[];return x($,Z,Q,new Set),{valid:Q.length===0,errors:Q}}function a$($){let Z=Object.getPrototypeOf($);return o$(Z)&&!t$($)&&e$(Z)}function o$($){return $!==Object.prototype&&$!==null}function t$($){return Array.isArray($)||$ instanceof Date||$ instanceof RegExp||$ instanceof Map||$ instanceof Set||$ instanceof Error||$ instanceof Uint8Array||$ instanceof ArrayBuffer}function e$($){if(typeof $!=="object"||$===null)return!1;return Object.getOwnPropertyNames($).some((Q)=>{if(Q==="constructor")return!1;let W=Object.getOwnPropertyDescriptor($,Q);return W!==void 0&&typeof W.value==="function"})}function l0($,Z,Q,W){$.push({path:Z,value:Q,reason:W.reason,suggestion:W.suggestion})}function $6($){if(typeof $==="function")return{reason:"Functions cannot be serialized.",suggestion:"Move this into ctx.run() or reconstruct it on resume."};if(typeof $==="symbol")return{reason:"Symbols cannot be serialized.",suggestion:"Use a string identifier instead of a Symbol."};return null}function Z6($,Z){if($ instanceof WeakRef)return{reason:"WeakRef cannot be serialized.",suggestion:"Store the referenced value directly instead of using a WeakRef."};if($ instanceof WeakMap)return{reason:"WeakMap cannot be serialized.",suggestion:"Use a Map instead of a WeakMap."};if($ instanceof WeakSet)return{reason:"WeakSet cannot be serialized.",suggestion:"Use a Set instead of a WeakSet."};if(Z.has($))return{reason:"Circular reference detected.",suggestion:"Remove the circular reference or restructure the data."};if(a$($))return{reason:"Class instances with methods cannot be serialized.",suggestion:"Store only the data and reconstruct the instance."};return null}function Q6($){return $ instanceof Date||$ instanceof RegExp||$ instanceof Error||$ instanceof Uint8Array||$ instanceof ArrayBuffer}function W6($,Z,Q,W){for(let[G,F]of $){let K=String(G);x(F,Z?`${Z}.${K}`:K,Q,W)}}function G6($,Z,Q,W){let G=0;for(let F of $){let K=Z?`${Z}[${G}]`:`[${G}]`;x(F,K,Q,W),G++}}function q6($,Z,Q,W){for(let G=0;G<$.length;G++){let F=Z?`${Z}[${G}]`:`[${G}]`;x($[G],F,Q,W)}}function F6($,Z,Q,W){for(let G of Object.keys($)){let F=Z?`${Z}.${G}`:G;x($[G],F,Q,W)}}function x($,Z,Q,W){if($===null||$===void 0)return;let G=$6($);if(G){l0(Q,Z,$,G);return}if(typeof $!=="object")return;let F=Z6($,W);if(F){l0(Q,Z,$,F);return}W.add($);try{if(Q6($))return;if($ instanceof Map){W6($,Z,Q,W);return}if($ instanceof Set){G6($,Z,Q,W);return}if(Array.isArray($)){q6($,Z,Q,W);return}F6($,Z,Q,W)}finally{W.delete($)}}var n0=J(()=>{c0()});var d0=J(()=>{n0()});function f($){let Z=new WeakSet,Q=(W)=>{if(K6(W))return!0;if(H6(W))return!1;if(Array.isArray(W))return J6(W,Z,Q);if(typeof W==="object")return X6(W,Z,Q);return!1};return Q($)}function JZ($){if($===void 0)return null;if($ instanceof Error)return{name:$.name,message:$.message};if(f($))return $;try{let Z=JSON.stringify($);if(Z===void 0)return W0($);let Q=JSON.parse(Z);return f(Q)?Q:W0($)}catch{return W0($)}}function K6($){if($===null)return!0;if(typeof $==="number")return Number.isFinite($)&&!Object.is($,-0);return typeof $==="string"||typeof $==="boolean"}function H6($){let Z=typeof $;return Z==="undefined"||Z==="bigint"||Z==="function"||Z==="symbol"}function J6($,Z,Q){if(Z.has($))return!1;Z.add($);for(let W of $)if(!Q(W))return!1;return Z.delete($),!0}function X6($,Z,Q){if(!Y6($))return!1;if(Z.has($))return!1;Z.add($);for(let W of Object.values($))if(!Q(W))return!1;return Z.delete($),!0}function W0($){if(typeof $==="bigint")return $.toString();if(typeof $==="symbol")return $.description??null;return null}function Y6($){if(!$||typeof $!=="object")return!1;let Z=Reflect.getPrototypeOf($);return Z===Object.prototype||Z===null}function V6($){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 P6($){let Z={},Q=!1;for(let G of["gt","gte","lt","lte"]){let F=$[G];if(F===void 0)continue;if(typeof F!=="string")throw Error("deleteRange bounds must be strings");Z[G]=F,Q=!0}if(!Q)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let W=V6($.limit);if(W!==void 0)Z.limit=W;return Z}async function u0($,Z,Q){let W=P6(Q);if($.deleteRange)return $.deleteRange(Z,W);return K0($,Z,W)}var i0=()=>{};d0();i0();R0();class r0{#$;#Z;#Q;constructor($,Z,Q={}){this.#$=$,this.#Z=Z,this.#Q=Q.disposeUnderlyingStorage??!0}async get($){let Z=await this.#$.get($);return Z===null?null:this.#Z.decode(Z)}async put($,Z){await this.#$.put($,this.#Z.encode(Z))}async delete($){await this.#$.delete($)}async*scan($,Z){for await(let[Q,W]of this.#$.scan($,Z))yield[Q,this.#Z.decode(W)]}async batch($){z("batch operations",$.length),await this.#$.batch(this.#W($))}#W($){return $.map((Q)=>{if(Q.type==="put")return{type:"put",key:Q.key,value:this.#Z.encode(Q.value)};return Q})}#G($){return $.map((Z)=>({key:Z.key,expectedValue:Z.expectedValue===null?null:this.#Z.encode(Z.expectedValue)}))}async conditionalBatch($,Z){return N0(this.#$,this.#G($),this.#W(Z))}async has($){return Y0(this.#$,$)}async deletePrefix($){return M0(this.#$,$)}async deleteRange($,Z){return u0(this.#$,$,Z)}keys($,Z){return V0(this.#$,$,Z)}async count($){return P0(this.#$,$)}[Symbol.dispose](){if(!this.#Q)return;this.#$[Symbol.dispose]()}}function UZ($,Z,Q={}){return new r0($,Z,Q)}function M6($){try{if(!f($))throw TypeError("jsonCodec only supports JSON-serializable values.");let Z=JSON.stringify($);if(Z===void 0)throw TypeError("jsonCodec only supports JSON-serializable values.");return new TextEncoder().encode(Z)}catch(Z){throw TypeError("jsonCodec only supports JSON-serializable values.",{cause:Z})}}function N6($){let Z=y($);if(!Z.valid)throw TypeError(`msgpackCodec only supports structuredClone-compatible values. ${Z.errors[0]?.reason??""}`.trim());return Z0($)}function R6($){return JSON.parse(new TextDecoder().decode($))}function U6($){let Z=Q0($),Q=y(Z);if(!Q.valid)throw TypeError(`msgpackCodec decoded a non-cloneable value. ${Q.errors[0]?.reason??""}`.trim());return Z}function _Z($){return{encode(Z){return M6(Z)},decode(Z){let Q=R6(Z);return $?$(Q):Q}}}function CZ($){return{encode(Z){return N6(Z)},decode(Z){let Q=U6(Z);return $?$(Q):Q}}}export{UZ as withCodec,CZ as msgpackCodec,_Z as jsonCodec};
1
+ import {
2
+ decode as decodeMessagePack,
3
+ encode as encodeMessagePack,
4
+ validateCloneable
5
+ } from "../core/codec.js";
6
+ import { isJSONValue } from "../core/json.js";
7
+ import { storageDeleteRange } from "./delete-range.js";
8
+ import {
9
+ assertStorageBatchOperationCount,
10
+ storageConditionalBatch,
11
+ storageCount,
12
+ storageDeletePrefix,
13
+ storageHas,
14
+ storageKeys
15
+ } from "./interface.js";
16
+
17
+ class CodecStorage {
18
+ #storage;
19
+ #codec;
20
+ #disposeUnderlyingStorage;
21
+ constructor(storage, codec, options = {}) {
22
+ this.#storage = storage;
23
+ this.#codec = codec;
24
+ this.#disposeUnderlyingStorage = options.disposeUnderlyingStorage ?? !0;
25
+ }
26
+ async get(key) {
27
+ const value = await this.#storage.get(key);
28
+ return value === null ? null : this.#codec.decode(value);
29
+ }
30
+ async put(key, value) {
31
+ await this.#storage.put(key, this.#codec.encode(value));
32
+ }
33
+ async delete(key) {
34
+ await this.#storage.delete(key);
35
+ }
36
+ async* scan(prefix, options) {
37
+ for await (const [key, value] of this.#storage.scan(prefix, options))
38
+ yield [key, this.#codec.decode(value)];
39
+ }
40
+ async batch(operations) {
41
+ assertStorageBatchOperationCount("batch operations", operations.length);
42
+ await this.#storage.batch(this.#encodeOperations(operations));
43
+ }
44
+ #encodeOperations(operations) {
45
+ return operations.map((operation) => {
46
+ if (operation.type === "put")
47
+ return {
48
+ type: "put",
49
+ key: operation.key,
50
+ value: this.#codec.encode(operation.value)
51
+ };
52
+ return operation;
53
+ });
54
+ }
55
+ #encodeConditions(conditions) {
56
+ return conditions.map((condition) => ({
57
+ key: condition.key,
58
+ expectedValue: condition.expectedValue === null ? null : this.#codec.encode(condition.expectedValue)
59
+ }));
60
+ }
61
+ async conditionalBatch(conditions, operations) {
62
+ return storageConditionalBatch(this.#storage, this.#encodeConditions(conditions), this.#encodeOperations(operations));
63
+ }
64
+ async has(key) {
65
+ return storageHas(this.#storage, key);
66
+ }
67
+ async deletePrefix(prefix) {
68
+ return storageDeletePrefix(this.#storage, prefix);
69
+ }
70
+ async deleteRange(prefix, options) {
71
+ return storageDeleteRange(this.#storage, prefix, options);
72
+ }
73
+ keys(prefix, options) {
74
+ return storageKeys(this.#storage, prefix, options);
75
+ }
76
+ async count(prefix) {
77
+ return storageCount(this.#storage, prefix);
78
+ }
79
+ [Symbol.dispose]() {
80
+ if (!this.#disposeUnderlyingStorage)
81
+ return;
82
+ this.#storage[Symbol.dispose]();
83
+ }
84
+ }
85
+ export function withCodec(storage, codec, options = {}) {
86
+ return new CodecStorage(storage, codec, options);
87
+ }
88
+ function encodeJsonValue(value) {
89
+ try {
90
+ if (!isJSONValue(value))
91
+ throw TypeError("jsonCodec only supports JSON-serializable values.");
92
+ const serializedValue = JSON.stringify(value);
93
+ if (serializedValue === void 0)
94
+ throw TypeError("jsonCodec only supports JSON-serializable values.");
95
+ return new TextEncoder().encode(serializedValue);
96
+ } catch (error) {
97
+ throw TypeError("jsonCodec only supports JSON-serializable values.", {
98
+ cause: error
99
+ });
100
+ }
101
+ }
102
+ function encodeMessagePackValue(value) {
103
+ const validationResult = validateCloneable(value);
104
+ if (!validationResult.valid)
105
+ throw TypeError(`msgpackCodec only supports structuredClone-compatible values. ${validationResult.errors[0]?.reason ?? ""}`.trim());
106
+ return encodeMessagePack(value);
107
+ }
108
+ function decodeJsonValue(bytes) {
109
+ return JSON.parse(new TextDecoder().decode(bytes));
110
+ }
111
+ function decodeMessagePackValue(bytes) {
112
+ const decodedValue = decodeMessagePack(bytes), validationResult = validateCloneable(decodedValue);
113
+ if (!validationResult.valid)
114
+ throw TypeError(`msgpackCodec decoded a non-cloneable value. ${validationResult.errors[0]?.reason ?? ""}`.trim());
115
+ return decodedValue;
116
+ }
117
+ export function jsonCodec(parse) {
118
+ return {
119
+ encode(value) {
120
+ return encodeJsonValue(value);
121
+ },
122
+ decode(bytes) {
123
+ const decodedValue = decodeJsonValue(bytes);
124
+ return parse ? parse(decodedValue) : decodedValue;
125
+ }
126
+ };
127
+ }
128
+ export function msgpackCodec(parse) {
129
+ return {
130
+ encode(value) {
131
+ return encodeMessagePackValue(value);
132
+ },
133
+ decode(bytes) {
134
+ const decodedValue = decodeMessagePackValue(bytes);
135
+ return parse ? parse(decodedValue) : decodedValue;
136
+ }
137
+ };
138
+ }