typia 7.0.0-dev.20240929 → 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 (172) hide show
  1. package/lib/index.mjs +25 -25
  2. package/lib/index.mjs.map +1 -1
  3. package/lib/programmers/AssertProgrammer.js +34 -27
  4. package/lib/programmers/AssertProgrammer.js.map +1 -1
  5. package/lib/programmers/CheckerProgrammer.d.ts +5 -1
  6. package/lib/programmers/CheckerProgrammer.js +432 -348
  7. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  8. package/lib/programmers/FeatureProgrammer.d.ts +91 -28
  9. package/lib/programmers/FeatureProgrammer.js +165 -138
  10. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  11. package/lib/programmers/IsProgrammer.d.ts +5 -1
  12. package/lib/programmers/IsProgrammer.js +87 -66
  13. package/lib/programmers/IsProgrammer.js.map +1 -1
  14. package/lib/programmers/RandomProgrammer.js +83 -68
  15. package/lib/programmers/RandomProgrammer.js.map +1 -1
  16. package/lib/programmers/TypiaProgrammer.d.ts +2 -2
  17. package/lib/programmers/TypiaProgrammer.js +79 -75
  18. package/lib/programmers/TypiaProgrammer.js.map +1 -1
  19. package/lib/programmers/ValidateProgrammer.js +45 -19
  20. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  21. package/lib/programmers/helpers/CloneJoiner.js +4 -1
  22. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  23. package/lib/programmers/helpers/NotationJoiner.d.ts +2 -1
  24. package/lib/programmers/helpers/NotationJoiner.js +34 -33
  25. package/lib/programmers/helpers/NotationJoiner.js.map +1 -1
  26. package/lib/programmers/helpers/PruneJoiner.js +4 -1
  27. package/lib/programmers/helpers/PruneJoiner.js.map +1 -1
  28. package/lib/programmers/helpers/RandomJoiner.d.ts +1 -1
  29. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  30. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  31. package/lib/programmers/helpers/StringifyJoinder.js +4 -1
  32. package/lib/programmers/helpers/StringifyJoinder.js.map +1 -1
  33. package/lib/programmers/helpers/StringifyPredicator.d.ts +1 -1
  34. package/lib/programmers/helpers/StringifyPredicator.js +4 -3
  35. package/lib/programmers/helpers/StringifyPredicator.js.map +1 -1
  36. package/lib/programmers/helpers/UnionExplorer.d.ts +52 -12
  37. package/lib/programmers/helpers/UnionExplorer.js +184 -120
  38. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  39. package/lib/programmers/helpers/UnionPredicator.d.ts +1 -1
  40. package/lib/programmers/helpers/UnionPredicator.js +7 -7
  41. package/lib/programmers/http/HttpFormDataProgrammer.js +77 -70
  42. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  43. package/lib/programmers/http/HttpHeadersProgrammer.js +69 -68
  44. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  45. package/lib/programmers/http/HttpQueryProgrammer.js +69 -62
  46. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  47. package/lib/programmers/internal/application_escaped.js +4 -4
  48. package/lib/programmers/internal/application_escaped.js.map +1 -1
  49. package/lib/programmers/internal/application_templates.js +8 -2
  50. package/lib/programmers/internal/application_templates.js.map +1 -1
  51. package/lib/programmers/internal/application_union_discriminator.d.ts +1 -1
  52. package/lib/programmers/internal/application_union_discriminator.js +6 -6
  53. package/lib/programmers/internal/application_union_discriminator.js.map +1 -1
  54. package/lib/programmers/internal/application_v30_object.js +6 -3
  55. package/lib/programmers/internal/application_v30_object.js.map +1 -1
  56. package/lib/programmers/internal/application_v31_object.js +4 -1
  57. package/lib/programmers/internal/application_v31_object.js.map +1 -1
  58. package/lib/programmers/internal/check_array_length.js +21 -26
  59. package/lib/programmers/internal/check_array_length.js.map +1 -1
  60. package/lib/programmers/internal/check_bigint.js +18 -26
  61. package/lib/programmers/internal/check_bigint.js.map +1 -1
  62. package/lib/programmers/internal/check_dynamic_key.d.ts +1 -5
  63. package/lib/programmers/internal/check_dynamic_key.js +109 -91
  64. package/lib/programmers/internal/check_dynamic_key.js.map +1 -1
  65. package/lib/programmers/internal/check_dynamic_properties.js +88 -90
  66. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  67. package/lib/programmers/internal/check_native.js +8 -5
  68. package/lib/programmers/internal/check_native.js.map +1 -1
  69. package/lib/programmers/internal/check_number.js +59 -65
  70. package/lib/programmers/internal/check_number.js.map +1 -1
  71. package/lib/programmers/internal/check_object.js +31 -22
  72. package/lib/programmers/internal/check_object.js.map +1 -1
  73. package/lib/programmers/internal/check_string.js +18 -26
  74. package/lib/programmers/internal/check_string.js.map +1 -1
  75. package/lib/programmers/internal/check_template.js +20 -21
  76. package/lib/programmers/internal/check_template.js.map +1 -1
  77. package/lib/programmers/internal/check_union_array_like.js +68 -53
  78. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  79. package/lib/programmers/internal/decode_union_object.js +59 -49
  80. package/lib/programmers/internal/decode_union_object.js.map +1 -1
  81. package/lib/programmers/internal/feature_object_entries.js +31 -33
  82. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  83. package/lib/programmers/internal/llm_schema_escaped.js +29 -11
  84. package/lib/programmers/internal/llm_schema_escaped.js.map +1 -1
  85. package/lib/programmers/internal/llm_schema_object.js +4 -1
  86. package/lib/programmers/internal/llm_schema_object.js.map +1 -1
  87. package/lib/programmers/internal/metadata_to_pattern.js +44 -41
  88. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  89. package/lib/programmers/internal/postfix_of_tuple.d.ts +1 -1
  90. package/lib/programmers/internal/postfix_of_tuple.js +3 -0
  91. package/lib/programmers/internal/postfix_of_tuple.js.map +1 -1
  92. package/lib/programmers/internal/prune_object_properties.js +6 -3
  93. package/lib/programmers/internal/prune_object_properties.js.map +1 -1
  94. package/lib/programmers/internal/random_custom.js +8 -14
  95. package/lib/programmers/internal/random_custom.js.map +1 -1
  96. package/lib/programmers/internal/stringify_dynamic_properties.js +4 -1
  97. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  98. package/lib/programmers/internal/stringify_regular_properties.js +4 -4
  99. package/lib/programmers/internal/stringify_regular_properties.js.map +1 -1
  100. package/lib/programmers/internal/template_to_pattern.js +10 -5
  101. package/lib/programmers/internal/template_to_pattern.js.map +1 -1
  102. package/lib/programmers/internal/wrap_metadata_rest_tuple.d.ts +1 -2
  103. package/lib/programmers/internal/wrap_metadata_rest_tuple.js +3 -0
  104. package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -1
  105. package/lib/programmers/json/JsonStringifyProgrammer.js +154 -91
  106. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  107. package/lib/programmers/misc/MiscCloneProgrammer.js +221 -154
  108. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  109. package/lib/programmers/misc/MiscPruneProgrammer.js +139 -89
  110. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  111. package/lib/programmers/notations/NotationGeneralProgrammer.d.ts +4 -1
  112. package/lib/programmers/notations/NotationGeneralProgrammer.js +257 -148
  113. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  114. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +32 -24
  115. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  116. package/lib/utils/NamingConvention/NamingConvention.js +41 -47
  117. package/lib/utils/NamingConvention/NamingConvention.js.map +1 -1
  118. package/package.json +1 -1
  119. package/src/programmers/AssertProgrammer.ts +44 -37
  120. package/src/programmers/CheckerProgrammer.ts +394 -358
  121. package/src/programmers/FeatureProgrammer.ts +327 -267
  122. package/src/programmers/IsProgrammer.ts +93 -76
  123. package/src/programmers/RandomProgrammer.ts +18 -9
  124. package/src/programmers/TypiaProgrammer.ts +48 -34
  125. package/src/programmers/ValidateProgrammer.ts +56 -29
  126. package/src/programmers/helpers/CloneJoiner.ts +4 -1
  127. package/src/programmers/helpers/NotationJoiner.ts +85 -83
  128. package/src/programmers/helpers/ProtobufUtil.ts +2 -2
  129. package/src/programmers/helpers/PruneJoiner.ts +4 -1
  130. package/src/programmers/helpers/RandomJoiner.ts +5 -2
  131. package/src/programmers/helpers/RandomRanger.ts +8 -1
  132. package/src/programmers/helpers/StringifyJoinder.ts +4 -1
  133. package/src/programmers/helpers/StringifyPredicator.ts +4 -3
  134. package/src/programmers/helpers/UnionExplorer.ts +277 -179
  135. package/src/programmers/helpers/UnionPredicator.ts +5 -5
  136. package/src/programmers/http/HttpFormDataProgrammer.ts +135 -114
  137. package/src/programmers/http/HttpHeadersProgrammer.ts +145 -120
  138. package/src/programmers/http/HttpQueryProgrammer.ts +137 -116
  139. package/src/programmers/internal/application_escaped.ts +6 -6
  140. package/src/programmers/internal/application_templates.ts +8 -6
  141. package/src/programmers/internal/application_union_discriminator.ts +6 -6
  142. package/src/programmers/internal/application_v30_object.ts +6 -3
  143. package/src/programmers/internal/application_v31_object.ts +4 -1
  144. package/src/programmers/internal/application_v31_tuple.ts +1 -1
  145. package/src/programmers/internal/check_array_length.ts +31 -30
  146. package/src/programmers/internal/check_bigint.ts +31 -31
  147. package/src/programmers/internal/check_dynamic_key.ts +155 -126
  148. package/src/programmers/internal/check_dynamic_properties.ts +152 -154
  149. package/src/programmers/internal/check_native.ts +11 -5
  150. package/src/programmers/internal/check_number.ts +88 -84
  151. package/src/programmers/internal/check_object.ts +45 -31
  152. package/src/programmers/internal/check_string.ts +31 -30
  153. package/src/programmers/internal/check_template.ts +34 -32
  154. package/src/programmers/internal/check_union_array_like.ts +245 -228
  155. package/src/programmers/internal/decode_union_object.ts +92 -75
  156. package/src/programmers/internal/feature_object_entries.ts +36 -36
  157. package/src/programmers/internal/llm_schema_escaped.ts +36 -13
  158. package/src/programmers/internal/llm_schema_object.ts +4 -1
  159. package/src/programmers/internal/metadata_to_pattern.ts +31 -23
  160. package/src/programmers/internal/postfix_of_tuple.ts +3 -0
  161. package/src/programmers/internal/prune_object_properties.ts +6 -3
  162. package/src/programmers/internal/random_custom.ts +24 -23
  163. package/src/programmers/internal/stringify_dynamic_properties.ts +4 -1
  164. package/src/programmers/internal/stringify_regular_properties.ts +7 -7
  165. package/src/programmers/internal/template_to_pattern.ts +12 -4
  166. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +3 -0
  167. package/src/programmers/json/JsonStringifyProgrammer.ts +151 -104
  168. package/src/programmers/misc/MiscCloneProgrammer.ts +255 -204
  169. package/src/programmers/misc/MiscPruneProgrammer.ts +149 -116
  170. package/src/programmers/notations/NotationGeneralProgrammer.ts +307 -211
  171. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +25 -21
  172. package/src/utils/NamingConvention/NamingConvention.ts +40 -42
