typia 7.0.0-dev.20241012 → 7.0.0-dev.20241018

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 (236) hide show
  1. package/lib/factories/JsonMetadataFactory.js +3 -2
  2. package/lib/factories/JsonMetadataFactory.js.map +1 -1
  3. package/lib/factories/MetadataCollection.d.ts +3 -3
  4. package/lib/factories/MetadataCollection.js +2 -2
  5. package/lib/factories/MetadataCollection.js.map +1 -1
  6. package/lib/factories/MetadataFactory.d.ts +2 -2
  7. package/lib/factories/MetadataFactory.js +3 -3
  8. package/lib/factories/MetadataFactory.js.map +1 -1
  9. package/lib/factories/MetadataTypeTagFactory.d.ts +3 -2
  10. package/lib/factories/MetadataTypeTagFactory.js +26 -3
  11. package/lib/factories/MetadataTypeTagFactory.js.map +1 -1
  12. package/lib/factories/ProtobufFactory.js +829 -156
  13. package/lib/factories/ProtobufFactory.js.map +1 -1
  14. package/lib/factories/internal/metadata/IMetadataIteratorProps.d.ts +1 -0
  15. package/lib/factories/internal/metadata/MetadataHelper.js +1 -1
  16. package/lib/factories/internal/metadata/MetadataHelper.js.map +1 -1
  17. package/lib/factories/internal/metadata/emplace_metadata_alias.d.ts +2 -2
  18. package/lib/factories/internal/metadata/emplace_metadata_object.js +5 -5
  19. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  20. package/lib/factories/internal/metadata/explore_metadata.js +2 -0
  21. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  22. package/lib/factories/internal/metadata/iterate_metadata.js +1 -1
  23. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  24. package/lib/factories/internal/metadata/iterate_metadata_alias.js +8 -2
  25. package/lib/factories/internal/metadata/iterate_metadata_alias.js.map +1 -1
  26. package/lib/factories/internal/metadata/iterate_metadata_collection.js +6 -6
  27. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  28. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +262 -137
  29. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  30. package/lib/factories/internal/metadata/iterate_metadata_map.js +4 -2
  31. package/lib/factories/internal/metadata/iterate_metadata_map.js.map +1 -1
  32. package/lib/factories/internal/metadata/iterate_metadata_native.js +27 -11
  33. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
  34. package/lib/factories/internal/metadata/iterate_metadata_set.js +8 -1
  35. package/lib/factories/internal/metadata/iterate_metadata_set.js.map +1 -1
  36. package/lib/factories/internal/metadata/iterate_metadata_sort.js +1 -1
  37. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  38. package/lib/factories/internal/metadata/iterate_metadata_template.js +1 -1
  39. package/lib/factories/internal/metadata/iterate_metadata_template.js.map +1 -1
  40. package/lib/programmers/CheckerProgrammer.js +5 -5
  41. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  42. package/lib/programmers/RandomProgrammer.js +12 -12
  43. package/lib/programmers/RandomProgrammer.js.map +1 -1
  44. package/lib/programmers/helpers/AtomicPredicator.js +3 -3
  45. package/lib/programmers/helpers/AtomicPredicator.js.map +1 -1
  46. package/lib/programmers/helpers/ProtobufUtil.d.ts +5 -4
  47. package/lib/programmers/helpers/ProtobufUtil.js +215 -92
  48. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  49. package/lib/programmers/helpers/UnionExplorer.d.ts +4 -2
  50. package/lib/programmers/helpers/UnionExplorer.js +1 -1
  51. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  52. package/lib/programmers/http/HttpFormDataProgrammer.js +6 -6
  53. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  54. package/lib/programmers/internal/application_escaped.js +2 -2
  55. package/lib/programmers/internal/application_escaped.js.map +1 -1
  56. package/lib/programmers/internal/application_v30_alias.js +13 -8
  57. package/lib/programmers/internal/application_v30_alias.js.map +1 -1
  58. package/lib/programmers/internal/application_v30_native.js +17 -10
  59. package/lib/programmers/internal/application_v30_native.js.map +1 -1
  60. package/lib/programmers/internal/application_v30_object.js +16 -6
  61. package/lib/programmers/internal/application_v30_object.js.map +1 -1
  62. package/lib/programmers/internal/application_v30_schema.js +24 -17
  63. package/lib/programmers/internal/application_v30_schema.js.map +1 -1
  64. package/lib/programmers/internal/application_v31_alias.js +12 -11
  65. package/lib/programmers/internal/application_v31_alias.js.map +1 -1
  66. package/lib/programmers/internal/application_v31_native.js +17 -10
  67. package/lib/programmers/internal/application_v31_native.js.map +1 -1
  68. package/lib/programmers/internal/application_v31_object.js +13 -6
  69. package/lib/programmers/internal/application_v31_object.js.map +1 -1
  70. package/lib/programmers/internal/application_v31_schema.js +23 -16
  71. package/lib/programmers/internal/application_v31_schema.js.map +1 -1
  72. package/lib/programmers/internal/check_dynamic_key.js +4 -4
  73. package/lib/programmers/internal/check_dynamic_key.js.map +1 -1
  74. package/lib/programmers/internal/check_native.js +3 -3
  75. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  76. package/lib/programmers/internal/llm_schema_escaped.js +2 -2
  77. package/lib/programmers/internal/llm_schema_escaped.js.map +1 -1
  78. package/lib/programmers/internal/llm_schema_object.js +18 -14
  79. package/lib/programmers/internal/llm_schema_object.js.map +1 -1
  80. package/lib/programmers/internal/llm_schema_station.js +8 -8
  81. package/lib/programmers/internal/llm_schema_station.js.map +1 -1
  82. package/lib/programmers/json/JsonSchemasProgrammer.js +5 -5
  83. package/lib/programmers/json/JsonSchemasProgrammer.js.map +1 -1
  84. package/lib/programmers/json/JsonStringifyProgrammer.js +18 -17
  85. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  86. package/lib/programmers/llm/LlmSchemaProgrammer.js +6 -6
  87. package/lib/programmers/llm/LlmSchemaProgrammer.js.map +1 -1
  88. package/lib/programmers/misc/MiscCloneProgrammer.js +7 -5
  89. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  90. package/lib/programmers/misc/MiscPruneProgrammer.js +1 -1
  91. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  92. package/lib/programmers/notations/NotationGeneralProgrammer.js +6 -4
  93. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  94. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +15 -12
  95. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  96. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +6 -4
  97. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  98. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +51 -34
  99. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  100. package/lib/schemas/metadata/IMetadata.d.ts +14 -18
  101. package/lib/schemas/metadata/IMetadataAlias.d.ts +2 -7
  102. package/lib/schemas/metadata/IMetadataAliasType.d.ts +10 -0
  103. package/lib/schemas/metadata/IMetadataAliasType.js +3 -0
  104. package/lib/schemas/metadata/IMetadataAliasType.js.map +1 -0
  105. package/lib/schemas/metadata/IMetadataComponents.d.ts +2 -2
  106. package/lib/schemas/metadata/IMetadataConstantValue.d.ts +1 -1
  107. package/lib/schemas/metadata/IMetadataDictionary.d.ts +2 -2
  108. package/lib/schemas/metadata/IMetadataMap.d.ts +7 -0
  109. package/lib/schemas/metadata/{IMetadataEntry.js → IMetadataMap.js} +1 -1
  110. package/lib/schemas/metadata/IMetadataMap.js.map +1 -0
  111. package/lib/schemas/metadata/IMetadataNative.d.ts +5 -0
  112. package/lib/schemas/metadata/IMetadataNative.js +3 -0
  113. package/lib/schemas/metadata/IMetadataNative.js.map +1 -0
  114. package/lib/schemas/metadata/IMetadataSet.d.ts +6 -0
  115. package/lib/schemas/metadata/IMetadataSet.js +3 -0
  116. package/lib/schemas/metadata/IMetadataSet.js.map +1 -0
  117. package/lib/schemas/metadata/IMetadataTemplate.d.ts +1 -1
  118. package/lib/schemas/metadata/IMetadataTypeTag.d.ts +1 -1
  119. package/lib/schemas/metadata/Metadata.d.ts +6 -9
  120. package/lib/schemas/metadata/Metadata.js +136 -98
  121. package/lib/schemas/metadata/Metadata.js.map +1 -1
  122. package/lib/schemas/metadata/MetadataAlias.d.ts +8 -11
  123. package/lib/schemas/metadata/MetadataAlias.js +48 -33
  124. package/lib/schemas/metadata/MetadataAlias.js.map +1 -1
  125. package/lib/schemas/metadata/MetadataAliasType.d.ts +16 -0
  126. package/lib/schemas/metadata/MetadataAliasType.js +51 -0
  127. package/lib/schemas/metadata/MetadataAliasType.js.map +1 -0
  128. package/lib/schemas/metadata/MetadataComponents.d.ts +2 -2
  129. package/lib/schemas/metadata/MetadataComponents.js +2 -2
  130. package/lib/schemas/metadata/MetadataComponents.js.map +1 -1
  131. package/lib/schemas/metadata/MetadataConstantValue.d.ts +1 -1
  132. package/lib/schemas/metadata/MetadataMap.d.ts +14 -0
  133. package/lib/schemas/metadata/MetadataMap.js +66 -0
  134. package/lib/schemas/metadata/MetadataMap.js.map +1 -0
  135. package/lib/schemas/metadata/MetadataNative.d.ts +12 -0
  136. package/lib/schemas/metadata/MetadataNative.js +65 -0
  137. package/lib/schemas/metadata/MetadataNative.js.map +1 -0
  138. package/lib/schemas/metadata/MetadataSet.d.ts +13 -0
  139. package/lib/schemas/metadata/MetadataSet.js +64 -0
  140. package/lib/schemas/metadata/MetadataSet.js.map +1 -0
  141. package/lib/schemas/metadata/MetadataTemplate.d.ts +1 -1
  142. package/lib/tags/Example.d.ts +2 -2
  143. package/lib/tags/Examples.d.ts +2 -2
  144. package/lib/tags/JsonSchemaPlugin.d.ts +1 -1
  145. package/lib/tags/Sequence.d.ts +9 -0
  146. package/lib/tags/Sequence.js +3 -0
  147. package/lib/tags/Sequence.js.map +1 -0
  148. package/lib/tags/TagBase.d.ts +1 -1
  149. package/lib/tags/index.d.ts +1 -0
  150. package/lib/tags/index.js +1 -0
  151. package/lib/tags/index.js.map +1 -1
  152. package/package.json +1 -1
  153. package/src/factories/JsonMetadataFactory.ts +5 -2
  154. package/src/factories/MetadataCollection.ts +6 -6
  155. package/src/factories/MetadataFactory.ts +7 -7
  156. package/src/factories/MetadataTypeTagFactory.ts +31 -6
  157. package/src/factories/ProtobufFactory.ts +494 -176
  158. package/src/factories/internal/metadata/IMetadataIteratorProps.ts +1 -0
  159. package/src/factories/internal/metadata/MetadataHelper.ts +1 -1
  160. package/src/factories/internal/metadata/emplace_metadata_alias.ts +2 -2
  161. package/src/factories/internal/metadata/emplace_metadata_object.ts +5 -5
  162. package/src/factories/internal/metadata/explore_metadata.ts +1 -0
  163. package/src/factories/internal/metadata/iterate_metadata.ts +1 -1
  164. package/src/factories/internal/metadata/iterate_metadata_alias.ts +9 -4
  165. package/src/factories/internal/metadata/iterate_metadata_collection.ts +6 -6
  166. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +163 -181
  167. package/src/factories/internal/metadata/iterate_metadata_map.ts +5 -2
  168. package/src/factories/internal/metadata/iterate_metadata_native.ts +20 -2
  169. package/src/factories/internal/metadata/iterate_metadata_set.ts +27 -11
  170. package/src/factories/internal/metadata/iterate_metadata_sort.ts +1 -1
  171. package/src/factories/internal/metadata/iterate_metadata_template.ts +1 -3
  172. package/src/programmers/CheckerProgrammer.ts +9 -7
  173. package/src/programmers/RandomProgrammer.ts +16 -14
  174. package/src/programmers/helpers/AtomicPredicator.ts +3 -3
  175. package/src/programmers/helpers/ProtobufUtil.ts +146 -43
  176. package/src/programmers/helpers/UnionExplorer.ts +62 -62
  177. package/src/programmers/http/HttpFormDataProgrammer.ts +10 -6
  178. package/src/programmers/internal/application_escaped.ts +2 -2
  179. package/src/programmers/internal/application_v30_alias.ts +18 -12
  180. package/src/programmers/internal/application_v30_native.ts +22 -12
  181. package/src/programmers/internal/application_v30_object.ts +23 -8
  182. package/src/programmers/internal/application_v30_schema.ts +31 -34
  183. package/src/programmers/internal/application_v31_alias.ts +16 -13
  184. package/src/programmers/internal/application_v31_native.ts +22 -12
  185. package/src/programmers/internal/application_v31_object.ts +19 -8
  186. package/src/programmers/internal/application_v31_schema.ts +26 -29
  187. package/src/programmers/internal/check_dynamic_key.ts +4 -4
  188. package/src/programmers/internal/check_native.ts +4 -4
  189. package/src/programmers/internal/check_union_array_like.ts +2 -1
  190. package/src/programmers/internal/llm_schema_escaped.ts +2 -2
  191. package/src/programmers/internal/llm_schema_object.ts +21 -18
  192. package/src/programmers/internal/llm_schema_station.ts +9 -11
  193. package/src/programmers/json/JsonSchemasProgrammer.ts +5 -5
  194. package/src/programmers/json/JsonStringifyProgrammer.ts +5 -5
  195. package/src/programmers/llm/LlmSchemaProgrammer.ts +6 -6
  196. package/src/programmers/misc/MiscCloneProgrammer.ts +11 -7
  197. package/src/programmers/misc/MiscPruneProgrammer.ts +1 -1
  198. package/src/programmers/notations/NotationGeneralProgrammer.ts +10 -6
  199. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +14 -7
  200. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +11 -8
  201. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +45 -20
  202. package/src/schemas/metadata/IMetadata.ts +35 -39
  203. package/src/schemas/metadata/IMetadataAlias.ts +6 -12
  204. package/src/schemas/metadata/IMetadataAliasType.ts +12 -0
  205. package/src/schemas/metadata/IMetadataArray.ts +6 -6
  206. package/src/schemas/metadata/IMetadataComponents.ts +11 -11
  207. package/src/schemas/metadata/IMetadataConstantValue.ts +1 -1
  208. package/src/schemas/metadata/IMetadataDictionary.ts +2 -2
  209. package/src/schemas/metadata/IMetadataMap.ts +8 -0
  210. package/src/schemas/metadata/IMetadataNative.ts +6 -0
  211. package/src/schemas/metadata/IMetadataObjectType.ts +13 -13
  212. package/src/schemas/metadata/IMetadataSet.ts +7 -0
  213. package/src/schemas/metadata/IMetadataTemplate.ts +7 -7
  214. package/src/schemas/metadata/IMetadataTuple.ts +6 -6
  215. package/src/schemas/metadata/IMetadataTypeTag.ts +16 -16
  216. package/src/schemas/metadata/Metadata.ts +100 -47
  217. package/src/schemas/metadata/MetadataAlias.ts +46 -61
  218. package/src/schemas/metadata/MetadataAliasType.ts +63 -0
  219. package/src/schemas/metadata/MetadataArray.ts +49 -49
  220. package/src/schemas/metadata/MetadataComponents.ts +3 -3
  221. package/src/schemas/metadata/MetadataConstantValue.ts +1 -1
  222. package/src/schemas/metadata/MetadataMap.ts +48 -0
  223. package/src/schemas/metadata/MetadataNative.ts +44 -0
  224. package/src/schemas/metadata/MetadataProperty.ts +5 -0
  225. package/src/schemas/metadata/MetadataSet.ts +45 -0
  226. package/src/schemas/metadata/MetadataTemplate.ts +80 -80
  227. package/src/schemas/metadata/MetadataTuple.ts +32 -32
  228. package/src/tags/Example.ts +24 -17
  229. package/src/tags/Examples.ts +16 -16
  230. package/src/tags/JsonSchemaPlugin.ts +8 -8
  231. package/src/tags/Sequence.ts +10 -0
  232. package/src/tags/TagBase.ts +82 -76
  233. package/src/tags/index.ts +1 -0
  234. package/lib/schemas/metadata/IMetadataEntry.d.ts +0 -5
  235. package/lib/schemas/metadata/IMetadataEntry.js.map +0 -1
  236. package/src/schemas/metadata/IMetadataEntry.ts +0 -6
