@yieldstar/core 0.6.0 → 0.7.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.
@@ -1,4 +1,4 @@
1
- export type DurableValue = null | boolean | number | string | undefined | Error | DurableValue[] | DurableObject;
1
+ export type DurableValue = null | boolean | number | string | undefined | bigint | Date | Error | DurableValue[] | Map<DurableValue, DurableValue> | Set<DurableValue> | DurableObject;
2
2
  export type DurableObject = {
3
3
  [key: string]: DurableValue;
4
4
  };
@@ -7,7 +7,7 @@ export type DurableObject = {
7
7
  * signature, it accepts interfaces. The codec still validates every value at
8
8
  * runtime.
9
9
  */
10
- export type Durable<T> = T extends string | number | boolean | null | undefined | Error ? T : T extends readonly (infer U)[] ? readonly Durable<U>[] : T extends Function | Date | Map<any, any> | Set<any> | bigint ? never : {
10
+ export type Durable<T> = T extends string | number | boolean | null | undefined | bigint | Date | Error ? T : T extends readonly (infer U)[] ? readonly Durable<U>[] : T extends Map<infer K, infer V> ? Map<Durable<K>, Durable<V>> : T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<Durable<K>, Durable<V>> : T extends Set<infer U> ? Set<Durable<U>> : T extends ReadonlySet<infer U> ? ReadonlySet<Durable<U>> : T extends Function ? never : {
11
11
  [K in keyof T]: Durable<T[K]>;
12
12
  };
13
13
  /**
@@ -37,9 +37,11 @@ export interface DurableValueCodec {
37
37
  /**
38
38
  * Validates `value` recursively and returns its canonical JSON: object keys
39
39
  * sorted by UTF-16 code unit and `-0` written as `0`, so equal values always
40
- * encode to the same string. `undefined`, errors and plain objects with an
41
- * own `$type` key are written as tagged objects. Never throws for an invalid
42
- * value.
40
+ * encode to the same string. `undefined`, `bigint`, `Date`, `Map`, `Set`,
41
+ * errors and plain objects with an own `$type` key are written as tagged
42
+ * objects. Map entries and set values keep their insertion order, so maps
43
+ * or sets that differ only in order encode differently. Never throws for an
44
+ * invalid value.
43
45
  */
44
46
  encode(value: unknown): DurableValueEncoding;
45
47
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"durable-value.d.ts","sourceRoot":"","sources":["../../src/base/durable-value.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GACpB,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN,SAAS,GACT,KAAK,GACL,YAAY,EAAE,GACd,aAAa,CAAC;AAElB,MAAM,MAAM,aAAa,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;CAAE,CAAC;AAE5D;;;;GAIG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,SACtB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,KAAK,GACL,CAAC,GACD,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC9B,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,GACrB,CAAC,SAAS,QAAQ,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAC7D,KAAK,GACL;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAEtC;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;AAErF,MAAM,MAAM,oBAAoB,GAC5B;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,MAAM,eAAe,GACvB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAAC;IAE7C;;;;OAIG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAAC;CAC5C;AAED,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAE/C,eAAO,MAAM,iBAAiB,EAAE,iBAwB/B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUxD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI9E;AAkLD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,SAAM,GAAG,YAAY,CAuC3E"}
1
+ {"version":3,"file":"durable-value.d.ts","sourceRoot":"","sources":["../../src/base/durable-value.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GACpB,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN,SAAS,GACT,MAAM,GACN,IAAI,GACJ,KAAK,GACL,YAAY,EAAE,GACd,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,GAC/B,GAAG,CAAC,YAAY,CAAC,GACjB,aAAa,CAAC;AAElB,MAAM,MAAM,aAAa,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;CAAE,CAAC;AAE5D;;;;GAIG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,SACtB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,MAAM,GACN,IAAI,GACJ,KAAK,GACL,CAAC,GACD,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC9B,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,GACrB,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAC/B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAC3B,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GACvC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GACnC,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC,GACtB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACf,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAC9B,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACvB,CAAC,SAAS,QAAQ,GAClB,KAAK,GACL;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAEtC;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;AAErF,MAAM,MAAM,oBAAoB,GAC5B;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,MAAM,eAAe,GACvB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAAC;IAE7C;;;;OAIG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAAC;CAC5C;AAED,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAE/C,eAAO,MAAM,iBAAiB,EAAE,iBAwB/B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUxD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI9E;AAqOD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,SAAM,GAAG,YAAY,CA+C3E"}
@@ -55,6 +55,15 @@ export type ExecutionLease = {
55
55
  token: number;
56
56
  expiresAt: number;
57
57
  };
58
+ /**
59
+ * Limits a claim to the executions that match. The claim applies it in the same
60
+ * atomic step, so an execution that does not match is not leased and gains no
61
+ * redelivery delay.
62
+ */
63
+ export type ExecutionClaimFilter = {
64
+ /** Claims only executions whose ID is in this list. An empty list claims nothing. */
65
+ executionIds?: readonly string[];
66
+ };
58
67
  /**
59
68
  * Returned by a fenced write whose lease is no longer current: a higher token
60
69
  * has been issued, or the lease has ended. The write changed nothing, and its
@@ -169,6 +178,8 @@ export interface ExecutionClient {
169
178
  claimDue(request: {
170
179
  limit: number;
171
180
  duration: number;
181
+ /** When absent, any execution whose due time has passed may be claimed. */
182
+ filter?: ExecutionClaimFilter;
172
183
  }): Promise<ExecutionLease[]>;
173
184
  /**
174
185
  * Extends a lease to `duration` milliseconds from now. Returns `lost` if a
@@ -1 +1 @@
1
- {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/base/execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/base/execution.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { StandardSchemaV1 } from "@standard-schema/spec";
2
2
  import { type Durable, type IfDurable } from "./durable-value";
3
- export type Draft<T> = T extends object ? {
3
+ export type Draft<T> = T extends Date ? T : T extends ReadonlyMap<infer K, infer V> ? Map<Draft<K>, Draft<V>> : T extends ReadonlySet<infer U> ? Set<Draft<U>> : T extends object ? {
4
4
  -readonly [K in keyof T]: Draft<T[K]>;
5
5
  } : T;
6
6
  export type StoreVersion = number;
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/base/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAqB,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGlF,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GACnC;IAAE,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACzC,CAAC,CAAC;AAEN,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAClC,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;AAErD,MAAM,MAAM,eAAe,CAAC,MAAM,SAAS,gBAAgB,GAAG,gBAAgB,IAC5E;IACE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC,CAAC;CAC7C,CAAC;AAEJ,MAAM,MAAM,UAAU,CAAC,MAAM,SAAS,gBAAgB,IACpD,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAEvC,MAAM,MAAM,QAAQ,GAAG;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;IAC7B,KAAK,EAAE,CAAC,CAAC;IACT,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,KAAK,EAAE,CAAC,CAAC;IACT,eAAe,EAAE,YAAY,CAAC;IAC9B,OAAO,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAC/B,CAAC;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAC1C;IACE,OAAO,EAAE,KAAK,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,YAAY,CAAC;IAC9B,aAAa,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEN,MAAM,MAAM,qBAAqB,GAC7B;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GACjB;IACE,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,YAAY,CAAC;IAC9B,aAAa,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEN,MAAM,MAAM,aAAa,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAE5D,MAAM,MAAM,eAAe,CAAC,CAAC,IACzB;IACE,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;CACvB,GACD;IACE,OAAO,EAAE,KAAK,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,SAAS,EAAE,CAAC;CACxB,CAAC;AAEN,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,SAAS,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GACjC;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC9C;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;CAAE,GACxD;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC;AAE1B;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,eAAe,CAAC;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX;;;;OAIG;IACH,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,SAAS,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,eAAe,CAAC;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,qBAAqB,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC5B,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,UAAU,CACR,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAC1B,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,GACrC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,UAAU,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACxE,CAAC;AAEF,mEAAmE;AACnE,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAID;;;GAGG;AACH,MAAM,MAAM,kBAAkB,CAAC,MAAM,SAAS,gBAAgB,IAAI,SAAS,CACzE,UAAU,CAAC,MAAM,CAAC,EAClB,gBAAgB,CACd,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,EACnC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAC5B,CACF,CAAC;AAEF;;;GAGG;AACH,wBAAgB,WAAW,CACzB,MAAM,SAAS,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,EAC3C,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,EAE1B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,EAC1E,OAAO,EAAE;IACP,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;CAClD,GACA,eAAe,CAAC,MAAM,CAAC,CAMzB;AAED,8BAAsB,WAAW;IAC/B,KAAK,CAAC,MAAM,SAAS,gBAAgB,EACnC,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,EACnC,EAAE,EAAE,MAAM,GACT,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IA6BnC;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,CAAC,MAAM,SAAS,gBAAgB,EAAE,MAAM,EAAE;QACzD,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;QACpC,EAAE,EAAE,MAAM,CAAC;KACZ,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9C;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,WAAW,CAAC,MAAM,SAAS,gBAAgB,EAAE,MAAM,EAAE;QAC5D,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;QACpC,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GAAG,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAElD;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,MAAM,SAAS,gBAAgB,EAAE,MAAM,EAAE;QAChE,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;QACpC,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GAAG,OAAO,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtD;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,aAAa,CAAC,MAAM,SAAS,gBAAgB,EAAE,CAAC,EAAE,MAAM,EAAE;QACjE,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;QACpC,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,KAAK,EAAE,CACL,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAChC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,KACrB,IAAI,CAAC;QACV,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAE/B;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAE3D;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAEnE;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE;QAC3B,UAAU,EAAE,eAAe,CAAC;QAC5B,EAAE,EAAE,MAAM,CAAC;KACZ,GAAG,OAAO,CAAC,IAAI,CAAC;IAEjB;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE;QAC/B,UAAU,EAAE,eAAe,CAAC;QAC5B,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GAAG,OAAO,CAAC,qBAAqB,CAAC;CACnC;AAED;;;;;GAKG;AACH,8BAAsB,cAAe,SAAQ,WAAW;IACtD,6EAA6E;IAC7E,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE;QACnC,UAAU,EAAE,eAAe,CAAC;QAC5B,EAAE,EAAE,MAAM,CAAC;KACZ,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAE/C;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE;QACrC,UAAU,EAAE,eAAe,CAAC;QAC5B,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAEnC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE;QAC7C,UAAU,EAAE,eAAe,CAAC;QAC5B,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,WAAW,CAAC;KACrB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAC;IAE5C;;;;;;;;OAQG;IACH,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CACpC,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,yBAAyB,CAAC;IAErC;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CACpC,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,yBAAyB,CAAC;IAErC,4EAA4E;IAC5E,SAAS,CAAC,gBAAgB,IAAI,MAAM;IAI9B,QAAQ,CAAC,MAAM,SAAS,gBAAgB,EAAE,MAAM,EAAE;QACtD,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;QACpC,EAAE,EAAE,MAAM,CAAC;KACZ,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAIxC,WAAW,CAAC,MAAM,SAAS,gBAAgB,EAAE,MAAM,EAAE;QACzD,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;QACpC,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GAAG,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IA2C5C,eAAe,CAAC,MAAM,SAAS,gBAAgB,EAAE,MAAM,EAAE;QAC7D,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;QACpC,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GAAG,OAAO,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAgDhD,eAAe,CAAC,MAAM,EAAE;QAC5B,UAAU,EAAE,eAAe,CAAC;QAC5B,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAqC5B,aAAa,CAAC,MAAM,SAAS,gBAAgB,EAAE,CAAC,EAAE,MAAM,EAAE;QAC9D,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;QACpC,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,KAAK,EAAE,CACL,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAChC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,KACrB,IAAI,CAAC;QACV,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAkF/B;;;;OAIG;YACW,gBAAgB;YAiBhB,gBAAgB;IAc9B,OAAO,CAAC,gBAAgB;CAazB;AA6FD,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,MAAM,EAAE,CAAC,GACR,MAAM,IAAI,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,CAEhD;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAOjE;AAED,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI,CAOrE;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,SAAS,gBAAgB,EACtE,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,EACnC,KAAK,EAAE,OAAO,EACd,OAAO,SAAK,GACX,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAY7B;AAaD,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMvD;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAM3D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAe9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,CAwB5E;AAID;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAQjD;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EACrC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAC5B;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,SAAS,EAAE,SAAS,EAAE,CAAA;CAAE,CA2CvC;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,0EAA0E;IAC1E,KAAK,EAAE,CAAC,CAAC;IACT,4EAA4E;IAC5E,UAAU,IAAI,SAAS,EAAE,CAAC;CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CA4DtE;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,EAAE,EACtB,UAAU,EAAE,SAAS,EAAE,GACtB,OAAO,CAOT"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/base/store.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ export type { DeliveryOptions, WorkflowInvoker } from "./base/invoker";
3
3
  export { WorkerExitedError } from "./base/invoker";
4
4
  export type { RuntimeOptions } from "./base/runtime";
5
5
  export { Runtime } from "./base/runtime";
6
- export type { ExecutionAcknowledgeResult, ExecutionAdmissionErrorCode, ExecutionAdmissionRequest, ExecutionAdmissionResult, ExecutionClient, ExecutionLease, ExecutionOutcome, ExecutionParent, ExecutionRecord, ExecutionReleaseResult, ExecutionRenewResult, ExecutionStartRequest, ExecutionStartResult, ExecutionStatus, ExecutionWakeResult, LeaseLost, WorkflowRunOutcome, WorkflowStartErrorCode, } from "./base/execution";
6
+ export type { ExecutionAcknowledgeResult, ExecutionAdmissionErrorCode, ExecutionAdmissionRequest, ExecutionAdmissionResult, ExecutionClaimFilter, ExecutionClient, ExecutionLease, ExecutionOutcome, ExecutionParent, ExecutionRecord, ExecutionReleaseResult, ExecutionRenewResult, ExecutionStartRequest, ExecutionStartResult, ExecutionStatus, ExecutionWakeResult, LeaseLost, WorkflowRunOutcome, WorkflowStartErrorCode, } from "./base/execution";
7
7
  export { ExecutionAdmissionError, InfrastructureError, LeaseLostError, StepConflictError, WorkflowStartError, isLeaseLost, isTerminalExecutionStatus, } from "./base/execution";
8
8
  export type { EffectBeginRequest, EffectBeginResult, EffectClient, EffectConflictReport, EffectDeliveryErrorCode, EffectRecord, EffectSettleRequest, EffectSettleResult, EffectWatchRequest, WorkflowEffectErrorCode, } from "./base/effect";
9
9
  export { EffectClientInvariantError, EffectDeliveryError, WorkflowEffectError, } from "./base/effect";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -203,6 +203,8 @@ function encodeValue(value, path, ancestors) {
203
203
  return value ? "true" : "false";
204
204
  case "string":
205
205
  return JSON.stringify(value);
206
+ case "bigint":
207
+ return `{"$type":"bigint","value":"${value}"}`;
206
208
  case "number":
207
209
  if (!Number.isFinite(value)) {
208
210
  throw new DurableValueError(`${path}: ${value} is not a finite number`);
@@ -222,6 +224,12 @@ function encodeValue(value, path, ancestors) {
222
224
  return encodeArray(value, path, ancestors);
223
225
  if (value instanceof Error)
224
226
  return encodeError(value, path, ancestors);
227
+ if (value instanceof Date)
228
+ return encodeDate(value, path);
229
+ if (value instanceof Map)
230
+ return encodeMap(value, path, ancestors);
231
+ if (value instanceof Set)
232
+ return encodeSet(value, path, ancestors);
225
233
  return encodeObject(value, path, ancestors);
226
234
  } finally {
227
235
  ancestors.delete(value);
@@ -252,6 +260,41 @@ function encodeArray(value, path, ancestors) {
252
260
  }
253
261
  return `[${items.join(",")}]`;
254
262
  }
263
+ function encodeDate(value, path) {
264
+ expectBuiltIn(value, Date.prototype, "dates", path);
265
+ if (Number.isNaN(value.getTime())) {
266
+ throw new DurableValueError(`${path}: invalid Date`);
267
+ }
268
+ return `{"$type":"date","value":${JSON.stringify(value.toISOString())}}`;
269
+ }
270
+ function encodeMap(value, path, ancestors) {
271
+ expectBuiltIn(value, Map.prototype, "maps", path);
272
+ const entries = [];
273
+ let i = 0;
274
+ for (const [key, item] of value) {
275
+ const entryPath = `${path}.entries[${i++}]`;
276
+ const encodedKey = encodeValue(key, `${entryPath}[0]`, ancestors);
277
+ entries.push(`[${encodedKey},${encodeValue(item, `${entryPath}[1]`, ancestors)}]`);
278
+ }
279
+ return `{"$type":"map","entries":[${entries.join(",")}]}`;
280
+ }
281
+ function encodeSet(value, path, ancestors) {
282
+ expectBuiltIn(value, Set.prototype, "sets", path);
283
+ const values = [];
284
+ let i = 0;
285
+ for (const item of value) {
286
+ values.push(encodeValue(item, `${path}.values[${i++}]`, ancestors));
287
+ }
288
+ return `{"$type":"set","values":[${values.join(",")}]}`;
289
+ }
290
+ function expectBuiltIn(value, proto, kind, path) {
291
+ if (Object.getPrototypeOf(value) !== proto) {
292
+ throw new DurableValueError(`${path}: ${kind} must not be subclassed`);
293
+ }
294
+ if (Reflect.ownKeys(value).length > 0) {
295
+ throw new DurableValueError(`${path}: ${kind} must not have own properties`);
296
+ }
297
+ }
255
298
  function encodeObject(value, path, ancestors) {
256
299
  if (!isPlainObject(value)) {
257
300
  const name = Object.getPrototypeOf(value)?.constructor?.name ?? "object";
@@ -380,12 +423,68 @@ function decodeParsedValue(parsed, path = "$") {
380
423
  }
381
424
  return decodeObject(value, `${path}.value`);
382
425
  }
426
+ case "bigint":
427
+ return decodeBigInt(object, path);
428
+ case "date":
429
+ return decodeDate(object, path);
430
+ case "map":
431
+ return decodeMap(object, path);
432
+ case "set":
433
+ return decodeSet(object, path);
383
434
  case "error":
384
435
  return decodeError(object, path);
385
436
  default:
386
437
  throw new DurableValueError(`${path}: unknown $type ${JSON.stringify(object.$type)}`);
387
438
  }
388
439
  }
440
+ function decodeBigInt(tag, path) {
441
+ expectKeys(tag, path, ["$type", "value"], []);
442
+ const { value } = tag;
443
+ if (typeof value !== "string" || !/^-?(0|[1-9][0-9]*)$/.test(value) || value === "-0") {
444
+ throw new DurableValueError(`${path}.value: must be an integer string`);
445
+ }
446
+ return BigInt(value);
447
+ }
448
+ function decodeDate(tag, path) {
449
+ expectKeys(tag, path, ["$type", "value"], []);
450
+ const { value } = tag;
451
+ const date = typeof value === "string" ? new Date(value) : undefined;
452
+ if (!date || Number.isNaN(date.getTime()) || date.toISOString() !== value) {
453
+ throw new DurableValueError(`${path}.value: must be an ISO 8601 date string`);
454
+ }
455
+ return date;
456
+ }
457
+ function decodeMap(tag, path) {
458
+ expectKeys(tag, path, ["$type", "entries"], []);
459
+ const entries = expectArray(tag.entries, `${path}.entries`);
460
+ const map = new Map;
461
+ entries.forEach((entry, i) => {
462
+ const entryPath = `${path}.entries[${i}]`;
463
+ if (!Array.isArray(entry) || entry.length !== 2) {
464
+ throw new DurableValueError(`${entryPath}: must be a [key, value] pair`);
465
+ }
466
+ map.set(decodeParsedValue(entry[0], `${entryPath}[0]`), decodeParsedValue(entry[1], `${entryPath}[1]`));
467
+ });
468
+ if (map.size !== entries.length) {
469
+ throw new DurableValueError(`${path}.entries: duplicate keys`);
470
+ }
471
+ return map;
472
+ }
473
+ function decodeSet(tag, path) {
474
+ expectKeys(tag, path, ["$type", "values"], []);
475
+ const values = expectArray(tag.values, `${path}.values`);
476
+ const set = new Set(values.map((item, i) => decodeParsedValue(item, `${path}.values[${i}]`)));
477
+ if (set.size !== values.length) {
478
+ throw new DurableValueError(`${path}.values: duplicate values`);
479
+ }
480
+ return set;
481
+ }
482
+ function expectArray(value, path) {
483
+ if (!Array.isArray(value)) {
484
+ throw new DurableValueError(`${path}: must be an array`);
485
+ }
486
+ return value;
487
+ }
389
488
  function decodeObject(object, path) {
390
489
  const decoded = {};
391
490
  for (const key of Object.keys(object)) {
@@ -1071,6 +1170,7 @@ class ExecutionDispatcher {
1071
1170
  leaseDuration;
1072
1171
  renewInterval;
1073
1172
  abortGracePeriod;
1173
+ filter;
1074
1174
  running = false;
1075
1175
  looping = false;
1076
1176
  timer;
@@ -1086,6 +1186,7 @@ class ExecutionDispatcher {
1086
1186
  this.leaseDuration = options.leaseDuration ?? DEFAULT_LEASE_DURATION;
1087
1187
  this.renewInterval = options.renewInterval ?? this.leaseDuration / 3;
1088
1188
  this.abortGracePeriod = options.abortGracePeriod ?? DEFAULT_ABORT_GRACE_PERIOD;
1189
+ this.filter = options.filter;
1089
1190
  if (!Number.isInteger(this.concurrency) || this.concurrency < 1) {
1090
1191
  throw new RangeError("concurrency must be a positive integer");
1091
1192
  }
@@ -1098,6 +1199,9 @@ class ExecutionDispatcher {
1098
1199
  if (!(this.abortGracePeriod >= 0)) {
1099
1200
  throw new RangeError("abortGracePeriod must not be negative");
1100
1201
  }
1202
+ if (this.filter?.executionIds?.length === 0) {
1203
+ throw new RangeError("filter.executionIds must not be empty");
1204
+ }
1101
1205
  }
1102
1206
  start() {
1103
1207
  if (this.running)
@@ -1124,7 +1228,8 @@ class ExecutionDispatcher {
1124
1228
  try {
1125
1229
  leases = await this.runtime.executions.claimDue({
1126
1230
  limit: slots,
1127
- duration: this.leaseDuration
1231
+ duration: this.leaseDuration,
1232
+ filter: this.filter
1128
1233
  });
1129
1234
  } finally {
1130
1235
  this.claiming -= slots;
@@ -1693,6 +1798,11 @@ function diffStorePaths(previous, next) {
1693
1798
  function visit(left, right, path) {
1694
1799
  if (Object.is(left, right))
1695
1800
  return;
1801
+ if (isOpaqueValue(left) || isOpaqueValue(right)) {
1802
+ if (!sameEncoding(left, right))
1803
+ paths.push(path);
1804
+ return;
1805
+ }
1696
1806
  if (!isDiffableObject(left) || !isDiffableObject(right)) {
1697
1807
  paths.push(path);
1698
1808
  return;
@@ -1720,6 +1830,11 @@ function trackStoreSelector(state, selector) {
1720
1830
  function track(value, path) {
1721
1831
  if (!isDiffableObject(value))
1722
1832
  return value;
1833
+ if (isOpaqueValue(value)) {
1834
+ if (path.length === 0)
1835
+ paths.push(path);
1836
+ return value;
1837
+ }
1723
1838
  const cached = proxies.get(value);
1724
1839
  if (cached)
1725
1840
  return cached;
@@ -1766,6 +1881,10 @@ function trackStoreUpdater(target) {
1766
1881
  function track(value, path) {
1767
1882
  if (!isDiffableObject(value))
1768
1883
  return value;
1884
+ if (isOpaqueValue(value)) {
1885
+ paths.push(path);
1886
+ return value;
1887
+ }
1769
1888
  const cached = proxies.get(value);
1770
1889
  if (cached)
1771
1890
  return cached;
@@ -1818,6 +1937,14 @@ function isPathPrefix(prefix, path) {
1818
1937
  function isDiffableObject(value) {
1819
1938
  return typeof value === "object" && value !== null;
1820
1939
  }
1940
+ function isOpaqueValue(value) {
1941
+ return value instanceof Date || value instanceof Map || value instanceof Set;
1942
+ }
1943
+ function sameEncoding(left, right) {
1944
+ const a = durableValueCodec.encode(left);
1945
+ const b = durableValueCodec.encode(right);
1946
+ return a.status === "encoded" && b.status === "encoded" && a.canonical === b.canonical;
1947
+ }
1821
1948
  function arrayKeyToPathSegment(key) {
1822
1949
  if (/^(0|[1-9]\d*)$/.test(key))
1823
1950
  return Number(key);
@@ -1,6 +1,7 @@
1
1
  import type { Logger } from "pino";
2
2
  import type { WorkflowInvoker } from "../base/invoker";
3
3
  import type { Runtime } from "../base/runtime";
4
+ import type { ExecutionClaimFilter } from "../base/execution";
4
5
  export declare const DEFAULT_DISPATCHER_CONCURRENCY = 10;
5
6
  export declare const DEFAULT_ABORT_GRACE_PERIOD = 1000;
6
7
  export interface DispatcherOptions {
@@ -28,6 +29,14 @@ export interface DispatcherOptions {
28
29
  * @default 1_000
29
30
  */
30
31
  abortGracePeriod?: number;
32
+ /**
33
+ * Delivers only the executions that match. It is passed to every `claimDue`,
34
+ * so other executions are never claimed and gain no redelivery delay. An
35
+ * empty `executionIds` list is rejected, since the dispatcher would never
36
+ * deliver anything.
37
+ * @default every execution whose due time has passed
38
+ */
39
+ filter?: ExecutionClaimFilter;
31
40
  }