@@ -16,204 +16,250 @@ import { UnionPredicator } from "./UnionPredicator";
16
16
 
17
17
  export namespace UnionExplorer {
18
18
  export interface Decoder<T> {
19
- (
20
- input: ts.Expression,
21
- target: T,
22
- explore: FeatureProgrammer.IExplore,
23
- ): ts.Expression;
19
+ (props: {
20
+ input: ts.Expression;
21
+ definition: T;
22
+ explore: FeatureProgrammer.IExplore;
23
+ }): ts.Expression;
24
24
  }
25
25
  export type ObjectCombiner = Decoder<MetadataObject[]>;
26
26
 
27
27
  /* -----------------------------------------------------------
28
28
  OBJECT
29
29
  ----------------------------------------------------------- */
30
- export const object =
31
- (config: FeatureProgrammer.IConfig, level: number = 0) =>
32
- (
33
- input: ts.Expression,
34
- targets: MetadataObject[],
35
- explore: FeatureProgrammer.IExplore,
36
- ): ts.Expression => {
37
- // BREAKER
38
- if (targets.length === 1)
39
- return config.objector.decoder()(input, targets[0]!, explore);
30
+ export const object = (props: {
31
+ config: FeatureProgrammer.IConfig;
32
+ level?: number;
33
+ objects: MetadataObject[];
34
+ input: ts.Expression;
35
+ explore: FeatureProgrammer.IExplore;
36
+ }): ts.Expression => {
37
+ // BREAKER
38
+ if (props.objects.length === 1)
39
+ return props.config.objector.decoder({
40
+ input: props.input,
41
+ object: props.objects[0]!,
42
+ explore: props.explore,
43
+ });
40
44
 
41
- const expected: string = `(${targets.map((t) => t.name).join(" | ")})`;
45
+ const expected: string = `(${props.objects.map((t) => t.name).join(" | ")})`;
42
46
 
43
- // POSSIBLE TO SPECIALIZE?
44
- const specList = UnionPredicator.object(targets);
45
- if (specList.length === 0) {
46
- const condition: ts.Expression = config.objector.unionizer(
47
- input,
48
- targets,
49
- {
50
- ...explore,
51
- tracable: false,
52
- },
53
- );
54
- return config.objector.full
55
- ? config.objector.full(condition)(input, expected, explore)
56
- : condition;
57
- }
58
- const remained: MetadataObject[] = targets.filter(
59
- (t) => specList.find((s) => s.object === t) === undefined,
60
- );
47
+ // POSSIBLE TO SPECIALIZE?
48
+ const specList = UnionPredicator.object(props.objects);
49
+ if (specList.length === 0) {
50
+ const condition: ts.Expression = props.config.objector.unionizer({
51
+ objects: props.objects,
52
+ input: props.input,
53
+ explore: {
54
+ ...props.explore,
55
+ tracable: false,
56
+ },
57
+ });
58
+ return props.config.objector.full
59
+ ? props.config.objector.full({
60
+ condition,
61
+ expected,
62
+ explore: props.explore,
63
+ input: props.input,
64
+ })
65
+ : condition;
66
+ }
67
+ const remained: MetadataObject[] = props.objects.filter(
68
+ (t) => specList.find((s) => s.object === t) === undefined,
69
+ );
61
70
 
62
- // DO SPECIALIZE
63
- const condition: ts.IfStatement = specList
64
- .filter((spec) => spec.property.key.getSoleLiteral() !== null)
65
- .map((spec, i, array) => {
66
- const key: string = spec.property.key.getSoleLiteral()!;
67
- const accessor: ts.Expression = IdentifierFactory.access(input)(key);
68
- const pred: ts.Expression = spec.neighbour
69
- ? config.objector.checker()(accessor, spec.property.value, {
70
- ...explore,
71
+ // DO SPECIALIZE
72
+ const condition: ts.IfStatement = specList
73
+ .filter((spec) => spec.property.key.getSoleLiteral() !== null)
74
+ .map((spec, i, array) => {
75
+ const key: string = spec.property.key.getSoleLiteral()!;
76
+ const accessor: ts.Expression = IdentifierFactory.access(props.input)(
77
+ key,
78
+ );
79
+ const pred: ts.Expression = spec.neighbour
80
+ ? props.config.objector.checker({
81
+ input: accessor,
82
+ metadata: spec.property.value,
83
+ explore: {
84
+ ...props.explore,
71
85
  tracable: false,
72
86
  postfix: IdentifierFactory.postfix(key),
73
- })
74
- : (config.objector.required || ((exp) => exp))(
75
- ExpressionFactory.isRequired(accessor),
76
- );
77
- return ts.factory.createIfStatement(
78
- (config.objector.is || ((exp) => exp))(pred),
79
- ts.factory.createReturnStatement(
80
- config.objector.decoder()(input, spec.object, explore),
81
- ),
82
- i === array.length - 1
83
- ? remained.length
84
- ? ts.factory.createReturnStatement(
85
- object(config, level + 1)(input, remained, explore),
86
- )
87
- : config.objector.failure(input, expected, explore)
88
- : undefined,
89
- );
90
- })
91
- .reverse()
92
- .reduce((a, b) =>
93
- ts.factory.createIfStatement(b.expression, b.thenStatement, a),
87
+ },
88
+ })
89
+ : (props.config.objector.required || ((exp) => exp))(
90
+ ExpressionFactory.isRequired(accessor),
91
+ );
92
+ return ts.factory.createIfStatement(
93
+ (props.config.objector.is || ((exp) => exp))(pred),
94
+ ts.factory.createReturnStatement(
95
+ props.config.objector.decoder({
96
+ object: spec.object,
97
+ input: props.input,
98
+ explore: props.explore,
99
+ }),
100
+ ),
101
+ i === array.length - 1
102
+ ? remained.length
103
+ ? ts.factory.createReturnStatement(
104
+ object({
105
+ config: props.config,
106
+ level: (props.level ?? 0) + 1,
107
+ input: props.input,
108
+ objects: remained,
109
+ explore: props.explore,
110
+ }),
111
+ )
112
+ : props.config.objector.failure({
113
+ input: props.input,
114
+ explore: props.explore,
115
+ expected,
116
+ })
117
+ : undefined,
94
118
  );
119
+ })
120
+ .reverse()
121
+ .reduce((a, b) =>
122
+ ts.factory.createIfStatement(b.expression, b.thenStatement, a),
123
+ );
95
124
 
96
- // RETURNS WITH CONDITIONS
97
- return ts.factory.createCallExpression(
98
- ts.factory.createArrowFunction(
99
- undefined,
100
- undefined,
101
- [],
102
- undefined,
103
- undefined,
104
- ts.factory.createBlock([condition], true),
105
- ),
125
+ // RETURNS WITH CONDITIONS
126
+ return ts.factory.createCallExpression(
127
+ ts.factory.createArrowFunction(
106
128
  undefined,
107
129
  undefined,
108
- );
109
- };
130
+ [],
131
+ undefined,
132
+ undefined,
133
+ ts.factory.createBlock([condition], true),
134
+ ),
135
+ undefined,
136
+ undefined,
137
+ );
138
+ };
110
139
 
111
140
  /* -----------------------------------------------------------
112
141
  ARRAY LIKE
113
142
  ----------------------------------------------------------- */
114
- export const tuple = (
115
- props: check_union_array_like.IProps<MetadataTuple, MetadataTuple>,
116
- ) =>
143
+ export const tuple = (props: {
144
+ config: check_union_array_like.IConfig<MetadataTuple, MetadataTuple>;
145
+ parameters: ts.ParameterDeclaration[];
146
+ input: ts.Expression;
147
+ tuples: MetadataTuple[];
148
+ explore: FeatureProgrammer.IExplore;
149
+ }) =>
117
150
  check_union_array_like<MetadataTuple, MetadataTuple, MetadataTuple>({
118
- transform: (x) => x,
119
- element: (x) => x,
120
- size: null!,
121
- front: (input) => input,
122
- array: (input) => input,
123
- name: (t) => t.type.name,
124
- })(props);
151
+ config: props.config,
152
+ accessor: {
153
+ transform: (x) => x,
154
+ element: (x) => x,
155
+ size: null!,
156
+ front: (input) => input,
157
+ array: (input) => input,
158
+ name: (t) => t.type.name,
159
+ },
160
+ parameters: props.parameters,
161
+ input: props.input,
162
+ definitions: props.tuples,
163
+ explore: props.explore,
164
+ });
125
165
  export namespace tuple {
126
- export type IProps = check_union_array_like.IProps<
166
+ export type IConfig = check_union_array_like.IConfig<
127
167
  MetadataTuple,
128
168
  MetadataTuple
129
169
  >;
130
170
  }
