UNPKG

@baseplate-dev/sync

Version:

Library for syncing Baseplate descriptions

47 lines 2.04 kB
import { compareStrings, stringifyPrettyStable } from '@baseplate-dev/utils'; import { promises as fs } from 'node:fs'; import path from 'node:path'; import { TEMPLATES_INFO_FILENAME } from '../constants.js'; /** * Groups files by their directory and collects their template infos */ function groupFilesByDirectory(files) { const directoryMap = new Map(); for (const [filePath, fileData] of files) { if (!fileData.options?.templateInfo) { continue; } const dirPath = path.dirname(filePath); const fileName = path.basename(filePath); const existingTemplateInfoEntries = directoryMap.get(dirPath) ?? {}; existingTemplateInfoEntries[fileName] = fileData.options.templateInfo; directoryMap.set(dirPath, existingTemplateInfoEntries); } return directoryMap; } /** * Writes templates info files to each directory containing files with template metadata * * @param files - Map of file paths to file data * @param outputDirectory - Base directory where files are being written * @returns Promise that resolves when all templates info files are written */ export async function writeTemplateInfoFiles(files, outputDirectory) { const directoryInfoMap = groupFilesByDirectory(files); const writePromises = []; for (const [dirPath, info] of directoryInfoMap) { // Skip if no metadata to write if (Object.keys(info).length === 0) { continue; } const fullDirPath = path.join(outputDirectory, dirPath); const infoPath = path.join(fullDirPath, TEMPLATES_INFO_FILENAME); const sortedInfoEntries = Object.fromEntries(Object.entries(info).sort(([a], [b]) => compareStrings(a, b))); // Ensure directory exists writePromises.push(fs .mkdir(fullDirPath, { recursive: true }) .then(() => fs.writeFile(infoPath, stringifyPrettyStable(sortedInfoEntries), 'utf8'))); } await Promise.all(writePromises); } //# sourceMappingURL=write-template-info-files.js.map