@atomist/automation-client
Version:
Atomist API for software low-level client
43 lines • 1.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const logger_1 = require("../../util/logger");
function registerDisposable(ctx) {
return (callback, description) => {
if (ctx.__disposables) {
ctx.__disposables.push({ how: callback, what: description });
}
else {
const disposables = [{ how: callback, what: description }];
ctx.__disposables = disposables;
}
};
}
exports.registerDisposable = registerDisposable;
function dispose(ctx) {
return () => {
if (ctx.__disposables) {
function both(f1, f2) {
return {
how: () => f1.how()
.then(() => f2.how()
.catch(error => {
logger_1.logger.warn("Failed to release resource %s: %s", f2.what, error);
})),
what: f1.what + " and " + f2.what,
};
}
const disposeEverything = ctx.__disposables
.reduce(both, { how: () => Promise.resolve(), what: "inconceivable" });
return disposeEverything.how()
.then(result => {
delete ctx.__disposables;
return result;
});
}
else {
return Promise.resolve();
}
};
}
exports.dispose = dispose;
//# sourceMappingURL=disposable.js.map