diff --git a/src/command/render/pandoc.ts b/src/command/render/pandoc.ts index ca93ea16b1..bebfa93ba3 100644 --- a/src/command/render/pandoc.ts +++ b/src/command/render/pandoc.ts @@ -381,7 +381,6 @@ export async function runPandoc( ) { const projectExtras = options.project?.formatExtras ? (await options.project.formatExtras( - options.project, options.source, options.flags || {}, options.format, diff --git a/src/command/use/commands/binder/binder.ts b/src/command/use/commands/binder/binder.ts index 82ee27d6ab..778b749b64 100644 --- a/src/command/use/commands/binder/binder.ts +++ b/src/command/use/commands/binder/binder.ts @@ -72,7 +72,7 @@ export const useBinderCommand = new Command() doneMessage: "Detected Project configuration:\n", }, () => { - return context.environment(context); + return context.environment(); }, ); diff --git a/src/format/html/format-html-bootstrap.ts b/src/format/html/format-html-bootstrap.ts index 5e75caa7f5..9e3aa1764b 100644 --- a/src/format/html/format-html-bootstrap.ts +++ b/src/format/html/format-html-bootstrap.ts @@ -671,7 +671,7 @@ async function processOtherLinks( context: ProjectContext, ): Promise => { if (link === "repo") { - const env = await context.environment(context); + const env = await context.environment(); if (env.github.repoUrl) { return { icon: "github", @@ -685,7 +685,7 @@ async function processOtherLinks( ); } } else if (link === "devcontainer") { - const env = await context.environment(context); + const env = await context.environment(); if ( env.github.organization && env.github.repository && env.github.repoUrl ) { @@ -703,7 +703,7 @@ async function processOtherLinks( ); } } else if (link === "binder") { - const env = await context.environment(context); + const env = await context.environment(); if (env.github.organization && env.github.repository) { const containerUrl = binderUrl( env.github.organization, diff --git a/src/project/project-context.ts b/src/project/project-context.ts index 1f60f266fa..762b1b87ae 100644 --- a/src/project/project-context.ts +++ b/src/project/project-context.ts @@ -11,7 +11,7 @@ import { existsSync, walkSync } from "fs/mod.ts"; import * as ld from "../core/lodash.ts"; import { ProjectType } from "./types/types.ts"; -import { Metadata } from "../config/types.ts"; +import { Format, Metadata, PandocFlags } from "../config/types.ts"; import { kProjectLibDir, kProjectOutputDir, @@ -67,7 +67,7 @@ import { projectConfigFile, projectVarsFile, } from "./project-shared.ts"; -import { RenderFlags } from "../command/render/types.ts"; +import { RenderFlags, RenderServices } from "../command/render/types.ts"; import { kWebsite } from "./types/website/website-constants.ts"; import { readAndValidateYamlFromFile } from "../core/schema/validated-yaml.ts"; @@ -257,7 +257,7 @@ export async function projectContext( } debug(`projectContext: Found Quarto project in ${dir}`); - return { + const result: ProjectContext = { dir, engines, files: { @@ -267,17 +267,25 @@ export async function projectContext( configResources: projectConfigResources(dir, projectConfig, type), }, config: projectConfig, - formatExtras: type.formatExtras, // this is a relatively ugly hack to avoid a circular import chain // that causes a deno bundler bug; renderFormats, - environment, + environment: () => environment(result), notebookContext, }; + if (type.formatExtras) { + result.formatExtras = async ( + source: string, + flags: PandocFlags, + format: Format, + services: RenderServices, + ) => type.formatExtras!(result, source, flags, format, services); + } + return result; } else { const { files, engines } = projectInputFiles(dir); debug(`projectContext: Found Quarto project in ${dir}`); - return { + const result = { dir, engines, config: projectConfig, @@ -288,9 +296,10 @@ export async function projectContext( configResources: projectConfigResources(dir, projectConfig), }, renderFormats, - environment, + environment: () => environment(result), notebookContext, }; + return result; } } else { const nextDir = dirname(dir); @@ -312,7 +321,7 @@ export async function projectContext( input: [], }, renderFormats, - environment, + environment: () => environment(context), notebookContext, }; if (Deno.statSync(path).isDirectory) { diff --git a/src/project/types.ts b/src/project/types.ts index 28c05a9efa..22ff2af043 100644 --- a/src/project/types.ts +++ b/src/project/types.ts @@ -41,8 +41,10 @@ export interface ProjectContext { engines: string[]; files: ProjectFiles; config?: ProjectConfig; + notebookContext: NotebookContext; + outputNameIndex?: Map; + formatExtras?: ( - project: ProjectContext, source: string, flags: PandocFlags, format: Format, @@ -56,10 +58,7 @@ export interface ProjectContext { project?: ProjectContext, ) => Promise>; - notebookContext: NotebookContext; - - outputNameIndex?: Map; - environment: (project: ProjectContext) => Promise; + environment: () => Promise; } export interface ProjectFiles {