diff --git a/plugins/core/package-lock.json b/plugins/core/package-lock.json index da3848334..9272ea35f 100644 --- a/plugins/core/package-lock.json +++ b/plugins/core/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/core", - "version": "0.2.1", + "version": "0.2.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@scrypted/core", - "version": "0.2.1", + "version": "0.2.2", "license": "Apache-2.0", "dependencies": { "@scrypted/common": "file:../../common", diff --git a/plugins/core/package.json b/plugins/core/package.json index 66108982e..3d0b2419a 100644 --- a/plugins/core/package.json +++ b/plugins/core/package.json @@ -1,6 +1,6 @@ { "name": "@scrypted/core", - "version": "0.2.1", + "version": "0.2.2", "description": "Scrypted Core plugin. Provides the UI, websocket, and engine.io APIs.", "author": "Scrypted", "license": "Apache-2.0", diff --git a/plugins/core/src/script-core.ts b/plugins/core/src/script-core.ts index 55490a644..025ba90a1 100644 --- a/plugins/core/src/script-core.ts +++ b/plugins/core/src/script-core.ts @@ -78,13 +78,15 @@ export class ScriptCore extends ScryptedDeviceBase implements DeviceProvider, De const e = this.scripts.get(nativeId); if (e) return e; + let script = new Script(nativeId); let worker: Worker; + if (script.providedInterfaces.length > 2) { const fork = sdk.fork<{ newScript: typeof newScript, }>(); - worker = fork.worker + worker = fork.worker; try { script = await (await fork.result).newScript(nativeId); await script.run(); @@ -94,6 +96,12 @@ export class ScriptCore extends ScryptedDeviceBase implements DeviceProvider, De throw e; } } + + worker?.on('exit', () => { + if (this.scripts.get(nativeId)?.worker === worker) + this.scripts.delete(nativeId); + }); + this.scripts.set(nativeId, { script, worker,