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
@@ -33,9 +33,10 @@ export namespace NotationGeneralProgrammer {
33
33
  rename: (str: string) => string;
34
34
  }
35
35
 
36
- export const returnType =
37
- (rename: (str: string) => string) => (type: string) =>
38
- `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}>`;
39
40
 
40
41
  export const decompose = (props: {
41
42
  rename: (str: string) => string;
@@ -65,10 +66,12 @@ export namespace NotationGeneralProgrammer {
65
66
  undefined,
66
67
  composed.parameters,
67
68
  ts.factory.createTypeReferenceNode(
68
- returnType(props.rename)(
69
- props.name ??
69
+ returnType({
70
+ rename: props.rename,
71
+ type:
72
+ props.name ??
70
73
  TypeFactory.getFullName(props.context.checker)(props.type),
71
- ),
74
+ }),
72
75
  ),
73
76
  undefined,
74
77
  composed.body,
@@ -243,7 +246,7 @@ export namespace NotationGeneralProgrammer {
243
246
  value: () =>
244
247
  explore_arrays({
245
248
  ...props,
246
- elements: props.metadata.arrays,
249
+ arrays: props.metadata.arrays,
247
250
  explore: {
248
251
  ...props.explore,
249
252
  from: "array",
@@ -514,37 +517,47 @@ export namespace NotationGeneralProgrammer {
514
517
  }): ts.Expression =>
515
518
  ts.factory.createCallExpression(
516
519
  UnionExplorer.set({
517
- checker: (input, metadata, explore) =>
518
- IsProgrammer.decode({
519
- context: props.context,
520
- importer: props.importer,
521
- input,
522
- metadata,
523
- explore,
524
- }),
525
- decoder: (input, array, explore) =>
526
- 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(
527
544
  ts.factory.createIdentifier("Set"),
528
545
  [TypeFactory.keyword("any")],
529
- [
530
- decode_array({
531
- config: props.config,
532
- importer: props.importer,
533
- input,
534
- array,
535
- explore,
536
- }),
537
- ],
546
+ [],
538
547
  ),
539
- empty: ts.factory.createNewExpression(
540
- ts.factory.createIdentifier("Set"),
541
- [TypeFactory.keyword("any")],
542
- [],
543
- ),
544
- success: ts.factory.createTrue(),
545
- failure: (input, expected) =>
546
- create_throw_error({ importer: props.importer, expected, input }),
547
- })([])(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
+ }),
548
561
  undefined,
549
562
  undefined,
550
563
  );
@@ -559,52 +572,62 @@ export namespace NotationGeneralProgrammer {
559
572
  }): ts.Expression =>
560
573
  ts.factory.createCallExpression(
561
574
  UnionExplorer.map({
562
- checker: (top, entry, explore) =>
563
- ts.factory.createLogicalAnd(
564
- IsProgrammer.decode({
565
- context: props.context,
566
- importer: props.importer,
567
- input: ts.factory.createElementAccessExpression(top, 0),
568
- metadata: entry[0],
569
- explore: {
570
- ...props.explore,
571
- postfix: `${explore.postfix}[0]`,
572
- },
573
- }),
574
- IsProgrammer.decode({
575
- context: props.context,
576
- importer: props.importer,
577
- input: ts.factory.createElementAccessExpression(top, 1),
578
- metadata: entry[1],
579
- explore: {
580
- ...props.explore,
581
- postfix: `${props.explore.postfix}[1]`,
582
- },
583
- }),
584
- ),
585
- decoder: (input, array, explore) =>
586
- ts.factory.createNewExpression(
587
- ts.factory.createIdentifier("Map"),
588
- [TypeFactory.keyword("any"), TypeFactory.keyword("any")],
589
- [
590
- decode_array({
591
- config: props.config,
575
+ config: {
576
+ checker: (v) =>
577
+ ts.factory.createLogicalAnd(
578
+ IsProgrammer.decode({
579
+ context: props.context,
592
580
  importer: props.importer,
593
- input,
594
- array,
595
- 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
+ },
596
587
  }),
597
- ],
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
+ [],
598
617
  ),
599
- empty: ts.factory.createNewExpression(
600
- ts.factory.createIdentifier("Map"),
601
- [TypeFactory.keyword("any"), TypeFactory.keyword("any")],
602
- [],
603
- ),
604
- success: ts.factory.createTrue(),
605
- failure: (input, expected) =>
606
- create_throw_error({ importer: props.importer, expected, input }),
607
- })([])(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
+ }),
608
631
  undefined,
609
632
  undefined,
610
633
  );
@@ -637,37 +660,47 @@ export namespace NotationGeneralProgrammer {
637
660
  config: FeatureProgrammer.IConfig;
638
661
  importer: FunctionImporter;
639
662
  input: ts.Expression;
640
- elements: MetadataArray[];
663
+ arrays: MetadataArray[];
641
664
  explore: FeatureProgrammer.IExplore;
642
665
  }): ts.Expression =>
643
666
  explore_array_like_union_types({
644
667
  ...props,
645
- factory: UnionExplorer.array({
646
- checker: (input, metadata, explore) =>
647
- IsProgrammer.decode({
648
- context: props.context,
649
- importer: props.importer,
650
- input,
651
- metadata,
652
- explore,
653
- }),
654
- decoder: (input, array, explore) =>
655
- decode_array({
656
- config: props.config,
657
- importer: props.importer,
658
- input,
659
- array,
660
- explore,
661
- }),
662
- empty: ts.factory.createIdentifier("[]"),
663
- success: ts.factory.createTrue(),
664
- failure: (input, expected) =>
665
- create_throw_error({
666
- importer: props.importer,
667
- expected,
668
- input,
669
- }),
670
- }),
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,
671
704
  });
672
705
 
673
706
  const explore_array_like_union_types = <
@@ -675,23 +708,27 @@ export namespace NotationGeneralProgrammer {
675
708
  >(props: {
676
709
  config: FeatureProgrammer.IConfig;
677
710
  importer: FunctionImporter;
678
- factory: (
679
- parameters: ts.ParameterDeclaration[],
680
- ) => (
681
- input: ts.Expression,
682
- elements: T[],
683
- explore: FeatureProgrammer.IExplore,
684
- ) => ts.ArrowFunction;
711
+ factory: (next: {
712
+ parameters: ts.ParameterDeclaration[];
713
+ input: ts.Expression;
714
+ definitions: T[];
715
+ explore: FeatureProgrammer.IExplore;
716
+ }) => ts.ArrowFunction;
685
717
  input: ts.Expression;
686
- elements: T[];
718
+ definitions: T[];
687
719
  explore: FeatureProgrammer.IExplore;
688
720
  }): ts.Expression => {
689
721
  const arrow =
690
722
  (parameters: ts.ParameterDeclaration[]) =>
691
723
  (explore: FeatureProgrammer.IExplore) =>
692
724
  (input: ts.Expression): ts.ArrowFunction =>
693
- props.factory(parameters)(input, props.elements, explore);
694
- 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))
695
732
  ts.factory.createCallExpression(
696
733
  arrow([])(props.explore)(props.input),
697
734
  undefined,
@@ -707,7 +744,7 @@ export namespace NotationGeneralProgrammer {
707
744
  ts.factory.createIdentifier(
708
745
  props.importer.emplaceUnion(
709
746
  props.config.prefix,
710
- props.elements.map((e) => e.type.name).join(" | "),
747
+ props.definitions.map((e) => e.type.name).join(" | "),
711
748
  () =>
712
749
  arrow(
713
750
  FeatureProgrammer.parameterDeclarations({
@@ -739,8 +776,8 @@ export namespace NotationGeneralProgrammer {
739
776
  rename: (str: string) => string;
740
777
  context: ITypiaContext;
741
778
  importer: FunctionImporter;
742
- }): FeatureProgrammer.IConfig => {
743
- const config: FeatureProgrammer.IConfig = {
779
+ }): FeatureProgrammer.IConfig<ts.Expression> => {
780
+ const config: FeatureProgrammer.IConfig<ts.Expression> = {
744
781
  types: {
745
782
  input: (type, name) =>
746
783
  ts.factory.createTypeReferenceNode(
@@ -748,9 +785,11 @@ export namespace NotationGeneralProgrammer {
748
785
  ),
749
786
  output: (type, name) =>
750
787
  ts.factory.createTypeReferenceNode(
751
- returnType(props.rename)(
752
- name ?? TypeFactory.getFullName(props.context.checker)(type),
753
- ),
788
+ returnType({
789
+ rename: props.rename,
790
+ type:
791
+ name ?? TypeFactory.getFullName(props.context.checker)(type),
792
+ }),
754
793
  ),
755
794
  },
756
795
  prefix: PREFIX,
@@ -782,30 +821,40 @@ export namespace NotationGeneralProgrammer {
782
821
  input: next.input,
783
822
  explore: next.explore,
784
823
  }),
785
- joiner: NotationJoiner.object(props.rename),
824
+ joiner: (next) =>
825
+ NotationJoiner.object({
826
+ rename: props.rename,
827
+ input: next.input!,
828
+ entries: next.entries,
829
+ }),
786
830
  unionizer: (next) =>
787
- decode_union_object((input, object, explore) =>
788
- IsProgrammer.decode_object({
789
- context: props.context,
790
- importer: props.importer,
791
- object,
792
- input,
793
- explore,
794
- }),
795
- )((input, object, explore) =>
796
- decode_object({
797
- importer: props.importer,
798
- object,
799
- input,
800
- explore,
801
- }),
802
- )((exp) => exp)((input, expected) =>
803
- create_throw_error({
804
- importer: props.importer,
805
- expected,
806
- input,
807
- }),
808
- )(next.input, next.objects, next.explore),
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
+ }),
809
858
  failure: (next) =>
810
859
  create_throw_error({
811
860
  importer: props.importer,
@@ -858,33 +858,37 @@ export namespace ProtobufEncodeProgrammer {
858
858
  new Map(props.objects.map((t, i) => [t, props.index! + i]));
859
859
 
860
860
  if (specList.length === 0) {
861
- const condition: ts.Expression = decode_union_object(
862
- (input, object, explore) =>
861
+ const condition: ts.Expression = decode_union_object({
862
+ checker: (v) =>
863
863
  IsProgrammer.decode_object({
864
864
  context: props.context,
865
865
  importer: props.importer,
866
- object,
867
- input,
868
- explore,
866
+ object: v.object,
867
+ input: v.input,
868
+ explore: v.explore,
869
869
  }),
870
- )((input, object, explore) =>
871
- ExpressionFactory.selfCall(
872
- decode_object({
873
- context: props.context,
870
+ decoder: (v) =>
871
+ ExpressionFactory.selfCall(
872
+ decode_object({
873
+ context: props.context,
874
+ importer: props.importer,
875
+ index: indexes.get(v.object)!,
876
+ input: v.input,
877
+ object: v.object,
878
+ explore: v.explore,
879
+ }),
880
+ ),
881
+ success: (expr) => expr,
882
+ escaper: (v) =>
883
+ create_throw_error({
874
884
  importer: props.importer,
875
- index: indexes.get(object)!,
876
- input,
877
- object,
878
- explore,
885
+ expected: v.expected,
886
+ input: v.input,
879
887
  }),
880
- ),
881
- )((expr) => expr)((input, expected) =>
882
- create_throw_error({
883
- importer: props.importer,
884
- expected,
885
- input,
886
- }),
887
- )(props.input, props.objects, props.explore);
888
+ input: props.input,
889
+ objects: props.objects,
890
+ explore: props.explore,
891
+ });
888
892
  return StatementFactory.block(condition);
889
893
  }
890
894
  const remained: MetadataObject[] = props.objects.filter(
@@ -1,5 +1,30 @@
1
1
  import { StringUtil } from "../StringUtil";
2
2
 
3
+ const unsnake =
4
+ (props: {
5
+ plain: (str: string) => string;
6
+ snake: (str: string, index: number) => string;
7
+ }) =>
8
+ (str: string): string => {
9
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
10
+ let prefix: string = "";
11
+ for (let i: number = 0; i < str.length; i++) {
12
+ if (str[i] === "_") prefix += "_";
13
+ else break;
14
+ }
15
+ if (prefix.length !== 0) str = str.substring(prefix.length);
16
+
17
+ const out = (s: string) => `${prefix}${s}`;
18
+ if (str.length === 0) return out("");
19
+
20
+ const items: string[] = str.split("_").filter((s) => s.length !== 0);
21
+ return items.length === 0
22
+ ? out("")
23
+ : items.length === 1
24
+ ? out(props.plain(items[0]!))
25
+ : out(items.map(props.snake).join(""));
26
+ };
27
+
3
28
  export function snake(str: string): string {
4
29
  if (str.length === 0) return str;
5
30
 
@@ -44,46 +69,19 @@ export function snake(str: string): string {
44
69
  return out(ret);
45
70
  }
46
71
 
47
- export const camel = (str: string): string =>
48
- unsnake({
49
- plain: (str) =>
50
- str.length
51
- ? str === str.toUpperCase()
52
- ? str.toLocaleLowerCase()
53
- : `${str[0]!.toLowerCase()}${str.substring(1)}`
54
- : str,
55
- snake: (str, i) =>
56
- i === 0 ? str.toLowerCase() : StringUtil.capitalize(str.toLowerCase()),
57
- })(str);
72
+ export const camel = unsnake({
73
+ plain: (str) =>
74
+ str.length
75
+ ? str === str.toUpperCase()
76
+ ? str.toLocaleLowerCase()
77
+ : `${str[0]!.toLowerCase()}${str.substring(1)}`
78
+ : str,
79
+ snake: (str, i) =>
80
+ i === 0 ? str.toLowerCase() : StringUtil.capitalize(str.toLowerCase()),
81
+ });
58
82
 
59
- export const pascal = (str: string): string =>
60
- unsnake({
61
- plain: (str) =>
62
- str.length ? `${str[0]!.toUpperCase()}${str.substring(1)}` : str,
63
- snake: StringUtil.capitalize,
64
- })(str);
65
-
66
- const unsnake =
67
- (props: {
68
- plain: (str: string) => string;
69
- snake: (str: string, index: number) => string;
70
- }) =>
71
- (str: string): string => {
72
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
73
- let prefix: string = "";
74
- for (let i: number = 0; i < str.length; i++) {
75
- if (str[i] === "_") prefix += "_";
76
- else break;
77
- }
78
- if (prefix.length !== 0) str = str.substring(prefix.length);
79
-
80
- const out = (s: string) => `${prefix}${s}`;
81
- if (str.length === 0) return out("");
82
-
83
- const items: string[] = str.split("_").filter((s) => s.length !== 0);
84
- return items.length === 0
85
- ? out("")
86
- : items.length === 1
87
- ? out(props.plain(items[0]!))
88
- : out(items.map(props.snake).join(""));
89
- };
83
+ export const pascal = unsnake({
84
+ plain: (str) =>
85
+ str.length ? `${str[0]!.toUpperCase()}${str.substring(1)}` : str,
86
+ snake: StringUtil.capitalize,
87
+ });