solid-objects 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/MIT-LICENSE +19 -0
  3. package/README.md +958 -0
  4. package/dist/actor.d.ts +81 -0
  5. package/dist/actor.d.ts.map +1 -0
  6. package/dist/actor.js +141 -0
  7. package/dist/actor.js.map +1 -0
  8. package/dist/application-database.d.ts +3 -0
  9. package/dist/application-database.d.ts.map +1 -0
  10. package/dist/application-database.js +59 -0
  11. package/dist/application-database.js.map +1 -0
  12. package/dist/broadcast-worker.d.ts +18 -0
  13. package/dist/broadcast-worker.d.ts.map +1 -0
  14. package/dist/broadcast-worker.js +74 -0
  15. package/dist/broadcast-worker.js.map +1 -0
  16. package/dist/browser/components.d.ts +64 -0
  17. package/dist/browser/components.d.ts.map +1 -0
  18. package/dist/browser/components.js +294 -0
  19. package/dist/browser/components.js.map +1 -0
  20. package/dist/browser/index.d.ts +46 -0
  21. package/dist/browser/index.d.ts.map +1 -0
  22. package/dist/browser/index.js +207 -0
  23. package/dist/browser/index.js.map +1 -0
  24. package/dist/cli.d.ts +9 -0
  25. package/dist/cli.d.ts.map +1 -0
  26. package/dist/cli.js +216 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/configuration.d.ts +96 -0
  29. package/dist/configuration.d.ts.map +1 -0
  30. package/dist/configuration.js +169 -0
  31. package/dist/configuration.js.map +1 -0
  32. package/dist/context.d.ts +20 -0
  33. package/dist/context.d.ts.map +1 -0
  34. package/dist/context.js +24 -0
  35. package/dist/context.js.map +1 -0
  36. package/dist/database/deadline.d.ts +9 -0
  37. package/dist/database/deadline.d.ts.map +1 -0
  38. package/dist/database/deadline.js +49 -0
  39. package/dist/database/deadline.js.map +1 -0
  40. package/dist/database/mysql.d.ts +21 -0
  41. package/dist/database/mysql.d.ts.map +1 -0
  42. package/dist/database/mysql.js +192 -0
  43. package/dist/database/mysql.js.map +1 -0
  44. package/dist/database/postgresql-sql.d.ts +2 -0
  45. package/dist/database/postgresql-sql.d.ts.map +1 -0
  46. package/dist/database/postgresql-sql.js +102 -0
  47. package/dist/database/postgresql-sql.js.map +1 -0
  48. package/dist/database/postgresql.d.ts +31 -0
  49. package/dist/database/postgresql.d.ts.map +1 -0
  50. package/dist/database/postgresql.js +172 -0
  51. package/dist/database/postgresql.js.map +1 -0
  52. package/dist/database/sqlite.d.ts +27 -0
  53. package/dist/database/sqlite.d.ts.map +1 -0
  54. package/dist/database/sqlite.js +190 -0
  55. package/dist/database/sqlite.js.map +1 -0
  56. package/dist/database/transaction-context.d.ts +3 -0
  57. package/dist/database/transaction-context.d.ts.map +1 -0
  58. package/dist/database/transaction-context.js +19 -0
  59. package/dist/database/transaction-context.js.map +1 -0
  60. package/dist/database/types.d.ts +20 -0
  61. package/dist/database/types.d.ts.map +1 -0
  62. package/dist/database/types.js +2 -0
  63. package/dist/database/types.js.map +1 -0
  64. package/dist/dead-letters.d.ts +23 -0
  65. package/dist/dead-letters.d.ts.map +1 -0
  66. package/dist/dead-letters.js +13 -0
  67. package/dist/dead-letters.js.map +1 -0
  68. package/dist/default-runtime.d.ts +5 -0
  69. package/dist/default-runtime.d.ts.map +1 -0
  70. package/dist/default-runtime.js +14 -0
  71. package/dist/default-runtime.js.map +1 -0
  72. package/dist/definition.d.ts +32 -0
  73. package/dist/definition.d.ts.map +1 -0
  74. package/dist/definition.js +173 -0
  75. package/dist/definition.js.map +1 -0
  76. package/dist/doctor.d.ts +32 -0
  77. package/dist/doctor.d.ts.map +1 -0
  78. package/dist/doctor.js +500 -0
  79. package/dist/doctor.js.map +1 -0
  80. package/dist/effect-worker.d.ts +18 -0
  81. package/dist/effect-worker.d.ts.map +1 -0
  82. package/dist/effect-worker.js +74 -0
  83. package/dist/effect-worker.js.map +1 -0
  84. package/dist/errors.d.ts +145 -0
  85. package/dist/errors.d.ts.map +1 -0
  86. package/dist/errors.js +120 -0
  87. package/dist/errors.js.map +1 -0
  88. package/dist/executable.d.ts +3 -0
  89. package/dist/executable.d.ts.map +1 -0
  90. package/dist/executable.js +12 -0
  91. package/dist/executable.js.map +1 -0
  92. package/dist/index.d.ts +24 -0
  93. package/dist/index.d.ts.map +1 -0
  94. package/dist/index.js +21 -0
  95. package/dist/index.js.map +1 -0
  96. package/dist/maintenance-scheduler.d.ts +17 -0
  97. package/dist/maintenance-scheduler.d.ts.map +1 -0
  98. package/dist/maintenance-scheduler.js +41 -0
  99. package/dist/maintenance-scheduler.js.map +1 -0
  100. package/dist/process-administration.d.ts +30 -0
  101. package/dist/process-administration.d.ts.map +1 -0
  102. package/dist/process-administration.js +13 -0
  103. package/dist/process-administration.js.map +1 -0
  104. package/dist/realtime.d.ts +33 -0
  105. package/dist/realtime.d.ts.map +1 -0
  106. package/dist/realtime.js +238 -0
  107. package/dist/realtime.js.map +1 -0
  108. package/dist/reconciliation.d.ts +41 -0
  109. package/dist/reconciliation.d.ts.map +1 -0
  110. package/dist/reconciliation.js +19 -0
  111. package/dist/reconciliation.js.map +1 -0
  112. package/dist/records.d.ts +137 -0
  113. package/dist/records.d.ts.map +1 -0
  114. package/dist/records.js +2 -0
  115. package/dist/records.js.map +1 -0
  116. package/dist/reference.d.ts +97 -0
  117. package/dist/reference.d.ts.map +1 -0
  118. package/dist/reference.js +157 -0
  119. package/dist/reference.js.map +1 -0
  120. package/dist/reminder-administration.d.ts +35 -0
  121. package/dist/reminder-administration.d.ts.map +1 -0
  122. package/dist/reminder-administration.js +13 -0
  123. package/dist/reminder-administration.js.map +1 -0
  124. package/dist/reminder-scheduler.d.ts +18 -0
  125. package/dist/reminder-scheduler.d.ts.map +1 -0
  126. package/dist/reminder-scheduler.js +88 -0
  127. package/dist/reminder-scheduler.js.map +1 -0
  128. package/dist/repository.d.ts +142 -0
  129. package/dist/repository.d.ts.map +1 -0
  130. package/dist/repository.js +1237 -0
  131. package/dist/repository.js.map +1 -0
  132. package/dist/retention.d.ts +17 -0
  133. package/dist/retention.d.ts.map +1 -0
  134. package/dist/retention.js +13 -0
  135. package/dist/retention.js.map +1 -0
  136. package/dist/runtime.d.ts +140 -0
  137. package/dist/runtime.d.ts.map +1 -0
  138. package/dist/runtime.js +1737 -0
  139. package/dist/runtime.js.map +1 -0
  140. package/dist/schema.d.ts +8 -0
  141. package/dist/schema.d.ts.map +1 -0
  142. package/dist/schema.js +260 -0
  143. package/dist/schema.js.map +1 -0
  144. package/dist/serialization.d.ts +11 -0
  145. package/dist/serialization.d.ts.map +1 -0
  146. package/dist/serialization.js +82 -0
  147. package/dist/serialization.js.map +1 -0
  148. package/dist/test-helper.d.ts +15 -0
  149. package/dist/test-helper.d.ts.map +1 -0
  150. package/dist/test-helper.js +69 -0
  151. package/dist/test-helper.js.map +1 -0
  152. package/dist/types.d.ts +71 -0
  153. package/dist/types.d.ts.map +1 -0
  154. package/dist/types.js +2 -0
  155. package/dist/types.js.map +1 -0
  156. package/dist/version.d.ts +2 -0
  157. package/dist/version.d.ts.map +1 -0
  158. package/dist/version.js +2 -0
  159. package/dist/version.js.map +1 -0
  160. package/dist/wake-up/postgresql.d.ts +42 -0
  161. package/dist/wake-up/postgresql.d.ts.map +1 -0
  162. package/dist/wake-up/postgresql.js +234 -0
  163. package/dist/wake-up/postgresql.js.map +1 -0
  164. package/dist/wake-up/redis.d.ts +35 -0
  165. package/dist/wake-up/redis.d.ts.map +1 -0
  166. package/dist/wake-up/redis.js +151 -0
  167. package/dist/wake-up/redis.js.map +1 -0
  168. package/dist/wake-up.d.ts +24 -0
  169. package/dist/wake-up.d.ts.map +1 -0
  170. package/dist/wake-up.js +66 -0
  171. package/dist/wake-up.js.map +1 -0
  172. package/dist/worker.d.ts +36 -0
  173. package/dist/worker.d.ts.map +1 -0
  174. package/dist/worker.js +281 -0
  175. package/dist/worker.js.map +1 -0
  176. package/docs/api.md +197 -0
  177. package/docs/architecture.md +113 -0
  178. package/docs/authorization.md +31 -0
  179. package/docs/browser-protocol.md +93 -0
  180. package/docs/configuration.md +168 -0
  181. package/docs/correctness.md +53 -0
  182. package/docs/errors-and-recovery.md +89 -0
  183. package/docs/operations.md +170 -0
  184. package/docs/parity.md +94 -0
  185. package/docs/releasing.md +45 -0
  186. package/docs/state-and-lifecycle.md +162 -0
  187. package/package.json +100 -0
