@atomist/automation-client
Version:
Atomist API for software low-level client
50 lines • 2.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const onCommand_1 = require("../../onCommand");
const repoFilter_1 = require("../common/repoFilter");
const issueRaisingReviewRouter_1 = require("./issueRaisingReviewRouter");
const reviewAll_1 = require("./reviewAll");
function defaultDetails(name) {
return {
description: name,
reviewRouter: issueRaisingReviewRouter_1.issueRaisingReviewRouter,
};
}
/**
* Create a handle function that reviews one or many repos, following AllReposByDefaultParameters
* @param reviewerFactory function returning a reviewer instance for the appropriate parameters
* @param factory construction function
* @param {string} name
* @param {string} details object allowing customization beyond reasonable defaults
* @return {HandleCommand}
*/
function reviewerHandler(reviewerFactory, factory, name, details = {}) {
const detailsToUse = Object.assign(Object.assign({}, defaultDetails(name)), details);
return onCommand_1.commandHandlerFrom(handleReviewOneOrMany(reviewerFactory, name, detailsToUse), factory, name, detailsToUse.description, detailsToUse.intent, detailsToUse.tags);
}
exports.reviewerHandler = reviewerHandler;
/**
* If owner and repo are required, review just one repo. Otherwise review all repos
* in the present team
*/
function handleReviewOneOrMany(reviewerFactory, name, details) {
return (ctx, parameters) => {
const repoFinder = parameters.targets.repoRef ?
() => Promise.resolve([parameters.targets.repoRef]) :
details.repoFinder;
return reviewAll_1.reviewAll(ctx, parameters.targets.credentials, reviewerFactory(parameters), parameters, repoFinder, repoFilter_1.andFilter(parameters.targets.test, details.repoFilter), !!details.repoLoader ? details.repoLoader(parameters) : undefined)
.then(projectReviews => {
return Promise.all(projectReviews
.filter(pr => pr.comments.length > 0)
.map(pr => {
return details.reviewRouter(pr, parameters, name, ctx);
}))
.then(persisted => ctx.messageClient.respond(`${name} reviewed ${projectReviews.length} repositories: Reported on ${persisted.length} with problems`)
.then(() => ({
projectsReviewed: projectReviews.length,
projectReviews,
})));
});
};
}
//# sourceMappingURL=reviewerToCommand.js.map