Use TSyringe on content script

This commit is contained in:
Shin'ya Ueoka 2019-05-20 22:21:31 +09:00
parent 71f3a1ea2d
commit 1666e626b0
35 changed files with 398 additions and 433 deletions

View file

@ -1,19 +1,17 @@
import AddonIndicatorClient, { AddonIndicatorClientImpl }
from '../client/AddonIndicatorClient';
import AddonEnabledRepository, { AddonEnabledRepositoryImpl }
from '../repositories/AddonEnabledRepository';
import { injectable, inject } from 'tsyringe';
import AddonIndicatorClient from '../client/AddonIndicatorClient';
import AddonEnabledRepository from '../repositories/AddonEnabledRepository';
@injectable()
export default class AddonEnabledUseCase {
private indicator: AddonIndicatorClient;
private repository: AddonEnabledRepository;
constructor(
@inject('AddonIndicatorClient')
private indicator: AddonIndicatorClient,
constructor({
indicator = new AddonIndicatorClientImpl(),
repository = new AddonEnabledRepositoryImpl(),
} = {}) {
this.indicator = indicator;
this.repository = repository;
@inject('AddonEnabledRepository')
private repository: AddonEnabledRepository,
) {
}
async enable(): Promise<void> {

View file

@ -1,31 +1,18 @@
import { injectable, inject } from 'tsyringe';
import * as urls from '../../shared/urls';
import ClipboardRepository, { ClipboardRepositoryImpl }
from '../repositories/ClipboardRepository';
import SettingRepository, { SettingRepositoryImpl }
from '../repositories/SettingRepository';
import TabsClient, { TabsClientImpl }
from '../client/TabsClient';
import ConsoleClient, { ConsoleClientImpl } from '../client/ConsoleClient';
import ClipboardRepository from '../repositories/ClipboardRepository';
import SettingRepository from '../repositories/SettingRepository';
import TabsClient from '../client/TabsClient';
import ConsoleClient from '../client/ConsoleClient';
@injectable()
export default class ClipboardUseCase {
private repository: ClipboardRepository;
private settingRepository: SettingRepository;
private client: TabsClient;
private consoleClient: ConsoleClient;
constructor({
repository = new ClipboardRepositoryImpl(),
settingRepository = new SettingRepositoryImpl(),
client = new TabsClientImpl(),
consoleClient = new ConsoleClientImpl(),
} = {}) {
this.repository = repository;
this.settingRepository = settingRepository;
this.client = client;
this.consoleClient = consoleClient;
constructor(
@inject('ClipboardRepository') private repository: ClipboardRepository,
@inject('SettingRepository') private settingRepository: SettingRepository,
@inject('TabsClient') private client: TabsClient,
@inject('ConsoleClient') private consoleClient: ConsoleClient,
) {
}
async yankCurrentURL(): Promise<string> {

View file

@ -1,13 +1,12 @@
import ConsoleFramePresenter, { ConsoleFramePresenterImpl }
from '../presenters/ConsoleFramePresenter';
import { injectable, inject } from 'tsyringe';
import ConsoleFramePresenter from '../presenters/ConsoleFramePresenter';
@injectable()
export default class ConsoleFrameUseCase {
private consoleFramePresenter: ConsoleFramePresenter;
constructor({
consoleFramePresenter = new ConsoleFramePresenterImpl(),
} = {}) {
this.consoleFramePresenter = consoleFramePresenter;
constructor(
@inject('ConsoleFramePresenter')
private consoleFramePresenter: ConsoleFramePresenter,
) {
}
unfocus() {

View file

@ -1,13 +1,11 @@
import FindMasterClient, { FindMasterClientImpl }
from '../client/FindMasterClient';
import { injectable, inject } from 'tsyringe';
import FindMasterClient from '../client/FindMasterClient';
@injectable()
export default class FindSlaveUseCase {
private findMasterClient: FindMasterClient;
constructor({
findMasterClient = new FindMasterClientImpl(),
} = {}) {
this.findMasterClient = findMasterClient;
constructor(
@inject('FindMasterClient') private findMasterClient: FindMasterClient,
) {
}
findNext() {

View file

@ -1,28 +1,17 @@
import FindPresenter, { FindPresenterImpl } from '../presenters/FindPresenter';
import FindRepository, { FindRepositoryImpl }
from '../repositories/FindRepository';
import FindClient, { FindClientImpl } from '../client/FindClient';
import ConsoleClient, { ConsoleClientImpl } from '../client/ConsoleClient';
import { injectable, inject } from 'tsyringe';
import FindPresenter from '../presenters/FindPresenter';
import FindRepository from '../repositories/FindRepository';
import FindClient from '../client/FindClient';
import ConsoleClient from '../client/ConsoleClient';
@injectable()
export default class FindUseCase {
private presenter: FindPresenter;
private repository: FindRepository;
private client: FindClient;
private consoleClient: ConsoleClient;
constructor({
presenter = new FindPresenterImpl() as FindPresenter,
repository = new FindRepositoryImpl(),
client = new FindClientImpl(),
consoleClient = new ConsoleClientImpl(),
} = {}) {
this.presenter = presenter;
this.repository = repository;
this.client = client;
this.consoleClient = consoleClient;
constructor(
@inject('FindPresenter') private presenter: FindPresenter,
@inject('FindRepository') private repository: FindRepository,
@inject('FindClient') private client: FindClient,
@inject('ConsoleClient') private consoleClient: ConsoleClient,
) {
}
async startFind(keyword?: string): Promise<void> {

View file

@ -1,13 +1,11 @@
import FocusPresenter, { FocusPresenterImpl }
from '../presenters/FocusPresenter';
import { injectable, inject } from 'tsyringe';
import FocusPresenter from '../presenters/FocusPresenter';
@injectable()
export default class FocusUseCases {
private presenter: FocusPresenter;
constructor({
presenter = new FocusPresenterImpl(),
} = {}) {
this.presenter = presenter;
constructor(
@inject('FocusPresenter') private presenter: FocusPresenter,
) {
}
focusFirstInput() {

View file

@ -1,31 +1,26 @@
import FollowKeyRepository, { FollowKeyRepositoryImpl }
from '../repositories/FollowKeyRepository';
import FollowMasterRepository, { FollowMasterRepositoryImpl }
from '../repositories/FollowMasterRepository';
import { injectable, inject } from 'tsyringe';
import FollowKeyRepository from '../repositories/FollowKeyRepository';
import FollowMasterRepository from '../repositories/FollowMasterRepository';
import FollowSlaveClient, { FollowSlaveClientImpl }
from '../client/FollowSlaveClient';
import SettingRepository from '../repositories/SettingRepository';
import HintKeyProducer from './HintKeyProducer';
import SettingRepository, { SettingRepositoryImpl }
from '../repositories/SettingRepository';
@injectable()
export default class FollowMasterUseCase {
private followKeyRepository: FollowKeyRepository;
private followMasterRepository: FollowMasterRepository;
private settingRepository: SettingRepository;
// TODO Make repository
private producer: HintKeyProducer | null;
constructor({
followKeyRepository = new FollowKeyRepositoryImpl(),
followMasterRepository = new FollowMasterRepositoryImpl(),
settingRepository = new SettingRepositoryImpl(),
} = {}) {
this.followKeyRepository = followKeyRepository;
this.followMasterRepository = followMasterRepository;
this.settingRepository = settingRepository;
constructor(
@inject('FollowKeyRepository')
private followKeyRepository: FollowKeyRepository,
@inject('FollowMasterRepository')
private followMasterRepository: FollowMasterRepository,
@inject('SettingRepository')
private settingRepository: SettingRepository,
) {
this.producer = null;
}

View file

@ -1,11 +1,9 @@
import FollowSlaveRepository, { FollowSlaveRepositoryImpl }
from '../repositories/FollowSlaveRepository';
import FollowPresenter, { FollowPresenterImpl }
from '../presenters/FollowPresenter';
import TabsClient, { TabsClientImpl } from '../client/TabsClient';
import { injectable, inject } from 'tsyringe';
import FollowSlaveRepository from '../repositories/FollowSlaveRepository';
import FollowPresenter from '../presenters/FollowPresenter';
import TabsClient from '../client/TabsClient';
import FollowMasterClient from '../client/FollowMasterClient';
import { LinkHint, InputHint } from '../presenters/Hint';
import FollowMasterClient, { FollowMasterClientImpl }
from '../client/FollowMasterClient';
import Key from '../domains/Key';
interface Size {
@ -18,25 +16,21 @@ interface Point {
y: number;
}
@injectable()
export default class FollowSlaveUseCase {
private presenter: FollowPresenter;
constructor(
@inject('FollowPresenter')
private presenter: FollowPresenter,
private tabsClient: TabsClient;
@inject('TabsClient')
private tabsClient: TabsClient,
private followMasterClient: FollowMasterClient;
@inject('FollowMasterClient')
private followMasterClient: FollowMasterClient,
private followSlaveRepository: FollowSlaveRepository;
constructor({
presenter = new FollowPresenterImpl(),
tabsClient = new TabsClientImpl(),
followMasterClient = new FollowMasterClientImpl(window.top),
followSlaveRepository = new FollowSlaveRepositoryImpl(),
} = {}) {
this.presenter = presenter;
this.tabsClient = tabsClient;
this.followMasterClient = followMasterClient;
this.followSlaveRepository = followSlaveRepository;
@inject('FollowSlaveRepository')
private followSlaveRepository: FollowSlaveRepository,
) {
}
countTargets(viewSize: Size, framePosition: Point): void {

View file

@ -1,10 +1,7 @@
import KeymapRepository, { KeymapRepositoryImpl }
from '../repositories/KeymapRepository';
import SettingRepository, { SettingRepositoryImpl }
from '../repositories/SettingRepository';
import AddonEnabledRepository, { AddonEnabledRepositoryImpl }
from '../repositories/AddonEnabledRepository';
import { injectable, inject } from 'tsyringe';
import KeymapRepository from '../repositories/KeymapRepository';
import SettingRepository from '../repositories/SettingRepository';
import AddonEnabledRepository from '../repositories/AddonEnabledRepository';
import * as operations from '../../shared/operations';
import { Keymaps } from '../../shared/Settings';
import Key from '../domains/Key';
@ -17,22 +14,18 @@ const reservedKeymaps: Keymaps = {
'<C-[>': { type: operations.CANCEL },
};
@injectable()
export default class KeymapUseCase {
private repository: KeymapRepository;
constructor(
@inject('KeymapRepository')
private repository: KeymapRepository,
private settingRepository: SettingRepository;
@inject('SettingRepository')
private settingRepository: SettingRepository,
private addonEnabledRepository: AddonEnabledRepository;
constructor({
repository = new KeymapRepositoryImpl(),
settingRepository = new SettingRepositoryImpl(),
addonEnabledRepository = new AddonEnabledRepositoryImpl(),
} = {}) {
this.repository = repository;
this.settingRepository = settingRepository;
this.addonEnabledRepository = addonEnabledRepository;
@inject('AddonEnabledRepository')
private addonEnabledRepository: AddonEnabledRepository,
) {
}
nextOp(key: Key): operations.Operation | null {

View file

@ -1,13 +1,11 @@
import MarkKeyRepository, { MarkKeyRepositoryImpl }
from '../repositories/MarkKeyRepository';
import { injectable, inject } from 'tsyringe';
import MarkKeyRepository from '../repositories/MarkKeyRepository';
@injectable()
export default class MarkKeyUseCase {
private repository: MarkKeyRepository;
constructor({
repository = new MarkKeyRepositoryImpl()
} = {}) {
this.repository = repository;
constructor(
@inject('MarkKeyRepository') private repository: MarkKeyRepository,
) {
}
isSetMode(): boolean {

View file

@ -1,35 +1,19 @@
import ScrollPresenter, { ScrollPresenterImpl }
from '../presenters/ScrollPresenter';
import MarkClient, { MarkClientImpl } from '../client/MarkClient';
import MarkRepository, { MarkRepositoryImpl }
from '../repositories/MarkRepository';
import SettingRepository, { SettingRepositoryImpl }
from '../repositories/SettingRepository';
import ConsoleClient, { ConsoleClientImpl } from '../client/ConsoleClient';
import { injectable, inject } from 'tsyringe';
import ScrollPresenter from '../presenters/ScrollPresenter';
import MarkClient from '../client/MarkClient';
import MarkRepository from '../repositories/MarkRepository';
import SettingRepository from '../repositories/SettingRepository';
import ConsoleClient from '../client/ConsoleClient';
@injectable()
export default class MarkUseCase {
private scrollPresenter: ScrollPresenter;
private client: MarkClient;
private repository: MarkRepository;
private settingRepository: SettingRepository;
private consoleClient: ConsoleClient;
constructor({
scrollPresenter = new ScrollPresenterImpl(),
client = new MarkClientImpl(),
repository = new MarkRepositoryImpl(),
settingRepository = new SettingRepositoryImpl(),
consoleClient = new ConsoleClientImpl(),
} = {}) {
this.scrollPresenter = scrollPresenter;
this.client = client;
this.repository = repository;
this.settingRepository = settingRepository;
this.consoleClient = consoleClient;
constructor(
@inject('ScrollPresenter') private scrollPresenter: ScrollPresenter,
@inject('MarkClient') private client: MarkClient,
@inject('MarkRepository') private repository: MarkRepository,
@inject('SettingRepository') private settingRepository: SettingRepository,
@inject('ConsoleClient') private consoleClient: ConsoleClient,
) {
}
async set(key: string): Promise<void> {

View file

@ -1,13 +1,12 @@
import NavigationPresenter, { NavigationPresenterImpl }
from '../presenters/NavigationPresenter';
import { injectable, inject } from 'tsyringe';
import NavigationPresenter from '../presenters/NavigationPresenter';
@injectable()
export default class NavigateUseCase {
private navigationPresenter: NavigationPresenter;
constructor({
navigationPresenter = new NavigationPresenterImpl(),
} = {}) {
this.navigationPresenter = navigationPresenter;
constructor(
@inject('NavigationPresenter')
private navigationPresenter: NavigationPresenter,
) {
}
openHistoryPrev(): void {

View file

@ -1,19 +1,13 @@
import ScrollPresenter, { ScrollPresenterImpl }
from '../presenters/ScrollPresenter';
import SettingRepository, { SettingRepositoryImpl }
from '../repositories/SettingRepository';
import { injectable, inject } from 'tsyringe';
import ScrollPresenter from '../presenters/ScrollPresenter';
import SettingRepository from '../repositories/SettingRepository';
@injectable()
export default class ScrollUseCase {
private presenter: ScrollPresenter;
private settingRepository: SettingRepository;
constructor({
presenter = new ScrollPresenterImpl(),
settingRepository = new SettingRepositoryImpl(),
} = {}) {
this.presenter = presenter;
this.settingRepository = settingRepository;
constructor(
@inject('ScrollPresenter') private presenter: ScrollPresenter,
@inject('SettingRepository') private settingRepository: SettingRepository,
) {
}
scrollVertically(count: number): void {

View file

@ -1,19 +1,14 @@
import SettingRepository, { SettingRepositoryImpl }
from '../repositories/SettingRepository';
import SettingClient, { SettingClientImpl } from '../client/SettingClient';
import { injectable, inject } from 'tsyringe';
import SettingRepository from '../repositories/SettingRepository';
import SettingClient from '../client/SettingClient';
import Settings from '../../shared/Settings';
@injectable()
export default class SettingUseCase {
private repository: SettingRepository;
private client: SettingClient;
constructor({
repository = new SettingRepositoryImpl(),
client = new SettingClientImpl(),
} = {}) {
this.repository = repository;
this.client = client;
constructor(
@inject('SettingRepository') private repository: SettingRepository,
@inject('SettingClient') private client: SettingClient,
) {
}
async reload(): Promise<Settings> {