@furo/open-models 0.0.0-alpha.7 → 0.0.0-alpha.9

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.
@@ -42,6 +42,45 @@
42
42
  }
43
43
  ]
44
44
  },
45
+ {
46
+ "kind": "javascript-module",
47
+ "path": "src/DebounceBuilder.ts",
48
+ "declarations": [
49
+ {
50
+ "kind": "function",
51
+ "name": "DebounceBuilder",
52
+ "parameters": [
53
+ {
54
+ "name": "func",
55
+ "type": {
56
+ "text": "Function"
57
+ }
58
+ },
59
+ {
60
+ "name": "delay",
61
+ "default": "10",
62
+ "type": {
63
+ "text": "number"
64
+ }
65
+ },
66
+ {
67
+ "name": "option",
68
+ "default": "{ leading: false, trailing: true }"
69
+ }
70
+ ]
71
+ }
72
+ ],
73
+ "exports": [
74
+ {
75
+ "kind": "js",
76
+ "name": "default",
77
+ "declaration": {
78
+ "name": "DebounceBuilder",
79
+ "module": "src/DebounceBuilder.ts"
80
+ }
81
+ }
82
+ ]
83
+ },
45
84
  {
46
85
  "kind": "javascript-module",
47
86
  "path": "src/FieldConstraints.ts",
@@ -93,7 +132,7 @@
93
132
  "text": "Meta"
94
133
  },
95
134
  "privacy": "public",
96
- "default": "{ readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
135
+ "default": "{ businessVaueState: ValueState.None, readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
97
136
  "description": "Meta data of a field node."
98
137
  },
99
138
  {
@@ -337,6 +376,12 @@
337
376
  }
338
377
  ]
339
378
  },
379
+ {
380
+ "kind": "method",
381
+ "name": "__clearAllValueStates",
382
+ "privacy": "public",
383
+ "description": "Clears all value states recursively"
384
+ },
340
385
  {
341
386
  "kind": "method",
342
387
  "name": "__applyValueStates",
@@ -536,6 +581,15 @@
536
581
  "kind": "method",
537
582
  "name": "__clear",
538
583
  "privacy": "public",
584
+ "parameters": [
585
+ {
586
+ "name": "withoutNotification",
587
+ "default": "false",
588
+ "type": {
589
+ "text": "boolean"
590
+ }
591
+ }
592
+ ],
539
593
  "description": "Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n\nA cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false."
540
594
  },
541
595
  {
@@ -1380,6 +1434,15 @@
1380
1434
  "kind": "method",
1381
1435
  "name": "__clear",
1382
1436
  "privacy": "public",
1437
+ "parameters": [
1438
+ {
1439
+ "name": "withoutNotification",
1440
+ "default": "false",
1441
+ "type": {
1442
+ "text": "boolean"
1443
+ }
1444
+ }
1445
+ ],
1383
1446
  "description": "Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n\nA cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.",
1384
1447
  "inheritedFrom": {
1385
1448
  "name": "FieldNode",
@@ -1460,7 +1523,7 @@
1460
1523
  "text": "Meta"
1461
1524
  },
1462
1525
  "privacy": "public",
1463
- "default": "{ readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
1526
+ "default": "{ businessVaueState: ValueState.None, readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
1464
1527
  "description": "Meta data of a field node.",
1465
1528
  "inheritedFrom": {
1466
1529
  "name": "FieldNode",
@@ -1709,6 +1772,16 @@
1709
1772
  "module": "src/FieldNode.ts"
1710
1773
  }
1711
1774
  },
1775
+ {
1776
+ "kind": "method",
1777
+ "name": "__clearAllValueStates",
1778
+ "privacy": "public",
1779
+ "description": "Clears all value states recursively",
1780
+ "inheritedFrom": {
1781
+ "name": "FieldNode",
1782
+ "module": "src/FieldNode.ts"
1783
+ }
1784
+ },
1712
1785
  {
1713
1786
  "kind": "method",
1714
1787
  "name": "__applyValueStates",
@@ -2520,6 +2593,15 @@
2520
2593
  "kind": "method",
2521
2594
  "name": "__clear",
2522
2595
  "privacy": "public",
2596
+ "parameters": [
2597
+ {
2598
+ "name": "withoutNotification",
2599
+ "default": "false",
2600
+ "type": {
2601
+ "text": "boolean"
2602
+ }
2603
+ }
2604
+ ],
2523
2605
  "description": "Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n\nA cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.",
2524
2606
  "inheritedFrom": {
2525
2607
  "name": "FieldNode",
@@ -2582,7 +2664,7 @@
2582
2664
  "text": "Meta"
2583
2665
  },
2584
2666
  "privacy": "public",
2585
- "default": "{ readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
2667
+ "default": "{ businessVaueState: ValueState.None, readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
2586
2668
  "description": "Meta data of a field node.",
2587
2669
  "inheritedFrom": {
2588
2670
  "name": "FieldNode",
@@ -2845,6 +2927,16 @@
2845
2927
  "module": "src/FieldNode.ts"
2846
2928
  }
2847
2929
  },
2930
+ {
2931
+ "kind": "method",
2932
+ "name": "__clearAllValueStates",
2933
+ "privacy": "public",
2934
+ "description": "Clears all value states recursively",
2935
+ "inheritedFrom": {
2936
+ "name": "FieldNode",
2937
+ "module": "src/FieldNode.ts"
2938
+ }
2939
+ },
2848
2940
  {
2849
2941
  "kind": "method",
2850
2942
  "name": "__applyValueStates",
@@ -3583,6 +3675,15 @@
3583
3675
  "kind": "method",
3584
3676
  "name": "__clear",
3585
3677
  "privacy": "public",
3678
+ "parameters": [
3679
+ {
3680
+ "name": "withoutNotification",
3681
+ "default": "false",
3682
+ "type": {
3683
+ "text": "boolean"
3684
+ }
3685
+ }
3686
+ ],
3586
3687
  "description": "Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n\nA cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.",
3587
3688
  "inheritedFrom": {
3588
3689
  "name": "FieldNode",
@@ -3645,7 +3746,7 @@
3645
3746
  "text": "Meta"
3646
3747
  },
3647
3748
  "privacy": "public",
3648
- "default": "{ readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
3749
+ "default": "{ businessVaueState: ValueState.None, readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
3649
3750
  "description": "Meta data of a field node.",
3650
3751
  "inheritedFrom": {
3651
3752
  "name": "FieldNode",
@@ -3908,6 +4009,16 @@
3908
4009
  "module": "src/FieldNode.ts"
3909
4010
  }
3910
4011
  },
4012
+ {
4013
+ "kind": "method",
4014
+ "name": "__clearAllValueStates",
4015
+ "privacy": "public",
4016
+ "description": "Clears all value states recursively",
4017
+ "inheritedFrom": {
4018
+ "name": "FieldNode",
4019
+ "module": "src/FieldNode.ts"
4020
+ }
4021
+ },
3911
4022
  {
3912
4023
  "kind": "method",
3913
4024
  "name": "__applyValueStates",
@@ -4719,6 +4830,15 @@
4719
4830
  "kind": "method",
4720
4831
  "name": "__clear",
4721
4832
  "privacy": "public",
4833
+ "parameters": [
4834
+ {
4835
+ "name": "withoutNotification",
4836
+ "default": "false",
4837
+ "type": {
4838
+ "text": "boolean"
4839
+ }
4840
+ }
4841
+ ],
4722
4842
  "description": "Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n\nA cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.",
4723
4843
  "inheritedFrom": {
4724
4844
  "name": "FieldNode",
@@ -4781,7 +4901,7 @@
4781
4901
  "text": "Meta"
4782
4902
  },
4783
4903
  "privacy": "public",
4784
- "default": "{ readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
4904
+ "default": "{ businessVaueState: ValueState.None, readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
4785
4905
  "description": "Meta data of a field node.",
4786
4906
  "inheritedFrom": {
4787
4907
  "name": "FieldNode",
@@ -5044,6 +5164,16 @@
5044
5164
  "module": "src/FieldNode.ts"
5045
5165
  }
5046
5166
  },
5167
+ {
5168
+ "kind": "method",
5169
+ "name": "__clearAllValueStates",
5170
+ "privacy": "public",
5171
+ "description": "Clears all value states recursively",
5172
+ "inheritedFrom": {
5173
+ "name": "FieldNode",
5174
+ "module": "src/FieldNode.ts"
5175
+ }
5176
+ },
5047
5177
  {
5048
5178
  "kind": "method",
5049
5179
  "name": "__applyValueStates",
@@ -5803,6 +5933,15 @@
5803
5933
  "kind": "method",
5804
5934
  "name": "__clear",
5805
5935
  "privacy": "public",
5936
+ "parameters": [
5937
+ {
5938
+ "name": "withoutNotification",
5939
+ "default": "false",
5940
+ "type": {
5941
+ "text": "boolean"
5942
+ }
5943
+ }
5944
+ ],
5806
5945
  "description": "Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n\nA cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.",
5807
5946
  "inheritedFrom": {
5808
5947
  "name": "FieldNode",
@@ -5865,7 +6004,7 @@
5865
6004
  "text": "Meta"
5866
6005
  },
5867
6006
  "privacy": "public",
5868
- "default": "{ readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
6007
+ "default": "{ businessVaueState: ValueState.None, readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
5869
6008
  "description": "Meta data of a field node.",
5870
6009
  "inheritedFrom": {
5871
6010
  "name": "FieldNode",
@@ -6128,6 +6267,16 @@
6128
6267
  "module": "src/FieldNode.ts"
6129
6268
  }
6130
6269
  },
6270
+ {
6271
+ "kind": "method",
6272
+ "name": "__clearAllValueStates",
6273
+ "privacy": "public",
6274
+ "description": "Clears all value states recursively",
6275
+ "inheritedFrom": {
6276
+ "name": "FieldNode",
6277
+ "module": "src/FieldNode.ts"
6278
+ }
6279
+ },
6131
6280
  {
6132
6281
  "kind": "method",
6133
6282
  "name": "__applyValueStates",
@@ -6887,6 +7036,15 @@
6887
7036
  "kind": "method",
6888
7037
  "name": "__clear",
6889
7038
  "privacy": "public",
7039
+ "parameters": [
7040
+ {
7041
+ "name": "withoutNotification",
7042
+ "default": "false",
7043
+ "type": {
7044
+ "text": "boolean"
7045
+ }
7046
+ }
7047
+ ],
6890
7048
  "description": "Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n\nA cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.",
6891
7049
  "inheritedFrom": {
6892
7050
  "name": "FieldNode",
@@ -6949,7 +7107,7 @@
6949
7107
  "text": "Meta"
6950
7108
  },
6951
7109
  "privacy": "public",
6952
- "default": "{ readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
7110
+ "default": "{ businessVaueState: ValueState.None, readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
6953
7111
  "description": "Meta data of a field node.",
6954
7112
  "inheritedFrom": {
6955
7113
  "name": "FieldNode",
@@ -7212,6 +7370,16 @@
7212
7370
  "module": "src/FieldNode.ts"
7213
7371
  }
7214
7372
  },
7373
+ {
7374
+ "kind": "method",
7375
+ "name": "__clearAllValueStates",
7376
+ "privacy": "public",
7377
+ "description": "Clears all value states recursively",
7378
+ "inheritedFrom": {
7379
+ "name": "FieldNode",
7380
+ "module": "src/FieldNode.ts"
7381
+ }
7382
+ },
7215
7383
  {
7216
7384
  "kind": "method",
7217
7385
  "name": "__applyValueStates",
@@ -7941,6 +8109,15 @@
7941
8109
  "kind": "method",
7942
8110
  "name": "__clear",
7943
8111
  "privacy": "public",
8112
+ "parameters": [
8113
+ {
8114
+ "name": "withoutNotification",
8115
+ "default": "false",
8116
+ "type": {
8117
+ "text": "boolean"
8118
+ }
8119
+ }
8120
+ ],
7944
8121
  "description": "Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n\nA cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.",
7945
8122
  "inheritedFrom": {
7946
8123
  "name": "FieldNode",
@@ -8021,7 +8198,7 @@
8021
8198
  "text": "Meta"
8022
8199
  },
8023
8200
  "privacy": "public",
8024
- "default": "{ readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
8201
+ "default": "{ businessVaueState: ValueState.None, readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
8025
8202
  "description": "Meta data of a field node.",
8026
8203
  "inheritedFrom": {
8027
8204
  "name": "FieldNode",
@@ -8270,6 +8447,16 @@
8270
8447
  "module": "src/FieldNode.ts"
8271
8448
  }
8272
8449
  },
