From 95006a7471fba73543dac7581fd1f6b46cbabc9b Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Thu, 16 Apr 2026 19:07:11 +0200 Subject: [PATCH] chore(core package): re-organize files --- app/server/modules/backends/sftp/sftp-backend.ts | 3 +-- apps/docs/package.json | 2 -- apps/docs/vite.config.ts | 5 +++-- .../core/src/{utils => node}/__tests__/fs.test.ts | 0 .../core/src/node}/__tests__/spawn.test.ts | 12 +++++++++++- packages/core/src/{utils => node}/fs.ts | 0 packages/core/src/node/index.ts | 7 ++++--- packages/core/src/{utils => node}/logger.ts | 2 +- packages/core/src/{utils => node}/spawn.ts | 0 .../src/restic/commands/__tests__/backup.test.ts | 4 ++-- .../core/src/restic/commands/__tests__/ls.test.ts | 4 ++-- .../src/restic/commands/__tests__/restore.test.ts | 4 ++-- packages/core/src/restic/helpers/build-env.ts | 2 +- packages/core/src/utils/__tests__/spawn.test.ts | 14 -------------- packages/core/src/utils/index.ts | 1 - packages/core/test/setup.ts | 2 +- 16 files changed, 28 insertions(+), 34 deletions(-) rename packages/core/src/{utils => node}/__tests__/fs.test.ts (100%) rename {app/server/utils => packages/core/src/node}/__tests__/spawn.test.ts (95%) rename packages/core/src/{utils => node}/fs.ts (100%) rename packages/core/src/{utils => node}/logger.ts (98%) rename packages/core/src/{utils => node}/spawn.ts (100%) delete mode 100644 packages/core/src/utils/__tests__/spawn.test.ts diff --git a/app/server/modules/backends/sftp/sftp-backend.ts b/app/server/modules/backends/sftp/sftp-backend.ts index 93e87c5b..9fbb2587 100644 --- a/app/server/modules/backends/sftp/sftp-backend.ts +++ b/app/server/modules/backends/sftp/sftp-backend.ts @@ -5,8 +5,7 @@ import { spawn } from "node:child_process"; import { OPERATION_TIMEOUT, SSH_KEYS_DIR } from "../../../core/constants"; import { cryptoUtils } from "../../../utils/crypto"; import { toMessage } from "../../../utils/errors"; -import { logger } from "@zerobyte/core/node"; -import { FILE_MODES, writeFileWithMode } from "@zerobyte/core/utils"; +import { logger, FILE_MODES, writeFileWithMode } from "@zerobyte/core/node"; import { getMountForPath } from "../../../utils/mountinfo"; import { withTimeout } from "../../../utils/timeout"; import type { VolumeBackend } from "../backend"; diff --git a/apps/docs/package.json b/apps/docs/package.json index 33ee5e24..e37c0a55 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -8,7 +8,6 @@ "scripts": { "dev": "vite dev", "build": "vite build", - "test": "vitest run", "preview": "vite preview", "deploy": "bun run build && wrangler deploy", "cf-typegen": "wrangler types" @@ -52,7 +51,6 @@ "typescript": "^5.7.2", "vite": "^8.0.8", "vite-plugin-killer-instincts": "^1.0.0", - "vite-tsconfig-paths": "^5.1.4", "vitest": "^3.0.5", "wrangler": "^4.82.1" }, diff --git a/apps/docs/vite.config.ts b/apps/docs/vite.config.ts index 6036ee9d..71c4bc6a 100644 --- a/apps/docs/vite.config.ts +++ b/apps/docs/vite.config.ts @@ -1,6 +1,5 @@ import { defineConfig } from "vite"; import { devtools } from "@tanstack/devtools-vite"; -import tsconfigPaths from "vite-tsconfig-paths"; import { tanstackStart } from "@tanstack/react-start/plugin/vite"; import { cloudflare } from "@cloudflare/vite-plugin"; @@ -17,12 +16,14 @@ const config = defineConfig({ plugins: [ mdx(MdxConfig), devtools(), - tsconfigPaths({ projects: ["./tsconfig.json"] }), tailwindcss(), cloudflare({ viteEnvironment: { name: "ssr" } }), tanstackStart(), viteReact(), ], + resolve: { + tsconfigPaths: true, + }, }); export default config; diff --git a/packages/core/src/utils/__tests__/fs.test.ts b/packages/core/src/node/__tests__/fs.test.ts similarity index 100% rename from packages/core/src/utils/__tests__/fs.test.ts rename to packages/core/src/node/__tests__/fs.test.ts diff --git a/app/server/utils/__tests__/spawn.test.ts b/packages/core/src/node/__tests__/spawn.test.ts similarity index 95% rename from app/server/utils/__tests__/spawn.test.ts rename to packages/core/src/node/__tests__/spawn.test.ts index e037e894..a65325c2 100644 --- a/app/server/utils/__tests__/spawn.test.ts +++ b/packages/core/src/node/__tests__/spawn.test.ts @@ -1,7 +1,17 @@ import { describe, expect, test } from "vitest"; -import { safeExec, safeSpawn } from "@zerobyte/core/node"; +import { safeExec, safeSpawn } from "../spawn"; describe("safeExec", () => { + test("falls back to the process error message when stderr is empty", async () => { + const result = await safeExec({ + command: process.execPath, + args: ["-e", "process.stdout.write('a'.repeat(2 * 1024 * 1024))"], + }); + + expect(result.exitCode).toBe(1); + expect(result.stderr).toContain("stdout maxBuffer length exceeded"); + }); + describe("successful commands", () => { test("returns exitCode 0 and output for successful command", async () => { const result = await safeExec({ command: "echo", args: ["hello"] }); diff --git a/packages/core/src/utils/fs.ts b/packages/core/src/node/fs.ts similarity index 100% rename from packages/core/src/utils/fs.ts rename to packages/core/src/node/fs.ts diff --git a/packages/core/src/node/index.ts b/packages/core/src/node/index.ts index baf2b89c..61f21366 100644 --- a/packages/core/src/node/index.ts +++ b/packages/core/src/node/index.ts @@ -1,4 +1,5 @@ -export { safeSpawn, safeExec } from "../utils/spawn.js"; -export type { SafeSpawnParams, SafeSpawnParamsLines, SafeSpawnParamsRaw, SpawnResult } from "../utils/spawn.js"; -export { logger } from "../utils/logger.js"; +export { safeSpawn, safeExec } from "./spawn.js"; +export type { SafeSpawnParams, SafeSpawnParamsLines, SafeSpawnParamsRaw, SpawnResult } from "./spawn.js"; +export { logger } from "./logger.js"; export { sanitizeSensitiveData } from "../utils/sanitize.js"; +export { FILE_MODES, writeFileWithMode } from "./fs.js"; diff --git a/packages/core/src/utils/logger.ts b/packages/core/src/node/logger.ts similarity index 98% rename from packages/core/src/utils/logger.ts rename to packages/core/src/node/logger.ts index b4174a87..f9d35719 100644 --- a/packages/core/src/utils/logger.ts +++ b/packages/core/src/node/logger.ts @@ -1,7 +1,7 @@ import { format } from "date-fns"; import { createConsola, type ConsolaReporter } from "consola"; import { formatWithOptions } from "node:util"; -import { sanitizeSensitiveData } from "./sanitize"; +import { sanitizeSensitiveData } from "../utils/sanitize"; type LogLevel = "debug" | "info" | "warn" | "error"; diff --git a/packages/core/src/utils/spawn.ts b/packages/core/src/node/spawn.ts similarity index 100% rename from packages/core/src/utils/spawn.ts rename to packages/core/src/node/spawn.ts diff --git a/packages/core/src/restic/commands/__tests__/backup.test.ts b/packages/core/src/restic/commands/__tests__/backup.test.ts index 8c23ac89..1121d291 100644 --- a/packages/core/src/restic/commands/__tests__/backup.test.ts +++ b/packages/core/src/restic/commands/__tests__/backup.test.ts @@ -1,11 +1,11 @@ import { afterEach, describe, expect, test, vi } from "vitest"; import { Effect } from "effect"; import * as cleanupModule from "../../helpers/cleanup-temporary-keys"; -import * as spawnModule from "../../../utils/spawn"; +import * as spawnModule from "../../../node/spawn"; import { ResticError } from "../../error"; import { backup } from "../backup"; import type { ResticDeps } from "../../types"; -import type { SafeSpawnParams, SpawnResult } from "../../../utils/spawn"; +import type { SafeSpawnParams, SpawnResult } from "../../../node/spawn"; const mockDeps: ResticDeps = { resolveSecret: async (s) => s, diff --git a/packages/core/src/restic/commands/__tests__/ls.test.ts b/packages/core/src/restic/commands/__tests__/ls.test.ts index 74d5a0aa..f06c9c69 100644 --- a/packages/core/src/restic/commands/__tests__/ls.test.ts +++ b/packages/core/src/restic/commands/__tests__/ls.test.ts @@ -1,9 +1,9 @@ import { afterEach, describe, expect, test, vi } from "vitest"; import * as cleanupModule from "../../helpers/cleanup-temporary-keys"; -import * as spawnModule from "../../../utils/spawn"; +import * as spawnModule from "../../../node/spawn"; import { ls } from "../ls"; import type { ResticDeps } from "../../types"; -import type { SafeSpawnParams } from "../../../utils/spawn"; +import type { SafeSpawnParams } from "../../../node/spawn"; const mockDeps: ResticDeps = { resolveSecret: async (s) => s, diff --git a/packages/core/src/restic/commands/__tests__/restore.test.ts b/packages/core/src/restic/commands/__tests__/restore.test.ts index 1345ccb8..d97da538 100644 --- a/packages/core/src/restic/commands/__tests__/restore.test.ts +++ b/packages/core/src/restic/commands/__tests__/restore.test.ts @@ -1,10 +1,10 @@ import { afterEach, describe, expect, test, vi } from "vitest"; import * as cleanupModule from "../../helpers/cleanup-temporary-keys"; -import * as spawnModule from "../../../utils/spawn"; +import * as spawnModule from "../../../node/spawn"; import { ResticError } from "../../error"; import { restore } from "../restore"; import type { ResticDeps } from "../../types"; -import type { SafeSpawnParams, SpawnResult } from "../../../utils/spawn"; +import type { SafeSpawnParams, SpawnResult } from "../../../node/spawn"; const mockDeps: ResticDeps = { resolveSecret: async (s) => s, diff --git a/packages/core/src/restic/helpers/build-env.ts b/packages/core/src/restic/helpers/build-env.ts index 1c479831..4561f74a 100644 --- a/packages/core/src/restic/helpers/build-env.ts +++ b/packages/core/src/restic/helpers/build-env.ts @@ -3,7 +3,7 @@ import path from "node:path"; import type { ResticDeps, ResticEnv } from "../types"; import type { RepositoryConfig } from "../schemas"; import { logger } from "../../node"; -import { FILE_MODES, writeFileWithMode } from "../../utils/fs.js"; +import { FILE_MODES, writeFileWithMode } from "../../node/fs.js"; export const buildEnv = async ( config: RepositoryConfig, diff --git a/packages/core/src/utils/__tests__/spawn.test.ts b/packages/core/src/utils/__tests__/spawn.test.ts deleted file mode 100644 index 74350cea..00000000 --- a/packages/core/src/utils/__tests__/spawn.test.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { describe, expect, test } from "vitest"; -import { safeExec } from "../spawn"; - -describe("safeExec", () => { - test("falls back to the process error message when stderr is empty", async () => { - const result = await safeExec({ - command: process.execPath, - args: ["-e", "process.stdout.write('a'.repeat(2 * 1024 * 1024))"], - }); - - expect(result.exitCode).toBe(1); - expect(result.stderr).toContain("stdout maxBuffer length exceeded"); - }); -}); diff --git a/packages/core/src/utils/index.ts b/packages/core/src/utils/index.ts index dd2d8be6..8431333e 100644 --- a/packages/core/src/utils/index.ts +++ b/packages/core/src/utils/index.ts @@ -2,4 +2,3 @@ export { safeJsonParse } from "./json.js"; export { toErrorDetails, toMessage } from "./errors.js"; export { isPathWithin, normalizeAbsolutePath } from "./path.js"; export { findCommonAncestor } from "./common-ancestor.js"; -export { FILE_MODES, writeFileWithMode } from "./fs.js"; diff --git a/packages/core/test/setup.ts b/packages/core/test/setup.ts index 5e136be4..37612ad0 100644 --- a/packages/core/test/setup.ts +++ b/packages/core/test/setup.ts @@ -1,6 +1,6 @@ import { vi } from "vitest"; -vi.mock(import("../src/utils/logger.ts"), () => ({ +vi.mock(import("../src/node/logger.ts"), () => ({ logger: { debug: () => {}, info: () => {},