typia 7.0.0-dev.20240930 → 7.0.0-dev.20241001

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 (169) hide show
  1. package/lib/index.mjs +25 -25
  2. package/lib/index.mjs.map +1 -1
  3. package/lib/programmers/AssertProgrammer.js +20 -17
  4. package/lib/programmers/AssertProgrammer.js.map +1 -1
  5. package/lib/programmers/CheckerProgrammer.js +274 -216
  6. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  7. package/lib/programmers/FeatureProgrammer.js +16 -8
  8. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  9. package/lib/programmers/IsProgrammer.js +38 -20
  10. package/lib/programmers/IsProgrammer.js.map +1 -1
  11. package/lib/programmers/RandomProgrammer.js +83 -68
  12. package/lib/programmers/RandomProgrammer.js.map +1 -1
  13. package/lib/programmers/TypiaProgrammer.d.ts +2 -2
  14. package/lib/programmers/TypiaProgrammer.js +79 -75
  15. package/lib/programmers/TypiaProgrammer.js.map +1 -1
  16. package/lib/programmers/ValidateProgrammer.js +39 -17
  17. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  18. package/lib/programmers/helpers/CloneJoiner.js +4 -1
  19. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  20. package/lib/programmers/helpers/NotationJoiner.d.ts +2 -1
  21. package/lib/programmers/helpers/NotationJoiner.js +34 -33
  22. package/lib/programmers/helpers/NotationJoiner.js.map +1 -1
  23. package/lib/programmers/helpers/PruneJoiner.js +4 -1
  24. package/lib/programmers/helpers/PruneJoiner.js.map +1 -1
  25. package/lib/programmers/helpers/RandomJoiner.d.ts +1 -1
  26. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  27. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  28. package/lib/programmers/helpers/StringifyJoinder.js +4 -1
  29. package/lib/programmers/helpers/StringifyJoinder.js.map +1 -1
  30. package/lib/programmers/helpers/StringifyPredicator.d.ts +1 -1
  31. package/lib/programmers/helpers/StringifyPredicator.js +4 -3
  32. package/lib/programmers/helpers/StringifyPredicator.js.map +1 -1
  33. package/lib/programmers/helpers/UnionExplorer.d.ts +52 -12
  34. package/lib/programmers/helpers/UnionExplorer.js +183 -144
  35. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  36. package/lib/programmers/helpers/UnionPredicator.d.ts +1 -1
  37. package/lib/programmers/helpers/UnionPredicator.js +7 -7
  38. package/lib/programmers/http/HttpFormDataProgrammer.js +77 -70
  39. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  40. package/lib/programmers/http/HttpHeadersProgrammer.js +69 -68
  41. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  42. package/lib/programmers/http/HttpQueryProgrammer.js +69 -62
  43. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  44. package/lib/programmers/internal/application_escaped.js +4 -4
  45. package/lib/programmers/internal/application_escaped.js.map +1 -1
  46. package/lib/programmers/internal/application_templates.js +8 -2
  47. package/lib/programmers/internal/application_templates.js.map +1 -1
  48. package/lib/programmers/internal/application_union_discriminator.d.ts +1 -1
  49. package/lib/programmers/internal/application_union_discriminator.js +6 -6
  50. package/lib/programmers/internal/application_union_discriminator.js.map +1 -1
  51. package/lib/programmers/internal/application_v30_object.js +6 -3
  52. package/lib/programmers/internal/application_v30_object.js.map +1 -1
  53. package/lib/programmers/internal/application_v31_object.js +4 -1
  54. package/lib/programmers/internal/application_v31_object.js.map +1 -1
  55. package/lib/programmers/internal/check_array_length.js +21 -26
  56. package/lib/programmers/internal/check_array_length.js.map +1 -1
  57. package/lib/programmers/internal/check_bigint.js +18 -26
  58. package/lib/programmers/internal/check_bigint.js.map +1 -1
  59. package/lib/programmers/internal/check_dynamic_key.d.ts +1 -5
  60. package/lib/programmers/internal/check_dynamic_key.js +109 -91
  61. package/lib/programmers/internal/check_dynamic_key.js.map +1 -1
  62. package/lib/programmers/internal/check_dynamic_properties.js +88 -90
  63. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  64. package/lib/programmers/internal/check_native.js +8 -5
  65. package/lib/programmers/internal/check_native.js.map +1 -1
  66. package/lib/programmers/internal/check_number.js +59 -65
  67. package/lib/programmers/internal/check_number.js.map +1 -1
  68. package/lib/programmers/internal/check_object.js +31 -22
  69. package/lib/programmers/internal/check_object.js.map +1 -1
  70. package/lib/programmers/internal/check_string.js +18 -26
  71. package/lib/programmers/internal/check_string.js.map +1 -1
  72. package/lib/programmers/internal/check_template.js +20 -21
  73. package/lib/programmers/internal/check_template.js.map +1 -1
  74. package/lib/programmers/internal/check_union_array_like.js +68 -53
  75. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  76. package/lib/programmers/internal/decode_union_object.js +59 -49
  77. package/lib/programmers/internal/decode_union_object.js.map +1 -1
  78. package/lib/programmers/internal/feature_object_entries.js +31 -37
  79. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  80. package/lib/programmers/internal/llm_schema_escaped.js +29 -11
  81. package/lib/programmers/internal/llm_schema_escaped.js.map +1 -1
  82. package/lib/programmers/internal/llm_schema_object.js +4 -1
  83. package/lib/programmers/internal/llm_schema_object.js.map +1 -1
  84. package/lib/programmers/internal/metadata_to_pattern.js +44 -41
  85. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  86. package/lib/programmers/internal/postfix_of_tuple.d.ts +1 -1
  87. package/lib/programmers/internal/postfix_of_tuple.js +3 -0
  88. package/lib/programmers/internal/postfix_of_tuple.js.map +1 -1
  89. package/lib/programmers/internal/prune_object_properties.js +6 -3
  90. package/lib/programmers/internal/prune_object_properties.js.map +1 -1
  91. package/lib/programmers/internal/random_custom.js +8 -14
  92. package/lib/programmers/internal/random_custom.js.map +1 -1
  93. package/lib/programmers/internal/stringify_dynamic_properties.js +4 -1
  94. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  95. package/lib/programmers/internal/stringify_regular_properties.js +4 -4
  96. package/lib/programmers/internal/stringify_regular_properties.js.map +1 -1
  97. package/lib/programmers/internal/template_to_pattern.js +10 -5
  98. package/lib/programmers/internal/template_to_pattern.js.map +1 -1
  99. package/lib/programmers/internal/wrap_metadata_rest_tuple.d.ts +1 -2
  100. package/lib/programmers/internal/wrap_metadata_rest_tuple.js +3 -0
  101. package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -1
  102. package/lib/programmers/json/JsonStringifyProgrammer.js +76 -52
  103. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  104. package/lib/programmers/misc/MiscCloneProgrammer.js +143 -115
  105. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  106. package/lib/programmers/misc/MiscPruneProgrammer.js +65 -50
  107. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  108. package/lib/programmers/notations/NotationGeneralProgrammer.d.ts +4 -1
  109. package/lib/programmers/notations/NotationGeneralProgrammer.js +166 -115
  110. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  111. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +32 -24
  112. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  113. package/lib/utils/NamingConvention/NamingConvention.js +41 -47
  114. package/lib/utils/NamingConvention/NamingConvention.js.map +1 -1
  115. package/package.json +1 -1
  116. package/src/programmers/AssertProgrammer.ts +30 -27
  117. package/src/programmers/CheckerProgrammer.ts +279 -248
  118. package/src/programmers/FeatureProgrammer.ts +17 -15
  119. package/src/programmers/IsProgrammer.ts +34 -20
  120. package/src/programmers/RandomProgrammer.ts +18 -9
  121. package/src/programmers/TypiaProgrammer.ts +48 -34
  122. package/src/programmers/ValidateProgrammer.ts +50 -27
  123. package/src/programmers/helpers/CloneJoiner.ts +4 -1
  124. package/src/programmers/helpers/NotationJoiner.ts +85 -83
  125. package/src/programmers/helpers/ProtobufUtil.ts +2 -2
  126. package/src/programmers/helpers/PruneJoiner.ts +4 -1
  127. package/src/programmers/helpers/RandomJoiner.ts +5 -2
  128. package/src/programmers/helpers/RandomRanger.ts +8 -1
  129. package/src/programmers/helpers/StringifyJoinder.ts +4 -1
  130. package/src/programmers/helpers/StringifyPredicator.ts +4 -3
  131. package/src/programmers/helpers/UnionExplorer.ts +279 -202
  132. package/src/programmers/helpers/UnionPredicator.ts +5 -5
  133. package/src/programmers/http/HttpFormDataProgrammer.ts +135 -114
  134. package/src/programmers/http/HttpHeadersProgrammer.ts +145 -120
  135. package/src/programmers/http/HttpQueryProgrammer.ts +137 -116
  136. package/src/programmers/internal/application_escaped.ts +6 -6
  137. package/src/programmers/internal/application_templates.ts +8 -6
  138. package/src/programmers/internal/application_union_discriminator.ts +6 -6
  139. package/src/programmers/internal/application_v30_object.ts +6 -3
  140. package/src/programmers/internal/application_v31_object.ts +4 -1
  141. package/src/programmers/internal/application_v31_tuple.ts +1 -1
  142. package/src/programmers/internal/check_array_length.ts +31 -30
  143. package/src/programmers/internal/check_bigint.ts +31 -31
  144. package/src/programmers/internal/check_dynamic_key.ts +155 -126
  145. package/src/programmers/internal/check_dynamic_properties.ts +152 -154
  146. package/src/programmers/internal/check_native.ts +11 -5
  147. package/src/programmers/internal/check_number.ts +88 -84
  148. package/src/programmers/internal/check_object.ts +45 -31
  149. package/src/programmers/internal/check_string.ts +31 -30
  150. package/src/programmers/internal/check_template.ts +34 -32
  151. package/src/programmers/internal/check_union_array_like.ts +245 -228
  152. package/src/programmers/internal/decode_union_object.ts +92 -75
  153. package/src/programmers/internal/feature_object_entries.ts +43 -46
  154. package/src/programmers/internal/llm_schema_escaped.ts +36 -13
  155. package/src/programmers/internal/llm_schema_object.ts +4 -1
  156. package/src/programmers/internal/metadata_to_pattern.ts +31 -23
  157. package/src/programmers/internal/postfix_of_tuple.ts +3 -0
  158. package/src/programmers/internal/prune_object_properties.ts +6 -3
  159. package/src/programmers/internal/random_custom.ts +24 -23
  160. package/src/programmers/internal/stringify_dynamic_properties.ts +4 -1
  161. package/src/programmers/internal/stringify_regular_properties.ts +7 -7
  162. package/src/programmers/internal/template_to_pattern.ts +12 -4
  163. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +3 -0
  164. package/src/programmers/json/JsonStringifyProgrammer.ts +71 -51
  165. package/src/programmers/misc/MiscCloneProgrammer.ts +156 -132
  166. package/src/programmers/misc/MiscPruneProgrammer.ts +61 -49
  167. package/src/programmers/notations/NotationGeneralProgrammer.ts +193 -144
  168. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +25 -21
  169. package/src/utils/NamingConvention/NamingConvention.ts +40 -42