32
41
  /**
33
42
  * The only component that delivers executions. It leases due executions, reads
@@ -60,6 +69,7 @@ export declare class ExecutionDispatcher {
60
69
  private leaseDuration;
61
70
  private renewInterval;
62
71
  private abortGracePeriod;
72
+ private filter;
63
73
  private running;
64
74
  private looping;
65
75
  private timer;
@@ -1 +1 @@
1
- {"version":3,"file":"execution-dispatcher.d.ts","sourceRoot":"","sources":["../../src/lib/execution-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAS/C,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAEjD,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAIhD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAA4C;IACzD,OAAO,CAAC,QAAQ,CAA4B;IAC5C,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAK;gBAET,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB;IAwBxD,KAAK;IAML,mEAAmE;IAC7D,IAAI;IAOV,IAAI,gBAAgB,WAEnB;IAED;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAwB7B,yDAAyD;IACnD,KAAK;IAMX,OAAO,CAAC,QAAQ;YASF,IAAI;YAiBJ,QAAQ;IAiFtB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAiDzB;;;;;OAKG;IACH,OAAO,CAAC,KAAK;IAiDb,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,IAAI;CAOb"}
1
+ {"version":3,"file":"execution-dispatcher.d.ts","sourceRoot":"","sources":["../../src/lib/execution-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAEV,oBAAoB,EAGrB,MAAM,mBAAmB,CAAC;AAI3B,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAEjD,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAIhD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAA4C;IACzD,OAAO,CAAC,QAAQ,CAA4B;IAC5C,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAK;gBAET,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB;IA4BxD,KAAK;IAML,mEAAmE;IAC7D,IAAI;IAOV,IAAI,gBAAgB,WAEnB;IAED;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAyB7B,yDAAyD;IACnD,KAAK;IAMX,OAAO,CAAC,QAAQ;YASF,IAAI;YAiBJ,QAAQ;IAiFtB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAiDzB;;;;;OAKG;IACH,OAAO,CAAC,KAAK;IAiDb,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,IAAI;CAOb"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yieldstar/core",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "license": "MIT",
5
5
  "author": "Daniel Grant",
6
6
  "repository": {
@@ -86,12 +86,16 @@ describe("durableValueCodec.encode rejects", () => {
86
86
  test.each([
87
87
  ["functions", () => {}],
88
88
  ["symbols", Symbol("s")],
89
- ["bigints", 1n],
90
89
  ["NaN", Number.NaN],
91
90
  ["Infinity", Number.POSITIVE_INFINITY],
92
91
  ["-Infinity", Number.NEGATIVE_INFINITY],
93
- ["Dates", new Date(0)],
94
- ["Maps", new Map()],
92
+ ["invalid Dates", new Date(Number.NaN)],
93
+ ["Date subclasses", new (class Day extends Date {})(0)],
94
+ ["Dates with own properties", Object.assign(new Date(0), { tz: "UTC" })],
95
+ ["Map subclasses", new (class Index extends Map {})()],
96
+ ["Sets with own properties", Object.assign(new Set(), { label: "s" })],
97
+ ["Maps with invalid keys", new Map([[() => 1, 1]])],
98
+ ["Sets with invalid values", new Set([Symbol("s")])],
95
99
  ["class instances", new (class Point {})()],
96
100
  ["array subclasses", new (class List extends Array {})()],
97
101
  ])("%s", (_label, value) => {
@@ -99,7 +103,8 @@ describe("durableValueCodec.encode rejects", () => {
99
103
  });
100
104
 
101
105
  test("nested invalid values, naming their path", () => {
102
- expect(invalidMessage({ a: { b: new Date(0) } })).toMatch(/^\$\["a"\]\["b"\]: /);
106
+ expect(invalidMessage({ a: { b: () => 1 } })).toMatch(/^\$\["a"\]\["b"\]: /);
107
+ expect(invalidMessage(new Map([["k", () => 1]]))).toMatch(/^\$\.entries\[0\]\[1\]: /);
103
108
  });
104
109
 
105
110
  test("missing array items", () => {
@@ -186,6 +191,69 @@ describe("durableValueCodec tags undefined", () => {
186
191
  });
187
192
  });
188
193
 
194
+ describe("durableValueCodec tags built-in types", () => {
195
+ test("bigints as decimal strings", () => {
196
+ expect(canonical(-12n)).toBe('{"$type":"bigint","value":"-12"}');
197
+ expect(roundTrip(2n ** 70n)).toBe(2n ** 70n);
198
+ });
199
+
200
+ test("Dates as ISO strings", () => {
201
+ const at = new Date("2026-10-29T12:00:00.123Z");
202
+ expect(canonical(at)).toBe('{"$type":"date","value":"2026-10-29T12:00:00.123Z"}');
203
+ const decoded = roundTrip(at);
204
+ expect(decoded).toBeInstanceOf(Date);
205
+ expect(decoded).not.toBe(at);
206
+ expect((decoded as Date).getTime()).toBe(at.getTime());
207
+ });
208
+
209
+ test("Dates outside the four-digit year range", () => {
210
+ const far = new Date(8.64e15);
211
+ expect((roundTrip(far) as Date).getTime()).toBe(far.getTime());
212
+ });
213
+
214
+ test("Maps as entries in insertion order, with any durable keys", () => {
215
+ const map = new Map<unknown, unknown>([
216
+ ["b", 1],
217
+ [1n, new Date(0)],
218
+ [{ id: 1 }, [undefined]],
219
+ ]);
220
+ expect(canonical(new Map([["a", 1]]))).toBe('{"$type":"map","entries":[["a",1]]}');
221
+ expect(roundTrip(map)).toEqual(map);
222
+ expect([...(roundTrip(map) as Map<unknown, unknown>).keys()][0]).toBe("b");
223
+ });
224
+
225
+ test("Sets as values in insertion order", () => {
226
+ const set = new Set([3, 1, "x"]);
227
+ expect(canonical(set)).toBe('{"$type":"set","values":[3,1,"x"]}');
228
+ expect([...(roundTrip(set) as Set<unknown>)]).toEqual([3, 1, "x"]);
229
+ });
230
+
231
+ test("Maps and Sets that differ only in order encode differently", () => {
232
+ expect(canonical(new Set([1, 2]))).not.toBe(canonical(new Set([2, 1])));
233
+ expect(canonical(new Map([["a", 1], ["b", 2]]))).not.toBe(
234
+ canonical(new Map([["b", 2], ["a", 1]]))
235
+ );
236
+ });
237
+
238
+ test("nested inside objects, arrays and errors", () => {
239
+ const value = { at: new Date(0), tags: [new Set(["a"])], ids: new Map([[1, 2n]]) };
240
+ expect(roundTrip(value)).toEqual(value);
241
+ const error = Object.assign(new Error("boom"), { at: new Date(0) });
242
+ expect((roundTrip(error) as typeof error).at).toEqual(new Date(0));
243
+ });
244
+
245
+ test("a Map that contains itself is a reference cycle", () => {
246
+ const map = new Map<string, unknown>();
247
+ map.set("self", map);
248
+ expect(invalidMessage(map)).toMatch(/reference cycle/);
249
+ });
250
+
251
+ test("plain objects shaped like the new tags read back as written", () => {
252
+ const value = { $type: "date", value: "2026-10-29T12:00:00.000Z" };
253
+ expect(roundTrip(value)).toEqual(value);
254
+ });
255
+ });
256
+
189
257
  describe("durableValueCodec wraps plain objects with a $type key", () => {
190
258
  test("so they read back as written", () => {
191
259
  const value = { $type: "undefined" };
@@ -243,7 +311,15 @@ describe("durableValueCodec.decode", () => {
243
311
 
244
312
  test.each([
245
313
  ["text that is not JSON", "{"],
246
- ["an unknown tag", '{"$type":"date","value":0}'],
314
+ ["an unknown tag", '{"$type":"regexp","value":"a"}'],
315
+ ["a bigint that is not an integer string", '{"$type":"bigint","value":"1.5"}'],
316
+ ["a bigint written as -0", '{"$type":"bigint","value":"-0"}'],
317
+ ["a date that is not a string", '{"$type":"date","value":0}'],
318
+ ["a date that is not in toISOString form", '{"$type":"date","value":"2026-10-29"}'],
319
+ ["a map entry that is not a pair", '{"$type":"map","entries":[["a"]]}'],
320
+ ["a map with duplicate keys", '{"$type":"map","entries":[["a",1],["a",2]]}'],
321
+ ["a set with duplicate values", '{"$type":"set","values":[1,1]}'],
322
+ ["a set without values", '{"$type":"set"}'],
247
323
  ["a tag with extra keys", '{"$type":"undefined","value":1}'],
248
324
  ["a wrapped value that is not an object", '{"$type":"object","value":[1]}'],
249
325
  ["an error without a message", '{"$type":"error","name":"Error"}'],
@@ -258,7 +334,7 @@ describe("Durable<T>", () => {
258
334
  return value;
259
335
  }
260
336
 
261
- test("accepts interfaces, undefined and errors", () => {
337
+ test("accepts interfaces, undefined, errors and built-in types", () => {
262
338
  interface Reservation {
263
339
  id: string;
264
340
  note?: string;
@@ -268,18 +344,19 @@ describe("Durable<T>", () => {
268
344
  const reservation: Reservation = { id: "r", lines: [], error: null };
269
345
  expectTypeOf(record(reservation)).toEqualTypeOf<Reservation>();
270
346
  expectTypeOf(record(undefined)).toEqualTypeOf<undefined>();
347
+ record({ at: new Date(), n: 1n });
348
+ record({ map: new Map<string, { at: Date }>() });
349
+ record(new Set<number>());
350
+ const readonlyMap: ReadonlyMap<string, number> = new Map();
351
+ record({ readonlyMap });
271
352
  });
272
353
 
273
- test("rejects Dates, Maps, Sets, bigints and functions", () => {
274
- // @ts-expect-error
275
- record({ at: new Date() });
276
- // @ts-expect-error
277
- record({ map: new Map<string, number>() });
354
+ test("rejects functions, including inside Maps and Sets", () => {
278
355
  // @ts-expect-error
279
- record(new Set<number>());
356
+ record({ fn: () => 1 });
280
357
  // @ts-expect-error
281
- record(1n);
358
+ record(new Map<string, () => number>());
282
359
  // @ts-expect-error
283
- record({ fn: () => 1 });
360
+ record(new Set<() => number>());
284
361
  });
285
362
  });
@@ -6,8 +6,12 @@ export type DurableValue =
6
6
  | number
7
7
  | string
8
8
  | undefined
9
+ | bigint
10
+ | Date
9
11
  | Error
10
12
  | DurableValue[]
13
+ | Map<DurableValue, DurableValue>
14
+ | Set<DurableValue>
11
15
  | DurableObject;
12
16
 
13
17
  export type DurableObject = { [key: string]: DurableValue };
@@ -23,11 +27,21 @@ export type Durable<T> = T extends
23
27
  | boolean
24
28
  | null
25
29
  | undefined
30
+ | bigint
31
+ | Date
26
32
  | Error
27
33
  ? T
28
34
  : T extends readonly (infer U)[]
29
35
  ? readonly Durable<U>[]
30
- : T extends Function | Date | Map<any, any> | Set<any> | bigint
36
+ : T extends Map<infer K, infer V>
37
+ ? Map<Durable<K>, Durable<V>>
38
+ : T extends ReadonlyMap<infer K, infer V>
39
+ ? ReadonlyMap<Durable<K>, Durable<V>>
40
+ : T extends Set<infer U>
41
+ ? Set<Durable<U>>
42
+ : T extends ReadonlySet<infer U>
43
+ ? ReadonlySet<Durable<U>>
44
+ : T extends Function
31
45
  ? never
32
46
  : { [K in keyof T]: Durable<T[K]> };
33
47
 
@@ -53,9 +67,11 @@ export interface DurableValueCodec {
53
67
  /**
54
68
  * Validates `value` recursively and returns its canonical JSON: object keys
55
69
  * sorted by UTF-16 code unit and `-0` written as `0`, so equal values always
56
- * encode to the same string. `undefined`, errors and plain objects with an
57
- * own `$type` key are written as tagged objects. Never throws for an invalid
58
- * value.
70
+ * encode to the same string. `undefined`, `bigint`, `Date`, `Map`, `Set`,
71
+ * errors and plain objects with an own `$type` key are written as tagged
72
+ * objects. Map entries and set values keep their insertion order, so maps
73
+ * or sets that differ only in order encode differently. Never throws for an
74
+ * invalid value.
59
75
  */
