diff --git a/packages/block/src/base-block.ts b/packages/block/src/base-block.ts index f4f6c81..8c42ec5 100644 --- a/packages/block/src/base-block.ts +++ b/packages/block/src/base-block.ts @@ -15,11 +15,11 @@ export class BaseBlock { #socket: Socket - constructor(name: string, socket: Socket) { + constructor(name: string, triggerName: string, socket: Socket) { this.name = name this.#socket = socket - this.events = this.#socket.createBroadcaster() - this.methods = this.#socket.createUnicaster() + this.events = this.#socket.createBroadcaster(() => triggerName) + this.methods = this.#socket.createUnicaster(() => triggerName) Reflect.defineProperty(this, 'state', { get: () => this.#socket.getState(constant.stateNamespace(this.name)), set: () => { @@ -45,6 +45,6 @@ export class BaseBlock { } public listenEvents(events: Partial) { - return this.#socket.onBroadcast>(events) + return this.#socket.onBroadcast(events) } } diff --git a/packages/block/src/created-block.ts b/packages/block/src/created-block.ts index c4c52da..37c6318 100644 --- a/packages/block/src/created-block.ts +++ b/packages/block/src/created-block.ts @@ -22,7 +22,7 @@ export class CreatedBlock extends BaseBlock { constructor(name: string, globalBus: Bus, globalSocket: Socket, isEntry: boolean) { const [bus] = touchBus(constant.privateBus(name)) const socket = bus.createSocket() - super(name, socket) + super(name, name, socket) this.#socket = socket this.#globalBus = globalBus this.#globalSocket = globalSocket @@ -36,7 +36,7 @@ export class CreatedBlock extends BaseBlock { } public addMethods(methods: Partial) { - return this.#socket.onUnicast>(methods) + return this.#socket.onUnicast(methods) } public relyOn(dependencies: string[]) { @@ -58,7 +58,7 @@ export class CreatedBlock extends BaseBlock { if (!this.#connectedBlocks[name]) { const [bus] = touchBus(constant.privateBus(name)) const socket = bus.createSocket() - this.#connectedBlocks[name] = new BaseBlock

(name, socket) + this.#connectedBlocks[name] = new BaseBlock

(name, this.name, socket) } return this.#connectedBlocks[name] as BaseBlock

} diff --git a/packages/block/test/utils.test.ts b/packages/block/test/utils.test.ts index 8ee2902..f8f210c 100644 --- a/packages/block/test/utils.test.ts +++ b/packages/block/test/utils.test.ts @@ -24,4 +24,40 @@ describe('Test errors and warnings', () => { } }).toThrowError(errors.stateIsReadonly('case2')) }) + + test('#case3: trigger', () => { + let normalFuncMethodTrigger = '' + let normalFuncEventTrigger = '' + type BlockType = { + methods: { + normalFunc: () => void + arrowFunc: () => void + } + events: { + normalFunc: () => void + arrowFunc: () => void + } + } + const block = createBlock('case3') + block.addMethods({ + normalFunc() { + normalFuncMethodTrigger = arguments[arguments.length - 1] + }, + }) + block.listenEvents({ + normalFunc() { + normalFuncEventTrigger = arguments[arguments.length - 1] + }, + }) + const tester = createBlock('tester') + const connectedBlock = tester.connect(block.name) + connectedBlock.methods.normalFunc() + expect(normalFuncMethodTrigger).toEqual('tester') + connectedBlock.events.normalFunc() + expect(normalFuncEventTrigger).toEqual('tester') + block.methods.normalFunc() + expect(normalFuncMethodTrigger).toEqual('case3') + block.events.normalFunc() + expect(normalFuncEventTrigger).toEqual('case3') + }) }) diff --git a/packages/core/src/lib/socket.ts b/packages/core/src/lib/socket.ts index 137b052..1330980 100644 --- a/packages/core/src/lib/socket.ts +++ b/packages/core/src/lib/socket.ts @@ -68,13 +68,16 @@ export class Socket { * @param logger */ public createBroadcaster>( - logger?: (eventName: string) => void, + logger?: (eventName: string) => any, ) { return new Proxy({} as any, { get: (target, eventName) => { return (...args: any[]) => { - logger?.(eventName as string) - return this.#eventEmitter.emitBroadcast(eventName as string, ...args) + return this.#eventEmitter.emitBroadcast( + eventName as string, + ...args, + logger?.(eventName as string), + ) } }, set: () => { @@ -87,12 +90,15 @@ export class Socket { * create a proxy to emit unicast event * @param logger */ - public createUnicaster>(logger?: (eventName: string) => void) { + public createUnicaster>(logger?: (eventName: string) => any) { return new Proxy({} as any, { get: (target, eventName) => { return (...args: any[]) => { - logger?.(eventName as string) - return this.#eventEmitter.emitUnicast(eventName as string, ...args) + return this.#eventEmitter.emitUnicast( + eventName as string, + ...args, + logger?.(eventName as string), + ) } }, set: () => {