mirror of
https://github.com/zadam/trilium.git
synced 2025-10-21 15:49:00 +02:00
feat(server): replace jsdom
This commit is contained in:
parent
c0ea441c59
commit
7e79d907be
@ -15,7 +15,6 @@ async function main() {
|
|||||||
|
|
||||||
// Copy node modules dependencies
|
// Copy node modules dependencies
|
||||||
build.copyNodeModules([ "better-sqlite3", "bindings", "file-uri-to-path", "@electron/remote" ]);
|
build.copyNodeModules([ "better-sqlite3", "bindings", "file-uri-to-path", "@electron/remote" ]);
|
||||||
build.copy("/node_modules/jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js", "xhr-sync-worker.js");
|
|
||||||
build.copy("/node_modules/ckeditor5/dist/ckeditor5-content.css", "ckeditor5-content.css");
|
build.copy("/node_modules/ckeditor5/dist/ckeditor5-content.css", "ckeditor5-content.css");
|
||||||
|
|
||||||
// Integrate the client.
|
// Integrate the client.
|
||||||
|
@ -25,7 +25,8 @@
|
|||||||
"docker-start-rootless-alpine": "pnpm docker-build-rootless-alpine && docker run -p 8081:8080 triliumnext-rootless-alpine"
|
"docker-start-rootless-alpine": "pnpm docker-build-rootless-alpine && docker run -p 8081:8080 triliumnext-rootless-alpine"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"better-sqlite3": "12.4.1"
|
"better-sqlite3": "12.4.1",
|
||||||
|
"node-html-parser": "7.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@anthropic-ai/sdk": "0.64.0",
|
"@anthropic-ai/sdk": "0.64.0",
|
||||||
@ -49,7 +50,6 @@
|
|||||||
"@types/html": "1.0.4",
|
"@types/html": "1.0.4",
|
||||||
"@types/ini": "4.1.1",
|
"@types/ini": "4.1.1",
|
||||||
"@types/js-yaml": "4.0.9",
|
"@types/js-yaml": "4.0.9",
|
||||||
"@types/jsdom": "21.1.7",
|
|
||||||
"@types/mime-types": "3.0.1",
|
"@types/mime-types": "3.0.1",
|
||||||
"@types/multer": "2.0.0",
|
"@types/multer": "2.0.0",
|
||||||
"@types/safe-compare": "1.1.2",
|
"@types/safe-compare": "1.1.2",
|
||||||
@ -105,7 +105,6 @@
|
|||||||
"is-svg": "6.1.0",
|
"is-svg": "6.1.0",
|
||||||
"jimp": "1.6.0",
|
"jimp": "1.6.0",
|
||||||
"js-yaml": "4.1.0",
|
"js-yaml": "4.1.0",
|
||||||
"jsdom": "26.1.0",
|
|
||||||
"marked": "16.3.0",
|
"marked": "16.3.0",
|
||||||
"mime-types": "3.0.1",
|
"mime-types": "3.0.1",
|
||||||
"multer": "2.0.2",
|
"multer": "2.0.2",
|
||||||
|
@ -11,7 +11,6 @@ async function main() {
|
|||||||
|
|
||||||
// Copy node modules dependencies
|
// Copy node modules dependencies
|
||||||
build.copyNodeModules([ "better-sqlite3", "bindings", "file-uri-to-path" ]);
|
build.copyNodeModules([ "better-sqlite3", "bindings", "file-uri-to-path" ]);
|
||||||
build.copy("/node_modules/jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js", "xhr-sync-worker.js");
|
|
||||||
build.copy("/node_modules/ckeditor5/dist/ckeditor5-content.css", "ckeditor5-content.css");
|
build.copy("/node_modules/ckeditor5/dist/ckeditor5-content.css", "ckeditor5-content.css");
|
||||||
|
|
||||||
// Integrate the client.
|
// Integrate the client.
|
||||||
|
@ -2,7 +2,7 @@ import becca from "./becca.js";
|
|||||||
import log from "../services/log.js";
|
import log from "../services/log.js";
|
||||||
import beccaService from "./becca_service.js";
|
import beccaService from "./becca_service.js";
|
||||||
import dateUtils from "../services/date_utils.js";
|
import dateUtils from "../services/date_utils.js";
|
||||||
import { JSDOM } from "jsdom";
|
import { parse } from "node-html-parser";
|
||||||
import type BNote from "./entities/bnote.js";
|
import type BNote from "./entities/bnote.js";
|
||||||
import { SimilarNote } from "@triliumnext/commons";
|
import { SimilarNote } from "@triliumnext/commons";
|
||||||
|
|
||||||
@ -123,10 +123,10 @@ export function buildRewardMap(note: BNote) {
|
|||||||
|
|
||||||
if (note.type === "text" && note.isDecrypted) {
|
if (note.type === "text" && note.isDecrypted) {
|
||||||
const content = note.getContent();
|
const content = note.getContent();
|
||||||
const dom = new JSDOM(content);
|
const dom = parse(content.toString());
|
||||||
|
|
||||||
const addHeadingsToRewardMap = (elName: string, rewardFactor: number) => {
|
const addHeadingsToRewardMap = (elName: string, rewardFactor: number) => {
|
||||||
for (const el of dom.window.document.querySelectorAll(elName)) {
|
for (const el of dom.querySelectorAll(elName)) {
|
||||||
addToRewardMap(el.textContent, rewardFactor);
|
addToRewardMap(el.textContent, rewardFactor);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import type { Request } from "express";
|
import type { Request } from "express";
|
||||||
import jsdom from "jsdom";
|
import { parse } from "node-html-parser";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
|
|
||||||
import type BNote from "../../becca/entities/bnote.js";
|
import type BNote from "../../becca/entities/bnote.js";
|
||||||
@ -16,7 +16,6 @@ import log from "../../services/log.js";
|
|||||||
import noteService from "../../services/notes.js";
|
import noteService from "../../services/notes.js";
|
||||||
import utils from "../../services/utils.js";
|
import utils from "../../services/utils.js";
|
||||||
import ws from "../../services/ws.js";
|
import ws from "../../services/ws.js";
|
||||||
const { JSDOM } = jsdom;
|
|
||||||
|
|
||||||
interface Image {
|
interface Image {
|
||||||
src: string;
|
src: string;
|
||||||
@ -181,10 +180,10 @@ export function processContent(images: Image[], note: BNote, content: string) {
|
|||||||
rewrittenContent = `<p>${rewrittenContent}</p>`;
|
rewrittenContent = `<p>${rewrittenContent}</p>`;
|
||||||
}
|
}
|
||||||
// Create a JSDOM object from the existing HTML content
|
// Create a JSDOM object from the existing HTML content
|
||||||
const dom = new JSDOM(rewrittenContent);
|
const dom = parse(rewrittenContent);
|
||||||
|
|
||||||
// Get the content inside the body tag and serialize it
|
// Get the content inside the body tag and serialize it
|
||||||
rewrittenContent = dom.window.document.body.innerHTML;
|
rewrittenContent = dom.querySelector("body")?.innerHTML ?? "";
|
||||||
|
|
||||||
return rewrittenContent;
|
return rewrittenContent;
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
import becca from "../../becca/becca.js";
|
import becca from "../../becca/becca.js";
|
||||||
import { JSDOM } from "jsdom";
|
|
||||||
import type BNote from "../../becca/entities/bnote.js";
|
import type BNote from "../../becca/entities/bnote.js";
|
||||||
import type BAttribute from "../../becca/entities/battribute.js";
|
import type BAttribute from "../../becca/entities/battribute.js";
|
||||||
import type { Request } from "express";
|
import type { Request } from "express";
|
||||||
|
import { HTMLElement, parse, TextNode } from "node-html-parser";
|
||||||
import { BacklinkCountResponse, BacklinksResponse } from "@triliumnext/commons";
|
import { BacklinkCountResponse, BacklinksResponse } from "@triliumnext/commons";
|
||||||
|
|
||||||
interface TreeLink {
|
interface TreeLink {
|
||||||
@ -241,7 +241,7 @@ function updateDescendantCountMapForSearch(noteIdToDescendantCountMap: Record<st
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeImages(document: Document) {
|
function removeImages(document: HTMLElement) {
|
||||||
const images = document.getElementsByTagName("img");
|
const images = document.getElementsByTagName("img");
|
||||||
while (images && images.length > 0) {
|
while (images && images.length > 0) {
|
||||||
images[0]?.parentNode?.removeChild(images[0]);
|
images[0]?.parentNode?.removeChild(images[0]);
|
||||||
@ -249,11 +249,11 @@ function removeImages(document: Document) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const EXCERPT_CHAR_LIMIT = 200;
|
const EXCERPT_CHAR_LIMIT = 200;
|
||||||
type ElementOrText = Element | Text;
|
type ElementOrText = HTMLElement | TextNode;
|
||||||
|
|
||||||
export function findExcerpts(sourceNote: BNote, referencedNoteId: string) {
|
export function findExcerpts(sourceNote: BNote, referencedNoteId: string) {
|
||||||
const html = sourceNote.getContent();
|
const html = sourceNote.getContent();
|
||||||
const document = new JSDOM(html).window.document;
|
const document = parse(html.toString());
|
||||||
|
|
||||||
const excerpts: string[] = [];
|
const excerpts: string[] = [];
|
||||||
|
|
||||||
@ -270,8 +270,8 @@ export function findExcerpts(sourceNote: BNote, referencedNoteId: string) {
|
|||||||
|
|
||||||
let centerEl: HTMLElement = linkEl;
|
let centerEl: HTMLElement = linkEl;
|
||||||
|
|
||||||
while (centerEl.tagName !== "BODY" && centerEl.parentElement && (centerEl.parentElement?.textContent?.length || 0) <= EXCERPT_CHAR_LIMIT) {
|
while (centerEl.tagName !== "BODY" && centerEl.parentNode && (centerEl.parentNode?.textContent?.length || 0) <= EXCERPT_CHAR_LIMIT) {
|
||||||
centerEl = centerEl.parentElement;
|
centerEl = centerEl.parentNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
const excerptEls: ElementOrText[] = [centerEl];
|
const excerptEls: ElementOrText[] = [centerEl];
|
||||||
@ -282,7 +282,7 @@ export function findExcerpts(sourceNote: BNote, referencedNoteId: string) {
|
|||||||
while (excerptLength < EXCERPT_CHAR_LIMIT) {
|
while (excerptLength < EXCERPT_CHAR_LIMIT) {
|
||||||
let added = false;
|
let added = false;
|
||||||
|
|
||||||
const prev: Element | null = left.previousElementSibling;
|
const prev: HTMLElement | null = left.previousElementSibling;
|
||||||
|
|
||||||
if (prev) {
|
if (prev) {
|
||||||
const prevText = prev.textContent || "";
|
const prevText = prev.textContent || "";
|
||||||
@ -290,7 +290,7 @@ export function findExcerpts(sourceNote: BNote, referencedNoteId: string) {
|
|||||||
if (prevText.length + excerptLength > EXCERPT_CHAR_LIMIT) {
|
if (prevText.length + excerptLength > EXCERPT_CHAR_LIMIT) {
|
||||||
const prefix = prevText.substr(prevText.length - (EXCERPT_CHAR_LIMIT - excerptLength));
|
const prefix = prevText.substr(prevText.length - (EXCERPT_CHAR_LIMIT - excerptLength));
|
||||||
|
|
||||||
const textNode = document.createTextNode(`…${prefix}`);
|
const textNode = new TextNode(`…${prefix}`);
|
||||||
excerptEls.unshift(textNode);
|
excerptEls.unshift(textNode);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -302,7 +302,7 @@ export function findExcerpts(sourceNote: BNote, referencedNoteId: string) {
|
|||||||
added = true;
|
added = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const next: Element | null = right.nextElementSibling;
|
const next: HTMLElement | null = right.nextElementSibling;
|
||||||
|
|
||||||
if (next) {
|
if (next) {
|
||||||
const nextText = next.textContent;
|
const nextText = next.textContent;
|
||||||
@ -310,7 +310,7 @@ export function findExcerpts(sourceNote: BNote, referencedNoteId: string) {
|
|||||||
if (nextText && nextText.length + excerptLength > EXCERPT_CHAR_LIMIT) {
|
if (nextText && nextText.length + excerptLength > EXCERPT_CHAR_LIMIT) {
|
||||||
const suffix = nextText.substr(nextText.length - (EXCERPT_CHAR_LIMIT - excerptLength));
|
const suffix = nextText.substr(nextText.length - (EXCERPT_CHAR_LIMIT - excerptLength));
|
||||||
|
|
||||||
const textNode = document.createTextNode(`${suffix}…`);
|
const textNode = new TextNode(`${suffix}…`);
|
||||||
excerptEls.push(textNode);
|
excerptEls.push(textNode);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -327,7 +327,7 @@ export function findExcerpts(sourceNote: BNote, referencedNoteId: string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const excerptWrapper = document.createElement("div");
|
const excerptWrapper = new HTMLElement("div", {});
|
||||||
excerptWrapper.classList.add("ck-content");
|
excerptWrapper.classList.add("ck-content");
|
||||||
excerptWrapper.classList.add("backlink-excerpt");
|
excerptWrapper.classList.add("backlink-excerpt");
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { JSDOM } from "jsdom";
|
import { parse, HTMLElement } from "node-html-parser";
|
||||||
import shaca from "./shaca/shaca.js";
|
import shaca from "./shaca/shaca.js";
|
||||||
import assetPath from "../services/asset_path.js";
|
import assetPath from "../services/asset_path.js";
|
||||||
import shareRoot from "./share_root.js";
|
import shareRoot from "./share_root.js";
|
||||||
@ -65,8 +65,8 @@ function renderIndex(result: Result) {
|
|||||||
result.content += "</ul>";
|
result.content += "</ul>";
|
||||||
}
|
}
|
||||||
|
|
||||||
export function renderText(result: Result, note: SNote) {
|
function renderText(result: Result, note: SNote) {
|
||||||
const document = new JSDOM(result.content || "").window.document;
|
const document = parse(result.content?.toString() || "");
|
||||||
|
|
||||||
// Process include notes.
|
// Process include notes.
|
||||||
for (const includeNoteEl of document.querySelectorAll("section.include-note")) {
|
for (const includeNoteEl of document.querySelectorAll("section.include-note")) {
|
||||||
@ -79,11 +79,13 @@ export function renderText(result: Result, note: SNote) {
|
|||||||
const includedResult = getContent(note);
|
const includedResult = getContent(note);
|
||||||
if (typeof includedResult.content !== "string") continue;
|
if (typeof includedResult.content !== "string") continue;
|
||||||
|
|
||||||
const includedDocument = new JSDOM(includedResult.content).window.document;
|
const includedDocument = parse(includedResult.content).querySelector("body");
|
||||||
includeNoteEl.replaceWith(...includedDocument.body.childNodes);
|
if (includedDocument) {
|
||||||
|
includeNoteEl.replaceWith(includedDocument);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
result.isEmpty = document.body.textContent?.trim().length === 0 && document.querySelectorAll("img").length === 0;
|
result.isEmpty = document.querySelector("body")?.textContent?.trim().length === 0 && document.querySelectorAll("img").length === 0;
|
||||||
|
|
||||||
if (!result.isEmpty) {
|
if (!result.isEmpty) {
|
||||||
for (const linkEl of document.querySelectorAll("a")) {
|
for (const linkEl of document.querySelectorAll("a")) {
|
||||||
@ -99,7 +101,7 @@ export function renderText(result: Result, note: SNote) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
result.content = document.body.innerHTML;
|
result.content = document.querySelector("body")?.innerHTML ?? "";
|
||||||
|
|
||||||
if (result.content.includes(`<span class="math-tex">`)) {
|
if (result.content.includes(`<span class="math-tex">`)) {
|
||||||
result.header += `
|
result.header += `
|
||||||
@ -120,7 +122,7 @@ document.addEventListener("DOMContentLoaded", function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleAttachmentLink(linkEl: HTMLAnchorElement, href: string) {
|
function handleAttachmentLink(linkEl: HTMLElement, href: string) {
|
||||||
const linkRegExp = /attachmentId=([a-zA-Z0-9_]+)/g;
|
const linkRegExp = /attachmentId=([a-zA-Z0-9_]+)/g;
|
||||||
let attachmentMatch;
|
let attachmentMatch;
|
||||||
if ((attachmentMatch = linkRegExp.exec(href))) {
|
if ((attachmentMatch = linkRegExp.exec(href))) {
|
||||||
@ -131,7 +133,8 @@ function handleAttachmentLink(linkEl: HTMLAnchorElement, href: string) {
|
|||||||
linkEl.setAttribute("href", `api/attachments/${attachmentId}/download`);
|
linkEl.setAttribute("href", `api/attachments/${attachmentId}/download`);
|
||||||
linkEl.classList.add(`attachment-link`);
|
linkEl.classList.add(`attachment-link`);
|
||||||
linkEl.classList.add(`role-${attachment.role}`);
|
linkEl.classList.add(`role-${attachment.role}`);
|
||||||
linkEl.innerText = attachment.title;
|
linkEl.childNodes.length = 0;
|
||||||
|
linkEl.append(attachment.title);
|
||||||
} else {
|
} else {
|
||||||
linkEl.removeAttribute("href");
|
linkEl.removeAttribute("href");
|
||||||
}
|
}
|
||||||
@ -164,11 +167,8 @@ export function renderCode(result: Result) {
|
|||||||
if (typeof result.content !== "string" || !result.content?.trim()) {
|
if (typeof result.content !== "string" || !result.content?.trim()) {
|
||||||
result.isEmpty = true;
|
result.isEmpty = true;
|
||||||
} else {
|
} else {
|
||||||
const document = new JSDOM().window.document;
|
const preEl = new HTMLElement("pre", {});
|
||||||
|
preEl.append(result.content);
|
||||||
const preEl = document.createElement("pre");
|
|
||||||
preEl.appendChild(document.createTextNode(result.content));
|
|
||||||
|
|
||||||
result.content = preEl.outerHTML;
|
result.content = preEl.outerHTML;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
39
pnpm-lock.yaml
generated
39
pnpm-lock.yaml
generated
@ -449,6 +449,9 @@ importers:
|
|||||||
better-sqlite3:
|
better-sqlite3:
|
||||||
specifier: 12.4.1
|
specifier: 12.4.1
|
||||||
version: 12.4.1
|
version: 12.4.1
|
||||||
|
node-html-parser:
|
||||||
|
specifier: 7.0.1
|
||||||
|
version: 7.0.1
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@anthropic-ai/sdk':
|
'@anthropic-ai/sdk':
|
||||||
specifier: 0.64.0
|
specifier: 0.64.0
|
||||||
@ -513,9 +516,6 @@ importers:
|
|||||||
'@types/js-yaml':
|
'@types/js-yaml':
|
||||||
specifier: 4.0.9
|
specifier: 4.0.9
|
||||||
version: 4.0.9
|
version: 4.0.9
|
||||||
'@types/jsdom':
|
|
||||||
specifier: 21.1.7
|
|
||||||
version: 21.1.7
|
|
||||||
'@types/mime-types':
|
'@types/mime-types':
|
||||||
specifier: 3.0.1
|
specifier: 3.0.1
|
||||||
version: 3.0.1
|
version: 3.0.1
|
||||||
@ -681,9 +681,6 @@ importers:
|
|||||||
js-yaml:
|
js-yaml:
|
||||||
specifier: 4.1.0
|
specifier: 4.1.0
|
||||||
version: 4.1.0
|
version: 4.1.0
|
||||||
jsdom:
|
|
||||||
specifier: 26.1.0
|
|
||||||
version: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
|
||||||
marked:
|
marked:
|
||||||
specifier: 16.3.0
|
specifier: 16.3.0
|
||||||
version: 16.3.0
|
version: 16.3.0
|
||||||
@ -4809,9 +4806,6 @@ packages:
|
|||||||
'@types/js-yaml@4.0.9':
|
'@types/js-yaml@4.0.9':
|
||||||
resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==}
|
resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==}
|
||||||
|
|
||||||
'@types/jsdom@21.1.7':
|
|
||||||
resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==}
|
|
||||||
|
|
||||||
'@types/json-schema@7.0.15':
|
'@types/json-schema@7.0.15':
|
||||||
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
|
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
|
||||||
|
|
||||||
@ -9971,6 +9965,9 @@ packages:
|
|||||||
node-html-parser@6.1.13:
|
node-html-parser@6.1.13:
|
||||||
resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==}
|
resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==}
|
||||||
|
|
||||||
|
node-html-parser@7.0.1:
|
||||||
|
resolution: {integrity: sha512-KGtmPY2kS0thCWGK0VuPyOS+pBKhhe8gXztzA2ilAOhbUbxa9homF1bOyKvhGzMLXUoRds9IOmr/v5lr/lqNmA==}
|
||||||
|
|
||||||
node-releases@2.0.19:
|
node-releases@2.0.19:
|
||||||
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
|
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
|
||||||
|
|
||||||
@ -14795,8 +14792,6 @@ snapshots:
|
|||||||
'@ckeditor/ckeditor5-utils': 46.1.1
|
'@ckeditor/ckeditor5-utils': 46.1.1
|
||||||
'@ckeditor/ckeditor5-watchdog': 46.1.1
|
'@ckeditor/ckeditor5-watchdog': 46.1.1
|
||||||
es-toolkit: 1.39.5
|
es-toolkit: 1.39.5
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
'@ckeditor/ckeditor5-dev-build-tools@43.1.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.2)':
|
'@ckeditor/ckeditor5-dev-build-tools@43.1.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -14988,8 +14983,6 @@ snapshots:
|
|||||||
'@ckeditor/ckeditor5-utils': 46.1.1
|
'@ckeditor/ckeditor5-utils': 46.1.1
|
||||||
ckeditor5: 46.1.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
|
ckeditor5: 46.1.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
|
||||||
es-toolkit: 1.39.5
|
es-toolkit: 1.39.5
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
'@ckeditor/ckeditor5-editor-multi-root@46.1.1':
|
'@ckeditor/ckeditor5-editor-multi-root@46.1.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -15012,6 +15005,8 @@ snapshots:
|
|||||||
'@ckeditor/ckeditor5-table': 46.1.1
|
'@ckeditor/ckeditor5-table': 46.1.1
|
||||||
'@ckeditor/ckeditor5-utils': 46.1.1
|
'@ckeditor/ckeditor5-utils': 46.1.1
|
||||||
ckeditor5: 46.1.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
|
ckeditor5: 46.1.1(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
'@ckeditor/ckeditor5-emoji@46.1.1':
|
'@ckeditor/ckeditor5-emoji@46.1.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -19131,12 +19126,6 @@ snapshots:
|
|||||||
|
|
||||||
'@types/js-yaml@4.0.9': {}
|
'@types/js-yaml@4.0.9': {}
|
||||||
|
|
||||||
'@types/jsdom@21.1.7':
|
|
||||||
dependencies:
|
|
||||||
'@types/node': 22.15.21
|
|
||||||
'@types/tough-cookie': 4.0.5
|
|
||||||
parse5: 7.3.0
|
|
||||||
|
|
||||||
'@types/json-schema@7.0.15': {}
|
'@types/json-schema@7.0.15': {}
|
||||||
|
|
||||||
'@types/jsonfile@6.1.4':
|
'@types/jsonfile@6.1.4':
|
||||||
@ -19346,7 +19335,8 @@ snapshots:
|
|||||||
|
|
||||||
'@types/tmp@0.2.6': {}
|
'@types/tmp@0.2.6': {}
|
||||||
|
|
||||||
'@types/tough-cookie@4.0.5': {}
|
'@types/tough-cookie@4.0.5':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@types/trusted-types@2.0.7':
|
'@types/trusted-types@2.0.7':
|
||||||
optional: true
|
optional: true
|
||||||
@ -21272,7 +21262,7 @@ snapshots:
|
|||||||
css-select@4.3.0:
|
css-select@4.3.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
boolbase: 1.0.0
|
boolbase: 1.0.0
|
||||||
css-what: 6.1.0
|
css-what: 6.2.2
|
||||||
domhandler: 4.3.1
|
domhandler: 4.3.1
|
||||||
domutils: 2.8.0
|
domutils: 2.8.0
|
||||||
nth-check: 2.1.1
|
nth-check: 2.1.1
|
||||||
@ -25780,6 +25770,11 @@ snapshots:
|
|||||||
css-select: 5.2.2
|
css-select: 5.2.2
|
||||||
he: 1.2.0
|
he: 1.2.0
|
||||||
|
|
||||||
|
node-html-parser@7.0.1:
|
||||||
|
dependencies:
|
||||||
|
css-select: 5.2.2
|
||||||
|
he: 1.2.0
|
||||||
|
|
||||||
node-releases@2.0.19: {}
|
node-releases@2.0.19: {}
|
||||||
|
|
||||||
node-releases@2.0.21: {}
|
node-releases@2.0.21: {}
|
||||||
@ -28888,7 +28883,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@trysound/sax': 0.2.0
|
'@trysound/sax': 0.2.0
|
||||||
commander: 7.2.0
|
commander: 7.2.0
|
||||||
css-select: 5.1.0
|
css-select: 5.2.2
|
||||||
css-tree: 2.3.1
|
css-tree: 2.3.1
|
||||||
css-what: 6.1.0
|
css-what: 6.1.0
|
||||||
csso: 5.0.5
|
csso: 5.0.5
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { execSync } from "child_process";
|
import { execSync } from "child_process";
|
||||||
import { build as esbuild } from "esbuild";
|
import { build as esbuild } from "esbuild";
|
||||||
import { cpSync, existsSync, rmSync } from "fs";
|
import { cpSync, existsSync, rmSync, writeFileSync } from "fs";
|
||||||
import { copySync, emptyDirSync, mkdirpSync } from "fs-extra";
|
import { copySync, emptyDirSync, mkdirpSync } from "fs-extra";
|
||||||
import { join } from "path";
|
import { join } from "path";
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ export default class BuildHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async buildBackend(entryPoints: string[]) {
|
async buildBackend(entryPoints: string[]) {
|
||||||
await esbuild({
|
const result = await esbuild({
|
||||||
entryPoints: entryPoints.map(e => join(this.projectDir, e)),
|
entryPoints: entryPoints.map(e => join(this.projectDir, e)),
|
||||||
tsconfig: join(this.projectDir, "tsconfig.app.json"),
|
tsconfig: join(this.projectDir, "tsconfig.app.json"),
|
||||||
platform: "node",
|
platform: "node",
|
||||||
@ -54,6 +54,7 @@ export default class BuildHelper {
|
|||||||
"./xhr-sync-worker.js",
|
"./xhr-sync-worker.js",
|
||||||
"vite"
|
"vite"
|
||||||
],
|
],
|
||||||
|
metafile: true,
|
||||||
splitting: false,
|
splitting: false,
|
||||||
loader: {
|
loader: {
|
||||||
".css": "text",
|
".css": "text",
|
||||||
@ -64,6 +65,7 @@ export default class BuildHelper {
|
|||||||
},
|
},
|
||||||
minify: true
|
minify: true
|
||||||
});
|
});
|
||||||
|
writeFileSync(join(this.outDir, "meta.json"), JSON.stringify(result.metafile));
|
||||||
}
|
}
|
||||||
|
|
||||||
triggerBuildAndCopyTo(projectToBuild: string, destPath: string) {
|
triggerBuildAndCopyTo(projectToBuild: string, destPath: string) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user