UNPKG

2.46 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const onCommand_1 = require("../../onCommand");
4const repoFilter_1 = require("../common/repoFilter");
5const issueRaisingReviewRouter_1 = require("./issueRaisingReviewRouter");
6const reviewAll_1 = require("./reviewAll");
7function defaultDetails(name) {
8 return {
9 description: name,
10 reviewRouter: issueRaisingReviewRouter_1.issueRaisingReviewRouter,
11 };
12}
13/**
14 * Create a handle function that reviews one or many repos, following AllReposByDefaultParameters
15 * @param reviewerFactory function returning a reviewer instance for the appropriate parameters
16 * @param factory construction function
17 * @param {string} name
18 * @param {string} details object allowing customization beyond reasonable defaults
19 * @return {HandleCommand}
20 */
21function reviewerHandler(reviewerFactory, factory, name, details = {}) {
22 const detailsToUse = Object.assign({}, defaultDetails(name), details);
23 return onCommand_1.commandHandlerFrom(handleReviewOneOrMany(reviewerFactory, name, detailsToUse), factory, name, detailsToUse.description, detailsToUse.intent, detailsToUse.tags);
24}
25exports.reviewerHandler = reviewerHandler;
26/**
27 * If owner and repo are required, review just one repo. Otherwise review all repos
28 * in the present team
29 */
30function handleReviewOneOrMany(reviewerFactory, name, details) {
31 return (ctx, parameters) => {
32 const repoFinder = parameters.targets.repoRef ?
33 () => Promise.resolve([parameters.targets.repoRef]) :
34 details.repoFinder;
35 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)
36 .then(projectReviews => {
37 return Promise.all(projectReviews
38 .filter(pr => pr.comments.length > 0)
39 .map(pr => {
40 return details.reviewRouter(pr, parameters, name, ctx);
41 }))
42 .then(persisted => ctx.messageClient.respond(`${name} reviewed ${projectReviews.length} repositories: Reported on ${persisted.length} with problems`)
43 .then(() => ({
44 projectsReviewed: projectReviews.length,
45 projectReviews,
46 })));
47 });
48 };
49}
50//# sourceMappingURL=reviewerToCommand.js.map
\No newline at end of file