1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const _ = require("lodash");
|
4 | const GraphQL = require("../../internal/graph/graphQL");
|
5 | const metadata_1 = require("./metadata");
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 | function metadataFromInstance(h) {
|
13 | let md = null;
|
14 | if (metadata_1.isEventHandlerMetadata(h)) {
|
15 | md = addName(h);
|
16 | }
|
17 | else if (metadata_1.isCommandHandlerMetadata(h)) {
|
18 | md = addName(h);
|
19 | }
|
20 | else {
|
21 |
|
22 |
|
23 | const knowsHowToMakeMyParams = h;
|
24 | if (!!knowsHowToMakeMyParams.freshParametersInstance) {
|
25 | const paramsInstance = knowsHowToMakeMyParams.freshParametersInstance();
|
26 | if (!paramsInstance.__kind) {
|
27 | paramsInstance.__kind = "parameters";
|
28 | }
|
29 | md = metadataFromDecorator(h, paramsInstance);
|
30 | }
|
31 | else {
|
32 | md = metadataFromDecorator(h, h);
|
33 | }
|
34 | }
|
35 |
|
36 | return _.cloneDeep(md);
|
37 | }
|
38 | exports.metadataFromInstance = metadataFromInstance;
|
39 | function addName(r) {
|
40 | if (!r.name) {
|
41 | r.name = r.constructor.name;
|
42 | }
|
43 | return r;
|
44 | }
|
45 | function metadataFromDecorator(h, params) {
|
46 | switch (params.__kind) {
|
47 | case "command-handler":
|
48 | return {
|
49 | name: params.__name,
|
50 | description: params.__description,
|
51 | tags: params.__tags ? params.__tags : [],
|
52 | intent: params.__intent ? params.__intent : [],
|
53 | auto_submit: params.__autoSubmit,
|
54 | parameters: parametersFromInstance(params),
|
55 | mapped_parameters: mappedParameterMetadataFromInstance(params),
|
56 | secrets: secretsMetadataFromInstance(params),
|
57 | values: valueMetadataFromInstance(params),
|
58 | };
|
59 | case "parameters":
|
60 | return {
|
61 | name: h.__name,
|
62 | description: h.__description,
|
63 | tags: h.__tags ? h.__tags : [],
|
64 | intent: h.__intent ? h.__intent : [],
|
65 | auto_submit: h.__autoSubmit,
|
66 | parameters: parametersFromInstance(params),
|
67 | mapped_parameters: mappedParameterMetadataFromInstance(params),
|
68 | secrets: secretsMetadataFromInstance(params),
|
69 | values: valueMetadataFromInstance(params),
|
70 | };
|
71 | case "event-handler":
|
72 |
|
73 | const subscription = GraphQL.inlineQuery(GraphQL.replaceOperationName(params.__subscription, h.__name));
|
74 | const subscriptionName = GraphQL.operationName(subscription);
|
75 | return {
|
76 | name: h.__name,
|
77 | description: h.__description,
|
78 | tags: h.__tags ? h.__tags : [],
|
79 | subscription,
|
80 | subscriptionName,
|
81 | secrets: secretsMetadataFromInstance(h),
|
82 | values: valueMetadataFromInstance(h),
|
83 | };
|
84 | default:
|
85 | throw new Error(`Unsupported automation '${params.constructor.name}'`);
|
86 | }
|
87 | }
|
88 | function parametersFromInstance(r, prefix = "") {
|
89 | const directParams = directParameters(r, prefix);
|
90 | const nestedParameters = _.flatten(Object.keys(r)
|
91 | .map(key => [key, r[key]])
|
92 | .filter(nestedFieldInfo => !!nestedFieldInfo[1])
|
93 | .filter(nestedFieldInfo => typeof nestedFieldInfo[1] === "object")
|
94 | .map(nestedFieldInfo => parametersFromInstance(nestedFieldInfo[1], prefix + nestedFieldInfo[0] + ".")));
|
95 | const allParameters = directParams.concat(nestedParameters);
|
96 | return allParameters.sort((p1, p2) => {
|
97 | const o1 = p1.order || Number.MAX_SAFE_INTEGER;
|
98 | const o2 = p2.order || Number.MAX_SAFE_INTEGER;
|
99 | return o1 - o2;
|
100 | });
|
101 | }
|
102 | function directParameters(r, prefix) {
|
103 | return !!r && r.__parameters ? r.__parameters.map(p => {
|
104 | const nameToUse = prefix + p.name;
|
105 | const parameter = {
|
106 | name: nameToUse,
|
107 | pattern: p.pattern ? p.pattern.source : "^.*$",
|
108 | description: p.description,
|
109 | required: p.required,
|
110 | group: p.group,
|
111 | displayable: p.displayable !== false,
|
112 | type: p.type,
|
113 | max_length: p.maxLength,
|
114 | min_length: p.minLength,
|
115 | valid_input: p.validInput,
|
116 | default_value: r[p.name],
|
117 | display_name: p.displayName ? p.displayName : nameToUse,
|
118 | order: p.order,
|
119 | control: p.control,
|
120 | };
|
121 |
|
122 | if (parameter.default_value) {
|
123 |
|
124 | parameter.default_value = parameter.default_value.toString();
|
125 | }
|
126 | return parameter;
|
127 | }) : [];
|
128 | }
|
129 | function secretsMetadataFromInstance(r, prefix = "") {
|
130 | const directSecrets = !!r && r.__secrets ? r.__secrets.map(s => ({ name: prefix + s.name, uri: s.uri })) : [];
|
131 | const nestedParameters = _.flatten(Object.keys(r)
|
132 | .map(key => [key, r[key]])
|
133 | .filter(nestedFieldInfo => !!nestedFieldInfo[1])
|
134 | .filter(nestedFieldInfo => typeof nestedFieldInfo[1] === "object")
|
135 | .map(nestedFieldInfo => secretsMetadataFromInstance(nestedFieldInfo[1], prefix + nestedFieldInfo[0] + ".")));
|
136 | return directSecrets.concat(nestedParameters);
|
137 | }
|
138 | function mappedParameterMetadataFromInstance(r, prefix = "") {
|
139 | const directMappedParams = !!r && r.__mappedParameters ? r.__mappedParameters.map(mp => ({
|
140 | name: prefix + mp.name,
|
141 | uri: mp.uri,
|
142 | required: mp.required !== false,
|
143 | })) : [];
|
144 | const nestedParameters = _.flatten(Object.keys(r)
|
145 | .map(key => [key, r[key]])
|
146 | .filter(nestedFieldInfo => !!nestedFieldInfo[1])
|
147 | .filter(nestedFieldInfo => typeof nestedFieldInfo[1] === "object")
|
148 | .map(nestedFieldInfo => mappedParameterMetadataFromInstance(nestedFieldInfo[1], prefix + nestedFieldInfo[0] + ".")));
|
149 | return directMappedParams.concat(nestedParameters);
|
150 | }
|
151 | function valueMetadataFromInstance(r, prefix = "") {
|
152 | const directValues = !!r && r.__values ? r.__values.map(mp => ({
|
153 | name: prefix + mp.name,
|
154 | path: mp.value.path,
|
155 | required: mp.value.required !== false,
|
156 | type: mp.value.type ? mp.value.type : "string",
|
157 | })) : [];
|
158 | const nestedValues = _.flatten(Object.keys(r)
|
159 | .map(key => [key, r[key]])
|
160 | .filter(nestedFieldInfo => !!nestedFieldInfo[1])
|
161 | .filter(nestedFieldInfo => typeof nestedFieldInfo[1] === "object")
|
162 | .map(nestedFieldInfo => valueMetadataFromInstance(nestedFieldInfo[1], prefix + nestedFieldInfo[0] + ".")));
|
163 | return directValues.concat(nestedValues);
|
164 | }
|
165 |
|
\ | No newline at end of file |