mirror of
https://github.com/zadam/trilium.git
synced 2025-12-05 15:04:24 +01:00
Compare commits
9 Commits
929465e7ad
...
3f7dea38bf
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3f7dea38bf | ||
|
|
0b28159e8e | ||
|
|
d9e8f8e69b | ||
|
|
fa224e46bc | ||
|
|
06320953e8 | ||
|
|
d676084cb3 | ||
|
|
0cb5941be0 | ||
|
|
1f21c65a99 | ||
|
|
5d5fd2079a |
2
.gitignore
vendored
2
.gitignore
vendored
@ -8,6 +8,7 @@ out-tsc
|
|||||||
|
|
||||||
# dependencies
|
# dependencies
|
||||||
node_modules
|
node_modules
|
||||||
|
.pnpm-store
|
||||||
|
|
||||||
# IDEs and editors
|
# IDEs and editors
|
||||||
/.idea
|
/.idea
|
||||||
@ -18,6 +19,7 @@ node_modules
|
|||||||
*.launch
|
*.launch
|
||||||
.settings/
|
.settings/
|
||||||
*.sublime-workspace
|
*.sublime-workspace
|
||||||
|
.devcontainer
|
||||||
|
|
||||||
# misc
|
# misc
|
||||||
/.sass-cache
|
/.sass-cache
|
||||||
|
|||||||
19
README.md
19
README.md
@ -146,6 +146,21 @@ Here's the language coverage we have so far:
|
|||||||
|
|
||||||
### Code
|
### Code
|
||||||
|
|
||||||
|
General (OS / docker / podman, etc.) dependencies:
|
||||||
|
|
||||||
|
Debian
|
||||||
|
```
|
||||||
|
apt update
|
||||||
|
apt install -y build-essential python3 make g++ libsqlite3-dev
|
||||||
|
corepack enable
|
||||||
|
```
|
||||||
|
|
||||||
|
Alpine
|
||||||
|
```
|
||||||
|
apk add --no-cache build-base python3 python3-dev sqlite-dev
|
||||||
|
corepack enable
|
||||||
|
```
|
||||||
|
|
||||||
Download the repository, install dependencies using `pnpm` and then run the server (available at http://localhost:8080):
|
Download the repository, install dependencies using `pnpm` and then run the server (available at http://localhost:8080):
|
||||||
```shell
|
```shell
|
||||||
git clone https://github.com/TriliumNext/Trilium.git
|
git clone https://github.com/TriliumNext/Trilium.git
|
||||||
@ -154,6 +169,10 @@ pnpm install
|
|||||||
pnpm run server:start
|
pnpm run server:start
|
||||||
```
|
```
|
||||||
|
|
||||||
|
> If you faced with some problems, try to delete all `node_modules` and `.pnpm-store` folders, not only from the root, from every directory, like `apps/{app_name}/node_modules`and `/packages/{package_name}/node_modules` and then reinstall it by the `pnpm install`.
|
||||||
|
|
||||||
|
Share styles not compiling by default, if you see share page without styles, make `pnpm run server:build` and then run development server.
|
||||||
|
|
||||||
### Documentation
|
### Documentation
|
||||||
|
|
||||||
Download the repository, install dependencies using `pnpm` and then run the environment required to edit the documentation:
|
Download the repository, install dependencies using `pnpm` and then run the environment required to edit the documentation:
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
"fs-extra": "11.3.2",
|
"fs-extra": "11.3.2",
|
||||||
"react": "19.2.0",
|
"react": "19.2.0",
|
||||||
"react-dom": "19.2.0",
|
"react-dom": "19.2.0",
|
||||||
"typedoc": "0.28.14",
|
"typedoc": "0.28.15",
|
||||||
"typedoc-plugin-missing-exports": "4.1.2"
|
"typedoc-plugin-missing-exports": "4.1.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,7 +26,7 @@ export const RIBBON_TAB_DEFINITIONS: TabConfiguration[] = [
|
|||||||
&& !(await noteContext?.isReadOnly()),
|
&& !(await noteContext?.isReadOnly()),
|
||||||
toggleCommand: "toggleRibbonTabClassicEditor",
|
toggleCommand: "toggleRibbonTabClassicEditor",
|
||||||
content: FormattingToolbar,
|
content: FormattingToolbar,
|
||||||
activate: true,
|
activate: () => !options.is("editedNotesOpenInRibbon"),
|
||||||
stayInDom: true
|
stayInDom: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -50,7 +50,7 @@ export const RIBBON_TAB_DEFINITIONS: TabConfiguration[] = [
|
|||||||
icon: "bx bx-calendar-edit",
|
icon: "bx bx-calendar-edit",
|
||||||
content: EditedNotesTab,
|
content: EditedNotesTab,
|
||||||
show: ({ note }) => note?.hasOwnedLabel("dateNote"),
|
show: ({ note }) => note?.hasOwnedLabel("dateNote"),
|
||||||
activate: ({ note }) => (note?.getPromotedDefinitionAttributes().length === 0 || !options.is("promotedAttributesOpenInRibbon")) && options.is("editedNotesOpenInRibbon")
|
activate: () => options.is("editedNotesOpenInRibbon")
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: t("book_properties.book_properties"),
|
title: t("book_properties.book_properties"),
|
||||||
|
|||||||
@ -80,7 +80,6 @@ const ALLOWED_OPTIONS = new Set<OptionNames>([
|
|||||||
"disableTray",
|
"disableTray",
|
||||||
"customSearchEngineName",
|
"customSearchEngineName",
|
||||||
"customSearchEngineUrl",
|
"customSearchEngineUrl",
|
||||||
"promotedAttributesOpenInRibbon",
|
|
||||||
"editedNotesOpenInRibbon",
|
"editedNotesOpenInRibbon",
|
||||||
"locale",
|
"locale",
|
||||||
"formattingLocale",
|
"formattingLocale",
|
||||||
|
|||||||
@ -129,7 +129,6 @@ const defaultOptions: DefaultOption[] = [
|
|||||||
{ name: "logRetentionDays", value: "90", isSynced: false }, // default 90 days
|
{ name: "logRetentionDays", value: "90", isSynced: false }, // default 90 days
|
||||||
{ name: "customSearchEngineName", value: "DuckDuckGo", isSynced: true },
|
{ name: "customSearchEngineName", value: "DuckDuckGo", isSynced: true },
|
||||||
{ name: "customSearchEngineUrl", value: "https://duckduckgo.com/?q={keyword}", isSynced: true },
|
{ name: "customSearchEngineUrl", value: "https://duckduckgo.com/?q={keyword}", isSynced: true },
|
||||||
{ name: "promotedAttributesOpenInRibbon", value: "true", isSynced: true },
|
|
||||||
{ name: "editedNotesOpenInRibbon", value: "true", isSynced: true },
|
{ name: "editedNotesOpenInRibbon", value: "true", isSynced: true },
|
||||||
{ name: "mfaEnabled", value: "false", isSynced: false },
|
{ name: "mfaEnabled", value: "false", isSynced: false },
|
||||||
{ name: "mfaMethod", value: "totp", isSynced: false },
|
{ name: "mfaMethod", value: "totp", isSynced: false },
|
||||||
|
|||||||
@ -40,15 +40,21 @@ interface Subroot {
|
|||||||
|
|
||||||
type GetNoteFunction = (id: string) => SNote | BNote | null;
|
type GetNoteFunction = (id: string) => SNote | BNote | null;
|
||||||
|
|
||||||
function getSharedSubTreeRoot(note: SNote | BNote | undefined): Subroot {
|
function addContentAccessQuery(note: SNote | BNote, secondEl?:boolean) {
|
||||||
|
if (!(note instanceof BNote) && note.contentAccessor && note.contentAccessor?.type === "query") {
|
||||||
|
return secondEl ? `&cat=${note.contentAccessor.getToken()}` : `?cat=${note.contentAccessor.getToken()}`;
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getSharedSubTreeRoot(note: SNote | BNote | undefined, parentId: string | undefined = undefined): Subroot {
|
||||||
if (!note || note.noteId === shareRoot.SHARE_ROOT_NOTE_ID) {
|
if (!note || note.noteId === shareRoot.SHARE_ROOT_NOTE_ID) {
|
||||||
// share root itself is not shared
|
// share root itself is not shared
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
// every path leads to share root, but which one to choose?
|
const parentBranches = note.getParentBranches()
|
||||||
// for the sake of simplicity, URLs are not note paths
|
const parentBranch = (parentId ? parentBranches.find((pb: SBranch | BBranch) => pb.parentNoteId === parentId) : undefined) || parentBranches[0];
|
||||||
const parentBranch = note.getParentBranches()[0];
|
|
||||||
|
|
||||||
if (note instanceof BNote) {
|
if (note instanceof BNote) {
|
||||||
return {
|
return {
|
||||||
@ -64,7 +70,7 @@ function getSharedSubTreeRoot(note: SNote | BNote | undefined): Subroot {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return getSharedSubTreeRoot(parentBranch.getParentNote());
|
return getSharedSubTreeRoot(parentBranch.getParentNote(), parentId);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath: string, ancestors: string[]) {
|
export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath: string, ancestors: string[]) {
|
||||||
@ -91,7 +97,7 @@ export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function renderNoteContent(note: SNote) {
|
export function renderNoteContent(note: SNote) {
|
||||||
const subRoot = getSharedSubTreeRoot(note);
|
const subRoot = getSharedSubTreeRoot(note, note.parentId);
|
||||||
|
|
||||||
const ancestors: string[] = [];
|
const ancestors: string[] = [];
|
||||||
let notePointer = note;
|
let notePointer = note;
|
||||||
@ -107,23 +113,23 @@ export function renderNoteContent(note: SNote) {
|
|||||||
// Determine CSS to load.
|
// Determine CSS to load.
|
||||||
const cssToLoad: string[] = [];
|
const cssToLoad: string[] = [];
|
||||||
if (!note.isLabelTruthy("shareOmitDefaultCss")) {
|
if (!note.isLabelTruthy("shareOmitDefaultCss")) {
|
||||||
cssToLoad.push(`assets/styles.css`);
|
cssToLoad.push(`../assets/styles.css`);
|
||||||
cssToLoad.push(`assets/scripts.css`);
|
cssToLoad.push(`../assets/scripts.css`);
|
||||||
}
|
}
|
||||||
for (const cssRelation of note.getRelations("shareCss")) {
|
for (const cssRelation of note.getRelations("shareCss")) {
|
||||||
cssToLoad.push(`api/notes/${cssRelation.value}/download`);
|
cssToLoad.push(`../api/notes/${cssRelation.value}/download${addContentAccessQuery(note)}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine JS to load.
|
// Determine JS to load.
|
||||||
const jsToLoad: string[] = [
|
const jsToLoad: string[] = [
|
||||||
"assets/scripts.js"
|
"../assets/scripts.js"
|
||||||
];
|
];
|
||||||
for (const jsRelation of note.getRelations("shareJs")) {
|
for (const jsRelation of note.getRelations("shareJs")) {
|
||||||
jsToLoad.push(`api/notes/${jsRelation.value}/download`);
|
jsToLoad.push(`../api/notes/${jsRelation.value}/download${addContentAccessQuery(note)}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const customLogoId = note.getRelation("shareLogo")?.value;
|
const customLogoId = note.getRelation("shareLogo")?.value;
|
||||||
const logoUrl = customLogoId ? `api/images/${customLogoId}/image.png` : `../${assetUrlFragment}/images/icon-color.svg`;
|
const logoUrl = customLogoId ? `../api/images/${customLogoId}/image.png${addContentAccessQuery(note)}` : `../../${assetUrlFragment}/images/icon-color.svg`;
|
||||||
|
|
||||||
return renderNoteContentInternal(note, {
|
return renderNoteContentInternal(note, {
|
||||||
subRoot,
|
subRoot,
|
||||||
@ -133,7 +139,7 @@ export function renderNoteContent(note: SNote) {
|
|||||||
logoUrl,
|
logoUrl,
|
||||||
ancestors,
|
ancestors,
|
||||||
isStatic: false,
|
isStatic: false,
|
||||||
faviconUrl: note.hasRelation("shareFavicon") ? `api/notes/${note.getRelationValue("shareFavicon")}/download` : `../favicon.ico`
|
faviconUrl: note.hasRelation("shareFavicon") ? `../api/notes/${note.getRelationValue("shareFavicon")}/download${addContentAccessQuery(note)}` : `../../favicon.ico`
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,6 +164,7 @@ function renderNoteContentInternal(note: SNote | BNote, renderArgs: RenderArgs)
|
|||||||
isEmpty,
|
isEmpty,
|
||||||
assetPath: shareAdjustedAssetPath,
|
assetPath: shareAdjustedAssetPath,
|
||||||
assetUrlFragment,
|
assetUrlFragment,
|
||||||
|
addContentAccessQuery: (second: boolean | undefined) => addContentAccessQuery(note, second),
|
||||||
showLoginInShareTheme,
|
showLoginInShareTheme,
|
||||||
t,
|
t,
|
||||||
isDev,
|
isDev,
|
||||||
@ -325,7 +332,7 @@ function renderText(result: Result, note: SNote | BNote) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (href?.startsWith("#")) {
|
if (href?.startsWith("#")) {
|
||||||
handleAttachmentLink(linkEl, href, getNote, getAttachment);
|
handleAttachmentLink(linkEl, href, getNote, getAttachment, note);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -349,7 +356,7 @@ function renderText(result: Result, note: SNote | BNote) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleAttachmentLink(linkEl: HTMLElement, href: string, getNote: GetNoteFunction, getAttachment: (id: string) => BAttachment | SAttachment | null) {
|
function handleAttachmentLink(linkEl: HTMLElement, href: string, getNote: GetNoteFunction, getAttachment: (id: string) => BAttachment | SAttachment | null, note: SNote | BNote) {
|
||||||
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))) {
|
||||||
@ -357,7 +364,7 @@ function handleAttachmentLink(linkEl: HTMLElement, href: string, getNote: GetNot
|
|||||||
const attachment = getAttachment(attachmentId);
|
const attachment = getAttachment(attachmentId);
|
||||||
|
|
||||||
if (attachment) {
|
if (attachment) {
|
||||||
linkEl.setAttribute("href", `api/attachments/${attachmentId}/download`);
|
linkEl.setAttribute("href", `../api/attachments/${attachmentId}/download${addContentAccessQuery(note)}`);
|
||||||
linkEl.classList.add(`attachment-link`);
|
linkEl.classList.add(`attachment-link`);
|
||||||
linkEl.classList.add(`role-${attachment.role}`);
|
linkEl.classList.add(`role-${attachment.role}`);
|
||||||
linkEl.childNodes.length = 0;
|
linkEl.childNodes.length = 0;
|
||||||
@ -373,7 +380,7 @@ function handleAttachmentLink(linkEl: HTMLElement, href: string, getNote: GetNot
|
|||||||
const linkedNote = getNote(noteId);
|
const linkedNote = getNote(noteId);
|
||||||
if (linkedNote) {
|
if (linkedNote) {
|
||||||
const isExternalLink = linkedNote.hasLabel("shareExternalLink");
|
const isExternalLink = linkedNote.hasLabel("shareExternalLink");
|
||||||
const href = isExternalLink ? linkedNote.getLabelValue("shareExternalLink") : `./${linkedNote.shareId}`;
|
const href = isExternalLink ? linkedNote.getLabelValue("shareExternalLink") : `../${linkedNote.shareId}`;
|
||||||
if (href) {
|
if (href) {
|
||||||
linkEl.setAttribute("href", href);
|
linkEl.setAttribute("href", href);
|
||||||
}
|
}
|
||||||
@ -430,7 +437,7 @@ function renderMermaid(result: Result, note: SNote | BNote) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
result.content = `
|
result.content = `
|
||||||
<img src="api/images/${note.noteId}/${note.encodedTitle}?${note.utcDateModified}">
|
<img src="../api/images/${note.noteId}/${note.encodedTitle}?${note.utcDateModified}${addContentAccessQuery(note, true)}">
|
||||||
<hr>
|
<hr>
|
||||||
<details>
|
<details>
|
||||||
<summary>Chart source</summary>
|
<summary>Chart source</summary>
|
||||||
@ -439,14 +446,14 @@ function renderMermaid(result: Result, note: SNote | BNote) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function renderImage(result: Result, note: SNote | BNote) {
|
function renderImage(result: Result, note: SNote | BNote) {
|
||||||
result.content = `<img src="api/images/${note.noteId}/${note.encodedTitle}?${note.utcDateModified}">`;
|
result.content = `<img src="../api/images/${note.noteId}/${note.encodedTitle}?${note.utcDateModified}${addContentAccessQuery(note, true)}">`;
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderFile(note: SNote | BNote, result: Result) {
|
function renderFile(note: SNote | BNote, result: Result) {
|
||||||
if (note.mime === "application/pdf") {
|
if (note.mime === "application/pdf") {
|
||||||
result.content = `<iframe class="pdf-view" src="api/notes/${note.noteId}/view"></iframe>`;
|
result.content = `<iframe class="pdf-view" src="../api/notes/${note.noteId}/view${addContentAccessQuery(note)}"></iframe>`;
|
||||||
} else {
|
} else {
|
||||||
result.content = `<button type="button" onclick="location.href='api/notes/${note.noteId}/download'">Download file</button>`;
|
result.content = `<button type="button" onclick="location.href='../api/notes/${note.noteId}/download${addContentAccessQuery(note)}'">Download file</button>`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,7 @@ import searchService from "../services/search/services/search.js";
|
|||||||
import SearchContext from "../services/search/search_context.js";
|
import SearchContext from "../services/search/search_context.js";
|
||||||
import type SNote from "./shaca/entities/snote.js";
|
import type SNote from "./shaca/entities/snote.js";
|
||||||
import type SAttachment from "./shaca/entities/sattachment.js";
|
import type SAttachment from "./shaca/entities/sattachment.js";
|
||||||
import { getDefaultTemplatePath, renderNoteContent } from "./content_renderer.js";
|
import { getDefaultTemplatePath, getSharedSubTreeRoot, renderNoteContent } from "./content_renderer.js";
|
||||||
import utils from "../services/utils.js";
|
import utils from "../services/utils.js";
|
||||||
|
|
||||||
function addNoIndexHeader(note: SNote, res: Response) {
|
function addNoIndexHeader(note: SNote, res: Response) {
|
||||||
@ -60,6 +60,20 @@ function checkNoteAccess(noteId: string, req: Request, res: Response) {
|
|||||||
const header = req.header("Authorization");
|
const header = req.header("Authorization");
|
||||||
|
|
||||||
if (!header?.startsWith("Basic ")) {
|
if (!header?.startsWith("Basic ")) {
|
||||||
|
if (req.path.startsWith("/share/api") && note.contentAccessor) {
|
||||||
|
let contentAccessToken = ""
|
||||||
|
if (note.contentAccessor.type === "cookie") contentAccessToken += req.cookies["trilium.cat"] || ""
|
||||||
|
else if (note.contentAccessor.type === "query") contentAccessToken += req.query['cat'] || ""
|
||||||
|
|
||||||
|
if (contentAccessToken){
|
||||||
|
if (note.contentAccessor.isTokenValid(contentAccessToken)){
|
||||||
|
return note
|
||||||
|
}
|
||||||
|
res.status(401).send("Access is expired. Return back and update the page.");
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,9 +138,14 @@ function register(router: Router) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (note.isLabelTruthy("shareExclude")) {
|
||||||
|
res.status(404);
|
||||||
|
render404(res);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!checkNoteAccess(note.noteId, req, res)) {
|
if (!checkNoteAccess(note.noteId, req, res)) {
|
||||||
requestCredentials(res);
|
requestCredentials(res);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,6 +157,10 @@ function register(router: Router) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (note.contentAccessor && note.contentAccessor.type === "cookie") {
|
||||||
|
res.cookie('trilium.cat', note.contentAccessor.getToken(), { maxAge: note.contentAccessor.getTokenExpiration() * 1000, httpOnly: true })
|
||||||
|
}
|
||||||
|
|
||||||
res.send(renderNoteContent(note));
|
res.send(renderNoteContent(note));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,14 +180,29 @@ function register(router: Router) {
|
|||||||
renderNote(shaca.shareRootNote, req, res);
|
renderNote(shaca.shareRootNote, req, res);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
router.get("/share/:parentShareId/:shareId", (req, res) => {
|
||||||
|
shacaLoader.ensureLoad();
|
||||||
|
|
||||||
|
const { parentShareId, shareId } = req.params;
|
||||||
|
|
||||||
|
const note = shaca.aliasToNote[shareId] || shaca.notes[shareId];
|
||||||
|
if (note){
|
||||||
|
note.parentId = parentShareId
|
||||||
|
note.initContentAccessor()
|
||||||
|
}
|
||||||
|
|
||||||
|
renderNote(note, req, res);
|
||||||
|
});
|
||||||
|
|
||||||
router.get("/share/:shareId", (req, res) => {
|
router.get("/share/:shareId", (req, res) => {
|
||||||
shacaLoader.ensureLoad();
|
shacaLoader.ensureLoad();
|
||||||
|
|
||||||
const { shareId } = req.params;
|
const { shareId } = req.params;
|
||||||
|
|
||||||
const note = shaca.aliasToNote[shareId] || shaca.notes[shareId];
|
const note = shaca.aliasToNote[shareId] || shaca.notes[shareId];
|
||||||
|
const parent = getSharedSubTreeRoot(note)
|
||||||
|
|
||||||
renderNote(note, req, res);
|
res.redirect(`${parent?.note?.noteId}/${shareId}`)
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get("/share/api/notes/:noteId", (req, res) => {
|
router.get("/share/api/notes/:noteId", (req, res) => {
|
||||||
|
|||||||
81
apps/server/src/share/shaca/entities/content_accessor.ts
Normal file
81
apps/server/src/share/shaca/entities/content_accessor.ts
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
import crypto from "crypto";
|
||||||
|
import SNote from "./snote";
|
||||||
|
import utils from "../../../services/utils";
|
||||||
|
|
||||||
|
const DefaultAccessTimeoutSec = 10 * 60; // 10 minutes
|
||||||
|
|
||||||
|
export class ContentAccessor {
|
||||||
|
note: SNote;
|
||||||
|
token: string;
|
||||||
|
timestamp: number;
|
||||||
|
type: string;
|
||||||
|
timeout: number;
|
||||||
|
key: Buffer;
|
||||||
|
|
||||||
|
constructor(note: SNote) {
|
||||||
|
this.note = note;
|
||||||
|
this.key = crypto.randomBytes(32);
|
||||||
|
this.token = "";
|
||||||
|
this.timestamp = 0;
|
||||||
|
this.timeout = Number(this.note.getAttributeValue("label", "shareAccessTokenTimeout") || DefaultAccessTimeoutSec)
|
||||||
|
|
||||||
|
switch (this.note.getAttributeValue("label", "shareContentAccess")) {
|
||||||
|
case "basic": this.type = "basic"; break
|
||||||
|
case "query": this.type = "query"; break
|
||||||
|
default: this.type = "cookie"; break
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
__encrypt(text: string) {
|
||||||
|
const iv = crypto.randomBytes(16);
|
||||||
|
const cipher = crypto.createCipheriv('aes-256-cbc', this.key, iv);
|
||||||
|
let encrypted = cipher.update(text, 'utf8', 'hex');
|
||||||
|
encrypted += cipher.final('hex');
|
||||||
|
return iv.toString('hex') + encrypted;
|
||||||
|
}
|
||||||
|
|
||||||
|
__decrypt(encryptedText: string) {
|
||||||
|
try {
|
||||||
|
const iv = Buffer.from(encryptedText.slice(0, 32), 'hex');
|
||||||
|
const decipher = crypto.createDecipheriv('aes-256-cbc', this.key, iv);
|
||||||
|
let decrypted = decipher.update(encryptedText.slice(32), 'hex', 'utf8');
|
||||||
|
decrypted += decipher.final('utf8');
|
||||||
|
return decrypted;
|
||||||
|
} catch {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
__compare(originalText: string, encryptedText: string) {
|
||||||
|
return originalText === this.__decrypt(encryptedText)
|
||||||
|
}
|
||||||
|
|
||||||
|
update() {
|
||||||
|
if (new Date().getTime() < this.timestamp + this.getTimeout() * 1000) return
|
||||||
|
this.token = utils.randomString(36);
|
||||||
|
this.key = crypto.randomBytes(32);
|
||||||
|
this.timestamp = new Date().getTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
isTokenValid(encToken: string) {
|
||||||
|
return this.__compare(this.token, encToken) && new Date().getTime() < this.timestamp + this.getTimeout() * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
getToken() {
|
||||||
|
return this.__encrypt(this.token);
|
||||||
|
}
|
||||||
|
|
||||||
|
getTokenExpiration() {
|
||||||
|
return (this.timestamp + (this.timeout * 1000) - new Date().getTime()) /1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
getTimeout() {
|
||||||
|
return this.timeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
getContentAccessType() {
|
||||||
|
return this.type;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -10,6 +10,7 @@ import type SAttribute from "./sattribute.js";
|
|||||||
import type SBranch from "./sbranch.js";
|
import type SBranch from "./sbranch.js";
|
||||||
import type { SNoteRow } from "./rows.js";
|
import type { SNoteRow } from "./rows.js";
|
||||||
import { NOTE_TYPE_ICONS } from "../../../becca/entities/bnote.js";
|
import { NOTE_TYPE_ICONS } from "../../../becca/entities/bnote.js";
|
||||||
|
import { ContentAccessor } from "./content_accessor.js";
|
||||||
|
|
||||||
const LABEL = "label";
|
const LABEL = "label";
|
||||||
const RELATION = "relation";
|
const RELATION = "relation";
|
||||||
@ -19,6 +20,7 @@ const isCredentials = (attr: SAttribute) => attr.type === "label" && attr.name =
|
|||||||
|
|
||||||
class SNote extends AbstractShacaEntity {
|
class SNote extends AbstractShacaEntity {
|
||||||
noteId: string;
|
noteId: string;
|
||||||
|
parentId?: string | undefined;
|
||||||
title: string;
|
title: string;
|
||||||
type: string;
|
type: string;
|
||||||
mime: string;
|
mime: string;
|
||||||
@ -33,11 +35,13 @@ class SNote extends AbstractShacaEntity {
|
|||||||
private __inheritableAttributeCache: SAttribute[] | null;
|
private __inheritableAttributeCache: SAttribute[] | null;
|
||||||
targetRelations: SAttribute[];
|
targetRelations: SAttribute[];
|
||||||
attachments: SAttachment[];
|
attachments: SAttachment[];
|
||||||
|
contentAccessor: ContentAccessor | undefined;
|
||||||
|
|
||||||
constructor([noteId, title, type, mime, blobId, utcDateModified, isProtected]: SNoteRow) {
|
constructor([noteId, title, type, mime, blobId, utcDateModified, isProtected]: SNoteRow) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
this.noteId = noteId;
|
this.noteId = noteId;
|
||||||
|
this.parentId = undefined;
|
||||||
this.title = isProtected ? "[protected]" : title;
|
this.title = isProtected ? "[protected]" : title;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.mime = mime;
|
this.mime = mime;
|
||||||
@ -59,6 +63,19 @@ class SNote extends AbstractShacaEntity {
|
|||||||
this.shaca.notes[this.noteId] = this;
|
this.shaca.notes[this.noteId] = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
initContentAccessor(){
|
||||||
|
if (!this.contentAccessor && this.getCredentials().length > 0) {
|
||||||
|
this.contentAccessor = new ContentAccessor(this);
|
||||||
|
}
|
||||||
|
if (this.contentAccessor) {
|
||||||
|
this.contentAccessor.update()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getParentId() {
|
||||||
|
return this.parentId;
|
||||||
|
}
|
||||||
|
|
||||||
getParentBranches() {
|
getParentBranches() {
|
||||||
return this.parentBranches;
|
return this.parentBranches;
|
||||||
}
|
}
|
||||||
@ -72,7 +89,7 @@ class SNote extends AbstractShacaEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getVisibleChildBranches() {
|
getVisibleChildBranches() {
|
||||||
return this.getChildBranches().filter((branch) => !branch.isHidden && !branch.getNote().isLabelTruthy("shareHiddenFromTree"));
|
return this.getChildBranches().filter((branch) => !branch.isHidden && !branch.getNote().isLabelTruthy("shareHiddenFromTree") && !branch.getNote().isLabelTruthy("shareExclude"));
|
||||||
}
|
}
|
||||||
|
|
||||||
getParentNotes() {
|
getParentNotes() {
|
||||||
@ -80,7 +97,7 @@ class SNote extends AbstractShacaEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getChildNotes() {
|
getChildNotes() {
|
||||||
return this.children;
|
return this.children.filter((note) => !note.isLabelTruthy("shareExclude"));
|
||||||
}
|
}
|
||||||
|
|
||||||
getVisibleChildNotes() {
|
getVisibleChildNotes() {
|
||||||
|
|||||||
@ -131,7 +131,7 @@ To do so, create a shared text note and apply the `shareIndex` label. When viewe
|
|||||||
|
|
||||||
## Attribute reference
|
## Attribute reference
|
||||||
|
|
||||||
<table class="ck-table-resized"><colgroup><col style="width:18.38%;"><col style="width:81.62%;"></colgroup><thead><tr><th>Attribute</th><th>Description</th></tr></thead><tbody><tr><td><code>#shareHiddenFromTree</code></td><td>this note is hidden from left navigation tree, but still accessible with its URL</td></tr><tr><td><code>#shareExternalLink</code></td><td>note will act as a link to an external website in the share tree</td></tr><tr><td><code>#shareAlias</code></td><td>define an alias using which the note will be available under <code>https://your_trilium_host/share/[your_alias]</code></td></tr><tr><td><code>#shareOmitDefaultCss</code></td><td>default share page CSS will be omitted. Use when you make extensive styling changes.</td></tr><tr><td><code>#shareRoot</code></td><td>marks note which is served on /share root.</td></tr><tr><td><code>#shareDescription</code></td><td>define text to be added to the HTML meta tag for description</td></tr><tr><td><code>#shareRaw</code></td><td>Note will be served in its raw format, without HTML wrapper. See also <a class="reference-link" href="Sharing/Serving%20directly%20the%20content%20o.md">Serving directly the content of a note</a> for an alternative method without setting an attribute.</td></tr><tr><td><code>#shareDisallowRobotIndexing</code></td><td><p>Indicates to web crawlers that the page should not be indexed of this note by:</p><ul><li data-list-item-id="e6baa9f60bf59d085fd31aa2cce07a0e7">Setting the <code>X-Robots-Tag: noindex</code> HTTP header.</li><li data-list-item-id="ec0d067db136ef9794e4f1033405880b7">Setting the <code>noindex, follow</code> meta tag.</li></ul></td></tr><tr><td><code>#shareCredentials</code></td><td>require credentials to access this shared note. Value is expected to be in format <code>username:password</code>. Don't forget to make this inheritable to apply to child-notes/images.</td></tr><tr><td><code>#shareIndex</code></td><td>Note with this label will list all roots of shared notes.</td></tr><tr><td><code>#shareHtmlLocation</code></td><td>defines where custom HTML injected via <code>~shareHtml</code> relation should be placed. Applied to the HTML snippet note itself. Format: <code>location:position</code> where location is <code>head</code>, <code>body</code>, or <code>content</code> and position is <code>start</code> or <code>end</code>. Defaults to <code>content:end</code>.</td></tr></tbody></table>
|
<table class="ck-table-resized"><colgroup><col style="width:18.38%;"><col style="width:81.62%;"></colgroup><thead><tr><th>Attribute</th><th>Description</th></tr></thead><tbody><tr><td><code>#shareHiddenFromTree</code></td><td>this note is hidden from left navigation tree, but still accessible with its URL</td></tr><tr><td><code>#shareTemplateNoPrevNext</code></td><td>hide bottom page navigation prev and next page.</td></tr><tr><td><code>#shareTemplateNoLeftPanel</code></td><td>hide left panel fully.</td></tr><tr><td><code>#shareExclude</code></td><td>this note will be excluded from share, not accessible via direct URL (implemented to hide scripts from share)</td></tr><tr><td><code>#shareContentAccess</code></td><td>method for attachments authorization in case when note protected with login and password (#shareCredentials). Could be cookie (the cookie will be provided when page loads) / query (every url will be updated with token) / basic (only basic header authorization)). By default for browser used cookie.</td></tr><tr><td><code>#shareAccessTokenTimeout</code></td><td>token expiration timeout in seconds, by default 10 minutes. While token not expired user could download attachment, after that he will get message `Access is expired. Return back and update the page.`</td></tr><tr><td><code>#shareExternalLink</code></td><td>note will act as a link to an external website in the share tree</td></tr><tr><td><code>#shareAlias</code></td><td>define an alias using which the note will be available under <code>https://your_trilium_host/share/[your_alias]</code></td></tr><tr><td><code>#shareOmitDefaultCss</code></td><td>default share page CSS will be omitted. Use when you make extensive styling changes.</td></tr><tr><td><code>#shareRoot</code></td><td>marks note which is served on /share root.</td></tr><tr><td><code>#shareDescription</code></td><td>define text to be added to the HTML meta tag for description</td></tr><tr><td><code>#shareRaw</code></td><td>Note will be served in its raw format, without HTML wrapper. See also <a class="reference-link" href="Sharing/Serving%20directly%20the%20content%20o.md">Serving directly the content of a note</a> for an alternative method without setting an attribute.</td></tr><tr><td><code>#shareDisallowRobotIndexing</code></td><td><p>Indicates to web crawlers that the page should not be indexed of this note by:</p><ul><li data-list-item-id="e6baa9f60bf59d085fd31aa2cce07a0e7">Setting the <code>X-Robots-Tag: noindex</code> HTTP header.</li><li data-list-item-id="ec0d067db136ef9794e4f1033405880b7">Setting the <code>noindex, follow</code> meta tag.</li></ul></td></tr><tr><td><code>#shareCredentials</code></td><td>require credentials to access this shared note. Value is expected to be in format <code>username:password</code>. Don't forget to make this inheritable to apply to child-notes/images.</td></tr><tr><td><code>#shareIndex</code></td><td>Note with this label will list all roots of shared notes.</td></tr><tr><td><code>#shareHtmlLocation</code></td><td>defines where custom HTML injected via <code>~shareHtml</code> relation should be placed. Applied to the HTML snippet note itself. Format: <code>location:position</code> where location is <code>head</code>, <code>body</code>, or <code>content</code> and position is <code>start</code> or <code>end</code>. Defaults to <code>content:end</code>.</td></tr></tbody></table>
|
||||||
|
|
||||||
### Customizing logo
|
### Customizing logo
|
||||||
|
|
||||||
|
|||||||
@ -39,7 +39,7 @@
|
|||||||
"typescript": "5.9.3",
|
"typescript": "5.9.3",
|
||||||
"vite-plugin-svgo": "~2.0.0",
|
"vite-plugin-svgo": "~2.0.0",
|
||||||
"vitest": "4.0.14",
|
"vitest": "4.0.14",
|
||||||
"webdriverio": "9.20.1"
|
"webdriverio": "9.21.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"ckeditor5": "47.2.0"
|
"ckeditor5": "47.2.0"
|
||||||
|
|||||||
@ -40,7 +40,7 @@
|
|||||||
"typescript": "5.9.3",
|
"typescript": "5.9.3",
|
||||||
"vite-plugin-svgo": "~2.0.0",
|
"vite-plugin-svgo": "~2.0.0",
|
||||||
"vitest": "4.0.14",
|
"vitest": "4.0.14",
|
||||||
"webdriverio": "9.20.1"
|
"webdriverio": "9.21.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"ckeditor5": "47.2.0"
|
"ckeditor5": "47.2.0"
|
||||||
|
|||||||
@ -42,7 +42,7 @@
|
|||||||
"typescript": "5.9.3",
|
"typescript": "5.9.3",
|
||||||
"vite-plugin-svgo": "~2.0.0",
|
"vite-plugin-svgo": "~2.0.0",
|
||||||
"vitest": "4.0.14",
|
"vitest": "4.0.14",
|
||||||
"webdriverio": "9.20.1"
|
"webdriverio": "9.21.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"ckeditor5": "47.2.0"
|
"ckeditor5": "47.2.0"
|
||||||
|
|||||||
@ -43,7 +43,7 @@
|
|||||||
"typescript": "5.9.3",
|
"typescript": "5.9.3",
|
||||||
"vite-plugin-svgo": "~2.0.0",
|
"vite-plugin-svgo": "~2.0.0",
|
||||||
"vitest": "4.0.14",
|
"vitest": "4.0.14",
|
||||||
"webdriverio": "9.20.1"
|
"webdriverio": "9.21.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"ckeditor5": "47.2.0"
|
"ckeditor5": "47.2.0"
|
||||||
|
|||||||
@ -42,7 +42,7 @@
|
|||||||
"typescript": "5.9.3",
|
"typescript": "5.9.3",
|
||||||
"vite-plugin-svgo": "~2.0.0",
|
"vite-plugin-svgo": "~2.0.0",
|
||||||
"vitest": "4.0.14",
|
"vitest": "4.0.14",
|
||||||
"webdriverio": "9.20.1"
|
"webdriverio": "9.21.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"ckeditor5": "47.2.0"
|
"ckeditor5": "47.2.0"
|
||||||
|
|||||||
@ -121,7 +121,6 @@ export interface OptionDefinitions extends KeyboardShortcutsOptions<KeyboardActi
|
|||||||
downloadImagesAutomatically: boolean;
|
downloadImagesAutomatically: boolean;
|
||||||
checkForUpdates: boolean;
|
checkForUpdates: boolean;
|
||||||
disableTray: boolean;
|
disableTray: boolean;
|
||||||
promotedAttributesOpenInRibbon: boolean;
|
|
||||||
editedNotesOpenInRibbon: boolean;
|
editedNotesOpenInRibbon: boolean;
|
||||||
codeBlockWordWrap: boolean;
|
codeBlockWordWrap: boolean;
|
||||||
textNoteEditorMultilineToolbar: boolean;
|
textNoteEditorMultilineToolbar: boolean;
|
||||||
|
|||||||
@ -50,7 +50,7 @@
|
|||||||
let openGraphImage = subRoot.note.getLabelValue("shareOpenGraphImage");
|
let openGraphImage = subRoot.note.getLabelValue("shareOpenGraphImage");
|
||||||
// Relation takes priority and requires some altering
|
// Relation takes priority and requires some altering
|
||||||
if (subRoot.note.hasRelation("shareOpenGraphImage")) {
|
if (subRoot.note.hasRelation("shareOpenGraphImage")) {
|
||||||
openGraphImage = `api/images/${subRoot.note.getRelation("shareOpenGraphImage").value}/image.png`;
|
openGraphImage = `api/images/${subRoot.note.getRelation("shareOpenGraphImage").value}/image.png${addContentAccessQuery()}`;
|
||||||
}
|
}
|
||||||
%>
|
%>
|
||||||
<title><%= pageTitle %></title>
|
<title><%= pageTitle %></title>
|
||||||
@ -109,40 +109,43 @@ content = content.replaceAll(headingRe, (...match) => {
|
|||||||
<button aria-label="Show Mobile Menu" id="show-menu-button"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M4 6h16v2H4zm0 5h16v2H4zm0 5h16v2H4z"></path></svg></button>
|
<button aria-label="Show Mobile Menu" id="show-menu-button"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M4 6h16v2H4zm0 5h16v2H4zm0 5h16v2H4z"></path></svg></button>
|
||||||
</div>
|
</div>
|
||||||
<div id="split-pane">
|
<div id="split-pane">
|
||||||
<div id="left-pane">
|
<% if (!note.isLabelTruthy("shareTemplateNoLeftPanel")) { %>
|
||||||
<div id="navigation">
|
<div id="left-pane">
|
||||||
<div id="site-header">
|
<div id="navigation">
|
||||||
<a href="<%= shareRootLink %>">
|
<div id="site-header">
|
||||||
<img src="<%= logoUrl %>" width="<%= logoWidth %>" height="<%= logoHeight %>" alt="Logo" />
|
<a href="<%= shareRootLink %>">
|
||||||
<%= subRoot.note.title %>
|
<img src="<%= logoUrl %>" width="<%= logoWidth %>" height="<%= logoHeight %>" alt="Logo" />
|
||||||
</a>
|
<%= subRoot.note.title %>
|
||||||
<div class="theme-selection">
|
</a>
|
||||||
<span id="sitetheme"><%= t("share_theme.site-theme") %></span>
|
<div class="theme-selection">
|
||||||
<label class="switch">
|
<span id="sitetheme"><%= t("share_theme.site-theme") %></span>
|
||||||
<input type="checkbox" aria-labelledby="sitetheme">
|
<label class="switch">
|
||||||
<span class="slider"></span>
|
<input type="checkbox" aria-labelledby="sitetheme">
|
||||||
<svg class="dark-icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M20.742 13.045a8.088 8.088 0 0 1-2.077.271c-2.135 0-4.14-.83-5.646-2.336a8.025 8.025 0 0 1-2.064-7.723A1 1 0 0 0 9.73 2.034a10.014 10.014 0 0 0-4.489 2.582c-3.898 3.898-3.898 10.243 0 14.143a9.937 9.937 0 0 0 7.072 2.93 9.93 9.93 0 0 0 7.07-2.929 10.007 10.007 0 0 0 2.583-4.491 1.001 1.001 0 0 0-1.224-1.224zm-2.772 4.301a7.947 7.947 0 0 1-5.656 2.343 7.953 7.953 0 0 1-5.658-2.344c-3.118-3.119-3.118-8.195 0-11.314a7.923 7.923 0 0 1 2.06-1.483 10.027 10.027 0 0 0 2.89 7.848 9.972 9.972 0 0 0 7.848 2.891 8.036 8.036 0 0 1-1.484 2.059z"></path></svg>
|
<span class="slider"></span>
|
||||||
<svg class="light-icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6.993 12c0 2.761 2.246 5.007 5.007 5.007s5.007-2.246 5.007-5.007S14.761 6.993 12 6.993 6.993 9.239 6.993 12zM12 8.993c1.658 0 3.007 1.349 3.007 3.007S13.658 15.007 12 15.007 8.993 13.658 8.993 12 10.342 8.993 12 8.993zM10.998 19h2v3h-2zm0-17h2v3h-2zm-9 9h3v2h-3zm17 0h3v2h-3zM4.219 18.363l2.12-2.122 1.415 1.414-2.12 2.122zM16.24 6.344l2.122-2.122 1.414 1.414-2.122 2.122zM6.342 7.759 4.22 5.637l1.415-1.414 2.12 2.122zm13.434 10.605-1.414 1.414-2.122-2.122 1.414-1.414z"></path></svg>
|
<svg class="dark-icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M20.742 13.045a8.088 8.088 0 0 1-2.077.271c-2.135 0-4.14-.83-5.646-2.336a8.025 8.025 0 0 1-2.064-7.723A1 1 0 0 0 9.73 2.034a10.014 10.014 0 0 0-4.489 2.582c-3.898 3.898-3.898 10.243 0 14.143a9.937 9.937 0 0 0 7.072 2.93 9.93 9.93 0 0 0 7.07-2.929 10.007 10.007 0 0 0 2.583-4.491 1.001 1.001 0 0 0-1.224-1.224zm-2.772 4.301a7.947 7.947 0 0 1-5.656 2.343 7.953 7.953 0 0 1-5.658-2.344c-3.118-3.119-3.118-8.195 0-11.314a7.923 7.923 0 0 1 2.06-1.483 10.027 10.027 0 0 0 2.89 7.848 9.972 9.972 0 0 0 7.848 2.891 8.036 8.036 0 0 1-1.484 2.059z"></path></svg>
|
||||||
</label>
|
<svg class="light-icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6.993 12c0 2.761 2.246 5.007 5.007 5.007s5.007-2.246 5.007-5.007S14.761 6.993 12 6.993 6.993 9.239 6.993 12zM12 8.993c1.658 0 3.007 1.349 3.007 3.007S13.658 15.007 12 15.007 8.993 13.658 8.993 12 10.342 8.993 12 8.993zM10.998 19h2v3h-2zm0-17h2v3h-2zm-9 9h3v2h-3zm17 0h3v2h-3zM4.219 18.363l2.12-2.122 1.415 1.414-2.12 2.122zM16.24 6.344l2.122-2.122 1.414 1.414-2.122 2.122zM6.342 7.759 4.22 5.637l1.415-1.414 2.12 2.122zm13.434 10.605-1.414 1.414-2.122-2.122 1.414-1.414z"></path></svg>
|
||||||
<script>
|
</label>
|
||||||
const el = document.querySelector(".theme-selection input");
|
<script>
|
||||||
el.checked = (glob.theme === "dark");
|
const el = document.querySelector(".theme-selection input");
|
||||||
</script>
|
el.checked = (glob.theme === "dark");
|
||||||
</div>
|
</script>
|
||||||
<% if (hasTree) { %>
|
|
||||||
<div class="search-item">
|
|
||||||
<svg class="search-icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M10 18a7.952 7.952 0 0 0 4.897-1.688l4.396 4.396 1.414-1.414-4.396-4.396A7.952 7.952 0 0 0 18 10c0-4.411-3.589-8-8-8s-8 3.589-8 8 3.589 8 8 8zm0-14c3.309 0 6 2.691 6 6s-2.691 6-6 6-6-2.691-6-6 2.691-6 6-6z"></path></svg>
|
|
||||||
<input type="text" class="search-input" placeholder="<%= t("share_theme.search_placeholder") %>">
|
|
||||||
</div>
|
</div>
|
||||||
<% } %>
|
<% if (hasTree) { %>
|
||||||
|
<div class="search-item">
|
||||||
|
<svg class="search-icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M10 18a7.952 7.952 0 0 0 4.897-1.688l4.396 4.396 1.414-1.414-4.396-4.396A7.952 7.952 0 0 0 18 10c0-4.411-3.589-8-8-8s-8 3.589-8 8 3.589 8 8 8zm0-14c3.309 0 6 2.691 6 6s-2.691 6-6 6-6-2.691-6-6 2.691-6 6-6z"></path></svg>
|
||||||
|
<input type="text" class="search-input" placeholder="<%= t("share_theme.search_placeholder") %>">
|
||||||
|
</div>
|
||||||
|
<% } %>
|
||||||
|
</div>
|
||||||
|
<% if (hasTree) { %>
|
||||||
|
<nav id="menu">
|
||||||
|
<%- include("tree_item", {note: subRoot.note, activeNote: note, subRoot: subRoot, ancestors}) %>
|
||||||
|
</nav>
|
||||||
|
<% } %>
|
||||||
</div>
|
</div>
|
||||||
<% if (hasTree) { %>
|
|
||||||
<nav id="menu">
|
|
||||||
<%- include("tree_item", {note: subRoot.note, activeNote: note, subRoot: subRoot, ancestors}) %>
|
|
||||||
</nav>
|
|
||||||
<% } %>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<% } %>
|
||||||
|
|
||||||
<div id="right-pane">
|
<div id="right-pane">
|
||||||
<div id="main">
|
<div id="main">
|
||||||
<div id="content" class="type-<%= note.type %><% if (note.type === "text") { %> ck-content<% } %><% if (isEmpty) { %> no-content<% } %>">
|
<div id="content" class="type-<%= note.type %><% if (note.type === "text") { %> ck-content<% } %><% if (isEmpty) { %> no-content<% } %>">
|
||||||
@ -152,7 +155,9 @@ content = content.replaceAll(headingRe, (...match) => {
|
|||||||
<p>This note has no content.</p>
|
<p>This note has no content.</p>
|
||||||
<% } else { %>
|
<% } else { %>
|
||||||
<%
|
<%
|
||||||
content = content.replace(/<img /g, `<img alt="${t("share_theme.image_alt")}" loading="lazy" `);
|
content = content
|
||||||
|
.replace(/<img /g, `<img alt="${t("share_theme.image_alt")}" loading="lazy" `)
|
||||||
|
.replace(/src="(api\/[^"]+)"/g, (m, url) => `src="../${url}${addContentAccessQuery(url.includes('?'))}"`);
|
||||||
%>
|
%>
|
||||||
<%- content %>
|
<%- content %>
|
||||||
<% } %>
|
<% } %>
|
||||||
@ -189,7 +194,7 @@ content = content.replaceAll(headingRe, (...match) => {
|
|||||||
</div>
|
</div>
|
||||||
<% } %>
|
<% } %>
|
||||||
|
|
||||||
<% if (hasTree) { %>
|
<% if (hasTree && !note.isLabelTruthy("shareTemplateNoPrevNext")) { %>
|
||||||
<%- include("prev_next", { note: note, subRoot: subRoot }) %>
|
<%- include("prev_next", { note: note, subRoot: subRoot }) %>
|
||||||
<% } %>
|
<% } %>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
180
pnpm-lock.yaml
generated
180
pnpm-lock.yaml
generated
@ -57,7 +57,7 @@ importers:
|
|||||||
version: 24.10.1
|
version: 24.10.1
|
||||||
'@vitest/browser-webdriverio':
|
'@vitest/browser-webdriverio':
|
||||||
specifier: 4.0.14
|
specifier: 4.0.14
|
||||||
version: 4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@4.0.14)(webdriverio@9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))
|
version: 4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@4.0.14)(webdriverio@9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))
|
||||||
'@vitest/coverage-v8':
|
'@vitest/coverage-v8':
|
||||||
specifier: 4.0.14
|
specifier: 4.0.14
|
||||||
version: 4.0.14(@vitest/browser@4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@4.0.14))(vitest@4.0.14)
|
version: 4.0.14(@vitest/browser@4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@4.0.14))(vitest@4.0.14)
|
||||||
@ -149,11 +149,11 @@ importers:
|
|||||||
specifier: 19.2.0
|
specifier: 19.2.0
|
||||||
version: 19.2.0(react@19.2.0)
|
version: 19.2.0(react@19.2.0)
|
||||||
typedoc:
|
typedoc:
|
||||||
specifier: 0.28.14
|
specifier: 0.28.15
|
||||||
version: 0.28.14(typescript@5.9.3)
|
version: 0.28.15(typescript@5.9.3)
|
||||||
typedoc-plugin-missing-exports:
|
typedoc-plugin-missing-exports:
|
||||||
specifier: 4.1.2
|
specifier: 4.1.2
|
||||||
version: 4.1.2(typedoc@0.28.14(typescript@5.9.3))
|
version: 4.1.2(typedoc@0.28.15(typescript@5.9.3))
|
||||||
|
|
||||||
apps/client:
|
apps/client:
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -933,8 +933,8 @@ importers:
|
|||||||
specifier: 4.0.14
|
specifier: 4.0.14
|
||||||
version: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
|
version: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
|
||||||
webdriverio:
|
webdriverio:
|
||||||
specifier: 9.20.1
|
specifier: 9.21.0
|
||||||
version: 9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
version: 9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
||||||
|
|
||||||
packages/ckeditor5-footnotes:
|
packages/ckeditor5-footnotes:
|
||||||
devDependencies:
|
devDependencies:
|
||||||
@ -993,8 +993,8 @@ importers:
|
|||||||
specifier: 4.0.14
|
specifier: 4.0.14
|
||||||
version: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
|
version: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
|
||||||
webdriverio:
|
webdriverio:
|
||||||
specifier: 9.20.1
|
specifier: 9.21.0
|
||||||
version: 9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
version: 9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
||||||
|
|
||||||
packages/ckeditor5-keyboard-marker:
|
packages/ckeditor5-keyboard-marker:
|
||||||
devDependencies:
|
devDependencies:
|
||||||
@ -1053,8 +1053,8 @@ importers:
|
|||||||
specifier: 4.0.14
|
specifier: 4.0.14
|
||||||
version: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
|
version: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
|
||||||
webdriverio:
|
webdriverio:
|
||||||
specifier: 9.20.1
|
specifier: 9.21.0
|
||||||
version: 9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
version: 9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
||||||
|
|
||||||
packages/ckeditor5-math:
|
packages/ckeditor5-math:
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -1120,8 +1120,8 @@ importers:
|
|||||||
specifier: 4.0.14
|
specifier: 4.0.14
|
||||||
version: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
|
version: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
|
||||||
webdriverio:
|
webdriverio:
|
||||||
specifier: 9.20.1
|
specifier: 9.21.0
|
||||||
version: 9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
version: 9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
||||||
|
|
||||||
packages/ckeditor5-mermaid:
|
packages/ckeditor5-mermaid:
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -1187,8 +1187,8 @@ importers:
|
|||||||
specifier: 4.0.14
|
specifier: 4.0.14
|
||||||
version: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
|
version: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
|
||||||
webdriverio:
|
webdriverio:
|
||||||
specifier: 9.20.1
|
specifier: 9.21.0
|
||||||
version: 9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
version: 9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
||||||
|
|
||||||
packages/codemirror:
|
packages/codemirror:
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -3164,8 +3164,8 @@ packages:
|
|||||||
'@gar/promisify@1.1.3':
|
'@gar/promisify@1.1.3':
|
||||||
resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
|
resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
|
||||||
|
|
||||||
'@gerrit0/mini-shiki@3.14.0':
|
'@gerrit0/mini-shiki@3.17.0':
|
||||||
resolution: {integrity: sha512-c5X8fwPLOtUS8TVdqhynz9iV0GlOtFUT1ppXYzUUlEXe4kbZ/mvMT8wXoT8kCwUka+zsiloq7sD3pZ3+QVTuNQ==}
|
resolution: {integrity: sha512-Bpf6WuFar20ZXL6qU6VpVl4bVQfyyYiX+6O4xrns4nkU3Mr8paeupDbS1HENpcLOYj7pN4Rkd/yCaPA0vQwKww==}
|
||||||
|
|
||||||
'@hapi/hoek@9.3.0':
|
'@hapi/hoek@9.3.0':
|
||||||
resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==}
|
resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==}
|
||||||
@ -4701,17 +4701,17 @@ packages:
|
|||||||
'@selderee/plugin-htmlparser2@0.11.0':
|
'@selderee/plugin-htmlparser2@0.11.0':
|
||||||
resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==}
|
resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==}
|
||||||
|
|
||||||
'@shikijs/engine-oniguruma@3.14.0':
|
'@shikijs/engine-oniguruma@3.17.0':
|
||||||
resolution: {integrity: sha512-TNcYTYMbJyy+ZjzWtt0bG5y4YyMIWC2nyePz+CFMWqm+HnZZyy9SWMgo8Z6KBJVIZnx8XUXS8U2afO6Y0g1Oug==}
|
resolution: {integrity: sha512-flSbHZAiOZDNTrEbULY8DLWavu/TyVu/E7RChpLB4WvKX4iHMfj80C6Hi3TjIWaQtHOW0KC6kzMcuB5TO1hZ8Q==}
|
||||||
|
|
||||||
'@shikijs/langs@3.14.0':
|
'@shikijs/langs@3.17.0':
|
||||||
resolution: {integrity: sha512-DIB2EQY7yPX1/ZH7lMcwrK5pl+ZkP/xoSpUzg9YC8R+evRCCiSQ7yyrvEyBsMnfZq4eBzLzBlugMyTAf13+pzg==}
|
resolution: {integrity: sha512-icmur2n5Ojb+HAiQu6NEcIIJ8oWDFGGEpiqSCe43539Sabpx7Y829WR3QuUW2zjTM4l6V8Sazgb3rrHO2orEAw==}
|
||||||
|
|
||||||
'@shikijs/themes@3.14.0':
|
'@shikijs/themes@3.17.0':
|
||||||
resolution: {integrity: sha512-fAo/OnfWckNmv4uBoUu6dSlkcBc+SA1xzj5oUSaz5z3KqHtEbUypg/9xxgJARtM6+7RVm0Q6Xnty41xA1ma1IA==}
|
resolution: {integrity: sha512-/xEizMHLBmMHwtx4JuOkRf3zwhWD2bmG5BRr0IPjpcWpaq4C3mYEuTk/USAEglN0qPrTwEHwKVpSu/y2jhferA==}
|
||||||
|
|
||||||
'@shikijs/types@3.14.0':
|
'@shikijs/types@3.17.0':
|
||||||
resolution: {integrity: sha512-bQGgC6vrY8U/9ObG1Z/vTro+uclbjjD/uG58RvfxKZVD5p9Yc1ka3tVyEFy7BNJLzxuWyHH5NWynP9zZZS59eQ==}
|
resolution: {integrity: sha512-wjLVfutYWVUnxAjsWEob98xgyaGv0dTEnMZDruU5mRjVN7szcGOfgO+997W2yR6odp+1PtSBNeSITRRTfUzK/g==}
|
||||||
|
|
||||||
'@shikijs/vscode-textmate@10.0.2':
|
'@shikijs/vscode-textmate@10.0.2':
|
||||||
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
|
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
|
||||||
@ -5449,9 +5449,6 @@ packages:
|
|||||||
'@types/node@16.9.1':
|
'@types/node@16.9.1':
|
||||||
resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==}
|
resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==}
|
||||||
|
|
||||||
'@types/node@20.19.24':
|
|
||||||
resolution: {integrity: sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==}
|
|
||||||
|
|
||||||
'@types/node@20.19.25':
|
'@types/node@20.19.25':
|
||||||
resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==}
|
resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==}
|
||||||
|
|
||||||
@ -5852,8 +5849,8 @@ packages:
|
|||||||
'@vue/shared@3.5.14':
|
'@vue/shared@3.5.14':
|
||||||
resolution: {integrity: sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==}
|
resolution: {integrity: sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==}
|
||||||
|
|
||||||
'@wdio/config@9.20.1':
|
'@wdio/config@9.21.0':
|
||||||
resolution: {integrity: sha512-npl2J+rjCDJPjVySgWpciOyhWddn6s7n5sepKXLR7x1ADQHl5zUFv1dHD3jx4OQ9l6lrGQSPaofuz+7e9mu+vg==}
|
resolution: {integrity: sha512-8TP5/q+Agjc43LET1f0LhLmuEI803O3QtZEbSxOkkvJ7/e1jDWPm4qsL7SjQJlx8xGrW0kwRlPl7+U9Sr0dhCQ==}
|
||||||
engines: {node: '>=18.20.0'}
|
engines: {node: '>=18.20.0'}
|
||||||
|
|
||||||
'@wdio/logger@9.18.0':
|
'@wdio/logger@9.18.0':
|
||||||
@ -5871,8 +5868,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-zMmAtse2UMCSOW76mvK3OejauAdcFGuKopNRH7crI0gwKTZtvV89yXWRziz9cVXpFgfmJCjf9edxKFWdhuF5yw==}
|
resolution: {integrity: sha512-zMmAtse2UMCSOW76mvK3OejauAdcFGuKopNRH7crI0gwKTZtvV89yXWRziz9cVXpFgfmJCjf9edxKFWdhuF5yw==}
|
||||||
engines: {node: '>=18.20.0'}
|
engines: {node: '>=18.20.0'}
|
||||||
|
|
||||||
'@wdio/utils@9.20.1':
|
'@wdio/utils@9.21.0':
|
||||||
resolution: {integrity: sha512-C/Gsy5NAatsGUF1eT9Ks/ErR52/X4YI7MSm7BtwNOw8v2Ko+SiCA5qXts61J0A7QYwOn4gfXfBZZnzSAng6G/w==}
|
resolution: {integrity: sha512-aj8ao2V/e6Sv9gZby2ZIj4dMLjwYVba47Nlr+pOfK8N4VKKU0VRLPzvTlfK1HWaoS6u/GBbVx2pefYRrvd72BQ==}
|
||||||
engines: {node: '>=18.20.0'}
|
engines: {node: '>=18.20.0'}
|
||||||
|
|
||||||
'@webassemblyjs/ast@1.14.1':
|
'@webassemblyjs/ast@1.14.1':
|
||||||
@ -5933,6 +5930,10 @@ packages:
|
|||||||
'@xtuc/long@4.2.2':
|
'@xtuc/long@4.2.2':
|
||||||
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
|
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
|
||||||
|
|
||||||
|
'@zip.js/zip.js@2.8.11':
|
||||||
|
resolution: {integrity: sha512-0fztsk/0ryJ+2PPr9EyXS5/Co7OK8q3zY/xOoozEWaUsL5x+C0cyZ4YyMuUffOO2Dx/rAdq4JMPqW0VUtm+vzA==}
|
||||||
|
engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=18.0.0'}
|
||||||
|
|
||||||
'@zip.js/zip.js@2.8.2':
|
'@zip.js/zip.js@2.8.2':
|
||||||
resolution: {integrity: sha512-PI6UdgpSeVoGvzguKHmy2bwOqI3UYkntLZOCpyJSKIi7234c5aJmQYkJB/P4P2YUJkqhbqvu7iM2/0eJZ178nA==}
|
resolution: {integrity: sha512-PI6UdgpSeVoGvzguKHmy2bwOqI3UYkntLZOCpyJSKIi7234c5aJmQYkJB/P4P2YUJkqhbqvu7iM2/0eJZ178nA==}
|
||||||
engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=16.5.0'}
|
engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=16.5.0'}
|
||||||
@ -8599,9 +8600,9 @@ packages:
|
|||||||
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
|
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
|
||||||
deprecated: This package is no longer supported.
|
deprecated: This package is no longer supported.
|
||||||
|
|
||||||
geckodriver@5.0.0:
|
geckodriver@6.1.0:
|
||||||
resolution: {integrity: sha512-vn7TtQ3b9VMJtVXsyWtQQl1fyBVFhQy7UvJF96kPuuJ0or5THH496AD3eUyaDD11+EqCxH9t6V+EP9soZQk4YQ==}
|
resolution: {integrity: sha512-ZRXLa4ZaYTTgUO4Eefw+RsQCleugU2QLb1ME7qTYxxuRj51yAhfnXaItXNs5/vUzfIaDHuZ+YnSF005hfp07nQ==}
|
||||||
engines: {node: '>=18.0.0'}
|
engines: {node: '>=20.0.0'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
generate-function@2.3.1:
|
generate-function@2.3.1:
|
||||||
@ -10616,6 +10617,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-2emPTb1reeLLYwHxyVx993iYyCHEiRRO+y8NFXFPL5kl5q14sgTK76cXyEKkeKCHeRw35SfdkUJ10Q1KfHuiIQ==}
|
resolution: {integrity: sha512-2emPTb1reeLLYwHxyVx993iYyCHEiRRO+y8NFXFPL5kl5q14sgTK76cXyEKkeKCHeRw35SfdkUJ10Q1KfHuiIQ==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
|
|
||||||
|
modern-tar@0.7.2:
|
||||||
|
resolution: {integrity: sha512-TGG1ZRk1TAQ3neuZwahAHke3rKsSlro+ooMYtjh9sl2gGPVMLMuWiHgwC7im9T5bSM566RSo2Dko56ETgEvZcA==}
|
||||||
|
engines: {node: '>=18.0.0'}
|
||||||
|
|
||||||
morphdom@2.7.7:
|
morphdom@2.7.7:
|
||||||
resolution: {integrity: sha512-04GmsiBcalrSCNmzfo+UjU8tt3PhZJKzcOy+r1FlGA7/zri8wre3I1WkYN9PT3sIeIKfW9bpyElA+VzOg2E24g==}
|
resolution: {integrity: sha512-04GmsiBcalrSCNmzfo+UjU8tt3PhZJKzcOy+r1FlGA7/zri8wre3I1WkYN9PT3sIeIKfW9bpyElA+VzOg2E24g==}
|
||||||
|
|
||||||
@ -14043,8 +14048,8 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
typedoc: ^0.28.1
|
typedoc: ^0.28.1
|
||||||
|
|
||||||
typedoc@0.28.14:
|
typedoc@0.28.15:
|
||||||
resolution: {integrity: sha512-ftJYPvpVfQvFzpkoSfHLkJybdA/geDJ8BGQt/ZnkkhnBYoYW6lBgPQXu6vqLxO4X75dA55hX8Af847H5KXlEFA==}
|
resolution: {integrity: sha512-mw2/2vTL7MlT+BVo43lOsufkkd2CJO4zeOSuWQQsiXoV2VuEn7f6IZp2jsUDPmBMABpgR0R5jlcJ2OGEFYmkyg==}
|
||||||
engines: {node: '>= 18', pnpm: '>= 10'}
|
engines: {node: '>= 18', pnpm: '>= 10'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@ -14525,12 +14530,12 @@ packages:
|
|||||||
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
|
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
|
||||||
engines: {node: '>= 8'}
|
engines: {node: '>= 8'}
|
||||||
|
|
||||||
webdriver@9.20.1:
|
webdriver@9.21.0:
|
||||||
resolution: {integrity: sha512-QtvYqPai2NOnq7qePPH6kNSwk7+tnmSvnlOnY8dIT/Y24TPdQp44NjF/BUYAWIlqoBlZqHClQFTSVwT2qvO2Tw==}
|
resolution: {integrity: sha512-XLOhpU/EFPo4TMk+0fRli4g1WriUujxrfDxGT/QRq0MJsfhSYPF8FdefFdL5gHIrJfSKscaQHGWkbnsHftfqeg==}
|
||||||
engines: {node: '>=18.20.0'}
|
engines: {node: '>=18.20.0'}
|
||||||
|
|
||||||
webdriverio@9.20.1:
|
webdriverio@9.21.0:
|
||||||
resolution: {integrity: sha512-QVM/asb5sDESz37ow/BAOA0z2HtUJsuAjPKHdw+Vx92PaQP3EfHwTgxK2T5rgwa0WRNh+c+n/0nEqIvqBl01sA==}
|
resolution: {integrity: sha512-7teaXajOuNdn2UyyKlqMLssJjf0vDEih+Lo+tE/gHOt/P+mB8CinZym4PGtsriZLcyt4xV+Cun3hDmXM+pL26A==}
|
||||||
engines: {node: '>=18.20.0'}
|
engines: {node: '>=18.20.0'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
puppeteer-core: '>=22.x || <=24.x'
|
puppeteer-core: '>=22.x || <=24.x'
|
||||||
@ -16042,8 +16047,6 @@ snapshots:
|
|||||||
'@ckeditor/ckeditor5-utils': 47.2.0
|
'@ckeditor/ckeditor5-utils': 47.2.0
|
||||||
ckeditor5: 47.2.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
|
ckeditor5: 47.2.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
|
||||||
es-toolkit: 1.39.5
|
es-toolkit: 1.39.5
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
'@ckeditor/ckeditor5-editor-multi-root@47.2.0':
|
'@ckeditor/ckeditor5-editor-multi-root@47.2.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -16093,6 +16096,8 @@ snapshots:
|
|||||||
'@ckeditor/ckeditor5-core': 47.2.0
|
'@ckeditor/ckeditor5-core': 47.2.0
|
||||||
'@ckeditor/ckeditor5-engine': 47.2.0
|
'@ckeditor/ckeditor5-engine': 47.2.0
|
||||||
'@ckeditor/ckeditor5-utils': 47.2.0
|
'@ckeditor/ckeditor5-utils': 47.2.0
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
'@ckeditor/ckeditor5-essentials@47.2.0':
|
'@ckeditor/ckeditor5-essentials@47.2.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -16749,8 +16754,6 @@ snapshots:
|
|||||||
'@ckeditor/ckeditor5-icons': 47.2.0
|
'@ckeditor/ckeditor5-icons': 47.2.0
|
||||||
'@ckeditor/ckeditor5-ui': 47.2.0
|
'@ckeditor/ckeditor5-ui': 47.2.0
|
||||||
'@ckeditor/ckeditor5-utils': 47.2.0
|
'@ckeditor/ckeditor5-utils': 47.2.0
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
'@ckeditor/ckeditor5-upload@47.2.0':
|
'@ckeditor/ckeditor5-upload@47.2.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -18056,12 +18059,12 @@ snapshots:
|
|||||||
|
|
||||||
'@gar/promisify@1.1.3': {}
|
'@gar/promisify@1.1.3': {}
|
||||||
|
|
||||||
'@gerrit0/mini-shiki@3.14.0':
|
'@gerrit0/mini-shiki@3.17.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@shikijs/engine-oniguruma': 3.14.0
|
'@shikijs/engine-oniguruma': 3.17.0
|
||||||
'@shikijs/langs': 3.14.0
|
'@shikijs/langs': 3.17.0
|
||||||
'@shikijs/themes': 3.14.0
|
'@shikijs/themes': 3.17.0
|
||||||
'@shikijs/types': 3.14.0
|
'@shikijs/types': 3.17.0
|
||||||
'@shikijs/vscode-textmate': 10.0.2
|
'@shikijs/vscode-textmate': 10.0.2
|
||||||
|
|
||||||
'@hapi/hoek@9.3.0': {}
|
'@hapi/hoek@9.3.0': {}
|
||||||
@ -19777,20 +19780,20 @@ snapshots:
|
|||||||
domhandler: 5.0.3
|
domhandler: 5.0.3
|
||||||
selderee: 0.11.0
|
selderee: 0.11.0
|
||||||
|
|
||||||
'@shikijs/engine-oniguruma@3.14.0':
|
'@shikijs/engine-oniguruma@3.17.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@shikijs/types': 3.14.0
|
'@shikijs/types': 3.17.0
|
||||||
'@shikijs/vscode-textmate': 10.0.2
|
'@shikijs/vscode-textmate': 10.0.2
|
||||||
|
|
||||||
'@shikijs/langs@3.14.0':
|
'@shikijs/langs@3.17.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@shikijs/types': 3.14.0
|
'@shikijs/types': 3.17.0
|
||||||
|
|
||||||
'@shikijs/themes@3.14.0':
|
'@shikijs/themes@3.17.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@shikijs/types': 3.14.0
|
'@shikijs/types': 3.17.0
|
||||||
|
|
||||||
'@shikijs/types@3.14.0':
|
'@shikijs/types@3.17.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@shikijs/vscode-textmate': 10.0.2
|
'@shikijs/vscode-textmate': 10.0.2
|
||||||
'@types/hast': 3.0.4
|
'@types/hast': 3.0.4
|
||||||
@ -20725,7 +20728,7 @@ snapshots:
|
|||||||
|
|
||||||
'@types/mute-stream@0.0.4':
|
'@types/mute-stream@0.0.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 22.19.1
|
'@types/node': 24.10.1
|
||||||
|
|
||||||
'@types/node-forge@1.3.14':
|
'@types/node-forge@1.3.14':
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -20733,10 +20736,6 @@ snapshots:
|
|||||||
|
|
||||||
'@types/node@16.9.1': {}
|
'@types/node@16.9.1': {}
|
||||||
|
|
||||||
'@types/node@20.19.24':
|
|
||||||
dependencies:
|
|
||||||
undici-types: 6.21.0
|
|
||||||
|
|
||||||
'@types/node@20.19.25':
|
'@types/node@20.19.25':
|
||||||
dependencies:
|
dependencies:
|
||||||
undici-types: 6.21.0
|
undici-types: 6.21.0
|
||||||
@ -20914,7 +20913,7 @@ snapshots:
|
|||||||
|
|
||||||
'@types/yauzl@2.10.3':
|
'@types/yauzl@2.10.3':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 22.18.13
|
'@types/node': 24.10.1
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
|
'@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
|
||||||
@ -21141,11 +21140,11 @@ snapshots:
|
|||||||
- bufferutil
|
- bufferutil
|
||||||
- utf-8-validate
|
- utf-8-validate
|
||||||
|
|
||||||
'@vitest/browser-webdriverio@4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@4.0.14)(webdriverio@9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))':
|
'@vitest/browser-webdriverio@4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@4.0.14)(webdriverio@9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vitest/browser': 4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@4.0.14)
|
'@vitest/browser': 4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@4.0.14)
|
||||||
vitest: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
|
vitest: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
|
||||||
webdriverio: 9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
webdriverio: 9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- bufferutil
|
- bufferutil
|
||||||
- msw
|
- msw
|
||||||
@ -21301,11 +21300,11 @@ snapshots:
|
|||||||
|
|
||||||
'@vue/shared@3.5.14': {}
|
'@vue/shared@3.5.14': {}
|
||||||
|
|
||||||
'@wdio/config@9.20.1':
|
'@wdio/config@9.21.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@wdio/logger': 9.18.0
|
'@wdio/logger': 9.18.0
|
||||||
'@wdio/types': 9.20.0
|
'@wdio/types': 9.20.0
|
||||||
'@wdio/utils': 9.20.1
|
'@wdio/utils': 9.21.0
|
||||||
deepmerge-ts: 7.1.5
|
deepmerge-ts: 7.1.5
|
||||||
glob: 10.4.5
|
glob: 10.4.5
|
||||||
import-meta-resolve: 4.2.0
|
import-meta-resolve: 4.2.0
|
||||||
@ -21325,13 +21324,13 @@ snapshots:
|
|||||||
|
|
||||||
'@wdio/repl@9.16.2':
|
'@wdio/repl@9.16.2':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.19.24
|
'@types/node': 20.19.25
|
||||||
|
|
||||||
'@wdio/types@9.20.0':
|
'@wdio/types@9.20.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.19.24
|
'@types/node': 20.19.25
|
||||||
|
|
||||||
'@wdio/utils@9.20.1':
|
'@wdio/utils@9.21.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@puppeteer/browsers': 2.10.10
|
'@puppeteer/browsers': 2.10.10
|
||||||
'@wdio/logger': 9.18.0
|
'@wdio/logger': 9.18.0
|
||||||
@ -21339,7 +21338,7 @@ snapshots:
|
|||||||
decamelize: 6.0.1
|
decamelize: 6.0.1
|
||||||
deepmerge-ts: 7.1.5
|
deepmerge-ts: 7.1.5
|
||||||
edgedriver: 6.1.2
|
edgedriver: 6.1.2
|
||||||
geckodriver: 5.0.0
|
geckodriver: 6.1.0
|
||||||
get-port: 7.1.0
|
get-port: 7.1.0
|
||||||
import-meta-resolve: 4.2.0
|
import-meta-resolve: 4.2.0
|
||||||
locate-app: 2.5.0
|
locate-app: 2.5.0
|
||||||
@ -21435,6 +21434,8 @@ snapshots:
|
|||||||
|
|
||||||
'@xtuc/long@4.2.2': {}
|
'@xtuc/long@4.2.2': {}
|
||||||
|
|
||||||
|
'@zip.js/zip.js@2.8.11': {}
|
||||||
|
|
||||||
'@zip.js/zip.js@2.8.2': {}
|
'@zip.js/zip.js@2.8.2': {}
|
||||||
|
|
||||||
abab@2.0.6: {}
|
abab@2.0.6: {}
|
||||||
@ -24932,18 +24933,15 @@ snapshots:
|
|||||||
wide-align: 1.1.5
|
wide-align: 1.1.5
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
geckodriver@5.0.0:
|
geckodriver@6.1.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@wdio/logger': 9.18.0
|
'@wdio/logger': 9.18.0
|
||||||
'@zip.js/zip.js': 2.8.2
|
'@zip.js/zip.js': 2.8.11
|
||||||
decamelize: 6.0.1
|
decamelize: 6.0.1
|
||||||
http-proxy-agent: 7.0.2
|
http-proxy-agent: 7.0.2
|
||||||
https-proxy-agent: 7.0.6
|
https-proxy-agent: 7.0.6
|
||||||
node-fetch: 3.3.2
|
modern-tar: 0.7.2
|
||||||
tar-fs: 3.1.1
|
|
||||||
which: 5.0.0
|
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- bare-buffer
|
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
generate-function@2.3.1:
|
generate-function@2.3.1:
|
||||||
@ -27452,6 +27450,8 @@ snapshots:
|
|||||||
hasown: 2.0.2
|
hasown: 2.0.2
|
||||||
isarray: 2.0.5
|
isarray: 2.0.5
|
||||||
|
|
||||||
|
modern-tar@0.7.2: {}
|
||||||
|
|
||||||
morphdom@2.7.7: {}
|
morphdom@2.7.7: {}
|
||||||
|
|
||||||
mrmime@2.0.1: {}
|
mrmime@2.0.1: {}
|
||||||
@ -31446,13 +31446,13 @@ snapshots:
|
|||||||
|
|
||||||
typedarray@0.0.6: {}
|
typedarray@0.0.6: {}
|
||||||
|
|
||||||
typedoc-plugin-missing-exports@4.1.2(typedoc@0.28.14(typescript@5.9.3)):
|
typedoc-plugin-missing-exports@4.1.2(typedoc@0.28.15(typescript@5.9.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
typedoc: 0.28.14(typescript@5.9.3)
|
typedoc: 0.28.15(typescript@5.9.3)
|
||||||
|
|
||||||
typedoc@0.28.14(typescript@5.9.3):
|
typedoc@0.28.15(typescript@5.9.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@gerrit0/mini-shiki': 3.14.0
|
'@gerrit0/mini-shiki': 3.17.0
|
||||||
lunr: 2.3.9
|
lunr: 2.3.9
|
||||||
markdown-it: 14.1.0
|
markdown-it: 14.1.0
|
||||||
minimatch: 9.0.5
|
minimatch: 9.0.5
|
||||||
@ -31824,7 +31824,7 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@opentelemetry/api': 1.9.0
|
'@opentelemetry/api': 1.9.0
|
||||||
'@types/node': 24.10.1
|
'@types/node': 24.10.1
|
||||||
'@vitest/browser-webdriverio': 4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@4.0.14)(webdriverio@9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))
|
'@vitest/browser-webdriverio': 4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@4.0.14)(webdriverio@9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))
|
||||||
'@vitest/ui': 4.0.14(vitest@4.0.14)
|
'@vitest/ui': 4.0.14(vitest@4.0.14)
|
||||||
happy-dom: 20.0.11
|
happy-dom: 20.0.11
|
||||||
jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
||||||
@ -31914,15 +31914,15 @@ snapshots:
|
|||||||
|
|
||||||
web-streams-polyfill@3.3.3: {}
|
web-streams-polyfill@3.3.3: {}
|
||||||
|
|
||||||
webdriver@9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5):
|
webdriver@9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.19.24
|
'@types/node': 20.19.25
|
||||||
'@types/ws': 8.18.1
|
'@types/ws': 8.18.1
|
||||||
'@wdio/config': 9.20.1
|
'@wdio/config': 9.21.0
|
||||||
'@wdio/logger': 9.18.0
|
'@wdio/logger': 9.18.0
|
||||||
'@wdio/protocols': 9.16.2
|
'@wdio/protocols': 9.16.2
|
||||||
'@wdio/types': 9.20.0
|
'@wdio/types': 9.20.0
|
||||||
'@wdio/utils': 9.20.1
|
'@wdio/utils': 9.21.0
|
||||||
deepmerge-ts: 7.1.5
|
deepmerge-ts: 7.1.5
|
||||||
https-proxy-agent: 7.0.6
|
https-proxy-agent: 7.0.6
|
||||||
undici: 6.21.3
|
undici: 6.21.3
|
||||||
@ -31933,16 +31933,16 @@ snapshots:
|
|||||||
- supports-color
|
- supports-color
|
||||||
- utf-8-validate
|
- utf-8-validate
|
||||||
|
|
||||||
webdriverio@9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5):
|
webdriverio@9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.19.24
|
'@types/node': 20.19.25
|
||||||
'@types/sinonjs__fake-timers': 8.1.5
|
'@types/sinonjs__fake-timers': 8.1.5
|
||||||
'@wdio/config': 9.20.1
|
'@wdio/config': 9.21.0
|
||||||
'@wdio/logger': 9.18.0
|
'@wdio/logger': 9.18.0
|
||||||
'@wdio/protocols': 9.16.2
|
'@wdio/protocols': 9.16.2
|
||||||
'@wdio/repl': 9.16.2
|
'@wdio/repl': 9.16.2
|
||||||
'@wdio/types': 9.20.0
|
'@wdio/types': 9.20.0
|
||||||
'@wdio/utils': 9.20.1
|
'@wdio/utils': 9.21.0
|
||||||
archiver: 7.0.1
|
archiver: 7.0.1
|
||||||
aria-query: 5.3.2
|
aria-query: 5.3.2
|
||||||
cheerio: 1.1.2
|
cheerio: 1.1.2
|
||||||
@ -31959,7 +31959,7 @@ snapshots:
|
|||||||
rgb2hex: 0.2.5
|
rgb2hex: 0.2.5
|
||||||
serialize-error: 12.0.0
|
serialize-error: 12.0.0
|
||||||
urlpattern-polyfill: 10.1.0
|
urlpattern-polyfill: 10.1.0
|
||||||
webdriver: 9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
webdriver: 9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- bare-buffer
|
- bare-buffer
|
||||||
- bufferutil
|
- bufferutil
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user