durable-actors 0.7.16 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/README.md +6 -6
  2. package/bin/durable-actors.js +2 -0
  3. package/dist/actor/actor.d.ts +20 -12
  4. package/dist/actor/actor.d.ts.map +1 -1
  5. package/dist/actor/actor.js +42 -35
  6. package/dist/actor/actor.js.map +1 -1
  7. package/dist/actor/alarm.d.ts +19 -0
  8. package/dist/actor/alarm.d.ts.map +1 -0
  9. package/dist/actor/alarm.js +2 -0
  10. package/dist/actor/alarm.js.map +1 -0
  11. package/dist/actor/context.d.ts +25 -0
  12. package/dist/actor/context.d.ts.map +1 -0
  13. package/dist/actor/context.js +83 -0
  14. package/dist/actor/context.js.map +1 -0
  15. package/dist/actor/database.d.ts +5 -4
  16. package/dist/actor/database.d.ts.map +1 -1
  17. package/dist/actor/database.js +9 -19
  18. package/dist/actor/database.js.map +1 -1
  19. package/dist/actor/decorators.d.ts +7 -2
  20. package/dist/actor/decorators.d.ts.map +1 -1
  21. package/dist/actor/decorators.js +11 -2
  22. package/dist/actor/decorators.js.map +1 -1
  23. package/dist/actor/resource.d.ts +9 -0
  24. package/dist/actor/resource.d.ts.map +1 -0
  25. package/dist/actor/resource.js +2 -0
  26. package/dist/actor/resource.js.map +1 -0
  27. package/dist/actor/schema.d.ts +3 -1
  28. package/dist/actor/schema.d.ts.map +1 -1
  29. package/dist/actor/schema.js.map +1 -1
  30. package/dist/actor/unchecked.d.ts +12 -0
  31. package/dist/actor/unchecked.d.ts.map +1 -0
  32. package/dist/actor/unchecked.js +8 -0
  33. package/dist/actor/unchecked.js.map +1 -0
  34. package/dist/cli/dev.d.ts.map +1 -1
  35. package/dist/cli/dev.js +13 -42
  36. package/dist/cli/dev.js.map +1 -1
  37. package/dist/cli/inspect.d.ts +73 -0
  38. package/dist/cli/inspect.d.ts.map +1 -0
  39. package/dist/cli/inspect.js +132 -0
  40. package/dist/cli/inspect.js.map +1 -0
  41. package/dist/cli/python.d.ts.map +1 -1
  42. package/dist/cli/python.js +0 -1
  43. package/dist/cli/python.js.map +1 -1
  44. package/dist/cli.d.ts +1 -1
  45. package/dist/cli.js +11 -18
  46. package/dist/cli.js.map +1 -1
  47. package/dist/client-runtime/http.d.ts +1 -1
  48. package/dist/client-runtime/http.d.ts.map +1 -1
  49. package/dist/client-runtime/http.js +1 -1
  50. package/dist/client-runtime/http.js.map +1 -1
  51. package/dist/client-runtime/stub.d.ts.map +1 -1
  52. package/dist/client-runtime/stub.js +11 -1
  53. package/dist/client-runtime/stub.js.map +1 -1
  54. package/dist/compiler/actor-compiler.d.ts +4 -2
  55. package/dist/compiler/actor-compiler.d.ts.map +1 -1
  56. package/dist/compiler/actor-compiler.js +48 -13
  57. package/dist/compiler/actor-compiler.js.map +1 -1
  58. package/dist/compiler/declarations.d.ts.map +1 -1
  59. package/dist/compiler/declarations.js +2678 -183
  60. package/dist/compiler/declarations.js.map +7 -1
  61. package/dist/compiler/features/atomicity.d.ts +9 -0
  62. package/dist/compiler/features/atomicity.d.ts.map +1 -0
  63. package/dist/compiler/features/atomicity.js +44 -0
  64. package/dist/compiler/features/atomicity.js.map +1 -0
  65. package/dist/compiler/features/interleave.d.ts +9 -0
  66. package/dist/compiler/features/{reentrancy.d.ts.map → interleave.d.ts.map} +1 -1
  67. package/dist/compiler/features/{reentrancy.js → interleave.js} +13 -13
  68. package/dist/compiler/features/{reentrancy.js.map → interleave.js.map} +1 -1
  69. package/dist/compiler/features/persistence.d.ts +2 -5
  70. package/dist/compiler/features/persistence.d.ts.map +1 -1
  71. package/dist/compiler/features/persistence.js +5 -83
  72. package/dist/compiler/features/persistence.js.map +1 -1
  73. package/dist/compiler/features/resource.d.ts +5 -0
  74. package/dist/compiler/features/resource.d.ts.map +1 -0
  75. package/dist/compiler/features/resource.js +18 -0
  76. package/dist/compiler/features/resource.js.map +1 -0
  77. package/dist/compiler/fieldParsing.d.ts +12 -0
  78. package/dist/compiler/fieldParsing.d.ts.map +1 -0
  79. package/dist/compiler/fieldParsing.js +106 -0
  80. package/dist/compiler/fieldParsing.js.map +1 -0
  81. package/dist/compiler/json-schema.d.ts +2 -2
  82. package/dist/compiler/json-schema.d.ts.map +1 -1
  83. package/dist/compiler/json-schema.js +22 -14
  84. package/dist/compiler/json-schema.js.map +1 -1
  85. package/dist/compiler/rpc-contract.d.ts +1 -1
  86. package/dist/compiler/rpc-contract.d.ts.map +1 -1
  87. package/dist/compiler/rpc-contract.js +21 -11
  88. package/dist/compiler/rpc-contract.js.map +1 -1
  89. package/dist/compiler/socket-contract.d.ts +1 -1
  90. package/dist/compiler/socket-contract.d.ts.map +1 -1
  91. package/dist/compiler/socket-contract.js +3 -3
  92. package/dist/compiler/socket-contract.js.map +1 -1
  93. package/dist/compiler/types.d.ts +13 -3
  94. package/dist/compiler/types.d.ts.map +1 -1
  95. package/dist/compiler/types.js +3 -1
  96. package/dist/compiler/types.js.map +1 -1
  97. package/dist/compiler/validate-public-contract.d.ts.map +1 -1
  98. package/dist/compiler/validate-public-contract.js +12 -1
  99. package/dist/compiler/validate-public-contract.js.map +1 -1
  100. package/dist/generated/client-runtime.d.ts.map +1 -1
  101. package/dist/generated/client-runtime.js +1 -1
  102. package/dist/generated/client-runtime.js.map +1 -1
  103. package/dist/host/actor-host.d.ts.map +1 -1
  104. package/dist/host/actor-host.js +44 -50
  105. package/dist/host/actor-host.js.map +1 -1
  106. package/dist/host/actor-runtime.d.ts +7 -8
  107. package/dist/host/actor-runtime.d.ts.map +1 -1
  108. package/dist/host/actor-runtime.js +80 -79
  109. package/dist/host/actor-runtime.js.map +1 -1
  110. package/dist/host/actor-worker.js +10 -27
  111. package/dist/host/actor-worker.js.map +1 -1
  112. package/dist/host/database-bridge.d.ts +16 -0
  113. package/dist/host/database-bridge.d.ts.map +1 -0
  114. package/dist/host/database-bridge.js +29 -0
  115. package/dist/host/database-bridge.js.map +1 -0
  116. package/dist/host/database.d.ts +86 -0
  117. package/dist/host/database.d.ts.map +1 -0
  118. package/dist/host/database.js +87 -0
  119. package/dist/host/database.js.map +1 -0
  120. package/dist/host/generic-host.js +1 -1
  121. package/dist/host/persisted-fields.d.ts +7 -0
  122. package/dist/host/persisted-fields.d.ts.map +1 -0
  123. package/dist/host/persisted-fields.js +29 -0
  124. package/dist/host/persisted-fields.js.map +1 -0
  125. package/dist/host/protocol.d.ts +55 -131
  126. package/dist/host/protocol.d.ts.map +1 -1
  127. package/dist/host/protocol.js +28 -28
  128. package/dist/host/protocol.js.map +1 -1
  129. package/dist/host/types.d.ts +8 -9
  130. package/dist/host/types.d.ts.map +1 -1
  131. package/dist/host/worker-supervisor.d.ts +32 -30
  132. package/dist/host/worker-supervisor.d.ts.map +1 -1
  133. package/dist/host/worker-supervisor.js +246 -230
  134. package/dist/host/worker-supervisor.js.map +1 -1
  135. package/dist/index.d.ts +5 -2
  136. package/dist/index.d.ts.map +1 -1
  137. package/dist/index.js +2 -1
  138. package/dist/index.js.map +1 -1
  139. package/dist/projectSdk.js +1 -1
  140. package/dist/projectSdk.js.map +1 -1
  141. package/dist/templates/actor/README.md +7 -9
  142. package/dist/templates/actor/bunfig +2 -0
  143. package/dist/templates/actor/package.json +6 -3
  144. package/dist/templates/ai-chat/README.md +8 -8
  145. package/dist/templates/ai-chat/bunfig +2 -0
  146. package/dist/templates/ai-chat/package.json +7 -5
  147. package/dist/templates/ai-chat/src/actors.ts +1 -1
  148. package/dist/templates/chat/README.md +8 -8
  149. package/dist/templates/chat/bunfig +2 -0
  150. package/dist/templates/chat/package.json +7 -5
  151. package/dist/templates/chat/src/actors.ts +1 -1
  152. package/dist/templates/documents/README.md +8 -8
  153. package/dist/templates/documents/bunfig +2 -0
  154. package/dist/templates/documents/package.json +7 -5
  155. package/dist/templates/documents/src/actors.ts +1 -1
  156. package/package.json +110 -108
  157. package/dist/cli/actor-source-watcher.d.ts +0 -25
  158. package/dist/cli/actor-source-watcher.d.ts.map +0 -1
  159. package/dist/cli/actor-source-watcher.js +0 -129
  160. package/dist/cli/actor-source-watcher.js.map +0 -1
  161. package/dist/compiler/features/reentrancy.d.ts +0 -9
  162. package/dist/host/sqlite.d.ts +0 -49
  163. package/dist/host/sqlite.d.ts.map +0 -1
  164. package/dist/host/sqlite.js +0 -159
  165. package/dist/host/sqlite.js.map +0 -1
  166. package/dist/templates/actor/pnpm-workspace.yaml +0 -2
  167. package/dist/templates/ai-chat/pnpm-workspace.yaml +0 -2
  168. package/dist/templates/chat/pnpm-workspace.yaml +0 -2
  169. package/dist/templates/documents/pnpm-workspace.yaml +0 -2
  170. package/dist/templates/python/README.md +0 -7
  171. package/dist/templates/python/gitignore +0 -6
  172. package/dist/templates/python/package.json +0 -11
  173. package/dist/templates/python/pnpm-workspace.yaml +0 -2
  174. package/dist/templates/python/pyproject.toml +0 -8
  175. package/dist/templates/python/src/actors.py +0 -9
