@spearwolf/shadow-objects 0.30.1 → 0.31.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 (124) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +34 -10
  3. package/bundle.js +13 -13
  4. package/package.json +3 -3
  5. package/src/bundle.js +4 -4
  6. package/src/bundle.js.map +7 -1
  7. package/src/constants.js +53 -40
  8. package/src/constants.js.map +7 -1
  9. package/src/create-worker.bundle.js +6 -8
  10. package/src/create-worker.bundle.js.map +7 -1
  11. package/src/create-worker.js +5 -2
  12. package/src/create-worker.js.map +7 -1
  13. package/src/elements/ShaeElement.js +57 -54
  14. package/src/elements/ShaeElement.js.map +7 -1
  15. package/src/elements/ShaeEntElement.d.ts.map +1 -1
  16. package/src/elements/ShaeEntElement.js +320 -341
  17. package/src/elements/ShaeEntElement.js.map +7 -1
  18. package/src/elements/ShaePropElement.js +312 -320
  19. package/src/elements/ShaePropElement.js.map +7 -1
  20. package/src/elements/ShaeWorkerElement.js +234 -229
  21. package/src/elements/ShaeWorkerElement.js.map +7 -1
  22. package/src/elements/constants.js +37 -22
  23. package/src/elements/constants.js.map +7 -1
  24. package/src/elements/events.d.ts +1 -1
  25. package/src/elements/events.d.ts.map +1 -1
  26. package/src/elements/events.js +1 -2
  27. package/src/elements/events.js.map +7 -1
  28. package/src/elements.js +4 -4
  29. package/src/elements.js.map +7 -1
  30. package/src/in-the-dark/Entity.d.ts +3 -1
  31. package/src/in-the-dark/Entity.d.ts.map +1 -1
  32. package/src/in-the-dark/Entity.js +299 -275
  33. package/src/in-the-dark/Entity.js.map +7 -1
  34. package/src/in-the-dark/Kernel.d.ts +1 -1
  35. package/src/in-the-dark/Kernel.d.ts.map +1 -1
  36. package/src/in-the-dark/Kernel.js +556 -532
  37. package/src/in-the-dark/Kernel.js.map +7 -1
  38. package/src/in-the-dark/Registry.d.ts.map +1 -1
  39. package/src/in-the-dark/Registry.js +101 -104
  40. package/src/in-the-dark/Registry.js.map +7 -1
  41. package/src/in-the-dark/ShadowObject.d.ts.map +1 -1
  42. package/src/in-the-dark/ShadowObject.js +21 -23
  43. package/src/in-the-dark/ShadowObject.js.map +7 -1
  44. package/src/in-the-dark/SignalsPath.d.ts.map +1 -1
  45. package/src/in-the-dark/SignalsPath.js +139 -123
  46. package/src/in-the-dark/SignalsPath.js.map +7 -1
  47. package/src/in-the-dark/events.js +11 -9
  48. package/src/in-the-dark/events.js.map +7 -1
  49. package/src/in-the-dark/importModule.js +31 -29
  50. package/src/in-the-dark/importModule.js.map +7 -1
  51. package/src/index.d.ts +2 -2
  52. package/src/index.d.ts.map +1 -1
  53. package/src/index.js +14 -14
  54. package/src/index.js.map +7 -1
  55. package/src/shadow-objects.js +6 -6
  56. package/src/shadow-objects.js.map +7 -1
  57. package/src/shadow-objects.worker.js +3 -3
  58. package/src/shadow-objects.worker.js.map +7 -1
  59. package/src/shae-ent.js +3 -3
  60. package/src/shae-ent.js.map +7 -1
  61. package/src/shae-prop.js +3 -3
  62. package/src/shae-prop.js.map +7 -1
  63. package/src/shae-worker.js +3 -3
  64. package/src/shae-worker.js.map +7 -1
  65. package/src/types.d.ts +5 -4
  66. package/src/types.d.ts.map +1 -1
  67. package/src/types.js +1 -2
  68. package/src/types.js.map +7 -1
  69. package/src/utils/ConsoleLogger.js +179 -185
  70. package/src/utils/ConsoleLogger.js.map +7 -1
  71. package/src/utils/FrameLoop.js +41 -40
  72. package/src/utils/FrameLoop.js.map +7 -1
  73. package/src/utils/array-utils.js +22 -24
  74. package/src/utils/array-utils.js.map +7 -1
  75. package/src/utils/attr-utils.js +15 -11
  76. package/src/utils/attr-utils.js.map +7 -1
  77. package/src/utils/constants.js +5 -2
  78. package/src/utils/constants.js.map +7 -1
  79. package/src/utils/generateUUID.d.ts.map +1 -1
  80. package/src/utils/generateUUID.js +269 -32
  81. package/src/utils/generateUUID.js.map +7 -1
  82. package/src/utils/props-utils.js +34 -43
  83. package/src/utils/props-utils.js.map +7 -1
  84. package/src/utils/toMaybe.js +5 -2
  85. package/src/utils/toMaybe.js.map +7 -1
  86. package/src/utils/toNamespace.js +6 -3
  87. package/src/utils/toNamespace.js.map +7 -1
  88. package/src/utils/toUrlString.js +9 -6
  89. package/src/utils/toUrlString.js.map +7 -1
  90. package/src/utils/waitForMessageOfType.js +30 -32
  91. package/src/utils/waitForMessageOfType.js.map +7 -1
  92. package/src/view/ComponentChanges.d.ts +1 -1
  93. package/src/view/ComponentChanges.d.ts.map +1 -1
  94. package/src/view/ComponentChanges.js +249 -251
  95. package/src/view/ComponentChanges.js.map +7 -1
  96. package/src/view/ComponentContext.d.ts.map +1 -1
  97. package/src/view/ComponentContext.js +303 -331
  98. package/src/view/ComponentContext.js.map +7 -1
  99. package/src/view/ComponentMemory.d.ts +1 -0
  100. package/src/view/ComponentMemory.d.ts.map +1 -1
  101. package/src/view/ComponentMemory.js +73 -76
  102. package/src/view/ComponentMemory.js.map +7 -1
  103. package/src/view/IShadowObjectEnvProxy.js +1 -2
  104. package/src/view/IShadowObjectEnvProxy.js.map +7 -1
  105. package/src/view/LocalShadowObjectEnv.d.ts.map +1 -1
  106. package/src/view/LocalShadowObjectEnv.js +57 -52
  107. package/src/view/LocalShadowObjectEnv.js.map +7 -1
  108. package/src/view/RemoteWorkerEnv.js +134 -123
  109. package/src/view/RemoteWorkerEnv.js.map +7 -1
  110. package/src/view/ShadowEnv.d.ts.map +1 -1
  111. package/src/view/ShadowEnv.js +232 -228
  112. package/src/view/ShadowEnv.js.map +7 -1
  113. package/src/view/ViewComponent.d.ts +9 -0
  114. package/src/view/ViewComponent.d.ts.map +1 -1
  115. package/src/view/ViewComponent.js +142 -130
  116. package/src/view/ViewComponent.js.map +7 -1
  117. package/src/view/cloneChangeTrail.js +13 -11
  118. package/src/view/cloneChangeTrail.js.map +7 -1
  119. package/src/worker/MessageRouter.d.ts.map +1 -1
  120. package/src/worker/MessageRouter.js +78 -67
  121. package/src/worker/MessageRouter.js.map +7 -1
  122. package/src/worker/WorkerRuntime.js +22 -21
  123. package/src/worker/WorkerRuntime.js.map +7 -1
  124. package/tsconfig.lib.tsbuildinfo +0 -1
