aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/bg/js/anki.js2
-rw-r--r--ext/bg/js/backend.js2
-rw-r--r--ext/bg/js/database.js60
-rw-r--r--ext/fg/js/popup-proxy-host.js2
-rw-r--r--ext/mixed/js/display.js6
-rw-r--r--ext/mixed/js/extension.js2
6 files changed, 30 insertions, 44 deletions
diff --git a/ext/bg/js/anki.js b/ext/bg/js/anki.js
index bd4e46cd..5c89aad8 100644
--- a/ext/bg/js/anki.js
+++ b/ext/bg/js/anki.js
@@ -67,7 +67,7 @@ class AnkiConnect {
if (this.remoteVersion < this.localVersion) {
this.remoteVersion = await this.ankiInvoke('version');
if (this.remoteVersion < this.localVersion) {
- throw 'Extension and plugin versions incompatible';
+ throw new Error('Extension and plugin versions incompatible');
}
}
}
diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js
index 3c5ad885..fb77b71e 100644
--- a/ext/bg/js/backend.js
+++ b/ext/bg/js/backend.js
@@ -75,7 +75,7 @@ class Backend {
const promise = handler(params, sender);
promise
.then(result => callback({result}))
- .catch(error => callback({error: typeof error.toString === 'function' ? error.toString() : error}));
+ .catch(error => callback(errorToJson(error)));
}
return true;
diff --git a/ext/bg/js/database.js b/ext/bg/js/database.js
index c812dee8..771a71c9 100644
--- a/ext/bg/js/database.js
+++ b/ext/bg/js/database.js
@@ -25,7 +25,7 @@ class Database {
async prepare() {
if (this.db) {
- throw 'Database already initialized';
+ throw new Error('Database already initialized');
}
this.db = new Dexie('dict');
@@ -48,9 +48,7 @@ class Database {
}
async purge() {
- if (!this.db) {
- throw 'Database not initialized';
- }
+ this.validate();
this.db.close();
await this.db.delete();
@@ -61,9 +59,7 @@ class Database {
}
async findTerms(term, titles) {
- if (!this.db) {
- throw 'Database not initialized';
- }
+ this.validate();
const results = [];
await this.db.terms.where('expression').equals(term).or('reading').equals(term).each(row => {
@@ -107,9 +103,7 @@ class Database {
}
async findTermsExact(term, reading, titles) {
- if (!this.db) {
- throw 'Database not initialized';
- }
+ this.validate();
const results = [];
await this.db.terms.where('expression').equals(term).each(row => {
@@ -122,9 +116,7 @@ class Database {
}
async findTermsBySequence(sequence, mainDictionary) {
- if (!this.db) {
- throw 'Database not initialized';
- }
+ this.validate();
const results = [];
await this.db.terms.where('sequence').equals(sequence).each(row => {
@@ -137,9 +129,7 @@ class Database {
}
async findTermMeta(term, titles) {
- if (!this.db) {
- throw 'Database not initialized';
- }
+ this.validate();
const results = [];
await this.db.termMeta.where('expression').equals(term).each(row => {
@@ -181,9 +171,7 @@ class Database {
}
async findKanji(kanji, titles) {
- if (!this.db) {
- throw 'Database not initialized';
- }
+ this.validate();
const results = [];
await this.db.kanji.where('character').equals(kanji).each(row => {
@@ -204,9 +192,7 @@ class Database {
}
async findKanjiMeta(kanji, titles) {
- if (!this.db) {
- throw 'Database not initialized';
- }
+ this.validate();
const results = [];
await this.db.kanjiMeta.where('character').equals(kanji).each(row => {
@@ -232,9 +218,7 @@ class Database {
}
async findTagForTitle(name, title) {
- if (!this.db) {
- throw 'Database not initialized';
- }
+ this.validate();
const cache = (this.tagCache.hasOwnProperty(title) ? this.tagCache[title] : (this.tagCache[title] = {}));
@@ -251,17 +235,13 @@ class Database {
}
async summarize() {
- if (this.db) {
- return this.db.dictionaries.toArray();
- } else {
- throw 'Database not initialized';
- }
+ this.validate();
+
+ return this.db.dictionaries.toArray();
}
async importDictionary(archive, progressCallback, exceptions) {
- if (!this.db) {
- throw 'Database not initialized';
- }
+ this.validate();
const maxTransactionLength = 1000;
const bulkAdd = async (table, items, total, current) => {
@@ -301,12 +281,12 @@ class Database {
const indexDataLoaded = async summary => {
if (summary.version > 3) {
- throw 'Unsupported dictionary version';
+ throw new Error('Unsupported dictionary version');
}
const count = await this.db.dictionaries.where('title').equals(summary.title).count();
if (count > 0) {
- throw 'Dictionary is already imported';
+ throw new Error('Dictionary is already imported');
}
await this.db.dictionaries.add(summary);
@@ -432,6 +412,12 @@ class Database {
);
}
+ validate() {
+ if (this.db === null) {
+ throw new Error('Database not initialized');
+ }
+ }
+
static async importDictionaryZip(
archive,
indexDataLoaded,
@@ -445,12 +431,12 @@ class Database {
const indexFile = zip.files['index.json'];
if (!indexFile) {
- throw 'No dictionary index found in archive';
+ throw new Error('No dictionary index found in archive');
}
const index = JSON.parse(await indexFile.async('string'));
if (!index.title || !index.revision) {
- throw 'Unrecognized dictionary format';
+ throw new Error('Unrecognized dictionary format');
}
const summary = {
diff --git a/ext/fg/js/popup-proxy-host.js b/ext/fg/js/popup-proxy-host.js
index 7fad71c1..f933639c 100644
--- a/ext/fg/js/popup-proxy-host.js
+++ b/ext/fg/js/popup-proxy-host.js
@@ -69,7 +69,7 @@ class PopupProxyHost {
getPopup(id) {
if (!this.popups.hasOwnProperty(id)) {
- throw 'Invalid popup ID';
+ throw new Error('Invalid popup ID');
}
return this.popups[id];
diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js
index 228e554a..9beb2c52 100644
--- a/ext/mixed/js/display.js
+++ b/ext/mixed/js/display.js
@@ -39,11 +39,11 @@ class Display {
}
onError(error) {
- throw 'Override me';
+ throw new Error('Override me');
}
onSearchClear() {
- throw 'Override me';
+ throw new Error('Override me');
}
onSourceTermView(e) {
@@ -386,7 +386,7 @@ class Display {
viewerButton.dataset.noteId = noteId;
}
} else {
- throw 'Note could note be added';
+ throw new Error('Note could not be added');
}
} catch (e) {
this.onError(e);
diff --git a/ext/mixed/js/extension.js b/ext/mixed/js/extension.js
index 5c803132..1a87003d 100644
--- a/ext/mixed/js/extension.js
+++ b/ext/mixed/js/extension.js
@@ -34,7 +34,7 @@ function toIterable(value) {
}
}
- throw 'Could not convert to iterable';
+ throw new Error('Could not convert to iterable');
}
function extensionHasChrome() {