Add configurable Pi Web data directory

This commit is contained in:
Federico Jaramillo Martinez
2026-05-09 22:06:42 +02:00
parent 8eb4dba7cd
commit 4d48239abd
5 changed files with 41 additions and 6 deletions
+2 -2
View File
@@ -1,8 +1,8 @@
import { homedir } from "node:os";
import { join } from "node:path";
import { piWebDataDir } from "../../config.js";
export function sessiondSocketPath(): string {
return process.env["PI_WEB_SESSIOND_SOCKET"] ?? join(homedir(), ".pi-web", "sessiond.sock");
return process.env["PI_WEB_SESSIOND_SOCKET"] ?? join(piWebDataDir(), "sessiond.sock");
}
export function sessiondHttpUrl(): string | undefined {
+13
View File
@@ -0,0 +1,13 @@
import { join } from "node:path";
import { describe, expect, it } from "vitest";
import { projectStorePath } from "./projectStore.js";
describe("projectStorePath", () => {
it("uses PI_WEB_DATA_DIR by default", () => {
expect(projectStorePath({ PI_WEB_DATA_DIR: "demo-data" }, "/tmp/pi-web")).toBe(join("/tmp/pi-web", "demo-data", "projects.json"));
});
it("uses PI_WEB_PROJECTS_FILE when configured", () => {
expect(projectStorePath({ PI_WEB_PROJECTS_FILE: "demo/projects.json" }, "/tmp/pi-web")).toBe(join("/tmp/pi-web", "demo/projects.json"));
});
});
+13 -3
View File
@@ -1,6 +1,6 @@
import { mkdir, readFile, writeFile } from "node:fs/promises";
import { dirname, join } from "node:path";
import { homedir } from "node:os";
import { dirname, join, resolve } from "node:path";
import { piWebDataDir } from "../../config.js";
import { randomUUID } from "node:crypto";
import type { Project } from "../types.js";
@@ -31,8 +31,18 @@ function isRecord(value: unknown): value is Record<string, unknown> {
return typeof value === "object" && value !== null;
}
export function defaultProjectStorePath(env: NodeJS.ProcessEnv = process.env, cwd = process.cwd()): string {
return join(piWebDataDir(env, cwd), "projects.json");
}
export function projectStorePath(env: NodeJS.ProcessEnv = process.env, cwd = process.cwd()): string {
const configured = env["PI_WEB_PROJECTS_FILE"];
if (configured === undefined || configured === "") return defaultProjectStorePath(env, cwd);
return resolve(cwd, configured);
}
export class ProjectStore {
constructor(private readonly filePath = join(homedir(), ".pi-web", "projects.json")) {}
constructor(private readonly filePath = projectStorePath()) {}
async list(): Promise<Project[]> {
return (await this.read()).projects;