// Headless render guard for the `aura graph` viewer (graph-viewer.js). // // Property protected: a leaf primitive built with an explicit instance name // renders a `name: ` declaration prefix immediately ahead of the bold type head // (`fast: SMA…`); an UNNAMED leaf renders the bare type head, no prefix. // // It loads the *real* viewer module (so a fix or a regression there is observed // here) and drives the exported pure `genDot` over a minimal root model with one // named leaf (SMA, name "fast") and one unnamed leaf (Sub) — exercising the // genDot leaf-emit + cellLabel prefix path directly, no composite expand needed. import { createRequire } from "node:module"; import { fileURLToPath } from "node:url"; import { dirname, join } from "node:path"; const require = createRequire(import.meta.url); const here = dirname(fileURLToPath(import.meta.url)); const model = { root: { nodes: { "0": { prim: { name: "fast", type: "SMA", role: "node", params: [["length", "i64"]], ins: [["f64", "any", "series"]], outs: [["value", "f64"]] } }, "1": { prim: { type: "Sub", role: "node", params: [], ins: [["f64", "any", "lhs"], ["f64", "any", "rhs"]], outs: [["value", "f64"]] } }, }, edges: [["0.o0", "1.i0"]], }, composites: {}, }; // genDot closes over module-scoped ROOT/COMP derived from window.AURA_MODEL at // load. Stub the global BEFORE requiring the viewer (mirrors the browser). global.window = { AURA_MODEL: model }; const { normalizeModel, genDot } = require(join(here, "..", "assets", "graph-viewer.js")); const ROOT = normalizeModel(model).root; const { dot } = genDot(ROOT, "root", new Set(), false); // The named leaf renders `fast: ` (colon + one trailing space, no leading space) // contiguously ahead of the bold SMA type head. const NAMED = 'fast: SMA'; if (!dot.includes(NAMED)) { console.error( "named leaf missing the `fast: ` prefix before the SMA head.\n--- dot ---\n" + dot ); process.exit(1); } // Exactly ONE name prefix in the whole graph: the named SMA leg. The `: ` // separator font (#9399b2 colon-space) is unique to the prefix at showTypes=false // (sig uses `[`/`]`/`, `, never `: `), so it appears once — the unnamed Sub has // no prefix. const SEP = ': '; const sepCount = dot.split(SEP).length - 1; if (sepCount !== 1) { console.error( `expected exactly 1 name prefix (the named leaf), found ${sepCount} — ` + "an unnamed leaf must render no prefix.\n--- dot ---\n" + dot ); process.exit(1); } console.log("OK — named leaf renders `fast: ` prefix; unnamed leaf stays bare."); process.exit(0);