chore(core): fix incompatibility with Uint8Array

This commit is contained in:
Elian Doran 2026-01-06 12:34:10 +02:00
parent 321fcf34f2
commit bbfef0315f
No known key found for this signature in database
5 changed files with 22 additions and 16 deletions

View File

@ -1,7 +1,7 @@
import { EditedNotesResponse, RevisionItem, RevisionPojo } from "@triliumnext/commons";
import { becca_service, blob as blobService, NotePojo } from "@triliumnext/core";
import { becca_service, binary_utils, blob as blobService, NotePojo } from "@triliumnext/core";
import type { Request, Response } from "express";
import path from "path";
@ -55,7 +55,7 @@ function getRevision(req: Request) {
revision.content = revision.getContent();
if (revision.content && revision.type === "image") {
revision.content = revision.content.toString("base64");
revision.content = binary_utils.encodeBase64(revision.content);
}
}

View File

@ -1,7 +1,7 @@
import type { EntityChange, EntityChangeRecord, EntityRow } from "@triliumnext/commons";
import { becca_loader, entity_constructor } from "@triliumnext/core";
import { becca_loader, binary_utils, entity_constructor } from "@triliumnext/core";
import becca from "../becca/becca.js";
import appInfo from "./app_info.js";
@ -360,7 +360,7 @@ function getEntityChangeRow(entityChange: EntityChange) {
}
if (entityRow.content) {
entityRow.content = entityRow.content.toString("base64");
entityRow.content = binary_utils.encodeBase64(entityRow.content);
}
}

View File

@ -1,6 +1,7 @@
import { BlobRow } from "@triliumnext/commons";
import { binary_utils } from "@triliumnext/core";
import utils from "../../../services/utils.js";
import sql from "../../sql.js";
@ -43,18 +44,18 @@ class SAttachment extends AbstractShacaEntity {
if (!row) {
if (silentNotFoundError) {
return undefined;
}
}
throw new Error(`Cannot find blob for attachment '${this.attachmentId}', blob '${this.blobId}'`);
}
const content = row.content;
if (this.hasStringContent()) {
return content === null ? "" : content.toString("utf-8");
}
return content === null ? "" : binary_utils.decodeUtf8(content);
}
return content;
}
/** @returns true if the attachment has string content (not binary) */

View File

@ -1,5 +1,5 @@
import { BlobRow } from "@triliumnext/commons";
import { NOTE_TYPE_ICONS } from "@triliumnext/core";
import { binary_utils, NOTE_TYPE_ICONS } from "@triliumnext/core";
import escape from "escape-html";
import utils from "../../../services/utils.js";
@ -107,7 +107,7 @@ class SNote extends AbstractShacaEntity {
const content = row.content;
if (this.hasStringContent()) {
return content === null ? "" : content.toString("utf-8");
return content === null ? "" : binary_utils.decodeUtf8(content);
}
return content;
}

View File

@ -8,7 +8,8 @@ export function concat2(a: Uint8Array, b: Uint8Array): Uint8Array {
return out;
}
export function encodeBase64(bytes: Uint8Array): string {
export function encodeBase64(stringOrBuffer: string | Uint8Array): string {
const bytes = wrapStringOrBuffer(stringOrBuffer);
let binary = "";
const len = bytes.length;
@ -31,12 +32,16 @@ export function decodeBase64(base64: string): Uint8Array {
return bytes;
}
export function decodeUtf8(bytes: Uint8Array) {
return utf8Decoder.decode(bytes);
export function decodeUtf8(stringOrBuffer: string | Uint8Array) {
if (typeof stringOrBuffer === "string") {
return stringOrBuffer;
} else {
return utf8Decoder.decode(stringOrBuffer);
}
}
export function encodeUtf8(string: string) {
return utf8Encoder.encode(string);
export function encodeUtf8(string: string | Uint8Array) {
return utf8Encoder.encode(wrapStringOrBuffer(string));
}
export function unwrapStringOrBuffer(stringOrBuffer: string | Uint8Array) {