package/README.md CHANGED
@@ -6,15 +6,15 @@ Durable actors and typed clients, backed by the Rust runtime.
6
6
 
7
7
  ## Quickstart
8
8
 
9
- Requires Node.js 22.19+, pnpm, and Bun 1.3.9+.
9
+ Requires Bun 1.4.2+.
10
10
 
11
11
  ```sh
12
- npx durable-actors init my-actors
12
+ bunx durable-actors init my-actors
13
13
  cd my-actors
14
- pnpm install
14
+ bun install
15
15
  ```
16
16
 
17
- Define `src/actors.ts`. Fields marked `@Persisted` survive restarts. They share one SQLite database and transaction with `this.db` SQL. Litestream is installed and managed automatically with the runtime; local development persists to the filesystem.
17
+ Define `src/actors.ts`. Fields marked `@Persisted` survive restarts. They share one SQLite database and transaction with `this.db` SQL. The Rust runtime owns the database and replicates it with Litestream; local development persists to the filesystem.
18
18
 
19
19
  ```ts
20
20
  import { Actor, Persisted } from "durable-actors"
@@ -29,7 +29,7 @@ export class Counter extends Actor {
29
29
  ```
30
30
 
31
31
  ```sh
32
- pnpm exec durable-actors dev
32
+ bunx durable-actors dev
33
33
  ```
