@tylertech/forge-build-tools
Version:
Node utilities for building and packaging libraries.
24 lines • 3.95 kB
JavaScript
import { isGlob } from '../utils/index.js';
import { globFilesAsync, readFileAsync, writeFileAsync } from './fs.js';
/**
* Modifies the contents of each of the provided files by calling the `modifier` function on each file.
* @param files The files to modify.
* @param modifier The modifier function.
*/
export async function modifyFile(files, modifier) {
if (typeof files === 'string') {
files = isGlob(files) ? await globFilesAsync(files, {}) : [files];
}
const fileDescriptors = [];
for (const filepath of files) {
const contents = await readFileAsync(filepath, 'utf8');
const newContents = await Promise.resolve(modifier({ contents, filepath }));
const isChanged = contents !== newContents;
if (isChanged) {
await writeFileAsync(filepath, newContents, 'utf8');
}
fileDescriptors.push({ filepath, changed: isChanged });
}
return fileDescriptors;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kaWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZzL21vZGlmeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBY3hFOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FBQyxLQUF3QixFQUFFLFFBQWtCO0lBQzNFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxjQUFjLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBc0IsRUFBRSxDQUFDO0lBRTlDLEtBQUssTUFBTSxRQUFRLElBQUksS0FBSyxFQUFFLENBQUM7UUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sV0FBVyxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sU0FBUyxHQUFHLFFBQVEsS0FBSyxXQUFXLENBQUM7UUFFM0MsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE1BQU0sY0FBYyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELE9BQU8sZUFBZSxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0dsb2IgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgeyBnbG9iRmlsZXNBc3luYywgcmVhZEZpbGVBc3luYywgd3JpdGVGaWxlQXN5bmMgfSBmcm9tICcuL2ZzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBJRmlsZURlc2NyaXB0b3Ige1xuICBmaWxlcGF0aDogc3RyaW5nO1xuICBjaGFuZ2VkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNb2RpZnlGaWxlSW5mbyB7XG4gIGNvbnRlbnRzOiBzdHJpbmc7XG4gIGZpbGVwYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgTW9kaWZpZXIgPSAoZmlsZUluZm86IElNb2RpZnlGaWxlSW5mbykgPT4gUHJvbWlzZTxzdHJpbmc+IHwgc3RyaW5nO1xuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBjb250ZW50cyBvZiBlYWNoIG9mIHRoZSBwcm92aWRlZCBmaWxlcyBieSBjYWxsaW5nIHRoZSBgbW9kaWZpZXJgIGZ1bmN0aW9uIG9uIGVhY2ggZmlsZS5cbiAqIEBwYXJhbSBmaWxlcyBUaGUgZmlsZXMgdG8gbW9kaWZ5LlxuICogQHBhcmFtIG1vZGlmaWVyIFRoZSBtb2RpZmllciBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1vZGlmeUZpbGUoZmlsZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBtb2RpZmllcjogTW9kaWZpZXIpOiBQcm9taXNlPElGaWxlRGVzY3JpcHRvcltdPiB7XG4gIGlmICh0eXBlb2YgZmlsZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgZmlsZXMgPSBpc0dsb2IoZmlsZXMpID8gYXdhaXQgZ2xvYkZpbGVzQXN5bmMoZmlsZXMsIHt9KSA6IFtmaWxlc107XG4gIH1cblxuICBjb25zdCBmaWxlRGVzY3JpcHRvcnM6IElGaWxlRGVzY3JpcHRvcltdID0gW107XG5cbiAgZm9yIChjb25zdCBmaWxlcGF0aCBvZiBmaWxlcykge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgcmVhZEZpbGVBc3luYyhmaWxlcGF0aCwgJ3V0ZjgnKTtcbiAgICBjb25zdCBuZXdDb250ZW50cyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShtb2RpZmllcih7IGNvbnRlbnRzLCBmaWxlcGF0aCB9KSk7XG4gICAgY29uc3QgaXNDaGFuZ2VkID0gY29udGVudHMgIT09IG5ld0NvbnRlbnRzO1xuXG4gICAgaWYgKGlzQ2hhbmdlZCkge1xuICAgICAgYXdhaXQgd3JpdGVGaWxlQXN5bmMoZmlsZXBhdGgsIG5ld0NvbnRlbnRzLCAndXRmOCcpO1xuICAgIH1cblxuICAgIGZpbGVEZXNjcmlwdG9ycy5wdXNoKHsgZmlsZXBhdGgsIGNoYW5nZWQ6IGlzQ2hhbmdlZCB9KTtcbiAgfVxuXG4gIHJldHVybiBmaWxlRGVzY3JpcHRvcnM7XG59XG4iXX0=