@@ -239,6 +239,7 @@ export function readExtensions(
239239 }
240240 }
241241 }
242+
242243 return extensions ;
243244}
244245
@@ -391,27 +392,15 @@ 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 formats = contributes ?. formats as Metadata ||
413- contributes ?. format as Metadata || { } ;
414-
415404 // Process the special 'common' key by merging it
416405 // into any key that isn't 'common' and then removing it
417406 Object . keys ( formats ) . filter ( ( key ) => {
@@ -421,9 +410,28 @@ function readExtension(
421410 formats [ kCommon ] || { } ,
422411 formats [ key ] ,
423412 ) ;
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+ } ,
427+ ) ;
424428 } ) ;
425429 delete formats [ kCommon ] ;
426430
431+ // Alias the contributions
432+ const shortcodes = ( contributes ?. shortcodes || [ ] ) as string [ ] ;
433+ const filters = ( contributes ?. filters || { } ) as QuartoFilter [ ] ;
434+
427435 // Create the extension data structure
428436 return {
429437 title,
0 commit comments