durable-actors 0.8.0 → 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 (143) hide show
  1. package/README.md +1 -1
  2. package/dist/actor/actor.d.ts +19 -11
  3. package/dist/actor/actor.d.ts.map +1 -1
  4. package/dist/actor/actor.js +41 -36
  5. package/dist/actor/actor.js.map +1 -1
  6. package/dist/actor/alarm.d.ts +19 -0
  7. package/dist/actor/alarm.d.ts.map +1 -0
  8. package/dist/actor/alarm.js +2 -0
  9. package/dist/actor/alarm.js.map +1 -0
  10. package/dist/actor/context.d.ts +25 -0
  11. package/dist/actor/context.d.ts.map +1 -0
  12. package/dist/actor/context.js +83 -0
  13. package/dist/actor/context.js.map +1 -0
  14. package/dist/actor/database.d.ts +5 -5
  15. package/dist/actor/database.d.ts.map +1 -1
  16. package/dist/actor/database.js +9 -37
  17. package/dist/actor/database.js.map +1 -1
  18. package/dist/actor/decorators.d.ts +7 -2
  19. package/dist/actor/decorators.d.ts.map +1 -1
  20. package/dist/actor/decorators.js +11 -2
  21. package/dist/actor/decorators.js.map +1 -1
  22. package/dist/actor/resource.d.ts +9 -0
  23. package/dist/actor/resource.d.ts.map +1 -0
  24. package/dist/actor/resource.js +2 -0
  25. package/dist/actor/resource.js.map +1 -0
  26. package/dist/actor/schema.d.ts +3 -1
  27. package/dist/actor/schema.d.ts.map +1 -1
  28. package/dist/actor/schema.js.map +1 -1
  29. package/dist/actor/unchecked.d.ts +12 -0
  30. package/dist/actor/unchecked.d.ts.map +1 -0
  31. package/dist/actor/unchecked.js +8 -0
  32. package/dist/actor/unchecked.js.map +1 -0
  33. package/dist/cli/inspect.d.ts +73 -0
  34. package/dist/cli/inspect.d.ts.map +1 -0
  35. package/dist/cli/inspect.js +132 -0
  36. package/dist/cli/inspect.js.map +1 -0
  37. package/dist/cli.js +2 -0
  38. package/dist/cli.js.map +1 -1
  39. package/dist/client-runtime/http.d.ts +1 -1
  40. package/dist/client-runtime/http.d.ts.map +1 -1
  41. package/dist/client-runtime/http.js +1 -1
  42. package/dist/client-runtime/http.js.map +1 -1
  43. package/dist/client-runtime/stub.d.ts.map +1 -1
  44. package/dist/client-runtime/stub.js +11 -1
  45. package/dist/client-runtime/stub.js.map +1 -1
  46. package/dist/compiler/actor-compiler.d.ts +4 -2
  47. package/dist/compiler/actor-compiler.d.ts.map +1 -1
  48. package/dist/compiler/actor-compiler.js +48 -13
  49. package/dist/compiler/actor-compiler.js.map +1 -1
  50. package/dist/compiler/declarations.d.ts.map +1 -1
  51. package/dist/compiler/declarations.js +31 -1
  52. package/dist/compiler/declarations.js.map +2 -2
  53. package/dist/compiler/features/atomicity.d.ts +9 -0
  54. package/dist/compiler/features/atomicity.d.ts.map +1 -0
  55. package/dist/compiler/features/atomicity.js +44 -0
  56. package/dist/compiler/features/atomicity.js.map +1 -0
  57. package/dist/compiler/features/interleave.d.ts +9 -0
  58. package/dist/compiler/features/{reentrancy.d.ts.map → interleave.d.ts.map} +1 -1
  59. package/dist/compiler/features/{reentrancy.js → interleave.js} +13 -13
  60. package/dist/compiler/features/{reentrancy.js.map → interleave.js.map} +1 -1
  61. package/dist/compiler/features/persistence.d.ts +2 -5
  62. package/dist/compiler/features/persistence.d.ts.map +1 -1
  63. package/dist/compiler/features/persistence.js +5 -83
  64. package/dist/compiler/features/persistence.js.map +1 -1
  65. package/dist/compiler/features/resource.d.ts +5 -0
  66. package/dist/compiler/features/resource.d.ts.map +1 -0
  67. package/dist/compiler/features/resource.js +18 -0
  68. package/dist/compiler/features/resource.js.map +1 -0
  69. package/dist/compiler/fieldParsing.d.ts +12 -0
  70. package/dist/compiler/fieldParsing.d.ts.map +1 -0
  71. package/dist/compiler/fieldParsing.js +106 -0
  72. package/dist/compiler/fieldParsing.js.map +1 -0
  73. package/dist/compiler/json-schema.d.ts +2 -2
  74. package/dist/compiler/json-schema.d.ts.map +1 -1
  75. package/dist/compiler/json-schema.js +22 -14
  76. package/dist/compiler/json-schema.js.map +1 -1
  77. package/dist/compiler/rpc-contract.d.ts +1 -1
  78. package/dist/compiler/rpc-contract.d.ts.map +1 -1
  79. package/dist/compiler/rpc-contract.js +21 -11
  80. package/dist/compiler/rpc-contract.js.map +1 -1
  81. package/dist/compiler/socket-contract.d.ts +1 -1
  82. package/dist/compiler/socket-contract.d.ts.map +1 -1
  83. package/dist/compiler/socket-contract.js +3 -3
  84. package/dist/compiler/socket-contract.js.map +1 -1
  85. package/dist/compiler/types.d.ts +13 -3
  86. package/dist/compiler/types.d.ts.map +1 -1
  87. package/dist/compiler/types.js +3 -1
  88. package/dist/compiler/types.js.map +1 -1
  89. package/dist/compiler/validate-public-contract.d.ts.map +1 -1
  90. package/dist/compiler/validate-public-contract.js +12 -1
  91. package/dist/compiler/validate-public-contract.js.map +1 -1
  92. package/dist/generated/client-runtime.d.ts.map +1 -1
  93. package/dist/generated/client-runtime.js +1 -1
  94. package/dist/generated/client-runtime.js.map +1 -1
  95. package/dist/host/actor-host.d.ts.map +1 -1
  96. package/dist/host/actor-host.js +44 -50
  97. package/dist/host/actor-host.js.map +1 -1
  98. package/dist/host/actor-runtime.d.ts +7 -8
  99. package/dist/host/actor-runtime.d.ts.map +1 -1
  100. package/dist/host/actor-runtime.js +80 -78
  101. package/dist/host/actor-runtime.js.map +1 -1
  102. package/dist/host/actor-worker.js +10 -27
  103. package/dist/host/actor-worker.js.map +1 -1
  104. package/dist/host/database-bridge.d.ts +16 -0
  105. package/dist/host/database-bridge.d.ts.map +1 -0
  106. package/dist/host/database-bridge.js +29 -0
  107. package/dist/host/database-bridge.js.map +1 -0
  108. package/dist/host/database.d.ts +86 -0
  109. package/dist/host/database.d.ts.map +1 -0
  110. package/dist/host/database.js +87 -0
  111. package/dist/host/database.js.map +1 -0
  112. package/dist/host/generic-host.js +1 -1
  113. package/dist/host/persisted-fields.d.ts +7 -0
  114. package/dist/host/persisted-fields.d.ts.map +1 -0
  115. package/dist/host/persisted-fields.js +29 -0
  116. package/dist/host/persisted-fields.js.map +1 -0
  117. package/dist/host/protocol.d.ts +55 -131
  118. package/dist/host/protocol.d.ts.map +1 -1
  119. package/dist/host/protocol.js +28 -28
  120. package/dist/host/protocol.js.map +1 -1
  121. package/dist/host/types.d.ts +8 -9
  122. package/dist/host/types.d.ts.map +1 -1
  123. package/dist/host/worker-supervisor.d.ts +32 -30
  124. package/dist/host/worker-supervisor.d.ts.map +1 -1
  125. package/dist/host/worker-supervisor.js +246 -230
  126. package/dist/host/worker-supervisor.js.map +1 -1
  127. package/dist/index.d.ts +5 -2
  128. package/dist/index.d.ts.map +1 -1
  129. package/dist/index.js +2 -1
  130. package/dist/index.js.map +1 -1
  131. package/dist/templates/actor/package.json +1 -1
  132. package/dist/templates/ai-chat/package.json +1 -1
  133. package/dist/templates/ai-chat/src/actors.ts +1 -1
  134. package/dist/templates/chat/package.json +1 -1
  135. package/dist/templates/chat/src/actors.ts +1 -1
  136. package/dist/templates/documents/package.json +1 -1
  137. package/dist/templates/documents/src/actors.ts +1 -1
  138. package/package.json +2 -2
  139. package/dist/compiler/features/reentrancy.d.ts +0 -9
  140. package/dist/host/sqlite.d.ts +0 -49
  141. package/dist/host/sqlite.d.ts.map +0 -1
  142. package/dist/host/sqlite.js +0 -161
  143. package/dist/host/sqlite.js.map +0 -1
