map rendered strings to template token source
This commit is contained in:
@@ -55,6 +55,64 @@ test("renders with web=true, header rendered", () => {
|
||||
expect(content).toContain("<body>")
|
||||
})
|
||||
|
||||
test("render can write a reverse map", () => {
|
||||
const createRenderer = initRenderer("./testdata/if_example")
|
||||
const render = createRenderer(ifExampleSchema)
|
||||
render(tmp, { web: true, header: { render: true, text: "My Title" } }, { reverseMap: true })
|
||||
|
||||
const manifest = JSON.parse(readFileSync(join(tmp, ".tdir-map.json"), "utf-8"))
|
||||
expect(manifest.version).toBe(1)
|
||||
expect(manifest.tokens["My Title"]).toContain("<@var(context.header.text)>")
|
||||
|
||||
const file = manifest.files.find((entry: any) => entry.outputPath === join("web", "if_example.html"))
|
||||
expect(file).toBeDefined()
|
||||
expect(file.tokens).toContainEqual({
|
||||
kind: "content",
|
||||
result: "My Title",
|
||||
token: "<@var(context.header.text)>",
|
||||
contextPath: "header.text",
|
||||
outputPath: join("web", "if_example.html"),
|
||||
templatePath: join("<@if(context.web)>web", "if_example.html"),
|
||||
range: expect.any(Object),
|
||||
})
|
||||
})
|
||||
|
||||
test("reverse map records path variable tokens", () => {
|
||||
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()
|
||||
})
|
||||
}))
|
||||
render(tmp,{
|
||||
web: {
|
||||
create: true,
|
||||
dir: "web"
|
||||
},
|
||||
header: {
|
||||
render: false,
|
||||
text: "test"
|
||||
}
|
||||
}, { reverseMap: "meta/reverse-map.json" })
|
||||
|
||||
const manifest = JSON.parse(readFileSync(join(tmp, "meta", "reverse-map.json"), "utf-8"))
|
||||
expect(manifest.tokens["web"]).toContain("<@var(context.web.dir)>")
|
||||
const pathFile = manifest.files.find((entry: any) => entry.outputPath === "web")
|
||||
expect(pathFile.tokens).toContainEqual({
|
||||
kind: "path",
|
||||
result: "web",
|
||||
token: "<@var(context.web.dir)>",
|
||||
contextPath: "web.dir",
|
||||
outputPath: "web",
|
||||
templatePath: "<@if(context.web.create)><@var(context.web.dir)>",
|
||||
})
|
||||
})
|
||||
|
||||
test("wrong schema throws error",() => {
|
||||
const createRenderer = initRenderer("./testdata/if_example")
|
||||
expect(() => createRenderer(z.object({
|
||||
|
||||
Reference in New Issue
Block a user