server-ts: sql.js -> sql.ts

This commit is contained in:
Elian Doran 2024-02-16 22:44:12 +02:00
parent e2a727ec8a
commit 82a9808dea
No known key found for this signature in database
60 changed files with 125 additions and 100 deletions

View File

@ -1,5 +1,5 @@
module.exports = () => { module.exports = () => {
const sql = require('../../src/services/sql.js'); const sql = require('../../src/services/sql');
const utils = require('../../src/services/utils'); const utils = require('../../src/services/utils');
const existingBlobIds = new Set(); const existingBlobIds = new Set();

View File

@ -3,7 +3,7 @@ module.exports = () => {
const becca = require('../../src/becca/becca.js'); const becca = require('../../src/becca/becca.js');
const cls = require('../../src/services/cls'); const cls = require('../../src/services/cls');
const log = require('../../src/services/log'); const log = require('../../src/services/log');
const sql = require('../../src/services/sql.js'); const sql = require('../../src/services/sql');
cls.init(() => { cls.init(() => {
// emergency disabling of image compression since it appears to make problems in migration to 0.61 // emergency disabling of image compression since it appears to make problems in migration to 0.61

View File

@ -1,5 +1,5 @@
const crypto = require("crypto"); const crypto = require("crypto");
const sql = require('./sql.js'); const sql = require('./sql');
const decryptService = require('./decrypt.js'); const decryptService = require('./decrypt.js');
function getDataKey(password) { function getDataKey(password) {

View File

@ -1,6 +1,6 @@
const fs = require("fs"); const fs = require("fs");
const sanitize = require("sanitize-filename"); const sanitize = require("sanitize-filename");
const sql = require('./sql.js'); const sql = require('./sql');
const decryptService = require('./decrypt.js'); const decryptService = require('./decrypt.js');
const dataKeyService = require('./data_key.js'); const dataKeyService = require('./data_key.js');
const extensionService = require('./extension.js'); const extensionService = require('./extension.js');

19
package-lock.json generated
View File

@ -89,6 +89,7 @@
"trilium": "src/www.js" "trilium": "src/www.js"
}, },
"devDependencies": { "devDependencies": {
"@types/better-sqlite3": "^7.6.9",
"@types/escape-html": "^1.0.4", "@types/escape-html": "^1.0.4",
"@types/express": "^4.17.21", "@types/express": "^4.17.21",
"@types/mime-types": "^2.1.4", "@types/mime-types": "^2.1.4",
@ -1284,6 +1285,15 @@
"resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-21.0.0.tgz", "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-21.0.0.tgz",
"integrity": "sha512-qVfOiFh0U8ZSkLgA6tf7kj2MciqRbSCWaJZRwftVO7UbtVDNsZAXpWXqvCDtIefvjC83UJB+vHTDOGm5ibXjEA==" "integrity": "sha512-qVfOiFh0U8ZSkLgA6tf7kj2MciqRbSCWaJZRwftVO7UbtVDNsZAXpWXqvCDtIefvjC83UJB+vHTDOGm5ibXjEA=="
}, },
"node_modules/@types/better-sqlite3": {
"version": "7.6.9",
"resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.9.tgz",
"integrity": "sha512-FvktcujPDj9XKMJQWFcl2vVl7OdRIqsSRX9b0acWwTmwLK9CF2eqo/FRcmMLNpugKoX/avA6pb7TorDLmpgTnQ==",
"dev": true,
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/body-parser": { "node_modules/@types/body-parser": {
"version": "1.19.5", "version": "1.19.5",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
@ -15917,6 +15927,15 @@
"resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-21.0.0.tgz", "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-21.0.0.tgz",
"integrity": "sha512-qVfOiFh0U8ZSkLgA6tf7kj2MciqRbSCWaJZRwftVO7UbtVDNsZAXpWXqvCDtIefvjC83UJB+vHTDOGm5ibXjEA==" "integrity": "sha512-qVfOiFh0U8ZSkLgA6tf7kj2MciqRbSCWaJZRwftVO7UbtVDNsZAXpWXqvCDtIefvjC83UJB+vHTDOGm5ibXjEA=="
}, },
"@types/better-sqlite3": {
"version": "7.6.9",
"resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.9.tgz",
"integrity": "sha512-FvktcujPDj9XKMJQWFcl2vVl7OdRIqsSRX9b0acWwTmwLK9CF2eqo/FRcmMLNpugKoX/avA6pb7TorDLmpgTnQ==",
"dev": true,
"requires": {
"@types/node": "*"
}
},
"@types/body-parser": { "@types/body-parser": {
"version": "1.19.5", "version": "1.19.5",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",

View File

@ -112,6 +112,7 @@
"yauzl": "2.10.0" "yauzl": "2.10.0"
}, },
"devDependencies": { "devDependencies": {
"@types/better-sqlite3": "^7.6.9",
"@types/escape-html": "^1.0.4", "@types/escape-html": "^1.0.4",
"@types/express": "^4.17.21", "@types/express": "^4.17.21",
"@types/mime-types": "^2.1.4", "@types/mime-types": "^2.1.4",

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const sql = require('../services/sql.js'); const sql = require('../services/sql');
const NoteSet = require('../services/search/note_set.js'); const NoteSet = require('../services/search/note_set.js');
const NotFoundError = require('../errors/not_found_error.js'); const NotFoundError = require('../errors/not_found_error.js');

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const sql = require('../services/sql.js'); const sql = require('../services/sql');
const eventService = require('../services/events.js'); const eventService = require('../services/events.js');
const becca = require('./becca.js'); const becca = require('./becca.js');
const sqlInit = require('../services/sql_init.js'); const sqlInit = require('../services/sql_init.js');

View File

@ -1,7 +1,7 @@
"use strict"; "use strict";
const utils = require('../../services/utils'); const utils = require('../../services/utils');
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const entityChangesService = require('../../services/entity_changes.js'); const entityChangesService = require('../../services/entity_changes.js');
const eventService = require('../../services/events.js'); const eventService = require('../../services/events.js');
const dateUtils = require('../../services/date_utils'); const dateUtils = require('../../services/date_utils');

View File

@ -3,7 +3,7 @@
const utils = require('../../services/utils'); const utils = require('../../services/utils');
const dateUtils = require('../../services/date_utils'); const dateUtils = require('../../services/date_utils');
const AbstractBeccaEntity = require('./abstract_becca_entity.js'); const AbstractBeccaEntity = require('./abstract_becca_entity.js');
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const protectedSessionService = require('../../services/protected_session.js'); const protectedSessionService = require('../../services/protected_session.js');
const log = require('../../services/log'); const log = require('../../services/log');

View File

@ -2,7 +2,7 @@
const BNote = require('./bnote.js'); const BNote = require('./bnote.js');
const AbstractBeccaEntity = require('./abstract_becca_entity.js'); const AbstractBeccaEntity = require('./abstract_becca_entity.js');
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const dateUtils = require('../../services/date_utils'); const dateUtils = require('../../services/date_utils');
const promotedAttributeDefinitionParser = require('../../services/promoted_attribute_definition_parser.js'); const promotedAttributeDefinitionParser = require('../../services/promoted_attribute_definition_parser.js');
const {sanitizeAttributeName} = require('../../services/sanitize_attribute_name.js'); const {sanitizeAttributeName} = require('../../services/sanitize_attribute_name.js');

View File

@ -2,7 +2,7 @@
const protectedSessionService = require('../../services/protected_session.js'); const protectedSessionService = require('../../services/protected_session.js');
const log = require('../../services/log'); const log = require('../../services/log');
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const utils = require('../../services/utils'); const utils = require('../../services/utils');
const dateUtils = require('../../services/date_utils'); const dateUtils = require('../../services/date_utils');
const AbstractBeccaEntity = require('./abstract_becca_entity.js'); const AbstractBeccaEntity = require('./abstract_becca_entity.js');

View File

@ -5,7 +5,7 @@ const utils = require('../../services/utils');
const dateUtils = require('../../services/date_utils'); const dateUtils = require('../../services/date_utils');
const becca = require('../becca.js'); const becca = require('../becca.js');
const AbstractBeccaEntity = require('./abstract_becca_entity.js'); const AbstractBeccaEntity = require('./abstract_becca_entity.js');
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const BAttachment = require('./battachment.js'); const BAttachment = require('./battachment.js');
/** /**

View File

@ -1,5 +1,5 @@
const cls = require('../services/cls'); const cls = require('../services/cls');
const sql = require('../services/sql.js'); const sql = require('../services/sql');
const log = require('../services/log'); const log = require('../services/log');
const becca = require('../becca/becca.js'); const becca = require('../becca/becca.js');
const etapiTokenService = require('../services/etapi_tokens.js'); const etapiTokenService = require('../services/etapi_tokens.js');

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const log = require('../../services/log'); const log = require('../../services/log');
const attributeService = require('../../services/attributes.js'); const attributeService = require('../../services/attributes.js');
const BAttribute = require('../../becca/entities/battribute.js'); const BAttribute = require('../../becca/entities/battribute.js');

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const utils = require('../../services/utils'); const utils = require('../../services/utils');
const entityChangesService = require('../../services/entity_changes.js'); const entityChangesService = require('../../services/entity_changes.js');
const treeService = require('../../services/tree.js'); const treeService = require('../../services/tree.js');

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const log = require('../../services/log'); const log = require('../../services/log');
const backupService = require('../../services/backup.js'); const backupService = require('../../services/backup.js');
const anonymizationService = require('../../services/anonymization.js'); const anonymizationService = require('../../services/anonymization.js');

View File

@ -9,7 +9,7 @@ const protectedSessionService = require('../../services/protected_session.js');
const appInfo = require('../../services/app_info.js'); const appInfo = require('../../services/app_info.js');
const eventService = require('../../services/events.js'); const eventService = require('../../services/events.js');
const sqlInit = require('../../services/sql_init.js'); const sqlInit = require('../../services/sql_init.js');
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const ws = require('../../services/ws.js'); const ws = require('../../services/ws.js');
const etapiTokenService = require('../../services/etapi_tokens.js'); const etapiTokenService = require('../../services/etapi_tokens.js');

View File

@ -3,7 +3,7 @@
const noteService = require('../../services/notes.js'); const noteService = require('../../services/notes.js');
const eraseService = require('../../services/erase.js'); const eraseService = require('../../services/erase.js');
const treeService = require('../../services/tree.js'); const treeService = require('../../services/tree.js');
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const utils = require('../../services/utils'); const utils = require('../../services/utils');
const log = require('../../services/log'); const log = require('../../services/log');
const TaskContext = require('../../services/task_context.js'); const TaskContext = require('../../services/task_context.js');

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const protectedSessionService = require('../../services/protected_session.js'); const protectedSessionService = require('../../services/protected_session.js');
const noteService = require('../../services/notes.js'); const noteService = require('../../services/notes.js');
const becca = require('../../becca/becca.js'); const becca = require('../../becca/becca.js');

View File

@ -1,7 +1,7 @@
"use strict"; "use strict";
const BRecentNote = require('../../becca/entities/brecent_note.js'); const BRecentNote = require('../../becca/entities/brecent_note.js');
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const dateUtils = require('../../services/date_utils'); const dateUtils = require('../../services/date_utils');
function addRecentNote(req) { function addRecentNote(req) {

View File

@ -1,5 +1,5 @@
const becca = require('../../becca/becca.js'); const becca = require('../../becca/becca.js');
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
function getRelationMap(req) { function getRelationMap(req) {
const {relationMapNoteId, noteIds} = req.body; const {relationMapNoteId, noteIds} = req.body;

View File

@ -3,7 +3,7 @@
const beccaService = require('../../becca/becca_service.js'); const beccaService = require('../../becca/becca_service.js');
const revisionService = require('../../services/revisions.js'); const revisionService = require('../../services/revisions.js');
const utils = require('../../services/utils'); const utils = require('../../services/utils');
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const cls = require('../../services/cls'); const cls = require('../../services/cls');
const path = require('path'); const path = require('path');
const becca = require('../../becca/becca.js'); const becca = require('../../becca/becca.js');

View File

@ -4,7 +4,7 @@ const scriptService = require('../../services/script.js');
const attributeService = require('../../services/attributes.js'); const attributeService = require('../../services/attributes.js');
const becca = require('../../becca/becca.js'); const becca = require('../../becca/becca.js');
const syncService = require('../../services/sync.js'); const syncService = require('../../services/sync.js');
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
// The async/await here is very confusing, because the body.script may, but may not be async. If it is async, then we // The async/await here is very confusing, because the body.script may, but may not be async. If it is async, then we
// need to await it and make the complete response including metadata available in a Promise, so that the route detects // need to await it and make the complete response including metadata available in a Promise, so that the route detects

View File

@ -1,7 +1,7 @@
"use strict"; "use strict";
const dateNoteService = require('../../services/date_notes.js'); const dateNoteService = require('../../services/date_notes.js');
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const cls = require('../../services/cls'); const cls = require('../../services/cls');
const specialNotesService = require('../../services/special_notes.js'); const specialNotesService = require('../../services/special_notes.js');
const becca = require('../../becca/becca.js'); const becca = require('../../becca/becca.js');

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const becca = require('../../becca/becca.js'); const becca = require('../../becca/becca.js');
function getSchema() { function getSchema() {

View File

@ -1,4 +1,4 @@
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const becca = require('../../becca/becca.js'); const becca = require('../../becca/becca.js');
function getNoteSize(req) { function getNoteSize(req) {

View File

@ -3,7 +3,7 @@
const syncService = require('../../services/sync.js'); const syncService = require('../../services/sync.js');
const syncUpdateService = require('../../services/sync_update.js'); const syncUpdateService = require('../../services/sync_update.js');
const entityChangesService = require('../../services/entity_changes.js'); const entityChangesService = require('../../services/entity_changes.js');
const sql = require('../../services/sql.js'); const sql = require('../../services/sql');
const sqlInit = require('../../services/sql_init.js'); const sqlInit = require('../../services/sql_init.js');
const optionService = require('../../services/options.js'); const optionService = require('../../services/options.js');
const contentHashService = require('../../services/content_hash.js'); const contentHashService = require('../../services/content_hash.js');

View File

@ -2,7 +2,7 @@ const log = require('../services/log');
const fileService = require('./api/files.js'); const fileService = require('./api/files.js');
const scriptService = require('../services/script.js'); const scriptService = require('../services/script.js');
const cls = require('../services/cls'); const cls = require('../services/cls');
const sql = require('../services/sql.js'); const sql = require('../services/sql');
const becca = require('../becca/becca.js'); const becca = require('../becca/becca.js');
function handleRequest(req, res) { function handleRequest(req, res) {

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const sql = require('../services/sql.js'); const sql = require('../services/sql');
const attributeService = require('../services/attributes.js'); const attributeService = require('../services/attributes.js');
const config = require('../services/config.js'); const config = require('../services/config.js');
const optionService = require('../services/options.js'); const optionService = require('../services/options.js');

View File

@ -7,7 +7,7 @@ const express = require('express');
const router = express.Router(); const router = express.Router();
const auth = require('../services/auth.js'); const auth = require('../services/auth.js');
const cls = require('../services/cls'); const cls = require('../services/cls');
const sql = require('../services/sql.js'); const sql = require('../services/sql');
const entityChangesService = require('../services/entity_changes.js'); const entityChangesService = require('../services/entity_changes.js');
const csurf = require('csurf'); const csurf = require('csurf');
const { createPartialContentHandler } = require("express-partial-content"); const { createPartialContentHandler } = require("express-partial-content");
@ -39,7 +39,7 @@ const appInfoRoute = require('./api/app_info.js');
const exportRoute = require('./api/export.js'); const exportRoute = require('./api/export.js');
const importRoute = require('./api/import.js'); const importRoute = require('./api/import.js');
const setupApiRoute = require('./api/setup.js'); const setupApiRoute = require('./api/setup.js');
const sqlRoute = require('./api/sql.js'); const sqlRoute = require('./api/sql');
const databaseRoute = require('./api/database.js'); const databaseRoute = require('./api/database.js');
const imageRoute = require('./api/image.js'); const imageRoute = require('./api/image.js');
const attributesRoute = require('./api/attributes.js'); const attributesRoute = require('./api/attributes.js');

View File

@ -3,7 +3,7 @@ const fs = require("fs-extra");
const dataDir = require('./data_dir'); const dataDir = require('./data_dir');
const dateUtils = require('./date_utils'); const dateUtils = require('./date_utils');
const Database = require("better-sqlite3"); const Database = require("better-sqlite3");
const sql = require('./sql.js'); const sql = require('./sql');
const path = require("path"); const path = require("path");
function getFullAnonymizationScript() { function getFullAnonymizationScript() {

View File

@ -1,7 +1,7 @@
"use strict"; "use strict";
const searchService = require('./search/services/search.js'); const searchService = require('./search/services/search.js');
const sql = require('./sql.js'); const sql = require('./sql');
const becca = require('../becca/becca.js'); const becca = require('../becca/becca.js');
const BAttribute = require('../becca/entities/battribute.js'); const BAttribute = require('../becca/entities/battribute.js');
const {formatAttrForSearch} = require('./attribute_formatter.js'); const {formatAttrForSearch} = require('./attribute_formatter.js');

View File

@ -1,6 +1,6 @@
const log = require('./log'); const log = require('./log');
const noteService = require('./notes.js'); const noteService = require('./notes.js');
const sql = require('./sql.js'); const sql = require('./sql');
const utils = require('./utils'); const utils = require('./utils');
const attributeService = require('./attributes.js'); const attributeService = require('./attributes.js');
const dateNoteService = require('./date_notes.js'); const dateNoteService = require('./date_notes.js');

View File

@ -7,7 +7,7 @@ const dataDir = require('./data_dir');
const log = require('./log'); const log = require('./log');
const syncMutexService = require('./sync_mutex.js'); const syncMutexService = require('./sync_mutex.js');
const cls = require('./cls'); const cls = require('./cls');
const sql = require('./sql.js'); const sql = require('./sql');
const path = require('path'); const path = require('path');
function getExistingBackups() { function getExistingBackups() {

View File

@ -1,5 +1,5 @@
const treeService = require('./tree.js'); const treeService = require('./tree.js');
const sql = require('./sql.js'); const sql = require('./sql');
function moveBranchToNote(branchToMove, targetParentNoteId) { function moveBranchToNote(branchToMove, targetParentNoteId) {
if (branchToMove.parentNoteId === targetParentNoteId) { if (branchToMove.parentNoteId === targetParentNoteId) {

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const sql = require('./sql.js'); const sql = require('./sql');
const eventChangesService = require('./entity_changes.js'); const eventChangesService = require('./entity_changes.js');
const treeService = require('./tree.js'); const treeService = require('./tree.js');
const BBranch = require('../becca/entities/bbranch.js'); const BBranch = require('../becca/entities/bbranch.js');

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const sql = require('./sql.js'); const sql = require('./sql');
const sqlInit = require('./sql_init.js'); const sqlInit = require('./sql_init.js');
const log = require('./log'); const log = require('./log');
const ws = require('./ws.js'); const ws = require('./ws.js');

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const sql = require('./sql.js'); const sql = require('./sql');
const utils = require('./utils'); const utils = require('./utils');
const log = require('./log'); const log = require('./log');
const eraseService = require('./erase.js'); const eraseService = require('./erase.js');

View File

@ -3,7 +3,7 @@
const noteService = require('./notes.js'); const noteService = require('./notes.js');
const attributeService = require('./attributes.js'); const attributeService = require('./attributes.js');
const dateUtils = require('./date_utils'); const dateUtils = require('./date_utils');
const sql = require('./sql.js'); const sql = require('./sql');
const protectedSessionService = require('./protected_session.js'); const protectedSessionService = require('./protected_session.js');
const searchService = require('../services/search/services/search.js'); const searchService = require('../services/search/services/search.js');
const SearchContext = require('../services/search/search_context.js'); const SearchContext = require('../services/search/search_context.js');

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const sql = require('../sql.js'); const sql = require('../sql');
const optionService = require('../options.js'); const optionService = require('../options.js');
const myScryptService = require('./my_scrypt.js'); const myScryptService = require('./my_scrypt.js');
const utils = require('../utils'); const utils = require('../utils');

View File

@ -1,4 +1,4 @@
const sql = require('./sql.js'); const sql = require('./sql');
const dateUtils = require('./date_utils'); const dateUtils = require('./date_utils');
const log = require('./log'); const log = require('./log');
const cls = require('./cls'); const cls = require('./cls');

View File

@ -1,4 +1,4 @@
const sql = require("./sql.js"); const sql = require("./sql");
const revisionService = require("./revisions.js"); const revisionService = require("./revisions.js");
const log = require("./log.ts"); const log = require("./log.ts");
const entityChangesService = require("./entity_changes.js"); const entityChangesService = require("./entity_changes.js");

View File

@ -5,7 +5,7 @@ const log = require('./log');
const protectedSessionService = require('./protected_session.js'); const protectedSessionService = require('./protected_session.js');
const noteService = require('./notes.js'); const noteService = require('./notes.js');
const optionService = require('./options.js'); const optionService = require('./options.js');
const sql = require('./sql.js'); const sql = require('./sql');
const jimp = require('jimp'); const jimp = require('jimp');
const imageType = require('image-type'); const imageType = require('image-type');
const sanitizeFilename = require('sanitize-filename'); const sanitizeFilename = require('sanitize-filename');

View File

@ -3,7 +3,7 @@ const stream = require('stream');
const {Throttle} = require('stream-throttle'); const {Throttle} = require('stream-throttle');
const log = require('../log'); const log = require('../log');
const utils = require('../utils'); const utils = require('../utils');
const sql = require('../sql.js'); const sql = require('../sql');
const noteService = require('../notes.js'); const noteService = require('../notes.js');
const imageService = require('../image.js'); const imageService = require('../image.js');
const protectedSessionService = require('../protected_session.js'); const protectedSessionService = require('../protected_session.js');

View File

@ -1,5 +1,5 @@
const backupService = require('./backup.js'); const backupService = require('./backup.js');
const sql = require('./sql.js'); const sql = require('./sql');
const fs = require('fs-extra'); const fs = require('fs-extra');
const log = require('./log'); const log = require('./log');
const utils = require('./utils'); const utils = require('./utils');

View File

@ -1,4 +1,4 @@
const sql = require('./sql.js'); const sql = require('./sql');
const optionService = require('./options.js'); const optionService = require('./options.js');
const dateUtils = require('./date_utils'); const dateUtils = require('./date_utils');
const entityChangesService = require('./entity_changes.js'); const entityChangesService = require('./entity_changes.js');

View File

@ -1,5 +1,5 @@
const becca = require('../becca/becca.js'); const becca = require('../becca/becca.js');
const sql = require('./sql.js'); const sql = require('./sql');
/** @returns {string|null} */ /** @returns {string|null} */
function getOptionOrNull(name) { function getOptionOrNull(name) {

View File

@ -1,7 +1,7 @@
"use strict"; "use strict";
const log = require('./log'); const log = require('./log');
const sql = require('./sql.js'); const sql = require('./sql');
const protectedSessionService = require('./protected_session.js'); const protectedSessionService = require('./protected_session.js');
const dateUtils = require('./date_utils'); const dateUtils = require('./date_utils');

View File

@ -38,7 +38,7 @@ class NoteContentFulltextExp extends Expression {
} }
const resultNoteSet = new NoteSet(); const resultNoteSet = new NoteSet();
const sql = require('../../sql.js'); const sql = require('../../sql');
for (const row of sql.iterateRows(` for (const row of sql.iterateRows(`
SELECT noteId, type, mime, content, isProtected SELECT noteId, type, mime, content, isProtected

View File

@ -90,7 +90,7 @@ function searchFromRelation(note, relationName) {
} }
function loadNeededInfoFromDatabase() { function loadNeededInfoFromDatabase() {
const sql = require('../../sql.js'); const sql = require('../../sql');
/** /**
* This complex structure is needed to calculate total occupied space by a note. Several object instances * This complex structure is needed to calculate total occupied space by a note. Several object instances

View File

@ -4,17 +4,19 @@
* @module sql * @module sql
*/ */
const log = require('./log'); import log = require('./log');
const Database = require('better-sqlite3'); import Database = require('better-sqlite3');
const dataDir = require('./data_dir'); import dataDir = require('./data_dir');
const cls = require('./cls'); import cls = require('./cls');
const fs = require("fs-extra"); import fs = require("fs-extra");
const dbConnection = new Database(dataDir.DOCUMENT_PATH); const dbConnection = new Database(dataDir.DOCUMENT_PATH);
dbConnection.pragma('journal_mode = WAL'); dbConnection.pragma('journal_mode = WAL');
const LOG_ALL_QUERIES = false; const LOG_ALL_QUERIES = false;
type Params = any;
[`exit`, `SIGINT`, `SIGUSR1`, `SIGUSR2`, `SIGTERM`].forEach(eventType => { [`exit`, `SIGINT`, `SIGUSR1`, `SIGUSR2`, `SIGTERM`].forEach(eventType => {
process.on(eventType, () => { process.on(eventType, () => {
if (dbConnection) { if (dbConnection) {
@ -25,7 +27,7 @@ const LOG_ALL_QUERIES = false;
}); });
}); });
function insert(tableName, rec, replace = false) { function insert<T extends {}>(tableName: string, rec: T, replace = false) {
const keys = Object.keys(rec || {}); const keys = Object.keys(rec || {});
if (keys.length === 0) { if (keys.length === 0) {
log.error(`Can't insert empty object into table ${tableName}`); log.error(`Can't insert empty object into table ${tableName}`);
@ -48,11 +50,11 @@ function insert(tableName, rec, replace = false) {
return res ? res.lastInsertRowid : null; return res ? res.lastInsertRowid : null;
} }
function replace(tableName, rec) { function replace<T extends {}>(tableName: string, rec: T) {
return insert(tableName, rec, true); return insert(tableName, rec, true);
} }
function upsert(tableName, primaryKey, rec) { function upsert<T extends {}>(tableName: string, primaryKey: string, rec: T) {
const keys = Object.keys(rec || {}); const keys = Object.keys(rec || {});
if (keys.length === 0) { if (keys.length === 0) {
log.error(`Can't upsert empty object into table ${tableName}`); log.error(`Can't upsert empty object into table ${tableName}`);
@ -70,16 +72,16 @@ function upsert(tableName, primaryKey, rec) {
for (const idx in rec) { for (const idx in rec) {
if (rec[idx] === true || rec[idx] === false) { if (rec[idx] === true || rec[idx] === false) {
rec[idx] = rec[idx] ? 1 : 0; (rec as any)[idx] = rec[idx] ? 1 : 0;
} }
} }
execute(query, rec); execute(query, rec);
} }
const statementCache = {}; const statementCache: Record<string, Database.Statement> = {};
function stmt(sql) { function stmt(sql: string) {
if (!(sql in statementCache)) { if (!(sql in statementCache)) {
statementCache[sql] = dbConnection.prepare(sql); statementCache[sql] = dbConnection.prepare(sql);
} }
@ -87,31 +89,34 @@ function stmt(sql) {
return statementCache[sql]; return statementCache[sql];
} }
function getRow(query, params = []) { function getRow<T>(query: string, params: Params = []): T {
return wrap(query, s => s.get(params)); return wrap(query, s => s.get(params)) as T;
} }
function getRowOrNull(query, params = []) { function getRowOrNull<T>(query: string, params: Params = []): T | null {
const all = getRows(query, params); const all = getRows(query, params);
if (!all) {
return null;
}
return all.length > 0 ? all[0] : null; return (all.length > 0 ? all[0] : null) as (T | null);
} }
function getValue(query, params = []) { function getValue(query: string, params: Params = []) {
return wrap(query, s => s.pluck().get(params)); return wrap(query, s => s.pluck().get(params));
} }
// smaller values can result in better performance due to better usage of statement cache // smaller values can result in better performance due to better usage of statement cache
const PARAM_LIMIT = 100; const PARAM_LIMIT = 100;
function getManyRows(query, params) { function getManyRows(query: string, params: Params) {
let results = []; let results: unknown[] = [];
while (params.length > 0) { while (params.length > 0) {
const curParams = params.slice(0, Math.min(params.length, PARAM_LIMIT)); const curParams = params.slice(0, Math.min(params.length, PARAM_LIMIT));
params = params.slice(curParams.length); params = params.slice(curParams.length);
const curParamsObj = {}; const curParamsObj: Record<string, any> = {};
let j = 1; let j = 1;
for (const param of curParams) { for (const param of curParams) {
@ -133,15 +138,15 @@ function getManyRows(query, params) {
return results; return results;
} }
function getRows(query, params = []) { function getRows(query: string, params: Params = []): unknown[] {
return wrap(query, s => s.all(params)); return wrap(query, s => s.all(params)) as unknown[];
} }
function getRawRows(query, params = []) { function getRawRows<T extends {} | unknown[]>(query: string, params: Params = []): T[] | null {
return wrap(query, s => s.raw().all(params)); return wrap(query, s => s.raw().all(params)) as T[] | null;
} }
function iterateRows(query, params = []) { function iterateRows(query: string, params: Params = []) {
if (LOG_ALL_QUERIES) { if (LOG_ALL_QUERIES) {
console.log(query); console.log(query);
} }
@ -149,26 +154,26 @@ function iterateRows(query, params = []) {
return stmt(query).iterate(params); return stmt(query).iterate(params);
} }
function getMap(query, params = []) { function getMap<K extends string | number | symbol, V>(query: string, params: Params = []) {
const map = {}; const map: Record<K, V> = {} as Record<K, V>;
const results = getRawRows(query, params); const results = getRawRows<any>(query, params);
for (const row of results) { for (const row of results || []) {
map[row[0]] = row[1]; map[row[0] as K] = row[1];
} }
return map; return map;
} }
function getColumn(query, params = []) { function getColumn(query: string, params: Params = []) {
return wrap(query, s => s.pluck().all(params)); return wrap(query, s => s.pluck().all(params));
} }
function execute(query, params = []) { function execute(query: string, params: Params = []): Database.RunResult {
return wrap(query, s => s.run(params)); return wrap(query, s => s.run(params)) as Database.RunResult;
} }
function executeMany(query, params) { function executeMany(query: string, params: Params) {
if (LOG_ALL_QUERIES) { if (LOG_ALL_QUERIES) {
console.log(query); console.log(query);
} }
@ -177,7 +182,7 @@ function executeMany(query, params) {
const curParams = params.slice(0, Math.min(params.length, PARAM_LIMIT)); const curParams = params.slice(0, Math.min(params.length, PARAM_LIMIT));
params = params.slice(curParams.length); params = params.slice(curParams.length);
const curParamsObj = {}; const curParamsObj: Record<string, any> = {};
let j = 1; let j = 1;
for (const param of curParams) { for (const param of curParams) {
@ -192,7 +197,7 @@ function executeMany(query, params) {
} }
} }
function executeScript(query) { function executeScript(query: string) {
if (LOG_ALL_QUERIES) { if (LOG_ALL_QUERIES) {
console.log(query); console.log(query);
} }
@ -200,7 +205,7 @@ function executeScript(query) {
return dbConnection.exec(query); return dbConnection.exec(query);
} }
function wrap(query, func) { function wrap(query: string, func: (statement: Database.Statement) => unknown): unknown {
const startTimestamp = Date.now(); const startTimestamp = Date.now();
let result; let result;
@ -211,7 +216,7 @@ function wrap(query, func) {
try { try {
result = func(stmt(query)); result = func(stmt(query));
} }
catch (e) { catch (e: any) {
if (e.message.includes("The database connection is not open")) { if (e.message.includes("The database connection is not open")) {
// this often happens on killing the app which puts these alerts in front of user // this often happens on killing the app which puts these alerts in front of user
// in these cases error should be simply ignored. // in these cases error should be simply ignored.
@ -237,9 +242,9 @@ function wrap(query, func) {
return result; return result;
} }
function transactional(func) { function transactional<T>(func: (statement: Database.Statement) => T) {
try { try {
const ret = dbConnection.transaction(func).deferred(); const ret = (dbConnection.transaction(func) as any).deferred();
if (!dbConnection.inTransaction) { // i.e. transaction was really committed (and not just savepoint released) if (!dbConnection.inTransaction) { // i.e. transaction was really committed (and not just savepoint released)
require('./ws.js').sendTransactionEntityChangesToAllClients(); require('./ws.js').sendTransactionEntityChangesToAllClients();
@ -263,7 +268,7 @@ function transactional(func) {
} }
} }
function fillParamList(paramIds, truncate = true) { function fillParamList(paramIds: string[], truncate = true) {
if (paramIds.length === 0) { if (paramIds.length === 0) {
return; return;
} }
@ -286,7 +291,7 @@ function fillParamList(paramIds, truncate = true) {
s.run(paramIds); s.run(paramIds);
} }
async function copyDatabase(targetFilePath) { async function copyDatabase(targetFilePath: string) {
try { try {
fs.unlinkSync(targetFilePath); fs.unlinkSync(targetFilePath);
} catch (e) { } catch (e) {
@ -295,7 +300,7 @@ async function copyDatabase(targetFilePath) {
await dbConnection.backup(targetFilePath); await dbConnection.backup(targetFilePath);
} }
function disableSlowQueryLogging(cb) { function disableSlowQueryLogging<T>(cb: () => T) {
const orig = cls.isSlowQueryLoggingDisabled(); const orig = cls.isSlowQueryLoggingDisabled();
try { try {

View File

@ -1,7 +1,7 @@
const log = require('./log'); const log = require('./log');
const fs = require('fs'); const fs = require('fs');
const resourceDir = require('./resource_dir.js'); const resourceDir = require('./resource_dir.js');
const sql = require('./sql.js'); const sql = require('./sql');
const utils = require('./utils'); const utils = require('./utils');
const optionService = require('./options.js'); const optionService = require('./options.js');
const port = require('./port.js'); const port = require('./port.js');

View File

@ -1,7 +1,7 @@
"use strict"; "use strict";
const log = require('./log'); const log = require('./log');
const sql = require('./sql.js'); const sql = require('./sql');
const optionService = require('./options.js'); const optionService = require('./options.js');
const utils = require('./utils'); const utils = require('./utils');
const instanceId = require('./instance_id.js'); const instanceId = require('./instance_id.js');

View File

@ -1,4 +1,4 @@
const sql = require('./sql.js'); const sql = require('./sql');
const log = require('./log'); const log = require('./log');
const entityChangesService = require('./entity_changes.js'); const entityChangesService = require('./entity_changes.js');
const eventService = require('./events.js'); const eventService = require('./events.js');

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const sql = require('./sql.js'); const sql = require('./sql');
const log = require('./log'); const log = require('./log');
const BBranch = require('../becca/entities/bbranch.js'); const BBranch = require('../becca/entities/bbranch.js');
const entityChangesService = require('./entity_changes.js'); const entityChangesService = require('./entity_changes.js');

View File

@ -1,7 +1,7 @@
const WebSocket = require('ws'); const WebSocket = require('ws');
const utils = require('./utils'); const utils = require('./utils');
const log = require('./log'); const log = require('./log');
const sql = require('./sql.js'); const sql = require('./sql');
const cls = require('./cls'); const cls = require('./cls');
const config = require('./config.js'); const config = require('./config.js');
const syncMutexService = require('./sync_mutex.js'); const syncMutexService = require('./sync_mutex.js');

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const sql = require('../../sql.js'); const sql = require('../../sql');
const utils = require('../../../services/utils'); const utils = require('../../../services/utils');
const AbstractShacaEntity = require('./abstract_shaca_entity.js'); const AbstractShacaEntity = require('./abstract_shaca_entity.js');

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const sql = require('../../sql.js'); const sql = require('../../sql');
const utils = require('../../../services/utils'); const utils = require('../../../services/utils');
const AbstractShacaEntity = require('./abstract_shaca_entity.js'); const AbstractShacaEntity = require('./abstract_shaca_entity.js');
const escape = require('escape-html'); const escape = require('escape-html');

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const sql = require('../sql.js'); const sql = require('../sql');
const shaca = require('./shaca.js'); const shaca = require('./shaca.js');
const log = require('../../services/log'); const log = require('../../services/log');
const SNote = require('./entities/snote.js'); const SNote = require('./entities/snote.js');