@spearwolf/shadow-objects 0.30.2 → 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 (122) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/bundle.js +13 -13
  3. package/package.json +3 -3
  4. package/src/bundle.js +4 -4
  5. package/src/bundle.js.map +7 -1
  6. package/src/constants.js +53 -40
  7. package/src/constants.js.map +7 -1
  8. package/src/create-worker.bundle.js +6 -8
  9. package/src/create-worker.bundle.js.map +7 -1
  10. package/src/create-worker.js +5 -2
  11. package/src/create-worker.js.map +7 -1
  12. package/src/elements/ShaeElement.js +57 -54
  13. package/src/elements/ShaeElement.js.map +7 -1
  14. package/src/elements/ShaeEntElement.d.ts.map +1 -1
  15. package/src/elements/ShaeEntElement.js +320 -341
  16. package/src/elements/ShaeEntElement.js.map +7 -1
  17. package/src/elements/ShaePropElement.js +312 -320
  18. package/src/elements/ShaePropElement.js.map +7 -1
  19. package/src/elements/ShaeWorkerElement.js +234 -229
  20. package/src/elements/ShaeWorkerElement.js.map +7 -1
  21. package/src/elements/constants.js +37 -22
  22. package/src/elements/constants.js.map +7 -1
  23. package/src/elements/events.d.ts +1 -1
  24. package/src/elements/events.d.ts.map +1 -1
  25. package/src/elements/events.js +1 -2
  26. package/src/elements/events.js.map +7 -1
  27. package/src/elements.js +4 -4
  28. package/src/elements.js.map +7 -1
  29. package/src/in-the-dark/Entity.d.ts +1 -1
  30. package/src/in-the-dark/Entity.d.ts.map +1 -1
  31. package/src/in-the-dark/Entity.js +299 -293
  32. package/src/in-the-dark/Entity.js.map +7 -1
  33. package/src/in-the-dark/Kernel.d.ts.map +1 -1
  34. package/src/in-the-dark/Kernel.js +556 -533
  35. package/src/in-the-dark/Kernel.js.map +7 -1
  36. package/src/in-the-dark/Registry.d.ts.map +1 -1
  37. package/src/in-the-dark/Registry.js +101 -104
  38. package/src/in-the-dark/Registry.js.map +7 -1
  39. package/src/in-the-dark/ShadowObject.d.ts.map +1 -1
  40. package/src/in-the-dark/ShadowObject.js +21 -23
  41. package/src/in-the-dark/ShadowObject.js.map +7 -1
  42. package/src/in-the-dark/SignalsPath.d.ts.map +1 -1
  43. package/src/in-the-dark/SignalsPath.js +139 -123
  44. package/src/in-the-dark/SignalsPath.js.map +7 -1
  45. package/src/in-the-dark/events.js +11 -9
  46. package/src/in-the-dark/events.js.map +7 -1
  47. package/src/in-the-dark/importModule.js +31 -29
  48. package/src/in-the-dark/importModule.js.map +7 -1
  49. package/src/index.d.ts +2 -2
  50. package/src/index.d.ts.map +1 -1
  51. package/src/index.js +14 -14
  52. package/src/index.js.map +7 -1
  53. package/src/shadow-objects.js +6 -6
  54. package/src/shadow-objects.js.map +7 -1
  55. package/src/shadow-objects.worker.js +3 -3
  56. package/src/shadow-objects.worker.js.map +7 -1
  57. package/src/shae-ent.js +3 -3
  58. package/src/shae-ent.js.map +7 -1
  59. package/src/shae-prop.js +3 -3
  60. package/src/shae-prop.js.map +7 -1
  61. package/src/shae-worker.js +3 -3
  62. package/src/shae-worker.js.map +7 -1
  63. package/src/types.d.ts +3 -2
  64. package/src/types.d.ts.map +1 -1
  65. package/src/types.js +1 -2
  66. package/src/types.js.map +7 -1
  67. package/src/utils/ConsoleLogger.js +179 -185
  68. package/src/utils/ConsoleLogger.js.map +7 -1
  69. package/src/utils/FrameLoop.js +41 -40
  70. package/src/utils/FrameLoop.js.map +7 -1
  71. package/src/utils/array-utils.js +22 -24
  72. package/src/utils/array-utils.js.map +7 -1
  73. package/src/utils/attr-utils.js +15 -11
  74. package/src/utils/attr-utils.js.map +7 -1
  75. package/src/utils/constants.js +5 -2
  76. package/src/utils/constants.js.map +7 -1
  77. package/src/utils/generateUUID.d.ts.map +1 -1
  78. package/src/utils/generateUUID.js +269 -32
  79. package/src/utils/generateUUID.js.map +7 -1
  80. package/src/utils/props-utils.js +34 -43
  81. package/src/utils/props-utils.js.map +7 -1
  82. package/src/utils/toMaybe.js +5 -2
  83. package/src/utils/toMaybe.js.map +7 -1
  84. package/src/utils/toNamespace.js +6 -3
  85. package/src/utils/toNamespace.js.map +7 -1
  86. package/src/utils/toUrlString.js +9 -6
  87. package/src/utils/toUrlString.js.map +7 -1
  88. package/src/utils/waitForMessageOfType.js +30 -32
  89. package/src/utils/waitForMessageOfType.js.map +7 -1
  90. package/src/view/ComponentChanges.d.ts +1 -1
  91. package/src/view/ComponentChanges.d.ts.map +1 -1
  92. package/src/view/ComponentChanges.js +249 -251
  93. package/src/view/ComponentChanges.js.map +7 -1
  94. package/src/view/ComponentContext.d.ts.map +1 -1
  95. package/src/view/ComponentContext.js +303 -331
  96. package/src/view/ComponentContext.js.map +7 -1
  97. package/src/view/ComponentMemory.d.ts +1 -0
  98. package/src/view/ComponentMemory.d.ts.map +1 -1
  99. package/src/view/ComponentMemory.js +73 -76
  100. package/src/view/ComponentMemory.js.map +7 -1
  101. package/src/view/IShadowObjectEnvProxy.js +1 -2
  102. package/src/view/IShadowObjectEnvProxy.js.map +7 -1
  103. package/src/view/LocalShadowObjectEnv.d.ts.map +1 -1
  104. package/src/view/LocalShadowObjectEnv.js +57 -52
  105. package/src/view/LocalShadowObjectEnv.js.map +7 -1
  106. package/src/view/RemoteWorkerEnv.js +134 -123
  107. package/src/view/RemoteWorkerEnv.js.map +7 -1
  108. package/src/view/ShadowEnv.d.ts.map +1 -1
  109. package/src/view/ShadowEnv.js +232 -228
  110. package/src/view/ShadowEnv.js.map +7 -1
  111. package/src/view/ViewComponent.d.ts +9 -0
  112. package/src/view/ViewComponent.d.ts.map +1 -1
  113. package/src/view/ViewComponent.js +142 -130
  114. package/src/view/ViewComponent.js.map +7 -1
  115. package/src/view/cloneChangeTrail.js +13 -11
  116. package/src/view/cloneChangeTrail.js.map +7 -1
  117. package/src/worker/MessageRouter.d.ts.map +1 -1
  118. package/src/worker/MessageRouter.js +78 -67
  119. package/src/worker/MessageRouter.js.map +7 -1
  120. package/src/worker/WorkerRuntime.js +22 -21
  121. package/src/worker/WorkerRuntime.js.map +7 -1
  122. package/tsconfig.lib.tsbuildinfo +0 -1
