UNPKG

5.07 kBJavaScriptView Raw
1"use strict";
2var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3 return new (P || (P = Promise))(function (resolve, reject) {
4 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6 function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
7 step((generator = generator.apply(thisArg, _arguments || [])).next());
8 });
9};
10Object.defineProperty(exports, "__esModule", { value: true });
11const _ = require("lodash");
12const onCommand_1 = require("../../onCommand");
13const CachingDirectoryManager_1 = require("../../spi/clone/CachingDirectoryManager");
14const GraphClient_1 = require("../../spi/graph/GraphClient");
15const allReposInTeamRepoFinder_1 = require("../common/allReposInTeamRepoFinder");
16const defaultRepoLoader_1 = require("../common/defaultRepoLoader");
17const GitHubRepoRef_1 = require("../common/GitHubRepoRef");
18const generatorUtils_1 = require("./generatorUtils");
19const remoteGitProjectPersister_1 = require("./remoteGitProjectPersister");
20const addAtomistWebhook_1 = require("./support/addAtomistWebhook");
21function defaultDetails(name) {
22 return {
23 description: name,
24 repoFinder: allReposInTeamRepoFinder_1.allReposInTeam(),
25 repoLoader: (p) => defaultRepoLoader_1.defaultRepoLoader(p.target.credentials, CachingDirectoryManager_1.CachingDirectoryManager),
26 projectPersister: remoteGitProjectPersister_1.RemoteGitProjectPersister,
27 redirecter: () => undefined,
28 };
29}
30/**
31 * Create a generator function wrapping the given transform
32 *
33 * DEPRECATED: use the one in @atomist/sdm
34 *
35 * @param {AnyProjectEditor} editorFactory editor for the transformation
36 * @param factory construction function
37 * @param {string} name name of the generator
38 * @param {string} details object allowing customization beyond reasonable defaults
39 * @return {HandleCommand}
40 */
41function generatorHandler(editorFactory, factory, name, details = {}) {
42 const detailsToUse = Object.assign({}, defaultDetails(name), details);
43 return onCommand_1.commandHandlerFrom(handleGenerate(editorFactory, detailsToUse), factory, name, detailsToUse.description, detailsToUse.intent, detailsToUse.tags);
44}
45exports.generatorHandler = generatorHandler;
46function handleGenerate(editorFactory, details) {
47 return (ctx, parameters) => {
48 return handle(ctx, editorFactory, parameters, details);
49 };
50}
51function handle(ctx, editorFactory, params, details) {
52 return ctx.messageClient.respond(`Starting project generation for ${params.target.repoRef.owner}/${params.target.repoRef.repo}`)
53 .then(() => {
54 return generatorUtils_1.generate(startingPoint(params, ctx, details.repoLoader(params), details)
55 .then(p => {
56 return ctx.messageClient.respond(`Cloned seed project from \`${params.source.repoRef.owner}/${params.source.repoRef.repo}\``)
57 .then(() => p);
58 }), ctx, params.target.credentials, editorFactory(params, ctx), details.projectPersister, params.target.repoRef, params, details.afterAction)
59 .then(r => ctx.messageClient.respond(`Created and pushed new project`)
60 .then(() => r));
61 })
62 .then(r => {
63 if (GitHubRepoRef_1.isGitHubRepoRef(r.target.id)) {
64 return hasOrgWebhook(params.target.repoRef.owner, ctx)
65 .then(webhookInstalled => {
66 if (!webhookInstalled) {
67 return addAtomistWebhook_1.addAtomistWebhook(r.target, params);
68 }
69 else {
70 return Promise.resolve(r);
71 }
72 });
73 }
74 return Promise.resolve(r);
75 })
76 .then(r => ctx.messageClient.respond(`Successfully created new project`).then(() => r))
77 .then(r => ({
78 code: 0,
79 // Redirect to our local project page
80 redirect: details.redirecter(params.target.repoRef),
81 }));
82}
83const OrgWebhookQuery = `query OrgWebhook($owner: String!) {
84 Webhook(webhookType: organization) {
85 org(owner: $owner) @required {
86 owner
87 }
88 }
89}`;
90function hasOrgWebhook(owner, ctx) {
91 return __awaiter(this, void 0, void 0, function* () {
92 const orgHooks = yield ctx.graphClient.query({
93 query: OrgWebhookQuery,
94 variables: {
95 owner,
96 },
97 options: GraphClient_1.QueryNoCacheOptions,
98 });
99 const hookOwner = _.get(orgHooks, "Webhook[0].org.owner");
100 return hookOwner === owner;
101 });
102}
103/**
104 * Retrieve a seed
105 * @param {HandlerContext} ctx
106 * @param {RepoLoader} repoLoader
107 * @param {P} params
108 * @param details command details
109 * @return {Promise<Project>}
110 */
111function startingPoint(params, ctx, repoLoader, details) {
112 return repoLoader(params.source.repoRef);
113}
114//# sourceMappingURL=generatorToCommand.js.map
\No newline at end of file