131
171
 
132
- export const array = (props: array.IProps) =>
172
+ export const array = (props: {
173
+ config: array.IConfig;
174
+ parameters: ts.ParameterDeclaration[];
175
+ input: ts.Expression;
176
+ arrays: MetadataArray[];
177
+ explore: FeatureProgrammer.IExplore;
178
+ }) =>
133
179
  check_union_array_like<MetadataArray, MetadataArray, Metadata>({
134
- transform: (x) => x,
135
- element: (x) => x.type.value,
136
- size: (input) => IdentifierFactory.access(input)("length"),
137
- front: (input) => ts.factory.createElementAccessExpression(input, 0),
138
- array: (input) => input,
139
- name: (t) => t.type.name,
140
- })(props);
180
+ config: props.config,
181
+ accessor: {
182
+ transform: (x) => x,
183
+ element: (x) => x.type.value,
184
+ size: (input) => IdentifierFactory.access(input)("length"),
185
+ front: (input) => ts.factory.createElementAccessExpression(input, 0),
186
+ array: (input) => input,
187
+ name: (t) => t.type.name,
188
+ },
189
+ parameters: props.parameters,
190
+ input: props.input,
191
+ definitions: props.arrays,
192
+ explore: props.explore,
193
+ });
141
194
  export namespace array {
142
- export type IProps = check_union_array_like.IProps<MetadataArray, Metadata>;
195
+ export type IConfig = check_union_array_like.IConfig<
196
+ MetadataArray,
197
+ Metadata
198
+ >;
143
199
  }
