aboutsummaryrefslogtreecommitdiff
path: root/src/background
diff options
context:
space:
mode:
authorShin'ya Ueoka <ueokande@i-beam.org>2020-03-27 07:23:17 +0900
committerShin'ya Ueoka <ueokande@i-beam.org>2020-03-27 20:47:35 +0900
commita8d78f1286fb3fe456a786b2c0e534d212835560 (patch)
treed42a27548a7f3ad8b71336109dc5b48f95ec554f /src/background
parentb2a37b8fc3e273dd71e1e3558c58be8002aa3789 (diff)
Separate repository's interface and its implementation
Diffstat (limited to 'src/background')
-rw-r--r--src/background/completion/BookmarkRepository.ts28
-rw-r--r--src/background/completion/CompletionUseCase.ts15
-rw-r--r--src/background/completion/HistoryRepository.ts28
-rw-r--r--src/background/completion/impl/BookmarkRepositoryImpl.ts28
-rw-r--r--src/background/completion/impl/HistoryRepositoryImpl.ts28
-rw-r--r--src/background/completion/impl/filters.ts (renamed from src/background/completion/filters.ts)0
-rw-r--r--src/background/di.ts4
7 files changed, 71 insertions, 60 deletions
diff --git a/src/background/completion/BookmarkRepository.ts b/src/background/completion/BookmarkRepository.ts
index 12f5455..14105c8 100644
--- a/src/background/completion/BookmarkRepository.ts
+++ b/src/background/completion/BookmarkRepository.ts
@@ -1,32 +1,8 @@
-import { injectable } from "tsyringe";
-
export type BookmarkItem = {
title: string
url: string
}
-const COMPLETION_ITEM_LIMIT = 10;
-
-@injectable()
-export default class BookmarkRepository {
- async queryBookmarks(query: string): Promise<BookmarkItem[]> {
- const items = await browser.bookmarks.search({ query });
- return items
- .filter(item => item.title && item.title.length > 0)
- .filter(item => item.type === 'bookmark' && item.url)
- .filter((item) => {
- let url = undefined;
- try {
- url = new URL(item.url!!);
- } catch (e) {
- return false;
- }
- return url.protocol !== 'place:';
- })
- .slice(0, COMPLETION_ITEM_LIMIT)
- .map(item => ({
- title: item.title!!,
- url: item.url!!,
- }));
- }
+export default interface BookmarkRepository {
+ queryBookmarks(query: string): Promise<BookmarkItem[]>;
}
diff --git a/src/background/completion/CompletionUseCase.ts b/src/background/completion/CompletionUseCase.ts
index fd3c279..f7531e7 100644
--- a/src/background/completion/CompletionUseCase.ts
+++ b/src/background/completion/CompletionUseCase.ts
@@ -1,8 +1,8 @@
import { inject, injectable } from "tsyringe";
-import HistoryRepository from "./HistoryRepository";
-import BookmarkRepository from "./BookmarkRepository";
import CachedSettingRepository from "../repositories/CachedSettingRepository";
import CompletionType from "../../shared/CompletionType";
+import BookmarkRepository from "./BookmarkRepository";
+import HistoryRepository from "./HistoryRepository";
export type BookmarkItem = {
title: string
@@ -17,10 +17,9 @@ export type HistoryItem = {
@injectable()
export default class CompletionUseCase {
constructor(
- private bookmarkRepository: BookmarkRepository,
- private historyRepository: HistoryRepository,
- @inject("CachedSettingRepository")
- private cachedSettingRepository: CachedSettingRepository,
+ @inject('BookmarkRepository') private bookmarkRepository: BookmarkRepository,
+ @inject('HistoryRepository') private historyRepository: HistoryRepository,
+ @inject("CachedSettingRepository") private cachedSettingRepository: CachedSettingRepository,
) {
}
@@ -50,11 +49,11 @@ export default class CompletionUseCase {
.filter(key => key.startsWith(query))
}
- requestBookmarks(query: any): Promise<BookmarkItem[]> {
+ requestBookmarks(query: string): Promise<BookmarkItem[]> {
return this.bookmarkRepository.queryBookmarks(query);
}
- async requestHistory(query: string): Promise<HistoryItem[]> {
+ requestHistory(query: string): Promise<HistoryItem[]> {
return this.historyRepository.queryHistories(query);
}
} \ No newline at end of file
diff --git a/src/background/completion/HistoryRepository.ts b/src/background/completion/HistoryRepository.ts
index 1cfaf1b..5eb3a2b 100644
--- a/src/background/completion/HistoryRepository.ts
+++ b/src/background/completion/HistoryRepository.ts
@@ -1,32 +1,8 @@
-import * as filters from "./filters";
-import { injectable } from "tsyringe";
-
export type HistoryItem = {
title: string
url: string
}
-const COMPLETION_ITEM_LIMIT = 10;
-
-@injectable()
-export default class HistoryRepository {
- async queryHistories(keywords: string): Promise<HistoryItem[]> {
- const items = await browser.history.search({
- text: keywords,
- startTime: 0,
- });
-
- return [items]
- .map(filters.filterBlankTitle)
- .map(filters.filterHttp)
- .map(filters.filterByTailingSlash)
- .map(pages => filters.filterByPathname(pages, COMPLETION_ITEM_LIMIT))
- .map(pages => filters.filterByOrigin(pages, COMPLETION_ITEM_LIMIT))[0]
- .sort((x, y) => Number(y.visitCount) - Number(x.visitCount))
- .slice(0, COMPLETION_ITEM_LIMIT)
- .map(item => ({
- title: item.title!!,
- url: item.url!!,
- }))
- }
+export default interface HistoryRepository {
+ queryHistories(keywords: string): Promise<HistoryItem[]>;
}
diff --git a/src/background/completion/impl/BookmarkRepositoryImpl.ts b/src/background/completion/impl/BookmarkRepositoryImpl.ts
new file mode 100644
index 0000000..58df129
--- /dev/null
+++ b/src/background/completion/impl/BookmarkRepositoryImpl.ts
@@ -0,0 +1,28 @@
+import { injectable } from "tsyringe";
+import BookmarkRepository, {BookmarkItem} from "../BookmarkRepository";
+
+const COMPLETION_ITEM_LIMIT = 10;
+
+@injectable()
+export default class BookmarkRepositoryImpl implements BookmarkRepository {
+ async queryBookmarks(query: string): Promise<BookmarkItem[]> {
+ const items = await browser.bookmarks.search({query});
+ return items
+ .filter(item => item.title && item.title.length > 0)
+ .filter(item => item.type === 'bookmark' && item.url)
+ .filter((item) => {
+ let url = undefined;
+ try {
+ url = new URL(item.url!!);
+ } catch (e) {
+ return false;
+ }
+ return url.protocol !== 'place:';
+ })
+ .slice(0, COMPLETION_ITEM_LIMIT)
+ .map(item => ({
+ title: item.title!!,
+ url: item.url!!,
+ }));
+ }
+}
diff --git a/src/background/completion/impl/HistoryRepositoryImpl.ts b/src/background/completion/impl/HistoryRepositoryImpl.ts
new file mode 100644
index 0000000..42691aa
--- /dev/null
+++ b/src/background/completion/impl/HistoryRepositoryImpl.ts
@@ -0,0 +1,28 @@
+import { injectable } from "tsyringe";
+import * as filters from "./filters";
+import HistoryRepository, {HistoryItem} from "../HistoryRepository";
+
+const COMPLETION_ITEM_LIMIT = 10;
+
+@injectable()
+export default class HistoryRepositoryImpl implements HistoryRepository {
+ async queryHistories(keywords: string): Promise<HistoryItem[]> {
+ const items = await browser.history.search({
+ text: keywords,
+ startTime: 0,
+ });
+
+ return [items]
+ .map(filters.filterBlankTitle)
+ .map(filters.filterHttp)
+ .map(filters.filterByTailingSlash)
+ .map(pages => filters.filterByPathname(pages, COMPLETION_ITEM_LIMIT))
+ .map(pages => filters.filterByOrigin(pages, COMPLETION_ITEM_LIMIT))[0]
+ .sort((x, y) => Number(y.visitCount) - Number(x.visitCount))
+ .slice(0, COMPLETION_ITEM_LIMIT)
+ .map(item => ({
+ title: item.title!!,
+ url: item.url!!,
+ }))
+ }
+}
diff --git a/src/background/completion/filters.ts b/src/background/completion/impl/filters.ts
index 98957a7..98957a7 100644
--- a/src/background/completion/filters.ts
+++ b/src/background/completion/impl/filters.ts
diff --git a/src/background/di.ts b/src/background/di.ts
index 9fc230c..0b52e0b 100644
--- a/src/background/di.ts
+++ b/src/background/di.ts
@@ -4,8 +4,12 @@ import { LocalSettingRepository, SyncSettingRepository } from "./repositories/Se
import { NotifierImpl } from "./presenters/Notifier";
import { CachedSettingRepositoryImpl } from "./repositories/CachedSettingRepository";
import { container } from 'tsyringe';
+import HistoryRepositoryImpl from "./completion/impl/HistoryRepositoryImpl";
+import BookmarkRepositoryImpl from "./completion/impl/BookmarkRepositoryImpl";
container.register('LocalSettingRepository', { useValue: LocalSettingRepository });
container.register('SyncSettingRepository', { useClass: SyncSettingRepository });
container.register('CachedSettingRepository', { useClass: CachedSettingRepositoryImpl });
container.register('Notifier', { useClass: NotifierImpl });
+container.register('HistoryRepository', { useClass: HistoryRepositoryImpl });
+container.register('BookmarkRepository', { useClass: BookmarkRepositoryImpl });