xdbc 1.0.217 → 1.0.219

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.
Files changed (120) hide show
  1. package/.gitattributes +16 -8
  2. package/.vscode/settings.json +3 -3
  3. package/.vscode/tasks.json +23 -23
  4. package/ASSESSMENT.md +249 -0
  5. package/README.md +538 -408
  6. package/__tests__/DBC/AE.test.ts +62 -62
  7. package/__tests__/DBC/ARRAY.test.ts +91 -91
  8. package/__tests__/DBC/DEFINED.test.ts +53 -53
  9. package/__tests__/DBC/DOM.test.ts +786 -0
  10. package/__tests__/DBC/Decorators.test.ts +367 -367
  11. package/__tests__/DBC/EQ.test.ts +13 -13
  12. package/__tests__/DBC/GREATER.test.ts +31 -31
  13. package/__tests__/DBC/HasAttribute.test.ts +60 -60
  14. package/__tests__/DBC/IF.test.ts +62 -62
  15. package/__tests__/DBC/INSTANCE.test.ts +13 -13
  16. package/__tests__/DBC/JSON.OP.test.ts +47 -47
  17. package/__tests__/DBC/JSON.Parse.test.ts +17 -17
  18. package/__tests__/DBC/OR.test.ts +14 -14
  19. package/__tests__/DBC/PLAIN_OBJECT.test.ts +109 -109
  20. package/__tests__/DBC/REGEX.test.ts +17 -17
  21. package/__tests__/DBC/TYPE.test.ts +13 -13
  22. package/__tests__/DBC/UNDEFINED.test.ts +45 -45
  23. package/__tests__/DBC/ZOD.test.ts +54 -54
  24. package/__tests__/DBC/onInfringement.test.ts +262 -0
  25. package/biome.json +45 -40
  26. package/dist/DBC/AE.js +172 -0
  27. package/dist/DBC/ARR/PLAIN_OBJECT.d.ts +0 -3
  28. package/dist/DBC/ARR/PLAIN_OBJECT.js +95 -0
  29. package/dist/DBC/ARRAY.d.ts +0 -3
  30. package/dist/DBC/ARRAY.js +90 -0
  31. package/dist/DBC/COMPARISON/GREATER.js +21 -0
  32. package/dist/DBC/COMPARISON/GREATER_OR_EQUAL.js +21 -0
  33. package/dist/DBC/COMPARISON/LESS.js +21 -0
  34. package/dist/DBC/COMPARISON/LESS_OR_EQUAL.js +21 -0
  35. package/dist/DBC/COMPARISON.js +98 -0
  36. package/dist/DBC/DEFINED.js +87 -0
  37. package/dist/DBC/DOM.d.ts +123 -0
  38. package/dist/DBC/DOM.js +362 -0
  39. package/dist/DBC/EQ/DIFFERENT.js +34 -0
  40. package/dist/DBC/EQ.js +101 -0
  41. package/dist/DBC/GREATER.js +99 -0
  42. package/dist/DBC/HasAttribute.js +101 -0
  43. package/dist/DBC/IF.js +96 -0
  44. package/dist/DBC/INSTANCE.js +122 -0
  45. package/dist/DBC/JSON.OP.js +120 -0
  46. package/dist/DBC/JSON.Parse.js +104 -0
  47. package/dist/DBC/OR.js +125 -0
  48. package/dist/DBC/REGEX.js +136 -0
  49. package/dist/DBC/TYPE.js +112 -0
  50. package/dist/DBC/UNDEFINED.js +87 -0
  51. package/dist/DBC/ZOD.js +99 -0
  52. package/dist/DBC.d.ts +18 -4
  53. package/dist/DBC.js +645 -0
  54. package/dist/Demo.d.ts +10 -0
  55. package/dist/Demo.js +713 -0
  56. package/dist/Test.html +18 -0
  57. package/dist/bundle.js +6140 -405
  58. package/dist/index.d.ts +22 -0
  59. package/dist/index.html +18 -0
  60. package/dist/index.js +22 -0
  61. package/docs/assets/highlight.css +22 -22
  62. package/docs/assets/icons.js +17 -17
  63. package/docs/assets/main.js +60 -60
  64. package/docs/assets/style.css +1640 -1640
  65. package/docs/classes/DBC.DBC.html +98 -98
  66. package/docs/classes/DBC_AE.AE.html +160 -160
  67. package/docs/classes/DBC_EQ.EQ.html +131 -131
  68. package/docs/classes/DBC_GREATER.GREATER.html +139 -139
  69. package/docs/classes/DBC_INSTANCE.INSTANCE.html +130 -130
  70. package/docs/classes/DBC_JSON.OP.JSON_OP.html +138 -138
  71. package/docs/classes/DBC_JSON.Parse.JSON_Parse.html +129 -129
  72. package/docs/classes/DBC_OR.OR.html +137 -137
  73. package/docs/classes/DBC_REGEX.REGEX.html +136 -136
  74. package/docs/classes/DBC_TYPE.TYPE.html +130 -130
  75. package/docs/classes/Demo.Demo.html +14 -14
  76. package/docs/hierarchy.html +1 -1
  77. package/docs/index.html +1 -1
  78. package/docs/modules/DBC.html +1 -1
  79. package/docs/modules/DBC_AE.html +1 -1
  80. package/docs/modules/DBC_EQ.html +1 -1
  81. package/docs/modules/DBC_GREATER.html +1 -1
  82. package/docs/modules/DBC_INSTANCE.html +1 -1
  83. package/docs/modules/DBC_JSON.OP.html +1 -1
  84. package/docs/modules/DBC_JSON.Parse.html +1 -1
  85. package/docs/modules/DBC_OR.html +1 -1
  86. package/docs/modules/DBC_REGEX.html +1 -1
  87. package/docs/modules/DBC_TYPE.html +1 -1
  88. package/docs/modules/Demo.html +1 -1
  89. package/jest.config.js +32 -32
  90. package/package.json +71 -55
  91. package/src/DBC/AE.ts +269 -288
  92. package/src/DBC/ARR/PLAIN_OBJECT.ts +122 -133
  93. package/src/DBC/ARRAY.ts +117 -127
  94. package/src/DBC/COMPARISON/GREATER.ts +41 -46
  95. package/src/DBC/COMPARISON/GREATER_OR_EQUAL.ts +41 -45
  96. package/src/DBC/COMPARISON/LESS.ts +41 -45
  97. package/src/DBC/COMPARISON/LESS_OR_EQUAL.ts +41 -45
  98. package/src/DBC/COMPARISON.ts +149 -159
  99. package/src/DBC/DEFINED.ts +117 -122
  100. package/src/DBC/DOM.ts +453 -0
  101. package/src/DBC/EQ/DIFFERENT.ts +51 -57
  102. package/src/DBC/EQ.ts +154 -163
  103. package/src/DBC/HasAttribute.ts +149 -154
  104. package/src/DBC/IF.ts +173 -179
  105. package/src/DBC/INSTANCE.ts +168 -171
  106. package/src/DBC/JSON.OP.ts +178 -186
  107. package/src/DBC/JSON.Parse.ts +150 -157
  108. package/src/DBC/OR.ts +183 -187
  109. package/src/DBC/REGEX.ts +195 -196
  110. package/src/DBC/TYPE.ts +142 -149
  111. package/src/DBC/UNDEFINED.ts +115 -117
  112. package/src/DBC/ZOD.ts +130 -135
  113. package/src/DBC.ts +902 -904
  114. package/src/Demo.ts +537 -404
  115. package/src/index.ts +22 -0
  116. package/tsconfig.json +18 -18
  117. package/tsconfig.test.json +7 -7
  118. package/typedoc.json +16 -16
  119. package/webpack.config.js +27 -27
  120. package/Assessment.md +0 -507