144
200
 
145
- export const array_or_tuple = (props: array_or_tuple.IProps) =>
201
+ export const array_or_tuple = (props: {
202
+ config: array_or_tuple.IConfig;
203
+ parameters: ts.ParameterDeclaration[];
204
+ input: ts.Expression;
205
+ definitions: (MetadataArray | MetadataTuple)[];
206
+ explore: FeatureProgrammer.IExplore;
207
+ }) =>
146
208
  check_union_array_like<
147
209
  MetadataArray | MetadataTuple,
148
210
  MetadataArray | MetadataTuple,
149
211
  Metadata | MetadataTuple
150
212
  >({
151
- transform: (x) => x,
152
- element: (x) => (x instanceof MetadataArray ? x.type.value : x),
153
- size: (input) => IdentifierFactory.access(input)("length"),
154
- front: (input) => ts.factory.createElementAccessExpression(input, 0),
155
- array: (input) => input,
156
- name: (m) => m.type.name,
157
- })(props);
213
+ config: props.config,
214
+ accessor: {
215
+ transform: (x) => x,
216
+ element: (x) => (x instanceof MetadataArray ? x.type.value : x),
217
+ size: (input) => IdentifierFactory.access(input)("length"),
218
+ front: (input) => ts.factory.createElementAccessExpression(input, 0),
219
+ array: (input) => input,
220
+ name: (m) => m.type.name,
221
+ },
222
+ parameters: props.parameters,
223
+ input: props.input,
224
+ definitions: props.definitions,
225
+ explore: props.explore,
226
+ });
158
227
  export namespace array_or_tuple {
159
- export type IProps = check_union_array_like.IProps<
228
+ export type IConfig = check_union_array_like.IConfig<
160
229
  MetadataArray | MetadataTuple,
161
230
  Metadata | MetadataTuple
162
231
  >;
163
232
  }
