Something went wrong. Try again.
Monorepo for Aesthetic.Computer aesthetic.computer
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031import test from "node:test";import assert from "node:assert/strict";import { mkdtempSync, mkdirSync, writeFileSync } from "node:fs";import { tmpdir } from "node:os";import path from "node:path";import { isSourceChange, watchSource } from "../src/source-watch.mjs";
test("source files count, build outputs and other files do not", () => { for (const name of ["tui.mjs", "media/sound.mjs", "terminal-help.txt", "model-catalog.json"]) assert.ok(isSourceChange(name), name); for (const name of [".tui-built.mjs", ".tui-built.json", ".tui-bun.cjs", "notes.md", "", "out.wav"]) assert.ok(!isSourceChange(name), name);});
test("a burst of saves settles into one change, nested files included", async () => { const dir = mkdtempSync(path.join(tmpdir(), "aesel-src-")); mkdirSync(path.join(dir, "media")); const calls = []; const stop = watchSource(dir, (files) => calls.push(files.sort()), { settleMs: 60 }); assert.equal(typeof stop, "function"); await new Promise((resolve) => setTimeout(resolve, 100)); writeFileSync(path.join(dir, ".tui-built.mjs"), "ignored"); writeFileSync(path.join(dir, "tui.mjs"), "1"); writeFileSync(path.join(dir, "tui.mjs"), "2"); writeFileSync(path.join(dir, "media", "sound.mjs"), "3"); await new Promise((resolve) => setTimeout(resolve, 400)); stop(); writeFileSync(path.join(dir, "tui.mjs"), "after"); await new Promise((resolve) => setTimeout(resolve, 200)); assert.equal(calls.length, 1); assert.deepEqual(calls[0], [path.join("media", "sound.mjs"), "tui.mjs"]);});