8450
+ {
8451
+ "kind": "method",
8452
+ "name": "__clearAllValueStates",
8453
+ "privacy": "public",
8454
+ "description": "Clears all value states recursively",
8455
+ "inheritedFrom": {
8456
+ "name": "FieldNode",
8457
+ "module": "src/FieldNode.ts"
8458
+ }
8459
+ },
8273
8460
  {
8274
8461
  "kind": "method",
8275
8462
  "name": "__applyValueStates",
@@ -9145,6 +9332,15 @@
9145
9332
  "kind": "method",
9146
9333
  "name": "__clear",
9147
9334
  "privacy": "public",
9335
+ "parameters": [
9336
+ {
9337
+ "name": "withoutNotification",
9338
+ "default": "false",
9339
+ "type": {
9340
+ "text": "boolean"
9341
+ }
9342
+ }
9343
+ ],
9148
9344
  "description": "Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n\nA cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.",
9149
9345
  "inheritedFrom": {
9150
9346
  "name": "FieldNode",
@@ -9670,7 +9866,7 @@
9670
9866
  "text": "Meta"
9671
9867
  },
9672
9868
  "privacy": "public",
9673
- "default": "{ readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
9869
+ "default": "{ businessVaueState: ValueState.None, readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
9674
9870
  "description": "Meta data of a field node.",
9675
9871
  "inheritedFrom": {
9676
9872
  "name": "FieldNode",
@@ -9896,6 +10092,16 @@
9896
10092
  "module": "src/FieldNode.ts"
9897
10093
  }
9898
10094
  },
