diff options
Diffstat (limited to 'src/background/completion/BookmarkRepository.ts')
-rw-r--r-- | src/background/completion/BookmarkRepository.ts | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/background/completion/BookmarkRepository.ts b/src/background/completion/BookmarkRepository.ts new file mode 100644 index 0000000..12f5455 --- /dev/null +++ b/src/background/completion/BookmarkRepository.ts @@ -0,0 +1,32 @@ +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!!, + })); + } +} |