server-ts: utils.js -> utils.ts

This commit is contained in:
Elian Doran 2024-02-16 21:38:09 +02:00
parent 28735fa16a
commit 7a9365457a
No known key found for this signature in database
84 changed files with 198 additions and 145 deletions

View File

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

43
package-lock.json generated
View File

@ -13,6 +13,7 @@
"@braintree/sanitize-url": "6.0.4", "@braintree/sanitize-url": "6.0.4",
"@electron/remote": "2.1.0", "@electron/remote": "2.1.0",
"@excalidraw/excalidraw": "0.16.1", "@excalidraw/excalidraw": "0.16.1",
"@types/cls-hooked": "^4.3.8",
"archiver": "6.0.1", "archiver": "6.0.1",
"async-mutex": "0.4.0", "async-mutex": "0.4.0",
"axios": "1.6.2", "axios": "1.6.2",
@ -88,7 +89,9 @@
"trilium": "src/www.js" "trilium": "src/www.js"
}, },
"devDependencies": { "devDependencies": {
"@types/escape-html": "^1.0.4",
"@types/express": "^4.17.21", "@types/express": "^4.17.21",
"@types/mime-types": "^2.1.4",
"@types/node": "^20.11.19", "@types/node": "^20.11.19",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"electron": "25.9.8", "electron": "25.9.8",
@ -1302,6 +1305,14 @@
"@types/responselike": "*" "@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": { "node_modules/@types/connect": {
"version": "3.4.38", "version": "3.4.38",
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
@ -1337,6 +1348,12 @@
"@types/ms": "*" "@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": { "node_modules/@types/eslint": {
"version": "8.4.1", "version": "8.4.1",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz",
@ -1473,6 +1490,12 @@
"integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
"dev": true "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": { "node_modules/@types/minimatch": {
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
@ -15915,6 +15938,14 @@
"@types/responselike": "*" "@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": { "@types/connect": {
"version": "3.4.38", "version": "3.4.38",
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
@ -15950,6 +15981,12 @@
"@types/ms": "*" "@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": { "@types/eslint": {
"version": "8.4.1", "version": "8.4.1",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz",
@ -16086,6 +16123,12 @@
"integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
"dev": true "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": { "@types/minimatch": {
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",

View File

@ -39,6 +39,7 @@
"@braintree/sanitize-url": "6.0.4", "@braintree/sanitize-url": "6.0.4",
"@electron/remote": "2.1.0", "@electron/remote": "2.1.0",
"@excalidraw/excalidraw": "0.16.1", "@excalidraw/excalidraw": "0.16.1",
"@types/cls-hooked": "^4.3.8",
"archiver": "6.0.1", "archiver": "6.0.1",
"async-mutex": "0.4.0", "async-mutex": "0.4.0",
"axios": "1.6.2", "axios": "1.6.2",
@ -111,7 +112,9 @@
"yauzl": "2.10.0" "yauzl": "2.10.0"
}, },
"devDependencies": { "devDependencies": {
"@types/escape-html": "^1.0.4",
"@types/express": "^4.17.21", "@types/express": "^4.17.21",
"@types/mime-types": "^2.1.4",
"@types/node": "^20.11.19", "@types/node": "^20.11.19",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"electron": "25.9.8", "electron": "25.9.8",

View File

@ -2,7 +2,7 @@ const searchService = require('../../src/services/search/services/search.js');
const BNote = require('../../src/becca/entities/bnote.js'); const BNote = require('../../src/becca/entities/bnote.js');
const BBranch = require('../../src/becca/entities/bbranch.js'); const BBranch = require('../../src/becca/entities/bbranch.js');
const SearchContext = require('../../src/services/search/search_context.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 becca = require('../../src/becca/becca.js');
const {NoteBuilder, findNoteByTitle, note} = require('./becca_mocking.js'); const {NoteBuilder, findNoteByTitle, note} = require('./becca_mocking.js');

View File

@ -5,7 +5,7 @@ const cookieParser = require('cookie-parser');
const helmet = require('helmet'); const helmet = require('helmet');
const compression = require('compression'); const compression = require('compression');
const sessionParser = require('./routes/session_parser.js'); const sessionParser = require('./routes/session_parser.js');
const utils = require('./services/utils.js'); const utils = require('./services/utils');
require('./services/handlers.js'); require('./services/handlers.js');
require('./becca/becca_loader.js'); require('./becca/becca_loader.js');

View File

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

View File

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

View File

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

View File

@ -2,8 +2,8 @@
const BNote = require('./bnote.js'); const BNote = require('./bnote.js');
const AbstractBeccaEntity = require('./abstract_becca_entity.js'); const AbstractBeccaEntity = require('./abstract_becca_entity.js');
const dateUtils = require('../../services/date_utils.js'); const dateUtils = require('../../services/date_utils');
const utils = require('../../services/utils.js'); const utils = require('../../services/utils');
const TaskContext = require('../../services/task_context.js'); const TaskContext = require('../../services/task_context.js');
const cls = require('../../services/cls'); const cls = require('../../services/cls');
const log = require('../../services/log'); const log = require('../../services/log');

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const dateUtils = require('../../services/date_utils.js'); const dateUtils = require('../../services/date_utils');
const AbstractBeccaEntity = require('./abstract_becca_entity.js'); const AbstractBeccaEntity = require('./abstract_becca_entity.js');
/** /**

View File

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

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const dateUtils = require('../../services/date_utils.js'); const dateUtils = require('../../services/date_utils');
const AbstractBeccaEntity = require('./abstract_becca_entity.js'); const AbstractBeccaEntity = require('./abstract_becca_entity.js');
/** /**

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const dateUtils = require('../../services/date_utils.js'); const dateUtils = require('../../services/date_utils');
const AbstractBeccaEntity = require('./abstract_becca_entity.js'); const AbstractBeccaEntity = require('./abstract_becca_entity.js');
/** /**

View File

@ -1,8 +1,8 @@
"use strict"; "use strict";
const protectedSessionService = require('../../services/protected_session.js'); const protectedSessionService = require('../../services/protected_session.js');
const utils = require('../../services/utils.js'); const utils = require('../../services/utils');
const dateUtils = require('../../services/date_utils.js'); const dateUtils = require('../../services/date_utils');
const becca = require('../becca.js'); const becca = require('../becca.js');
const AbstractBeccaEntity = require('./abstract_becca_entity.js'); const AbstractBeccaEntity = require('./abstract_becca_entity.js');
const sql = require('../../services/sql.js'); const sql = require('../../services/sql.js');

View File

@ -1,7 +1,7 @@
const becca = require('./becca.js'); const becca = require('./becca.js');
const log = require('../services/log'); const log = require('../services/log');
const beccaService = require('./becca_service.js'); const beccaService = require('./becca_service.js');
const dateUtils = require('../services/date_utils.js'); const dateUtils = require('../services/date_utils');
const {JSDOM} = require("jsdom"); const {JSDOM} = require("jsdom");
const DEBUG = false; const DEBUG = false;

View File

@ -1,5 +1,5 @@
const appInfo = require('../services/app_info.js'); const appInfo = require('../services/app_info.js');
const eu = require('./etapi_utils.js'); const eu = require('./etapi_utils');
function register(router) { function register(router) {
eu.route(router, 'get', '/etapi/app-info', (req, res, next) => { eu.route(router, 'get', '/etapi/app-info', (req, res, next) => {

View File

@ -1,8 +1,8 @@
const becca = require('../becca/becca.js'); const becca = require('../becca/becca.js');
const eu = require('./etapi_utils.js'); const eu = require('./etapi_utils');
const mappers = require('./mappers.js'); const mappers = require('./mappers.js');
const v = require('./validators.js'); const v = require('./validators.js');
const utils = require('../services/utils.js'); const utils = require('../services/utils');
function register(router) { function register(router) {
const ALLOWED_PROPERTIES_FOR_CREATE_ATTACHMENT = { const ALLOWED_PROPERTIES_FOR_CREATE_ATTACHMENT = {

View File

@ -1,5 +1,5 @@
const becca = require('../becca/becca.js'); const becca = require('../becca/becca.js');
const eu = require('./etapi_utils.js'); const eu = require('./etapi_utils');
const mappers = require('./mappers.js'); const mappers = require('./mappers.js');
const attributeService = require('../services/attributes.js'); const attributeService = require('../services/attributes.js');
const v = require('./validators.js'); const v = require('./validators.js');

View File

@ -1,5 +1,5 @@
const becca = require('../becca/becca.js'); 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 passwordEncryptionService = require('../services/encryption/password_encryption.js');
const etapiTokenService = require('../services/etapi_tokens.js'); const etapiTokenService = require('../services/etapi_tokens.js');

View File

@ -1,4 +1,4 @@
const eu = require('./etapi_utils.js'); const eu = require('./etapi_utils');
const backupService = require('../services/backup.js'); const backupService = require('../services/backup.js');
function register(router) { function register(router) {

View File

@ -1,5 +1,5 @@
const becca = require('../becca/becca.js'); const becca = require('../becca/becca.js');
const eu = require('./etapi_utils.js'); const eu = require('./etapi_utils');
const mappers = require('./mappers.js'); const mappers = require('./mappers.js');
const BBranch = require('../becca/entities/bbranch.js'); const BBranch = require('../becca/entities/bbranch.js');
const entityChangesService = require('../services/entity_changes.js'); const entityChangesService = require('../services/entity_changes.js');

View File

@ -1,6 +1,6 @@
const becca = require('../becca/becca.js'); const becca = require('../becca/becca.js');
const utils = require('../services/utils.js'); const utils = require('../services/utils');
const eu = require('./etapi_utils.js'); const eu = require('./etapi_utils');
const mappers = require('./mappers.js'); const mappers = require('./mappers.js');
const noteService = require('../services/notes.js'); const noteService = require('../services/notes.js');
const TaskContext = require('../services/task_context.js'); const TaskContext = require('../services/task_context.js');

View File

@ -1,6 +1,6 @@
const specialNotesService = require('../services/special_notes.js'); const specialNotesService = require('../services/special_notes.js');
const dateNotesService = require('../services/date_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 mappers = require('./mappers.js');
const getDateInvalidError = date => new eu.EtapiError(400, "DATE_INVALID", `Date "${date}" is not valid.`); const getDateInvalidError = date => new eu.EtapiError(400, "DATE_INVALID", `Date "${date}" is not valid.`);

View File

@ -1,5 +1,5 @@
const noteTypeService = require('../services/note_types.js'); const noteTypeService = require('../services/note_types.js');
const dateUtils = require('../services/date_utils.js'); const dateUtils = require('../services/date_utils');
function mandatory(obj) { function mandatory(obj) {
if (obj === undefined ) { if (obj === undefined ) {

View File

@ -3,7 +3,7 @@
const beccaService = require('../../becca/becca_service.js'); const beccaService = require('../../becca/becca_service.js');
const searchService = require('../../services/search/services/search.js'); const searchService = require('../../services/search/services/search.js');
const log = require('../../services/log'); const log = require('../../services/log');
const utils = require('../../services/utils.js'); const utils = require('../../services/utils');
const cls = require('../../services/cls'); const cls = require('../../services/cls');
const becca = require('../../becca/becca.js'); const becca = require('../../becca/becca.js');

View File

@ -1,7 +1,7 @@
"use strict"; "use strict";
const fs = require('fs'); const fs = require('fs');
const dateUtils = require('../../services/date_utils.js'); const dateUtils = require('../../services/date_utils');
const {LOG_DIR} = require('../../services/data_dir'); const {LOG_DIR} = require('../../services/data_dir');
function getBackendLog() { function getBackendLog() {

View File

@ -1,7 +1,7 @@
"use strict"; "use strict";
const sql = require('../../services/sql.js'); 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 entityChangesService = require('../../services/entity_changes.js');
const treeService = require('../../services/tree.js'); const treeService = require('../../services/tree.js');
const eraseService = require('../../services/erase.js'); const eraseService = require('../../services/erase.js');

View File

@ -4,12 +4,12 @@ const attributeService = require('../../services/attributes.js');
const cloneService = require('../../services/cloning.js'); const cloneService = require('../../services/cloning.js');
const noteService = require('../../services/notes.js'); const noteService = require('../../services/notes.js');
const dateNoteService = require('../../services/date_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 imageService = require('../../services/image.js');
const appInfo = require('../../services/app_info.js'); const appInfo = require('../../services/app_info.js');
const ws = require('../../services/ws.js'); const ws = require('../../services/ws.js');
const log = require('../../services/log'); const log = require('../../services/log');
const utils = require('../../services/utils.js'); const utils = require('../../services/utils');
const path = require('path'); const path = require('path');
const htmlSanitizer = require('../../services/html_sanitizer.js'); const htmlSanitizer = require('../../services/html_sanitizer.js');
const {formatAttrForSearch} = require('../../services/attribute_formatter.js'); const {formatAttrForSearch} = require('../../services/attribute_formatter.js');

View File

@ -1,7 +1,7 @@
"use strict"; "use strict";
const protectedSessionService = require('../../services/protected_session.js'); const protectedSessionService = require('../../services/protected_session.js');
const utils = require('../../services/utils.js'); const utils = require('../../services/utils');
const log = require('../../services/log'); const log = require('../../services/log');
const noteService = require('../../services/notes.js'); const noteService = require('../../services/notes.js');
const tmp = require('tmp'); const tmp = require('tmp');

View File

@ -1,8 +1,8 @@
"use strict"; "use strict";
const options = require('../../services/options.js'); const options = require('../../services/options.js');
const utils = require('../../services/utils.js'); const utils = require('../../services/utils');
const dateUtils = require('../../services/date_utils.js'); const dateUtils = require('../../services/date_utils');
const instanceId = require('../../services/instance_id.js'); const instanceId = require('../../services/instance_id.js');
const passwordEncryptionService = require('../../services/encryption/password_encryption.js'); const passwordEncryptionService = require('../../services/encryption/password_encryption.js');
const protectedSessionService = require('../../services/protected_session.js'); const protectedSessionService = require('../../services/protected_session.js');

View File

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

View File

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

View File

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

View File

@ -9,7 +9,7 @@ const optionService = require('../../services/options.js');
const contentHashService = require('../../services/content_hash.js'); const contentHashService = require('../../services/content_hash.js');
const log = require('../../services/log'); const log = require('../../services/log');
const syncOptions = require('../../services/sync_options.js'); const syncOptions = require('../../services/sync_options.js');
const utils = require('../../services/utils.js'); const utils = require('../../services/utils');
const ws = require('../../services/ws.js'); const ws = require('../../services/ws.js');
async function testSync() { async function testSync() {

View File

@ -6,7 +6,7 @@ const config = require('../services/config.js');
const optionService = require('../services/options.js'); const optionService = require('../services/options.js');
const log = require('../services/log'); const log = require('../services/log');
const env = require('../services/env.js'); 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 protectedSessionService = require('../services/protected_session.js');
const packageJson = require('../../package.json'); const packageJson = require('../../package.json');
const assetPath = require('../services/asset_path.js'); const assetPath = require('../services/asset_path.js');

View File

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

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const utils = require('../services/utils.js'); const utils = require('../services/utils');
const multer = require('multer'); const multer = require('multer');
const log = require('../services/log'); const log = require('../services/log');
const express = require('express'); const express = require('express');

View File

@ -2,7 +2,7 @@
const sqlInit = require('../services/sql_init.js'); const sqlInit = require('../services/sql_init.js');
const setupService = require('../services/setup.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 assetPath = require('../services/asset_path.js');
const appPath = require('../services/app_path.js'); const appPath = require('../services/app_path.js');

View File

@ -1,7 +1,7 @@
const BUILTIN_ATTRIBUTES = require('./builtin_attributes.js'); const BUILTIN_ATTRIBUTES = require('./builtin_attributes.js');
const fs = require("fs-extra"); const fs = require("fs-extra");
const dataDir = require('./data_dir'); const dataDir = require('./data_dir');
const dateUtils = require('./date_utils.js'); const dateUtils = require('./date_utils');
const Database = require("better-sqlite3"); const Database = require("better-sqlite3");
const sql = require('./sql.js'); const sql = require('./sql.js');
const path = require("path"); const path = require("path");

View File

@ -6,7 +6,7 @@ const log = require('./log');
const os = require('os'); const os = require('os');
const fs = require('fs'); const fs = require('fs');
const config = require('./config.js'); const config = require('./config.js');
const utils = require('./utils.js'); const utils = require('./utils');
const template = `[Desktop Entry] const template = `[Desktop Entry]
Type=Application Type=Application

View File

@ -3,7 +3,7 @@
const etapiTokenService = require('./etapi_tokens.js'); const etapiTokenService = require('./etapi_tokens.js');
const log = require('./log'); const log = require('./log');
const sqlInit = require('./sql_init.js'); const sqlInit = require('./sql_init.js');
const utils = require('./utils.js'); const utils = require('./utils');
const passwordEncryptionService = require('./encryption/password_encryption.js'); const passwordEncryptionService = require('./encryption/password_encryption.js');
const config = require('./config.js'); const config = require('./config.js');
const passwordService = require('./encryption/password.js'); const passwordService = require('./encryption/password.js');

View File

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

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const dateUtils = require('./date_utils.js'); const dateUtils = require('./date_utils');
const optionService = require('./options.js'); const optionService = require('./options.js');
const fs = require('fs-extra'); const fs = require('fs-extra');
const dataDir = require('./data_dir'); const dataDir = require('./data_dir');

View File

@ -1,7 +1,7 @@
const becca = require('../becca/becca.js'); const becca = require('../becca/becca.js');
const NotFoundError = require('../errors/not_found_error.js'); const NotFoundError = require('../errors/not_found_error.js');
const protectedSessionService = require('./protected_session.js'); const protectedSessionService = require('./protected_session.js');
const utils = require('./utils.js'); const utils = require('./utils');
function getBlobPojo(entityName, entityId) { function getBlobPojo(entityName, entityId) {
const entity = becca.getEntity(entityName, entityId); const entity = becca.getEntity(entityName, entityId);

View File

@ -3,7 +3,7 @@ const revisionService = require('./revisions.js');
const becca = require('../becca/becca.js'); const becca = require('../becca/becca.js');
const cloningService = require('./cloning.js'); const cloningService = require('./cloning.js');
const branchService = require('./branches.js'); const branchService = require('./branches.js');
const utils = require('./utils.js'); const utils = require('./utils');
const eraseService = require("./erase.js"); const eraseService = require("./erase.js");
const ACTION_HANDLERS = { const ACTION_HANDLERS = {

View File

@ -11,7 +11,7 @@ const optionsService = require('./options.js');
const BBranch = require('../becca/entities/bbranch.js'); const BBranch = require('../becca/entities/bbranch.js');
const revisionService = require('./revisions.js'); const revisionService = require('./revisions.js');
const becca = require('../becca/becca.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 eraseService = require('../services/erase.js');
const {sanitizeAttributeName} = require('./sanitize_attribute_name.js'); const {sanitizeAttributeName} = require('./sanitize_attribute_name.js');
const noteTypes = require('../services/note_types.js').getNoteTypeNames(); const noteTypes = require('../services/note_types.js').getNoteTypeNames();

View File

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

View File

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

View File

@ -3,7 +3,7 @@
const sql = require('../sql.js'); const sql = require('../sql.js');
const optionService = require('../options.js'); const optionService = require('../options.js');
const myScryptService = require('./my_scrypt.js'); const myScryptService = require('./my_scrypt.js');
const utils = require('../utils.js'); const utils = require('../utils');
const passwordEncryptionService = require('./password_encryption.js'); const passwordEncryptionService = require('./password_encryption.js');
function isPasswordSet() { function isPasswordSet() {

View File

@ -1,6 +1,6 @@
const optionService = require('../options.js'); const optionService = require('../options.js');
const myScryptService = require('./my_scrypt.js'); const myScryptService = require('./my_scrypt.js');
const utils = require('../utils.js'); const utils = require('../utils');
const dataEncryptionService = require('./data_encryption.js'); const dataEncryptionService = require('./data_encryption.js');
function verifyPassword(password) { function verifyPassword(password) {

View File

@ -1,8 +1,8 @@
const sql = require('./sql.js'); const sql = require('./sql.js');
const dateUtils = require('./date_utils.js'); const dateUtils = require('./date_utils');
const log = require('./log'); const log = require('./log');
const cls = require('./cls'); const cls = require('./cls');
const utils = require('./utils.js'); const utils = require('./utils');
const instanceId = require('./instance_id.js'); const instanceId = require('./instance_id.js');
const becca = require('../becca/becca.js'); const becca = require('../becca/becca.js');
const blobService = require('../services/blob.js'); const blobService = require('../services/blob.js');

View File

@ -3,7 +3,7 @@ const revisionService = require("./revisions.js");
const log = require("./log.ts"); const log = require("./log.ts");
const entityChangesService = require("./entity_changes.js"); const entityChangesService = require("./entity_changes.js");
const optionService = require("./options.js"); const optionService = require("./options.js");
const dateUtils = require("./date_utils.js"); const dateUtils = require("./date_utils");
const sqlInit = require("./sql_init.js"); const sqlInit = require("./sql_init.js");
const cls = require("./cls"); const cls = require("./cls");

View File

@ -1,5 +1,5 @@
const becca = require('../becca/becca.js'); const becca = require('../becca/becca.js');
const utils = require('./utils.js'); const utils = require('./utils');
const BEtapiToken = require('../becca/entities/betapi_token.js'); const BEtapiToken = require('../becca/entities/betapi_token.js');
const crypto = require("crypto"); const crypto = require("crypto");

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const utils = require('../utils.js'); const utils = require('../utils');
const becca = require('../../becca/becca.js'); const becca = require('../../becca/becca.js');
function exportToOpml(taskContext, branch, version, res) { function exportToOpml(taskContext, branch, version, res) {

View File

@ -2,7 +2,7 @@
const mimeTypes = require('mime-types'); const mimeTypes = require('mime-types');
const html = require('html'); const html = require('html');
const utils = require('../utils.js'); const utils = require('../utils');
const mdService = require('./md.js'); const mdService = require('./md.js');
const becca = require('../../becca/becca.js'); const becca = require('../../becca/becca.js');

View File

@ -1,12 +1,12 @@
"use strict"; "use strict";
const html = require('html'); const html = require('html');
const dateUtils = require('../date_utils.js'); const dateUtils = require('../date_utils');
const path = require('path'); const path = require('path');
const mimeTypes = require('mime-types'); const mimeTypes = require('mime-types');
const mdService = require('./md.js'); const mdService = require('./md.js');
const packageInfo = require('../../../package.json'); const packageInfo = require('../../../package.json');
const utils = require('../utils.js'); const utils = require('../utils');
const protectedSessionService = require('../protected_session.js'); const protectedSessionService = require('../protected_session.js');
const sanitize = require("sanitize-filename"); const sanitize = require("sanitize-filename");
const fs = require("fs"); const fs = require("fs");

View File

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

View File

@ -2,7 +2,7 @@
const marked = require("marked"); const marked = require("marked");
const htmlSanitizer = require('../html_sanitizer.js'); const htmlSanitizer = require('../html_sanitizer.js');
const importUtils = require('./utils.js'); const importUtils = require('./utils');
function renderToHtml(content, title) { function renderToHtml(content, title) {
const html = marked.parse(content, { const html = marked.parse(content, {

View File

@ -5,8 +5,8 @@ const imageService = require('../../services/image.js');
const protectedSessionService = require('../protected_session.js'); const protectedSessionService = require('../protected_session.js');
const markdownService = require('./markdown.js'); const markdownService = require('./markdown.js');
const mimeService = require('./mime.js'); const mimeService = require('./mime.js');
const utils = require('../../services/utils.js'); const utils = require('../../services/utils');
const importUtils = require('./utils.js'); const importUtils = require('./utils');
const htmlSanitizer = require('../html_sanitizer.js'); const htmlSanitizer = require('../html_sanitizer.js');
function importSingleFile(taskContext, file, parentNote) { function importSingleFile(taskContext, file, parentNote) {

View File

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

View File

@ -1,4 +1,4 @@
const utils = require('./utils.js'); const utils = require('./utils');
const instanceId = utils.randomString(12); const instanceId = utils.randomString(12);

View File

@ -2,7 +2,7 @@
const optionService = require('./options.js'); const optionService = require('./options.js');
const log = require('./log'); const log = require('./log');
const utils = require('./utils.js'); const utils = require('./utils');
const isMac = process.platform === "darwin"; const isMac = process.platform === "darwin";
const isElectron = utils.isElectron(); const isElectron = utils.isElectron();

View File

@ -2,7 +2,7 @@ const backupService = require('./backup.js');
const sql = require('./sql.js'); const sql = require('./sql.js');
const fs = require('fs-extra'); const fs = require('fs-extra');
const log = require('./log'); const log = require('./log');
const utils = require('./utils.js'); const utils = require('./utils');
const resourceDir = require('./resource_dir.js'); const resourceDir = require('./resource_dir.js');
const appInfo = require('./app_info.js'); const appInfo = require('./app_info.js');
const cls = require('./cls'); const cls = require('./cls');

View File

@ -1,12 +1,12 @@
const sql = require('./sql.js'); const sql = require('./sql.js');
const optionService = require('./options.js'); const optionService = require('./options.js');
const dateUtils = require('./date_utils.js'); const dateUtils = require('./date_utils');
const entityChangesService = require('./entity_changes.js'); const entityChangesService = require('./entity_changes.js');
const eventService = require('./events.js'); const eventService = require('./events.js');
const cls = require('../services/cls'); const cls = require('../services/cls');
const protectedSessionService = require('../services/protected_session.js'); const protectedSessionService = require('../services/protected_session.js');
const log = require('../services/log'); const log = require('../services/log');
const utils = require('../services/utils.js'); const utils = require('../services/utils');
const revisionService = require('./revisions.js'); const revisionService = require('./revisions.js');
const request = require('./request.js'); const request = require('./request.js');
const path = require('path'); const path = require('path');

View File

@ -1,8 +1,8 @@
const optionService = require('./options.js'); const optionService = require('./options.js');
const appInfo = require('./app_info.js'); const appInfo = require('./app_info.js');
const utils = require('./utils.js'); const utils = require('./utils');
const log = require('./log'); const log = require('./log');
const dateUtils = require('./date_utils.js'); const dateUtils = require('./date_utils');
const keyboardActions = require('./keyboard_actions.js'); const keyboardActions = require('./keyboard_actions.js');
function initDocumentOptions() { function initDocumentOptions() {

View File

@ -1,5 +1,5 @@
const config = require('./config.js'); const config = require('./config.js');
const utils = require('./utils.js'); const utils = require('./utils');
const env = require('./env.js'); const env = require('./env.js');
const dataDir = require('./data_dir'); const dataDir = require('./data_dir');

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const utils = require('./utils.js'); const utils = require('./utils');
const log = require('./log'); const log = require('./log');
const url = require('url'); const url = require('url');
const syncOptions = require('./sync_options.js'); const syncOptions = require('./sync_options.js');

View File

@ -3,7 +3,7 @@
const log = require('./log'); const log = require('./log');
const sql = require('./sql.js'); const sql = require('./sql.js');
const protectedSessionService = require('./protected_session.js'); const protectedSessionService = require('./protected_session.js');
const dateUtils = require('./date_utils.js'); const dateUtils = require('./date_utils');
/** /**
* @param {BNote} note * @param {BNote} note

View File

@ -1,4 +1,4 @@
const utils = require('./utils.js'); const utils = require('./utils');
const BackendScriptApi = require('./backend_script_api.js'); const BackendScriptApi = require('./backend_script_api.js');
function ScriptContext(allNotes, apiParams = {}) { function ScriptContext(allNotes, apiParams = {}) {

View File

@ -6,7 +6,7 @@ const log = require('../../log');
const becca = require('../../../becca/becca.js'); const becca = require('../../../becca/becca.js');
const protectedSessionService = require('../../protected_session.js'); const protectedSessionService = require('../../protected_session.js');
const striptags = require('striptags'); const striptags = require('striptags');
const utils = require('../../utils.js'); const utils = require('../../utils');
const ALLOWED_OPERATORS = ['=', '!=', '*=*', '*=', '=*', '%=']; const ALLOWED_OPERATORS = ['=', '!=', '*=*', '*=', '=*', '%='];

View File

@ -3,7 +3,7 @@
const Expression = require('./expression.js'); const Expression = require('./expression.js');
const NoteSet = require('../note_set.js'); const NoteSet = require('../note_set.js');
const becca = require('../../../becca/becca.js'); const becca = require('../../../becca/becca.js');
const utils = require('../../utils.js'); const utils = require('../../utils');
class NoteFlatTextExp extends Expression { class NoteFlatTextExp extends Expression {
constructor(tokens) { constructor(tokens) {

View File

@ -17,7 +17,7 @@ const OrderByAndLimitExp = require('../expressions/order_by_and_limit.js');
const AncestorExp = require('../expressions/ancestor.js'); const AncestorExp = require('../expressions/ancestor.js');
const buildComparator = require('./build_comparator.js'); const buildComparator = require('./build_comparator.js');
const ValueExtractor = require('../value_extractor.js'); const ValueExtractor = require('../value_extractor.js');
const utils = require('../../utils.js'); const utils = require('../../utils');
const TrueExp = require('../expressions/true.js'); const TrueExp = require('../expressions/true.js');
const IsHiddenExp = require('../expressions/is_hidden.js'); const IsHiddenExp = require('../expressions/is_hidden.js');

View File

@ -8,7 +8,7 @@ const SearchResult = require('../search_result.js');
const SearchContext = require('../search_context.js'); const SearchContext = require('../search_context.js');
const becca = require('../../../becca/becca.js'); const becca = require('../../../becca/becca.js');
const beccaService = require('../../../becca/becca_service.js'); const beccaService = require('../../../becca/becca_service.js');
const utils = require('../../utils.js'); const utils = require('../../utils');
const log = require('../../log'); const log = require('../../log');
const hoistedNoteService = require('../../hoisted_note.js'); const hoistedNoteService = require('../../hoisted_note.js');

View File

@ -5,7 +5,7 @@ const optionService = require('./options.js');
const syncOptions = require('./sync_options.js'); const syncOptions = require('./sync_options.js');
const request = require('./request.js'); const request = require('./request.js');
const appInfo = require('./app_info.js'); const appInfo = require('./app_info.js');
const utils = require('./utils.js'); const utils = require('./utils');
const becca = require('../becca/becca.js'); const becca = require('../becca/becca.js');
async function hasSyncServerSchemaAndSeed() { async function hasSyncServerSchemaAndSeed() {

View File

@ -2,7 +2,7 @@ const attributeService = require('./attributes.js');
const dateNoteService = require('./date_notes.js'); const dateNoteService = require('./date_notes.js');
const becca = require('../becca/becca.js'); const becca = require('../becca/becca.js');
const noteService = require('./notes.js'); const noteService = require('./notes.js');
const dateUtils = require('./date_utils.js'); const dateUtils = require('./date_utils');
const log = require('./log'); const log = require('./log');
const hoistedNoteService = require('./hoisted_note.js'); const hoistedNoteService = require('./hoisted_note.js');
const searchService = require('./search/services/search.js'); const searchService = require('./search/services/search.js');

View File

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

View File

@ -3,9 +3,9 @@
const log = require('./log'); const log = require('./log');
const sql = require('./sql.js'); const sql = require('./sql.js');
const optionService = require('./options.js'); const optionService = require('./options.js');
const utils = require('./utils.js'); const utils = require('./utils');
const instanceId = require('./instance_id.js'); const instanceId = require('./instance_id.js');
const dateUtils = require('./date_utils.js'); const dateUtils = require('./date_utils');
const syncUpdateService = require('./sync_update.js'); const syncUpdateService = require('./sync_update.js');
const contentHashService = require('./content_hash.js'); const contentHashService = require('./content_hash.js');
const appInfo = require('./app_info.js'); const appInfo = require('./app_info.js');

View File

@ -1,18 +1,18 @@
"use strict"; "use strict";
const crypto = require('crypto'); import crypto = require('crypto');
const randtoken = require('rand-token').generator({source: 'crypto'}); const randtoken = require('rand-token').generator({source: 'crypto'});
const unescape = require('unescape'); import unescape = require('unescape');
const escape = require('escape-html'); import escape = require('escape-html');
const sanitize = require("sanitize-filename"); import sanitize = require("sanitize-filename");
const mimeTypes = require('mime-types'); import mimeTypes = require('mime-types');
const path = require('path'); import path = require('path');
function newEntityId() { function newEntityId() {
return randomString(12); return randomString(12);
} }
function randomString(length) { function randomString(length: number) {
return randtoken.generate(length); return randtoken.generate(length);
} }
@ -20,11 +20,11 @@ function randomSecureToken(bytes = 32) {
return crypto.randomBytes(bytes).toString('base64'); return crypto.randomBytes(bytes).toString('base64');
} }
function md5(content) { function md5(content: crypto.BinaryLike) {
return crypto.createHash('md5').update(content).digest('hex'); return crypto.createHash('md5').update(content).digest('hex');
} }
function hashedBlobId(content) { function hashedBlobId(content: string) {
if (content === null || content === undefined) { if (content === null || content === undefined) {
content = ""; content = "";
} }
@ -41,19 +41,16 @@ function hashedBlobId(content) {
return kindaBase62Hash.substr(0, 20); return kindaBase62Hash.substr(0, 20);
} }
function toBase64(plainText) { function toBase64(plainText: string) {
return Buffer.from(plainText).toString('base64'); return Buffer.from(plainText).toString('base64');
} }
/** function fromBase64(encodedText: string) {
* @returns {Buffer}
*/
function fromBase64(encodedText) {
return Buffer.from(encodedText, 'base64'); return Buffer.from(encodedText, 'base64');
} }
function hmac(secret, value) { function hmac(secret: any, value: any) {
const hmac = crypto.createHmac('sha256', Buffer.from(secret.toString(), 'ASCII')); const hmac = crypto.createHmac('sha256', Buffer.from(secret.toString(), 'ascii'));
hmac.update(value.toString()); hmac.update(value.toString());
return hmac.digest('base64'); return hmac.digest('base64');
} }
@ -62,30 +59,30 @@ function isElectron() {
return !!process.versions['electron']; return !!process.versions['electron'];
} }
function hash(text) { function hash(text: string) {
text = text.normalize(); text = text.normalize();
return crypto.createHash('sha1').update(text).digest('base64'); return crypto.createHash('sha1').update(text).digest('base64');
} }
function isEmptyOrWhitespace(str) { function isEmptyOrWhitespace(str: string) {
return str === null || str.match(/^ *$/) !== null; return str === null || str.match(/^ *$/) !== null;
} }
function sanitizeSqlIdentifier(str) { function sanitizeSqlIdentifier(str: string) {
return str.replace(/[^A-Za-z0-9_]/g, ""); return str.replace(/[^A-Za-z0-9_]/g, "");
} }
function escapeHtml(str) { function escapeHtml(str: string) {
return escape(str); return escape(str);
} }
function unescapeHtml(str) { function unescapeHtml(str: string) {
return unescape(str); return unescape(str);
} }
function toObject(array, fn) { function toObject<T, K extends string | number | symbol, V>(array: T[], fn: (item: T) => [K, V]): Record<K, V> {
const obj = {}; const obj: Record<K, V> = {} as Record<K, V>; // FIXME: unsafe?
for (const item of array) { for (const item of array) {
const ret = fn(item); const ret = fn(item);
@ -96,12 +93,12 @@ function toObject(array, fn) {
return obj; return obj;
} }
function stripTags(text) { function stripTags(text: string) {
return text.replace(/<(?:.|\n)*?>/gm, ''); return text.replace(/<(?:.|\n)*?>/gm, '');
} }
function union(a, b) { function union<T extends string | number | symbol>(a: T[], b: T[]): T[] {
const obj = {}; const obj: Record<T, T> = {} as Record<T, T>; // FIXME: unsafe?
for (let i = a.length-1; i >= 0; i--) { for (let i = a.length-1; i >= 0; i--) {
obj[a[i]] = a[i]; obj[a[i]] = a[i];
@ -111,7 +108,7 @@ function union(a, b) {
obj[b[i]] = b[i]; obj[b[i]] = b[i];
} }
const res = []; const res: T[] = [];
for (const k in obj) { for (const k in obj) {
if (obj.hasOwnProperty(k)) { // <-- optional if (obj.hasOwnProperty(k)) { // <-- optional
@ -122,7 +119,7 @@ function union(a, b) {
return res; return res;
} }
function escapeRegExp(str) { function escapeRegExp(str: string) {
return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
} }
@ -135,7 +132,7 @@ function crash() {
} }
} }
function sanitizeFilenameForHeader(filename) { function sanitizeFilenameForHeader(filename: string) {
let sanitizedFilename = sanitize(filename); let sanitizedFilename = sanitize(filename);
if (sanitizedFilename.trim().length === 0) { if (sanitizedFilename.trim().length === 0) {
@ -145,7 +142,7 @@ function sanitizeFilenameForHeader(filename) {
return encodeURIComponent(sanitizedFilename); return encodeURIComponent(sanitizedFilename);
} }
function getContentDisposition(filename) { function getContentDisposition(filename: string) {
const sanitizedFilename = sanitizeFilenameForHeader(filename); const sanitizedFilename = sanitizeFilenameForHeader(filename);
return `file; filename="${sanitizedFilename}"; filename*=UTF-8''${sanitizedFilename}`; return `file; filename="${sanitizedFilename}"; filename*=UTF-8''${sanitizedFilename}`;
@ -159,24 +156,24 @@ const STRING_MIME_TYPES = [
"image/svg+xml" "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 // 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) return ["text", "code", "relationMap", "search", "render", "book", "mermaid", "canvas"].includes(type)
|| mime.startsWith('text/') || mime.startsWith('text/')
|| STRING_MIME_TYPES.includes(mime); || STRING_MIME_TYPES.includes(mime);
} }
function quoteRegex(url) { function quoteRegex(url: string) {
return url.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); return url.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&');
} }
function replaceAll(string, replaceWhat, replaceWith) { function replaceAll(string: string, replaceWhat: string, replaceWith: string) {
const quotedReplaceWhat = quoteRegex(replaceWhat); const quotedReplaceWhat = quoteRegex(replaceWhat);
return string.replace(new RegExp(quotedReplaceWhat, "g"), replaceWith); return string.replace(new RegExp(quotedReplaceWhat, "g"), replaceWith);
} }
function formatDownloadTitle(fileName, type, mime) { function formatDownloadTitle(fileName: string, type: string, mime: string) {
if (!fileName) { if (!fileName) {
fileName = "untitled"; fileName = "untitled";
} }
@ -218,7 +215,7 @@ function formatDownloadTitle(fileName, type, mime) {
} }
} }
function removeTextFileExtension(filePath) { function removeTextFileExtension(filePath: string) {
const extension = path.extname(filePath).toLowerCase(); const extension = path.extname(filePath).toLowerCase();
if (extension === '.md' || extension === '.markdown' || extension === '.html') { 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) { if (noteMeta) {
return noteMeta.title; return noteMeta.title;
} else { } else {
@ -241,7 +238,7 @@ function getNoteTitle(filePath, replaceUnderscoresWithSpaces, noteMeta) {
} }
} }
function timeLimit(promise, limitMs, errorMessage) { function timeLimit<T>(promise: Promise<T>, limitMs: number, errorMessage: string): Promise<T> {
if (!promise || !promise.then) { // it's not actually a promise if (!promise || !promise.then) { // it's not actually a promise
return promise; return promise;
} }
@ -267,23 +264,28 @@ function timeLimit(promise, limitMs, errorMessage) {
}); });
} }
function deferred() { interface DeferredPromise<T> extends Promise<T> {
return (() => { resolve: (value: T | PromiseLike<T>) => void,
let resolve, reject; reject: (reason?: any) => void
}
let promise = new Promise((res, rej) => { function deferred<T>(): DeferredPromise<T> {
return (() => {
let resolve!: (value: T | PromiseLike<T>) => void;
let reject!: (reason?: any) => void;
let promise = new Promise<T>((res, rej) => {
resolve = res; resolve = res;
reject = rej; reject = rej;
}); }) as DeferredPromise<T>;
promise.resolve = resolve; promise.resolve = resolve;
promise.reject = reject; promise.reject = reject;
return promise as DeferredPromise<T>;
return promise;
})(); })();
} }
function removeDiacritic(str) { function removeDiacritic(str: string) {
if (!str) { if (!str) {
return ""; return "";
} }
@ -291,12 +293,12 @@ function removeDiacritic(str) {
return str.normalize("NFD").replace(/\p{Diacritic}/gu, ""); return str.normalize("NFD").replace(/\p{Diacritic}/gu, "");
} }
function normalize(str) { function normalize(str: string) {
return removeDiacritic(str).toLowerCase(); return removeDiacritic(str).toLowerCase();
} }
function toMap(list, key) { function toMap<T extends Record<string, any>>(list: T[], key: keyof T): Record<string, T> {
const map = {}; const map: Record<string, T> = {};
for (const el of list) { for (const el of list) {
map[el[key]] = el; map[el[key]] = el;
@ -305,7 +307,7 @@ function toMap(list, key) {
return map; return map;
} }
function isString(x) { function isString(x: any) {
return Object.prototype.toString.call(x) === "[object String]"; return Object.prototype.toString.call(x) === "[object String]";
} }

View File

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

View File

@ -236,7 +236,7 @@ function register(router) {
addNoIndexHeader(note, res); addNoIndexHeader(note, res);
const utils = require('../services/utils.js'); const utils = require('../services/utils');
const filename = utils.formatDownloadTitle(note.title, note.type, note.mime); const filename = utils.formatDownloadTitle(note.title, note.type, note.mime);
@ -304,7 +304,7 @@ function register(router) {
addNoIndexHeader(attachment.note, res); addNoIndexHeader(attachment.note, res);
const utils = require('../services/utils.js'); const utils = require('../services/utils');
const filename = utils.formatDownloadTitle(attachment.title, null, attachment.mime); const filename = utils.formatDownloadTitle(attachment.title, null, attachment.mime);

View File

@ -1,7 +1,7 @@
"use strict"; "use strict";
const sql = require('../../sql.js'); const sql = require('../../sql.js');
const utils = require('../../../services/utils.js'); const utils = require('../../../services/utils');
const AbstractShacaEntity = require('./abstract_shaca_entity.js'); const AbstractShacaEntity = require('./abstract_shaca_entity.js');
class SAttachment extends AbstractShacaEntity { class SAttachment extends AbstractShacaEntity {

View File

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

4
src/types/unescape.d.ts vendored Normal file
View File

@ -0,0 +1,4 @@
declare module 'unescape' {
function unescape(str: string, type?: string): string;
export = unescape;
}

View File

@ -5,7 +5,8 @@
"sourceMap": true, "sourceMap": true,
"outDir": "./build", "outDir": "./build",
"strict": true, "strict": true,
"noImplicitAny": true "noImplicitAny": true,
"lib": ["ES2021"]
}, },
"include": [ "include": [
"./src/**/*.js", "./src/**/*.js",