@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,135 +1,146 @@
1
- import { emit, onceAsync, retain } from '@spearwolf/eventize';
2
- import { AppliedChangeTrail, ChangeTrail, Configure, Destroy, Destroyed, ImportedModule, Loaded, MessageToView, WorkerChangeTrailTimeout, WorkerConfigureTimeout, WorkerDestroyTimeout, WorkerLoadTimeout, } from '../constants.js';
3
- import createWorker from '../create-worker.js';
4
- import { CONSOLE_LOGGER, ConsoleLogger } from '../utils/ConsoleLogger.js';
5
- import { toUrlString } from '../utils/toUrlString.js';
6
- import { waitForMessageOfType } from '../utils/waitForMessageOfType.js';
1
+ import { emit, onceAsync, retain } from "@spearwolf/eventize";
2
+ import {
3
+ AppliedChangeTrail,
4
+ ChangeTrail,
5
+ Configure,
6
+ Destroy,
7
+ Destroyed,
8
+ ImportedModule,
9
+ Loaded,
10
+ MessageToView,
11
+ WorkerChangeTrailTimeout,
12
+ WorkerConfigureTimeout,
13
+ WorkerDestroyTimeout,
14
+ WorkerLoadTimeout
15
+ } from "../constants.js";
16
+ import createWorker from "../create-worker.js";
17
+ import { CONSOLE_LOGGER, ConsoleLogger } from "../utils/ConsoleLogger.js";
18
+ import { toUrlString } from "../utils/toUrlString.js";
19
+ import { waitForMessageOfType } from "../utils/waitForMessageOfType.js";
7
20
  const removeTransferables = (changeTrail) => {
8
- let transferables;
9
- if (changeTrail != null && Array.isArray(changeTrail)) {
10
- for (const changeItem of changeTrail) {
11
- if (changeItem.transferables) {
12
- if (!transferables) {
13
- transferables = changeItem.transferables;
14
- }
15
- else {
16
- transferables = [...transferables, ...changeItem.transferables];
17
- }
18
- delete changeItem.transferables;
19
- }
21
+ let transferables;
22
+ if (changeTrail != null && Array.isArray(changeTrail)) {
23
+ for (const changeItem of changeTrail) {
24
+ if (changeItem.transferables) {
25
+ if (!transferables) {
26
+ transferables = changeItem.transferables;
27
+ } else {
28
+ transferables = [...transferables, ...changeItem.transferables];
20
29
  }
30
+ delete changeItem.transferables;
31
+ }
21
32
  }
22
- return transferables;
33
+ }
34
+ return transferables;
23
35
  };
24
- export class RemoteWorkerEnv {
25
- static { this.WorkerLoaded = 'workerLoaded'; }
26
- #worker;
27
- #isDestroyed;
28
- #changeTrailSerial;
29
- get isDestroyed() {
30
- return this.#isDestroyed;
31
- }
32
- get workerLoaded() {
33
- return onceAsync(this, RemoteWorkerEnv.WorkerLoaded);
34
- }
35
- constructor() {
36
- this.#isDestroyed = false;
37
- this.#changeTrailSerial = 0;
38
- this.logger = new ConsoleLogger('RemoteWorkerEnv');
39
- retain(this, RemoteWorkerEnv.WorkerLoaded);
40
- }
41
- async start() {
42
- if (this.#worker) {
43
- if (this.logger.isWarn) {
44
- this.logger.warn('already started');
45
- }
46
- return this.workerLoaded.then(() => {
47
- if (this.isDestroyed) {
48
- throw 'worker was destroyed';
49
- }
50
- return undefined;
51
- });
52
- }
53
- const worker = (this.#worker = createWorker());
54
- this.configureConsoleLogger(worker);
55
- try {
56
- await waitForMessageOfType(worker, Loaded, WorkerLoadTimeout);
57
- if (this.isDestroyed) {
58
- throw 'worker was destroyed';
59
- }
60
- worker.addEventListener('message', this.onMessageFromWorker.bind(this));
61
- queueMicrotask(() => {
62
- emit(this, RemoteWorkerEnv.WorkerLoaded, this);
63
- });
64
- }
65
- catch (error) {
66
- this.logger.error('failed to start', error);
67
- this.#worker = undefined;
68
- throw error;
36
+ class RemoteWorkerEnv {
37
+ constructor() {
38
+ this.#isDestroyed = false;
39
+ this.#changeTrailSerial = 0;
40
+ this.logger = new ConsoleLogger("RemoteWorkerEnv");
41
+ retain(this, RemoteWorkerEnv.WorkerLoaded);
42
+ }
43
+ static {
44
+ this.WorkerLoaded = "workerLoaded";
45
+ }
46
+ #worker;
47
+ #isDestroyed;
48
+ #changeTrailSerial;
49
+ get isDestroyed() {
50
+ return this.#isDestroyed;
51
+ }
52
+ get workerLoaded() {
53
+ return onceAsync(this, RemoteWorkerEnv.WorkerLoaded);
54
+ }
55
+ async start() {
56
+ if (this.#worker) {
57
+ if (this.logger.isWarn) {
58
+ this.logger.warn("already started");
59
+ }
60
+ return this.workerLoaded.then(() => {
61
+ if (this.isDestroyed) {
62
+ throw "worker was destroyed";
69
63
  }
64
+ return void 0;
65
+ });
70
66
  }
71
- applyChangeTrail(changeTrail, waitForConfirmation) {
72
- const transferables = removeTransferables(changeTrail);
73
- const message = { type: ChangeTrail, changeTrail };
74
- const serial = ++this.#changeTrailSerial;
75
- if (waitForConfirmation) {
76
- message.serial = serial;
77
- }
78
- this.#worker.postMessage(message, transferables);
79
- if (waitForConfirmation) {
80
- return waitForMessageOfType(this.#worker, AppliedChangeTrail, WorkerChangeTrailTimeout, (data) => {
81
- if (data.error)
82
- throw data.error;
83
- return data.serial === serial;
84
- });
85
- }
86
- else {
87
- return Promise.resolve();
88
- }
67
+ const worker = this.#worker = createWorker();
68
+ this.configureConsoleLogger(worker);
69
+ try {
70
+ await waitForMessageOfType(worker, Loaded, WorkerLoadTimeout);
71
+ if (this.isDestroyed) {
72
+ throw "worker was destroyed";
73
+ }
74
+ worker.addEventListener("message", this.onMessageFromWorker.bind(this));
75
+ queueMicrotask(() => {
76
+ emit(this, RemoteWorkerEnv.WorkerLoaded, this);
77
+ });
78
+ } catch (error) {
79
+ this.logger.error("failed to start", error);
80
+ this.#worker = void 0;
81
+ throw error;
89
82
  }
90
- importScript(url) {
91
- url = toUrlString(url);
92
- this.#worker.postMessage({ type: Configure, importModule: url });
93
- return waitForMessageOfType(this.#worker, ImportedModule, WorkerConfigureTimeout, (data) => {
94
- if (data.error)
95
- throw data.error;
96
- return data.url === url;
97
- });
83
+ }
84
+ applyChangeTrail(changeTrail, waitForConfirmation) {
85
+ const transferables = removeTransferables(changeTrail);
86
+ const message = { type: ChangeTrail, changeTrail };
87
+ const serial = ++this.#changeTrailSerial;
88
+ if (waitForConfirmation) {
89
+ message.serial = serial;
98
90
  }
99
- destroy() {
100
- if (!this.#worker)
101
- return;
102
- const worker = this.#worker;
103
- this.#worker = undefined;
104
- this.#isDestroyed = true;
105
- worker.postMessage({ type: Destroy });
106
- waitForMessageOfType(worker, Destroyed, WorkerDestroyTimeout).finally(() => {
107
- worker.terminate();
108
- });
91
+ this.#worker.postMessage(message, transferables);
92
+ if (waitForConfirmation) {
93
+ return waitForMessageOfType(this.#worker, AppliedChangeTrail, WorkerChangeTrailTimeout, (data) => {
94
+ if (data.error) throw data.error;
95
+ return data.serial === serial;
96
+ });
97
+ } else {
98
+ return Promise.resolve();
109
99
  }
110
- onMessageFromWorker(event) {
111
- if (event.data?.type === MessageToView) {
112
- this.onMessageToView?.(event.data.data);
113
- }
114
- else if (this.logger.isDebug) {
115
- this.logger.debug('message from worker', event);
116
- }
100
+ }
101
+ importScript(url) {
102
+ url = toUrlString(url);
103
+ this.#worker.postMessage({ type: Configure, importModule: url });
104
+ return waitForMessageOfType(this.#worker, ImportedModule, WorkerConfigureTimeout, (data) => {
105
+ if (data.error) throw data.error;
106
+ return data.url === url;
107
+ });
108
+ }
109
+ destroy() {
110
+ if (!this.#worker) return;
111
+ const worker = this.#worker;
112
+ this.#worker = void 0;
113
+ this.#isDestroyed = true;
114
+ worker.postMessage({ type: Destroy });
115
+ waitForMessageOfType(worker, Destroyed, WorkerDestroyTimeout).finally(() => {
116
+ worker.terminate();
117
+ });
118
+ }
119
+ onMessageFromWorker(event) {
120
+ if (event.data?.type === MessageToView) {
121
+ this.onMessageToView?.(event.data.data);
122
+ } else if (this.logger.isDebug) {
123
+ this.logger.debug("message from worker", event);
117
124
  }
118
- configureConsoleLogger(worker) {
119
- const workerConfigKey = `${CONSOLE_LOGGER}.RemoteWorkerEnv.workerConfig`;
120
- const workerConfig = JSON.parse(localStorage.getItem(workerConfigKey) ?? '{}');
121
- if (this.logger.isInfo) {
122
- this.logger.info('load console-logger worker config', { localStorageKey: workerConfigKey, workerConfig });
123
- }
124
- worker.postMessage({
125
- type: CONSOLE_LOGGER,
126
- config: {
127
- ...ConsoleLogger.sharedConfig,
128
- enable: this.logger.isEnabled,
129
- ...workerConfig,
130
- ...(ConsoleLogger.isEnabled ? {} : { enable: false }),
131
- },
132
- });
125
+ }
126
+ configureConsoleLogger(worker) {
127
+ const workerConfigKey = `${CONSOLE_LOGGER}.RemoteWorkerEnv.workerConfig`;
128
+ const workerConfig = JSON.parse(localStorage.getItem(workerConfigKey) ?? "{}");
129
+ if (this.logger.isInfo) {
130
+ this.logger.info("load console-logger worker config", { localStorageKey: workerConfigKey, workerConfig });
133
131
  }
132
+ worker.postMessage({
133
+ type: CONSOLE_LOGGER,
134
+ config: {
135
+ ...ConsoleLogger.sharedConfig,
136
+ enable: this.logger.isEnabled,
137
+ ...workerConfig,
138
+ ...ConsoleLogger.isEnabled ? {} : { enable: false }
139
+ }
140
+ });
141
+ }
134
142
  }
135
- //# sourceMappingURL=RemoteWorkerEnv.js.map
143
+ export {
144
+ RemoteWorkerEnv
145
+ };
146
+ //# sourceMappingURL=RemoteWorkerEnv.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"RemoteWorkerEnv.js","sourceRoot":"","sources":["../../../src/view/RemoteWorkerEnv.ts"],"names":[],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/view/RemoteWorkerEnv.ts"],
4
+ "sourcesContent": ["import {emit, onceAsync, retain} from '@spearwolf/eventize';\nimport {\n AppliedChangeTrail,\n ChangeTrail,\n Configure,\n Destroy,\n Destroyed,\n ImportedModule,\n Loaded,\n MessageToView,\n WorkerChangeTrailTimeout,\n WorkerConfigureTimeout,\n WorkerDestroyTimeout,\n WorkerLoadTimeout,\n} from '../constants.js';\nimport createWorker from '../create-worker.js';\nimport type {AppliedChangeTrailEvent, ChangeTrailType, ImportedModuleEvent, TransferablesType} from '../types.js';\nimport {CONSOLE_LOGGER, ConsoleLogger} from '../utils/ConsoleLogger.js';\nimport {toUrlString} from '../utils/toUrlString.js';\nimport {waitForMessageOfType} from '../utils/waitForMessageOfType.js';\nimport type {IShadowObjectEnvProxy} from './IShadowObjectEnvProxy.js';\n\nconst removeTransferables = (changeTrail: ChangeTrailType): TransferablesType | undefined => {\n let transferables: TransferablesType | undefined;\n\n if (changeTrail != null && Array.isArray(changeTrail)) {\n for (const changeItem of changeTrail) {\n if (changeItem.transferables) {\n if (!transferables) {\n transferables = changeItem.transferables;\n } else {\n transferables = [...transferables, ...changeItem.transferables];\n }\n delete changeItem.transferables;\n }\n }\n }\n\n return transferables;\n};\n\nexport class RemoteWorkerEnv implements IShadowObjectEnvProxy {\n static WorkerLoaded = 'workerLoaded';\n\n #worker?: Worker;\n #isDestroyed = false;\n #changeTrailSerial = 0;\n\n readonly logger = new ConsoleLogger('RemoteWorkerEnv');\n\n get isDestroyed(): boolean {\n return this.#isDestroyed;\n }\n\n get workerLoaded(): Promise<RemoteWorkerEnv> {\n return onceAsync<RemoteWorkerEnv>(this as RemoteWorkerEnv, RemoteWorkerEnv.WorkerLoaded);\n }\n\n constructor() {\n retain(this as RemoteWorkerEnv, RemoteWorkerEnv.WorkerLoaded);\n }\n\n async start(): Promise<void> {\n if (this.#worker) {\n if (this.logger.isWarn) {\n this.logger.warn('already started');\n }\n\n return this.workerLoaded.then((): void => {\n if (this.isDestroyed) {\n throw 'worker was destroyed';\n }\n return undefined;\n });\n }\n\n const worker = (this.#worker = createWorker());\n\n this.configureConsoleLogger(worker);\n\n try {\n await waitForMessageOfType(worker, Loaded, WorkerLoadTimeout);\n\n if (this.isDestroyed) {\n throw 'worker was destroyed';\n }\n\n worker.addEventListener('message', this.onMessageFromWorker.bind(this));\n\n queueMicrotask(() => {\n emit(this as RemoteWorkerEnv, RemoteWorkerEnv.WorkerLoaded, this);\n });\n } catch (error) {\n this.logger.error('failed to start', error);\n this.#worker = undefined;\n throw error;\n }\n }\n\n applyChangeTrail(changeTrail: ChangeTrailType, waitForConfirmation: boolean): Promise<void> {\n const transferables = removeTransferables(changeTrail);\n const message = {type: ChangeTrail, changeTrail} as any;\n\n const serial = ++this.#changeTrailSerial;\n if (waitForConfirmation) {\n message.serial = serial;\n }\n\n this.#worker.postMessage(message, transferables);\n\n if (waitForConfirmation) {\n return waitForMessageOfType(this.#worker, AppliedChangeTrail, WorkerChangeTrailTimeout, (data: AppliedChangeTrailEvent) => {\n if (data.error) throw data.error;\n return data.serial === serial;\n });\n } else {\n return Promise.resolve();\n }\n }\n\n importScript(url: URL | string): Promise<void> {\n url = toUrlString(url);\n this.#worker.postMessage({type: Configure, importModule: url});\n return waitForMessageOfType(this.#worker, ImportedModule, WorkerConfigureTimeout, (data: ImportedModuleEvent) => {\n if (data.error) throw data.error;\n return data.url === url;\n });\n }\n\n destroy(): void {\n if (!this.#worker) return;\n\n const worker = this.#worker;\n this.#worker = undefined;\n\n this.#isDestroyed = true;\n\n worker.postMessage({type: Destroy});\n\n waitForMessageOfType(worker, Destroyed, WorkerDestroyTimeout).finally(() => {\n worker.terminate();\n });\n }\n\n private onMessageFromWorker(event: MessageEvent) {\n if (event.data?.type === MessageToView) {\n (this as IShadowObjectEnvProxy).onMessageToView?.(event.data.data);\n } else if (this.logger.isDebug) {\n this.logger.debug('message from worker', event);\n }\n }\n\n private configureConsoleLogger(worker: Worker) {\n const workerConfigKey = `${CONSOLE_LOGGER}.RemoteWorkerEnv.workerConfig`;\n const workerConfig = JSON.parse(localStorage.getItem(workerConfigKey) ?? '{}');\n\n if (this.logger.isInfo) {\n this.logger.info('load console-logger worker config', {localStorageKey: workerConfigKey, workerConfig});\n }\n\n worker.postMessage({\n type: CONSOLE_LOGGER,\n config: {\n ...ConsoleLogger.sharedConfig,\n enable: this.logger.isEnabled,\n ...workerConfig,\n ...(ConsoleLogger.isEnabled ? {} : {enable: false}),\n },\n });\n }\n}"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"ShadowEnv.d.ts","sourceRoot":"","sources":["../../../src/view/ShadowEnv.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,eAAe,EAAE,aAAa,EAAC,MAAM,aAAa,CAAC;AAChE,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,4BAA4B,CAAC;AAEtE,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,YAAY,EAAE,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC;CAC7D;AAED,qBAAa,SAAS;;IACpB,MAAM,CAAC,SAAS,SAAe;IAC/B,MAAM,CAAC,WAAW,SAAiB;IACnC,MAAM,CAAC,cAAc,SAAoB;IAEzC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,GAAG,SAAS,GAAG,SAAS;IAYpD,QAAQ,CAAC,MAAM,gBAAkC;IAEjD,QAAQ,CAAC,GAAG,uDAA6C;IAE/C,QAAQ,CAAC,SAAS,UAAS;IAC3B,QAAQ,CAAC,UAAU,UAAS;IAItC,IAAI,WAAW,YAEd;;IAwBD,IAAI,IAAI,IAAI,gBAAgB,GAAG,SAAS,CAEvC;IAED,IAAI,IAAI,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAwBhD;IAED,IAAI,QAAQ,IAAI,qBAAqB,GAAG,SAAS,CAEhD;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,EAyB3D;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,QAAQ,CAAC,KAAK,QAAa,OAAO,CAAC,SAAS,CAAC,CAE3C;IAEF,IAAI,IAAI,IAAI;IAUZ,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC;IAWpC,OAAO;CAoDR"}
1
+ {"version":3,"file":"ShadowEnv.d.ts","sourceRoot":"","sources":["../../../src/view/ShadowEnv.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,eAAe,EAAE,aAAa,EAAC,MAAM,aAAa,CAAC;AAChE,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,4BAA4B,CAAC;AAEtE,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,YAAY,EAAE,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC;CAC7D;AAED,qBAAa,SAAS;;IACpB,MAAM,CAAC,SAAS,SAAe;IAC/B,MAAM,CAAC,WAAW,SAAiB;IACnC,MAAM,CAAC,cAAc,SAAoB;IAEzC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,GAAG,SAAS,GAAG,SAAS;IAYpD,QAAQ,CAAC,MAAM,gBAAkC;IAEjD,QAAQ,CAAC,GAAG,uDAA6C;IAE/C,QAAQ,CAAC,SAAS,UAAS;IAC3B,QAAQ,CAAC,UAAU,UAAS;IAItC,IAAI,WAAW,YAEd;;IAyBD,IAAI,IAAI,IAAI,gBAAgB,GAAG,SAAS,CAEvC;IAED,IAAI,IAAI,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAwBhD;IAED,IAAI,QAAQ,IAAI,qBAAqB,GAAG,SAAS,CAEhD;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,EAyB3D;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,QAAQ,CAAC,KAAK,QAAa,OAAO,CAAC,SAAS,CAAC,CAE3C;IAEF,IAAI,IAAI,IAAI;IAUZ,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC;IAWpC,OAAO;CAoDR"}