Skip to content

Commit

Permalink
Merge pull request #8007 from quarto-dev/bugfix/temp-part
Browse files Browse the repository at this point in the history
Resolve user paths before mergin template partials
  • Loading branch information
dragonstyle authored Dec 21, 2023
2 parents c97e4ef + 4202ea5 commit b6f4039
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 1 deletion.
7 changes: 7 additions & 0 deletions src/command/render/pandoc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ import {
cleanTemplatePartialMetadata,
kTemplatePartials,
readPartials,
resolveTemplatePartialPaths,
stageTemplate,
} from "./template.ts";
import {
Expand Down Expand Up @@ -517,6 +518,12 @@ export async function runPandoc(

// merge metadata
if (extras.metadata || extras.metadataOverride) {
// before we merge metadata, ensure that partials are proper paths
resolveTemplatePartialPaths(
options.format.metadata,
cwd,
options.project,
);
options.format.metadata = {
...mergeConfigs(
extras.metadata || {},
Expand Down
37 changes: 36 additions & 1 deletion src/command/render/template.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ import * as ld from "../../core/lodash.ts";
import { isHtmlDocOutput, isRevealjsOutput } from "../../config/format.ts";
import { expandGlobSync } from "fs/mod.ts";
import { normalizePath } from "../../core/path.ts";
import { isGlob } from "../../core/lib/glob.ts";
import { ProjectContext } from "../../project/types.ts";
import { isAboutPage } from "../../project/types/website/about/website-about.ts";

export const kPatchedTemplateExt = ".patched";
export const kTemplatePartials = "template-partials";
Expand All @@ -33,7 +36,10 @@ export const kTemplatePartials = "template-partials";
* @param metadata
* @param cwd current working directory for glob expansion
*/
export function readPartials(metadata: Metadata, inputDir?: string) {
export function readPartials(
metadata: Metadata,
inputDir?: string,
) {
if (typeof (metadata?.[kTemplatePartials]) === "string") {
metadata[kTemplatePartials] = [metadata[kTemplatePartials]];
}
Expand All @@ -53,10 +59,39 @@ export function readPartials(metadata: Metadata, inputDir?: string) {
for (const walk of expandGlobSync(resolvePath(path))) {
result.push(walk.path);
}
if (!isGlob(path) && result.length === 0) {
throw new Error(
`Template partial ${path} was not found. Please confirm that the path to the file is correct.`,
);
}
return result;
});
}

export function resolveTemplatePartialPaths(
metadata: Metadata,
inputDir?: string,
project?: ProjectContext,
) {
if (typeof (metadata?.[kTemplatePartials]) === "string") {
metadata[kTemplatePartials] = [metadata[kTemplatePartials]];
}
const result = (metadata?.[kTemplatePartials] || []) as string[];
metadata[kTemplatePartials] = result.map((path) => {
if (project && (path.startsWith("/") || path.startsWith("\\"))) {
return join(project.dir, path.slice(1));
} else if (!inputDir || isAbsolute(path)) {
return path;
} else {
if (isAbsolute(inputDir)) {
return join(inputDir, path);
} else {
return join(Deno.cwd(), inputDir, path);
}
}
});
}

export async function stageTemplate(
options: PandocOptions,
extras: FormatExtras,
Expand Down

0 comments on commit b6f4039

Please sign in to comment.