34
34
 
35
35
  ## Call an actor
@@ -37,7 +37,7 @@ pnpm exec durable-actors dev
37
37
  In another terminal in the same directory, generate the client:
38
38
 
39
39
  ```sh
40
- pnpm exec durable-actors generate
40
+ bunx durable-actors generate
41
41
  ```
42
42
 
43
43
  Save as `client.ts` and run `bun client.ts`:
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env bun
2
+ import "../dist/cli.js"
@@ -1,9 +1,13 @@
1
1
  import type { JsonObject, JsonValue } from "../json.js";
2
+ import type { ActorAlarm } from "./alarm.js";
3
+ import type { ActorContext } from "./context.js";
4
+ import { RuntimeActorContext } from "./context.js";
2
5
  import type { ActorDatabase } from "./database.js";
3
6
  import type { ActorSchema } from "./schema.js";
4
7
  import type { ActorBroadcastOptions, ActorConnection, ActorSocket } from "./socket.js";
5
8
  import type { ActorSchemas } from "./socketValidation.js";
6
9
  declare const actorTypes: unique symbol;
10
+ declare let actorContext: (value: object) => RuntimeActorContext | undefined;
7
11
  interface Actor<Metadata = JsonValue, Incoming = JsonValue, Outgoing = Incoming, Tag extends string = string> {
8
12
  /** Accepts a joining connection on success. Call `socket.reject(4003, reason)` to deny it. */
9
13
  onConnect?(socket: ActorSocket<Metadata, Outgoing, Tag>): Promise<void>;
@@ -11,16 +15,20 @@ interface Actor<Metadata = JsonValue, Incoming = JsonValue, Outgoing = Incoming,
11
15
  onMessage?(socket: ActorSocket<Metadata, Outgoing, Tag>, message: Incoming): Promise<void>;
12
16
  /** Runs after disconnection; may be skipped on server failure. */
13
17
  onDisconnect?(socket: ActorSocket<Metadata, Outgoing, Tag>, code: number, reason: string, wasClean: boolean): Promise<void>;
18
+ /** Runs when the actor's scheduled alarm becomes due. The alarm is cleared afterward unless this callback sets a new one. */
19
+ onAlarm?(): Promise<void>;
14
20
  }
15
21
  /**
16
- * Base class for durable actors. Extend directly, with no required constructor arguments.
22
+ * Base class for durable actors. Extend directly; explicit constructors must pass their `ActorContext` to `super`.
17
23
  * Application methods must be async; instance fields require `@Persisted` or `@Ephemeral`.
24
+ * Initialized private `ActorResource` fields are implicitly ephemeral.
18
25
  * @typeParam Metadata - Connection metadata supplied by the backend.
19
26
  * @typeParam Incoming - Application messages received by the actor.
20
27
  * @typeParam Outgoing - Application messages sent by the actor.
21
28
  * @typeParam Tag - Allowed connection tags.
22
29
  */
