diff --git a/src/share/content_renderer.js b/src/share/content_renderer.js index 89b3cea4a..20d8b0b7f 100644 --- a/src/share/content_renderer.js +++ b/src/share/content_renderer.js @@ -1,5 +1,5 @@ const { JSDOM } = require("jsdom"); -const shaca = require('./shaca/shaca.js'); +const shaca = require('./shaca/shaca'); const assetPath = require('../services/asset_path'); const shareRoot = require('./share_root'); const escapeHtml = require('escape-html'); diff --git a/src/share/routes.js b/src/share/routes.js index e540bf9e1..7c36d4b28 100644 --- a/src/share/routes.js +++ b/src/share/routes.js @@ -3,7 +3,7 @@ const path = require('path'); const safeCompare = require('safe-compare'); const ejs = require("ejs"); -const shaca = require('./shaca/shaca.js'); +const shaca = require('./shaca/shaca'); const shacaLoader = require('./shaca/shaca_loader.js'); const shareRoot = require('./share_root'); const contentRenderer = require('./content_renderer.js'); diff --git a/src/share/shaca/entities/abstract_shaca_entity.ts b/src/share/shaca/entities/abstract_shaca_entity.ts index 707db9441..20dba31ff 100644 --- a/src/share/shaca/entities/abstract_shaca_entity.ts +++ b/src/share/shaca/entities/abstract_shaca_entity.ts @@ -1,10 +1,11 @@ -let shaca: any; +import Shaca from "../shaca-interface"; + +let shaca: Shaca; class AbstractShacaEntity { - // FIXME: Use right data type once we convert Shaca as well. - get shaca(): any { + get shaca(): Shaca { if (!shaca) { - shaca = require('../shaca.js'); + shaca = require('../shaca'); } return shaca; diff --git a/src/share/shaca/entities/snote.ts b/src/share/shaca/entities/snote.ts index 5f924938d..f91949aef 100644 --- a/src/share/shaca/entities/snote.ts +++ b/src/share/shaca/entities/snote.ts @@ -32,7 +32,7 @@ class SNote extends AbstractShacaEntity { private __attributeCache: SAttribute[] | null; private __inheritableAttributeCache: SAttribute[] | null; targetRelations: SAttribute[]; - private attachments: SAttachment[]; + attachments: SAttachment[]; constructor([noteId, title, type, mime, blobId, utcDateModified, isProtected]: NoteRow) { super(); diff --git a/src/share/shaca/shaca.js b/src/share/shaca/shaca-interface.ts similarity index 55% rename from src/share/shaca/shaca.js rename to src/share/shaca/shaca-interface.ts index 4e1c3a1ba..751412880 100644 --- a/src/share/shaca/shaca.js +++ b/src/share/shaca/shaca-interface.ts @@ -1,45 +1,49 @@ -"use strict"; +import SAttachment = require("./entities/sattachment"); +import SAttribute = require("./entities/sattribute"); +import SBranch = require("./entities/sbranch"); +import SNote = require("./entities/snote"); + +export default class Shaca { + + notes!: Record; + branches!: Record; + childParentToBranch!: Record; + private attributes!: Record; + attachments!: Record; + private aliasToNote!: Record; + private shareRootNote!: SNote | null; + /** true if the index of all shared subtrees is enabled */ + private shareIndexEnabled!: boolean; + private loaded!: boolean; -class Shaca { constructor() { this.reset(); } reset() { - /** @type {Object.} */ this.notes = {}; - /** @type {Object.} */ this.branches = {}; - /** @type {Object.} */ this.childParentToBranch = {}; - /** @type {Object.} */ this.attributes = {}; - /** @type {Object.} */ this.attachments = {}; - /** @type {Object.} */ this.aliasToNote = {}; - /** @type {SNote|null} */ this.shareRootNote = null; - /** @type {boolean} true if the index of all shared subtrees is enabled */ this.shareIndexEnabled = false; this.loaded = false; } - /** @returns {SNote|null} */ - getNote(noteId) { + getNote(noteId: string) { return this.notes[noteId]; } - /** @returns {boolean} */ - hasNote(noteId) { + hasNote(noteId: string) { return noteId in this.notes; } - /** @returns {SNote[]} */ - getNotes(noteIds, ignoreMissing = false) { + getNotes(noteIds: string[], ignoreMissing = false) { const filteredNotes = []; for (const noteId of noteIds) { @@ -59,27 +63,23 @@ class Shaca { return filteredNotes; } - /** @returns {SBranch|null} */ - getBranch(branchId) { + getBranch(branchId: string) { return this.branches[branchId]; } - /** @returns {SBranch|null} */ - getBranchFromChildAndParent(childNoteId, parentNoteId) { + getBranchFromChildAndParent(childNoteId: string, parentNoteId: string) { return this.childParentToBranch[`${childNoteId}-${parentNoteId}`]; } - /** @returns {SAttribute|null} */ - getAttribute(attributeId) { + getAttribute(attributeId: string) { return this.attributes[attributeId]; } - /** @returns {SAttachment|null} */ - getAttachment(attachmentId) { + getAttachment(attachmentId: string) { return this.attachments[attachmentId]; } - getEntity(entityName, entityId) { + getEntity(entityName: string, entityId: string) { if (!entityName || !entityId) { return null; } @@ -91,10 +91,6 @@ class Shaca { .replace('_', '') ); - return this[camelCaseEntityName][entityId]; + return (this as any)[camelCaseEntityName][entityId]; } -} - -const shaca = new Shaca(); - -module.exports = shaca; +} \ No newline at end of file diff --git a/src/share/shaca/shaca.ts b/src/share/shaca/shaca.ts new file mode 100644 index 000000000..d256b17e1 --- /dev/null +++ b/src/share/shaca/shaca.ts @@ -0,0 +1,7 @@ +"use strict"; + +import Shaca from "./shaca-interface"; + +const shaca = new Shaca(); + +export = shaca; diff --git a/src/share/shaca/shaca_loader.js b/src/share/shaca/shaca_loader.js index 6c7c802a5..6b8e59e5e 100644 --- a/src/share/shaca/shaca_loader.js +++ b/src/share/shaca/shaca_loader.js @@ -1,7 +1,7 @@ "use strict"; const sql = require('../sql'); -const shaca = require('./shaca.js'); +const shaca = require('./shaca'); const log = require('../../services/log'); const SNote = require('./entities/snote'); const SBranch = require('./entities/sbranch');