1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 | Object.defineProperty(exports, "__esModule", { value: true });
|
18 | exports.commandRequestParameterPromptFactory = exports.AtomistContinuationMimeType = exports.NoParameterPrompt = void 0;
|
19 | const _ = require("lodash");
|
20 | const handlerRegistrations_1 = require("../../api-helper/machine/handlerRegistrations");
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 | const NoParameterPrompt = async () => ({});
|
27 | exports.NoParameterPrompt = NoParameterPrompt;
|
28 | exports.AtomistContinuationMimeType = "application/x-atomist-continuation+json";
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 | function commandRequestParameterPromptFactory(ctx) {
|
35 | return async (parameters, options = {}) => {
|
36 | const trigger = ctx.trigger;
|
37 | const existingParameters = trigger.parameters;
|
38 | const newParameters = _.cloneDeep(parameters);
|
39 |
|
40 | let requiredMissing = false;
|
41 | const params = {};
|
42 | for (const parameter in parameters) {
|
43 | if (parameters.hasOwnProperty(parameter)) {
|
44 | const existingParameter = existingParameters.find(p => p.name === parameter);
|
45 | if (!existingParameter) {
|
46 |
|
47 | if (newParameters[parameter].required || newParameters[parameter].required === undefined) {
|
48 | requiredMissing = true;
|
49 | }
|
50 | }
|
51 | else {
|
52 |
|
53 | const parameterDefinition = newParameters[parameter];
|
54 | const value = existingParameter.value;
|
55 |
|
56 | if (parameterDefinition.force) {
|
57 | trigger.parameters = trigger.parameters.filter(p => p.name !== parameter);
|
58 | requiredMissing = true;
|
59 | continue;
|
60 | }
|
61 |
|
62 | if (parameterDefinition.pattern && !!value && !value.match(parameterDefinition.pattern)) {
|
63 | requiredMissing = true;
|
64 | continue;
|
65 | }
|
66 |
|
67 | const minLength = parameterDefinition.minLength || parameterDefinition.min_length;
|
68 | if (minLength !== undefined && !!value && value.length < minLength) {
|
69 | requiredMissing = true;
|
70 | continue;
|
71 | }
|
72 |
|
73 | const maxLength = parameterDefinition.maxLength || parameterDefinition.max_length;
|
74 | if (maxLength !== undefined && !!value && value.length > maxLength) {
|
75 | requiredMissing = true;
|
76 | continue;
|
77 | }
|
78 | params[parameter] = existingParameter.value;
|
79 | delete newParameters[parameter];
|
80 | }
|
81 | }
|
82 | }
|
83 |
|
84 | if (!requiredMissing) {
|
85 | return params;
|
86 | }
|
87 |
|
88 | let threadTs;
|
89 | if (options.thread === true && !!trigger.source) {
|
90 | threadTs = _.get(trigger.source, "slack.message.ts");
|
91 | }
|
92 | else if (typeof options.thread === "string") {
|
93 | threadTs = options.thread;
|
94 | }
|
95 | const destination = _.cloneDeep(trigger.source);
|
96 | _.set(destination, "slack.thread_ts", threadTs);
|
97 |
|
98 |
|
99 | const response = {
|
100 | api_version: "1",
|
101 | correlation_id: trigger.correlation_id,
|
102 | team: trigger.team,
|
103 | command: trigger.command,
|
104 | source: trigger.source,
|
105 | destinations: [destination],
|
106 | parameters: [...(trigger.parameters || []), ...(trigger.mapped_parameters || [])],
|
107 | auto_submit: !!options.autoSubmit ? options.autoSubmit : undefined,
|
108 | question: !!options.parameterStyle ? options.parameterStyle.toString() : undefined,
|
109 | parameter_specs: _.map(newParameters, (v, k) => ({
|
110 | name: k,
|
111 | description: v.description,
|
112 | required: v.required !== undefined ? v.required : true,
|
113 | pattern: v.pattern ? v.pattern.source : undefined,
|
114 | valid_input: v.validInput,
|
115 | max_length: v.maxLength,
|
116 | min_length: v.minLength,
|
117 | display_name: v.displayName,
|
118 | default_value: v.defaultValue,
|
119 | type: v.type,
|
120 | })),
|
121 | content_type: exports.AtomistContinuationMimeType,
|
122 | };
|
123 | await ctx.messageClient.respond(response);
|
124 | throw new handlerRegistrations_1.CommandListenerExecutionInterruptError(`Prompting for new parameters: ${_.map(newParameters, (v, k) => k).join(", ")}`);
|
125 | };
|
126 | }
|
127 | exports.commandRequestParameterPromptFactory = commandRequestParameterPromptFactory;
|
128 |
|
129 |
|
\ | No newline at end of file |