UNPKG

@coat/cli

Version:

TODO: See #3

53 lines (51 loc) 2.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.performFileOperations = performFileOperations; var _fsExtra = _interopRequireDefault(require("fs-extra")); var _constants = require("../constants"); var _createFileOperationLogMessage = require("./create-file-operation-log-message"); var _getFileOperations = require("./get-file-operations"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Updates the files on disk and logs each operation. If fileOperations is empty, * an up-to-date message is logged. * * @param fileOperations The file operations that will be performed */ async function performFileOperations(fileOperations) { const logMessages = []; if (fileOperations.length) { // Create log messages for all file operations const fileLogMessages = fileOperations.map(fileOperation => (0, _createFileOperationLogMessage.createFileOperationLogMessage)(fileOperation, _createFileOperationLogMessage.Tense.Past)); logMessages.push(...fileLogMessages); // Perform the file operations and write or delete them await Promise.all(fileOperations.map(fileOperation => { switch (fileOperation.type) { case _getFileOperations.FileOperationType.Delete: return _fsExtra.default.unlink(fileOperation.absolutePath); case _getFileOperations.FileOperationType.Place: case _getFileOperations.FileOperationType.Update: case _getFileOperations.FileOperationType.UpdateWithPrompt: // Use outputFile from fs-extra to automatically create any missing directories return _fsExtra.default.outputFile(fileOperation.absolutePath, fileOperation.content); case _getFileOperations.FileOperationType.DeleteSkipped: // Don't perform any action break; // The default case is only required to let TypeScript throw // compiler errors if a new FileOperationType is added /* istanbul ignore next */ default: { const unhandledFileOperation = fileOperation; throw new Error(`Unhandled FileOperationType for operation: ${unhandledFileOperation}`); } } })); } else { // No file operation is necessary logMessages.push(_constants.EVERYTHING_UP_TO_DATE_MESSAGE); } console.log(["", ...logMessages, ""].join("\n")); }