From bf29b30004ffc3245e55cfdc556daf25a7d16f22 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 18 Jul 2024 23:06:08 +0300 Subject: [PATCH] server-esm: Fix some more service imports --- src/becca/entities/brevision.ts | 5 ++++- src/routes/api/image.ts | 6 +++--- src/routes/api/sync.ts | 3 ++- src/services/entity_changes.ts | 3 +-- src/services/export/zip.ts | 4 ++-- src/services/image.ts | 1 - src/services/notes.ts | 13 ++++++++----- src/services/request.ts | 7 +++---- src/services/sql_init.ts | 8 +++----- 9 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/becca/entities/brevision.ts b/src/becca/entities/brevision.ts index ae3b68c70..43c7e1a3e 100644 --- a/src/becca/entities/brevision.ts +++ b/src/becca/entities/brevision.ts @@ -8,6 +8,7 @@ import AbstractBeccaEntity from "./abstract_becca_entity.js"; import sql from "../../services/sql.js"; import BAttachment from "./battachment.js"; import { AttachmentRow, RevisionRow } from './rows'; +import eraseService from "../../services/erase.js"; interface ContentOpts { /** will also save this BRevision entity */ @@ -164,7 +165,9 @@ class BRevision extends AbstractBeccaEntity { * Revisions are not soft-deletable, they are immediately hard-deleted (erased). */ eraseRevision() { - require('../../services/erase.js').eraseRevisions([this.revisionId]); + if (this.revisionId) { + eraseService.eraseRevisions([this.revisionId]); + } } beforeSaving() { diff --git a/src/routes/api/image.ts b/src/routes/api/image.ts index 8484eb673..823ac87b6 100644 --- a/src/routes/api/image.ts +++ b/src/routes/api/image.ts @@ -2,12 +2,12 @@ import imageService from "../../services/image.js"; import becca from "../../becca/becca.js"; -const RESOURCE_DIR = require('../../services/resource_dir').RESOURCE_DIR; import fs from "fs"; import { Request, Response } from 'express'; import BNote from "../../becca/entities/bnote.js"; import BRevision from "../../becca/entities/brevision.js"; import { AppRequest } from '../route-interface'; +import resource_dir from "../../services/resource_dir.js"; function returnImageFromNote(req: Request, res: Response) { const image = becca.getNote(req.params.noteId); @@ -24,7 +24,7 @@ function returnImageFromRevision(req: Request, res: Response) { function returnImageInt(image: BNote | BRevision | null, res: Response) { if (!image) { res.set('Content-Type', 'image/png'); - return res.send(fs.readFileSync(`${RESOURCE_DIR}/db/image-deleted.png`)); + return res.send(fs.readFileSync(`${resource_dir.RESOURCE_DIR}/db/image-deleted.png`)); } else if (!["image", "canvas", "mermaid"].includes(image.type)) { return res.sendStatus(400); } @@ -68,7 +68,7 @@ function returnAttachedImage(req: Request, res: Response) { if (!attachment) { res.set('Content-Type', 'image/png'); - return res.send(fs.readFileSync(`${RESOURCE_DIR}/db/image-deleted.png`)); + return res.send(fs.readFileSync(`${resource_dir.RESOURCE_DIR}/db/image-deleted.png`)); } if (!["image"].includes(attachment.role)) { diff --git a/src/routes/api/sync.ts b/src/routes/api/sync.ts index 183c79878..646a514f4 100644 --- a/src/routes/api/sync.ts +++ b/src/routes/api/sync.ts @@ -14,6 +14,7 @@ import ws from "../../services/ws.js"; import { Request } from 'express'; import { EntityChange, EntityChangeRecord } from '../../services/entity_changes_interface'; import ValidationError from "../../errors/validation_error.js"; +import consistencyChecksService from "../../services/consistency_checks.js"; async function testSync() { try { @@ -206,7 +207,7 @@ function queueSector(req: Request) { } function checkEntityChanges() { - require('../../services/consistency_checks').runEntityChangesChecks(); + consistencyChecksService.runEntityChangesChecks(); } export default { diff --git a/src/services/entity_changes.ts b/src/services/entity_changes.ts index ece4fb1b2..06c380f38 100644 --- a/src/services/entity_changes.ts +++ b/src/services/entity_changes.ts @@ -8,6 +8,7 @@ import becca from "../becca/becca.js"; import blobService from "../services/blob.js"; import { EntityChange } from './entity_changes_interface'; import type { Blob } from "./blob-interface"; +import eventService from "./events.js"; let maxEntityChangeId = 0; @@ -57,8 +58,6 @@ function putNoteReorderingEntityChange(parentNoteId: string, componentId?: strin instanceId }); - const eventService = require('./events'); - eventService.emit(eventService.ENTITY_CHANGED, { entityName: 'note_reordering', entity: sql.getMap(`SELECT branchId, notePosition FROM branches WHERE isDeleted = 0 AND parentNoteId = ?`, [parentNoteId]) diff --git a/src/services/export/zip.ts b/src/services/export/zip.ts index 4838cb957..823029274 100644 --- a/src/services/export/zip.ts +++ b/src/services/export/zip.ts @@ -11,7 +11,6 @@ import protectedSessionService from "../protected_session.js"; import sanitize from "sanitize-filename"; import fs from "fs"; import becca from "../../becca/becca.js"; -const RESOURCE_DIR = require('../../services/resource_dir').RESOURCE_DIR; import archiver from "archiver"; import log from "../log.js"; import TaskContext from "../task_context.js"; @@ -21,6 +20,7 @@ import AttachmentMeta from "../meta/attachment_meta.js"; import AttributeMeta from "../meta/attribute_meta.js"; import BBranch from "../../becca/entities/bbranch.js"; import { Response } from 'express'; +import resource_dir from "../resource_dir.js"; async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "html" | "markdown", res: Response | fs.WriteStream, setHeaders = true) { if (!['html', 'markdown'].includes(format)) { @@ -473,7 +473,7 @@ ${markdownContent}`; } function saveCss(rootMeta: NoteMeta, cssMeta: NoteMeta) { - const cssContent = fs.readFileSync(`${RESOURCE_DIR}/libraries/ckeditor/ckeditor-content.css`); + const cssContent = fs.readFileSync(`${resource_dir.RESOURCE_DIR}/libraries/ckeditor/ckeditor-content.css`); archive.append(cssContent, { name: cssMeta.dataFileName }); } diff --git a/src/services/image.ts b/src/services/image.ts index 85035e6fb..5bef79ac9 100644 --- a/src/services/image.ts +++ b/src/services/image.ts @@ -156,7 +156,6 @@ function saveImageToAttachment(noteId: string, uploadBuffer: Buffer, originalNam setTimeout(() => { sql.transactional(() => { const note = becca.getNoteOrThrow(noteId); - const noteService = require('../services/notes'); noteService.asyncPostProcessContent(note, note.getContent()); // to mark an unused attachment for deletion }); }, 5000); diff --git a/src/services/notes.ts b/src/services/notes.ts index feefab45a..20df9948a 100644 --- a/src/services/notes.ts +++ b/src/services/notes.ts @@ -26,6 +26,7 @@ import html2plaintext from "html2plaintext"; import { AttachmentRow, AttributeRow, BranchRow, NoteRow, NoteType } from '../becca/entities/rows'; import TaskContext from "./task_context.js"; import { NoteParams } from './note-interface'; +import imageService from "./image.js"; interface FoundLink { name: "imageLink" | "internalLink" | "includeNoteLink" | "relationMapLink", @@ -466,7 +467,7 @@ async function downloadImage(noteId: string, imageUrl: string) { const unescapedUrl = utils.unescapeHtml(imageUrl); try { - let imageBuffer; + let imageBuffer: Buffer; if (imageUrl.toLowerCase().startsWith("file://")) { imageBuffer = await new Promise((res, rej) => { @@ -487,10 +488,13 @@ async function downloadImage(noteId: string, imageUrl: string) { const parsedUrl = url.parse(unescapedUrl); const title = path.basename(parsedUrl.pathname || ""); - const imageService = require('../services/image'); const attachment = imageService.saveImageToAttachment(noteId, imageBuffer, title, true, true); - - imageUrlToAttachmentIdMapping[imageUrl] = attachment.attachmentId; + + if (attachment.attachmentId) { + imageUrlToAttachmentIdMapping[imageUrl] = attachment.attachmentId; + } else { + log.error(`Download of '${imageUrl}' due to no attachment ID.`); + } log.info(`Download of '${imageUrl}' succeeded and was saved as image attachment '${attachment.attachmentId}' of note '${noteId}'`); } @@ -520,7 +524,6 @@ function downloadImages(noteId: string, content: string) { const imageBase64 = url.substr(inlineImageMatch[0].length); const imageBuffer = Buffer.from(imageBase64, 'base64'); - const imageService = require('../services/image'); const attachment = imageService.saveImageToAttachment(noteId, imageBuffer, "inline image", true, true); const encodedTitle = encodeURIComponent(attachment.title); diff --git a/src/services/request.ts b/src/services/request.ts index 56aea5b1e..fe057024c 100644 --- a/src/services/request.ts +++ b/src/services/request.ts @@ -137,7 +137,7 @@ function exec(opts: ExecOpts): Promise { }); } -function getImage(imageUrl: string) { +function getImage(imageUrl: string): Promise { const proxyConf = syncOptions.getSyncProxy(); const opts: ClientOpts = { method: 'GET', @@ -149,7 +149,7 @@ function getImage(imageUrl: string) { const proxyAgent = getProxyAgent(opts); const parsedTargetUrl = url.parse(opts.url); - return new Promise((resolve, reject) => { + return new Promise((resolve, reject) => { try { const request = client.request({ method: opts.method, @@ -181,8 +181,7 @@ function getImage(imageUrl: string) { }); request.end(undefined); - } - catch (e: any) { + } catch (e: any) { reject(generateError(opts, e.message)); } }); diff --git a/src/services/sql_init.ts b/src/services/sql_init.ts index 1c66723a0..fffccb13a 100644 --- a/src/services/sql_init.ts +++ b/src/services/sql_init.ts @@ -11,6 +11,9 @@ import migrationService from "./migration.js"; import cls from "./cls.js"; import config from "./config.js"; import { OptionRow } from '../becca/entities/rows'; +import optionsInitService from "./options_init.js"; +import BNote from "../becca/entities/bnote.js"; +import BBranch from "../becca/entities/bbranch.js"; const dbReady = utils.deferred(); @@ -63,9 +66,6 @@ async function createInitialDatabase() { require('../becca/becca_loader').load(); - const BNote = require('../becca/entities/bnote'); - const BBranch = require('../becca/entities/bbranch'); - log.info("Creating root note ..."); rootNote = new BNote({ @@ -84,8 +84,6 @@ async function createInitialDatabase() { notePosition: 10 }).save(); - const optionsInitService = require('./options_init'); - optionsInitService.initDocumentOptions(); optionsInitService.initNotSyncedOptions(true, {}); optionsInitService.initStartupOptions();