From 4ca296894d35bc827d6f20652c38c1678b7b558e Mon Sep 17 00:00:00 2001 From: kliu Date: Mon, 31 Mar 2025 18:01:52 +0800 Subject: [PATCH 01/11] Use --link-color as the color of links --- src/public/stylesheets/theme-next/forms.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/public/stylesheets/theme-next/forms.css b/src/public/stylesheets/theme-next/forms.css index 30e8eec22..f7aa04831 100644 --- a/src/public/stylesheets/theme-next/forms.css +++ b/src/public/stylesheets/theme-next/forms.css @@ -595,7 +595,7 @@ body a.tn-link:visited, box-shadow: 0 0 0 0 var(--background); border-radius: 4px; background: var(--background); - color: currentColor; + color: var(--link-color); font-weight: normal; text-decoration: underline; From 3cdbc76fff140cc60cfa6796c3a2c24f9a5fbc05 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 31 Mar 2025 18:36:57 +0300 Subject: [PATCH 02/11] feat(mermaid): display an error when PNG export could not occur --- src/public/app/services/utils.ts | 75 +++++++++++-------- .../abstract_svg_split_type_widget.ts | 11 ++- src/public/translations/en/translation.json | 3 + 3 files changed, 56 insertions(+), 33 deletions(-) diff --git a/src/public/app/services/utils.ts b/src/public/app/services/utils.ts index a4b0aa750..9d39bb279 100644 --- a/src/public/app/services/utils.ts +++ b/src/public/app/services/utils.ts @@ -650,47 +650,58 @@ function triggerDownload(fileName: string, dataUrl: string) { * * @param nameWithoutExtension the name of the file. The .png suffix is automatically added to it. * @param svgContent the content of the SVG file download. - * @returns `true` if the operation succeeded (width/height present), or `false` if the download was not triggered. + * @returns a promise which resolves if the operation was successful, or rejects if it failed (permissions issue or some other issue). */ function downloadSvgAsPng(nameWithoutExtension: string, svgContent: string) { - const mime = "image/svg+xml"; + return new Promise((resolve, reject) => { + const mime = "image/svg+xml"; - // First, we need to determine the width and the height from the input SVG. - const svgDocument = (new DOMParser()).parseFromString(svgContent, mime); - const width = svgDocument.documentElement?.getAttribute("width"); - const height = svgDocument.documentElement?.getAttribute("height"); + // First, we need to determine the width and the height from the input SVG. + const svgDocument = (new DOMParser()).parseFromString(svgContent, mime); + const width = svgDocument.documentElement?.getAttribute("width"); + const height = svgDocument.documentElement?.getAttribute("height"); - if (!width || !height) { - return false; - } + if (!width || !height) { + reject(); + return; + } - // Convert the image to a blob. - const svgBlob = new Blob([ svgContent ], { - type: mime - }) + // Convert the image to a blob. + const svgBlob = new Blob([ svgContent ], { + type: mime + }) - // Create an image element and load the SVG. - const imageEl = new Image(); - imageEl.width = parseFloat(width); - imageEl.height = parseFloat(height); - imageEl.src = URL.createObjectURL(svgBlob); - imageEl.onload = () => { - // Draw the image with a canvas. - const canvasEl = document.createElement("canvas"); - canvasEl.width = imageEl.width; - canvasEl.height = imageEl.height; - document.body.appendChild(canvasEl); + // Create an image element and load the SVG. + const imageEl = new Image(); + imageEl.width = parseFloat(width); + imageEl.height = parseFloat(height); + imageEl.onload = () => { + try { + // Draw the image with a canvas. + const canvasEl = document.createElement("canvas"); + canvasEl.width = imageEl.width; + canvasEl.height = imageEl.height; + document.body.appendChild(canvasEl); - const ctx = canvasEl.getContext("2d"); - ctx?.drawImage(imageEl, 0, 0); - URL.revokeObjectURL(imageEl.src); + const ctx = canvasEl.getContext("2d"); + if (!ctx) { + reject(); + } - const imgUri = canvasEl.toDataURL("image/png") - triggerDownload(`${nameWithoutExtension}.png`, imgUri); - document.body.removeChild(canvasEl); - }; + ctx?.drawImage(imageEl, 0, 0); + URL.revokeObjectURL(imageEl.src); - return true; + const imgUri = canvasEl.toDataURL("image/png") + triggerDownload(`${nameWithoutExtension}.png`, imgUri); + document.body.removeChild(canvasEl); + resolve(); + } catch (e) { + console.warn(e); + reject(); + } + }; + imageEl.src = URL.createObjectURL(svgBlob); + }); } /** diff --git a/src/public/app/widgets/type_widgets/abstract_svg_split_type_widget.ts b/src/public/app/widgets/type_widgets/abstract_svg_split_type_widget.ts index aeea96089..061694349 100644 --- a/src/public/app/widgets/type_widgets/abstract_svg_split_type_widget.ts +++ b/src/public/app/widgets/type_widgets/abstract_svg_split_type_widget.ts @@ -2,7 +2,9 @@ import type { EventData } from "../../components/app_context.js"; import type FNote from "../../entities/fnote.js"; import { t } from "../../services/i18n.js"; import server from "../../services/server.js"; +import toast from "../../services/toast.js"; import utils from "../../services/utils.js"; +import ws from "../../services/ws.js"; import OnClickButtonWidget from "../buttons/onclick_button.js"; import AbstractSplitTypeWidget from "./abstract_split_type_widget.js"; @@ -218,11 +220,18 @@ export default abstract class AbstractSvgSplitTypeWidget extends AbstractSplitTy } async exportPngEvent({ ntxId }: EventData<"exportPng">) { + console.log("Export to PNG", this.noteContext?.noteId, ntxId, this.svg); if (!this.isNoteContext(ntxId) || this.note?.type !== "mermaid" || !this.svg) { + console.log("Return"); return; } - utils.downloadSvgAsPng(this.note.title, this.svg); + try { + await utils.downloadSvgAsPng(this.note.title, this.svg); + } catch (e) { + console.warn(e); + toast.showError(t("svg.export_to_png")); + } } } diff --git a/src/public/translations/en/translation.json b/src/public/translations/en/translation.json index 13bb74dfd..e985ffc4d 100644 --- a/src/public/translations/en/translation.json +++ b/src/public/translations/en/translation.json @@ -1746,5 +1746,8 @@ }, "png_export_button": { "button_title": "Export diagram as PNG" + }, + "svg": { + "export_to_png": "The diagram could not be exported to PNG." } } From 3d0ec27038c104ce1738e2d02f5e4e874ea6b09d Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 31 Mar 2025 18:54:57 +0300 Subject: [PATCH 03/11] fix(mermaid): fix export to PNG for some diagram types --- src/public/app/services/utils.spec.ts | 22 +++++++++++++ src/public/app/services/utils.ts | 46 +++++++++++++++++++++------ 2 files changed, 58 insertions(+), 10 deletions(-) create mode 100644 src/public/app/services/utils.spec.ts diff --git a/src/public/app/services/utils.spec.ts b/src/public/app/services/utils.spec.ts new file mode 100644 index 000000000..2885fa270 --- /dev/null +++ b/src/public/app/services/utils.spec.ts @@ -0,0 +1,22 @@ +import { describe, expect, it } from "vitest"; +import { getSizeFromSvg } from "./utils.js"; + +describe("getSizeFromSvg", () => { + it("parses width & height attribute", () => { + const svg = ``; + const result = getSizeFromSvg(svg); + expect(result).toMatchObject({ + width: 714, + height: 574, + }); + }); + + it("parses viewbox", () => { + const svg = ``; + const result = getSizeFromSvg(svg); + expect(result).toMatchObject({ + width: 872.2750244140625, + height: 655 + }); + }); +}); diff --git a/src/public/app/services/utils.ts b/src/public/app/services/utils.ts index 9d39bb279..bb85729ba 100644 --- a/src/public/app/services/utils.ts +++ b/src/public/app/services/utils.ts @@ -2,6 +2,8 @@ import dayjs from "dayjs"; import { Modal } from "bootstrap"; import type { ViewScope } from "./link.js"; +const SVG_MIME = "image/svg+xml"; + function reloadFrontendApp(reason?: string) { if (reason) { logInfo(`Frontend app reload: ${reason}`); @@ -654,27 +656,23 @@ function triggerDownload(fileName: string, dataUrl: string) { */ function downloadSvgAsPng(nameWithoutExtension: string, svgContent: string) { return new Promise((resolve, reject) => { - const mime = "image/svg+xml"; - // First, we need to determine the width and the height from the input SVG. - const svgDocument = (new DOMParser()).parseFromString(svgContent, mime); - const width = svgDocument.documentElement?.getAttribute("width"); - const height = svgDocument.documentElement?.getAttribute("height"); - - if (!width || !height) { + const result = getSizeFromSvg(svgContent); + if (!result) { reject(); return; } // Convert the image to a blob. + const { width, height } = result; const svgBlob = new Blob([ svgContent ], { - type: mime + type: SVG_MIME }) // Create an image element and load the SVG. const imageEl = new Image(); - imageEl.width = parseFloat(width); - imageEl.height = parseFloat(height); + imageEl.width = width; + imageEl.height = height; imageEl.onload = () => { try { // Draw the image with a canvas. @@ -704,6 +702,34 @@ function downloadSvgAsPng(nameWithoutExtension: string, svgContent: string) { }); } +export function getSizeFromSvg(svgContent: string) { + const svgDocument = (new DOMParser()).parseFromString(svgContent, SVG_MIME); + + // Try to use width & height attributes if available. + let width = svgDocument.documentElement?.getAttribute("width"); + let height = svgDocument.documentElement?.getAttribute("height"); + + // If not, use the viewbox. + if (!width || !height) { + const viewBox = svgDocument.documentElement?.getAttribute("viewBox"); + if (viewBox) { + const viewBoxParts = viewBox.split(" "); + width = viewBoxParts[2]; + height = viewBoxParts[3]; + } + } + + if (width && height) { + return { + width: parseFloat(width), + height: parseFloat(height) + } + } else { + console.warn("SVG export error", svgDocument.documentElement); + return null; + } +} + /** * Compares two semantic version strings. * Returns: From 6976c9555ee2b0061edaeab0968e4a1c1aa1c6e0 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 31 Mar 2025 21:18:40 +0300 Subject: [PATCH 04/11] fix(mermaid): bypass security issue when generating PNG --- src/public/app/services/utils.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/public/app/services/utils.ts b/src/public/app/services/utils.ts index bb85729ba..004b38762 100644 --- a/src/public/app/services/utils.ts +++ b/src/public/app/services/utils.ts @@ -665,14 +665,12 @@ function downloadSvgAsPng(nameWithoutExtension: string, svgContent: string) { // Convert the image to a blob. const { width, height } = result; - const svgBlob = new Blob([ svgContent ], { - type: SVG_MIME - }) // Create an image element and load the SVG. const imageEl = new Image(); imageEl.width = width; imageEl.height = height; + imageEl.crossOrigin = "anonymous"; imageEl.onload = () => { try { // Draw the image with a canvas. @@ -687,7 +685,6 @@ function downloadSvgAsPng(nameWithoutExtension: string, svgContent: string) { } ctx?.drawImage(imageEl, 0, 0); - URL.revokeObjectURL(imageEl.src); const imgUri = canvasEl.toDataURL("image/png") triggerDownload(`${nameWithoutExtension}.png`, imgUri); @@ -698,7 +695,8 @@ function downloadSvgAsPng(nameWithoutExtension: string, svgContent: string) { reject(); } }; - imageEl.src = URL.createObjectURL(svgBlob); + imageEl.onerror = (e) => reject(e); + imageEl.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgContent)}`; }); } From ff4353794263e024e7753e37a5d649e1a035010e Mon Sep 17 00:00:00 2001 From: Jin <22962980+JYC333@users.noreply.github.com> Date: Mon, 31 Mar 2025 21:08:22 +0200 Subject: [PATCH 05/11] =?UTF-8?q?fix:=20=F0=9F=90=9B=20fix=20redirect=20ur?= =?UTF-8?q?l=20with=20reverse=20proxy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/auth.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/auth.ts b/src/services/auth.ts index 69bffa73b..7d55c3d32 100644 --- a/src/services/auth.ts +++ b/src/services/auth.ts @@ -28,7 +28,7 @@ function checkAuth(req: Request, res: Response, next: NextFunction) { } else if (currentTotpStatus !== lastAuthState.totpEnabled || currentSsoStatus !== lastAuthState.ssoEnabled) { req.session.destroy((err) => { if (err) console.error('Error destroying session:', err); - res.redirect('/login'); + res.redirect('login'); }); return; } else if (currentSsoStatus) { @@ -36,7 +36,7 @@ function checkAuth(req: Request, res: Response, next: NextFunction) { next(); return; } - res.redirect('/login'); + res.redirect('login'); return; } else if (!req.session.loggedIn && !noAuthentication) { const redirectToShare = options.getOptionBool("redirectBareDomain"); From 96eb7487e7555900e6f2a85a6a1a1f925c769b10 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 31 Mar 2025 22:51:27 +0300 Subject: [PATCH 06/11] chore(gitattributes): set up CRLF handling --- .gitattributes | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.gitattributes b/.gitattributes index b0cbaf83d..c2de311c3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,4 +2,12 @@ package-lock.json linguist-generated=true **/package-lock.json linguist-generated=true src/public/app/doc_notes/en/User[[:space:]]Guide/** linguist-generated=true src/public/app/doc_notes/en/User[[:space:]]Guide/**/*.md eol=lf + +demo/**/*.html eol=lf +demo/**/*.json eol=lf +demo/**/*.svg eol=lf +demo/**/*.txt eol=lf +demo/**/*.js eol=lf +demo/**/*.css eol=lf + libraries/** linguist-vendored \ No newline at end of file From b6137c07478fa5e5e144a351fbc487a6c08377e1 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 31 Mar 2025 22:55:55 +0300 Subject: [PATCH 07/11] chore(docs): normalize whitespace --- db/demo.zip | Bin 911124 -> 911149 bytes demo/!!!meta.json | 2114 ++++++++--------- demo/root/Trilium Demo.html | 13 +- .../Trilium Demo/Books/Book template.html | 13 +- demo/root/Trilium Demo/Books/To read.html | 3 + .../Formatting examples/Checkbox lists.html | 4 + .../Formatting examples/Code blocks.html | 1 + .../Formatting examples/Math.html | 2 + .../Trilium Demo/Inbox/The Last Question.html | 3 +- demo/root/Trilium Demo/Journal.html | 1 + .../2021/11 - November/28 - Tuesday.html | 1 + .../28 - Tuesday/Christmas gift ideas.html | 1 + .../28 - Tuesday/Trusted timestamping.html | 2 + .../2021/12 - December/18 - Monday.html | 1 + .../2021/12 - December/19 - Tuesday.html | 1 + .../2021/12 - December/20 - Wednesday.html | 1 + .../2021/12 - December/21 - Thursday.html | 1 + .../2021/12 - December/22 - Friday.html | 1 + .../2021/12 - December/23 - Saturday.html | 1 + .../24 - Sunday - Christmas Eve!.html | 1 + .../DONE - Buy a board game for Al.html | 1 + .../2021/12 - December/30 - Thursday.html | 1 + .../Trilium Demo/Journal/Day template.html | 1 + .../Scripting examples/Task manager.html | 1 + .../Done/Buy a board game for Alice.html | 1 + .../Maybe Black Swan.html | 1 + .../Tech/Linux/Bash scripting.html | 1 + .../Bash scripting/Bash startup modes.html | 13 +- .../Tech/Linux/Bash scripting/While loop.html | 1 + .../Overview/Platform architecture.html | 1 + 30 files changed, 1120 insertions(+), 1067 deletions(-) diff --git a/db/demo.zip b/db/demo.zip index e098ac986b654fcbca9ca5fe9988886a5c320f88..d13245f7711c9316fa9dc79d3e4ed5986a629bb7 100644 GIT binary patch delta 36464 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

Welcome to TriliumNext Notes! +

This is initial "demo" document provided by TriliumNext by default to showcase some of its features and also give you some ideas how you might structure your notes. You can play with it, modify note content and tree structure as you wish.

If you need any help, visit TriliumNext website: https://github.com/TriliumNext +

-

Cleanup

+

Cleanup

+

Once you're finished with experimenting and want to cleanup these pages, you can simply delete them all.

-
 
-

Formatting

+

Formatting

+

TriliumNext supports classic formatting like italic, bold, bold and italic. Of course you can add links like this one pointing to google.com +

Lists

Ordered: +

  1. First Item
  2. @@ -50,6 +56,7 @@

Unordered: +

  • Item
  • diff --git a/demo/root/Trilium Demo/Books/Book template.html b/demo/root/Trilium Demo/Books/Book template.html index 79aba14ae..b6ece231e 100644 --- a/demo/root/Trilium Demo/Books/Book template.html +++ b/demo/root/Trilium Demo/Books/Book template.html @@ -14,17 +14,22 @@

    Main characters

    +

    … here put main characters …

     

    -

    Plot

    +

    Plot

    +

    … describe main plot lines …

     

    -

    Tone

    +

    Tone

    +

     

    -

    Genre

    +

    Genre

    +

    scifi / drama / romance

     

    -

    Similar books

    +

    Similar books

    +
    diff --git a/demo/root/Trilium Demo/Books/To read.html b/demo/root/Trilium Demo/Books/To read.html index 17b164b6c..30cf1d0d1 100644 --- a/demo/root/Trilium Demo/Books/To read.html +++ b/demo/root/Trilium Demo/Books/To read.html @@ -14,11 +14,14 @@

    Checkout Kindle daily deals: https://www.amazon.com/gp/feature.html?docId=1000677541 +

    diff --git a/demo/root/Trilium Demo/Formatting examples/Checkbox lists.html b/demo/root/Trilium Demo/Formatting examples/Checkbox lists.html index d4fc44b13..edde9eae0 100644 --- a/demo/root/Trilium Demo/Formatting examples/Checkbox lists.html +++ b/demo/root/Trilium Demo/Formatting examples/Checkbox lists.html @@ -18,21 +18,25 @@
diff --git a/demo/root/Trilium Demo/Formatting examples/Code blocks.html b/demo/root/Trilium Demo/Formatting examples/Code blocks.html index a1cc12a9f..5bb2da12c 100644 --- a/demo/root/Trilium Demo/Formatting examples/Code blocks.html +++ b/demo/root/Trilium Demo/Formatting examples/Code blocks.html @@ -22,6 +22,7 @@ scheme for the syntax highlighting is adjustable in settings. 

function helloWorld() {
 	alert("Hello world");
 }
+

For larger pieces of code it is better to use a code note, which uses a fully-fledged code editor (CodeMirror). For an example of a code note, see Custom request handler.

diff --git a/demo/root/Trilium Demo/Formatting examples/Math.html b/demo/root/Trilium Demo/Formatting examples/Math.html index 14c06cfed..d9413cb9e 100644 --- a/demo/root/Trilium Demo/Formatting examples/Math.html +++ b/demo/root/Trilium Demo/Formatting examples/Math.html @@ -15,7 +15,9 @@

\(% \f is defined as #1f(#2) using the macro \f\relax{x} = \int_{-\infty}^\infty     \f\hat\xi\,e^{2 \pi i \xi x}     \,d\xi\)Some math examples:

\[\displaystyle \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } }\] +

Another:

\[\displaystyle \left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)\] +

Inline math is also possible: \(c^2 = a^2 + b^2\) Neat!

 

diff --git a/demo/root/Trilium Demo/Inbox/The Last Question.html b/demo/root/Trilium Demo/Inbox/The Last Question.html index 69429c858..4e7605891 100644 --- a/demo/root/Trilium Demo/Inbox/The Last Question.html +++ b/demo/root/Trilium Demo/Inbox/The Last Question.html @@ -18,10 +18,11 @@ href="https://en.wikipedia.org/wiki/Short_story">short storyby American writer Isaac Asimov. It first appeared in the November 1956 issue of Science Fiction Quarterly.

 
+ class="include-note" data-note-id="ZWCYra81yOFO" data-box-size="medium"> 

This page demonstrates two things:

diff --git a/demo/root/Trilium Demo/Journal.html b/demo/root/Trilium Demo/Journal.html index a7df54648..b80ca54e2 100644 --- a/demo/root/Trilium Demo/Journal.html +++ b/demo/root/Trilium Demo/Journal.html @@ -68,6 +68,7 @@

You can read some explanation on how this journal works here: https://github.com/zadam/trilium/wiki/Day-notes +

diff --git a/demo/root/Trilium Demo/Journal/2021/11 - November/28 - Tuesday.html b/demo/root/Trilium Demo/Journal/2021/11 - November/28 - Tuesday.html index 5171b6ee2..e4a99c109 100644 --- a/demo/root/Trilium Demo/Journal/2021/11 - November/28 - Tuesday.html +++ b/demo/root/Trilium Demo/Journal/2021/11 - November/28 - Tuesday.html @@ -18,6 +18,7 @@
  • diff --git a/demo/root/Trilium Demo/Journal/2021/11 - November/28 - Tuesday/Christmas gift ideas.html b/demo/root/Trilium Demo/Journal/2021/11 - November/28 - Tuesday/Christmas gift ideas.html index 2a2d08336..01ad36c16 100644 --- a/demo/root/Trilium Demo/Journal/2021/11 - November/28 - Tuesday/Christmas gift ideas.html +++ b/demo/root/Trilium Demo/Journal/2021/11 - November/28 - Tuesday/Christmas gift ideas.html @@ -17,6 +17,7 @@
  • XBox
  • Candles
  • Portable speakers +
  • ...?
  • diff --git a/demo/root/Trilium Demo/Journal/2021/11 - November/28 - Tuesday/Trusted timestamping.html b/demo/root/Trilium Demo/Journal/2021/11 - November/28 - Tuesday/Trusted timestamping.html index 0a85f8618..bae5a1ed0 100644 --- a/demo/root/Trilium Demo/Journal/2021/11 - November/28 - Tuesday/Trusted timestamping.html +++ b/demo/root/Trilium Demo/Journal/2021/11 - November/28 - Tuesday/Trusted timestamping.html @@ -14,8 +14,10 @@

    Wiki: https://en.wikipedia.org/wiki/Trusted_timestamping +

    Bozho: https://techblog.bozho.net/using-trusted-timestamping-java/ +

    Trusted timestamping is the process of securely keeping track of the creation and modification time of a document. Security here diff --git a/demo/root/Trilium Demo/Journal/2021/12 - December/18 - Monday.html b/demo/root/Trilium Demo/Journal/2021/12 - December/18 - Monday.html index ae490681e..3722a62c0 100644 --- a/demo/root/Trilium Demo/Journal/2021/12 - December/18 - Monday.html +++ b/demo/root/Trilium Demo/Journal/2021/12 - December/18 - Monday.html @@ -16,6 +16,7 @@

    Miscellaneous notes done on monday ...

     

    Interesting video: https://www.youtube.com/watch?v=_eSAF_qT_FY&feature=youtu.be +

     

     

    diff --git a/demo/root/Trilium Demo/Journal/2021/12 - December/19 - Tuesday.html b/demo/root/Trilium Demo/Journal/2021/12 - December/19 - Tuesday.html index f0309b26d..487b71530 100644 --- a/demo/root/Trilium Demo/Journal/2021/12 - December/19 - Tuesday.html +++ b/demo/root/Trilium Demo/Journal/2021/12 - December/19 - Tuesday.html @@ -18,6 +18,7 @@
  • diff --git a/demo/root/Trilium Demo/Journal/2021/12 - December/20 - Wednesday.html b/demo/root/Trilium Demo/Journal/2021/12 - December/20 - Wednesday.html index 28245eb1a..ae559b3c1 100644 --- a/demo/root/Trilium Demo/Journal/2021/12 - December/20 - Wednesday.html +++ b/demo/root/Trilium Demo/Journal/2021/12 - December/20 - Wednesday.html @@ -18,6 +18,7 @@
  • diff --git a/demo/root/Trilium Demo/Journal/2021/12 - December/21 - Thursday.html b/demo/root/Trilium Demo/Journal/2021/12 - December/21 - Thursday.html index 2ff2ac742..28b77ec56 100644 --- a/demo/root/Trilium Demo/Journal/2021/12 - December/21 - Thursday.html +++ b/demo/root/Trilium Demo/Journal/2021/12 - December/21 - Thursday.html @@ -18,6 +18,7 @@
  • diff --git a/demo/root/Trilium Demo/Journal/2021/12 - December/22 - Friday.html b/demo/root/Trilium Demo/Journal/2021/12 - December/22 - Friday.html index f8ec2e8e5..3545fd3d7 100644 --- a/demo/root/Trilium Demo/Journal/2021/12 - December/22 - Friday.html +++ b/demo/root/Trilium Demo/Journal/2021/12 - December/22 - Friday.html @@ -18,6 +18,7 @@
  • diff --git a/demo/root/Trilium Demo/Journal/2021/12 - December/23 - Saturday.html b/demo/root/Trilium Demo/Journal/2021/12 - December/23 - Saturday.html index 6973b8531..912b715c0 100644 --- a/demo/root/Trilium Demo/Journal/2021/12 - December/23 - Saturday.html +++ b/demo/root/Trilium Demo/Journal/2021/12 - December/23 - Saturday.html @@ -18,6 +18,7 @@
  • diff --git a/demo/root/Trilium Demo/Journal/2021/12 - December/24 - Sunday - Christmas Eve!.html b/demo/root/Trilium Demo/Journal/2021/12 - December/24 - Sunday - Christmas Eve!.html index 29a1e0cd2..c243a035c 100644 --- a/demo/root/Trilium Demo/Journal/2021/12 - December/24 - Sunday - Christmas Eve!.html +++ b/demo/root/Trilium Demo/Journal/2021/12 - December/24 - Sunday - Christmas Eve!.html @@ -18,6 +18,7 @@
  • diff --git a/demo/root/Trilium Demo/Journal/2021/12 - December/24 - Sunday - Christmas Eve!/DONE - Buy a board game for Al.html b/demo/root/Trilium Demo/Journal/2021/12 - December/24 - Sunday - Christmas Eve!/DONE - Buy a board game for Al.html index 55d9b2909..e7367a06c 100644 --- a/demo/root/Trilium Demo/Journal/2021/12 - December/24 - Sunday - Christmas Eve!/DONE - Buy a board game for Al.html +++ b/demo/root/Trilium Demo/Journal/2021/12 - December/24 - Sunday - Christmas Eve!/DONE - Buy a board game for Al.html @@ -18,6 +18,7 @@ width="209" height="300">

    Maybe CodeNames? https://boardgamegeek.com/boardgame/178900/codenames +

    diff --git a/demo/root/Trilium Demo/Journal/2021/12 - December/30 - Thursday.html b/demo/root/Trilium Demo/Journal/2021/12 - December/30 - Thursday.html index 36cbd2ed6..133fae97b 100644 --- a/demo/root/Trilium Demo/Journal/2021/12 - December/30 - Thursday.html +++ b/demo/root/Trilium Demo/Journal/2021/12 - December/30 - Thursday.html @@ -18,6 +18,7 @@
  • diff --git a/demo/root/Trilium Demo/Journal/Day template.html b/demo/root/Trilium Demo/Journal/Day template.html index 623273a9e..44bd101ae 100644 --- a/demo/root/Trilium Demo/Journal/Day template.html +++ b/demo/root/Trilium Demo/Journal/Day template.html @@ -18,6 +18,7 @@
  • diff --git a/demo/root/Trilium Demo/Scripting examples/Task manager.html b/demo/root/Trilium Demo/Scripting examples/Task manager.html index 1b4822074..0194f9364 100644 --- a/demo/root/Trilium Demo/Scripting examples/Task manager.html +++ b/demo/root/Trilium Demo/Scripting examples/Task manager.html @@ -15,6 +15,7 @@

    This is a simple TODO/Task manager. You can see some description and explanation here: https://github.com/zadam/trilium/wiki/Task-manager +

    Please note that this is meant as scripting example only and feature/bug support is very limited.

    diff --git a/demo/root/Trilium Demo/Scripting examples/Task manager/Done/Buy a board game for Alice.html b/demo/root/Trilium Demo/Scripting examples/Task manager/Done/Buy a board game for Alice.html index afa05f7a8..c62a21b6c 100644 --- a/demo/root/Trilium Demo/Scripting examples/Task manager/Done/Buy a board game for Alice.html +++ b/demo/root/Trilium Demo/Scripting examples/Task manager/Done/Buy a board game for Alice.html @@ -71,6 +71,7 @@

    Maybe CodeNames? https://boardgamegeek.com/boardgame/178900/codenames +

    diff --git a/demo/root/Trilium Demo/Scripting examples/Task manager/Locations/mall/Buy some book for Bob/Maybe Black Swan.html b/demo/root/Trilium Demo/Scripting examples/Task manager/Locations/mall/Buy some book for Bob/Maybe Black Swan.html index ba291c1ae..51831b17f 100644 --- a/demo/root/Trilium Demo/Scripting examples/Task manager/Locations/mall/Buy some book for Bob/Maybe Black Swan.html +++ b/demo/root/Trilium Demo/Scripting examples/Task manager/Locations/mall/Buy some book for Bob/Maybe Black Swan.html @@ -14,6 +14,7 @@

    https://en.wikipedia.org/wiki/The_Black_Swan:_The_Impact_of_the_Highly_Improbable +

    The Black Swan: The Impact of the Highly Improbable is a 2007 book by author and former options trader diff --git a/demo/root/Trilium Demo/Tech/Linux/Bash scripting.html b/demo/root/Trilium Demo/Tech/Linux/Bash scripting.html index aaa6cd1ad..55c1364be 100644 --- a/demo/root/Trilium Demo/Tech/Linux/Bash scripting.html +++ b/demo/root/Trilium Demo/Tech/Linux/Bash scripting.html @@ -25,6 +25,7 @@ and Apple's macOS (formerly OS X). A version is also available for Windows 10.

    Bash on Wikipedia +

    diff --git a/demo/root/Trilium Demo/Tech/Linux/Bash scripting/Bash startup modes.html b/demo/root/Trilium Demo/Tech/Linux/Bash scripting/Bash startup modes.html index 53524fd41..2f686d2de 100644 --- a/demo/root/Trilium Demo/Tech/Linux/Bash scripting/Bash startup modes.html +++ b/demo/root/Trilium Demo/Tech/Linux/Bash scripting/Bash startup modes.html @@ -14,6 +14,7 @@

    Login shell

    +

    As a "login shell", Bash reads and sets (executes) the user's profile from /etc/profile and one of ~/.bash_profile, ~/.bash_login, or ~/.profile (in that order, using the first one that's readable!).

    @@ -23,6 +24,7 @@ that only make sense for the initial user login. That's why all UNIX® shells have (should have) a "login" mode.

    Methods to start Bash as a login shell: +

    • the first character of argv[0] is - (a hyphen): traditional UNIX® shells @@ -31,17 +33,20 @@
    • Bash is started with the --login option

    Methods to test for login shell mode: +

    Related switches: +

    • --noprofile disables reading of all profile files
    -

    Interactive shell

    +

    Interactive shell

    +

    When Bash starts as an interactive non-login shell, it reads and executes commands from ~/.bashrc. This file should contain, for example, aliases, since they need to be defined in every shell as they're not inherited from @@ -51,11 +56,13 @@ The classic way to have a system-wide rc file is to source /etc/bashrc from every user's ~/.bashrc.

    Methods to test for interactive-shell mode: +

    • the special parameter $- contains the letter i (lowercase I)

    Related switches: +

    • -i forces the interactive mode
    • @@ -64,7 +71,8 @@
    • --rcfile defines another startup file (instead of /etc/bash.bashrc and ~/.bashrc)
    -

    SH mode

    +

    SH mode

    +

    When Bash starts in SH compatiblity mode, it tries to mimic the startup behaviour of historical versions of sh as closely as possible, while conforming to the POSIX® standard as well. The profile files read are /etc/profile @@ -74,6 +82,7 @@ file.

    After the startup files are read, Bash enters the POSIX(r) compatiblity mode (for running, not for starting!).

    Bash starts in sh compatiblity mode when: +

    • diff --git a/demo/root/Trilium Demo/Tech/Linux/Bash scripting/While loop.html b/demo/root/Trilium Demo/Tech/Linux/Bash scripting/While loop.html index c0ca3c2f0..edf0b35c5 100644 --- a/demo/root/Trilium Demo/Tech/Linux/Bash scripting/While loop.html +++ b/demo/root/Trilium Demo/Tech/Linux/Bash scripting/While loop.html @@ -14,6 +14,7 @@

      Documentation: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_02.html +

      #!/bin/bash
       # This script opens 4 terminal windows.
       
      diff --git a/demo/root/Trilium Demo/Tech/node.js/Overview/Platform architecture.html b/demo/root/Trilium Demo/Tech/node.js/Overview/Platform architecture.html
      index 0fbed08bf..0e6215a28 100644
      --- a/demo/root/Trilium Demo/Tech/node.js/Overview/Platform architecture.html	
      +++ b/demo/root/Trilium Demo/Tech/node.js/Overview/Platform architecture.html	
      @@ -74,6 +74,7 @@
                                                                                                                               href="https://en.wikipedia.org/wiki/Node.js#cite_note-b1-31">[31]Developers can create scalable servers without using threading,
                                                                                                                                 by using a simplified model of event-driven programming that
                                                                                                                                 uses callbacks to signal the completion of a task.[31]
      +
                                                                                                                           

    From 8c6dbb4446a7cb07e8dd8c5ed4df14b4f694dd2e Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 31 Mar 2025 23:20:14 +0300 Subject: [PATCH 08/11] feat(docs): preserve note IDs --- electron-utils.ts | 2 +- src/services/sql_init.ts | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/electron-utils.ts b/electron-utils.ts index d492d606a..ebaefa13d 100644 --- a/electron-utils.ts +++ b/electron-utils.ts @@ -8,7 +8,7 @@ export async function initializeDatabase() { cls.init(() => { if (!sqlInit.isDbInitialized()) { - sqlInit.createInitialDatabase(); + sqlInit.createInitialDatabase(true); } }); } diff --git a/src/services/sql_init.ts b/src/services/sql_init.ts index afe8324e1..b03c12f51 100644 --- a/src/services/sql_init.ts +++ b/src/services/sql_init.ts @@ -64,7 +64,7 @@ async function initDbConnection() { dbReady.resolve(); } -async function createInitialDatabase() { +async function createInitialDatabase(preserveIds?: boolean) { if (isDbInitialized()) { throw new Error("DB is already initialized"); } @@ -112,7 +112,9 @@ async function createInitialDatabase() { const dummyTaskContext = new TaskContext("no-progress-reporting", "import", false); - await zipImportService.importZip(dummyTaskContext, demoFile, rootNote); + await zipImportService.importZip(dummyTaskContext, demoFile, rootNote, { + preserveIds + }); sql.transactional(() => { // this needs to happen after ZIP import, From f80c5ba29e286a35b110fb22fbd1dadcab782e76 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 01:38:04 +0000 Subject: [PATCH 09/11] chore(deps): update dependency sass to v1.86.1 --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index da65a3d3f..a0d45df1c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "trilium", - "version": "0.92.5", + "version": "0.92.5-beta", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "trilium", - "version": "0.92.5", + "version": "0.92.5-beta", "license": "AGPL-3.0-only", "dependencies": { "@braintree/sanitize-url": "7.1.1", @@ -181,7 +181,7 @@ "react": "18.3.1", "react-dom": "18.3.1", "rimraf": "6.0.1", - "sass": "1.86.0", + "sass": "1.86.1", "sass-loader": "16.0.5", "script-loader": "0.7.2", "split.js": "1.6.5", @@ -18275,9 +18275,9 @@ } }, "node_modules/sass": { - "version": "1.86.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.86.0.tgz", - "integrity": "sha512-zV8vGUld/+mP4KbMLJMX7TyGCuUp7hnkOScgCMsWuHtns8CWBoz+vmEhoGMXsaJrbUP8gj+F1dLvVe79sK8UdA==", + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.86.1.tgz", + "integrity": "sha512-Yaok4XELL1L9Im/ZUClKu//D2OP1rOljKj0Gf34a+GzLbMveOzL7CfqYo+JUa5Xt1nhTCW+OcKp/FtR7/iqj1w==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 9035538b5..1f2e968b8 100644 --- a/package.json +++ b/package.json @@ -238,7 +238,7 @@ "react": "18.3.1", "react-dom": "18.3.1", "rimraf": "6.0.1", - "sass": "1.86.0", + "sass": "1.86.1", "sass-loader": "16.0.5", "script-loader": "0.7.2", "split.js": "1.6.5", From 5db393bfda42165052b72403e1b8e4f855ef893c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 01:38:19 +0000 Subject: [PATCH 10/11] chore(deps): update dependency typescript-eslint to v8.29.0 --- package-lock.json | 102 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/package-lock.json b/package-lock.json index da65a3d3f..0a32a4295 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "trilium", - "version": "0.92.5", + "version": "0.92.5-beta", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "trilium", - "version": "0.92.5", + "version": "0.92.5-beta", "license": "AGPL-3.0-only", "dependencies": { "@braintree/sanitize-url": "7.1.1", @@ -193,7 +193,7 @@ "tsx": "4.19.3", "typedoc": "0.28.1", "typescript": "5.8.2", - "typescript-eslint": "8.28.0", + "typescript-eslint": "8.29.0", "vanilla-js-wheel-zoom": "9.0.4", "vitest": "3.0.9", "webpack": "5.98.0", @@ -5588,17 +5588,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.28.0.tgz", - "integrity": "sha512-lvFK3TCGAHsItNdWZ/1FkvpzCxTHUVuFrdnOGLMa0GGCFIbCgQWVk3CzCGdA7kM3qGVc+dfW9tr0Z/sHnGDFyg==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.0.tgz", + "integrity": "sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.28.0", - "@typescript-eslint/type-utils": "8.28.0", - "@typescript-eslint/utils": "8.28.0", - "@typescript-eslint/visitor-keys": "8.28.0", + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/type-utils": "8.29.0", + "@typescript-eslint/utils": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -5618,16 +5618,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.28.0.tgz", - "integrity": "sha512-LPcw1yHD3ToaDEoljFEfQ9j2xShY367h7FZ1sq5NJT9I3yj4LHer1Xd1yRSOdYy9BpsrxU7R+eoDokChYM53lQ==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", + "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.28.0", - "@typescript-eslint/types": "8.28.0", - "@typescript-eslint/typescript-estree": "8.28.0", - "@typescript-eslint/visitor-keys": "8.28.0", + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", "debug": "^4.3.4" }, "engines": { @@ -5643,14 +5643,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.28.0.tgz", - "integrity": "sha512-u2oITX3BJwzWCapoZ/pXw6BCOl8rJP4Ij/3wPoGvY8XwvXflOzd1kLrDUUUAIEdJSFh+ASwdTHqtan9xSg8buw==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.0.tgz", + "integrity": "sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.28.0", - "@typescript-eslint/visitor-keys": "8.28.0" + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5661,14 +5661,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.28.0.tgz", - "integrity": "sha512-oRoXu2v0Rsy/VoOGhtWrOKDiIehvI+YNrDk5Oqj40Mwm0Yt01FC/Q7nFqg088d3yAsR1ZcZFVfPCTTFCe/KPwg==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.0.tgz", + "integrity": "sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.28.0", - "@typescript-eslint/utils": "8.28.0", + "@typescript-eslint/typescript-estree": "8.29.0", + "@typescript-eslint/utils": "8.29.0", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" }, @@ -5685,9 +5685,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.28.0.tgz", - "integrity": "sha512-bn4WS1bkKEjx7HqiwG2JNB3YJdC1q6Ue7GyGlwPHyt0TnVq6TtD/hiOdTZt71sq0s7UzqBFXD8t8o2e63tXgwA==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.0.tgz", + "integrity": "sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==", "dev": true, "license": "MIT", "engines": { @@ -5699,14 +5699,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.28.0.tgz", - "integrity": "sha512-H74nHEeBGeklctAVUvmDkxB1mk+PAZ9FiOMPFncdqeRBXxk1lWSYraHw8V12b7aa6Sg9HOBNbGdSHobBPuQSuA==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.0.tgz", + "integrity": "sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.28.0", - "@typescript-eslint/visitor-keys": "8.28.0", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -5752,16 +5752,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.28.0.tgz", - "integrity": "sha512-OELa9hbTYciYITqgurT1u/SzpQVtDLmQMFzy/N8pQE+tefOyCWT79jHsav294aTqV1q1u+VzqDGbuujvRYaeSQ==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.0.tgz", + "integrity": "sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.28.0", - "@typescript-eslint/types": "8.28.0", - "@typescript-eslint/typescript-estree": "8.28.0" + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5776,13 +5776,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.28.0.tgz", - "integrity": "sha512-hbn8SZ8w4u2pRwgQ1GlUrPKE+t2XvcCW5tTRF7j6SMYIuYG37XuzIW44JCZPa36evi0Oy2SnM664BlIaAuQcvg==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.0.tgz", + "integrity": "sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.28.0", + "@typescript-eslint/types": "8.29.0", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -20380,15 +20380,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.28.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.28.0.tgz", - "integrity": "sha512-jfZtxJoHm59bvoCMYCe2BM0/baMswRhMmYhy+w6VfcyHrjxZ0OJe0tGasydCpIpA+A/WIJhTyZfb3EtwNC/kHQ==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.29.0.tgz", + "integrity": "sha512-ep9rVd9B4kQsZ7ZnWCVxUE/xDLUUUsRzE0poAeNu+4CkFErLfuvPt/qtm2EpnSyfvsR0S6QzDFSrPCFBwf64fg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.28.0", - "@typescript-eslint/parser": "8.28.0", - "@typescript-eslint/utils": "8.28.0" + "@typescript-eslint/eslint-plugin": "8.29.0", + "@typescript-eslint/parser": "8.29.0", + "@typescript-eslint/utils": "8.29.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" diff --git a/package.json b/package.json index 9035538b5..0a5e8954a 100644 --- a/package.json +++ b/package.json @@ -250,7 +250,7 @@ "tsx": "4.19.3", "typedoc": "0.28.1", "typescript": "5.8.2", - "typescript-eslint": "8.28.0", + "typescript-eslint": "8.29.0", "vanilla-js-wheel-zoom": "9.0.4", "vitest": "3.0.9", "webpack": "5.98.0", From 217a28ef01e55ed0aa92c7191f1caea17a758817 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 01:38:36 +0000 Subject: [PATCH 11/11] chore(deps): update vitest monorepo to v3.1.1 --- package-lock.json | 122 +++++++++++++++++++++++----------------------- package.json | 4 +- 2 files changed, 63 insertions(+), 63 deletions(-) diff --git a/package-lock.json b/package-lock.json index da65a3d3f..c69a71836 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "trilium", - "version": "0.92.5", + "version": "0.92.5-beta", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "trilium", - "version": "0.92.5", + "version": "0.92.5-beta", "license": "AGPL-3.0-only", "dependencies": { "@braintree/sanitize-url": "7.1.1", @@ -157,7 +157,7 @@ "@types/ws": "8.18.0", "@types/xml2js": "0.4.14", "@types/yargs": "17.0.33", - "@vitest/coverage-v8": "3.0.9", + "@vitest/coverage-v8": "3.1.1", "autoprefixer": "10.4.21", "bootstrap": "5.3.3", "copy-webpack-plugin": "13.0.0", @@ -195,7 +195,7 @@ "typescript": "5.8.2", "typescript-eslint": "8.28.0", "vanilla-js-wheel-zoom": "9.0.4", - "vitest": "3.0.9", + "vitest": "3.1.1", "webpack": "5.98.0", "webpack-cli": "6.0.1", "webpack-dev-middleware": "7.4.2" @@ -5794,9 +5794,9 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.0.9.tgz", - "integrity": "sha512-15OACZcBtQ34keIEn19JYTVuMFTlFrClclwWjHo/IRPg/8ELpkgNTl0o7WLP9WO9XGH6+tip9CPYtEOrIDJvBA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.1.1.tgz", + "integrity": "sha512-MgV6D2dhpD6Hp/uroUoAIvFqA8AuvXEFBC2eepG3WFc1pxTfdk1LEqqkWoWhjz+rytoqrnUUCdf6Lzco3iHkLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5809,7 +5809,7 @@ "istanbul-reports": "^3.1.7", "magic-string": "^0.30.17", "magicast": "^0.3.5", - "std-env": "^3.8.0", + "std-env": "^3.8.1", "test-exclude": "^7.0.1", "tinyrainbow": "^2.0.0" }, @@ -5817,8 +5817,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "3.0.9", - "vitest": "3.0.9" + "@vitest/browser": "3.1.1", + "vitest": "3.1.1" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -5827,14 +5827,14 @@ } }, "node_modules/@vitest/expect": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.9.tgz", - "integrity": "sha512-5eCqRItYgIML7NNVgJj6TVCmdzE7ZVgJhruW0ziSQV4V7PvLkDL1bBkBdcTs/VuIz0IxPb5da1IDSqc1TR9eig==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.1.tgz", + "integrity": "sha512-q/zjrW9lgynctNbwvFtQkGK9+vvHA5UzVi2V8APrp1C6fG6/MuYYkmlx4FubuqLycCeSdHD5aadWfua/Vr0EUA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.0.9", - "@vitest/utils": "3.0.9", + "@vitest/spy": "3.1.1", + "@vitest/utils": "3.1.1", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" }, @@ -5843,13 +5843,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.9.tgz", - "integrity": "sha512-ryERPIBOnvevAkTq+L1lD+DTFBRcjueL9lOUfXsLfwP92h4e+Heb+PjiqS3/OURWPtywfafK0kj++yDFjWUmrA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.1.tgz", + "integrity": "sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.0.9", + "@vitest/spy": "3.1.1", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, @@ -5870,9 +5870,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.9.tgz", - "integrity": "sha512-OW9F8t2J3AwFEwENg3yMyKWweF7oRJlMyHOMIhO5F3n0+cgQAJZBjNgrF8dLwFTEXl5jUqBLXd9QyyKv8zEcmA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.1.tgz", + "integrity": "sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==", "dev": true, "license": "MIT", "dependencies": { @@ -5883,13 +5883,13 @@ } }, "node_modules/@vitest/runner": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.9.tgz", - "integrity": "sha512-NX9oUXgF9HPfJSwl8tUZCMP1oGx2+Sf+ru6d05QjzQz4OwWg0psEzwY6VexP2tTHWdOkhKHUIZH+fS6nA7jfOw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.1.tgz", + "integrity": "sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "3.0.9", + "@vitest/utils": "3.1.1", "pathe": "^2.0.3" }, "funding": { @@ -5904,13 +5904,13 @@ "license": "MIT" }, "node_modules/@vitest/snapshot": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.9.tgz", - "integrity": "sha512-AiLUiuZ0FuA+/8i19mTYd+re5jqjEc2jZbgJ2up0VY0Ddyyxg/uUtBDpIFAy4uzKaQxOW8gMgBdAJJ2ydhu39A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.1.tgz", + "integrity": "sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.9", + "@vitest/pretty-format": "3.1.1", "magic-string": "^0.30.17", "pathe": "^2.0.3" }, @@ -5926,9 +5926,9 @@ "license": "MIT" }, "node_modules/@vitest/spy": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.9.tgz", - "integrity": "sha512-/CcK2UDl0aQ2wtkp3YVWldrpLRNCfVcIOFGlVGKO4R5eajsH393Z1yiXLVQ7vWsj26JOEjeZI0x5sm5P4OGUNQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.1.tgz", + "integrity": "sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5939,13 +5939,13 @@ } }, "node_modules/@vitest/utils": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.9.tgz", - "integrity": "sha512-ilHM5fHhZ89MCp5aAaM9uhfl1c2JdxVxl3McqsdVyVNN6JffnEen8UMCdRTzOhGXNQGo5GNL9QugHrz727Wnng==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.1.tgz", + "integrity": "sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.9", + "@vitest/pretty-format": "3.1.1", "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" }, @@ -11002,9 +11002,9 @@ } }, "node_modules/expect-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", - "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", + "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -19038,9 +19038,9 @@ } }, "node_modules/std-env": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", - "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.1.tgz", + "integrity": "sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==", "dev": true, "license": "MIT" }, @@ -20884,9 +20884,9 @@ } }, "node_modules/vite-node": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.9.tgz", - "integrity": "sha512-w3Gdx7jDcuT9cNn9jExXgOyKmf5UOTb6WMHz8LGAm54eS1Elf5OuBhCxl6zJxGhEeIkgsE1WbHuoL0mj/UXqXg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.1.1.tgz", + "integrity": "sha512-V+IxPAE2FvXpTCHXyNem0M+gWm6J7eRyWPR6vYoG/Gl+IscNOjXzztUhimQgTxaAoUoj40Qqimaa0NLIOOAH4w==", "dev": true, "license": "MIT", "dependencies": { @@ -20929,31 +20929,31 @@ } }, "node_modules/vitest": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.9.tgz", - "integrity": "sha512-BbcFDqNyBlfSpATmTtXOAOj71RNKDDvjBM/uPfnxxVGrG+FSH2RQIwgeEngTaTkuU/h0ScFvf+tRcKfYXzBybQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.1.1.tgz", + "integrity": "sha512-kiZc/IYmKICeBAZr9DQ5rT7/6bD9G7uqQEki4fxazi1jdVl2mWGzedtBs5s6llz59yQhVb7FFY2MbHzHCnT79Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "3.0.9", - "@vitest/mocker": "3.0.9", - "@vitest/pretty-format": "^3.0.9", - "@vitest/runner": "3.0.9", - "@vitest/snapshot": "3.0.9", - "@vitest/spy": "3.0.9", - "@vitest/utils": "3.0.9", + "@vitest/expect": "3.1.1", + "@vitest/mocker": "3.1.1", + "@vitest/pretty-format": "^3.1.1", + "@vitest/runner": "3.1.1", + "@vitest/snapshot": "3.1.1", + "@vitest/spy": "3.1.1", + "@vitest/utils": "3.1.1", "chai": "^5.2.0", "debug": "^4.4.0", - "expect-type": "^1.1.0", + "expect-type": "^1.2.0", "magic-string": "^0.30.17", "pathe": "^2.0.3", - "std-env": "^3.8.0", + "std-env": "^3.8.1", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinypool": "^1.0.2", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0", - "vite-node": "3.0.9", + "vite-node": "3.1.1", "why-is-node-running": "^2.3.0" }, "bin": { @@ -20969,8 +20969,8 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.0.9", - "@vitest/ui": "3.0.9", + "@vitest/browser": "3.1.1", + "@vitest/ui": "3.1.1", "happy-dom": "*", "jsdom": "*" }, diff --git a/package.json b/package.json index 9035538b5..dc0e79051 100644 --- a/package.json +++ b/package.json @@ -214,7 +214,7 @@ "@types/ws": "8.18.0", "@types/xml2js": "0.4.14", "@types/yargs": "17.0.33", - "@vitest/coverage-v8": "3.0.9", + "@vitest/coverage-v8": "3.1.1", "autoprefixer": "10.4.21", "bootstrap": "5.3.3", "copy-webpack-plugin": "13.0.0", @@ -252,7 +252,7 @@ "typescript": "5.8.2", "typescript-eslint": "8.28.0", "vanilla-js-wheel-zoom": "9.0.4", - "vitest": "3.0.9", + "vitest": "3.1.1", "webpack": "5.98.0", "webpack-cli": "6.0.1", "webpack-dev-middleware": "7.4.2"