@@ -1,232 +1,236 @@
1
- var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
- function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
- var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
- var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
- var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
- var _, done = false;
7
- for (var i = decorators.length - 1; i >= 0; i--) {
8
- var context = {};
9
- for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
- for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
- context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
- var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
- if (kind === "accessor") {
14
- if (result === void 0) continue;
15
- if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
- if (_ = accept(result.get)) descriptor.get = _;
17
- if (_ = accept(result.set)) descriptor.set = _;
18
- if (_ = accept(result.init)) initializers.unshift(_);
19
- }
20
- else if (_ = accept(result)) {
21
- if (kind === "field") initializers.unshift(_);
22
- else descriptor[key] = _;
23
- }
24
- }
25
- if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
- done = true;
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
5
+ var __typeError = (msg) => {
6
+ throw TypeError(msg);
7
+ };
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
+ var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
11
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
12
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
13
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
14
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
15
+ var __runInitializers = (array, flags, self, value) => {
16
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
17
+ return value;
27
18
  };
28
- var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
- var useValue = arguments.length > 2;
30
- for (var i = 0; i < initializers.length; i++) {
31
- value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
19
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
20
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
21
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
22
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
23
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
24
+ return __privateGet(this, extra);
25
+ }, set [name](x) {
26
+ return __privateSet(this, extra, x);
27
+ } }, name));
28
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
29
+ for (var i = decorators.length - 1; i >= 0; i--) {
30
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
31
+ if (k) {
32
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
33
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
34
+ if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
32
35
  }
33
- return useValue ? value : void 0;
36
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
37
+ if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
38
+ else if (typeof it !== "object" || it === null) __typeError("Object expected");
39
+ else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
40
+ }
41
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
34
42
  };
