@baseplate-dev/sync
Version:
Library for syncing Baseplate descriptions
38 lines • 1.67 kB
JavaScript
import pLimit from 'p-limit';
import { getGenerationConcurrencyLimit } from '#src/utils/concurrency.js';
import { WriteGeneratorFilesError } from './errors.js';
import { writeGeneratorFile } from './write-generator-file.js';
/**
* Write multiple generator files in parallel
*/
export async function writeGeneratorFiles({ fileOperations, outputDirectory, generatedContentsDirectory, }) {
const writeLimit = pLimit(getGenerationConcurrencyLimit());
const writeErrors = [];
// Sort operations that require rename before other operations
// to ensure that we write new files after renames occur
const fileOperationsWithRenames = fileOperations.filter((f) => f.previousRelativePath !== f.relativePath);
const fileOperationsWithoutRenames = fileOperations.filter((f) => f.previousRelativePath === f.relativePath);
async function writeFileOperations(fileOperations) {
await Promise.all(fileOperations.map((fileOperation) => writeLimit(async () => {
try {
await writeGeneratorFile({
fileOperation,
outputDirectory,
generatedContentsDirectory,
});
}
catch (error) {
writeErrors.push({
relativePath: fileOperation.relativePath,
error,
});
}
})));
}
await writeFileOperations(fileOperationsWithRenames);
await writeFileOperations(fileOperationsWithoutRenames);
if (writeErrors.length > 0) {
throw new WriteGeneratorFilesError(writeErrors);
}
}
//# sourceMappingURL=write-generator-files.js.map