Skip to content

Commit 22da644

Browse files
authored
fix: AsyncEventEmitter filterListeners doesn't work with promises (#8895)
1 parent e4d5147 commit 22da644

File tree

3 files changed

+18
-16
lines changed

3 files changed

+18
-16
lines changed

.changeset/few-zebras-swim.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"app-builder-lib": patch
3+
---
4+
5+
fix: remove Promise ability from AsyncEventEmitter as it's impossible to filter listeners by without being async

packages/app-builder-lib/src/packager.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -260,18 +260,18 @@ export class Packager {
260260
log.info({ version: PACKAGE_VERSION, os: getOsRelease() }, "electron-builder")
261261
}
262262

263-
addPackagerEventHandlers() {
263+
async addPackagerEventHandlers() {
264264
const { type } = this.appInfo
265-
this.eventEmitter.on("artifactBuildStarted", resolveFunction(type, this.config.artifactBuildStarted, "artifactBuildStarted"), "user")
266-
this.eventEmitter.on("artifactBuildCompleted", resolveFunction(type, this.config.artifactBuildCompleted, "artifactBuildCompleted"), "user")
265+
this.eventEmitter.on("artifactBuildStarted", await resolveFunction(type, this.config.artifactBuildStarted, "artifactBuildStarted"), "user")
266+
this.eventEmitter.on("artifactBuildCompleted", await resolveFunction(type, this.config.artifactBuildCompleted, "artifactBuildCompleted"), "user")
267267

268-
this.eventEmitter.on("appxManifestCreated", resolveFunction(type, this.config.appxManifestCreated, "appxManifestCreated"), "user")
269-
this.eventEmitter.on("msiProjectCreated", resolveFunction(type, this.config.msiProjectCreated, "msiProjectCreated"), "user")
268+
this.eventEmitter.on("appxManifestCreated", await resolveFunction(type, this.config.appxManifestCreated, "appxManifestCreated"), "user")
269+
this.eventEmitter.on("msiProjectCreated", await resolveFunction(type, this.config.msiProjectCreated, "msiProjectCreated"), "user")
270270

271-
this.eventEmitter.on("beforePack", resolveFunction(type, this.config.beforePack, "beforePack"), "user")
272-
this.eventEmitter.on("afterExtract", resolveFunction(type, this.config.afterExtract, "afterExtract"), "user")
273-
this.eventEmitter.on("afterPack", resolveFunction(type, this.config.afterPack, "afterPack"), "user")
274-
this.eventEmitter.on("afterSign", resolveFunction(type, this.config.afterSign, "afterSign"), "user")
271+
this.eventEmitter.on("beforePack", await resolveFunction(type, this.config.beforePack, "beforePack"), "user")
272+
this.eventEmitter.on("afterExtract", await resolveFunction(type, this.config.afterExtract, "afterExtract"), "user")
273+
this.eventEmitter.on("afterPack", await resolveFunction(type, this.config.afterPack, "afterPack"), "user")
274+
this.eventEmitter.on("afterSign", await resolveFunction(type, this.config.afterSign, "afterSign"), "user")
275275
}
276276

277277
onAfterPack(handler: PackagerEvents["afterPack"]): Packager {
@@ -396,7 +396,7 @@ export class Packager {
396396
}
397397

398398
this._appInfo = new AppInfo(this, null)
399-
this.addPackagerEventHandlers()
399+
await this.addPackagerEventHandlers()
400400

401401
this._framework = await createFrameworkInfo(this.config, this)
402402

packages/app-builder-lib/src/util/asyncEventEmitter.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ type Handler = (...args: any[]) => Promise<void> | void
55

66
export type HandlerType = "system" | "user"
77

8-
type Handle = { handler: Handler | Promise<Handler | Nullish>; type: HandlerType }
8+
type Handle = { handler: Handler; type: HandlerType }
99

1010
export type EventMap = {
1111
[key: string]: Handler
@@ -23,7 +23,7 @@ export class AsyncEventEmitter<T extends EventMap> implements TypedEventEmitter<
2323
private readonly listeners: Map<keyof T, Handle[] | undefined> = new Map()
2424
private readonly cancellationToken = new CancellationToken()
2525

26-
on<E extends keyof T>(event: E, listener: T[E] | Promise<T[E] | Nullish> | Nullish, type: HandlerType = "system"): this {
26+
on<E extends keyof T>(event: E, listener: T[E] | Nullish, type: HandlerType = "system"): this {
2727
if (!listener) {
2828
return this
2929
}
@@ -72,10 +72,7 @@ export class AsyncEventEmitter<T extends EventMap> implements TypedEventEmitter<
7272

7373
filterListeners<E extends keyof T>(event: E, type: HandlerType | undefined): Handle[] {
7474
const listeners = this.listeners.get(event) ?? []
75-
if (type) {
76-
return listeners.filter(l => l.type === type)
77-
}
78-
return listeners
75+
return type ? listeners.filter(l => l.type === type) : listeners
7976
}
8077

8178
clear() {

0 commit comments

Comments
 (0)