UNPKG

2.45 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const onCommand_1 = require("../../onCommand");
4const allReposInTeamRepoFinder_1 = require("../common/allReposInTeamRepoFinder");
5const defaultRepoLoader_1 = require("../common/defaultRepoLoader");
6const repoFilter_1 = require("../common/repoFilter");
7const repoUtils_1 = require("../common/repoUtils");
8function defaultDetails(name) {
9 return {
10 tagRouter: exports.MessageClientTagRouter,
11 description: name,
12 };
13}
14exports.MessageClientTagRouter = (tags, params, ctx) => ctx.messageClient.respond("Tags: " + tags.tags.join());
15/**
16 * Create a handle function that tags one or many repos, following AllReposByDefaultParameters
17 * @param tagger tagger function
18 * @param factory construction function
19 * @param {string} name
20 * @param {string} details object allowing customization beyond reasonable defaults
21 * @return {HandleCommand}
22 */
23function taggerHandler(tagger, factory, name, details = {}) {
24 const detailsToUse = Object.assign({}, defaultDetails(name), details);
25 return onCommand_1.commandHandlerFrom(tagOneOrMany(tagger, name, detailsToUse), factory, name, detailsToUse.description, detailsToUse.intent, detailsToUse.tags);
26}
27exports.taggerHandler = taggerHandler;
28/**
29 * If owner and repo are required, tag just one repo. Otherwise tag all repos
30 * in the present team
31 */
32function tagOneOrMany(tagger, name, details) {
33 return (ctx, parameters) => {
34 const repoFinder = parameters.targets.repoRef ?
35 () => Promise.resolve([parameters.targets.repoRef]) :
36 details.repoFinder;
37 return tagAll(ctx, parameters.targets.credentials, tagger, parameters, repoFinder, repoFilter_1.andFilter(parameters.targets.test, details.repoFilter), !!details.repoLoader ? details.repoLoader(parameters) : undefined)
38 .then((tags) => {
39 return Promise.all(tags
40 .filter(pr => tags.length > 0)
41 .map(t => details.tagRouter(t, parameters, ctx)));
42 });
43 };
44}
45function tagAll(ctx, credentials, tagger, parameters, repoFinder = allReposInTeamRepoFinder_1.allReposInTeam(), repoFilter = repoFilter_1.AllRepos, repoLoader = defaultRepoLoader_1.defaultRepoLoader(credentials)) {
46 return repoUtils_1.doWithAllRepos(ctx, credentials, p => tagger(p, ctx, parameters), parameters, repoFinder, repoFilter, repoLoader);
47}
48//# sourceMappingURL=taggerHandler.js.map
\No newline at end of file