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
@@ -59,7 +59,10 @@ export namespace HttpQueryProgrammer {
59
59
 
60
60
  // DO TRANSFORM
61
61
  const object: MetadataObject = result.data.objects[0]!;
62
- const statements: ts.Statement[] = decode_object(props.importer)(object);
62
+ const statements: ts.Statement[] = decode_object({
63
+ importer: props.importer,
64
+ object,
65
+ });
63
66
  return {
64
67
  functions: {},
65
68
  statements: [],
@@ -173,132 +176,150 @@ export namespace HttpQueryProgrammer {
173
176
  return errors;
174
177
  };
175
178
 
176
- const decode_object =
177
- (importer: FunctionImporter) =>
178
- (object: MetadataObject): ts.Statement[] => {
179
- const input: ts.Identifier = ts.factory.createIdentifier("input");
180
- const output: ts.Identifier = ts.factory.createIdentifier("output");
179
+ const decode_object = (props: {
180
+ importer: FunctionImporter;
181
+ object: MetadataObject;
182
+ }): ts.Statement[] => {
183
+ const input: ts.Identifier = ts.factory.createIdentifier("input");
184
+ const output: ts.Identifier = ts.factory.createIdentifier("output");
181
185
 
182
- return [
183
- ts.factory.createExpressionStatement(
184
- ts.factory.createBinaryExpression(
185
- input,
186
- ts.factory.createToken(ts.SyntaxKind.EqualsToken),
187
- ts.factory.createAsExpression(
188
- ts.factory.createCallExpression(
189
- importer.use("params"),
190
- undefined,
191
- [input],
192
- ),
193
- ts.factory.createTypeReferenceNode("URLSearchParams"),
186
+ return [
187
+ ts.factory.createExpressionStatement(
188
+ ts.factory.createBinaryExpression(
189
+ input,
190
+ ts.factory.createToken(ts.SyntaxKind.EqualsToken),
191
+ ts.factory.createAsExpression(
192
+ ts.factory.createCallExpression(
193
+ props.importer.use("params"),
194
+ undefined,
195
+ [input],
194
196
  ),
197
+ ts.factory.createTypeReferenceNode("URLSearchParams"),
195
198
  ),
196
199
  ),
197
- StatementFactory.constant(
198
- "output",
199
- ts.factory.createObjectLiteralExpression(
200
- object.properties.map((prop) =>
201
- decode_regular_property(importer)(prop),
202
- ),
203
- true,
200
+ ),
201
+ StatementFactory.constant(
202
+ "output",
203
+ ts.factory.createObjectLiteralExpression(
204
+ props.object.properties.map((p) =>
205
+ decode_regular_property({
206
+ importer: props.importer,
207
+ property: p,
208
+ }),
204
209
  ),
210
+ true,
205
211
  ),
206
- ts.factory.createReturnStatement(
207
- ts.factory.createAsExpression(output, TypeFactory.keyword("any")),
208
- ),
209
- ];
210
- };
212
+ ),
213
+ ts.factory.createReturnStatement(
214
+ ts.factory.createAsExpression(output, TypeFactory.keyword("any")),
215
+ ),
216
+ ];
217
+ };
211
218
 
212
- const decode_regular_property =
213
- (importer: FunctionImporter) =>
214
- (property: MetadataProperty): ts.PropertyAssignment => {
215
- const key: string = property.key.constants[0]!.values[0]!.value as string;
216
- const value: Metadata = property.value;
219
+ const decode_regular_property = (props: {
220
+ importer: FunctionImporter;
221
+ property: MetadataProperty;
222
+ }): ts.PropertyAssignment => {
223
+ const key: string = props.property.key.constants[0]!.values[0]!
224
+ .value as string;
225
+ const value: Metadata = props.property.value;
217
226
 
218
- const [type, isArray]: [Atomic.Literal, boolean] = value.atomics.length
219
- ? [value.atomics[0]!.type, false]
220
- : value.constants.length
221
- ? [value.constants[0]!.type, false]
222
- : value.templates.length
223
- ? ["string", false]
224
- : (() => {
225
- const meta =
226
- value.arrays[0]?.type.value ??
227
- value.tuples[0]!.type.elements[0]!;
228
- return meta.atomics.length
229
- ? [meta.atomics[0]!.type, true]
230
- : meta.templates.length
231
- ? ["string", true]
232
- : [meta.constants[0]!.type, true];
233
- })();
234
- return ts.factory.createPropertyAssignment(
235
- Escaper.variable(key) ? key : ts.factory.createStringLiteral(key),
236
- isArray
237
- ? decode_array(importer)(value)(
238
- ts.factory.createCallExpression(
239
- IdentifierFactory.access(
240
- ts.factory.createCallExpression(
241
- ts.factory.createIdentifier("input.getAll"),
242
- undefined,
243
- [ts.factory.createStringLiteral(key)],
244
- ),
245
- )("map"),
246
- undefined,
247
- [
248
- ts.factory.createArrowFunction(
249
- undefined,
250
- undefined,
251
- [IdentifierFactory.parameter("elem")],
252
- undefined,
253
- undefined,
254
- decode_value(importer)(type)(false)(
255
- ts.factory.createIdentifier("elem"),
256
- ),
257
- ),
258
- ],
259
- ),
260
- )
261
- : decode_value(importer)(type)(
262
- value.nullable === false && value.isRequired() === false,
263
- )(
264
- ts.factory.createCallExpression(
265
- ts.factory.createIdentifier("input.get"),
266
- undefined,
267
- [ts.factory.createStringLiteral(key)],
268
- ),
227
+ const [type, isArray]: [Atomic.Literal, boolean] = value.atomics.length
228
+ ? [value.atomics[0]!.type, false]
229
+ : value.constants.length
230
+ ? [value.constants[0]!.type, false]
231
+ : value.templates.length
232
+ ? ["string", false]
233
+ : (() => {
234
+ const meta =
235
+ value.arrays[0]?.type.value ??
236
+ value.tuples[0]!.type.elements[0]!;
237
+ return meta.atomics.length
238
+ ? [meta.atomics[0]!.type, true]
239
+ : meta.templates.length
240
+ ? ["string", true]
241
+ : [meta.constants[0]!.type, true];
242
+ })();
243
+ return ts.factory.createPropertyAssignment(
244
+ Escaper.variable(key) ? key : ts.factory.createStringLiteral(key),
245
+ isArray
246
+ ? decode_array({
247
+ importer: props.importer,
248
+ metadata: value,
249
+ input: ts.factory.createCallExpression(
250
+ IdentifierFactory.access(
251
+ ts.factory.createCallExpression(
252
+ ts.factory.createIdentifier("input.getAll"),
253
+ undefined,
254
+ [ts.factory.createStringLiteral(key)],
255
+ ),
256
+ )("map"),
257
+ undefined,
258
+ [
259
+ ts.factory.createArrowFunction(
260
+ undefined,
261
+ undefined,
262
+ [IdentifierFactory.parameter("elem")],
263
+ undefined,
264
+ undefined,
265
+ decode_value({
266
+ importer: props.importer,
267
+ type,
268
+ coalesce: false,
269
+ input: ts.factory.createIdentifier("elem"),
270
+ }),
271
+ ),
272
+ ],
269
273
  ),
270
- );
271
- };
274
+ })
275
+ : decode_value({
276
+ importer: props.importer,
277
+ type,
278
+ coalesce: value.nullable === false && value.isRequired() === false,
279
+ input: ts.factory.createCallExpression(
280
+ ts.factory.createIdentifier("input.get"),
281
+ undefined,
282
+ [ts.factory.createStringLiteral(key)],
283
+ ),
284
+ }),
285
+ );
286
+ };
272
287
 
273
- const decode_value =
274
- (importer: FunctionImporter) =>
275
- (type: Atomic.Literal) =>
276
- (onlyUndefindable: boolean) =>
277
- (value: ts.Expression) => {
278
- const call = ts.factory.createCallExpression(
279
- importer.use(type),
280
- undefined,
281
- [value],
282
- );
283
- return onlyUndefindable
284
- ? ts.factory.createBinaryExpression(
285
- call,
286
- ts.factory.createToken(ts.SyntaxKind.QuestionQuestionToken),
287
- ts.factory.createIdentifier("undefined"),
288
- )
289
- : call;
290
- };
288
+ const decode_value = (props: {
289
+ importer: FunctionImporter;
290
+ type: Atomic.Literal;
291
+ coalesce: boolean;
292
+ input: ts.Expression;
293
+ }) => {
294
+ const call = ts.factory.createCallExpression(
295
+ props.importer.use(props.type),
296
+ undefined,
297
+ [props.input],
298
+ );
299
+ return props.coalesce
300
+ ? ts.factory.createBinaryExpression(
301
+ call,
302
+ ts.factory.createToken(ts.SyntaxKind.QuestionQuestionToken),
303
+ ts.factory.createIdentifier("undefined"),
304
+ )
305
+ : call;
306
+ };
291
307
 
292
- const decode_array =
293
- (importer: FunctionImporter) =>
294
- (value: Metadata) =>
295
- (expression: ts.Expression): ts.Expression =>
296
- value.nullable || value.isRequired() === false
297
- ? ts.factory.createCallExpression(importer.use("array"), undefined, [
298
- expression,
299
- value.nullable
308
+ const decode_array = (props: {
309
+ importer: FunctionImporter;
310
+ metadata: Metadata;
311
+ input: ts.Expression;
312
+ }): ts.Expression =>
313
+ props.metadata.nullable || props.metadata.isRequired() === false
314
+ ? ts.factory.createCallExpression(
315
+ props.importer.use("array"),
316
+ undefined,
317
+ [
318
+ props.input,
319
+ props.metadata.nullable
300
320
  ? ts.factory.createNull()
301
321
  : ts.factory.createIdentifier("undefined"),
302
- ])
303
- : expression;
322
+ ],
323
+ )
324
+ : props.input;
304
325
  }
@@ -38,17 +38,17 @@ export const application_escaped = <Version extends "3.0" | "3.1">(props: {
38
38
  * @internal
39
39
  */
40
40
  const is_string = <Version extends "3.0" | "3.1">(
41
- elem: Schema<Version>,
42
- ): elem is StringSchema<Version> =>
43
- (elem as StringSchema<Version>).type === "string";
41
+ schema: Schema<Version>,
42
+ ): schema is StringSchema<Version> =>
43
+ (schema as StringSchema<Version>).type === "string";
44
44
 
45
45
  /**
46
46
  * @internal
47
47
  */
48
48
  const is_one_of = <Version extends "3.0" | "3.1">(
49
- elem: Schema<Version>,
50
- ): elem is OneOfSchema<Version> =>
51
- Array.isArray((elem as OneOfSchema<Version>).oneOf);
49
+ schema: Schema<Version>,
50
+ ): schema is OneOfSchema<Version> =>
51
+ Array.isArray((schema as OneOfSchema<Version>).oneOf);
52
52
 
53
53
  /**
54
54
  * @internal
@@ -24,24 +24,26 @@ export const application_templates = <Version extends "3.0" | "3.1">(
24
24
  if (pureTemplates.length)
25
25
  output.push({
26
26
  type: "string",
27
- pattern: metadata_to_pattern(true)(
28
- Metadata.create({
27
+ pattern: metadata_to_pattern({
28
+ top: true,
29
+ metadata: Metadata.create({
29
30
  ...Metadata.initialize(),
30
31
  templates: pureTemplates,
31
32
  }),
32
- ),
33
+ }),
33
34
  });
34
35
  for (const tpl of taggedTemplates)
35
36
  output.push(
36
37
  application_plugin({
37
38
  schema: {
38
39
  type: "string",
39
- pattern: metadata_to_pattern(false)(
40
- Metadata.create({
40
+ pattern: metadata_to_pattern({
41
+ top: false,
42
+ metadata: Metadata.create({
41
43
  ...Metadata.initialize(),
42
44
  templates: [tpl],
43
45
  }),
44
- ),
46
+ }),
45
47
  },
46
48
  tags: tpl.tags ?? [],
47
49
  }) as any,
@@ -5,19 +5,19 @@ import { Metadata } from "../../schemas/metadata/Metadata";
5
5
  import { UnionPredicator } from "../helpers/UnionPredicator";
6
6
 
7
7
  export const application_union_discriminator = (
8
- meta: Metadata,
8
+ metadata: Metadata,
9
9
  ): OpenApi.IJsonSchema.IOneOf.IDiscriminator | undefined => {
10
10
  if (
11
- meta.size() === 0 ||
12
- meta.size() !== meta.objects.length ||
13
- meta.objects.some((o) => o.isLiteral()) === true
11
+ metadata.size() === 0 ||
12
+ metadata.size() !== metadata.objects.length ||
13
+ metadata.objects.some((o) => o.isLiteral()) === true
14
14
  )
15
15
  return undefined;
16
16
  const specialized: UnionPredicator.ISpecialized[] = UnionPredicator.object(
17
- meta.objects,
17
+ metadata.objects,
18
18
  );
19
19
  const meet: boolean =
20
- specialized.length === meta.objects.length &&
20
+ specialized.length === metadata.objects.length &&
21
21
  specialized.every(
22
22
  (s) => s.property.key.isSoleLiteral() && s.property.value.isSoleLiteral(),
23
23
  ) &&
@@ -95,7 +95,10 @@ const create_object_schema = (props: {
95
95
  properties[key] = schema;
96
96
  if (property.value.isRequired() === true) required.push(key);
97
97
  } else {
98
- const pattern: string = metadata_to_pattern(true)(property.key);
98
+ const pattern: string = metadata_to_pattern({
99
+ top: true,
100
+ metadata: property.key,
101
+ });
99
102
  if (pattern === PatternUtil.STRING)
100
103
  extraMeta.additionalProperties = [property.value, schema];
101
104
  else extraMeta.patternProperties[pattern] = [property.value, schema];
@@ -140,7 +143,7 @@ const join = (props: {
140
143
  else if (elements.length === 1) return elements[0]![1]!;
141
144
 
142
145
  // MERGE METADATA AND GENERATE VULNERABLE SCHEMA
143
- const meta: Metadata = elements
146
+ const metadata: Metadata = elements
144
147
  .map((tuple) => tuple[0])
145
148
  .reduce((x, y) => Metadata.merge(x, y));
146
149
  return (
@@ -148,7 +151,7 @@ const join = (props: {
148
151
  blockNever: true,
149
152
  components: props.components,
150
153
  attribute: {},
151
- metadata: meta,
154
+ metadata,
152
155
  }) ?? undefined
153
156
  );
154
157
  };
@@ -78,7 +78,10 @@ const create_object_schema = (props: {
78
78
  properties[key] = schema;
79
79
  if (property.value.isRequired() === true) required.push(key);
80
80
  } else {
81
- const pattern: string = metadata_to_pattern(true)(property.key);
81
+ const pattern: string = metadata_to_pattern({
82
+ top: true,
83
+ metadata: property.key,
84
+ });
82
85
  if (pattern === PatternUtil.STRING)
83
86
  extraMeta.additionalProperties = [property.value, schema];
84
87
  else extraMeta.patternProperties[pattern] = [property.value, schema];
@@ -7,7 +7,7 @@ import { MetadataTuple } from "../../schemas/metadata/MetadataTuple";
7
7
  * @internal
8
8
  */
9
9
  export const application_v31_tuple = (props: {
10
- generator: (meta: Metadata) => OpenApi.IJsonSchema;
10
+ generator: (metadata: Metadata) => OpenApi.IJsonSchema;
11
11
  tuple: MetadataTuple;
12
12
  }): OpenApi.IJsonSchema.ITuple => {
13
13
  const tail: Metadata | null = props.tuple.type.elements.at(-1)?.rest ?? null;
@@ -2,7 +2,6 @@ import ts from "typescript";
2
2
 
3
3
  import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
4
 
5
- import { IMetadataTypeTag } from "../../schemas/metadata/IMetadataTypeTag";
6
5
  import { MetadataArray } from "../../schemas/metadata/MetadataArray";
7
6
 
8
7
  import { ITypiaContext } from "../../transformers/ITypiaContext";
@@ -12,34 +11,36 @@ import { ICheckEntry } from "../helpers/ICheckEntry";
12
11
  /**
13
12
  * @internal
14
13
  */
15
- export const check_array_length =
16
- (project: ITypiaContext) =>
17
- (array: MetadataArray) =>
18
- (input: ts.Expression): ICheckEntry => {
19
- const conditions: ICheckEntry.ICondition[][] = check_string_type_tags(
20
- project,
21
- )(array.tags)(input);
22
-
23
- return {
24
- expected: array.getName(),
25
- expression: null,
26
- conditions,
27
- };
14
+ export const check_array_length = (props: {
15
+ context: ITypiaContext;
16
+ array: MetadataArray;
17
+ input: ts.Expression;
18
+ }): ICheckEntry => {
19
+ const conditions: ICheckEntry.ICondition[][] = check_array_type_tags(props);
20
+ return {
21
+ expected: props.array.getName(),
22
+ expression: null,
23
+ conditions,
28
24
  };
25
+ };
29
26
 
30
- const check_string_type_tags =
31
- (project: ITypiaContext) =>
32
- (matrix: IMetadataTypeTag[][]) =>
33
- (input: ts.Expression): ICheckEntry.ICondition[][] =>
34
- matrix
35
- .map((row) => row.filter((tag) => !!tag.validate))
36
- .filter((row) => !!row.length)
37
- .map((row) =>
38
- row.map((tag) => ({
39
- expected: `Array<> & ${tag.name}`,
40
- expression: (
41
- tag.predicate ??
42
- ExpressionFactory.transpile(project.transformer)(tag.validate!)
43
- )(input),
44
- })),
45
- );
27
+ /**
28
+ * @internal
29
+ */
30
+ const check_array_type_tags = (props: {
31
+ context: ITypiaContext;
32
+ array: MetadataArray;
33
+ input: ts.Expression;
34
+ }): ICheckEntry.ICondition[][] =>
35
+ props.array.tags
36
+ .map((row) => row.filter((tag) => !!tag.validate))
37
+ .filter((row) => !!row.length)
38
+ .map((row) =>
39
+ row.map((tag) => ({
40
+ expected: `Array<> & ${tag.name}`,
41
+ expression: (
42
+ tag.predicate ??
43
+ ExpressionFactory.transpile(props.context.transformer)(tag.validate!)
44
+ )(props.input),
45
+ })),
46
+ );
@@ -11,39 +11,39 @@ import { ICheckEntry } from "../helpers/ICheckEntry";
11
11
  /**
12
12
  * @internal
13
13
  */
14
- export const check_bigint =
15
- (project: ITypiaContext) =>
16
- (atomic: MetadataAtomic) =>
17
- (input: ts.Expression): ICheckEntry => {
18
- const conditions: ICheckEntry.ICondition[][] =
19
- check_bigint_type_tags(project)(atomic)(input);
20
-
21
- return {
22
- expected: atomic.getName(),
23
- expression: ts.factory.createStrictEquality(
24
- ts.factory.createStringLiteral("bigint"),
25
- ts.factory.createTypeOfExpression(input),
26
- ),
27
- conditions,
28
- };
14
+ export const check_bigint = (props: {
15
+ context: ITypiaContext;
16
+ atomic: MetadataAtomic;
17
+ input: ts.Expression;
18
+ }): ICheckEntry => {
19
+ const conditions: ICheckEntry.ICondition[][] = check_bigint_type_tags(props);
20
+ return {
21
+ expected: props.atomic.getName(),
22
+ expression: ts.factory.createStrictEquality(
23
+ ts.factory.createStringLiteral("bigint"),
24
+ ts.factory.createTypeOfExpression(props.input),
25
+ ),
26
+ conditions,
29
27
  };
28
+ };
30
29
 
31
30
  /**
32
31
  * @internal
33
32
  */
34
- const check_bigint_type_tags =
35
- (project: ITypiaContext) =>
36
- (atomic: MetadataAtomic) =>
37
- (input: ts.Expression): ICheckEntry.ICondition[][] =>
38
- atomic.tags
39
- .map((row) => row.filter((tag) => !!tag.validate))
40
- .filter((row) => !!row.length)
41
- .map((row) =>
42
- row.map((tag) => ({
43
- expected: `bigint & ${tag.name}`,
44
- expression: (
45
- tag.predicate ??
46
- ExpressionFactory.transpile(project.transformer)(tag.validate!)
47
- )(input),
48
- })),
49
- );
33
+ const check_bigint_type_tags = (props: {
34
+ context: ITypiaContext;
35
+ atomic: MetadataAtomic;
36
+ input: ts.Expression;
37
+ }): ICheckEntry.ICondition[][] =>
38
+ props.atomic.tags
39
+ .map((row) => row.filter((tag) => !!tag.validate))
40
+ .filter((row) => !!row.length)
41
+ .map((row) =>
42
+ row.map((tag) => ({
43
+ expected: `bigint & ${tag.name}`,
44
+ expression: (
45
+ tag.predicate ??
46
+ ExpressionFactory.transpile(props.context.transformer)(tag.validate!)
47
+ )(props.input),
48
+ })),
49
+ );