@@ -1,133 +1,145 @@
1
- import { emit, eventize } from '@spearwolf/eventize';
2
- import { VoidToken } from '../constants.js';
3
- import { generateUUID } from '../utils/generateUUID.js';
4
- import { ComponentContext } from './ComponentContext.js';
1
+ import { emit, eventize } from "@spearwolf/eventize";
2
+ import { VoidToken } from "../constants.js";
3
+ import { generateUUID } from "../utils/generateUUID.js";
4
+ import { ComponentContext } from "./ComponentContext.js";
5
5
  class ViewComponentError extends Error {
6
- constructor(message) {
7
- super(message);
8
- this.name = 'ViewComponentError';
9
- }
6
+ constructor(message) {
7
+ super(message);
8
+ this.name = "ViewComponentError";
9
+ }
10
10
  }
11
- export class ViewComponent {
12
- #uuid;
13
- #token;
14
- #context;
15
- #parent;
16
- #order = 0;
17
- get uuid() {
18
- return this.#uuid;
19
- }
20
- get token() {
21
- return this.#token;
22
- }
23
- set token(token) {
24
- token ??= VoidToken;
25
- if (token === this.#token)
26
- return;
27
- this.#token = token;
28
- this.#context?.changeToken(this, token);
29
- }
30
- get parent() {
31
- return this.#parent;
32
- }
33
- set parent(parent) {
34
- if (parent) {
35
- if (parent.#context !== this.#context) {
36
- throw new ViewComponentError('cannot set parent from different context');
37
- }
38
- parent.addChild(this);
39
- }
40
- else {
41
- this.removeFromParent();
42
- }
43
- }
44
- get context() {
45
- return this.#context;
46
- }
47
- set context(context) {
48
- if (this.#context != context) {
49
- if (this.#context) {
50
- this.destroy();
51
- }
52
- this.#context = context;
53
- if (context) {
54
- context.addComponent(this);
55
- }
56
- }
57
- }
58
- /**
59
- * The order property sets the order to lay out a component in a children array of the parent component.
60
- *
61
- * Items in a children array are sorted by ascending order value and then by their insertion order.
62
- */
63
- get order() {
64
- return this.#order;
65
- }
66
- set order(order) {
67
- const prevOrder = this.#order;
68
- this.#order = order ?? 0;
69
- if (prevOrder !== this.#order) {
70
- this.#context.changeOrder(this);
71
- }
72
- }
73
- constructor(token, options) {
74
- eventize(this);
75
- if (options instanceof ViewComponent) {
76
- options = { parent: options };
77
- }
78
- this.#uuid = options?.uuid ?? generateUUID();
79
- this.#token = token;
80
- this.#order = options?.order ?? 0;
81
- this.#parent = options?.parent;
82
- const ctx = options?.context ?? ComponentContext.get();
83
- if (this.#parent && this.#parent.#context !== ctx) {
84
- throw new ViewComponentError('cannot set parent from different context');
85
- }
86
- this.context = ctx;
87
- }
88
- isChildOf(parent) {
89
- return this.#parent === parent;
90
- }
91
- removeFromParent() {
92
- if (this.#parent) {
93
- this.#context?.removeFromParent(this.uuid, this.#parent);
94
- this.#parent = undefined;
95
- }
96
- else {
97
- this.#context?.moveToRoot(this.uuid);
98
- }
99
- }
100
- addChild(child) {
101
- if (child.#context !== this.#context) {
102
- throw new ViewComponentError('cannot add a child from another context');
103
- }
104
- if (!child.isChildOf(this)) {
105
- child.removeFromParent();
106
- child.#parent = this;
107
- this.#context.addToChildren(this, child);
108
- }
109
- }
110
- setProperty(name, value, isEqual) {
111
- this.#context.setProperty(this, name, value, isEqual);
112
- }
113
- removeProperty(name) {
114
- this.#context.removeProperty(this, name);
115
- }
116
- dispatchShadowObjectsEvent(type, data, transferables) {
117
- this.#context.dispatchShadowObjectsEvent(this, type, data, transferables);
118
- }
119
- dispatchEvent(type, data, traverseChildren) {
120
- emit(this, type, data);
121
- if (traverseChildren) {
122
- for (const child of this.#context.getChildren(this)) {
123
- child.dispatchEvent(type, data, traverseChildren);
124
- }
125
- }
126
- }
127
- destroy() {
128
- this.removeFromParent();
129
- this.#context?.destroyComponent(this);
130
- this.#context = undefined;
131
- }
11
+ class ViewComponent {
12
+ #uuid;
13
+ #token;
14
+ #context;
15
+ #parent;
16
+ #order = 0;
17
+ #autoDestructionOnParentRemoval;
18
+ get uuid() {
19
+ return this.#uuid;
20
+ }
21
+ get token() {
22
+ return this.#token;
23
+ }
24
+ set token(token) {
25
+ token ??= VoidToken;
26
+ if (token === this.#token) return;
27
+ this.#token = token;
28
+ this.#context?.changeToken(this, token);
29
+ }
30
+ get parent() {
31
+ return this.#parent;
32
+ }
33
+ set parent(parent) {
34
+ if (parent) {
35
+ if (parent.#context !== this.#context) {
36
+ throw new ViewComponentError("cannot set parent from different context");
37
+ }
38
+ parent.addChild(this);
39
+ } else {
40
+ this.removeFromParent();
41
+ }
42
+ }
43
+ get context() {
44
+ return this.#context;
45
+ }
46
+ set context(context) {
47
+ if (this.#context != context) {
48
+ if (this.#context) {
49
+ this.destroy();
50
+ }
51
+ this.#context = context;
52
+ if (context) {
53
+ context.addComponent(this);
54
+ }
55
+ }
56
+ }
57
+ /**
58
+ * The order property sets the order to lay out a component in a children array of the parent component.
59
+ *
60
+ * Items in a children array are sorted by ascending order value and then by their insertion order.
61
+ */
62
+ get order() {
63
+ return this.#order;
64
+ }
65
+ set order(order) {
66
+ const prevOrder = this.#order;
67
+ this.#order = order ?? 0;
68
+ if (prevOrder !== this.#order) {
69
+ this.#context.changeOrder(this);
70
+ }
71
+ }
72
+ /**
73
+ * Whether the corresponding entity should be destroyed when its parent entity is destroyed.
74
+ *
75
+ * Set via the constructor option of the same name; immutable after creation.
76
+ * Children that opt out (the default) are promoted to root entities when their
77
+ * parent is destroyed, so they remain reachable.
78
+ */
79
+ get autoDestructionOnParentRemoval() {
80
+ return this.#autoDestructionOnParentRemoval;
81
+ }
82
+ constructor(token, options) {
83
+ eventize(this);
84
+ if (options instanceof ViewComponent) {
85
+ options = { parent: options };
86
+ }
87
+ this.#uuid = options?.uuid ?? generateUUID();
88
+ this.#token = token;
89
+ this.#order = options?.order ?? 0;
90
+ this.#parent = options?.parent;
91
+ this.#autoDestructionOnParentRemoval = options?.autoDestructionOnParentRemoval ?? false;
92
+ const ctx = options?.context ?? ComponentContext.get();
93
+ if (this.#parent && this.#parent.#context !== ctx) {
94
+ throw new ViewComponentError("cannot set parent from different context");
95
+ }
96
+ this.context = ctx;
97
+ }
98
+ isChildOf(parent) {
99
+ return this.#parent === parent;
100
+ }
101
+ removeFromParent() {
102
+ if (this.#parent) {
103
+ this.#context?.removeFromParent(this.uuid, this.#parent);
104
+ this.#parent = void 0;
105
+ } else {
106
+ this.#context?.moveToRoot(this.uuid);
107
+ }
108
+ }
109
+ addChild(child) {
110
+ if (child.#context !== this.#context) {
111
+ throw new ViewComponentError("cannot add a child from another context");
112
+ }
113
+ if (!child.isChildOf(this)) {
114
+ child.removeFromParent();
115
+ child.#parent = this;
116
+ this.#context.addToChildren(this, child);
117
+ }
118
+ }
119
+ setProperty(name, value, isEqual) {
120
+ this.#context.setProperty(this, name, value, isEqual);
121
+ }
122
+ removeProperty(name) {
123
+ this.#context.removeProperty(this, name);
124
+ }
125
+ dispatchShadowObjectsEvent(type, data, transferables) {
126
+ this.#context.dispatchShadowObjectsEvent(this, type, data, transferables);
127
+ }
128
+ dispatchEvent(type, data, traverseChildren) {
129
+ emit(this, type, data);
130
+ if (traverseChildren) {
131
+ for (const child of this.#context.getChildren(this)) {
132
+ child.dispatchEvent(type, data, traverseChildren);
133
+ }
134
+ }
135
+ }
136
+ destroy() {
137
+ this.removeFromParent();
138
+ this.#context?.destroyComponent(this);
139
+ this.#context = void 0;
140
+ }
132
141
  }
133
- //# sourceMappingURL=ViewComponent.js.map
142
+ export {
143
+ ViewComponent
144
+ };
145
+ //# sourceMappingURL=ViewComponent.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"ViewComponent.js","sourceRoot":"","sources":["../../../src/view/ViewComponent.ts"],"names":[],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/view/ViewComponent.ts"],
4
+ "sourcesContent": ["import {emit, eventize} from '@spearwolf/eventize';\nimport {VoidToken} from '../constants.js';\nimport {generateUUID} from '../utils/generateUUID.js';\nimport {ComponentContext} from './ComponentContext.js';\n\nclass ViewComponentError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ViewComponentError';\n }\n}\n\nexport class ViewComponent {\n readonly #uuid: string;\n\n #token: string;\n\n #context?: ComponentContext;\n\n #parent?: ViewComponent;\n #order = 0;\n readonly #autoDestructionOnParentRemoval: boolean;\n\n get uuid() {\n return this.#uuid;\n }\n\n get token() {\n return this.#token;\n }\n\n set token(token: string | undefined) {\n token ??= VoidToken;\n if (token === this.#token) return;\n this.#token = token;\n this.#context?.changeToken(this, token);\n }\n\n get parent(): ViewComponent | undefined {\n return this.#parent;\n }\n\n set parent(parent: ViewComponent | null | undefined) {\n if (parent) {\n if (parent.#context !== this.#context) {\n throw new ViewComponentError('cannot set parent from different context');\n }\n parent.addChild(this);\n } else {\n this.removeFromParent();\n }\n }\n\n get context(): ComponentContext | undefined {\n return this.#context;\n }\n\n set context(context: ComponentContext | null | undefined) {\n if (this.#context != context) {\n if (this.#context) {\n this.destroy();\n }\n this.#context = context;\n if (context) {\n context.addComponent(this);\n }\n }\n }\n\n /**\n * The order property sets the order to lay out a component in a children array of the parent component.\n *\n * Items in a children array are sorted by ascending order value and then by their insertion order.\n */\n get order(): number {\n return this.#order;\n }\n\n set order(order: number | null | undefined) {\n const prevOrder = this.#order;\n this.#order = order ?? 0;\n if (prevOrder !== this.#order) {\n this.#context.changeOrder(this);\n }\n }\n\n /**\n * Whether the corresponding entity should be destroyed when its parent entity is destroyed.\n *\n * Set via the constructor option of the same name; immutable after creation.\n * Children that opt out (the default) are promoted to root entities when their\n * parent is destroyed, so they remain reachable.\n */\n get autoDestructionOnParentRemoval(): boolean {\n return this.#autoDestructionOnParentRemoval;\n }\n\n constructor(\n token: string,\n options?: {\n parent?: ViewComponent;\n order?: number;\n context?: ComponentContext;\n uuid?: string;\n autoDestructionOnParentRemoval?: boolean;\n },\n ) {\n eventize(this);\n\n if (options instanceof ViewComponent) {\n options = {parent: options};\n }\n\n this.#uuid = options?.uuid ?? generateUUID();\n\n this.#token = token;\n this.#order = options?.order ?? 0;\n this.#parent = options?.parent;\n this.#autoDestructionOnParentRemoval = options?.autoDestructionOnParentRemoval ?? false;\n\n const ctx = options?.context ?? ComponentContext.get();\n\n if (this.#parent && this.#parent.#context !== ctx) {\n throw new ViewComponentError('cannot set parent from different context');\n }\n\n this.context = ctx;\n }\n\n isChildOf(parent: ViewComponent) {\n return this.#parent === parent;\n }\n\n removeFromParent() {\n if (this.#parent) {\n this.#context?.removeFromParent(this.uuid, this.#parent);\n this.#parent = undefined;\n } else {\n this.#context?.moveToRoot(this.uuid);\n }\n }\n\n addChild(child: ViewComponent) {\n if (child.#context !== this.#context) {\n throw new ViewComponentError('cannot add a child from another context');\n }\n if (!child.isChildOf(this)) {\n child.removeFromParent();\n child.#parent = this;\n this.#context.addToChildren(this, child);\n }\n }\n\n setProperty<T = unknown>(name: string, value: T, isEqual?: (a: T, b: T) => boolean) {\n this.#context.setProperty(this, name, value, isEqual);\n }\n\n removeProperty(name: string) {\n this.#context.removeProperty(this, name);\n }\n\n dispatchShadowObjectsEvent(type: string, data: unknown, transferables?: Transferable[]) {\n this.#context.dispatchShadowObjectsEvent(this, type, data, transferables);\n }\n\n dispatchEvent(type: string, data: unknown, traverseChildren: boolean) {\n emit(this as ViewComponent, type, data);\n\n if (traverseChildren) {\n for (const child of this.#context!.getChildren(this)) {\n child.dispatchEvent(type, data, traverseChildren);\n }\n }\n }\n\n destroy() {\n this.removeFromParent();\n this.#context?.destroyComponent(this);\n this.#context = undefined;\n }\n}"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,12 +1,14 @@
1
- export function cloneChangeTrail(trails) {
2
- return trails.map((trail) => {
3
- if (trail.transferables && trail.transferables.length > 0) {
4
- const { transferables, ...data } = trail;
5
- return structuredClone(data, { transfer: transferables });
6
- }
7
- else {
8
- return structuredClone(trail);
9
- }
10
- });
1
+ function cloneChangeTrail(trails) {
2
+ return trails.map((trail) => {
3
+ if (trail.transferables && trail.transferables.length > 0) {
4
+ const { transferables, ...data } = trail;
5
+ return structuredClone(data, { transfer: transferables });
6
+ } else {
7
+ return structuredClone(trail);
8
+ }
9
+ });
11
10
  }
12
- //# sourceMappingURL=cloneChangeTrail.js.map
11
+ export {
12
+ cloneChangeTrail
13
+ };
14
+ //# sourceMappingURL=cloneChangeTrail.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"cloneChangeTrail.js","sourceRoot":"","sources":["../../../src/view/cloneChangeTrail.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,MAAuB;IACtD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,MAAM,EAAC,aAAa,EAAE,GAAG,IAAI,EAAC,GAAG,KAAK,CAAC;YACvC,OAAO,eAAe,CAAC,IAAI,EAAE,EAAC,QAAQ,EAAE,aAAoB,EAAC,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/view/cloneChangeTrail.ts"],
4
+ "sourcesContent": ["import type {ChangeTrailType} from '../types.js';\n\nexport function cloneChangeTrail(trails: ChangeTrailType): ChangeTrailType {\n return trails.map((trail) => {\n if (trail.transferables && trail.transferables.length > 0) {\n const {transferables, ...data} = trail;\n return structuredClone(data, {transfer: transferables as any});\n } else {\n return structuredClone(trail);\n }\n });\n}"],
5
+ "mappings": "AAEO,SAAS,iBAAiB,QAA0C;AACzE,SAAO,OAAO,IAAI,CAAC,UAAU;AAC3B,QAAI,MAAM,iBAAiB,MAAM,cAAc,SAAS,GAAG;AACzD,YAAM,EAAC,eAAe,GAAG,KAAI,IAAI;AACjC,aAAO,gBAAgB,MAAM,EAAC,UAAU,cAAoB,CAAC;AAAA,IAC/D,OAAO;AACL,aAAO,gBAAgB,KAAK;AAAA,IAC9B;AAAA,EACF,CAAC;AACH;",
6
+ "names": []
7
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"MessageRouter.d.ts","sourceRoot":"","sources":["../../../src/worker/MessageRouter.ts"],"names":[],"mappings":"AAWA,OAAO,EAAC,MAAM,EAAE,KAAK,kBAAkB,EAAC,MAAM,0BAA0B,CAAC;AASzE,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC;CACvC;AAED,qBAAa,aAAa;;IAGxB,MAAM,EAAE,MAAM,CAAC;IAEf,WAAW,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC;gBAEzB,OAAO,CAAC,EAAE,oBAAoB;IAQ1C,KAAK,CAAC,KAAK,EAAE,YAAY;IAmBzB,eAAe,CAAC,KAAK,EAAE,kBAAkB;CA6C1C"}
1
+ {"version":3,"file":"MessageRouter.d.ts","sourceRoot":"","sources":["../../../src/worker/MessageRouter.ts"],"names":[],"mappings":"AAYA,OAAO,EAAC,MAAM,EAAE,KAAK,kBAAkB,EAAC,MAAM,0BAA0B,CAAC;AAQzE,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC;CACvC;AAED,qBAAa,aAAa;;IAGxB,MAAM,EAAE,MAAM,CAAC;IAEf,WAAW,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC;gBAEzB,OAAO,CAAC,EAAE,oBAAoB;IAQ1C,KAAK,CAAC,KAAK,EAAE,YAAY;IAmBzB,eAAe,CAAC,KAAK,EAAE,kBAAkB;CA6C1C"}
@@ -1,72 +1,83 @@
1
- import { off, on } from '@spearwolf/eventize';
2
- import { AppliedChangeTrail, ChangeTrail, Configure, Destroy, Destroyed, ImportedModule, MessageToView, ShadowObjectsExport, } from '../constants.js';
3
- import { Kernel } from '../in-the-dark/Kernel.js';
4
- import { importModule } from '../in-the-dark/importModule.js';
5
- import { toUrlString } from '../utils/toUrlString.js';
6
- export class MessageRouter {
7
- #importedModules = new Set();
8
- constructor(options) {
9
- this.kernel = options?.kernel ?? new Kernel();
10
- this.postMessage = options?.postMessage ?? self.postMessage.bind(self);
11
- on(this.kernel, MessageToView, 'onMessageToView', this);
1
+ import { off, on } from "@spearwolf/eventize";
2
+ import {
3
+ AppliedChangeTrail,
4
+ ChangeTrail,
5
+ Configure,
6
+ Destroy,
7
+ Destroyed,
8
+ ImportedModule,
9
+ MessageToView,
10
+ ShadowObjectsExport
11
+ } from "../constants.js";
12
+ import { importModule } from "../in-the-dark/importModule.js";
13
+ import { Kernel } from "../in-the-dark/Kernel.js";
14
+ import { toUrlString } from "../utils/toUrlString.js";
15
+ class MessageRouter {
16
+ #importedModules = /* @__PURE__ */ new Set();
17
+ constructor(options) {
18
+ this.kernel = options?.kernel ?? new Kernel();
19
+ this.postMessage = options?.postMessage ?? self.postMessage.bind(self);
20
+ on(this.kernel, MessageToView, "onMessageToView", this);
21
+ }
22
+ route(event) {
23
+ switch (event.data.type) {
24
+ case Configure:
25
+ this.#configure(event.data);
26
+ break;
27
+ case ChangeTrail:
28
+ this.#onChangeTrail(event.data);
29
+ break;
30
+ case Destroy:
31
+ this.#onDestroy(event.data);
32
+ break;
33
+ default:
34
+ console.warn("[MessageRouter] unknown message", event.data.type ?? event.data);
12
35
  }
13
- route(event) {
14
- switch (event.data.type) {
15
- case Configure:
16
- this.#configure(event.data);
17
- break;
18
- case ChangeTrail:
19
- this.#onChangeTrail(event.data);
20
- break;
21
- case Destroy:
22
- this.#onDestroy(event.data);
23
- break;
24
- default:
25
- console.warn('[MessageRouter] unknown message', event.data.type ?? event.data);
26
- }
36
+ }
37
+ onMessageToView(event) {
38
+ const { transferables: transfer, ...data } = event;
39
+ this.postMessage({ type: MessageToView, data }, { transfer });
40
+ }
41
+ async #configure(data) {
42
+ try {
43
+ const module = await import(
44
+ /* @vite-ignore */
45
+ toUrlString(data.importModule)
46
+ );
47
+ if (module[ShadowObjectsExport]) {
48
+ await importModule(this.kernel, module[ShadowObjectsExport], this.#importedModules);
49
+ this.postMessage({ type: ImportedModule, url: data.importModule });
50
+ } else {
51
+ this.postMessage({
52
+ type: ImportedModule,
53
+ url: data.importModule,
54
+ error: `module has no "${ShadowObjectsExport}" export`
55
+ });
56
+ }
57
+ } catch (error) {
58
+ console.error("[MessageRouter] failed to import module", error);
59
+ this.postMessage({ type: ImportedModule, url: data.importModule, error: `${error}` });
27
60
  }
28
- onMessageToView(event) {
29
- const { transferables: transfer, ...data } = event;
30
- this.postMessage({ type: MessageToView, data }, { transfer });
61
+ }
62
+ #onChangeTrail(data) {
63
+ try {
64
+ this.kernel.run(data);
65
+ } catch (error) {
66
+ console.error("[MessageRouter] failed to apply change trail", error);
67
+ this.postMessage({ type: AppliedChangeTrail, serial: data.serial, error: error.toString() });
31
68
  }
32
- async #configure(data) {
33
- try {
34
- const module = await import(/* @vite-ignore */ toUrlString(data.importModule));
35
- if (module[ShadowObjectsExport]) {
36
- await importModule(this.kernel, module[ShadowObjectsExport], this.#importedModules);
37
- this.postMessage({ type: ImportedModule, url: data.importModule });
38
- }
39
- else {
40
- this.postMessage({
41
- type: ImportedModule,
42
- url: data.importModule,
43
- error: `module has no "${ShadowObjectsExport}" export`,
44
- });
45
- }
46
- }
47
- catch (error) {
48
- console.error('[MessageRouter] failed to import module', error);
49
- this.postMessage({ type: ImportedModule, url: data.importModule, error: `${error}` });
50
- }
51
- }
52
- #onChangeTrail(data) {
53
- // console.debug('[MessageRouter] parseChangeTrail', {data, kernel: this.kernel});
54
- try {
55
- this.kernel.run(data);
56
- }
57
- catch (error) {
58
- console.error('[MessageRouter] failed to apply change trail', error);
59
- this.postMessage({ type: AppliedChangeTrail, serial: data.serial, error: error.toString() });
60
- }
61
- if (data.serial) {
62
- this.postMessage({ type: AppliedChangeTrail, serial: data.serial });
63
- }
64
- }
65
- #onDestroy(data) {
66
- console.debug('[MessageRouter] on destroy', data);
67
- off(this.kernel, this);
68
- this.#importedModules.clear();
69
- this.postMessage({ type: Destroyed });
69
+ if (data.serial) {
70
+ this.postMessage({ type: AppliedChangeTrail, serial: data.serial });
70
71
  }
72
+ }
73
+ #onDestroy(data) {
74
+ console.debug("[MessageRouter] on destroy", data);
75
+ off(this.kernel, this);
76
+ this.#importedModules.clear();
77
+ this.postMessage({ type: Destroyed });
78
+ }
71
79
  }
72
- //# sourceMappingURL=MessageRouter.js.map
80
+ export {
81
+ MessageRouter
82
+ };
83
+ //# sourceMappingURL=MessageRouter.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"MessageRouter.js","sourceRoot":"","sources":["../../../src/worker/MessageRouter.ts"],"names":[],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/worker/MessageRouter.ts"],
4
+ "sourcesContent": ["import {off, on} from '@spearwolf/eventize';\nimport {\n AppliedChangeTrail,\n ChangeTrail,\n Configure,\n Destroy,\n Destroyed,\n ImportedModule,\n MessageToView,\n ShadowObjectsExport,\n} from '../constants.js';\nimport {importModule} from '../in-the-dark/importModule.js';\nimport {Kernel, type MessageToViewEvent} from '../in-the-dark/Kernel.js';\nimport type {AppliedChangeTrailEvent, ImportedModuleEvent, ShadowObjectsModule, SyncEvent} from '../types.js';\nimport {toUrlString} from '../utils/toUrlString.js';\n\ninterface ConfigurePayloadData {\n importModule?: string;\n}\n\nexport interface MessageRouterOptions {\n kernel?: Kernel;\n postMessage?: typeof self.postMessage;\n}\n\nexport class MessageRouter {\n #importedModules: Set<ShadowObjectsModule> = new Set();\n\n kernel: Kernel;\n\n postMessage: typeof self.postMessage;\n\n constructor(options?: MessageRouterOptions) {\n this.kernel = options?.kernel ?? new Kernel();\n\n this.postMessage = options?.postMessage ?? self.postMessage.bind(self);\n\n on(this.kernel, MessageToView, 'onMessageToView', this);\n }\n\n route(event: MessageEvent) {\n switch (event.data.type) {\n case Configure:\n this.#configure(event.data);\n break;\n\n case ChangeTrail:\n this.#onChangeTrail(event.data);\n break;\n\n case Destroy:\n this.#onDestroy(event.data);\n break;\n\n default:\n console.warn('[MessageRouter] unknown message', event.data.type ?? event.data);\n }\n }\n\n onMessageToView(event: MessageToViewEvent) {\n const {transferables: transfer, ...data} = event;\n this.postMessage({type: MessageToView, data}, {transfer});\n }\n\n async #configure(data: ConfigurePayloadData) {\n try {\n const module = await import(/* @vite-ignore */ toUrlString(data.importModule));\n if (module[ShadowObjectsExport]) {\n await importModule(this.kernel, module[ShadowObjectsExport], this.#importedModules);\n this.postMessage({type: ImportedModule, url: data.importModule});\n } else {\n this.postMessage({\n type: ImportedModule,\n url: data.importModule,\n error: `module has no \"${ShadowObjectsExport}\" export`,\n } as ImportedModuleEvent);\n }\n } catch (error) {\n console.error('[MessageRouter] failed to import module', error);\n this.postMessage({type: ImportedModule, url: data.importModule, error: `${error}`} as ImportedModuleEvent);\n }\n }\n\n #onChangeTrail(data: SyncEvent) {\n // console.debug('[MessageRouter] parseChangeTrail', {data, kernel: this.kernel});\n\n try {\n this.kernel.run(data);\n } catch (error) {\n console.error('[MessageRouter] failed to apply change trail', error);\n this.postMessage({type: AppliedChangeTrail, serial: data.serial, error: error.toString()} as AppliedChangeTrailEvent);\n }\n\n if (data.serial) {\n this.postMessage({type: AppliedChangeTrail, serial: data.serial} as AppliedChangeTrailEvent);\n }\n }\n\n #onDestroy(data: any) {\n console.debug('[MessageRouter] on destroy', data);\n off(this.kernel, this);\n this.#importedModules.clear();\n this.postMessage({type: Destroyed});\n }\n}"],
5
+ "mappings": "AAAA,SAAQ,KAAK,UAAS;AACtB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAQ,oBAAmB;AAC3B,SAAQ,cAAsC;AAE9C,SAAQ,mBAAkB;AAWnB,MAAM,cAAc;AAAA,EACzB,mBAA6C,oBAAI,IAAI;AAAA,EAMrD,YAAY,SAAgC;AAC1C,SAAK,SAAS,SAAS,UAAU,IAAI,OAAO;AAE5C,SAAK,cAAc,SAAS,eAAe,KAAK,YAAY,KAAK,IAAI;AAErE,OAAG,KAAK,QAAQ,eAAe,mBAAmB,IAAI;AAAA,EACxD;AAAA,EAEA,MAAM,OAAqB;AACzB,YAAQ,MAAM,KAAK,MAAM;AAAA,MACvB,KAAK;AACH,aAAK,WAAW,MAAM,IAAI;AAC1B;AAAA,MAEF,KAAK;AACH,aAAK,eAAe,MAAM,IAAI;AAC9B;AAAA,MAEF,KAAK;AACH,aAAK,WAAW,MAAM,IAAI;AAC1B;AAAA,MAEF;AACE,gBAAQ,KAAK,mCAAmC,MAAM,KAAK,QAAQ,MAAM,IAAI;AAAA,IACjF;AAAA,EACF;AAAA,EAEA,gBAAgB,OAA2B;AACzC,UAAM,EAAC,eAAe,UAAU,GAAG,KAAI,IAAI;AAC3C,SAAK,YAAY,EAAC,MAAM,eAAe,KAAI,GAAG,EAAC,SAAQ,CAAC;AAAA,EAC1D;AAAA,EAEA,MAAM,WAAW,MAA4B;AAC3C,QAAI;AACF,YAAM,SAAS,MAAM;AAAA;AAAA,QAA0B,YAAY,KAAK,YAAY;AAAA;AAC5E,UAAI,OAAO,mBAAmB,GAAG;AAC/B,cAAM,aAAa,KAAK,QAAQ,OAAO,mBAAmB,GAAG,KAAK,gBAAgB;AAClF,aAAK,YAAY,EAAC,MAAM,gBAAgB,KAAK,KAAK,aAAY,CAAC;AAAA,MACjE,OAAO;AACL,aAAK,YAAY;AAAA,UACf,MAAM;AAAA,UACN,KAAK,KAAK;AAAA,UACV,OAAO,kBAAkB,mBAAmB;AAAA,QAC9C,CAAwB;AAAA,MAC1B;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,2CAA2C,KAAK;AAC9D,WAAK,YAAY,EAAC,MAAM,gBAAgB,KAAK,KAAK,cAAc,OAAO,GAAG,KAAK,GAAE,CAAwB;AAAA,IAC3G;AAAA,EACF;AAAA,EAEA,eAAe,MAAiB;AAG9B,QAAI;AACF,WAAK,OAAO,IAAI,IAAI;AAAA,IACtB,SAAS,OAAO;AACd,cAAQ,MAAM,gDAAgD,KAAK;AACnE,WAAK,YAAY,EAAC,MAAM,oBAAoB,QAAQ,KAAK,QAAQ,OAAO,MAAM,SAAS,EAAC,CAA4B;AAAA,IACtH;AAEA,QAAI,KAAK,QAAQ;AACf,WAAK,YAAY,EAAC,MAAM,oBAAoB,QAAQ,KAAK,OAAM,CAA4B;AAAA,IAC7F;AAAA,EACF;AAAA,EAEA,WAAW,MAAW;AACpB,YAAQ,MAAM,8BAA8B,IAAI;AAChD,QAAI,KAAK,QAAQ,IAAI;AACrB,SAAK,iBAAiB,MAAM;AAC5B,SAAK,YAAY,EAAC,MAAM,UAAS,CAAC;AAAA,EACpC;AACF;",
6
+ "names": []
7
+ }
@@ -1,22 +1,23 @@
1
- import { Loaded } from '../constants.js';
2
- import { CONSOLE_LOGGER, CONSOLE_LOGGER_STORAGE } from '../utils/ConsoleLogger.js';
3
- import { MessageRouter } from './MessageRouter.js';
4
- export class WorkerRuntime {
5
- constructor() {
6
- this.onmessage = (event) => {
7
- if (event.data.type === CONSOLE_LOGGER) {
8
- // @ts-ignore
9
- globalThis[CONSOLE_LOGGER_STORAGE] = event.data.config;
10
- }
11
- else {
12
- this.router ??= new MessageRouter();
13
- this.router.route(event);
14
- }
15
- };
16
- }
17
- start() {
18
- self.addEventListener('message', this.onmessage);
19
- self.postMessage({ type: Loaded }); // inform the main thread that we are ready
20
- }
1
+ import { Loaded } from "../constants.js";
2
+ import { CONSOLE_LOGGER, CONSOLE_LOGGER_STORAGE } from "../utils/ConsoleLogger.js";
3
+ import { MessageRouter } from "./MessageRouter.js";
4
+ class WorkerRuntime {
5
+ constructor() {
6
+ this.onmessage = (event) => {
7
+ if (event.data.type === CONSOLE_LOGGER) {
8
+ globalThis[CONSOLE_LOGGER_STORAGE] = event.data.config;
9
+ } else {
10
+ this.router ??= new MessageRouter();
11
+ this.router.route(event);
12
+ }
13
+ };
14
+ }
15
+ start() {
16
+ self.addEventListener("message", this.onmessage);
17
+ self.postMessage({ type: Loaded });
18
+ }
21
19
  }
22
- //# sourceMappingURL=WorkerRuntime.js.map
20
+ export {
21
+ WorkerRuntime
22
+ };
23
+ //# sourceMappingURL=WorkerRuntime.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"WorkerRuntime.js","sourceRoot":"","sources":["../../../src/worker/WorkerRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAC,cAAc,EAAE,sBAAsB,EAAC,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,aAAa;IAA1B;QAGE,cAAS,GAAG,CAAC,KAAmB,EAAQ,EAAE;YACxC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACvC,aAAa;gBACb,UAAU,CAAC,sBAAsB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC;IAMJ,CAAC;IAJC,KAAK;QACH,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC,CAAC,CAAC,2CAA2C;IAC/E,CAAC;CACF"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/worker/WorkerRuntime.ts"],
4
+ "sourcesContent": ["import {Loaded} from '../constants.js';\nimport {CONSOLE_LOGGER, CONSOLE_LOGGER_STORAGE} from '../utils/ConsoleLogger.js';\nimport {MessageRouter} from './MessageRouter.js';\n\nexport class WorkerRuntime {\n router?: MessageRouter;\n\n onmessage = (event: MessageEvent): void => {\n if (event.data.type === CONSOLE_LOGGER) {\n // @ts-ignore\n globalThis[CONSOLE_LOGGER_STORAGE] = event.data.config;\n } else {\n this.router ??= new MessageRouter();\n this.router.route(event);\n }\n };\n\n start() {\n self.addEventListener('message', this.onmessage);\n self.postMessage({type: Loaded}); // inform the main thread that we are ready\n }\n}"],
5
+ "mappings": "AAAA,SAAQ,cAAa;AACrB,SAAQ,gBAAgB,8BAA6B;AACrD,SAAQ,qBAAoB;AAErB,MAAM,cAAc;AAAA,EAApB;AAGL,qBAAY,CAAC,UAA8B;AACzC,UAAI,MAAM,KAAK,SAAS,gBAAgB;AAEtC,mBAAW,sBAAsB,IAAI,MAAM,KAAK;AAAA,MAClD,OAAO;AACL,aAAK,WAAW,IAAI,cAAc;AAClC,aAAK,OAAO,MAAM,KAAK;AAAA,MACzB;AAAA,IACF;AAAA;AAAA,EAEA,QAAQ;AACN,SAAK,iBAAiB,WAAW,KAAK,SAAS;AAC/C,SAAK,YAAY,EAAC,MAAM,OAAM,CAAC;AAAA,EACjC;AACF;",
6
+ "names": []
7
+ }
@@ -1 +0,0 @@
1
- {"root":["../src/bundle.ts","../src/constants.ts","../src/create-worker.bundle.ts","../src/create-worker.ts","../src/elements.ts","../src/index.ts","../src/shadow-objects.ts","../src/shadow-objects.worker.js","../src/shae-ent.ts","../src/shae-prop.ts","../src/shae-worker.ts","../src/types.ts","../src/elements/ShaeElement.ts","../src/elements/ShaeEntElement.ts","../src/elements/ShaePropElement.ts","../src/elements/ShaeWorkerElement.ts","../src/elements/constants.ts","../src/elements/events.ts","../src/in-the-dark/Entity.ts","../src/in-the-dark/Kernel.ts","../src/in-the-dark/Registry.ts","../src/in-the-dark/ShadowObject.ts","../src/in-the-dark/SignalsPath.ts","../src/in-the-dark/events.ts","../src/in-the-dark/importModule.ts","../src/utils/ConsoleLogger.ts","../src/utils/FrameLoop.ts","../src/utils/array-utils.ts","../src/utils/attr-utils.ts","../src/utils/constants.ts","../src/utils/generateUUID.ts","../src/utils/props-utils.ts","../src/utils/toMaybe.ts","../src/utils/toNamespace.ts","../src/utils/toUrlString.ts","../src/utils/waitForMessageOfType.ts","../src/view/ComponentChanges.ts","../src/view/ComponentContext.ts","../src/view/ComponentMemory.ts","../src/view/IShadowObjectEnvProxy.ts","../src/view/LocalShadowObjectEnv.ts","../src/view/RemoteWorkerEnv.ts","../src/view/ShadowEnv.ts","../src/view/ViewComponent.ts","../src/view/cloneChangeTrail.ts","../src/worker/MessageRouter.ts","../src/worker/WorkerRuntime.ts"],"version":"5.9.3"}