Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e16fc8b482 |
@@ -229,19 +229,21 @@ test("reverseDir only includes new rendered files matching include globs", () =>
|
|||||||
dir: "components"
|
dir: "components"
|
||||||
},
|
},
|
||||||
header: {
|
header: {
|
||||||
render: false,
|
render: true,
|
||||||
text: "test"
|
text: "test"
|
||||||
}
|
}
|
||||||
}, { reverseMap: true })
|
}, { reverseMap: true })
|
||||||
writeFileSync(join(renderedOut, "components", "new.ts"), "export const value = 1\n")
|
writeFileSync(join(renderedOut, "components", "new.ts"), "export const value = 1\n")
|
||||||
|
writeFileSync(join(renderedOut, "components", "title.ts"), "export const title = 'test'\n")
|
||||||
writeFileSync(join(renderedOut, "components", "debug.tmp"), "debug\n")
|
writeFileSync(join(renderedOut, "components", "debug.tmp"), "debug\n")
|
||||||
|
|
||||||
reverseDir(renderedOut, ignoredOut)
|
reverseDir(renderedOut, ignoredOut)
|
||||||
expect(existsSync(join(ignoredOut, "<@if(context.web.create)><@var(context.web.dir)>", "new.ts"))).toBe(false)
|
expect(existsSync(join(ignoredOut, "<@if(context.web.create)><@var(context.web.dir)>", "new.ts"))).toBe(false)
|
||||||
|
|
||||||
const result = reverseDir(renderedOut, templateOut, { include: ["components/**/*.ts"] })
|
const result = reverseDir(renderedOut, templateOut, { include: ["components/**/*.ts"] })
|
||||||
expect(result.filesWritten).toBe(2)
|
expect(result.filesWritten).toBe(3)
|
||||||
expect(existsSync(join(templateOut, "<@if(context.web.create)><@var(context.web.dir)>", "new.ts"))).toBe(true)
|
expect(existsSync(join(templateOut, "<@if(context.web.create)><@var(context.web.dir)>", "new.ts"))).toBe(true)
|
||||||
|
expect(readFileSync(join(templateOut, "<@if(context.web.create)><@var(context.web.dir)>", "title.ts"), "utf-8")).toContain("<@var(context.header.text)>")
|
||||||
expect(existsSync(join(templateOut, "<@if(context.web.create)><@var(context.web.dir)>", "debug.tmp"))).toBe(false)
|
expect(existsSync(join(templateOut, "<@if(context.web.create)><@var(context.web.dir)>", "debug.tmp"))).toBe(false)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@gregorlohaus/tdir",
|
"name": "@gregorlohaus/tdir",
|
||||||
"version": "0.1.6",
|
"version": "0.1.7",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./dist/index.js",
|
"main": "./dist/index.js",
|
||||||
|
|||||||
17
render.ts
17
render.ts
@@ -139,6 +139,17 @@ function addReverseMapToken(
|
|||||||
state.manifest.tokens[token.result] = tokens
|
state.manifest.tokens[token.result] = tokens
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addFlatToken(
|
||||||
|
state: RenderState | undefined,
|
||||||
|
result: string,
|
||||||
|
token: string,
|
||||||
|
) {
|
||||||
|
if (!state?.manifest) return
|
||||||
|
const tokens = state.manifest.tokens[result] ?? []
|
||||||
|
if (!tokens.includes(token)) tokens.push(token)
|
||||||
|
state.manifest.tokens[result] = tokens
|
||||||
|
}
|
||||||
|
|
||||||
function getReverseMapPath(destRoot: string, reverseMap: true | string): string {
|
function getReverseMapPath(destRoot: string, reverseMap: true | string): string {
|
||||||
if (reverseMap === true) return resolveOutputPath(destRoot, ".tdir-map.json")
|
if (reverseMap === true) return resolveOutputPath(destRoot, ".tdir-map.json")
|
||||||
return resolveOutputPath(destRoot, reverseMap)
|
return resolveOutputPath(destRoot, reverseMap)
|
||||||
@@ -384,6 +395,12 @@ function renderContentWithMap(
|
|||||||
state?: RenderState,
|
state?: RenderState,
|
||||||
file?: ReverseMapFile,
|
file?: ReverseMapFile,
|
||||||
): string {
|
): string {
|
||||||
|
for (const match of content.matchAll(VAR_RE)) {
|
||||||
|
const token = match[0]
|
||||||
|
const path = match[1]!
|
||||||
|
addFlatToken(state, String(resolveContext(context, path) ?? ""), token)
|
||||||
|
}
|
||||||
|
|
||||||
const processedResult = processIfBlocksWithMap(content, context)
|
const processedResult = processIfBlocksWithMap(content, context)
|
||||||
const processed = processedResult.content
|
const processed = processedResult.content
|
||||||
for (const token of processedResult.conditionalTokens) {
|
for (const token of processedResult.conditionalTokens) {
|
||||||
|
|||||||
20
reverse.ts
20
reverse.ts
@@ -245,6 +245,19 @@ function writeSkippedTemplate(
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function replaceFlatTokens(content: string, manifest: ReverseMapManifest): string {
|
||||||
|
const entries = Object.entries(manifest.tokens)
|
||||||
|
.filter(([, tokens]) => tokens.length > 0)
|
||||||
|
.sort(([a], [b]) => b.length - a.length)
|
||||||
|
|
||||||
|
let result = content
|
||||||
|
for (const [rendered, tokens] of entries) {
|
||||||
|
if (rendered === "") continue
|
||||||
|
result = result.split(rendered).join(tokens[0]!)
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
function dirnamePath(path: string): string {
|
function dirnamePath(path: string): string {
|
||||||
const normalized = normalizePath(path)
|
const normalized = normalizePath(path)
|
||||||
const index = normalized.lastIndexOf("/")
|
const index = normalized.lastIndexOf("/")
|
||||||
@@ -340,6 +353,7 @@ function copyIncludedRenderedFiles(
|
|||||||
templateRoot: string,
|
templateRoot: string,
|
||||||
includedOutputPaths: string[],
|
includedOutputPaths: string[],
|
||||||
directoryMap: Map<string, string>,
|
directoryMap: Map<string, string>,
|
||||||
|
manifest: ReverseMapManifest,
|
||||||
): number {
|
): number {
|
||||||
let filesWritten = 0
|
let filesWritten = 0
|
||||||
|
|
||||||
@@ -347,7 +361,12 @@ function copyIncludedRenderedFiles(
|
|||||||
const renderedPath = resolveInside(renderedRoot, outputPath)
|
const renderedPath = resolveInside(renderedRoot, outputPath)
|
||||||
const templatePath = resolveInside(templateRoot, inferTemplatePath(outputPath, directoryMap))
|
const templatePath = resolveInside(templateRoot, inferTemplatePath(outputPath, directoryMap))
|
||||||
mkdirSync(dirname(templatePath), { recursive: true })
|
mkdirSync(dirname(templatePath), { recursive: true })
|
||||||
|
const content = readFileSync(renderedPath)
|
||||||
|
if (isUtf8Text(content)) {
|
||||||
|
writeFileSync(templatePath, replaceFlatTokens(content.toString("utf-8"), manifest))
|
||||||
|
} else {
|
||||||
copyFileSync(renderedPath, templatePath)
|
copyFileSync(renderedPath, templatePath)
|
||||||
|
}
|
||||||
filesWritten += 1
|
filesWritten += 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -440,6 +459,7 @@ export function reverseDir(
|
|||||||
templateRoot,
|
templateRoot,
|
||||||
includedOutputPaths,
|
includedOutputPaths,
|
||||||
directoryMap,
|
directoryMap,
|
||||||
|
manifest,
|
||||||
)
|
)
|
||||||
|
|
||||||
return { filesWritten, warnings }
|
return { filesWritten, warnings }
|
||||||
|
|||||||
Reference in New Issue
Block a user