Skip to content

Commit 433affd

Browse files
authored
refactor: replace injection tokens with symbols and use provider module (#488)
This PR includes two concepts of refactoring. - Migrate tokens at `@inject()` of inversify with the Symbol instead of using a string. Using symbols is more robust than string. - Use [inversify-binding-decorators](https://github.com/inversify/inversify-binding-decorators) to bind class instead of binding manually.
1 parent 24c5754 commit 433affd

File tree

128 files changed

+622
-523
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+622
-523
lines changed

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
"homepage": "https://github.com/ueokande/vimmatic",
2828
"dependencies": {
2929
"@abraham/reflection": "^0.12.0",
30-
"inversify": "^6.0.1",
30+
"inversify": "^6.0.2",
31+
"inversify-binding-decorators": "^4.0.0",
3132
"prismjs": "^1.29.0",
3233
"react": "18.2.0",
3334
"react-dom": "18.2.0",

pnpm-lock.yaml

+11-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/background/Application.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ import { injectable, inject } from "inversify";
22
import { BackgroundMessageListener } from "./messaging/BackgroundMessageListener";
33
import { FindPortListener } from "./messaging/FindPortListener";
44
import { VersionUseCase } from "./usecases/VersionUseCase";
5-
import type { FindRepository } from "./repositories/FindRepository";
6-
import type { ReadyFrameRepository } from "./repositories/ReadyFrameRepository";
5+
import { FindRepository } from "./repositories/FindRepository";
6+
import { ReadyFrameRepository } from "./repositories/ReadyFrameRepository";
77
import { SettingsEventUseCase } from "./usecases/SettingsEventUseCase";
8-
import type { FrameClient } from "./clients/FrameClient";
8+
import { FrameClient } from "./clients/FrameClient";
99
import { AddonEnabledEventUseCase } from "./usecases/AddonEnabledEventUseCase";
10-
import type { LastSelectedTabRepository } from "./repositories/LastSelectedTabRepository";
10+
import { LastSelectedTabRepository } from "./repositories/LastSelectedTabRepository";
1111
import { ModeUseCase } from "./usecases/ModeUseCase";
1212
import { HintModeUseCase } from "./usecases/HintModeUseCase";
1313

@@ -18,15 +18,15 @@ export class Application {
1818
private readonly backgroundMessageListener: BackgroundMessageListener,
1919
@inject(VersionUseCase)
2020
private readonly versionUseCase: VersionUseCase,
21-
@inject("FindRepository")
21+
@inject(FindRepository)
2222
private readonly findRepository: FindRepository,
23-
@inject("ReadyFrameRepository")
23+
@inject(ReadyFrameRepository)
2424
private readonly frameRepository: ReadyFrameRepository,
25-
@inject("LastSelectedTabRepository")
25+
@inject(LastSelectedTabRepository)
2626
private readonly lastSelectedTabRepository: LastSelectedTabRepository,
2727
@inject(SettingsEventUseCase)
2828
private readonly settingsEventUseCase: SettingsEventUseCase,
29-
@inject("FrameClient")
29+
@inject(FrameClient)
3030
private readonly frameClient: FrameClient,
3131
@inject(AddonEnabledEventUseCase)
3232
private readonly addonEnabledEventUseCase: AddonEnabledEventUseCase,

src/background/clients/AddonEnabledClient.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { injectable } from "inversify";
1+
import { provide } from "inversify-binding-decorators";
22
import { newSender } from "./ContentMessageSender";
33

44
export interface AddonEnabledClient {
@@ -7,7 +7,9 @@ export interface AddonEnabledClient {
77
disable(tabId: number): Promise<void>;
88
}
99

10-
@injectable()
10+
export const AddonEnabledClient = Symbol("AddonEnabledClient");
11+
12+
@provide(AddonEnabledClient)
1113
export class AddonEnabledClientImpl implements AddonEnabledClient {
1214
async enable(tabId: number): Promise<void> {
1315
const sender = newSender(tabId);

src/background/clients/ConsoleClient.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { injectable } from "inversify";
1+
import { provide } from "inversify-binding-decorators";
22
import { newSender } from "./ConsoleMessageSender";
33

44
export interface ConsoleClient {
@@ -13,7 +13,9 @@ export interface ConsoleClient {
1313
hide(tabId: number): Promise<void>;
1414
}
1515

16-
@injectable()
16+
export const ConsoleClient = Symbol("ConsoleClient");
17+
18+
@provide(ConsoleClient)
1719
export class ConsoleClientImpl implements ConsoleClient {
1820
async showCommand(tabId: number, command: string): Promise<void> {
1921
const sender = newSender(tabId);

src/background/clients/ConsoleFrameClient.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
import { injectable } from "inversify";
1+
import { provide } from "inversify-binding-decorators";
22
import { newSender } from "./ContentMessageSender";
33

44
export interface ConsoleFrameClient {
55
resize(tabId: number, width: number, height: number): Promise<void>;
66
}
77

8-
@injectable()
8+
export const ConsoleFrameClient = Symbol("ConsoleFrameClient");
9+
10+
@provide(ConsoleFrameClient)
911
export class ConsoleFrameClientImpl implements ConsoleFrameClient {
1012
async resize(tabId: number, width: number, height: number): Promise<void> {
1113
const sender = newSender(tabId);

src/background/clients/ContentMessageClient.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { injectable } from "inversify";
1+
import { provide } from "inversify-binding-decorators";
22
import { newSender } from "./ContentMessageSender";
33

44
export interface ContentMessageClient {
@@ -40,7 +40,9 @@ export interface ContentMessageClient {
4040
focusFirstInput(tabId: number): Promise<void>;
4141
}
4242

43-
@injectable()
43+
export const ContentMessageClient = Symbol("ContentMessageClient");
44+
45+
@provide(ContentMessageClient)
4446
export class ContentMessageClientImpl implements ContentMessageClient {
4547
async scrollTo(
4648
tabId: number,

src/background/clients/FindClient.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { injectable } from "inversify";
1+
import { provide } from "inversify-binding-decorators";
22
import { newSender } from "./ContentMessageSender";
33
import type { FindQuery } from "../../shared/findQuery";
44

@@ -10,7 +10,9 @@ export interface FindClient {
1010
clearSelection(tabId: number, frameId: number): Promise<void>;
1111
}
1212

13-
@injectable()
13+
export const FindClient = Symbol("FindClient");
14+
15+
@provide(FindClient)
1416
export class FindClientImpl implements FindClient {
1517
async findNext(
1618
tabId: number,

src/background/clients/FrameClient.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
import { injectable } from "inversify";
1+
import { provide } from "inversify-binding-decorators";
22
import { newSender } from "./ContentMessageSender";
33

44
export interface FrameClient {
55
notifyFrameId(tabId: number, frameId: number): Promise<void>;
66
}
77

8-
@injectable()
8+
export const FrameClient = Symbol("FrameClient");
9+
10+
@provide(FrameClient)
911
export class FrameClientImpl implements FrameClient {
1012
async notifyFrameId(tabId: number, frameId: number): Promise<void> {
1113
const sender = newSender(tabId, frameId);

src/background/clients/HintClient.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { injectable } from "inversify";
1+
import { provide } from "inversify-binding-decorators";
22
import { newSender } from "./ContentMessageSender";
33
import type { HTMLElementType } from "../../shared/HTMLElementType";
44

@@ -42,7 +42,9 @@ export interface HintClient {
4242
clickElement(tabId: number, frameId: number, element: string): Promise<void>;
4343
}
4444

45-
@injectable()
45+
export const HintClient = Symbol("HintClient");
46+
47+
@provide(HintClient)
4648
export class HintClientImpl implements HintClient {
4749
async lookupTargets(
4850
tabId: number,

src/background/clients/ModeClient.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
import { injectable } from "inversify";
1+
import { provide } from "inversify-binding-decorators";
22
import { newSender } from "./ContentMessageSender";
33
import type { Mode } from "../../shared/mode";
44

55
export interface ModeClient {
66
setMode(tabid: number, mode: Mode): Promise<void>;
77
}
88

9-
@injectable()
9+
export const ModeClient = Symbol("ModeClient");
10+
11+
@provide(ModeClient)
1012
export class ModeClientImpl implements ModeClient {
1113
async setMode(tabId: number, mode: Mode): Promise<void> {
1214
const sender = newSender(tabId);

src/background/clients/NavigateClient.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { injectable } from "inversify";
1+
import { provide } from "inversify-binding-decorators";
22
import { newSender } from "./ContentMessageSender";
33

44
export interface NavigateClient {
@@ -11,7 +11,9 @@ export interface NavigateClient {
1111
linkPrev(tabId: number): Promise<void>;
1212
}
1313

14-
@injectable()
14+
export const NavigateClient = Symbol("NavigateClient");
15+
16+
@provide(NavigateClient)
1517
export class NavigateClientImpl implements NavigateClient {
1618
async historyNext(tabId: number): Promise<void> {
1719
const sender = newSender(tabId);

src/background/clients/TopFrameClient.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { injectable } from "inversify";
1+
import { provide } from "inversify-binding-decorators";
22
import { newSender } from "./ContentMessageSender";
33

44
export type Rect = {
@@ -17,7 +17,9 @@ export interface TopFrameClient {
1717
getFramePosition(tabId: number, frameId: number): Promise<Point | undefined>;
1818
}
1919

20-
@injectable()
20+
export const TopFrameClient = Symbol("TopFrameClient");
21+
22+
@provide(TopFrameClient)
2123
export class TopFrameClientImpl implements TopFrameClient {
2224
getWindowViewport(tabId: number): Promise<Rect> {
2325
const sender = newSender(tabId, 0);

src/background/command/CommandRegistry.ts

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ export interface CommandRegistry {
88
getCommands(): Command[];
99
}
1010

11+
export const CommandRegistry = Symbol("CommandRegistry");
12+
1113
export class CommandRegistryImpl implements CommandRegistry {
1214
private readonly commands: Command[] = [];
1315
private readonly commandNames: Map<string, Command> = new Map();

src/background/command/index.ts

+11-14
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,29 @@ import { SetCommand } from "./SetCommand";
1111
import { TabOpenCommand } from "./TabOpenCommand";
1212
import { WindowOpenCommand } from "./WindowOpenCommand";
1313
import { BufferCommandHelper } from "./BufferCommandHelper";
14-
import type { PropertyRegistry } from "../property/PropertyRegistry";
15-
import type { PropertySettings } from "../settings/PropertySettings";
16-
import type { SearchEngineSettings } from "../settings/SearchEngineSettings";
14+
import { PropertyRegistry } from "../property/PropertyRegistry";
15+
import { PropertySettings } from "../settings/PropertySettings";
16+
import { SearchEngineSettings } from "../settings/SearchEngineSettings";
1717
import { type CommandRegistry, CommandRegistryImpl } from "./CommandRegistry";
18-
import type { LastSelectedTabRepository } from "../repositories/LastSelectedTabRepository";
19-
import type { ConsoleClient } from "../clients/ConsoleClient";
18+
import { LastSelectedTabRepository } from "../repositories/LastSelectedTabRepository";
19+
import { ConsoleClient } from "../clients/ConsoleClient";
2020

2121
@injectable()
2222
export class CommandRegistryFactory {
23-
private readonly propertyRegistry: PropertyRegistry;
24-
2523
private readonly bufferCommandHelper: BufferCommandHelper;
2624

2725
constructor(
28-
@inject("PropertyRegistry")
29-
propertyRegistry: PropertyRegistry,
30-
@inject("ConsoleClient")
26+
@inject(PropertyRegistry)
27+
private readonly propertyRegistry: PropertyRegistry,
28+
@inject(ConsoleClient)
3129
private readonly consoleClient: ConsoleClient,
32-
@inject("PropertySettings")
30+
@inject(PropertySettings)
3331
private readonly propertySettings: PropertySettings,
34-
@inject("SearchEngineSettings")
32+
@inject(SearchEngineSettings)
3533
private readonly searchEngineSettings: SearchEngineSettings,
36-
@inject("LastSelectedTabRepository")
34+
@inject(LastSelectedTabRepository)
3735
private readonly lastSelectedTabRepository: LastSelectedTabRepository,
3836
) {
39-
this.propertyRegistry = propertyRegistry;
4037
this.bufferCommandHelper = new BufferCommandHelper(
4138
this.lastSelectedTabRepository,
4239
);

0 commit comments

Comments
 (0)