@baseplate-dev/sync
Version:
Library for syncing Baseplate descriptions
35 lines • 1.73 kB
JavaScript
import { groupBy } from 'es-toolkit';
import { sortExtractorConfigKeys } from './sort-extractor-config-keys.js';
/**
* Merges template entries into extractor configurations by grouping metadata
* entries by generator and upserting them into the respective config objects.
* This function only updates the in-memory configurations and does not write files.
*
* @param metadataEntries - Array of template file extractor metadata entries
* @param context - Template extractor context containing config lookup
* @throws Error if no config is found for a generator
*/
export function mergeExtractorTemplateEntries(metadataEntries, context) {
// Group metadata entries by generator
const metadataEntriesByGenerator = groupBy(metadataEntries, (e) => e.generator);
for (const [generator, entries] of Object.entries(metadataEntriesByGenerator)) {
const generatorConfig = context.configLookup.getExtractorConfig(generator);
if (!generatorConfig) {
throw new Error(`No 'extractor.json' found for generator: ${generator}`);
}
// Upsert template entries into the extractor.json file
const { templates } = generatorConfig.config;
// Create a map of new templates to add
const newTemplates = Object.fromEntries(entries.map((e) => [e.templateName, e.metadata]));
const newConfig = sortExtractorConfigKeys({
...generatorConfig.config,
templates: {
...templates,
...newTemplates,
},
});
// Update the in-memory config cache
context.configLookup.setExtractorConfig(generator, newConfig);
}
}
//# sourceMappingURL=merge-extractor-template-entries.js.map