@@ -11,7 +11,9 @@ import { ValueFactory } from "../factories/ValueFactory";
11
11
  import { Metadata } from "../schemas/metadata/Metadata";
12
12
  import { MetadataArray } from "../schemas/metadata/MetadataArray";
13
13
  import { MetadataConstant } from "../schemas/metadata/MetadataConstant";
14
+ import { MetadataMap } from "../schemas/metadata/MetadataMap";
14
15
  import { MetadataObjectType } from "../schemas/metadata/MetadataObjectType";
16
+ import { MetadataSet } from "../schemas/metadata/MetadataSet";
15
17
  import { MetadataTuple } from "../schemas/metadata/MetadataTuple";
16
18
  import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
17
19
 
@@ -630,7 +632,7 @@ export namespace CheckerProgrammer {
630
632
  for (const native of props.metadata.natives)
631
633
  binaries.push({
632
634
  expression: check_native({
633
- type: native,
635
+ name: native.name,
634
636
  input: props.input,
635
637
  }),
636
638
  combined: false,
@@ -652,7 +654,7 @@ export namespace CheckerProgrammer {
652
654
  const install = (body: ts.Expression | null) =>
653
655
  prepare({
654
656
  head: check_native({
655
- type: "Set",
657
+ name: "Set",
656
658
  input: props.input,
657
659
  }),
658
660
  expected: props.metadata.sets
@@ -660,7 +662,7 @@ export namespace CheckerProgrammer {
660
662
  .join(" | "),
661
663
  body,
662
664
  });
663
- if (props.metadata.sets.some((elem) => elem.any)) install(null);
665
+ if (props.metadata.sets.some((elem) => elem.value.any)) install(null);
664
666
  else
665
667
  install(
666
668
  explore_sets({
@@ -682,7 +684,7 @@ export namespace CheckerProgrammer {
682
684
  const install = (body: ts.Expression | null) =>
683
685
  prepare({
684
686
  head: check_native({
685
- type: "Map",
687
+ name: "Map",
686
688
  input: props.input,
687
689
  }),
688
690
  expected: props.metadata.maps
@@ -880,7 +882,7 @@ export namespace CheckerProgrammer {
880
882
  props.metadata.escaped.original.size() === 1 &&
881
883
  props.metadata.escaped.original.natives.length === 1
882
884
  ? check_native({
883
- type: props.metadata.escaped.original.natives[0]!,
885
+ name: props.metadata.escaped.original.natives[0]!.name,
884
886
  input: props.input,
885
887
  })
886
888
  : ts.factory.createLogicalAnd(
@@ -1228,7 +1230,7 @@ export namespace CheckerProgrammer {
1228
1230
  context: ITypiaContext;
1229
1231
  config: IConfig;
1230
1232
  functor: FunctionProgrammer;
1231
- sets: Metadata[];
1233
+ sets: MetadataSet[];
1232
1234
  input: ts.Expression;
1233
1235
  explore: IExplore;
1234
1236
  }): ts.Expression =>
@@ -1272,7 +1274,7 @@ export namespace CheckerProgrammer {
1272
1274
  config: IConfig;
1273
1275
  functor: FunctionProgrammer;
1274
1276
  input: ts.Expression;
1275
- maps: Metadata.Entry[];
1277
+ maps: MetadataMap[];
1276
1278
  explore: IExplore;
1277
1279
  }): ts.Expression =>
1278
1280
  ts.factory.createCallExpression(
@@ -15,7 +15,9 @@ import { Metadata } from "../schemas/metadata/Metadata";
15
15
  import { MetadataArray } from "../schemas/metadata/MetadataArray";
16
16
  import { MetadataArrayType } from "../schemas/metadata/MetadataArrayType";
17
17
  import { MetadataAtomic } from "../schemas/metadata/MetadataAtomic";
18
+ import { MetadataMap } from "../schemas/metadata/MetadataMap";
18
19
  import { MetadataObjectType } from "../schemas/metadata/MetadataObjectType";
20
+ import { MetadataSet } from "../schemas/metadata/MetadataSet";
19
21
  import { MetadataTemplate } from "../schemas/metadata/MetadataTemplate";
20
22
  import { MetadataTuple } from "../schemas/metadata/MetadataTuple";
21
23
  import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
@@ -64,9 +66,9 @@ export namespace RandomProgrammer {
64
66
  absorb: true,
65
67
  validate: (meta) => {
66
68
  const output: string[] = [];
67
- if (meta.natives.some((n) => n === "WeakSet"))
69
+ if (meta.natives.some((native) => native.name === "WeakSet"))
68
70
  output.push(`WeakSet is not supported.`);
69
- else if (meta.natives.some((n) => n === "WeakMap"))
71
+ else if (meta.natives.some((native) => native.name === "WeakMap"))
70
72
  output.push(`WeakMap is not supported.`);
71
73
  return output;
72
74
  },
@@ -411,27 +413,27 @@ export namespace RandomProgrammer {
411
413
  object: object.type,
412
414
  }),
413
415
  );
414
- for (const name of props.metadata.natives)
416
+ for (const native of props.metadata.natives)
415
417
  expressions.push(
416
418
  decode_native({
417
419
  context: props.context,
418
420
  functor: props.functor,
419
421
  explore: props.explore,
420
- name,
422
+ name: native.name,
421
423
  }),
422
424
  );
423
- for (const metadata of props.metadata.sets)
425
+ for (const set of props.metadata.sets)
424
426
  expressions.push(
425
427
  decode_set({
426
428
  ...props,
427
- metadata,
429
+ set,
428
430
  }),
429
431
  );
430
432
  for (const entry of props.metadata.maps)
431
433
  expressions.push(
432
434
  decode_map({
433
435
  ...props,
434
- entry,
436
+ map: entry,
435
437
  }),
436
438
  );
437
439
 
@@ -694,7 +696,7 @@ export namespace RandomProgrammer {
694
696
  context: ITypiaContext;
695
697
  functor: FunctionProgrammer;
696
698
  explore: IExplore;
697
- metadata: Metadata;
699
+ set: MetadataSet;
698
700
  }) =>
699
701
  ts.factory.createNewExpression(
700
702
  ts.factory.createIdentifier("Set"),
@@ -705,11 +707,11 @@ export namespace RandomProgrammer {
705
707
  array: MetadataArray.create({
706
708
  tags: [],
707
709
  type: MetadataArrayType.create({
708
- value: props.metadata,
710
+ value: props.set.value,
709
711
  recursive: false,
710
712
  index: null,
711
713
  nullables: [],
712
- name: `Set<${props.metadata.getName()}>`,
714
+ name: props.set.getName(),
713
715
  }),
714
716
  }),
715
717
  })[0]!,
@@ -720,7 +722,7 @@ export namespace RandomProgrammer {
720
722
  context: ITypiaContext;
721
723
  functor: FunctionProgrammer;
722
724
  explore: IExplore;
723
- entry: Metadata.Entry;
725
+ map: MetadataMap;
724
726
  }) =>
725
727
  ts.factory.createNewExpression(
726
728
  ts.factory.createIdentifier("Map"),
@@ -731,7 +733,7 @@ export namespace RandomProgrammer {
731
733
  array: MetadataArray.create({
732
734
  tags: [],
733
735
  type: MetadataArrayType.create({
734
- name: `Map<${props.entry.key.getName()}, ${props.entry.value.getName()}>`,
736
+ name: props.map.getName(),
735
737
  index: null,
736
738
  recursive: false,
737
739
  nullables: [],
@@ -740,11 +742,11 @@ export namespace RandomProgrammer {
740
742
  tuples: [
741
743
  (() => {
742
744
  const type = MetadataTupleType.create({
743
- name: `[${props.entry.key.getName()}, ${props.entry.value.getName()}]`,
745
+ name: `[${props.map.key.getName()}, ${props.map.value.getName()}]`,
744
746
  index: null,
745
747
  recursive: false,
746
748
  nullables: [],
747
- elements: [props.entry.key, props.entry.value],
749
+ elements: [props.map.key, props.map.value],
748
750
  });
749
751
  type.of_map = true;
750
752
  return MetadataTuple.create({
@@ -11,7 +11,7 @@ export namespace AtomicPredicator {
11
11
  }): boolean =>
12
12
  !ArrayUtil.has(
13
13
  props.metadata.natives,
14
- (native) => native.toLowerCase() === props.name,
14
+ (native) => native.name.toLowerCase() === props.name,
15
15
  );
16
16
 
17
17
  export const atomic = (props: {
@@ -20,7 +20,7 @@ export namespace AtomicPredicator {
20
20
  }): boolean =>
21
21
  !ArrayUtil.has(
22
22
  props.metadata.natives,
23
- (native) => native.toLowerCase() === props.name,
23
+ (native) => native.name.toLowerCase() === props.name,
24
24
  );
25
25
 
26
26
  export const native = (name: string) => LIKE.has(name.toLowerCase());
@@ -28,7 +28,7 @@ export namespace AtomicPredicator {
28
28
  export const template = (metadata: Metadata): boolean =>
29
29
  !ArrayUtil.has(
30
30
  metadata.natives,
31
- (native) => native.toLowerCase() === "string",
31
+ (native) => native.name.toLowerCase() === "string",
32
32
  );
33
33
  }
34
34
 
@@ -10,53 +10,150 @@ export namespace ProtobufUtil {
10
10
  obj.properties.every((p) => p.key.isSoleLiteral());
11
11
 
12
12
  export const size = (meta: Metadata): number =>
13
- getAtomics(meta).length +
13
+ getAtomics(meta).size +
14
14
  meta.arrays.length +
15
15
  meta.tuples.length +
16
16
  meta.natives.length +
17
17
  meta.objects.length +
18
18
  meta.maps.length;
19
19
 
20
+ export const getSequence = (tags: IMetadataTypeTag[]): number | null => {
21
+ const sequence = tags.find(
22
+ (t) =>
23
+ t.kind === "sequence" &&
24
+ typeof (t.schema as any)?.["x-protobuf-sequence"] === "number",
25
+ );
26
+ if (sequence === undefined) return null;
27
+ const value: number = Number(
28
+ (sequence.schema as any)["x-protobuf-sequence"],
29
+ );
30
+ return Number.isNaN(value) ? null : value;
31
+ };
32
+
20
33
  export const isUnion = (meta: Metadata): boolean => size(meta) > 1;
21
34
 
22
- export const getAtomics = (meta: Metadata): ProtobufAtomic[] => {
23
- const set: Set<ProtobufAtomic> = new Set();
24
- if (meta.templates.length) set.add("string");
35
+ export const getAtomics = (
36
+ meta: Metadata,
37
+ union?: Map<string, number | null>,
38
+ ): Map<string, number | null> => {
39
+ const map: Map<ProtobufAtomic, number | null> = union ?? new Map();
40
+
41
+ // CONSTANTS
25
42
  for (const c of meta.constants)
26
- if (c.type === "boolean") set.add("bool");
27
- else if (c.type === "bigint") set.add("uint64");
28
- else if (c.type === "number")
29
- set.add(deduce_numeric_type(c.values.map((v) => v.value) as number[]));
30
- else if (c.type === "string") set.add("string");
43
+ if (c.type === "boolean")
44
+ map.set("bool", getSequence(c.values[0]?.tags[0] ?? []));
45
+ else if (c.type === "bigint") {
46
+ const init: ProtobufAtomic.BigNumeric = deduce_bigint_type(
47
+ c.values.map((v) => BigInt(v.value)),
48
+ );
49
+ for (const value of c.values)
50
+ decode_bigint({
51
+ map,
52
+ tags: value.tags,
53
+ default: init,
54
+ });
55
+ } else if (c.type === "number") {
56
+ const init: ProtobufAtomic.Numeric = deduce_numeric_type(
57
+ c.values.map((v) => v.value) as number[],
58
+ );
59
+ for (const value of c.values)
60
+ decode_number({
61
+ map,
62
+ tags: value.tags,
63
+ default: init,
64
+ });
65
+ } else if (c.type === "string")
66
+ map.set("string", getSequence(c.values[0]?.tags[0] ?? []));
67
+ if (meta.templates.length)
68
+ map.set("string", getSequence(meta.templates[0]?.tags[0] ?? []));
69
+
70
+ // ATOMICS
31
71
  for (const atomic of meta.atomics)
32
- if (atomic.type === "boolean") set.add("bool");
72
+ if (atomic.type === "boolean")
73
+ map.set("bool", getSequence(atomic.tags[0] ?? []));
33
74
  else if (atomic.type === "bigint")
34
- decode_bigint(atomic.tags).forEach((t) => set.add(t));
75
+ decode_bigint({
76
+ map,
77
+ tags: atomic.tags,
78
+ default: "int64",
79
+ });
35
80
  else if (atomic.type === "number")
36
- decode_number(atomic.tags).forEach((t) => set.add(t));
37
- else if (atomic.type === "string") set.add("string");
81
+ decode_number({
82
+ map,
83
+ tags: atomic.tags,
84
+ default: "double",
85
+ });
86
+ else if (atomic.type === "string")
87
+ map.set("string", getSequence(atomic.tags[0] ?? []));
38
88
 
39
- return [...set].sort(compare);
89
+ // SORTING IF REQUIRED
90
+ if (Array.from(map.values()).some((v) => v === null)) arrange(map);
91
+ return map;
40
92
  };
41
93
 
42
- export const getNumbers = (meta: Metadata): ProtobufAtomic.Numeric[] => {
43
- const set: Set<ProtobufAtomic.Numeric> = new Set();
94
+ export const getNumbers = (
95
+ meta: Metadata,
96
+ union?: Map<string, number | null>,
97
+ ): Map<string, number | null> => {
98
+ const map: Map<ProtobufAtomic.Numeric, number | null> = union ?? new Map();
44
99
  for (const c of meta.constants)
45
- if (c.type === "number")
46
- set.add(deduce_numeric_type(c.values.map((v) => v.value) as number[]));
100
+ if (c.type === "number") {
101
+ const init: ProtobufAtomic.Numeric = deduce_numeric_type(
102
+ c.values.map((v) => v.value) as number[],
103
+ );
104
+ for (const value of c.values)
105
+ decode_number({
106
+ map,
107
+ tags: value.tags,
108
+ default: init,
109
+ });
110
+ }
47
111
  for (const atomic of meta.atomics)
48
112
  if (atomic.type === "number")
49
- decode_number(atomic.tags).forEach((t) => set.add(t));
50
- return [...set].sort(compare);
113
+ decode_number({
114
+ map,
115
+ tags: atomic.tags,
116
+ default: "double",
117
+ });
118
+ if (Array.from(map.values()).some((v) => v === null)) arrange(map);
119
+ return map;
51
120
  };
52
121
 
53
- export const getBigints = (meta: Metadata): ProtobufAtomic.BigNumeric[] => {
54
- const set: Set<ProtobufAtomic.BigNumeric> = new Set();
55
- for (const c of meta.constants) if (c.type === "bigint") set.add("uint64");
122
+ export const getBigints = (
123
+ meta: Metadata,
124
+ union?: Map<string, number | null>,
125
+ ): Map<string, number | null> => {
126
+ const map: Map<ProtobufAtomic.BigNumeric, number | null> =
127
+ union ?? new Map();
128
+ for (const c of meta.constants)
129
+ if (c.type === "bigint") {
130
+ const init: ProtobufAtomic.BigNumeric = deduce_bigint_type(
131
+ c.values.map((v) => BigInt(v.value)),
132
+ );
133
+ for (const value of c.values)
134
+ decode_bigint({
135
+ map,
136
+ tags: value.tags,
137
+ default: init,
138
+ });
139
+ }
56
140
  for (const atomic of meta.atomics)
57
141
  if (atomic.type === "bigint")
58
- decode_bigint(atomic.tags).forEach((t) => set.add(t));
59
- return [...set].sort(compare);
142
+ decode_bigint({
143
+ map,
144
+ tags: atomic.tags,
145
+ default: "int64",
146
+ });
147
+ if (Array.from(map.values()).some((v) => v === null)) arrange(map);
148
+ return map;
149
+ };
150
+
151
+ const arrange = (map: Map<ProtobufAtomic, number | null>): void => {
152
+ const entries = Array.from(map.entries()).sort((a, b) =>
153
+ compare(a[0], b[0]),
154
+ );
155
+ map.clear();
156
+ for (const [key, value] of entries) map.set(key, value);
60
157
  };
61
158
 
62
159
  const compare = (x: ProtobufAtomic, y: ProtobufAtomic): number =>
@@ -78,6 +175,8 @@ const ATOMIC_ORDER = new Map<ProtobufAtomic, number>(
78
175
  ).map((str, i) => [str, i]),
79
176
  );
80
177
 
178
+ const deduce_bigint_type = (values: bigint[]): ProtobufAtomic.BigNumeric =>
179
+ values.some((v) => v < 0) ? "int64" : "uint64";
81
180
  const deduce_numeric_type = (values: number[]): ProtobufAtomic.Numeric =>
82
181
  values.every((v) => Math.floor(v) === v)
83
182
  ? values.every((v) => -2147483648 <= v && v <= 2147483647)
@@ -85,30 +184,35 @@ const deduce_numeric_type = (values: number[]): ProtobufAtomic.Numeric =>
85
184
  : "int64"
86
185
  : "double";
87
186
 
88
- const decode_bigint = (
89
- typeTags: IMetadataTypeTag[][],
90
- ): ProtobufAtomic.BigNumeric[] => {
91
- if (typeTags.length === 0) return ["int64"];
92
-
93
- const types: Set<ProtobufAtomic.BigNumeric> = new Set();
94
- for (const row of typeTags) {
187
+ const decode_bigint = (next: {
188
+ map: Map<ProtobufAtomic, number | null>;
189
+ tags: IMetadataTypeTag[][];
190
+ default: ProtobufAtomic.BigNumeric;
191
+ }): void => {
192
+ if (next.tags.length === 0) {
193
+ next.map.set(next.default, null);
194
+ return;
195
+ }
196
+ for (const row of next.tags) {
95
197
  const value: ProtobufAtomic.BigNumeric | undefined = row.find(
96
198
  (tag) =>
97
199
  tag.kind === "type" &&
98
200
  (tag.value === "int64" || tag.value === "uint64"),
99
201
  )?.value;
100
- types.add(value ?? "int64");
202
+ next.map.set(value ?? "int64", ProtobufUtil.getSequence(row));
101
203
  }
102
- return [...types];
103
204
  };
104
205
 
105
- const decode_number = (
106
- typeTags: IMetadataTypeTag[][],
107
- ): ProtobufAtomic.Numeric[] => {
108
- if (typeTags.length === 0) return ["double"];
109
-
110
- const types: Set<ProtobufAtomic.Numeric> = new Set();
111
- for (const row of typeTags) {
206
+ const decode_number = (next: {
207
+ map: Map<ProtobufAtomic, number | null>;
208
+ tags: IMetadataTypeTag[][];
209
+ default: ProtobufAtomic.Numeric;
210
+ }): void => {
211
+ if (next.tags.length === 0) {
212
+ next.map.set(next.default, null);
213
+ return;
214
+ }
215
+ for (const row of next.tags) {
112
216
  const value: ProtobufAtomic.Numeric | undefined = row.find(
113
217
  (tag) =>
114
218
  tag.kind === "type" &&
@@ -119,7 +223,6 @@ const decode_number = (
119
223
  tag.value === "float" ||
120
224
  tag.value === "double"),
121
225
  )?.value;
122
- types.add(value ?? "double");
226
+ next.map.set(value ?? "double", ProtobufUtil.getSequence(row));
123
227
  }
124
- return [...types];
125
228
  };
@@ -6,7 +6,9 @@ import { IdentifierFactory } from "../../factories/IdentifierFactory";
6
6
  import { Metadata } from "../../schemas/metadata/Metadata";
7
7
  import { MetadataArray } from "../../schemas/metadata/MetadataArray";
8
8
  import { MetadataArrayType } from "../../schemas/metadata/MetadataArrayType";
9
+ import { MetadataMap } from "../../schemas/metadata/MetadataMap";
9
10
  import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
11
+ import { MetadataSet } from "../../schemas/metadata/MetadataSet";
10
12
  import { MetadataTuple } from "../../schemas/metadata/MetadataTuple";
11
13
  import { MetadataTupleType } from "../../schemas/metadata/MetadataTupleType";
12
14
 
@@ -236,7 +238,7 @@ export namespace UnionExplorer {
236
238
  config: set.IConfig;
237
239
  parameters: ts.ParameterDeclaration[];
238
240
  input: ts.Expression;
239
- sets: Metadata[];
241
+ sets: MetadataSet[];
240
242
  explore: FeatureProgrammer.IExplore;
241
243
  }) =>
242
244
  check_union_array_like<Metadata, MetadataArray, Metadata>({
@@ -280,7 +282,7 @@ export namespace UnionExplorer {
280
282
  },
281
283
  parameters: props.parameters,
282
284
  input: props.input,
283
- definitions: props.sets,
285
+ definitions: props.sets.map((s) => s.value),
284
286
  explore: props.explore,
285
287
  });
286
288
  export namespace set {
@@ -294,74 +296,72 @@ export namespace UnionExplorer {
294
296
  config: map.IConfig;
295
297
  parameters: ts.ParameterDeclaration[];
296
298
  input: ts.Expression;
297
- maps: Metadata.Entry[];
299
+ maps: MetadataMap[];
298
300
  explore: FeatureProgrammer.IExplore;
299
301
  }) =>
300
- check_union_array_like<Metadata.Entry, MetadataArray, [Metadata, Metadata]>(
301
- {
302
- config: props.config,
303
- accessor: {
304
- element: (array) =>
305
- array.type.value.tuples[0]!.type.elements as [Metadata, Metadata],
306
- size: (input) => IdentifierFactory.access(input, "size"),
307
- front: (input) =>
308
- IdentifierFactory.access(
309
- ts.factory.createCallExpression(
310
- IdentifierFactory.access(
311
- ts.factory.createCallExpression(
312
- IdentifierFactory.access(input, "entries"),
313
- undefined,
314
- undefined,
315
- ),
316
- "next",
302
+ check_union_array_like<MetadataMap, MetadataArray, [Metadata, Metadata]>({
303
+ config: props.config,
304
+ accessor: {
305
+ element: (array) =>
306
+ array.type.value.tuples[0]!.type.elements as [Metadata, Metadata],
307
+ size: (input) => IdentifierFactory.access(input, "size"),
308
+ front: (input) =>
309
+ IdentifierFactory.access(
310
+ ts.factory.createCallExpression(
311
+ IdentifierFactory.access(
312
+ ts.factory.createCallExpression(
313
+ IdentifierFactory.access(input, "entries"),
314
+ undefined,
315
+ undefined,
317
316
  ),
318
- undefined,
319
- undefined,
317
+ "next",
320
318
  ),
321
- "value",
322
- ),
323
- array: (input) =>
324
- ts.factory.createArrayLiteralExpression(
325
- [ts.factory.createSpreadElement(input)],
326
- false,
319
+ undefined,
320
+ undefined,
327
321
  ),
328
- name: (_m, [k, v]) => `Map<${k.getName()}, ${v.getName()}>`,
329
- transform: (m: Metadata.Entry) =>
330
- MetadataArray.create({
331
- tags: [],
332
- type: MetadataArrayType.create({
333
- name: `Map<${m.key.getName()}, ${m.value.getName()}>`,
334
- index: null,
335
- recursive: false,
336
- nullables: [],
337
- value: Metadata.create({
338
- ...Metadata.initialize(),
339
- tuples: [
340
- (() => {
341
- const tuple = MetadataTuple.create({
342
- tags: [],
343
- type: MetadataTupleType.create({
344
- name: `[${m.key.getName()}, ${m.value.getName()}]`,
345
- index: null,
346
- recursive: false,
347
- nullables: [],
348
- elements: [m.key, m.value],
349
- }),
350
- });
351
- tuple.type.of_map = true;
352
- return tuple;
353
- })(),
354
- ],
355
- }),
322
+ "value",
323
+ ),
324
+ array: (input) =>
325
+ ts.factory.createArrayLiteralExpression(
326
+ [ts.factory.createSpreadElement(input)],
327
+ false,
328
+ ),
329
+ name: (_m, [k, v]) => `Map<${k.getName()}, ${v.getName()}>`,
330
+ transform: (m: MetadataMap) =>
331
+ MetadataArray.create({
332
+ tags: [],
333
+ type: MetadataArrayType.create({
334
+ name: `Map<${m.key.getName()}, ${m.value.getName()}>`,
335
+ index: null,
336
+ recursive: false,
337
+ nullables: [],
338
+ value: Metadata.create({
339
+ ...Metadata.initialize(),
340
+ tuples: [
341
+ (() => {
342
+ const tuple = MetadataTuple.create({
343
+ tags: [],
344
+ type: MetadataTupleType.create({
345
+ name: `[${m.key.getName()}, ${m.value.getName()}]`,
346
+ index: null,
347
+ recursive: false,
348
+ nullables: [],
349
+ elements: [m.key, m.value],
350
+ }),
351
+ });
352
+ tuple.type.of_map = true;
353
+ return tuple;
354
+ })(),
355
+ ],
356
356
  }),
357
357
  }),
358
- },
359
- parameters: props.parameters,
360
- input: props.input,
361
- definitions: props.maps,
362
- explore: props.explore,
358
+ }),
363
359
  },
364
- );
360
+ parameters: props.parameters,
361
+ input: props.input,
362
+ definitions: props.maps,
363
+ explore: props.explore,
364
+ });
365
365
 
366
366
  export namespace map {
367
367
  export type IConfig = check_union_array_like.IConfig<
@@ -129,7 +129,9 @@ export namespace HttpFormDataProgrammer {
129
129
  meta.atomics.length +
130
130
  meta.templates.length +
131
131
  meta.constants.map((c) => c.values.length).reduce((a, b) => a + b, 0) +
132
- meta.natives.filter((n) => n === "Blob" || n === "File").length;
132
+ meta.natives.filter(
133
+ (native) => native.name === "Blob" || native.name === "File",
134
+ ).length;
133
135
  if (atomics.size > 1) insert("union type is not allowed in array.");
134
136
  if (meta.size() !== expected)
135
137
  insert(
@@ -151,7 +153,9 @@ export namespace HttpFormDataProgrammer {
151
153
  meta.objects.length ||
152
154
  meta.sets.length ||
153
155
  meta.maps.length ||
154
- meta.natives.filter((n) => n !== "Blob" && n !== "File").length
156
+ meta.natives.filter(
157
+ (native) => native.name !== "Blob" && native.name !== "File",
158
+ ).length
155
159
  )
156
160
  insert("nested object type is not allowed.");
157
161
  }
@@ -198,9 +202,9 @@ export namespace HttpFormDataProgrammer {
198
202
  ? [value.constants[0]!.type, false]
199
203
  : value.templates.length
200
204
  ? ["string", false]
201
- : value.natives.includes("Blob")
205
+ : value.natives.some((native) => native.name === "Blob")
202
206
  ? ["blob", false]
203
- : value.natives.includes("File")
207
+ : value.natives.some((native) => native.name === "File")
204
208
  ? ["file", false]
205
209
  : (() => {
206
210
  const meta =
@@ -210,9 +214,9 @@ export namespace HttpFormDataProgrammer {
210
214
  ? [meta.atomics[0]!.type, true]
211
215
  : meta.templates.length
212
216
  ? ["string", true]
213
- : meta.natives.includes("Blob")
217
+ : meta.natives.some((native) => native.name === "Blob")
214
218
  ? ["blob", true]
215
- : meta.natives.includes("File")
219
+ : meta.natives.some((native) => native.name === "File")
216
220
  ? ["file", true]
217
221
  : [meta.constants[0]!.type, true];
218
222
  })();