diff --git a/src/becca/entities/rows.ts b/src/becca/entities/rows.ts index cf7dae4ac..097e9042e 100644 --- a/src/becca/entities/rows.ts +++ b/src/becca/entities/rows.ts @@ -66,7 +66,7 @@ export type AttributeType = "label" | "relation"; export interface AttributeRow { attributeId?: string; - noteId: string; + noteId?: string; type: AttributeType; name: string; position?: number; diff --git a/src/etapi/attributes.js b/src/etapi/attributes.js index dca82b0ea..17ca00c07 100644 --- a/src/etapi/attributes.js +++ b/src/etapi/attributes.js @@ -1,7 +1,7 @@ const becca = require('../becca/becca'); const eu = require('./etapi_utils'); const mappers = require('./mappers.js'); -const attributeService = require('../services/attributes.js'); +const attributeService = require('../services/attributes'); const v = require('./validators.js'); function register(router) { diff --git a/src/routes/api/attributes.js b/src/routes/api/attributes.js index de906a225..2c151fccf 100644 --- a/src/routes/api/attributes.js +++ b/src/routes/api/attributes.js @@ -2,7 +2,7 @@ const sql = require('../../services/sql'); const log = require('../../services/log'); -const attributeService = require('../../services/attributes.js'); +const attributeService = require('../../services/attributes'); const BAttribute = require('../../becca/entities/battribute'); const becca = require('../../becca/becca'); const ValidationError = require('../../errors/validation_error'); diff --git a/src/routes/api/clipper.js b/src/routes/api/clipper.js index b5cda8c31..4e80ebbb0 100644 --- a/src/routes/api/clipper.js +++ b/src/routes/api/clipper.js @@ -1,6 +1,6 @@ "use strict"; -const attributeService = require('../../services/attributes.js'); +const attributeService = require('../../services/attributes'); const cloneService = require('../../services/cloning.js'); const noteService = require('../../services/notes'); const dateNoteService = require('../../services/date_notes.js'); diff --git a/src/routes/api/script.js b/src/routes/api/script.js index 0dbb72f2c..2dac2ca64 100644 --- a/src/routes/api/script.js +++ b/src/routes/api/script.js @@ -1,7 +1,7 @@ "use strict"; const scriptService = require('../../services/script.js'); -const attributeService = require('../../services/attributes.js'); +const attributeService = require('../../services/attributes'); const becca = require('../../becca/becca'); const syncService = require('../../services/sync.js'); const sql = require('../../services/sql'); diff --git a/src/routes/index.js b/src/routes/index.js index c9c0a33de..44c609834 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -1,7 +1,7 @@ "use strict"; const sql = require('../services/sql'); -const attributeService = require('../services/attributes.js'); +const attributeService = require('../services/attributes'); const config = require('../services/config'); const optionService = require('../services/options'); const log = require('../services/log'); diff --git a/src/routes/routes.js b/src/routes/routes.js index 3291fe7e5..7c5ea7e0a 100644 --- a/src/routes/routes.js +++ b/src/routes/routes.js @@ -42,7 +42,7 @@ const setupApiRoute = require('./api/setup.js'); const sqlRoute = require('./api/sql'); const databaseRoute = require('./api/database.js'); const imageRoute = require('./api/image.js'); -const attributesRoute = require('./api/attributes.js'); +const attributesRoute = require('./api/attributes'); const scriptRoute = require('./api/script.js'); const senderRoute = require('./api/sender.js'); const filesRoute = require('./api/files.js'); @@ -64,7 +64,7 @@ const shareRoutes = require('../share/routes.js'); const etapiAuthRoutes = require('../etapi/auth.js'); const etapiAppInfoRoutes = require('../etapi/app_info'); const etapiAttachmentRoutes = require('../etapi/attachments.js'); -const etapiAttributeRoutes = require('../etapi/attributes.js'); +const etapiAttributeRoutes = require('../etapi/attributes'); const etapiBranchRoutes = require('../etapi/branches.js'); const etapiNoteRoutes = require('../etapi/notes.js'); const etapiSpecialNoteRoutes = require('../etapi/special_notes.js'); diff --git a/src/services/attribute_formatter.ts b/src/services/attribute_formatter.ts index 846450f36..a7b4b7500 100644 --- a/src/services/attribute_formatter.ts +++ b/src/services/attribute_formatter.ts @@ -1,8 +1,8 @@ "use strict"; -import BAttribute = require("../becca/entities/battribute"); +import { AttributeRow } from "../becca/entities/rows"; -function formatAttrForSearch(attr: BAttribute, searchWithValue: string) { +function formatAttrForSearch(attr: AttributeRow, searchWithValue: boolean) { let searchStr = ''; if (attr.type === 'label') { diff --git a/src/services/attributes.js b/src/services/attributes.ts similarity index 67% rename from src/services/attributes.js rename to src/services/attributes.ts index a670ec731..0ae77dc36 100644 --- a/src/services/attributes.js +++ b/src/services/attributes.ts @@ -1,17 +1,18 @@ "use strict"; -const searchService = require('./search/services/search'); -const sql = require('./sql'); -const becca = require('../becca/becca'); -const BAttribute = require('../becca/entities/battribute'); -const {formatAttrForSearch} = require('./attribute_formatter'); -const BUILTIN_ATTRIBUTES = require('./builtin_attributes'); +import searchService = require('./search/services/search'); +import sql = require('./sql'); +import becca = require('../becca/becca'); +import BAttribute = require('../becca/entities/battribute'); +import attributeFormatter = require('./attribute_formatter'); +import BUILTIN_ATTRIBUTES = require('./builtin_attributes'); +import BNote = require('../becca/entities/bnote'); +import { AttributeRow } from '../becca/entities/rows'; const ATTRIBUTE_TYPES = ['label', 'relation']; -/** @returns {BNote[]} */ -function getNotesWithLabel(name, value = undefined) { - const query = formatAttrForSearch({type: 'label', name, value}, value !== undefined); +function getNotesWithLabel(name: string, value?: string): BNote[] { + const query = attributeFormatter.formatAttrForSearch({type: 'label', name, value}, value !== undefined); return searchService.searchNotes(query, { includeArchivedNotes: true, ignoreHoistedNote: true @@ -19,8 +20,7 @@ function getNotesWithLabel(name, value = undefined) { } // TODO: should be in search service -/** @returns {BNote|null} */ -function getNoteWithLabel(name, value = undefined) { +function getNoteWithLabel(name: string, value?: string): BNote | null { // optimized version (~20 times faster) without using normal search, useful for e.g., finding date notes const attrs = becca.findAttributes('label', name); @@ -39,7 +39,7 @@ function getNoteWithLabel(name, value = undefined) { return null; } -function createLabel(noteId, name, value = "") { +function createLabel(noteId: string, name: string, value: string = "") { return createAttribute({ noteId: noteId, type: 'label', @@ -48,7 +48,7 @@ function createLabel(noteId, name, value = "") { }); } -function createRelation(noteId, name, targetNoteId) { +function createRelation(noteId: string, name: string, targetNoteId: string) { return createAttribute({ noteId: noteId, type: 'relation', @@ -57,14 +57,14 @@ function createRelation(noteId, name, targetNoteId) { }); } -function createAttribute(attribute) { +function createAttribute(attribute: AttributeRow) { return new BAttribute(attribute).save(); } -function getAttributeNames(type, nameLike) { +function getAttributeNames(type: string, nameLike: string) { nameLike = nameLike.toLowerCase(); - let names = sql.getColumn( + let names = sql.getColumn( `SELECT DISTINCT name FROM attributes WHERE isDeleted = 0 @@ -98,11 +98,11 @@ function getAttributeNames(type, nameLike) { return names; } -function isAttributeType(type) { +function isAttributeType(type: string): boolean { return ATTRIBUTE_TYPES.includes(type); } -function isAttributeDangerous(type, name) { +function isAttributeDangerous(type: string, name: string): boolean { return BUILTIN_ATTRIBUTES.some(attr => attr.type === type && attr.name.toLowerCase() === name.trim().toLowerCase() && @@ -110,7 +110,7 @@ function isAttributeDangerous(type, name) { ); } -module.exports = { +export = { getNotesWithLabel, getNoteWithLabel, createLabel, diff --git a/src/services/backend_script_api.js b/src/services/backend_script_api.js index 592946ee1..470bfe7ba 100644 --- a/src/services/backend_script_api.js +++ b/src/services/backend_script_api.js @@ -2,7 +2,7 @@ const log = require('./log'); const noteService = require('./notes'); const sql = require('./sql'); const utils = require('./utils'); -const attributeService = require('./attributes.js'); +const attributeService = require('./attributes'); const dateNoteService = require('./date_notes.js'); const treeService = require('./tree.js'); const config = require('./config'); diff --git a/src/services/date_notes.js b/src/services/date_notes.js index afced2392..1c187ef5a 100644 --- a/src/services/date_notes.js +++ b/src/services/date_notes.js @@ -1,7 +1,7 @@ "use strict"; const noteService = require('./notes'); -const attributeService = require('./attributes.js'); +const attributeService = require('./attributes'); const dateUtils = require('./date_utils'); const sql = require('./sql'); const protectedSessionService = require('./protected_session'); diff --git a/src/services/import/zip.js b/src/services/import/zip.js index ee7a828d1..08c663786 100644 --- a/src/services/import/zip.js +++ b/src/services/import/zip.js @@ -4,7 +4,7 @@ const BAttribute = require('../../becca/entities/battribute'); const utils = require('../../services/utils'); const log = require('../../services/log'); const noteService = require('../../services/notes'); -const attributeService = require('../../services/attributes.js'); +const attributeService = require('../../services/attributes'); const BBranch = require('../../becca/entities/bbranch'); const path = require('path'); const protectedSessionService = require('../protected_session'); diff --git a/src/services/scheduler.js b/src/services/scheduler.js index d4f40cfd7..aa0a3dfcd 100644 --- a/src/services/scheduler.js +++ b/src/services/scheduler.js @@ -3,7 +3,7 @@ const cls = require('./cls'); const sqlInit = require('./sql_init'); const config = require('./config'); const log = require('./log'); -const attributeService = require('../services/attributes.js'); +const attributeService = require('../services/attributes'); const protectedSessionService = require('../services/protected_session'); const hiddenSubtreeService = require('./hidden_subtree'); diff --git a/src/services/special_notes.js b/src/services/special_notes.js index a600261c2..ceedc05f6 100644 --- a/src/services/special_notes.js +++ b/src/services/special_notes.js @@ -1,4 +1,4 @@ -const attributeService = require('./attributes.js'); +const attributeService = require('./attributes'); const dateNoteService = require('./date_notes.js'); const becca = require('../becca/becca'); const noteService = require('./notes'); diff --git a/src/tools/generate_document.js b/src/tools/generate_document.js index 503fdc6ee..e2eff9bd5 100644 --- a/src/tools/generate_document.js +++ b/src/tools/generate_document.js @@ -6,7 +6,7 @@ require('../becca/entity_constructor'); const sqlInit = require('../services/sql_init'); const noteService = require('../services/notes'); -const attributeService = require('../services/attributes.js'); +const attributeService = require('../services/attributes'); const cls = require('../services/cls'); const cloningService = require('../services/cloning.js'); const loremIpsum = require('lorem-ipsum').loremIpsum;