Skip to content

Commit 0970b13

Browse files
committed
Embedded shortcodes and filters are expected in the formet keys
(They are not ‘contributed’ - they should be referenced internally)
1 parent df6518d commit 0970b13

File tree

1 file changed

+24
-16
lines changed

1 file changed

+24
-16
lines changed

src/extension/extension.ts

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)