164
233
 
165
- export const set = (props: set.IProps) =>
234
+ export const set = (props: {
235
+ config: set.IConfig;
236
+ parameters: ts.ParameterDeclaration[];
237
+ input: ts.Expression;
238
+ sets: Metadata[];
239
+ explore: FeatureProgrammer.IExplore;
240
+ }) =>
166
241
  check_union_array_like<Metadata, MetadataArray, Metadata>({
167
- transform: (value: Metadata) =>
168
- MetadataArray.create({
169
- tags: [],
170
- type: MetadataArrayType.create({
171
- name: `Set<${value.getName()}>`,
172
- index: null,
173
- recursive: false,
174
- nullables: [],
175
- value,
242
+ config: props.config,
243
+ accessor: {
244
+ transform: (value: Metadata) =>
245
+ MetadataArray.create({
246
+ tags: [],
247
+ type: MetadataArrayType.create({
248
+ name: `Set<${value.getName()}>`,
249
+ index: null,
250
+ recursive: false,
251
+ nullables: [],
252
+ value,
253
+ }),
176
254
  }),
177
- }),
178
- element: (array) => array.type.value,
179
- size: (input) => IdentifierFactory.access(input)("size"),
180
- front: (input) =>
181
- IdentifierFactory.access(
182
- ts.factory.createCallExpression(
183
- IdentifierFactory.access(
184
- ts.factory.createCallExpression(
185
- IdentifierFactory.access(input)("values"),
186
- undefined,
187
- undefined,
188
- ),
189
- )("next"),
190
- undefined,
191
- undefined,
192
- ),
193
- )("value"),
194
- array: (input) =>
195
- ts.factory.createArrayLiteralExpression(
196
- [ts.factory.createSpreadElement(input)],
197
- false,
198
- ),
199
- name: (_m, e) => `Set<${e.getName()}>`,
200
- })(props);
201
- export namespace set {
202
- export type IProps = check_union_array_like.IProps<MetadataArray, Metadata>;
203
- }
204
-
205
- export const map = (props: map.IProps) =>
206
- check_union_array_like<Metadata.Entry, MetadataArray, [Metadata, Metadata]>(
207
- {
208
- element: (array) =>
209
- array.type.value.tuples[0]!.type.elements as [Metadata, Metadata],
255
+ element: (array) => array.type.value,
210
256
  size: (input) => IdentifierFactory.access(input)("size"),
211
257
  front: (input) =>
212
258
  IdentifierFactory.access(
213
259
  ts.factory.createCallExpression(
214
260
  IdentifierFactory.access(
215
261
  ts.factory.createCallExpression(
216
- IdentifierFactory.access(input)("entries"),
262
+ IdentifierFactory.access(input)("values"),
217
263
  undefined,
218
264
  undefined,
219
265
  ),
@@ -227,41 +273,93 @@ export namespace UnionExplorer {
227
273
  [ts.factory.createSpreadElement(input)],
228
274
  false,
229
275
  ),
230
- name: (_m, [k, v]) => `Map<${k.getName()}, ${v.getName()}>`,
231
- transform: (m: Metadata.Entry) =>
232
- MetadataArray.create({
233
- tags: [],
234
- type: MetadataArrayType.create({
235
- name: `Map<${m.key.getName()}, ${m.value.getName()}>`,
236
- index: null,
237
- recursive: false,
238
- nullables: [],
239
- value: Metadata.create({
240
- ...Metadata.initialize(),
241
- tuples: [
242
- (() => {
243
- const tuple = MetadataTuple.create({
244
- tags: [],
245
- type: MetadataTupleType.create({
246
- name: `[${m.key.getName()}, ${m.value.getName()}]`,
247
- index: null,
248
- recursive: false,
249
- nullables: [],
250
- elements: [m.key, m.value],
251
- }),
252
- });
253
- tuple.type.of_map = true;
254
- return tuple;
255
- })(),
256
- ],
276
+ name: (_m, e) => `Set<${e.getName()}>`,
277
+ },
278
+ parameters: props.parameters,
279
+ input: props.input,
280
+ definitions: props.sets,
281
+ explore: props.explore,
282
+ });
283
+ export namespace set {
284
+ export type IConfig = check_union_array_like.IConfig<
285
+ MetadataArray,
286
+ Metadata
287
+ >;
288
+ }
289
+
290
+ export const map = (props: {
291
+ config: map.IConfig;
292
+ parameters: ts.ParameterDeclaration[];
293
+ input: ts.Expression;
294
+ maps: Metadata.Entry[];
295
+ explore: FeatureProgrammer.IExplore;
296
+ }) =>
297
+ check_union_array_like<Metadata.Entry, MetadataArray, [Metadata, Metadata]>(
298
+ {
299
+ config: props.config,
300
+ accessor: {
301
+ element: (array) =>
302
+ array.type.value.tuples[0]!.type.elements as [Metadata, Metadata],
303
+ size: (input) => IdentifierFactory.access(input)("size"),
304
+ front: (input) =>
305
+ IdentifierFactory.access(
306
+ ts.factory.createCallExpression(
307
+ IdentifierFactory.access(
308
+ ts.factory.createCallExpression(
309
+ IdentifierFactory.access(input)("entries"),
310
+ undefined,
311
+ undefined,
312
+ ),
313
+ )("next"),
314
+ undefined,
315
+ undefined,
316
+ ),
317
+ )("value"),
318
+ array: (input) =>
319
+ ts.factory.createArrayLiteralExpression(
320
+ [ts.factory.createSpreadElement(input)],
321
+ false,
322
+ ),
323
+ name: (_m, [k, v]) => `Map<${k.getName()}, ${v.getName()}>`,
324
+ transform: (m: Metadata.Entry) =>
325
+ MetadataArray.create({
326
+ tags: [],
327
+ type: MetadataArrayType.create({
328
+ name: `Map<${m.key.getName()}, ${m.value.getName()}>`,
329
+ index: null,
330
+ recursive: false,
331
+ nullables: [],
332
+ value: Metadata.create({
333
+ ...Metadata.initialize(),
334
+ tuples: [
335
+ (() => {
336
+ const tuple = MetadataTuple.create({
337
+ tags: [],
338
+ type: MetadataTupleType.create({
339
+ name: `[${m.key.getName()}, ${m.value.getName()}]`,
340
+ index: null,
341
+ recursive: false,
342
+ nullables: [],
343
+ elements: [m.key, m.value],
344
+ }),
345
+ });
346
+ tuple.type.of_map = true;
347
+ return tuple;
348
+ })(),
349
+ ],
350
+ }),
257
351
  }),
258
352
  }),
259
- }),
353
+ },
354
+ parameters: props.parameters,
355
+ input: props.input,
356
+ definitions: props.maps,
357
+ explore: props.explore,
260
358
  },
261
- )(props);
359
+ );
262
360
 
263
361
  export namespace map {
264
- export type IProps = check_union_array_like.IProps<
362
+ export type IConfig = check_union_array_like.IConfig<
265
363
  MetadataArray,
266
364
  [Metadata, Metadata]
267
365
  >;
@@ -13,18 +13,18 @@ export namespace UnionPredicator {
13
13
  neighbour: boolean;
14
14
  }
15
15
 
16
- export const object = (targets: MetadataObject[]): Array<ISpecialized> => {
16
+ export const object = (objects: MetadataObject[]): Array<ISpecialized> => {
17
17
  // PROPERTY MATRIX
18
18
  const matrix: Map<string, Array<MetadataProperty | null>> = new Map();
19
- for (const obj of targets)
19
+ for (const obj of objects)
20
20
  for (const prop of obj.properties) {
21
21
  const key: string | null = prop.key.getSoleLiteral();
22
22
  if (key !== null)
23
23
  MapUtil.take(matrix)(key, () =>
24
- ArrayUtil.repeat(targets.length, () => null),
24
+ ArrayUtil.repeat(objects.length, () => null),
25
25
  );
26
26
  }
27
- targets.forEach((obj, i) => {
27
+ objects.forEach((obj, i) => {
28
28
  for (const prop of obj.properties) {
29
29
  const key: string | null = prop.key.getSoleLiteral();
30
30
  if (key !== null) matrix.get(key)![i] = prop;
@@ -33,7 +33,7 @@ export namespace UnionPredicator {
33
33
 
34
34
  // EXPLORE SPECIALIZERS
35
35
  const output: ISpecialized[] = [];
36
- targets.forEach((obj, i) => {
36
+ objects.forEach((obj, i) => {
37
37
  const children: ISpecializedProperty[] = [];
38
38
  obj.properties.forEach((prop) => {
39
39
  // MUST BE REQUIRED