| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| export type Query = string|{ |
| query?: string, |
| url?: string, |
| title?: string, |
| }; |
| |
| export interface BookmarksApiProxy { |
| getTree(): Promise<chrome.bookmarks.BookmarkTreeNode[]>; |
| search(query: Query): Promise<chrome.bookmarks.BookmarkTreeNode[]>; |
| update(id: string, changes: {title?: string, url?: string}): |
| Promise<chrome.bookmarks.BookmarkTreeNode>; |
| create(bookmark: chrome.bookmarks.CreateDetails): |
| Promise<chrome.bookmarks.BookmarkTreeNode>; |
| } |
| |
| export class BookmarksApiProxyImpl implements BookmarksApiProxy { |
| getTree() { |
| return chrome.bookmarks.getTree(); |
| } |
| |
| search(query: Query) { |
| return chrome.bookmarks.search(query); |
| } |
| |
| update(id: string, changes: {title?: string, url?: string}) { |
| return chrome.bookmarks.update(id, changes); |
| } |
| |
| create(bookmark: chrome.bookmarks.CreateDetails) { |
| return chrome.bookmarks.create(bookmark); |
| } |
| |
| static getInstance(): BookmarksApiProxy { |
| return instance || (instance = new BookmarksApiProxyImpl()); |
| } |
| |
| static setInstance(obj: BookmarksApiProxy) { |
| instance = obj; |
| } |
| } |
| |
| let instance: BookmarksApiProxy|null = null; |