@@ -63,7 +63,7 @@ export function createExtensionContext(): ExtensionContext {
6363 const find = (
6464 name : string ,
6565 input : string ,
66- contributes ?: "shortcodes" | "filters" | "format " ,
66+ contributes ?: "shortcodes" | "filters" | "formats " ,
6767 project ?: ProjectContext ,
6868 ) : Extension [ ] => {
6969 const extId = toExtensionId ( name ) ;
@@ -145,15 +145,15 @@ const loadExtension = (
145145function findExtensions (
146146 extensions : Extension [ ] ,
147147 extensionId : ExtensionId ,
148- contributes ?: "shortcodes" | "filters" | "format " ,
148+ contributes ?: "shortcodes" | "filters" | "formats " ,
149149) {
150150 // Filter the extension based upon what they contribute
151151 const exts = extensions . filter ( ( ext ) => {
152152 if ( contributes === "shortcodes" && ext . contributes . shortcodes ) {
153153 return true ;
154154 } else if ( contributes === "filters" && ext . contributes . filters ) {
155155 return true ;
156- } else if ( contributes === "format " && ext . contributes . format ) {
156+ } else if ( contributes === "formats " && ext . contributes . formats ) {
157157 return true ;
158158 } else {
159159 return contributes === undefined ;
@@ -239,6 +239,7 @@ export function readExtensions(
239239 }
240240 }
241241 }
242+
242243 return extensions ;
243244}
244245
@@ -352,7 +353,7 @@ function validateExtension(extension: Extension) {
352353 const contribs = [
353354 extension . contributes . filters ,
354355 extension . contributes . shortcodes ,
355- extension . contributes . format ,
356+ extension . contributes . formats ,
356357 ] ;
357358 contribs . forEach ( ( contrib ) => {
358359 if ( contrib ) {
@@ -391,37 +392,45 @@ function readExtension(
391392 // Paths used should be considered relative to this dir
392393 const extensionDir = dirname ( extensionFile ) ;
393394
395+ // The formats that are being contributed
396+ const formats = contributes ?. formats as Metadata ||
397+ contributes ?. format as Metadata || { } ;
398+
394399 // Read any embedded extension
395400 const embeddedExtensions = existsSync ( join ( extensionDir , kExtensionDir ) )
396401 ? readExtensions ( join ( extensionDir , kExtensionDir ) )
397402 : [ ] ;
398403
399- // The items that can be contributed
400- // Resolve shortcodes and filters (these might come from embedded extension)
401- // Note that resolving will throw if the extension cannot be resolved
402- const shortcodes = ( contributes ?. shortcodes as string [ ] || [ ] ) . flatMap ( (
403- shortcode ,
404- ) => {
405- return resolveShortcode ( embeddedExtensions , extensionDir , shortcode ) ;
406- } ) ;
407- const filters = ( contributes ?. filters as QuartoFilter [ ] || [ ] ) . flatMap (
408- ( filter ) => {
409- return resolveFilter ( embeddedExtensions , extensionDir , filter ) ;
410- } ,
411- ) ;
412- const format = contributes ?. format as Metadata || { } ;
413-
414404 // Process the special 'common' key by merging it
415405 // into any key that isn't 'common' and then removing it
416- Object . keys ( format ) . filter ( ( key ) => {
406+ Object . keys ( formats ) . filter ( ( key ) => {
417407 return key !== kCommon ;
418408 } ) . forEach ( ( key ) => {
419- format [ key ] = mergeConfigs (
420- format [ kCommon ] || { } ,
421- format [ key ] ,
409+ formats [ key ] = mergeConfigs (
410+ formats [ kCommon ] || { } ,
411+ formats [ key ] ,
412+ ) ;
413+
414+ const formatMeta = formats [ key ] as Metadata ;
415+
416+ // Resolve shortcodes and filters (these might come from embedded extension)
417+ // Note that resolving will throw if the extension cannot be resolved
418+ formatMeta . shortcodes = ( formatMeta . shortcodes as string [ ] || [ ] ) . flatMap ( (
419+ shortcode ,
420+ ) => {
421+ return resolveShortcode ( embeddedExtensions , extensionDir , shortcode ) ;
422+ } ) ;
423+ formatMeta . filters = ( formatMeta . filters as QuartoFilter [ ] || [ ] ) . flatMap (
424+ ( filter ) => {
425+ return resolveFilter ( embeddedExtensions , extensionDir , filter ) ;
426+ } ,
422427 ) ;
423428 } ) ;
424- delete format [ kCommon ] ;
429+ delete formats [ kCommon ] ;
430+
431+ // Alias the contributions
432+ const shortcodes = ( contributes ?. shortcodes || [ ] ) as string [ ] ;
433+ const filters = ( contributes ?. filters || { } ) as QuartoFilter [ ] ;
425434
426435 // Create the extension data structure
427436 return {
@@ -433,7 +442,7 @@ function readExtension(
433442 contributes : {
434443 shortcodes : shortcodes . map ( ( code ) => join ( extensionDir , code ) ) ,
435444 filters,
436- format ,
445+ formats ,
437446 } ,
438447 } ;
439448}
0 commit comments