80 lines
1.7 KiB
JavaScript
80 lines
1.7 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.printErrorAndExit = printErrorAndExit;
|
||
|
exports.executeFinally = executeFinally;
|
||
|
exports.orNullIfFileNotExist = orNullIfFileNotExist;
|
||
|
exports.orIfFileNotExist = orIfFileNotExist;
|
||
|
exports.NestedError = void 0;
|
||
|
|
||
|
function _chalk() {
|
||
|
const data = _interopRequireDefault(require("chalk"));
|
||
|
|
||
|
_chalk = function () {
|
||
|
return data;
|
||
|
};
|
||
|
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function printErrorAndExit(error) {
|
||
|
console.error(_chalk().default.red((error.stack || error).toString()));
|
||
|
process.exit(1);
|
||
|
} // you don't need to handle error in your task - it is passed only indicate status of promise
|
||
|
|
||
|
|
||
|
async function executeFinally(promise, task) {
|
||
|
let result = null;
|
||
|
|
||
|
try {
|
||
|
result = await promise;
|
||
|
} catch (originalError) {
|
||
|
try {
|
||
|
await task(true);
|
||
|
} catch (taskError) {
|
||
|
throw new NestedError([originalError, taskError]);
|
||
|
}
|
||
|
|
||
|
throw originalError;
|
||
|
}
|
||
|
|
||
|
await task(false);
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
class NestedError extends Error {
|
||
|
constructor(errors, message = "Compound error: ") {
|
||
|
let m = message;
|
||
|
let i = 1;
|
||
|
|
||
|
for (const error of errors) {
|
||
|
const prefix = `Error #${i++} `;
|
||
|
m += "\n\n" + prefix + "-".repeat(80) + "\n" + error.stack;
|
||
|
}
|
||
|
|
||
|
super(m);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
exports.NestedError = NestedError;
|
||
|
|
||
|
function orNullIfFileNotExist(promise) {
|
||
|
return orIfFileNotExist(promise, null);
|
||
|
}
|
||
|
|
||
|
function orIfFileNotExist(promise, fallbackValue) {
|
||
|
return promise.catch(e => {
|
||
|
if (e.code === "ENOENT" || e.code === "ENOTDIR") {
|
||
|
return fallbackValue;
|
||
|
}
|
||
|
|
||
|
throw e;
|
||
|
});
|
||
|
}
|
||
|
// __ts-babel@6.0.4
|
||
|
//# sourceMappingURL=promise.js.map
|