package/src/DBC/AE.ts CHANGED
@@ -1,288 +1,269 @@
1
- import { DBC } from "../DBC";
2
- /**
3
- * A {@link DBC } defining that all elements of an {@link object }s have to fulfill
4
- * a given {@link object }'s check-method (**( toCheck : any ) => boolean | string**).
5
- *
6
- * @remarks
7
- * Maintainer: Callari, Salvatore (XDBC@WaXCode.net) */
8
- export class AE extends DBC {
9
- // #region Condition checking.
10
- /**
11
- * Checks each element of the **value**-{@link Array < any >} against the given **condition**, if it is one. If it is not
12
- * the **value** itself will be checked.
13
- *
14
- * @param condition The { check: (toCheck: any) => boolean | string } to check the **value** against.
15
- * @param value Either **value**-{@link Array < any >}, which's elements will be checked, or the value to be
16
- * checked itself.
17
- * @param index If specified with **idxEnd** being undefined, this {@link Number } will be seen as the index of
18
- * the value-{@link Array }'s element to check. If value isn't an {@link Array } this parameter
19
- * will not have any effect.
20
- * With **idxEnd** not undefined this parameter indicates the beginning of the span of elements to
21
- * check within the value-{@link Array }.
22
- * @param idxEnd Indicates the last element's index (including) of the span of value-{@link Array } elements to check.
23
- * Setting this parameter to -1 specifies that all value-{@link Array }'s elements beginning from the
24
- * specified **index** shall be checked.
25
- *
26
- * @returns As soon as the **condition** returns a {@link string }, instead of TRUE, the returned string. TRUE if the
27
- * **condition** never returns a {@link string}. */
28
- public static checkAlgorithm(
29
- condition: {
30
- check: (toCheck: unknown | null | undefined) => boolean | string;
31
- },
32
- value: object,
33
- index: number | undefined,
34
- idxEnd: number | undefined,
35
- ): boolean | string {
36
- if (Array.isArray(value)) {
37
- if (index !== undefined && idxEnd === undefined) {
38
- if (index > -1 && index < value.length) {
39
- const result = condition.check(value[index]);
40
-
41
- if (typeof result === "string") {
42
- return `Violating-Arrayelement at index "${index}" with value "${value[index]}". ${result}`;
43
- }
44
- }
45
-
46
- return true; // In order for optional parameter to not cause an error if they are omitted.
47
- }
48
-
49
- const ending =
50
- idxEnd !== undefined
51
- ? idxEnd !== -1
52
- ? idxEnd + 1
53
- : (value as []).length
54
- : (value as []).length;
55
-
56
- for (let i = index ? index : 0; i < ending; i++) {
57
- const result = condition.check(value[i]);
58
-
59
- if (result !== true) {
60
- return `Violating-Arrayelement at index ${i}. ${result}`;
61
- }
62
- }
63
- } else {
64
- return condition.check(value);
65
- }
66
-
67
- return true;
68
- }
69
- /**
70
- * A parameter-decorator factory using the {@link AE.checkAlgorithm } with either multiple or a single one
71
- * of the **realConditions** to check the tagged parameter-value against with.
72
- * When specifying an **index** and the tagged parameter's **value** is an {@link Array }, the **realConditions** apply to the
73
- * element at the specified **index**.
74
- * If the {@link Array } is too short the currently processed { check: (toCheck: any) => boolean | string } of
75
- * **realConditions** will be verified to TRUE automatically, considering optional parameters.
76
- * If an **index** is specified but the tagged parameter's value isn't an array, the **index** is treated as being undefined.
77
- * If **index** is undefined and the tagged parameter's value is an {@link Array } each element of it will be checked
78
- * against the **realConditions**.
79
- *
80
- * @param realConditions Either one or more { check: (toCheck: any) => boolean | string } to check the tagged parameter-value
81
- * against with.
82
- * @param index See the {@link AE.checkAlgorithm }.
83
- * @param idxEnd See the {@link AE.checkAlgorithm }.
84
- * @param path See {@link DBC.decPrecondition }.
85
- * @param hint See {@link DBC.decPrecondition }.
86
- * @param dbc See {@link DBC.decPrecondition }.
87
- *
88
- * @returns A {@link string } as soon as one { check: (toCheck: any) => boolean | string } of **realConditions** returns one.
89
- * Otherwise TRUE. */
90
- public static PRE(
91
- realConditions:
92
- | Array<{
93
- check: (toCheck: unknown | undefined | null) => boolean | string;
94
- }>
95
- | { check: (toCheck: unknown | undefined | null) => boolean | string },
96
- index: number | undefined = undefined,
97
- idxEnd: number | undefined = undefined,
98
- path: string | undefined = undefined,
99
- hint: string | undefined = undefined,
100
- dbc: string | undefined = undefined,
101
- ): (
102
- target: object,
103
- methodName: string | symbol | undefined,
104
- parameterIndex: number,
105
- ) => void {
106
- return DBC.decPrecondition(
107
- (
108
- // biome-ignore lint/suspicious/noExplicitAny: Must match DBC.decPrecondition signature
109
- value: any,
110
- target: object,
111
- methodName: string | symbol | undefined,
112
- parameterIndex: number,
113
- ) => {
114
- if (Array.isArray(realConditions)) {
115
- for (const currentCondition of realConditions) {
116
- const result = AE.checkAlgorithm(
117
- currentCondition,
118
- value,
119
- index,
120
- idxEnd,
121
- );
122
-
123
- if (typeof result !== "boolean") return result;
124
- }
125
- } else {
126
- return AE.checkAlgorithm(
127
- realConditions as {
128
- check: (toCheck: unknown | undefined | null) => boolean | string;
129
- },
130
- value,
131
- index,
132
- idxEnd,
133
- );
134
- }
135
-
136
- return true;
137
- },
138
- dbc,
139
- path,
140
- hint,
141
- );
142
- }
143
- /**
144
- * A method-decorator factory using the {@link AE.checkAlgorithm } with either multiple or a single one
145
- * of the **realConditions** to check the tagged method's return-value against with.
146
- *
147
- * @param realConditions Either one or more { check: (toCheck: any) => boolean | string } to check the tagged parameter-value
148
- * against with.
149
- * @param index See the {@link AE.checkAlgorithm }.
150
- * @param idxEnd See the {@link AE.checkAlgorithm }.
151
- * @param path See {@link DBC.decPrecondition }.
152
- * @param hint See {@link DBC.decPrecondition }.
153
- * @param dbc See {@link DBC.decPrecondition }.
154
- *
155
- * @returns A {@link string } as soon as one { check: (toCheck: any) => boolean | string } of **realConditions** return one.
156
- * Otherwise TRUE. */
157
- public static POST(
158
- realConditions: // biome-ignore lint/suspicious/noExplicitAny: <explanation>
159
- | Array<{ check: (toCheck: any) => boolean | string }>
160
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
161
- | { check: (toCheck: any) => boolean | string },
162
- index: number | undefined = undefined,
163
- idxEnd: number | undefined = undefined,
164
- path: string | undefined = undefined,
165
- hint: string | undefined = undefined,
166
- dbc: string | undefined = undefined,
167
- ): (
168
- target: object,
169
- propertyKey: string,
170
- descriptor: PropertyDescriptor,
171
- ) => PropertyDescriptor {
172
- return DBC.decPostcondition(
173
- (value: object, target: object, propertyKey: string) => {
174
- if (Array.isArray(realConditions)) {
175
- for (const currentCondition of realConditions) {
176
- const result = AE.checkAlgorithm(
177
- currentCondition,
178
- value,
179
- index,
180
- idxEnd,
181
- );
182
-
183
- if (typeof result !== "boolean") return result;
184
- }
185
- } else {
186
- return AE.checkAlgorithm(
187
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
188
- realConditions as { check: (toCheck: any) => boolean | string },
189
- value,
190
- index,
191
- idxEnd,
192
- );
193
- }
194
-
195
- return true;
196
- },
197
- dbc,
198
- path,
199
- hint,
200
- );
201
- }
202
- /**
203
- * A field-decorator factory using the {@link AE.checkAlgorithm } with either multiple or a single one
204
- * of the **realConditions** to check the tagged field.
205
- *
206
- * @param realConditions Either one or more { check: (toCheck: any) => boolean | string } to check the tagged parameter-value
207
- * against with.
208
- * @param index See the {@link AE.checkAlgorithm }.
209
- * @param idxEnd See the {@link AE.checkAlgorithm }.
210
- * @param path See {@link DBC.decInvariant }.
211
- * @param hint See {@link DBC.decInvariant }.
212
- * @param dbc See {@link DBC.decInvariant }.
213
- *
214
- * @returns See {@link DBC.decInvariant }. */
215
- public static INVARIANT(
216
- realConditions: // biome-ignore lint/suspicious/noExplicitAny: <explanation>
217
- | Array<{ check: (toCheck: any) => boolean | string }>
218
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
219
- | { check: (toCheck: any) => boolean | string },
220
- index: number | undefined = undefined,
221
- idxEnd: number | undefined = undefined,
222
- path: string | undefined = undefined,
223
- hint: string | undefined = undefined,
224
- dbc: string | undefined = undefined,
225
- ) {
226
- return DBC.createINVARIANT(
227
- AE,
228
- [realConditions, index, idxEnd],
229
- dbc,
230
- path,
231
- hint,
232
- );
233
- }
234
- // #endregion Condition checking.
235
- // #region Referenced Condition checking.
236
- //
237
- // For usage in dynamic scenarios (like global functions).
238
- //
239
- /**
240
- * Invokes the {@link AE.checkAlgorithm } with all {@link AE.conditions } and the {@link object } {@link toCheck },
241
- * {@link AE.index } & {@link AE.idxEnd }.
242
- *
243
- * @param toCheck See {@link AE.checkAlgorithm }.
244
- *
245
- * @returns See {@link EQ.checkAlgorithm}. */
246
- // biome-ignore lint/suspicious/noExplicitAny: Must match DBC factory signature
247
- public check(toCheck: any) {
248
- if (Array.isArray(this.conditions)) {
249
- for (const currentCondition of this.conditions) {
250
- const result = AE.checkAlgorithm(
251
- currentCondition,
252
- toCheck,
253
- this.index,
254
- this.idxEnd,
255
- );
256
-
257
- if (typeof result !== "boolean") return result;
258
- }
259
- } else {
260
- return AE.checkAlgorithm(
261
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
262
- this.conditions as { check: (toCheck: any) => boolean | string },
263
- toCheck,
264
- this.index,
265
- this.idxEnd,
266
- );
267
- }
268
-
269
- return true;
270
- }
271
- /**
272
- * Creates this {@link AE } by setting the protected property {@link AE.conditions }, {@link AE.index } and {@link AE.idxEnd } used by {@link AE.check }.
273
- *
274
- * @param equivalent See {@link EQ.check }. */
275
- public constructor(
276
- protected conditions: // biome-ignore lint/suspicious/noExplicitAny: Must match DBC factory signature
277
- | Array<{
278
- check: (toCheck: any) => boolean | string;
279
- }>
280
- // biome-ignore lint/suspicious/noExplicitAny: Must match DBC factory signature
281
- | { check: (toCheck: any) => boolean | string },
282
- protected index: number | undefined = undefined,
283
- protected idxEnd: number | undefined = undefined,
284
- ) {
285
- super();
286
- }
287
- // #endregion Referenced Condition checking.
288
- }
1
+ import { DBC } from "../DBC";
2
+ /**
3
+ * A {@link DBC } defining that all elements of an {@link object }s have to fulfill
4
+ * a given {@link object }'s check-method (**( toCheck : any ) => boolean | string**).
5
+ *
6
+ * @remarks
7
+ * Maintainer: Callari, Salvatore (XDBC@WaXCode.net) */
8
+ export class AE extends DBC {
9
+ // #region Condition checking.
10
+ /**
11
+ * Checks each element of the **value**-{@link Array < any >} against the given **condition**, if it is one. If it is not
12
+ * the **value** itself will be checked.
13
+ *
14
+ * @param condition The { check: (toCheck: any) => boolean | string } to check the **value** against.
15
+ * @param value Either **value**-{@link Array < any >}, which's elements will be checked, or the value to be
16
+ * checked itself.
17
+ * @param index If specified with **idxEnd** being undefined, this {@link Number } will be seen as the index of
18
+ * the value-{@link Array }'s element to check. If value isn't an {@link Array } this parameter
19
+ * will not have any effect.
20
+ * With **idxEnd** not undefined this parameter indicates the beginning of the span of elements to
21
+ * check within the value-{@link Array }.
22
+ * @param idxEnd Indicates the last element's index (including) of the span of value-{@link Array } elements to check.
23
+ * Setting this parameter to -1 specifies that all value-{@link Array }'s elements beginning from the
24
+ * specified **index** shall be checked.
25
+ *
26
+ * @returns As soon as the **condition** returns a {@link string }, instead of TRUE, the returned string. TRUE if the
27
+ * **condition** never returns a {@link string}. */
28
+ public static checkAlgorithm(
29
+ condition: {
30
+ check: (toCheck: unknown | null | undefined) => boolean | string;
31
+ },
32
+ value: object,
33
+ index: number | undefined,
34
+ idxEnd: number | undefined,
35
+ ): boolean | string {
36
+ if (Array.isArray(value)) {
37
+ if (index !== undefined && idxEnd === undefined) {
38
+ if (index > -1 && index < value.length) {
39
+ const result = condition.check(value[index]);
40
+ if (typeof result === "string") {
41
+ return `Violating-Arrayelement at index "${index}" with value "${value[index]}". ${result}`;
42
+ }
43
+ }
44
+ return true; // In order for optional parameter to not cause an error if they are omitted.
45
+ }
46
+ const ending =
47
+ idxEnd !== undefined
48
+ ? idxEnd !== -1
49
+ ? idxEnd + 1
50
+ : (value as []).length
51
+ : (value as []).length;
52
+ for (let i = index ? index : 0; i < ending; i++) {
53
+ const result = condition.check(value[i]);
54
+ if (result !== true) {
55
+ return `Violating-Arrayelement at index ${i}. ${result}`;
56
+ }
57
+ }
58
+ } else {
59
+ return condition.check(value);
60
+ }
61
+ return true;
62
+ }
63
+ /**
64
+ * A parameter-decorator factory using the {@link AE.checkAlgorithm } with either multiple or a single one
65
+ * of the **realConditions** to check the tagged parameter-value against with.
66
+ * When specifying an **index** and the tagged parameter's **value** is an {@link Array }, the **realConditions** apply to the
67
+ * element at the specified **index**.
68
+ * If the {@link Array } is too short the currently processed { check: (toCheck: any) => boolean | string } of
69
+ * **realConditions** will be verified to TRUE automatically, considering optional parameters.
70
+ * If an **index** is specified but the tagged parameter's value isn't an array, the **index** is treated as being undefined.
71
+ * If **index** is undefined and the tagged parameter's value is an {@link Array } each element of it will be checked
72
+ * against the **realConditions**.
73
+ *
74
+ * @param realConditions Either one or more { check: (toCheck: any) => boolean | string } to check the tagged parameter-value
75
+ * against with.
76
+ * @param index See the {@link AE.checkAlgorithm }.
77
+ * @param idxEnd See the {@link AE.checkAlgorithm }.
78
+ * @param path See {@link DBC.decPrecondition }.
79
+ * @param hint See {@link DBC.decPrecondition }.
80
+ * @param dbc See {@link DBC.decPrecondition }.
81
+ *
82
+ * @returns A {@link string } as soon as one { check: (toCheck: any) => boolean | string } of **realConditions** returns one.
83
+ * Otherwise TRUE. */
84
+ public static PRE(
85
+ realConditions:
86
+ | Array<{
87
+ check: (toCheck: unknown | undefined | null) => boolean | string;
88
+ }>
89
+ | { check: (toCheck: unknown | undefined | null) => boolean | string },
90
+ index: number | undefined = undefined,
91
+ idxEnd: number | undefined = undefined,
92
+ path: string | undefined = undefined,
93
+ hint: string | undefined = undefined,
94
+ dbc: string | undefined = undefined,
95
+ ): (
96
+ target: object,
97
+ methodName: string | symbol | undefined,
98
+ parameterIndex: number,
99
+ ) => void {
100
+ return DBC.decPrecondition(
101
+ (
102
+ value: any,
103
+ target: object,
104
+ methodName: string | symbol | undefined,
105
+ parameterIndex: number,
106
+ ) => {
107
+ if (Array.isArray(realConditions)) {
108
+ for (const currentCondition of realConditions) {
109
+ const result = AE.checkAlgorithm(
110
+ currentCondition,
111
+ value,
112
+ index,
113
+ idxEnd,
114
+ );
115
+ if (typeof result !== "boolean") return result;
116
+ }
117
+ } else {
118
+ return AE.checkAlgorithm(
119
+ realConditions as {
120
+ check: (toCheck: unknown | undefined | null) => boolean | string;
121
+ },
122
+ value,
123
+ index,
124
+ idxEnd,
125
+ );
126
+ }
127
+ return true;
128
+ },
129
+ dbc,
130
+ path,
131
+ hint,
132
+ );
133
+ }
134
+ /**
135
+ * A method-decorator factory using the {@link AE.checkAlgorithm } with either multiple or a single one
136
+ * of the **realConditions** to check the tagged method's return-value against with.
137
+ *
138
+ * @param realConditions Either one or more { check: (toCheck: any) => boolean | string } to check the tagged parameter-value
139
+ * against with.
140
+ * @param index See the {@link AE.checkAlgorithm }.
141
+ * @param idxEnd See the {@link AE.checkAlgorithm }.
142
+ * @param path See {@link DBC.decPrecondition }.
143
+ * @param hint See {@link DBC.decPrecondition }.
144
+ * @param dbc See {@link DBC.decPrecondition }.
145
+ *
146
+ * @returns A {@link string } as soon as one { check: (toCheck: any) => boolean | string } of **realConditions** return one.
147
+ * Otherwise TRUE. */
148
+ public static POST(
149
+ realConditions:
150
+ | Array<{ check: (toCheck: any) => boolean | string }>
151
+ | { check: (toCheck: any) => boolean | string },
152
+ index: number | undefined = undefined,
153
+ idxEnd: number | undefined = undefined,
154
+ path: string | undefined = undefined,
155
+ hint: string | undefined = undefined,
156
+ dbc: string | undefined = undefined,
157
+ ): (
158
+ target: object,
159
+ propertyKey: string,
160
+ descriptor: PropertyDescriptor,
161
+ ) => PropertyDescriptor {
162
+ return DBC.decPostcondition(
163
+ (value: object, target: object, propertyKey: string) => {
164
+ if (Array.isArray(realConditions)) {
165
+ for (const currentCondition of realConditions) {
166
+ const result = AE.checkAlgorithm(
167
+ currentCondition,
168
+ value,
169
+ index,
170
+ idxEnd,
171
+ );
172
+ if (typeof result !== "boolean") return result;
173
+ }
174
+ } else {
175
+ return AE.checkAlgorithm(
176
+ realConditions as { check: (toCheck: any) => boolean | string },
177
+ value,
178
+ index,
179
+ idxEnd,
180
+ );
181
+ }
182
+ return true;
183
+ },
184
+ dbc,
185
+ path,
186
+ hint,
187
+ );
188
+ }
189
+ /**
190
+ * A field-decorator factory using the {@link AE.checkAlgorithm } with either multiple or a single one
191
+ * of the **realConditions** to check the tagged field.
192
+ *
193
+ * @param realConditions Either one or more { check: (toCheck: any) => boolean | string } to check the tagged parameter-value
194
+ * against with.
195
+ * @param index See the {@link AE.checkAlgorithm }.
196
+ * @param idxEnd See the {@link AE.checkAlgorithm }.
197
+ * @param path See {@link DBC.decInvariant }.
198
+ * @param hint See {@link DBC.decInvariant }.
199
+ * @param dbc See {@link DBC.decInvariant }.
200
+ *
201
+ * @returns See {@link DBC.decInvariant }. */
202
+ public static INVARIANT(
203
+ realConditions:
204
+ | Array<{ check: (toCheck: any) => boolean | string }>
205
+ | { check: (toCheck: any) => boolean | string },
206
+ index: number | undefined = undefined,
207
+ idxEnd: number | undefined = undefined,
208
+ path: string | undefined = undefined,
209
+ hint: string | undefined = undefined,
210
+ dbc: string | undefined = undefined,
211
+ ) {
212
+ return DBC.createINVARIANT(
213
+ AE,
214
+ [realConditions, index, idxEnd],
215
+ dbc,
216
+ path,
217
+ hint,
218
+ );
219
+ }
220
+ // #endregion Condition checking.
221
+ // #region Referenced Condition checking.
222
+ //
223
+ // For usage in dynamic scenarios (like global functions).
224
+ //
225
+ /**
226
+ * Invokes the {@link AE.checkAlgorithm } with all {@link AE.conditions } and the {@link object } {@link toCheck },
227
+ * {@link AE.index } & {@link AE.idxEnd }.
228
+ *
229
+ * @param toCheck See {@link AE.checkAlgorithm }.
230
+ *
231
+ * @returns See {@link EQ.checkAlgorithm}. */
232
+ public check(toCheck: any) {
233
+ if (Array.isArray(this.conditions)) {
234
+ for (const currentCondition of this.conditions) {
235
+ const result = AE.checkAlgorithm(
236
+ currentCondition,
237
+ toCheck,
238
+ this.index,
239
+ this.idxEnd,
240
+ );
241
+ if (typeof result !== "boolean") return result;
242
+ }
243
+ } else {
244
+ return AE.checkAlgorithm(
245
+ this.conditions as { check: (toCheck: any) => boolean | string },
246
+ toCheck,
247
+ this.index,
248
+ this.idxEnd,
249
+ );
250
+ }
251
+ return true;
252
+ }
253
+ /**
254
+ * Creates this {@link AE } by setting the protected property {@link AE.conditions }, {@link AE.index } and {@link AE.idxEnd } used by {@link AE.check }.
255
+ *
256
+ * @param equivalent See {@link EQ.check }. */
257
+ public constructor(
258
+ protected conditions:
259
+ | Array<{
260
+ check: (toCheck: any) => boolean | string;
261
+ }>
262
+ | { check: (toCheck: any) => boolean | string },
263
+ protected index: number | undefined = undefined,
264
+ protected idxEnd: number | undefined = undefined,
265
+ ) {
266
+ super();
267
+ }
268
+ // #endregion Referenced Condition checking.
269
+ }