@@ -53,7 +53,6 @@ import {
5353import { layoutFilter , layoutFilterParams } from "./layout.ts" ;
5454import { pandocMetadataPath } from "./render-paths.ts" ;
5555import { removePandocArgs } from "./flags.ts" ;
56- import * as ld from "../../core/lodash.ts" ;
5756import { mergeConfigs } from "../../core/config.ts" ;
5857import { projectType } from "../../project/types/project-types.ts" ;
5958import { readCodePage } from "../../core/windows.ts" ;
@@ -74,7 +73,7 @@ const kTimingFile = "timings-file";
7473
7574const kHasBootstrap = "has-bootstrap" ;
7675
77- export function filterParamsJson (
76+ export async function filterParamsJson (
7877 args : string [ ] ,
7978 options : PandocOptions ,
8079 defaults : FormatPandoc | undefined ,
@@ -105,7 +104,7 @@ export function filterParamsJson(
105104 ...ipynbFilterParams ( options ) ,
106105 ...projectFilterParams ( options ) ,
107106 ...quartoColumnParams ,
108- ...quartoFilterParams ( options , defaults ) ,
107+ ...await quartoFilterParams ( options , defaults ) ,
109108 ...crossrefFilterParams ( options , defaults ) ,
110109 ...layoutFilterParams ( options . format ) ,
111110 ...languageFilterParams ( options . format . language ) ,
@@ -262,7 +261,7 @@ function extractSmartIncludeInternal(
262261 if ( value === undefined ) {
263262 return [ ] ;
264263 }
265- if ( ld . isArray ( value ) ) {
264+ if ( Array . isArray ( value ) ) {
266265 const contents = value . filter ( isContent ) ;
267266 const nonContents = value . filter ( ( v ) => ! isContent ( v ) ) ;
268267 obj [ name ] = nonContents ;
@@ -289,7 +288,7 @@ function extractIncludeVariables(obj: { [key: string]: unknown }) {
289288 delete obj [ name ] ;
290289 if ( ! value ) {
291290 return [ ] ;
292- } else if ( ld . isArray ( value ) ) {
291+ } else if ( Array . isArray ( value ) ) {
293292 return value as unknown [ ] ;
294293 } else {
295294 return [ value ] ;
@@ -414,7 +413,7 @@ function ipynbFilterParams(options: PandocOptions) {
414413 } ;
415414}
416415
417- function quartoFilterParams (
416+ async function quartoFilterParams (
418417 options : PandocOptions ,
419418 defaults ?: FormatPandoc ,
420419) {
@@ -449,7 +448,7 @@ function quartoFilterParams(
449448 if ( shortcodes !== undefined ) {
450449 params [ kShortcodes ] = shortcodes ;
451450 }
452- const extShortcodes = extensionShortcodes ( options ) ;
451+ const extShortcodes = await extensionShortcodes ( options ) ;
453452 if ( extShortcodes ) {
454453 params [ kShortcodes ] = params [ kShortcodes ] || [ ] ;
455454 ( params [ kShortcodes ] as string [ ] ) . push ( ...extShortcodes ) ;
@@ -477,10 +476,10 @@ function quartoFilterParams(
477476 return params ;
478477}
479478
480- function extensionShortcodes ( options : PandocOptions ) {
479+ async function extensionShortcodes ( options : PandocOptions ) {
481480 const extensionShortcodes : string [ ] = [ ] ;
482481 if ( options . extension ) {
483- const allExtensions = options . extension ?. extensions (
482+ const allExtensions = await options . extension ?. extensions (
484483 options . source ,
485484 options . project ,
486485 ) ;
@@ -508,10 +507,10 @@ function initFilterParams(dependenciesFile: string) {
508507const kQuartoFilterMarker = "quarto" ;
509508const kQuartoCiteProcMarker = "citeproc" ;
510509
511- export function resolveFilters (
510+ export async function resolveFilters (
512511 filters : QuartoFilter [ ] ,
513512 options : PandocOptions ,
514- ) : QuartoFilter [ ] | undefined {
513+ ) : Promise < QuartoFilter [ ] | undefined > {
515514 // build list of quarto filters
516515
517516 // The default order of filters will be
@@ -532,7 +531,7 @@ export function resolveFilters(
532531 quartoFilters . push ( quartoPostFilter ( ) ) ;
533532
534533 // Resolve any filters that are provided by an extension
535- filters = resolveFilterExtension ( options , filters ) ;
534+ filters = await resolveFilterExtension ( options , filters ) ;
536535
537536 // if 'quarto' is in the filters, inject our filters at that spot,
538537 // otherwise inject them at the beginning so user filters can take
@@ -613,20 +612,21 @@ function pdfEngine(options: PandocOptions): string {
613612const kQuartoExtOrganization = "quarto-ext" ;
614613const kQuartoExtBuiltIn = [ "code-filename" , "grouped-tabsets" ] ;
615614
616- function resolveFilterExtension (
615+ async function resolveFilterExtension (
617616 options : PandocOptions ,
618617 filters : QuartoFilter [ ] ,
619- ) : QuartoFilter [ ] {
618+ ) : Promise < QuartoFilter [ ] > {
620619 // Resolve any filters that are provided by an extension
621- const results = filters . flatMap ( ( filter ) => {
620+ const results : ( QuartoFilter | QuartoFilter [ ] ) [ ] = [ ] ;
621+ const getFilter = async ( filter : QuartoFilter ) => {
622622 // Look for extension names in the filter list and result them
623623 // into the filters provided by the extension
624624 if (
625625 filter !== kQuartoFilterMarker && filter !== kQuartoCiteProcMarker &&
626626 typeof ( filter ) === "string" &&
627627 ! existsSync ( filter )
628628 ) {
629- let extensions = options . extension ?. find (
629+ let extensions = await options . extension ?. find (
630630 filter ,
631631 options . source ,
632632 "filters" ,
@@ -672,6 +672,10 @@ function resolveFilterExtension(
672672 } else {
673673 return filter ;
674674 }
675- } ) ;
676- return results ;
675+ } ;
676+ for ( const filter of filters ) {
677+ const r = await getFilter ( filter ) ;
678+ results . push ( r ) ;
679+ }
680+ return results . flat ( ) ;
677681}
0 commit comments