UNPKG

@atomist/automation-client

Version:

Atomist API for software low-level client

50 lines 2.48 kB
"use strict"; 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