@xuda.io/runtime-bundle 1.0.1183 → 1.0.1185
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -28,872 +28,563 @@ export const init = function (app_obj_in, progs_obj_in = {}, _in, _hide_not_in_u
|
|
|
28
28
|
|
|
29
29
|
export const check = function (doc) {
|
|
30
30
|
var ret = [];
|
|
31
|
+
var dependency_progs = [];
|
|
31
32
|
|
|
32
|
-
//
|
|
33
|
+
// Helper function to add validation errors and continue
|
|
34
|
+
const addValidationError = (code, data, type = 'E', category = 'document', ref = null, id = null, not_in_use = false) => {
|
|
35
|
+
const error = {
|
|
36
|
+
code,
|
|
37
|
+
data,
|
|
38
|
+
type,
|
|
39
|
+
category,
|
|
40
|
+
};
|
|
33
41
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
42
|
+
if (ref) error.ref = ref;
|
|
43
|
+
if (id) error.id = id;
|
|
44
|
+
if (not_in_use) error.not_in_use = not_in_use;
|
|
37
45
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
if (_.isEmpty(doc)) {
|
|
41
|
-
throw new Error('', {
|
|
42
|
-
cause: {
|
|
43
|
-
code: 'CHK_MSG_OBJ_GEN_110',
|
|
44
|
-
data: `doc in empty`,
|
|
45
|
-
},
|
|
46
|
-
});
|
|
47
|
-
}
|
|
46
|
+
ret.push(error);
|
|
47
|
+
};
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
49
|
+
// Early validation checks
|
|
50
|
+
if (_.isEmpty(doc)) {
|
|
51
|
+
addValidationError('CHK_MSG_OBJ_GEN_110', 'doc in empty');
|
|
52
|
+
return {
|
|
53
|
+
check_errors: ret,
|
|
54
|
+
check_warnings: [],
|
|
55
|
+
doc,
|
|
56
|
+
dependency_progs: [],
|
|
57
|
+
};
|
|
58
|
+
}
|
|
57
59
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
for (let val of deployments) {
|
|
75
|
-
if (val.deploy_data?.prog_id === doc._id) {
|
|
76
|
-
if (!doc.studio_meta.used_by_deployment_ids) {
|
|
77
|
-
doc.studio_meta.used_by_deployment_ids = [];
|
|
78
|
-
}
|
|
79
|
-
doc.studio_meta.used_by_deployment_ids.push(val._id);
|
|
60
|
+
// Run structure validation first
|
|
61
|
+
ret = check_structure(doc);
|
|
62
|
+
|
|
63
|
+
// Only continue if structure validation passed
|
|
64
|
+
if (!ret?.length) {
|
|
65
|
+
doc.studio_meta.not_in_use = false;
|
|
66
|
+
|
|
67
|
+
// Process non-folder items
|
|
68
|
+
if (doc.properties.menuType !== 'folder') {
|
|
69
|
+
if (doc.properties.menuType !== 'table') {
|
|
70
|
+
// Handle deployment dependencies for server environment
|
|
71
|
+
if (is_server) {
|
|
72
|
+
for (let val of deployments) {
|
|
73
|
+
if (val.deploy_data?.prog_id === doc._id) {
|
|
74
|
+
if (!doc.studio_meta.used_by_deployment_ids) {
|
|
75
|
+
doc.studio_meta.used_by_deployment_ids = [];
|
|
80
76
|
}
|
|
77
|
+
doc.studio_meta.used_by_deployment_ids.push(val._id);
|
|
81
78
|
}
|
|
82
79
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
};
|
|
95
|
-
if (!hide_not_in_use_check) {
|
|
96
|
-
const ret_prog_in_use = find_trigger_property_value_in_progs(doc, program_ref_triggers_arr, 'prog', doc._id);
|
|
97
|
-
|
|
98
|
-
if (!ret_prog_in_use || !check_programs_are_active(ret_prog_in_use)) {
|
|
99
|
-
const ret_panel_prog_in_use = find_panel_prog_in_progs(doc, doc._id);
|
|
100
|
-
|
|
101
|
-
if (!ret_panel_prog_in_use || !check_programs_are_active(ret_panel_prog_in_use)) {
|
|
102
|
-
const ret_fieldValue_in_use = find_prog_in_fieldset_fieldValue_progs(doc, doc._id);
|
|
103
|
-
|
|
104
|
-
if (!ret_fieldValue_in_use || !check_programs_are_active(ret_fieldValue_in_use)) {
|
|
105
|
-
doc.studio_meta.not_in_use = true;
|
|
106
|
-
|
|
107
|
-
// search in implementations
|
|
108
|
-
// if (is_server) {
|
|
109
|
-
// for (let val of deployments) {
|
|
110
|
-
// if (val.deploy_data?.prog_id === doc._id) {
|
|
111
|
-
// debugger;
|
|
112
|
-
// doc.studio_meta.used_by_deployment_id = val._id;
|
|
113
|
-
// break;
|
|
114
|
-
// }
|
|
115
|
-
// }
|
|
116
|
-
// }
|
|
117
|
-
// if (!doc.studio_meta.used_by_deployment_id) {
|
|
118
|
-
// // ret.push({
|
|
119
|
-
// // code: "CHK_MSG_GEN_022",
|
|
120
|
-
// // data: `program not in use`,
|
|
121
|
-
// // type: "W",
|
|
122
|
-
// // category: `prog`,
|
|
123
|
-
// // ref: doc._id,
|
|
124
|
-
// // not_in_use: true,
|
|
125
|
-
// // });
|
|
126
|
-
|
|
127
|
-
// doc.studio_meta.not_in_use = true;
|
|
128
|
-
// }
|
|
129
|
-
}
|
|
130
|
-
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Check if program is in use
|
|
83
|
+
if (!doc.studio_meta.used_by_deployment_id) {
|
|
84
|
+
const check_programs_are_active = function (arr) {
|
|
85
|
+
if (!arr.length) return false;
|
|
86
|
+
var count = 0;
|
|
87
|
+
for (let val of arr) {
|
|
88
|
+
if (progs_obj?.[val.prog_id]?.studio_meta?.not_in_use) {
|
|
89
|
+
count++;
|
|
90
|
+
break;
|
|
131
91
|
}
|
|
132
92
|
}
|
|
133
|
-
|
|
93
|
+
return count !== arr.length;
|
|
94
|
+
};
|
|
134
95
|
|
|
135
|
-
|
|
136
|
-
|
|
96
|
+
if (!hide_not_in_use_check) {
|
|
97
|
+
const ret_prog_in_use = find_trigger_property_value_in_progs(doc, program_ref_triggers_arr, 'prog', doc._id);
|
|
137
98
|
|
|
138
|
-
|
|
139
|
-
|
|
99
|
+
if (!ret_prog_in_use || !check_programs_are_active(ret_prog_in_use)) {
|
|
100
|
+
const ret_panel_prog_in_use = find_panel_prog_in_progs(doc, doc._id);
|
|
140
101
|
|
|
141
|
-
|
|
102
|
+
if (!ret_panel_prog_in_use || !check_programs_are_active(ret_panel_prog_in_use)) {
|
|
103
|
+
const ret_fieldValue_in_use = find_prog_in_fieldset_fieldValue_progs(doc, doc._id);
|
|
142
104
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
if (!find_table_in_progs(doc, doc._id)) {
|
|
148
|
-
doc.studio_meta.not_in_use = true;
|
|
149
|
-
// ret.push({
|
|
150
|
-
// code: "CHK_MSG_GEN_024",
|
|
151
|
-
// data: `table not in use`,
|
|
152
|
-
// type: "W",
|
|
153
|
-
// category: `table`,
|
|
154
|
-
// ref: doc._id,
|
|
155
|
-
// not_in_use: true,
|
|
156
|
-
// });
|
|
105
|
+
if (!ret_fieldValue_in_use || !check_programs_are_active(ret_fieldValue_in_use)) {
|
|
106
|
+
doc.studio_meta.not_in_use = true;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
157
109
|
}
|
|
158
110
|
}
|
|
159
111
|
}
|
|
160
|
-
}
|
|
161
|
-
// }
|
|
162
112
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
// cause: {
|
|
166
|
-
// code: "CHK_MSG_OBJ_GEN_040",
|
|
167
|
-
// data: `properties.menuName is empty`,
|
|
168
|
-
// },
|
|
169
|
-
// });
|
|
170
|
-
// }
|
|
113
|
+
// Add program event validation results
|
|
114
|
+
ret = [...ret, ...check_prog_events(doc)];
|
|
171
115
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
116
|
+
// Find program dependencies
|
|
117
|
+
dependency_progs = find_trigger_property_value_in_progs(doc, program_ref_triggers_arr, 'prog', null, true) || [];
|
|
118
|
+
dependency_progs = [...dependency_progs, ...(find_panel_prog_in_progs(doc, null, true) || [])];
|
|
119
|
+
} else {
|
|
120
|
+
// Handle table usage checking
|
|
121
|
+
if (!hide_not_in_use_check) {
|
|
122
|
+
if (!find_table_in_progs(doc, doc._id)) {
|
|
123
|
+
doc.studio_meta.not_in_use = true;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
176
128
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
129
|
+
// Run menu type specific validation
|
|
130
|
+
switch (doc.properties.menuType) {
|
|
131
|
+
case 'globals':
|
|
132
|
+
ret = [...ret, ...check_globals(doc)];
|
|
133
|
+
break;
|
|
180
134
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
135
|
+
case 'table':
|
|
136
|
+
ret = [...ret, ...check_table(doc)];
|
|
137
|
+
break;
|
|
184
138
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
139
|
+
case 'component':
|
|
140
|
+
ret = [...ret, ...check_component(doc)];
|
|
141
|
+
break;
|
|
188
142
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
143
|
+
case 'javascript':
|
|
144
|
+
ret = [...ret, ...check_javascript(doc)];
|
|
145
|
+
break;
|
|
192
146
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
147
|
+
case 'get_data':
|
|
148
|
+
ret = [...ret, ...check_get_data(doc)];
|
|
149
|
+
break;
|
|
196
150
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
151
|
+
case 'set_data':
|
|
152
|
+
ret = [...ret, ...check_set_data(doc)];
|
|
153
|
+
break;
|
|
200
154
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
155
|
+
case 'batch':
|
|
156
|
+
ret = [...ret, ...check_batch(doc)];
|
|
157
|
+
break;
|
|
204
158
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
159
|
+
case 'api':
|
|
160
|
+
ret = [...ret, ...check_api(doc)];
|
|
161
|
+
break;
|
|
208
162
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
163
|
+
case 'alert':
|
|
164
|
+
ret = [...ret, ...check_alert(doc)];
|
|
165
|
+
break;
|
|
212
166
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
167
|
+
case 'route':
|
|
168
|
+
ret = [...ret, ...check_route(doc)];
|
|
169
|
+
break;
|
|
216
170
|
|
|
217
|
-
|
|
218
|
-
|
|
171
|
+
case 'folder':
|
|
172
|
+
// No additional validation for folders
|
|
173
|
+
break;
|
|
219
174
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
data: `invalid ${doc.properties.menuType} properties.menuType`,
|
|
224
|
-
type: 'E',
|
|
225
|
-
category: `prog`,
|
|
226
|
-
ref: doc._id,
|
|
227
|
-
id: `${doc._id}`,
|
|
228
|
-
});
|
|
229
|
-
break;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
var final_ret = {
|
|
233
|
-
check_errors: [],
|
|
234
|
-
check_warnings: [],
|
|
235
|
-
doc,
|
|
236
|
-
dependency_progs,
|
|
237
|
-
};
|
|
238
|
-
for (let [key, val] of Object.entries(ret)) {
|
|
239
|
-
if (val.type === 'E') {
|
|
240
|
-
final_ret.check_errors.push(val);
|
|
241
|
-
}
|
|
242
|
-
if (val.type === 'W') {
|
|
243
|
-
final_ret.check_warnings.push(val);
|
|
244
|
-
}
|
|
175
|
+
default:
|
|
176
|
+
addValidationError('CHK_MSG_GEN_050', `invalid ${doc.properties.menuType} properties.menuType`, 'E', 'prog', doc._id, doc._id);
|
|
177
|
+
break;
|
|
245
178
|
}
|
|
179
|
+
}
|
|
246
180
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
type: 'E',
|
|
255
|
-
});
|
|
256
|
-
} else {
|
|
257
|
-
console.error(err);
|
|
258
|
-
debugger;
|
|
259
|
-
}
|
|
181
|
+
// Separate errors and warnings
|
|
182
|
+
var final_ret = {
|
|
183
|
+
check_errors: [],
|
|
184
|
+
check_warnings: [],
|
|
185
|
+
doc,
|
|
186
|
+
dependency_progs,
|
|
187
|
+
};
|
|
260
188
|
|
|
261
|
-
|
|
189
|
+
for (let [key, val] of Object.entries(ret)) {
|
|
190
|
+
if (val.type === 'E') {
|
|
191
|
+
final_ret.check_errors.push(val);
|
|
192
|
+
}
|
|
193
|
+
if (val.type === 'W') {
|
|
194
|
+
final_ret.check_warnings.push(val);
|
|
195
|
+
}
|
|
262
196
|
}
|
|
197
|
+
|
|
198
|
+
return final_ret;
|
|
263
199
|
};
|
|
264
200
|
|
|
265
201
|
export const check_structure = function (doc) {
|
|
266
202
|
var ret = [];
|
|
267
203
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
}
|
|
204
|
+
// Helper function to add validation errors and continue
|
|
205
|
+
const addValidationError = (code, data) => {
|
|
206
|
+
ret.push({
|
|
207
|
+
code,
|
|
208
|
+
data,
|
|
209
|
+
type: 'E',
|
|
210
|
+
category: 'document',
|
|
211
|
+
structure_error: true,
|
|
212
|
+
});
|
|
213
|
+
};
|
|
277
214
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
},
|
|
284
|
-
});
|
|
285
|
-
}
|
|
215
|
+
// Early exit conditions that prevent further validation
|
|
216
|
+
if (!app_obj || !_.isObject(app_obj) || _.isEmpty(app_obj)) {
|
|
217
|
+
addValidationError('CHK_MSG_OBJ_GEN_002', 'invalid app_obj');
|
|
218
|
+
return ret;
|
|
219
|
+
}
|
|
286
220
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
cause: {
|
|
292
|
-
code: 'CHK_MSG_OBJ_GEN_005',
|
|
293
|
-
data: `error parsing JSON doc`,
|
|
294
|
-
},
|
|
295
|
-
});
|
|
296
|
-
}
|
|
221
|
+
if (!doc || !_.isObject(doc) || _.isEmpty(doc)) {
|
|
222
|
+
addValidationError('CHK_MSG_OBJ_GEN_004', 'doc is not a object');
|
|
223
|
+
return ret;
|
|
224
|
+
}
|
|
297
225
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
});
|
|
305
|
-
}
|
|
226
|
+
try {
|
|
227
|
+
JSON5.parse(JSON.stringify(doc));
|
|
228
|
+
} catch (err) {
|
|
229
|
+
addValidationError('CHK_MSG_OBJ_GEN_005', 'error parsing JSON doc');
|
|
230
|
+
return ret;
|
|
231
|
+
}
|
|
306
232
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
data: `invalid _id value (e.g: 5b1_tbl_a953848a71c5)`,
|
|
312
|
-
},
|
|
313
|
-
});
|
|
314
|
-
}
|
|
233
|
+
// Continue validation even with errors
|
|
234
|
+
if (!doc._id) {
|
|
235
|
+
addValidationError('CHK_MSG_OBJ_GEN_050', 'missing _id value');
|
|
236
|
+
}
|
|
315
237
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
cause: {
|
|
320
|
-
code: 'CHK_MSG_OBJ_GEN_052',
|
|
321
|
-
data: `duplicate doc _id`,
|
|
322
|
-
},
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
////////// properties ////////////////
|
|
238
|
+
if (doc?.studio_meta?.source === 'studio ai' && doc?.properties?.menuType && doc._id && doc._id.substr(0, 7) !== new_node_id(doc.properties.menuType, doc.app_id).substr(0, 7)) {
|
|
239
|
+
addValidationError('CHK_MSG_OBJ_GEN_051', 'invalid _id value (e.g: 5b1_tbl_a953848a71c5)');
|
|
240
|
+
}
|
|
327
241
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
code: 'CHK_MSG_OBJ_GEN_100',
|
|
332
|
-
data: `missing properties object`,
|
|
333
|
-
},
|
|
334
|
-
});
|
|
242
|
+
if (!doc._rev) {
|
|
243
|
+
if (progs_obj?.[doc._id]) {
|
|
244
|
+
addValidationError('CHK_MSG_OBJ_GEN_052', 'duplicate doc _id');
|
|
335
245
|
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
////////// properties ////////////////
|
|
249
|
+
|
|
250
|
+
if (!doc.properties) {
|
|
251
|
+
addValidationError('CHK_MSG_OBJ_GEN_100', 'missing properties object');
|
|
252
|
+
} else {
|
|
336
253
|
if (!_.isObject(doc.properties)) {
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
254
|
+
addValidationError('CHK_MSG_OBJ_GEN_102', 'invalid properties object');
|
|
255
|
+
} else {
|
|
256
|
+
if (!doc.properties.menuType) {
|
|
257
|
+
addValidationError('CHK_MSG_OBJ_GEN_104', 'missing properties.menuType');
|
|
258
|
+
} else if (!ALL_MENU_TYPE.includes(doc.properties.menuType)) {
|
|
259
|
+
addValidationError('CHK_MSG_OBJ_GEN_105', `invalid properties.menuType (valid values: ${ALL_MENU_TYPE.join(',')})`);
|
|
260
|
+
}
|
|
344
261
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
code: 'CHK_MSG_OBJ_GEN_104',
|
|
349
|
-
data: `missing properties.menuType`,
|
|
350
|
-
},
|
|
351
|
-
});
|
|
262
|
+
if (!doc.properties.menuName) {
|
|
263
|
+
addValidationError('CHK_MSG_OBJ_GEN_106', 'missing properties.menuName');
|
|
264
|
+
}
|
|
352
265
|
}
|
|
266
|
+
}
|
|
353
267
|
|
|
354
|
-
|
|
355
|
-
throw new Error('', {
|
|
356
|
-
cause: {
|
|
357
|
-
code: 'CHK_MSG_OBJ_GEN_105',
|
|
358
|
-
data: `invalid properties.menuType (valid values: ${ALL_MENU_TYPE.join(',')})`,
|
|
359
|
-
},
|
|
360
|
-
});
|
|
361
|
-
}
|
|
268
|
+
////////// studio_meta ////////////////
|
|
362
269
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
code: 'CHK_MSG_OBJ_GEN_106',
|
|
367
|
-
data: `missing properties.menuName`,
|
|
368
|
-
},
|
|
369
|
-
});
|
|
370
|
-
}
|
|
371
|
-
////////// studio_meta ////////////////
|
|
372
|
-
if (!doc.studio_meta) {
|
|
373
|
-
throw new Error('', {
|
|
374
|
-
cause: {
|
|
375
|
-
code: 'CHK_MSG_OBJ_GEN_112',
|
|
376
|
-
data: `missing studio_meta property`,
|
|
377
|
-
},
|
|
378
|
-
});
|
|
379
|
-
}
|
|
270
|
+
if (!doc.studio_meta) {
|
|
271
|
+
addValidationError('CHK_MSG_OBJ_GEN_112', 'missing studio_meta property');
|
|
272
|
+
} else {
|
|
380
273
|
if (!_.isObject(doc.studio_meta)) {
|
|
381
|
-
|
|
382
|
-
cause: {
|
|
383
|
-
code: 'CHK_MSG_OBJ_GEN_112',
|
|
384
|
-
data: `invalid studio_meta object`,
|
|
385
|
-
},
|
|
386
|
-
});
|
|
387
|
-
}
|
|
388
|
-
if (!doc.studio_meta.parentId) {
|
|
389
|
-
throw new Error('', {
|
|
390
|
-
cause: {
|
|
391
|
-
code: 'CHK_MSG_OBJ_GEN_114',
|
|
392
|
-
data: `missing studio_meta.parentId value`,
|
|
393
|
-
},
|
|
394
|
-
});
|
|
274
|
+
addValidationError('CHK_MSG_OBJ_GEN_112', 'invalid studio_meta object');
|
|
395
275
|
} else {
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
});
|
|
276
|
+
if (!doc.studio_meta.parentId) {
|
|
277
|
+
addValidationError('CHK_MSG_OBJ_GEN_114', 'missing studio_meta.parentId value');
|
|
278
|
+
} else {
|
|
279
|
+
let menuType = doc?.properties?.menuType === 'globals' ? 'globals' : doc?.properties?.menuType === 'table' ? 'database' : doc?.properties?.menuType === 'route' ? 'routes' : 'programs';
|
|
280
|
+
if (doc.studio_meta.parentId !== menuType && !progs_obj[doc.studio_meta.parentId]) {
|
|
281
|
+
addValidationError('CHK_MSG_OBJ_GEN_116', 'invalid studio_meta.parentId value');
|
|
282
|
+
}
|
|
404
283
|
}
|
|
405
284
|
}
|
|
285
|
+
}
|
|
406
286
|
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
287
|
+
const check_progFields = function () {
|
|
288
|
+
if (!doc.progFields) return;
|
|
289
|
+
|
|
290
|
+
var ids = [];
|
|
291
|
+
if (!_.isArray(doc.progFields)) {
|
|
292
|
+
addValidationError('CHK_MSG_OBJ_GEN_402', 'invalid progFields Array property');
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
for (let val of doc.progFields) {
|
|
297
|
+
if (!_.isObject(val)) {
|
|
298
|
+
addValidationError('CHK_MSG_OBJ_GEN_404', 'invalid progFields object property');
|
|
299
|
+
continue;
|
|
417
300
|
}
|
|
418
301
|
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
code: 'CHK_MSG_OBJ_GEN_404',
|
|
424
|
-
data: `invalid progFields object property`,
|
|
425
|
-
},
|
|
426
|
-
});
|
|
427
|
-
}
|
|
428
|
-
if (!val.id) {
|
|
429
|
-
throw new Error('', {
|
|
430
|
-
cause: {
|
|
431
|
-
code: 'CHK_MSG_OBJ_GEN_406',
|
|
432
|
-
data: `missing progFields.id property`,
|
|
433
|
-
},
|
|
434
|
-
});
|
|
435
|
-
}
|
|
436
|
-
if (ids.includes(val.id)) {
|
|
437
|
-
throw new Error('', {
|
|
438
|
-
cause: {
|
|
439
|
-
code: 'CHK_MSG_OBJ_GEN_408',
|
|
440
|
-
data: `${val.id} id must be unique in progFields property`,
|
|
441
|
-
},
|
|
442
|
-
});
|
|
443
|
-
}
|
|
444
|
-
ids.push(val.id);
|
|
445
|
-
if (!_.isObject(val.data)) {
|
|
446
|
-
throw new Error('', {
|
|
447
|
-
cause: {
|
|
448
|
-
code: 'CHK_MSG_OBJ_GEN_410',
|
|
449
|
-
data: `invalid progFields.data object property`,
|
|
450
|
-
},
|
|
451
|
-
});
|
|
452
|
-
}
|
|
302
|
+
if (!val.id) {
|
|
303
|
+
addValidationError('CHK_MSG_OBJ_GEN_406', 'missing progFields.id property');
|
|
304
|
+
continue;
|
|
305
|
+
}
|
|
453
306
|
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
},
|
|
460
|
-
});
|
|
461
|
-
}
|
|
462
|
-
if (!val.data.type) {
|
|
463
|
-
throw new Error('', {
|
|
464
|
-
cause: {
|
|
465
|
-
code: 'CHK_MSG_OBJ_GEN_414',
|
|
466
|
-
data: `invalid progFields.data.type property`,
|
|
467
|
-
},
|
|
468
|
-
});
|
|
469
|
-
}
|
|
470
|
-
if (!_.isObject(val.props)) {
|
|
471
|
-
throw new Error('', {
|
|
472
|
-
cause: {
|
|
473
|
-
code: 'CHK_MSG_OBJ_GEN_416',
|
|
474
|
-
data: `invalid progFields.props Object property`,
|
|
475
|
-
},
|
|
476
|
-
});
|
|
477
|
-
}
|
|
478
|
-
if (!val.props.fieldType) {
|
|
479
|
-
throw new Error('', {
|
|
480
|
-
cause: {
|
|
481
|
-
code: 'CHK_MSG_OBJ_GEN_418',
|
|
482
|
-
data: `invalid progFields.props.fieldType property`,
|
|
483
|
-
},
|
|
484
|
-
});
|
|
485
|
-
}
|
|
486
|
-
if (!_.isObject(val.props.propExpressions)) {
|
|
487
|
-
throw new Error('', {
|
|
488
|
-
cause: {
|
|
489
|
-
code: 'CHK_MSG_OBJ_GEN_4120',
|
|
490
|
-
data: `invalid val.props.propExpressions Object property`,
|
|
491
|
-
},
|
|
492
|
-
});
|
|
493
|
-
}
|
|
307
|
+
if (ids.includes(val.id)) {
|
|
308
|
+
addValidationError('CHK_MSG_OBJ_GEN_408', `${val.id} id must be unique in progFields property`);
|
|
309
|
+
continue;
|
|
310
|
+
}
|
|
311
|
+
ids.push(val.id);
|
|
494
312
|
|
|
495
|
-
|
|
313
|
+
if (!_.isObject(val.data)) {
|
|
314
|
+
addValidationError('CHK_MSG_OBJ_GEN_410', 'invalid progFields.data object property');
|
|
315
|
+
continue;
|
|
496
316
|
}
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
var ids = [];
|
|
501
|
-
if (!_.isArray(doc.progEvents)) {
|
|
502
|
-
throw new Error('', {
|
|
503
|
-
cause: {
|
|
504
|
-
code: 'CHK_MSG_OBJ_GEN_502',
|
|
505
|
-
data: `invalid progEvents Array property`,
|
|
506
|
-
},
|
|
507
|
-
});
|
|
317
|
+
|
|
318
|
+
if (!val.data.field_id) {
|
|
319
|
+
addValidationError('CHK_MSG_OBJ_GEN_412', 'invalid progFields.data.field_id property');
|
|
508
320
|
}
|
|
509
321
|
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
cause: {
|
|
514
|
-
code: 'CHK_MSG_OBJ_GEN_504',
|
|
515
|
-
data: `invalid progEvents object property`,
|
|
516
|
-
},
|
|
517
|
-
});
|
|
518
|
-
}
|
|
519
|
-
if (!val.id) {
|
|
520
|
-
throw new Error('', {
|
|
521
|
-
cause: {
|
|
522
|
-
code: 'CHK_MSG_OBJ_GEN_506',
|
|
523
|
-
data: `missing progEvents.id property`,
|
|
524
|
-
},
|
|
525
|
-
});
|
|
526
|
-
}
|
|
527
|
-
if (ids.includes(val.id)) {
|
|
528
|
-
throw new Error('', {
|
|
529
|
-
cause: {
|
|
530
|
-
code: 'CHK_MSG_OBJ_GEN_508',
|
|
531
|
-
data: `${val.id} id must be unique in progEvents property`,
|
|
532
|
-
},
|
|
533
|
-
});
|
|
534
|
-
}
|
|
535
|
-
ids.push(val.id);
|
|
536
|
-
if (!_.isObject(val.data)) {
|
|
537
|
-
throw new Error('', {
|
|
538
|
-
cause: {
|
|
539
|
-
code: 'CHK_MSG_OBJ_GEN_510',
|
|
540
|
-
data: `invalid progEvents.data object property`,
|
|
541
|
-
},
|
|
542
|
-
});
|
|
543
|
-
}
|
|
322
|
+
if (!val.data.type) {
|
|
323
|
+
addValidationError('CHK_MSG_OBJ_GEN_414', 'invalid progFields.data.type property');
|
|
324
|
+
}
|
|
544
325
|
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
data: `undefined progEvents.data.condition string property`,
|
|
550
|
-
},
|
|
551
|
-
});
|
|
552
|
-
}
|
|
553
|
-
if (typeof val.data.event_name === 'undefined') {
|
|
554
|
-
throw new Error('', {
|
|
555
|
-
cause: {
|
|
556
|
-
code: 'CHK_MSG_OBJ_GEN_514',
|
|
557
|
-
data: `undefined progEvents.data.event_name string property`,
|
|
558
|
-
},
|
|
559
|
-
});
|
|
560
|
-
}
|
|
561
|
-
if (typeof val.data.properties === 'undefined') {
|
|
562
|
-
throw new Error('', {
|
|
563
|
-
cause: {
|
|
564
|
-
code: 'CHK_MSG_OBJ_GEN_516',
|
|
565
|
-
data: `undefined progEvents.data.properties string property`,
|
|
566
|
-
},
|
|
567
|
-
});
|
|
568
|
-
}
|
|
569
|
-
if (typeof val.data.type === 'undefined') {
|
|
570
|
-
throw new Error('', {
|
|
571
|
-
cause: {
|
|
572
|
-
code: 'CHK_MSG_OBJ_GEN_518',
|
|
573
|
-
data: `undefined progEvents.data.type string property`,
|
|
574
|
-
},
|
|
575
|
-
});
|
|
576
|
-
}
|
|
326
|
+
if (!_.isObject(val.props)) {
|
|
327
|
+
addValidationError('CHK_MSG_OBJ_GEN_416', 'invalid progFields.props Object property');
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
577
330
|
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
code: 'CHK_MSG_OBJ_GEN_522',
|
|
582
|
-
data: `invalid progEvents.data.parameters Array property`,
|
|
583
|
-
},
|
|
584
|
-
});
|
|
585
|
-
}
|
|
331
|
+
if (!val.props.fieldType) {
|
|
332
|
+
addValidationError('CHK_MSG_OBJ_GEN_418', 'invalid progFields.props.fieldType property');
|
|
333
|
+
}
|
|
586
334
|
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
code: 'CHK_MSG_OBJ_GEN_522',
|
|
591
|
-
data: `invalid progEvents.props Object property`,
|
|
592
|
-
},
|
|
593
|
-
});
|
|
594
|
-
}
|
|
335
|
+
if (!_.isObject(val.props.propExpressions)) {
|
|
336
|
+
addValidationError('CHK_MSG_OBJ_GEN_4120', 'invalid val.props.propExpressions Object property');
|
|
337
|
+
}
|
|
595
338
|
|
|
596
|
-
|
|
339
|
+
check_triggers(val.workflow);
|
|
340
|
+
}
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
const check_progEvents = function () {
|
|
344
|
+
if (!doc.progEvents) return;
|
|
345
|
+
|
|
346
|
+
var ids = [];
|
|
347
|
+
if (!_.isArray(doc.progEvents)) {
|
|
348
|
+
addValidationError('CHK_MSG_OBJ_GEN_502', 'invalid progEvents Array property');
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
for (let val of doc.progEvents) {
|
|
353
|
+
if (!_.isObject(val)) {
|
|
354
|
+
addValidationError('CHK_MSG_OBJ_GEN_504', 'invalid progEvents object property');
|
|
355
|
+
continue;
|
|
597
356
|
}
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
if (!_.isArray(workflow)) {
|
|
603
|
-
throw new Error('', {
|
|
604
|
-
cause: {
|
|
605
|
-
code: 'CHK_MSG_OBJ_GEN_850',
|
|
606
|
-
data: `invalid workflow Array property`,
|
|
607
|
-
},
|
|
608
|
-
});
|
|
357
|
+
|
|
358
|
+
if (!val.id) {
|
|
359
|
+
addValidationError('CHK_MSG_OBJ_GEN_506', 'missing progEvents.id property');
|
|
360
|
+
continue;
|
|
609
361
|
}
|
|
610
362
|
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
data: `invalid workflow item object property`,
|
|
617
|
-
},
|
|
618
|
-
});
|
|
619
|
-
}
|
|
363
|
+
if (ids.includes(val.id)) {
|
|
364
|
+
addValidationError('CHK_MSG_OBJ_GEN_508', `${val.id} id must be unique in progEvents property`);
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
ids.push(val.id);
|
|
620
368
|
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
data: `missing workflow.id property`,
|
|
626
|
-
},
|
|
627
|
-
});
|
|
628
|
-
}
|
|
629
|
-
if (ids.includes(val.id)) {
|
|
630
|
-
throw new Error('', {
|
|
631
|
-
cause: {
|
|
632
|
-
code: 'CHK_MSG_OBJ_GEN_856',
|
|
633
|
-
data: `${val.id} id must be unique in workflow property`,
|
|
634
|
-
},
|
|
635
|
-
});
|
|
636
|
-
}
|
|
637
|
-
ids.push(val.id);
|
|
369
|
+
if (!_.isObject(val.data)) {
|
|
370
|
+
addValidationError('CHK_MSG_OBJ_GEN_510', 'invalid progEvents.data object property');
|
|
371
|
+
continue;
|
|
372
|
+
}
|
|
638
373
|
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
code: 'CHK_MSG_OBJ_GEN_858',
|
|
643
|
-
data: `invalid workflow.data Object property`,
|
|
644
|
-
},
|
|
645
|
-
});
|
|
646
|
-
}
|
|
374
|
+
if (typeof val.data.condition === 'undefined') {
|
|
375
|
+
addValidationError('CHK_MSG_OBJ_GEN_512', 'undefined progEvents.data.condition string property');
|
|
376
|
+
}
|
|
647
377
|
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
cause: {
|
|
651
|
-
code: 'CHK_MSG_OBJ_GEN_860',
|
|
652
|
-
data: `invalid workflow.props item object property`,
|
|
653
|
-
},
|
|
654
|
-
});
|
|
655
|
-
}
|
|
378
|
+
if (typeof val.data.event_name === 'undefined') {
|
|
379
|
+
addValidationError('CHK_MSG_OBJ_GEN_514', 'undefined progEvents.data.event_name string property');
|
|
656
380
|
}
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
if (!_.isObject(doc.progDataSource)) {
|
|
661
|
-
throw new Error('', {
|
|
662
|
-
cause: {
|
|
663
|
-
code: 'CHK_MSG_OBJ_GEN_602',
|
|
664
|
-
data: `invalid progDataSource Object property`,
|
|
665
|
-
},
|
|
666
|
-
});
|
|
381
|
+
|
|
382
|
+
if (typeof val.data.properties === 'undefined') {
|
|
383
|
+
addValidationError('CHK_MSG_OBJ_GEN_516', 'undefined progEvents.data.properties string property');
|
|
667
384
|
}
|
|
668
385
|
|
|
669
|
-
if (typeof
|
|
670
|
-
|
|
671
|
-
cause: {
|
|
672
|
-
code: 'CHK_MSG_OBJ_GEN_604',
|
|
673
|
-
data: `undefined progDataSource.dataSourceType string property`,
|
|
674
|
-
},
|
|
675
|
-
});
|
|
386
|
+
if (typeof val.data.type === 'undefined') {
|
|
387
|
+
addValidationError('CHK_MSG_OBJ_GEN_518', 'undefined progEvents.data.type string property');
|
|
676
388
|
}
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
if (!_.isArray(doc.progUi)) {
|
|
681
|
-
throw new Error('', {
|
|
682
|
-
cause: {
|
|
683
|
-
code: 'CHK_MSG_OBJ_GEN_702',
|
|
684
|
-
data: `invalid progUi Array property`,
|
|
685
|
-
},
|
|
686
|
-
});
|
|
389
|
+
|
|
390
|
+
if (!_.isArray(val.data.parameters)) {
|
|
391
|
+
addValidationError('CHK_MSG_OBJ_GEN_522', 'invalid progEvents.data.parameters Array property');
|
|
687
392
|
}
|
|
688
393
|
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
if (!_.isObject(item)) {
|
|
693
|
-
throw new Error('', {
|
|
694
|
-
cause: {
|
|
695
|
-
code: 'CHK_MSG_OBJ_GEN_704',
|
|
696
|
-
data: `invalid progUi item Object property`,
|
|
697
|
-
},
|
|
698
|
-
});
|
|
699
|
-
}
|
|
394
|
+
if (!_.isObject(val.props)) {
|
|
395
|
+
addValidationError('CHK_MSG_OBJ_GEN_522', 'invalid progEvents.props Object property');
|
|
396
|
+
}
|
|
700
397
|
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
code: 'CHK_MSG_OBJ_GEN_706',
|
|
705
|
-
data: `invalid progUi attributes item Object property`,
|
|
706
|
-
},
|
|
707
|
-
});
|
|
708
|
-
}
|
|
398
|
+
check_triggers(val.workflow);
|
|
399
|
+
}
|
|
400
|
+
};
|
|
709
401
|
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
cause: {
|
|
713
|
-
code: 'CHK_MSG_OBJ_GEN_708',
|
|
714
|
-
data: `undefined progUi type item string property`,
|
|
715
|
-
},
|
|
716
|
-
});
|
|
717
|
-
}
|
|
718
|
-
if (typeof item.tagName === 'undefined') {
|
|
719
|
-
throw new Error('', {
|
|
720
|
-
cause: {
|
|
721
|
-
code: 'CHK_MSG_OBJ_GEN_710',
|
|
722
|
-
data: `undefined progUi tagName item string property`,
|
|
723
|
-
},
|
|
724
|
-
});
|
|
725
|
-
}
|
|
402
|
+
const check_triggers = function (workflow) {
|
|
403
|
+
if (!workflow) return;
|
|
726
404
|
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
},
|
|
733
|
-
});
|
|
734
|
-
}
|
|
735
|
-
if (ids.includes(item.id)) {
|
|
736
|
-
throw new Error('', {
|
|
737
|
-
cause: {
|
|
738
|
-
code: 'CHK_MSG_OBJ_GEN_714',
|
|
739
|
-
data: `${item.id} id must be unique in progUi property`,
|
|
740
|
-
},
|
|
741
|
-
});
|
|
742
|
-
}
|
|
743
|
-
ids.push(item.id);
|
|
405
|
+
var ids = [];
|
|
406
|
+
if (!_.isArray(workflow)) {
|
|
407
|
+
addValidationError('CHK_MSG_OBJ_GEN_850', 'invalid workflow Array property');
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
744
410
|
|
|
745
|
-
|
|
411
|
+
for (let val of workflow) {
|
|
412
|
+
if (!_.isObject(val)) {
|
|
413
|
+
addValidationError('CHK_MSG_OBJ_GEN_852', 'invalid workflow item object property');
|
|
414
|
+
continue;
|
|
415
|
+
}
|
|
746
416
|
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
417
|
+
if (!val.id) {
|
|
418
|
+
addValidationError('CHK_MSG_OBJ_GEN_854', 'missing workflow.id property');
|
|
419
|
+
continue;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
if (ids.includes(val.id)) {
|
|
423
|
+
addValidationError('CHK_MSG_OBJ_GEN_856', `${val.id} id must be unique in workflow property`);
|
|
424
|
+
continue;
|
|
425
|
+
}
|
|
426
|
+
ids.push(val.id);
|
|
427
|
+
|
|
428
|
+
if (!_.isObject(val.data)) {
|
|
429
|
+
addValidationError('CHK_MSG_OBJ_GEN_858', 'invalid workflow.data Object property');
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
if (!_.isObject(val.props)) {
|
|
433
|
+
addValidationError('CHK_MSG_OBJ_GEN_860', 'invalid workflow.props item object property');
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
};
|
|
437
|
+
|
|
438
|
+
const check_progDataSource = function () {
|
|
439
|
+
if (!doc.progDataSource) return;
|
|
440
|
+
|
|
441
|
+
if (!_.isObject(doc.progDataSource)) {
|
|
442
|
+
addValidationError('CHK_MSG_OBJ_GEN_602', 'invalid progDataSource Object property');
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
if (typeof doc.progDataSource.dataSourceType === 'undefined') {
|
|
447
|
+
addValidationError('CHK_MSG_OBJ_GEN_604', 'undefined progDataSource.dataSourceType string property');
|
|
448
|
+
}
|
|
449
|
+
};
|
|
450
|
+
|
|
451
|
+
const check_progUi = function () {
|
|
452
|
+
if (!doc.progUi) return;
|
|
453
|
+
|
|
454
|
+
if (!_.isArray(doc.progUi)) {
|
|
455
|
+
addValidationError('CHK_MSG_OBJ_GEN_702', 'invalid progUi Array property');
|
|
456
|
+
return;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
var ids = [];
|
|
460
|
+
const run_tree = function (node) {
|
|
461
|
+
for (let item of node) {
|
|
462
|
+
if (!_.isObject(item)) {
|
|
463
|
+
addValidationError('CHK_MSG_OBJ_GEN_704', 'invalid progUi item Object property');
|
|
464
|
+
continue;
|
|
750
465
|
}
|
|
751
|
-
|
|
752
|
-
|
|
466
|
+
|
|
467
|
+
if (!_.isObject(item.attributes)) {
|
|
468
|
+
addValidationError('CHK_MSG_OBJ_GEN_706', 'invalid progUi attributes item Object property');
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
if (typeof item.type === 'undefined') {
|
|
472
|
+
addValidationError('CHK_MSG_OBJ_GEN_708', 'undefined progUi type item string property');
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
if (typeof item.tagName === 'undefined') {
|
|
476
|
+
addValidationError('CHK_MSG_OBJ_GEN_710', 'undefined progUi tagName item string property');
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
if (!item.id) {
|
|
480
|
+
addValidationError('CHK_MSG_OBJ_GEN_712', 'missing progUi id item property');
|
|
481
|
+
continue;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
if (ids.includes(item.id)) {
|
|
485
|
+
addValidationError('CHK_MSG_OBJ_GEN_714', `${item.id} id must be unique in progUi property`);
|
|
486
|
+
continue;
|
|
487
|
+
}
|
|
488
|
+
ids.push(item.id);
|
|
489
|
+
|
|
490
|
+
check_triggers(item.workflow);
|
|
491
|
+
|
|
492
|
+
if (item.children) {
|
|
493
|
+
run_tree(item.children);
|
|
494
|
+
}
|
|
495
|
+
}
|
|
753
496
|
};
|
|
497
|
+
run_tree(doc.progUi);
|
|
498
|
+
};
|
|
754
499
|
|
|
500
|
+
// Only proceed with menu type validation if we have the required properties
|
|
501
|
+
if (doc.properties && doc.properties.menuType) {
|
|
755
502
|
switch (doc.properties.menuType) {
|
|
756
503
|
case 'table':
|
|
757
504
|
if (!doc.tableFields) {
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
}
|
|
765
|
-
///////////// tableFields
|
|
766
|
-
if (!_.isArray(doc.tableFields)) {
|
|
767
|
-
throw new Error('', {
|
|
768
|
-
cause: {
|
|
769
|
-
code: 'CHK_MSG_OBJ_GEN_202',
|
|
770
|
-
data: `invalid tableFields Array property`,
|
|
771
|
-
},
|
|
772
|
-
});
|
|
773
|
-
}
|
|
774
|
-
var ids = [];
|
|
505
|
+
addValidationError('CHK_MSG_OBJ_GEN_200', 'missing tableFields property');
|
|
506
|
+
} else {
|
|
507
|
+
if (!_.isArray(doc.tableFields)) {
|
|
508
|
+
addValidationError('CHK_MSG_OBJ_GEN_202', 'invalid tableFields Array property');
|
|
509
|
+
} else {
|
|
510
|
+
var ids = [];
|
|
775
511
|
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
}
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
throw new Error('', {
|
|
812
|
-
cause: {
|
|
813
|
-
code: 'CHK_MSG_OBJ_GEN_212',
|
|
814
|
-
data: `invalid tableFields.data.field_id property`,
|
|
815
|
-
},
|
|
816
|
-
});
|
|
817
|
-
}
|
|
818
|
-
if (!_.isObject(val.props)) {
|
|
819
|
-
throw new Error('', {
|
|
820
|
-
cause: {
|
|
821
|
-
code: 'CHK_MSG_OBJ_GEN_214',
|
|
822
|
-
data: `invalid tableFields.props object property`,
|
|
823
|
-
},
|
|
824
|
-
});
|
|
825
|
-
}
|
|
826
|
-
if (!val.props.fieldType) {
|
|
827
|
-
throw new Error('', {
|
|
828
|
-
cause: {
|
|
829
|
-
code: 'CHK_MSG_OBJ_GEN_216',
|
|
830
|
-
data: `invalid tableFields.props.fieldType property`,
|
|
831
|
-
},
|
|
832
|
-
});
|
|
833
|
-
}
|
|
834
|
-
///////////// tableIndexes
|
|
835
|
-
if (!_.isArray(doc.tableIndexes)) {
|
|
836
|
-
throw new Error('', {
|
|
837
|
-
cause: {
|
|
838
|
-
code: 'CHK_MSG_OBJ_GEN_302',
|
|
839
|
-
data: `invalid tableIndexes Array property`,
|
|
840
|
-
},
|
|
841
|
-
});
|
|
512
|
+
for (let val of doc.tableFields) {
|
|
513
|
+
if (!_.isObject(val)) {
|
|
514
|
+
addValidationError('CHK_MSG_OBJ_GEN_204', 'invalid tableFields object property');
|
|
515
|
+
continue;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
if (!val.id) {
|
|
519
|
+
addValidationError('CHK_MSG_OBJ_GEN_206', 'missing tableFields.id property');
|
|
520
|
+
continue;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
if (ids.includes(val.id)) {
|
|
524
|
+
addValidationError('CHK_MSG_OBJ_GEN_208', `${val.id} id must be unique in tableFields property`);
|
|
525
|
+
continue;
|
|
526
|
+
}
|
|
527
|
+
ids.push(val.id);
|
|
528
|
+
|
|
529
|
+
if (!_.isObject(val.data)) {
|
|
530
|
+
addValidationError('CHK_MSG_OBJ_GEN_210', 'invalid tableFields.data object property');
|
|
531
|
+
continue;
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
if (!val.data.field_id) {
|
|
535
|
+
addValidationError('CHK_MSG_OBJ_GEN_212', 'invalid tableFields.data.field_id property');
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
if (!_.isObject(val.props)) {
|
|
539
|
+
addValidationError('CHK_MSG_OBJ_GEN_214', 'invalid tableFields.props object property');
|
|
540
|
+
continue;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
if (!val.props.fieldType) {
|
|
544
|
+
addValidationError('CHK_MSG_OBJ_GEN_216', 'invalid tableFields.props.fieldType property');
|
|
545
|
+
}
|
|
546
|
+
}
|
|
842
547
|
}
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
// tableIndexes validation
|
|
551
|
+
if (!doc.tableIndexes) {
|
|
552
|
+
addValidationError('CHK_MSG_OBJ_GEN_302', 'missing tableIndexes property');
|
|
553
|
+
} else if (!_.isArray(doc.tableIndexes)) {
|
|
554
|
+
addValidationError('CHK_MSG_OBJ_GEN_302', 'invalid tableIndexes Array property');
|
|
555
|
+
} else {
|
|
843
556
|
var index_ids = [];
|
|
844
557
|
for (let val of doc.tableIndexes) {
|
|
845
558
|
if (!_.isObject(val)) {
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
code: 'CHK_MSG_OBJ_GEN_304',
|
|
849
|
-
data: `invalid tableIndexes object property`,
|
|
850
|
-
},
|
|
851
|
-
});
|
|
559
|
+
addValidationError('CHK_MSG_OBJ_GEN_304', 'invalid tableIndexes object property');
|
|
560
|
+
continue;
|
|
852
561
|
}
|
|
562
|
+
|
|
853
563
|
if (!val.id) {
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
code: 'CHK_MSG_OBJ_GEN_306',
|
|
857
|
-
data: `missing tableIndexes.id property`,
|
|
858
|
-
},
|
|
859
|
-
});
|
|
564
|
+
addValidationError('CHK_MSG_OBJ_GEN_306', 'missing tableIndexes.id property');
|
|
565
|
+
continue;
|
|
860
566
|
}
|
|
567
|
+
|
|
861
568
|
if (index_ids.includes(val.id)) {
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
code: 'CHK_MSG_OBJ_GEN_308',
|
|
865
|
-
data: `${val.id} id must be unique in tableIndexes property`,
|
|
866
|
-
},
|
|
867
|
-
});
|
|
569
|
+
addValidationError('CHK_MSG_OBJ_GEN_308', `${val.id} id must be unique in tableIndexes property`);
|
|
570
|
+
continue;
|
|
868
571
|
}
|
|
869
572
|
index_ids.push(val.id);
|
|
573
|
+
|
|
870
574
|
if (!_.isObject(val.data)) {
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
code: 'CHK_MSG_OBJ_GEN_310',
|
|
874
|
-
data: `invalid tableIndexes.data object property`,
|
|
875
|
-
},
|
|
876
|
-
});
|
|
575
|
+
addValidationError('CHK_MSG_OBJ_GEN_310', 'invalid tableIndexes.data object property');
|
|
576
|
+
continue;
|
|
877
577
|
}
|
|
578
|
+
|
|
878
579
|
if (!val.data.name) {
|
|
879
|
-
|
|
880
|
-
cause: {
|
|
881
|
-
code: 'CHK_MSG_OBJ_GEN_312',
|
|
882
|
-
data: `invalid tableIndexes.data.name property`,
|
|
883
|
-
},
|
|
884
|
-
});
|
|
580
|
+
addValidationError('CHK_MSG_OBJ_GEN_312', 'invalid tableIndexes.data.name property');
|
|
885
581
|
}
|
|
582
|
+
|
|
886
583
|
if (!_.isArray(val.data.keys)) {
|
|
887
|
-
|
|
888
|
-
cause: {
|
|
889
|
-
code: 'CHK_MSG_OBJ_GEN_312',
|
|
890
|
-
data: `invalid tableIndexes.data.keys Array property`,
|
|
891
|
-
},
|
|
892
|
-
});
|
|
584
|
+
addValidationError('CHK_MSG_OBJ_GEN_312', 'invalid tableIndexes.data.keys Array property');
|
|
893
585
|
}
|
|
894
586
|
}
|
|
895
587
|
}
|
|
896
|
-
|
|
897
588
|
break;
|
|
898
589
|
|
|
899
590
|
case 'globals':
|
|
@@ -916,21 +607,12 @@ export const check_structure = function (doc) {
|
|
|
916
607
|
check_progDataSource();
|
|
917
608
|
check_progUi();
|
|
918
609
|
|
|
919
|
-
if (typeof doc.properties.uiFramework === 'undefined') {
|
|
920
|
-
|
|
921
|
-
cause: {
|
|
922
|
-
code: 'CHK_MSG_OBJ_GEN_120',
|
|
923
|
-
data: `undefined properties.uiFramework string property`,
|
|
924
|
-
},
|
|
925
|
-
});
|
|
610
|
+
if (doc.properties && typeof doc.properties.uiFramework === 'undefined') {
|
|
611
|
+
addValidationError('CHK_MSG_OBJ_GEN_120', 'undefined properties.uiFramework string property');
|
|
926
612
|
}
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
code: 'CHK_MSG_OBJ_GEN_122',
|
|
931
|
-
data: `undefined properties.renderType string property`,
|
|
932
|
-
},
|
|
933
|
-
});
|
|
613
|
+
|
|
614
|
+
if (doc.properties && typeof doc.properties.renderType === 'undefined') {
|
|
615
|
+
addValidationError('CHK_MSG_OBJ_GEN_122', 'undefined properties.renderType string property');
|
|
934
616
|
}
|
|
935
617
|
break;
|
|
936
618
|
|
|
@@ -946,21 +628,8 @@ export const check_structure = function (doc) {
|
|
|
946
628
|
default:
|
|
947
629
|
break;
|
|
948
630
|
}
|
|
949
|
-
} catch (err) {
|
|
950
|
-
if (err.cause) {
|
|
951
|
-
const { code, data } = err.cause;
|
|
952
|
-
ret.push({
|
|
953
|
-
code,
|
|
954
|
-
data,
|
|
955
|
-
type: 'E',
|
|
956
|
-
category: 'document',
|
|
957
|
-
structure_error: true,
|
|
958
|
-
});
|
|
959
|
-
} else {
|
|
960
|
-
console.error(err);
|
|
961
|
-
debugger;
|
|
962
|
-
}
|
|
963
631
|
}
|
|
632
|
+
|
|
964
633
|
return ret;
|
|
965
634
|
};
|
|
966
635
|
|