@drayman/core 2.10.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,3 +1,37 @@
1
+ declare type ComponentInstance = {
2
+ heapLimit: number;
3
+ componentName: string;
4
+ heartbeatLimitMs: number;
5
+ externalLimit: number;
6
+ terminatingPromise: Promise<void> | null;
7
+ emit: any;
8
+ lastHeartbeat: number;
9
+ heapUsed: number;
10
+ externalUsed: number;
11
+ eventsSub?: {
12
+ unsubscribe: () => void;
13
+ };
14
+ component: string;
15
+ startDate: Date;
16
+ worker: any;
17
+ eventRequests: {
18
+ [requestId: string]: {
19
+ onSuccess: (data: {
20
+ result: any;
21
+ }) => void;
22
+ onError: (data: {
23
+ err: any;
24
+ }) => void;
25
+ canceled: boolean;
26
+ };
27
+ };
28
+ connectionId: string;
29
+ namespaceId: string;
30
+ meta?: any;
31
+ };
32
+ export declare const componentInstances: {
33
+ [componentInstanceId: string]: ComponentInstance;
34
+ };
1
35
  export declare const handleComponentEvent: ({ componentInstanceId, eventName, options, files, onSuccess, onError }: {
2
36
  componentInstanceId: any;
3
37
  eventName: any;
@@ -12,11 +46,11 @@ export declare const handleComponentEvent: ({ componentInstanceId, eventName, op
12
46
  export declare function getElementsScriptPaths({ nodeModulesPath }: {
13
47
  nodeModulesPath?: any;
14
48
  }): Promise<{}>;
15
- export declare const onUpdateComponentInstanceProps: ({ componentInstanceId, options, }: {
49
+ export declare const onUpdateComponentInstanceProps: ({ componentInstanceId, options }: {
16
50
  componentInstanceId: any;
17
51
  options: any;
18
52
  }) => void;
19
- export declare const onHandleBrowserCallback: ({ callbackId, data, }: {
53
+ export declare const onHandleBrowserCallback: ({ callbackId, data }: {
20
54
  callbackId: any;
21
55
  data: any;
22
56
  }) => void;
@@ -31,7 +65,7 @@ export declare const saveComponent: ({ script, outputFile, scriptPath }: {
31
65
  outputFile: any;
32
66
  scriptPath: any;
33
67
  }) => Promise<void>;
34
- export declare const onInitializeComponentInstance: ({ namespaceId, extensionsPath, extensionsOptions, componentNamePrefix, componentName, componentRootDir, componentInstanceId, componentOptions, connectionId, emit, onComponentInstanceConsole, browserCommands, serverCommands, onEventHubEvent, }: {
68
+ export declare const onInitializeComponentInstance: ({ namespaceId, extensionsPath, extensionsOptions, componentNamePrefix, componentName, componentRootDir, componentInstanceId, componentOptions, connectionId, emit, onComponentInstanceConsole, browserCommands, serverCommands, onEventHubEvent, heapLimit, externalLimit, heartbeatLimitMs, meta, }: {
35
69
  namespaceId?: any;
36
70
  extensionsPath?: any;
37
71
  extensionsOptions?: any;
@@ -46,6 +80,10 @@ export declare const onInitializeComponentInstance: ({ namespaceId, extensionsPa
46
80
  browserCommands: any;
47
81
  serverCommands: any;
48
82
  onEventHubEvent?: any;
83
+ heapLimit?: number;
84
+ externalLimit?: number;
85
+ heartbeatLimitMs?: number;
86
+ meta?: any;
49
87
  }) => Promise<void>;
50
88
  export declare const onDisconnect: ({ connectionId }: {
51
89
  connectionId: any;
@@ -53,21 +91,4 @@ export declare const onDisconnect: ({ connectionId }: {
53
91
  export declare const onDestroyComponentInstance: ({ componentInstanceId }: {
54
92
  componentInstanceId: any;
55
93
  }) => Promise<void>;
56
- export declare const componentInstances: {
57
- [componentInstanceId: string]: {
58
- terminate: () => Promise<void>;
59
- worker: any;
60
- eventRequests: {
61
- [requestId: string]: {
62
- onSuccess: (data: {
63
- result: any;
64
- }) => void;
65
- onError: (data: {
66
- err: any;
67
- }) => void;
68
- };
69
- };
70
- connectionId: string;
71
- namespaceId: string;
72
- };
73
- };
94
+ export {};
package/dist/index.js CHANGED
@@ -3,14 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.componentInstances = exports.onDestroyComponentInstance = exports.onDisconnect = exports.onInitializeComponentInstance = exports.saveComponent = exports.handleEventHubEvent = exports.onHandleBrowserCallback = exports.onUpdateComponentInstanceProps = exports.getElementsScriptPaths = exports.handleComponentEvent = void 0;
6
+ exports.onDestroyComponentInstance = exports.onDisconnect = exports.onInitializeComponentInstance = exports.saveComponent = exports.handleEventHubEvent = exports.onHandleBrowserCallback = exports.onUpdateComponentInstanceProps = exports.getElementsScriptPaths = exports.handleComponentEvent = exports.componentInstances = void 0;
7
7
  const fs_extra_1 = __importDefault(require("fs-extra"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  const shortid_1 = __importDefault(require("shortid"));
10
10
  const typescript_1 = __importDefault(require("typescript"));
11
11
  const threads_1 = require("threads");
12
12
  const child_process_1 = require("child_process");
13
- const lodash_1 = __importDefault(require("lodash"));
14
13
  const getNpmPackages = (nodeModulesPath) => {
15
14
  return new Promise((resolve) => {
16
15
  child_process_1.exec(`npm ls -a -p`, { cwd: nodeModulesPath, }, function (error, stdout, stderr) {
@@ -18,24 +17,169 @@ const getNpmPackages = (nodeModulesPath) => {
18
17
  });
19
18
  });
20
19
  };
21
- const handleComponentEvent = ({ componentInstanceId, eventName, options, files, onSuccess, onError }) => {
22
- options = options || {};
23
- if (typeof options === 'string') {
24
- options = JSON.parse(options);
20
+ const delay = (ms) => {
21
+ return new Promise(r => setTimeout(r, ms));
22
+ };
23
+ const toMB = (x) => {
24
+ return Math.round((x / 1048576) * 10) / 10;
25
+ };
26
+ const getPct = (num, den) => {
27
+ return Math.min(100, Math.round((den > 0 ? (num / den) : 0) * 100));
28
+ };
29
+ const withTimeout = async (p, ms) => {
30
+ return Promise.race([
31
+ p,
32
+ (async () => {
33
+ await delay(ms);
34
+ throw new Error(`Timed out after ${ms} ms`);
35
+ })()
36
+ ]);
37
+ };
38
+ const safeParse = (value) => {
39
+ if (typeof value !== 'string') {
40
+ return value;
41
+ }
42
+ try {
43
+ return JSON.parse(value);
44
+ }
45
+ catch {
46
+ return {};
47
+ }
48
+ };
49
+ const garbage = {
50
+ connections: new Set(),
51
+ componentInstances: new Map(),
52
+ };
53
+ const markConnectionGarbage = (connectionId) => {
54
+ garbage.connections.add(connectionId);
55
+ clearGarbage();
56
+ };
57
+ const markComponentGarbage = (componentInstanceId, opts = {}) => {
58
+ const prev = garbage.componentInstances.get(componentInstanceId) || {};
59
+ garbage.componentInstances.set(componentInstanceId, {
60
+ skipOnDestroy: Boolean(prev.skipOnDestroy || opts.skipOnDestroy),
61
+ });
62
+ clearGarbage();
63
+ };
64
+ const clearGarbage = () => {
65
+ const aliveIds = Object.keys(exports.componentInstances);
66
+ const fromConnections = new Map();
67
+ for (const id of aliveIds) {
68
+ const instance = exports.componentInstances[id];
69
+ if (instance && garbage.connections.has(instance.connectionId)) {
70
+ fromConnections.set(id, { skipOnDestroy: false });
71
+ }
72
+ }
73
+ const explicit = new Map(garbage.componentInstances);
74
+ const toTerminate = new Map();
75
+ for (const [id, opts] of fromConnections) {
76
+ toTerminate.set(id, { skipOnDestroy: Boolean(opts.skipOnDestroy) });
77
+ }
78
+ for (const [id, opts] of explicit) {
79
+ const prev = toTerminate.get(id) || { skipOnDestroy: false };
80
+ toTerminate.set(id, { skipOnDestroy: Boolean(prev.skipOnDestroy || opts.skipOnDestroy) });
81
+ }
82
+ for (const [id, opts] of toTerminate) {
83
+ const instance = exports.componentInstances[id];
84
+ if (!instance || instance.terminatingPromise) {
85
+ continue;
86
+ }
87
+ terminateComponentInstance(id, Boolean(opts.skipOnDestroy));
88
+ }
89
+ garbage.componentInstances.clear();
90
+ garbage.connections.clear();
91
+ };
92
+ async function terminateComponentInstance(componentInstanceId, skipOnDestroy = false) {
93
+ const instance = exports.componentInstances[componentInstanceId];
94
+ if (!instance) {
95
+ return;
25
96
  }
97
+ if (instance.terminatingPromise) {
98
+ return instance.terminatingPromise;
99
+ }
100
+ instance.terminatingPromise = (async () => {
101
+ for (const requestId of Object.keys(instance.eventRequests)) {
102
+ try {
103
+ instance.eventRequests[requestId].onError({ err: `Component instance was destroyed` });
104
+ }
105
+ catch { }
106
+ }
107
+ if (!skipOnDestroy) {
108
+ try {
109
+ await withTimeout(instance.worker.handleDestroyComponentInstance(), 3000);
110
+ }
111
+ catch (e) {
112
+ console.warn(`Handle destroy component instance failed for ${componentInstanceId} (${instance.component})`, e);
113
+ }
114
+ }
115
+ try {
116
+ await withTimeout(threads_1.Thread.terminate(instance.worker), 1000);
117
+ }
118
+ catch (e) {
119
+ console.warn(`Thread.terminate failed for ${componentInstanceId} (${instance.component})`, e);
120
+ }
121
+ try {
122
+ instance.eventsSub?.unsubscribe?.();
123
+ }
124
+ catch (e) {
125
+ console.warn(`Failed to unsubscribe events for ${componentInstanceId} (${instance.component})`, e);
126
+ }
127
+ delete exports.componentInstances[componentInstanceId];
128
+ try {
129
+ instance?.emit?.({
130
+ type: 'componentInstanceDestroyed',
131
+ payload: {},
132
+ componentInstanceId,
133
+ });
134
+ }
135
+ catch (e) {
136
+ console.warn(`Failed to emit componentInstanceDestroyed for ${componentInstanceId} (${instance.component})`, e);
137
+ }
138
+ })();
139
+ return instance.terminatingPromise;
140
+ }
141
+ setInterval(() => {
142
+ const now = Date.now();
143
+ for (const [id, instance] of Object.entries(exports.componentInstances)) {
144
+ if (!instance || instance.terminatingPromise) {
145
+ continue;
146
+ }
147
+ const limit = instance.heartbeatLimitMs;
148
+ if (now - instance.lastHeartbeat > limit) {
149
+ console.warn(`Heartbeat limit reached (${limit} ms) — stopping ${id} (${instance.component})`);
150
+ markComponentGarbage(id, { skipOnDestroy: true });
151
+ }
152
+ }
153
+ }, 1000);
154
+ exports.componentInstances = {};
155
+ const handleComponentEvent = ({ componentInstanceId, eventName, options, files, onSuccess, onError }) => {
156
+ options = safeParse(options);
26
157
  const requestId = shortid_1.default.generate();
27
- if (Object.keys(exports.componentInstances).includes(componentInstanceId)) {
28
- exports.componentInstances[componentInstanceId].eventRequests[requestId] = { onSuccess, onError };
29
- exports.componentInstances[componentInstanceId].worker.handleComponentEvent({ eventName, requestId, options, files, });
158
+ const instance = exports.componentInstances[componentInstanceId];
159
+ if (instance) {
160
+ instance.eventRequests[requestId] = { onSuccess, onError, canceled: false };
161
+ instance.worker.handleComponentEvent({ eventName, requestId, options, files });
30
162
  }
31
163
  else {
32
- onError({ err: `Component instance was not found.` });
164
+ onError({ err: 'Component instance was not found.' });
33
165
  }
34
166
  return {
35
167
  requestId,
36
168
  cancel: () => {
37
- if (Object.keys(exports.componentInstances).includes(componentInstanceId)) {
38
- exports.componentInstances[componentInstanceId].worker.cancelComponentEvent({ requestId, });
169
+ const current = exports.componentInstances[componentInstanceId];
170
+ if (!current) {
171
+ return;
172
+ }
173
+ const req = current.eventRequests[requestId];
174
+ if (!req) {
175
+ return;
176
+ }
177
+ req.canceled = true;
178
+ try {
179
+ current.worker.cancelComponentEvent({ requestId });
180
+ }
181
+ catch {
182
+ console.warn(`Failed to cancel component event ${eventName} (${requestId}) for ${componentInstanceId} (${instance.component})`);
39
183
  }
40
184
  }
41
185
  };
@@ -56,23 +200,44 @@ async function getElementsScriptPaths({ nodeModulesPath = null }) {
56
200
  return paths;
57
201
  }
58
202
  exports.getElementsScriptPaths = getElementsScriptPaths;
59
- const onUpdateComponentInstanceProps = ({ componentInstanceId, options, }) => {
60
- if (typeof options === 'string') {
61
- options = JSON.parse(options);
203
+ const onUpdateComponentInstanceProps = ({ componentInstanceId, options }) => {
204
+ options = safeParse(options);
205
+ const instance = exports.componentInstances[componentInstanceId];
206
+ if (!instance || instance.terminatingPromise) {
207
+ return;
208
+ }
209
+ try {
210
+ instance.worker.updateComponentInstanceProps({ options });
211
+ }
212
+ catch {
213
+ console.warn(`Failed to update props for component instance ${componentInstanceId} (${instance.component})`);
62
214
  }
63
- exports.componentInstances[componentInstanceId].worker.updateComponentInstanceProps({ options, });
64
215
  };
65
216
  exports.onUpdateComponentInstanceProps = onUpdateComponentInstanceProps;
66
- const onHandleBrowserCallback = ({ callbackId, data, }) => {
67
- for (const key of Object.keys(exports.componentInstances)) {
68
- exports.componentInstances[key].worker.handleBrowserCallback({ callbackId, data, });
217
+ const onHandleBrowserCallback = ({ callbackId, data }) => {
218
+ for (const [componentInstanceId, instance] of Object.entries(exports.componentInstances)) {
219
+ if (!instance || instance.terminatingPromise) {
220
+ continue;
221
+ }
222
+ try {
223
+ instance.worker.handleBrowserCallback({ callbackId, data });
224
+ }
225
+ catch {
226
+ console.warn(`Failed to handle browser callback ${callbackId} for component instance ${componentInstanceId} (${instance.component})`);
227
+ }
69
228
  }
70
229
  };
71
230
  exports.onHandleBrowserCallback = onHandleBrowserCallback;
72
231
  const handleEventHubEvent = async ({ data, groupId = null, type, namespaceId = null }) => {
73
- for (const key of Object.keys(exports.componentInstances)) {
74
- if (exports.componentInstances[key].namespaceId === namespaceId) {
75
- exports.componentInstances[key].worker.handleEventHubEvent({ type, data, groupId });
232
+ for (const [componentInstanceId, instance] of Object.entries(exports.componentInstances)) {
233
+ if (!instance || instance.terminatingPromise || instance.namespaceId !== namespaceId) {
234
+ continue;
235
+ }
236
+ try {
237
+ instance.worker.handleEventHubEvent({ type, data, groupId });
238
+ }
239
+ catch {
240
+ console.warn(`Failed to handle event hub event ${type} for component instance ${componentInstanceId} (${instance.component})`);
76
241
  }
77
242
  }
78
243
  };
@@ -90,21 +255,31 @@ const saveComponent = async ({ script, outputFile, scriptPath }) => {
90
255
  await fs_extra_1.default.outputFile(outputFile, transpiledComponentScript.outputText);
91
256
  };
92
257
  exports.saveComponent = saveComponent;
93
- const onInitializeComponentInstance = async ({ namespaceId = null, extensionsPath = null, extensionsOptions = null, componentNamePrefix = '', componentName, componentRootDir, componentInstanceId, componentOptions, connectionId, emit, onComponentInstanceConsole, browserCommands, serverCommands, onEventHubEvent = null, }) => {
94
- if (componentOptions && typeof componentOptions === 'string') {
95
- componentOptions = JSON.parse(componentOptions);
96
- }
97
- const worker = await threads_1.spawn(new threads_1.Worker(`./component-processor.js`));
258
+ const onInitializeComponentInstance = async ({ namespaceId = null, extensionsPath = null, extensionsOptions = null, componentNamePrefix = '', componentName, componentRootDir, componentInstanceId, componentOptions, connectionId, emit, onComponentInstanceConsole, browserCommands, serverCommands, onEventHubEvent = null, heapLimit = 512, externalLimit = 512, heartbeatLimitMs = 3 * 1000, meta = null, }) => {
259
+ componentOptions = safeParse(componentOptions);
260
+ const internalWorker = new threads_1.Worker(`./component-processor.js`, {
261
+ resourceLimits: {
262
+ maxOldGenerationSizeMb: heapLimit,
263
+ }
264
+ });
265
+ internalWorker.addEventListener('error', (err) => {
266
+ markComponentGarbage(componentInstanceId, { skipOnDestroy: true });
267
+ });
268
+ const worker = await threads_1.spawn(internalWorker);
98
269
  exports.componentInstances[componentInstanceId] = {
270
+ heartbeatLimitMs,
271
+ heapLimit,
272
+ externalLimit,
273
+ componentName,
99
274
  worker,
100
- terminate: async () => {
101
- for (const requestId of Object.keys(exports.componentInstances[componentInstanceId].eventRequests)) {
102
- exports.componentInstances[componentInstanceId].eventRequests[requestId].onError({ err: `Component instance was destroyed.` });
103
- }
104
- delete exports.componentInstances[componentInstanceId];
105
- await threads_1.Thread.terminate(worker);
106
- emit({ type: 'componentInstanceDestroyed', payload: {}, componentInstanceId });
107
- },
275
+ emit,
276
+ lastHeartbeat: Date.now(),
277
+ heapUsed: 0,
278
+ externalUsed: 0,
279
+ terminatingPromise: null,
280
+ component: `${componentNamePrefix}${componentName}`,
281
+ startDate: new Date(),
282
+ meta,
108
283
  /**
109
284
  * Used to store user event requests (on button click, on input, etc.).
110
285
  */
@@ -112,68 +287,98 @@ const onInitializeComponentInstance = async ({ namespaceId = null, extensionsPat
112
287
  connectionId,
113
288
  namespaceId,
114
289
  };
115
- worker.events().subscribe(({ type, payload }) => {
116
- /**
117
- * When there is a response to user event request.
118
- */
119
- if (type === 'response') {
120
- const { requestId, result, err } = payload;
121
- if (err) {
122
- exports.componentInstances[componentInstanceId].eventRequests[requestId].onError({ err });
290
+ const subscription = worker.events().subscribe({
291
+ next: ({ type, payload }) => {
292
+ /**
293
+ * When there is a response to user event request.
294
+ */
295
+ if (type === 'response') {
296
+ const { requestId, result, err } = payload;
297
+ const req = exports.componentInstances[componentInstanceId]?.eventRequests?.[requestId];
298
+ if (req) {
299
+ try {
300
+ if (!req.canceled) {
301
+ err ? req.onError({ err }) : req.onSuccess({ result });
302
+ }
303
+ }
304
+ catch {
305
+ console.warn(`Failed to process response for request ${requestId} in component instance ${componentInstanceId} (${exports.componentInstances[componentInstanceId].component})`);
306
+ }
307
+ finally {
308
+ delete exports.componentInstances[componentInstanceId].eventRequests[requestId];
309
+ }
310
+ }
311
+ return;
312
+ }
313
+ else if (type === 'eventHubEvent') {
314
+ const { eventPayload, groupId, type: eventType } = payload;
315
+ exports.handleEventHubEvent({ data: eventPayload, groupId, type: eventType, namespaceId });
316
+ onEventHubEvent?.({ data: eventPayload, groupId, type: eventType, namespaceId });
317
+ }
318
+ else if (type === 'console') {
319
+ const { text } = payload;
320
+ onComponentInstanceConsole?.({ text });
321
+ }
322
+ else if (type === 'heartbeat') {
323
+ const instance = exports.componentInstances[componentInstanceId];
324
+ if (!instance || instance.terminatingPromise) {
325
+ return;
326
+ }
327
+ const { heapStatistics } = payload;
328
+ const heapUsedMB = toMB(heapStatistics.used_heap_size);
329
+ const extUsedMB = toMB(heapStatistics.external_memory);
330
+ const heapExceeded = heapUsedMB >= instance.heapLimit;
331
+ const extExceeded = extUsedMB >= instance.externalLimit;
332
+ instance.heapUsed = heapUsedMB;
333
+ instance.externalUsed = extUsedMB;
334
+ instance.lastHeartbeat = Date.now();
335
+ if (heapExceeded || extExceeded) {
336
+ console.warn(`Memory limit exceeded (heap: ${heapExceeded} ${heapUsedMB}/${instance.heapLimit}, external: ${extExceeded} ${extUsedMB}/${instance.externalLimit}) — stopping ${componentInstanceId} (${instance.component})`);
337
+ markComponentGarbage(componentInstanceId, { skipOnDestroy: true });
338
+ }
123
339
  }
124
340
  else {
125
- exports.componentInstances[componentInstanceId].eventRequests[requestId].onSuccess({ result });
341
+ try {
342
+ emit({ type, payload, componentInstanceId });
343
+ }
344
+ catch (e) {
345
+ console.warn(`Failed to emit event ${type} for ${componentInstanceId} (${exports.componentInstances[componentInstanceId].component})`, e);
346
+ }
126
347
  }
127
- delete exports.componentInstances[componentInstanceId].eventRequests[requestId];
128
- }
129
- else if (type === 'eventHubEvent') {
130
- const { eventPayload, groupId, type } = payload;
131
- exports.handleEventHubEvent({ data: eventPayload, groupId, type, namespaceId });
132
- onEventHubEvent?.({ data: eventPayload, groupId, type, namespaceId });
133
- }
134
- else if (type === 'console') {
135
- const { text } = payload;
136
- onComponentInstanceConsole?.({ text });
137
- }
138
- else {
139
- emit({ type, payload, componentInstanceId });
140
- }
348
+ },
349
+ error: (err) => {
350
+ markComponentGarbage(componentInstanceId, { skipOnDestroy: true });
351
+ },
352
+ complete: () => {
353
+ markComponentGarbage(componentInstanceId, { skipOnDestroy: true });
354
+ },
141
355
  });
142
- worker.initializeComponentInstance({ browserCommands, serverCommands, componentNamePrefix, componentName, componentRootDir, componentOptions, componentInstanceId, extensionsPath, extensionsOptions });
143
- await clearGarbage();
356
+ exports.componentInstances[componentInstanceId].eventsSub = subscription;
357
+ try {
358
+ worker.initializeComponentInstance({
359
+ browserCommands,
360
+ serverCommands,
361
+ componentNamePrefix,
362
+ componentName,
363
+ componentRootDir,
364
+ componentOptions,
365
+ componentInstanceId,
366
+ extensionsPath,
367
+ extensionsOptions,
368
+ });
369
+ }
370
+ catch {
371
+ markComponentGarbage(componentInstanceId, { skipOnDestroy: true });
372
+ }
373
+ clearGarbage();
144
374
  };
145
375
  exports.onInitializeComponentInstance = onInitializeComponentInstance;
146
376
  const onDisconnect = async ({ connectionId }) => {
147
- garbage.connections.push(connectionId);
148
- await clearGarbage();
377
+ markConnectionGarbage(connectionId);
149
378
  };
150
379
  exports.onDisconnect = onDisconnect;
151
- const garbage = {
152
- connections: [],
153
- componentInstances: [],
154
- };
155
380
  const onDestroyComponentInstance = async ({ componentInstanceId }) => {
156
- garbage.componentInstances.push(componentInstanceId);
157
- await clearGarbage();
381
+ markComponentGarbage(componentInstanceId, { skipOnDestroy: false });
158
382
  };
159
383
  exports.onDestroyComponentInstance = onDestroyComponentInstance;
160
- exports.componentInstances = {};
161
- const clearGarbage = lodash_1.default.debounce(async () => {
162
- const aliveComponentInstances = Object.keys(exports.componentInstances);
163
- const garbageComponentInstanceIds = [
164
- ...aliveComponentInstances.filter(x => garbage.connections.includes(exports.componentInstances[x].connectionId)),
165
- ...garbage.componentInstances,
166
- ];
167
- for (const componentInstanceId of garbageComponentInstanceIds) {
168
- if (exports.componentInstances[componentInstanceId]) {
169
- try {
170
- await exports.componentInstances[componentInstanceId].worker.handleDestroyComponentInstance();
171
- }
172
- catch (err) {
173
- console.warn(err);
174
- }
175
- exports.componentInstances[componentInstanceId].terminate();
176
- }
177
- }
178
- }, 250);
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsd0RBQTBCO0FBQzFCLGdEQUF3QjtBQUN4QixzREFBOEI7QUFDOUIsNERBQTRCO0FBQzVCLHFDQUFnRDtBQUNoRCxpREFBcUM7QUFDckMsb0RBQXVCO0FBRXZCLE1BQU0sY0FBYyxHQUFHLENBQUMsZUFBZSxFQUFFLEVBQUU7SUFDdkMsT0FBTyxJQUFJLE9BQU8sQ0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ3JDLG9CQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLGVBQWUsR0FBRyxFQUFFLFVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNO1lBQzNFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNyRixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFBO0FBRU0sTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7SUFDM0csT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDeEIsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7UUFDN0IsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDakM7SUFDRCxNQUFNLFNBQVMsR0FBRyxpQkFBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JDLElBQUksTUFBTSxDQUFDLElBQUksQ0FB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
384
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsd0RBQTBCO0FBQzFCLGdEQUF3QjtBQUN4QixzREFBOEI7QUFDOUIsNERBQTRCO0FBQzVCLHFDQUFnRDtBQUNoRCxpREFBcUM7QUErQnJDLE1BQU0sY0FBYyxHQUFHLENBQUMsZUFBZSxFQUFFLEVBQUU7SUFDdkMsT0FBTyxJQUFJLE9BQU8sQ0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ3JDLG9CQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLGVBQWUsR0FBRyxFQUFFLFVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNO1lBQzNFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNyRixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFBO0FBQ0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBRTtJQUN6QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQztBQUVGLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7SUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxDQUFDLENBQUE7QUFFRCxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQVcsRUFBRSxH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
package/dist/utils.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export declare const isEvent: (optionName: string) => boolean;
2
- export declare const render: (raw: any, childRenderer?: any, renderedArr?: any[], events?: {}, parent?: string) => Promise<{
2
+ export declare const render: (raw: any, childRenderer?: any, renderedArr?: any[], events?: {}, parent?: string, parentDirty?: boolean, owner?: string, eventOwners?: {}) => Promise<{
3
3
  tree: any[];
4
4
  events: {};
5
+ eventOwners: {};
5
6
  }>;