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
@@ -315,33 +315,35 @@ export namespace CheckerProgrammer {
315
315
  joiner: props.config.joiner.object,
316
316
  unionizer: props.config.equals
317
317
  ? (next) =>
318
- decode_union_object((input, object, explore) =>
319
- decode_object({
320
- config: props.config,
321
- importer: props.importer,
322
- object,
323
- input,
324
- explore,
325
- }),
326
- )((input, object, explore) =>
327
- decode_object({
328
- config: props.config,
329
- importer: props.importer,
330
- input,
331
- object,
332
- explore: {
333
- ...explore,
334
- tracable: true,
335
- },
336
- }),
337
- )(props.config.joiner.is ?? ((expr) => expr))((input, expected) =>
338
- ts.factory.createReturnStatement(
339
- props.config.joiner.failure({
340
- input,
341
- expected,
318
+ decode_union_object({
319
+ checker: (v) =>
320
+ decode_object({
321
+ config: props.config,
322
+ importer: props.importer,
323
+ object: v.object,
324
+ input: v.input,
325
+ explore: v.explore,
342
326
  }),
343
- ),
344
- )(next.input, next.objects, next.explore)
327
+ decoder: (v) =>
328
+ decode_object({
329
+ config: props.config,
330
+ importer: props.importer,
331
+ input: v.input,
332
+ object: v.object,
333
+ explore: {
334
+ ...v.explore,
335
+ tracable: true,
336
+ },
337
+ }),
338
+ success: props.config.joiner.is ?? ((expr) => expr),
339
+ escaper: (v) =>
340
+ ts.factory.createReturnStatement(
341
+ props.config.joiner.failure(v),
342
+ ),
343
+ input: next.input,
344
+ objects: next.objects,
345
+ explore: next.explore,
346
+ })
345
347
  : (next) =>
346
348
  props.config.combiner({
347
349
  logic: "or",
@@ -560,9 +562,12 @@ export namespace CheckerProgrammer {
560
562
  binaries.push({
561
563
  expression: props.config.atomist({
562
564
  explore: props.explore,
563
- entry: check_number(props.context, props.config.numeric)(atom)(
564
- props.input,
565
- ),
565
+ entry: check_number({
566
+ context: props.context,
567
+ numeric: props.config.numeric,
568
+ atomic: atom,
569
+ input: props.input,
570
+ }),
566
571
  input: props.input,
567
572
  }),
568
573
  combined: false,
@@ -571,7 +576,11 @@ export namespace CheckerProgrammer {
571
576
  binaries.push({
572
577
  expression: props.config.atomist({
573
578
  explore: props.explore,
574
- entry: check_bigint(props.context)(atom)(props.input),
579
+ entry: check_bigint({
580
+ context: props.context,
581
+ atomic: atom,
582
+ input: props.input,
583
+ }),
575
584
  input: props.input,
576
585
  }),
577
586
  combined: false,
@@ -580,7 +589,11 @@ export namespace CheckerProgrammer {
580
589
  binaries.push({
581
590
  expression: props.config.atomist({
582
591
  explore: props.explore,
583
- entry: check_string(props.context)(atom)(props.input),
592
+ entry: check_string({
593
+ context: props.context,
594
+ atomic: atom,
595
+ input: props.input,
596
+ }),
584
597
  input: props.input,
585
598
  }),
586
599
  combined: false,
@@ -598,7 +611,10 @@ export namespace CheckerProgrammer {
598
611
  binaries.push({
599
612
  expression: props.config.atomist({
600
613
  explore: props.explore,
601
- entry: check_template(props.metadata.templates)(props.input),
614
+ entry: check_template({
615
+ templates: props.metadata.templates,
616
+ input: props.input,
617
+ }),
602
618
  input: props.input,
603
619
  }),
604
620
  combined: false,
@@ -607,7 +623,10 @@ export namespace CheckerProgrammer {
607
623
  // NATIVE CLASSES
608
624
  for (const native of props.metadata.natives)
609
625
  binaries.push({
610
- expression: check_native(native)(props.input),
626
+ expression: check_native({
627
+ type: native,
628
+ input: props.input,
629
+ }),
611
630
  combined: false,
612
631
  });
613
632
 
@@ -615,7 +634,7 @@ export namespace CheckerProgrammer {
615
634
  // INSTANCES
616
635
  //----
617
636
  interface IInstance {
618
- knock: ts.Expression;
637
+ head: ts.Expression;
619
638
  body: ts.Expression | null;
620
639
  expected: string;
621
640
  }
@@ -626,7 +645,10 @@ export namespace CheckerProgrammer {
626
645
  if (props.metadata.sets.length) {
627
646
  const install = (body: ts.Expression | null) =>
628
647
  prepare({
629
- knock: check_native("Set")(props.input),
648
+ head: check_native({
649
+ type: "Set",
650
+ input: props.input,
651
+ }),
630
652
  expected: props.metadata.sets
631
653
  .map((elem) => `Set<${elem.getName()}>`)
632
654
  .join(" | "),
@@ -653,7 +675,10 @@ export namespace CheckerProgrammer {
653
675
  if (props.metadata.maps.length) {
654
676
  const install = (body: ts.Expression | null) =>
655
677
  prepare({
656
- knock: check_native("Map")(props.input),
678
+ head: check_native({
679
+ type: "Map",
680
+ input: props.input,
681
+ }),
657
682
  expected: props.metadata.maps
658
683
  .map(({ key, value }) => `Map<${key}, ${value}>`)
659
684
  .join(" | "),
@@ -681,7 +706,7 @@ export namespace CheckerProgrammer {
681
706
  if (props.metadata.tuples.length + props.metadata.arrays.length > 0) {
682
707
  const install = (body: ts.Expression | null) =>
683
708
  prepare({
684
- knock: props.config.atomist({
709
+ head: props.config.atomist({
685
710
  explore: props.explore,
686
711
  entry: {
687
712
  expected: [
@@ -776,7 +801,7 @@ export namespace CheckerProgrammer {
776
801
  // OBJECT
777
802
  if (props.metadata.objects.length > 0)
778
803
  prepare({
779
- knock: ExpressionFactory.isObject({
804
+ head: ExpressionFactory.isObject({
780
805
  checkNull: true,
781
806
  checkArray: props.metadata.objects.some((obj) =>
782
807
  obj.properties.every(
@@ -803,23 +828,23 @@ export namespace CheckerProgrammer {
803
828
  (ins: IInstance) =>
804
829
  ins.body
805
830
  ? {
806
- expression: merger(ins.knock, ins.body),
831
+ expression: merger(ins.head, ins.body),
807
832
  combined: true,
808
833
  }
809
834
  : {
810
- expression: ins.knock,
835
+ expression: ins.head,
811
836
  combined: false,
812
837
  };
813
838
  if (instances.length === 1)
814
839
  binaries.push(
815
- transformer((pre, body) =>
840
+ transformer((head, body) =>
816
841
  props.config.combiner({
817
842
  explore: props.explore,
818
843
  logic: "and",
819
844
  input: props.input,
820
- binaries: [pre, body].map((expression) => ({
845
+ binaries: [head, body].map((expression) => ({
821
846
  expression,
822
- combined: expression !== pre,
847
+ combined: expression !== head,
823
848
  })),
824
849
  expected: props.metadata.getName(),
825
850
  }),
@@ -845,9 +870,10 @@ export namespace CheckerProgrammer {
845
870
  expression:
846
871
  props.metadata.escaped.original.size() === 1 &&
847
872
  props.metadata.escaped.original.natives.length === 1
848
- ? check_native(props.metadata.escaped.original.natives[0]!)(
849
- props.input,
850
- )
873
+ ? check_native({
874
+ type: props.metadata.escaped.original.natives[0]!,
875
+ input: props.input,
876
+ })
851
877
  : ts.factory.createLogicalAnd(
852
878
  decode({
853
879
  context: props.context,
@@ -968,9 +994,11 @@ export namespace CheckerProgrammer {
968
994
  input: ts.Expression;
969
995
  explore: IExplore;
970
996
  }): ts.Expression => {
971
- const length: ICheckEntry = check_array_length(props.context)(props.array)(
972
- props.input,
973
- );
997
+ const length: ICheckEntry = check_array_length({
998
+ context: props.context,
999
+ array: props.array,
1000
+ input: props.input,
1001
+ });
974
1002
  const main: ts.Expression = FeatureProgrammer.decode_array({
975
1003
  config: {
976
1004
  prefix: props.config.prefix,
@@ -1197,35 +1225,35 @@ export namespace CheckerProgrammer {
1197
1225
  }): ts.Expression =>
1198
1226
  ts.factory.createCallExpression(
1199
1227
  UnionExplorer.set({
1200
- checker: (input, metadata, explore, _container) =>
1201
- decode({
1202
- context: props.context,
1203
- config: props.config,
1204
- importer: props.importer,
1205
- input,
1206
- metadata,
1207
- explore,
1208
- }),
1209
- decoder: (input, array, explore) =>
1210
- decode_array({
1211
- config: props.config,
1212
- context: props.context,
1213
- importer: props.importer,
1214
- array,
1215
- input,
1216
- explore,
1217
- }),
1218
- empty: props.config.success,
1219
- success: props.config.success,
1220
- failure: (input, expected, explore) =>
1221
- ts.factory.createReturnStatement(
1222
- props.config.joiner.failure({
1223
- input,
1224
- expected,
1225
- explore,
1228
+ config: {
1229
+ checker: (v) =>
1230
+ decode({
1231
+ context: props.context,
1232
+ config: props.config,
1233
+ importer: props.importer,
1234
+ input: v.input,
1235
+ metadata: v.definition,
1236
+ explore: v.explore,
1226
1237
  }),
1227
- ),
1228
- })([])(props.input, props.sets, props.explore),
1238
+ decoder: (v) =>
1239
+ decode_array({
1240
+ config: props.config,
1241
+ context: props.context,
1242
+ importer: props.importer,
1243
+ array: v.definition,
1244
+ input: v.input,
1245
+ explore: v.explore,
1246
+ }),
1247
+ empty: props.config.success,
1248
+ success: props.config.success,
1249
+ failure: (v) =>
1250
+ ts.factory.createReturnStatement(props.config.joiner.failure(v)),
1251
+ },
1252
+ parameters: [],
1253
+ input: props.input,
1254
+ sets: props.sets,
1255
+ explore: props.explore,
1256
+ }),
1229
1257
  undefined,
1230
1258
  undefined,
1231
1259
  );
@@ -1240,51 +1268,51 @@ export namespace CheckerProgrammer {
1240
1268
  }): ts.Expression =>
1241
1269
  ts.factory.createCallExpression(
1242
1270
  UnionExplorer.map({
1243
- checker: (input, entry, explore) =>
1244
- ts.factory.createLogicalAnd(
1245
- decode({
1246
- config: props.config,
1271
+ config: {
1272
+ checker: (v) =>
1273
+ ts.factory.createLogicalAnd(
1274
+ decode({
1275
+ config: props.config,
1276
+ context: props.context,
1277
+ importer: props.importer,
1278
+ input: ts.factory.createElementAccessExpression(v.input, 0),
1279
+ metadata: v.definition[0],
1280
+ explore: {
1281
+ ...v.explore,
1282
+ postfix: `${v.explore.postfix}[0]`,
1283
+ },
1284
+ }),
1285
+ decode({
1286
+ config: props.config,
1287
+ context: props.context,
1288
+ importer: props.importer,
1289
+ input: ts.factory.createElementAccessExpression(v.input, 1),
1290
+ metadata: v.definition[1],
1291
+ explore: {
1292
+ ...v.explore,
1293
+ postfix: `${v.explore.postfix}[1]`,
1294
+ },
1295
+ }),
1296
+ ),
1297
+ decoder: (v) =>
1298
+ decode_array({
1247
1299
  context: props.context,
1248
- importer: props.importer,
1249
- input: ts.factory.createElementAccessExpression(input, 0),
1250
- metadata: entry[0],
1251
- explore: {
1252
- ...explore,
1253
- postfix: `${explore.postfix}[0]`,
1254
- },
1255
- }),
1256
- decode({
1257
1300
  config: props.config,
1258
- context: props.context,
1259
1301
  importer: props.importer,
1260
- input: ts.factory.createElementAccessExpression(input, 1),
1261
- metadata: entry[1],
1262
- explore: {
1263
- ...explore,
1264
- postfix: `${explore.postfix}[1]`,
1265
- },
1266
- }),
1267
- ),
1268
- decoder: (input, array, explore) =>
1269
- decode_array({
1270
- context: props.context,
1271
- config: props.config,
1272
- importer: props.importer,
1273
- array,
1274
- input,
1275
- explore,
1276
- }),
1277
- empty: props.config.success,
1278
- success: props.config.success,
1279
- failure: (input, expected, explore) =>
1280
- ts.factory.createReturnStatement(
1281
- props.config.joiner.failure({
1282
- input,
1283
- expected,
1284
- explore,
1302
+ array: v.definition,
1303
+ input: v.input,
1304
+ explore: v.explore,
1285
1305
  }),
1286
- ),
1287
- })([])(props.input, props.maps, props.explore),
1306
+ empty: props.config.success,
1307
+ success: props.config.success,
1308
+ failure: (v) =>
1309
+ ts.factory.createReturnStatement(props.config.joiner.failure(v)),
1310
+ },
1311
+ parameters: [],
1312
+ input: props.input,
1313
+ maps: props.maps,
1314
+ explore: props.explore,
1315
+ }),
1288
1316
  undefined,
1289
1317
  undefined,
1290
1318
  );
@@ -1300,36 +1328,37 @@ export namespace CheckerProgrammer {
1300
1328
  explore_array_like_union_types<MetadataTuple>({
1301
1329
  config: props.config,
1302
1330
  importer: props.importer,
1303
- factory: UnionExplorer.tuple({
1304
- checker: (input, tuple, explore) =>
1305
- decode_tuple({
1306
- context: props.context,
1307
- config: props.config,
1308
- importer: props.importer,
1309
- input,
1310
- tuple,
1311
- explore,
1312
- }),
1313
- decoder: (input, tuple, explore) =>
1314
- decode_tuple({
1315
- context: props.context,
1316
- config: props.config,
1317
- importer: props.importer,
1318
- tuple,
1319
- input,
1320
- explore,
1321
- }),
1322
- empty: props.config.success,
1323
- success: props.config.success,
1324
- failure: (input, expected, explore) =>
1325
- ts.factory.createReturnStatement(
1326
- props.config.joiner.failure({
1327
- input,
1328
- expected,
1329
- explore,
1330
- }),
1331
- ),
1332
- }),
1331
+ factory: (next) =>
1332
+ UnionExplorer.tuple({
1333
+ config: {
1334
+ checker: (v) =>
1335
+ decode_tuple({
1336
+ context: props.context,
1337
+ config: props.config,
1338
+ importer: props.importer,
1339
+ input: v.input,
1340
+ tuple: v.definition,
1341
+ explore: v.explore,
1342
+ }),
1343
+ decoder: (v) =>
1344
+ decode_tuple({
1345
+ context: props.context,
1346
+ config: props.config,
1347
+ importer: props.importer,
1348
+ tuple: v.definition,
1349
+ input: v.input,
1350
+ explore: v.explore,
1351
+ }),
1352
+ empty: props.config.success,
1353
+ success: props.config.success,
1354
+ failure: (v) =>
1355
+ ts.factory.createReturnStatement(props.config.joiner.failure(v)),
1356
+ },
1357
+ parameters: next.parameters,
1358
+ tuples: next.definitions,
1359
+ input: next.input,
1360
+ explore: next.explore,
1361
+ }),
1333
1362
  definitions: props.tuples,
1334
1363
  input: props.input,
1335
1364
  explore: props.explore,
@@ -1346,36 +1375,37 @@ export namespace CheckerProgrammer {
1346
1375
  explore_array_like_union_types<MetadataArray>({
1347
1376
  config: props.config,
1348
1377
  importer: props.importer,
1349
- factory: UnionExplorer.array({
1350
- checker: (input, metadata, explore) =>
1351
- decode({
1352
- context: props.context,
1353
- config: props.config,
1354
- importer: props.importer,
1355
- metadata,
1356
- input,
1357
- explore,
1358
- }),
1359
- decoder: (input, array, explore) =>
1360
- decode_array({
1361
- context: props.context,
1362
- config: props.config,
1363
- importer: props.importer,
1364
- array,
1365
- input,
1366
- explore,
1367
- }),
1368
- empty: props.config.success,
1369
- success: props.config.success,
1370
- failure: (input, expected, explore) =>
1371
- ts.factory.createReturnStatement(
1372
- props.config.joiner.failure({
1373
- input,
1374
- expected,
1375
- explore,
1376
- }),
1377
- ),
1378
- }),
1378
+ factory: (next) =>
1379
+ UnionExplorer.array({
1380
+ config: {
1381
+ checker: (v) =>
1382
+ decode({
1383
+ context: props.context,
1384
+ config: props.config,
1385
+ importer: props.importer,
1386
+ metadata: v.definition,
1387
+ input: v.input,
1388
+ explore: v.explore,
1389
+ }),
1390
+ decoder: (v) =>
1391
+ decode_array({
1392
+ context: props.context,
1393
+ config: props.config,
1394
+ importer: props.importer,
1395
+ array: v.definition,
1396
+ input: v.input,
1397
+ explore: v.explore,
1398
+ }),
1399
+ empty: props.config.success,
1400
+ success: props.config.success,
1401
+ failure: (v) =>
1402
+ ts.factory.createReturnStatement(props.config.joiner.failure(v)),
1403
+ },
1404
+ parameters: next.parameters,
1405
+ arrays: next.definitions,
1406
+ input: next.input,
1407
+ explore: next.explore,
1408
+ }),
1379
1409
  definitions: props.arrays,
1380
1410
  input: props.input,
1381
1411
  explore: props.explore,
@@ -1392,68 +1422,69 @@ export namespace CheckerProgrammer {
1392
1422
  explore_array_like_union_types<MetadataArray | MetadataTuple>({
1393
1423
  config: props.config,
1394
1424
  importer: props.importer,
1395
- factory: UnionExplorer.array_or_tuple({
1396
- checker: (input, definition, explore, array) =>
1397
- definition instanceof MetadataTuple
1398
- ? decode_tuple({
1399
- config: props.config,
1400
- context: props.context,
1401
- importer: props.importer,
1402
- input,
1403
- tuple: definition,
1404
- explore,
1405
- })
1406
- : props.config.atomist({
1407
- explore,
1408
- entry: {
1409
- expected: props.definitions
1410
- .map((elem) =>
1411
- elem instanceof MetadataArray
1412
- ? elem.getName()
1413
- : elem.type.name,
1414
- )
1415
- .join(" | "),
1416
- expression: decode({
1425
+ factory: (next) =>
1426
+ UnionExplorer.array_or_tuple({
1427
+ config: {
1428
+ checker: (v) =>
1429
+ v.definition instanceof MetadataTuple
1430
+ ? decode_tuple({
1431
+ config: props.config,
1432
+ context: props.context,
1417
1433
  importer: props.importer,
1434
+ input: v.input,
1435
+ tuple: v.definition,
1436
+ explore: v.explore,
1437
+ })
1438
+ : props.config.atomist({
1439
+ explore: v.explore,
1440
+ entry: {
1441
+ expected: props.definitions
1442
+ .map((elem) =>
1443
+ elem instanceof MetadataArray
1444
+ ? elem.getName()
1445
+ : elem.type.name,
1446
+ )
1447
+ .join(" | "),
1448
+ expression: decode({
1449
+ importer: props.importer,
1450
+ context: props.context,
1451
+ config: props.config,
1452
+ metadata: v.definition,
1453
+ input: v.input,
1454
+ explore: v.explore,
1455
+ }),
1456
+ conditions: [],
1457
+ },
1458
+ input: v.container,
1459
+ }),
1460
+ decoder: (v) =>
1461
+ v.definition instanceof MetadataTuple
1462
+ ? decode_tuple({
1418
1463
  context: props.context,
1419
1464
  config: props.config,
1420
- input,
1421
- metadata: definition,
1422
- explore,
1465
+ importer: props.importer,
1466
+ input: v.input,
1467
+ tuple: v.definition,
1468
+ explore: v.explore,
1469
+ })
1470
+ : decode_array({
1471
+ context: props.context,
1472
+ config: props.config,
1473
+ importer: props.importer,
1474
+ input: v.input,
1475
+ array: v.definition,
1476
+ explore: v.explore,
1423
1477
  }),
1424
- conditions: [],
1425
- },
1426
- input: array,
1427
- }),
1428
- decoder: (input, definition, explore) =>
1429
- definition instanceof MetadataTuple
1430
- ? decode_tuple({
1431
- context: props.context,
1432
- config: props.config,
1433
- importer: props.importer,
1434
- input,
1435
- tuple: definition,
1436
- explore,
1437
- })
1438
- : decode_array({
1439
- context: props.context,
1440
- config: props.config,
1441
- importer: props.importer,
1442
- input,
1443
- array: definition,
1444
- explore,
1445
- }),
1446
- empty: props.config.success,
1447
- success: props.config.success,
1448
- failure: (input, expected, explore) =>
1449
- ts.factory.createReturnStatement(
1450
- props.config.joiner.failure({
1451
- input,
1452
- expected,
1453
- explore,
1454
- }),
1455
- ),
1456
- }),
1478
+ empty: props.config.success,
1479
+ success: props.config.success,
1480
+ failure: (v) =>
1481
+ ts.factory.createReturnStatement(props.config.joiner.failure(v)),
1482
+ },
1483
+ parameters: next.parameters,
1484
+ definitions: next.definitions,
1485
+ input: next.input,
1486
+ explore: next.explore,
1487
+ }),
1457
1488
  input: props.input,
1458
1489
  definitions: props.definitions,
1459
1490
  explore: props.explore,
@@ -1464,13 +1495,12 @@ export namespace CheckerProgrammer {
1464
1495
  >(props: {
1465
1496
  config: IConfig;
1466
1497
  importer: FunctionImporter;
1467
- factory: (
1468
- parameters: ts.ParameterDeclaration[],
1469
- ) => (
1470
- input: ts.Expression,
1471
- elements: T[],
1472
- explore: IExplore,
1473
- ) => ts.ArrowFunction;
1498
+ factory: (next: {
1499
+ parameters: ts.ParameterDeclaration[];
1500
+ definitions: T[];
1501
+ input: ts.Expression;
1502
+ explore: IExplore;
1503
+ }) => ts.ArrowFunction;
1474
1504
  input: ts.Expression;
1475
1505
  definitions: T[];
1476
1506
  explore: IExplore;
@@ -1480,11 +1510,12 @@ export namespace CheckerProgrammer {
1480
1510
  explore: IExplore;
1481
1511
  input: ts.Expression;
1482
1512
  }): ts.ArrowFunction =>
1483
- props.factory(next.parameters)(
1484
- next.input,
1485
- props.definitions,
1486
- next.explore,
1487
- );
1513
+ props.factory({
1514
+ parameters: next.parameters,
1515
+ definitions: props.definitions,
1516
+ input: next.input,
1517
+ explore: next.explore,
1518
+ });
1488
1519
  if (props.definitions.every((e) => e.type.recursive === false))
1489
1520
  ts.factory.createCallExpression(
1490
1521
  arrow({