10095
+ {
10096
+ "kind": "method",
10097
+ "name": "__clearAllValueStates",
10098
+ "privacy": "public",
10099
+ "description": "Clears all value states recursively",
10100
+ "inheritedFrom": {
10101
+ "name": "FieldNode",
10102
+ "module": "src/FieldNode.ts"
10103
+ }
10104
+ },
9899
10105
  {
9900
10106
  "kind": "method",
9901
10107
  "name": "__applyValueStates",
@@ -10760,6 +10966,15 @@
10760
10966
  "kind": "method",
10761
10967
  "name": "__clear",
10762
10968
  "privacy": "public",
10969
+ "parameters": [
10970
+ {
10971
+ "name": "withoutNotification",
10972
+ "default": "false",
10973
+ "type": {
10974
+ "text": "boolean"
10975
+ }
10976
+ }
10977
+ ],
10763
10978
  "description": "The __clear() method of Map instances removes all elements from this map.",
10764
10979
  "return": {
10765
10980
  "type": {
@@ -10936,7 +11151,7 @@
10936
11151
  "text": "Meta"
10937
11152
  },
10938
11153
  "privacy": "public",
10939
- "default": "{ readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
11154
+ "default": "{ businessVaueState: ValueState.None, readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
10940
11155
  "description": "Meta data of a field node.",
10941
11156
  "inheritedFrom": {
10942
11157
  "name": "FieldNode",
@@ -11175,6 +11390,16 @@
11175
11390
  "module": "src/FieldNode.ts"
11176
11391
  }
11177
11392
  },
11393
+ {
11394
+ "kind": "method",
11395
+ "name": "__clearAllValueStates",
11396
+ "privacy": "public",
11397
+ "description": "Clears all value states recursively",
11398
+ "inheritedFrom": {
11399
+ "name": "FieldNode",
11400
+ "module": "src/FieldNode.ts"
11401
+ }
11402
+ },
11178
11403
  {
11179
11404
  "kind": "method",
11180
11405
  "name": "__applyValueStates",
@@ -11830,6 +12055,15 @@
11830
12055
  "kind": "method",
11831
12056
  "name": "__clear",
11832
12057
  "privacy": "public",
12058
+ "parameters": [
12059
+ {
12060
+ "name": "withoutNotification",
12061
+ "default": "false",
12062
+ "type": {
12063
+ "text": "boolean"
12064
+ }
12065
+ }
12066
+ ],
11833
12067
  "description": "Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n\nA cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.",
11834
12068
  "inheritedFrom": {
11835
12069
  "name": "FieldNode",
@@ -11973,7 +12207,7 @@
11973
12207
  "text": "Meta"
11974
12208
  },
11975
12209
  "privacy": "public",
11976
- "default": "{ readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
12210
+ "default": "{ businessVaueState: ValueState.None, readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
11977
12211
  "description": "Meta data of a field node.",
11978
12212
  "inheritedFrom": {
11979
12213
  "name": "FieldNode",
@@ -12238,6 +12472,16 @@
12238
12472
  "module": "src/FieldNode.ts"
12239
12473
  }
12240
12474
  },
12475
+ {
12476
+ "kind": "method",
12477
+ "name": "__clearAllValueStates",
12478
+ "privacy": "public",
12479
+ "description": "Clears all value states recursively",
12480
+ "inheritedFrom": {
12481
+ "name": "FieldNode",
12482
+ "module": "src/FieldNode.ts"
12483
+ }
12484
+ },
12241
12485
  {
12242
12486
  "kind": "method",
12243
12487
  "name": "__applyValueStates",
@@ -12940,6 +13184,15 @@
12940
13184
  "kind": "method",
12941
13185
  "name": "__clear",
12942
13186
  "privacy": "public",
13187
+ "parameters": [
13188
+ {
13189
+ "name": "withoutNotification",
13190
+ "default": "false",
13191
+ "type": {
13192
+ "text": "boolean"
13193
+ }
13194
+ }
13195
+ ],
12943
13196
  "description": "Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n\nA cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.",
12944
13197
  "inheritedFrom": {
12945
13198
  "name": "FieldNode",
@@ -13089,7 +13342,7 @@
13089
13342
  "text": "Meta"
13090
13343
  },
13091
13344
  "privacy": "public",
13092
- "default": "{ readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
13345
+ "default": "{ businessVaueState: ValueState.None, readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
13093
13346
  "description": "Meta data of a field node.",
13094
13347
  "inheritedFrom": {
13095
13348
  "name": "FieldNode",
@@ -13352,6 +13605,16 @@
13352
13605
  "module": "src/FieldNode.ts"
13353
13606
  }
13354
13607
  },
13608
+ {
13609
+ "kind": "method",
13610
+ "name": "__clearAllValueStates",
13611
+ "privacy": "public",
13612
+ "description": "Clears all value states recursively",
13613
+ "inheritedFrom": {
13614
+ "name": "FieldNode",
13615
+ "module": "src/FieldNode.ts"
13616
+ }
13617
+ },
13355
13618
  {
13356
13619
  "kind": "method",
13357
13620
  "name": "__applyValueStates",
@@ -14165,6 +14428,15 @@
14165
14428
  "kind": "method",
14166
14429
  "name": "__clear",
14167
14430
  "privacy": "public",
14431
+ "parameters": [
14432
+ {
14433
+ "name": "withoutNotification",
14434
+ "default": "false",
14435
+ "type": {
14436
+ "text": "boolean"
14437
+ }
14438
+ }
14439
+ ],
14168
14440
  "description": "Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n\nA cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.",
14169
14441
  "inheritedFrom": {
14170
14442
  "name": "FieldNode",
@@ -14245,7 +14517,7 @@
14245
14517
  "text": "Meta"
14246
14518
  },
14247
14519
  "privacy": "public",
14248
- "default": "{ readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
14520
+ "default": "{ businessVaueState: ValueState.None, readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
14249
14521
  "description": "Meta data of a field node.",
14250
14522
  "inheritedFrom": {
14251
14523
  "name": "FieldNode",
@@ -14494,6 +14766,16 @@
14494
14766
  "module": "src/FieldNode.ts"
14495
14767
  }
14496
14768
  },
14769
+ {
14770
+ "kind": "method",
14771
+ "name": "__clearAllValueStates",
14772
+ "privacy": "public",
14773
+ "description": "Clears all value states recursively",
14774
+ "inheritedFrom": {
14775
+ "name": "FieldNode",
14776
+ "module": "src/FieldNode.ts"
14777
+ }
14778
+ },
14497
14779
  {
14498
14780
  "kind": "method",
14499
14781
  "name": "__applyValueStates",
@@ -15239,6 +15521,15 @@
15239
15521
  "kind": "method",
15240
15522
  "name": "__clear",
15241
15523
  "privacy": "public",
15524
+ "parameters": [
15525
+ {
15526
+ "name": "withoutNotification",
15527
+ "default": "false",
15528
+ "type": {
15529
+ "text": "boolean"
15530
+ }
15531
+ }
15532
+ ],
15242
15533
  "description": "Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n\nA cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.",
15243
15534
  "inheritedFrom": {
15244
15535
  "name": "FieldNode",
@@ -15319,7 +15610,7 @@
15319
15610
  "text": "Meta"
15320
15611
  },
15321
15612
  "privacy": "public",
15322
- "default": "{ readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
15613
+ "default": "{ businessVaueState: ValueState.None, readonly: false, required: false, initialValue: undefined, isPristine: true, isValid: true, valueState: ValueState.None, stateMessage: '', typeName: '', nodeFields: [], isArrayNode: false, isRecursionNode: false, isAnyNode: false, eventListener: new Map<string, []>(), }",
15323
15614
  "description": "Meta data of a field node.",
15324
15615
  "inheritedFrom": {
15325
15616
  "name": "FieldNode",
@@ -15568,6 +15859,16 @@
15568
15859
  "module": "src/FieldNode.ts"
15569
15860
  }
15570
15861
  },
15862
+ {
15863
+ "kind": "method",
15864
+ "name": "__clearAllValueStates",
15865
+ "privacy": "public",
15866
+ "description": "Clears all value states recursively",
15867
+ "inheritedFrom": {
15868
+ "name": "FieldNode",
15869
+ "module": "src/FieldNode.ts"
15870
+ }
15871
+ },
15571
15872
  {
15572
15873
  "kind": "method",
15573
15874
  "name": "__applyValueStates",
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @param {Function} func
3
+ * @param {number} delay
4
+ */
5
+ export default function DebounceBuilder(func: Function, delay?: number, option?: {
6
+ leading: boolean;
7
+ trailing: boolean;
8
+ }): (...args: unknown[]) => void;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @param {Function} func
3
+ * @param {number} delay
4
+ */
5
+ export default function DebounceBuilder(
6
+ // eslint-disable-next-line @typescript-eslint/ban-types
7
+ func, delay = 10, option = { leading: false, trailing: true }) {
8
+ let timer; // same like basic debounce
9
+ let trailingArgs = []; // as we require last arguments for trailing
10
+ if (!option.leading && !option.trailing)
11
+ return () => null; // if both false, return null
12
+ return function debounced(...args) {
13
+ // returns a debounced function
14
+ if (!timer && option.leading) {
15
+ // timer done but leading true
16
+ func(args); // call func
17
+ }
18
+ else {
19
+ trailingArgs = args; // arguments will be the last args
20
+ }
21
+ clearTimeout(timer); // clear timer for avoiding multiple timer instances
22
+ timer = setTimeout(() => {
23
+ if (option.trailing && trailingArgs)
24
+ func(...trailingArgs); // trailingArgs is present and trailing is true
25
+ trailingArgs = []; // reset last arguments
26
+ timer = undefined; // reset timer
27
+ }, delay);
28
+ };
29
+ }
30
+ //# sourceMappingURL=DebounceBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DebounceBuilder.js","sourceRoot":"","sources":["../src/DebounceBuilder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe;AACrC,wDAAwD;AACxD,IAAc,EACd,QAAgB,EAAE,EAClB,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;IAE3C,IAAI,KAA2D,CAAC,CAAC,2BAA2B;IAC5F,IAAI,YAAY,GAAc,EAAE,CAAC,CAAC,4CAA4C;IAE9E,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,6BAA6B;IAEzF,OAAO,SAAS,SAAS,CAAC,GAAG,IAAe;QAC1C,+BAA+B;QAE/B,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC7B,8BAA8B;YAC9B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY;QAC1B,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,IAAI,CAAC,CAAC,kCAAkC;QACzD,CAAC;QAED,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,oDAAoD;QAEzE,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,IAAI,MAAM,CAAC,QAAQ,IAAI,YAAY;gBAAE,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,+CAA+C;YAE3G,YAAY,GAAG,EAAE,CAAC,CAAC,uBAAuB;YAC1C,KAAK,GAAG,SAAS,CAAC,CAAC,cAAc;QACnC,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * @param {Function} func\n * @param {number} delay\n */\nexport default function DebounceBuilder(\n // eslint-disable-next-line @typescript-eslint/ban-types\n func: Function,\n delay: number = 10,\n option = { leading: false, trailing: true }\n) {\n let timer: ReturnType<typeof setTimeout> | number | undefined; // same like basic debounce\n let trailingArgs: unknown[] = []; // as we require last arguments for trailing\n\n if (!option.leading && !option.trailing) return () => null; // if both false, return null\n\n return function debounced(...args: unknown[]) {\n // returns a debounced function\n\n if (!timer && option.leading) {\n // timer done but leading true\n func(args); // call func\n } else {\n trailingArgs = args; // arguments will be the last args\n }\n\n clearTimeout(timer); // clear timer for avoiding multiple timer instances\n\n timer = setTimeout(() => {\n if (option.trailing && trailingArgs) func(...trailingArgs); // trailingArgs is present and trailing is true\n\n trailingArgs = []; // reset last arguments\n timer = undefined; // reset timer\n }, delay);\n };\n}\n"]}
@@ -5,6 +5,7 @@ import { ValueState } from './ValueState.js';
5
5
  import { FieldConstraints } from './FieldConstraints.js';
6
6
  type EventType = 'field-value-changed' | 'this-field-value-changed' | 'this-state-changed' | 'state-changed' | 'validity-changed' | 'array-changed' | 'this-array-changed' | 'map-changed' | 'this-map-changed' | 'model-injected';
7
7
  type Meta = {
8
+ businessVaueState: ValueState;
8
9
  index?: number;
9
10
  oldValue?: unknown;
10
11
  initialValue: unknown;
@@ -159,6 +160,10 @@ export declare abstract class FieldNode {
159
160
  */
160
161
  __getAllStates(): ValueStateSummary[];
161
162
  private ___getAllStates;
163
+ /**
164
+ * Clears all value states recursively
165
+ */
166
+ __clearAllValueStates(): void;
162
167
  /**
163
168
  * Applies a list of states to a node and its children.
164
169
  *
@@ -266,7 +271,7 @@ export declare abstract class FieldNode {
266
271
  *
267
272
  * A cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.
268
273
  */
269
- __clear(): void;
274
+ __clear(withoutNotification?: boolean): void;
270
275
  /**
271
276
  * Helper method to update a skalar / primitive field of a type. Used by the generated models.
272
277
  * Triggers also the validation and clearance, if needed.
package/dist/FieldNode.js CHANGED
@@ -49,6 +49,7 @@ export class FieldNode {
49
49
  * Meta data of a field node.
50
50
  */
51
51
  this.__meta = {
52
+ businessVaueState: ValueState.None,
52
53
  readonly: false,
53
54
  required: false,
54
55
  initialValue: undefined,
@@ -154,7 +155,7 @@ export class FieldNode {
154
155
  * @param literal
155
156
  */
156
157
  __updateWithLiteral(literal) {
157
- this.__clear();
158
+ this.__clear(true);
158
159
  // store injected literal for reset()
159
160
  this.__meta.initialValue = literal;
160
161
  const data = structuredClone(literal);
@@ -320,6 +321,22 @@ export class FieldNode {
320
321
  });
321
322
  return carrier;
322
323
  }
324
+ /**
325
+ * Clears all value states recursively
326
+ */
327
+ __clearAllValueStates() {
328
+ this.__meta.valueState = ValueState.None;
329
+ this.__meta.stateMessage = '';
330
+ this.__childNodes.forEach(child => {
331
+ if (child instanceof FieldNode) {
332
+ child.__clearAllValueStates();
333
+ }
334
+ });
335
+ this.__dispatchEvent(new CustomEvent('state-changed', {
336
+ detail: this,
337
+ bubbles: false,
338
+ }));
339
+ }
323
340
  /**
324
341
  * Applies a list of states to a node and its children.
325
342
  *
@@ -343,6 +360,7 @@ export class FieldNode {
343
360
  fn.__meta.valueState = state.state;
344
361
  fn.__meta.stateMessage = state.message;
345
362
  fn.__meta.isValid = state.state !== ValueState.Error;
363
+ fn.__meta.businessVaueState = state.state;
346
364
  if (fn.__meta.isValid !== validStateBefore) {
347
365
  fn.__dispatchEvent(new CustomEvent('validity-changed', {
348
366
  detail: fn,
@@ -457,11 +475,15 @@ export class FieldNode {
457
475
  const validStateBefore = this.__meta.isValid;
458
476
  // trigger the local listeners
459
477
  this.__validationExecuter(this);
460
- // dispatch to children
461
478
  let allChildrenValid = true;
479
+ // do not go deeper if node is invalid, because business validators can set sub fields
480
+ // dispatch to children
462
481
  this.__childNodes.forEach(child => {
463
482
  if (child instanceof FieldNode) {
464
- child.__validate();
483
+ if (child.__meta.businessVaueState === ValueState.None) {
484
+ // this only check constraints, but business errors are higher order
485
+ child.__validate();
486
+ }
465
487
  if (!child.__isValid) {
466
488
  allChildrenValid = false;
467
489
  }
@@ -604,12 +626,14 @@ export class FieldNode {
604
626
  *
605
627
  * A cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.
606
628
  */
607
- __clear() {
629
+ __clear(withoutNotification = false) {
608
630
  this.__isEmpty = true;
631
+ if (!withoutNotification) {
632
+ this.__notifyFieldValueChange(false);
633
+ }
609
634
  // __clear every childNode too
610
635
  this.__meta.nodeFields.forEach(descriptor => {
611
636
  this[`_${descriptor.fieldName}`].__clear();
612
- this.__notifyFieldValueChange(false);
613
637
  });
614
638
  // todo: set to value to init
615
639
  // todo: set state to None
@@ -666,12 +690,14 @@ export class FieldNode {
666
690
  bubbles: false,
667
691
  }));
668
692
  if (bubbles) {
693
+ // console.log('bubble', this.__meta.typeName)
669
694
  this.__dispatchEvent(new CustomEvent('field-value-changed', {
670
695
  detail: this,
671
696
  bubbles: true,
672
697
  }));
673
698
  }
674
699
  else {
700
+ // console.log('non', this.__meta.typeName)
675
701
  this.__dispatchEvent(new CustomEvent('field-value-changed', {
676
702
  detail: this,
677
703
  bubbles: false,
@@ -707,7 +733,7 @@ export class FieldNode {
707
733
  // trigger the events on current node
708
734
  this.__triggerNodeEvents(event);
709
735
  // go to parent
710
- if (this.__parentNode !== undefined && event.bubbles) {
736
+ if (event.bubbles && this.__parentNode !== undefined) {
711
737
  return this.__parentNode.__dispatchEvent(event);
712
738
  }
713
739
  return event;
@@ -1 +1 @@
1
- {"version":3,"file":"FieldNode.js","sourceRoot":"","sources":["../src/FieldNode.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-classes-per-file, no-use-before-define */\n\n/**\n * notes: i18n is not part of the api anymore\n */\nimport { ValueState } from './ValueState';\nimport { ToString, ValueOf } from './CustomPrototypes';\nimport { CustomConstraints, Validators } from './Validator';\nimport { OPEN_MODELS_OPTIONS } from './OPEN_MODELS_OPTIONS';\nimport { FieldConstraints } from './FieldConstraints';\n\ntype EventType =\n | 'field-value-changed'\n | 'this-field-value-changed'\n | 'this-state-changed'\n | 'state-changed'\n | 'validity-changed'\n | 'array-changed'\n | 'this-array-changed'\n | 'map-changed'\n | 'this-map-changed'\n | 'model-injected'; // fired before field-value-changed and this-field-value-changed\n\ntype Meta = {\n index?: number;\n oldValue?: unknown;\n initialValue: unknown; // Initial value from __updateWithLiteral\n typeName: string; // i.e \"furo.fat.Bool\"\n fieldName?: string; // field name of this node used by its parent node\n valueState: ValueState;\n stateMessage: string;\n nodeFields: FieldDescriptor[];\n readonly: boolean;\n required: boolean;\n isArrayNode: boolean; // set by array and used by baseName resolver to omit the index in the names\n isRecursionNode: boolean;\n isAnyNode: boolean;\n isValid: boolean;\n isPristine: boolean;\n eventListener: Map<\n string,\n {\n callbackfn: CustomEventListener;\n options?: AddEventListenerOptions | boolean;\n }[]\n >;\n};\n\n/**\n * Primitives have always a value field\n */\ninterface IPrimitive extends FieldNode {\n _value: unknown; // contains the value of the FieldNode\n}\n\ninterface CustomEventListener {\n (evt: CustomEvent): void;\n}\n\ntype FieldDescriptor = {\n // camel case name of the field\n fieldName: string;\n // API name of the field, defined by contract.\n jsonName: string;\n // class of the type, must start with cap\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n FieldConstructor: any; // (new(_initData: any, parent?: FieldNode, parentAttributeName?: string) => FieldNode);\n ValueConstructor?: new () => FieldNode; // used by MAP\n constraints?: FieldConstraints;\n};\n\nexport interface ValueStateSummary {\n /**\n * path of the field\n *\n * `fullName` for a violation in the `fullName` value\n * `emailAddresses[1].email` for a violation in the `email` field of the first `emailAddresses` message\n * `emailAddresses[3].type[2]` for a violation in the second `type` value in the third `emailAddresses` message.\n */\n field: string;\n state: ValueState;\n message: string;\n}\n\nexport abstract class FieldNode {\n protected ___isEmpty: boolean = true;\n\n /**\n * Marker for primitive types\n */\n public __isPrimitive: boolean = false;\n\n /**\n * Parent node of a node. This is undefined on root nodes.\n */\n public __parentNode: FieldNode | undefined;\n\n /**\n * Meta data of a field node.\n */\n public __meta: Meta = {\n readonly: false,\n required: false,\n initialValue: undefined,\n isPristine: true,\n isValid: true,\n valueState: ValueState.None,\n stateMessage: '',\n typeName: '',\n nodeFields: [],\n isArrayNode: false,\n isRecursionNode: false,\n isAnyNode: false,\n eventListener: new Map<string, []>(),\n };\n\n private ___rootNode: FieldNode;\n\n private ___readonlyState: Map<FieldNode, boolean> = new Map<\n FieldNode,\n boolean\n >();\n\n /**\n * Root node of a node\n */\n get __rootNode(): FieldNode {\n return this.___rootNode;\n }\n\n /**\n * Root node of a node. Do not set this value by yourself.\n * @param value\n */\n set __rootNode(value: FieldNode) {\n this.___rootNode = value;\n }\n\n /**\n * Empty state of the node\n */\n get __isEmpty() {\n return this.___isEmpty;\n }\n\n /**\n * Empty state of the node\n * @param empty\n */\n set __isEmpty(empty: boolean) {\n if (empty) {\n this.___isEmpty = true;\n } else {\n this.___updateNotEmptyPath();\n this.__rootNode.__meta.isPristine = false;\n }\n }\n\n constructor(\n _initData: undefined,\n parent?: FieldNode,\n parentAttributeName?: string,\n ) {\n this.__parentNode = parent;\n\n if (parent) {\n this.___rootNode = parent.__rootNode;\n } else {\n this.___rootNode = this;\n }\n\n this.__meta.fieldName = parentAttributeName;\n }\n\n /**\n * Get a FieldNode by giving a field path using the proto names for the fields.\n *\n *\n *\n * - `email_addresses[3].type[2]` for the second `type` value in the third `email_addresses` message.\n * - `user.location.street` for the street in location in user.\n *\n * @param {string} deepPath - Path of the field.\n */\n __getFieldNodeByPath(deepPath: string = ''): FieldNode | undefined {\n // replace array paths\n const path = deepPath.replaceAll(/[[\\]]/g, '.').split('.');\n if (path.length > 0 && path[0] !== '') {\n // rest wieder in error reinwerfen\n // eslint-disable-next-line no-param-reassign\n deepPath = path.slice(1).join('.');\n // convert to camel\n const fieldName = this.__toLowerCamelCase(path[0]) as keyof FieldNode;\n\n if (deepPath === '') {\n if (this[fieldName]) {\n return this[fieldName] as FieldNode;\n }\n } else if (this[fieldName]) {\n return (this[fieldName] as FieldNode).__getFieldNodeByPath(deepPath);\n }\n return undefined;\n }\n return undefined;\n }\n\n set __readonly(v: boolean) {\n this.__meta.readonly = v;\n // dispatch to children\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n // store readonly state if\n const cro = this.___readonlyState.get(child);\n if (cro === undefined) {\n this.___readonlyState.set(child, child.__readonly);\n }\n\n if (!child.__readonly && v) {\n // eslint-disable-next-line no-param-reassign\n child.__readonly = v;\n }\n }\n });\n }\n\n get __readonly(): boolean {\n return this.__meta.readonly;\n }\n\n /**\n * Build up the model with the literal type. The literal type matches the interface from ITypeName.\n * @param {} literal - The literal type matches the interface from ITypeName.\n */\n __fromLiteral(literal: unknown) {\n this.__updateWithLiteral(literal);\n // clear the state of the validity and value state\n this.__setModelValidStateTrue();\n\n this.__dispatchEvent(\n new CustomEvent('model-injected', {\n composed: true,\n bubbles: false,\n detail: this,\n }),\n );\n this.__notifyFieldValueChange(true);\n }\n\n private __setModelValidStateTrue() {\n this.__meta.isValid = true;\n this.__setValueState(ValueState.None, ['']);\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n child.__setModelValidStateTrue();\n }\n });\n }\n\n /**\n * Updates the model from literal data, without changing the validity and value state.\n *\n * @param literal\n */\n __updateWithLiteral(literal: unknown) {\n this.__clear();\n // store injected literal for reset()\n this.__meta.initialValue = literal;\n\n const data = structuredClone(literal);\n\n // go through available fields\n this.__meta.nodeFields.forEach(field => {\n // __clear fields which are not available in literal\n // if the field does not exist on the incoming literal, reset or __clear the value on the fieldNode\n // make an undefined on complex types\n if (\n (data as FieldNode)[field.fieldName as keyof FieldNode] === undefined\n ) {\n if (this[`_${field.fieldName}` as keyof FieldNode] !== undefined) {\n // primitives go to their default values\n (\n this[`_${field.fieldName}` as keyof FieldNode] as FieldNode\n ).__clear();\n }\n return;\n }\n\n (\n this[`_${field.fieldName}` as keyof FieldNode] as FieldNode\n ).__updateWithLiteral(\n (data as FieldNode)[field.fieldName as keyof FieldNode],\n );\n\n (\n this[`_${field.fieldName}` as keyof FieldNode] as FieldNode\n ).__meta.isPristine = true;\n });\n\n this.__notifyFieldValueChange(false);\n }\n\n __stringify(): string {\n return JSON.stringify(this.__toJson());\n }\n\n /**\n * Converts the model to a JSON struct wich matches the protobuf spec.\n * If the `UseProtoNames` option is set to false, lowerCamelCase is produced.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __toJson(): any {\n const d: Record<string, unknown> = {};\n this.__meta.nodeFields.forEach(f => {\n // use jsonName if UseProtoNames is set, otherwise convert to lowerCamel without X prefix\n const jsonName = OPEN_MODELS_OPTIONS.UseProtoNames\n ? f.jsonName\n : this.__toLowerCamelCaseWithoutXPrefix(f.jsonName);\n\n if (OPEN_MODELS_OPTIONS.EmitUnpopulated) {\n if (\n (this[`_${f.fieldName}` as keyof FieldNode] as FieldNode).__isEmpty &&\n !(this[`_${f.fieldName}` as keyof FieldNode] as FieldNode)\n .__isPrimitive\n ) {\n d[jsonName] = null;\n } else {\n d[jsonName] = (\n this[`_${f.fieldName}` as keyof FieldNode] as FieldNode\n ).__toJson();\n }\n } else if (\n ((this as FieldNode)[`_${f.fieldName}` as keyof FieldNode] &&\n (!(this[`_${f.fieldName}` as keyof FieldNode] as FieldNode)\n .__isEmpty ||\n (this[`_${f.fieldName}` as keyof FieldNode] as FieldNode).__meta\n .required)) ||\n ((this[`_${f.fieldName}` as keyof FieldNode] as FieldNode)\n .__isPrimitive &&\n OPEN_MODELS_OPTIONS.EmitDefaultValues)\n ) {\n d[jsonName] = (\n this[`_${f.fieldName}` as keyof FieldNode] as FieldNode\n ).__toJson();\n }\n\n return null;\n });\n return d;\n }\n\n /**\n * Build up the model, using the transport Json. If UseProtoNames is set to false, lowerCamelCase is expected.\n *\n * @param {JSON} data - Transport Json\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public __fromJson(data: any) {\n const l = this.__mapJsonToLiteral(data);\n this.__fromLiteral(l);\n }\n\n /**\n * Helper function to create a literal type from a json type\n * @param {JSON} data - Transport Json\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __mapJsonToLiteral(data: any): any {\n const literal: Record<string, unknown> = {};\n // map json to literal\n this.__meta.nodeFields.forEach(f => {\n const jsonName = OPEN_MODELS_OPTIONS.UseProtoNames\n ? f.jsonName\n : this.__toLowerCamelCaseWithoutXPrefix(f.jsonName);\n\n if (data[jsonName] !== undefined) {\n literal[f.fieldName] = (\n this[`_${f.fieldName}` as keyof FieldNode] as FieldNode\n ).__mapJsonToLiteral(data[jsonName]);\n }\n });\n return literal;\n }\n\n /**\n * Converts the model to a literal type. The literal type matches the interface from ITypeName.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public __toLiteral(): any {\n const d: Record<string, unknown> = {};\n this.__meta.nodeFields.forEach(f => {\n if (\n this[`_${f.fieldName}` as keyof FieldNode] &&\n (!(this[`_${f.fieldName}` as keyof FieldNode] as FieldNode).__isEmpty ||\n (this[`_${f.fieldName}` as keyof FieldNode] as FieldNode).__meta\n .required)\n ) {\n d[f.fieldName] = (\n this[`_${f.fieldName}` as keyof FieldNode] as FieldNode\n ).__toLiteral();\n }\n return null;\n });\n return d;\n }\n\n get __fieldPath(): string {\n const parts: string[] = [];\n this.___pathBuilder(parts);\n return parts.join('.').replaceAll('.[', '['); // replace for array paths\n }\n\n ___pathBuilder(parts: string[]): string[] {\n // the root node does not have a fieldName\n if (this.__meta.fieldName !== undefined) {\n parts.unshift(\n OPEN_MODELS_OPTIONS.UseProtoNames\n ? this.__toSnakeCase(this.__meta.fieldName)\n : this.__meta.fieldName,\n );\n this.__parentNode?.___pathBuilder(parts);\n }\n return parts;\n }\n\n get __label(): string {\n return OPEN_MODELS_OPTIONS.labelFormatter(`${this.__getBaseName()}.label`);\n }\n\n get __placeholder(): string {\n return OPEN_MODELS_OPTIONS.labelFormatter(\n `${this.__getBaseName()}.placeholder`,\n );\n }\n\n get __ariaDescription(): string {\n return OPEN_MODELS_OPTIONS.labelFormatter(\n `${this.__getBaseName()}.description`,\n );\n }\n\n /**\n * Returns a list of all states of a node and its children.\n *\n * ```json\n * [\n * {\n * \"field\": \"id\",\n * \"state\": \"Error\",\n * \"message\": \"This field is invalid\"\n * },\n * {\n * \"field\": \"display_name\",\n * \"state\": \"Error\",\n * \"message\": \"This field is invalid\"\n * }\n * ]\n * ```\n */\n // eslint-disable-next-line class-methods-use-this\n public __getAllStates(): ValueStateSummary[] {\n return this.___getAllStates([]);\n }\n\n private ___getAllStates(carrier: ValueStateSummary[]): ValueStateSummary[] {\n if (this.__meta.valueState !== ValueState.None) {\n carrier.push({\n field: this.__fieldPath,\n state: this.__meta.valueState,\n message: this.__meta.stateMessage,\n });\n }\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n child.___getAllStates(carrier);\n }\n });\n return carrier;\n }\n\n /**\n * Applies a list of states to a node and its children.\n *\n * Keep in mind, that the message must be already translated.\n *\n * ```json\n * {\n * \"field\": \"id\",\n * \"state\": \"Error\",\n * \"message\": \"This field is invalid\"\n *}\n *\n * ```\n *\n */\n public __applyValueStates(...states: ValueStateSummary[]) {\n states.forEach(state => {\n const fn = this.__getFieldNodeByPath(state.field);\n if (fn !== undefined) {\n const validStateBefore = fn.__meta.isValid;\n fn.__meta.valueState = state.state;\n fn.__meta.stateMessage = state.message;\n fn.__meta.isValid = state.state !== ValueState.Error;\n if (fn.__meta.isValid !== validStateBefore) {\n fn.__dispatchEvent(\n new CustomEvent('validity-changed', {\n detail: fn,\n bubbles: true,\n }),\n );\n }\n\n fn.__dispatchEvent(\n new CustomEvent('state-changed', {\n detail: fn,\n bubbles: false,\n }),\n );\n }\n });\n }\n\n /**\n * Returns the valid state of a node.\n * - A node is valid when all children are valid.\n * - A node is valid when freshly initialized, even when some children have invalid values.\n *\n * use `validate()` to be sure to have the correct validity state.\n *\n * Use __meta.StateMessage to receive the state of a node. The `__meta.StateMessage` is only available on an explicit field, where the validity state is populated upwards.\n */\n public get __isValid(): boolean {\n return this.__meta.isValid;\n }\n\n /**\n * set the validity of the node. This will trigger no events, just set the __meta.isValid value.\n *\n * Use this in your customValidators.\n * @param valid\n */\n public __setValidState(valid: boolean): void {\n this.__meta.isValid = valid;\n }\n\n /**\n * Initialized fields are pristine as long nothing changes inside the model.\n *\n * Use this on rootNodes only.\n */\n public get __isPristine(): boolean {\n return this.__meta.isPristine;\n }\n\n /**\n * The toString() method of Object instances returns a string representing this object. This method is meant to be overridden by `CustomPrototypes.ToString`.\n * If no `CustomPrototypes` is set, it will try to find a display_name attribute on the node and uses that for the output.\n *\n * If there is no display_name `[object TypeName]` is returned.\n */\n public toString(): string {\n const ts = ToString.get(this.__meta.typeName || '');\n if (ts) {\n return ts(this);\n }\n const found = this.__meta.nodeFields.find(\n fieldDescriptor => fieldDescriptor.fieldName === 'displayName',\n );\n if (\n found &&\n (this['displayName' as keyof FieldNode] as FieldNode).__meta.typeName ===\n 'primitives.STRING'\n ) {\n return (this['displayName' as keyof FieldNode] as FieldNode).toString();\n }\n return `[object ${this.__meta.typeName}]`;\n }\n\n /**\n * The valueOf() method of Object instances converts the this value to an object.\n * This method is meant to be overridden by derived objects for custom type conversion logic.\n */\n public valueOf(): number {\n const ts = ValueOf.get(this.__meta.typeName || '');\n if (ts) {\n return ts(this);\n }\n return NaN;\n }\n\n /**\n * Helper method to build up labels, placeholders,...\n * @protected\n */\n protected __getBaseName(): string {\n const parts: string[] = [];\n this.___fieldNameBuilder(parts);\n return parts.join('.');\n }\n\n /**\n * Helper method to construct the __fieldPath\n * @param parts\n * @protected\n */\n protected ___fieldNameBuilder(parts: string[]): string[] {\n // stop if parent node has same typeName, we are on a recursion.\n if (this.__meta.isRecursionNode || this.__meta.isAnyNode) {\n parts.unshift(this.__meta.typeName as string);\n } else {\n // do not add the index to the baseName on Array fields\n if (!this.__meta.isArrayNode) {\n // the root node does not have a fieldName, so we use the typeName\n parts.unshift(\n // eslint-disable-next-line no-nested-ternary\n this.__meta.fieldName\n ? OPEN_MODELS_OPTIONS.UseProtoNames\n ? this.__toSnakeCase(this.__meta.fieldName)\n : this.__meta.fieldName\n : this.__meta.typeName || '',\n );\n }\n this.__parentNode?.___fieldNameBuilder(parts);\n }\n return parts;\n }\n\n /**\n * Validate the node and all child nodes of it.\n */\n public __validate() {\n const validStateBefore = this.__meta.isValid;\n // trigger the local listeners\n this.__validationExecuter(this);\n\n // dispatch to children\n let allChildrenValid = true;\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n child.__validate();\n if (!child.__isValid) {\n allChildrenValid = false;\n }\n }\n });\n this.__meta.isValid = allChildrenValid && this.__isValid;\n if (this.__meta.isValid !== validStateBefore) {\n this.__dispatchEvent(\n new CustomEvent('validity-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n }\n\n /**\n * Validates all parents of an element. This is done when you set a value on any child/attribute of a node directly\n * @param {FieldNode} node - Any FieldNode\n */\n protected __validateBottomUp(node: FieldNode) {\n // \"this\" is usually the parent node of \"node\"\n this.__validationExecuter(node);\n // climb up and check children state to define the own state of \"this\"\n node.__climbUpValidation();\n }\n\n /**\n * Validates all parent nodes if a sub-field was changed.\n * @protected\n */\n protected __climbUpValidation() {\n const validStateBefore = this.__meta.isValid;\n this.__validationExecuter(this);\n\n let allChildrenValid = true;\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n if (!child.__isValid) {\n allChildrenValid = false;\n }\n }\n });\n // if any child is not valid, this is also not valid\n this.__meta.isValid = allChildrenValid && this.__isValid;\n if (this.__meta.isValid !== validStateBefore) {\n this.__dispatchEvent(\n new CustomEvent('validity-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n\n if (this.__parentNode) {\n this.__parentNode.__climbUpValidation();\n }\n }\n\n /**\n * Additional \"constraint\" checker for primitive types, i.e. INT32 can only range from -2147483648 to 2147483647, but js uses always a float64 to handle numbers\n * @protected\n */\n // eslint-disable-next-line class-methods-use-this\n protected __checkTypeBoundaries(): string[] | undefined {\n return undefined;\n }\n\n /**\n * Executes the validation process.\n * @param node\n * @protected\n */\n // eslint-disable-next-line class-methods-use-this\n protected __validationExecuter(node: FieldNode) {\n const validatorFunc = Validators.get(node.__meta.typeName);\n const customConstraintsFunc = CustomConstraints.get(node.__meta.typeName);\n const fieldConstraints = node.__getConstraints();\n let constraintMessage: undefined | string[];\n\n constraintMessage = this.__checkTypeBoundaries();\n\n if (\n validatorFunc ||\n fieldConstraints ||\n customConstraintsFunc ||\n constraintMessage\n ) {\n if (fieldConstraints && !customConstraintsFunc) {\n constraintMessage = node.__checkConstraints(fieldConstraints);\n }\n if (customConstraintsFunc) {\n constraintMessage = customConstraintsFunc(node);\n }\n if (validatorFunc) {\n validatorFunc(node);\n } else if (constraintMessage === undefined) {\n node.__setValueState(ValueState.None, ['']);\n }\n if (constraintMessage !== undefined) {\n node.__setValueState(ValueState.Error, constraintMessage);\n }\n } else {\n node.__setValueState(ValueState.None, ['']);\n }\n }\n\n /**\n * Receives all constraints of a node. Use this in your custom validators or components.\n */\n public __getConstraints(): FieldConstraints | undefined {\n if (this.__meta.isArrayNode && this.__parentNode?.__parentNode) {\n const fieldDescriptor =\n this.__parentNode.__parentNode.__meta.nodeFields.find(\n f => f.fieldName === this.__parentNode!.__meta.fieldName,\n );\n return fieldDescriptor?.constraints;\n }\n\n if (this.__parentNode) {\n const fieldDescriptor = this.__parentNode.__meta.nodeFields.find(\n f => f.fieldName === this.__meta.fieldName,\n );\n return fieldDescriptor?.constraints;\n }\n return undefined;\n }\n\n /**\n * Set the value state\n * @param {ValueState} state - The state of the node.\n * @param {string[]} message - Description for the formatter.\n */\n __setValueState(state: ValueState, message: string[]) {\n this.__meta.valueState = state;\n this.__meta.stateMessage =\n OPEN_MODELS_OPTIONS.valueStateMessageFormatter(message);\n // set invalid on error state\n // the event is sent from ...\n this.__meta.isValid = state !== ValueState.Error;\n\n this.__dispatchEvent(\n new CustomEvent('state-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n\n /**\n * Resets the node to the last inserted literal or to the initial state.\n * // todo: reset to default values not just the empty state\n */\n public __reset() {\n if (this.__meta.initialValue !== undefined) {\n this.__updateWithLiteral(this.__meta.initialValue);\n return;\n }\n // else re init every field downwards\n this.__clear();\n }\n\n /**\n * Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n *\n * A cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.\n */\n public __clear() {\n this.__isEmpty = true;\n // __clear every childNode too\n this.__meta.nodeFields.forEach(descriptor => {\n (\n this[`_${descriptor.fieldName}` as keyof FieldNode] as FieldNode\n ).__clear();\n this.__notifyFieldValueChange(false);\n });\n // todo: set to value to init\n // todo: set state to None\n // todo: set valid to true\n }\n\n /**\n * Helper method to update a skalar / primitive field of a type. Used by the generated models.\n * Triggers also the validation and clearance, if needed.\n *\n * @param {FieldNode} targetNode - The field of a FieldNode\n * @param {string | boolean | number} value - The value you want to set\n * @protected\n */\n // eslint-disable-next-line class-methods-use-this\n protected __PrimitivesSetter(targetNode: IPrimitive, value: unknown) {\n // do not do anything if current value equals val\n if (targetNode._value !== value) {\n targetNode._value = value; // eslint-disable-line no-param-reassign\n\n targetNode.__isEmpty = false; // eslint-disable-line no-param-reassign\n this.__validateBottomUp(targetNode);\n targetNode.__notifyFieldValueChange(true);\n }\n }\n\n /**\n * Helper method to update a field of a type. Used by the generated models.\n * Triggers also the validation and clearance, if needed.\n *\n * @param {FieldNode} targetNode - The field of a FieldNode\n * @param {} literalData - The literal type matches the interface from ITypeName.\n * @protected\n */\n // eslint-disable-next-line class-methods-use-this\n protected __TypeSetter(\n targetNode: FieldNode,\n literalData: unknown | undefined | null,\n ) {\n if (literalData === undefined || literalData === null) {\n targetNode.__clear();\n this.__validateBottomUp(targetNode);\n targetNode.__notifyFieldValueChange(true);\n return;\n }\n\n targetNode.__updateWithLiteral(literalData); // keep the references by getting the values\n // this is the parent of the target_node\n targetNode.___updateNotEmptyPath();\n this.__validateBottomUp(targetNode);\n targetNode.__notifyFieldValueChange(true);\n }\n\n /**\n * Notifies field changes\n * @param bubbles\n * @protected\n */\n protected __notifyFieldValueChange(bubbles?: boolean) {\n this.__dispatchEvent(\n new CustomEvent('this-field-value-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n if (bubbles) {\n this.__dispatchEvent(\n new CustomEvent('field-value-changed', {\n detail: this,\n bubbles: true,\n }),\n );\n } else {\n this.__dispatchEvent(\n new CustomEvent('field-value-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n }\n\n /**\n * Returns the child nodes of a node.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public get __childNodes(): any[] {\n return this.__meta.nodeFields.map(\n field => this[field.fieldName as keyof FieldNode],\n );\n }\n\n /**\n * Broadcast an event to all child nodes of a field node.\n * @param event\n */\n __broadcastEvent(event: CustomEvent) {\n // trigger the local listeners\n this.__triggerNodeEvents(event);\n\n // dispatch to children\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n child.__broadcastEvent(event);\n }\n });\n }\n\n /**\n * Dispatches a custom event on a FieldNode\n * @param {CustomEvent} event - A generic custom event.\n */\n __dispatchEvent(event: CustomEvent): CustomEvent {\n // trigger the events on current node\n this.__triggerNodeEvents(event);\n\n // go to parent\n if (this.__parentNode !== undefined && event.bubbles) {\n return this.__parentNode.__dispatchEvent(event);\n }\n return event;\n }\n\n /**\n * Helper method to invoke/execute the event on the current node\n * @param event\n * @protected\n */\n protected __triggerNodeEvents(event: CustomEvent<FieldNode>) {\n if (\n this.__meta.eventListener.has(event.type) &&\n this.__meta.eventListener.get(event.type)!.length > 0\n ) {\n this.__meta.eventListener\n .get(event.type)!\n .forEach((t, i, listenerArray) => {\n t.callbackfn(event);\n if (\n t.options !== undefined &&\n typeof t.options !== 'boolean' &&\n t.options.once\n ) {\n // eslint-disable-next-line no-param-reassign\n delete listenerArray[i];\n }\n });\n }\n }\n\n /**\n * Add a handler to a node\n * @param {string} type - A case-sensitive string representing the event type to listen for.\n * @param {function} listener - The object that receives a notification (an object that implements the Event interface) when an event of the specified type occurs. This must be null, an object with a handleEvent() method, or a JavaScript function. See The event listener callback for details on the callback itself.\n * @param {} options - An object that specifies characteristics about the event listener. \\n\\nThe available option is `once:boolean`\n */\n public __addEventListener(\n type: EventType,\n listener: CustomEventListener,\n options?: boolean | AddEventListenerOptions,\n ): void {\n if (!this.__meta.eventListener.has(type)) {\n this.__meta.eventListener.set(type, []);\n }\n this.__meta.eventListener\n .get(type)!\n .push({ callbackfn: listener, options });\n }\n\n // add a listener for a custom event, defined and triggered by yourself\n // this could be something like 'focus-requested'\n public __addCustomEventListener(\n type: string,\n handler: CustomEventListener,\n options?: boolean | AddEventListenerOptions,\n ): void {\n if (!this.__meta.eventListener.has(type)) {\n this.__meta.eventListener.set(type, []);\n }\n this.__meta.eventListener.get(type)!.push({ callbackfn: handler, options });\n }\n\n /**\n * Removes the handler from a node\n * @param type\n * @param handler\n * @param options\n */\n public __removeEventListener(\n type: EventType,\n handler: CustomEventListener,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options?: boolean | EventListenerOptions,\n ): void {\n if (this.__meta.eventListener.has(type)) {\n this.__meta.eventListener.set(\n type,\n this.__meta.eventListener\n .get(type)!\n .filter(e => e.callbackfn !== handler),\n );\n }\n }\n\n /**\n * Removes the handler from a node\n * @param type\n * @param handler\n * @param options\n */\n public __removeCustomEventListener(\n type: string,\n handler: CustomEventListener,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options?: boolean | EventListenerOptions,\n ): void {\n if (this.__meta.eventListener.has(type)) {\n this.__meta.eventListener.set(\n type,\n this.__meta.eventListener\n .get(type)!\n .filter(e => e.callbackfn !== handler),\n );\n }\n }\n\n /**\n * if some child is not empty, set isEmpty to false, all the way up to the root node\n * @private\n */\n protected ___updateNotEmptyPath() {\n this.___isEmpty = false;\n if (this.__parentNode !== undefined && this.__parentNode.__isEmpty) {\n this.__parentNode.___updateNotEmptyPath();\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n protected __checkConstraints(\n fieldConstraints: FieldConstraints,\n ): string[] | undefined {\n if (fieldConstraints.required) {\n if (this.__isEmpty) {\n return ['constraint.violation.required'];\n }\n }\n return undefined;\n }\n\n // eslint-disable-next-line class-methods-use-this\n private __toLowerCamelCase(string: string) {\n if (OPEN_MODELS_OPTIONS.UseProtoNames) {\n const [start, ...rest] = (\n string[0] === '_' ? string.replace('_', 'X') : string\n ).split('_');\n return (\n start +\n rest\n .map(s => {\n if (s.length === 0) return '';\n return s[0].toUpperCase() + s.slice(1);\n })\n .join('')\n );\n }\n return string;\n }\n\n // eslint-disable-next-line class-methods-use-this\n private __toLowerCamelCaseWithoutXPrefix(string: string) {\n if (OPEN_MODELS_OPTIONS.UseProtoNames) {\n const [start, ...rest] = (\n string[0] === '_' ? string.replace('_', 'X') : string\n ).split('_');\n return (\n start +\n rest\n .map(s => {\n if (s.length === 0) return '';\n return s[0].toUpperCase() + s.slice(1);\n })\n .join('')\n );\n }\n return string;\n }\n\n // eslint-disable-next-line class-methods-use-this\n private __toSnakeCase(string: string): string {\n return string\n .split(/(?=[A-Z])/)\n .map(word => word.toLowerCase())\n .join('_');\n }\n}\n"]}
1
+ {"version":3,"file":"FieldNode.js","sourceRoot":"","sources":["../src/FieldNode.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-classes-per-file, no-use-before-define */\n\n/**\n * notes: i18n is not part of the api anymore\n */\nimport { ValueState } from './ValueState';\nimport { ToString, ValueOf } from './CustomPrototypes';\nimport { CustomConstraints, Validators } from './Validator';\nimport { OPEN_MODELS_OPTIONS } from './OPEN_MODELS_OPTIONS';\nimport { FieldConstraints } from './FieldConstraints';\n\ntype EventType =\n | 'field-value-changed'\n | 'this-field-value-changed'\n | 'this-state-changed'\n | 'state-changed'\n | 'validity-changed'\n | 'array-changed'\n | 'this-array-changed'\n | 'map-changed'\n | 'this-map-changed'\n | 'model-injected'; // fired before field-value-changed and this-field-value-changed\n\ntype Meta = {\n businessVaueState: ValueState;\n index?: number;\n oldValue?: unknown;\n initialValue: unknown; // Initial value from __updateWithLiteral\n typeName: string; // i.e \"furo.fat.Bool\"\n fieldName?: string; // field name of this node used by its parent node\n valueState: ValueState;\n stateMessage: string;\n nodeFields: FieldDescriptor[];\n readonly: boolean;\n required: boolean;\n isArrayNode: boolean; // set by array and used by baseName resolver to omit the index in the names\n isRecursionNode: boolean;\n isAnyNode: boolean;\n isValid: boolean;\n isPristine: boolean;\n eventListener: Map<\n string,\n {\n callbackfn: CustomEventListener;\n options?: AddEventListenerOptions | boolean;\n }[]\n >;\n};\n\n/**\n * Primitives have always a value field\n */\ninterface IPrimitive extends FieldNode {\n _value: unknown; // contains the value of the FieldNode\n}\n\ninterface CustomEventListener {\n (evt: CustomEvent): void;\n}\n\ntype FieldDescriptor = {\n // camel case name of the field\n fieldName: string;\n // API name of the field, defined by contract.\n jsonName: string;\n // class of the type, must start with cap\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n FieldConstructor: any; // (new(_initData: any, parent?: FieldNode, parentAttributeName?: string) => FieldNode);\n ValueConstructor?: new () => FieldNode; // used by MAP\n constraints?: FieldConstraints;\n};\n\nexport interface ValueStateSummary {\n /**\n * path of the field\n *\n * `fullName` for a violation in the `fullName` value\n * `emailAddresses[1].email` for a violation in the `email` field of the first `emailAddresses` message\n * `emailAddresses[3].type[2]` for a violation in the second `type` value in the third `emailAddresses` message.\n */\n field: string;\n state: ValueState;\n message: string;\n}\n\nexport abstract class FieldNode {\n protected ___isEmpty: boolean = true;\n\n /**\n * Marker for primitive types\n */\n public __isPrimitive: boolean = false;\n\n /**\n * Parent node of a node. This is undefined on root nodes.\n */\n public __parentNode: FieldNode | undefined;\n\n /**\n * Meta data of a field node.\n */\n public __meta: Meta = {\n businessVaueState: ValueState.None,\n readonly: false,\n required: false,\n initialValue: undefined,\n isPristine: true,\n isValid: true,\n valueState: ValueState.None,\n stateMessage: '',\n typeName: '',\n nodeFields: [],\n isArrayNode: false,\n isRecursionNode: false,\n isAnyNode: false,\n eventListener: new Map<string, []>(),\n };\n\n private ___rootNode: FieldNode;\n\n private ___readonlyState: Map<FieldNode, boolean> = new Map<\n FieldNode,\n boolean\n >();\n\n /**\n * Root node of a node\n */\n get __rootNode(): FieldNode {\n return this.___rootNode;\n }\n\n /**\n * Root node of a node. Do not set this value by yourself.\n * @param value\n */\n set __rootNode(value: FieldNode) {\n this.___rootNode = value;\n }\n\n /**\n * Empty state of the node\n */\n get __isEmpty() {\n return this.___isEmpty;\n }\n\n /**\n * Empty state of the node\n * @param empty\n */\n set __isEmpty(empty: boolean) {\n if (empty) {\n this.___isEmpty = true;\n } else {\n this.___updateNotEmptyPath();\n this.__rootNode.__meta.isPristine = false;\n }\n }\n\n constructor(\n _initData: undefined,\n parent?: FieldNode,\n parentAttributeName?: string,\n ) {\n this.__parentNode = parent;\n\n if (parent) {\n this.___rootNode = parent.__rootNode;\n } else {\n this.___rootNode = this;\n }\n\n this.__meta.fieldName = parentAttributeName;\n }\n\n /**\n * Get a FieldNode by giving a field path using the proto names for the fields.\n *\n *\n *\n * - `email_addresses[3].type[2]` for the second `type` value in the third `email_addresses` message.\n * - `user.location.street` for the street in location in user.\n *\n * @param {string} deepPath - Path of the field.\n */\n __getFieldNodeByPath(deepPath: string = ''): FieldNode | undefined {\n // replace array paths\n const path = deepPath.replaceAll(/[[\\]]/g, '.').split('.');\n if (path.length > 0 && path[0] !== '') {\n // rest wieder in error reinwerfen\n // eslint-disable-next-line no-param-reassign\n deepPath = path.slice(1).join('.');\n // convert to camel\n const fieldName = this.__toLowerCamelCase(path[0]) as keyof FieldNode;\n\n if (deepPath === '') {\n if (this[fieldName]) {\n return this[fieldName] as FieldNode;\n }\n } else if (this[fieldName]) {\n return (this[fieldName] as FieldNode).__getFieldNodeByPath(deepPath);\n }\n return undefined;\n }\n return undefined;\n }\n\n set __readonly(v: boolean) {\n this.__meta.readonly = v;\n // dispatch to children\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n // store readonly state if\n const cro = this.___readonlyState.get(child);\n if (cro === undefined) {\n this.___readonlyState.set(child, child.__readonly);\n }\n\n if (!child.__readonly && v) {\n // eslint-disable-next-line no-param-reassign\n child.__readonly = v;\n }\n }\n });\n }\n\n get __readonly(): boolean {\n return this.__meta.readonly;\n }\n\n /**\n * Build up the model with the literal type. The literal type matches the interface from ITypeName.\n * @param {} literal - The literal type matches the interface from ITypeName.\n */\n __fromLiteral(literal: unknown) {\n this.__updateWithLiteral(literal);\n // clear the state of the validity and value state\n this.__setModelValidStateTrue();\n\n this.__dispatchEvent(\n new CustomEvent('model-injected', {\n composed: true,\n bubbles: false,\n detail: this,\n }),\n );\n this.__notifyFieldValueChange(true);\n }\n\n private __setModelValidStateTrue() {\n this.__meta.isValid = true;\n this.__setValueState(ValueState.None, ['']);\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n child.__setModelValidStateTrue();\n }\n });\n }\n\n /**\n * Updates the model from literal data, without changing the validity and value state.\n *\n * @param literal\n */\n __updateWithLiteral(literal: unknown) {\n this.__clear(true);\n // store injected literal for reset()\n this.__meta.initialValue = literal;\n\n const data = structuredClone(literal);\n\n // go through available fields\n this.__meta.nodeFields.forEach(field => {\n // __clear fields which are not available in literal\n // if the field does not exist on the incoming literal, reset or __clear the value on the fieldNode\n // make an undefined on complex types\n if (\n (data as FieldNode)[field.fieldName as keyof FieldNode] === undefined\n ) {\n if (this[`_${field.fieldName}` as keyof FieldNode] !== undefined) {\n // primitives go to their default values\n (\n this[`_${field.fieldName}` as keyof FieldNode] as FieldNode\n ).__clear();\n }\n return;\n }\n\n (\n this[`_${field.fieldName}` as keyof FieldNode] as FieldNode\n ).__updateWithLiteral(\n (data as FieldNode)[field.fieldName as keyof FieldNode],\n );\n\n\n (\n this[`_${field.fieldName}` as keyof FieldNode] as FieldNode\n ).__meta.isPristine = true;\n\n });\n\n this.__notifyFieldValueChange(false);\n }\n\n __stringify(): string {\n return JSON.stringify(this.__toJson());\n }\n\n /**\n * Converts the model to a JSON struct wich matches the protobuf spec.\n * If the `UseProtoNames` option is set to false, lowerCamelCase is produced.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __toJson(): any {\n const d: Record<string, unknown> = {};\n this.__meta.nodeFields.forEach(f => {\n // use jsonName if UseProtoNames is set, otherwise convert to lowerCamel without X prefix\n const jsonName = OPEN_MODELS_OPTIONS.UseProtoNames\n ? f.jsonName\n : this.__toLowerCamelCaseWithoutXPrefix(f.jsonName);\n\n if (OPEN_MODELS_OPTIONS.EmitUnpopulated) {\n if (\n (this[`_${f.fieldName}` as keyof FieldNode] as FieldNode).__isEmpty &&\n !(this[`_${f.fieldName}` as keyof FieldNode] as FieldNode)\n .__isPrimitive\n ) {\n d[jsonName] = null;\n } else {\n d[jsonName] = (\n this[`_${f.fieldName}` as keyof FieldNode] as FieldNode\n ).__toJson();\n }\n } else if (\n ((this as FieldNode)[`_${f.fieldName}` as keyof FieldNode] &&\n (!(this[`_${f.fieldName}` as keyof FieldNode] as FieldNode)\n .__isEmpty ||\n (this[`_${f.fieldName}` as keyof FieldNode] as FieldNode).__meta\n .required)) ||\n ((this[`_${f.fieldName}` as keyof FieldNode] as FieldNode)\n .__isPrimitive &&\n OPEN_MODELS_OPTIONS.EmitDefaultValues)\n ) {\n d[jsonName] = (\n this[`_${f.fieldName}` as keyof FieldNode] as FieldNode\n ).__toJson();\n }\n\n return null;\n });\n return d;\n }\n\n /**\n * Build up the model, using the transport Json. If UseProtoNames is set to false, lowerCamelCase is expected.\n *\n * @param {JSON} data - Transport Json\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public __fromJson(data: any) {\n const l = this.__mapJsonToLiteral(data);\n this.__fromLiteral(l);\n }\n\n /**\n * Helper function to create a literal type from a json type\n * @param {JSON} data - Transport Json\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __mapJsonToLiteral(data: any): any {\n const literal: Record<string, unknown> = {};\n // map json to literal\n this.__meta.nodeFields.forEach(f => {\n const jsonName = OPEN_MODELS_OPTIONS.UseProtoNames\n ? f.jsonName\n : this.__toLowerCamelCaseWithoutXPrefix(f.jsonName);\n\n if (data[jsonName] !== undefined) {\n literal[f.fieldName] = (\n this[`_${f.fieldName}` as keyof FieldNode] as FieldNode\n ).__mapJsonToLiteral(data[jsonName]);\n }\n });\n return literal;\n }\n\n /**\n * Converts the model to a literal type. The literal type matches the interface from ITypeName.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public __toLiteral(): any {\n const d: Record<string, unknown> = {};\n this.__meta.nodeFields.forEach(f => {\n if (\n this[`_${f.fieldName}` as keyof FieldNode] &&\n (!(this[`_${f.fieldName}` as keyof FieldNode] as FieldNode).__isEmpty ||\n (this[`_${f.fieldName}` as keyof FieldNode] as FieldNode).__meta\n .required)\n ) {\n d[f.fieldName] = (\n this[`_${f.fieldName}` as keyof FieldNode] as FieldNode\n ).__toLiteral();\n }\n return null;\n });\n return d;\n }\n\n get __fieldPath(): string {\n const parts: string[] = [];\n this.___pathBuilder(parts);\n return parts.join('.').replaceAll('.[', '['); // replace for array paths\n }\n\n ___pathBuilder(parts: string[]): string[] {\n // the root node does not have a fieldName\n if (this.__meta.fieldName !== undefined) {\n parts.unshift(\n OPEN_MODELS_OPTIONS.UseProtoNames\n ? this.__toSnakeCase(this.__meta.fieldName)\n : this.__meta.fieldName,\n );\n this.__parentNode?.___pathBuilder(parts);\n }\n return parts;\n }\n\n get __label(): string {\n return OPEN_MODELS_OPTIONS.labelFormatter(`${this.__getBaseName()}.label`);\n }\n\n get __placeholder(): string {\n return OPEN_MODELS_OPTIONS.labelFormatter(\n `${this.__getBaseName()}.placeholder`,\n );\n }\n\n get __ariaDescription(): string {\n return OPEN_MODELS_OPTIONS.labelFormatter(\n `${this.__getBaseName()}.description`,\n );\n }\n\n /**\n * Returns a list of all states of a node and its children.\n *\n * ```json\n * [\n * {\n * \"field\": \"id\",\n * \"state\": \"Error\",\n * \"message\": \"This field is invalid\"\n * },\n * {\n * \"field\": \"display_name\",\n * \"state\": \"Error\",\n * \"message\": \"This field is invalid\"\n * }\n * ]\n * ```\n */\n // eslint-disable-next-line class-methods-use-this\n public __getAllStates(): ValueStateSummary[] {\n return this.___getAllStates([]);\n }\n\n private ___getAllStates(carrier: ValueStateSummary[]): ValueStateSummary[] {\n if (this.__meta.valueState !== ValueState.None) {\n carrier.push({\n field: this.__fieldPath,\n state: this.__meta.valueState,\n message: this.__meta.stateMessage,\n });\n }\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n child.___getAllStates(carrier);\n }\n });\n return carrier;\n }\n\n /**\n * Clears all value states recursively\n */\n public __clearAllValueStates() {\n this.__meta.valueState = ValueState.None;\n this.__meta.stateMessage = '';\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n child.__clearAllValueStates();\n }\n });\n\n this.__dispatchEvent(\n new CustomEvent('state-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n\n /**\n * Applies a list of states to a node and its children.\n *\n * Keep in mind, that the message must be already translated.\n *\n * ```json\n * {\n * \"field\": \"id\",\n * \"state\": \"Error\",\n * \"message\": \"This field is invalid\"\n *}\n *\n * ```\n *\n */\n public __applyValueStates(...states: ValueStateSummary[]) {\n states.forEach(state => {\n const fn = this.__getFieldNodeByPath(state.field);\n if (fn !== undefined) {\n const validStateBefore = fn.__meta.isValid;\n fn.__meta.valueState = state.state;\n fn.__meta.stateMessage = state.message;\n fn.__meta.isValid = state.state !== ValueState.Error;\n fn.__meta.businessVaueState = state.state;\n if (fn.__meta.isValid !== validStateBefore) {\n fn.__dispatchEvent(\n new CustomEvent('validity-changed', {\n detail: fn,\n bubbles: true,\n }),\n );\n }\n\n fn.__dispatchEvent(\n new CustomEvent('state-changed', {\n detail: fn,\n bubbles: false,\n }),\n );\n }\n });\n }\n\n /**\n * Returns the valid state of a node.\n * - A node is valid when all children are valid.\n * - A node is valid when freshly initialized, even when some children have invalid values.\n *\n * use `validate()` to be sure to have the correct validity state.\n *\n * Use __meta.StateMessage to receive the state of a node. The `__meta.StateMessage` is only available on an explicit field, where the validity state is populated upwards.\n */\n public get __isValid(): boolean {\n return this.__meta.isValid;\n }\n\n /**\n * set the validity of the node. This will trigger no events, just set the __meta.isValid value.\n *\n * Use this in your customValidators.\n * @param valid\n */\n public __setValidState(valid: boolean): void {\n this.__meta.isValid = valid;\n }\n\n /**\n * Initialized fields are pristine as long nothing changes inside the model.\n *\n * Use this on rootNodes only.\n */\n public get __isPristine(): boolean {\n return this.__meta.isPristine;\n }\n\n /**\n * The toString() method of Object instances returns a string representing this object. This method is meant to be overridden by `CustomPrototypes.ToString`.\n * If no `CustomPrototypes` is set, it will try to find a display_name attribute on the node and uses that for the output.\n *\n * If there is no display_name `[object TypeName]` is returned.\n */\n public toString(): string {\n const ts = ToString.get(this.__meta.typeName || '');\n if (ts) {\n return ts(this);\n }\n const found = this.__meta.nodeFields.find(\n fieldDescriptor => fieldDescriptor.fieldName === 'displayName',\n );\n if (\n found &&\n (this['displayName' as keyof FieldNode] as FieldNode).__meta.typeName ===\n 'primitives.STRING'\n ) {\n return (this['displayName' as keyof FieldNode] as FieldNode).toString();\n }\n return `[object ${this.__meta.typeName}]`;\n }\n\n /**\n * The valueOf() method of Object instances converts the this value to an object.\n * This method is meant to be overridden by derived objects for custom type conversion logic.\n */\n public valueOf(): number {\n const ts = ValueOf.get(this.__meta.typeName || '');\n if (ts) {\n return ts(this);\n }\n return NaN;\n }\n\n /**\n * Helper method to build up labels, placeholders,...\n * @protected\n */\n protected __getBaseName(): string {\n const parts: string[] = [];\n this.___fieldNameBuilder(parts);\n return parts.join('.');\n }\n\n /**\n * Helper method to construct the __fieldPath\n * @param parts\n * @protected\n */\n protected ___fieldNameBuilder(parts: string[]): string[] {\n // stop if parent node has same typeName, we are on a recursion.\n if (this.__meta.isRecursionNode || this.__meta.isAnyNode) {\n parts.unshift(this.__meta.typeName as string);\n } else {\n // do not add the index to the baseName on Array fields\n if (!this.__meta.isArrayNode) {\n // the root node does not have a fieldName, so we use the typeName\n parts.unshift(\n // eslint-disable-next-line no-nested-ternary\n this.__meta.fieldName\n ? OPEN_MODELS_OPTIONS.UseProtoNames\n ? this.__toSnakeCase(this.__meta.fieldName)\n : this.__meta.fieldName\n : this.__meta.typeName || '',\n );\n }\n this.__parentNode?.___fieldNameBuilder(parts);\n }\n return parts;\n }\n\n /**\n * Validate the node and all child nodes of it.\n */\n public __validate() {\n const validStateBefore = this.__meta.isValid;\n // trigger the local listeners\n this.__validationExecuter(this);\n\n let allChildrenValid = true;\n // do not go deeper if node is invalid, because business validators can set sub fields\n\n // dispatch to children\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n if (child.__meta.businessVaueState === ValueState.None) {\n // this only check constraints, but business errors are higher order\n child.__validate();\n }\n\n if (!child.__isValid) {\n allChildrenValid = false;\n }\n }\n });\n\n this.__meta.isValid = allChildrenValid && this.__isValid;\n if (this.__meta.isValid !== validStateBefore) {\n this.__dispatchEvent(\n new CustomEvent('validity-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n }\n\n /**\n * Validates all parents of an element. This is done when you set a value on any child/attribute of a node directly\n * @param {FieldNode} node - Any FieldNode\n */\n protected __validateBottomUp(node: FieldNode) {\n // \"this\" is usually the parent node of \"node\"\n this.__validationExecuter(node);\n // climb up and check children state to define the own state of \"this\"\n node.__climbUpValidation();\n }\n\n /**\n * Validates all parent nodes if a sub-field was changed.\n * @protected\n */\n protected __climbUpValidation() {\n const validStateBefore = this.__meta.isValid;\n this.__validationExecuter(this);\n\n let allChildrenValid = true;\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n if (!child.__isValid) {\n allChildrenValid = false;\n }\n }\n });\n // if any child is not valid, this is also not valid\n this.__meta.isValid = allChildrenValid && this.__isValid;\n if (this.__meta.isValid !== validStateBefore) {\n this.__dispatchEvent(\n new CustomEvent('validity-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n\n if (this.__parentNode) {\n this.__parentNode.__climbUpValidation();\n }\n }\n\n /**\n * Additional \"constraint\" checker for primitive types, i.e. INT32 can only range from -2147483648 to 2147483647, but js uses always a float64 to handle numbers\n * @protected\n */\n // eslint-disable-next-line class-methods-use-this\n protected __checkTypeBoundaries(): string[] | undefined {\n return undefined;\n }\n\n /**\n * Executes the validation process.\n * @param node\n * @protected\n */\n // eslint-disable-next-line class-methods-use-this\n protected __validationExecuter(node: FieldNode) {\n const validatorFunc = Validators.get(node.__meta.typeName);\n const customConstraintsFunc = CustomConstraints.get(node.__meta.typeName);\n const fieldConstraints = node.__getConstraints();\n let constraintMessage: undefined | string[];\n\n constraintMessage = this.__checkTypeBoundaries();\n\n if (\n validatorFunc ||\n fieldConstraints ||\n customConstraintsFunc ||\n constraintMessage\n ) {\n if (fieldConstraints && !customConstraintsFunc) {\n constraintMessage = node.__checkConstraints(fieldConstraints);\n }\n if (customConstraintsFunc) {\n constraintMessage = customConstraintsFunc(node);\n }\n if (validatorFunc) {\n validatorFunc(node);\n } else if (constraintMessage === undefined) {\n node.__setValueState(ValueState.None, ['']);\n }\n if (constraintMessage !== undefined) {\n node.__setValueState(ValueState.Error, constraintMessage);\n }\n } else {\n node.__setValueState(ValueState.None, ['']);\n }\n }\n\n /**\n * Receives all constraints of a node. Use this in your custom validators or components.\n */\n public __getConstraints(): FieldConstraints | undefined {\n if (this.__meta.isArrayNode && this.__parentNode?.__parentNode) {\n const fieldDescriptor =\n this.__parentNode.__parentNode.__meta.nodeFields.find(\n f => f.fieldName === this.__parentNode!.__meta.fieldName,\n );\n return fieldDescriptor?.constraints;\n }\n\n if (this.__parentNode) {\n const fieldDescriptor = this.__parentNode.__meta.nodeFields.find(\n f => f.fieldName === this.__meta.fieldName,\n );\n return fieldDescriptor?.constraints;\n }\n return undefined;\n }\n\n /**\n * Set the value state\n * @param {ValueState} state - The state of the node.\n * @param {string[]} message - Description for the formatter.\n */\n __setValueState(state: ValueState, message: string[]) {\n this.__meta.valueState = state;\n this.__meta.stateMessage =\n OPEN_MODELS_OPTIONS.valueStateMessageFormatter(message);\n // set invalid on error state\n // the event is sent from ...\n this.__meta.isValid = state !== ValueState.Error;\n\n this.__dispatchEvent(\n new CustomEvent('state-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n\n /**\n * Resets the node to the last inserted literal or to the initial state.\n * // todo: reset to default values not just the empty state\n */\n public __reset() {\n if (this.__meta.initialValue !== undefined) {\n this.__updateWithLiteral(this.__meta.initialValue);\n return;\n }\n // else re init every field downwards\n this.__clear();\n }\n\n /**\n * Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n *\n * A cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.\n */\n public __clear(withoutNotification:boolean = false) {\n this.__isEmpty = true;\n if(!withoutNotification){\n this.__notifyFieldValueChange(false);\n }\n\n // __clear every childNode too\n this.__meta.nodeFields.forEach(descriptor => {\n (\n this[`_${descriptor.fieldName}` as keyof FieldNode] as FieldNode\n ).__clear();\n });\n\n // todo: set to value to init\n // todo: set state to None\n // todo: set valid to true\n }\n\n /**\n * Helper method to update a skalar / primitive field of a type. Used by the generated models.\n * Triggers also the validation and clearance, if needed.\n *\n * @param {FieldNode} targetNode - The field of a FieldNode\n * @param {string | boolean | number} value - The value you want to set\n * @protected\n */\n // eslint-disable-next-line class-methods-use-this\n protected __PrimitivesSetter(targetNode: IPrimitive, value: unknown) {\n // do not do anything if current value equals val\n if (targetNode._value !== value) {\n targetNode._value = value; // eslint-disable-line no-param-reassign\n\n targetNode.__isEmpty = false; // eslint-disable-line no-param-reassign\n this.__validateBottomUp(targetNode);\n targetNode.__notifyFieldValueChange(true);\n }\n }\n\n /**\n * Helper method to update a field of a type. Used by the generated models.\n * Triggers also the validation and clearance, if needed.\n *\n * @param {FieldNode} targetNode - The field of a FieldNode\n * @param {} literalData - The literal type matches the interface from ITypeName.\n * @protected\n */\n // eslint-disable-next-line class-methods-use-this\n protected __TypeSetter(\n targetNode: FieldNode,\n literalData: unknown | undefined | null,\n ) {\n if (literalData === undefined || literalData === null) {\n targetNode.__clear();\n this.__validateBottomUp(targetNode);\n targetNode.__notifyFieldValueChange(true);\n return;\n }\n\n targetNode.__updateWithLiteral(literalData); // keep the references by getting the values\n // this is the parent of the target_node\n targetNode.___updateNotEmptyPath();\n this.__validateBottomUp(targetNode);\n targetNode.__notifyFieldValueChange(true);\n }\n\n /**\n * Notifies field changes\n * @param bubbles\n * @protected\n */\n protected __notifyFieldValueChange(bubbles?: boolean) {\n\n this.__dispatchEvent(\n new CustomEvent('this-field-value-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n\n if (bubbles) {\n // console.log('bubble', this.__meta.typeName)\n this.__dispatchEvent(\n new CustomEvent('field-value-changed', {\n detail: this,\n bubbles: true,\n }),\n );\n } else {\n // console.log('non', this.__meta.typeName)\n this.__dispatchEvent(\n new CustomEvent('field-value-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n }\n\n /**\n * Returns the child nodes of a node.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public get __childNodes(): any[] {\n return this.__meta.nodeFields.map(\n field => this[field.fieldName as keyof FieldNode],\n );\n }\n\n /**\n * Broadcast an event to all child nodes of a field node.\n * @param event\n */\n __broadcastEvent(event: CustomEvent) {\n // trigger the local listeners\n this.__triggerNodeEvents(event);\n\n // dispatch to children\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n child.__broadcastEvent(event);\n }\n });\n }\n\n /**\n * Dispatches a custom event on a FieldNode\n * @param {CustomEvent} event - A generic custom event.\n */\n __dispatchEvent(event: CustomEvent): CustomEvent {\n // trigger the events on current node\n this.__triggerNodeEvents(event);\n\n // go to parent\n if (event.bubbles && this.__parentNode !== undefined ) {\n return this.__parentNode.__dispatchEvent(event);\n }\n return event;\n }\n\n /**\n * Helper method to invoke/execute the event on the current node\n * @param event\n * @protected\n */\n protected __triggerNodeEvents(event: CustomEvent<FieldNode>) {\n if (\n this.__meta.eventListener.has(event.type) &&\n this.__meta.eventListener.get(event.type)!.length > 0\n ) {\n this.__meta.eventListener\n .get(event.type)!\n .forEach((t, i, listenerArray) => {\n t.callbackfn(event);\n if (\n t.options !== undefined &&\n typeof t.options !== 'boolean' &&\n t.options.once\n ) {\n // eslint-disable-next-line no-param-reassign\n delete listenerArray[i];\n }\n });\n }\n }\n\n /**\n * Add a handler to a node\n * @param {string} type - A case-sensitive string representing the event type to listen for.\n * @param {function} listener - The object that receives a notification (an object that implements the Event interface) when an event of the specified type occurs. This must be null, an object with a handleEvent() method, or a JavaScript function. See The event listener callback for details on the callback itself.\n * @param {} options - An object that specifies characteristics about the event listener. \\n\\nThe available option is `once:boolean`\n */\n public __addEventListener(\n type: EventType,\n listener: CustomEventListener,\n options?: boolean | AddEventListenerOptions,\n ): void {\n if (!this.__meta.eventListener.has(type)) {\n this.__meta.eventListener.set(type, []);\n }\n this.__meta.eventListener\n .get(type)!\n .push({ callbackfn: listener, options });\n }\n\n // add a listener for a custom event, defined and triggered by yourself\n // this could be something like 'focus-requested'\n public __addCustomEventListener(\n type: string,\n handler: CustomEventListener,\n options?: boolean | AddEventListenerOptions,\n ): void {\n if (!this.__meta.eventListener.has(type)) {\n this.__meta.eventListener.set(type, []);\n }\n this.__meta.eventListener.get(type)!.push({ callbackfn: handler, options });\n }\n\n /**\n * Removes the handler from a node\n * @param type\n * @param handler\n * @param options\n */\n public __removeEventListener(\n type: EventType,\n handler: CustomEventListener,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options?: boolean | EventListenerOptions,\n ): void {\n if (this.__meta.eventListener.has(type)) {\n this.__meta.eventListener.set(\n type,\n this.__meta.eventListener\n .get(type)!\n .filter(e => e.callbackfn !== handler),\n );\n }\n }\n\n /**\n * Removes the handler from a node\n * @param type\n * @param handler\n * @param options\n */\n public __removeCustomEventListener(\n type: string,\n handler: CustomEventListener,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options?: boolean | EventListenerOptions,\n ): void {\n if (this.__meta.eventListener.has(type)) {\n this.__meta.eventListener.set(\n type,\n this.__meta.eventListener\n .get(type)!\n .filter(e => e.callbackfn !== handler),\n );\n }\n }\n\n /**\n * if some child is not empty, set isEmpty to false, all the way up to the root node\n * @private\n */\n protected ___updateNotEmptyPath() {\n this.___isEmpty = false;\n if (this.__parentNode !== undefined && this.__parentNode.__isEmpty) {\n this.__parentNode.___updateNotEmptyPath();\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n protected __checkConstraints(\n fieldConstraints: FieldConstraints,\n ): string[] | undefined {\n if (fieldConstraints.required) {\n if (this.__isEmpty) {\n return ['constraint.violation.required'];\n }\n }\n return undefined;\n }\n\n // eslint-disable-next-line class-methods-use-this\n private __toLowerCamelCase(string: string) {\n if (OPEN_MODELS_OPTIONS.UseProtoNames) {\n const [start, ...rest] = (\n string[0] === '_' ? string.replace('_', 'X') : string\n ).split('_');\n return (\n start +\n rest\n .map(s => {\n if (s.length === 0) return '';\n return s[0].toUpperCase() + s.slice(1);\n })\n .join('')\n );\n }\n return string;\n }\n\n // eslint-disable-next-line class-methods-use-this\n private __toLowerCamelCaseWithoutXPrefix(string: string) {\n if (OPEN_MODELS_OPTIONS.UseProtoNames) {\n const [start, ...rest] = (\n string[0] === '_' ? string.replace('_', 'X') : string\n ).split('_');\n return (\n start +\n rest\n .map(s => {\n if (s.length === 0) return '';\n return s[0].toUpperCase() + s.slice(1);\n })\n .join('')\n );\n }\n return string;\n }\n\n // eslint-disable-next-line class-methods-use-this\n private __toSnakeCase(string: string): string {\n return string\n .split(/(?=[A-Z])/)\n .map(word => word.toLowerCase())\n .join('_');\n }\n}\n"]}
@@ -4,13 +4,14 @@ export class RpcStatusApplier {
4
4
  if (status === undefined || status.details === undefined) {
5
5
  return;
6
6
  }
7
- const localizedMessage = status.details.filter(lm => lm['@type'] === 'type.googleapis.com/google.rpc.LocalizedMessage')[0];
7
+ target.__clearAllValueStates();
8
+ const localizedMessage = status.details.filter(lm => lm['@type'].includes('/google.rpc.LocalizedMessage'))[0];
8
9
  if (localizedMessage) {
9
10
  target.__setValueState(ValueState.Error, [
10
11
  localizedMessage.message,
11
12
  ]);
12
13
  }
13
- const badRequest = status.details.filter(lm => lm['@type'] === 'type.googleapis.com/google.rpc.BadRequest')[0];
14
+ const badRequest = status.details.filter(lm => lm['@type'].includes('/google.rpc.BadRequest'))[0];
14
15
  if (badRequest) {
15
16
  const v = badRequest.field_violations.map(violation => ({
16
17
  field: violation.field,
@@ -1 +1 @@
1
- {"version":3,"file":"RpcStatusApplier.js","sourceRoot":"","sources":["../src/RpcStatusApplier.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAU1C,MAAM,OAAO,gBAAgB;IACpB,MAAM,CAAC,KAAK,CAAC,MAAiB,EAAE,MAAe;QACpD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACzD,OAAO;QACT,CAAC;QACD,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAC5C,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,iDAAiD,CACxE,CAAC,CAAC,CAAC,CAAC;QACL,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE;gBACvC,gBAAgB,CAAC,OAAiB;aACnC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CACtC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,2CAA2C,CAClE,CAAC,CAAC,CAAC,CAAC;QACL,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,GAAI,UAAU,CAAC,gBAA8B,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACrE,KAAK,EAAG,SAAoC,CAAC,KAAK;gBAClD,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,OAAO,EAAG,SAAoC,CAAC,WAAW;aAC3D,CAAC,CAAwB,CAAC;YAE3B,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF","sourcesContent":["import { FieldNode, ValueStateSummary } from './FieldNode';\nimport { ValueState } from './ValueState';\nimport { IAny } from './index';\n\ninterface IStatus {\n error: string;\n message: string;\n code: number;\n details: IAny[];\n}\n\nexport class RpcStatusApplier {\n public static apply(target: FieldNode, status: IStatus) {\n if (status === undefined || status.details === undefined) {\n return;\n }\n const localizedMessage = status.details.filter(\n lm => lm['@type'] === 'type.googleapis.com/google.rpc.LocalizedMessage',\n )[0];\n if (localizedMessage) {\n target.__setValueState(ValueState.Error, [\n localizedMessage.message as string,\n ]);\n }\n const badRequest = status.details.filter(\n lm => lm['@type'] === 'type.googleapis.com/google.rpc.BadRequest',\n )[0];\n if (badRequest) {\n const v = (badRequest.field_violations as unknown[]).map(violation => ({\n field: (violation as Record<string, string>).field,\n state: ValueState.Error,\n message: (violation as Record<string, string>).description,\n })) as ValueStateSummary[];\n\n target.__applyValueStates(...v);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"RpcStatusApplier.js","sourceRoot":"","sources":["../src/RpcStatusApplier.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAU1C,MAAM,OAAO,gBAAgB;IACpB,MAAM,CAAC,KAAK,CAAC,MAAiB,EAAE,MAAe;QACpD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACzD,OAAO;QACT,CAAC;QAED,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAE/B,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAClD,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CACrD,CAAC,CAAC,CAAC,CAAC;QACL,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE;gBACvC,gBAAgB,CAAC,OAAiB;aACnC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAC5C,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAC/C,CAAC,CAAC,CAAC,CAAC;QACL,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,GAAI,UAAU,CAAC,gBAA8B,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACrE,KAAK,EAAG,SAAoC,CAAC,KAAK;gBAClD,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,OAAO,EAAG,SAAoC,CAAC,WAAW;aAC3D,CAAC,CAAwB,CAAC;YAE3B,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF","sourcesContent":["import { FieldNode, ValueStateSummary } from './FieldNode';\nimport { ValueState } from './ValueState';\nimport { IAny } from './index';\n\ninterface IStatus {\n error: string;\n message: string;\n code: number;\n details: IAny[];\n}\n\nexport class RpcStatusApplier {\n public static apply(target: FieldNode, status: IStatus) {\n if (status === undefined || status.details === undefined) {\n return;\n }\n\n target.__clearAllValueStates();\n\n const localizedMessage = status.details.filter(lm =>\n lm['@type'].includes('/google.rpc.LocalizedMessage'),\n )[0];\n if (localizedMessage) {\n target.__setValueState(ValueState.Error, [\n localizedMessage.message as string,\n ]);\n }\n const badRequest = status.details.filter(lm =>\n lm['@type'].includes('/google.rpc.BadRequest'),\n )[0];\n if (badRequest) {\n const v = (badRequest.field_violations as unknown[]).map(violation => ({\n field: (violation as Record<string, string>).field,\n state: ValueState.Error,\n message: (violation as Record<string, string>).description,\n })) as ValueStateSummary[];\n\n target.__applyValueStates(...v);\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "homepage": "https://github.com/eclipse/eclipsefuro-web/tree/main/packages",
6
6
  "repository": "git@github.com:eclipse/eclipsefuro-web.git",
7
7
  "author": "eclipse furo",
8
- "version": "0.0.0-alpha.7",
8
+ "version": "0.0.0-alpha.9",
9
9
  "type": "module",
10
10
  "main": "dist/index.js",
11
11
  "module": "dist/index.js",