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
@@ -9,6 +9,7 @@ import { TypeFactory } from "../../factories/TypeFactory";
9
9
 
10
10
  import { Metadata } from "../../schemas/metadata/Metadata";
11
11
  import { MetadataArray } from "../../schemas/metadata/MetadataArray";
12
+ import { MetadataObject } from "../../schemas/metadata/MetadataObject";
12
13
  import { MetadataTuple } from "../../schemas/metadata/MetadataTuple";
13
14
  import { MetadataTupleType } from "../../schemas/metadata/MetadataTupleType";
14
15
 
@@ -32,9 +33,10 @@ export namespace NotationGeneralProgrammer {
32
33
  rename: (str: string) => string;
33
34
  }
34
35
 
35
- export const returnType =
36
- (rename: (str: string) => string) => (type: string) =>
37
- `typia.${StringUtil.capitalize(rename.name)}Case<${type}>`;
36
+ export const returnType = (props: {
37
+ rename: (str: string) => string;
38
+ type: string;
39
+ }) => `typia.${StringUtil.capitalize(props.rename.name)}Case<${props.type}>`;
38
40
 
39
41
  export const decompose = (props: {
40
42
  rename: (str: string) => string;
@@ -64,10 +66,12 @@ export namespace NotationGeneralProgrammer {
64
66
  undefined,
65
67
  composed.parameters,
66
68
  ts.factory.createTypeReferenceNode(
67
- returnType(props.rename)(
68
- props.name ??
69
+ returnType({
70
+ rename: props.rename,
71
+ type:
72
+ props.name ??
69
73
  TypeFactory.getFullName(props.context.checker)(props.type),
70
- ),
74
+ }),
71
75
  ),
72
76
  undefined,
73
77
  composed.body,
@@ -105,9 +109,11 @@ export namespace NotationGeneralProgrammer {
105
109
  ts.factory.createArrowFunction(
106
110
  undefined,
107
111
  undefined,
108
- FeatureProgrammer.parameterDeclarations(props.config)(
109
- TypeFactory.keyword("any"),
110
- )(ts.factory.createIdentifier("input")),
112
+ FeatureProgrammer.parameterDeclarations({
113
+ config: props.config,
114
+ type: TypeFactory.keyword("any"),
115
+ input: ts.factory.createIdentifier("input"),
116
+ }),
111
117
  TypeFactory.keyword("any"),
112
118
  undefined,
113
119
  decode_array_inline({
@@ -143,9 +149,11 @@ export namespace NotationGeneralProgrammer {
143
149
  ts.factory.createArrowFunction(
144
150
  undefined,
145
151
  undefined,
146
- FeatureProgrammer.parameterDeclarations(props.config)(
147
- TypeFactory.keyword("any"),
148
- )(ts.factory.createIdentifier("input")),
152
+ FeatureProgrammer.parameterDeclarations({
153
+ config: props.config,
154
+ type: TypeFactory.keyword("any"),
155
+ input: ts.factory.createIdentifier("input"),
156
+ }),
149
157
  TypeFactory.keyword("any"),
150
158
  undefined,
151
159
  decode_tuple_inline({
@@ -238,7 +246,7 @@ export namespace NotationGeneralProgrammer {
238
246
  value: () =>
239
247
  explore_arrays({
240
248
  ...props,
241
- elements: props.metadata.arrays,
249
+ arrays: props.metadata.arrays,
242
250
  explore: {
243
251
  ...props.explore,
244
252
  from: "array",
@@ -342,12 +350,23 @@ export namespace NotationGeneralProgrammer {
342
350
  }
343
351
  };
344
352
 
345
- const decode_object = (importer: FunctionImporter) =>
353
+ const decode_object = (props: {
354
+ importer: FunctionImporter;
355
+ object: MetadataObject;
356
+ input: ts.Expression;
357
+ explore: FeatureProgrammer.IExplore;
358
+ }) =>
346
359
  FeatureProgrammer.decode_object({
347
- trace: false,
348
- path: false,
349
- prefix: PREFIX,
350
- })(importer);
360
+ config: {
361
+ trace: false,
362
+ path: false,
363
+ prefix: PREFIX,
364
+ },
365
+ importer: props.importer,
366
+ object: props.object,
367
+ input: props.input,
368
+ explore: props.explore,
369
+ });
351
370
 
352
371
  const decode_array = (props: {
353
372
  config: FeatureProgrammer.IConfig;
@@ -364,11 +383,15 @@ export namespace NotationGeneralProgrammer {
364
383
  ),
365
384
  ),
366
385
  undefined,
367
- FeatureProgrammer.argumentsArray(props.config)({
368
- ...props.explore,
369
- source: "function",
370
- from: "array",
371
- })(props.input),
386
+ FeatureProgrammer.argumentsArray({
387
+ config: props.config,
388
+ explore: {
389
+ ...props.explore,
390
+ source: "function",
391
+ from: "array",
392
+ },
393
+ input: props.input,
394
+ }),
372
395
  )
373
396
  : decode_array_inline(props);
374
397
 
@@ -379,9 +402,14 @@ export namespace NotationGeneralProgrammer {
379
402
  array: MetadataArray;
380
403
  explore: FeatureProgrammer.IExplore;
381
404
  }) =>
382
- FeatureProgrammer.decode_array(props.config)(props.importer)(
383
- NotationJoiner.array,
384
- )(props.input, props.array, props.explore);
405
+ FeatureProgrammer.decode_array({
406
+ config: props.config,
407
+ importer: props.importer,
408
+ combiner: NotationJoiner.array,
409
+ array: props.array,
410
+ input: props.input,
411
+ explore: props.explore,
412
+ });
385
413
 
386
414
  const decode_tuple = (props: {
387
415
  context: ITypiaContext;
@@ -399,10 +427,14 @@ export namespace NotationGeneralProgrammer {
399
427
  ),
400
428
  ),
401
429
  undefined,
402
- FeatureProgrammer.argumentsArray(props.config)({
403
- ...props.explore,
404
- source: "function",
405
- })(props.input),
430
+ FeatureProgrammer.argumentsArray({
431
+ config: props.config,
432
+ explore: {
433
+ ...props.explore,
434
+ source: "function",
435
+ },
436
+ input: props.input,
437
+ }),
406
438
  )
407
439
  : decode_tuple_inline({
408
440
  ...props,
@@ -485,37 +517,47 @@ export namespace NotationGeneralProgrammer {
485
517
  }): ts.Expression =>
486
518
  ts.factory.createCallExpression(
487
519
  UnionExplorer.set({
488
- checker: (input, metadata, explore) =>
489
- IsProgrammer.decode({
490
- context: props.context,
491
- importer: props.importer,
492
- input,
493
- metadata,
494
- explore,
495
- }),
496
- decoder: (input, array, explore) =>
497
- ts.factory.createNewExpression(
520
+ config: {
521
+ checker: (v) =>
522
+ IsProgrammer.decode({
523
+ context: props.context,
524
+ importer: props.importer,
525
+ input: v.input,
526
+ metadata: v.definition,
527
+ explore: v.explore,
528
+ }),
529
+ decoder: (v) =>
530
+ ts.factory.createNewExpression(
531
+ ts.factory.createIdentifier("Set"),
532
+ [TypeFactory.keyword("any")],
533
+ [
534
+ decode_array({
535
+ config: props.config,
536
+ importer: props.importer,
537
+ input: v.input,
538
+ array: v.definition,
539
+ explore: v.explore,
540
+ }),
541
+ ],
542
+ ),
543
+ empty: ts.factory.createNewExpression(
498
544
  ts.factory.createIdentifier("Set"),
499
545
  [TypeFactory.keyword("any")],
500
- [
501
- decode_array({
502
- config: props.config,
503
- importer: props.importer,
504
- input,
505
- array,
506
- explore,
507
- }),
508
- ],
546
+ [],
509
547
  ),
510
- empty: ts.factory.createNewExpression(
511
- ts.factory.createIdentifier("Set"),
512
- [TypeFactory.keyword("any")],
513
- [],
514
- ),
515
- success: ts.factory.createTrue(),
516
- failure: (input, expected) =>
517
- create_throw_error({ importer: props.importer, expected, input }),
518
- })([])(props.input, props.sets, props.explore),
548
+ success: ts.factory.createTrue(),
549
+ failure: (v) =>
550
+ create_throw_error({
551
+ importer: props.importer,
552
+ expected: v.expected,
553
+ input: v.input,
554
+ }),
555
+ },
556
+ parameters: [],
557
+ input: props.input,
558
+ sets: props.sets,
559
+ explore: props.explore,
560
+ }),
519
561
  undefined,
520
562
  undefined,
521
563
  );
@@ -530,52 +572,62 @@ export namespace NotationGeneralProgrammer {
530
572
  }): ts.Expression =>
531
573
  ts.factory.createCallExpression(
532
574
  UnionExplorer.map({
533
- checker: (top, entry, explore) =>
534
- ts.factory.createLogicalAnd(
535
- IsProgrammer.decode({
536
- context: props.context,
537
- importer: props.importer,
538
- input: ts.factory.createElementAccessExpression(top, 0),
539
- metadata: entry[0],
540
- explore: {
541
- ...props.explore,
542
- postfix: `${explore.postfix}[0]`,
543
- },
544
- }),
545
- IsProgrammer.decode({
546
- context: props.context,
547
- importer: props.importer,
548
- input: ts.factory.createElementAccessExpression(top, 1),
549
- metadata: entry[1],
550
- explore: {
551
- ...props.explore,
552
- postfix: `${props.explore.postfix}[1]`,
553
- },
554
- }),
555
- ),
556
- decoder: (input, array, explore) =>
557
- ts.factory.createNewExpression(
558
- ts.factory.createIdentifier("Map"),
559
- [TypeFactory.keyword("any"), TypeFactory.keyword("any")],
560
- [
561
- decode_array({
562
- config: props.config,
575
+ config: {
576
+ checker: (v) =>
577
+ ts.factory.createLogicalAnd(
578
+ IsProgrammer.decode({
579
+ context: props.context,
563
580
  importer: props.importer,
564
- input,
565
- array,
566
- explore,
581
+ input: ts.factory.createElementAccessExpression(v.input, 0),
582
+ metadata: v.definition[0],
583
+ explore: {
584
+ ...props.explore,
585
+ postfix: `${v.explore.postfix}[0]`,
586
+ },
567
587
  }),
568
- ],
588
+ IsProgrammer.decode({
589
+ context: props.context,
590
+ importer: props.importer,
591
+ input: ts.factory.createElementAccessExpression(v.input, 1),
592
+ metadata: v.definition[1],
593
+ explore: {
594
+ ...props.explore,
595
+ postfix: `${props.explore.postfix}[1]`,
596
+ },
597
+ }),
598
+ ),
599
+ decoder: (v) =>
600
+ ts.factory.createNewExpression(
601
+ ts.factory.createIdentifier("Map"),
602
+ [TypeFactory.keyword("any"), TypeFactory.keyword("any")],
603
+ [
604
+ decode_array({
605
+ config: props.config,
606
+ importer: props.importer,
607
+ input: v.input,
608
+ array: v.definition,
609
+ explore: v.explore,
610
+ }),
611
+ ],
612
+ ),
613
+ empty: ts.factory.createNewExpression(
614
+ ts.factory.createIdentifier("Map"),
615
+ [TypeFactory.keyword("any"), TypeFactory.keyword("any")],
616
+ [],
569
617
  ),
570
- empty: ts.factory.createNewExpression(
571
- ts.factory.createIdentifier("Map"),
572
- [TypeFactory.keyword("any"), TypeFactory.keyword("any")],
573
- [],
574
- ),
575
- success: ts.factory.createTrue(),
576
- failure: (input, expected) =>
577
- create_throw_error({ importer: props.importer, expected, input }),
578
- })([])(props.input, props.maps, props.explore),
618
+ success: ts.factory.createTrue(),
619
+ failure: (v) =>
620
+ create_throw_error({
621
+ importer: props.importer,
622
+ expected: v.expected,
623
+ input: v.input,
624
+ }),
625
+ },
626
+ parameters: [],
627
+ input: props.input,
628
+ maps: props.maps,
629
+ explore: props.explore,
630
+ }),
579
631
  undefined,
580
632
  undefined,
581
633
  );
@@ -588,19 +640,18 @@ export namespace NotationGeneralProgrammer {
588
640
  explore: FeatureProgrammer.IExplore;
589
641
  }) => {
590
642
  if (props.metadata.objects.length === 1)
591
- return decode_object(props.importer)(
592
- props.input,
593
- props.metadata.objects[0]!,
594
- props.explore,
595
- );
643
+ return decode_object({
644
+ importer: props.importer,
645
+ object: props.metadata.objects[0]!,
646
+ input: props.input,
647
+ explore: props.explore,
648
+ });
596
649
  return ts.factory.createCallExpression(
597
650
  ts.factory.createIdentifier(
598
651
  props.importer.useLocal(`${PREFIX}u${props.metadata.union_index!}`),
599
652
  ),
600
653
  undefined,
601
- FeatureProgrammer.argumentsArray(props.config)(props.explore)(
602
- props.input,
603
- ),
654
+ FeatureProgrammer.argumentsArray(props),
604
655
  );
605
656
  };
606
657
 
@@ -609,37 +660,47 @@ export namespace NotationGeneralProgrammer {
609
660
  config: FeatureProgrammer.IConfig;
610
661
  importer: FunctionImporter;
611
662
  input: ts.Expression;
612
- elements: MetadataArray[];
663
+ arrays: MetadataArray[];
613
664
  explore: FeatureProgrammer.IExplore;
614
665
  }): ts.Expression =>
615
666
  explore_array_like_union_types({
616
667
  ...props,
617
- factory: UnionExplorer.array({
618
- checker: (input, metadata, explore) =>
619
- IsProgrammer.decode({
620
- context: props.context,
621
- importer: props.importer,
622
- input,
623
- metadata,
624
- explore,
625
- }),
626
- decoder: (input, array, explore) =>
627
- decode_array({
628
- config: props.config,
629
- importer: props.importer,
630
- input,
631
- array,
632
- explore,
633
- }),
634
- empty: ts.factory.createIdentifier("[]"),
635
- success: ts.factory.createTrue(),
636
- failure: (input, expected) =>
637
- create_throw_error({
638
- importer: props.importer,
639
- expected,
640
- input,
641
- }),
642
- }),
668
+ factory: (next) =>
669
+ UnionExplorer.array({
670
+ config: {
671
+ checker: (v) =>
672
+ IsProgrammer.decode({
673
+ context: props.context,
674
+ importer: props.importer,
675
+ input: v.input,
676
+ metadata: v.definition,
677
+ explore: v.explore,
678
+ }),
679
+ decoder: (v) =>
680
+ decode_array({
681
+ config: props.config,
682
+ importer: props.importer,
683
+ input: v.input,
684
+ array: v.definition,
685
+ explore: v.explore,
686
+ }),
687
+ empty: ts.factory.createIdentifier("[]"),
688
+ success: ts.factory.createTrue(),
689
+ failure: (v) =>
690
+ create_throw_error({
691
+ importer: props.importer,
692
+ expected: v.expected,
693
+ input: v.input,
694
+ }),
695
+ },
696
+ parameters: next.parameters,
697
+ input: next.input,
698
+ arrays: next.definitions,
699
+ explore: next.explore,
700
+ }),
701
+ definitions: props.arrays,
702
+ input: props.input,
703
+ explore: props.explore,
643
704
  });
644
705
 
645
706
  const explore_array_like_union_types = <
@@ -647,23 +708,27 @@ export namespace NotationGeneralProgrammer {
647
708
  >(props: {
648
709
  config: FeatureProgrammer.IConfig;
649
710
  importer: FunctionImporter;
650
- factory: (
651
- parameters: ts.ParameterDeclaration[],
652
- ) => (
653
- input: ts.Expression,
654
- elements: T[],
655
- explore: FeatureProgrammer.IExplore,
656
- ) => ts.ArrowFunction;
711
+ factory: (next: {
712
+ parameters: ts.ParameterDeclaration[];
713
+ input: ts.Expression;
714
+ definitions: T[];
715
+ explore: FeatureProgrammer.IExplore;
716
+ }) => ts.ArrowFunction;
657
717
  input: ts.Expression;
658
- elements: T[];
718
+ definitions: T[];
659
719
  explore: FeatureProgrammer.IExplore;
660
720
  }): ts.Expression => {
661
721
  const arrow =
662
722
  (parameters: ts.ParameterDeclaration[]) =>
663
723
  (explore: FeatureProgrammer.IExplore) =>
664
724
  (input: ts.Expression): ts.ArrowFunction =>
665
- props.factory(parameters)(input, props.elements, explore);
666
- if (props.elements.every((e) => e.type.recursive === false))
725
+ props.factory({
726
+ parameters,
727
+ input,
728
+ definitions: props.definitions,
729
+ explore,
730
+ });
731
+ if (props.definitions.every((e) => e.type.recursive === false))
667
732
  ts.factory.createCallExpression(
668
733
  arrow([])(props.explore)(props.input),
669
734
  undefined,
@@ -679,12 +744,14 @@ export namespace NotationGeneralProgrammer {
679
744
  ts.factory.createIdentifier(
680
745
  props.importer.emplaceUnion(
681
746
  props.config.prefix,
682
- props.elements.map((e) => e.type.name).join(" | "),
747
+ props.definitions.map((e) => e.type.name).join(" | "),
683
748
  () =>
684
749
  arrow(
685
- FeatureProgrammer.parameterDeclarations(props.config)(
686
- TypeFactory.keyword("any"),
687
- )(ts.factory.createIdentifier("input")),
750
+ FeatureProgrammer.parameterDeclarations({
751
+ config: props.config,
752
+ type: TypeFactory.keyword("any"),
753
+ input: ts.factory.createIdentifier("input"),
754
+ }),
688
755
  )({
689
756
  ...arrayExplore,
690
757
  postfix: "",
@@ -692,7 +759,11 @@ export namespace NotationGeneralProgrammer {
692
759
  ),
693
760
  ),
694
761
  undefined,
695
- FeatureProgrammer.argumentsArray(props.config)(arrayExplore)(props.input),
762
+ FeatureProgrammer.argumentsArray({
763
+ config: props.config,
764
+ explore: arrayExplore,
765
+ input: props.input,
766
+ }),
696
767
  );
697
768
  };
698
769
 
@@ -705,8 +776,8 @@ export namespace NotationGeneralProgrammer {
705
776
  rename: (str: string) => string;
706
777
  context: ITypiaContext;
707
778
  importer: FunctionImporter;
708
- }): FeatureProgrammer.IConfig => {
709
- const config: FeatureProgrammer.IConfig = {
779
+ }): FeatureProgrammer.IConfig<ts.Expression> => {
780
+ const config: FeatureProgrammer.IConfig<ts.Expression> = {
710
781
  types: {
711
782
  input: (type, name) =>
712
783
  ts.factory.createTypeReferenceNode(
@@ -714,65 +785,91 @@ export namespace NotationGeneralProgrammer {
714
785
  ),
715
786
  output: (type, name) =>
716
787
  ts.factory.createTypeReferenceNode(
717
- returnType(props.rename)(
718
- name ?? TypeFactory.getFullName(props.context.checker)(type),
719
- ),
788
+ returnType({
789
+ rename: props.rename,
790
+ type:
791
+ name ?? TypeFactory.getFullName(props.context.checker)(type),
792
+ }),
720
793
  ),
721
794
  },
722
795
  prefix: PREFIX,
723
796
  trace: false,
724
797
  path: false,
725
798
  initializer,
726
- decoder: () => (input, metadata, explore) =>
799
+ decoder: (next) =>
727
800
  decode({
728
801
  context: props.context,
729
802
  config,
730
803
  importer: props.importer,
731
- metadata,
732
- explore,
733
- input,
804
+ metadata: next.metadata,
805
+ explore: next.explore,
806
+ input: next.input,
734
807
  }),
735
808
  objector: {
736
- checker: () => (input, metadata, explore) =>
809
+ checker: (next) =>
737
810
  IsProgrammer.decode({
738
811
  context: props.context,
739
812
  importer: props.importer,
740
- input,
741
- metadata,
742
- explore,
813
+ input: next.input,
814
+ metadata: next.metadata,
815
+ explore: next.explore,
743
816
  }),
744
- decoder: () => decode_object(props.importer),
745
- joiner: NotationJoiner.object(props.rename),
746
- unionizer: decode_union_object((input, object, explore) =>
747
- IsProgrammer.decode_object({
748
- context: props.context,
817
+ decoder: (next) =>
818
+ decode_object({
749
819
  importer: props.importer,
750
- object,
751
- input,
752
- explore,
820
+ object: next.object,
821
+ input: next.input,
822
+ explore: next.explore,
753
823
  }),
754
- )(decode_object(props.importer))((exp) => exp)((input, expected) =>
755
- create_throw_error({
756
- importer: props.importer,
757
- expected,
758
- input,
824
+ joiner: (next) =>
825
+ NotationJoiner.object({
826
+ rename: props.rename,
827
+ input: next.input!,
828
+ entries: next.entries,
759
829
  }),
760
- ),
761
- failure: (input, expected) =>
830
+ unionizer: (next) =>
831
+ decode_union_object({
832
+ checker: (v) =>
833
+ IsProgrammer.decode_object({
834
+ context: props.context,
835
+ importer: props.importer,
836
+ object: v.object,
837
+ input: v.input,
838
+ explore: v.explore,
839
+ }),
840
+ decoder: (v) =>
841
+ decode_object({
842
+ importer: props.importer,
843
+ object: v.object,
844
+ input: v.input,
845
+ explore: v.explore,
846
+ }),
847
+ success: (exp) => exp,
848
+ escaper: (v) =>
849
+ create_throw_error({
850
+ importer: props.importer,
851
+ expected: v.expected,
852
+ input: v.input,
853
+ }),
854
+ input: next.input,
855
+ objects: next.objects,
856
+ explore: next.explore,
857
+ }),
858
+ failure: (next) =>
762
859
  create_throw_error({
763
860
  importer: props.importer,
764
- expected,
765
- input,
861
+ expected: next.expected,
862
+ input: next.input,
766
863
  }),
767
864
  },
768
865
  generator: {
769
- arrays: () => (collection) =>
866
+ arrays: (collection) =>
770
867
  write_array_functions({
771
868
  importer: props.importer,
772
869
  config,
773
870
  collection,
774
871
  }),
775
- tuples: () => (collection) =>
872
+ tuples: (collection) =>
776
873
  write_tuple_functions({
777
874
  context: props.context,
778
875
  importer: props.importer,
@@ -784,26 +881,25 @@ export namespace NotationGeneralProgrammer {
784
881
  return config;
785
882
  };
786
883
 
787
- const initializer: FeatureProgrammer.IConfig["initializer"] =
788
- (project) => (importer) => (type) => {
789
- const collection = new MetadataCollection();
790
- const result = MetadataFactory.analyze({
791
- checker: project.checker,
792
- transformer: project.transformer,
793
- options: {
794
- escape: false,
795
- constant: true,
796
- absorb: true,
797
- },
798
- collection,
799
- type,
800
- });
801
- if (result.success === false)
802
- throw TransformerError.from(`typia.misc.${importer.method}`)(
803
- result.errors,
804
- );
805
- return [collection, result.data];
806
- };
884
+ const initializer: FeatureProgrammer.IConfig["initializer"] = (props) => {
885
+ const collection = new MetadataCollection();
886
+ const result = MetadataFactory.analyze({
887
+ checker: props.context.checker,
888
+ transformer: props.context.transformer,
889
+ options: {
890
+ escape: false,
891
+ constant: true,
892
+ absorb: true,
893
+ },
894
+ collection,
895
+ type: props.type,
896
+ });
897
+ if (result.success === false)
898
+ throw TransformerError.from(`typia.misc.${props.importer.method}`)(
899
+ result.errors,
900
+ );
901
+ return [collection, result.data];
902
+ };
807
903
 
808
904
  const create_throw_error = (props: {
809
905
  importer: FunctionImporter;
@@ -829,12 +925,12 @@ export namespace NotationGeneralProgrammer {
829
925
  ),
830
926
  );
831
927
 
832
- const is_instance = (meta: Metadata): boolean =>
833
- !!meta.objects.length ||
834
- !!meta.arrays.length ||
835
- !!meta.tuples.length ||
836
- !!meta.sets.length ||
837
- !!meta.maps.length ||
838
- !!meta.natives.length ||
839
- (meta.rest !== null && is_instance(meta.rest));
928
+ const is_instance = (metadata: Metadata): boolean =>
929
+ !!metadata.objects.length ||
930
+ !!metadata.arrays.length ||
931
+ !!metadata.tuples.length ||
932
+ !!metadata.sets.length ||
933
+ !!metadata.maps.length ||
934
+ !!metadata.natives.length ||
935
+ (metadata.rest !== null && is_instance(metadata.rest));
840
936
  }