kui-shell
Version:
This is the monorepo for Kui, the hybrid command-line/GUI electron-based Kubernetes tool
118 lines • 4.41 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const debug_1 = require("debug");
const fs = require("fs");
const fs_extra_1 = require("fs-extra");
const path_1 = require("path");
const tmp_1 = require("tmp");
const util_1 = require("./util");
const debug = debug_1.default('k8s/cmds/copy');
debug('loading');
const copyFile = (src, target) => new Promise((resolve, reject) => __awaiter(void 0, void 0, void 0, function* () {
debug('copyFile', src, target);
let targetFile = target;
if (yield fs_extra_1.pathExists(target)) {
if ((yield fs_extra_1.lstat(target)).isDirectory()) {
targetFile = path_1.join(target, path_1.basename(src));
}
}
fs.readFile(src, (err, data) => {
if (err) {
reject(err);
}
else {
resolve(fs_extra_1.writeFile(targetFile, data));
}
});
}));
exports.copy = (src, target) => __awaiter(void 0, void 0, void 0, function* () {
return new Promise((resolve, reject) => __awaiter(void 0, void 0, void 0, function* () {
debug('copy', src, target);
const targetFolder = path_1.join(target, path_1.basename(src));
yield fs_extra_1.ensureDir(targetFolder);
fs.readdir(src, (err, files) => {
if (err) {
reject(err);
}
else {
resolve(Promise.all(files.map(file => new Promise((resolve, reject) => {
const srcFile = path_1.join(src, file);
fs.lstat(srcFile, (err, stats) => {
if (err) {
reject(err);
}
else if (stats.isDirectory()) {
resolve(exports.copy(srcFile, targetFolder));
}
else {
resolve(copyFile(srcFile, targetFolder));
}
});
}))));
}
});
}));
});
exports.copyOutDirectory = (srcDir, fn) => new Promise((resolve, reject) => {
debug('copyOutDirectory', srcDir);
tmp_1.dir((err, path, cleanupCallback) => __awaiter(void 0, void 0, void 0, function* () {
if (err) {
cleanupCallback();
reject(err);
}
else {
const targetDir = path_1.join(path, path_1.basename(srcDir));
try {
debug('we need to copy out of the asar', srcDir, path);
yield exports.copy(srcDir, path);
debug('copy-out of complete');
if (fn) {
resolve(yield fn(targetDir));
}
else {
resolve(targetDir);
}
}
catch (err) {
reject(err);
}
finally {
if (fn) {
yield fs_extra_1.remove(targetDir);
cleanupCallback();
}
}
}
}));
});
exports.copyOutFile = (src) => new Promise((resolve, reject) => {
debug('copyOutFile', src);
tmp_1.file((err, path, fd, cleanupCallback) => __awaiter(void 0, void 0, void 0, function* () {
if (err) {
cleanupCallback();
reject(err);
}
else {
yield copyFile(src, path);
resolve(path);
}
}));
});
exports.copyOut = (src, fn) => __awaiter(void 0, void 0, void 0, function* () {
if (yield util_1.isDirectory(src)) {
return exports.copyOutDirectory(src, fn);
}
else {
return exports.copyOutFile(src);
}
});
//# sourceMappingURL=copy.js.map