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
@@ -90,9 +90,11 @@ export namespace MiscCloneProgrammer {
90
90
  ts.factory.createArrowFunction(
91
91
  undefined,
92
92
  undefined,
93
- FeatureProgrammer.parameterDeclarations(props.config)(
94
- TypeFactory.keyword("any"),
95
- )(ts.factory.createIdentifier("input")),
93
+ FeatureProgrammer.parameterDeclarations({
94
+ config: props.config,
95
+ type: TypeFactory.keyword("any"),
96
+ input: ts.factory.createIdentifier("input"),
97
+ }),
96
98
  TypeFactory.keyword("any"),
97
99
  undefined,
98
100
  decode_array_inline({
@@ -129,9 +131,11 @@ export namespace MiscCloneProgrammer {
129
131
  ts.factory.createArrowFunction(
130
132
  undefined,
131
133
  undefined,
132
- FeatureProgrammer.parameterDeclarations(props.config)(
133
- TypeFactory.keyword("any"),
134
- )(ts.factory.createIdentifier("input")),
134
+ FeatureProgrammer.parameterDeclarations({
135
+ config: props.config,
136
+ type: TypeFactory.keyword("any"),
137
+ input: ts.factory.createIdentifier("input"),
138
+ }),
135
139
  TypeFactory.keyword("any"),
136
140
  undefined,
137
141
  decode_tuple_inline({
@@ -335,10 +339,16 @@ export namespace MiscCloneProgrammer {
335
339
  explore: FeatureProgrammer.IExplore;
336
340
  }) =>
337
341
  FeatureProgrammer.decode_object({
338
- trace: false,
339
- path: false,
340
- prefix: PREFIX,
341
- })(props.importer)(props.input, props.object, props.explore);
342
+ config: {
343
+ trace: false,
344
+ path: false,
345
+ prefix: PREFIX,
346
+ },
347
+ importer: props.importer,
348
+ input: props.input,
349
+ object: props.object,
350
+ explore: props.explore,
351
+ });
342
352
 
343
353
  const decode_array = (props: {
344
354
  config: FeatureProgrammer.IConfig;
@@ -355,11 +365,15 @@ export namespace MiscCloneProgrammer {
355
365
  ),
356
366
  ),
357
367
  undefined,
358
- FeatureProgrammer.argumentsArray(props.config)({
359
- ...props.explore,
360
- source: "function",
361
- from: "array",
362
- })(props.input),
368
+ FeatureProgrammer.argumentsArray({
369
+ config: props.config,
370
+ explore: {
371
+ ...props.explore,
372
+ source: "function",
373
+ from: "array",
374
+ },
375
+ input: props.input,
376
+ }),
363
377
  )
364
378
  : decode_array_inline(props);
365
379
 
@@ -370,9 +384,14 @@ export namespace MiscCloneProgrammer {
370
384
  array: MetadataArray;
371
385
  explore: FeatureProgrammer.IExplore;
372
386
  }) =>
373
- FeatureProgrammer.decode_array(props.config)(props.importer)(
374
- CloneJoiner.array,
375
- )(props.input, props.array, props.explore);
387
+ FeatureProgrammer.decode_array({
388
+ config: props.config,
389
+ importer: props.importer,
390
+ combiner: CloneJoiner.array,
391
+ array: props.array,
392
+ input: props.input,
393
+ explore: props.explore,
394
+ });
376
395
 
377
396
  const decode_tuple = (props: {
378
397
  context: ITypiaContext;
@@ -390,10 +409,14 @@ export namespace MiscCloneProgrammer {
390
409
  ),
391
410
  ),
392
411
  undefined,
393
- FeatureProgrammer.argumentsArray(props.config)({
394
- ...props.explore,
395
- source: "function",
396
- })(props.input),
412
+ FeatureProgrammer.argumentsArray({
413
+ config: props.config,
414
+ explore: {
415
+ ...props.explore,
416
+ source: "function",
417
+ },
418
+ input: props.input,
419
+ }),
397
420
  )
398
421
  : decode_tuple_inline({
399
422
  ...props,
@@ -558,41 +581,47 @@ export namespace MiscCloneProgrammer {
558
581
  }): ts.Expression =>
559
582
  ts.factory.createCallExpression(
560
583
  UnionExplorer.set({
561
- checker: (input, metadata, explore) =>
562
- IsProgrammer.decode({
563
- context: props.context,
564
- importer: props.importer,
565
- input,
566
- metadata,
567
- explore,
568
- }),
569
- decoder: (input, array, explore) =>
570
- ts.factory.createNewExpression(
584
+ config: {
585
+ checker: (v) =>
586
+ IsProgrammer.decode({
587
+ context: props.context,
588
+ importer: props.importer,
589
+ input: v.input,
590
+ metadata: v.definition,
591
+ explore: v.explore,
592
+ }),
593
+ decoder: (v) =>
594
+ ts.factory.createNewExpression(
595
+ ts.factory.createIdentifier("Set"),
596
+ [TypeFactory.keyword("any")],
597
+ [
598
+ decode_array({
599
+ config: props.config,
600
+ importer: props.importer,
601
+ input: v.input,
602
+ array: v.definition,
603
+ explore: v.explore,
604
+ }),
605
+ ],
606
+ ),
607
+ empty: ts.factory.createNewExpression(
571
608
  ts.factory.createIdentifier("Set"),
572
609
  [TypeFactory.keyword("any")],
573
- [
574
- decode_array({
575
- config: props.config,
576
- importer: props.importer,
577
- input,
578
- array,
579
- explore,
580
- }),
581
- ],
610
+ [],
582
611
  ),
583
- empty: ts.factory.createNewExpression(
584
- ts.factory.createIdentifier("Set"),
585
- [TypeFactory.keyword("any")],
586
- [],
587
- ),
588
- success: ts.factory.createTrue(),
589
- failure: (input, expected) =>
590
- create_throw_error({
591
- importer: props.importer,
592
- expected,
593
- input,
594
- }),
595
- })([])(props.input, props.sets, props.explore),
612
+ success: ts.factory.createTrue(),
613
+ failure: (v) =>
614
+ create_throw_error({
615
+ importer: props.importer,
616
+ expected: v.expected,
617
+ input: v.input,
618
+ }),
619
+ },
620
+ parameters: [],
621
+ input: props.input,
622
+ sets: props.sets,
623
+ explore: props.explore,
624
+ }),
596
625
  undefined,
597
626
  undefined,
598
627
  );
@@ -607,56 +636,63 @@ export namespace MiscCloneProgrammer {
607
636
  }): ts.Expression =>
608
637
  ts.factory.createCallExpression(
609
638
  UnionExplorer.map({
610
- checker: (top, entry, explore) =>
611
- ts.factory.createLogicalAnd(
612
- IsProgrammer.decode({
613
- context: props.context,
614
- importer: props.importer,
615
- input: ts.factory.createElementAccessExpression(top, 0),
616
- metadata: entry[0],
617
- explore: {
618
- ...explore,
619
- postfix: `${explore.postfix}[0]`,
620
- },
621
- }),
622
- IsProgrammer.decode({
623
- context: props.context,
624
- importer: props.importer,
625
- input: ts.factory.createElementAccessExpression(top, 1),
626
- metadata: entry[1],
627
- explore: {
628
- ...explore,
629
- postfix: `${explore.postfix}[1]`,
630
- },
631
- }),
632
- ),
633
- decoder: (input, array, explore) =>
634
- ts.factory.createNewExpression(
635
- ts.factory.createIdentifier("Map"),
636
- [TypeFactory.keyword("any"), TypeFactory.keyword("any")],
637
- [
638
- decode_array({
639
- config: props.config,
639
+ config: {
640
+ checker: (v) =>
641
+ ts.factory.createLogicalAnd(
642
+ IsProgrammer.decode({
643
+ context: props.context,
640
644
  importer: props.importer,
641
- input,
642
- array,
643
- explore,
645
+ input: ts.factory.createElementAccessExpression(v.input, 0),
646
+ metadata: v.definition[0],
647
+ explore: {
648
+ ...v.explore,
649
+ postfix: `${v.explore.postfix}[0]`,
650
+ },
644
651
  }),
645
- ],
652
+ IsProgrammer.decode({
653
+ context: props.context,
654
+ importer: props.importer,
655
+ input: ts.factory.createElementAccessExpression(v.input, 1),
656
+ metadata: v.definition[1],
657
+ explore: {
658
+ ...v.explore,
659
+ postfix: `${v.explore.postfix}[1]`,
660
+ },
661
+ }),
662
+ ),
663
+ decoder: (v) =>
664
+ ts.factory.createNewExpression(
665
+ ts.factory.createIdentifier("Map"),
666
+ [TypeFactory.keyword("any"), TypeFactory.keyword("any")],
667
+ [
668
+ decode_array({
669
+ config: props.config,
670
+ importer: props.importer,
671
+ input: v.input,
672
+ array: v.definition,
673
+ explore: v.explore,
674
+ }),
675
+ ],
676
+ ),
677
+ empty: ts.factory.createNewExpression(
678
+ ts.factory.createIdentifier("Map"),
679
+ [TypeFactory.keyword("any"), TypeFactory.keyword("any")],
680
+ [],
646
681
  ),
647
- empty: ts.factory.createNewExpression(
648
- ts.factory.createIdentifier("Map"),
649
- [TypeFactory.keyword("any"), TypeFactory.keyword("any")],
650
- [],
651
- ),
652
- success: ts.factory.createTrue(),
653
- failure: (input, expected) =>
654
- create_throw_error({
655
- importer: props.importer,
656
- expected,
657
- input,
658
- }),
659
- })([])(props.input, props.maps, props.explore),
682
+ success: ts.factory.createTrue(),
683
+ failure: (v) =>
684
+ create_throw_error({
685
+ importer: props.importer,
686
+ expected: v.expected,
687
+ input: v.input,
688
+ }),
689
+ },
690
+ parameters: [],
691
+ input: props.input,
692
+ maps: props.maps,
693
+ explore: props.explore,
694
+ }),
695
+ // ([])(props.input, props.maps, props.explore),
660
696
  undefined,
661
697
  undefined,
662
698
  );
@@ -678,9 +714,7 @@ export namespace MiscCloneProgrammer {
678
714
  props.importer.useLocal(`${PREFIX}u${props.metadata.union_index!}`),
679
715
  ),
680
716
  undefined,
681
- FeatureProgrammer.argumentsArray(props.config)(props.explore)(
682
- props.input,
683
- ),
717
+ FeatureProgrammer.argumentsArray(props),
684
718
  );
685
719
 
686
720
  const explore_arrays = (props: {
@@ -693,34 +727,40 @@ export namespace MiscCloneProgrammer {
693
727
  }): ts.Expression =>
694
728
  explore_array_like_union_types({
695
729
  ...props,
696
- elements: props.arrays,
730
+ definitions: props.arrays,
697
731
  factory: (next) =>
698
732
  UnionExplorer.array({
699
- checker: (input, metadata, explore) =>
700
- IsProgrammer.decode({
701
- context: props.context,
702
- importer: props.importer,
703
- input,
704
- metadata,
705
- explore,
706
- }),
707
- decoder: (input, array, explore) =>
708
- decode_array({
709
- config: props.config,
710
- importer: props.importer,
711
- input,
712
- array,
713
- explore,
714
- }),
715
- empty: ts.factory.createIdentifier("[]"),
716
- success: ts.factory.createTrue(),
717
- failure: (input, expected) =>
718
- create_throw_error({
719
- importer: props.importer,
720
- expected,
721
- input,
722
- }),
723
- })(next.parameters)(next.input, next.elements, next.explore),
733
+ config: {
734
+ checker: (v) =>
735
+ IsProgrammer.decode({
736
+ context: props.context,
737
+ importer: props.importer,
738
+ input: v.input,
739
+ metadata: v.definition,
740
+ explore: v.explore,
741
+ }),
742
+ decoder: (v) =>
743
+ decode_array({
744
+ config: props.config,
745
+ importer: props.importer,
746
+ input: v.input,
747
+ array: v.definition,
748
+ explore: v.explore,
749
+ }),
750
+ empty: ts.factory.createIdentifier("[]"),
751
+ success: ts.factory.createTrue(),
752
+ failure: (v) =>
753
+ create_throw_error({
754
+ importer: props.importer,
755
+ expected: v.expected,
756
+ input: v.input,
757
+ }),
758
+ },
759
+ parameters: next.parameters,
760
+ arrays: next.definitions,
761
+ input: next.input,
762
+ explore: next.explore,
763
+ }),
724
764
  });
725
765
 
726
766
  const explore_array_like_union_types = <
@@ -731,11 +771,11 @@ export namespace MiscCloneProgrammer {
731
771
  factory: (next: {
732
772
  parameters: ts.ParameterDeclaration[];
733
773
  input: ts.Expression;
734
- elements: T[];
774
+ definitions: T[];
735
775
  explore: FeatureProgrammer.IExplore;
736
776
  }) => ts.ArrowFunction;
737
777
  input: ts.Expression;
738
- elements: T[];
778
+ definitions: T[];
739
779
  explore: FeatureProgrammer.IExplore;
740
780
  }): ts.Expression => {
741
781
  const arrow = (next: {
@@ -744,12 +784,12 @@ export namespace MiscCloneProgrammer {
744
784
  input: ts.Expression;
745
785
  }): ts.ArrowFunction =>
746
786
  props.factory({
747
- elements: props.elements,
787
+ definitions: props.definitions,
748
788
  parameters: next.parameters,
749
789
  input: next.input,
750
790
  explore: next.explore,
751
791
  });
752
- if (props.elements.every((e) => e.type.recursive === false))
792
+ if (props.definitions.every((e) => e.type.recursive === false))
753
793
  ts.factory.createCallExpression(
754
794
  arrow({
755
795
  parameters: [],
@@ -769,12 +809,14 @@ export namespace MiscCloneProgrammer {
769
809
  ts.factory.createIdentifier(
770
810
  props.importer.emplaceUnion(
771
811
  props.config.prefix,
772
- props.elements.map((e) => e.type.name).join(" | "),
812
+ props.definitions.map((e) => e.type.name).join(" | "),
773
813
  () =>
774
814
  arrow({
775
- parameters: FeatureProgrammer.parameterDeclarations(props.config)(
776
- TypeFactory.keyword("any"),
777
- )(ts.factory.createIdentifier("input")),
815
+ parameters: FeatureProgrammer.parameterDeclarations({
816
+ config: props.config,
817
+ type: TypeFactory.keyword("any"),
818
+ input: ts.factory.createIdentifier("input"),
819
+ }),
778
820
  explore: {
779
821
  ...arrayExplore,
780
822
  postfix: "",
@@ -784,7 +826,11 @@ export namespace MiscCloneProgrammer {
784
826
  ),
785
827
  ),
786
828
  undefined,
787
- FeatureProgrammer.argumentsArray(props.config)(arrayExplore)(props.input),
829
+ FeatureProgrammer.argumentsArray({
830
+ config: props.config,
831
+ input: props.input,
832
+ explore: arrayExplore,
833
+ }),
788
834
  );
789
835
  };
790
836
 
@@ -822,69 +868,75 @@ export namespace MiscCloneProgrammer {
822
868
  trace: false,
823
869
  path: false,
824
870
  initializer,
825
- decoder: () => (input, metadata, explore) =>
871
+ decoder: (next) =>
826
872
  decode({
827
873
  context: props.context,
828
874
  importer: props.importer,
829
875
  config,
830
- input,
831
- metadata,
832
- explore,
876
+ input: next.input,
877
+ metadata: next.metadata,
878
+ explore: next.explore,
833
879
  }),
834
880
  objector: {
835
- checker: () => (input, metadata, explore) =>
881
+ checker: (next) =>
836
882
  IsProgrammer.decode({
837
883
  context: props.context,
838
884
  importer: props.importer,
839
- input,
840
- metadata,
841
- explore,
885
+ input: next.input,
886
+ metadata: next.metadata,
887
+ explore: next.explore,
842
888
  }),
843
- decoder: () => (input, object, explore) =>
889
+ decoder: (next) =>
844
890
  decode_object({
845
891
  importer: props.importer,
846
- input,
847
- object,
848
- explore,
892
+ input: next.input,
893
+ object: next.object,
894
+ explore: next.explore,
849
895
  }),
850
896
  joiner: CloneJoiner.object,
851
- unionizer: decode_union_object((input, object, explore) =>
852
- IsProgrammer.decode_object({
853
- context: props.context,
854
- importer: props.importer,
855
- input,
856
- object,
857
- explore,
858
- }),
859
- )((input, object, explore) =>
860
- decode_object({
861
- importer: props.importer,
862
- input,
863
- object,
864
- explore,
865
- }),
866
- )((exp) => exp)((input, expected) =>
867
- create_throw_error({
868
- importer: props.importer,
869
- expected,
870
- input,
897
+ unionizer: (next) =>
898
+ decode_union_object({
899
+ checker: (v) =>
900
+ IsProgrammer.decode_object({
901
+ context: props.context,
902
+ importer: props.importer,
903
+ input: v.input,
904
+ object: v.object,
905
+ explore: v.explore,
906
+ }),
907
+ decoder: (v) =>
908
+ decode_object({
909
+ importer: props.importer,
910
+ input: v.input,
911
+ object: v.object,
912
+ explore: v.explore,
913
+ }),
914
+ success: (exp) => exp,
915
+ escaper: (v) =>
916
+ create_throw_error({
917
+ importer: props.importer,
918
+ expected: v.expected,
919
+ input: v.input,
920
+ }),
921
+ input: next.input,
922
+ objects: next.objects,
923
+ explore: next.explore,
871
924
  }),
872
- ),
873
- failure: (input, expected) =>
925
+ failure: (next) =>
874
926
  create_throw_error({
875
927
  importer: props.importer,
876
- expected,
877
- input,
928
+ expected: next.expected,
929
+ input: next.input,
878
930
  }),
879
931
  },
880
932
  generator: {
881
- arrays: () => (collection) =>
933
+ arrays: (collection) =>
882
934
  write_array_functions({
883
935
  importer: props.importer,
884
936
  config,
885
937
  collection,
886
938
  }),
887
- tuples: () => (collection) =>
939
+ tuples: (collection) =>
888
940
  write_tuple_functions({
889
941
  context: props.context,
890
942
  importer: props.importer,
@@ -896,34 +948,33 @@ export namespace MiscCloneProgrammer {
896
948
  return config;
897
949
  };
898
950
 
899
- const initializer: FeatureProgrammer.IConfig["initializer"] =
900
- (context) => (importer) => (type) => {
901
- const collection = new MetadataCollection();
902
- const result = MetadataFactory.analyze({
903
- checker: context.checker,
904
- transformer: context.transformer,
905
- options: {
906
- escape: false,
907
- constant: true,
908
- absorb: true,
909
- validate: (metadata) => {
910
- const output: string[] = [];
911
- if (metadata.natives.some((n) => n === "WeakSet"))
912
- output.push("unable to clone WeakSet");
913
- else if (metadata.natives.some((n) => n === "WeakMap"))
914
- output.push("unable to clone WeakMap");
915
- return output;
916
- },
951
+ const initializer: FeatureProgrammer.IConfig["initializer"] = (props) => {
952
+ const collection = new MetadataCollection();
953
+ const result = MetadataFactory.analyze({
954
+ checker: props.context.checker,
955
+ transformer: props.context.transformer,
956
+ options: {
957
+ escape: false,
958
+ constant: true,
959
+ absorb: true,
960
+ validate: (metadata) => {
961
+ const output: string[] = [];
962
+ if (metadata.natives.some((n) => n === "WeakSet"))
963
+ output.push("unable to clone WeakSet");
964
+ else if (metadata.natives.some((n) => n === "WeakMap"))
965
+ output.push("unable to clone WeakMap");
966
+ return output;
917
967
  },
918
- collection,
919
- type,
920
- });
921
- if (result.success === false)
922
- throw TransformerError.from(`typia.misc.${importer.method}`)(
923
- result.errors,
924
- );
925
- return [collection, result.data];
926
- };
968
+ },
969
+ collection,
970
+ type: props.type,
971
+ });
972
+ if (result.success === false)
973
+ throw TransformerError.from(`typia.misc.${props.importer.method}`)(
974
+ result.errors,
975
+ );
976
+ return [collection, result.data];
977
+ };
927
978
 
928
979
  const create_throw_error = (props: {
929
980
  importer: FunctionImporter;