60
76
  encode(value: unknown): DurableValueEncoding;
61
77
 
@@ -134,6 +150,8 @@ function encodeValue(value: unknown, path: string, ancestors: Set<object>): stri
134
150
  return value ? "true" : "false";
135
151
  case "string":
136
152
  return JSON.stringify(value);
153
+ case "bigint":
154
+ return `{"$type":"bigint","value":"${value}"}`;
137
155
  case "number":
138
156
  if (!Number.isFinite(value)) {
139
157
  throw new DurableValueError(`${path}: ${value} is not a finite number`);
@@ -154,6 +172,9 @@ function encodeValue(value: unknown, path: string, ancestors: Set<object>): stri
154
172
  try {
155
173
  if (Array.isArray(value)) return encodeArray(value, path, ancestors);
156
174
  if (value instanceof Error) return encodeError(value, path, ancestors);
175
+ if (value instanceof Date) return encodeDate(value, path);
176
+ if (value instanceof Map) return encodeMap(value, path, ancestors);
177
+ if (value instanceof Set) return encodeSet(value, path, ancestors);
157
178
  return encodeObject(value, path, ancestors);
158
179
  } finally {
159
180
  // Error encoding recovers from invalid properties, so the set must be
@@ -187,6 +208,52 @@ function encodeArray(value: unknown[], path: string, ancestors: Set<object>) {
187
208
  return `[${items.join(",")}]`;
188
209
  }
189
210
 
211
+ function encodeDate(value: Date, path: string) {
212
+ expectBuiltIn(value, Date.prototype, "dates", path);
213
+ if (Number.isNaN(value.getTime())) {
214
+ throw new DurableValueError(`${path}: invalid Date`);
215
+ }
216
+ return `{"$type":"date","value":${JSON.stringify(value.toISOString())}}`;
217
+ }
218
+
219
+ function encodeMap(
220
+ value: Map<unknown, unknown>,
221
+ path: string,
222
+ ancestors: Set<object>
223
+ ) {
224
+ expectBuiltIn(value, Map.prototype, "maps", path);
225
+ const entries: string[] = [];
226
+ let i = 0;
227
+ for (const [key, item] of value) {
228
+ const entryPath = `${path}.entries[${i++}]`;
229
+ const encodedKey = encodeValue(key, `${entryPath}[0]`, ancestors);
230
+ entries.push(`[${encodedKey},${encodeValue(item, `${entryPath}[1]`, ancestors)}]`);
231
+ }
232
+ return `{"$type":"map","entries":[${entries.join(",")}]}`;
233
+ }
234
+
235
+ function encodeSet(value: Set<unknown>, path: string, ancestors: Set<object>) {
236
+ expectBuiltIn(value, Set.prototype, "sets", path);
237
+ const values: string[] = [];
238
+ let i = 0;
239
+ for (const item of value) {
240
+ values.push(encodeValue(item, `${path}.values[${i++}]`, ancestors));
241
+ }
242
+ return `{"$type":"set","values":[${values.join(",")}]}`;
243
+ }
244
+
245
+ /**
246
+ * Rejects subclasses and own properties, which the tag would not keep.
247
+ */
248
+ function expectBuiltIn(value: object, proto: object, kind: string, path: string) {
249
+ if (Object.getPrototypeOf(value) !== proto) {
250
+ throw new DurableValueError(`${path}: ${kind} must not be subclassed`);
251
+ }
252
+ if (Reflect.ownKeys(value).length > 0) {
253
+ throw new DurableValueError(`${path}: ${kind} must not have own properties`);
254
+ }
255
+ }
256
+
190
257
  function encodeObject(value: object, path: string, ancestors: Set<object>) {
191
258
  if (!isPlainObject(value)) {
192
259
  const name = Object.getPrototypeOf(value)?.constructor?.name ?? "object";
@@ -336,6 +403,14 @@ export function decodeParsedValue(parsed: unknown, path = "$"): DurableValue {
336
403
  }
337
404
  return decodeObject(value as Record<string, unknown>, `${path}.value`);
338
405
  }
406
+ case "bigint":
407
+ return decodeBigInt(object, path);
408
+ case "date":
409
+ return decodeDate(object, path);
410
+ case "map":
411
+ return decodeMap(object, path);
412
+ case "set":
413
+ return decodeSet(object, path);
339
414
  case "error":
340
415
  return decodeError(object, path);
341
416
  default:
@@ -343,6 +418,69 @@ export function decodeParsedValue(parsed: unknown, path = "$"): DurableValue {
343
418
  }
344
419
  }
345
420
 
421
+ function decodeBigInt(tag: Record<string, unknown>, path: string): bigint {
422
+ expectKeys(tag, path, ["$type", "value"], []);
423
+ const { value } = tag;
424
+ if (typeof value !== "string" || !/^-?(0|[1-9][0-9]*)$/.test(value) || value === "-0") {
425
+ throw new DurableValueError(`${path}.value: must be an integer string`);
426
+ }
427
+ return BigInt(value);
428
+ }
429
+
430
+ function decodeDate(tag: Record<string, unknown>, path: string): Date {
431
+ expectKeys(tag, path, ["$type", "value"], []);
432
+ const { value } = tag;
433
+ const date = typeof value === "string" ? new Date(value) : undefined;
434
+ // Only the string toISOString writes is accepted, so that every date has
435
+ // one encoding.
436
+ if (!date || Number.isNaN(date.getTime()) || date.toISOString() !== value) {
437
+ throw new DurableValueError(`${path}.value: must be an ISO 8601 date string`);
438
+ }
439
+ return date;
440
+ }
441
+
442
+ function decodeMap(
443
+ tag: Record<string, unknown>,
444
+ path: string
445
+ ): Map<DurableValue, DurableValue> {
446
+ expectKeys(tag, path, ["$type", "entries"], []);
447
+ const entries = expectArray(tag.entries, `${path}.entries`);
448
+ const map = new Map<DurableValue, DurableValue>();
449
+ entries.forEach((entry, i) => {
450
+ const entryPath = `${path}.entries[${i}]`;
451
+ if (!Array.isArray(entry) || entry.length !== 2) {
452
+ throw new DurableValueError(`${entryPath}: must be a [key, value] pair`);
453
+ }
454
+ map.set(
455
+ decodeParsedValue(entry[0], `${entryPath}[0]`),
456
+ decodeParsedValue(entry[1], `${entryPath}[1]`)
457
+ );
458
+ });
459
+ if (map.size !== entries.length) {
460
+ throw new DurableValueError(`${path}.entries: duplicate keys`);
461
+ }
462
+ return map;
463
+ }
464
+
465
+ function decodeSet(tag: Record<string, unknown>, path: string): Set<DurableValue> {
466
+ expectKeys(tag, path, ["$type", "values"], []);
467
+ const values = expectArray(tag.values, `${path}.values`);
468
+ const set = new Set(
469
+ values.map((item, i) => decodeParsedValue(item, `${path}.values[${i}]`))
470
+ );
471
+ if (set.size !== values.length) {
472
+ throw new DurableValueError(`${path}.values: duplicate values`);
473
+ }
474
+ return set;
475
+ }
476
+
477
+ function expectArray(value: unknown, path: string): unknown[] {
478
+ if (!Array.isArray(value)) {
479
+ throw new DurableValueError(`${path}: must be an array`);
480
+ }
481
+ return value;
482
+ }
483
+
346
484
  function decodeObject(object: Record<string, unknown>, path: string): DurableObject {
347
485
  const decoded: DurableObject = {};
348
486
  for (const key of Object.keys(object)) {
@@ -97,12 +97,14 @@ describe("error encoding", () => {
97
97
 
98
98
  test("omits non-durable properties", () => {
99
99
  const error = Object.assign(new Error("boom"), {
100
- at: new Date(0),
100
+ at: new WeakMap(),
101
101
  handler: () => {},
102
102
  ok: 1,
103
+ when: new Date(0),
103
104
  });
104
105
  const revived = roundTrip(error);
105
- expect(Object.keys(revived)).toEqual(["ok"]);
106
+ expect(Object.keys(revived)).toEqual(["ok", "when"]);
107
+ expect((revived as unknown as { when: Date }).when).toEqual(new Date(0));
106
108
  });
107
109
 
108
110
  test("ignores a non-string code", () => {
@@ -202,9 +204,9 @@ describe("encodeThrownValue", () => {
202
204
  });
203
205
 
204
206
  test("records a non-durable thrown value as Error(String(value))", () => {
205
- const revived = decode(encodeThrownValue(new Date(0))) as Error;
207
+ const revived = decode(encodeThrownValue(new WeakMap())) as Error;
206
208
  expect(Object.getPrototypeOf(revived)).toBe(Error.prototype);
207
- expect(revived.message).toBe(String(new Date(0)));
208
- expect((decode(encodeThrownValue(10n)) as Error).message).toBe("10");
209
+ expect(revived.message).toBe(String(new WeakMap()));
210
+ expect((decode(encodeThrownValue(Symbol("s"))) as Error).message).toBe("Symbol(s)");
209
211
  });
210
212
  });
@@ -62,6 +62,16 @@ export type ExecutionLease = {
62
62
  expiresAt: number;
63
63
  };
64
64
 
65
+ /**
66
+ * Limits a claim to the executions that match. The claim applies it in the same
67
+ * atomic step, so an execution that does not match is not leased and gains no
68
+ * redelivery delay.
69
+ */
70
+ export type ExecutionClaimFilter = {
71
+ /** Claims only executions whose ID is in this list. An empty list claims nothing. */
72
+ executionIds?: readonly string[];
73
+ };
74
+
65
75
  /**
66
76
  * Returned by a fenced write whose lease is no longer current: a higher token
67
77
  * has been issued, or the lease has ended. The write changed nothing, and its
@@ -184,6 +194,8 @@ export interface ExecutionClient {
184
194
  claimDue(request: {
185
195
  limit: number;
186
196
  duration: number;
197
+ /** When absent, any execution whose due time has passed may be claimed. */
198
+ filter?: ExecutionClaimFilter;
187
199
  }): Promise<ExecutionLease[]>;
188
200
 
189
201
  /**
@@ -1,6 +1,7 @@
1
1
  import { expect, test } from "vitest";
2
2
  import {
3
3
  cloneStoreState,
4
+ diffStorePaths,
4
5
  storePathsIntersect,
5
6
  trackStoreSelector,
6
7
  trackStoreUpdater,
@@ -174,3 +175,58 @@ test("cloneStoreState launders proxy wrappers into plain objects", () => {
174
175
  expect(() => structuredClone(clean)).not.toThrow();
175
176
  expect(clean.wrapper.inner).toEqual(makeState().messages);
176
177
  });
178
+
179
+ type Ledger = { opened: Date; totals: Map<string, number>; seen: Set<string>; note: string };
180
+
181
+ function makeLedger(): Ledger {
182
+ return {
183
+ opened: new Date(0),
184
+ totals: new Map([["mug", 1]]),
185
+ seen: new Set(["mug"]),
186
+ note: "",
187
+ };
188
+ }
189
+
190
+ test("trackStoreUpdater: Map, Set and Date methods work on the draft and record their path", () => {
191
+ const draft = makeLedger();
192
+ const tracked = trackStoreUpdater(draft);
193
+
194
+ tracked.draft.totals.set("cup", 2);
195
+ tracked.draft.seen.add("cup");
196
+ tracked.draft.opened.setTime(1);
197
+
198
+ const paths = tracked.writePaths();
199
+ expect(wakes(["totals"], paths)).toBe(true);
200
+ expect(wakes(["seen"], paths)).toBe(true);
201
+ expect(wakes(["opened"], paths)).toBe(true);
202
+ expect(wakes(["note"], paths)).toBe(false);
203
+ expect(draft.totals.get("cup")).toBe(2);
204
+ expect(draft.seen.has("cup")).toBe(true);
205
+ expect(draft.opened.getTime()).toBe(1);
206
+ });
207
+
208
+ test("trackStoreSelector: Map, Set and Date methods work and record a read of the whole value", () => {
209
+ const { result, readPaths } = trackStoreSelector(makeLedger(), (state) => [
210
+ state.totals.get("mug"),
211
+ state.seen.has("mug"),
212
+ state.opened.getTime(),
213
+ ]);
214
+
215
+ expect(result).toEqual([1, true, 0]);
216
+ expect(readPaths).toEqual(
217
+ expect.arrayContaining([["totals"], ["seen"], ["opened"]])
218
+ );
219
+ });
220
+
221
+ test("diffStorePaths: compares Maps, Sets and Dates by content", () => {
222
+ const next = makeLedger();
223
+ expect(diffStorePaths(makeLedger(), next)).toEqual([]);
224
+
225
+ next.totals.set("mug", 2);
226
+ next.seen.add("cup");
227
+ next.opened = new Date(1);
228
+ expect(diffStorePaths(makeLedger(), next)).toEqual(
229
+ expect.arrayContaining([["totals"], ["seen"], ["opened"]])
230
+ );
231
+ expect(diffStorePaths(makeLedger(), next)).toHaveLength(3);
232
+ });
package/src/base/store.ts CHANGED
@@ -2,7 +2,13 @@ import type { StandardSchemaV1 } from "@standard-schema/spec";
2
2
  import { durableValueCodec, type Durable, type IfDurable } from "./durable-value";
3
3
  import { WorkflowValueError, registerErrorClass } from "./errors";
4
4
 
5
- export type Draft<T> = T extends object
5
+ export type Draft<T> = T extends Date
6
+ ? T
7
+ : T extends ReadonlyMap<infer K, infer V>
8
+ ? Map<Draft<K>, Draft<V>>
9
+ : T extends ReadonlySet<infer U>
10
+ ? Set<Draft<U>>
11
+ : T extends object
6
12
  ? { -readonly [K in keyof T]: Draft<T[K]> }
7
13
  : T;
8
14
 
@@ -904,6 +910,11 @@ export function diffStorePaths(previous: unknown, next: unknown): StorePath[] {
904
910
  function visit(left: unknown, right: unknown, path: StorePath) {
905
911
  if (Object.is(left, right)) return;
906
912
 
913
+ if (isOpaqueValue(left) || isOpaqueValue(right)) {
914
+ if (!sameEncoding(left, right)) paths.push(path);
915
+ return;
916
+ }
917
+
907
918
  if (!isDiffableObject(left) || !isDiffableObject(right)) {
908
919
  paths.push(path);
909
920
  return;
@@ -953,6 +964,12 @@ export function trackStoreSelector<T, R>(
953
964
 
954
965
  function track(value: unknown, path: StorePath): unknown {
955
966
  if (!isDiffableObject(value)) return value;
967
+ if (isOpaqueValue(value)) {
968
+ // The selector reads the whole value, because its methods do not work
969
+ // on a proxy.
970
+ if (path.length === 0) paths.push(path);
971
+ return value;
972
+ }
956
973
 
957
974
  const cached = proxies.get(value);
958
975
  if (cached) return cached;
@@ -1045,6 +1062,12 @@ export function trackStoreUpdater<T>(target: T): TrackedStoreUpdater<T> {
1045
1062
 
1046
1063
  function track(value: unknown, path: StorePath): unknown {
1047
1064
  if (!isDiffableObject(value)) return value;
1065
+ if (isOpaqueValue(value)) {
1066
+ // Its methods do not work on a proxy, so the updater gets the raw value
1067
+ // and any read of it is recorded as a write.
1068
+ paths.push(path);
1069
+ return value;
1070
+ }
1048
1071
 
1049
1072
  const cached = proxies.get(value);
1050
1073
  if (cached) return cached;
@@ -1117,6 +1140,20 @@ function isDiffableObject(value: unknown): value is Record<string, unknown> {
1117
1140
  return typeof value === "object" && value !== null;
1118
1141
  }
1119
1142
 
1143
+ /**
1144
+ * Whether `value` keeps its contents in internal slots, which proxies and
1145
+ * `Object.keys` cannot see.
1146
+ */
1147
+ function isOpaqueValue(value: unknown): value is Date | Map<unknown, unknown> | Set<unknown> {
1148
+ return value instanceof Date || value instanceof Map || value instanceof Set;
1149
+ }
1150
+
1151
+ function sameEncoding(left: unknown, right: unknown) {
1152
+ const a = durableValueCodec.encode(left);
1153
+ const b = durableValueCodec.encode(right);
1154
+ return a.status === "encoded" && b.status === "encoded" && a.canonical === b.canonical;
1155
+ }
1156
+
1120
1157
  function arrayKeyToPathSegment(key: string): string | number {
1121
1158
  if (/^(0|[1-9]\d*)$/.test(key)) return Number(key);
1122
1159
  return key;
package/src/index.ts CHANGED
@@ -8,6 +8,7 @@ export type {
8
8
  ExecutionAdmissionErrorCode,
9
9
  ExecutionAdmissionRequest,
10
10
  ExecutionAdmissionResult,
11
+ ExecutionClaimFilter,
11
12
  ExecutionClient,
12
13
  ExecutionLease,
13
14
  ExecutionOutcome,
@@ -4,6 +4,7 @@ import { WorkerExitedError } from "../base/invoker";
4
4
  import type { Runtime } from "../base/runtime";
5
5
  import type {
6
6
  ExecutionAcknowledgeResult,
7
+ ExecutionClaimFilter,
7
8
  ExecutionLease,
8
9
  WorkflowRunOutcome,
9
10
  } from "../base/execution";
@@ -41,6 +42,14 @@ export interface DispatcherOptions {
41
42
  * @default 1_000
42
43
  */
43
44
  abortGracePeriod?: number;
45
+ /**
46
+ * Delivers only the executions that match. It is passed to every `claimDue`,
47
+ * so other executions are never claimed and gain no redelivery delay. An
48
+ * empty `executionIds` list is rejected, since the dispatcher would never
49
+ * deliver anything.
50
+ * @default every execution whose due time has passed
51
+ */
52
+ filter?: ExecutionClaimFilter;
44
53
  }
45
54
 
46
55
  /**
@@ -74,6 +83,7 @@ export class ExecutionDispatcher {
74
83
  private leaseDuration: number;
75
84
  private renewInterval: number;
76
85
  private abortGracePeriod: number;
86
+ private filter: ExecutionClaimFilter | undefined;
77
87
  private running = false;
78
88
  private looping = false;
79
89
  private timer: ReturnType<typeof setTimeout> | undefined;
@@ -91,6 +101,7 @@ export class ExecutionDispatcher {
91
101
  this.leaseDuration = options.leaseDuration ?? DEFAULT_LEASE_DURATION;
92
102
  this.renewInterval = options.renewInterval ?? this.leaseDuration / 3;
93
103
  this.abortGracePeriod = options.abortGracePeriod ?? DEFAULT_ABORT_GRACE_PERIOD;
104
+ this.filter = options.filter;
94
105
  if (!Number.isInteger(this.concurrency) || this.concurrency < 1) {
95
106
  throw new RangeError("concurrency must be a positive integer");
96
107
  }
@@ -103,6 +114,9 @@ export class ExecutionDispatcher {
103
114
  if (!(this.abortGracePeriod >= 0)) {
104
115
  throw new RangeError("abortGracePeriod must not be negative");
105
116
  }
117
+ if (this.filter?.executionIds?.length === 0) {
118
+ throw new RangeError("filter.executionIds must not be empty");
119
+ }
106
120
  }
107
121
 
108
122
  start() {
@@ -137,6 +151,7 @@ export class ExecutionDispatcher {
137
151
  leases = await this.runtime.executions.claimDue({
138
152
  limit: slots,
139
153
  duration: this.leaseDuration,
154
+ filter: this.filter,
140
155
  });
141
156
  } finally {
142
157
  this.claiming -= slots;
@@ -30,7 +30,7 @@ test.each([
30
30
  ["array params", { workflowId: "w", params: [] }],
31
31
  ["null params", { workflowId: "w", params: null }],
32
32
  ["string params", { workflowId: "w", params: "x" }],
33
- ["class instance params", { workflowId: "w", params: new Date(0) }],
33
+ ["class instance params", { workflowId: "w", params: new WeakMap() }],
34
34
  ])("prepareExecutionStart rejects %s", (_label, request) => {
35
35
  const prepared = prepareExecutionStart({ requestId, ...request } as never);
36
36
  expect(prepared.ok).toBe(false);
@@ -169,8 +169,8 @@ test("execution events round trip through the codec", () => {
169
169
  });
170
170
 
171
171
  test.each([
172
- ["a Date in params", { params: { at: new Date(0) }, context: new Map() }],
173
- ["a Date in context", { params: {}, context: new Map([["at", new Date(0)]]) }],
172
+ ["an invalid Date in params", { params: { at: new Date(Number.NaN) }, context: new Map() }],
173
+ ["a WeakMap in context", { params: {}, context: new Map([["at", new WeakMap()]]) }],
174
174
  ["a number context key", { params: {}, context: new Map([[7, 1]]) }],
175
175
  ])("prepareExecutionAdmission rejects %s with INVALID_EXECUTION_EVENT", (_label, event) => {
176
176
  expect(prepareExecutionAdmission({ workflowId: "w", ...event })).toMatchObject({
@@ -233,7 +233,7 @@ test("acknowledging a non-durable result records a failed outcome with INVALID_S
233
233
  const { state, lease } = claimExecution(admitted, { now: 0, duration: 1_000 });
234
234
  const acknowledged = acknowledgeExecution(state, {
235
235
  lease,
236
- outcome: { status: "completed", result: { at: new Date(0) } },
236
+ outcome: { status: "completed", result: { at: new WeakMap() } },
237
237
  now: 1,
238
238
  });
239
239
  expect(acknowledged.state.status).toBe("failed");