@spearwolf/shadow-objects 0.1.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 (184) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +69 -0
  3. package/bundle.js +70 -0
  4. package/package.json +58 -0
  5. package/src/bundle.d.ts +7 -0
  6. package/src/bundle.d.ts.map +1 -0
  7. package/src/bundle.js +5 -0
  8. package/src/bundle.js.map +1 -0
  9. package/src/constants.d.ts +39 -0
  10. package/src/constants.d.ts.map +1 -0
  11. package/src/constants.js +40 -0
  12. package/src/constants.js.map +1 -0
  13. package/src/create-worker.bundle.d.ts +3 -0
  14. package/src/create-worker.bundle.d.ts.map +1 -0
  15. package/src/create-worker.bundle.js +6 -0
  16. package/src/create-worker.bundle.js.map +1 -0
  17. package/src/create-worker.d.ts +3 -0
  18. package/src/create-worker.d.ts.map +1 -0
  19. package/src/create-worker.js +2 -0
  20. package/src/create-worker.js.map +1 -0
  21. package/src/elements/ShaeElement.d.ts +13 -0
  22. package/src/elements/ShaeElement.d.ts.map +1 -0
  23. package/src/elements/ShaeElement.js +58 -0
  24. package/src/elements/ShaeElement.js.map +1 -0
  25. package/src/elements/ShaeEntElement.d.ts +23 -0
  26. package/src/elements/ShaeEntElement.d.ts.map +1 -0
  27. package/src/elements/ShaeEntElement.js +258 -0
  28. package/src/elements/ShaeEntElement.js.map +1 -0
  29. package/src/elements/ShaePropElement.d.ts +26 -0
  30. package/src/elements/ShaePropElement.d.ts.map +1 -0
  31. package/src/elements/ShaePropElement.js +321 -0
  32. package/src/elements/ShaePropElement.js.map +1 -0
  33. package/src/elements/ShaeWorkerElement.d.ts +25 -0
  34. package/src/elements/ShaeWorkerElement.d.ts.map +1 -0
  35. package/src/elements/ShaeWorkerElement.js +208 -0
  36. package/src/elements/ShaeWorkerElement.js.map +1 -0
  37. package/src/elements/constants.d.ts +17 -0
  38. package/src/elements/constants.d.ts.map +1 -0
  39. package/src/elements/constants.js +21 -0
  40. package/src/elements/constants.js.map +1 -0
  41. package/src/elements/events.d.ts +24 -0
  42. package/src/elements/events.d.ts.map +1 -0
  43. package/src/elements/events.js +2 -0
  44. package/src/elements/events.js.map +1 -0
  45. package/src/entities/Entity.d.ts +46 -0
  46. package/src/entities/Entity.d.ts.map +1 -0
  47. package/src/entities/Entity.js +217 -0
  48. package/src/entities/Entity.js.map +1 -0
  49. package/src/entities/Kernel.d.ts +60 -0
  50. package/src/entities/Kernel.d.ts.map +1 -0
  51. package/src/entities/Kernel.js +361 -0
  52. package/src/entities/Kernel.js.map +1 -0
  53. package/src/entities/Registry.d.ts +16 -0
  54. package/src/entities/Registry.d.ts.map +1 -0
  55. package/src/entities/Registry.js +72 -0
  56. package/src/entities/Registry.js.map +1 -0
  57. package/src/entities/ShadowObject.d.ts +18 -0
  58. package/src/entities/ShadowObject.d.ts.map +1 -0
  59. package/src/entities/ShadowObject.js +24 -0
  60. package/src/entities/ShadowObject.js.map +1 -0
  61. package/src/entities/SignalsMap.d.ts +12 -0
  62. package/src/entities/SignalsMap.d.ts.map +1 -0
  63. package/src/entities/SignalsMap.js +34 -0
  64. package/src/entities/SignalsMap.js.map +1 -0
  65. package/src/entities/SignalsPath.d.ts +12 -0
  66. package/src/entities/SignalsPath.d.ts.map +1 -0
  67. package/src/entities/SignalsPath.js +73 -0
  68. package/src/entities/SignalsPath.js.map +1 -0
  69. package/src/entities/events.d.ts +27 -0
  70. package/src/entities/events.d.ts.map +1 -0
  71. package/src/entities/events.js +7 -0
  72. package/src/entities/events.js.map +1 -0
  73. package/src/entities/importModule.d.ts +4 -0
  74. package/src/entities/importModule.d.ts.map +1 -0
  75. package/src/entities/importModule.js +32 -0
  76. package/src/entities/importModule.js.map +1 -0
  77. package/src/index.d.ts +22 -0
  78. package/src/index.d.ts.map +1 -0
  79. package/src/index.js +20 -0
  80. package/src/index.js.map +1 -0
  81. package/src/shadow-objects.d.ts +7 -0
  82. package/src/shadow-objects.d.ts.map +1 -0
  83. package/src/shadow-objects.js +6 -0
  84. package/src/shadow-objects.js.map +1 -0
  85. package/src/shadow-objects.worker.d.ts +2 -0
  86. package/src/shadow-objects.worker.d.ts.map +1 -0
  87. package/src/shadow-objects.worker.js +5 -0
  88. package/src/shadow-objects.worker.js.map +1 -0
  89. package/src/shae-ent.d.ts +2 -0
  90. package/src/shae-ent.d.ts.map +1 -0
  91. package/src/shae-ent.js +4 -0
  92. package/src/shae-ent.js.map +1 -0
  93. package/src/shae-prop.d.ts +2 -0
  94. package/src/shae-prop.d.ts.map +1 -0
  95. package/src/shae-prop.js +4 -0
  96. package/src/shae-prop.js.map +1 -0
  97. package/src/shae-worker.d.ts +2 -0
  98. package/src/shae-worker.d.ts.map +1 -0
  99. package/src/shae-worker.js +4 -0
  100. package/src/shae-worker.js.map +1 -0
  101. package/src/types.d.ts +89 -0
  102. package/src/types.d.ts.map +1 -0
  103. package/src/types.js +2 -0
  104. package/src/types.js.map +1 -0
  105. package/src/utils/FrameLoop.d.ts +8 -0
  106. package/src/utils/FrameLoop.d.ts.map +1 -0
  107. package/src/utils/FrameLoop.js +45 -0
  108. package/src/utils/FrameLoop.js.map +1 -0
  109. package/src/utils/array-utils.d.ts +11 -0
  110. package/src/utils/array-utils.d.ts.map +1 -0
  111. package/src/utils/array-utils.js +27 -0
  112. package/src/utils/array-utils.js.map +1 -0
  113. package/src/utils/attr-utils.d.ts +3 -0
  114. package/src/utils/attr-utils.d.ts.map +1 -0
  115. package/src/utils/attr-utils.js +12 -0
  116. package/src/utils/attr-utils.js.map +1 -0
  117. package/src/utils/constants.d.ts +2 -0
  118. package/src/utils/constants.d.ts.map +1 -0
  119. package/src/utils/constants.js +2 -0
  120. package/src/utils/constants.js.map +1 -0
  121. package/src/utils/generateUUID.d.ts +2 -0
  122. package/src/utils/generateUUID.d.ts.map +1 -0
  123. package/src/utils/generateUUID.js +34 -0
  124. package/src/utils/generateUUID.js.map +1 -0
  125. package/src/utils/props-utils.d.ts +8 -0
  126. package/src/utils/props-utils.d.ts.map +1 -0
  127. package/src/utils/props-utils.js +47 -0
  128. package/src/utils/props-utils.js.map +1 -0
  129. package/src/utils/toNamespace.d.ts +3 -0
  130. package/src/utils/toNamespace.d.ts.map +1 -0
  131. package/src/utils/toNamespace.js +3 -0
  132. package/src/utils/toNamespace.js.map +1 -0
  133. package/src/utils/toUrlString.d.ts +2 -0
  134. package/src/utils/toUrlString.d.ts.map +1 -0
  135. package/src/utils/toUrlString.js +7 -0
  136. package/src/utils/toUrlString.js.map +1 -0
  137. package/src/utils/waitForMessageOfType.d.ts +5 -0
  138. package/src/utils/waitForMessageOfType.d.ts.map +1 -0
  139. package/src/utils/waitForMessageOfType.js +34 -0
  140. package/src/utils/waitForMessageOfType.js.map +1 -0
  141. package/src/view/ComponentChanges.d.ts +30 -0
  142. package/src/view/ComponentChanges.d.ts.map +1 -0
  143. package/src/view/ComponentChanges.js +249 -0
  144. package/src/view/ComponentChanges.js.map +1 -0
  145. package/src/view/ComponentContext.d.ts +76 -0
  146. package/src/view/ComponentContext.d.ts.map +1 -0
  147. package/src/view/ComponentContext.js +344 -0
  148. package/src/view/ComponentContext.js.map +1 -0
  149. package/src/view/ComponentMemory.d.ts +8 -0
  150. package/src/view/ComponentMemory.d.ts.map +1 -0
  151. package/src/view/ComponentMemory.js +79 -0
  152. package/src/view/ComponentMemory.js.map +1 -0
  153. package/src/view/IShadowObjectEnvProxy.d.ts +10 -0
  154. package/src/view/IShadowObjectEnvProxy.d.ts.map +1 -0
  155. package/src/view/IShadowObjectEnvProxy.js +2 -0
  156. package/src/view/IShadowObjectEnvProxy.js.map +1 -0
  157. package/src/view/LocalShadowObjectEnv.d.ts +18 -0
  158. package/src/view/LocalShadowObjectEnv.d.ts.map +1 -0
  159. package/src/view/LocalShadowObjectEnv.js +55 -0
  160. package/src/view/LocalShadowObjectEnv.js.map +1 -0
  161. package/src/view/RemoteWorkerEnv.d.ts +15 -0
  162. package/src/view/RemoteWorkerEnv.d.ts.map +1 -0
  163. package/src/view/RemoteWorkerEnv.js +112 -0
  164. package/src/view/RemoteWorkerEnv.js.map +1 -0
  165. package/src/view/ShadowEnv.d.ts +30 -0
  166. package/src/view/ShadowEnv.d.ts.map +1 -0
  167. package/src/view/ShadowEnv.js +202 -0
  168. package/src/view/ShadowEnv.js.map +1 -0
  169. package/src/view/ViewComponent.d.ts +33 -0
  170. package/src/view/ViewComponent.d.ts.map +1 -0
  171. package/src/view/ViewComponent.js +130 -0
  172. package/src/view/ViewComponent.js.map +1 -0
  173. package/src/view/cloneChangeTrail.d.ts +3 -0
  174. package/src/view/cloneChangeTrail.d.ts.map +1 -0
  175. package/src/view/cloneChangeTrail.js +12 -0
  176. package/src/view/cloneChangeTrail.js.map +1 -0
  177. package/src/worker/MessageRouter.d.ts +14 -0
  178. package/src/worker/MessageRouter.d.ts.map +1 -0
  179. package/src/worker/MessageRouter.js +72 -0
  180. package/src/worker/MessageRouter.js.map +1 -0
  181. package/src/worker/WorkerRuntime.d.ts +7 -0
  182. package/src/worker/WorkerRuntime.d.ts.map +1 -0
  183. package/src/worker/WorkerRuntime.js +15 -0
  184. package/src/worker/WorkerRuntime.js.map +1 -0
