diff --git a/db/migrations/0216__move_content_into_blobs.js b/db/migrations/0216__move_content_into_blobs.js index d2f7a9f2d..3f67351b7 100644 --- a/db/migrations/0216__move_content_into_blobs.js +++ b/db/migrations/0216__move_content_into_blobs.js @@ -1,6 +1,6 @@ module.exports = () => { const sql = require('../../src/services/sql.js'); - const utils = require('../../src/services/utils.js'); + const utils = require('../../src/services/utils'); const existingBlobIds = new Set(); diff --git a/package-lock.json b/package-lock.json index 953690117..399043518 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@braintree/sanitize-url": "6.0.4", "@electron/remote": "2.1.0", "@excalidraw/excalidraw": "0.16.1", + "@types/cls-hooked": "^4.3.8", "archiver": "6.0.1", "async-mutex": "0.4.0", "axios": "1.6.2", @@ -88,7 +89,9 @@ "trilium": "src/www.js" }, "devDependencies": { + "@types/escape-html": "^1.0.4", "@types/express": "^4.17.21", + "@types/mime-types": "^2.1.4", "@types/node": "^20.11.19", "cross-env": "7.0.3", "electron": "25.9.8", @@ -1302,6 +1305,14 @@ "@types/responselike": "*" } }, + "node_modules/@types/cls-hooked": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@types/cls-hooked/-/cls-hooked-4.3.8.tgz", + "integrity": "sha512-tf/7H883gFA6MPlWI15EQtfNZ+oPL0gLKkOlx9UHFrun1fC/FkuyNBpTKq1B5E3T4fbvjId6WifHUdSGsMMuPg==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -1337,6 +1348,12 @@ "@types/ms": "*" } }, + "node_modules/@types/escape-html": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/escape-html/-/escape-html-1.0.4.tgz", + "integrity": "sha512-qZ72SFTgUAZ5a7Tj6kf2SHLetiH5S6f8G5frB2SPQ3EyF02kxdyBFf4Tz4banE3xCgGnKgWLt//a6VuYHKYJTg==", + "dev": true + }, "node_modules/@types/eslint": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", @@ -1473,6 +1490,12 @@ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, + "node_modules/@types/mime-types": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz", + "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", + "dev": true + }, "node_modules/@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -15915,6 +15938,14 @@ "@types/responselike": "*" } }, + "@types/cls-hooked": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@types/cls-hooked/-/cls-hooked-4.3.8.tgz", + "integrity": "sha512-tf/7H883gFA6MPlWI15EQtfNZ+oPL0gLKkOlx9UHFrun1fC/FkuyNBpTKq1B5E3T4fbvjId6WifHUdSGsMMuPg==", + "requires": { + "@types/node": "*" + } + }, "@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -15950,6 +15981,12 @@ "@types/ms": "*" } }, + "@types/escape-html": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/escape-html/-/escape-html-1.0.4.tgz", + "integrity": "sha512-qZ72SFTgUAZ5a7Tj6kf2SHLetiH5S6f8G5frB2SPQ3EyF02kxdyBFf4Tz4banE3xCgGnKgWLt//a6VuYHKYJTg==", + "dev": true + }, "@types/eslint": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", @@ -16086,6 +16123,12 @@ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, + "@types/mime-types": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz", + "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", + "dev": true + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", diff --git a/package.json b/package.json index 42dd3ac3b..1678ffe4d 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "@braintree/sanitize-url": "6.0.4", "@electron/remote": "2.1.0", "@excalidraw/excalidraw": "0.16.1", + "@types/cls-hooked": "^4.3.8", "archiver": "6.0.1", "async-mutex": "0.4.0", "axios": "1.6.2", @@ -111,7 +112,9 @@ "yauzl": "2.10.0" }, "devDependencies": { + "@types/escape-html": "^1.0.4", "@types/express": "^4.17.21", + "@types/mime-types": "^2.1.4", "@types/node": "^20.11.19", "cross-env": "7.0.3", "electron": "25.9.8", diff --git a/spec/search/search.spec.js b/spec/search/search.spec.js index 97b607afd..14714cb6e 100644 --- a/spec/search/search.spec.js +++ b/spec/search/search.spec.js @@ -2,7 +2,7 @@ const searchService = require('../../src/services/search/services/search.js'); const BNote = require('../../src/becca/entities/bnote.js'); const BBranch = require('../../src/becca/entities/bbranch.js'); const SearchContext = require('../../src/services/search/search_context.js'); -const dateUtils = require('../../src/services/date_utils.js'); +const dateUtils = require('../../src/services/date_utils'); const becca = require('../../src/becca/becca.js'); const {NoteBuilder, findNoteByTitle, note} = require('./becca_mocking.js'); diff --git a/src/app.js b/src/app.js index 45451f0cc..a2e7b4f31 100644 --- a/src/app.js +++ b/src/app.js @@ -5,7 +5,7 @@ const cookieParser = require('cookie-parser'); const helmet = require('helmet'); const compression = require('compression'); const sessionParser = require('./routes/session_parser.js'); -const utils = require('./services/utils.js'); +const utils = require('./services/utils'); require('./services/handlers.js'); require('./becca/becca_loader.js'); diff --git a/src/becca/entities/abstract_becca_entity.js b/src/becca/entities/abstract_becca_entity.js index 9cd0dad76..b1c7feac9 100644 --- a/src/becca/entities/abstract_becca_entity.js +++ b/src/becca/entities/abstract_becca_entity.js @@ -1,10 +1,10 @@ "use strict"; -const utils = require('../../services/utils.js'); +const utils = require('../../services/utils'); const sql = require('../../services/sql.js'); const entityChangesService = require('../../services/entity_changes.js'); const eventService = require('../../services/events.js'); -const dateUtils = require('../../services/date_utils.js'); +const dateUtils = require('../../services/date_utils'); const cls = require('../../services/cls'); const log = require('../../services/log'); const protectedSessionService = require('../../services/protected_session.js'); diff --git a/src/becca/entities/battachment.js b/src/becca/entities/battachment.js index fedf70411..49a22ef0d 100644 --- a/src/becca/entities/battachment.js +++ b/src/becca/entities/battachment.js @@ -1,7 +1,7 @@ "use strict"; -const utils = require('../../services/utils.js'); -const dateUtils = require('../../services/date_utils.js'); +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 protectedSessionService = require('../../services/protected_session.js'); diff --git a/src/becca/entities/battribute.js b/src/becca/entities/battribute.js index 55e7db66d..3598b0671 100644 --- a/src/becca/entities/battribute.js +++ b/src/becca/entities/battribute.js @@ -3,7 +3,7 @@ const BNote = require('./bnote.js'); const AbstractBeccaEntity = require('./abstract_becca_entity.js'); const sql = require('../../services/sql.js'); -const dateUtils = require('../../services/date_utils.js'); +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/bbranch.js b/src/becca/entities/bbranch.js index 3ee42e510..b9a04af7f 100644 --- a/src/becca/entities/bbranch.js +++ b/src/becca/entities/bbranch.js @@ -2,8 +2,8 @@ const BNote = require('./bnote.js'); const AbstractBeccaEntity = require('./abstract_becca_entity.js'); -const dateUtils = require('../../services/date_utils.js'); -const utils = require('../../services/utils.js'); +const dateUtils = require('../../services/date_utils'); +const utils = require('../../services/utils'); const TaskContext = require('../../services/task_context.js'); const cls = require('../../services/cls'); const log = require('../../services/log'); diff --git a/src/becca/entities/betapi_token.js b/src/becca/entities/betapi_token.js index 0fded9e63..aedc1615f 100644 --- a/src/becca/entities/betapi_token.js +++ b/src/becca/entities/betapi_token.js @@ -1,6 +1,6 @@ "use strict"; -const dateUtils = require('../../services/date_utils.js'); +const dateUtils = require('../../services/date_utils'); const AbstractBeccaEntity = require('./abstract_becca_entity.js'); /** diff --git a/src/becca/entities/bnote.js b/src/becca/entities/bnote.js index b11a624d8..77776750d 100644 --- a/src/becca/entities/bnote.js +++ b/src/becca/entities/bnote.js @@ -3,8 +3,8 @@ const protectedSessionService = require('../../services/protected_session.js'); const log = require('../../services/log'); const sql = require('../../services/sql.js'); -const utils = require('../../services/utils.js'); -const dateUtils = require('../../services/date_utils.js'); +const utils = require('../../services/utils'); +const dateUtils = require('../../services/date_utils'); const AbstractBeccaEntity = require('./abstract_becca_entity.js'); const BRevision = require('./brevision.js'); const BAttachment = require('./battachment.js'); diff --git a/src/becca/entities/boption.js b/src/becca/entities/boption.js index 6c2c3edab..7fa121ccc 100644 --- a/src/becca/entities/boption.js +++ b/src/becca/entities/boption.js @@ -1,6 +1,6 @@ "use strict"; -const dateUtils = require('../../services/date_utils.js'); +const dateUtils = require('../../services/date_utils'); const AbstractBeccaEntity = require('./abstract_becca_entity.js'); /** diff --git a/src/becca/entities/brecent_note.js b/src/becca/entities/brecent_note.js index 300945b9a..8a840e2d0 100644 --- a/src/becca/entities/brecent_note.js +++ b/src/becca/entities/brecent_note.js @@ -1,6 +1,6 @@ "use strict"; -const dateUtils = require('../../services/date_utils.js'); +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 841ecaaee..e70726d1b 100644 --- a/src/becca/entities/brevision.js +++ b/src/becca/entities/brevision.js @@ -1,8 +1,8 @@ "use strict"; const protectedSessionService = require('../../services/protected_session.js'); -const utils = require('../../services/utils.js'); -const dateUtils = require('../../services/date_utils.js'); +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'); diff --git a/src/becca/similarity.js b/src/becca/similarity.js index 1a8534e0b..62c4a9cd1 100644 --- a/src/becca/similarity.js +++ b/src/becca/similarity.js @@ -1,7 +1,7 @@ const becca = require('./becca.js'); const log = require('../services/log'); const beccaService = require('./becca_service.js'); -const dateUtils = require('../services/date_utils.js'); +const dateUtils = require('../services/date_utils'); const {JSDOM} = require("jsdom"); const DEBUG = false; diff --git a/src/etapi/app_info.js b/src/etapi/app_info.js index f82287170..a58850e77 100644 --- a/src/etapi/app_info.js +++ b/src/etapi/app_info.js @@ -1,5 +1,5 @@ const appInfo = require('../services/app_info.js'); -const eu = require('./etapi_utils.js'); +const eu = require('./etapi_utils'); function register(router) { eu.route(router, 'get', '/etapi/app-info', (req, res, next) => { diff --git a/src/etapi/attachments.js b/src/etapi/attachments.js index 586da7a21..2c77210cc 100644 --- a/src/etapi/attachments.js +++ b/src/etapi/attachments.js @@ -1,8 +1,8 @@ const becca = require('../becca/becca.js'); -const eu = require('./etapi_utils.js'); +const eu = require('./etapi_utils'); const mappers = require('./mappers.js'); const v = require('./validators.js'); -const utils = require('../services/utils.js'); +const utils = require('../services/utils'); function register(router) { const ALLOWED_PROPERTIES_FOR_CREATE_ATTACHMENT = { diff --git a/src/etapi/attributes.js b/src/etapi/attributes.js index 131e85ae8..692b8c05e 100644 --- a/src/etapi/attributes.js +++ b/src/etapi/attributes.js @@ -1,5 +1,5 @@ const becca = require('../becca/becca.js'); -const eu = require('./etapi_utils.js'); +const eu = require('./etapi_utils'); const mappers = require('./mappers.js'); const attributeService = require('../services/attributes.js'); const v = require('./validators.js'); diff --git a/src/etapi/auth.js b/src/etapi/auth.js index 96e4e2fa0..d5cab7e15 100644 --- a/src/etapi/auth.js +++ b/src/etapi/auth.js @@ -1,5 +1,5 @@ const becca = require('../becca/becca.js'); -const eu = require('./etapi_utils.js'); +const eu = require('./etapi_utils'); const passwordEncryptionService = require('../services/encryption/password_encryption.js'); const etapiTokenService = require('../services/etapi_tokens.js'); diff --git a/src/etapi/backup.js b/src/etapi/backup.js index b9ca75204..2897c36b2 100644 --- a/src/etapi/backup.js +++ b/src/etapi/backup.js @@ -1,4 +1,4 @@ -const eu = require('./etapi_utils.js'); +const eu = require('./etapi_utils'); const backupService = require('../services/backup.js'); function register(router) { diff --git a/src/etapi/branches.js b/src/etapi/branches.js index 1d11144f9..19741b100 100644 --- a/src/etapi/branches.js +++ b/src/etapi/branches.js @@ -1,5 +1,5 @@ const becca = require('../becca/becca.js'); -const eu = require('./etapi_utils.js'); +const eu = require('./etapi_utils'); const mappers = require('./mappers.js'); const BBranch = require('../becca/entities/bbranch.js'); const entityChangesService = require('../services/entity_changes.js'); diff --git a/src/etapi/notes.js b/src/etapi/notes.js index 69c00e795..8acb3546e 100644 --- a/src/etapi/notes.js +++ b/src/etapi/notes.js @@ -1,6 +1,6 @@ const becca = require('../becca/becca.js'); -const utils = require('../services/utils.js'); -const eu = require('./etapi_utils.js'); +const utils = require('../services/utils'); +const eu = require('./etapi_utils'); const mappers = require('./mappers.js'); const noteService = require('../services/notes.js'); const TaskContext = require('../services/task_context.js'); diff --git a/src/etapi/special_notes.js b/src/etapi/special_notes.js index 64f97d07b..e6408b251 100644 --- a/src/etapi/special_notes.js +++ b/src/etapi/special_notes.js @@ -1,6 +1,6 @@ const specialNotesService = require('../services/special_notes.js'); const dateNotesService = require('../services/date_notes.js'); -const eu = require('./etapi_utils.js'); +const eu = require('./etapi_utils'); const mappers = require('./mappers.js'); const getDateInvalidError = date => new eu.EtapiError(400, "DATE_INVALID", `Date "${date}" is not valid.`); diff --git a/src/etapi/validators.js b/src/etapi/validators.js index 44128b812..f9ca0fa6a 100644 --- a/src/etapi/validators.js +++ b/src/etapi/validators.js @@ -1,5 +1,5 @@ const noteTypeService = require('../services/note_types.js'); -const dateUtils = require('../services/date_utils.js'); +const dateUtils = require('../services/date_utils'); function mandatory(obj) { if (obj === undefined ) { diff --git a/src/routes/api/autocomplete.js b/src/routes/api/autocomplete.js index 983576b8c..e28ccfcdb 100644 --- a/src/routes/api/autocomplete.js +++ b/src/routes/api/autocomplete.js @@ -3,7 +3,7 @@ const beccaService = require('../../becca/becca_service.js'); const searchService = require('../../services/search/services/search.js'); const log = require('../../services/log'); -const utils = require('../../services/utils.js'); +const utils = require('../../services/utils'); const cls = require('../../services/cls'); const becca = require('../../becca/becca.js'); diff --git a/src/routes/api/backend_log.js b/src/routes/api/backend_log.js index c941bdaeb..4a07a219e 100644 --- a/src/routes/api/backend_log.js +++ b/src/routes/api/backend_log.js @@ -1,7 +1,7 @@ "use strict"; const fs = require('fs'); -const dateUtils = require('../../services/date_utils.js'); +const dateUtils = require('../../services/date_utils'); const {LOG_DIR} = require('../../services/data_dir'); function getBackendLog() { diff --git a/src/routes/api/branches.js b/src/routes/api/branches.js index 3447b1e33..fc2830b76 100644 --- a/src/routes/api/branches.js +++ b/src/routes/api/branches.js @@ -1,7 +1,7 @@ "use strict"; const sql = require('../../services/sql.js'); -const utils = require('../../services/utils.js'); +const utils = require('../../services/utils'); const entityChangesService = require('../../services/entity_changes.js'); const treeService = require('../../services/tree.js'); const eraseService = require('../../services/erase.js'); diff --git a/src/routes/api/clipper.js b/src/routes/api/clipper.js index 052841cf1..3992bbeda 100644 --- a/src/routes/api/clipper.js +++ b/src/routes/api/clipper.js @@ -4,12 +4,12 @@ const attributeService = require('../../services/attributes.js'); const cloneService = require('../../services/cloning.js'); const noteService = require('../../services/notes.js'); const dateNoteService = require('../../services/date_notes.js'); -const dateUtils = require('../../services/date_utils.js'); +const dateUtils = require('../../services/date_utils'); const imageService = require('../../services/image.js'); const appInfo = require('../../services/app_info.js'); const ws = require('../../services/ws.js'); const log = require('../../services/log'); -const utils = require('../../services/utils.js'); +const utils = require('../../services/utils'); const path = require('path'); const htmlSanitizer = require('../../services/html_sanitizer.js'); const {formatAttrForSearch} = require('../../services/attribute_formatter.js'); diff --git a/src/routes/api/files.js b/src/routes/api/files.js index 60e9aba19..48ec7c5ea 100644 --- a/src/routes/api/files.js +++ b/src/routes/api/files.js @@ -1,7 +1,7 @@ "use strict"; const protectedSessionService = require('../../services/protected_session.js'); -const utils = require('../../services/utils.js'); +const utils = require('../../services/utils'); const log = require('../../services/log'); const noteService = require('../../services/notes.js'); const tmp = require('tmp'); diff --git a/src/routes/api/login.js b/src/routes/api/login.js index 9dbf058d4..7aed6955a 100644 --- a/src/routes/api/login.js +++ b/src/routes/api/login.js @@ -1,8 +1,8 @@ "use strict"; const options = require('../../services/options.js'); -const utils = require('../../services/utils.js'); -const dateUtils = require('../../services/date_utils.js'); +const utils = require('../../services/utils'); +const dateUtils = require('../../services/date_utils'); const instanceId = require('../../services/instance_id.js'); const passwordEncryptionService = require('../../services/encryption/password_encryption.js'); const protectedSessionService = require('../../services/protected_session.js'); diff --git a/src/routes/api/notes.js b/src/routes/api/notes.js index f2c49e325..0ce570892 100644 --- a/src/routes/api/notes.js +++ b/src/routes/api/notes.js @@ -4,7 +4,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 utils = require('../../services/utils.js'); +const utils = require('../../services/utils'); const log = require('../../services/log'); const TaskContext = require('../../services/task_context.js'); const becca = require('../../becca/becca.js'); diff --git a/src/routes/api/recent_notes.js b/src/routes/api/recent_notes.js index 2ba5c5020..80ccd9fea 100644 --- a/src/routes/api/recent_notes.js +++ b/src/routes/api/recent_notes.js @@ -2,7 +2,7 @@ const BRecentNote = require('../../becca/entities/brecent_note.js'); const sql = require('../../services/sql.js'); -const dateUtils = require('../../services/date_utils.js'); +const dateUtils = require('../../services/date_utils'); function addRecentNote(req) { new BRecentNote({ diff --git a/src/routes/api/revisions.js b/src/routes/api/revisions.js index 9985bbbc7..bf378d625 100644 --- a/src/routes/api/revisions.js +++ b/src/routes/api/revisions.js @@ -2,7 +2,7 @@ const beccaService = require('../../becca/becca_service.js'); const revisionService = require('../../services/revisions.js'); -const utils = require('../../services/utils.js'); +const utils = require('../../services/utils'); const sql = require('../../services/sql.js'); const cls = require('../../services/cls'); const path = require('path'); diff --git a/src/routes/api/sync.js b/src/routes/api/sync.js index 859de6d53..ecf22c060 100644 --- a/src/routes/api/sync.js +++ b/src/routes/api/sync.js @@ -9,7 +9,7 @@ const optionService = require('../../services/options.js'); const contentHashService = require('../../services/content_hash.js'); const log = require('../../services/log'); const syncOptions = require('../../services/sync_options.js'); -const utils = require('../../services/utils.js'); +const utils = require('../../services/utils'); const ws = require('../../services/ws.js'); async function testSync() { diff --git a/src/routes/index.js b/src/routes/index.js index 92de411c4..ef8f631a2 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -6,7 +6,7 @@ const config = require('../services/config.js'); const optionService = require('../services/options.js'); const log = require('../services/log'); const env = require('../services/env.js'); -const utils = require('../services/utils.js'); +const utils = require('../services/utils'); const protectedSessionService = require('../services/protected_session.js'); const packageJson = require('../../package.json'); const assetPath = require('../services/asset_path.js'); diff --git a/src/routes/login.js b/src/routes/login.js index 15a9a9684..2ea84a93b 100644 --- a/src/routes/login.js +++ b/src/routes/login.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require('../services/utils.js'); +const utils = require('../services/utils'); const optionService = require('../services/options.js'); const myScryptService = require('../services/encryption/my_scrypt.js'); const log = require('../services/log'); diff --git a/src/routes/routes.js b/src/routes/routes.js index d027c4fea..79914e3fd 100644 --- a/src/routes/routes.js +++ b/src/routes/routes.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require('../services/utils.js'); +const utils = require('../services/utils'); const multer = require('multer'); const log = require('../services/log'); const express = require('express'); diff --git a/src/routes/setup.js b/src/routes/setup.js index be14c2310..fe74c68a5 100644 --- a/src/routes/setup.js +++ b/src/routes/setup.js @@ -2,7 +2,7 @@ const sqlInit = require('../services/sql_init.js'); const setupService = require('../services/setup.js'); -const utils = require('../services/utils.js'); +const utils = require('../services/utils'); const assetPath = require('../services/asset_path.js'); const appPath = require('../services/app_path.js'); diff --git a/src/services/anonymization.js b/src/services/anonymization.js index 792d83c9c..0fc774895 100644 --- a/src/services/anonymization.js +++ b/src/services/anonymization.js @@ -1,7 +1,7 @@ const BUILTIN_ATTRIBUTES = require('./builtin_attributes.js'); const fs = require("fs-extra"); const dataDir = require('./data_dir'); -const dateUtils = require('./date_utils.js'); +const dateUtils = require('./date_utils'); const Database = require("better-sqlite3"); const sql = require('./sql.js'); const path = require("path"); diff --git a/src/services/app_icon.js b/src/services/app_icon.js index 784850508..3e7b48e24 100644 --- a/src/services/app_icon.js +++ b/src/services/app_icon.js @@ -6,7 +6,7 @@ const log = require('./log'); const os = require('os'); const fs = require('fs'); const config = require('./config.js'); -const utils = require('./utils.js'); +const utils = require('./utils'); const template = `[Desktop Entry] Type=Application diff --git a/src/services/auth.js b/src/services/auth.js index e16fa9ba5..8db06bc07 100644 --- a/src/services/auth.js +++ b/src/services/auth.js @@ -3,7 +3,7 @@ const etapiTokenService = require('./etapi_tokens.js'); const log = require('./log'); const sqlInit = require('./sql_init.js'); -const utils = require('./utils.js'); +const utils = require('./utils'); const passwordEncryptionService = require('./encryption/password_encryption.js'); const config = require('./config.js'); const passwordService = require('./encryption/password.js'); diff --git a/src/services/backend_script_api.js b/src/services/backend_script_api.js index 12732d6a0..2836018ec 100644 --- a/src/services/backend_script_api.js +++ b/src/services/backend_script_api.js @@ -1,7 +1,7 @@ const log = require('./log'); const noteService = require('./notes.js'); const sql = require('./sql.js'); -const utils = require('./utils.js'); +const utils = require('./utils'); const attributeService = require('./attributes.js'); const dateNoteService = require('./date_notes.js'); const treeService = require('./tree.js'); diff --git a/src/services/backup.js b/src/services/backup.js index 14106bada..c9ae0edba 100644 --- a/src/services/backup.js +++ b/src/services/backup.js @@ -1,6 +1,6 @@ "use strict"; -const dateUtils = require('./date_utils.js'); +const dateUtils = require('./date_utils'); const optionService = require('./options.js'); const fs = require('fs-extra'); const dataDir = require('./data_dir'); diff --git a/src/services/blob.js b/src/services/blob.js index 73f972a36..9b2cfa6dd 100644 --- a/src/services/blob.js +++ b/src/services/blob.js @@ -1,7 +1,7 @@ const becca = require('../becca/becca.js'); const NotFoundError = require('../errors/not_found_error.js'); const protectedSessionService = require('./protected_session.js'); -const utils = require('./utils.js'); +const utils = require('./utils'); function getBlobPojo(entityName, entityId) { const entity = becca.getEntity(entityName, entityId); diff --git a/src/services/bulk_actions.js b/src/services/bulk_actions.js index 38f649723..3536ed9a9 100644 --- a/src/services/bulk_actions.js +++ b/src/services/bulk_actions.js @@ -3,7 +3,7 @@ const revisionService = require('./revisions.js'); const becca = require('../becca/becca.js'); const cloningService = require('./cloning.js'); const branchService = require('./branches.js'); -const utils = require('./utils.js'); +const utils = require('./utils'); const eraseService = require("./erase.js"); const ACTION_HANDLERS = { diff --git a/src/services/consistency_checks.js b/src/services/consistency_checks.js index 873212b5b..e7b11d290 100644 --- a/src/services/consistency_checks.js +++ b/src/services/consistency_checks.js @@ -11,7 +11,7 @@ const optionsService = require('./options.js'); const BBranch = require('../becca/entities/bbranch.js'); const revisionService = require('./revisions.js'); const becca = require('../becca/becca.js'); -const utils = require('../services/utils.js'); +const utils = require('../services/utils'); const eraseService = require('../services/erase.js'); const {sanitizeAttributeName} = require('./sanitize_attribute_name.js'); const noteTypes = require('../services/note_types.js').getNoteTypeNames(); diff --git a/src/services/content_hash.js b/src/services/content_hash.js index 0251e0cd6..8e01c067f 100644 --- a/src/services/content_hash.js +++ b/src/services/content_hash.js @@ -1,7 +1,7 @@ "use strict"; const sql = require('./sql.js'); -const utils = require('./utils.js'); +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 69e2a06a0..122082f57 100644 --- a/src/services/date_notes.js +++ b/src/services/date_notes.js @@ -2,7 +2,7 @@ const noteService = require('./notes.js'); const attributeService = require('./attributes.js'); -const dateUtils = require('./date_utils.js'); +const dateUtils = require('./date_utils'); const sql = require('./sql.js'); const protectedSessionService = require('./protected_session.js'); const searchService = require('../services/search/services/search.js'); diff --git a/src/services/encryption/password.js b/src/services/encryption/password.js index 563e86c02..f9665b585 100644 --- a/src/services/encryption/password.js +++ b/src/services/encryption/password.js @@ -3,7 +3,7 @@ const sql = require('../sql.js'); const optionService = require('../options.js'); const myScryptService = require('./my_scrypt.js'); -const utils = require('../utils.js'); +const utils = require('../utils'); const passwordEncryptionService = require('./password_encryption.js'); function isPasswordSet() { diff --git a/src/services/encryption/password_encryption.js b/src/services/encryption/password_encryption.js index 336be8f2f..06ada7d98 100644 --- a/src/services/encryption/password_encryption.js +++ b/src/services/encryption/password_encryption.js @@ -1,6 +1,6 @@ const optionService = require('../options.js'); const myScryptService = require('./my_scrypt.js'); -const utils = require('../utils.js'); +const utils = require('../utils'); const dataEncryptionService = require('./data_encryption.js'); function verifyPassword(password) { diff --git a/src/services/entity_changes.js b/src/services/entity_changes.js index f7dd5f4d2..520c29718 100644 --- a/src/services/entity_changes.js +++ b/src/services/entity_changes.js @@ -1,8 +1,8 @@ const sql = require('./sql.js'); -const dateUtils = require('./date_utils.js'); +const dateUtils = require('./date_utils'); const log = require('./log'); const cls = require('./cls'); -const utils = require('./utils.js'); +const utils = require('./utils'); const instanceId = require('./instance_id.js'); const becca = require('../becca/becca.js'); const blobService = require('../services/blob.js'); diff --git a/src/services/erase.js b/src/services/erase.js index 9951a83c3..dc43fc088 100644 --- a/src/services/erase.js +++ b/src/services/erase.js @@ -3,7 +3,7 @@ const revisionService = require("./revisions.js"); const log = require("./log.ts"); const entityChangesService = require("./entity_changes.js"); const optionService = require("./options.js"); -const dateUtils = require("./date_utils.js"); +const dateUtils = require("./date_utils"); const sqlInit = require("./sql_init.js"); const cls = require("./cls"); diff --git a/src/services/etapi_tokens.js b/src/services/etapi_tokens.js index 4033b8016..552a31ade 100644 --- a/src/services/etapi_tokens.js +++ b/src/services/etapi_tokens.js @@ -1,5 +1,5 @@ const becca = require('../becca/becca.js'); -const utils = require('./utils.js'); +const utils = require('./utils'); const BEtapiToken = require('../becca/entities/betapi_token.js'); const crypto = require("crypto"); diff --git a/src/services/export/opml.js b/src/services/export/opml.js index 976fb5b24..b58bb63c1 100644 --- a/src/services/export/opml.js +++ b/src/services/export/opml.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require('../utils.js'); +const utils = require('../utils'); const becca = require('../../becca/becca.js'); function exportToOpml(taskContext, branch, version, res) { diff --git a/src/services/export/single.js b/src/services/export/single.js index a3bc03335..5fbe4ee44 100644 --- a/src/services/export/single.js +++ b/src/services/export/single.js @@ -2,7 +2,7 @@ const mimeTypes = require('mime-types'); const html = require('html'); -const utils = require('../utils.js'); +const utils = require('../utils'); const mdService = require('./md.js'); const becca = require('../../becca/becca.js'); diff --git a/src/services/export/zip.js b/src/services/export/zip.js index 153b05f58..5e2482013 100644 --- a/src/services/export/zip.js +++ b/src/services/export/zip.js @@ -1,12 +1,12 @@ "use strict"; const html = require('html'); -const dateUtils = require('../date_utils.js'); +const dateUtils = require('../date_utils'); const path = require('path'); const mimeTypes = require('mime-types'); const mdService = require('./md.js'); const packageInfo = require('../../../package.json'); -const utils = require('../utils.js'); +const utils = require('../utils'); const protectedSessionService = require('../protected_session.js'); const sanitize = require("sanitize-filename"); const fs = require("fs"); diff --git a/src/services/import/enex.js b/src/services/import/enex.js index 50f0c5549..72f9554ae 100644 --- a/src/services/import/enex.js +++ b/src/services/import/enex.js @@ -2,7 +2,7 @@ const sax = require("sax"); const stream = require('stream'); const {Throttle} = require('stream-throttle'); const log = require('../log'); -const utils = require('../utils.js'); +const utils = require('../utils'); const sql = require('../sql.js'); const noteService = require('../notes.js'); const imageService = require('../image.js'); diff --git a/src/services/import/markdown.js b/src/services/import/markdown.js index 90b6d1f43..7cdd6b3d2 100644 --- a/src/services/import/markdown.js +++ b/src/services/import/markdown.js @@ -2,7 +2,7 @@ const marked = require("marked"); const htmlSanitizer = require('../html_sanitizer.js'); -const importUtils = require('./utils.js'); +const importUtils = require('./utils'); function renderToHtml(content, title) { const html = marked.parse(content, { diff --git a/src/services/import/single.js b/src/services/import/single.js index 7d3ea164f..59686207f 100644 --- a/src/services/import/single.js +++ b/src/services/import/single.js @@ -5,8 +5,8 @@ const imageService = require('../../services/image.js'); const protectedSessionService = require('../protected_session.js'); const markdownService = require('./markdown.js'); const mimeService = require('./mime.js'); -const utils = require('../../services/utils.js'); -const importUtils = require('./utils.js'); +const utils = require('../../services/utils'); +const importUtils = require('./utils'); const htmlSanitizer = require('../html_sanitizer.js'); function importSingleFile(taskContext, file, parentNote) { diff --git a/src/services/import/zip.js b/src/services/import/zip.js index 0df5fff4c..fabcdd58d 100644 --- a/src/services/import/zip.js +++ b/src/services/import/zip.js @@ -1,7 +1,7 @@ "use strict"; const BAttribute = require('../../becca/entities/battribute.js'); -const utils = require('../../services/utils.js'); +const utils = require('../../services/utils'); const log = require('../../services/log'); const noteService = require('../../services/notes.js'); const attributeService = require('../../services/attributes.js'); diff --git a/src/services/instance_id.js b/src/services/instance_id.js index 49f0a4209..4ee187b01 100644 --- a/src/services/instance_id.js +++ b/src/services/instance_id.js @@ -1,4 +1,4 @@ -const utils = require('./utils.js'); +const utils = require('./utils'); const instanceId = utils.randomString(12); diff --git a/src/services/keyboard_actions.js b/src/services/keyboard_actions.js index 697d1f4c7..df44994ff 100644 --- a/src/services/keyboard_actions.js +++ b/src/services/keyboard_actions.js @@ -2,7 +2,7 @@ const optionService = require('./options.js'); const log = require('./log'); -const utils = require('./utils.js'); +const utils = require('./utils'); const isMac = process.platform === "darwin"; const isElectron = utils.isElectron(); diff --git a/src/services/migration.js b/src/services/migration.js index b91a24069..17aa5e222 100644 --- a/src/services/migration.js +++ b/src/services/migration.js @@ -2,7 +2,7 @@ const backupService = require('./backup.js'); const sql = require('./sql.js'); const fs = require('fs-extra'); const log = require('./log'); -const utils = require('./utils.js'); +const utils = require('./utils'); const resourceDir = require('./resource_dir.js'); const appInfo = require('./app_info.js'); const cls = require('./cls'); diff --git a/src/services/notes.js b/src/services/notes.js index 15b54abdc..77ed66984 100644 --- a/src/services/notes.js +++ b/src/services/notes.js @@ -1,12 +1,12 @@ const sql = require('./sql.js'); const optionService = require('./options.js'); -const dateUtils = require('./date_utils.js'); +const dateUtils = require('./date_utils'); const entityChangesService = require('./entity_changes.js'); const eventService = require('./events.js'); const cls = require('../services/cls'); const protectedSessionService = require('../services/protected_session.js'); const log = require('../services/log'); -const utils = require('../services/utils.js'); +const utils = require('../services/utils'); const revisionService = require('./revisions.js'); const request = require('./request.js'); const path = require('path'); diff --git a/src/services/options_init.js b/src/services/options_init.js index 46dca53e2..8da0de4bf 100644 --- a/src/services/options_init.js +++ b/src/services/options_init.js @@ -1,8 +1,8 @@ const optionService = require('./options.js'); const appInfo = require('./app_info.js'); -const utils = require('./utils.js'); +const utils = require('./utils'); const log = require('./log'); -const dateUtils = require('./date_utils.js'); +const dateUtils = require('./date_utils'); const keyboardActions = require('./keyboard_actions.js'); function initDocumentOptions() { diff --git a/src/services/port.js b/src/services/port.js index fe31eec35..b34490648 100644 --- a/src/services/port.js +++ b/src/services/port.js @@ -1,5 +1,5 @@ const config = require('./config.js'); -const utils = require('./utils.js'); +const utils = require('./utils'); const env = require('./env.js'); const dataDir = require('./data_dir'); diff --git a/src/services/request.js b/src/services/request.js index 158495779..88771439b 100644 --- a/src/services/request.js +++ b/src/services/request.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require('./utils.js'); +const utils = require('./utils'); const log = require('./log'); const url = require('url'); const syncOptions = require('./sync_options.js'); diff --git a/src/services/revisions.js b/src/services/revisions.js index 5735ceb79..084f941f9 100644 --- a/src/services/revisions.js +++ b/src/services/revisions.js @@ -3,7 +3,7 @@ const log = require('./log'); const sql = require('./sql.js'); const protectedSessionService = require('./protected_session.js'); -const dateUtils = require('./date_utils.js'); +const dateUtils = require('./date_utils'); /** * @param {BNote} note diff --git a/src/services/script_context.js b/src/services/script_context.js index 67400d630..d4b83bc37 100644 --- a/src/services/script_context.js +++ b/src/services/script_context.js @@ -1,4 +1,4 @@ -const utils = require('./utils.js'); +const utils = require('./utils'); const BackendScriptApi = require('./backend_script_api.js'); function ScriptContext(allNotes, apiParams = {}) { diff --git a/src/services/search/expressions/note_content_fulltext.js b/src/services/search/expressions/note_content_fulltext.js index f9eac3699..48ab61a82 100644 --- a/src/services/search/expressions/note_content_fulltext.js +++ b/src/services/search/expressions/note_content_fulltext.js @@ -6,7 +6,7 @@ const log = require('../../log'); const becca = require('../../../becca/becca.js'); const protectedSessionService = require('../../protected_session.js'); const striptags = require('striptags'); -const utils = require('../../utils.js'); +const utils = require('../../utils'); const ALLOWED_OPERATORS = ['=', '!=', '*=*', '*=', '=*', '%=']; diff --git a/src/services/search/expressions/note_flat_text.js b/src/services/search/expressions/note_flat_text.js index 11cc466ec..72f06cb98 100644 --- a/src/services/search/expressions/note_flat_text.js +++ b/src/services/search/expressions/note_flat_text.js @@ -3,7 +3,7 @@ const Expression = require('./expression.js'); const NoteSet = require('../note_set.js'); const becca = require('../../../becca/becca.js'); -const utils = require('../../utils.js'); +const utils = require('../../utils'); class NoteFlatTextExp extends Expression { constructor(tokens) { diff --git a/src/services/search/services/parse.js b/src/services/search/services/parse.js index b31ea265d..84c717f6e 100644 --- a/src/services/search/services/parse.js +++ b/src/services/search/services/parse.js @@ -17,7 +17,7 @@ const OrderByAndLimitExp = require('../expressions/order_by_and_limit.js'); const AncestorExp = require('../expressions/ancestor.js'); const buildComparator = require('./build_comparator.js'); const ValueExtractor = require('../value_extractor.js'); -const utils = require('../../utils.js'); +const utils = require('../../utils'); const TrueExp = require('../expressions/true.js'); const IsHiddenExp = require('../expressions/is_hidden.js'); diff --git a/src/services/search/services/search.js b/src/services/search/services/search.js index ac794e7d0..496d420e0 100644 --- a/src/services/search/services/search.js +++ b/src/services/search/services/search.js @@ -8,7 +8,7 @@ const SearchResult = require('../search_result.js'); const SearchContext = require('../search_context.js'); const becca = require('../../../becca/becca.js'); const beccaService = require('../../../becca/becca_service.js'); -const utils = require('../../utils.js'); +const utils = require('../../utils'); const log = require('../../log'); const hoistedNoteService = require('../../hoisted_note.js'); diff --git a/src/services/setup.js b/src/services/setup.js index 1bebad29a..58736f5b8 100644 --- a/src/services/setup.js +++ b/src/services/setup.js @@ -5,7 +5,7 @@ const optionService = require('./options.js'); const syncOptions = require('./sync_options.js'); const request = require('./request.js'); const appInfo = require('./app_info.js'); -const utils = require('./utils.js'); +const utils = require('./utils'); const becca = require('../becca/becca.js'); async function hasSyncServerSchemaAndSeed() { diff --git a/src/services/special_notes.js b/src/services/special_notes.js index 8d9c2baa1..e57059987 100644 --- a/src/services/special_notes.js +++ b/src/services/special_notes.js @@ -2,7 +2,7 @@ const attributeService = require('./attributes.js'); const dateNoteService = require('./date_notes.js'); const becca = require('../becca/becca.js'); const noteService = require('./notes.js'); -const dateUtils = require('./date_utils.js'); +const dateUtils = require('./date_utils'); const log = require('./log'); const hoistedNoteService = require('./hoisted_note.js'); const searchService = require('./search/services/search.js'); diff --git a/src/services/sql_init.js b/src/services/sql_init.js index 2a9ffe129..298542a7b 100644 --- a/src/services/sql_init.js +++ b/src/services/sql_init.js @@ -2,7 +2,7 @@ const log = require('./log'); const fs = require('fs'); const resourceDir = require('./resource_dir.js'); const sql = require('./sql.js'); -const utils = require('./utils.js'); +const utils = require('./utils'); const optionService = require('./options.js'); const port = require('./port.js'); const BOption = require('../becca/entities/boption.js'); diff --git a/src/services/sync.js b/src/services/sync.js index e30181930..e31eb3654 100644 --- a/src/services/sync.js +++ b/src/services/sync.js @@ -3,9 +3,9 @@ const log = require('./log'); const sql = require('./sql.js'); const optionService = require('./options.js'); -const utils = require('./utils.js'); +const utils = require('./utils'); const instanceId = require('./instance_id.js'); -const dateUtils = require('./date_utils.js'); +const dateUtils = require('./date_utils'); const syncUpdateService = require('./sync_update.js'); const contentHashService = require('./content_hash.js'); const appInfo = require('./app_info.js'); diff --git a/src/services/utils.js b/src/services/utils.ts similarity index 72% rename from src/services/utils.js rename to src/services/utils.ts index 2e99c6ef0..d31e73482 100644 --- a/src/services/utils.js +++ b/src/services/utils.ts @@ -1,18 +1,18 @@ "use strict"; -const crypto = require('crypto'); +import crypto = require('crypto'); const randtoken = require('rand-token').generator({source: 'crypto'}); -const unescape = require('unescape'); -const escape = require('escape-html'); -const sanitize = require("sanitize-filename"); -const mimeTypes = require('mime-types'); -const path = require('path'); +import unescape = require('unescape'); +import escape = require('escape-html'); +import sanitize = require("sanitize-filename"); +import mimeTypes = require('mime-types'); +import path = require('path'); function newEntityId() { return randomString(12); } -function randomString(length) { +function randomString(length: number) { return randtoken.generate(length); } @@ -20,11 +20,11 @@ function randomSecureToken(bytes = 32) { return crypto.randomBytes(bytes).toString('base64'); } -function md5(content) { +function md5(content: crypto.BinaryLike) { return crypto.createHash('md5').update(content).digest('hex'); } -function hashedBlobId(content) { +function hashedBlobId(content: string) { if (content === null || content === undefined) { content = ""; } @@ -41,19 +41,16 @@ function hashedBlobId(content) { return kindaBase62Hash.substr(0, 20); } -function toBase64(plainText) { +function toBase64(plainText: string) { return Buffer.from(plainText).toString('base64'); } -/** - * @returns {Buffer} - */ -function fromBase64(encodedText) { +function fromBase64(encodedText: string) { return Buffer.from(encodedText, 'base64'); } -function hmac(secret, value) { - const hmac = crypto.createHmac('sha256', Buffer.from(secret.toString(), 'ASCII')); +function hmac(secret: any, value: any) { + const hmac = crypto.createHmac('sha256', Buffer.from(secret.toString(), 'ascii')); hmac.update(value.toString()); return hmac.digest('base64'); } @@ -62,30 +59,30 @@ function isElectron() { return !!process.versions['electron']; } -function hash(text) { +function hash(text: string) { text = text.normalize(); return crypto.createHash('sha1').update(text).digest('base64'); } -function isEmptyOrWhitespace(str) { +function isEmptyOrWhitespace(str: string) { return str === null || str.match(/^ *$/) !== null; } -function sanitizeSqlIdentifier(str) { +function sanitizeSqlIdentifier(str: string) { return str.replace(/[^A-Za-z0-9_]/g, ""); } -function escapeHtml(str) { +function escapeHtml(str: string) { return escape(str); } -function unescapeHtml(str) { +function unescapeHtml(str: string) { return unescape(str); } -function toObject(array, fn) { - const obj = {}; +function toObject(array: T[], fn: (item: T) => [K, V]): Record { + const obj: Record = {} as Record; // FIXME: unsafe? for (const item of array) { const ret = fn(item); @@ -96,12 +93,12 @@ function toObject(array, fn) { return obj; } -function stripTags(text) { +function stripTags(text: string) { return text.replace(/<(?:.|\n)*?>/gm, ''); } -function union(a, b) { - const obj = {}; +function union(a: T[], b: T[]): T[] { + const obj: Record = {} as Record; // FIXME: unsafe? for (let i = a.length-1; i >= 0; i--) { obj[a[i]] = a[i]; @@ -111,7 +108,7 @@ function union(a, b) { obj[b[i]] = b[i]; } - const res = []; + const res: T[] = []; for (const k in obj) { if (obj.hasOwnProperty(k)) { // <-- optional @@ -122,7 +119,7 @@ function union(a, b) { return res; } -function escapeRegExp(str) { +function escapeRegExp(str: string) { return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); } @@ -135,7 +132,7 @@ function crash() { } } -function sanitizeFilenameForHeader(filename) { +function sanitizeFilenameForHeader(filename: string) { let sanitizedFilename = sanitize(filename); if (sanitizedFilename.trim().length === 0) { @@ -145,7 +142,7 @@ function sanitizeFilenameForHeader(filename) { return encodeURIComponent(sanitizedFilename); } -function getContentDisposition(filename) { +function getContentDisposition(filename: string) { const sanitizedFilename = sanitizeFilenameForHeader(filename); return `file; filename="${sanitizedFilename}"; filename*=UTF-8''${sanitizedFilename}`; @@ -159,24 +156,24 @@ const STRING_MIME_TYPES = [ "image/svg+xml" ]; -function isStringNote(type, mime) { +function isStringNote(type: string, mime: string) { // render and book are string note in the sense that they are expected to contain empty string return ["text", "code", "relationMap", "search", "render", "book", "mermaid", "canvas"].includes(type) || mime.startsWith('text/') || STRING_MIME_TYPES.includes(mime); } -function quoteRegex(url) { +function quoteRegex(url: string) { return url.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); } -function replaceAll(string, replaceWhat, replaceWith) { +function replaceAll(string: string, replaceWhat: string, replaceWith: string) { const quotedReplaceWhat = quoteRegex(replaceWhat); return string.replace(new RegExp(quotedReplaceWhat, "g"), replaceWith); } -function formatDownloadTitle(fileName, type, mime) { +function formatDownloadTitle(fileName: string, type: string, mime: string) { if (!fileName) { fileName = "untitled"; } @@ -218,7 +215,7 @@ function formatDownloadTitle(fileName, type, mime) { } } -function removeTextFileExtension(filePath) { +function removeTextFileExtension(filePath: string) { const extension = path.extname(filePath).toLowerCase(); if (extension === '.md' || extension === '.markdown' || extension === '.html') { @@ -229,7 +226,7 @@ function removeTextFileExtension(filePath) { } } -function getNoteTitle(filePath, replaceUnderscoresWithSpaces, noteMeta) { +function getNoteTitle(filePath: string, replaceUnderscoresWithSpaces: boolean, noteMeta: { title: string }) { if (noteMeta) { return noteMeta.title; } else { @@ -241,7 +238,7 @@ function getNoteTitle(filePath, replaceUnderscoresWithSpaces, noteMeta) { } } -function timeLimit(promise, limitMs, errorMessage) { +function timeLimit(promise: Promise, limitMs: number, errorMessage: string): Promise { if (!promise || !promise.then) { // it's not actually a promise return promise; } @@ -267,23 +264,28 @@ function timeLimit(promise, limitMs, errorMessage) { }); } -function deferred() { - return (() => { - let resolve, reject; +interface DeferredPromise extends Promise { + resolve: (value: T | PromiseLike) => void, + reject: (reason?: any) => void +} - let promise = new Promise((res, rej) => { +function deferred(): DeferredPromise { + return (() => { + let resolve!: (value: T | PromiseLike) => void; + let reject!: (reason?: any) => void; + + let promise = new Promise((res, rej) => { resolve = res; reject = rej; - }); + }) as DeferredPromise; promise.resolve = resolve; promise.reject = reject; - - return promise; + return promise as DeferredPromise; })(); } -function removeDiacritic(str) { +function removeDiacritic(str: string) { if (!str) { return ""; } @@ -291,12 +293,12 @@ function removeDiacritic(str) { return str.normalize("NFD").replace(/\p{Diacritic}/gu, ""); } -function normalize(str) { +function normalize(str: string) { return removeDiacritic(str).toLowerCase(); } -function toMap(list, key) { - const map = {}; +function toMap>(list: T[], key: keyof T): Record { + const map: Record = {}; for (const el of list) { map[el[key]] = el; @@ -305,7 +307,7 @@ function toMap(list, key) { return map; } -function isString(x) { +function isString(x: any) { return Object.prototype.toString.call(x) === "[object String]"; } diff --git a/src/services/ws.js b/src/services/ws.js index 99880112d..8c6b64a3c 100644 --- a/src/services/ws.js +++ b/src/services/ws.js @@ -1,5 +1,5 @@ const WebSocket = require('ws'); -const utils = require('./utils.js'); +const utils = require('./utils'); const log = require('./log'); const sql = require('./sql.js'); const cls = require('./cls'); diff --git a/src/share/routes.js b/src/share/routes.js index 5db054011..9e1eb5d17 100644 --- a/src/share/routes.js +++ b/src/share/routes.js @@ -236,7 +236,7 @@ function register(router) { addNoIndexHeader(note, res); - const utils = require('../services/utils.js'); + const utils = require('../services/utils'); const filename = utils.formatDownloadTitle(note.title, note.type, note.mime); @@ -304,7 +304,7 @@ function register(router) { addNoIndexHeader(attachment.note, res); - const utils = require('../services/utils.js'); + const utils = require('../services/utils'); const filename = utils.formatDownloadTitle(attachment.title, null, attachment.mime); diff --git a/src/share/shaca/entities/sattachment.js b/src/share/shaca/entities/sattachment.js index 46504ba14..0c60b1332 100644 --- a/src/share/shaca/entities/sattachment.js +++ b/src/share/shaca/entities/sattachment.js @@ -1,7 +1,7 @@ "use strict"; const sql = require('../../sql.js'); -const utils = require('../../../services/utils.js'); +const utils = require('../../../services/utils'); const AbstractShacaEntity = require('./abstract_shaca_entity.js'); class SAttachment extends AbstractShacaEntity { diff --git a/src/share/shaca/entities/snote.js b/src/share/shaca/entities/snote.js index 167f238d0..99fd61efe 100644 --- a/src/share/shaca/entities/snote.js +++ b/src/share/shaca/entities/snote.js @@ -1,7 +1,7 @@ "use strict"; const sql = require('../../sql.js'); -const utils = require('../../../services/utils.js'); +const utils = require('../../../services/utils'); const AbstractShacaEntity = require('./abstract_shaca_entity.js'); const escape = require('escape-html'); diff --git a/src/types/unescape.d.ts b/src/types/unescape.d.ts new file mode 100644 index 000000000..465ebd9e9 --- /dev/null +++ b/src/types/unescape.d.ts @@ -0,0 +1,4 @@ +declare module 'unescape' { + function unescape(str: string, type?: string): string; + export = unescape; +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 7f94100dc..0d6d3364c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,8 @@ "sourceMap": true, "outDir": "./build", "strict": true, - "noImplicitAny": true + "noImplicitAny": true, + "lib": ["ES2021"] }, "include": [ "./src/**/*.js",