@rivetkit/workflow-engine 0.0.0-main.72cbc7c → 0.0.0-main.78336a1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/schemas/v1.ts +25 -0
- package/dist/tsup/{chunk-SFJQFMCW.cjs → chunk-32422MOM.cjs} +221 -93
- package/dist/tsup/chunk-32422MOM.cjs.map +1 -0
- package/dist/tsup/{chunk-CIDHCIH7.js → chunk-TVRZA5O5.js} +221 -93
- package/dist/tsup/chunk-TVRZA5O5.js.map +1 -0
- package/dist/tsup/index.cjs +2 -2
- package/dist/tsup/index.cjs.map +1 -1
- package/dist/tsup/index.d.cts +50 -13
- package/dist/tsup/index.d.ts +50 -13
- package/dist/tsup/index.js +1 -1
- package/dist/tsup/testing.cjs +29 -23
- package/dist/tsup/testing.cjs.map +1 -1
- package/dist/tsup/testing.d.cts +1 -0
- package/dist/tsup/testing.d.ts +1 -0
- package/dist/tsup/testing.js +7 -1
- package/dist/tsup/testing.js.map +1 -1
- package/package.json +6 -1
- package/schemas/serde.ts +17 -3
- package/schemas/v1.bare +10 -1
- package/schemas/versioned.ts +1 -0
- package/src/context.ts +140 -49
- package/src/driver.ts +12 -0
- package/src/index.ts +41 -21
- package/src/location.ts +1 -1
- package/src/storage.ts +50 -16
- package/src/testing.ts +7 -0
- package/src/types.ts +20 -3
- package/dist/tsup/chunk-CIDHCIH7.js.map +0 -1
- package/dist/tsup/chunk-SFJQFMCW.cjs.map +0 -1
package/dist/tsup/index.cjs
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
var
|
|
46
|
+
var _chunk32422MOMcjs = require('./chunk-32422MOM.cjs');
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
|
|
@@ -89,5 +89,5 @@ var _chunkSFJQFMCWcjs = require('./chunk-SFJQFMCW.cjs');
|
|
|
89
89
|
|
|
90
90
|
|
|
91
91
|
|
|
92
|
-
exports.CancelledError =
|
|
92
|
+
exports.CancelledError = _chunk32422MOMcjs.CancelledError; exports.CriticalError = _chunk32422MOMcjs.CriticalError; exports.DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL = _chunk32422MOMcjs.DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL; exports.DEFAULT_MAX_RETRIES = _chunk32422MOMcjs.DEFAULT_MAX_RETRIES; exports.DEFAULT_RETRY_BACKOFF_BASE = _chunk32422MOMcjs.DEFAULT_RETRY_BACKOFF_BASE; exports.DEFAULT_RETRY_BACKOFF_MAX = _chunk32422MOMcjs.DEFAULT_RETRY_BACKOFF_MAX; exports.DEFAULT_STEP_TIMEOUT = _chunk32422MOMcjs.DEFAULT_STEP_TIMEOUT; exports.EntryInProgressError = _chunk32422MOMcjs.EntryInProgressError; exports.EvictedError = _chunk32422MOMcjs.EvictedError; exports.HistoryDivergedError = _chunk32422MOMcjs.HistoryDivergedError; exports.JoinError = _chunk32422MOMcjs.JoinError; exports.Loop = _chunk32422MOMcjs.Loop; exports.MessageWaitError = _chunk32422MOMcjs.MessageWaitError; exports.RaceError = _chunk32422MOMcjs.RaceError; exports.RollbackCheckpointError = _chunk32422MOMcjs.RollbackCheckpointError; exports.RollbackError = _chunk32422MOMcjs.RollbackError; exports.SleepError = _chunk32422MOMcjs.SleepError; exports.StepExhaustedError = _chunk32422MOMcjs.StepExhaustedError; exports.StepFailedError = _chunk32422MOMcjs.StepFailedError; exports.WorkflowContextImpl = _chunk32422MOMcjs.WorkflowContextImpl; exports.appendLoopIteration = _chunk32422MOMcjs.appendLoopIteration; exports.appendName = _chunk32422MOMcjs.appendName; exports.createEntry = _chunk32422MOMcjs.createEntry; exports.createHistorySnapshot = _chunk32422MOMcjs.createHistorySnapshot; exports.createStorage = _chunk32422MOMcjs.createStorage; exports.deleteEntriesWithPrefix = _chunk32422MOMcjs.deleteEntriesWithPrefix; exports.emptyLocation = _chunk32422MOMcjs.emptyLocation; exports.extractErrorInfo = _chunk32422MOMcjs.extractErrorInfo; exports.flush = _chunk32422MOMcjs.flush; exports.generateId = _chunk32422MOMcjs.generateId; exports.getEntry = _chunk32422MOMcjs.getEntry; exports.getOrCreateMetadata = _chunk32422MOMcjs.getOrCreateMetadata; exports.isLocationPrefix = _chunk32422MOMcjs.isLocationPrefix; exports.isLoopIterationMarker = _chunk32422MOMcjs.isLoopIterationMarker; exports.loadMetadata = _chunk32422MOMcjs.loadMetadata; exports.loadStorage = _chunk32422MOMcjs.loadStorage; exports.locationToKey = _chunk32422MOMcjs.locationToKey; exports.locationsEqual = _chunk32422MOMcjs.locationsEqual; exports.parentLocation = _chunk32422MOMcjs.parentLocation; exports.registerName = _chunk32422MOMcjs.registerName; exports.replayWorkflowFromStep = _chunk32422MOMcjs.replayWorkflowFromStep; exports.resolveName = _chunk32422MOMcjs.resolveName; exports.runWorkflow = _chunk32422MOMcjs.runWorkflow; exports.setEntry = _chunk32422MOMcjs.setEntry;
|
|
93
93
|
//# sourceMappingURL=index.cjs.map
|
package/dist/tsup/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/actors/actors/rivetkit-typescript/packages/workflow-engine/dist/tsup/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,qpFAAC","file":"/home/runner/work/actors/actors/rivetkit-typescript/packages/workflow-engine/dist/tsup/index.cjs"}
|
package/dist/tsup/index.d.cts
CHANGED
|
@@ -101,10 +101,20 @@ interface RemovedEntry {
|
|
|
101
101
|
originalType: EntryKindType;
|
|
102
102
|
originalName?: string;
|
|
103
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Version check entry data - records which version of a code path this
|
|
106
|
+
* workflow instance is pinned to at a given location.
|
|
107
|
+
*/
|
|
108
|
+
interface VersionCheckEntry {
|
|
109
|
+
/** The version this instance resolved to at this location. */
|
|
110
|
+
resolved: number;
|
|
111
|
+
/** The `latest` value seen when this entry was first resolved (diagnostics). */
|
|
112
|
+
latest: number;
|
|
113
|
+
}
|
|
104
114
|
/**
|
|
105
115
|
* All possible entry kind types.
|
|
106
116
|
*/
|
|
107
|
-
type EntryKindType = "step" | "loop" | "sleep" | "message" | "rollback_checkpoint" | "join" | "race" | "removed";
|
|
117
|
+
type EntryKindType = "step" | "loop" | "sleep" | "message" | "rollback_checkpoint" | "join" | "race" | "removed" | "version_check";
|
|
108
118
|
/**
|
|
109
119
|
* Type-specific entry data.
|
|
110
120
|
*/
|
|
@@ -132,6 +142,9 @@ type EntryKind = {
|
|
|
132
142
|
} | {
|
|
133
143
|
type: "removed";
|
|
134
144
|
data: RemovedEntry;
|
|
145
|
+
} | {
|
|
146
|
+
type: "version_check";
|
|
147
|
+
data: VersionCheckEntry;
|
|
135
148
|
};
|
|
136
149
|
/**
|
|
137
150
|
* An entry in the workflow history.
|
|
@@ -345,6 +358,8 @@ interface StepConfig<T> {
|
|
|
345
358
|
retryBackoffMax?: number;
|
|
346
359
|
/** Timeout in ms for step execution (default: 30000). Set to 0 to disable. */
|
|
347
360
|
timeout?: number;
|
|
361
|
+
/** If true, step timeouts retry like any other error instead of failing immediately as critical. Default: false. */
|
|
362
|
+
retryOnTimeout?: boolean;
|
|
348
363
|
}
|
|
349
364
|
type TryStepCatchKind = "critical" | "timeout" | "exhausted" | "rollback";
|
|
350
365
|
interface TryStepFailure {
|
|
@@ -398,7 +413,7 @@ type LoopResult<S, T> = {
|
|
|
398
413
|
* Stateless loops (state = undefined) may return void/undefined, which is treated as
|
|
399
414
|
* `Loop.continue(undefined)`.
|
|
400
415
|
*/
|
|
401
|
-
type LoopIterationResult<S, T> = Promise<LoopResult<S, T> | (S extends undefined ?
|
|
416
|
+
type LoopIterationResult<S, T> = Promise<LoopResult<S, T> | (S extends undefined ? undefined : never)>;
|
|
402
417
|
/**
|
|
403
418
|
* Configuration for a loop.
|
|
404
419
|
*/
|
|
@@ -456,6 +471,7 @@ interface WorkflowContextInterface {
|
|
|
456
471
|
value: T;
|
|
457
472
|
}>;
|
|
458
473
|
removed(name: string, originalType: EntryKindType): Promise<void>;
|
|
474
|
+
getVersion(name: string, latest: number): Promise<number>;
|
|
459
475
|
isEvicted(): boolean;
|
|
460
476
|
}
|
|
461
477
|
/**
|
|
@@ -555,6 +571,11 @@ interface KVWrite {
|
|
|
555
571
|
* See architecture.md "Isolation Model" for details.
|
|
556
572
|
*/
|
|
557
573
|
interface EngineDriver {
|
|
574
|
+
/**
|
|
575
|
+
* Requires each logical storage flush to reach `batch` as one indivisible
|
|
576
|
+
* unit. The driver must reject an oversized unit instead of splitting it.
|
|
577
|
+
*/
|
|
578
|
+
readonly atomicBatch?: boolean;
|
|
558
579
|
/**
|
|
559
580
|
* Get a value by key.
|
|
560
581
|
* Returns null if the key doesn't exist.
|
|
@@ -568,6 +589,11 @@ interface EngineDriver {
|
|
|
568
589
|
* Delete a key.
|
|
569
590
|
*/
|
|
570
591
|
delete(key: Uint8Array): Promise<void>;
|
|
592
|
+
/**
|
|
593
|
+
* Batch delete multiple keys in a single operation.
|
|
594
|
+
* Should be atomic if possible.
|
|
595
|
+
*/
|
|
596
|
+
batchDelete(keys: Uint8Array[]): Promise<void>;
|
|
571
597
|
/**
|
|
572
598
|
* Delete all keys with a given prefix.
|
|
573
599
|
*/
|
|
@@ -697,12 +723,12 @@ declare class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
697
723
|
*/
|
|
698
724
|
evict(): void;
|
|
699
725
|
/**
|
|
700
|
-
* Wait for
|
|
701
|
-
*
|
|
702
|
-
*
|
|
703
|
-
*
|
|
726
|
+
* Wait for `ms`, rejecting early with EvictedError if the workflow is
|
|
727
|
+
* evicted. Both the timer and the abort listener are torn down on either
|
|
728
|
+
* outcome, so a completed sleep never leaves a dangling listener on the
|
|
729
|
+
* long-lived run abort signal.
|
|
704
730
|
*/
|
|
705
|
-
|
|
731
|
+
private sleepOrEvict;
|
|
706
732
|
step<T>(nameOrConfig: string | StepConfig<T>, run?: () => Promise<T>): Promise<T>;
|
|
707
733
|
tryStep<T>(nameOrConfig: string | TryStepConfig<T>, run?: () => Promise<T>): Promise<TryStepResult<T>>;
|
|
708
734
|
try<T>(nameOrConfig: string | TryBlockConfig<T>, run?: (ctx: WorkflowContextInterface) => Promise<T>): Promise<TryBlockResult<T>>;
|
|
@@ -713,7 +739,9 @@ declare class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
713
739
|
*
|
|
714
740
|
* Note: This does NOT cancel the underlying operation. JavaScript Promises
|
|
715
741
|
* cannot be cancelled once started. When a timeout occurs:
|
|
716
|
-
* - The step is
|
|
742
|
+
* - The step is rejected with StepTimeoutError. By default this is treated
|
|
743
|
+
* as a critical failure with no retry. Set retryOnTimeout: true on the
|
|
744
|
+
* step config to retry timeouts like any other error.
|
|
717
745
|
* - The underlying async operation continues running in the background
|
|
718
746
|
* - Any side effects from the operation may still occur
|
|
719
747
|
*
|
|
@@ -777,8 +805,22 @@ declare class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
777
805
|
private executeRace;
|
|
778
806
|
removed(name: string, originalType: EntryKindType): Promise<void>;
|
|
779
807
|
private executeRemoved;
|
|
808
|
+
getVersion(name: string, latest: number): Promise<number>;
|
|
809
|
+
private executeGetVersion;
|
|
810
|
+
/**
|
|
811
|
+
* Returns true if any history entry under the current location scope
|
|
812
|
+
* (other than `excludeKey`) has not yet been visited this run. Used by
|
|
813
|
+
* getVersion to detect an old in-flight instance whose scope was already
|
|
814
|
+
* executed by code that predates a version gate.
|
|
815
|
+
*/
|
|
816
|
+
private hasUnvisitedUnderCurrentScope;
|
|
780
817
|
}
|
|
781
818
|
|
|
819
|
+
/**
|
|
820
|
+
* Extract structured error information from an error.
|
|
821
|
+
*/
|
|
822
|
+
declare function extractErrorInfo(error: unknown): WorkflowError;
|
|
823
|
+
|
|
782
824
|
/**
|
|
783
825
|
* Thrown from steps to prevent retry.
|
|
784
826
|
* Use this when an error is unrecoverable and retrying would be pointless.
|
|
@@ -883,11 +925,6 @@ declare class EntryInProgressError extends Error {
|
|
|
883
925
|
constructor();
|
|
884
926
|
}
|
|
885
927
|
|
|
886
|
-
/**
|
|
887
|
-
* Extract structured error information from an error.
|
|
888
|
-
*/
|
|
889
|
-
declare function extractErrorInfo(error: unknown): WorkflowError;
|
|
890
|
-
|
|
891
928
|
/**
|
|
892
929
|
* Check if a path segment is a loop iteration marker.
|
|
893
930
|
*/
|
package/dist/tsup/index.d.ts
CHANGED
|
@@ -101,10 +101,20 @@ interface RemovedEntry {
|
|
|
101
101
|
originalType: EntryKindType;
|
|
102
102
|
originalName?: string;
|
|
103
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Version check entry data - records which version of a code path this
|
|
106
|
+
* workflow instance is pinned to at a given location.
|
|
107
|
+
*/
|
|
108
|
+
interface VersionCheckEntry {
|
|
109
|
+
/** The version this instance resolved to at this location. */
|
|
110
|
+
resolved: number;
|
|
111
|
+
/** The `latest` value seen when this entry was first resolved (diagnostics). */
|
|
112
|
+
latest: number;
|
|
113
|
+
}
|
|
104
114
|
/**
|
|
105
115
|
* All possible entry kind types.
|
|
106
116
|
*/
|
|
107
|
-
type EntryKindType = "step" | "loop" | "sleep" | "message" | "rollback_checkpoint" | "join" | "race" | "removed";
|
|
117
|
+
type EntryKindType = "step" | "loop" | "sleep" | "message" | "rollback_checkpoint" | "join" | "race" | "removed" | "version_check";
|
|
108
118
|
/**
|
|
109
119
|
* Type-specific entry data.
|
|
110
120
|
*/
|
|
@@ -132,6 +142,9 @@ type EntryKind = {
|
|
|
132
142
|
} | {
|
|
133
143
|
type: "removed";
|
|
134
144
|
data: RemovedEntry;
|
|
145
|
+
} | {
|
|
146
|
+
type: "version_check";
|
|
147
|
+
data: VersionCheckEntry;
|
|
135
148
|
};
|
|
136
149
|
/**
|
|
137
150
|
* An entry in the workflow history.
|
|
@@ -345,6 +358,8 @@ interface StepConfig<T> {
|
|
|
345
358
|
retryBackoffMax?: number;
|
|
346
359
|
/** Timeout in ms for step execution (default: 30000). Set to 0 to disable. */
|
|
347
360
|
timeout?: number;
|
|
361
|
+
/** If true, step timeouts retry like any other error instead of failing immediately as critical. Default: false. */
|
|
362
|
+
retryOnTimeout?: boolean;
|
|
348
363
|
}
|
|
349
364
|
type TryStepCatchKind = "critical" | "timeout" | "exhausted" | "rollback";
|
|
350
365
|
interface TryStepFailure {
|
|
@@ -398,7 +413,7 @@ type LoopResult<S, T> = {
|
|
|
398
413
|
* Stateless loops (state = undefined) may return void/undefined, which is treated as
|
|
399
414
|
* `Loop.continue(undefined)`.
|
|
400
415
|
*/
|
|
401
|
-
type LoopIterationResult<S, T> = Promise<LoopResult<S, T> | (S extends undefined ?
|
|
416
|
+
type LoopIterationResult<S, T> = Promise<LoopResult<S, T> | (S extends undefined ? undefined : never)>;
|
|
402
417
|
/**
|
|
403
418
|
* Configuration for a loop.
|
|
404
419
|
*/
|
|
@@ -456,6 +471,7 @@ interface WorkflowContextInterface {
|
|
|
456
471
|
value: T;
|
|
457
472
|
}>;
|
|
458
473
|
removed(name: string, originalType: EntryKindType): Promise<void>;
|
|
474
|
+
getVersion(name: string, latest: number): Promise<number>;
|
|
459
475
|
isEvicted(): boolean;
|
|
460
476
|
}
|
|
461
477
|
/**
|
|
@@ -555,6 +571,11 @@ interface KVWrite {
|
|
|
555
571
|
* See architecture.md "Isolation Model" for details.
|
|
556
572
|
*/
|
|
557
573
|
interface EngineDriver {
|
|
574
|
+
/**
|
|
575
|
+
* Requires each logical storage flush to reach `batch` as one indivisible
|
|
576
|
+
* unit. The driver must reject an oversized unit instead of splitting it.
|
|
577
|
+
*/
|
|
578
|
+
readonly atomicBatch?: boolean;
|
|
558
579
|
/**
|
|
559
580
|
* Get a value by key.
|
|
560
581
|
* Returns null if the key doesn't exist.
|
|
@@ -568,6 +589,11 @@ interface EngineDriver {
|
|
|
568
589
|
* Delete a key.
|
|
569
590
|
*/
|
|
570
591
|
delete(key: Uint8Array): Promise<void>;
|
|
592
|
+
/**
|
|
593
|
+
* Batch delete multiple keys in a single operation.
|
|
594
|
+
* Should be atomic if possible.
|
|
595
|
+
*/
|
|
596
|
+
batchDelete(keys: Uint8Array[]): Promise<void>;
|
|
571
597
|
/**
|
|
572
598
|
* Delete all keys with a given prefix.
|
|
573
599
|
*/
|
|
@@ -697,12 +723,12 @@ declare class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
697
723
|
*/
|
|
698
724
|
evict(): void;
|
|
699
725
|
/**
|
|
700
|
-
* Wait for
|
|
701
|
-
*
|
|
702
|
-
*
|
|
703
|
-
*
|
|
726
|
+
* Wait for `ms`, rejecting early with EvictedError if the workflow is
|
|
727
|
+
* evicted. Both the timer and the abort listener are torn down on either
|
|
728
|
+
* outcome, so a completed sleep never leaves a dangling listener on the
|
|
729
|
+
* long-lived run abort signal.
|
|
704
730
|
*/
|
|
705
|
-
|
|
731
|
+
private sleepOrEvict;
|
|
706
732
|
step<T>(nameOrConfig: string | StepConfig<T>, run?: () => Promise<T>): Promise<T>;
|
|
707
733
|
tryStep<T>(nameOrConfig: string | TryStepConfig<T>, run?: () => Promise<T>): Promise<TryStepResult<T>>;
|
|
708
734
|
try<T>(nameOrConfig: string | TryBlockConfig<T>, run?: (ctx: WorkflowContextInterface) => Promise<T>): Promise<TryBlockResult<T>>;
|
|
@@ -713,7 +739,9 @@ declare class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
713
739
|
*
|
|
714
740
|
* Note: This does NOT cancel the underlying operation. JavaScript Promises
|
|
715
741
|
* cannot be cancelled once started. When a timeout occurs:
|
|
716
|
-
* - The step is
|
|
742
|
+
* - The step is rejected with StepTimeoutError. By default this is treated
|
|
743
|
+
* as a critical failure with no retry. Set retryOnTimeout: true on the
|
|
744
|
+
* step config to retry timeouts like any other error.
|
|
717
745
|
* - The underlying async operation continues running in the background
|
|
718
746
|
* - Any side effects from the operation may still occur
|
|
719
747
|
*
|
|
@@ -777,8 +805,22 @@ declare class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
777
805
|
private executeRace;
|
|
778
806
|
removed(name: string, originalType: EntryKindType): Promise<void>;
|
|
779
807
|
private executeRemoved;
|
|
808
|
+
getVersion(name: string, latest: number): Promise<number>;
|
|
809
|
+
private executeGetVersion;
|
|
810
|
+
/**
|
|
811
|
+
* Returns true if any history entry under the current location scope
|
|
812
|
+
* (other than `excludeKey`) has not yet been visited this run. Used by
|
|
813
|
+
* getVersion to detect an old in-flight instance whose scope was already
|
|
814
|
+
* executed by code that predates a version gate.
|
|
815
|
+
*/
|
|
816
|
+
private hasUnvisitedUnderCurrentScope;
|
|
780
817
|
}
|
|
781
818
|
|
|
819
|
+
/**
|
|
820
|
+
* Extract structured error information from an error.
|
|
821
|
+
*/
|
|
822
|
+
declare function extractErrorInfo(error: unknown): WorkflowError;
|
|
823
|
+
|
|
782
824
|
/**
|
|
783
825
|
* Thrown from steps to prevent retry.
|
|
784
826
|
* Use this when an error is unrecoverable and retrying would be pointless.
|
|
@@ -883,11 +925,6 @@ declare class EntryInProgressError extends Error {
|
|
|
883
925
|
constructor();
|
|
884
926
|
}
|
|
885
927
|
|
|
886
|
-
/**
|
|
887
|
-
* Extract structured error information from an error.
|
|
888
|
-
*/
|
|
889
|
-
declare function extractErrorInfo(error: unknown): WorkflowError;
|
|
890
|
-
|
|
891
928
|
/**
|
|
892
929
|
* Check if a path segment is a loop iteration marker.
|
|
893
930
|
*/
|
package/dist/tsup/index.js
CHANGED
package/dist/tsup/testing.cjs
CHANGED
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
|
|
50
|
-
var
|
|
50
|
+
var _chunk32422MOMcjs = require('./chunk-32422MOM.cjs');
|
|
51
51
|
|
|
52
52
|
// src/testing.ts
|
|
53
53
|
var InMemoryWorkflowMessageDriver = class {
|
|
@@ -97,7 +97,7 @@ var InMemoryWorkflowMessageDriver = class {
|
|
|
97
97
|
}
|
|
98
98
|
async waitForMessages(messageNames, abortSignal) {
|
|
99
99
|
if (abortSignal.aborted) {
|
|
100
|
-
throw new (0,
|
|
100
|
+
throw new (0, _chunk32422MOMcjs.EvictedError)();
|
|
101
101
|
}
|
|
102
102
|
const nameSet = messageNames.length > 0 ? new Set(messageNames) : void 0;
|
|
103
103
|
if (this.#messages.some(
|
|
@@ -118,7 +118,7 @@ var InMemoryWorkflowMessageDriver = class {
|
|
|
118
118
|
},
|
|
119
119
|
abortSignal,
|
|
120
120
|
onAbort: () => {
|
|
121
|
-
waiter.reject(new (0,
|
|
121
|
+
waiter.reject(new (0, _chunk32422MOMcjs.EvictedError)());
|
|
122
122
|
}
|
|
123
123
|
};
|
|
124
124
|
abortSignal.addEventListener("abort", waiter.onAbort, {
|
|
@@ -158,56 +158,62 @@ var InMemoryDriver = (_class = class {constructor() { _class.prototype.__init.ca
|
|
|
158
158
|
__init4() {this.workerPollInterval = 100}
|
|
159
159
|
__init5() {this.messageDriver = this.#inMemoryMessageDriver}
|
|
160
160
|
async get(key) {
|
|
161
|
-
await
|
|
162
|
-
const entry = this.kv.get(
|
|
161
|
+
await _chunk32422MOMcjs.sleep.call(void 0, this.latency);
|
|
162
|
+
const entry = this.kv.get(_chunk32422MOMcjs.keyToHex.call(void 0, key));
|
|
163
163
|
return _nullishCoalesce((entry == null ? void 0 : entry.value), () => ( null));
|
|
164
164
|
}
|
|
165
165
|
async set(key, value) {
|
|
166
|
-
await
|
|
167
|
-
this.kv.set(
|
|
166
|
+
await _chunk32422MOMcjs.sleep.call(void 0, this.latency);
|
|
167
|
+
this.kv.set(_chunk32422MOMcjs.keyToHex.call(void 0, key), { key, value });
|
|
168
168
|
}
|
|
169
169
|
async delete(key) {
|
|
170
|
-
await
|
|
171
|
-
this.kv.delete(
|
|
170
|
+
await _chunk32422MOMcjs.sleep.call(void 0, this.latency);
|
|
171
|
+
this.kv.delete(_chunk32422MOMcjs.keyToHex.call(void 0, key));
|
|
172
|
+
}
|
|
173
|
+
async batchDelete(keys) {
|
|
174
|
+
await _chunk32422MOMcjs.sleep.call(void 0, this.latency);
|
|
175
|
+
for (const key of keys) {
|
|
176
|
+
this.kv.delete(_chunk32422MOMcjs.keyToHex.call(void 0, key));
|
|
177
|
+
}
|
|
172
178
|
}
|
|
173
179
|
async deletePrefix(prefix) {
|
|
174
|
-
await
|
|
180
|
+
await _chunk32422MOMcjs.sleep.call(void 0, this.latency);
|
|
175
181
|
for (const [hexKey, entry] of this.kv) {
|
|
176
|
-
if (
|
|
182
|
+
if (_chunk32422MOMcjs.keyStartsWith.call(void 0, entry.key, prefix)) {
|
|
177
183
|
this.kv.delete(hexKey);
|
|
178
184
|
}
|
|
179
185
|
}
|
|
180
186
|
}
|
|
181
187
|
async deleteRange(start, end) {
|
|
182
|
-
await
|
|
188
|
+
await _chunk32422MOMcjs.sleep.call(void 0, this.latency);
|
|
183
189
|
for (const [hexKey, entry] of this.kv) {
|
|
184
|
-
if (
|
|
190
|
+
if (_chunk32422MOMcjs.compareKeys.call(void 0, entry.key, start) >= 0 && _chunk32422MOMcjs.compareKeys.call(void 0, entry.key, end) < 0) {
|
|
185
191
|
this.kv.delete(hexKey);
|
|
186
192
|
}
|
|
187
193
|
}
|
|
188
194
|
}
|
|
189
195
|
async list(prefix) {
|
|
190
|
-
await
|
|
196
|
+
await _chunk32422MOMcjs.sleep.call(void 0, this.latency);
|
|
191
197
|
const results = [];
|
|
192
198
|
for (const entry of this.kv.values()) {
|
|
193
|
-
if (
|
|
199
|
+
if (_chunk32422MOMcjs.keyStartsWith.call(void 0, entry.key, prefix)) {
|
|
194
200
|
results.push({ key: entry.key, value: entry.value });
|
|
195
201
|
}
|
|
196
202
|
}
|
|
197
|
-
return results.sort((a, b) =>
|
|
203
|
+
return results.sort((a, b) => _chunk32422MOMcjs.compareKeys.call(void 0, a.key, b.key));
|
|
198
204
|
}
|
|
199
205
|
async batch(writes) {
|
|
200
|
-
await
|
|
206
|
+
await _chunk32422MOMcjs.sleep.call(void 0, this.latency);
|
|
201
207
|
for (const { key, value } of writes) {
|
|
202
|
-
this.kv.set(
|
|
208
|
+
this.kv.set(_chunk32422MOMcjs.keyToHex.call(void 0, key), { key, value });
|
|
203
209
|
}
|
|
204
210
|
}
|
|
205
211
|
async setAlarm(workflowId, wakeAt) {
|
|
206
|
-
await
|
|
212
|
+
await _chunk32422MOMcjs.sleep.call(void 0, this.latency);
|
|
207
213
|
this.alarms.set(workflowId, wakeAt);
|
|
208
214
|
}
|
|
209
215
|
async clearAlarm(workflowId) {
|
|
210
|
-
await
|
|
216
|
+
await _chunk32422MOMcjs.sleep.call(void 0, this.latency);
|
|
211
217
|
this.alarms.delete(workflowId);
|
|
212
218
|
}
|
|
213
219
|
async waitForMessages(messageNames, abortSignal) {
|
|
@@ -218,7 +224,7 @@ var InMemoryDriver = (_class = class {constructor() { _class.prototype.__init.ca
|
|
|
218
224
|
}
|
|
219
225
|
while (true) {
|
|
220
226
|
if (abortSignal.aborted) {
|
|
221
|
-
throw new (0,
|
|
227
|
+
throw new (0, _chunk32422MOMcjs.EvictedError)();
|
|
222
228
|
}
|
|
223
229
|
const messages = await this.messageDriver.receiveMessages({
|
|
224
230
|
names: messageNames.length > 0 ? messageNames : void 0,
|
|
@@ -228,7 +234,7 @@ var InMemoryDriver = (_class = class {constructor() { _class.prototype.__init.ca
|
|
|
228
234
|
if (messages.length > 0) {
|
|
229
235
|
return;
|
|
230
236
|
}
|
|
231
|
-
await
|
|
237
|
+
await _chunk32422MOMcjs.sleep.call(void 0, Math.max(1, this.latency));
|
|
232
238
|
}
|
|
233
239
|
}
|
|
234
240
|
/**
|
|
@@ -324,5 +330,5 @@ var InMemoryDriver = (_class = class {constructor() { _class.prototype.__init.ca
|
|
|
324
330
|
|
|
325
331
|
|
|
326
332
|
|
|
327
|
-
exports.CancelledError =
|
|
333
|
+
exports.CancelledError = _chunk32422MOMcjs.CancelledError; exports.CriticalError = _chunk32422MOMcjs.CriticalError; exports.DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL = _chunk32422MOMcjs.DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL; exports.DEFAULT_MAX_RETRIES = _chunk32422MOMcjs.DEFAULT_MAX_RETRIES; exports.DEFAULT_RETRY_BACKOFF_BASE = _chunk32422MOMcjs.DEFAULT_RETRY_BACKOFF_BASE; exports.DEFAULT_RETRY_BACKOFF_MAX = _chunk32422MOMcjs.DEFAULT_RETRY_BACKOFF_MAX; exports.DEFAULT_STEP_TIMEOUT = _chunk32422MOMcjs.DEFAULT_STEP_TIMEOUT; exports.EntryInProgressError = _chunk32422MOMcjs.EntryInProgressError; exports.EvictedError = _chunk32422MOMcjs.EvictedError; exports.HistoryDivergedError = _chunk32422MOMcjs.HistoryDivergedError; exports.InMemoryDriver = InMemoryDriver; exports.JoinError = _chunk32422MOMcjs.JoinError; exports.Loop = _chunk32422MOMcjs.Loop; exports.MessageWaitError = _chunk32422MOMcjs.MessageWaitError; exports.RaceError = _chunk32422MOMcjs.RaceError; exports.RollbackCheckpointError = _chunk32422MOMcjs.RollbackCheckpointError; exports.RollbackError = _chunk32422MOMcjs.RollbackError; exports.SleepError = _chunk32422MOMcjs.SleepError; exports.StepExhaustedError = _chunk32422MOMcjs.StepExhaustedError; exports.StepFailedError = _chunk32422MOMcjs.StepFailedError; exports.WorkflowContextImpl = _chunk32422MOMcjs.WorkflowContextImpl; exports.appendLoopIteration = _chunk32422MOMcjs.appendLoopIteration; exports.appendName = _chunk32422MOMcjs.appendName; exports.createEntry = _chunk32422MOMcjs.createEntry; exports.createHistorySnapshot = _chunk32422MOMcjs.createHistorySnapshot; exports.createStorage = _chunk32422MOMcjs.createStorage; exports.deleteEntriesWithPrefix = _chunk32422MOMcjs.deleteEntriesWithPrefix; exports.emptyLocation = _chunk32422MOMcjs.emptyLocation; exports.extractErrorInfo = _chunk32422MOMcjs.extractErrorInfo; exports.flush = _chunk32422MOMcjs.flush; exports.generateId = _chunk32422MOMcjs.generateId; exports.getEntry = _chunk32422MOMcjs.getEntry; exports.getOrCreateMetadata = _chunk32422MOMcjs.getOrCreateMetadata; exports.isLocationPrefix = _chunk32422MOMcjs.isLocationPrefix; exports.isLoopIterationMarker = _chunk32422MOMcjs.isLoopIterationMarker; exports.loadMetadata = _chunk32422MOMcjs.loadMetadata; exports.loadStorage = _chunk32422MOMcjs.loadStorage; exports.locationToKey = _chunk32422MOMcjs.locationToKey; exports.locationsEqual = _chunk32422MOMcjs.locationsEqual; exports.parentLocation = _chunk32422MOMcjs.parentLocation; exports.registerName = _chunk32422MOMcjs.registerName; exports.replayWorkflowFromStep = _chunk32422MOMcjs.replayWorkflowFromStep; exports.resolveName = _chunk32422MOMcjs.resolveName; exports.runWorkflow = _chunk32422MOMcjs.runWorkflow; exports.setEntry = _chunk32422MOMcjs.setEntry;
|
|
328
334
|
//# sourceMappingURL=testing.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/rivet/rivet/rivetkit-typescript/packages/workflow-engine/dist/tsup/testing.cjs","../../src/testing.ts"],"names":[],"mappings":"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","file":"/home/runner/work/rivet/rivet/rivetkit-typescript/packages/workflow-engine/dist/tsup/testing.cjs","sourcesContent":[null,"import type { EngineDriver, KVEntry, KVWrite } from \"./driver.js\";\nimport { EvictedError } from \"./errors.js\";\nimport { compareKeys, keyStartsWith, keyToHex } from \"./keys.js\";\nimport type { Message, WorkflowMessageDriver } from \"./types.js\";\nimport { sleep } from \"./utils.js\";\n\ninterface Waiter {\n\tnameSet?: Set<string>;\n\tresolve: () => void;\n\treject: (error: Error) => void;\n\tabortSignal: AbortSignal;\n\tonAbort: () => void;\n}\n\nclass InMemoryWorkflowMessageDriver implements WorkflowMessageDriver {\n\t#messages: Message[] = [];\n\t#waiters = new Set<Waiter>();\n\n\tasync addMessage(message: Message): Promise<void> {\n\t\tthis.#messages.push(message);\n\t\tthis.#notifyWaiters(message.name);\n\t}\n\n\tasync receiveMessages(opts: {\n\t\tnames?: readonly string[];\n\t\tcount: number;\n\t\tcompletable: boolean;\n\t}): Promise<Message[]> {\n\t\tconst limitedCount = Math.max(1, opts.count);\n\t\tconst nameSet =\n\t\t\topts.names && opts.names.length > 0\n\t\t\t\t? new Set(opts.names)\n\t\t\t\t: undefined;\n\t\tconst selected: Array<{ message: Message; index: number }> = [];\n\n\t\tfor (\n\t\t\tlet i = 0;\n\t\t\ti < this.#messages.length && selected.length < limitedCount;\n\t\t\ti++\n\t\t) {\n\t\t\tconst message = this.#messages[i];\n\t\t\tif (nameSet && !nameSet.has(message.name)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tselected.push({ message, index: i });\n\t\t}\n\n\t\tif (selected.length === 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (!opts.completable) {\n\t\t\tfor (let i = selected.length - 1; i >= 0; i--) {\n\t\t\t\tthis.#messages.splice(selected[i].index, 1);\n\t\t\t}\n\t\t\treturn selected.map((entry) => entry.message);\n\t\t}\n\n\t\treturn selected.map((entry) => {\n\t\t\tconst { message } = entry;\n\t\t\treturn {\n\t\t\t\t...message,\n\t\t\t\tcomplete: async () => {\n\t\t\t\t\tawait this.completeMessage(message.id);\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\t}\n\n\tasync completeMessage(messageId: string): Promise<void> {\n\t\tconst index = this.#messages.findIndex(\n\t\t\t(message) => message.id === messageId,\n\t\t);\n\t\tif (index !== -1) {\n\t\t\tthis.#messages.splice(index, 1);\n\t\t}\n\t}\n\n\tasync waitForMessages(\n\t\tmessageNames: string[],\n\t\tabortSignal: AbortSignal,\n\t): Promise<void> {\n\t\tif (abortSignal.aborted) {\n\t\t\tthrow new EvictedError();\n\t\t}\n\n\t\tconst nameSet =\n\t\t\tmessageNames.length > 0 ? new Set(messageNames) : undefined;\n\t\tif (\n\t\t\tthis.#messages.some((message) =>\n\t\t\t\tnameSet ? nameSet.has(message.name) : true,\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tconst waiter: Waiter = {\n\t\t\t\tnameSet,\n\t\t\t\tresolve: () => {\n\t\t\t\t\tthis.#removeWaiter(waiter);\n\t\t\t\t\tresolve();\n\t\t\t\t},\n\t\t\t\treject: (error) => {\n\t\t\t\t\tthis.#removeWaiter(waiter);\n\t\t\t\t\treject(error);\n\t\t\t\t},\n\t\t\t\tabortSignal,\n\t\t\t\tonAbort: () => {\n\t\t\t\t\twaiter.reject(new EvictedError());\n\t\t\t\t},\n\t\t\t};\n\t\t\tabortSignal.addEventListener(\"abort\", waiter.onAbort, {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t\tthis.#waiters.add(waiter);\n\t\t});\n\t}\n\n\t#removeWaiter(waiter: Waiter): void {\n\t\tif (this.#waiters.delete(waiter)) {\n\t\t\twaiter.abortSignal.removeEventListener(\"abort\", waiter.onAbort);\n\t\t}\n\t}\n\n\t#notifyWaiters(name: string): void {\n\t\tfor (const waiter of [...this.#waiters]) {\n\t\t\tif (waiter.nameSet && !waiter.nameSet.has(name)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\twaiter.resolve();\n\t\t}\n\t}\n\n\tclear(): void {\n\t\tthis.#messages = [];\n\t\tfor (const waiter of [...this.#waiters]) {\n\t\t\twaiter.reject(new Error(\"cleared\"));\n\t\t}\n\t}\n}\n\n/**\n * In-memory implementation of EngineDriver for testing.\n * Uses binary keys (Uint8Array) with hex encoding for internal Map storage.\n */\nexport class InMemoryDriver implements EngineDriver {\n\t// Map from hex-encoded key to { originalKey, value }\n\tprivate kv = new Map<string, { key: Uint8Array; value: Uint8Array }>();\n\tprivate alarms = new Map<string, number>();\n\t#inMemoryMessageDriver = new InMemoryWorkflowMessageDriver();\n\n\t/** Simulated latency per operation (ms) */\n\tlatency = 10;\n\n\t/** How often the worker polls for work */\n\tworkerPollInterval = 100;\n\tmessageDriver: WorkflowMessageDriver = this.#inMemoryMessageDriver;\n\n\tasync get(key: Uint8Array): Promise<Uint8Array | null> {\n\t\tawait sleep(this.latency);\n\t\tconst entry = this.kv.get(keyToHex(key));\n\t\treturn entry?.value ?? null;\n\t}\n\n\tasync set(key: Uint8Array, value: Uint8Array): Promise<void> {\n\t\tawait sleep(this.latency);\n\t\tthis.kv.set(keyToHex(key), { key, value });\n\t}\n\n\tasync delete(key: Uint8Array): Promise<void> {\n\t\tawait sleep(this.latency);\n\t\tthis.kv.delete(keyToHex(key));\n\t}\n\n\tasync deletePrefix(prefix: Uint8Array): Promise<void> {\n\t\tawait sleep(this.latency);\n\t\tfor (const [hexKey, entry] of this.kv) {\n\t\t\tif (keyStartsWith(entry.key, prefix)) {\n\t\t\t\tthis.kv.delete(hexKey);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync deleteRange(start: Uint8Array, end: Uint8Array): Promise<void> {\n\t\tawait sleep(this.latency);\n\t\tfor (const [hexKey, entry] of this.kv) {\n\t\t\tif (\n\t\t\t\tcompareKeys(entry.key, start) >= 0 &&\n\t\t\t\tcompareKeys(entry.key, end) < 0\n\t\t\t) {\n\t\t\t\tthis.kv.delete(hexKey);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync list(prefix: Uint8Array): Promise<KVEntry[]> {\n\t\tawait sleep(this.latency);\n\t\tconst results: KVEntry[] = [];\n\t\tfor (const entry of this.kv.values()) {\n\t\t\tif (keyStartsWith(entry.key, prefix)) {\n\t\t\t\tresults.push({ key: entry.key, value: entry.value });\n\t\t\t}\n\t\t}\n\t\t// Sort by key lexicographically\n\t\treturn results.sort((a, b) => compareKeys(a.key, b.key));\n\t}\n\n\tasync batch(writes: KVWrite[]): Promise<void> {\n\t\tawait sleep(this.latency);\n\t\tfor (const { key, value } of writes) {\n\t\t\tthis.kv.set(keyToHex(key), { key, value });\n\t\t}\n\t}\n\n\tasync setAlarm(workflowId: string, wakeAt: number): Promise<void> {\n\t\tawait sleep(this.latency);\n\t\tthis.alarms.set(workflowId, wakeAt);\n\t}\n\n\tasync clearAlarm(workflowId: string): Promise<void> {\n\t\tawait sleep(this.latency);\n\t\tthis.alarms.delete(workflowId);\n\t}\n\n\tasync waitForMessages(\n\t\tmessageNames: string[],\n\t\tabortSignal: AbortSignal,\n\t): Promise<void> {\n\t\tconst driver = this.messageDriver as WorkflowMessageDriver & {\n\t\t\twaitForMessages?: (\n\t\t\t\tmessageNames: string[],\n\t\t\t\tabortSignal: AbortSignal,\n\t\t\t) => Promise<void>;\n\t\t};\n\t\tif (driver.waitForMessages) {\n\t\t\tawait driver.waitForMessages(messageNames, abortSignal);\n\t\t\treturn;\n\t\t}\n\n\t\twhile (true) {\n\t\t\tif (abortSignal.aborted) {\n\t\t\t\tthrow new EvictedError();\n\t\t\t}\n\t\t\tconst messages = await this.messageDriver.receiveMessages({\n\t\t\t\tnames: messageNames.length > 0 ? messageNames : undefined,\n\t\t\t\tcount: 1,\n\t\t\t\tcompletable: true,\n\t\t\t});\n\t\t\tif (messages.length > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait sleep(Math.max(1, this.latency));\n\t\t}\n\t}\n\n\t/**\n\t * Get the alarm time for a workflow (for testing).\n\t */\n\tgetAlarm(workflowId: string): number | undefined {\n\t\treturn this.alarms.get(workflowId);\n\t}\n\n\t/**\n\t * Check if any alarms are due and return their workflow IDs.\n\t */\n\tgetDueAlarms(): string[] {\n\t\tconst now = Date.now();\n\t\tconst due: string[] = [];\n\t\tfor (const [workflowId, wakeAt] of this.alarms) {\n\t\t\tif (wakeAt <= now) {\n\t\t\t\tdue.push(workflowId);\n\t\t\t}\n\t\t}\n\t\treturn due;\n\t}\n\n\t/**\n\t * Clear all data (for testing).\n\t */\n\tclear(): void {\n\t\tthis.kv.clear();\n\t\tthis.alarms.clear();\n\t\tthis.#inMemoryMessageDriver.clear();\n\t}\n\n\t/**\n\t * Get a snapshot of all data (for testing/debugging).\n\t */\n\tsnapshot(): {\n\t\tkv: Record<string, Uint8Array>;\n\t\talarms: Record<string, number>;\n\t} {\n\t\tconst kvSnapshot: Record<string, Uint8Array> = {};\n\t\tfor (const [hexKey, entry] of this.kv) {\n\t\t\tkvSnapshot[hexKey] = entry.value;\n\t\t}\n\t\treturn {\n\t\t\tkv: kvSnapshot,\n\t\t\talarms: Object.fromEntries(this.alarms),\n\t\t};\n\t}\n\n\t/**\n\t * Get all hex-encoded keys (for testing).\n\t */\n\tkeys(): string[] {\n\t\treturn [...this.kv.keys()];\n\t}\n}\n\n// Re-export main exports for convenience\nexport * from \"./index.js\";\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/actors/actors/rivetkit-typescript/packages/workflow-engine/dist/tsup/testing.cjs","../../src/testing.ts"],"names":[],"mappings":"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","file":"/home/runner/work/actors/actors/rivetkit-typescript/packages/workflow-engine/dist/tsup/testing.cjs","sourcesContent":[null,"import type { EngineDriver, KVEntry, KVWrite } from \"./driver.js\";\nimport { EvictedError } from \"./errors.js\";\nimport { compareKeys, keyStartsWith, keyToHex } from \"./keys.js\";\nimport type { Message, WorkflowMessageDriver } from \"./types.js\";\nimport { sleep } from \"./utils.js\";\n\ninterface Waiter {\n\tnameSet?: Set<string>;\n\tresolve: () => void;\n\treject: (error: Error) => void;\n\tabortSignal: AbortSignal;\n\tonAbort: () => void;\n}\n\nclass InMemoryWorkflowMessageDriver implements WorkflowMessageDriver {\n\t#messages: Message[] = [];\n\t#waiters = new Set<Waiter>();\n\n\tasync addMessage(message: Message): Promise<void> {\n\t\tthis.#messages.push(message);\n\t\tthis.#notifyWaiters(message.name);\n\t}\n\n\tasync receiveMessages(opts: {\n\t\tnames?: readonly string[];\n\t\tcount: number;\n\t\tcompletable: boolean;\n\t}): Promise<Message[]> {\n\t\tconst limitedCount = Math.max(1, opts.count);\n\t\tconst nameSet =\n\t\t\topts.names && opts.names.length > 0\n\t\t\t\t? new Set(opts.names)\n\t\t\t\t: undefined;\n\t\tconst selected: Array<{ message: Message; index: number }> = [];\n\n\t\tfor (\n\t\t\tlet i = 0;\n\t\t\ti < this.#messages.length && selected.length < limitedCount;\n\t\t\ti++\n\t\t) {\n\t\t\tconst message = this.#messages[i];\n\t\t\tif (nameSet && !nameSet.has(message.name)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tselected.push({ message, index: i });\n\t\t}\n\n\t\tif (selected.length === 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (!opts.completable) {\n\t\t\tfor (let i = selected.length - 1; i >= 0; i--) {\n\t\t\t\tthis.#messages.splice(selected[i].index, 1);\n\t\t\t}\n\t\t\treturn selected.map((entry) => entry.message);\n\t\t}\n\n\t\treturn selected.map((entry) => {\n\t\t\tconst { message } = entry;\n\t\t\treturn {\n\t\t\t\t...message,\n\t\t\t\tcomplete: async () => {\n\t\t\t\t\tawait this.completeMessage(message.id);\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\t}\n\n\tasync completeMessage(messageId: string): Promise<void> {\n\t\tconst index = this.#messages.findIndex(\n\t\t\t(message) => message.id === messageId,\n\t\t);\n\t\tif (index !== -1) {\n\t\t\tthis.#messages.splice(index, 1);\n\t\t}\n\t}\n\n\tasync waitForMessages(\n\t\tmessageNames: string[],\n\t\tabortSignal: AbortSignal,\n\t): Promise<void> {\n\t\tif (abortSignal.aborted) {\n\t\t\tthrow new EvictedError();\n\t\t}\n\n\t\tconst nameSet =\n\t\t\tmessageNames.length > 0 ? new Set(messageNames) : undefined;\n\t\tif (\n\t\t\tthis.#messages.some((message) =>\n\t\t\t\tnameSet ? nameSet.has(message.name) : true,\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tconst waiter: Waiter = {\n\t\t\t\tnameSet,\n\t\t\t\tresolve: () => {\n\t\t\t\t\tthis.#removeWaiter(waiter);\n\t\t\t\t\tresolve();\n\t\t\t\t},\n\t\t\t\treject: (error) => {\n\t\t\t\t\tthis.#removeWaiter(waiter);\n\t\t\t\t\treject(error);\n\t\t\t\t},\n\t\t\t\tabortSignal,\n\t\t\t\tonAbort: () => {\n\t\t\t\t\twaiter.reject(new EvictedError());\n\t\t\t\t},\n\t\t\t};\n\t\t\tabortSignal.addEventListener(\"abort\", waiter.onAbort, {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t\tthis.#waiters.add(waiter);\n\t\t});\n\t}\n\n\t#removeWaiter(waiter: Waiter): void {\n\t\tif (this.#waiters.delete(waiter)) {\n\t\t\twaiter.abortSignal.removeEventListener(\"abort\", waiter.onAbort);\n\t\t}\n\t}\n\n\t#notifyWaiters(name: string): void {\n\t\tfor (const waiter of [...this.#waiters]) {\n\t\t\tif (waiter.nameSet && !waiter.nameSet.has(name)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\twaiter.resolve();\n\t\t}\n\t}\n\n\tclear(): void {\n\t\tthis.#messages = [];\n\t\tfor (const waiter of [...this.#waiters]) {\n\t\t\twaiter.reject(new Error(\"cleared\"));\n\t\t}\n\t}\n}\n\n/**\n * In-memory implementation of EngineDriver for testing.\n * Uses binary keys (Uint8Array) with hex encoding for internal Map storage.\n */\nexport class InMemoryDriver implements EngineDriver {\n\t// Map from hex-encoded key to { originalKey, value }\n\tprivate kv = new Map<string, { key: Uint8Array; value: Uint8Array }>();\n\tprivate alarms = new Map<string, number>();\n\t#inMemoryMessageDriver = new InMemoryWorkflowMessageDriver();\n\n\t/** Simulated latency per operation (ms) */\n\tlatency = 10;\n\n\t/** How often the worker polls for work */\n\tworkerPollInterval = 100;\n\tmessageDriver: WorkflowMessageDriver = this.#inMemoryMessageDriver;\n\n\tasync get(key: Uint8Array): Promise<Uint8Array | null> {\n\t\tawait sleep(this.latency);\n\t\tconst entry = this.kv.get(keyToHex(key));\n\t\treturn entry?.value ?? null;\n\t}\n\n\tasync set(key: Uint8Array, value: Uint8Array): Promise<void> {\n\t\tawait sleep(this.latency);\n\t\tthis.kv.set(keyToHex(key), { key, value });\n\t}\n\n\tasync delete(key: Uint8Array): Promise<void> {\n\t\tawait sleep(this.latency);\n\t\tthis.kv.delete(keyToHex(key));\n\t}\n\n\tasync batchDelete(keys: Uint8Array[]): Promise<void> {\n\t\tawait sleep(this.latency);\n\t\tfor (const key of keys) {\n\t\t\tthis.kv.delete(keyToHex(key));\n\t\t}\n\t}\n\n\tasync deletePrefix(prefix: Uint8Array): Promise<void> {\n\t\tawait sleep(this.latency);\n\t\tfor (const [hexKey, entry] of this.kv) {\n\t\t\tif (keyStartsWith(entry.key, prefix)) {\n\t\t\t\tthis.kv.delete(hexKey);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync deleteRange(start: Uint8Array, end: Uint8Array): Promise<void> {\n\t\tawait sleep(this.latency);\n\t\tfor (const [hexKey, entry] of this.kv) {\n\t\t\tif (\n\t\t\t\tcompareKeys(entry.key, start) >= 0 &&\n\t\t\t\tcompareKeys(entry.key, end) < 0\n\t\t\t) {\n\t\t\t\tthis.kv.delete(hexKey);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync list(prefix: Uint8Array): Promise<KVEntry[]> {\n\t\tawait sleep(this.latency);\n\t\tconst results: KVEntry[] = [];\n\t\tfor (const entry of this.kv.values()) {\n\t\t\tif (keyStartsWith(entry.key, prefix)) {\n\t\t\t\tresults.push({ key: entry.key, value: entry.value });\n\t\t\t}\n\t\t}\n\t\t// Sort by key lexicographically\n\t\treturn results.sort((a, b) => compareKeys(a.key, b.key));\n\t}\n\n\tasync batch(writes: KVWrite[]): Promise<void> {\n\t\tawait sleep(this.latency);\n\t\tfor (const { key, value } of writes) {\n\t\t\tthis.kv.set(keyToHex(key), { key, value });\n\t\t}\n\t}\n\n\tasync setAlarm(workflowId: string, wakeAt: number): Promise<void> {\n\t\tawait sleep(this.latency);\n\t\tthis.alarms.set(workflowId, wakeAt);\n\t}\n\n\tasync clearAlarm(workflowId: string): Promise<void> {\n\t\tawait sleep(this.latency);\n\t\tthis.alarms.delete(workflowId);\n\t}\n\n\tasync waitForMessages(\n\t\tmessageNames: string[],\n\t\tabortSignal: AbortSignal,\n\t): Promise<void> {\n\t\tconst driver = this.messageDriver as WorkflowMessageDriver & {\n\t\t\twaitForMessages?: (\n\t\t\t\tmessageNames: string[],\n\t\t\t\tabortSignal: AbortSignal,\n\t\t\t) => Promise<void>;\n\t\t};\n\t\tif (driver.waitForMessages) {\n\t\t\tawait driver.waitForMessages(messageNames, abortSignal);\n\t\t\treturn;\n\t\t}\n\n\t\twhile (true) {\n\t\t\tif (abortSignal.aborted) {\n\t\t\t\tthrow new EvictedError();\n\t\t\t}\n\t\t\tconst messages = await this.messageDriver.receiveMessages({\n\t\t\t\tnames: messageNames.length > 0 ? messageNames : undefined,\n\t\t\t\tcount: 1,\n\t\t\t\tcompletable: true,\n\t\t\t});\n\t\t\tif (messages.length > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait sleep(Math.max(1, this.latency));\n\t\t}\n\t}\n\n\t/**\n\t * Get the alarm time for a workflow (for testing).\n\t */\n\tgetAlarm(workflowId: string): number | undefined {\n\t\treturn this.alarms.get(workflowId);\n\t}\n\n\t/**\n\t * Check if any alarms are due and return their workflow IDs.\n\t */\n\tgetDueAlarms(): string[] {\n\t\tconst now = Date.now();\n\t\tconst due: string[] = [];\n\t\tfor (const [workflowId, wakeAt] of this.alarms) {\n\t\t\tif (wakeAt <= now) {\n\t\t\t\tdue.push(workflowId);\n\t\t\t}\n\t\t}\n\t\treturn due;\n\t}\n\n\t/**\n\t * Clear all data (for testing).\n\t */\n\tclear(): void {\n\t\tthis.kv.clear();\n\t\tthis.alarms.clear();\n\t\tthis.#inMemoryMessageDriver.clear();\n\t}\n\n\t/**\n\t * Get a snapshot of all data (for testing/debugging).\n\t */\n\tsnapshot(): {\n\t\tkv: Record<string, Uint8Array>;\n\t\talarms: Record<string, number>;\n\t} {\n\t\tconst kvSnapshot: Record<string, Uint8Array> = {};\n\t\tfor (const [hexKey, entry] of this.kv) {\n\t\t\tkvSnapshot[hexKey] = entry.value;\n\t\t}\n\t\treturn {\n\t\t\tkv: kvSnapshot,\n\t\t\talarms: Object.fromEntries(this.alarms),\n\t\t};\n\t}\n\n\t/**\n\t * Get all hex-encoded keys (for testing).\n\t */\n\tkeys(): string[] {\n\t\treturn [...this.kv.keys()];\n\t}\n}\n\n// Re-export main exports for convenience\nexport * from \"./index.js\";\n"]}
|
package/dist/tsup/testing.d.cts
CHANGED
|
@@ -18,6 +18,7 @@ declare class InMemoryDriver implements EngineDriver {
|
|
|
18
18
|
get(key: Uint8Array): Promise<Uint8Array | null>;
|
|
19
19
|
set(key: Uint8Array, value: Uint8Array): Promise<void>;
|
|
20
20
|
delete(key: Uint8Array): Promise<void>;
|
|
21
|
+
batchDelete(keys: Uint8Array[]): Promise<void>;
|
|
21
22
|
deletePrefix(prefix: Uint8Array): Promise<void>;
|
|
22
23
|
deleteRange(start: Uint8Array, end: Uint8Array): Promise<void>;
|
|
23
24
|
list(prefix: Uint8Array): Promise<KVEntry[]>;
|
package/dist/tsup/testing.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ declare class InMemoryDriver implements EngineDriver {
|
|
|
18
18
|
get(key: Uint8Array): Promise<Uint8Array | null>;
|
|
19
19
|
set(key: Uint8Array, value: Uint8Array): Promise<void>;
|
|
20
20
|
delete(key: Uint8Array): Promise<void>;
|
|
21
|
+
batchDelete(keys: Uint8Array[]): Promise<void>;
|
|
21
22
|
deletePrefix(prefix: Uint8Array): Promise<void>;
|
|
22
23
|
deleteRange(start: Uint8Array, end: Uint8Array): Promise<void>;
|
|
23
24
|
list(prefix: Uint8Array): Promise<KVEntry[]>;
|
package/dist/tsup/testing.js
CHANGED
|
@@ -47,7 +47,7 @@ import {
|
|
|
47
47
|
runWorkflow,
|
|
48
48
|
setEntry,
|
|
49
49
|
sleep
|
|
50
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-TVRZA5O5.js";
|
|
51
51
|
|
|
52
52
|
// src/testing.ts
|
|
53
53
|
var InMemoryWorkflowMessageDriver = class {
|
|
@@ -170,6 +170,12 @@ var InMemoryDriver = class {
|
|
|
170
170
|
await sleep(this.latency);
|
|
171
171
|
this.kv.delete(keyToHex(key));
|
|
172
172
|
}
|
|
173
|
+
async batchDelete(keys) {
|
|
174
|
+
await sleep(this.latency);
|
|
175
|
+
for (const key of keys) {
|
|
176
|
+
this.kv.delete(keyToHex(key));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
173
179
|
async deletePrefix(prefix) {
|
|
174
180
|
await sleep(this.latency);
|
|
175
181
|
for (const [hexKey, entry] of this.kv) {
|