@@ -0,0 +1,361 @@
1
+ import { emit, eventize, off, on, once } from '@spearwolf/eventize';
2
+ import { batch, connect, createEffect, createSignal, destroySignal, SignalObject, } from '@spearwolf/signalize';
3
+ import { ComponentChangeType, MessageToView } from '../constants.js';
4
+ import { Entity } from './Entity.js';
5
+ import { Registry } from './Registry.js';
6
+ import { onCreate, onDestroy } from './events.js';
7
+ var ShadowObjectAction;
8
+ (function (ShadowObjectAction) {
9
+ ShadowObjectAction[ShadowObjectAction["CreateAndDestroy"] = 0] = "CreateAndDestroy";
10
+ ShadowObjectAction[ShadowObjectAction["JustCreate"] = 1] = "JustCreate";
11
+ ShadowObjectAction[ShadowObjectAction["DestroyOnly"] = 2] = "DestroyOnly";
12
+ })(ShadowObjectAction || (ShadowObjectAction = {}));
13
+ const getDisplayName = (constructor) => constructor.displayName || constructor.name;
14
+ /**
15
+ * The entity kernel manages the lifecycle of all entities and shadow-objects.
16
+ *
17
+ * An entity is created for each view-component. The entities act as containers for the shadow-objects.
18
+ *
19
+ * Which shadow-objects are created is determined by the token.
20
+ */
21
+ export class Kernel {
22
+ #entities = new Map();
23
+ #rootEntities = new Set();
24
+ #allEntities;
25
+ #allEntitiesReversed;
26
+ #allEntitiesNeedUpdate = true;
27
+ constructor(registry) {
28
+ eventize(this);
29
+ this.registry = Registry.get(registry);
30
+ }
31
+ getEntity(uuid) {
32
+ const entity = this.#entities.get(uuid)?.entity;
33
+ if (!entity) {
34
+ throw new Error(`entity with uuid "${uuid}" not found!`);
35
+ }
36
+ return entity;
37
+ }
38
+ hasEntity(uuid) {
39
+ return this.#entities.has(uuid);
40
+ }
41
+ /**
42
+ * @returns all entities in breadth-first order
43
+ */
44
+ traverseLevelOrderBFS(reverse = false) {
45
+ if (this.#allEntitiesNeedUpdate) {
46
+ const lvl = new Map();
47
+ const traverse = (uuid, depth) => {
48
+ const e = this.getEntity(uuid);
49
+ if (lvl.has(depth)) {
50
+ lvl.get(depth).push(e);
51
+ }
52
+ else {
53
+ lvl.set(depth, [e]);
54
+ }
55
+ for (const child of e.children) {
56
+ traverse(child.uuid, depth + 1);
57
+ }
58
+ };
59
+ this.#rootEntities.forEach((uuid) => traverse(uuid, 0));
60
+ this.#allEntities = Array.from(lvl.entries())
61
+ .sort((a, b) => a[0] - b[0])
62
+ .map(([, entities]) => entities)
63
+ .flat();
64
+ this.#allEntitiesReversed = this.#allEntities.slice().reverse();
65
+ this.#allEntitiesNeedUpdate = false;
66
+ }
67
+ return reverse ? this.#allEntitiesReversed : this.#allEntities;
68
+ }
69
+ getEntityGraph() {
70
+ return Array.from(this.#rootEntities).map((uuid) => this.getEntityGraphNode(uuid));
71
+ }
72
+ getEntityGraphNode(uuid) {
73
+ if (!this.#entities.has(uuid))
74
+ return undefined;
75
+ const { token, entity } = this.#entities.get(uuid);
76
+ return {
77
+ token,
78
+ entity,
79
+ props: Object.fromEntries(entity.propEntries()),
80
+ children: entity.children.map((child) => this.getEntityGraphNode(child.uuid)),
81
+ };
82
+ }
83
+ upgradeEntities() {
84
+ for (const entity of this.traverseLevelOrderBFS(true)) {
85
+ this.updateShadowObjects(entity.uuid, ShadowObjectAction.DestroyOnly);
86
+ }
87
+ for (const entity of this.traverseLevelOrderBFS(false)) {
88
+ this.updateShadowObjects(entity.uuid, ShadowObjectAction.JustCreate);
89
+ }
90
+ }
91
+ run(event) {
92
+ batch(() => {
93
+ for (const entry of event.changeTrail) {
94
+ this.parse(entry);
95
+ }
96
+ });
97
+ }
98
+ parse(entry) {
99
+ switch (entry.type) {
100
+ case ComponentChangeType.CreateEntities:
101
+ this.createEntity(entry.uuid, entry.token, entry.parentUuid, entry.order, entry.properties);
102
+ this.#allEntitiesNeedUpdate = true;
103
+ break;
104
+ case ComponentChangeType.DestroyEntities:
105
+ this.destroyEntity(entry.uuid);
106
+ this.#allEntitiesNeedUpdate = true;
107
+ break;
108
+ case ComponentChangeType.SetParent:
109
+ this.setParent(entry.uuid, entry.parentUuid, entry.order);
110
+ this.#allEntitiesNeedUpdate = true;
111
+ break;
112
+ case ComponentChangeType.UpdateOrder:
113
+ this.updateOrder(entry.uuid, entry.order);
114
+ this.#allEntitiesNeedUpdate = true;
115
+ break;
116
+ case ComponentChangeType.ChangeProperties:
117
+ this.changeProperties(entry.uuid, entry.properties);
118
+ break;
119
+ case ComponentChangeType.ChangeToken:
120
+ this.changeToken(entry.uuid, entry.token);
121
+ break;
122
+ case ComponentChangeType.SendEvents:
123
+ this.dispatchEventsToEntity(entry.uuid, entry.events);
124
+ break;
125
+ }
126
+ }
127
+ createEntity(uuid, token, parentUuid, order = 0, properties) {
128
+ const e = new Entity(this, uuid);
129
+ e.order = order;
130
+ const entry = { token, entity: e, usedConstructors: new Map() };
131
+ this.#entities.set(uuid, entry);
132
+ if (parentUuid) {
133
+ e.parentUuid = parentUuid;
134
+ }
135
+ if (!e.hasParent) {
136
+ this.#rootEntities.add(uuid);
137
+ }
138
+ if (properties) {
139
+ e.setProperties(properties);
140
+ }
141
+ this.createShadowObjects(uuid);
142
+ }
143
+ destroyEntity(uuid) {
144
+ if (!this.#entities.has(uuid))
145
+ return;
146
+ const { entity, usedConstructors } = this.#entities.get(uuid);
147
+ entity.removeFromParent();
148
+ emit(entity, onDestroy, this);
149
+ usedConstructors.clear();
150
+ this.#entities.delete(entity.uuid);
151
+ this.#rootEntities.delete(entity.uuid);
152
+ }
153
+ setParent(uuid, parentUuid, order = 0) {
154
+ const e = this.getEntity(uuid);
155
+ if (e.parentUuid === parentUuid && e.order === order)
156
+ return;
157
+ e.removeFromParent();
158
+ e.order = order;
159
+ e.parentUuid = parentUuid;
160
+ if (e.hasParent) {
161
+ this.#rootEntities.delete(uuid);
162
+ }
163
+ else {
164
+ this.#rootEntities.add(uuid);
165
+ }
166
+ }
167
+ updateOrder(uuid, order) {
168
+ this.getEntity(uuid).order = order;
169
+ }
170
+ dispatchEventsToEntity(uuid, events) {
171
+ this.getEntity(uuid)?.dispatchViewEvents(events);
172
+ }
173
+ changeProperties(uuid, properties) {
174
+ this.getEntity(uuid).setProperties(properties);
175
+ }
176
+ changeToken(uuid, token) {
177
+ if (!this.#entities.has(uuid))
178
+ return;
179
+ const entry = this.#entities.get(uuid);
180
+ if (entry.token === token)
181
+ return;
182
+ entry.token = token;
183
+ this.updateShadowObjects(uuid);
184
+ }
185
+ dispatchMessageToView(message) {
186
+ queueMicrotask(() => {
187
+ emit(this, MessageToView, message);
188
+ });
189
+ }
190
+ /**
191
+ * Create or destroy the shadow-objects of an entity using the registered constructors.
192
+ * After a token change or registry changes, an entity may be given different shadow-objects.
193
+ */
194
+ updateShadowObjects(uuid, action = ShadowObjectAction.CreateAndDestroy) {
195
+ const entry = this.#entities.get(uuid);
196
+ const nextConstructors = new Set(this.registry.findConstructors(entry.token));
197
+ const shouldDestroy = action === ShadowObjectAction.CreateAndDestroy || action === ShadowObjectAction.DestroyOnly;
198
+ const shouldCreate = action === ShadowObjectAction.CreateAndDestroy || action === ShadowObjectAction.JustCreate;
199
+ // destroy all shadow-objects created by constructors no longer in the list
200
+ //
201
+ if (shouldDestroy) {
202
+ for (const [constructor, shadowObjects] of entry.usedConstructors) {
203
+ if (!nextConstructors.has(constructor)) {
204
+ entry.usedConstructors.delete(constructor);
205
+ for (const obj of shadowObjects) {
206
+ this.destroyShadowObject(obj, entry.entity);
207
+ }
208
+ }
209
+ }
210
+ }
211
+ // shadow-objects for new constructors are now created using the updated constructor list
212
+ //
213
+ if (shouldCreate) {
214
+ for (const constructor of nextConstructors) {
215
+ if (!entry.usedConstructors.has(constructor)) {
216
+ this.constructShadowObject(constructor, entry);
217
+ }
218
+ }
219
+ }
220
+ }
221
+ constructShadowObject(constructor, entry) {
222
+ const unsubscribe0 = new Set();
223
+ const unsubscribe1 = new Set();
224
+ const contextReaders = new Map();
225
+ const contextProviders = new Map();
226
+ const propertyReaders = new Map();
227
+ const shadowObject = eventize(new constructor({
228
+ entity: entry.entity,
229
+ provideContext(name, initialValue, isEqual) {
230
+ let ctxProvider = contextProviders.get(name);
231
+ if (ctxProvider === undefined) {
232
+ ctxProvider = createSignal(initialValue, isEqual ? { compareFn: isEqual } : undefined);
233
+ contextProviders.set(name, ctxProvider);
234
+ const con = connect(ctxProvider, entry.entity.provideContext(name));
235
+ unsubscribe1.add(con.destroy.bind(con));
236
+ }
237
+ return ctxProvider;
238
+ },
239
+ useContext(name, isEqual) {
240
+ let ctxReader = contextReaders.get(name);
241
+ if (ctxReader === undefined) {
242
+ [ctxReader] = createSignal(undefined, isEqual ? { compareFn: isEqual } : undefined);
243
+ contextReaders.set(name, ctxReader);
244
+ const con = connect(entry.entity.useContext(name), ctxReader);
245
+ unsubscribe1.add(con.destroy.bind(con));
246
+ }
247
+ return ctxReader;
248
+ },
249
+ useProperty(name, isEqual) {
250
+ let propReader = propertyReaders.get(name);
251
+ if (propReader === undefined) {
252
+ [propReader] = createSignal(undefined, isEqual ? { compareFn: isEqual } : undefined);
253
+ propertyReaders.set(name, propReader);
254
+ const con = connect(entry.entity.getPropertyReader(name), propReader);
255
+ unsubscribe1.add(con.destroy.bind(con));
256
+ }
257
+ return propReader;
258
+ },
259
+ createEffect(...args) {
260
+ const effect = createEffect(...args);
261
+ unsubscribe1.add(effect[1]);
262
+ return effect;
263
+ },
264
+ createSignal(...args) {
265
+ const sig = createSignal(...args);
266
+ unsubscribe1.add(() => {
267
+ destroySignal(sig);
268
+ });
269
+ return sig;
270
+ },
271
+ on(...args) {
272
+ // @ts-ignore
273
+ const unsubscribe = on(...args);
274
+ unsubscribe1.add(unsubscribe);
275
+ return unsubscribe;
276
+ },
277
+ onDestroy(callback) {
278
+ unsubscribe0.add(callback);
279
+ },
280
+ }));
281
+ console.debug('[Kernel] create shadow-object', getDisplayName(constructor), { shadowObject, entity: entry.entity });
282
+ once(shadowObject, onDestroy, () => {
283
+ console.debug('[Kernel] destroy shadow-object', getDisplayName(constructor), { shadowObject, entity: entry.entity });
284
+ for (const callback of unsubscribe0) {
285
+ callback();
286
+ }
287
+ for (const callback of unsubscribe1) {
288
+ callback();
289
+ }
290
+ for (const sig of contextReaders.values()) {
291
+ destroySignal(sig);
292
+ }
293
+ for (const sig of propertyReaders.values()) {
294
+ destroySignal(sig);
295
+ }
296
+ for (const [sig] of contextProviders.values()) {
297
+ destroySignal(sig);
298
+ }
299
+ unsubscribe0.clear();
300
+ unsubscribe1.clear();
301
+ contextReaders.clear();
302
+ propertyReaders.clear();
303
+ contextProviders.clear();
304
+ const otherShadowObjects = entry.usedConstructors.get(constructor);
305
+ if (otherShadowObjects) {
306
+ otherShadowObjects.delete(shadowObject);
307
+ if (otherShadowObjects.size === 0) {
308
+ entry.usedConstructors.delete(constructor);
309
+ }
310
+ }
311
+ });
312
+ // We want to keep track which shadow-objects are created by which constructors.
313
+ // This will all
314
+ //
315
+ if (entry.usedConstructors.has(constructor)) {
316
+ entry.usedConstructors.get(constructor).add(shadowObject);
317
+ }
318
+ else {
319
+ entry.usedConstructors.set(constructor, new Set([shadowObject]));
320
+ }
321
+ this.attachShadowObject(shadowObject, entry.entity);
322
+ return shadowObject;
323
+ }
324
+ createShadowObjects(uuid) {
325
+ const entry = this.#entities.get(uuid);
326
+ this.registry.findConstructors(entry.token)?.forEach((constructor) => {
327
+ this.constructShadowObject(constructor, entry);
328
+ });
329
+ }
330
+ findShadowObjects(uuid) {
331
+ if (!this.#entities.has(uuid))
332
+ return [];
333
+ const { usedConstructors } = this.#entities.get(uuid);
334
+ return Array.from(new Set(Array.from(usedConstructors.values())
335
+ .map((objs) => Array.from(objs))
336
+ .flat()));
337
+ }
338
+ attachShadowObject(shadowObject, entity) {
339
+ // Like all other objects, the new shadow-object should be able to respond to the events that the entity receives.
340
+ //
341
+ on(entity, shadowObject);
342
+ // Finally, the `shadowObject.onCreate(entity)` callback is called on the shadow-object.
343
+ //
344
+ if (typeof shadowObject[onCreate] === 'function') {
345
+ shadowObject[onCreate](entity);
346
+ }
347
+ }
348
+ destroyShadowObject(shadowObject, entity) {
349
+ if (typeof shadowObject[onDestroy] === 'function') {
350
+ shadowObject[onDestroy](entity);
351
+ }
352
+ emit(shadowObject, onDestroy, entity);
353
+ off(entity, shadowObject);
354
+ }
355
+ destroy() {
356
+ for (const entity of this.traverseLevelOrderBFS().reverse()) {
357
+ this.destroyEntity(entity.uuid);
358
+ }
359
+ }
360
+ }
361
+ //# sourceMappingURL=Kernel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Kernel.js","sourceRoot":"","sources":["../../../src/entities/Kernel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { ShadowObjectConstructor } from '../types.js';
2
+ /** The shadow-object class registry */
3
+ export declare class Registry {
4
+ #private;
5
+ /** return the specified registry or, if not defined, the default registry */
6
+ static get(registry?: Registry): Registry;
7
+ define(token: string, constructor: ShadowObjectConstructor): void;
8
+ appendRoute(token: string, routes: string[]): void;
9
+ clearRoute(route: string): void;
10
+ findTokensByRoute(route: string): string[];
11
+ findConstructors(route: string): ShadowObjectConstructor[] | undefined;
12
+ hasToken(token: string): boolean;
13
+ hasRoute(route: string): boolean;
14
+ clear(): void;
15
+ }
16
+ //# sourceMappingURL=Registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Registry.d.ts","sourceRoot":"","sources":["../../../src/entities/Registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,aAAa,CAAC;AAQzD,uCAAuC;AACvC,qBAAa,QAAQ;;IACnB,6EAA6E;IAC7E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAO9B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,uBAAuB;IAQ1D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;IAW3C,UAAU,CAAC,KAAK,EAAE,MAAM;IAIxB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAsB1C,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,uBAAuB,EAAE,GAAG,SAAS;IAgBtE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIhC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIhC,KAAK;CAIN"}
@@ -0,0 +1,72 @@
1
+ import { appendTo } from '../utils/array-utils.js';
2
+ /** The shadow-object class registry */
3
+ export class Registry {
4
+ /** return the specified registry or, if not defined, the default registry */
5
+ static get(registry) {
6
+ return registry ?? defaultRegistry;
7
+ }
8
+ #registry = new Map();
9
+ #routes = new Map();
10
+ define(token, constructor) {
11
+ if (this.#registry.has(token)) {
12
+ appendTo(this.#registry.get(token).constructors, constructor);
13
+ }
14
+ else {
15
+ this.#registry.set(token, { token, constructors: [constructor] });
16
+ }
17
+ }
18
+ appendRoute(token, routes) {
19
+ if (this.#routes.has(token)) {
20
+ const existingRoutes = this.#routes.get(token);
21
+ for (const route of routes) {
22
+ existingRoutes.add(route);
23
+ }
24
+ }
25
+ else {
26
+ this.#routes.set(token, new Set(routes));
27
+ }
28
+ }
29
+ clearRoute(route) {
30
+ this.#routes.delete(route);
31
+ }
32
+ findTokensByRoute(route) {
33
+ const tokens = new Set([route]);
34
+ const next = this.#routes.has(route) ? [...this.#routes.get(route)] : [];
35
+ while (next.length) {
36
+ const cur = next.shift();
37
+ if (tokens.has(cur)) {
38
+ continue;
39
+ }
40
+ tokens.add(cur);
41
+ if (this.#routes.has(cur)) {
42
+ next.push(...Array.from(this.#routes.get(cur)).filter((route) => !tokens.has(route)));
43
+ }
44
+ }
45
+ return Array.from(tokens);
46
+ }
47
+ findConstructors(route) {
48
+ const tokens = this.findTokensByRoute(route);
49
+ const constructors = new Set();
50
+ for (const token of tokens) {
51
+ const entry = this.#registry.get(token);
52
+ if (entry) {
53
+ for (const constructor of entry.constructors) {
54
+ constructors.add(constructor);
55
+ }
56
+ }
57
+ }
58
+ return constructors.size > 0 ? Array.from(constructors) : undefined;
59
+ }
60
+ hasToken(token) {
61
+ return this.#registry.has(token);
62
+ }
63
+ hasRoute(route) {
64
+ return this.#routes.has(route);
65
+ }
66
+ clear() {
67
+ this.#registry.clear();
68
+ this.#routes.clear();
69
+ }
70
+ }
71
+ const defaultRegistry = new Registry();
72
+ //# sourceMappingURL=Registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Registry.js","sourceRoot":"","sources":["../../../src/entities/Registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ShadowObjectConstructor } from '../types.js';
2
+ import { Registry } from './Registry.js';
3
+ export interface ShadowObjectDecoratorOptions {
4
+ token: string;
5
+ registry?: Registry;
6
+ }
7
+ /** The `@ShadowObject` decorator */
8
+ export declare function ShadowObject(options: ShadowObjectDecoratorOptions): <C extends ShadowObjectConstructor>(target: C, _context?: any) => {
9
+ new (...args: any[]): {};
10
+ displayName?: string;
11
+ } & C;
12
+ /**
13
+ * If you don't want to use the decorator, you can simply call this method instead.
14
+ */
15
+ export declare const shadowObjects: {
16
+ define(token: string, constructor: ShadowObjectConstructor, registry?: Registry): void;
17
+ };
18
+ //# sourceMappingURL=ShadowObject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShadowObject.d.ts","sourceRoot":"","sources":["../../../src/entities/ShadowObject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,aAAa,CAAC;AACzD,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AAEvC,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,oCAAoC;AACpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,4BAA4B,IAC/C,CAAC,SAAS,uBAAuB,UAAU,CAAC,aAAa,GAAG;kBAEpD,GAAG,EAAE;;MAU/B;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;kBACV,MAAM,eAAe,uBAAuB,aAAa,QAAQ;CAGhF,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { eventize } from '@spearwolf/eventize';
2
+ import { Registry } from './Registry.js';
3
+ /** The `@ShadowObject` decorator */
4
+ export function ShadowObject(options) {
5
+ return function (target, _context) {
6
+ const __ShadowObject = class extends target {
7
+ constructor(...args) {
8
+ super(...args);
9
+ eventize(this);
10
+ }
11
+ };
12
+ Registry.get(options.registry).define(options.token, __ShadowObject);
13
+ return __ShadowObject;
14
+ };
15
+ }
16
+ /**
17
+ * If you don't want to use the decorator, you can simply call this method instead.
18
+ */
19
+ export const shadowObjects = {
20
+ define(token, constructor, registry) {
21
+ Registry.get(registry).define(token, constructor);
22
+ },
23
+ };
24
+ //# sourceMappingURL=ShadowObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShadowObject.js","sourceRoot":"","sources":["../../../src/entities/ShadowObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AAOvC,oCAAoC;AACpC,MAAM,UAAU,YAAY,CAAC,OAAqC;IAChE,OAAO,UAA6C,MAAS,EAAE,QAAc;QAC3E,MAAM,cAAc,GAAG,KAAM,SAAQ,MAAM;YACzC,YAAY,GAAG,IAAW;gBACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;gBACf,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;SACF,CAAC;QAEF,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAErE,OAAO,cAAc,CAAC;IACxB,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,CAAC,KAAa,EAAE,WAAoC,EAAE,QAAmB;QAC7E,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC;CACF,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { SignalObject, type SignalReader, type SignalWriter } from '@spearwolf/signalize';
2
+ export declare class SignalsMap {
3
+ #private;
4
+ keys(): IterableIterator<string>;
5
+ entries(): IterableIterator<[string, SignalObject<any>]>;
6
+ clear(): void;
7
+ hasSignal(key: string): boolean;
8
+ getSignal<T = unknown>(key: string): SignalObject<T>;
9
+ getSignalReader<T = unknown>(key: string): SignalReader<T>;
10
+ getSignalWriter<T = unknown>(key: string): SignalWriter<T>;
11
+ }
12
+ //# sourceMappingURL=SignalsMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignalsMap.d.ts","sourceRoot":"","sources":["../../../src/entities/SignalsMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAgB,KAAK,YAAY,EAAE,KAAK,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAEtG,qBAAa,UAAU;;IAGrB,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAIhC,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IAIxD,KAAK;IAOL,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;IASpD,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;IAI1D,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;CAG3D"}
@@ -0,0 +1,34 @@
1
+ import { SignalObject, createSignal } from '@spearwolf/signalize';
2
+ export class SignalsMap {
3
+ #signals = new Map();
4
+ keys() {
5
+ return this.#signals.keys();
6
+ }
7
+ entries() {
8
+ return this.#signals.entries();
9
+ }
10
+ clear() {
11
+ for (const sig of this.#signals.values()) {
12
+ sig.destroy();
13
+ }
14
+ this.#signals.clear();
15
+ }
16
+ hasSignal(key) {
17
+ return this.#signals.has(key);
18
+ }
19
+ getSignal(key) {
20
+ if (!this.#signals.has(key)) {
21
+ const signal = createSignal();
22
+ this.#signals.set(key, signal);
23
+ return signal;
24
+ }
25
+ return this.#signals.get(key);
26
+ }
27
+ getSignalReader(key) {
28
+ return this.getSignal(key).get;
29
+ }
30
+ getSignalWriter(key) {
31
+ return this.getSignal(key).set;
32
+ }
33
+ }
34
+ //# sourceMappingURL=SignalsMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignalsMap.js","sourceRoot":"","sources":["../../../src/entities/SignalsMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,YAAY,EAAuC,MAAM,sBAAsB,CAAC;AAEtG,MAAM,OAAO,UAAU;IACrB,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IAEhD,IAAI;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,KAAK;QACH,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,SAAS,CAAc,GAAW;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,YAAY,EAAK,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC/B,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IACjC,CAAC;IAED,eAAe,CAAc,GAAW;QACtC,OAAO,IAAI,CAAC,SAAS,CAAI,GAAG,CAAC,CAAC,GAAG,CAAC;IACpC,CAAC;IAED,eAAe,CAAc,GAAW;QACtC,OAAO,IAAI,CAAC,SAAS,CAAI,GAAG,CAAC,CAAC,GAAG,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import { type SignalReader } from '@spearwolf/signalize';
2
+ export declare class SignalsPath {
3
+ #private;
4
+ static Value: string;
5
+ accessor value: unknown;
6
+ accessor value$: SignalReader<unknown>;
7
+ constructor();
8
+ add(...signals: SignalReader<unknown>[]): void;
9
+ clear(): void;
10
+ dispose(): void;
11
+ }
12
+ //# sourceMappingURL=SignalsPath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignalsPath.d.ts","sourceRoot":"","sources":["../../../src/entities/SignalsPath.ts"],"names":[],"mappings":"AACA,OAAO,EAAgD,KAAK,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAGtG,qBAAa,WAAW;;IACtB,MAAM,CAAC,KAAK,SAAW;IAKb,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;;IAOvD,GAAG,CAAC,GAAG,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE;IAOvC,KAAK;IAKL,OAAO;CA2BR"}