UNPKG

@baseplate-dev/sync

Version:

Library for syncing Baseplate descriptions

51 lines 1.77 kB
import pLimit from 'p-limit'; import { getGenerationConcurrencyLimit } from '#src/utils/concurrency.js'; import { PrepareGeneratorFilesError } from '../errors.js'; import { prepareGeneratorFile } from './prepare-generator-file.js'; /** * Prepare generator files * * @param input - Prepare generator files input * @returns Prepare generator files result */ export async function prepareGeneratorFiles({ files, context, }) { const writeLimit = pLimit(getGenerationConcurrencyLimit()); const fileResults = await Promise.all(Array.from(files.entries(), ([filename, file]) => writeLimit(() => prepareGeneratorFile({ relativePath: filename, data: file, context, }).catch((err) => ({ relativePath: filename, cause: err, }))))); const fileErrors = []; const operationResults = []; for (const result of fileResults) { if ('cause' in result) { fileErrors.push(result); } else { operationResults.push(result); } } if (fileErrors.length > 0) { throw new PrepareGeneratorFilesError(fileErrors); } const fileIdToRelativePathMap = new Map(); for (const [relativePath, file] of files.entries()) { if (fileIdToRelativePathMap.has(file.id)) { throw new PrepareGeneratorFilesError([ { relativePath, cause: new Error(`File ID ${file.id} is already in use by file ${fileIdToRelativePathMap.get(file.id)}`), }, ]); } fileIdToRelativePathMap.set(file.id, relativePath); } return { files: operationResults, fileIdToRelativePathMap, }; } //# sourceMappingURL=prepare-generator-files.js.map