UNPKG

just-scripts

Version:
45 lines 2.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeCopyInstructions = void 0; const path_1 = require("path"); const fs_extra_1 = require("fs-extra"); const arrayify_1 = require("../arrayUtils/arrayify"); const uniqueValues_1 = require("../arrayUtils/uniqueValues"); /** * Function containing the core code for the copy task with a given config. */ async function executeCopyInstructions(config) { if (config && config.copyInstructions) { validateConfig(config.copyInstructions); await createDirectories(config.copyInstructions); await Promise.all(config.copyInstructions.map(executeSingleCopyInstruction)); } } exports.executeCopyInstructions = executeCopyInstructions; function validateConfig(copyInstructions) { copyInstructions.forEach(instr => { if (instr.noSymlink === false && Array.isArray(instr.sourceFilePath) && instr.sourceFilePath.length > 1) { throw new Error('Multiple source files cannot be specified when making a symlink'); } }); } function createDirectories(copyInstructions) { return Promise.all((0, uniqueValues_1.uniqueValues)(copyInstructions.map(instruction => (0, path_1.dirname)(instruction.destinationFilePath))).map(dirname => (0, fs_extra_1.ensureDir)(dirname))); } function executeSingleCopyInstruction(copyInstruction) { const sourceFileNames = (0, arrayify_1.arrayify)(copyInstruction.sourceFilePath); // source and dest are 1-to-1? perform binary copy or symlink as desired. if (sourceFileNames.length === 1) { if (copyInstruction.noSymlink) { return (0, fs_extra_1.copy)(sourceFileNames[0], copyInstruction.destinationFilePath); } else { return (0, fs_extra_1.ensureSymlink)((0, path_1.resolve)(sourceFileNames[0]), copyInstruction.destinationFilePath); } } // perform text merge operation. return Promise.all(sourceFileNames.map(fileName => (0, fs_extra_1.readFile)(fileName))).then(fileContents => { return (0, fs_extra_1.writeFile)(copyInstruction.destinationFilePath, fileContents.join('\n')); }); } //# sourceMappingURL=executeCopyInstructions.js.map