package/README.md CHANGED
@@ -14,7 +14,7 @@ cd my-actors
14
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"
@@ -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, available from construction. Changes commit after a successful invocation. */
39
+ protected constructor(context: ActorContext);
40
+ /** Actor-local SQLite, available from field initializers. Changes commit after a successful invocation. */
33
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,28 +1,37 @@
1
1
  import { actorClient } from "../client/client.js";
2
2
  import { ActorDefinitionError } from "../errors.js";
3
- import { actorDatabase, bindConstructingActorDatabase } 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
- bindConstructingActorDatabase(this);
21
+ #context;
22
+ static {
23
+ actorContext = value => (#context in value ? value.#context : undefined);
22
24
  }
23
- /** Actor-local SQLite, available from construction. Changes commit after a successful invocation. */
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. */
24
29
  get db() {
25
- 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;
26
35
  }
27
36
  /**
28
37
  * Returns a backend reference. The first call starts the actor if needed.
@@ -31,9 +40,9 @@ class Actor {
31
40
  static get(actorId) {
32
41
  return getActorReference(this, validateActorComponent("actor ID", actorId));
33
42
  }
34
- /** The bound actor ID; unavailable during construction. */
43
+ /** The bound actor ID, available from field initializers. */
35
44
  get id() {
36
- return metadataFor(this).actorId;
45
+ return this.#context.actorId;
37
46
  }
38
47
  /**
39
48
  * Lists connections during an actor call. Includes a joining socket; excludes a disconnected one.
@@ -55,8 +64,9 @@ class Actor {
55
64
  }
56
65
  function registerActorClass(actorClass, state) {
57
66
  const actorName = actorClassName(actorClass);
58
- if (state.fields.some(field => field.name === "db"))
59
- 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`);
60
70
  const existing = actorDefinitions.get(actorName);
61
71
  if (existing !== undefined) {
62
72
  if (existing.actorClass !== actorClass)
@@ -75,18 +85,13 @@ function getActorReference(actorClass, actorId) {
75
85
  const Reference = referenceClass(actorClass);
76
86
  return new Reference(actorId);
77
87
  }
78
- function bindActorIdentity(instance, actorId) {
79
- actorMetadata.set(instance, { actorId: validateActorComponent("actor ID", actorId) });
80
- }
81
88
  function referenceClass(actorClass) {
82
- const existing = referenceClasses.get(actorClass);
83
- if (existing !== undefined)
84
- return existing;
89
+ if (Object.hasOwn(actorClass, referenceClassKey))
90
+ return Reflect.get(actorClass, referenceClassKey);
85
91
  const definition = describeActorClass(actorClass);
86
92
  class ActorReference extends Actor {
87
93
  constructor(actorId) {
88
- super();
89
- bindActorIdentity(this, actorId);
94
+ super(RuntimeActorContext.reference(actorId));
90
95
  }
91
96
  }
92
97
  Object.defineProperty(ActorReference.prototype, "connect", {
@@ -94,9 +99,9 @@ function referenceClass(actorClass) {
94
99
  enumerable: false,
95
100
  writable: false,
96
101
  value: function connectActor(metadata) {
97
- const actor = metadataFor(this);
102
+ const actorId = actorIdOf(this);
98
103
  const attachment = socketMetadata(metadata, definition.schemas);
99
- 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));
100
105
  }
101
106
  });
102
107
  Object.defineProperty(ActorReference.prototype, "broadcast", {
@@ -104,9 +109,9 @@ function referenceClass(actorClass) {
104
109
  enumerable: false,
105
110
  writable: false,
106
111
  value: function broadcastActorMessage(message) {
107
- const actor = metadataFor(this);
112
+ const actorId = actorIdOf(this);
108
113
  const outgoing = outgoingMessage(message, definition.schemas);
109
- return actorClient().then(client => client.broadcast(definition.actorName, actor.actorId, outgoing));
114
+ return actorClient().then(client => client.broadcast(definition.actorName, actorId, outgoing));
110
115
  }
111
116
  });
112
117
  definition.methods.forEach(method => {
@@ -115,19 +120,19 @@ function referenceClass(actorClass) {
115
120
  enumerable: false,
116
121
  writable: false,
117
122
  value: function forwardActorMethod(...args) {
118
- const metadata = metadataFor(this);
119
- 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));
120
125
  }
121
126
  });
122
127
  });
123
- referenceClasses.set(definition.actorClass, ActorReference);
128
+ Object.defineProperty(actorClass, referenceClassKey, { value: ActorReference });
124
129
  return ActorReference;
125
130
  }
126
- function metadataFor(instance) {
127
- const metadata = actorMetadata.get(instance);
128
- if (metadata === undefined)
131
+ function actorIdOf(instance) {
132
+ const context = actorContext(instance);
133
+ if (context === undefined)
129
134
  throw new ActorDefinitionError("actor identity is unavailable outside an actor invocation");
130
- return metadata;
135
+ return context.actorId;
131
136
  }
132
137
  function describeActorClass(actorClass) {
133
138
  const actorName = actorClassName(actorClass);
@@ -152,26 +157,26 @@ function discoverMethods(actorClass, actorName) {
152
157
  validateActorComponent("actor method", name);
153
158
  if (name === "then")
154
159
  throw new ActorDefinitionError(`actor class ${actorName} cannot define method then`);
155
- if (name === "connect" || name === "broadcast" || name === "db")
160
+ if (name === "connect" || name === "broadcast" || name === "db" || name === "alarm")
156
161
  throw new ActorDefinitionError(`actor class ${actorName} cannot define reserved method ${name}`);
157
162
  if (!(descriptor.value instanceof asyncFunction))
158
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`);
159
166
  if (lifecycleMethods.has(name))
160
167
  return [];
161
168
  return [name];
162
169
  });
163
170
  }
164
- const lifecycleMethods = new Set(["onConnect", "onMessage", "onDisconnect"]);
171
+ const lifecycleMethods = new Set(["onConnect", "onMessage", "onDisconnect", "onAlarm"]);
165
172
  function validateActorClass(actorClass, actorName) {
166
173
  if (Object.getPrototypeOf(actorClass.prototype) !== Actor.prototype)
167
174
  throw new ActorDefinitionError(`actor class ${actorName} must extend Actor directly`);
168
- if (actorClass.length !== 0)
169
- throw new ActorDefinitionError(`actor class ${actorName} cannot require constructor arguments`);
170
175
  }
171
176
  function actorClassName(actorClass) {
172
177
  if (actorClass.name.length === 0)
173
178
  throw new ActorDefinitionError("actor classes must be named");
174
179
  return actorClass.name;
175
180
  }
176
- export { Actor, bindActorIdentity, findActorDefinition, registerActorClass };
181
+ export { Actor, actorContext, findActorDefinition, registerActorClass };
177
182
  //# sourceMappingURL=actor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"actor.js","sourceRoot":"","sources":["../../src/actor/actor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAGnD,OAAO,EAAE,aAAa,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAA;AAE5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAEtD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAE1G,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAKvE,MAAM,aAAa,GAAG,IAAI,OAAO,EAAyB,CAAA;AAC1D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAA;AAC3D,MAAM,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC,CAAC,WAAW,CAAA;AACvE,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAiC,CAAA;AAgBrE;;;;;;;GAOG;AACH,MAAe,KAAK;IAIhB;QACI,6BAA6B,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;IAED,qGAAqG;IACrG,IAAI,EAAE;QACF,OAAO,aAAa,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG,CAEN,OAAe;QAEf,OAAO,iBAAiB,CAAC,IAAI,EAAE,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;IAC/E,CAAC;IAED,2DAA2D;IAC3D,IAAc,EAAE;QACZ,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAA;IACpC,CAAC;IAED;;OAEG;IACO,cAAc,CAAC,GAAS;QAC9B,OAAO,gBAAgB,CAA0B,IAAI,EAAE,GAAG,CAAC,CAAA;IAC/D,CAAC;IAES,kBAAkB;QACxB,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IAED,oFAAoF;IAC1E,wBAAwB,CAAC,IAA8D;QAC7F,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACpC,CAAC;IAED,mGAAmG;IACzF,SAAS,CAAC,OAAiB,EAAE,OAAoC;QACvE,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC1C,CAAC;CACJ;AAED,SAAS,kBAAkB,CACvB,UAAgC,EAChC,KAAkB;IAElB,MAAM,SAAS,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IAC5C,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QAC/C,MAAM,IAAI,oBAAoB,CAAC,uCAAuC,CAAC,CAAA;IAC3E,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IAChD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,QAAQ,CAAC,UAAU,KAAK,UAAU;YAAE,MAAM,IAAI,oBAAoB,CAAC,wBAAwB,SAAS,EAAE,CAAC,CAAA;QAC3G,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAA;QACtB,OAAO,QAAQ,CAAA;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,EAAE,GAAG,kBAAkB,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAA;IAC/D,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IAC3C,OAAO,UAAU,CAAA;AACrB,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAiB;IAC1C,OAAO,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AAC1C,CAAC;AAED,SAAS,iBAAiB,CACtB,UAAuB,EACvB,OAAe;IAEf,MAAM,SAAS,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IAC5C,OAAO,IAAI,SAAS,CAAC,OAAO,CAAwD,CAAA;AACxF,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAkB,EAAE,OAAe;IAC1D,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;AACzF,CAAC;AAED,SAAS,cAAc,CAAC,UAAsB;IAC1C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACjD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAA;IAC3C,MAAM,UAAU,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAA;IAEjD,MAAM,cAAe,SAAQ,KAAK;QAC9B,YAAY,OAAe;YACvB,KAAK,EAAE,CAAA;YACP,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACpC,CAAC;KACJ;IAED,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE;QACvD,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,SAAS,YAAY,CAAc,QAAiB;YACvD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;YAC/B,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;YAC/D,OAAO,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAC/B,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CACtF,CAAA;QACL,CAAC;KACJ,CAAC,CAAA;IAEF,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE;QACzD,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,SAAS,qBAAqB,CAAc,OAA2B;YAC1E,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;YAC/B,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;YAC7D,OAAO,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;QACxG,CAAC;KACJ,CAAC,CAAA;IAEF,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAChC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE;YACpD,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,SAAS,kBAAkB,CAAc,GAAG,IAAe;gBAC9D,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;gBAClC,OAAO,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;YAC5G,CAAC;SACJ,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;IACF,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;IAC3D,OAAO,cAAc,CAAA;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,QAAkB;IACnC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC5C,IAAI,QAAQ,KAAK,SAAS;QACtB,MAAM,IAAI,oBAAoB,CAAC,2DAA2D,CAAC,CAAA;IAC/F,OAAO,QAAQ,CAAA;AACnB,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAsB;IAC9C,MAAM,SAAS,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IAC5C,kBAAkB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IACzC,OAAO;QACH,SAAS,EAAE,sBAAsB,CAAC,YAAY,EAAE,SAAS,CAAC;QAC1D,UAAU;QACV,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,EAAE;QACjC,OAAO,EAAE,IAAI,GAAG,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;KAC3D,CAAA;AACL,CAAC;AAED,SAAS,eAAe,CAAC,UAAsB,EAAE,SAAiB;IAC9D,IAAI,MAAM,CAAC,qBAAqB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;QAC7D,MAAM,IAAI,oBAAoB,CAAC,eAAe,SAAS,+BAA+B,CAAC,CAAA;IAE3F,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE;QACzG,IAAI,IAAI,KAAK,aAAa;YAAE,OAAO,EAAE,CAAA;QACrC,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS;YAC5D,MAAM,IAAI,oBAAoB,CAAC,eAAe,SAAS,2BAA2B,IAAI,EAAE,CAAC,CAAA;QAC7F,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU;YAAE,OAAO,EAAE,CAAA;QACrD,sBAAsB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;QAC5C,IAAI,IAAI,KAAK,MAAM;YAAE,MAAM,IAAI,oBAAoB,CAAC,eAAe,SAAS,4BAA4B,CAAC,CAAA;QACzG,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,IAAI;YAC3D,MAAM,IAAI,oBAAoB,CAAC,eAAe,SAAS,kCAAkC,IAAI,EAAE,CAAC,CAAA;QACpG,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,YAAY,aAAa,CAAC;YAC5C,MAAM,IAAI,oBAAoB,CAAC,gBAAgB,SAAS,IAAI,IAAI,gBAAgB,CAAC,CAAA;QACrF,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAA;QACzC,OAAO,CAAC,IAAI,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACN,CAAC;AAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAA;AAE5E,SAAS,kBAAkB,CAAC,UAAsB,EAAE,SAAiB;IACjE,IAAI,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC,SAAS;QAC/D,MAAM,IAAI,oBAAoB,CAAC,eAAe,SAAS,6BAA6B,CAAC,CAAA;IACzF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QACvB,MAAM,IAAI,oBAAoB,CAAC,eAAe,SAAS,uCAAuC,CAAC,CAAA;AACvG,CAAC;AAED,SAAS,cAAc,CAAC,UAAsB;IAC1C,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,oBAAoB,CAAC,6BAA6B,CAAC,CAAA;IAC/F,OAAO,UAAU,CAAC,IAAI,CAAA;AAC1B,CAAC;AA8ED,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAA"}
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":"AAAA,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAIzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAQtD,MAAM,mBAAmB;IAEZ,OAAO,CAAQ;IACf,eAAe,GAAG,IAAI,GAAG,EAA8B,CAAA;IACvD,SAAS,CAA2B;IACpC,MAAM,CAAwB;IACvC,MAAM,CAAoB;IAC1B,aAAa,GAAG,KAAK,CAAA;IAErB,YAAoB,OAAe,EAAE,QAA4C;QAC7E,IAAI,CAAC,OAAO,GAAG,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAC1D,IAAI,CAAC,SAAS,GAAG,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACjD,IAAI,CAAC,MAAM,GAAG,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;IACvD,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,OAAe,EAAE,QAA2C;QACvE,OAAO,IAAI,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IACrD,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,OAAe;QAC5B,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAgB,EAAE,KAAa;QACvC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YACvG,MAAM,IAAI,oBAAoB,CAAC,6CAA6C,CAAC,CAAA;QACjF,OAAO,CAAC,MAAM,GAAG,KAAK,CAAA;QACtB,OAAO,OAAO,CAAA;IAClB,CAAC;IAED,SAAS,CAAC,UAAoB;QAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QACzB,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YACnD,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK;gBACrB,MAAM,IAAI,oBAAoB,CAAC,4DAA4D,CAAC,CAAA;YAChG,OAAO,KAAK,CAAA;QAChB,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;QAC9B,CAAC;IACL,CAAC;IAED,IAAI,QAAQ;QACR,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAC5B,MAAM,IAAI,oBAAoB,CAAC,yDAAyD,CAAC,CAAA;QAC7F,OAAO,IAAI,CAAC,SAAS,CAAA;IACzB,CAAC;IAED,IAAI,KAAK;QACL,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YACzB,MAAM,IAAI,oBAAoB,CAAC,sDAAsD,CAAC,CAAA;QAC1F,OAAO,IAAI,CAAC,MAAM,CAAA;IACtB,CAAC;IAED,YAAY;QACR,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAAE,OAAM;QAC/F,MAAM,IAAI,oBAAoB,CAAC,sDAAsD,CAAC,CAAA;IAC1F,CAAC;IAEO,KAAK,CAAC,QAAuB;QACjC,OAAO;YACH,IAAI,EAAE,CAAqB,GAAW,EAAE,GAAG,QAAuB,EAAS,EAAE;gBACzE,IAAI,CAAC,YAAY,EAAE,CAAA;gBACnB,OAAO,QAAQ,CAAC,IAAI,CAAM,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAA;YAC/C,CAAC;SACJ,CAAA;IACL,CAAC;IAEO,UAAU,CAAC,KAAwB;QACvC,OAAO;YACH,GAAG,EAAE,GAAG,EAAE;gBACN,IAAI,CAAC,YAAY,EAAE,CAAA;gBACnB,OAAO,KAAK,CAAC,aAAa,EAAE,CAAC,WAAW,CAAA;YAC5C,CAAC;YACD,GAAG,EAAE,WAAW,CAAC,EAAE;gBACf,IAAI,CAAC,YAAY,EAAE,CAAA;gBACnB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC;oBAClC,MAAM,IAAI,oBAAoB,CAAC,8CAA8C,CAAC,CAAA;gBAClF,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;YAC/B,CAAC;YACD,MAAM,EAAE,GAAG,EAAE;gBACT,IAAI,CAAC,YAAY,EAAE,CAAA;gBACnB,KAAK,CAAC,WAAW,EAAE,CAAA;YACvB,CAAC;SACJ,CAAA;IACL,CAAC;CACJ;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAA"}
@@ -3,10 +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 constructWithActorDatabase<T>(database: ActorDatabase, construct: () => T): T;
8
- declare function bindConstructingActorDatabase(actor: object): void;
9
- declare function runWithActorDatabase<T>(actor: object, operation: () => Promise<T>): Promise<T>;
10
- export { actorDatabase, bindConstructingActorDatabase, constructWithActorDatabase, 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 };
11
11
  export type { ActorDatabase, SqliteValue };
12
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;AAMD,iBAAS,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAKnD;AAED,iBAAS,0BAA0B,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAOrF;AAED,iBAAS,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAK1D;AAcD,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,6BAA6B,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,CAAA;AACzG,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,43 +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
- const construction = new AsyncLocalStorage();
6
- function actorDatabase(actor) {
7
- const database = databases.get(actor);
8
- if (database === undefined)
9
- throw new ActorDefinitionError("actor database is unavailable outside the actor runtime");
10
- return database;
3
+ function isActorInvocation(actor) {
4
+ const context = invocation.getStore();
5
+ return context?.actor === actor && context.active;
11
6
  }
12
- function constructWithActorDatabase(database, construct) {
13
- const context = { database, active: true };
14
- try {
15
- return construction.run(context, construct);
16
- }
17
- finally {
18
- context.active = false;
19
- }
20
- }
21
- function bindConstructingActorDatabase(actor) {
22
- const context = construction.getStore();
23
- if (!context?.active || context.actor !== undefined)
24
- return;
25
- context.actor = actor;
26
- bindActorDatabase(actor, context.database);
27
- }
28
- function bindActorDatabase(actor, database) {
29
- databases.set(actor, {
30
- exec(sql, ...bindings) {
31
- const context = invocation.getStore();
32
- const creating = construction.getStore();
33
- if (!(context?.actor === actor && context.active) && !(creating?.actor === actor && creating.active))
34
- throw new ActorDefinitionError("actor database is unavailable outside its invocation");
35
- return database.exec(sql, ...bindings);
36
- }
37
- });
7
+ function actorDatabaseMode() {
8
+ const context = invocation.getStore();
9
+ return context?.active ? context.mode : undefined;
38
10
  }
39
- async function runWithActorDatabase(actor, operation) {
40
- const context = { actor, active: true };
11
+ async function runWithActorDatabase(actor, mode, operation) {
12
+ const context = { actor, active: true, mode };
41
13
  try {
42
14
  return await invocation.run(context, operation);
43
15
  }
@@ -45,5 +17,5 @@ async function runWithActorDatabase(actor, operation) {
45
17
  context.active = false;
46
18
  }
47
19
  }
48
- export { actorDatabase, bindConstructingActorDatabase, constructWithActorDatabase, runWithActorDatabase };
20
+ export { actorDatabaseMode, isActorInvocation, runWithActorDatabase };
49
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;AAC9E,MAAM,YAAY,GAAG,IAAI,iBAAiB,EAAgE,CAAA;AAE1G,SAAS,aAAa,CAAC,KAAa;IAChC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACrC,IAAI,QAAQ,KAAK,SAAS;QACtB,MAAM,IAAI,oBAAoB,CAAC,yDAAyD,CAAC,CAAA;IAC7F,OAAO,QAAQ,CAAA;AACnB,CAAC;AAED,SAAS,0BAA0B,CAAI,QAAuB,EAAE,SAAkB;IAC9E,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IAC1C,IAAI,CAAC;QACD,OAAO,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IAC/C,CAAC;YAAS,CAAC;QACP,OAAO,CAAC,MAAM,GAAG,KAAK,CAAA;IAC1B,CAAC;AACL,CAAC;AAED,SAAS,6BAA6B,CAAC,KAAa;IAChD,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAA;IACvC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,OAAM;IAC3D,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;IACrB,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;AAC9C,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,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAA;YACxC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,KAAK,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;gBAChG,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,6BAA6B,EAAE,0BAA0B,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"}
@@ -1,14 +1,19 @@
1
+ import { ActorResource } from "./resource.js";
2
+ /** Marks a method for whole-call transactions. Currently all non-interleaved calls use this behavior. */
3
+ declare function Atomic(_value: Function, context: ClassMethodDecoratorContext): void;
1
4
  /**
2
5
  * Lets other calls run during awaits. State may change while waiting.
3
6
  * Disables error rollback for the whole actor class. State is saved on successful completion.
4
7
  * @experimental
5
8
  */
6
9
  declare function Interleave(_value: Function, context: ClassMethodDecoratorContext): void;
7
- /** Saves a field after successful calls. Cannot decorate `#private` fields. */
10
+ /** Writes assignments to SQLite; reassign objects and arrays to save changes. Commits after successful calls. */
8
11
  declare function Persisted(_value: undefined, context: ClassFieldDecoratorContext): void;
9
12
  /** Marks a temporary field that may reset between calls. */
10
13
  declare function Ephemeral(_value: undefined, context: ClassFieldDecoratorContext): void;
11
14
  /** Sends browser state updates for a public `@Persisted` field. */
12
15
  declare function Emittable(_value: undefined, context: ClassFieldDecoratorContext): void;
13
- export { Emittable, Ephemeral, Interleave, Persisted };
16
+ /** Marks a property as being a Resource. Includes them in Actor Lifecycle */
17
+ declare function Resource<This, Value extends ActorResource>(_value: undefined, context: ClassFieldDecoratorContext<This, Value>): void;
18
+ export { Atomic, Emittable, Ephemeral, Interleave, Persisted, Resource };
14
19
  //# sourceMappingURL=decorators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/actor/decorators.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,iBAAS,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,2BAA2B,GAAG,IAAI,CAGhF;AAED,+EAA+E;AAC/E,iBAAS,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAG/E;AAED,4DAA4D;AAC5D,iBAAS,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAE/E;AAED,mEAAmE;AACnE,iBAAS,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAG/E;AAOD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAA"}
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/actor/decorators.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,yGAAyG;AACzG,iBAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,2BAA2B,GAAG,IAAI,CAG5E;AAED;;;;GAIG;AACH,iBAAS,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,2BAA2B,GAAG,IAAI,CAGhF;AAED,iHAAiH;AACjH,iBAAS,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAG/E;AAED,4DAA4D;AAC5D,iBAAS,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAE/E;AAED,mEAAmE;AACnE,iBAAS,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAG/E;AAED,6EAA6E;AAC7E,iBAAS,QAAQ,CAAC,IAAI,EAAE,KAAK,SAAS,aAAa,EAC/C,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,GACjD,IAAI,CAEN;AAOD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA"}