Release govoplan-files v0.1.26: speed archive workflows and unify file tools
Module Package Release / publish-packages (push) Successful in 12s

This commit is contained in:
2026-09-08 01:32:41 +02:00
parent 2baa8f2657
commit ff84812f7f
35 changed files with 4331 additions and 275 deletions
@@ -0,0 +1,80 @@
// Run the owning Files read helpers and real Core request cache, replacing only network I/O.
import assert from "node:assert/strict";
import { readFileSync } from "node:fs";
import { createRequire } from "node:module";
import vm from "node:vm";
const coreRoot = new URL("../../../govoplan-core/webui/", import.meta.url);
const require = createRequire(new URL("package.json", coreRoot));
const { transformSync } = require("esbuild");
const compile = (url) => transformSync(readFileSync(url, "utf8"), {
loader: "ts", format: "cjs", target: "es2022", define: { "import.meta.env": "{}" }
}).code;
const coreCode = compile(new URL("src/api/client.ts", coreRoot));
const filesCode = compile(new URL("../src/api/files.ts", import.meta.url));
const settings = { apiBaseUrl: "https://fixture.invalid", apiKey: "", accessToken: "" };
const owner = { owner_type: "user", owner_id: "fixture-user" };
const fresh = { cache: "no-store" };
function harness(respond) {
const requests = [];
const context = vm.createContext({
Headers, Response, FormData, URL, URLSearchParams, AbortController, console,
document: { cookie: "" },
fetch: async (url, init) => {
const request = { url: new URL(url), ...init };
requests.push(request);
assert.equal(init?.method ?? "GET", "GET", "Reload read helpers must never mutate");
return new Response(JSON.stringify(respond(request)), { status: 200, headers: { "content-type": "application/json" } });
}
});
function load(code, dependencies) {
context.module = { exports: {} };
context.exports = context.module.exports;
context.require = (name) => {
assert.ok(name in dependencies, `Unexpected module import: ${name}`);
return dependencies[name];
};
vm.runInContext(`(function(module, exports, require) {\n${code}\n})(module, exports, require);`, context);
return context.module.exports;
}
const core = load(coreCode, { "../platform/temporal": { temporalRequestHeaders: () => ({}) } });
return { api: load(filesCode, { "@govoplan/core-webui": core }), requests };
}
for (const kind of ["spaces", "connector"]) {
const { api, requests } = harness(() => kind === "spaces" ? { spaces: [] } : { items: [], path: "source/nested" });
const read = (options) => kind === "spaces"
? api.listFileSpaces(settings, options)
: api.browseFileConnectorProfile(settings, "fixture-profile", { path: "source/nested" }, options);
await read();
await read();
assert.equal(requests.length, 1, "normal reads retain short-lived request reuse");
await read(fresh);
await read(fresh);
assert.equal(requests.length, 3, "each explicit Reload bypasses the shared recent-response cache");
assert.equal(requests[2].cache, "no-store");
}
{
const { api, requests } = harness(({ url }) => {
const next = url.searchParams.has("cursor");
if (url.pathname.endsWith("/folders")) return { folders: [], total: 0, next_cursor: next ? null : "folders-2", watermark: "start" };
if (url.pathname.endsWith("/delta")) return { full: false, files: [], folders: [], deleted: [], has_more: url.searchParams.get("since") === "start", watermark: url.searchParams.get("since") === "start" ? "middle" : "end" };
return { files: [], total: 0, next_cursor: next ? null : "files-2" };
});
await api.listManagedFileSnapshot(settings, owner, fresh);
await api.listManagedFileSnapshot(settings, owner, fresh);
assert.equal(requests.length, 12, "two snapshots each re-read both folder/file pages and both reconciliation pages");
assert.ok(requests.every((request) => request.cache === "no-store"));
}
{
const { api, requests } = harness(({ url }) => ({ files: [], total: 0, next_cursor: url.searchParams.has("cursor") ? null : "filtered-2" }));
await api.listFilesByProperties(settings, { ...owner, campaign_usage: "linked", audit_relevant: true }, fresh);
await api.listFilesByProperties(settings, { ...owner, campaign_usage: "linked", audit_relevant: true }, fresh);
assert.equal(requests.length, 4, "each filtered Reload must re-read every server result page");
assert.ok(requests.every((request) => request.cache === "no-store" && request.url.searchParams.get("campaign_usage") === "linked" && request.url.searchParams.get("audit_relevant") === "true"));
}
console.log("Files Reload: 4 real-client cache, read-only, pagination and filter checks passed.");