reverse cli command
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { expect, test, beforeEach, afterEach } from 'bun:test'
|
||||
import { initRenderer, SchemaMismatchError } from "./index";
|
||||
import { initRenderer, reverseDir, SchemaMismatchError } from "./index";
|
||||
import { z } from "zod"
|
||||
import { mkdtempSync, rmSync, existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs"
|
||||
import { basename, join } from "node:path"
|
||||
@@ -113,6 +113,62 @@ test("reverse map records path variable tokens", () => {
|
||||
})
|
||||
})
|
||||
|
||||
test("reverseDir rebuilds templates from rendered output and map", () => {
|
||||
const createRenderer = initRenderer("./testdata/if_example")
|
||||
const render = createRenderer(ifExampleSchema)
|
||||
const templateOut = join(tmp, "template")
|
||||
const renderedOut = join(tmp, "rendered")
|
||||
|
||||
render(renderedOut, { web: true, header: { render: true, text: "My Title" } }, { reverseMap: true })
|
||||
writeFileSync(join(renderedOut, "web", "if_example.html"), [
|
||||
"<document>",
|
||||
" <head> My Title </head>",
|
||||
" <body>",
|
||||
" <main>Edited rendered output</main>",
|
||||
" </body>",
|
||||
"</document>",
|
||||
].join("\n"))
|
||||
|
||||
const result = reverseDir(renderedOut, templateOut)
|
||||
expect(result.filesWritten).toBe(1)
|
||||
expect(result.warnings).toEqual([])
|
||||
|
||||
const reversed = readFileSync(join(templateOut, "<@if(context.web)>web", "if_example.html"), "utf-8")
|
||||
expect(reversed).toContain("<@var(context.header.text)>")
|
||||
expect(reversed).toContain("Edited rendered output")
|
||||
})
|
||||
|
||||
test("reverseDir supports custom map paths", () => {
|
||||
const createRenderer = initRenderer("./testdata/var_in_path")
|
||||
const render = createRenderer(z.object({
|
||||
web: z.object({
|
||||
create: z.boolean(),
|
||||
dir: z.string()
|
||||
}),
|
||||
header: z.object({
|
||||
render: z.boolean(),
|
||||
text: z.string()
|
||||
})
|
||||
}))
|
||||
const renderedOut = join(tmp, "rendered")
|
||||
const templateOut = join(tmp, "template")
|
||||
|
||||
render(renderedOut,{
|
||||
web: {
|
||||
create: true,
|
||||
dir: "web"
|
||||
},
|
||||
header: {
|
||||
render: true,
|
||||
text: "test"
|
||||
}
|
||||
}, { reverseMap: "meta/reverse-map.json" })
|
||||
|
||||
const result = reverseDir(renderedOut, templateOut, { mapPath: "meta/reverse-map.json" })
|
||||
expect(result.filesWritten).toBe(1)
|
||||
expect(existsSync(join(templateOut, "<@if(context.web.create)><@var(context.web.dir)>", "var_in_path_example.html"))).toBe(true)
|
||||
})
|
||||
|
||||
test("wrong schema throws error",() => {
|
||||
const createRenderer = initRenderer("./testdata/if_example")
|
||||
expect(() => createRenderer(z.object({
|
||||
|
||||
Reference in New Issue
Block a user