@@ -5,6 +5,7 @@ import { IdentifierFactory } from "../../factories/IdentifierFactory";
5
5
  import { StatementFactory } from "../../factories/StatementFactory";
6
6
  import { TypeFactory } from "../../factories/TypeFactory";
7
7
 
8
+ import { Metadata } from "../../schemas/metadata/Metadata";
8
9
  import { MetadataArray } from "../../schemas/metadata/MetadataArray";
9
10
  import { MetadataArrayType } from "../../schemas/metadata/MetadataArrayType";
10
11
  import { MetadataTuple } from "../../schemas/metadata/MetadataTuple";
@@ -16,280 +17,296 @@ import { UnionExplorer } from "../helpers/UnionExplorer";
16
17
  /**
17
18
  * @internal
18
19
  */
19
- export const check_union_array_like =
20
- <Origin, Category extends MetadataArray | MetadataTuple, Element>(
21
- accessor: check_union_array_like.IAccessor<Origin, Category, Element>,
22
- ) =>
23
- (props: check_union_array_like.IProps<Category, Element>) =>
24
- (parameters: ts.ParameterDeclaration[]) =>
25
- (
26
- input: ts.Expression,
27
- origins: Origin[],
28
- explore: FeatureProgrammer.IExplore,
29
- ): ts.ArrowFunction => {
30
- // ONLY ONE TYPE
31
- const targets: Array<Category> = origins.map(accessor.transform);
32
- if (targets.length === 1)
33
- return ts.factory.createArrowFunction(
34
- undefined,
35
- undefined,
36
- parameters,
37
- undefined,
38
- undefined,
39
- props.decoder(accessor.array(input), targets[0]!, explore),
40
- );
20
+ export const check_union_array_like = <
21
+ Origin extends Metadata | MetadataArray | MetadataTuple | Metadata.Entry,
22
+ Category extends MetadataArray | MetadataTuple,
23
+ Element,
24
+ >(props: {
25
+ config: check_union_array_like.IConfig<Category, Element>;
26
+ accessor: check_union_array_like.IAccessor<Origin, Category, Element>;
27
+ parameters: ts.ParameterDeclaration[];
28
+ input: ts.Expression;
29
+ definitions: Origin[];
30
+ explore: FeatureProgrammer.IExplore;
31
+ }): ts.ArrowFunction => {
32
+ // ONLY ONE TYPE
33
+ const targets: Array<Category> = props.definitions.map(
34
+ props.accessor.transform,
35
+ );
36
+ if (targets.length === 1)
37
+ return ts.factory.createArrowFunction(
38
+ undefined,
39
+ undefined,
40
+ props.parameters,
41
+ undefined,
42
+ undefined,
43
+ props.config.decoder({
44
+ input: props.accessor.array(props.input),
45
+ definition: targets[0]!,
46
+ explore: props.explore,
47
+ }),
48
+ );
41
49
 
42
- const array = ts.factory.createIdentifier("array");
43
- const top = ts.factory.createIdentifier("top");
50
+ const array = ts.factory.createIdentifier("array");
51
+ const top = ts.factory.createIdentifier("top");
44
52
 
45
- const statements: ts.Statement[] = [];
46
- const tupleList: MetadataTuple[] = targets.filter(
47
- (t) => t instanceof MetadataTuple,
48
- ) as MetadataTuple[];
49
- const arrayList: MetadataArray[] = targets.filter(
50
- (t) => t instanceof MetadataArray,
51
- ) as MetadataArray[];
53
+ const statements: ts.Statement[] = [];
54
+ const tupleList: MetadataTuple[] = targets.filter(
55
+ (t) => t instanceof MetadataTuple,
56
+ ) as MetadataTuple[];
57
+ const arrayList: MetadataArray[] = targets.filter(
58
+ (t) => t instanceof MetadataArray,
59
+ ) as MetadataArray[];
52
60
 
53
- const predicate = (meta: Category): ts.Expression =>
54
- ts.factory.createAsExpression(
55
- ts.factory.createArrayLiteralExpression(
56
- [
57
- ts.factory.createArrowFunction(
58
- undefined,
59
- undefined,
60
- [
61
- IdentifierFactory.parameter(
62
- "top",
63
- meta instanceof MetadataArrayType
64
- ? TypeFactory.keyword("any")
65
- : ts.factory.createTypeReferenceNode("any[]"),
66
- ),
67
- ],
68
- TypeFactory.keyword("any"),
69
- undefined,
70
- props.checker(
71
- ts.factory.createIdentifier("top"),
72
- accessor.element(meta),
73
- {
74
- ...explore,
75
- tracable: false,
76
- postfix: meta instanceof MetadataArrayType ? `"[0]"` : "",
77
- },
78
- array,
61
+ const predicate = (meta: Category): ts.Expression =>
62
+ ts.factory.createAsExpression(
63
+ ts.factory.createArrayLiteralExpression(
64
+ [
65
+ ts.factory.createArrowFunction(
66
+ undefined,
67
+ undefined,
68
+ [
69
+ IdentifierFactory.parameter(
70
+ "top",
71
+ meta instanceof MetadataArrayType
72
+ ? TypeFactory.keyword("any")
73
+ : ts.factory.createTypeReferenceNode("any[]"),
79
74
  ),
80
- ),
81
- ts.factory.createArrowFunction(
82
- undefined,
83
- undefined,
84
- [
85
- IdentifierFactory.parameter(
86
- "entire",
87
- ts.factory.createTypeReferenceNode("any[]"),
88
- ),
89
- ],
90
- TypeFactory.keyword("any"),
91
- undefined,
92
- props.decoder(ts.factory.createIdentifier("entire"), meta, {
93
- ...explore,
75
+ ],
76
+ TypeFactory.keyword("any"),
77
+ undefined,
78
+ props.config.checker({
79
+ input: ts.factory.createIdentifier("top"),
80
+ definition: props.accessor.element(meta),
81
+ explore: {
82
+ ...props.explore,
83
+ tracable: false,
84
+ postfix: meta instanceof MetadataArrayType ? `"[0]"` : "",
85
+ },
86
+ container: array,
87
+ }),
88
+ ),
89
+ ts.factory.createArrowFunction(
90
+ undefined,
91
+ undefined,
92
+ [
93
+ IdentifierFactory.parameter(
94
+ "entire",
95
+ ts.factory.createTypeReferenceNode("any[]"),
96
+ ),
97
+ ],
98
+ TypeFactory.keyword("any"),
99
+ undefined,
100
+ props.config.decoder({
101
+ input: ts.factory.createIdentifier("entire"),
102
+ definition: meta,
103
+ explore: {
104
+ ...props.explore,
94
105
  tracable: true,
95
- }),
96
- ),
97
- ],
98
- true,
99
- ),
100
- ts.factory.createTypeReferenceNode("const"),
101
- );
102
- const iterate =
103
- (init: string) =>
104
- (from: ts.Expression) =>
105
- (stmt: ts.Statement): ts.ForOfStatement =>
106
- ts.factory.createForOfStatement(
107
- undefined,
108
- ts.factory.createVariableDeclarationList(
109
- [ts.factory.createVariableDeclaration(init)],
110
- ts.NodeFlags.Const,
106
+ },
107
+ }),
111
108
  ),
112
- from,
113
- stmt,
114
- );
109
+ ],
110
+ true,
111
+ ),
112
+ ts.factory.createTypeReferenceNode("const"),
113
+ );
114
+ const iterate = (props: {
115
+ init: string;
116
+ from: ts.Expression;
117
+ if: ts.IfStatement;
118
+ }): ts.ForOfStatement =>
119
+ ts.factory.createForOfStatement(
120
+ undefined,
121
+ ts.factory.createVariableDeclarationList(
122
+ [ts.factory.createVariableDeclaration(props.init)],
123
+ ts.NodeFlags.Const,
124
+ ),
125
+ props.from,
126
+ props.if,
127
+ );
115
128
 
116
- if (tupleList.length)
117
- statements.push(
118
- StatementFactory.constant("array", accessor.array(input)),
119
- StatementFactory.constant(
120
- "tuplePredicators",
121
- ts.factory.createArrayLiteralExpression(
122
- tupleList.map((x) => predicate(x as Category)),
123
- true,
124
- ),
129
+ if (tupleList.length)
130
+ statements.push(
131
+ StatementFactory.constant("array", props.accessor.array(props.input)),
132
+ StatementFactory.constant(
133
+ "tuplePredicators",
134
+ ts.factory.createArrayLiteralExpression(
135
+ tupleList.map((x) => predicate(x as Category)),
136
+ true,
125
137
  ),
126
- iterate("pred")(ts.factory.createIdentifier("tuplePredicators"))(
127
- ts.factory.createIfStatement(
138
+ ),
139
+ iterate({
140
+ init: "pred",
141
+ from: ts.factory.createIdentifier("tuplePredicators"),
142
+ if: ts.factory.createIfStatement(
143
+ ts.factory.createCallExpression(
144
+ ts.factory.createIdentifier("pred[0]"),
145
+ undefined,
146
+ [array],
147
+ ),
148
+ ts.factory.createReturnStatement(
128
149
  ts.factory.createCallExpression(
129
- ts.factory.createIdentifier("pred[0]"),
150
+ ts.factory.createIdentifier(`pred[1]`),
130
151
  undefined,
131
152
  [array],
132
153
  ),
133
- ts.factory.createReturnStatement(
154
+ ),
155
+ ),
156
+ }),
157
+ );
158
+ if (arrayList.length) {
159
+ if (tupleList.length === 0)
160
+ statements.push(
161
+ StatementFactory.constant("array", props.accessor.array(props.input)),
162
+ );
163
+ statements.push(
164
+ StatementFactory.constant("top", props.accessor.front(props.input)),
165
+ ts.factory.createIfStatement(
166
+ ts.factory.createStrictEquality(
167
+ ExpressionFactory.number(0),
168
+ props.accessor.size(props.input),
169
+ ),
170
+ ts.isReturnStatement(props.config.empty)
171
+ ? props.config.empty
172
+ : ts.factory.createReturnStatement(props.config.empty),
173
+ ),
174
+ StatementFactory.constant(
175
+ "arrayPredicators",
176
+ ts.factory.createArrayLiteralExpression(
177
+ arrayList.map((x) => predicate(x as Category)),
178
+ true,
179
+ ),
180
+ ),
181
+ StatementFactory.constant(
182
+ "passed",
183
+ ts.factory.createCallExpression(
184
+ IdentifierFactory.access(
185
+ ts.factory.createIdentifier("arrayPredicators"),
186
+ )("filter"),
187
+ undefined,
188
+ [
189
+ ts.factory.createArrowFunction(
190
+ undefined,
191
+ undefined,
192
+ [IdentifierFactory.parameter("pred")],
193
+ undefined,
194
+ undefined,
134
195
  ts.factory.createCallExpression(
135
- ts.factory.createIdentifier(`pred[1]`),
196
+ ts.factory.createIdentifier("pred[0]"),
136
197
  undefined,
137
- [array],
198
+ [top],
138
199
  ),
139
200
  ),
140
- ),
141
- ),
142
- );
143
- if (arrayList.length) {
144
- if (tupleList.length === 0)
145
- statements.push(
146
- StatementFactory.constant("array", accessor.array(input)),
147
- );
148
- statements.push(
149
- StatementFactory.constant("top", accessor.front(input)),
150
- ts.factory.createIfStatement(
151
- ts.factory.createStrictEquality(
152
- ExpressionFactory.number(0),
153
- accessor.size(input),
154
- ),
155
- ts.isReturnStatement(props.empty)
156
- ? props.empty
157
- : ts.factory.createReturnStatement(props.empty),
201
+ ],
158
202
  ),
159
- StatementFactory.constant(
160
- "arrayPredicators",
161
- ts.factory.createArrayLiteralExpression(
162
- arrayList.map((x) => predicate(x as Category)),
163
- true,
164
- ),
203
+ ),
204
+ ts.factory.createIfStatement(
205
+ ts.factory.createStrictEquality(
206
+ ExpressionFactory.number(1),
207
+ ts.factory.createIdentifier("passed.length"),
165
208
  ),
166
- StatementFactory.constant(
167
- "passed",
209
+ ts.factory.createReturnStatement(
168
210
  ts.factory.createCallExpression(
169
- IdentifierFactory.access(
170
- ts.factory.createIdentifier("arrayPredicators"),
171
- )("filter"),
172
- undefined,
173
- [
174
- ts.factory.createArrowFunction(
175
- undefined,
176
- undefined,
177
- [IdentifierFactory.parameter("pred")],
178
- undefined,
179
- undefined,
180
- ts.factory.createCallExpression(
181
- ts.factory.createIdentifier("pred[0]"),
182
- undefined,
183
- [top],
184
- ),
211
+ ts.factory.createElementAccessExpression(
212
+ ts.factory.createNonNullExpression(
213
+ ts.factory.createIdentifier("passed[0]"),
185
214
  ),
186
- ],
215
+ 1,
216
+ ),
217
+ undefined,
218
+ [array],
187
219
  ),
188
220
  ),
189
221
  ts.factory.createIfStatement(
190
- ts.factory.createStrictEquality(
222
+ ts.factory.createLessThan(
191
223
  ExpressionFactory.number(1),
192
224
  ts.factory.createIdentifier("passed.length"),
193
225
  ),
194
- ts.factory.createReturnStatement(
195
- ts.factory.createCallExpression(
196
- ts.factory.createElementAccessExpression(
197
- ts.factory.createNonNullExpression(
198
- ts.factory.createIdentifier("passed[0]"),
199
- ),
200
- 1,
201
- ),
202
- undefined,
203
- [array],
204
- ),
205
- ),
206
- ts.factory.createIfStatement(
207
- ts.factory.createLessThan(
208
- ExpressionFactory.number(1),
209
- ts.factory.createIdentifier("passed.length"),
210
- ),
211
- iterate("pred")(ts.factory.createIdentifier("passed"))(
212
- ts.factory.createIfStatement(
213
- ts.factory.createCallExpression(
214
- IdentifierFactory.access(array)("every"),
215
- undefined,
216
- [
217
- ts.factory.createArrowFunction(
218
- undefined,
219
- undefined,
220
- [
221
- IdentifierFactory.parameter(
222
- "value",
223
- TypeFactory.keyword("any"),
224
- ),
225
- ],
226
- undefined,
227
- undefined,
228
- ts.factory.createStrictEquality(
229
- props.success,
230
- ts.factory.createCallExpression(
231
- ts.factory.createIdentifier("pred[0]"),
232
- undefined,
233
- [ts.factory.createIdentifier("value")],
234
- ),
226
+ iterate({
227
+ init: "pred",
228
+ from: ts.factory.createIdentifier("passed"),
229
+ if: ts.factory.createIfStatement(
230
+ ts.factory.createCallExpression(
231
+ IdentifierFactory.access(array)("every"),
232
+ undefined,
233
+ [
234
+ ts.factory.createArrowFunction(
235
+ undefined,
236
+ undefined,
237
+ [
238
+ IdentifierFactory.parameter(
239
+ "value",
240
+ TypeFactory.keyword("any"),
235
241
  ),
236
- ),
237
- ],
238
- ),
239
- ts.factory.createReturnStatement(
240
- ts.factory.createCallExpression(
241
- ts.factory.createIdentifier(`pred[1]`),
242
+ ],
243
+ undefined,
242
244
  undefined,
243
- [ts.factory.createIdentifier("array")],
245
+ ts.factory.createStrictEquality(
246
+ props.config.success,
247
+ ts.factory.createCallExpression(
248
+ ts.factory.createIdentifier("pred[0]"),
249
+ undefined,
250
+ [ts.factory.createIdentifier("value")],
251
+ ),
252
+ ),
244
253
  ),
254
+ ],
255
+ ),
256
+ ts.factory.createReturnStatement(
257
+ ts.factory.createCallExpression(
258
+ ts.factory.createIdentifier(`pred[1]`),
259
+ undefined,
260
+ [ts.factory.createIdentifier("array")],
245
261
  ),
246
262
  ),
247
263
  ),
248
- ),
264
+ }),
249
265
  ),
250
- );
251
- }
252
- statements.push(
253
- props.failure(
254
- input,
255
- `(${targets
256
- .map((t) => accessor.name(t, accessor.element(t)))
257
- .join(" | ")})`,
258
- explore,
259
266
  ),
260
267
  );
261
- return ts.factory.createArrowFunction(
262
- undefined,
263
- undefined,
264
- parameters,
265
- undefined,
266
- undefined,
267
- ts.factory.createBlock(statements, true),
268
- );
269
- };
268
+ }
269
+ statements.push(
270
+ props.config.failure({
271
+ input: props.input,
272
+ expected: `(${targets
273
+ .map((t) => props.accessor.name(t, props.accessor.element(t)))
274
+ .join(" | ")})`,
275
+ explore: props.explore,
276
+ }),
277
+ );
278
+ return ts.factory.createArrowFunction(
279
+ undefined,
280
+ undefined,
281
+ props.parameters,
282
+ undefined,
283
+ undefined,
284
+ ts.factory.createBlock(statements, true),
285
+ );
286
+ };
270
287
 
271
288
  /**
272
289
  * @internal
273
290
  */
274
291
  export namespace check_union_array_like {
275
- export interface IProps<
292
+ export interface IConfig<
276
293
  Category extends MetadataArray | MetadataTuple,
277
294
  Element,
278
295
  > {
279
- checker(
280
- front: ts.Expression,
281
- target: Element,
282
- explore: FeatureProgrammer.IExplore,
283
- container: ts.Expression,
284
- ): ts.Expression;
296
+ checker(props: {
297
+ input: ts.Expression;
298
+ definition: Element;
299
+ explore: FeatureProgrammer.IExplore;
300
+ container: ts.Expression;
301
+ }): ts.Expression;
285
302
  decoder: UnionExplorer.Decoder<Category>;
286
303
  empty: ts.ReturnStatement | ts.Expression;
287
304
  success: ts.Expression;
288
- failure(
289
- input: ts.Expression,
290
- expected: string,
291
- explore: CheckerProgrammer.IExplore,
292
- ): ts.Statement;
305
+ failure(props: {
306
+ input: ts.Expression;
307
+ expected: string;
308
+ explore: CheckerProgrammer.IExplore;
309
+ }): ts.Statement;
293
310
  }
294
311
 
295
312
  export interface IAccessor<