@xuda.io/runtime-bundle 1.0.1182 → 1.0.1184

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.
@@ -265,635 +265,390 @@ export const check = function (doc) {
265
265
  export const check_structure = function (doc) {
266
266
  var ret = [];
267
267
 
268
- try {
269
- if (!app_obj || !_.isObject(app_obj) || _.isEmpty(app_obj)) {
270
- throw new Error('', {
271
- cause: {
272
- code: 'CHK_MSG_OBJ_GEN_002',
273
- data: `invalid app_obj`,
274
- },
275
- });
276
- }
268
+ // Helper function to add validation errors and continue
269
+ const addValidationError = (code, data) => {
270
+ ret.push({
271
+ code,
272
+ data,
273
+ type: 'E',
274
+ category: 'document',
275
+ structure_error: true,
276
+ });
277
+ };
277
278
 
278
- if (!doc || !_.isObject(doc) || _.isEmpty(doc)) {
279
- throw new Error('', {
280
- cause: {
281
- code: 'CHK_MSG_OBJ_GEN_004',
282
- data: `doc is not a object`,
283
- },
284
- });
285
- }
279
+ // Early exit conditions that prevent further validation
280
+ if (!app_obj || !_.isObject(app_obj) || _.isEmpty(app_obj)) {
281
+ addValidationError('CHK_MSG_OBJ_GEN_002', 'invalid app_obj');
282
+ return ret;
283
+ }
286
284
 
287
- try {
288
- JSON5.parse(JSON.stringify(doc));
289
- } catch (err) {
290
- throw new Error('', {
291
- cause: {
292
- code: 'CHK_MSG_OBJ_GEN_005',
293
- data: `error parsing JSON doc`,
294
- },
295
- });
296
- }
285
+ if (!doc || !_.isObject(doc) || _.isEmpty(doc)) {
286
+ addValidationError('CHK_MSG_OBJ_GEN_004', 'doc is not a object');
287
+ return ret;
288
+ }
297
289
 
298
- if (!doc._id) {
299
- throw new Error('', {
300
- cause: {
301
- code: 'CHK_MSG_OBJ_GEN_050',
302
- data: `missing _id value`,
303
- },
304
- });
305
- }
290
+ try {
291
+ JSON5.parse(JSON.stringify(doc));
292
+ } catch (err) {
293
+ addValidationError('CHK_MSG_OBJ_GEN_005', 'error parsing JSON doc');
294
+ return ret;
295
+ }
306
296
 
307
- if (doc?.studio_meta?.source === 'studio ai' && doc?.properties?.menuType && doc._id.substr(0, 7) !== new_node_id(doc.properties.menuType, doc.app_id).substr(0, 7)) {
308
- throw new Error('', {
309
- cause: {
310
- code: 'CHK_MSG_OBJ_GEN_051',
311
- data: `invalid _id value (e.g: 5b1_tbl_a953848a71c5)`,
312
- },
313
- });
314
- }
297
+ // Continue validation even with errors
298
+ if (!doc._id) {
299
+ addValidationError('CHK_MSG_OBJ_GEN_050', 'missing _id value');
300
+ }
315
301
 
316
- if (!doc._rev) {
317
- if (progs_obj?.[doc._id]) {
318
- throw new Error('', {
319
- cause: {
320
- code: 'CHK_MSG_OBJ_GEN_052',
321
- data: `duplicate doc _id`,
322
- },
323
- });
324
- }
325
- }
326
- ////////// properties ////////////////
302
+ 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)) {
303
+ addValidationError('CHK_MSG_OBJ_GEN_051', 'invalid _id value (e.g: 5b1_tbl_a953848a71c5)');
304
+ }
327
305
 
328
- if (!doc.properties) {
329
- throw new Error('', {
330
- cause: {
331
- code: 'CHK_MSG_OBJ_GEN_100',
332
- data: `missing properties object`,
333
- },
334
- });
306
+ if (!doc._rev) {
307
+ if (progs_obj?.[doc._id]) {
308
+ addValidationError('CHK_MSG_OBJ_GEN_052', 'duplicate doc _id');
335
309
  }
310
+ }
311
+
312
+ ////////// properties ////////////////
313
+
314
+ if (!doc.properties) {
315
+ addValidationError('CHK_MSG_OBJ_GEN_100', 'missing properties object');
316
+ } else {
336
317
  if (!_.isObject(doc.properties)) {
337
- throw new Error('', {
338
- cause: {
339
- code: 'CHK_MSG_OBJ_GEN_102',
340
- data: `invalid properties object`,
341
- },
342
- });
343
- }
318
+ addValidationError('CHK_MSG_OBJ_GEN_102', 'invalid properties object');
319
+ } else {
320
+ if (!doc.properties.menuType) {
321
+ addValidationError('CHK_MSG_OBJ_GEN_104', 'missing properties.menuType');
322
+ } else if (!ALL_MENU_TYPE.includes(doc.properties.menuType)) {
323
+ addValidationError('CHK_MSG_OBJ_GEN_105', `invalid properties.menuType (valid values: ${ALL_MENU_TYPE.join(',')})`);
324
+ }
344
325
 
345
- if (!doc.properties.menuType) {
346
- throw new Error('', {
347
- cause: {
348
- code: 'CHK_MSG_OBJ_GEN_104',
349
- data: `missing properties.menuType`,
350
- },
351
- });
326
+ if (!doc.properties.menuName) {
327
+ addValidationError('CHK_MSG_OBJ_GEN_106', 'missing properties.menuName');
328
+ }
352
329
  }
330
+ }
353
331
 
354
- if (!ALL_MENU_TYPE.includes(doc.properties.menuType)) {
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
- }
332
+ ////////// studio_meta ////////////////
362
333
 
363
- if (!doc.properties.menuName) {
364
- throw new Error('', {
365
- cause: {
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
- }
334
+ if (!doc.studio_meta) {
335
+ addValidationError('CHK_MSG_OBJ_GEN_112', 'missing studio_meta property');
336
+ } else {
380
337
  if (!_.isObject(doc.studio_meta)) {
381
- throw new Error('', {
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
- });
338
+ addValidationError('CHK_MSG_OBJ_GEN_112', 'invalid studio_meta object');
395
339
  } else {
396
- let menuType = doc?.properties?.menuType === 'globals' ? 'globals' : doc?.properties?.menuType === 'table' ? 'database' : doc?.properties?.menuType === 'route' ? 'routes' : 'programs';
397
- if (doc.studio_meta.parentId !== menuType && !progs_obj[doc.studio_meta.parentId]) {
398
- throw new Error('', {
399
- cause: {
400
- code: 'CHK_MSG_OBJ_GEN_116',
401
- data: `invalid studio_meta.parentId value`,
402
- },
403
- });
340
+ if (!doc.studio_meta.parentId) {
341
+ addValidationError('CHK_MSG_OBJ_GEN_114', 'missing studio_meta.parentId value');
342
+ } else {
343
+ let menuType = doc?.properties?.menuType === 'globals' ? 'globals' : doc?.properties?.menuType === 'table' ? 'database' : doc?.properties?.menuType === 'route' ? 'routes' : 'programs';
344
+ if (doc.studio_meta.parentId !== menuType && !progs_obj[doc.studio_meta.parentId]) {
345
+ addValidationError('CHK_MSG_OBJ_GEN_116', 'invalid studio_meta.parentId value');
346
+ }
404
347
  }
405
348
  }
349
+ }
406
350
 
407
- const check_progFields = function () {
408
- ///////////// progFields
409
- var ids = [];
410
- if (!_.isArray(doc.progFields)) {
411
- throw new Error('', {
412
- cause: {
413
- code: 'CHK_MSG_OBJ_GEN_402',
414
- data: `invalid progFields Array property`,
415
- },
416
- });
351
+ const check_progFields = function () {
352
+ if (!doc.progFields) return;
353
+
354
+ var ids = [];
355
+ if (!_.isArray(doc.progFields)) {
356
+ addValidationError('CHK_MSG_OBJ_GEN_402', 'invalid progFields Array property');
357
+ return;
358
+ }
359
+
360
+ for (let val of doc.progFields) {
361
+ if (!_.isObject(val)) {
362
+ addValidationError('CHK_MSG_OBJ_GEN_404', 'invalid progFields object property');
363
+ continue;
417
364
  }
418
365
 
419
- for (let val of doc.progFields) {
420
- if (!_.isObject(val)) {
421
- throw new Error('', {
422
- cause: {
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
- }
366
+ if (!val.id) {
367
+ addValidationError('CHK_MSG_OBJ_GEN_406', 'missing progFields.id property');
368
+ continue;
369
+ }
453
370
 
454
- if (!val.data.field_id) {
455
- throw new Error('', {
456
- cause: {
457
- code: 'CHK_MSG_OBJ_GEN_412',
458
- data: `invalid progFields.data.field_id property`,
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
- }
371
+ if (ids.includes(val.id)) {
372
+ addValidationError('CHK_MSG_OBJ_GEN_408', `${val.id} id must be unique in progFields property`);
373
+ continue;
374
+ }
375
+ ids.push(val.id);
494
376
 
495
- check_triggers(val.workflow);
377
+ if (!_.isObject(val.data)) {
378
+ addValidationError('CHK_MSG_OBJ_GEN_410', 'invalid progFields.data object property');
379
+ continue;
496
380
  }
497
- };
498
- const check_progEvents = function () {
499
- ///////////// progEvents
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
- });
381
+
382
+ if (!val.data.field_id) {
383
+ addValidationError('CHK_MSG_OBJ_GEN_412', 'invalid progFields.data.field_id property');
508
384
  }
509
385
 
510
- for (let val of doc.progEvents) {
511
- if (!_.isObject(val)) {
512
- throw new Error('', {
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
- }
386
+ if (!val.data.type) {
387
+ addValidationError('CHK_MSG_OBJ_GEN_414', 'invalid progFields.data.type property');
388
+ }
544
389
 
545
- if (typeof val.data.condition === 'undefined') {
546
- throw new Error('', {
547
- cause: {
548
- code: 'CHK_MSG_OBJ_GEN_512',
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
- }
390
+ if (!_.isObject(val.props)) {
391
+ addValidationError('CHK_MSG_OBJ_GEN_416', 'invalid progFields.props Object property');
392
+ continue;
393
+ }
577
394
 
578
- if (!_.isArray(val.data.parameters)) {
579
- throw new Error('', {
580
- cause: {
581
- code: 'CHK_MSG_OBJ_GEN_522',
582
- data: `invalid progEvents.data.parameters Array property`,
583
- },
584
- });
585
- }
395
+ if (!val.props.fieldType) {
396
+ addValidationError('CHK_MSG_OBJ_GEN_418', 'invalid progFields.props.fieldType property');
397
+ }
586
398
 
587
- if (!_.isObject(val.props)) {
588
- throw new Error('', {
589
- cause: {
590
- code: 'CHK_MSG_OBJ_GEN_522',
591
- data: `invalid progEvents.props Object property`,
592
- },
593
- });
594
- }
399
+ if (!_.isObject(val.props.propExpressions)) {
400
+ addValidationError('CHK_MSG_OBJ_GEN_4120', 'invalid val.props.propExpressions Object property');
401
+ }
402
+
403
+ check_triggers(val.workflow);
404
+ }
405
+ };
595
406
 
596
- check_triggers(val.workflow);
407
+ const check_progEvents = function () {
408
+ if (!doc.progEvents) return;
409
+
410
+ var ids = [];
411
+ if (!_.isArray(doc.progEvents)) {
412
+ addValidationError('CHK_MSG_OBJ_GEN_502', 'invalid progEvents Array property');
413
+ return;
414
+ }
415
+
416
+ for (let val of doc.progEvents) {
417
+ if (!_.isObject(val)) {
418
+ addValidationError('CHK_MSG_OBJ_GEN_504', 'invalid progEvents object property');
419
+ continue;
597
420
  }
598
- };
599
- const check_triggers = function (workflow) {
600
- if (!workflow) return;
601
- var ids = [];
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
- });
421
+
422
+ if (!val.id) {
423
+ addValidationError('CHK_MSG_OBJ_GEN_506', 'missing progEvents.id property');
424
+ continue;
609
425
  }
610
426
 
611
- for (let val of workflow) {
612
- if (!_.isObject(val)) {
613
- throw new Error('', {
614
- cause: {
615
- code: 'CHK_MSG_OBJ_GEN_852',
616
- data: `invalid workflow item object property`,
617
- },
618
- });
619
- }
427
+ if (ids.includes(val.id)) {
428
+ addValidationError('CHK_MSG_OBJ_GEN_508', `${val.id} id must be unique in progEvents property`);
429
+ continue;
430
+ }
431
+ ids.push(val.id);
620
432
 
621
- if (!val.id) {
622
- throw new Error('', {
623
- cause: {
624
- code: 'CHK_MSG_OBJ_GEN_854',
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);
433
+ if (!_.isObject(val.data)) {
434
+ addValidationError('CHK_MSG_OBJ_GEN_510', 'invalid progEvents.data object property');
435
+ continue;
436
+ }
638
437
 
639
- if (!_.isObject(val.data)) {
640
- throw new Error('', {
641
- cause: {
642
- code: 'CHK_MSG_OBJ_GEN_858',
643
- data: `invalid workflow.data Object property`,
644
- },
645
- });
646
- }
438
+ if (typeof val.data.condition === 'undefined') {
439
+ addValidationError('CHK_MSG_OBJ_GEN_512', 'undefined progEvents.data.condition string property');
440
+ }
647
441
 
648
- if (!_.isObject(val.props)) {
649
- throw new Error('', {
650
- cause: {
651
- code: 'CHK_MSG_OBJ_GEN_860',
652
- data: `invalid workflow.props item object property`,
653
- },
654
- });
655
- }
442
+ if (typeof val.data.event_name === 'undefined') {
443
+ addValidationError('CHK_MSG_OBJ_GEN_514', 'undefined progEvents.data.event_name string property');
656
444
  }
657
- };
658
- const check_progDataSource = function () {
659
- ///////////// progDataSource
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
- });
445
+
446
+ if (typeof val.data.properties === 'undefined') {
447
+ addValidationError('CHK_MSG_OBJ_GEN_516', 'undefined progEvents.data.properties string property');
667
448
  }
668
449
 
669
- if (typeof doc.progDataSource.dataSourceType === 'undefined') {
670
- throw new Error('', {
671
- cause: {
672
- code: 'CHK_MSG_OBJ_GEN_604',
673
- data: `undefined progDataSource.dataSourceType string property`,
674
- },
675
- });
450
+ if (typeof val.data.type === 'undefined') {
451
+ addValidationError('CHK_MSG_OBJ_GEN_518', 'undefined progEvents.data.type string property');
676
452
  }
677
- };
678
- const check_progUi = function () {
679
- ///////////// progUi
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
- });
453
+
454
+ if (!_.isArray(val.data.parameters)) {
455
+ addValidationError('CHK_MSG_OBJ_GEN_522', 'invalid progEvents.data.parameters Array property');
687
456
  }
688
457
 
689
- var ids = [];
690
- const run_tree = function (node) {
691
- for (let item of node) {
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
- }
458
+ if (!_.isObject(val.props)) {
459
+ addValidationError('CHK_MSG_OBJ_GEN_522', 'invalid progEvents.props Object property');
460
+ }
700
461
 
701
- if (!_.isObject(item.attributes)) {
702
- throw new Error('', {
703
- cause: {
704
- code: 'CHK_MSG_OBJ_GEN_706',
705
- data: `invalid progUi attributes item Object property`,
706
- },
707
- });
708
- }
462
+ check_triggers(val.workflow);
463
+ }
464
+ };
709
465
 
710
- if (typeof item.type === 'undefined') {
711
- throw new Error('', {
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
- }
466
+ const check_triggers = function (workflow) {
467
+ if (!workflow) return;
726
468
 
727
- if (!item.id) {
728
- throw new Error('', {
729
- cause: {
730
- code: 'CHK_MSG_OBJ_GEN_712',
731
- data: `missing progUi id item property`,
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);
469
+ var ids = [];
470
+ if (!_.isArray(workflow)) {
471
+ addValidationError('CHK_MSG_OBJ_GEN_850', 'invalid workflow Array property');
472
+ return;
473
+ }
474
+
475
+ for (let val of workflow) {
476
+ if (!_.isObject(val)) {
477
+ addValidationError('CHK_MSG_OBJ_GEN_852', 'invalid workflow item object property');
478
+ continue;
479
+ }
744
480
 
745
- check_triggers(item.workflow);
481
+ if (!val.id) {
482
+ addValidationError('CHK_MSG_OBJ_GEN_854', 'missing workflow.id property');
483
+ continue;
484
+ }
746
485
 
747
- if (item.children) {
748
- run_tree(item.children);
749
- }
486
+ if (ids.includes(val.id)) {
487
+ addValidationError('CHK_MSG_OBJ_GEN_856', `${val.id} id must be unique in workflow property`);
488
+ continue;
489
+ }
490
+ ids.push(val.id);
491
+
492
+ if (!_.isObject(val.data)) {
493
+ addValidationError('CHK_MSG_OBJ_GEN_858', 'invalid workflow.data Object property');
494
+ }
495
+
496
+ if (!_.isObject(val.props)) {
497
+ addValidationError('CHK_MSG_OBJ_GEN_860', 'invalid workflow.props item object property');
498
+ }
499
+ }
500
+ };
501
+
502
+ const check_progDataSource = function () {
503
+ if (!doc.progDataSource) return;
504
+
505
+ if (!_.isObject(doc.progDataSource)) {
506
+ addValidationError('CHK_MSG_OBJ_GEN_602', 'invalid progDataSource Object property');
507
+ return;
508
+ }
509
+
510
+ if (typeof doc.progDataSource.dataSourceType === 'undefined') {
511
+ addValidationError('CHK_MSG_OBJ_GEN_604', 'undefined progDataSource.dataSourceType string property');
512
+ }
513
+ };
514
+
515
+ const check_progUi = function () {
516
+ if (!doc.progUi) return;
517
+
518
+ if (!_.isArray(doc.progUi)) {
519
+ addValidationError('CHK_MSG_OBJ_GEN_702', 'invalid progUi Array property');
520
+ return;
521
+ }
522
+
523
+ var ids = [];
524
+ const run_tree = function (node) {
525
+ for (let item of node) {
526
+ if (!_.isObject(item)) {
527
+ addValidationError('CHK_MSG_OBJ_GEN_704', 'invalid progUi item Object property');
528
+ continue;
750
529
  }
751
- };
752
- run_tree(doc.progUi);
530
+
531
+ if (!_.isObject(item.attributes)) {
532
+ addValidationError('CHK_MSG_OBJ_GEN_706', 'invalid progUi attributes item Object property');
533
+ }
534
+
535
+ if (typeof item.type === 'undefined') {
536
+ addValidationError('CHK_MSG_OBJ_GEN_708', 'undefined progUi type item string property');
537
+ }
538
+
539
+ if (typeof item.tagName === 'undefined') {
540
+ addValidationError('CHK_MSG_OBJ_GEN_710', 'undefined progUi tagName item string property');
541
+ }
542
+
543
+ if (!item.id) {
544
+ addValidationError('CHK_MSG_OBJ_GEN_712', 'missing progUi id item property');
545
+ continue;
546
+ }
547
+
548
+ if (ids.includes(item.id)) {
549
+ addValidationError('CHK_MSG_OBJ_GEN_714', `${item.id} id must be unique in progUi property`);
550
+ continue;
551
+ }
552
+ ids.push(item.id);
553
+
554
+ check_triggers(item.workflow);
555
+
556
+ if (item.children) {
557
+ run_tree(item.children);
558
+ }
559
+ }
753
560
  };
561
+ run_tree(doc.progUi);
562
+ };
754
563
 
564
+ // Only proceed with menu type validation if we have the required properties
565
+ if (doc.properties && doc.properties.menuType) {
755
566
  switch (doc.properties.menuType) {
756
567
  case 'table':
757
568
  if (!doc.tableFields) {
758
- throw new Error('', {
759
- cause: {
760
- code: 'CHK_MSG_OBJ_GEN_200',
761
- data: `missing tableFields property`,
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 = [];
569
+ addValidationError('CHK_MSG_OBJ_GEN_200', 'missing tableFields property');
570
+ } else {
571
+ if (!_.isArray(doc.tableFields)) {
572
+ addValidationError('CHK_MSG_OBJ_GEN_202', 'invalid tableFields Array property');
573
+ } else {
574
+ var ids = [];
775
575
 
776
- for (let val of doc.tableFields) {
777
- if (!_.isObject(val)) {
778
- throw new Error('', {
779
- cause: {
780
- code: 'CHK_MSG_OBJ_GEN_204',
781
- data: `invalid tableFields object property`,
782
- },
783
- });
784
- }
785
- if (!val.id) {
786
- throw new Error('', {
787
- cause: {
788
- code: 'CHK_MSG_OBJ_GEN_206',
789
- data: `missing tableFields.id property`,
790
- },
791
- });
792
- }
793
- if (ids.includes(val.id)) {
794
- throw new Error('', {
795
- cause: {
796
- code: 'CHK_MSG_OBJ_GEN_208',
797
- data: `${val.id} id must be unique in tableFields property`,
798
- },
799
- });
800
- }
801
- ids.push(val.id);
802
- if (!_.isObject(val.data)) {
803
- throw new Error('', {
804
- cause: {
805
- code: 'CHK_MSG_OBJ_GEN_210',
806
- data: `invalid tableFields.data object property`,
807
- },
808
- });
809
- }
810
- if (!val.data.field_id) {
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
- });
576
+ for (let val of doc.tableFields) {
577
+ if (!_.isObject(val)) {
578
+ addValidationError('CHK_MSG_OBJ_GEN_204', 'invalid tableFields object property');
579
+ continue;
580
+ }
581
+
582
+ if (!val.id) {
583
+ addValidationError('CHK_MSG_OBJ_GEN_206', 'missing tableFields.id property');
584
+ continue;
585
+ }
586
+
587
+ if (ids.includes(val.id)) {
588
+ addValidationError('CHK_MSG_OBJ_GEN_208', `${val.id} id must be unique in tableFields property`);
589
+ continue;
590
+ }
591
+ ids.push(val.id);
592
+
593
+ if (!_.isObject(val.data)) {
594
+ addValidationError('CHK_MSG_OBJ_GEN_210', 'invalid tableFields.data object property');
595
+ continue;
596
+ }
597
+
598
+ if (!val.data.field_id) {
599
+ addValidationError('CHK_MSG_OBJ_GEN_212', 'invalid tableFields.data.field_id property');
600
+ }
601
+
602
+ if (!_.isObject(val.props)) {
603
+ addValidationError('CHK_MSG_OBJ_GEN_214', 'invalid tableFields.props object property');
604
+ continue;
605
+ }
606
+
607
+ if (!val.props.fieldType) {
608
+ addValidationError('CHK_MSG_OBJ_GEN_216', 'invalid tableFields.props.fieldType property');
609
+ }
610
+ }
842
611
  }
612
+ }
613
+
614
+ // tableIndexes validation
615
+ if (!doc.tableIndexes) {
616
+ addValidationError('CHK_MSG_OBJ_GEN_302', 'missing tableIndexes property');
617
+ } else if (!_.isArray(doc.tableIndexes)) {
618
+ addValidationError('CHK_MSG_OBJ_GEN_302', 'invalid tableIndexes Array property');
619
+ } else {
843
620
  var index_ids = [];
844
621
  for (let val of doc.tableIndexes) {
845
622
  if (!_.isObject(val)) {
846
- throw new Error('', {
847
- cause: {
848
- code: 'CHK_MSG_OBJ_GEN_304',
849
- data: `invalid tableIndexes object property`,
850
- },
851
- });
623
+ addValidationError('CHK_MSG_OBJ_GEN_304', 'invalid tableIndexes object property');
624
+ continue;
852
625
  }
626
+
853
627
  if (!val.id) {
854
- throw new Error('', {
855
- cause: {
856
- code: 'CHK_MSG_OBJ_GEN_306',
857
- data: `missing tableIndexes.id property`,
858
- },
859
- });
628
+ addValidationError('CHK_MSG_OBJ_GEN_306', 'missing tableIndexes.id property');
629
+ continue;
860
630
  }
631
+
861
632
  if (index_ids.includes(val.id)) {
862
- throw new Error('', {
863
- cause: {
864
- code: 'CHK_MSG_OBJ_GEN_308',
865
- data: `${val.id} id must be unique in tableIndexes property`,
866
- },
867
- });
633
+ addValidationError('CHK_MSG_OBJ_GEN_308', `${val.id} id must be unique in tableIndexes property`);
634
+ continue;
868
635
  }
869
636
  index_ids.push(val.id);
637
+
870
638
  if (!_.isObject(val.data)) {
871
- throw new Error('', {
872
- cause: {
873
- code: 'CHK_MSG_OBJ_GEN_310',
874
- data: `invalid tableIndexes.data object property`,
875
- },
876
- });
639
+ addValidationError('CHK_MSG_OBJ_GEN_310', 'invalid tableIndexes.data object property');
640
+ continue;
877
641
  }
642
+
878
643
  if (!val.data.name) {
879
- throw new Error('', {
880
- cause: {
881
- code: 'CHK_MSG_OBJ_GEN_312',
882
- data: `invalid tableIndexes.data.name property`,
883
- },
884
- });
644
+ addValidationError('CHK_MSG_OBJ_GEN_312', 'invalid tableIndexes.data.name property');
885
645
  }
646
+
886
647
  if (!_.isArray(val.data.keys)) {
887
- throw new Error('', {
888
- cause: {
889
- code: 'CHK_MSG_OBJ_GEN_312',
890
- data: `invalid tableIndexes.data.keys Array property`,
891
- },
892
- });
648
+ addValidationError('CHK_MSG_OBJ_GEN_312', 'invalid tableIndexes.data.keys Array property');
893
649
  }
894
650
  }
895
651
  }
896
-
897
652
  break;
898
653
 
899
654
  case 'globals':
@@ -916,21 +671,12 @@ export const check_structure = function (doc) {
916
671
  check_progDataSource();
917
672
  check_progUi();
918
673
 
919
- if (typeof doc.properties.uiFramework === 'undefined') {
920
- throw new Error('', {
921
- cause: {
922
- code: 'CHK_MSG_OBJ_GEN_120',
923
- data: `undefined properties.uiFramework string property`,
924
- },
925
- });
674
+ if (doc.properties && typeof doc.properties.uiFramework === 'undefined') {
675
+ addValidationError('CHK_MSG_OBJ_GEN_120', 'undefined properties.uiFramework string property');
926
676
  }
927
- if (typeof doc.properties.renderType === 'undefined') {
928
- throw new Error('', {
929
- cause: {
930
- code: 'CHK_MSG_OBJ_GEN_122',
931
- data: `undefined properties.renderType string property`,
932
- },
933
- });
677
+
678
+ if (doc.properties && typeof doc.properties.renderType === 'undefined') {
679
+ addValidationError('CHK_MSG_OBJ_GEN_122', 'undefined properties.renderType string property');
934
680
  }
935
681
  break;
936
682
 
@@ -946,21 +692,8 @@ export const check_structure = function (doc) {
946
692
  default:
947
693
  break;
948
694
  }
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
695
  }
696
+
964
697
  return ret;
965
698
  };
966
699
 
@@ -3319,7 +3052,7 @@ const find_trigger_property_value_in_progs = function (doc, triggers_arr, proper
3319
3052
 
3320
3053
  const run_program_search = function (prog) {
3321
3054
  // find in events
3322
- if (prog.progEvents && !_.isEmpty(prog.progEvents)) {
3055
+ if (prog?.progEvents && !_.isEmpty(prog.progEvents)) {
3323
3056
  for (let event_item of prog.progEvents) {
3324
3057
  if (event_item.workflow) {
3325
3058
  find_in_triggers(prog, event_item.workflow);
@@ -3328,7 +3061,7 @@ const find_trigger_property_value_in_progs = function (doc, triggers_arr, proper
3328
3061
  }
3329
3062
 
3330
3063
  // find in fields
3331
- if (prog.progFields && !_.isEmpty(prog.progFields)) {
3064
+ if (prog?.progFields && !_.isEmpty(prog.progFields)) {
3332
3065
  for (let field_item of prog.progFields) {
3333
3066
  if (field_item.workflow) {
3334
3067
  find_in_triggers(prog, field_item.workflow);
@@ -3337,7 +3070,7 @@ const find_trigger_property_value_in_progs = function (doc, triggers_arr, proper
3337
3070
  }
3338
3071
 
3339
3072
  // find in ui workflow
3340
- if (prog.progUi && !_.isEmpty(prog.progUi)) {
3073
+ if (prog?.progUi && !_.isEmpty(prog.progUi)) {
3341
3074
  const run_tree = function (node) {
3342
3075
  try {
3343
3076
  for (let item of node) {