From 82a9808dea63dddf975a6798182f3469272af38b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 16 Feb 2024 22:44:12 +0200 Subject: [PATCH] server-ts: sql.js -> sql.ts --- .../0216__move_content_into_blobs.js | 2 +- .../0220__migrate_images_to_attachments.js | 2 +- dump-db/inc/data_key.js | 2 +- dump-db/inc/dump.js | 2 +- package-lock.json | 19 ++++ package.json | 1 + src/becca/becca.js | 2 +- src/becca/becca_loader.js | 2 +- src/becca/entities/abstract_becca_entity.js | 2 +- src/becca/entities/battachment.js | 2 +- src/becca/entities/battribute.js | 2 +- src/becca/entities/bnote.js | 2 +- src/becca/entities/brevision.js | 2 +- src/etapi/etapi_utils.js | 2 +- src/routes/api/attributes.js | 2 +- src/routes/api/branches.js | 2 +- src/routes/api/database.js | 2 +- src/routes/api/login.js | 2 +- src/routes/api/notes.js | 2 +- src/routes/api/recent_changes.js | 2 +- src/routes/api/recent_notes.js | 2 +- src/routes/api/relation-map.js | 2 +- src/routes/api/revisions.js | 2 +- src/routes/api/script.js | 2 +- src/routes/api/special_notes.js | 2 +- src/routes/api/sql.js | 2 +- src/routes/api/stats.js | 2 +- src/routes/api/sync.js | 2 +- src/routes/custom.js | 2 +- src/routes/index.js | 2 +- src/routes/routes.js | 4 +- src/services/anonymization.js | 2 +- src/services/attributes.js | 2 +- src/services/backend_script_api.js | 2 +- src/services/backup.js | 2 +- src/services/branches.js | 2 +- src/services/cloning.js | 2 +- src/services/consistency_checks.js | 2 +- src/services/content_hash.js | 2 +- src/services/date_notes.js | 2 +- src/services/encryption/password.js | 2 +- src/services/entity_changes.js | 2 +- src/services/erase.js | 2 +- src/services/image.js | 2 +- src/services/import/enex.js | 2 +- src/services/migration.js | 2 +- src/services/notes.js | 2 +- src/services/options.js | 2 +- src/services/revisions.js | 2 +- .../expressions/note_content_fulltext.js | 2 +- src/services/search/services/search.js | 2 +- src/services/{sql.js => sql.ts} | 89 ++++++++++--------- src/services/sql_init.js | 2 +- src/services/sync.js | 2 +- src/services/sync_update.js | 2 +- src/services/tree.js | 2 +- src/services/ws.js | 2 +- src/share/shaca/entities/sattachment.js | 2 +- src/share/shaca/entities/snote.js | 2 +- src/share/shaca/shaca_loader.js | 2 +- 60 files changed, 125 insertions(+), 100 deletions(-) rename src/services/{sql.js => sql.ts} (77%) diff --git a/db/migrations/0216__move_content_into_blobs.js b/db/migrations/0216__move_content_into_blobs.js index 3f67351b7..eea287b21 100644 --- a/db/migrations/0216__move_content_into_blobs.js +++ b/db/migrations/0216__move_content_into_blobs.js @@ -1,5 +1,5 @@ module.exports = () => { - const sql = require('../../src/services/sql.js'); + const sql = require('../../src/services/sql'); const utils = require('../../src/services/utils'); const existingBlobIds = new Set(); diff --git a/db/migrations/0220__migrate_images_to_attachments.js b/db/migrations/0220__migrate_images_to_attachments.js index 81bb84a3f..e949626ef 100644 --- a/db/migrations/0220__migrate_images_to_attachments.js +++ b/db/migrations/0220__migrate_images_to_attachments.js @@ -3,7 +3,7 @@ module.exports = () => { const becca = require('../../src/becca/becca.js'); const cls = require('../../src/services/cls'); const log = require('../../src/services/log'); - const sql = require('../../src/services/sql.js'); + const sql = require('../../src/services/sql'); cls.init(() => { // emergency disabling of image compression since it appears to make problems in migration to 0.61 diff --git a/dump-db/inc/data_key.js b/dump-db/inc/data_key.js index 58d3dd850..1dfc0dacf 100644 --- a/dump-db/inc/data_key.js +++ b/dump-db/inc/data_key.js @@ -1,5 +1,5 @@ const crypto = require("crypto"); -const sql = require('./sql.js'); +const sql = require('./sql'); const decryptService = require('./decrypt.js'); function getDataKey(password) { diff --git a/dump-db/inc/dump.js b/dump-db/inc/dump.js index 96fa60f94..7e3c1e1b3 100644 --- a/dump-db/inc/dump.js +++ b/dump-db/inc/dump.js @@ -1,6 +1,6 @@ const fs = require("fs"); const sanitize = require("sanitize-filename"); -const sql = require('./sql.js'); +const sql = require('./sql'); const decryptService = require('./decrypt.js'); const dataKeyService = require('./data_key.js'); const extensionService = require('./extension.js'); diff --git a/package-lock.json b/package-lock.json index 399043518..79c32b0f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -89,6 +89,7 @@ "trilium": "src/www.js" }, "devDependencies": { + "@types/better-sqlite3": "^7.6.9", "@types/escape-html": "^1.0.4", "@types/express": "^4.17.21", "@types/mime-types": "^2.1.4", @@ -1284,6 +1285,15 @@ "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-21.0.0.tgz", "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": { "version": "1.19.5", "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", "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": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", diff --git a/package.json b/package.json index 1678ffe4d..608d4c3a4 100644 --- a/package.json +++ b/package.json @@ -112,6 +112,7 @@ "yauzl": "2.10.0" }, "devDependencies": { + "@types/better-sqlite3": "^7.6.9", "@types/escape-html": "^1.0.4", "@types/express": "^4.17.21", "@types/mime-types": "^2.1.4", diff --git a/src/becca/becca.js b/src/becca/becca.js index d1e7c333e..1d39d7282 100644 --- a/src/becca/becca.js +++ b/src/becca/becca.js @@ -1,6 +1,6 @@ "use strict"; -const sql = require('../services/sql.js'); +const sql = require('../services/sql'); const NoteSet = require('../services/search/note_set.js'); const NotFoundError = require('../errors/not_found_error.js'); diff --git a/src/becca/becca_loader.js b/src/becca/becca_loader.js index 39989090e..ad64570a0 100644 --- a/src/becca/becca_loader.js +++ b/src/becca/becca_loader.js @@ -1,6 +1,6 @@ "use strict"; -const sql = require('../services/sql.js'); +const sql = require('../services/sql'); const eventService = require('../services/events.js'); const becca = require('./becca.js'); const sqlInit = require('../services/sql_init.js'); diff --git a/src/becca/entities/abstract_becca_entity.js b/src/becca/entities/abstract_becca_entity.js index b1c7feac9..368c55423 100644 --- a/src/becca/entities/abstract_becca_entity.js +++ b/src/becca/entities/abstract_becca_entity.js @@ -1,7 +1,7 @@ "use strict"; const utils = require('../../services/utils'); -const sql = require('../../services/sql.js'); +const sql = require('../../services/sql'); const entityChangesService = require('../../services/entity_changes.js'); const eventService = require('../../services/events.js'); const dateUtils = require('../../services/date_utils'); diff --git a/src/becca/entities/battachment.js b/src/becca/entities/battachment.js index 49a22ef0d..689590bce 100644 --- a/src/becca/entities/battachment.js +++ b/src/becca/entities/battachment.js @@ -3,7 +3,7 @@ const utils = require('../../services/utils'); const dateUtils = require('../../services/date_utils'); 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 log = require('../../services/log'); diff --git a/src/becca/entities/battribute.js b/src/becca/entities/battribute.js index 3598b0671..54afd3587 100644 --- a/src/becca/entities/battribute.js +++ b/src/becca/entities/battribute.js @@ -2,7 +2,7 @@ const BNote = require('./bnote.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 promotedAttributeDefinitionParser = require('../../services/promoted_attribute_definition_parser.js'); const {sanitizeAttributeName} = require('../../services/sanitize_attribute_name.js'); diff --git a/src/becca/entities/bnote.js b/src/becca/entities/bnote.js index 77776750d..7372b4d0d 100644 --- a/src/becca/entities/bnote.js +++ b/src/becca/entities/bnote.js @@ -2,7 +2,7 @@ const protectedSessionService = require('../../services/protected_session.js'); const log = require('../../services/log'); -const sql = require('../../services/sql.js'); +const sql = require('../../services/sql'); const utils = require('../../services/utils'); const dateUtils = require('../../services/date_utils'); const AbstractBeccaEntity = require('./abstract_becca_entity.js'); diff --git a/src/becca/entities/brevision.js b/src/becca/entities/brevision.js index e70726d1b..690ed6311 100644 --- a/src/becca/entities/brevision.js +++ b/src/becca/entities/brevision.js @@ -5,7 +5,7 @@ const utils = require('../../services/utils'); const dateUtils = require('../../services/date_utils'); const becca = require('../becca.js'); const AbstractBeccaEntity = require('./abstract_becca_entity.js'); -const sql = require('../../services/sql.js'); +const sql = require('../../services/sql'); const BAttachment = require('./battachment.js'); /** diff --git a/src/etapi/etapi_utils.js b/src/etapi/etapi_utils.js index 24c179a23..41d40cf94 100644 --- a/src/etapi/etapi_utils.js +++ b/src/etapi/etapi_utils.js @@ -1,5 +1,5 @@ const cls = require('../services/cls'); -const sql = require('../services/sql.js'); +const sql = require('../services/sql'); const log = require('../services/log'); const becca = require('../becca/becca.js'); const etapiTokenService = require('../services/etapi_tokens.js'); diff --git a/src/routes/api/attributes.js b/src/routes/api/attributes.js index 480cb8b3f..b602aba6c 100644 --- a/src/routes/api/attributes.js +++ b/src/routes/api/attributes.js @@ -1,6 +1,6 @@ "use strict"; -const sql = require('../../services/sql.js'); +const sql = require('../../services/sql'); const log = require('../../services/log'); const attributeService = require('../../services/attributes.js'); const BAttribute = require('../../becca/entities/battribute.js'); diff --git a/src/routes/api/branches.js b/src/routes/api/branches.js index fc2830b76..bca2a87a0 100644 --- a/src/routes/api/branches.js +++ b/src/routes/api/branches.js @@ -1,6 +1,6 @@ "use strict"; -const sql = require('../../services/sql.js'); +const sql = require('../../services/sql'); const utils = require('../../services/utils'); const entityChangesService = require('../../services/entity_changes.js'); const treeService = require('../../services/tree.js'); diff --git a/src/routes/api/database.js b/src/routes/api/database.js index 6d6fcddf4..6c8063fe1 100644 --- a/src/routes/api/database.js +++ b/src/routes/api/database.js @@ -1,6 +1,6 @@ "use strict"; -const sql = require('../../services/sql.js'); +const sql = require('../../services/sql'); const log = require('../../services/log'); const backupService = require('../../services/backup.js'); const anonymizationService = require('../../services/anonymization.js'); diff --git a/src/routes/api/login.js b/src/routes/api/login.js index 7aed6955a..9c3536a04 100644 --- a/src/routes/api/login.js +++ b/src/routes/api/login.js @@ -9,7 +9,7 @@ const protectedSessionService = require('../../services/protected_session.js'); const appInfo = require('../../services/app_info.js'); const eventService = require('../../services/events.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 etapiTokenService = require('../../services/etapi_tokens.js'); diff --git a/src/routes/api/notes.js b/src/routes/api/notes.js index 0ce570892..5a0787c27 100644 --- a/src/routes/api/notes.js +++ b/src/routes/api/notes.js @@ -3,7 +3,7 @@ const noteService = require('../../services/notes.js'); const eraseService = require('../../services/erase.js'); const treeService = require('../../services/tree.js'); -const sql = require('../../services/sql.js'); +const sql = require('../../services/sql'); const utils = require('../../services/utils'); const log = require('../../services/log'); const TaskContext = require('../../services/task_context.js'); diff --git a/src/routes/api/recent_changes.js b/src/routes/api/recent_changes.js index 567abfb3a..8023a4875 100644 --- a/src/routes/api/recent_changes.js +++ b/src/routes/api/recent_changes.js @@ -1,6 +1,6 @@ "use strict"; -const sql = require('../../services/sql.js'); +const sql = require('../../services/sql'); const protectedSessionService = require('../../services/protected_session.js'); const noteService = require('../../services/notes.js'); const becca = require('../../becca/becca.js'); diff --git a/src/routes/api/recent_notes.js b/src/routes/api/recent_notes.js index 80ccd9fea..5f71633bb 100644 --- a/src/routes/api/recent_notes.js +++ b/src/routes/api/recent_notes.js @@ -1,7 +1,7 @@ "use strict"; 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'); function addRecentNote(req) { diff --git a/src/routes/api/relation-map.js b/src/routes/api/relation-map.js index 0c3db4e6d..dc89ab5bb 100644 --- a/src/routes/api/relation-map.js +++ b/src/routes/api/relation-map.js @@ -1,5 +1,5 @@ const becca = require('../../becca/becca.js'); -const sql = require('../../services/sql.js'); +const sql = require('../../services/sql'); function getRelationMap(req) { const {relationMapNoteId, noteIds} = req.body; diff --git a/src/routes/api/revisions.js b/src/routes/api/revisions.js index bf378d625..6a75f98ab 100644 --- a/src/routes/api/revisions.js +++ b/src/routes/api/revisions.js @@ -3,7 +3,7 @@ const beccaService = require('../../becca/becca_service.js'); const revisionService = require('../../services/revisions.js'); const utils = require('../../services/utils'); -const sql = require('../../services/sql.js'); +const sql = require('../../services/sql'); const cls = require('../../services/cls'); const path = require('path'); const becca = require('../../becca/becca.js'); diff --git a/src/routes/api/script.js b/src/routes/api/script.js index 833a57b9b..441d67e54 100644 --- a/src/routes/api/script.js +++ b/src/routes/api/script.js @@ -4,7 +4,7 @@ const scriptService = require('../../services/script.js'); const attributeService = require('../../services/attributes.js'); const becca = require('../../becca/becca.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 // need to await it and make the complete response including metadata available in a Promise, so that the route detects diff --git a/src/routes/api/special_notes.js b/src/routes/api/special_notes.js index d39406f54..3c223f767 100644 --- a/src/routes/api/special_notes.js +++ b/src/routes/api/special_notes.js @@ -1,7 +1,7 @@ "use strict"; const dateNoteService = require('../../services/date_notes.js'); -const sql = require('../../services/sql.js'); +const sql = require('../../services/sql'); const cls = require('../../services/cls'); const specialNotesService = require('../../services/special_notes.js'); const becca = require('../../becca/becca.js'); diff --git a/src/routes/api/sql.js b/src/routes/api/sql.js index 6a9767317..65c381f8b 100644 --- a/src/routes/api/sql.js +++ b/src/routes/api/sql.js @@ -1,6 +1,6 @@ "use strict"; -const sql = require('../../services/sql.js'); +const sql = require('../../services/sql'); const becca = require('../../becca/becca.js'); function getSchema() { diff --git a/src/routes/api/stats.js b/src/routes/api/stats.js index d67d624d3..4e1ad74fe 100644 --- a/src/routes/api/stats.js +++ b/src/routes/api/stats.js @@ -1,4 +1,4 @@ -const sql = require('../../services/sql.js'); +const sql = require('../../services/sql'); const becca = require('../../becca/becca.js'); function getNoteSize(req) { diff --git a/src/routes/api/sync.js b/src/routes/api/sync.js index ecf22c060..5c6dbc799 100644 --- a/src/routes/api/sync.js +++ b/src/routes/api/sync.js @@ -3,7 +3,7 @@ const syncService = require('../../services/sync.js'); const syncUpdateService = require('../../services/sync_update.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 optionService = require('../../services/options.js'); const contentHashService = require('../../services/content_hash.js'); diff --git a/src/routes/custom.js b/src/routes/custom.js index 1d002b964..21fca8854 100644 --- a/src/routes/custom.js +++ b/src/routes/custom.js @@ -2,7 +2,7 @@ const log = require('../services/log'); const fileService = require('./api/files.js'); const scriptService = require('../services/script.js'); const cls = require('../services/cls'); -const sql = require('../services/sql.js'); +const sql = require('../services/sql'); const becca = require('../becca/becca.js'); function handleRequest(req, res) { diff --git a/src/routes/index.js b/src/routes/index.js index ef8f631a2..128742e99 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -1,6 +1,6 @@ "use strict"; -const sql = require('../services/sql.js'); +const sql = require('../services/sql'); const attributeService = require('../services/attributes.js'); const config = require('../services/config.js'); const optionService = require('../services/options.js'); diff --git a/src/routes/routes.js b/src/routes/routes.js index 79914e3fd..014d6b11d 100644 --- a/src/routes/routes.js +++ b/src/routes/routes.js @@ -7,7 +7,7 @@ const express = require('express'); const router = express.Router(); const auth = require('../services/auth.js'); const cls = require('../services/cls'); -const sql = require('../services/sql.js'); +const sql = require('../services/sql'); const entityChangesService = require('../services/entity_changes.js'); const csurf = require('csurf'); const { createPartialContentHandler } = require("express-partial-content"); @@ -39,7 +39,7 @@ const appInfoRoute = require('./api/app_info.js'); const exportRoute = require('./api/export.js'); const importRoute = require('./api/import.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 imageRoute = require('./api/image.js'); const attributesRoute = require('./api/attributes.js'); diff --git a/src/services/anonymization.js b/src/services/anonymization.js index 0fc774895..6a223ec4e 100644 --- a/src/services/anonymization.js +++ b/src/services/anonymization.js @@ -3,7 +3,7 @@ const fs = require("fs-extra"); const dataDir = require('./data_dir'); const dateUtils = require('./date_utils'); const Database = require("better-sqlite3"); -const sql = require('./sql.js'); +const sql = require('./sql'); const path = require("path"); function getFullAnonymizationScript() { diff --git a/src/services/attributes.js b/src/services/attributes.js index 632a6e09a..02e0d53f4 100644 --- a/src/services/attributes.js +++ b/src/services/attributes.js @@ -1,7 +1,7 @@ "use strict"; const searchService = require('./search/services/search.js'); -const sql = require('./sql.js'); +const sql = require('./sql'); const becca = require('../becca/becca.js'); const BAttribute = require('../becca/entities/battribute.js'); const {formatAttrForSearch} = require('./attribute_formatter.js'); diff --git a/src/services/backend_script_api.js b/src/services/backend_script_api.js index 2836018ec..7a6141586 100644 --- a/src/services/backend_script_api.js +++ b/src/services/backend_script_api.js @@ -1,6 +1,6 @@ const log = require('./log'); const noteService = require('./notes.js'); -const sql = require('./sql.js'); +const sql = require('./sql'); const utils = require('./utils'); const attributeService = require('./attributes.js'); const dateNoteService = require('./date_notes.js'); diff --git a/src/services/backup.js b/src/services/backup.js index c9ae0edba..772d92d55 100644 --- a/src/services/backup.js +++ b/src/services/backup.js @@ -7,7 +7,7 @@ const dataDir = require('./data_dir'); const log = require('./log'); const syncMutexService = require('./sync_mutex.js'); const cls = require('./cls'); -const sql = require('./sql.js'); +const sql = require('./sql'); const path = require('path'); function getExistingBackups() { diff --git a/src/services/branches.js b/src/services/branches.js index 644bde80e..ec0632745 100644 --- a/src/services/branches.js +++ b/src/services/branches.js @@ -1,5 +1,5 @@ const treeService = require('./tree.js'); -const sql = require('./sql.js'); +const sql = require('./sql'); function moveBranchToNote(branchToMove, targetParentNoteId) { if (branchToMove.parentNoteId === targetParentNoteId) { diff --git a/src/services/cloning.js b/src/services/cloning.js index 6c2f0c161..a715dd3a1 100644 --- a/src/services/cloning.js +++ b/src/services/cloning.js @@ -1,6 +1,6 @@ "use strict"; -const sql = require('./sql.js'); +const sql = require('./sql'); const eventChangesService = require('./entity_changes.js'); const treeService = require('./tree.js'); const BBranch = require('../becca/entities/bbranch.js'); diff --git a/src/services/consistency_checks.js b/src/services/consistency_checks.js index e7b11d290..1b0990328 100644 --- a/src/services/consistency_checks.js +++ b/src/services/consistency_checks.js @@ -1,6 +1,6 @@ "use strict"; -const sql = require('./sql.js'); +const sql = require('./sql'); const sqlInit = require('./sql_init.js'); const log = require('./log'); const ws = require('./ws.js'); diff --git a/src/services/content_hash.js b/src/services/content_hash.js index 8e01c067f..a42c16503 100644 --- a/src/services/content_hash.js +++ b/src/services/content_hash.js @@ -1,6 +1,6 @@ "use strict"; -const sql = require('./sql.js'); +const sql = require('./sql'); const utils = require('./utils'); const log = require('./log'); const eraseService = require('./erase.js'); diff --git a/src/services/date_notes.js b/src/services/date_notes.js index 122082f57..f258d2893 100644 --- a/src/services/date_notes.js +++ b/src/services/date_notes.js @@ -3,7 +3,7 @@ const noteService = require('./notes.js'); const attributeService = require('./attributes.js'); const dateUtils = require('./date_utils'); -const sql = require('./sql.js'); +const sql = require('./sql'); const protectedSessionService = require('./protected_session.js'); const searchService = require('../services/search/services/search.js'); const SearchContext = require('../services/search/search_context.js'); diff --git a/src/services/encryption/password.js b/src/services/encryption/password.js index f9665b585..95660fcf7 100644 --- a/src/services/encryption/password.js +++ b/src/services/encryption/password.js @@ -1,6 +1,6 @@ "use strict"; -const sql = require('../sql.js'); +const sql = require('../sql'); const optionService = require('../options.js'); const myScryptService = require('./my_scrypt.js'); const utils = require('../utils'); diff --git a/src/services/entity_changes.js b/src/services/entity_changes.js index 520c29718..209afc359 100644 --- a/src/services/entity_changes.js +++ b/src/services/entity_changes.js @@ -1,4 +1,4 @@ -const sql = require('./sql.js'); +const sql = require('./sql'); const dateUtils = require('./date_utils'); const log = require('./log'); const cls = require('./cls'); diff --git a/src/services/erase.js b/src/services/erase.js index dc43fc088..05719a480 100644 --- a/src/services/erase.js +++ b/src/services/erase.js @@ -1,4 +1,4 @@ -const sql = require("./sql.js"); +const sql = require("./sql"); const revisionService = require("./revisions.js"); const log = require("./log.ts"); const entityChangesService = require("./entity_changes.js"); diff --git a/src/services/image.js b/src/services/image.js index 8ef302708..7113b6aca 100644 --- a/src/services/image.js +++ b/src/services/image.js @@ -5,7 +5,7 @@ const log = require('./log'); const protectedSessionService = require('./protected_session.js'); const noteService = require('./notes.js'); const optionService = require('./options.js'); -const sql = require('./sql.js'); +const sql = require('./sql'); const jimp = require('jimp'); const imageType = require('image-type'); const sanitizeFilename = require('sanitize-filename'); diff --git a/src/services/import/enex.js b/src/services/import/enex.js index 72f9554ae..c9565cd04 100644 --- a/src/services/import/enex.js +++ b/src/services/import/enex.js @@ -3,7 +3,7 @@ const stream = require('stream'); const {Throttle} = require('stream-throttle'); const log = require('../log'); const utils = require('../utils'); -const sql = require('../sql.js'); +const sql = require('../sql'); const noteService = require('../notes.js'); const imageService = require('../image.js'); const protectedSessionService = require('../protected_session.js'); diff --git a/src/services/migration.js b/src/services/migration.js index 17aa5e222..efe122a46 100644 --- a/src/services/migration.js +++ b/src/services/migration.js @@ -1,5 +1,5 @@ const backupService = require('./backup.js'); -const sql = require('./sql.js'); +const sql = require('./sql'); const fs = require('fs-extra'); const log = require('./log'); const utils = require('./utils'); diff --git a/src/services/notes.js b/src/services/notes.js index 77ed66984..27aa15f62 100644 --- a/src/services/notes.js +++ b/src/services/notes.js @@ -1,4 +1,4 @@ -const sql = require('./sql.js'); +const sql = require('./sql'); const optionService = require('./options.js'); const dateUtils = require('./date_utils'); const entityChangesService = require('./entity_changes.js'); diff --git a/src/services/options.js b/src/services/options.js index 6c33b9478..e7e90331b 100644 --- a/src/services/options.js +++ b/src/services/options.js @@ -1,5 +1,5 @@ const becca = require('../becca/becca.js'); -const sql = require('./sql.js'); +const sql = require('./sql'); /** @returns {string|null} */ function getOptionOrNull(name) { diff --git a/src/services/revisions.js b/src/services/revisions.js index 084f941f9..e4b2dd9ed 100644 --- a/src/services/revisions.js +++ b/src/services/revisions.js @@ -1,7 +1,7 @@ "use strict"; const log = require('./log'); -const sql = require('./sql.js'); +const sql = require('./sql'); const protectedSessionService = require('./protected_session.js'); const dateUtils = require('./date_utils'); diff --git a/src/services/search/expressions/note_content_fulltext.js b/src/services/search/expressions/note_content_fulltext.js index 48ab61a82..951d0cd6b 100644 --- a/src/services/search/expressions/note_content_fulltext.js +++ b/src/services/search/expressions/note_content_fulltext.js @@ -38,7 +38,7 @@ class NoteContentFulltextExp extends Expression { } const resultNoteSet = new NoteSet(); - const sql = require('../../sql.js'); + const sql = require('../../sql'); for (const row of sql.iterateRows(` SELECT noteId, type, mime, content, isProtected diff --git a/src/services/search/services/search.js b/src/services/search/services/search.js index 496d420e0..f6b309ad3 100644 --- a/src/services/search/services/search.js +++ b/src/services/search/services/search.js @@ -90,7 +90,7 @@ function searchFromRelation(note, relationName) { } 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 diff --git a/src/services/sql.js b/src/services/sql.ts similarity index 77% rename from src/services/sql.js rename to src/services/sql.ts index fc961b0da..f89330832 100644 --- a/src/services/sql.js +++ b/src/services/sql.ts @@ -4,17 +4,19 @@ * @module sql */ -const log = require('./log'); -const Database = require('better-sqlite3'); -const dataDir = require('./data_dir'); -const cls = require('./cls'); -const fs = require("fs-extra"); +import log = require('./log'); +import Database = require('better-sqlite3'); +import dataDir = require('./data_dir'); +import cls = require('./cls'); +import fs = require("fs-extra"); const dbConnection = new Database(dataDir.DOCUMENT_PATH); dbConnection.pragma('journal_mode = WAL'); const LOG_ALL_QUERIES = false; +type Params = any; + [`exit`, `SIGINT`, `SIGUSR1`, `SIGUSR2`, `SIGTERM`].forEach(eventType => { process.on(eventType, () => { if (dbConnection) { @@ -25,7 +27,7 @@ const LOG_ALL_QUERIES = false; }); }); -function insert(tableName, rec, replace = false) { +function insert(tableName: string, rec: T, replace = false) { const keys = Object.keys(rec || {}); if (keys.length === 0) { 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; } -function replace(tableName, rec) { +function replace(tableName: string, rec: T) { return insert(tableName, rec, true); } -function upsert(tableName, primaryKey, rec) { +function upsert(tableName: string, primaryKey: string, rec: T) { const keys = Object.keys(rec || {}); if (keys.length === 0) { log.error(`Can't upsert empty object into table ${tableName}`); @@ -70,16 +72,16 @@ function upsert(tableName, primaryKey, rec) { for (const idx in rec) { if (rec[idx] === true || rec[idx] === false) { - rec[idx] = rec[idx] ? 1 : 0; + (rec as any)[idx] = rec[idx] ? 1 : 0; } } execute(query, rec); } -const statementCache = {}; +const statementCache: Record = {}; -function stmt(sql) { +function stmt(sql: string) { if (!(sql in statementCache)) { statementCache[sql] = dbConnection.prepare(sql); } @@ -87,31 +89,34 @@ function stmt(sql) { return statementCache[sql]; } -function getRow(query, params = []) { - return wrap(query, s => s.get(params)); +function getRow(query: string, params: Params = []): T { + return wrap(query, s => s.get(params)) as T; } -function getRowOrNull(query, params = []) { +function getRowOrNull(query: string, params: Params = []): T | null { 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)); } // smaller values can result in better performance due to better usage of statement cache const PARAM_LIMIT = 100; -function getManyRows(query, params) { - let results = []; +function getManyRows(query: string, params: Params) { + let results: unknown[] = []; while (params.length > 0) { const curParams = params.slice(0, Math.min(params.length, PARAM_LIMIT)); params = params.slice(curParams.length); - const curParamsObj = {}; + const curParamsObj: Record = {}; let j = 1; for (const param of curParams) { @@ -133,15 +138,15 @@ function getManyRows(query, params) { return results; } -function getRows(query, params = []) { - return wrap(query, s => s.all(params)); +function getRows(query: string, params: Params = []): unknown[] { + return wrap(query, s => s.all(params)) as unknown[]; } -function getRawRows(query, params = []) { - return wrap(query, s => s.raw().all(params)); +function getRawRows(query: string, params: Params = []): T[] | null { + 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) { console.log(query); } @@ -149,26 +154,26 @@ function iterateRows(query, params = []) { return stmt(query).iterate(params); } -function getMap(query, params = []) { - const map = {}; - const results = getRawRows(query, params); +function getMap(query: string, params: Params = []) { + const map: Record = {} as Record; + const results = getRawRows(query, params); - for (const row of results) { - map[row[0]] = row[1]; + for (const row of results || []) { + map[row[0] as K] = row[1]; } return map; } -function getColumn(query, params = []) { +function getColumn(query: string, params: Params = []) { return wrap(query, s => s.pluck().all(params)); } -function execute(query, params = []) { - return wrap(query, s => s.run(params)); +function execute(query: string, params: Params = []): Database.RunResult { + return wrap(query, s => s.run(params)) as Database.RunResult; } -function executeMany(query, params) { +function executeMany(query: string, params: Params) { if (LOG_ALL_QUERIES) { console.log(query); } @@ -177,7 +182,7 @@ function executeMany(query, params) { const curParams = params.slice(0, Math.min(params.length, PARAM_LIMIT)); params = params.slice(curParams.length); - const curParamsObj = {}; + const curParamsObj: Record = {}; let j = 1; for (const param of curParams) { @@ -192,7 +197,7 @@ function executeMany(query, params) { } } -function executeScript(query) { +function executeScript(query: string) { if (LOG_ALL_QUERIES) { console.log(query); } @@ -200,7 +205,7 @@ function executeScript(query) { return dbConnection.exec(query); } -function wrap(query, func) { +function wrap(query: string, func: (statement: Database.Statement) => unknown): unknown { const startTimestamp = Date.now(); let result; @@ -211,7 +216,7 @@ function wrap(query, func) { try { result = func(stmt(query)); } - catch (e) { + catch (e: any) { 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 // in these cases error should be simply ignored. @@ -237,9 +242,9 @@ function wrap(query, func) { return result; } -function transactional(func) { +function transactional(func: (statement: Database.Statement) => T) { 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) 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) { return; } @@ -286,7 +291,7 @@ function fillParamList(paramIds, truncate = true) { s.run(paramIds); } -async function copyDatabase(targetFilePath) { +async function copyDatabase(targetFilePath: string) { try { fs.unlinkSync(targetFilePath); } catch (e) { @@ -295,7 +300,7 @@ async function copyDatabase(targetFilePath) { await dbConnection.backup(targetFilePath); } -function disableSlowQueryLogging(cb) { +function disableSlowQueryLogging(cb: () => T) { const orig = cls.isSlowQueryLoggingDisabled(); try { diff --git a/src/services/sql_init.js b/src/services/sql_init.js index 298542a7b..f11763886 100644 --- a/src/services/sql_init.js +++ b/src/services/sql_init.js @@ -1,7 +1,7 @@ const log = require('./log'); const fs = require('fs'); const resourceDir = require('./resource_dir.js'); -const sql = require('./sql.js'); +const sql = require('./sql'); const utils = require('./utils'); const optionService = require('./options.js'); const port = require('./port.js'); diff --git a/src/services/sync.js b/src/services/sync.js index e31eb3654..9afd4704f 100644 --- a/src/services/sync.js +++ b/src/services/sync.js @@ -1,7 +1,7 @@ "use strict"; const log = require('./log'); -const sql = require('./sql.js'); +const sql = require('./sql'); const optionService = require('./options.js'); const utils = require('./utils'); const instanceId = require('./instance_id.js'); diff --git a/src/services/sync_update.js b/src/services/sync_update.js index f9695ba0c..5db427e1f 100644 --- a/src/services/sync_update.js +++ b/src/services/sync_update.js @@ -1,4 +1,4 @@ -const sql = require('./sql.js'); +const sql = require('./sql'); const log = require('./log'); const entityChangesService = require('./entity_changes.js'); const eventService = require('./events.js'); diff --git a/src/services/tree.js b/src/services/tree.js index 0ca25c536..7bbca25ab 100644 --- a/src/services/tree.js +++ b/src/services/tree.js @@ -1,6 +1,6 @@ "use strict"; -const sql = require('./sql.js'); +const sql = require('./sql'); const log = require('./log'); const BBranch = require('../becca/entities/bbranch.js'); const entityChangesService = require('./entity_changes.js'); diff --git a/src/services/ws.js b/src/services/ws.js index 8c6b64a3c..9e1f7f135 100644 --- a/src/services/ws.js +++ b/src/services/ws.js @@ -1,7 +1,7 @@ const WebSocket = require('ws'); const utils = require('./utils'); const log = require('./log'); -const sql = require('./sql.js'); +const sql = require('./sql'); const cls = require('./cls'); const config = require('./config.js'); const syncMutexService = require('./sync_mutex.js'); diff --git a/src/share/shaca/entities/sattachment.js b/src/share/shaca/entities/sattachment.js index 0c60b1332..4b76fea2c 100644 --- a/src/share/shaca/entities/sattachment.js +++ b/src/share/shaca/entities/sattachment.js @@ -1,6 +1,6 @@ "use strict"; -const sql = require('../../sql.js'); +const sql = require('../../sql'); const utils = require('../../../services/utils'); const AbstractShacaEntity = require('./abstract_shaca_entity.js'); diff --git a/src/share/shaca/entities/snote.js b/src/share/shaca/entities/snote.js index 99fd61efe..fd889c23f 100644 --- a/src/share/shaca/entities/snote.js +++ b/src/share/shaca/entities/snote.js @@ -1,6 +1,6 @@ "use strict"; -const sql = require('../../sql.js'); +const sql = require('../../sql'); const utils = require('../../../services/utils'); const AbstractShacaEntity = require('./abstract_shaca_entity.js'); const escape = require('escape-html'); diff --git a/src/share/shaca/shaca_loader.js b/src/share/shaca/shaca_loader.js index 850b820a4..aef4f36d5 100644 --- a/src/share/shaca/shaca_loader.js +++ b/src/share/shaca/shaca_loader.js @@ -1,6 +1,6 @@ "use strict"; -const sql = require('../sql.js'); +const sql = require('../sql'); const shaca = require('./shaca.js'); const log = require('../../services/log'); const SNote = require('./entities/snote.js');