diff --git a/src/__tests__/restarting.spec.ts b/src/__tests__/restarting.spec.ts index 6ab33f8..2b7a88e 100644 --- a/src/__tests__/restarting.spec.ts +++ b/src/__tests__/restarting.spec.ts @@ -25,7 +25,7 @@ describe('restarts', () => { expect(ThreadedClassManager.getThreadCount()).toEqual(0) }) test('restart instance', async () => { - let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, []) + let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', []) let onClosed = jest.fn(() => { // oh dear, the process was closed }) @@ -47,9 +47,9 @@ describe('restarts', () => { }) test('restart instance with multiple', async () => { - let threaded0 = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [], { threadUsage: 0.1 }) - let threaded1 = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [], { threadUsage: 0.1 }) - let threaded2 = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [], { threadUsage: 0.1 }) + let threaded0 = await threadedClass(TESTCLASS_PATH, 'TestClass', [], { threadUsage: 0.1 }) + let threaded1 = await threadedClass(TESTCLASS_PATH, 'TestClass', [], { threadUsage: 0.1 }) + let threaded2 = await threadedClass(TESTCLASS_PATH, 'TestClass', [], { threadUsage: 0.1 }) let onClosed0 = jest.fn() let onClosed1 = jest.fn() let onClosed2 = jest.fn() @@ -94,7 +94,7 @@ describe('restarts', () => { test('force restart', async () => { expect(ThreadedClassManager.getThreadCount()).toEqual(0) - let thread0 = await threadedClass(HOUSE_PATH, 'House', House, [['south0'], []]) + let thread0 = await threadedClass(HOUSE_PATH, 'House', [['south0'], []]) let onClosed = jest.fn() ThreadedClassManager.onEvent(thread0, 'thread_closed', onClosed) @@ -121,7 +121,7 @@ describe('restarts', () => { test('child process crash', async () => { expect(ThreadedClassManager.getThreadCount()).toEqual(0) - let thread0 = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, []) + let thread0 = await threadedClass(TESTCLASS_PATH, 'TestClass', []) let onClosed = jest.fn() ThreadedClassManager.onEvent(thread0, 'thread_closed', onClosed) @@ -145,11 +145,11 @@ describe('restarts', () => { test('automatic restart', async () => { expect(ThreadedClassManager.getThreadCount()).toEqual(0) - let thread0 = await threadedClass(HOUSE_PATH, 'House', House, [['south0'], []],{ + let thread0 = await threadedClass(HOUSE_PATH, 'House', [['south0'], []],{ autoRestart: true, threadUsage: 0.5 }) - let thread1 = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [],{ + let thread1 = await threadedClass(TESTCLASS_PATH, 'TestClass', [],{ autoRestart: true, threadUsage: 0.5 }) @@ -210,7 +210,7 @@ describe('restarts', () => { test('orphan monitoring', async () => { expect(ThreadedClassManager.getThreadCount()).toEqual(0) - let thread1 = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [],{ + let thread1 = await threadedClass(TESTCLASS_PATH, 'TestClass', [],{ autoRestart: true, threadUsage: 0.5, freezeLimit: 200 diff --git a/src/__tests__/test.spec.ts b/src/__tests__/test.spec.ts index c3e2b16..054a34b 100644 --- a/src/__tests__/test.spec.ts +++ b/src/__tests__/test.spec.ts @@ -41,7 +41,7 @@ const getTests = (disableMultithreading: boolean) => { expect(original.getWindows('')).toHaveLength(2) expect(original.getRooms()).toHaveLength(1) - let threaded = await threadedClass(HOUSE_PATH, 'House', House, [['north', 'west'], ['south']], { disableMultithreading }) + let threaded = await threadedClass(HOUSE_PATH, 'House', [['north', 'west'], ['south']], { disableMultithreading }) let onClosed = jest.fn() const onClosedListener = ThreadedClassManager.onEvent(threaded, 'thread_closed', onClosed) @@ -60,7 +60,7 @@ const getTests = (disableMultithreading: boolean) => { expect(original.returnValue('asdf')).toEqual('asdf') - let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [], { disableMultithreading }) + let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', [], { disableMultithreading }) let onClosed = jest.fn() ThreadedClassManager.onEvent(threaded, 'thread_closed', onClosed) @@ -75,7 +75,7 @@ const getTests = (disableMultithreading: boolean) => { test('import wrong path', async () => { let error: any = null try { - await threadedClass('./nonexistent/path', 'House', House, [[], []], { disableMultithreading }) + await threadedClass('./nonexistent/path', 'House', [[], []], { disableMultithreading }) } catch (e) { error = e.toString() } @@ -84,7 +84,7 @@ const getTests = (disableMultithreading: boolean) => { }) test('eventEmitter', async () => { - let threaded = await threadedClass(HOUSE_PATH, 'House', House, [['north', 'west'], ['south']], { disableMultithreading }) + let threaded = await threadedClass(HOUSE_PATH, 'House', [['north', 'west'], ['south']], { disableMultithreading }) let onEvent = jest.fn() await threaded.on('test', onEvent) @@ -108,7 +108,7 @@ const getTests = (disableMultithreading: boolean) => { expect(result).toEqual('parent,child,parent2,child2') - let threaded = await threadedClass(HOUSE_PATH, 'House', House, [['north', 'west'], ['south']], { disableMultithreading }) + let threaded = await threadedClass(HOUSE_PATH, 'House', [['north', 'west'], ['south']], { disableMultithreading }) let onEvent = jest.fn() await threaded.on('test', onEvent) @@ -132,7 +132,7 @@ const getTests = (disableMultithreading: boolean) => { }) expect(original.host).toEqual('192.168.0.1') - let threaded = await threadedClass('casparcg-connection', 'CasparCG', CasparCG, [{ + let threaded = await threadedClass('casparcg-connection', 'CasparCG', [{ host: '192.168.0.1', autoConnect: false }], { disableMultithreading }) @@ -150,7 +150,7 @@ const getTests = (disableMultithreading: boolean) => { let euroSign = original.end(Buffer.from([0xE2, 0x82, 0xAC])) expect(euroSign).toEqual('€') - let threaded = await threadedClass('string_decoder', 'StringDecoder', StringDecoder, ['utf8'], { disableMultithreading }) + let threaded = await threadedClass('string_decoder', 'StringDecoder', ['utf8'], { disableMultithreading }) let euroSign2 = await threaded.end(Buffer.from([0xE2, 0x82, 0xAC])) @@ -184,7 +184,7 @@ const getTests = (disableMultithreading: boolean) => { for (let i = 0; i < 5; i++) { ps.push( - threadedClass(HOUSE_PATH, 'House', House, [['aa', 'bb'], []], { disableMultithreading }) + threadedClass(HOUSE_PATH, 'House', [['aa', 'bb'], []], { disableMultithreading }) .then((myHouse) => { threads.push(myHouse) return myHouse.slowFib(37) @@ -207,7 +207,7 @@ const getTests = (disableMultithreading: boolean) => { } test('properties', async () => { let original = new House([], ['south']) - let threaded = await threadedClass(HOUSE_PATH, 'House', House, [[], ['south']], { disableMultithreading }) + let threaded = await threadedClass(HOUSE_PATH, 'House', [[], ['south']], { disableMultithreading }) // Method with parameter and return value: expect(original.returnValue('myValue')).toEqual('myValue') @@ -270,14 +270,14 @@ const getTests = (disableMultithreading: boolean) => { expect(ThreadedClassManager.getThreadCount()).toEqual(0) // threadUsage: 0.3, make room for 3 instances in each thread - let threadedHouse0 = await threadedClass(HOUSE_PATH, 'House', House, [['south0'], []], { threadUsage: 0.3, disableMultithreading }) + let threadedHouse0 = await threadedClass(HOUSE_PATH, 'House', [['south0'], []], { threadUsage: 0.3, disableMultithreading }) expect(ThreadedClassManager.getThreadCount()).toEqual(1) - let threadedHouse1 = await threadedClass(HOUSE_PATH, 'House', House, [['south1'], []], { threadUsage: 0.3, disableMultithreading }) + let threadedHouse1 = await threadedClass(HOUSE_PATH, 'House', [['south1'], []], { threadUsage: 0.3, disableMultithreading }) expect(ThreadedClassManager.getThreadCount()).toEqual(1) - let threadedHouse2 = await threadedClass(HOUSE_PATH, 'House', House, [['south2'], []], { threadUsage: 0.3, disableMultithreading }) + let threadedHouse2 = await threadedClass(HOUSE_PATH, 'House', [['south2'], []], { threadUsage: 0.3, disableMultithreading }) expect(ThreadedClassManager.getThreadCount()).toEqual(1) - let threadedHouse3 = await threadedClass(HOUSE_PATH, 'House', House, [['south3'], []], { threadUsage: 0.3, disableMultithreading }) + let threadedHouse3 = await threadedClass(HOUSE_PATH, 'House', [['south3'], []], { threadUsage: 0.3, disableMultithreading }) expect(ThreadedClassManager.getThreadCount()).toEqual(2) // Check that all instances return correct data: @@ -309,14 +309,14 @@ const getTests = (disableMultithreading: boolean) => { expect(ThreadedClassManager.getThreadCount()).toEqual(0) // use threadId to control which thread the instances are put in - let threadedHouse0 = await threadedClass(HOUSE_PATH, 'House', House, [['south0'], []], { threadId: 'one', disableMultithreading }) + let threadedHouse0 = await threadedClass(HOUSE_PATH, 'House', [['south0'], []], { threadId: 'one', disableMultithreading }) expect(ThreadedClassManager.getThreadCount()).toEqual(1) - let threadedHouse1 = await threadedClass(HOUSE_PATH, 'House', House, [['south1'], []], { threadId: 'one', disableMultithreading }) + let threadedHouse1 = await threadedClass(HOUSE_PATH, 'House', [['south1'], []], { threadId: 'one', disableMultithreading }) expect(ThreadedClassManager.getThreadCount()).toEqual(1) - let threadedHouse2 = await threadedClass(HOUSE_PATH, 'House', House, [['south2'], []], { threadId: 'one', disableMultithreading }) + let threadedHouse2 = await threadedClass(HOUSE_PATH, 'House', [['south2'], []], { threadId: 'one', disableMultithreading }) expect(ThreadedClassManager.getThreadCount()).toEqual(1) - let threadedHouse3 = await threadedClass(HOUSE_PATH, 'House', House, [['south3'], []], { threadId: 'two', disableMultithreading }) + let threadedHouse3 = await threadedClass(HOUSE_PATH, 'House', [['south3'], []], { threadId: 'two', disableMultithreading }) expect(ThreadedClassManager.getThreadCount()).toEqual(2) // Check that all instances return correct data: @@ -344,7 +344,7 @@ const getTests = (disableMultithreading: boolean) => { }) test('supported data types', async () => { - let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [], { disableMultithreading }) + let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', [], { disableMultithreading }) let values: any[] = [ null, @@ -413,7 +413,7 @@ const getTests = (disableMultithreading: boolean) => { ] for (let value of values) { - let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [value], { disableMultithreading }) + let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', [value], { disableMultithreading }) let returned: any = await threaded.returnParam1() if (value && typeof value === 'function') { @@ -434,7 +434,7 @@ const getTests = (disableMultithreading: boolean) => { for (let value of unsupportedValues) { let returnError: any = null try { - await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [value], { disableMultithreading }) + await threadedClass(TESTCLASS_PATH, 'TestClass', [value], { disableMultithreading }) } catch (e) { returnError = e } @@ -458,7 +458,7 @@ const getTests = (disableMultithreading: boolean) => { }) // test('execute wrapped callback loaded via constructor', async () => { - // let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [ + // let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', [ // { fcn: (num0: number, num1: number): number => num0 + num1 + 1 } // ], { disableMultithreading }) @@ -468,7 +468,7 @@ const getTests = (disableMultithreading: boolean) => { // expect(ThreadedClassManager.getThreadCount()).toEqual(0) // }) test('execute callback loaded via constructor', async () => { - let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [ + let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', [ (num0: number, num1: number): number => num0 + num1 + 1 ], { disableMultithreading }) @@ -478,7 +478,7 @@ const getTests = (disableMultithreading: boolean) => { expect(ThreadedClassManager.getThreadCount()).toEqual(0) }) // test('execute wrapped callback loaded via function', async () => { - // let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [], { disableMultithreading }) + // let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', [], { disableMultithreading }) // await threaded.setParam1({ fcn: (num0: number, num1: number): number => num0 + num1 + 1 }) // expect(await threaded.callParam1Function(40, 1)).toEqual(42) @@ -487,7 +487,7 @@ const getTests = (disableMultithreading: boolean) => { // expect(ThreadedClassManager.getThreadCount()).toEqual(0) // }) test('execute callback loaded via function', async () => { - let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [], { disableMultithreading }) + let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', [], { disableMultithreading }) await threaded.setParam1((num0: number, num1: number): number => num0 + num1 + 1) expect(await threaded.callParam1(40, 1)).toEqual(42) @@ -496,7 +496,7 @@ const getTests = (disableMultithreading: boolean) => { expect(ThreadedClassManager.getThreadCount()).toEqual(0) }) // test('execute wrapped callback loaded via setter', async () => { - // let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [], { disableMultithreading }) + // let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', [], { disableMultithreading }) // threaded.Param1 = Promise.resolve({ fcn: (num0: number, num1: number): Promise => Promise.resolve(num0 + num1 + 1) }) // expect(await threaded.callParam1Function(40, 1)).toEqual(42) @@ -505,7 +505,7 @@ const getTests = (disableMultithreading: boolean) => { // expect(ThreadedClassManager.getThreadCount()).toEqual(0) // }) test('execute callback loaded via setter', async () => { - let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [], { disableMultithreading }) + let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', [], { disableMultithreading }) threaded.Param1 = (num0: number, num1: number): Promise => Promise.resolve(num0 + num1 + 1) expect(await threaded.callParam1(40, 1)).toEqual(42) @@ -514,7 +514,7 @@ const getTests = (disableMultithreading: boolean) => { expect(ThreadedClassManager.getThreadCount()).toEqual(0) }) test('functions as arguments', async () => { - let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [], { disableMultithreading }) + let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', [], { disableMultithreading }) let i = 0 const calledSecond = jest.fn((a,b) => { @@ -567,7 +567,7 @@ const getTests = (disableMultithreading: boolean) => { }) test('error handling', async () => { - let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [], { disableMultithreading }) + let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', [], { disableMultithreading }) let error: any = null @@ -635,7 +635,7 @@ const getTests = (disableMultithreading: boolean) => { }) test('logging', async () => { - let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [], { disableMultithreading }) + let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', [], { disableMultithreading }) let mockLog = jest.fn() let orgConsoleLog = console.log @@ -653,7 +653,7 @@ const getTests = (disableMultithreading: boolean) => { } }) test('EventEmitter', async () => { - let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [], { disableMultithreading }) + let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', [], { disableMultithreading }) const eventListener0 = jest.fn() const eventListener1 = jest.fn() @@ -674,7 +674,7 @@ const getTests = (disableMultithreading: boolean) => { }) test('import typescript', async () => { - let threaded = await threadedClass(TESTCLASS_PATH_UNSYNCED, 'TestClass', TestClass, [], { disableMultithreading }) + let threaded = await threadedClass(TESTCLASS_PATH_UNSYNCED, 'TestClass', [], { disableMultithreading }) let id = await threaded.getId() @@ -688,7 +688,7 @@ const getTests = (disableMultithreading: boolean) => { }) test('export name mismatch', async () => { - let threaded = await threadedClass(RENAME_PATH, 'AlmostTestClass', AlmostTestClass, [], { disableMultithreading }) + let threaded = await threadedClass(RENAME_PATH, 'AlmostTestClass', [], { disableMultithreading }) let id = await threaded.getId() @@ -699,7 +699,7 @@ const getTests = (disableMultithreading: boolean) => { expect(original.returnValue('asdf')).toEqual('asdf') - let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [], { disableMultithreading, instanceName: 'myInstance' }) + let threaded = await threadedClass(TESTCLASS_PATH, 'TestClass', [], { disableMultithreading, instanceName: 'myInstance' }) let onClosed = jest.fn() ThreadedClassManager.onEvent(threaded, 'thread_closed', onClosed) @@ -756,11 +756,11 @@ describe('single-thread tests', () => { expect((original.returnValue(buf)) === buf2).toEqual(true) expect((original.returnValue(buf)) === buf3).toEqual(false) - let singleThreaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [], { disableMultithreading }) + let singleThreaded = await threadedClass(TESTCLASS_PATH, 'TestClass', [], { disableMultithreading }) let onClosed = jest.fn() ThreadedClassManager.onEvent(singleThreaded, 'thread_closed', onClosed) - let multiThreaded = await threadedClass(TESTCLASS_PATH, 'TestClass', TestClass, [], {}) + let multiThreaded = await threadedClass(TESTCLASS_PATH, 'TestClass', [], {}) let onClosed2 = jest.fn() ThreadedClassManager.onEvent(multiThreaded, 'thread_closed', onClosed2) diff --git a/src/internalApi.ts b/src/internalApi.ts index a4fa0fd..99f4ba9 100644 --- a/src/internalApi.ts +++ b/src/internalApi.ts @@ -47,7 +47,6 @@ export interface MessageInitConstr { cmd: MessageType.INIT modulePath: string exportName: string - classFunction?: Function // only used in single-thread mode args: Array config: ThreadedClassConfig } @@ -253,12 +252,7 @@ export abstract class Worker { // Load in the class: - if (m.classFunction) { - // In single thread mode. - // When classFunction is provided, use that instead of the imported js file. - pModuleClass = Promise.resolve(m.classFunction) - - } else if (isBrowser()) { + if (isBrowser()) { pModuleClass = new Promise((resolve, reject) => { // @ts-ignore let oReq = new XMLHttpRequest() diff --git a/src/manager.ts b/src/manager.ts index 75e83ea..5360fb7 100644 --- a/src/manager.ts +++ b/src/manager.ts @@ -121,7 +121,6 @@ export interface ChildInstance { readonly onMessageCallback: (instance: ChildInstance, message: MessageFromChild) => void readonly pathToModule: string readonly exportName: string - readonly classFunction: Function // used in single-threaded mode readonly constructorArgs: any[] readonly config: ThreadedClassConfig initialized: boolean @@ -189,7 +188,6 @@ export class ThreadedClassManagerClassInternal extends EventEmitter { proxy: ThreadedClass, pathToModule: string, exportName: string, - classFunction: Function, constructorArgs: any[], onMessage: (instance: ChildInstance, message: MessageFromChild) => void ): ChildInstance { @@ -203,7 +201,6 @@ export class ThreadedClassManagerClassInternal extends EventEmitter { onMessageCallback: onMessage, pathToModule: pathToModule, exportName: exportName, - classFunction: classFunction, constructorArgs: constructorArgs, initialized: false, config: config @@ -415,7 +412,6 @@ export class ThreadedClassManagerClassInternal extends EventEmitter { cmd: MessageType.INIT, modulePath: instance.pathToModule, exportName: instance.exportName, - classFunction: (config.disableMultithreading ? instance.classFunction : undefined), args: encodedArgs, config: config } diff --git a/src/threadedClass.ts b/src/threadedClass.ts index 9896f0a..a642583 100644 --- a/src/threadedClass.ts +++ b/src/threadedClass.ts @@ -30,14 +30,12 @@ type CtorArgs any> = CtorT extends new (...a /** * Returns an asynchronous version of the provided class * @param orgModule Path to imported module (this is what is in the require('XX') function, or import {class} from 'XX'} ) - * @param orgExport Name of export in module (not used when single threaded) - * @param orgClass The class to be threaded (only used when single threaded) + * @param orgExport Name of export in module * @param constructorArgs An array of arguments to be fed into the class constructor */ export function threadedClass T> ( orgModule: string, orgExport: string, - orgClass: TCtor, constructorArgs: CtorArgs, config: ThreadedClassConfig = {} ): Promise> { @@ -187,7 +185,6 @@ export function threadedClass T> ( proxy, pathToModule, exportName, - orgClass, constructorArgs, onMessage )