@@ -0,0 +1,81 @@
1
+ import type { StateMigration } from "./definition.js";
2
+ import { type ActorReference, type ScheduledOperations, type StagedOperations } from "./reference.js";
3
+ import type { ActorIdentifier, JsonObject, JsonValue, MessageContext } from "./types.js";
4
+ export type PayloadBroadcastValue = JsonObject | JsonValue[];
5
+ export type PayloadBroadcasts<ActorType extends Actor, AuthorizationContext> = Readonly<Record<string, (actor: ActorType, authorizationContext: AuthorizationContext) => PayloadBroadcastValue | Promise<PayloadBroadcastValue>>>;
6
+ export interface EffectIntent {
7
+ name: string;
8
+ arguments: JsonObject;
9
+ successOperation?: string;
10
+ failureOperation?: string;
11
+ }
12
+ export interface CommitActionIntent {
13
+ name: string;
14
+ arguments: JsonObject;
15
+ }
16
+ export interface ReminderIntent {
17
+ operation: string;
18
+ atMilliseconds: number;
19
+ arguments: JsonObject;
20
+ intervalMilliseconds?: number;
21
+ missedPolicy: "all" | "latest";
22
+ }
23
+ export interface OutboundMessageIntent {
24
+ actorType: string;
25
+ actorId: string;
26
+ operation: string;
27
+ arguments: JsonObject;
28
+ availableAtMilliseconds?: number;
29
+ idempotencyKey?: string;
30
+ }
31
+ export interface ActorIntents {
32
+ effects: EffectIntent[];
33
+ commitActions: CommitActionIntent[];
34
+ reminders: ReminderIntent[];
35
+ outboundMessages: OutboundMessageIntent[];
36
+ }
37
+ export interface ActorClass<ActorType extends Actor = Actor> {
38
+ new (actorId?: string): ActorType;
39
+ readonly actorType: string;
40
+ readonly stateVersion?: number;
41
+ readonly migrations?: readonly StateMigration[];
42
+ readonly payloads?: Readonly<Record<string, unknown>>;
43
+ }
44
+ export interface ReminderOptions {
45
+ at: Date;
46
+ everyMilliseconds?: number;
47
+ missed?: "all" | "latest";
48
+ }
49
+ export interface OutboundMessageOptions {
50
+ availableAt?: Date;
51
+ idempotencyKey?: string;
52
+ }
53
+ export declare abstract class Actor {
54
+ #private;
55
+ static readonly actorType: string;
56
+ static readonly stateVersion?: number;
57
+ static readonly migrations?: readonly StateMigration[];
58
+ static readonly payloads: Readonly<Record<string, unknown>>;
59
+ static ref<ActorType extends Actor>(this: new (actorId?: string) => ActorType, actorId: ActorIdentifier): ActorReference<ActorType>;
60
+ constructor(actorId?: string);
61
+ get actorId(): string;
62
+ get currentMessage(): MessageContext | undefined;
63
+ observables(): Record<string, unknown>;
64
+ activate(): Promise<void>;
65
+ deactivate(): Promise<void>;
66
+ protected onActivate(): void | Promise<void>;
67
+ protected onDeactivate(): void | Promise<void>;
68
+ reject(code: string, options: {
69
+ message: string;
70
+ details?: Record<string, unknown>;
71
+ }): never;
72
+ emit(name: string, options?: {
73
+ arguments?: Record<string, unknown>;
74
+ onSuccess?: string;
75
+ onFailure?: string;
76
+ }): void;
77
+ commitAction(name: string, argumentsValue?: Record<string, unknown>): void;
78
+ schedule(options: ReminderOptions): ScheduledOperations;
79
+ sendTo<TargetActor extends Actor>(reference: ActorReference<TargetActor>, options?: OutboundMessageOptions): StagedOperations<TargetActor>;
80
+ }
81
+ //# sourceMappingURL=actor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actor.d.ts","sourceRoot":"","sources":["../src/actor.ts"],"names":[],"mappings":"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"}
package/dist/actor.js ADDED
@@ -0,0 +1,141 @@
1
+ import { currentMessage, currentRuntime } from "./context.js";
2
+ import { getDefaultRuntime } from "./default-runtime.js";
3
+ import { Rejected, UnknownOperation } from "./errors.js";
4
+ import { createStagedOperationMap, createStagedOperations, } from "./reference.js";
5
+ import { jsonObject } from "./serialization.js";
6
+ export class Actor {
7
+ static actorType;
8
+ static stateVersion;
9
+ static migrations;
10
+ static payloads = Object.freeze({});
11
+ static ref(actorId) {
12
+ return (currentRuntime() ?? getDefaultRuntime()).ref(this, actorId);
13
+ }
14
+ #actorId;
15
+ #intents = {
16
+ effects: [],
17
+ commitActions: [],
18
+ reminders: [],
19
+ outboundMessages: [],
20
+ };
21
+ #operations = new Set();
22
+ constructor(actorId = "") {
23
+ this.#actorId = actorId;
24
+ }
25
+ get actorId() {
26
+ return this.#actorId;
27
+ }
28
+ get currentMessage() {
29
+ return currentMessage();
30
+ }
31
+ observables() {
32
+ return {};
33
+ }
34
+ async activate() {
35
+ await this.onActivate();
36
+ }
37
+ async deactivate() {
38
+ await this.onDeactivate();
39
+ }
40
+ onActivate() { }
41
+ onDeactivate() { }
42
+ reject(code, options) {
43
+ if (!/^[a-z][a-z0-9_]*$/.test(code)) {
44
+ throw new TypeError("rejection code must contain lowercase letters, digits, and underscores");
45
+ }
46
+ throw new Rejected({
47
+ code,
48
+ message: options.message,
49
+ ...(options.details === undefined ? {} : { details: options.details }),
50
+ });
51
+ }
52
+ emit(name, options = {}) {
53
+ for (const callback of [options.onSuccess, options.onFailure]) {
54
+ if (callback !== undefined && !this.#operations.has(String(callback))) {
55
+ throw new UnknownOperation(`unknown effect callback operation ${JSON.stringify(callback)}`);
56
+ }
57
+ }
58
+ this.#intents.effects.push({
59
+ name,
60
+ arguments: jsonObject(options.arguments ?? {}),
61
+ ...(options.onSuccess === undefined ? {} : { successOperation: String(options.onSuccess) }),
62
+ ...(options.onFailure === undefined ? {} : { failureOperation: String(options.onFailure) }),
63
+ });
64
+ }
65
+ commitAction(name, argumentsValue = {}) {
66
+ this.#intents.commitActions.push({ name, arguments: jsonObject(argumentsValue) });
67
+ }
68
+ schedule(options) {
69
+ const atMilliseconds = options.at.getTime();
70
+ if (!Number.isFinite(atMilliseconds))
71
+ throw new TypeError("reminder time must be valid");
72
+ if (options.everyMilliseconds !== undefined && options.everyMilliseconds <= 0) {
73
+ throw new TypeError("reminder interval must be positive");
74
+ }
75
+ return createStagedOperationMap(this.#operations, (operation, argumentsValue) => {
76
+ this.#intents.reminders.push({
77
+ operation,
78
+ atMilliseconds,
79
+ arguments: jsonObject(argumentsValue),
80
+ missedPolicy: options.missed ?? "latest",
81
+ ...(options.everyMilliseconds === undefined
82
+ ? {}
83
+ : { intervalMilliseconds: options.everyMilliseconds }),
84
+ });
85
+ });
86
+ }
87
+ sendTo(reference, options = {}) {
88
+ if (options.availableAt !== undefined && !Number.isFinite(options.availableAt.getTime())) {
89
+ throw new TypeError("message availability time must be valid");
90
+ }
91
+ return createStagedOperations(reference.operations, (operation, argumentsValue) => {
92
+ this.#intents.outboundMessages.push({
93
+ actorType: reference.actorType,
94
+ actorId: reference.actorId,
95
+ operation,
96
+ arguments: jsonObject(argumentsValue),
97
+ ...(options.availableAt === undefined
98
+ ? {}
99
+ : { availableAtMilliseconds: options.availableAt.getTime() }),
100
+ ...(options.idempotencyKey === undefined ? {} : { idempotencyKey: options.idempotencyKey }),
101
+ });
102
+ });
103
+ }
104
+ /** @internal */
105
+ prepare(operations) {
106
+ this.#operations = operations;
107
+ }
108
+ /** @internal */
109
+ invoke(operation, argumentsValue) {
110
+ const actorOperation = this[operation];
111
+ if (typeof actorOperation === "function")
112
+ return actorOperation.call(this, argumentsValue);
113
+ return actorOperation;
114
+ }
115
+ /** @internal */
116
+ observableValues() {
117
+ return jsonObject(this.observables());
118
+ }
119
+ /** @internal */
120
+ drainIntents() {
121
+ return {
122
+ effects: this.#intents.effects.splice(0),
123
+ commitActions: this.#intents.commitActions.splice(0),
124
+ reminders: this.#intents.reminders.splice(0),
125
+ outboundMessages: this.#intents.outboundMessages.splice(0),
126
+ };
127
+ }
128
+ /** @internal */
129
+ discardIntents() {
130
+ this.drainIntents();
131
+ }
132
+ /** @internal */
133
+ hasIntents() {
134
+ return this.intentCount() > 0;
135
+ }
136
+ /** @internal */
137
+ intentCount() {
138
+ return Object.values(this.#intents).reduce((count, intents) => count + intents.length, 0);
139
+ }
140
+ }
141
+ //# sourceMappingURL=actor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actor.js","sourceRoot":"","sources":["../src/actor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Database } from "./database/types.js";
2
+ export declare function guardApplicationDatabase(database: Database): Database;
3
+ //# sourceMappingURL=application-database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-database.d.ts","sourceRoot":"","sources":["../src/application-database.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAsB,MAAM,qBAAqB,CAAA;AAGvE,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAErE"}
@@ -0,0 +1,59 @@
1
+ import { applicationWritesForbidden } from "./context.js";
2
+ import { ApplicationWriteForbidden } from "./errors.js";
3
+ export function guardApplicationDatabase(database) {
4
+ return new GuardedApplicationDatabase(database);
5
+ }
6
+ class GuardedApplicationDatabase {
7
+ database;
8
+ family;
9
+ schemaIdentity;
10
+ constructor(database) {
11
+ this.database = database;
12
+ this.family = database.family;
13
+ this.schemaIdentity = database.schemaIdentity;
14
+ }
15
+ transactionActive() {
16
+ return this.database.transactionActive?.() ?? false;
17
+ }
18
+ connection(callback) {
19
+ return this.database.connection((connection) => callback(guardConnection(connection)));
20
+ }
21
+ transaction(callback) {
22
+ return this.database.transaction((connection) => callback(guardConnection(connection)));
23
+ }
24
+ close() {
25
+ return this.database.close();
26
+ }
27
+ }
28
+ function guardConnection(connection) {
29
+ return {
30
+ run(sql, parameters) {
31
+ assertWriteAllowed();
32
+ return connection.run(sql, parameters);
33
+ },
34
+ get(sql, parameters) {
35
+ assertReadAllowed(sql);
36
+ return connection.get(sql, parameters);
37
+ },
38
+ all(sql, parameters) {
39
+ assertReadAllowed(sql);
40
+ return connection.all(sql, parameters);
41
+ },
42
+ nowMilliseconds() {
43
+ return connection.nowMilliseconds();
44
+ },
45
+ };
46
+ }
47
+ function assertWriteAllowed() {
48
+ if (!applicationWritesForbidden())
49
+ return;
50
+ throw new ApplicationWriteForbidden("application database writes are forbidden during actor execution");
51
+ }
52
+ function assertReadAllowed(sql) {
53
+ if (!applicationWritesForbidden())
54
+ return;
55
+ if (/^\s*SELECT(?:\s|$)/i.test(sql))
56
+ return;
57
+ throw new ApplicationWriteForbidden("application database reads must begin with SELECT during actor execution");
58
+ }
59
+ //# sourceMappingURL=application-database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-database.js","sourceRoot":"","sources":["../src/application-database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AAEzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAEvD,MAAM,UAAU,wBAAwB,CAAC,QAAkB;IACzD,OAAO,IAAI,0BAA0B,CAAC,QAAQ,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,0BAA0B;IAID;IAHpB,MAAM,CAAA;IACN,cAAc,CAAA;IAEvB,YAA6B,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;QAC7C,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;QAC7B,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAA;IAC/C,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,IAAI,KAAK,CAAA;IACrD,CAAC;IAED,UAAU,CACR,QAA6D;QAE7D,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IACxF,CAAC;IAED,WAAW,CACT,QAA6D;QAE7D,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IACzF,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IAC9B,CAAC;CACF;AAED,SAAS,eAAe,CAAC,UAA8B;IACrD,OAAO;QACL,GAAG,CAAC,GAAG,EAAE,UAAU;YACjB,kBAAkB,EAAE,CAAA;YACpB,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QACxC,CAAC;QACD,GAAG,CAAqB,GAAW,EAAE,UAA+B;YAClE,iBAAiB,CAAC,GAAG,CAAC,CAAA;YACtB,OAAO,UAAU,CAAC,GAAG,CAAM,GAAG,EAAE,UAAU,CAAC,CAAA;QAC7C,CAAC;QACD,GAAG,CAAqB,GAAW,EAAE,UAA+B;YAClE,iBAAiB,CAAC,GAAG,CAAC,CAAA;YACtB,OAAO,UAAU,CAAC,GAAG,CAAM,GAAG,EAAE,UAAU,CAAC,CAAA;QAC7C,CAAC;QACD,eAAe;YACb,OAAO,UAAU,CAAC,eAAe,EAAE,CAAA;QACrC,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB;IACzB,IAAI,CAAC,0BAA0B,EAAE;QAAE,OAAM;IAEzC,MAAM,IAAI,yBAAyB,CACjC,kEAAkE,CACnE,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,CAAC,0BAA0B,EAAE;QAAE,OAAM;IACzC,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAM;IAE3C,MAAM,IAAI,yBAAyB,CACjC,0EAA0E,CAC3E,CAAA;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { SolidObjectsRuntime } from "./runtime.js";
2
+ export declare class BroadcastWorker {
3
+ private readonly runtime;
4
+ readonly processId: `${string}-${string}-${string}-${string}-${string}`;
5
+ private registered;
6
+ private stopping;
7
+ constructor(runtime: SolidObjectsRuntime);
8
+ runOnce(): Promise<number>;
9
+ runUntilIdle(options?: {
10
+ maxBroadcasts?: number;
11
+ }): Promise<number>;
12
+ run(signal: AbortSignal): Promise<void>;
13
+ requestShutdown(): void;
14
+ stopped(): boolean;
15
+ stop(): Promise<void>;
16
+ private ensureRegistered;
17
+ }
18
+ //# sourceMappingURL=broadcast-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcast-worker.d.ts","sourceRoot":"","sources":["../src/broadcast-worker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAGvD,qBAAa,eAAe;IAKd,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,QAAQ,CAAC,SAAS,sDAAe;IACjC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,QAAQ,CAAQ;gBAEK,OAAO,EAAE,mBAAmB;IAEnD,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAc1B,YAAY,CAAC,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAWvE,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7C,eAAe,IAAI,IAAI;IAIvB,OAAO,IAAI,OAAO;IAIZ,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YASb,gBAAgB;CAK/B"}
@@ -0,0 +1,74 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { withProcessHeartbeat } from "./worker.js";
3
+ export class BroadcastWorker {
4
+ runtime;
5
+ processId = randomUUID();
6
+ registered = false;
7
+ stopping = false;
8
+ constructor(runtime) {
9
+ this.runtime = runtime;
10
+ }
11
+ async runOnce() {
12
+ if (this.stopping)
13
+ return 0;
14
+ await this.ensureRegistered();
15
+ await this.runtime.repository.heartbeatProcess(this.processId);
16
+ const broadcast = await this.runtime.repository.claimBroadcast(this.processId);
17
+ if (!broadcast)
18
+ return 0;
19
+ await withProcessHeartbeat({
20
+ runtime: this.runtime,
21
+ processId: this.processId,
22
+ operation: () => this.runtime.executeBroadcast(broadcast),
23
+ });
24
+ return 1;
25
+ }
26
+ async runUntilIdle(options = {}) {
27
+ const maxBroadcasts = options.maxBroadcasts ?? 10_000;
28
+ let processed = 0;
29
+ while (!this.stopping && processed < maxBroadcasts) {
30
+ const count = await this.runOnce();
31
+ if (count === 0)
32
+ break;
33
+ processed += count;
34
+ }
35
+ return processed;
36
+ }
37
+ async run(signal) {
38
+ await this.ensureRegistered();
39
+ while (!signal.aborted && !this.stopping) {
40
+ const wakeUp = await this.runtime.settings.wakeUp.watch("broadcasts");
41
+ const processed = await this.runOnce();
42
+ if (processed === 0) {
43
+ await wakeUp.wait({
44
+ timeoutMilliseconds: this.runtime.settings.pollingIntervalMilliseconds,
45
+ signal,
46
+ });
47
+ }
48
+ }
49
+ await this.stop();
50
+ }
51
+ requestShutdown() {
52
+ this.stopping = true;
53
+ }
54
+ stopped() {
55
+ return this.stopping;
56
+ }
57
+ async stop() {
58
+ if (this.stopping && !this.registered)
59
+ return;
60
+ this.stopping = true;
61
+ if (!this.registered)
62
+ return;
63
+ await this.runtime.repository.startDrainingProcess(this.processId);
64
+ await this.runtime.repository.stopProcess(this.processId);
65
+ this.registered = false;
66
+ }
67
+ async ensureRegistered() {
68
+ if (this.registered)
69
+ return;
70
+ await this.runtime.repository.registerProcess(this.processId, "broadcast_worker");
71
+ this.registered = true;
72
+ }
73
+ }
74
+ //# sourceMappingURL=broadcast-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcast-worker.js","sourceRoot":"","sources":["../src/broadcast-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import type { InvalidationEnvelope } from "./index.js";
2
+ export type ComponentRefreshStrategy = "replace" | "morph";
3
+ export interface ComponentRegistration {
4
+ actorType: string;
5
+ actorId: string;
6
+ target: string;
7
+ name: string;
8
+ key?: string | number;
9
+ observes: readonly string[];
10
+ batch?: string;
11
+ strategy?: ComponentRefreshStrategy;
12
+ }
13
+ export interface RegisteredComponent {
14
+ actorType: string;
15
+ actorId: string;
16
+ target: string;
17
+ name: string;
18
+ key?: string;
19
+ observes: readonly string[];
20
+ batch?: string;
21
+ strategy: ComponentRefreshStrategy;
22
+ }
23
+ export interface ComponentRefreshRequest {
24
+ actorType: string;
25
+ actorId: string;
26
+ instanceId: string;
27
+ revision: string;
28
+ batch?: string;
29
+ components: readonly RegisteredComponent[];
30
+ signal: AbortSignal;
31
+ }
32
+ export interface ComponentRefreshResult<Rendered> {
33
+ target: string;
34
+ rendered: Rendered;
35
+ }
36
+ export interface ComponentApplication<Rendered> {
37
+ component: RegisteredComponent;
38
+ rendered: Rendered;
39
+ instanceId: string;
40
+ revision: string;
41
+ }
42
+ export interface ComponentRefreshFailure {
43
+ error: Error;
44
+ request: ComponentRefreshRequest;
45
+ }
46
+ export interface ComponentRegistryOptions<Rendered> {
47
+ refresh(request: ComponentRefreshRequest): Promise<readonly ComponentRefreshResult<Rendered>[]>;
48
+ apply(application: ComponentApplication<Rendered>): void;
49
+ onError?: (failure: ComponentRefreshFailure) => void;
50
+ }
51
+ export declare class SolidObjectsComponentRegistry<Rendered> {
52
+ #private;
53
+ constructor(options: ComponentRegistryOptions<Rendered>);
54
+ register(registration: ComponentRegistration): () => void;
55
+ invalidate(envelope: InvalidationEnvelope): void;
56
+ close(): void;
57
+ private queue;
58
+ private scheduleFlush;
59
+ private refresh;
60
+ private apply;
61
+ private resetActor;
62
+ private report;
63
+ }
64
+ //# sourceMappingURL=components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/browser/components.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAItD,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,OAAO,CAAA;AAE1D,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,wBAAwB,CAAA;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,wBAAwB,CAAA;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,SAAS,mBAAmB,EAAE,CAAA;IAC1C,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,MAAM,WAAW,sBAAsB,CAAC,QAAQ;IAC9C,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED,MAAM,WAAW,oBAAoB,CAAC,QAAQ;IAC5C,SAAS,EAAE,mBAAmB,CAAA;IAC9B,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,KAAK,CAAA;IACZ,OAAO,EAAE,uBAAuB,CAAA;CACjC;AAED,MAAM,WAAW,wBAAwB,CAAC,QAAQ;IAChD,OAAO,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,SAAS,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC/F,KAAK,CAAC,WAAW,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;IACxD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAA;CACrD;AAyBD,qBAAa,6BAA6B,CAAC,QAAQ;;gBAWrC,OAAO,EAAE,wBAAwB,CAAC,QAAQ,CAAC;IAIvD,QAAQ,CAAC,YAAY,EAAE,qBAAqB,GAAG,MAAM,IAAI;IA6BzD,UAAU,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAqBhD,KAAK,IAAI,IAAI;IAcb,OAAO,CAAC,KAAK;IAyBb,OAAO,CAAC,aAAa;YAYP,OAAO;IA+CrB,OAAO,CAAC,KAAK;IA4Cb,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,MAAM;CAKf"}