35
- import { Priority, emit, off, on, onceAsync, retain, retainClear } from '@spearwolf/eventize';
36
- import { createEffect, createSignal, destroyObjectSignals, findObjectSignalByName } from '@spearwolf/signalize';
37
- import { signal } from '@spearwolf/signalize/decorators';
38
- import { ConsoleLogger } from '../utils/ConsoleLogger.js';
39
- import { ComponentContext } from './ComponentContext.js';
40
- let ShadowEnv = (() => {
41
- var _a;
42
- let _viewReady_decorators;
43
- let _viewReady_initializers = [];
44
- let _viewReady_extraInitializers = [];
45
- let _proxyReady_decorators;
46
- let _proxyReady_initializers = [];
47
- let _proxyReady_extraInitializers = [];
48
- return class ShadowEnv {
49
- static {
50
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
51
- _viewReady_decorators = [signal()];
52
- _proxyReady_decorators = [signal()];
53
- __esDecorate(this, null, _viewReady_decorators, { kind: "accessor", name: "viewReady", static: false, private: false, access: { has: obj => "viewReady" in obj, get: obj => obj.viewReady, set: (obj, value) => { obj.viewReady = value; } }, metadata: _metadata }, _viewReady_initializers, _viewReady_extraInitializers);
54
- __esDecorate(this, null, _proxyReady_decorators, { kind: "accessor", name: "proxyReady", static: false, private: false, access: { has: obj => "proxyReady" in obj, get: obj => obj.proxyReady, set: (obj, value) => { obj.proxyReady = value; } }, metadata: _metadata }, _proxyReady_initializers, _proxyReady_extraInitializers);
55
- if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
56
- }
57
- static { this.AfterSync = 'afterSync'; }
58
- static { this.ContextLost = 'contextLost'; }
59
- static { this.ContextCreated = 'contextCreated'; }
60
- static get(ns) {
61
- if (ns == null)
62
- return undefined;
63
- return globalThis.__shadowEnvs?.get(ns);
64
- }
65
- #comCtx;
66
- #shaObjEnvProxy;
67
- #syncScheduled;
68
- #syncAfterContextCreated;
69
- #syncWaitForConfirmation;
70
- #afterNextSync;
71
- #viewReady_accessor_storage;
72
- get viewReady() { return this.#viewReady_accessor_storage; }
73
- set viewReady(value) { this.#viewReady_accessor_storage = value; }
74
- #proxyReady_accessor_storage;
75
- get proxyReady() { return this.#proxyReady_accessor_storage; }
76
- set proxyReady(value) { this.#proxyReady_accessor_storage = value; }
77
- #isDestroyed;
78
- get isDestroyed() {
79
- return this.#isDestroyed;
80
- }
81
- constructor() {
82
- this.#syncScheduled = false;
83
- this.#syncAfterContextCreated = false;
84
- this.#syncWaitForConfirmation = false;
85
- this.logger = new ConsoleLogger('ShadowEnv');
86
- this.ns$ = createSignal();
87
- this.#viewReady_accessor_storage = __runInitializers(this, _viewReady_initializers, false);
88
- this.#proxyReady_accessor_storage = (__runInitializers(this, _viewReady_extraInitializers), __runInitializers(this, _proxyReady_initializers, false));
89
- this.#isDestroyed = (__runInitializers(this, _proxyReady_extraInitializers), false);
90
- this.ready = async () => {
91
- return this.isReady ? this : onceAsync(this, ShadowEnv.ContextCreated);
92
- };
93
- this.#syncIfScheduled = () => {
94
- if (this.#syncScheduled) {
95
- this.#syncNow();
96
- }
97
- };
98
- retain(this, ShadowEnv.ContextCreated);
99
- on(this, ShadowEnv.ContextLost, Priority.AAA, () => {
100
- retainClear(this, ShadowEnv.ContextCreated);
101
- });
102
- createEffect(() => {
103
- if (this.viewReady && this.proxyReady) {
104
- this.view.reCreateChanges();
105
- emit(this, ShadowEnv.ContextCreated, this);
106
- if (this.#syncAfterContextCreated) {
107
- this.#syncAfterContextCreated = false;
108
- this.#syncNow();
109
- }
110
- return () => {
111
- emit(this, ShadowEnv.ContextLost, this);
112
- };
113
- }
114
- }, [findObjectSignalByName(this, 'viewReady'), findObjectSignalByName(this, 'proxyReady')]);
115
- }
116
- get view() {
117
- return this.#comCtx;
118
- }
119
- set view(ctx) {
120
- if (ctx !== this.#comCtx) {
121
- if (this.#comCtx && this.#comCtx.ns && globalThis.__shadowEnvs) {
122
- globalThis.__shadowEnvs.delete(this.#comCtx.ns);
123
- }
124
- this.#comCtx = ctx ?? undefined;
125
- if (this.#comCtx && this.#comCtx.ns) {
126
- globalThis.__shadowEnvs ??= new Map();
127
- if (globalThis.__shadowEnvs.has(this.#comCtx.ns) && globalThis.__shadowEnvs.get(this.#comCtx.ns) !== this) {
128
- if (this.logger.isWarn) {
129
- this.logger.warn('overwrite a namespace already in use', this.#comCtx.ns, globalThis.__shadowEnvs.get(this.#comCtx.ns));
130
- }
131
- }
132
- globalThis.__shadowEnvs.set(this.#comCtx.ns, this);
133
- }
134
- this.viewReady = Boolean(ctx);
135
- }
136
- }
137
- get envProxy() {
138
- return this.#shaObjEnvProxy;
139
- }
140
- set envProxy(proxy) {
141
- if (proxy !== this.#shaObjEnvProxy) {
142
- const prevProxy = this.#shaObjEnvProxy;
143
- this.#shaObjEnvProxy = proxy ?? undefined;
144
- if (this.#shaObjEnvProxy) {
145
- this.#shaObjEnvProxy.onMessageToView = this.#onMessageToView.bind(this);
146
- }
147
- if (prevProxy) {
148
- prevProxy.destroy();
149
- }
150
- this.proxyReady = false;
151
- proxy
152
- ?.start()
153
- .then(() => {
154
- this.proxyReady = true;
155
- })
156
- .catch((error) => {
157
- this.logger.error('failed to start envProxy', error);
158
- this.proxyReady = false;
159
- });
160
- }
161
- }
162
- get isReady() {
163
- return Boolean(this.#comCtx && this.#shaObjEnvProxy && this.proxyReady && !this.isDestroyed);
164
- }
165
- sync() {
166
- if (!this.isReady) {
167
- this.#syncAfterContextCreated = true;
168
- return;
169
- }
170
- if (this.#syncScheduled)
171
- return;
172
- this.#syncScheduled = true;
173
- queueMicrotask(this.#syncIfScheduled);
174
- }
175
- syncWait() {
176
- this.#syncWaitForConfirmation = true;
177
- this.sync();
178
- if (this.#afterNextSync)
179
- return this.#afterNextSync;
180
- this.#afterNextSync = onceAsync(this, ShadowEnv.AfterSync).then((changeTrail) => {
181
- this.#afterNextSync = undefined;
182
- return changeTrail;
183
- });
184
- return this.#afterNextSync;
185
- }
186
- destroy() {
187
- const ns = this.#comCtx?.ns;
188
- this.envProxy?.destroy();
189
- this.envProxy = undefined;
190
- this.view = undefined;
191
- if (ns) {
192
- if (globalThis.__shadowEnvs.has(ns)) {
193
- if (globalThis.__shadowEnvs.get(ns) === this) {
194
- globalThis.__shadowEnvs.delete(ns);
195
- }
196
- }
197
- }
198
- destroyObjectSignals(this);
199
- off(this);
200
- this.#isDestroyed = true;
201
- Object.freeze(this);
202
- }
203
- #syncIfScheduled;
204
- async #syncNow() {
205
- this.#syncScheduled = false;
206
- if (this.isReady) {
207
- const data = this.view.buildChangeTrails();
208
- if (data.length > 0) {
209
- try {
210
- const waitForConfirmation = this.#syncWaitForConfirmation;
211
- this.#syncWaitForConfirmation = false;
212
- await this.envProxy.applyChangeTrail(data, waitForConfirmation);
213
- }
214
- catch (error) {
215
- this.logger.error('failed to apply change trail', error);
216
- }
217
- finally {
218
- emit(this, ShadowEnv.AfterSync, data);
219
- }
220
- }
221
- }
222
- }
223
- #onMessageToView(event) {
224
- if (this.logger.isDebug) {
225
- this.logger.debug('onMessageToView', event.type, event.data);
226
- }
227
- this.view?.dispatchMessage(event.uuid, event.type, event.data, event.traverseChildren);
228
- }
43
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
44
+ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
45
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
46
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
47
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
48
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
49
+ var _proxyReady_dec, _viewReady_dec, _comCtx, _shaObjEnvProxy, _syncScheduled, _syncAfterContextCreated, _syncWaitForConfirmation, _afterNextSync, _init, _viewReady, _proxyReady, _isDestroyed, _syncIfScheduled, _ShadowEnv_instances, syncNow_fn, onMessageToView_fn;
50
+ import { emit, off, on, onceAsync, Priority, retain, retainClear } from "@spearwolf/eventize";
51
+ import { createEffect, createSignal, destroyObjectSignals, findObjectSignalByName } from "@spearwolf/signalize";
52
+ import { signal } from "@spearwolf/signalize/decorators";
53
+ import { ConsoleLogger } from "../utils/ConsoleLogger.js";
54
+ import { ComponentContext } from "./ComponentContext.js";
55
+ _viewReady_dec = [signal()], _proxyReady_dec = [signal()];
56
+ const _ShadowEnv = class _ShadowEnv {
57
+ constructor() {
58
+ __privateAdd(this, _ShadowEnv_instances);
59
+ __privateAdd(this, _comCtx);
60
+ __privateAdd(this, _shaObjEnvProxy);
61
+ __privateAdd(this, _syncScheduled, false);
62
+ __privateAdd(this, _syncAfterContextCreated, false);
63
+ __privateAdd(this, _syncWaitForConfirmation, false);
64
+ __privateAdd(this, _afterNextSync);
65
+ this.logger = new ConsoleLogger("ShadowEnv");
66
+ this.ns$ = createSignal();
67
+ __privateAdd(this, _viewReady, __runInitializers(_init, 8, this, false)), __runInitializers(_init, 11, this);
68
+ __privateAdd(this, _proxyReady, __runInitializers(_init, 12, this, false)), __runInitializers(_init, 15, this);
69
+ __privateAdd(this, _isDestroyed, false);
70
+ this.ready = async () => {
71
+ return this.isReady ? this : onceAsync(this, _ShadowEnv.ContextCreated);
229
72
  };
230
- })();
231
- export { ShadowEnv };
232
- //# sourceMappingURL=ShadowEnv.js.map
73
+ __privateAdd(this, _syncIfScheduled, () => {
74
+ if (__privateGet(this, _syncScheduled)) {
75
+ __privateMethod(this, _ShadowEnv_instances, syncNow_fn).call(this);
76
+ }
77
+ });
78
+ const self = this;
79
+ retain(self, _ShadowEnv.ContextCreated);
80
+ on(self, _ShadowEnv.ContextLost, Priority.AAA, () => {
81
+ retainClear(self, _ShadowEnv.ContextCreated);
82
+ });
83
+ createEffect(() => {
84
+ if (this.viewReady && this.proxyReady) {
85
+ this.view.reCreateChanges();
86
+ emit(self, _ShadowEnv.ContextCreated, self);
87
+ if (__privateGet(this, _syncAfterContextCreated)) {
88
+ __privateSet(this, _syncAfterContextCreated, false);
89
+ __privateMethod(this, _ShadowEnv_instances, syncNow_fn).call(this);
90
+ }
91
+ return () => {
92
+ emit(self, _ShadowEnv.ContextLost, self);
93
+ };
94
+ }
95
+ }, [findObjectSignalByName(this, "viewReady"), findObjectSignalByName(this, "proxyReady")]);
96
+ }
97
+ static get(ns) {
98
+ if (ns == null) return void 0;
99
+ return globalThis.__shadowEnvs?.get(ns);
100
+ }
101
+ get isDestroyed() {
102
+ return __privateGet(this, _isDestroyed);
103
+ }
104
+ get view() {
105
+ return __privateGet(this, _comCtx);
106
+ }
107
+ set view(ctx) {
108
+ if (ctx !== __privateGet(this, _comCtx)) {
109
+ if (__privateGet(this, _comCtx) && __privateGet(this, _comCtx).ns && globalThis.__shadowEnvs) {
110
+ globalThis.__shadowEnvs.delete(__privateGet(this, _comCtx).ns);
111
+ }
112
+ __privateSet(this, _comCtx, ctx ?? void 0);
113
+ if (__privateGet(this, _comCtx) && __privateGet(this, _comCtx).ns) {
114
+ globalThis.__shadowEnvs ??= /* @__PURE__ */ new Map();
115
+ if (globalThis.__shadowEnvs.has(__privateGet(this, _comCtx).ns) && globalThis.__shadowEnvs.get(__privateGet(this, _comCtx).ns) !== this) {
116
+ if (this.logger.isWarn) {
117
+ this.logger.warn(
118
+ "overwrite a namespace already in use",
119
+ __privateGet(this, _comCtx).ns,
120
+ globalThis.__shadowEnvs.get(__privateGet(this, _comCtx).ns)
121
+ );
122
+ }
123
+ }
124
+ globalThis.__shadowEnvs.set(__privateGet(this, _comCtx).ns, this);
125
+ }
126
+ this.viewReady = Boolean(ctx);
127
+ }
128
+ }
129
+ get envProxy() {
130
+ return __privateGet(this, _shaObjEnvProxy);
131
+ }
132
+ set envProxy(proxy) {
133
+ if (proxy !== __privateGet(this, _shaObjEnvProxy)) {
134
+ const prevProxy = __privateGet(this, _shaObjEnvProxy);
135
+ __privateSet(this, _shaObjEnvProxy, proxy ?? void 0);
136
+ if (__privateGet(this, _shaObjEnvProxy)) {
137
+ __privateGet(this, _shaObjEnvProxy).onMessageToView = __privateMethod(this, _ShadowEnv_instances, onMessageToView_fn).bind(this);
138
+ }
139
+ if (prevProxy) {
140
+ prevProxy.destroy();
141
+ }
142
+ this.proxyReady = false;
143
+ proxy?.start().then(() => {
144
+ this.proxyReady = true;
145
+ }).catch((error) => {
146
+ this.logger.error("failed to start envProxy", error);
147
+ this.proxyReady = false;
148
+ });
149
+ }
150
+ }
151
+ get isReady() {
152
+ return Boolean(__privateGet(this, _comCtx) && __privateGet(this, _shaObjEnvProxy) && this.proxyReady && !this.isDestroyed);
153
+ }
154
+ sync() {
155
+ if (!this.isReady) {
156
+ __privateSet(this, _syncAfterContextCreated, true);
157
+ return;
158
+ }
159
+ if (__privateGet(this, _syncScheduled)) return;
160
+ __privateSet(this, _syncScheduled, true);
161
+ queueMicrotask(__privateGet(this, _syncIfScheduled));
162
+ }
163
+ syncWait() {
164
+ __privateSet(this, _syncWaitForConfirmation, true);
165
+ this.sync();
166
+ if (__privateGet(this, _afterNextSync)) return __privateGet(this, _afterNextSync);
167
+ __privateSet(this, _afterNextSync, onceAsync(this, _ShadowEnv.AfterSync).then((changeTrail) => {
168
+ __privateSet(this, _afterNextSync, void 0);
169
+ return changeTrail;
170
+ }));
171
+ return __privateGet(this, _afterNextSync);
172
+ }
173
+ destroy() {
174
+ const ns = __privateGet(this, _comCtx)?.ns;
175
+ this.envProxy?.destroy();
176
+ this.envProxy = void 0;
177
+ this.view = void 0;
178
+ if (ns) {
179
+ if (globalThis.__shadowEnvs.has(ns)) {
180
+ if (globalThis.__shadowEnvs.get(ns) === this) {
181
+ globalThis.__shadowEnvs.delete(ns);
182
+ }
183
+ }
184
+ }
185
+ destroyObjectSignals(this);
186
+ off(this);
187
+ __privateSet(this, _isDestroyed, true);
188
+ Object.freeze(this);
189
+ }
190
+ };
191
+ _init = __decoratorStart(null);
192
+ _comCtx = new WeakMap();
193
+ _shaObjEnvProxy = new WeakMap();
194
+ _syncScheduled = new WeakMap();
195
+ _syncAfterContextCreated = new WeakMap();
196
+ _syncWaitForConfirmation = new WeakMap();
197
+ _afterNextSync = new WeakMap();
198
+ _viewReady = new WeakMap();
199
+ _proxyReady = new WeakMap();
200
+ _isDestroyed = new WeakMap();
201
+ _syncIfScheduled = new WeakMap();
202
+ _ShadowEnv_instances = new WeakSet();
203
+ syncNow_fn = async function() {
204
+ __privateSet(this, _syncScheduled, false);
205
+ if (this.isReady) {
206
+ const data = this.view.buildChangeTrails();
207
+ if (data.length > 0) {
208
+ try {
209
+ const waitForConfirmation = __privateGet(this, _syncWaitForConfirmation);
210
+ __privateSet(this, _syncWaitForConfirmation, false);
211
+ await this.envProxy.applyChangeTrail(data, waitForConfirmation);
212
+ } catch (error) {
213
+ this.logger.error("failed to apply change trail", error);
214
+ } finally {
215
+ emit(this, _ShadowEnv.AfterSync, data);
216
+ }
217
+ }
218
+ }
219
+ };
220
+ onMessageToView_fn = function(event) {
221
+ if (this.logger.isDebug) {
222
+ this.logger.debug("onMessageToView", event.type, event.data);
223
+ }
224
+ this.view?.dispatchMessage(event.uuid, event.type, event.data, event.traverseChildren);
225
+ };
226
+ __decorateElement(_init, 4, "viewReady", _viewReady_dec, _ShadowEnv, _viewReady);
227
+ __decorateElement(_init, 4, "proxyReady", _proxyReady_dec, _ShadowEnv, _proxyReady);
228
+ __decoratorMetadata(_init, _ShadowEnv);
229
+ _ShadowEnv.AfterSync = "afterSync";
230
+ _ShadowEnv.ContextLost = "contextLost";
231
+ _ShadowEnv.ContextCreated = "contextCreated";
232
+ let ShadowEnv = _ShadowEnv;
233
+ export {
234
+ ShadowEnv
235
+ };
236
+ //# sourceMappingURL=ShadowEnv.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"ShadowEnv.js","sourceRoot":"","sources":["../../../src/view/ShadowEnv.ts"],"names":[],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/view/ShadowEnv.ts"],
4
+ "sourcesContent": ["import {emit, off, on, onceAsync, Priority, retain, retainClear} from '@spearwolf/eventize';\nimport {createEffect, createSignal, destroyObjectSignals, findObjectSignalByName} from '@spearwolf/signalize';\nimport {signal} from '@spearwolf/signalize/decorators';\nimport type {MessageToViewEvent} from '../shadow-objects.js';\nimport type {ChangeTrailType, NamespaceType} from '../types.js';\nimport {ConsoleLogger} from '../utils/ConsoleLogger.js';\nimport {ComponentContext} from './ComponentContext.js';\nimport type {IShadowObjectEnvProxy} from './IShadowObjectEnvProxy.js';\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __shadowEnvs: Map<NamespaceType, ShadowEnv> | undefined;\n}\n\nexport class ShadowEnv {\n static AfterSync = 'afterSync';\n static ContextLost = 'contextLost';\n static ContextCreated = 'contextCreated';\n\n static get(ns: NamespaceType): ShadowEnv | undefined {\n if (ns == null) return undefined;\n return globalThis.__shadowEnvs?.get(ns);\n }\n\n #comCtx?: ComponentContext;\n #shaObjEnvProxy?: IShadowObjectEnvProxy;\n #syncScheduled = false;\n #syncAfterContextCreated = false;\n #syncWaitForConfirmation = false;\n #afterNextSync?: Promise<ChangeTrailType>;\n\n readonly logger = new ConsoleLogger('ShadowEnv');\n\n readonly ns$ = createSignal<NamespaceType | undefined>();\n\n @signal() accessor viewReady = false;\n @signal() accessor proxyReady = false;\n\n #isDestroyed = false;\n\n get isDestroyed() {\n return this.#isDestroyed;\n }\n\n constructor() {\n const self = this as ShadowEnv;\n retain(self, ShadowEnv.ContextCreated);\n\n on(self, ShadowEnv.ContextLost, Priority.AAA, () => {\n retainClear(self, ShadowEnv.ContextCreated);\n });\n\n createEffect(() => {\n if (this.viewReady && this.proxyReady) {\n this.view!.reCreateChanges();\n emit(self, ShadowEnv.ContextCreated, self);\n if (this.#syncAfterContextCreated) {\n this.#syncAfterContextCreated = false;\n this.#syncNow();\n }\n return () => {\n emit(self, ShadowEnv.ContextLost, self);\n };\n }\n }, [findObjectSignalByName(this, 'viewReady'), findObjectSignalByName(this, 'proxyReady')]);\n }\n\n get view(): ComponentContext | undefined {\n return this.#comCtx;\n }\n\n set view(ctx: ComponentContext | null | undefined) {\n if (ctx !== this.#comCtx) {\n if (this.#comCtx && this.#comCtx.ns && globalThis.__shadowEnvs) {\n globalThis.__shadowEnvs.delete(this.#comCtx.ns);\n }\n\n this.#comCtx = ctx ?? undefined;\n\n if (this.#comCtx && this.#comCtx.ns) {\n globalThis.__shadowEnvs ??= new Map();\n if (globalThis.__shadowEnvs.has(this.#comCtx.ns) && globalThis.__shadowEnvs.get(this.#comCtx.ns) !== this) {\n if (this.logger.isWarn) {\n this.logger.warn(\n 'overwrite a namespace already in use',\n this.#comCtx.ns,\n globalThis.__shadowEnvs.get(this.#comCtx.ns),\n );\n }\n }\n globalThis.__shadowEnvs.set(this.#comCtx.ns, this);\n }\n\n this.viewReady = Boolean(ctx);\n }\n }\n\n get envProxy(): IShadowObjectEnvProxy | undefined {\n return this.#shaObjEnvProxy;\n }\n\n set envProxy(proxy: IShadowObjectEnvProxy | null | undefined) {\n if (proxy !== this.#shaObjEnvProxy) {\n const prevProxy = this.#shaObjEnvProxy;\n this.#shaObjEnvProxy = proxy ?? undefined;\n\n if (this.#shaObjEnvProxy) {\n this.#shaObjEnvProxy.onMessageToView = this.#onMessageToView.bind(this);\n }\n\n if (prevProxy) {\n prevProxy.destroy();\n }\n\n this.proxyReady = false;\n\n proxy\n ?.start()\n .then(() => {\n this.proxyReady = true;\n })\n .catch((error) => {\n this.logger.error('failed to start envProxy', error);\n this.proxyReady = false;\n });\n }\n }\n\n get isReady(): boolean {\n return Boolean(this.#comCtx && this.#shaObjEnvProxy && this.proxyReady && !this.isDestroyed);\n }\n\n readonly ready = async (): Promise<ShadowEnv> => {\n return this.isReady ? this : onceAsync(this as ShadowEnv, ShadowEnv.ContextCreated);\n };\n\n sync(): void {\n if (!this.isReady) {\n this.#syncAfterContextCreated = true;\n return;\n }\n if (this.#syncScheduled) return;\n this.#syncScheduled = true;\n queueMicrotask(this.#syncIfScheduled);\n }\n\n syncWait(): Promise<ChangeTrailType> {\n this.#syncWaitForConfirmation = true;\n this.sync();\n if (this.#afterNextSync) return this.#afterNextSync;\n this.#afterNextSync = onceAsync<ChangeTrailType>(this as ShadowEnv, ShadowEnv.AfterSync).then((changeTrail) => {\n this.#afterNextSync = undefined;\n return changeTrail;\n });\n return this.#afterNextSync;\n }\n\n destroy() {\n const ns = this.#comCtx?.ns;\n\n this.envProxy?.destroy();\n this.envProxy = undefined;\n this.view = undefined;\n\n if (ns) {\n if (globalThis.__shadowEnvs.has(ns)) {\n if (globalThis.__shadowEnvs.get(ns) === this) {\n globalThis.__shadowEnvs.delete(ns);\n }\n }\n }\n\n destroyObjectSignals(this);\n off(this);\n\n this.#isDestroyed = true;\n Object.freeze(this);\n }\n\n #syncIfScheduled = () => {\n if (this.#syncScheduled) {\n this.#syncNow();\n }\n };\n\n async #syncNow() {\n this.#syncScheduled = false;\n if (this.isReady) {\n const data = this.view!.buildChangeTrails();\n if (data.length > 0) {\n try {\n const waitForConfirmation = this.#syncWaitForConfirmation;\n this.#syncWaitForConfirmation = false;\n await this.envProxy!.applyChangeTrail(data, waitForConfirmation);\n } catch (error) {\n this.logger.error('failed to apply change trail', error);\n } finally {\n emit(this as ShadowEnv, ShadowEnv.AfterSync, data);\n }\n }\n }\n }\n\n #onMessageToView(event: Omit<MessageToViewEvent, 'transferables'>) {\n if (this.logger.isDebug) {\n this.logger.debug('onMessageToView', event.type, event.data);\n }\n this.view?.dispatchMessage(event.uuid, event.type, event.data, event.traverseChildren);\n }\n}"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -15,11 +15,20 @@ export declare class ViewComponent {
15
15
  */
16
16
  get order(): number;
17
17
  set order(order: number | null | undefined);
18
+ /**
19
+ * Whether the corresponding entity should be destroyed when its parent entity is destroyed.
20
+ *
21
+ * Set via the constructor option of the same name; immutable after creation.
22
+ * Children that opt out (the default) are promoted to root entities when their
23
+ * parent is destroyed, so they remain reachable.
24
+ */
25
+ get autoDestructionOnParentRemoval(): boolean;
18
26
  constructor(token: string, options?: {
19
27
  parent?: ViewComponent;
20
28
  order?: number;
21
29
  context?: ComponentContext;
22
30
  uuid?: string;
31
+ autoDestructionOnParentRemoval?: boolean;
23
32
  });
24
33
  isChildOf(parent: ViewComponent): boolean;
25
34
  removeFromParent(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ViewComponent.d.ts","sourceRoot":"","sources":["../../../src/view/ViewComponent.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AASvD,qBAAa,aAAa;;IAUxB,IAAI,IAAI,WAEP;IAED,IAAI,KAAK,IAIQ,MAAM,GAAG,SAAS,CAFlC;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAKlC;IAED,IAAI,MAAM,IAAI,aAAa,GAAG,SAAS,CAEtC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,EASlD;IAED,IAAI,OAAO,IAAI,gBAAgB,GAAG,SAAS,CAE1C;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAUvD;IAED;;;;OAIG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAMzC;gBAEW,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAC,MAAM,CAAC,EAAE,aAAa,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC;IAsBxH,SAAS,CAAC,MAAM,EAAE,aAAa;IAI/B,gBAAgB;IAShB,QAAQ,CAAC,KAAK,EAAE,aAAa;IAW7B,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO;IAIlF,cAAc,CAAC,IAAI,EAAE,MAAM;IAI3B,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,YAAY,EAAE;IAItF,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO;IAUpE,OAAO;CAKR"}
1
+ {"version":3,"file":"ViewComponent.d.ts","sourceRoot":"","sources":["../../../src/view/ViewComponent.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AASvD,qBAAa,aAAa;;IAWxB,IAAI,IAAI,WAEP;IAED,IAAI,KAAK,IAIQ,MAAM,GAAG,SAAS,CAFlC;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAKlC;IAED,IAAI,MAAM,IAAI,aAAa,GAAG,SAAS,CAEtC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,EASlD;IAED,IAAI,OAAO,IAAI,gBAAgB,GAAG,SAAS,CAE1C;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAUvD;IAED;;;;OAIG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAMzC;IAED;;;;;;OAMG;IACH,IAAI,8BAA8B,IAAI,OAAO,CAE5C;gBAGC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,gBAAgB,CAAC;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,8BAA8B,CAAC,EAAE,OAAO,CAAC;KAC1C;IAwBH,SAAS,CAAC,MAAM,EAAE,aAAa;IAI/B,gBAAgB;IAShB,QAAQ,CAAC,KAAK,EAAE,aAAa;IAW7B,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO;IAIlF,cAAc,CAAC,IAAI,EAAE,MAAM;IAI3B,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,YAAY,EAAE;IAItF,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO;IAUpE,OAAO;CAKR"}