appcenter-cli
Version:
Command line tool for Visual Studio App Center
253 lines (252 loc) • 7.86 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 });
exports.walk = exports.access = exports.directoryExists = exports.fileExists = exports.openTempFile = exports.close = exports.unlink = exports.rmDir = exports.cpFile = exports.cpDir = exports.cp = exports.mkTempDir = exports.mkdir = exports.exists = exports.write = exports.writeFile = exports.readdir = exports.readFile = exports.read = exports.open = exports.stat = void 0;
const fs = require("fs");
const path = require("path");
const rimraf = require("rimraf");
const temp = require("temp");
temp.track();
function stat(path) {
return __awaiter(this, void 0, void 0, function* () {
return (yield callFs(fs.stat, path))[0];
});
}
exports.stat = stat;
function open(path, flags, mode) {
return __awaiter(this, void 0, void 0, function* () {
return (yield callFs(fs.open, path, flags, mode))[0];
});
}
exports.open = open;
function read(fd, buffer, offset, length, position) {
return __awaiter(this, void 0, void 0, function* () {
const result = yield callFs(fs.read, fd, buffer, offset, length, position);
return { bytesRead: result[0], buffer: result[1] };
});
}
exports.read = read;
function readFile(...args) {
return __awaiter(this, void 0, void 0, function* () {
return (yield callFs(fs.readFile, ...args))[0];
});
}
exports.readFile = readFile;
function readdir(path) {
return __awaiter(this, void 0, void 0, function* () {
return (yield callFs(fs.readdir, path))[0];
});
}
exports.readdir = readdir;
function writeFile(filename, data) {
return __awaiter(this, void 0, void 0, function* () {
return (yield callFs(fs.writeFile, filename, data))[0];
});
}
exports.writeFile = writeFile;
function write(fd, data) {
return __awaiter(this, void 0, void 0, function* () {
return (yield callFs(fs.write, fd, data, 0, data.length))[0];
});
}
exports.write = write;
function exists(path) {
return new Promise((resolve, reject) => {
fs.stat(path, (err) => {
if (err) {
if (err.code === "ENOENT") {
resolve(false);
}
else {
reject(err);
}
}
else {
resolve(true);
}
});
});
}
exports.exists = exists;
function mkdir(path) {
return callFs(fs.mkdir, path).then(() => {
return;
});
}
exports.mkdir = mkdir;
function mkTempDir(affixes) {
return callTemp(temp.mkdir, affixes);
}
exports.mkTempDir = mkTempDir;
function cp(source, target) {
return __awaiter(this, void 0, void 0, function* () {
const sourceStats = yield stat(source);
if (sourceStats.isDirectory()) {
yield cpDir(source, target);
}
else {
yield cpFile(source, target);
}
});
}
exports.cp = cp;
function cpDir(source, target) {
return __awaiter(this, void 0, void 0, function* () {
if (!(yield exists(target))) {
createLongPath(target);
}
const files = yield readdir(source);
for (let i = 0; i < files.length; i++) {
const sourceEntry = path.join(source, files[i]);
const targetEntry = path.join(target, files[i]);
yield cp(sourceEntry, targetEntry);
}
});
}
exports.cpDir = cpDir;
function cpFile(source, target) {
return new Promise((resolve, reject) => {
const targetFolder = path.dirname(target);
if (!fs.existsSync(targetFolder)) {
createLongPath(targetFolder);
}
const sourceStream = fs.createReadStream(source);
const targetStream = fs.createWriteStream(target);
targetStream.on("close", () => resolve());
targetStream.on("error", (err) => reject(err));
sourceStream.pipe(targetStream);
});
}
exports.cpFile = cpFile;
function rmDir(source, recursive = true) {
if (recursive) {
return new Promise((resolve, reject) => {
rimraf(source, (err) => {
if (err) {
reject(err);
}
else {
resolve();
}
});
});
}
else {
return callFs(fs.rmdir, source).then(() => {
return;
});
}
}
exports.rmDir = rmDir;
function unlink(filePath) {
return callFs(fs.unlink, filePath).then(() => {
return;
});
}
exports.unlink = unlink;
function close(fd) {
return callFs(fs.close, fd).then(() => {
return;
});
}
exports.close = close;
function openTempFile(...args) {
return callTemp(temp.open, ...args);
}
exports.openTempFile = openTempFile;
function fileExists(path) {
return __awaiter(this, void 0, void 0, function* () {
return yield pathExists(path, true);
});
}
exports.fileExists = fileExists;
function directoryExists(path) {
return __awaiter(this, void 0, void 0, function* () {
return yield pathExists(path, false);
});
}
exports.directoryExists = directoryExists;
function access(path, mode) {
return __awaiter(this, void 0, void 0, function* () {
return callFs(fs.access, path, mode).then(() => {
return;
});
});
}
exports.access = access;
function walk(dir) {
return __awaiter(this, void 0, void 0, function* () {
const stats = yield stat(dir);
if (stats.isDirectory()) {
let files = [];
for (const file of yield readdir(dir)) {
files = files.concat(yield walk(path.join(dir, file)));
}
return files;
}
else {
return [dir];
}
});
}
exports.walk = walk;
function pathExists(path, isFile) {
return __awaiter(this, void 0, void 0, function* () {
let stats = null;
try {
stats = yield stat(path);
}
catch (err) {
return false;
}
return isFile === stats.isFile();
});
}
function createLongPath(target) {
let targetFolder = target;
const notExistsFolder = [];
while (!fs.existsSync(targetFolder)) {
notExistsFolder.push(path.basename(targetFolder));
targetFolder = path.resolve(targetFolder, "..");
}
notExistsFolder.reverse().forEach((element) => {
targetFolder = path.resolve(targetFolder, element);
fs.mkdirSync(targetFolder);
});
}
function callFs(func, ...args) {
return new Promise((resolve, reject) => {
func.apply(fs, args.concat([
(err, ...args) => {
if (err) {
reject(err);
}
else {
resolve(args);
}
},
]));
});
}
function callTemp(func, ...args) {
return new Promise((resolve, reject) => {
func.apply(temp, args.concat([
(err, result) => {
if (err) {
reject(err);
}
else {
resolve(result);
}
},
]));
});
}