From a6a28e52c6bb3665bc2b2443911023cb0ade62d7 Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Sat, 11 Mar 2023 01:30:35 +0900
Subject: [PATCH 1/2] refs #4191 Use better-sqlite3 instead of node-sqlite3
---
README.md | 4 +
package.json | 4 +-
src/main/database.ts | 61 +++----
src/main/db/account.ts | 389 +++++++++++++++++-----------------------
src/main/db/hashtags.ts | 100 +++++------
src/main/db/server.ts | 52 +++---
src/main/db/setting.ts | 79 ++++----
yarn.lock | 257 +++++++++++++++-----------
8 files changed, 454 insertions(+), 492 deletions(-)
diff --git a/README.md b/README.md
index bcf484d1..f5337d64 100644
--- a/README.md
+++ b/README.md
@@ -119,6 +119,10 @@ $ sudo apt-get install libfontconfig-dev
# install dependencies
$ yarn install
+# You need to rebuild because of better-sqlite3
+# Refs: https://github.com/WiseLibs/better-sqlite3/issues/919
+$ ./node_modules/.bin/electron-rebuild
+
# serve with hot reload at localhost:9080
$ yarn run dev
```
diff --git a/package.json b/package.json
index 7f1aeb9b..1faeddef 100644
--- a/package.json
+++ b/package.json
@@ -82,6 +82,7 @@
"animate.css": "^4.1.0",
"auto-launch": "^5.0.5",
"axios": "1.3.4",
+ "better-sqlite3": "^8.2.0",
"blueimp-load-image": "^5.16.0",
"electron-context-menu": "^3.6.1",
"electron-json-storage": "^4.6.0",
@@ -99,7 +100,6 @@
"parse-link-header": "^2.0.0",
"sanitize-html": "^2.10.0",
"simplayer": "0.0.8",
- "sqlite3": "^5.1.4",
"system-font-families": "^0.6.0",
"unicode-emoji-json": "^0.4.0",
"vue": "^3.2.47",
@@ -120,7 +120,9 @@
"@babel/preset-env": "^7.20.2",
"@babel/register": "^7.21.0",
"@babel/runtime": "7.21.0",
+ "@electron/rebuild": "^3.2.10",
"@types/auto-launch": "^5.0.2",
+ "@types/better-sqlite3": "^7.6.3",
"@types/electron-json-storage": "^4.5.0",
"@types/jest": "27.4.1",
"@types/jsdom": "^21.1.0",
diff --git a/src/main/database.ts b/src/main/database.ts
index 83f26329..5d25e8c8 100644
--- a/src/main/database.ts
+++ b/src/main/database.ts
@@ -1,12 +1,11 @@
-import sqlite3 from 'sqlite3'
+import sqlite, { Database } from 'better-sqlite3'
-const newDB = (file: string): sqlite3.Database => {
- const db = new sqlite3.Database(file, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE)
+const newDB = (file: string): Database => {
+ const db = new sqlite(file)
// migration
- db.serialize(() => {
- db.run(
- 'CREATE TABLE IF NOT EXISTS accounts(\
+ db.prepare(
+ 'CREATE TABLE IF NOT EXISTS accounts(\
id INTEGER PRIMARY KEY, \
username TEXT NOT NULL, \
account_id TEXT NOT NULL, \
@@ -15,53 +14,33 @@ client_id TEXT DEFAULT NULL, \
client_secret TEXT NOT NULL, \
access_token TEXT NOT NULL, \
refresh_token TEXT DEFAULT NULL, \
-sort INTEGER UNIQUE NOT NULL)',
- err => {
- if (err) {
- console.error('failed to create accounts: ', err)
- }
- }
- )
- db.run(
- 'CREATE TABLE IF NOT EXISTS servers(\
+sort INTEGER UNIQUE NOT NULL)'
+ ).run()
+
+ db.prepare(
+ 'CREATE TABLE IF NOT EXISTS servers(\
id INTEGER PRIMARY KEY, \
domain TEXT NOT NULL, \
base_url TEXT NOT NULL, \
sns TEXT NOT NULL, \
account_id INTEGER UNIQUE DEFAULT NULL, \
-FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE)',
- err => {
- if (err) {
- console.error('failed to create servers: ', err)
- }
- }
- )
- db.run(
- 'CREATE TABLE IF NOT EXISTS hashtags(\
+FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE)'
+ ).run()
+ db.prepare(
+ 'CREATE TABLE IF NOT EXISTS hashtags(\
id INTEGER PRIMARY KEY, \
tag TEXT NOT NULL, \
account_id INTEGER UNIQUE NOT NULL, \
-FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE)',
- err => {
- if (err) {
- console.error('failed to create hashtags: ', err)
- }
- }
- )
- db.run(
- 'CREATE TABLE IF NOT EXISTS settings(\
+FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE)'
+ ).run
+ db.prepare(
+ 'CREATE TABLE IF NOT EXISTS settings(\
id INTEGER PRIMARY KEY, \
account_id INTEGER UNIQUE NOT NULL, \
marker_home BOOLEAN NOT NULL DEFAULT false, \
marker_notifications BOOLEAN NOT NULL DEFAULT true, \
-FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE)',
- err => {
- if (err) {
- console.error('failed to create settings: ', err)
- }
- }
- )
- })
+FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE)'
+ ).run()
return db
}
diff --git a/src/main/db/account.ts b/src/main/db/account.ts
index 61932144..4e30489d 100644
--- a/src/main/db/account.ts
+++ b/src/main/db/account.ts
@@ -1,9 +1,9 @@
-import sqlite3 from 'sqlite3'
+import { Database } from 'better-sqlite3'
import { LocalAccount } from '~/src/types/localAccount'
import { LocalServer } from '~src/types/localServer'
export const insertAccount = (
- db: sqlite3.Database,
+ db: Database,
username: string,
accountId: string,
avatar: string,
@@ -14,58 +14,47 @@ export const insertAccount = (
serverId: number
): Promise => {
return new Promise((resolve, reject) => {
- db.serialize(() => {
- db.run('BEGIN TRANSACTION')
-
- db.get('SELECT * FROM accounts ORDER BY sort DESC', (err, row) => {
- if (err) {
- reject(err)
- }
- let order = 1
- if (row) {
- order = row.sort + 1
- }
- db.run(
- 'INSERT INTO accounts(username, account_id, avatar, client_id, client_secret, access_token, refresh_token, sort) VALUES (?, ?, ?, ?, ?, ?, ?, ?)',
- [username, accountId, avatar, clientId, clientSecret, accessToken, refreshToken, order],
- function (err) {
- if (err) {
- reject(err)
- }
- const id = this.lastID
-
- db.run('UPDATE servers SET account_id = ? WHERE id = ?', [id, serverId], err => {
- if (err) {
- reject(err)
- }
-
- db.run('COMMIT')
- resolve({
- id,
- username,
- accountId,
- avatar,
- clientId,
- clientSecret,
- accessToken,
- refreshToken,
- order
- })
- })
- }
- )
- })
+ const f = db.transaction(() => {
+ const row = db.prepare('SELECT * FROM accounts ORDER BY sort DESC').get()
+ let order = 1
+ if (row) {
+ order = row.sort + 1
+ }
+ try {
+ const res = db
+ .prepare(
+ 'INSERT INTO accounts(username, account_id, avatar, client_id, client_secret, access_token, refresh_token, sort) VALUES (?, ?, ?, ?, ?, ?, ?, ?)'
+ )
+ .run(username, accountId, avatar, clientId, clientSecret, accessToken, refreshToken, order)
+ const id = res.lastInsertRowid as number
+ db.prepare('UPDATE servers SET account_id = ? WHERE id = ?').run(id, serverId)
+ return resolve({
+ id,
+ username,
+ accountId,
+ avatar,
+ clientId,
+ clientSecret,
+ accessToken,
+ refreshToken,
+ order
+ })
+ } catch (err) {
+ reject(err)
+ }
})
+ f()
})
}
/**
* List up authenticated accounts.
*/
-export const listAccounts = (db: sqlite3.Database): Promise> => {
- return new Promise((resolve, reject) => {
- db.all(
- 'SELECT \
+export const listAccounts = (db: Database): Promise> => {
+ return new Promise(resolve => {
+ const rows = db
+ .prepare(
+ 'SELECT \
accounts.id as id, \
accounts.username as username, \
accounts.account_id as remote_account_id, \
@@ -80,42 +69,40 @@ servers.base_url as base_url, \
servers.domain as domain, \
servers.sns as sns, \
servers.account_id as account_id \
-FROM accounts INNER JOIN servers ON servers.account_id = accounts.id ORDER BY accounts.sort',
- (err, rows) => {
- if (err) {
- reject(err)
- }
- resolve(
- rows.map(r => [
- {
- id: r.id,
- username: r.username,
- accountId: r.remote_account_id,
- avatar: r.avatar,
- clientId: r.client_id,
- clientSecret: r.client_secret,
- accessToken: r.access_token,
- refreshToken: r.refresh_token,
- order: r.sort
- } as LocalAccount,
- {
- id: r.server_id,
- baseURL: r.base_url,
- domain: r.domain,
- sns: r.sns,
- accountId: r.account_id
- } as LocalServer
- ])
- )
- }
+FROM accounts INNER JOIN servers ON servers.account_id = accounts.id ORDER BY accounts.sort'
+ )
+ .all()
+
+ resolve(
+ rows.map(r => [
+ {
+ id: r.id,
+ username: r.username,
+ accountId: r.remote_account_id,
+ avatar: r.avatar,
+ clientId: r.client_id,
+ clientSecret: r.client_secret,
+ accessToken: r.access_token,
+ refreshToken: r.refresh_token,
+ order: r.sort
+ } as LocalAccount,
+ {
+ id: r.server_id,
+ baseURL: r.base_url,
+ domain: r.domain,
+ sns: r.sns,
+ accountId: r.account_id
+ } as LocalServer
+ ])
)
})
}
-export const getAccount = (db: sqlite3.Database, id: number): Promise<[LocalAccount, LocalServer]> => {
+export const getAccount = (db: Database, id: number): Promise<[LocalAccount, LocalServer]> => {
return new Promise((resolve, reject) => {
- db.get(
- 'SELECT \
+ const row = db
+ .prepare(
+ 'SELECT \
accounts.id as id, \
accounts.username as username, \
accounts.account_id as remote_account_id, \
@@ -130,163 +117,111 @@ servers.base_url as base_url, \
servers.domain as domain, \
servers.sns as sns, \
servers.account_id as account_id \
-FROM accounts INNER JOIN servers ON servers.account_id = accounts.id WHERE accounts.id = ?',
- id,
- (err, r) => {
- if (err) {
- reject(err)
- }
- resolve([
- {
- id: r.id,
- username: r.username,
- accountId: r.remote_account_id,
- avatar: r.avatar,
- clientId: r.client_id,
- clientSecret: r.client_secret,
- accessToken: r.access_token,
- refreshToken: r.refresh_token,
- order: r.sort
- } as LocalAccount,
- {
- id: r.server_id,
- baseURL: r.base_url,
- domain: r.domain,
- sns: r.sns,
- accountId: r.account_id
- } as LocalServer
- ])
+FROM accounts INNER JOIN servers ON servers.account_id = accounts.id WHERE accounts.id = ?'
+ )
+ .get(id)
+ if (row) {
+ resolve([
+ {
+ id: row.id,
+ username: row.username,
+ accountId: row.remote_account_id,
+ avatar: row.avatar,
+ clientId: row.client_id,
+ clientSecret: row.client_secret,
+ accessToken: row.access_token,
+ refreshToken: row.refresh_token,
+ order: row.sort
+ } as LocalAccount,
+ {
+ id: row.server_id,
+ baseURL: row.base_url,
+ domain: row.domain,
+ sns: row.sns,
+ accountId: row.account_id
+ } as LocalServer
+ ])
+ } else {
+ reject()
+ }
+ })
+}
+
+export const removeAccount = (db: Database, id: number): Promise => {
+ return new Promise((resolve, reject) => {
+ db.prepare('PRAGMA foreign_keys = ON').run()
+
+ try {
+ db.prepare('DELETE FROM accounts WHERE id = ?').run(id), resolve(null)
+ } catch (err) {
+ reject(err)
+ }
+ })
+}
+
+export const removeAllAccounts = (db: Database): Promise => {
+ return new Promise((resolve, reject) => {
+ db.prepare('PRAGMA foreign_keys = ON').run()
+
+ try {
+ db.prepare('DELETE FROM accounts').run()
+ resolve(null)
+ } catch (err) {
+ reject(err)
+ }
+ })
+}
+
+export const forwardAccount = (db: Database, id: number): Promise => {
+ return new Promise((resolve, reject) => {
+ const f = db.transaction(() => {
+ const rows = db.prepare('SELECT * FROM accounts ORDER BY sort').all()
+
+ const index = rows.findIndex(r => r.id === id)
+ if (index < 0 || index >= rows.length - 1) {
+ db.prepare('ROLLBACK TRANSACTION').run()
+ return resolve(null)
}
- )
- })
-}
+ const target = rows[index + 1]
+ const base = rows[index]
-export const removeAccount = (db: sqlite3.Database, id: number): Promise => {
- return new Promise((resolve, reject) => {
- db.serialize(() => {
- db.run('PRAGMA foreign_keys = ON')
-
- db.run('DELETE FROM accounts WHERE id = ?', id, err => {
- if (err) {
- reject(err)
- }
- resolve(null)
- })
+ try {
+ db.prepare('UPDATE accounts SET sort = ? WHERE id = ?').run(-100, base.id)
+ db.prepare('UPDATE accounts SET sort = ? WHERE id = ?').run(base.sort, target.id)
+ db.prepare('UPDATE accounts SET sort = ? WHERE id = ?').run(target.sort, base.id)
+ return resolve(null)
+ } catch (err) {
+ console.error(err)
+ reject(err)
+ }
})
+ f()
})
}
-export const removeAllAccounts = (db: sqlite3.Database): Promise => {
+export const backwardAccount = (db: Database, id: number): Promise => {
return new Promise((resolve, reject) => {
- db.serialize(() => {
- db.run('PRAGMA foreign_keys = ON')
+ const f = db.transaction(() => {
+ const rows = db.prepare('SELECT * FROM accounts ORDER BY sort').all()
- db.run('DELETE FROM accounts', err => {
- if (err) {
- reject(err)
- }
- resolve(null)
- })
- })
- })
-}
-
-export const forwardAccount = (db: sqlite3.Database, id: number): Promise => {
- return new Promise((resolve, reject) => {
- db.serialize(() => {
- db.run('BEGIN TRANSACTION')
-
- db.all('SELECT * FROM accounts ORDER BY sort', (err, rows) => {
- if (err) {
- console.error(err)
- db.run('ROLLBACK TRANSACTION')
- return reject(err)
- }
-
- const index = rows.findIndex(r => r.id === id)
- if (index < 0 || index >= rows.length - 1) {
- db.run('ROLLBACK TRANSACTION')
- return resolve(null)
- }
- const target = rows[index + 1]
- const base = rows[index]
-
- db.serialize(() => {
- db.run('UPDATE accounts SET sort = ? WHERE id = ?', [-100, base.id], err => {
- if (err) {
- console.error(err)
- db.run('ROLLBACK TRANSACTION')
- return reject(err)
- }
- })
- db.run('UPDATE accounts SET sort = ? WHERE id = ?', [base.sort, target.id], err => {
- if (err) {
- console.error(err)
- db.run('ROLLBACK TRANSACTION')
- return reject(err)
- }
- })
- db.run('UPDATE accounts SET sort = ? WHERE id = ?', [target.sort, base.id], err => {
- if (err) {
- console.error(err)
- db.run('ROLLBACK TRANSACTION')
- return reject(err)
- }
- db.run('COMMIT')
- return resolve(null)
- })
- })
- })
- })
- })
-}
-
-export const backwardAccount = (db: sqlite3.Database, id: number): Promise => {
- return new Promise((resolve, reject) => {
- db.serialize(() => {
- db.run('BEGIN TRANSACTION')
-
- db.all('SELECT * FROM accounts ORDER BY sort', (err, rows) => {
- if (err) {
- console.error(err)
- db.run('ROLLBACK TRANSACTION')
- return reject(err)
- }
-
- const index = rows.findIndex(r => r.id === id)
- if (index < 1) {
- db.run('ROLLBACK TRANSACTION')
- return resolve(null)
- }
- const target = rows[index - 1]
- const base = rows[index]
-
- db.serialize(() => {
- db.run('UPDATE accounts SET sort = ? WHERE id = ?', [-100, base.id], err => {
- if (err) {
- console.error(err)
- db.run('ROLLBACK TRANSACTION')
- return reject(err)
- }
- })
- db.run('UPDATE accounts SET sort = ? WHERE id = ?', [base.sort, target.id], err => {
- if (err) {
- console.error(err)
- db.run('ROLLBACK TRANSACTION')
- return reject(err)
- }
- })
- db.run('UPDATE accounts SET sort = ? WHERE id = ?', [target.sort, base.id], err => {
- if (err) {
- console.error(err)
- db.run('ROLLBACK TRANSACTION')
- return reject(err)
- }
- db.run('COMMIT')
- return resolve(null)
- })
- })
- })
+ const index = rows.findIndex(r => r.id === id)
+ if (index < 1) {
+ db.prepare('ROLLBACK TRANSACTION').run()
+ return resolve(null)
+ }
+ const target = rows[index - 1]
+ const base = rows[index]
+
+ try {
+ db.prepare('UPDATE accounts SET sort = ? WHERE id = ?').run(-100, base.id)
+ db.prepare('UPDATE accounts SET sort = ? WHERE id = ?').run(base.sort, target.id)
+ db.prepare('UPDATE accounts SET sort = ? WHERE id = ?').run(target.sort, base.id)
+ return resolve(null)
+ } catch (err) {
+ console.error(err)
+ return reject(err)
+ }
})
+ f()
})
}
diff --git a/src/main/db/hashtags.ts b/src/main/db/hashtags.ts
index 2e7727d8..4994b97e 100644
--- a/src/main/db/hashtags.ts
+++ b/src/main/db/hashtags.ts
@@ -1,67 +1,59 @@
-import sqlite3 from 'sqlite3'
+import { Database } from 'better-sqlite3'
import { LocalTag } from '~/src/types/localTag'
-export const listTags = (db: sqlite3.Database, accountId: number): Promise> => {
+export const listTags = (db: Database, accountId: number): Promise> => {
+ return new Promise(resolve => {
+ const rows = db.prepare('SELECT * FROM hashtags WHERE account_id = ?').all(accountId)
+
+ resolve(
+ rows.map(r => ({
+ id: r.id,
+ tagName: r.tag,
+ accountId: r.account_id
+ }))
+ )
+ })
+}
+
+export const insertTag = (db: Database, accountId: number, tag: string): Promise => {
return new Promise((resolve, reject) => {
- db.all('SELECT * FROM hashtags WHERE account_id = ?', accountId, (err, rows) => {
- if (err) {
+ const f = db.transaction(() => {
+ const row = db.prepare('SELECT * FROM hashtags WHERE id = ? AND tag = ?').get(accountId, tag)
+
+ if (row) {
+ resolve({
+ id: row.id,
+ tagName: row.tag,
+ accountId: row.account_id
+ })
+ }
+
+ try {
+ const res = db.prepare('INSERT INTO hashtags(tag, account_id) VALUES (?, ?)').run(accountId, tag)
+ return resolve({
+ id: res.lastInsertRowid as number,
+ tagName: tag,
+ accountId: accountId
+ })
+ } catch (err) {
+ console.error(err)
reject(err)
}
- resolve(
- rows.map(r => ({
- id: r.id,
- tagName: r.tag,
- accountId: r.account_id
- }))
- )
})
+ f()
})
}
-export const insertTag = (db: sqlite3.Database, accountId: number, tag: string): Promise => {
+export const removeTag = (db: Database, tag: LocalTag): Promise => {
return new Promise((resolve, reject) => {
- db.serialize(() => {
- db.run('BEGIN TRANSACTION')
+ db.prepare('PRAGMA foreign_keys = ON').run()
- db.get('SELECT * FROM hashtags WHERE id = ? AND tag = ?', [accountId, tag], (err, row) => {
- if (err) {
- reject(err)
- }
- if (row) {
- resolve({
- id: row.id,
- tagName: row.tag,
- accountId: row.account_id
- })
- }
-
- db.run('INSERT INTO hashtags(tag, account_id) VALUES (?, ?)', [accountId, tag], function (err) {
- if (err) {
- reject(err)
- }
- db.run('COMMIT')
- resolve({
- id: this.lastID,
- tagName: tag,
- accountId: accountId
- })
- })
- })
- })
- })
-}
-
-export const removeTag = (db: sqlite3.Database, tag: LocalTag): Promise => {
- return new Promise((resolve, reject) => {
- db.serialize(() => {
- db.run('PRAGMA foreign_keys = ON')
-
- db.run('DELETE FROM hashtags WHERE id = ?', tag.id, err => {
- if (err) {
- reject(err)
- }
- resolve(null)
- })
- })
+ try {
+ db.prepare('DELETE FROM hashtags WHERE id = ?').run(tag.id)
+ resolve(null)
+ } catch (err) {
+ console.error(err)
+ reject(err)
+ }
})
}
diff --git a/src/main/db/server.ts b/src/main/db/server.ts
index 6abf7ca0..a3eed952 100644
--- a/src/main/db/server.ts
+++ b/src/main/db/server.ts
@@ -1,44 +1,44 @@
-import sqlite3 from 'sqlite3'
+import { Database } from 'better-sqlite3'
import { LocalServer } from '~/src/types/localServer'
export const insertServer = (
- db: sqlite3.Database,
+ db: Database,
baseURL: string,
domain: string,
sns: 'mastodon' | 'pleroma' | 'misskey',
accountId: number | null
): Promise => {
return new Promise((resolve, reject) => {
- db.serialize(() => {
- db.run('INSERT INTO servers(domain, base_url, sns, account_id) values (?, ?, ?, ?)', [domain, baseURL, sns, accountId], function (
- err
- ) {
- if (err) {
- reject(err)
- }
- resolve({
- id: this.lastID,
- baseURL,
- domain,
- sns,
- accountId
- })
+ try {
+ const res = db
+ .prepare('INSERT INTO servers(domain, base_url, sns, account_id) values (?, ?, ?, ?)')
+ .run(domain, baseURL, sns, accountId)
+ resolve({
+ id: res.lastInsertRowid as number,
+ baseURL,
+ domain,
+ sns,
+ accountId
})
- })
+ } catch (err) {
+ reject(err)
+ }
})
}
-export const getServer = (db: sqlite3.Database, id: number): Promise => {
+export const getServer = (db: Database, id: number): Promise => {
return new Promise((resolve, reject) => {
- db.get('SELECT id, base_url, domain, sns, account_id FROM servers WHERE id = ?', id, (err, r) => {
- if (err) reject(err)
+ const row = db.prepare('SELECT id, base_url, domain, sns, account_id FROM servers WHERE id = ?').get(id)
+ if (row) {
resolve({
- id: r.id,
- baseURL: r.base_url,
- domain: r.domain,
- sns: r.sns,
- accountId: r.account_id
+ id: row.id,
+ baseURL: row.base_url,
+ domain: row.domain,
+ sns: row.sns,
+ accountId: row.account_id
} as LocalServer)
- })
+ } else {
+ reject()
+ }
})
}
diff --git a/src/main/db/setting.ts b/src/main/db/setting.ts
index 38bd0f4d..92405133 100644
--- a/src/main/db/setting.ts
+++ b/src/main/db/setting.ts
@@ -1,55 +1,48 @@
-import sqlite3 from 'sqlite3'
+import { Database } from 'better-sqlite3'
import { Setting } from '~/src/types/setting'
import { DefaultSetting } from '~/src/constants/initializer/setting'
-export const getSetting = (db: sqlite3.Database, accountId: number): Promise => {
- return new Promise((resolve, reject) => {
- db.get('SELECT * FROM settings WHERE account_id = ?', accountId, (err, row) => {
- if (err) {
- reject(err)
- }
- if (row) {
- resolve({
- accountId: row.account_id,
- markerHome: Boolean(row.marker_home),
- markerNotifications: Boolean(row.marker_notifications)
- })
- }
- resolve(DefaultSetting)
- })
+export const getSetting = (db: Database, accountId: number): Promise => {
+ return new Promise(resolve => {
+ const row = db.prepare('SELECT * FROM settings WHERE account_id = ?').get(accountId)
+ if (row) {
+ return resolve({
+ accountId: row.account_id,
+ markerHome: Boolean(row.marker_home),
+ markerNotifications: Boolean(row.marker_notifications)
+ })
+ }
+ resolve(DefaultSetting)
})
}
-export const createOrUpdateSetting = (db: sqlite3.Database, setting: Setting): Promise => {
+export const createOrUpdateSetting = (db: Database, setting: Setting): Promise => {
return new Promise((resolve, reject) => {
- db.get('SELECT * FROM settings WHERE account_id = ?', setting.accountId, (err, row) => {
- if (err) {
- reject(err)
- }
- if (row) {
- db.run(
- 'UPDATE settings SET marker_home = ?, marker_notifications = ? WHERE account_id = ?',
- [setting.markerHome, setting.markerNotifications, setting.accountId],
- err => {
- if (err) {
- reject(err)
- }
- resolve(setting)
- }
+ const row = db.prepare('SELECT * FROM settings WHERE account_id = ?').get(setting.accountId)
+ if (row) {
+ try {
+ db.prepare('UPDATE settings SET marker_home = ?, marker_notifications = ? WHERE account_id = ?').run(
+ setting.markerHome,
+ setting.markerNotifications,
+ setting.accountId
)
resolve(setting)
- } else {
- db.run(
- 'INSERT INTO settings(account_id, marker_home, marker_notifications) VALUES (?, ?, ?)',
- [setting.accountId, setting.markerHome, setting.markerNotifications],
- function (err) {
- if (err) {
- reject(err)
- }
- resolve(setting)
- }
- )
+ } catch (err) {
+ console.error(err)
+ reject(err)
}
- })
+ } else {
+ try {
+ db.prepare('INSERT INTO settings(account_id, marker_home, marker_notifications) VALUES (?, ?, ?)').run(
+ setting.accountId,
+ setting.markerHome,
+ setting.markerNotifications
+ )
+ resolve(setting)
+ } catch (err) {
+ console.error(err)
+ reject(err)
+ }
+ }
})
}
diff --git a/yarn.lock b/yarn.lock
index cd32548e..0a943859 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1482,21 +1482,6 @@
lodash "^4.17.15"
tmp-promise "^3.0.2"
-"@mapbox/node-pre-gyp@^1.0.0":
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz#8e6735ccebbb1581e5a7e652244cadc8a844d03c"
- integrity sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==
- dependencies:
- detect-libc "^2.0.0"
- https-proxy-agent "^5.0.0"
- make-dir "^3.1.0"
- node-fetch "^2.6.7"
- nopt "^5.0.0"
- npmlog "^5.0.1"
- rimraf "^3.0.2"
- semver "^7.3.5"
- tar "^6.1.11"
-
"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1":
version "5.1.1-v1"
resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129"
@@ -1665,6 +1650,13 @@
dependencies:
"@babel/types" "^7.3.0"
+"@types/better-sqlite3@^7.6.3":
+ version "7.6.3"
+ resolved "https://registry.yarnpkg.com/@types/better-sqlite3/-/better-sqlite3-7.6.3.tgz#117c3c182e300799b84d1b7e1781c27d8d536505"
+ integrity sha512-YS64N9SNDT/NAvou3QNdzAu3E2om/W/0dhORimtPGLef+zSK5l1vDzfsWb4xgXOgfhtOI5ZDTRxnvRPb22AIVQ==
+ dependencies:
+ "@types/node" "*"
+
"@types/body-parser@*":
version "1.19.2"
resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0"
@@ -2728,14 +2720,6 @@ applescript@^1.0.0:
resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
-are-we-there-yet@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c"
- integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==
- dependencies:
- delegates "^1.0.0"
- readable-stream "^3.6.0"
-
are-we-there-yet@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd"
@@ -3091,6 +3075,14 @@ batch@0.6.1:
resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==
+better-sqlite3@^8.2.0:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.2.0.tgz#4ef6185b88992723de7e00cfa67585ac59f320bd"
+ integrity sha512-8eTzxGk9535SB3oSNu0tQ6I4ZffjVCBUjKHN9QeeIFtphBX0sEd0NxAuglBNR9TO5ThnxBB7GqzfcYo9kjadJQ==
+ dependencies:
+ bindings "^1.5.0"
+ prebuild-install "^7.1.0"
+
big.js@^5.2.2:
version "5.2.2"
resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
@@ -3101,7 +3093,14 @@ binary-extensions@^2.0.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-bl@^4.1.0:
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
+bl@^4.0.3, bl@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
@@ -3649,6 +3648,11 @@ chokidar@^3.5.3:
optionalDependencies:
fsevents "~2.3.2"
+chownr@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
chownr@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
@@ -3863,7 +3867,7 @@ color-name@~1.1.4:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-color-support@^1.1.2, color-support@^1.1.3:
+color-support@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
@@ -3980,7 +3984,7 @@ connect-history-api-fallback@^2.0.0:
resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8"
integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==
-console-control-strings@^1.0.0, console-control-strings@^1.1.0:
+console-control-strings@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
@@ -4316,6 +4320,11 @@ decompress-response@^6.0.0:
dependencies:
mimic-response "^3.1.0"
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
deep-is@^0.1.3, deep-is@~0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
@@ -4880,7 +4889,7 @@ encoding@^0.1.12, encoding@^0.1.13:
dependencies:
iconv-lite "^0.6.2"
-end-of-stream@^1.1.0:
+end-of-stream@^1.1.0, end-of-stream@^1.4.1:
version "1.4.4"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
@@ -5282,6 +5291,11 @@ expand-brackets@^2.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
+expand-template@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
+ integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
+
expect@^26.6.2:
version "26.6.2"
resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417"
@@ -5511,6 +5525,11 @@ file-type@^10.11.0:
resolved "https://registry.yarnpkg.com/file-type/-/file-type-10.11.0.tgz#2961d09e4675b9fb9a3ee6b69e9cd23f43fd1890"
integrity sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
filelist@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
@@ -5654,6 +5673,11 @@ fresh@0.5.2:
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
+fs-constants@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
fs-extra@^10.0.0, fs-extra@^10.1.0:
version "10.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
@@ -5718,21 +5742,6 @@ function-bind@^1.1.1:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-gauge@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395"
- integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==
- dependencies:
- aproba "^1.0.3 || ^2.0.0"
- color-support "^1.1.2"
- console-control-strings "^1.0.0"
- has-unicode "^2.0.1"
- object-assign "^4.1.1"
- signal-exit "^3.0.0"
- string-width "^4.2.3"
- strip-ansi "^6.0.1"
- wide-align "^1.1.2"
-
gauge@^4.0.3:
version "4.0.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce"
@@ -5807,6 +5816,11 @@ get-value@^2.0.3, get-value@^2.0.6:
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==
+github-from-package@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
+ integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==
+
glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
@@ -6497,7 +6511,7 @@ inherits@2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==
-ini@^1.3.4, ini@^1.3.5:
+ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
@@ -7912,7 +7926,7 @@ make-dir@^2.0.0, make-dir@^2.1.0:
pify "^4.0.1"
semver "^5.6.0"
-make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
+make-dir@^3.0.0, make-dir@^3.0.2:
version "3.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
@@ -8235,7 +8249,7 @@ minimist-options@4.1.0:
is-plain-obj "^1.1.0"
kind-of "^6.0.3"
-minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8:
+minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6, minimist@^1.2.8:
version "1.2.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
@@ -8328,6 +8342,11 @@ mixin-deep@^1.2.0:
for-in "^1.0.2"
is-extendable "^1.0.1"
+mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
+ integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
+
mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
@@ -8417,6 +8436,11 @@ nanomatch@^1.2.9:
snapdragon "^0.8.1"
to-regex "^3.0.1"
+napi-build-utils@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
+ integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
+
natural-compare-lite@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4"
@@ -8469,7 +8493,7 @@ no-case@^3.0.4:
lower-case "^2.0.2"
tslib "^2.0.3"
-node-abi@^3.0.0:
+node-abi@^3.0.0, node-abi@^3.3.0:
version "3.33.0"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.33.0.tgz#8b23a0cec84e1c5f5411836de6a9b84bccf26e7f"
integrity sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==
@@ -8486,11 +8510,6 @@ node-addon-api@^3.1.0:
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161"
integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==
-node-addon-api@^4.2.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f"
- integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==
-
node-api-version@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/node-api-version/-/node-api-version-0.1.4.tgz#1ed46a485e462d55d66b5aa1fe2821720dedf080"
@@ -8498,13 +8517,6 @@ node-api-version@^0.1.4:
dependencies:
semver "^7.3.5"
-node-fetch@^2.6.7:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6"
- integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==
- dependencies:
- whatwg-url "^5.0.0"
-
node-forge@^1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
@@ -8515,7 +8527,7 @@ node-gyp-build@^4.2.1, node-gyp-build@^4.3.0:
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055"
integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==
-node-gyp@8.x, node-gyp@^8.4.1:
+node-gyp@^8.4.1:
version "8.4.1"
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937"
integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==
@@ -8679,16 +8691,6 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1:
dependencies:
path-key "^3.0.0"
-npmlog@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0"
- integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==
- dependencies:
- are-we-there-yet "^2.0.0"
- console-control-strings "^1.1.0"
- gauge "^3.0.0"
- set-blocking "^2.0.0"
-
npmlog@^6.0.0:
version "6.0.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830"
@@ -8726,7 +8728,7 @@ object-assign-deep@^0.4.0:
resolved "https://registry.yarnpkg.com/object-assign-deep/-/object-assign-deep-0.4.0.tgz#43505d3679abb9686ab359b97ac14cc837a9d143"
integrity sha512-54Uvn3s+4A/cMWx9tlRez1qtc7pN7pbQ+Yi7mjLjcBpWLlP+XbSHiHbQW6CElDiV4OvuzqnMrBdkgxI1mT8V/Q==
-object-assign@^4.1.0, object-assign@^4.1.1:
+object-assign@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
@@ -9256,6 +9258,24 @@ postcss@^8.1.10, postcss@^8.3.11, postcss@^8.4.0, postcss@^8.4.19, postcss@^8.4.
picocolors "^1.0.0"
source-map-js "^1.0.2"
+prebuild-install@^7.1.0:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45"
+ integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==
+ dependencies:
+ detect-libc "^2.0.0"
+ expand-template "^2.0.3"
+ github-from-package "0.0.0"
+ minimist "^1.2.3"
+ mkdirp-classic "^0.5.3"
+ napi-build-utils "^1.0.1"
+ node-abi "^3.3.0"
+ pump "^3.0.0"
+ rc "^1.2.7"
+ simple-get "^4.0.0"
+ tar-fs "^2.0.0"
+ tunnel-agent "^0.6.0"
+
prelude-ls@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
@@ -9473,6 +9493,16 @@ raw-body@2.5.1:
iconv-lite "0.4.24"
unpipe "1.0.0"
+rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
react-is@^17.0.1:
version "17.0.2"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
@@ -9539,6 +9569,15 @@ readable-stream@^3.0.6, readable-stream@^3.5.0, readable-stream@^3.6.0:
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
+readable-stream@^3.1.1:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+ integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
readable-stream@^3.4.0:
version "3.6.1"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.1.tgz#f9f9b5f536920253b3d26e7660e7da4ccff9bb62"
@@ -10164,6 +10203,20 @@ simplayer@0.0.8:
resolved "https://registry.yarnpkg.com/simplayer/-/simplayer-0.0.8.tgz#f20ceb233166ac7f382745666d23f3c48792c3c8"
integrity sha512-QiJXJho7PZ0MQ4ZBr6GEclTDn91U0s07rb+jUcv8LQ5MGNXZ4Jt2V+hiPC6wVBIQNe7+jjjWMq6nqkzms7okHA==
+simple-concat@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
+ integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
+
+simple-get@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543"
+ integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==
+ dependencies:
+ decompress-response "^6.0.0"
+ once "^1.3.1"
+ simple-concat "^1.0.0"
+
simple-update-notifier@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82"
@@ -10422,17 +10475,6 @@ sprintf-js@~1.0.2:
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
-sqlite3@^5.1.4:
- version "5.1.4"
- resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.4.tgz#35f83d368963168b324ad2f0fffce09f3b8723a7"
- integrity sha512-i0UlWAzPlzX3B5XP2cYuhWQJsTtlMD6obOa1PgeEQ4DHEXUuyJkgv50I3isqZAP5oFc2T8OFvakmDh2W6I+YpA==
- dependencies:
- "@mapbox/node-pre-gyp" "^1.0.0"
- node-addon-api "^4.2.0"
- tar "^6.1.11"
- optionalDependencies:
- node-gyp "8.x"
-
ssri@^8.0.0, ssri@^8.0.1:
version "8.0.1"
resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af"
@@ -10610,6 +10652,11 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
+
style-loader@^3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575"
@@ -10792,6 +10839,27 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0:
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+tar-fs@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784"
+ integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
+ dependencies:
+ chownr "^1.1.1"
+ mkdirp-classic "^0.5.2"
+ pump "^3.0.0"
+ tar-stream "^2.1.4"
+
+tar-stream@^2.1.4:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
+ integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
+ dependencies:
+ bl "^4.0.3"
+ end-of-stream "^1.4.1"
+ fs-constants "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^3.1.1"
+
tar@^6.0.2, tar@^6.0.5, tar@^6.1.11, tar@^6.1.12, tar@^6.1.2:
version "6.1.13"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b"
@@ -10990,11 +11058,6 @@ tr46@^3.0.0:
dependencies:
punycode "^2.1.1"
-tr46@~0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
- integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
-
trim-newlines@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
@@ -11064,6 +11127,13 @@ ttfinfo@^0.2.0, "ttfinfo@https://github.com/rBurgett/ttfinfo.git":
version "0.2.0"
resolved "https://github.com/rBurgett/ttfinfo.git#f00e43e2a6d4c8a12a677df20b7804492d50863c"
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==
+ dependencies:
+ safe-buffer "^5.0.1"
+
tunnel@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c"
@@ -11590,11 +11660,6 @@ wcwidth@^1.0.1:
dependencies:
defaults "^1.0.3"
-webidl-conversions@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
- integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
-
webidl-conversions@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
@@ -11773,14 +11838,6 @@ whatwg-url@^11.0.0:
tr46 "^3.0.0"
webidl-conversions "^7.0.0"
-whatwg-url@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
- integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
- dependencies:
- tr46 "~0.0.3"
- webidl-conversions "^3.0.0"
-
whatwg-url@^8.0.0, whatwg-url@^8.5.0:
version "8.7.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77"
@@ -11821,7 +11878,7 @@ which@^2.0.1, which@^2.0.2:
dependencies:
isexe "^2.0.0"
-wide-align@^1.1.2, wide-align@^1.1.5:
+wide-align@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
From 66e71c332ab361d798569fc3e744aa40c3542656 Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Sat, 11 Mar 2023 01:55:20 +0900
Subject: [PATCH 2/2] refs #4191 Use electron-builder to rebuild after install
---
README.md | 4 ----
package.json | 4 ++--
2 files changed, 2 insertions(+), 6 deletions(-)
diff --git a/README.md b/README.md
index f5337d64..bcf484d1 100644
--- a/README.md
+++ b/README.md
@@ -119,10 +119,6 @@ $ sudo apt-get install libfontconfig-dev
# install dependencies
$ yarn install
-# You need to rebuild because of better-sqlite3
-# Refs: https://github.com/WiseLibs/better-sqlite3/issues/919
-$ ./node_modules/.bin/electron-rebuild
-
# serve with hot reload at localhost:9080
$ yarn run dev
```
diff --git a/package.json b/package.json
index 1faeddef..2ce554ea 100644
--- a/package.json
+++ b/package.json
@@ -35,7 +35,8 @@
"pack:main": "webpack --node-env=production --mode production --progress --config .electron-vue/webpack.main.config.js",
"pack:renderer": "webpack --node-env=production --mode production --progress --config .electron-vue/webpack.renderer.config.js",
"typecheck": "tsc -p . --noEmit",
- "spec": "NODE_ENV=test jest -u --maxWorkers=3"
+ "spec": "NODE_ENV=test jest -u --maxWorkers=3",
+ "postinstall": "electron-builder install-app-deps"
},
"jest": {
"moduleFileExtensions": [
@@ -120,7 +121,6 @@
"@babel/preset-env": "^7.20.2",
"@babel/register": "^7.21.0",
"@babel/runtime": "7.21.0",
- "@electron/rebuild": "^3.2.10",
"@types/auto-launch": "^5.0.2",
"@types/better-sqlite3": "^7.6.3",
"@types/electron-json-storage": "^4.5.0",