From 3fecc4c648efcc8e8cc22871d96acb455ca1a5a1 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 1 Jan 2026 23:33:21 +0200 Subject: [PATCH 01/13] chore(vite): remove vite/client from spec types --- apps/client/tsconfig.spec.json | 1 - apps/server/tsconfig.spec.json | 1 - packages/codemirror/tsconfig.spec.json | 1 - packages/commons/tsconfig.spec.json | 1 - packages/express-partial-content/tsconfig.spec.json | 1 - packages/highlightjs/tsconfig.spec.json | 1 - 6 files changed, 6 deletions(-) diff --git a/apps/client/tsconfig.spec.json b/apps/client/tsconfig.spec.json index 152d9cb27..123091ac7 100644 --- a/apps/client/tsconfig.spec.json +++ b/apps/client/tsconfig.spec.json @@ -4,7 +4,6 @@ "outDir": "./out-tsc/vitest", "types": [ "vitest/importMeta", - "vite/client", "node", "vitest" ], diff --git a/apps/server/tsconfig.spec.json b/apps/server/tsconfig.spec.json index b3905c4f7..96cd1671f 100644 --- a/apps/server/tsconfig.spec.json +++ b/apps/server/tsconfig.spec.json @@ -8,7 +8,6 @@ "types": [ "vitest/globals", "vitest/importMeta", - "vite/client", "node", "vitest" ] diff --git a/packages/codemirror/tsconfig.spec.json b/packages/codemirror/tsconfig.spec.json index f7f4942ed..f0103afff 100644 --- a/packages/codemirror/tsconfig.spec.json +++ b/packages/codemirror/tsconfig.spec.json @@ -5,7 +5,6 @@ "types": [ "vitest/globals", "vitest/importMeta", - "vite/client", "node", "vitest" ] diff --git a/packages/commons/tsconfig.spec.json b/packages/commons/tsconfig.spec.json index f68d9d3b8..5ea497077 100644 --- a/packages/commons/tsconfig.spec.json +++ b/packages/commons/tsconfig.spec.json @@ -5,7 +5,6 @@ "types": [ "vitest/globals", "vitest/importMeta", - "vite/client", "node", "vitest" ], diff --git a/packages/express-partial-content/tsconfig.spec.json b/packages/express-partial-content/tsconfig.spec.json index 51c5a98fc..a6f940ae1 100644 --- a/packages/express-partial-content/tsconfig.spec.json +++ b/packages/express-partial-content/tsconfig.spec.json @@ -5,7 +5,6 @@ "types": [ "vitest/globals", "vitest/importMeta", - "vite/client", "node", "vitest" ] diff --git a/packages/highlightjs/tsconfig.spec.json b/packages/highlightjs/tsconfig.spec.json index d5788402a..c69b0fde6 100644 --- a/packages/highlightjs/tsconfig.spec.json +++ b/packages/highlightjs/tsconfig.spec.json @@ -5,7 +5,6 @@ "types": [ "vitest/globals", "vitest/importMeta", - "vite/client", "node", "vitest" ], From da9c9ac3464496592f831045d181c11bf1e50e04 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 1 Jan 2026 23:34:39 +0200 Subject: [PATCH 02/13] chore(vite): remove vite/importMeta from spec types --- apps/client/tsconfig.spec.json | 1 - apps/server/tsconfig.spec.json | 1 - packages/codemirror/tsconfig.spec.json | 1 - packages/commons/tsconfig.spec.json | 1 - packages/express-partial-content/tsconfig.spec.json | 1 - packages/highlightjs/tsconfig.spec.json | 1 - 6 files changed, 6 deletions(-) diff --git a/apps/client/tsconfig.spec.json b/apps/client/tsconfig.spec.json index 123091ac7..43317d4e0 100644 --- a/apps/client/tsconfig.spec.json +++ b/apps/client/tsconfig.spec.json @@ -3,7 +3,6 @@ "compilerOptions": { "outDir": "./out-tsc/vitest", "types": [ - "vitest/importMeta", "node", "vitest" ], diff --git a/apps/server/tsconfig.spec.json b/apps/server/tsconfig.spec.json index 96cd1671f..3df7ffed3 100644 --- a/apps/server/tsconfig.spec.json +++ b/apps/server/tsconfig.spec.json @@ -7,7 +7,6 @@ "outDir": "./out-tsc/vitest", "types": [ "vitest/globals", - "vitest/importMeta", "node", "vitest" ] diff --git a/packages/codemirror/tsconfig.spec.json b/packages/codemirror/tsconfig.spec.json index f0103afff..871842994 100644 --- a/packages/codemirror/tsconfig.spec.json +++ b/packages/codemirror/tsconfig.spec.json @@ -4,7 +4,6 @@ "outDir": "./out-tsc/vitest", "types": [ "vitest/globals", - "vitest/importMeta", "node", "vitest" ] diff --git a/packages/commons/tsconfig.spec.json b/packages/commons/tsconfig.spec.json index 5ea497077..b909ecbcf 100644 --- a/packages/commons/tsconfig.spec.json +++ b/packages/commons/tsconfig.spec.json @@ -4,7 +4,6 @@ "outDir": "./out-tsc/vitest", "types": [ "vitest/globals", - "vitest/importMeta", "node", "vitest" ], diff --git a/packages/express-partial-content/tsconfig.spec.json b/packages/express-partial-content/tsconfig.spec.json index a6f940ae1..b1876bdeb 100644 --- a/packages/express-partial-content/tsconfig.spec.json +++ b/packages/express-partial-content/tsconfig.spec.json @@ -4,7 +4,6 @@ "outDir": "./out-tsc/vitest", "types": [ "vitest/globals", - "vitest/importMeta", "node", "vitest" ] diff --git a/packages/highlightjs/tsconfig.spec.json b/packages/highlightjs/tsconfig.spec.json index c69b0fde6..5e2b70ccc 100644 --- a/packages/highlightjs/tsconfig.spec.json +++ b/packages/highlightjs/tsconfig.spec.json @@ -4,7 +4,6 @@ "outDir": "./out-tsc/vitest", "types": [ "vitest/globals", - "vitest/importMeta", "node", "vitest" ], From 229636a796f1d60584fe7e919f661a906dbbdb3f Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 1 Jan 2026 23:39:53 +0200 Subject: [PATCH 03/13] chore(vite): remove vite/global for server --- .../src/becca/entities/brevision.spec.ts | 2 ++ apps/server/src/becca/similarity.spec.ts | 2 ++ apps/server/src/routes/api/clipper.spec.ts | 8 +++++--- apps/server/src/routes/api/llm.spec.ts | 13 +++++++------ apps/server/src/routes/api/note_map.spec.ts | 2 ++ apps/server/src/routes/login.spec.ts | 19 ++++++++++--------- apps/server/src/services/auth.spec.ts | 12 +++++++----- .../src/services/hidden_subtree.spec.ts | 11 ++++++----- apps/server/src/services/i18n.spec.ts | 1 + apps/server/src/services/icon_packs.spec.ts | 2 ++ apps/server/src/services/script.spec.ts | 6 ++++-- .../server/src/share/content_renderer.spec.ts | 2 +- apps/server/src/share/routes.spec.ts | 5 +++-- apps/server/tsconfig.spec.json | 1 - 14 files changed, 52 insertions(+), 34 deletions(-) diff --git a/apps/server/src/becca/entities/brevision.spec.ts b/apps/server/src/becca/entities/brevision.spec.ts index 176ee66c0..1181c956c 100644 --- a/apps/server/src/becca/entities/brevision.spec.ts +++ b/apps/server/src/becca/entities/brevision.spec.ts @@ -1,3 +1,5 @@ +import { describe, expect, it } from "vitest"; + import BRevision from "./brevision.js"; describe("Revision", () => { diff --git a/apps/server/src/becca/similarity.spec.ts b/apps/server/src/becca/similarity.spec.ts index 4809e1f13..f7f9df909 100644 --- a/apps/server/src/becca/similarity.spec.ts +++ b/apps/server/src/becca/similarity.spec.ts @@ -1,4 +1,6 @@ import { trimIndentation } from "@triliumnext/commons"; +import { describe, expect, it } from "vitest"; + import { buildNote } from "../test/becca_easy_mocking"; import { buildRewardMap } from "./similarity"; diff --git a/apps/server/src/routes/api/clipper.spec.ts b/apps/server/src/routes/api/clipper.spec.ts index 4bfac679e..693b831a6 100644 --- a/apps/server/src/routes/api/clipper.spec.ts +++ b/apps/server/src/routes/api/clipper.spec.ts @@ -1,3 +1,5 @@ +import { beforeAll, describe, expect, it, vi } from "vitest"; + import BNote from '../../becca/entities/bnote.js'; import cls from "../../services/cls"; import { buildNote } from "../../test/becca_easy_mocking"; @@ -17,7 +19,7 @@ describe("processContent", () => { return { attachmentId: "foo", title: "encodedTitle", - } + }; } } })); @@ -25,12 +27,12 @@ describe("processContent", () => { it("processes basic note", () => { const processed = cls.init(() => processContent([], note, "

Hello world.

")); - expect(processed).toStrictEqual("

Hello world.

") + expect(processed).toStrictEqual("

Hello world.

"); }); it("processes plain text", () => { const processed = cls.init(() => processContent([], note, "Hello world.")); - expect(processed).toStrictEqual("

Hello world.

") + expect(processed).toStrictEqual("

Hello world.

"); }); it("replaces images", () => { diff --git a/apps/server/src/routes/api/llm.spec.ts b/apps/server/src/routes/api/llm.spec.ts index 846b9ecc9..bbc3aaf7a 100644 --- a/apps/server/src/routes/api/llm.spec.ts +++ b/apps/server/src/routes/api/llm.spec.ts @@ -1,9 +1,10 @@ -import { Application } from "express"; -import { beforeAll, describe, expect, it, vi, beforeEach, afterEach } from "vitest"; -import supertest from "supertest"; -import config from "../../services/config.js"; -import { refreshAuth } from "../../services/auth.js"; import { sleepFor } from "@triliumnext/commons"; +import { Application } from "express"; +import supertest from "supertest"; +import { afterAll,afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +import { refreshAuth } from "../../services/auth.js"; +import config from "../../services/config.js"; // Mock the CSRF protection middleware to allow tests to pass vi.mock("../csrf_protection.js", () => ({ @@ -841,7 +842,7 @@ describe("LLM API Tests", () => { try { await supertest(app) .delete(`/api/llm/chat/${createdChatId}`) - ; + ; } catch (error) { // Ignore cleanup errors } diff --git a/apps/server/src/routes/api/note_map.spec.ts b/apps/server/src/routes/api/note_map.spec.ts index 0ab5d1d2d..6d37ce269 100644 --- a/apps/server/src/routes/api/note_map.spec.ts +++ b/apps/server/src/routes/api/note_map.spec.ts @@ -1,4 +1,6 @@ import { trimIndentation } from "@triliumnext/commons"; +import { describe, expect, it } from "vitest"; + import { buildNote, buildNotes } from "../../test/becca_easy_mocking"; import note_map from "./note_map"; diff --git a/apps/server/src/routes/login.spec.ts b/apps/server/src/routes/login.spec.ts index 07451ec43..0f210bfdc 100644 --- a/apps/server/src/routes/login.spec.ts +++ b/apps/server/src/routes/login.spec.ts @@ -1,10 +1,11 @@ -import { beforeAll, describe, expect, it } from "vitest"; -import supertest, { type Response } from "supertest"; -import type { Application } from "express"; import { dayjs } from "@triliumnext/commons"; -import { type SQLiteSessionStore } from "./session_parser.js"; +import type { Application } from "express"; import { SessionData } from "express-session"; +import supertest, { type Response } from "supertest"; +import { beforeAll, describe, expect, it, vi } from "vitest"; + import cls from "../services/cls.js"; +import { type SQLiteSessionStore } from "./session_parser.js"; let app: Application; let sessionStore: SQLiteSessionStore; @@ -24,7 +25,7 @@ describe("Login Route test", () => { // RegExp for login page specific string in HTML const res = await supertest(app) .get("/login") - .expect(200) + .expect(200); expect(res.text).toMatch(/assets\/v[0-9.a-z]+\/src\/login\.js/); @@ -35,7 +36,7 @@ describe("Login Route test", () => { await supertest(app) .post("/login") .send({ password: "fakePassword" }) - .expect(401) + .expect(401); }); @@ -69,7 +70,7 @@ describe("Login Route test", () => { // ignore the seconds in the comparison, just to avoid flakiness in tests, // if for some reason execution is slow between calculation of expected and actual - expect(actualExpiresDate.slice(0,23)).toBe(expectedExpiresDate.slice(0,23)) + expect(actualExpiresDate.slice(0,23)).toBe(expectedExpiresDate.slice(0,23)); }); it("sets the correct sesssion data", async () => { @@ -121,14 +122,14 @@ describe("Login Route test", () => { res = await supertest(app) .post("/login") .send({ password: "demo1234" }) - .expect(302) + .expect(302); setCookieHeader = res.headers["set-cookie"][0]; }); it("does not set Expires", async () => { // match for e.g. "Expires=Wed, 07 May 2025 07:02:59 GMT;" - expect(setCookieHeader).not.toMatch(/Expires=(?[\w\s,:]+)/) + expect(setCookieHeader).not.toMatch(/Expires=(?[\w\s,:]+)/); }); it("stores the session in the database", async () => { diff --git a/apps/server/src/services/auth.spec.ts b/apps/server/src/services/auth.spec.ts index df0d49a7c..f0446dfe1 100644 --- a/apps/server/src/services/auth.spec.ts +++ b/apps/server/src/services/auth.spec.ts @@ -1,9 +1,11 @@ -import supertest from "supertest"; -import options from "./options"; -import cls from "./cls"; import { Application } from "express"; -import config from "./config"; +import supertest from "supertest"; +import { beforeAll, describe, expect, it } from "vitest"; + import { refreshAuth } from "./auth"; +import cls from "./cls"; +import config from "./config"; +import options from "./options"; let app: Application; @@ -39,7 +41,7 @@ describe("Auth", () => { const response = await supertest(app) .get("/") .redirects(1) - .expect(200) + .expect(200); expect(response.text).not.toContain(`id="totpToken"`); }); }); diff --git a/apps/server/src/services/hidden_subtree.spec.ts b/apps/server/src/services/hidden_subtree.spec.ts index 6fc9403a9..cfb1ec075 100644 --- a/apps/server/src/services/hidden_subtree.spec.ts +++ b/apps/server/src/services/hidden_subtree.spec.ts @@ -1,11 +1,12 @@ -import { describe, it, expect } from "vitest"; +import { deferred, LOCALES } from "@triliumnext/commons"; +import { beforeAll,describe, expect, it } from "vitest"; + +import becca from "../becca/becca.js"; +import branches from "./branches.js"; import cls from "./cls.js"; import hiddenSubtreeService from "./hidden_subtree.js"; -import sql_init from "./sql_init.js"; -import branches from "./branches.js"; -import becca from "../becca/becca.js"; -import { deferred, LOCALES } from "@triliumnext/commons"; import { changeLanguage } from "./i18n.js"; +import sql_init from "./sql_init.js"; describe("Hidden Subtree", () => { beforeAll(async () => { diff --git a/apps/server/src/services/i18n.spec.ts b/apps/server/src/services/i18n.spec.ts index c5dc00cad..c57537d13 100644 --- a/apps/server/src/services/i18n.spec.ts +++ b/apps/server/src/services/i18n.spec.ts @@ -1,6 +1,7 @@ import { LOCALES } from "@triliumnext/commons"; import { readFileSync } from "fs"; import { join } from "path"; +import { describe, expect, it } from "vitest"; describe("i18n", () => { it("translations are valid JSON", () => { diff --git a/apps/server/src/services/icon_packs.spec.ts b/apps/server/src/services/icon_packs.spec.ts index 6fa6480ca..74fd4628b 100644 --- a/apps/server/src/services/icon_packs.spec.ts +++ b/apps/server/src/services/icon_packs.spec.ts @@ -1,3 +1,5 @@ +import { describe, expect, it } from "vitest"; + import { buildNote } from "../test/becca_easy_mocking"; import { determineBestFontAttachment, generateCss, generateIconRegistry, IconPackManifest, processIconPack } from "./icon_packs"; diff --git a/apps/server/src/services/script.spec.ts b/apps/server/src/services/script.spec.ts index aa0fc527a..00842e12b 100644 --- a/apps/server/src/services/script.spec.ts +++ b/apps/server/src/services/script.spec.ts @@ -1,14 +1,16 @@ +import { beforeEach } from "node:test"; + import { trimIndentation } from "@triliumnext/commons"; +import { describe, expect, it, vi } from "vitest"; import becca from "../becca/becca.js"; import BBranch from "../becca/entities/bbranch.js"; import BNote from "../becca/entities/bnote.js"; import { buildNote } from "../test/becca_easy_mocking.js"; -import { note, NoteBuilder } from "../test/becca_mocking.js"; +import { NoteBuilder } from "../test/becca_mocking.js"; import cls from "./cls.js"; import { buildJsx, executeBundle, getScriptBundle } from "./script.js"; - describe("Script", () => { let rootNote!: NoteBuilder; diff --git a/apps/server/src/share/content_renderer.spec.ts b/apps/server/src/share/content_renderer.spec.ts index 51baa503f..bcb0be743 100644 --- a/apps/server/src/share/content_renderer.spec.ts +++ b/apps/server/src/share/content_renderer.spec.ts @@ -1,5 +1,5 @@ import { trimIndentation } from "@triliumnext/commons"; -import { describe, expect,it, vi } from "vitest"; +import { beforeAll, describe, expect,it, vi } from "vitest"; import { buildShareNote, buildShareNotes } from "../test/shaca_mocking.js"; import { getContent, renderCode, type Result } from "./content_renderer.js"; diff --git a/apps/server/src/share/routes.spec.ts b/apps/server/src/share/routes.spec.ts index e99ecdf70..a920a3620 100644 --- a/apps/server/src/share/routes.spec.ts +++ b/apps/server/src/share/routes.spec.ts @@ -1,6 +1,7 @@ -import { beforeAll, beforeEach, describe, expect, it } from "vitest"; +import type { Application, NextFunction,Request, Response } from "express"; import supertest from "supertest"; -import type { Application, Request, Response, NextFunction } from "express"; +import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + import { safeExtractMessageAndStackFromError } from "../services/utils.js"; let app: Application; diff --git a/apps/server/tsconfig.spec.json b/apps/server/tsconfig.spec.json index 3df7ffed3..2d13ec111 100644 --- a/apps/server/tsconfig.spec.json +++ b/apps/server/tsconfig.spec.json @@ -6,7 +6,6 @@ "target": "ES2020", "outDir": "./out-tsc/vitest", "types": [ - "vitest/globals", "node", "vitest" ] From 032cde67b0a814f296d8f0127b5d65277059cf9c Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 1 Jan 2026 23:42:02 +0200 Subject: [PATCH 04/13] chore(vite): remove vite/global for express-partial-content --- .../src/createPartialContentHandler.spec.ts | 1 + packages/express-partial-content/src/parseRangeHeader.spec.ts | 2 ++ packages/express-partial-content/src/utils.spec.ts | 2 +- packages/express-partial-content/tsconfig.spec.json | 1 - 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/express-partial-content/src/createPartialContentHandler.spec.ts b/packages/express-partial-content/src/createPartialContentHandler.spec.ts index 4d354305b..b9e139235 100644 --- a/packages/express-partial-content/src/createPartialContentHandler.spec.ts +++ b/packages/express-partial-content/src/createPartialContentHandler.spec.ts @@ -8,6 +8,7 @@ import type { Content } from "./Content.js"; import { Stream } from "stream"; import type { Range } from "./Range.js"; import type { MockInstance } from "vitest"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; describe("createPartialContentHandler tests", () => { let logger: Logger; diff --git a/packages/express-partial-content/src/parseRangeHeader.spec.ts b/packages/express-partial-content/src/parseRangeHeader.spec.ts index 2bfde1961..faec465df 100644 --- a/packages/express-partial-content/src/parseRangeHeader.spec.ts +++ b/packages/express-partial-content/src/parseRangeHeader.spec.ts @@ -1,6 +1,8 @@ import { parseRangeHeader } from "./parseRangeHeader.js"; import type { Logger } from "./Logger.js"; import { RangeParserError } from "./RangeParserError.js"; +import { describe, expect, it, vi } from "vitest"; +import { afterEach, beforeEach } from "node:test"; describe("parseRangeHeader tests", () => { let logger: Logger; diff --git a/packages/express-partial-content/src/utils.spec.ts b/packages/express-partial-content/src/utils.spec.ts index 3182e9af5..c3d9169d3 100644 --- a/packages/express-partial-content/src/utils.spec.ts +++ b/packages/express-partial-content/src/utils.spec.ts @@ -1,5 +1,5 @@ import type { Request, Response } from "express"; -import { expect, type Mock } from "vitest"; +import { beforeEach, describe, expect, it, vi, type Mock } from "vitest"; import { getHeader, diff --git a/packages/express-partial-content/tsconfig.spec.json b/packages/express-partial-content/tsconfig.spec.json index b1876bdeb..98fd4a821 100644 --- a/packages/express-partial-content/tsconfig.spec.json +++ b/packages/express-partial-content/tsconfig.spec.json @@ -3,7 +3,6 @@ "compilerOptions": { "outDir": "./out-tsc/vitest", "types": [ - "vitest/globals", "node", "vitest" ] From 11779fe3e342094d42ae65f882e3601aa9fa16ac Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 1 Jan 2026 23:43:59 +0200 Subject: [PATCH 05/13] chore(vite): remove vite/global for commons --- packages/commons/src/lib/dayjs.spec.ts | 1 + packages/commons/src/lib/utils.spec.ts | 1 + packages/commons/tsconfig.spec.json | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/commons/src/lib/dayjs.spec.ts b/packages/commons/src/lib/dayjs.spec.ts index cb80831d0..3f3d9e5da 100644 --- a/packages/commons/src/lib/dayjs.spec.ts +++ b/packages/commons/src/lib/dayjs.spec.ts @@ -9,6 +9,7 @@ import { LOCALES } from "./i18n.js"; import { DAYJS_LOADER, dayjs } from "./dayjs.js"; +import { describe, expect, it } from "vitest"; describe("dayjs", () => { it("all dayjs locales are valid", async () => { diff --git a/packages/commons/src/lib/utils.spec.ts b/packages/commons/src/lib/utils.spec.ts index 2a85b438d..829749a94 100644 --- a/packages/commons/src/lib/utils.spec.ts +++ b/packages/commons/src/lib/utils.spec.ts @@ -1,4 +1,5 @@ import { deferred } from "./utils.js"; +import { describe, expect, it } from "vitest"; describe("#deferred", () => { it("should return a promise", () => { diff --git a/packages/commons/tsconfig.spec.json b/packages/commons/tsconfig.spec.json index b909ecbcf..740e6c787 100644 --- a/packages/commons/tsconfig.spec.json +++ b/packages/commons/tsconfig.spec.json @@ -3,7 +3,7 @@ "compilerOptions": { "outDir": "./out-tsc/vitest", "types": [ - "vitest/globals", + "", "node", "vitest" ], From 34f649155e11187ba37e5a01ba41ae25dc60d013 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 1 Jan 2026 23:44:17 +0200 Subject: [PATCH 06/13] chore(vite): remove vite/global for other projects --- packages/codemirror/tsconfig.spec.json | 1 - packages/highlightjs/tsconfig.spec.json | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/codemirror/tsconfig.spec.json b/packages/codemirror/tsconfig.spec.json index 871842994..86ad305d9 100644 --- a/packages/codemirror/tsconfig.spec.json +++ b/packages/codemirror/tsconfig.spec.json @@ -3,7 +3,6 @@ "compilerOptions": { "outDir": "./out-tsc/vitest", "types": [ - "vitest/globals", "node", "vitest" ] diff --git a/packages/highlightjs/tsconfig.spec.json b/packages/highlightjs/tsconfig.spec.json index 5e2b70ccc..e1990178f 100644 --- a/packages/highlightjs/tsconfig.spec.json +++ b/packages/highlightjs/tsconfig.spec.json @@ -3,7 +3,6 @@ "compilerOptions": { "outDir": "./out-tsc/vitest", "types": [ - "vitest/globals", "node", "vitest" ], From d8e4547988b7e6ebea395f01b7269b05f8c77ff6 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 1 Jan 2026 23:56:26 +0200 Subject: [PATCH 07/13] chore(vitest): get rid of warning about number of projects --- vitest.config.ts | 13 +++++++++++++ vitest.workspace.ts | 1 - 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 vitest.config.ts delete mode 100644 vitest.workspace.ts diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 000000000..d95932acf --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + projects: [ + "packages/*/vitest.config.ts", + "packages/*/vite.config.ts", + "apps/*/vitest.config.ts", + "apps/*/vite.config.ts", + "apps/*/vite.config.mts", + ], + }, +}) diff --git a/vitest.workspace.ts b/vitest.workspace.ts deleted file mode 100644 index bb64d562e..000000000 --- a/vitest.workspace.ts +++ /dev/null @@ -1 +0,0 @@ -export default ['**/vite.config.{mjs,js,ts,mts}', '**/vitest.config.{mjs,js,ts,mts}']; \ No newline at end of file From b6af3b70b09f25b52da289fe19189dce0f3a6aa1 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 1 Jan 2026 23:57:43 +0200 Subject: [PATCH 08/13] test(client): increase a timeout for local run --- apps/client/src/widgets/type_widgets/text/config.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/widgets/type_widgets/text/config.spec.ts b/apps/client/src/widgets/type_widgets/text/config.spec.ts index 89f1853dc..af01cf863 100644 --- a/apps/client/src/widgets/type_widgets/text/config.spec.ts +++ b/apps/client/src/widgets/type_widgets/text/config.spec.ts @@ -35,5 +35,5 @@ describe("CK config", () => { expect(config.translations, locale.id).toHaveLength(2); } } - }, 10_000); + }, 20_000); }); From 3f5616f1fc792056e155cbb00e5dcf21903e0935 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 2 Jan 2026 00:03:45 +0200 Subject: [PATCH 09/13] chore(vitest): fix node:test import --- apps/server-e2e/src/note_types/pdf.spec.ts | 3 +-- apps/server/src/services/script.spec.ts | 6 +----- .../express-partial-content/src/parseRangeHeader.spec.ts | 3 +-- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/apps/server-e2e/src/note_types/pdf.spec.ts b/apps/server-e2e/src/note_types/pdf.spec.ts index ff1cd7dbc..a97f1b02f 100644 --- a/apps/server-e2e/src/note_types/pdf.spec.ts +++ b/apps/server-e2e/src/note_types/pdf.spec.ts @@ -1,6 +1,5 @@ -import { describe } from "node:test"; - import test, { BrowserContext, expect, Page } from "@playwright/test"; +import { describe } from "vitest"; import App from "../support/app"; diff --git a/apps/server/src/services/script.spec.ts b/apps/server/src/services/script.spec.ts index 00842e12b..1f2756bc1 100644 --- a/apps/server/src/services/script.spec.ts +++ b/apps/server/src/services/script.spec.ts @@ -1,7 +1,5 @@ -import { beforeEach } from "node:test"; - import { trimIndentation } from "@triliumnext/commons"; -import { describe, expect, it, vi } from "vitest"; +import { beforeEach,describe, expect, it, vi } from "vitest"; import becca from "../becca/becca.js"; import BBranch from "../becca/entities/bbranch.js"; @@ -12,8 +10,6 @@ import cls from "./cls.js"; import { buildJsx, executeBundle, getScriptBundle } from "./script.js"; describe("Script", () => { - let rootNote!: NoteBuilder; - beforeEach(() => { becca.reset(); diff --git a/packages/express-partial-content/src/parseRangeHeader.spec.ts b/packages/express-partial-content/src/parseRangeHeader.spec.ts index faec465df..e22ed9f55 100644 --- a/packages/express-partial-content/src/parseRangeHeader.spec.ts +++ b/packages/express-partial-content/src/parseRangeHeader.spec.ts @@ -1,8 +1,7 @@ import { parseRangeHeader } from "./parseRangeHeader.js"; import type { Logger } from "./Logger.js"; import { RangeParserError } from "./RangeParserError.js"; -import { describe, expect, it, vi } from "vitest"; -import { afterEach, beforeEach } from "node:test"; +import { describe, expect, it, vi, afterEach, beforeEach } from "vitest"; describe("parseRangeHeader tests", () => { let logger: Logger; From 06980fe9b54c242ddddcab56d13627ec0da71dce Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 2 Jan 2026 00:04:52 +0200 Subject: [PATCH 10/13] chore(tsconfig): fix empty type --- packages/commons/tsconfig.spec.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/commons/tsconfig.spec.json b/packages/commons/tsconfig.spec.json index 740e6c787..699ed8438 100644 --- a/packages/commons/tsconfig.spec.json +++ b/packages/commons/tsconfig.spec.json @@ -3,7 +3,6 @@ "compilerOptions": { "outDir": "./out-tsc/vitest", "types": [ - "", "node", "vitest" ], From c2f59c4b6c4784090dad3a83b853eb134bd99f65 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 2 Jan 2026 00:07:04 +0200 Subject: [PATCH 11/13] test(server): type error --- apps/server/src/services/script.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/services/script.spec.ts b/apps/server/src/services/script.spec.ts index 1f2756bc1..01752ecf5 100644 --- a/apps/server/src/services/script.spec.ts +++ b/apps/server/src/services/script.spec.ts @@ -14,7 +14,7 @@ describe("Script", () => { becca.reset(); - rootNote = new NoteBuilder( + new NoteBuilder( new BNote({ noteId: "root", title: "root", From 053812e5f0aa0415b89a5a9faebbb0a78bc94a04 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 2 Jan 2026 00:14:07 +0200 Subject: [PATCH 12/13] e2e(server): wrong import --- apps/server-e2e/src/note_types/pdf.spec.ts | 157 ++++++++++----------- 1 file changed, 76 insertions(+), 81 deletions(-) diff --git a/apps/server-e2e/src/note_types/pdf.spec.ts b/apps/server-e2e/src/note_types/pdf.spec.ts index a97f1b02f..99fe02173 100644 --- a/apps/server-e2e/src/note_types/pdf.spec.ts +++ b/apps/server-e2e/src/note_types/pdf.spec.ts @@ -1,5 +1,4 @@ import test, { BrowserContext, expect, Page } from "@playwright/test"; -import { describe } from "vitest"; import App from "../support/app"; @@ -9,92 +8,88 @@ test.beforeEach(async ({ page, context }) => { }); test.afterEach(async ({ page, context }) => await setLayout({ page, context }, false)); -describe("PDF sidebar", () => { +test("Table of contents works", async ({ page, context }) => { + const app = new App(page, context); + await app.goto(); + await app.goToNoteInNewTab("Dacia Logan.pdf"); - test("Table of contents works", async ({ page, context }) => { - const app = new App(page, context); - await app.goto(); - await app.goToNoteInNewTab("Dacia Logan.pdf"); + const toc = app.sidebar.locator(".toc"); - const toc = app.sidebar.locator(".toc"); + await expect(toc.locator("li")).toHaveCount(48); + await expect(toc.locator("li", { hasText: "Logan Van" })).toHaveCount(1); - await expect(toc.locator("li")).toHaveCount(48); - await expect(toc.locator("li", { hasText: "Logan Van" })).toHaveCount(1); + const pdfHelper = new PdfHelper(app); + await toc.locator("li", { hasText: "Logan Pick-Up" }).click(); + await pdfHelper.expectPageToBe(13); - const pdfHelper = new PdfHelper(app); - await toc.locator("li", { hasText: "Logan Pick-Up" }).click(); - await pdfHelper.expectPageToBe(13); - - await app.clickNoteOnNoteTreeByTitle("Layers test.pdf"); - await expect(toc.locator("li")).toHaveCount(0); - }); - - test("Page navigation works", async ({ page, context }) => { - const app = new App(page, context); - await app.goto(); - await app.goToNoteInNewTab("Dacia Logan.pdf"); - - const pagesList = app.sidebar.locator(".pdf-pages-list"); - - // Check count is correct. - await expect(app.sidebar).toContainText("28 pages"); - expect(await pagesList.locator(".pdf-page-item").count()).toBe(28); - - // Go to page 3. - await pagesList.locator(".pdf-page-item").nth(2).click(); - - const pdfHelper = new PdfHelper(app); - await pdfHelper.expectPageToBe(3); - - await app.clickNoteOnNoteTreeByTitle("Layers test.pdf"); - await expect(pagesList.locator(".pdf-page-item")).toHaveCount(1); - }); - - test("Attachments listing works", async ({ page, context }) => { - const app = new App(page, context); - await app.goto(); - await app.goToNoteInNewTab("Dacia Logan.pdf"); - - const attachmentsList = app.sidebar.locator(".pdf-attachments-list"); - await expect(app.sidebar).toContainText("2 attachments"); - await expect(attachmentsList.locator(".pdf-attachment-item")).toHaveCount(2); - - const attachmentInfo = attachmentsList.locator(".pdf-attachment-item", { hasText: "Note.trilium" }); - await expect(attachmentInfo).toContainText("3.36 MiB"); - - // Download the attachment and check its size. - const [ download ] = await Promise.all([ - page.waitForEvent("download"), - attachmentInfo.locator(".bx-download").click() - ]); - expect(download).toBeDefined(); - - await app.clickNoteOnNoteTreeByTitle("Layers test.pdf"); - await expect(attachmentsList.locator(".pdf-attachment-item")).toHaveCount(0); - }); - - test("Layers listing works", async ({ page, context }) => { - const app = new App(page, context); - await app.goto(); - await app.goToNoteInNewTab("Layers test.pdf"); - - // Check count is correct. - await expect(app.sidebar).toContainText("2 layers"); - const layersList = app.sidebar.locator(".pdf-layers-list"); - await expect(layersList.locator(".pdf-layer-item")).toHaveCount(2); - - // Toggle visibility of the first layer. - const firstLayer = layersList.locator(".pdf-layer-item").first(); - await expect(firstLayer).toContainText("Tongue out"); - await expect(firstLayer).toContainClass("hidden"); - await firstLayer.click(); - await expect(firstLayer).not.toContainClass("visible"); - - await app.clickNoteOnNoteTreeByTitle("Dacia Logan.pdf"); - await expect(layersList.locator(".pdf-layer-item")).toHaveCount(0); - }); + await app.clickNoteOnNoteTreeByTitle("Layers test.pdf"); + await expect(toc.locator("li")).toHaveCount(0); }); +test("Page navigation works", async ({ page, context }) => { + const app = new App(page, context); + await app.goto(); + await app.goToNoteInNewTab("Dacia Logan.pdf"); + + const pagesList = app.sidebar.locator(".pdf-pages-list"); + + // Check count is correct. + await expect(app.sidebar).toContainText("28 pages"); + expect(await pagesList.locator(".pdf-page-item").count()).toBe(28); + + // Go to page 3. + await pagesList.locator(".pdf-page-item").nth(2).click(); + + const pdfHelper = new PdfHelper(app); + await pdfHelper.expectPageToBe(3); + + await app.clickNoteOnNoteTreeByTitle("Layers test.pdf"); + await expect(pagesList.locator(".pdf-page-item")).toHaveCount(1); +}); + +test("Attachments listing works", async ({ page, context }) => { + const app = new App(page, context); + await app.goto(); + await app.goToNoteInNewTab("Dacia Logan.pdf"); + + const attachmentsList = app.sidebar.locator(".pdf-attachments-list"); + await expect(app.sidebar).toContainText("2 attachments"); + await expect(attachmentsList.locator(".pdf-attachment-item")).toHaveCount(2); + + const attachmentInfo = attachmentsList.locator(".pdf-attachment-item", { hasText: "Note.trilium" }); + await expect(attachmentInfo).toContainText("3.36 MiB"); + + // Download the attachment and check its size. + const [ download ] = await Promise.all([ + page.waitForEvent("download"), + attachmentInfo.locator(".bx-download").click() + ]); + expect(download).toBeDefined(); + + await app.clickNoteOnNoteTreeByTitle("Layers test.pdf"); + await expect(attachmentsList.locator(".pdf-attachment-item")).toHaveCount(0); +}); + +test("Layers listing works", async ({ page, context }) => { + const app = new App(page, context); + await app.goto(); + await app.goToNoteInNewTab("Layers test.pdf"); + + // Check count is correct. + await expect(app.sidebar).toContainText("2 layers"); + const layersList = app.sidebar.locator(".pdf-layers-list"); + await expect(layersList.locator(".pdf-layer-item")).toHaveCount(2); + + // Toggle visibility of the first layer. + const firstLayer = layersList.locator(".pdf-layer-item").first(); + await expect(firstLayer).toContainText("Tongue out"); + await expect(firstLayer).toContainClass("hidden"); + await firstLayer.click(); + await expect(firstLayer).not.toContainClass("visible"); + + await app.clickNoteOnNoteTreeByTitle("Dacia Logan.pdf"); + await expect(layersList.locator(".pdf-layer-item")).toHaveCount(0); +}); async function setLayout({ page, context}: { page: Page; context: BrowserContext }, newLayout: boolean) { const app = new App(page, context); From 920fde69bb5b070bfe0152af82351cb54cf0f5c2 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 2 Jan 2026 00:21:50 +0200 Subject: [PATCH 13/13] chore: add missing space from imports --- apps/client/src/components/app_context.ts | 2 +- apps/client/src/entities/fnote.ts | 2 +- apps/server/src/routes/api/llm.spec.ts | 2 +- apps/server/src/services/hidden_subtree.spec.ts | 2 +- apps/server/src/services/options_init.ts | 2 +- apps/server/src/services/script.spec.ts | 2 +- apps/server/src/share/content_renderer.spec.ts | 2 +- apps/server/src/share/content_renderer.ts | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/client/src/components/app_context.ts b/apps/client/src/components/app_context.ts index 2ad4003f5..004d1ef66 100644 --- a/apps/client/src/components/app_context.ts +++ b/apps/client/src/components/app_context.ts @@ -6,7 +6,7 @@ import { ColumnComponent } from "tabulator-tables"; import type { Attribute } from "../services/attribute_parser.js"; import froca from "../services/froca.js"; -import { initLocale,t } from "../services/i18n.js"; +import { initLocale, t } from "../services/i18n.js"; import keyboardActionsService from "../services/keyboard_actions.js"; import linkService, { type ViewScope } from "../services/link.js"; import type LoadResults from "../services/load_results.js"; diff --git a/apps/client/src/entities/fnote.ts b/apps/client/src/entities/fnote.ts index 4fcdbf806..048d175db 100644 --- a/apps/client/src/entities/fnote.ts +++ b/apps/client/src/entities/fnote.ts @@ -8,7 +8,7 @@ import search from "../services/search.js"; import server from "../services/server.js"; import utils from "../services/utils.js"; import type FAttachment from "./fattachment.js"; -import type { AttributeType,default as FAttribute } from "./fattribute.js"; +import type { AttributeType, default as FAttribute } from "./fattribute.js"; const LABEL = "label"; const RELATION = "relation"; diff --git a/apps/server/src/routes/api/llm.spec.ts b/apps/server/src/routes/api/llm.spec.ts index bbc3aaf7a..e3c1255dc 100644 --- a/apps/server/src/routes/api/llm.spec.ts +++ b/apps/server/src/routes/api/llm.spec.ts @@ -1,7 +1,7 @@ import { sleepFor } from "@triliumnext/commons"; import { Application } from "express"; import supertest from "supertest"; -import { afterAll,afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { refreshAuth } from "../../services/auth.js"; import config from "../../services/config.js"; diff --git a/apps/server/src/services/hidden_subtree.spec.ts b/apps/server/src/services/hidden_subtree.spec.ts index cfb1ec075..c40b39724 100644 --- a/apps/server/src/services/hidden_subtree.spec.ts +++ b/apps/server/src/services/hidden_subtree.spec.ts @@ -1,5 +1,5 @@ import { deferred, LOCALES } from "@triliumnext/commons"; -import { beforeAll,describe, expect, it } from "vitest"; +import { beforeAll, describe, expect, it } from "vitest"; import becca from "../becca/becca.js"; import branches from "./branches.js"; diff --git a/apps/server/src/services/options_init.ts b/apps/server/src/services/options_init.ts index 8ec138774..b23e532a8 100644 --- a/apps/server/src/services/options_init.ts +++ b/apps/server/src/services/options_init.ts @@ -5,7 +5,7 @@ import dateUtils from "./date_utils.js"; import keyboardActions from "./keyboard_actions.js"; import log from "./log.js"; import optionService from "./options.js"; -import { isWindows,randomSecureToken } from "./utils.js"; +import { isWindows, randomSecureToken } from "./utils.js"; function initDocumentOptions() { optionService.createOption("documentId", randomSecureToken(16), false); diff --git a/apps/server/src/services/script.spec.ts b/apps/server/src/services/script.spec.ts index 01752ecf5..cfc0b14e4 100644 --- a/apps/server/src/services/script.spec.ts +++ b/apps/server/src/services/script.spec.ts @@ -1,5 +1,5 @@ import { trimIndentation } from "@triliumnext/commons"; -import { beforeEach,describe, expect, it, vi } from "vitest"; +import { beforeEach, describe, expect, it, vi } from "vitest"; import becca from "../becca/becca.js"; import BBranch from "../becca/entities/bbranch.js"; diff --git a/apps/server/src/share/content_renderer.spec.ts b/apps/server/src/share/content_renderer.spec.ts index bcb0be743..804b4c349 100644 --- a/apps/server/src/share/content_renderer.spec.ts +++ b/apps/server/src/share/content_renderer.spec.ts @@ -1,5 +1,5 @@ import { trimIndentation } from "@triliumnext/commons"; -import { beforeAll, describe, expect,it, vi } from "vitest"; +import { beforeAll, describe, expect, it, vi } from "vitest"; import { buildShareNote, buildShareNotes } from "../test/shaca_mocking.js"; import { getContent, renderCode, type Result } from "./content_renderer.js"; diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index 4f9646e82..043154ec4 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -4,7 +4,7 @@ import ejs from "ejs"; import escapeHtml from "escape-html"; import { readFileSync } from "fs"; import { t } from "i18next"; -import { HTMLElement, Options,parse, TextNode } from "node-html-parser"; +import { HTMLElement, Options, parse, TextNode } from "node-html-parser"; import { join } from "path"; import becca from "../becca/becca.js";