23
30
  declare abstract class Actor<Metadata = JsonValue, Incoming = JsonValue, Outgoing = Incoming, Tag extends string = string> {
31
+ #private;
24
32
  /** @internal */
25
33
  readonly [actorTypes]: {
26
34
  metadata: Metadata;
@@ -28,15 +36,17 @@ declare abstract class Actor<Metadata = JsonValue, Incoming = JsonValue, Outgoin
28
36
  outgoing: Outgoing;
29
37
  tag: Tag;
30
38
  };
31
- protected constructor();
32
- /** Actor-local SQLite. Changes commit with persisted fields after a successful invocation. */
33
- protected get db(): ActorDatabase;
39
+ protected constructor(context: ActorContext);
40
+ /** Actor-local SQLite, available from field initializers. Changes commit after a successful invocation. */
41
+ get db(): ActorDatabase;
42
+ /** The actor's single durable alarm slot. */
43
+ get alarm(): ActorAlarm;
34
44
  /**
35
45
  * Returns a backend reference. The first call starts the actor if needed.
36
46
  * @param actorId - 1–128 ASCII letters, digits, dots, underscores, or hyphens.
37
47
  */
38
48
  static get<TActorClass extends ActorClass>(this: ValidActorClass<TActorClass>, actorId: string): ActorReference<TActorClass["prototype"]>;
39
- /** The bound actor ID; unavailable during construction. */
49
+ /** The bound actor ID, available from field initializers. */
40
50
  protected get id(): string;
41
51
  /**
42
52
  * Lists connections during an actor call. Includes a joining socket; excludes a disconnected one.
@@ -53,7 +63,6 @@ declare abstract class Actor<Metadata = JsonValue, Incoming = JsonValue, Outgoin
53
63
  }
54
64
  declare function registerActorClass<Instance extends AnyActor>(actorClass: ActorClass<Instance>, state: ActorSchema): ActorDefinition;
55
65
  declare function findActorDefinition(actorName: string): ActorDefinition | undefined;
56
- declare function bindActorIdentity(instance: AnyActor, actorId: string): void;
57
66
  interface ActorDefinition extends ActorClassDescription {
58
67
  state: ActorSchema;
59
68
  }
@@ -69,24 +78,23 @@ type ActorClass<Instance extends AnyActor = AnyActor> = Function & {
69
78
  readonly schemas?: ActorSchemas;
70
79
  };
71
80
  type AsyncMethod = (...args: never[]) => Promise<unknown>;
72
- type PubliclyConstructibleActorClass = abstract new (...args: never[]) => AnyActor;
73
81
  type InvalidActorMethod<Instance extends AnyActor> = {
74
82
  [Key in keyof Instance]-?: NonNullable<Instance[Key]> extends (...args: never[]) => unknown ? NonNullable<Instance[Key]> extends AsyncMethod ? never : Key : never;
75
83
  }[keyof Instance];
76
- type ValidActorClass<TActorClass extends ActorClass> = TActorClass extends PubliclyConstructibleActorClass ? never : InvalidActorMethod<TActorClass["prototype"]> extends never ? TActorClass extends {
84
+ type ValidActorClass<TActorClass extends ActorClass> = InvalidActorMethod<TActorClass["prototype"]> extends never ? TActorClass extends {
77
85
  readonly schemas: ActorSchemas<SocketMetadata<TActorClass["prototype"]>, SocketIncoming<TActorClass["prototype"]>, SocketOutgoing<TActorClass["prototype"]>, SocketTag<TActorClass["prototype"]>>;
78
86
  } ? TActorClass : TActorClass extends {
79
87
  readonly schemas: unknown;
80
88
  } ? never : TActorClass : never;
81
89
  type ActorReference<Instance extends AnyActor> = {
82
- [Key in keyof Instance as Instance[Key] extends AsyncMethod ? Key extends SocketLifecycleMethod ? never : Key : never]: Instance[Key];
90
+ [Key in keyof Instance as Instance[Key] extends AsyncMethod ? Key extends ActorLifecycleMethod ? never : Key : never]: Instance[Key];
83
91
  } & {
84
92
  /** Opens a backend socket. Attach listeners immediately; acceptance may still be pending. */
85
93
  connect(metadata: SocketMetadata<Instance>): Promise<ActorConnection<SocketIncoming<Instance>, SocketOutgoing<Instance>, JsonObject>>;
86
94
  /** Sends to all connections without running actor code. Messages are not saved. */
87
95
  broadcast(message: SocketOutgoing<Instance>): Promise<void>;
88
96
  };
89
- type SocketLifecycleMethod = "onConnect" | "onMessage" | "onDisconnect";
97
+ type ActorLifecycleMethod = "onConnect" | "onMessage" | "onDisconnect" | "onAlarm";
90
98
  type SocketMetadata<Instance extends AnyActor> = Instance[typeof actorTypes]["metadata"];
91
99
  type SocketIncoming<Instance extends AnyActor> = Instance[typeof actorTypes]["incoming"];
92
100
  type SocketOutgoing<Instance extends AnyActor> = Instance[typeof actorTypes]["outgoing"];
@@ -95,6 +103,6 @@ type SocketTag<Instance extends AnyActor> = Instance[typeof actorTypes]["tag"];
95
103
  type ActorSocketOf<Instance extends AnyActor> = ActorSocket<SocketMetadata<Instance>, SocketOutgoing<Instance>, SocketTag<Instance>>;
96
104
  /** Incoming message type for an actor instance type. */
97
105
  type ActorMessageOf<Instance extends AnyActor> = SocketIncoming<Instance>;
98
- export { Actor, bindActorIdentity, findActorDefinition, registerActorClass };
99
- export type { ActorClass, ActorDefinition, ActorMessageOf, ActorReference, ActorSocketOf, AnyActor };
106
+ export { Actor, actorContext, findActorDefinition, registerActorClass };
107
+ export type { ActorClass, ActorContext, ActorDefinition, ActorMessageOf, ActorReference, ActorSocketOf, AnyActor };
100
108
  //# sourceMappingURL=actor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"actor.d.ts","sourceRoot":"","sources":["../../src/actor/actor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actor.d.ts","sourceRoot":"","sources":["../../src/actor/actor.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,37 @@
1
1
  import { actorClient } from "../client/client.js";
2
2
  import { ActorDefinitionError } from "../errors.js";
3
- import { actorDatabase } from "./database.js";
3
+ import { RuntimeActorContext } from "./context.js";
4
4
  import { validateActorComponent } from "./identity.js";
