@coat/cli
Version:
TODO: See #3
53 lines (51 loc) • 2.4 kB
JavaScript
;
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"));
}