@atomist/automation-client
Version:
Atomist API for software low-level client
47 lines • 2.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const onCommand_1 = require("../../onCommand");
const defaultRepoLoader_1 = require("../common/defaultRepoLoader");
const repoFilter_1 = require("../common/repoFilter");
const repoUtils_1 = require("../common/repoUtils");
function defaultDetails(name) {
return {
tagRouter: exports.MessageClientTagRouter,
description: name,
};
}
exports.MessageClientTagRouter = (tags, params, ctx) => ctx.messageClient.respond("TaggerTags: " + tags.tags.join());
/**
* Create a handle function that tags one or many repos, following AllReposByDefaultParameters
* @param tagger tagger function
* @param factory construction function
* @param {string} name
* @param {string} details object allowing customization beyond reasonable defaults
* @return {HandleCommand}
*/
function taggerHandler(tagger, factory, name, details = {}) {
const detailsToUse = Object.assign(Object.assign({}, defaultDetails(name)), details);
return onCommand_1.commandHandlerFrom(tagOneOrMany(tagger, name, detailsToUse), factory, name, detailsToUse.description, detailsToUse.intent, detailsToUse.tags);
}
exports.taggerHandler = taggerHandler;
/**
* If owner and repo are required, tag just one repo. Otherwise tag all repos
* in the present team
*/
function tagOneOrMany(tagger, name, details) {
return (ctx, parameters) => {
const repoFinder = parameters.targets.repoRef ?
() => Promise.resolve([parameters.targets.repoRef]) :
details.repoFinder;
return tagAll(ctx, parameters.targets.credentials, tagger, parameters, repoFinder, repoFilter_1.andFilter(parameters.targets.test, details.repoFilter), !!details.repoLoader ? details.repoLoader(parameters) : undefined)
.then((tags) => {
return Promise.all(tags
.filter(pr => tags.length > 0)
.map(t => details.tagRouter(t, parameters, ctx)));
});
};
}
function tagAll(ctx, credentials, tagger, parameters, repoFinder, repoFilter = repoFilter_1.AllRepos, repoLoader = defaultRepoLoader_1.defaultRepoLoader(credentials)) {
return repoUtils_1.doWithAllRepos(ctx, credentials, p => tagger(p, ctx, parameters), parameters, repoFinder, repoFilter, repoLoader);
}
//# sourceMappingURL=taggerHandler.js.map