Use type-safe events for PersistenceImpl
Bug: 1228674
Change-Id: Ie4f5eaaac49e5925f5babfe6ef705df8d308d8dd
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3122340
Reviewed-by: Simon Zünd <szuend@chromium.org>
Commit-Queue: Kateryna Prokopenko <kprokopenko@google.com>
diff --git a/front_end/models/persistence/PersistenceImpl.ts b/front_end/models/persistence/PersistenceImpl.ts
index 0296938..9056a84 100644
--- a/front_end/models/persistence/PersistenceImpl.ts
+++ b/front_end/models/persistence/PersistenceImpl.ts
@@ -15,7 +15,7 @@
let persistenceInstance: PersistenceImpl;
-export class PersistenceImpl extends Common.ObjectWrapper.ObjectWrapper {
+export class PersistenceImpl extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
private readonly workspace: Workspace.Workspace.WorkspaceImpl;
private readonly breakpointManager: Bindings.BreakpointManager.BreakpointManager;
private readonly filePathPrefixesToBindingCount: Map<string, number>;
@@ -348,9 +348,16 @@
export const NodeSuffix = '\n});';
export const NodeShebang = '#!/usr/bin/env node';
-export const Events = {
- BindingCreated: Symbol('BindingCreated'),
- BindingRemoved: Symbol('BindingRemoved'),
+// TODO(crbug.com/1167717): Make this a const enum again
+// eslint-disable-next-line rulesdir/const_enum
+export enum Events {
+ BindingCreated = 'BindingCreated',
+ BindingRemoved = 'BindingRemoved',
+}
+
+export type EventTypes = {
+ [Events.BindingCreated]: PersistenceBinding,
+ [Events.BindingRemoved]: PersistenceBinding,
};
export class PathEncoder {
diff --git a/front_end/models/persistence/PersistenceUtils.ts b/front_end/models/persistence/PersistenceUtils.ts
index 4ae74e9..13be6a1 100644
--- a/front_end/models/persistence/PersistenceUtils.ts
+++ b/front_end/models/persistence/PersistenceUtils.ts
@@ -77,8 +77,8 @@
persistence.addEventListener(Events.BindingRemoved, this.bindingChanged, this);
}
- private bindingChanged(event: Common.EventTarget.EventTargetEvent): void {
- const binding = event.data as PersistenceBinding;
+ private bindingChanged(event: Common.EventTarget.EventTargetEvent<PersistenceBinding>): void {
+ const binding = event.data;
this.dispatchEventToListeners(Components.Linkifier.LinkDecorator.Events.LinkIconChanged, binding.network);
}
diff --git a/front_end/panels/sources/NavigatorView.ts b/front_end/panels/sources/NavigatorView.ts
index f6f562e..a9a585d 100644
--- a/front_end/panels/sources/NavigatorView.ts
+++ b/front_end/panels/sources/NavigatorView.ts
@@ -270,8 +270,9 @@
}
}
- private onBindingChanged(event: Common.EventTarget.EventTargetEvent): void {
- const binding = (event.data as Persistence.Persistence.PersistenceBinding);
+ private onBindingChanged(event: Common.EventTarget.EventTargetEvent<Persistence.Persistence.PersistenceBinding>):
+ void {
+ const binding = event.data;
// Update UISourceCode titles.
const networkNodes = this.uiSourceCodeNodes.get(binding.network);
diff --git a/front_end/panels/sources/TabbedEditorContainer.ts b/front_end/panels/sources/TabbedEditorContainer.ts
index 544188b..7f0bd59 100644
--- a/front_end/panels/sources/TabbedEditorContainer.ts
+++ b/front_end/panels/sources/TabbedEditorContainer.ts
@@ -108,8 +108,9 @@
this.uriToUISourceCode = new Map();
}
- private onBindingCreated(event: Common.EventTarget.EventTargetEvent): void {
- const binding = (event.data as Persistence.Persistence.PersistenceBinding);
+ private onBindingCreated(event: Common.EventTarget.EventTargetEvent<Persistence.Persistence.PersistenceBinding>):
+ void {
+ const binding = event.data;
this.updateFileTitle(binding.fileSystem);
const networkTabId = this.tabIds.get(binding.network);
@@ -145,8 +146,9 @@
this.updateHistory();
}
- private onBindingRemoved(event: Common.EventTarget.EventTargetEvent): void {
- const binding = (event.data as Persistence.Persistence.PersistenceBinding);
+ private onBindingRemoved(event: Common.EventTarget.EventTargetEvent<Persistence.Persistence.PersistenceBinding>):
+ void {
+ const binding = event.data;
this.updateFileTitle(binding.fileSystem);
}