5
5
  import { actorConnectionCount, actorConnections, broadcastActor, setActorAutoResponse } from "./socket.js";
6
6
  import { outgoingMessage, socketMetadata } from "./socketValidation.js";
7
- const actorMetadata = new WeakMap();
8
7
  const actorDefinitions = new Map();
9
8
  const asyncFunction = Object.getPrototypeOf(async () => { }).constructor;
10
- const referenceClasses = new WeakMap();
9
+ const referenceClassKey = Symbol("actor reference class");
10
+ let actorContext;
11
11
  /**
12
- * Base class for durable actors. Extend directly, with no required constructor arguments.
12
+ * Base class for durable actors. Extend directly; explicit constructors must pass their `ActorContext` to `super`.
13
13
  * Application methods must be async; instance fields require `@Persisted` or `@Ephemeral`.
14
+ * Initialized private `ActorResource` fields are implicitly ephemeral.
14
15
  * @typeParam Metadata - Connection metadata supplied by the backend.
15
16
  * @typeParam Incoming - Application messages received by the actor.
16
17
  * @typeParam Outgoing - Application messages sent by the actor.
17
18
  * @typeParam Tag - Allowed connection tags.
18
19
  */
19
20
  class Actor {
20
- constructor() { }
21
- /** Actor-local SQLite. Changes commit with persisted fields after a successful invocation. */
21
+ #context;
22
+ static {
23
+ actorContext = value => (#context in value ? value.#context : undefined);
24
+ }
25
+ constructor(context) {
26
+ this.#context = RuntimeActorContext.bind(context, this);
27
+ }
28
+ /** Actor-local SQLite, available from field initializers. Changes commit after a successful invocation. */
22
29
  get db() {
23
- return actorDatabase(this);
30
+ return this.#context.database;
31
+ }
32
+ /** The actor's single durable alarm slot. */
33
+ get alarm() {
34
+ return this.#context.alarm;
24
35
  }
25
36
  /**
26
37
  * Returns a backend reference. The first call starts the actor if needed.
@@ -29,9 +40,9 @@ class Actor {
29
40
  static get(actorId) {
30
41
  return getActorReference(this, validateActorComponent("actor ID", actorId));
31
42
  }
32
- /** The bound actor ID; unavailable during construction. */
43
+ /** The bound actor ID, available from field initializers. */
33
44
  get id() {
34
- return metadataFor(this).actorId;
45
+ return this.#context.actorId;
35
46
  }
36
47
  /**
37
48
  * Lists connections during an actor call. Includes a joining socket; excludes a disconnected one.
@@ -53,8 +64,9 @@ class Actor {
53
64
  }
54
65
  function registerActorClass(actorClass, state) {
55
66
  const actorName = actorClassName(actorClass);
56
- if (state.fields.some(field => field.name === "db"))
57
- throw new ActorDefinitionError("actor field db is reserved for SQLite");
67
+ const reserved = state.fields.find(field => field.name === "db" || field.name === "alarm");
68
+ if (reserved !== undefined)
69
+ throw new ActorDefinitionError(`actor field ${reserved.name} is reserved for the actor runtime`);
58
70
  const existing = actorDefinitions.get(actorName);
59
71
  if (existing !== undefined) {
60
72
  if (existing.actorClass !== actorClass)
@@ -73,18 +85,13 @@ function getActorReference(actorClass, actorId) {
73
85
  const Reference = referenceClass(actorClass);
74
86
  return new Reference(actorId);
75
87
  }
76
- function bindActorIdentity(instance, actorId) {
77
- actorMetadata.set(instance, { actorId: validateActorComponent("actor ID", actorId) });
78
- }
79
88
  function referenceClass(actorClass) {
80
- const existing = referenceClasses.get(actorClass);
81
- if (existing !== undefined)
82
- return existing;
89
+ if (Object.hasOwn(actorClass, referenceClassKey))
90
+ return Reflect.get(actorClass, referenceClassKey);
83
91
  const definition = describeActorClass(actorClass);
84
92
  class ActorReference extends Actor {
85
93
  constructor(actorId) {
86
- super();
87
- bindActorIdentity(this, actorId);
94
+ super(RuntimeActorContext.reference(actorId));
88
95
  }
89
96
  }
90
97
  Object.defineProperty(ActorReference.prototype, "connect", {
@@ -92,9 +99,9 @@ function referenceClass(actorClass) {
92
99
  enumerable: false,
93
100
  writable: false,
94
101
  value: function connectActor(metadata) {
95
- const actor = metadataFor(this);
102
+ const actorId = actorIdOf(this);
96
103
  const attachment = socketMetadata(metadata, definition.schemas);
97
- return actorClient().then(client => client.connect(definition.actorName, actor.actorId, attachment, definition.schemas));
104
+ return actorClient().then(client => client.connect(definition.actorName, actorId, attachment, definition.schemas));
98
105
  }
99
106
  });
100
107
  Object.defineProperty(ActorReference.prototype, "broadcast", {
@@ -102,9 +109,9 @@ function referenceClass(actorClass) {
102
109
  enumerable: false,
103
110
  writable: false,
104
111
  value: function broadcastActorMessage(message) {
105
- const actor = metadataFor(this);
112
+ const actorId = actorIdOf(this);
106
113
  const outgoing = outgoingMessage(message, definition.schemas);
107
- return actorClient().then(client => client.broadcast(definition.actorName, actor.actorId, outgoing));
114
+ return actorClient().then(client => client.broadcast(definition.actorName, actorId, outgoing));
108
115
  }
109
116
  });
110
117
  definition.methods.forEach(method => {
@@ -113,19 +120,19 @@ function referenceClass(actorClass) {
113
120
  enumerable: false,
114
121
  writable: false,
115
122
  value: function forwardActorMethod(...args) {
116
- const metadata = metadataFor(this);
117
- return actorClient().then(client => client.invoke(definition.actorName, metadata.actorId, method, args));
123
+ const actorId = actorIdOf(this);
124
+ return actorClient().then(client => client.invoke(definition.actorName, actorId, method, args));
118
125
  }
119
126
  });
120
127
  });
121
- referenceClasses.set(definition.actorClass, ActorReference);
128
+ Object.defineProperty(actorClass, referenceClassKey, { value: ActorReference });
122
129
  return ActorReference;
123
130
  }
124
- function metadataFor(instance) {
125
- const metadata = actorMetadata.get(instance);
126
- if (metadata === undefined)
131
+ function actorIdOf(instance) {
132
+ const context = actorContext(instance);
133
+ if (context === undefined)
127
134
  throw new ActorDefinitionError("actor identity is unavailable outside an actor invocation");
128
- return metadata;
135
+ return context.actorId;
129
136
  }
130
137
  function describeActorClass(actorClass) {
131
138
  const actorName = actorClassName(actorClass);
@@ -150,26 +157,26 @@ function discoverMethods(actorClass, actorName) {
150
157
  validateActorComponent("actor method", name);
151
158
  if (name === "then")
152
159
  throw new ActorDefinitionError(`actor class ${actorName} cannot define method then`);
153
- if (name === "connect" || name === "broadcast" || name === "db")
160
+ if (name === "connect" || name === "broadcast" || name === "db" || name === "alarm")
154
161
  throw new ActorDefinitionError(`actor class ${actorName} cannot define reserved method ${name}`);
155
162
  if (!(descriptor.value instanceof asyncFunction))
156
163
  throw new ActorDefinitionError(`actor method ${actorName}.${name} must be async`);
164
+ if (name === "onAlarm" && descriptor.value.length !== 0)
165
+ throw new ActorDefinitionError(`actor lifecycle hook ${actorName}.onAlarm must take no arguments`);
157
166
  if (lifecycleMethods.has(name))
158
167
  return [];
159
168
  return [name];
160
169
  });
161
170
  }
162
- const lifecycleMethods = new Set(["onConnect", "onMessage", "onDisconnect"]);
171
+ const lifecycleMethods = new Set(["onConnect", "onMessage", "onDisconnect", "onAlarm"]);
163
172
  function validateActorClass(actorClass, actorName) {
164
173
  if (Object.getPrototypeOf(actorClass.prototype) !== Actor.prototype)
165
174
  throw new ActorDefinitionError(`actor class ${actorName} must extend Actor directly`);
166
- if (actorClass.length !== 0)
167
- throw new ActorDefinitionError(`actor class ${actorName} cannot require constructor arguments`);
168
175
  }
169
176
  function actorClassName(actorClass) {
170
177
  if (actorClass.name.length === 0)
171
178
  throw new ActorDefinitionError("actor classes must be named");
172
179
  return actorClass.name;
173
180
  }
174
- export { Actor, bindActorIdentity, findActorDefinition, registerActorClass };
181
+ export { Actor, actorContext, findActorDefinition, registerActorClass };
175
182
  //# sourceMappingURL=actor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"actor.js","sourceRoot":"","sources":["../../src/actor/actor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actor.js","sourceRoot":"","sources":["../../src/actor/actor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** One durable scheduled callback for an actor. */
2
+ interface ActorAlarm {
3
+ /** Returns the scheduled Unix timestamp in milliseconds, or `null` when unset. */
4
+ get(): number | null;
5
+ /** Replaces the alarm with a Unix timestamp in milliseconds. Past timestamps are immediately due. */
6
+ set(timestampMs: number): void;
7
+ /** Clears the scheduled alarm. */
8
+ delete(): void;
9
+ }
10
+ interface ActorAlarmState {
11
+ readonly timestampMs: number | null;
12
+ }
13
+ interface ActorAlarmStorage {
14
+ getAlarmState(): ActorAlarmState;
15
+ setAlarm(timestampMs: number): void;
16
+ deleteAlarm(): void;
17
+ }
18
+ export type { ActorAlarm, ActorAlarmState, ActorAlarmStorage };
19
+ //# sourceMappingURL=alarm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alarm.d.ts","sourceRoot":"","sources":["../../src/actor/alarm.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,UAAU,UAAU;IAChB,kFAAkF;IAClF,GAAG,IAAI,MAAM,GAAG,IAAI,CAAA;IACpB,qGAAqG;IACrG,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,kCAAkC;IAClC,MAAM,IAAI,IAAI,CAAA;CACjB;AAED,UAAU,eAAe;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CACtC;AAED,UAAU,iBAAiB;IACvB,aAAa,IAAI,eAAe,CAAA;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,WAAW,IAAI,IAAI,CAAA;CACtB;AAED,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=alarm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alarm.js","sourceRoot":"","sources":["../../src/actor/alarm.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ import type { ActorAlarm, ActorAlarmStorage } from "./alarm.js";
2
+ import type { ActorDatabase } from "./database.js";
3
+ declare const actorContextBrand: unique symbol;
4
+ interface ActorContext {
5
+ readonly [actorContextBrand]: never;
6
+ }
7
+ declare class RuntimeActorContext implements ActorContext {
8
+ #private;
9
+ readonly [actorContextBrand]: never;
10
+ readonly actorId: string;
11
+ readonly persistedFields: Map<string, PropertyDescriptor>;
12
+ private constructor();
13
+ static runtime(actorId: string, database: ActorDatabase & ActorAlarmStorage): RuntimeActorContext;
14
+ static reference(actorId: string): RuntimeActorContext;
15
+ static bind(context: unknown, actor: object): RuntimeActorContext;
16
+ construct(actorClass: Function): object;
17
+ get database(): ActorDatabase;
18
+ get alarm(): ActorAlarm;
19
+ assertAccess(): void;
20
+ private guard;
21
+ private guardAlarm;
22
+ }
23
+ export { RuntimeActorContext };
24
+ export type { ActorContext };
25
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/actor/context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,eAAe,CAAA;AAI/D,OAAO,CAAC,MAAM,iBAAiB,EAAE,OAAO,MAAM,CAAA;AAE9C,UAAU,YAAY;IAClB,QAAQ,CAAC,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAA;CACtC;AAED,cAAM,mBAAoB,YAAW,YAAY;;IAC7C,SAAiB,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAA;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,eAAe,kCAAwC;IAMhE,OAAO;IAMP,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,iBAAiB,GAAG,mBAAmB;IAIjG,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB;IAItD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,mBAAmB;IAOjE,SAAS,CAAC,UAAU,EAAE,QAAQ,GAAG,MAAM;IAYvC,IAAI,QAAQ,IAAI,aAAa,CAI5B;IAED,IAAI,KAAK,IAAI,UAAU,CAItB;IAED,YAAY,IAAI,IAAI;IAKpB,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,UAAU;CAkBrB;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAC9B,YAAY,EAAE,YAAY,EAAE,CAAA"}
@@ -0,0 +1,83 @@
1
+ import { ActorDefinitionError, ActorValidationError } from "../errors.js";
2
+ import { isActorInvocation } from "./database.js";
3
+ import { validateActorComponent } from "./identity.js";
4
+ class RuntimeActorContext {
5
+ actorId;
6
+ persistedFields = new Map();
7
+ #database;
8
+ #alarm;
9
+ #actor;
10
+ #constructing = false;
11
+ constructor(actorId, database) {
12
+ this.actorId = validateActorComponent("actor ID", actorId);
13
+ this.#database = database && this.guard(database);
14
+ this.#alarm = database && this.guardAlarm(database);
15
+ }
16
+ static runtime(actorId, database) {
17
+ return new RuntimeActorContext(actorId, database);
18
+ }
19
+ static reference(actorId) {
20
+ return new RuntimeActorContext(actorId);
21
+ }
22
+ static bind(context, actor) {
23
+ if (typeof context !== "object" || context === null || !(#actor in context) || context.#actor !== undefined)
24
+ throw new ActorDefinitionError("actors are constructed by the actor runtime");
25
+ context.#actor = actor;
26
+ return context;
27
+ }
28
+ construct(actorClass) {
29
+ this.#constructing = true;
30
+ try {
31
+ const actor = Reflect.construct(actorClass, [this]);
32
+ if (this.#actor !== actor)
33
+ throw new ActorDefinitionError("actor constructors must call super with their ActorContext");
34
+ return actor;
35
+ }
36
+ finally {
37
+ this.#constructing = false;
38
+ }
39
+ }
40
+ get database() {
41
+ if (this.#database === undefined)
42
+ throw new ActorDefinitionError("actor database is unavailable outside the actor runtime");
43
+ return this.#database;
44
+ }
45
+ get alarm() {
46
+ if (this.#alarm === undefined)
47
+ throw new ActorDefinitionError("actor alarm is unavailable outside the actor runtime");
48
+ return this.#alarm;
49
+ }
50
+ assertAccess() {
51
+ if (this.#constructing || (this.#actor !== undefined && isActorInvocation(this.#actor)))
52
+ return;
53
+ throw new ActorDefinitionError("actor database is unavailable outside its invocation");
54
+ }
55
+ guard(database) {
56
+ return {
57
+ exec: (sql, ...bindings) => {
58
+ this.assertAccess();
59
+ return database.exec(sql, ...bindings);
60
+ }
61
+ };
62
+ }
63
+ guardAlarm(alarm) {
64
+ return {
65
+ get: () => {
66
+ this.assertAccess();
67
+ return alarm.getAlarmState().timestampMs;
68
+ },
69
+ set: timestampMs => {
70
+ this.assertAccess();
71
+ if (!Number.isSafeInteger(timestampMs))
72
+ throw new ActorValidationError("actor alarm timestamp must be a safe integer");
73
+ alarm.setAlarm(timestampMs);
74
+ },
75
+ delete: () => {
76
+ this.assertAccess();
77
+ alarm.deleteAlarm();
78
+ }
79
+ };
80
+ }
81
+ }
82
+ export { RuntimeActorContext };
83
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/actor/context.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,10 @@ interface ActorDatabase {
3
3
  /** Executes one SQL statement with positional bindings and returns its rows. */
4
4
  exec<Row extends object = Record<string, SqliteValue>>(sql: string, ...bindings: SqliteValue[]): Row[];
5
5
  }
6
- declare function actorDatabase(actor: object): ActorDatabase;
7
- declare function bindActorDatabase(actor: object, database: ActorDatabase): void;
8
- declare function runWithActorDatabase<T>(actor: object, operation: () => Promise<T>): Promise<T>;
9
- export { actorDatabase, bindActorDatabase, runWithActorDatabase };
6
+ type PersistenceMode = "atomic" | "immediate";
7
+ declare function isActorInvocation(actor: object): boolean;
8
+ declare function actorDatabaseMode(): PersistenceMode | undefined;
9
+ declare function runWithActorDatabase<T>(actor: object, mode: PersistenceMode, operation: () => Promise<T>): Promise<T>;
10
+ export { actorDatabaseMode, isActorInvocation, runWithActorDatabase };
10
11
  export type { ActorDatabase, SqliteValue };
11
12
  //# sourceMappingURL=database.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/actor/database.ts"],"names":[],"mappings":"AAIA,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAA;AAE/D,UAAU,aAAa;IACnB,gFAAgF;IAChF,IAAI,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE,GAAG,GAAG,EAAE,CAAA;CACzG;AAKD,iBAAS,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAInD;AAED,iBAAS,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CASvE;AAED,iBAAe,oBAAoB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAO7F;AAED,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAA;AACjE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/actor/database.ts"],"names":[],"mappings":"AAEA,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAA;AAE/D,UAAU,aAAa;IACnB,gFAAgF;IAChF,IAAI,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE,GAAG,GAAG,EAAE,CAAA;CACzG;AAED,KAAK,eAAe,GAAG,QAAQ,GAAG,WAAW,CAAA;AAU7C,iBAAS,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED,iBAAS,iBAAiB,IAAI,eAAe,GAAG,SAAS,CAGxD;AAED,iBAAe,oBAAoB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOpH;AAED,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAA;AACrE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,CAAA"}
@@ -1,25 +1,15 @@
1
1
  import { AsyncLocalStorage } from "node:async_hooks";
2
- import { ActorDefinitionError } from "../errors.js";
3
- const databases = new WeakMap();
4
2
  const invocation = new AsyncLocalStorage();
5
- function actorDatabase(actor) {
6
- const database = databases.get(actor);
7
- if (database === undefined)
8
- throw new ActorDefinitionError("actor database is unavailable during construction");
9
- return database;
3
+ function isActorInvocation(actor) {
4
+ const context = invocation.getStore();
5
+ return context?.actor === actor && context.active;
10
6
  }
11
- function bindActorDatabase(actor, database) {
12
- databases.set(actor, {
13
- exec(sql, ...bindings) {
14
- const context = invocation.getStore();
15
- if (context?.actor !== actor || !context.active)
16
- throw new ActorDefinitionError("actor database is unavailable outside its invocation");
17
- return database.exec(sql, ...bindings);
18
- }
19
- });
7
+ function actorDatabaseMode() {
8
+ const context = invocation.getStore();
9
+ return context?.active ? context.mode : undefined;
20
10
  }
21
- async function runWithActorDatabase(actor, operation) {
22
- const context = { actor, active: true };
11
+ async function runWithActorDatabase(actor, mode, operation) {
12
+ const context = { actor, active: true, mode };
23
13
  try {
24
14
  return await invocation.run(context, operation);
25
15
  }
@@ -27,5 +17,5 @@ async function runWithActorDatabase(actor, operation) {
27
17
  context.active = false;
28
18
  }
29
19
  }
30
- export { actorDatabase, bindActorDatabase, runWithActorDatabase };
20
+ export { actorDatabaseMode, isActorInvocation, runWithActorDatabase };
31
21
  //# sourceMappingURL=database.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/actor/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AASnD,MAAM,SAAS,GAAG,IAAI,OAAO,EAAyB,CAAA;AACtD,MAAM,UAAU,GAAG,IAAI,iBAAiB,EAAsC,CAAA;AAE9E,SAAS,aAAa,CAAC,KAAa;IAChC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACrC,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,IAAI,oBAAoB,CAAC,mDAAmD,CAAC,CAAA;IAC/G,OAAO,QAAQ,CAAA;AACnB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,QAAuB;IAC7D,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE;QACjB,IAAI,CAAqB,GAAW,EAAE,GAAG,QAAuB;YAC5D,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAA;YACrC,IAAI,OAAO,EAAE,KAAK,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3C,MAAM,IAAI,oBAAoB,CAAC,sDAAsD,CAAC,CAAA;YAC1F,OAAO,QAAQ,CAAC,IAAI,CAAM,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAA;QAC/C,CAAC;KACJ,CAAC,CAAA;AACN,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAI,KAAa,EAAE,SAA2B;IAC7E,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IACvC,IAAI,CAAC;QACD,OAAO,MAAM,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IACnD,CAAC;YAAS,CAAC;QACP,OAAO,CAAC,MAAM,GAAG,KAAK,CAAA;IAC1B,CAAC;AACL,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAA"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/actor/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAiBpD,MAAM,UAAU,GAAG,IAAI,iBAAiB,EAA0B,CAAA;AAElE,SAAS,iBAAiB,CAAC,KAAa;IACpC,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAA;IACrC,OAAO,OAAO,EAAE,KAAK,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,CAAA;AACrD,CAAC;AAED,SAAS,iBAAiB;IACtB,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAA;IACrC,OAAO,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;AACrD,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAI,KAAa,EAAE,IAAqB,EAAE,SAA2B;IACpG,MAAM,OAAO,GAA2B,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IACrE,IAAI,CAAC;QACD,OAAO,MAAM,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IACnD,CAAC;YAAS,CAAC;QACP,OAAO,CAAC,MAAM,GAAG,KAAK,CAAA;IAC1B,CAAC;AACL,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAA"}