Skip to content

Commit b67144e

Browse files
dmealingclaude
andcommitted
refactor(docs): simplify docs path/collision/overview helpers (behavior-preserving)
Collapse the two identical render-page try/catch blocks in docsFile() (entity page + template.output page) into one shared renderDocPage() helper. Same error contract ("docs-file: failed rendering '<ref>' for '<path>': ..." with the original cause), byte-identical output. No golden/test drift. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 823b682 commit b67144e

1 file changed

Lines changed: 17 additions & 32 deletions

File tree

  • server/typescript/packages/codegen-ts/src/generators

server/typescript/packages/codegen-ts/src/generators/docs-file.ts

Lines changed: 17 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import type { MetaObject, MetaRoot } from "@metaobjectsdev/metadata";
2222
import { TYPE_TEMPLATE, TEMPLATE_SUBTYPE_OUTPUT } from "@metaobjectsdev/metadata";
2323
import { render } from "@metaobjectsdev/render";
24+
import type { Provider } from "@metaobjectsdev/render";
2425
import type { Generator, GeneratorFactory, EmittedFile } from "../generator.js";
2526
import {
2627
docPageOutputPath,
@@ -53,6 +54,20 @@ const TEMPLATE_REF = "docs/entity-page.md";
5354
// sibling artifact, distinct from the entity page (Task 3).
5455
const TEMPLATE_PAGE_REF = "docs/template-page.md";
5556

57+
/** Render one docs page, wrapping any engine error with the page ref + output
58+
* path so a template failure points at the exact page (shared by the entity
59+
* and template.output emission paths — identical error contract). */
60+
function renderDocPage(ref: string, payload: unknown, provider: Provider, path: string): string {
61+
try {
62+
return render({ ref, payload, provider, format: "markdown" });
63+
} catch (err) {
64+
const msg = err instanceof Error ? err.message : String(err);
65+
throw new Error(`docs-file: failed rendering '${ref}' for '${path}': ${msg}`, {
66+
cause: err instanceof Error ? err : undefined,
67+
});
68+
}
69+
}
70+
5671
export const docsFile = function docsFile(opts?: DocsFileOpts): Generator {
5772
const generator: Generator = {
5873
name: "docs-file",
@@ -87,22 +102,7 @@ export const docsFile = function docsFile(opts?: DocsFileOpts): Generator {
87102
}),
88103
loadedRoot: rc.loadedRoot,
89104
});
90-
let content: string;
91-
try {
92-
content = render({
93-
ref: TEMPLATE_REF,
94-
payload,
95-
provider,
96-
format: "markdown",
97-
});
98-
} catch (err) {
99-
const msg = err instanceof Error ? err.message : String(err);
100-
throw new Error(
101-
`docs-file: failed rendering '${TEMPLATE_REF}' for '${path}': ${msg}`,
102-
{ cause: err instanceof Error ? err : undefined },
103-
);
104-
}
105-
return { path, content };
105+
return { path, content: renderDocPage(TEMPLATE_REF, payload, provider, path) };
106106
});
107107

108108
// ALSO emit one NEUTRAL render-contract page per `template.output` node —
@@ -115,22 +115,7 @@ export const docsFile = function docsFile(opts?: DocsFileOpts): Generator {
115115
const path = docPageOutputPath(layout, node);
116116
placements.push({ path, fqn: child.resolutionKey() });
117117
const payload = buildTemplateDocData(child, { layout, loadedRoot: ctx.loadedRoot });
118-
let content: string;
119-
try {
120-
content = render({
121-
ref: TEMPLATE_PAGE_REF,
122-
payload,
123-
provider,
124-
format: "markdown",
125-
});
126-
} catch (err) {
127-
const msg = err instanceof Error ? err.message : String(err);
128-
throw new Error(
129-
`docs-file: failed rendering '${TEMPLATE_PAGE_REF}' for '${path}': ${msg}`,
130-
{ cause: err instanceof Error ? err : undefined },
131-
);
132-
}
133-
files.push({ path, content });
118+
files.push({ path, content: renderDocPage(TEMPLATE_PAGE_REF, payload, provider, path) });
134119
}
135120

136121
// Emit the neutral OVERVIEW/index page (README.md) at the docs root: the

0 commit comments

Comments
 (0)