typia 7.0.0-dev.20241012 → 7.0.0-dev.20241019

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 (256) 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 +1266 -160
  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 +6 -3
  47. package/lib/programmers/helpers/ProtobufUtil.js +216 -93
  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 +169 -220
  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.d.ts +1 -1
  99. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +53 -128
  100. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  101. package/lib/schemas/metadata/IMetadata.d.ts +14 -18
  102. package/lib/schemas/metadata/IMetadataAlias.d.ts +2 -7
  103. package/lib/schemas/metadata/IMetadataAliasType.d.ts +10 -0
  104. package/lib/schemas/metadata/IMetadataAliasType.js +3 -0
  105. package/lib/schemas/metadata/IMetadataAliasType.js.map +1 -0
  106. package/lib/schemas/metadata/IMetadataComponents.d.ts +2 -2
  107. package/lib/schemas/metadata/IMetadataConstantValue.d.ts +1 -1
  108. package/lib/schemas/metadata/IMetadataDictionary.d.ts +2 -2
  109. package/lib/schemas/metadata/IMetadataMap.d.ts +7 -0
  110. package/lib/schemas/metadata/{IMetadataEntry.js → IMetadataMap.js} +1 -1
  111. package/lib/schemas/metadata/IMetadataMap.js.map +1 -0
  112. package/lib/schemas/metadata/IMetadataNative.d.ts +5 -0
  113. package/lib/schemas/metadata/IMetadataNative.js +3 -0
  114. package/lib/schemas/metadata/IMetadataNative.js.map +1 -0
  115. package/lib/schemas/metadata/IMetadataSet.d.ts +6 -0
  116. package/lib/schemas/metadata/IMetadataSet.js +3 -0
  117. package/lib/schemas/metadata/IMetadataSet.js.map +1 -0
  118. package/lib/schemas/metadata/IMetadataTemplate.d.ts +1 -1
  119. package/lib/schemas/metadata/IMetadataTypeTag.d.ts +1 -1
  120. package/lib/schemas/metadata/Metadata.d.ts +6 -9
  121. package/lib/schemas/metadata/Metadata.js +136 -98
  122. package/lib/schemas/metadata/Metadata.js.map +1 -1
  123. package/lib/schemas/metadata/MetadataAlias.d.ts +8 -11
  124. package/lib/schemas/metadata/MetadataAlias.js +48 -33
  125. package/lib/schemas/metadata/MetadataAlias.js.map +1 -1
  126. package/lib/schemas/metadata/MetadataAliasType.d.ts +16 -0
  127. package/lib/schemas/metadata/MetadataAliasType.js +51 -0
  128. package/lib/schemas/metadata/MetadataAliasType.js.map +1 -0
  129. package/lib/schemas/metadata/MetadataComponents.d.ts +2 -2
  130. package/lib/schemas/metadata/MetadataComponents.js +2 -2
  131. package/lib/schemas/metadata/MetadataComponents.js.map +1 -1
  132. package/lib/schemas/metadata/MetadataConstantValue.d.ts +1 -1
  133. package/lib/schemas/metadata/MetadataMap.d.ts +14 -0
  134. package/lib/schemas/metadata/MetadataMap.js +66 -0
  135. package/lib/schemas/metadata/MetadataMap.js.map +1 -0
  136. package/lib/schemas/metadata/MetadataNative.d.ts +12 -0
  137. package/lib/schemas/metadata/MetadataNative.js +65 -0
  138. package/lib/schemas/metadata/MetadataNative.js.map +1 -0
  139. package/lib/schemas/metadata/MetadataProperty.d.ts +2 -0
  140. package/lib/schemas/metadata/MetadataProperty.js.map +1 -1
  141. package/lib/schemas/metadata/MetadataSet.d.ts +13 -0
  142. package/lib/schemas/metadata/MetadataSet.js +64 -0
  143. package/lib/schemas/metadata/MetadataSet.js.map +1 -0
  144. package/lib/schemas/metadata/MetadataTemplate.d.ts +1 -1
  145. package/lib/schemas/protobuf/IProtobufProperty.d.ts +5 -0
  146. package/lib/schemas/protobuf/IProtobufProperty.js +3 -0
  147. package/lib/schemas/protobuf/IProtobufProperty.js.map +1 -0
  148. package/lib/schemas/protobuf/IProtobufPropertyType.d.ts +28 -0
  149. package/lib/schemas/protobuf/IProtobufPropertyType.js +3 -0
  150. package/lib/schemas/protobuf/IProtobufPropertyType.js.map +1 -0
  151. package/lib/schemas/protobuf/IProtobufSchema.d.ts +38 -0
  152. package/lib/schemas/protobuf/IProtobufSchema.js +3 -0
  153. package/lib/schemas/protobuf/IProtobufSchema.js.map +1 -0
  154. package/lib/tags/Example.d.ts +2 -2
  155. package/lib/tags/Examples.d.ts +2 -2
  156. package/lib/tags/JsonSchemaPlugin.d.ts +1 -1
  157. package/lib/tags/Sequence.d.ts +9 -0
  158. package/lib/tags/Sequence.js +3 -0
  159. package/lib/tags/Sequence.js.map +1 -0
  160. package/lib/tags/TagBase.d.ts +1 -1
  161. package/lib/tags/index.d.ts +1 -0
  162. package/lib/tags/index.js +1 -0
  163. package/lib/tags/index.js.map +1 -1
  164. package/lib/utils/{NameEncoder.d.ts → ProtobufNameEncoder.d.ts} +1 -1
  165. package/lib/utils/{NameEncoder.js → ProtobufNameEncoder.js} +7 -7
  166. package/lib/utils/ProtobufNameEncoder.js.map +1 -0
  167. package/package.json +1 -1
  168. package/src/factories/JsonMetadataFactory.ts +5 -2
  169. package/src/factories/MetadataCollection.ts +6 -6
  170. package/src/factories/MetadataFactory.ts +7 -7
  171. package/src/factories/MetadataTypeTagFactory.ts +31 -6
  172. package/src/factories/ProtobufFactory.ts +794 -177
  173. package/src/factories/internal/metadata/IMetadataIteratorProps.ts +1 -0
  174. package/src/factories/internal/metadata/MetadataHelper.ts +1 -1
  175. package/src/factories/internal/metadata/emplace_metadata_alias.ts +2 -2
  176. package/src/factories/internal/metadata/emplace_metadata_object.ts +5 -5
  177. package/src/factories/internal/metadata/explore_metadata.ts +1 -0
  178. package/src/factories/internal/metadata/iterate_metadata.ts +1 -1
  179. package/src/factories/internal/metadata/iterate_metadata_alias.ts +9 -4
  180. package/src/factories/internal/metadata/iterate_metadata_collection.ts +6 -6
  181. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +163 -181
  182. package/src/factories/internal/metadata/iterate_metadata_map.ts +5 -2
  183. package/src/factories/internal/metadata/iterate_metadata_native.ts +20 -2
  184. package/src/factories/internal/metadata/iterate_metadata_set.ts +27 -11
  185. package/src/factories/internal/metadata/iterate_metadata_sort.ts +1 -1
  186. package/src/factories/internal/metadata/iterate_metadata_template.ts +1 -3
  187. package/src/programmers/CheckerProgrammer.ts +9 -7
  188. package/src/programmers/RandomProgrammer.ts +16 -14
  189. package/src/programmers/helpers/AtomicPredicator.ts +3 -3
  190. package/src/programmers/helpers/ProtobufUtil.ts +147 -44
  191. package/src/programmers/helpers/UnionExplorer.ts +62 -62
  192. package/src/programmers/http/HttpFormDataProgrammer.ts +10 -6
  193. package/src/programmers/internal/application_escaped.ts +2 -2
  194. package/src/programmers/internal/application_v30_alias.ts +18 -12
  195. package/src/programmers/internal/application_v30_native.ts +22 -12
  196. package/src/programmers/internal/application_v30_object.ts +23 -8
  197. package/src/programmers/internal/application_v30_schema.ts +31 -34
  198. package/src/programmers/internal/application_v31_alias.ts +16 -13
  199. package/src/programmers/internal/application_v31_native.ts +22 -12
  200. package/src/programmers/internal/application_v31_object.ts +19 -8
  201. package/src/programmers/internal/application_v31_schema.ts +26 -29
  202. package/src/programmers/internal/check_dynamic_key.ts +4 -4
  203. package/src/programmers/internal/check_native.ts +4 -4
  204. package/src/programmers/internal/check_union_array_like.ts +2 -1
  205. package/src/programmers/internal/llm_schema_escaped.ts +2 -2
  206. package/src/programmers/internal/llm_schema_object.ts +21 -18
  207. package/src/programmers/internal/llm_schema_station.ts +9 -11
  208. package/src/programmers/json/JsonSchemasProgrammer.ts +5 -5
  209. package/src/programmers/json/JsonStringifyProgrammer.ts +5 -5
  210. package/src/programmers/llm/LlmSchemaProgrammer.ts +6 -6
  211. package/src/programmers/misc/MiscCloneProgrammer.ts +11 -7
  212. package/src/programmers/misc/MiscPruneProgrammer.ts +1 -1
  213. package/src/programmers/notations/NotationGeneralProgrammer.ts +10 -6
  214. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +254 -308
  215. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +11 -8
  216. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +73 -95
  217. package/src/schemas/metadata/IMetadata.ts +35 -39
  218. package/src/schemas/metadata/IMetadataAlias.ts +6 -12
  219. package/src/schemas/metadata/IMetadataAliasType.ts +12 -0
  220. package/src/schemas/metadata/IMetadataArray.ts +6 -6
  221. package/src/schemas/metadata/IMetadataComponents.ts +11 -11
  222. package/src/schemas/metadata/IMetadataConstantValue.ts +1 -1
  223. package/src/schemas/metadata/IMetadataDictionary.ts +2 -2
  224. package/src/schemas/metadata/IMetadataMap.ts +8 -0
  225. package/src/schemas/metadata/IMetadataNative.ts +6 -0
  226. package/src/schemas/metadata/IMetadataObjectType.ts +13 -13
  227. package/src/schemas/metadata/IMetadataSet.ts +7 -0
  228. package/src/schemas/metadata/IMetadataTemplate.ts +7 -7
  229. package/src/schemas/metadata/IMetadataTuple.ts +6 -6
  230. package/src/schemas/metadata/IMetadataTypeTag.ts +16 -16
  231. package/src/schemas/metadata/Metadata.ts +100 -47
  232. package/src/schemas/metadata/MetadataAlias.ts +46 -61
  233. package/src/schemas/metadata/MetadataAliasType.ts +63 -0
  234. package/src/schemas/metadata/MetadataArray.ts +49 -49
  235. package/src/schemas/metadata/MetadataComponents.ts +3 -3
  236. package/src/schemas/metadata/MetadataConstantValue.ts +1 -1
  237. package/src/schemas/metadata/MetadataMap.ts +48 -0
  238. package/src/schemas/metadata/MetadataNative.ts +44 -0
  239. package/src/schemas/metadata/MetadataProperty.ts +3 -0
  240. package/src/schemas/metadata/MetadataSet.ts +45 -0
  241. package/src/schemas/metadata/MetadataTemplate.ts +80 -80
  242. package/src/schemas/metadata/MetadataTuple.ts +32 -32
  243. package/src/schemas/protobuf/IProtobufProperty.ts +6 -0
  244. package/src/schemas/protobuf/IProtobufPropertyType.ts +37 -0
  245. package/src/schemas/protobuf/IProtobufSchema.ts +50 -0
  246. package/src/tags/Example.ts +24 -17
  247. package/src/tags/Examples.ts +16 -16
  248. package/src/tags/JsonSchemaPlugin.ts +8 -8
  249. package/src/tags/Sequence.ts +10 -0
  250. package/src/tags/TagBase.ts +82 -76
  251. package/src/tags/index.ts +1 -0
  252. package/src/utils/{NameEncoder.ts → ProtobufNameEncoder.ts} +1 -1
  253. package/lib/schemas/metadata/IMetadataEntry.d.ts +0 -5
  254. package/lib/schemas/metadata/IMetadataEntry.js.map +0 -1
  255. package/lib/utils/NameEncoder.js.map +0 -1
  256. package/src/schemas/metadata/IMetadataEntry.ts +0 -6
@@ -11,6 +11,7 @@ import { TypeFactory } from "../../factories/TypeFactory";
11
11
  import { Metadata } from "../../schemas/metadata/Metadata";
12
12
  import { MetadataArray } from "../../schemas/metadata/MetadataArray";
13
13
  import { MetadataAtomic } from "../../schemas/metadata/MetadataAtomic";
14
+ import { MetadataMap } from "../../schemas/metadata/MetadataMap";
14
15
  import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
15
16
  import { MetadataProperty } from "../../schemas/metadata/MetadataProperty";
16
17
 
@@ -306,11 +307,12 @@ export namespace ProtobufEncodeProgrammer {
306
307
  );
307
308
 
308
309
  // STARTS FROM ATOMIC TYPES
310
+ // @todo
309
311
  const unions: IUnion[] = [];
310
- const numbers = ProtobufUtil.getNumbers(props.metadata);
311
- const bigints = ProtobufUtil.getBigints(props.metadata);
312
+ const numbers = Array.from(ProtobufUtil.getNumbers(props.metadata).keys());
313
+ const bigints = Array.from(ProtobufUtil.getBigints(props.metadata).keys());
312
314
 
313
- for (const atom of ProtobufUtil.getAtomics(props.metadata))
315
+ for (const [atom] of ProtobufUtil.getAtomics(props.metadata))
314
316
  if (atom === "bool")
315
317
  unions.push({
316
318
  type: "bool",
@@ -333,7 +335,7 @@ export namespace ProtobufEncodeProgrammer {
333
335
  )
334
336
  unions.push(
335
337
  decode_number({
336
- candidates: numbers,
338
+ candidates: numbers as ProtobufAtomic.Numeric[],
337
339
  type: atom,
338
340
  input: props.input,
339
341
  }),
@@ -342,7 +344,7 @@ export namespace ProtobufEncodeProgrammer {
342
344
  if (numbers.some((n) => n === atom))
343
345
  unions.push(
344
346
  decode_number({
345
- candidates: numbers,
347
+ candidates: numbers as ProtobufAtomic.Numeric[],
346
348
  type: atom,
347
349
  input: props.input,
348
350
  }),
@@ -350,7 +352,7 @@ export namespace ProtobufEncodeProgrammer {
350
352
  else
351
353
  unions.push(
352
354
  decode_bigint({
353
- candidates: bigints,
355
+ candidates: bigints as ProtobufAtomic.BigNumeric[],
354
356
  type: atom,
355
357
  input: props.input,
356
358
  }),
@@ -489,7 +491,7 @@ export namespace ProtobufEncodeProgrammer {
489
491
  functor: FunctionProgrammer;
490
492
  index: number;
491
493
  input: ts.Expression;
492
- entry: Metadata.Entry;
494
+ entry: MetadataMap | MetadataProperty;
493
495
  explore: FeatureProgrammer.IExplore;
494
496
  }): ts.Block => {
495
497
  const each: ts.Statement[] = [
@@ -822,7 +824,8 @@ export namespace ProtobufEncodeProgrammer {
822
824
  )
823
825
  return ProtobufWire.LEN;
824
826
 
825
- const v = ProtobufUtil.getAtomics(metadata)[0]!;
827
+ // @todo
828
+ const v = ProtobufUtil.getAtomics(metadata).keys().next().value!;
826
829
  if (v === "string") return ProtobufWire.LEN;
827
830
  else if (
828
831
  v === "bool" ||
@@ -1,19 +1,19 @@
1
1
  import ts from "typescript";
2
2
 
3
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
3
4
  import { MetadataCollection } from "../../factories/MetadataCollection";
4
5
  import { ProtobufFactory } from "../../factories/ProtobufFactory";
5
6
 
6
7
  import { Metadata } from "../../schemas/metadata/Metadata";
7
- import { MetadataAtomic } from "../../schemas/metadata/MetadataAtomic";
8
8
  import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
9
- import { MetadataProperty } from "../../schemas/metadata/MetadataProperty";
9
+ import { IProtobufProperty } from "../../schemas/protobuf/IProtobufProperty";
10
+ import { IProtobufPropertyType } from "../../schemas/protobuf/IProtobufPropertyType";
11
+ import { IProtobufSchema } from "../../schemas/protobuf/IProtobufSchema";
10
12
 
11
13
  import { ITypiaContext } from "../../transformers/ITypiaContext";
12
14
 
13
15
  import { MapUtil } from "../../utils/MapUtil";
14
- import { NameEncoder } from "../../utils/NameEncoder";
15
-
16
- import { ProtobufUtil } from "../helpers/ProtobufUtil";
16
+ import { ProtobufNameEncoder } from "../../utils/ProtobufNameEncoder";
17
17
 
18
18
  export namespace ProtobufMessageProgrammer {
19
19
  export interface IProps {
@@ -47,7 +47,17 @@ export namespace ProtobufMessageProgrammer {
47
47
  .join("\n\n");
48
48
 
49
49
  // RETURNS
50
- return ts.factory.createStringLiteral(content);
50
+ return ts.factory.createCallExpression(
51
+ IdentifierFactory.access(
52
+ ts.factory.createArrayLiteralExpression(
53
+ content.split("\n").map((str) => ts.factory.createStringLiteral(str)),
54
+ true,
55
+ ),
56
+ "join",
57
+ ),
58
+ undefined,
59
+ [ts.factory.createStringLiteral("\n")],
60
+ );
51
61
  };
52
62
 
53
63
  const emplace = (props: {
@@ -73,11 +83,11 @@ export namespace ProtobufMessageProgrammer {
73
83
 
74
84
  const write_hierarchy = (hierarchy: Hierarchy): string => {
75
85
  const elements: string[] = [
76
- `message ${NameEncoder.encode(hierarchy.key)} {`,
86
+ `message ${ProtobufNameEncoder.encode(hierarchy.key)} {`,
77
87
  ];
78
88
  if (hierarchy.object !== null) {
79
89
  const text: string = write_object(hierarchy.object);
80
- elements.push(...text.split("\n").map((str) => `${TAB}${str}`));
90
+ elements.push(...text.split("\n").map((str) => ` ${str}`));
81
91
  }
82
92
  if (hierarchy.children.size)
83
93
  elements.push(
@@ -86,7 +96,7 @@ export namespace ProtobufMessageProgrammer {
86
96
  .map((body) =>
87
97
  body
88
98
  .split("\n")
89
- .map((line) => `${TAB}${line}`)
99
+ .map((line) => ` ${line}`)
90
100
  .join("\n"),
91
101
  )
92
102
  .join("\n\n"),
@@ -95,97 +105,71 @@ export namespace ProtobufMessageProgrammer {
95
105
  return elements.join("\n");
96
106
  };
97
107
 
98
- const write_object = (object: MetadataObjectType): string => {
99
- const sequence: IPointer<number> = { value: 0 };
100
- return object.properties
108
+ const write_object = (obj: MetadataObjectType): string => {
109
+ return obj.properties
101
110
  .map((p) => {
111
+ if (p.of_protobuf_ === undefined) ProtobufFactory.emplaceObject(obj);
112
+ const schema: IProtobufProperty = p.of_protobuf_!;
102
113
  const key: string = p.key.getSoleLiteral()!;
103
- const type: string = decode({
104
- sequence,
105
- metadata: p.value,
114
+ return decodeProperty({
115
+ key,
116
+ value: p.value,
117
+ union: schema.union,
106
118
  });
107
- return type.indexOf("${name}") !== -1
108
- ? type.replace("${name}", key)
109
- : `${
110
- p.value.arrays.length || type.startsWith("map<")
111
- ? ""
112
- : !p.value.isRequired() || p.value.nullable
113
- ? "optional "
114
- : "required "
115
- }${type} ${key} = ${++sequence.value};`;
116
119
  })
117
120
  .join("\n");
118
121
  };
119
122
 
120
123
  /* -----------------------------------------------------------
121
- DECODERS
122
- ----------------------------------------------------------- */
123
- const decode = (props: {
124
- sequence: IPointer<number>;
125
- metadata: Metadata;
124
+ DECODERS
125
+ ----------------------------------------------------------- */
126
+ const decodeProperty = (props: {
127
+ key: string;
128
+ value: Metadata;
129
+ union: IProtobufPropertyType[];
126
130
  }): string => {
127
- const elements: Set<string> = new Set();
128
- if (props.metadata.natives.length) elements.add("bytes");
129
- for (const atomic of ProtobufUtil.getAtomics(props.metadata))
130
- elements.add(atomic);
131
- for (const array of props.metadata.arrays)
132
- elements.add(
133
- `repeated ${decode({
134
- sequence: props.sequence,
135
- metadata: array.type.value,
136
- })}`,
137
- );
138
- for (const obj of props.metadata.objects)
139
- elements.add(
140
- is_dynamic_object(obj.type)
141
- ? decode_map({
142
- sequence: props.sequence,
143
- entry: MetadataProperty.create({
144
- ...obj.type.properties[0]!,
145
- key: (() => {
146
- const key: Metadata = Metadata.initialize();
147
- key.atomics.push(
148
- MetadataAtomic.create({
149
- type: "string",
150
- tags: [],
151
- }),
152
- );
153
- return key;
154
- })(),
155
- }),
156
- })
157
- : NameEncoder.encode(obj.type.name),
158
- );
159
- for (const entry of props.metadata.maps)
160
- elements.add(
161
- decode_map({
162
- sequence: props.sequence,
163
- entry,
164
- }),
165
- );
166
- return elements.size === 1
167
- ? [...elements][0]!
168
- : [
169
- "oneof ${name} {",
170
- ...[...elements].map((str) => {
171
- const index: number = ++props.sequence.value;
172
- return `${TAB}${str} v${index} = ${index};`;
173
- }),
174
- "}",
175
- ].join("\n");
131
+ if (props.union.length === 1) {
132
+ const top = props.union[0]!;
133
+ return [
134
+ ...(top.type === "array" || top.type === "map"
135
+ ? []
136
+ : [
137
+ props.value.isRequired() && props.value.nullable === false
138
+ ? "required"
139
+ : "optional",
140
+ ]),
141
+ decodeSchema(top),
142
+ props.key,
143
+ "=",
144
+ `${top.index};`,
145
+ ].join(" ");
146
+ }
147
+ return [
148
+ `oneof ${props.key} {`,
149
+ ...props.union
150
+ .map((type) => `${decodeSchema(type)} v${type.index} = ${type.index};`)
151
+ .map((str) => str.split("\n"))
152
+ .map((str) => ` ${str}`),
153
+ `}`,
154
+ ].join("\n");
176
155
  };
177
156
 
178
- const decode_map = (props: {
179
- sequence: IPointer<number>;
180
- entry: Metadata.Entry;
181
- }): string =>
182
- `map<${decode({
183
- sequence: props.sequence,
184
- metadata: props.entry.key,
185
- })}, ${decode({
186
- sequence: props.sequence,
187
- metadata: props.entry.value,
188
- })}>`;
157
+ const decodeSchema = (schema: IProtobufSchema): string => {
158
+ if (
159
+ schema.type === "bytes" ||
160
+ schema.type === "bool" ||
161
+ schema.type === "string"
162
+ )
163
+ return schema.type;
164
+ else if (schema.type === "bigint" || schema.type === "number")
165
+ return schema.name;
166
+ else if (schema.type === "array")
167
+ return `repeated ${decodeSchema(schema.value)}`;
168
+ else if (schema.type === "object")
169
+ return ProtobufNameEncoder.encode(schema.object.name);
170
+ // else if (schema.type === "map")
171
+ return `map<${decodeSchema(schema.key)}, ${decodeSchema(schema.value)}>`;
172
+ };
189
173
  }
190
174
 
191
175
  interface Hierarchy {
@@ -193,9 +177,3 @@ interface Hierarchy {
193
177
  object: MetadataObjectType | null;
194
178
  children: Map<string, Hierarchy>;
195
179
  }
196
-
197
- interface IPointer<T> {
198
- value: T;
199
- }
200
-
201
- const TAB = " ".repeat(2);
@@ -1,39 +1,35 @@
1
- import { IMetadataAtomic } from "./IMetadataAtomic";
2
- import { IMetadataConstant } from "./IMetadataConstant";
3
- import { IMetadataEntry } from "./IMetadataEntry";
4
- import { IMetadataEscaped } from "./IMetadataEscaped";
5
- import { IMetadataFunction } from "./IMetadataFunction";
6
- import { IMetadataTemplate } from "./IMetadataTemplate";
7
- import { IMetadataTypeTag } from "./IMetadataTypeTag";
8
-
9
- export interface IMetadata {
10
- any: boolean;
11
- required: boolean;
12
- optional: boolean;
13
- nullable: boolean;
14
- functions: IMetadataFunction[];
15
-
16
- atomics: IMetadataAtomic[];
17
- constants: IMetadataConstant[];
18
- templates: IMetadataTemplate[];
19
- escaped: IMetadataEscaped | null;
20
-
21
- rest: IMetadata | null;
22
- arrays: {
23
- name: string;
24
- tags: IMetadataTypeTag[][];
25
- }[];
26
- tuples: {
27
- name: string;
28
- tags: IMetadataTypeTag[][];
29
- }[];
30
- objects: {
31
- name: string;
32
- tags: IMetadataTypeTag[][];
33
- }[];
34
- aliases: string[];
35
-
36
- natives: string[];
37
- sets: IMetadata[];
38
- maps: IMetadataEntry[];
39
- }
1
+ import { IMetadataAlias } from "./IMetadataAlias";
2
+ import { IMetadataArray } from "./IMetadataArray";
3
+ import { IMetadataAtomic } from "./IMetadataAtomic";
4
+ import { IMetadataConstant } from "./IMetadataConstant";
5
+ import { IMetadataEscaped } from "./IMetadataEscaped";
6
+ import { IMetadataFunction } from "./IMetadataFunction";
7
+ import { IMetadataMap } from "./IMetadataMap";
8
+ import { IMetadataNative } from "./IMetadataNative";
9
+ import { IMetadataObject } from "./IMetadataObject";
10
+ import { IMetadataSet } from "./IMetadataSet";
11
+ import { IMetadataTemplate } from "./IMetadataTemplate";
12
+ import { IMetadataTuple } from "./IMetadataTuple";
13
+
14
+ export interface IMetadata {
15
+ any: boolean;
16
+ required: boolean;
17
+ optional: boolean;
18
+ nullable: boolean;
19
+ functions: IMetadataFunction[];
20
+
21
+ atomics: IMetadataAtomic[];
22
+ constants: IMetadataConstant[];
23
+ templates: IMetadataTemplate[];
24
+ escaped: IMetadataEscaped | null;
25
+
26
+ rest: IMetadata | null;
27
+ arrays: IMetadataArray[];
28
+ tuples: IMetadataTuple[];
29
+ objects: IMetadataObject[];
30
+ aliases: IMetadataAlias[];
31
+
32
+ natives: IMetadataNative[];
33
+ sets: IMetadataSet[];
34
+ maps: IMetadataMap[];
35
+ }
@@ -1,12 +1,6 @@
1
- import { IJsDocTagInfo } from "./IJsDocTagInfo";
2
- import { IMetadata } from "./IMetadata";
3
-
4
- export interface IMetadataAlias {
5
- name: string;
6
- value: IMetadata;
7
- nullables: boolean[];
8
-
9
- description: string | null;
10
- jsDocTags: IJsDocTagInfo[];
11
- recursive: boolean;
12
- }
1
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
2
+
3
+ export interface IMetadataAlias {
4
+ name: string;
5
+ tags: IMetadataTypeTag[][];
6
+ }
@@ -0,0 +1,12 @@
1
+ import { IJsDocTagInfo } from "./IJsDocTagInfo";
2
+ import { IMetadata } from "./IMetadata";
3
+
4
+ export interface IMetadataAliasType {
5
+ name: string;
6
+ value: IMetadata;
7
+ nullables: boolean[];
8
+
9
+ description: string | null;
10
+ jsDocTags: IJsDocTagInfo[];
11
+ recursive: boolean;
12
+ }
@@ -1,6 +1,6 @@
1
- import { IMetadataTypeTag } from "./IMetadataTypeTag";
2
-
3
- export interface IMetadataArray {
4
- name: string;
5
- tags: IMetadataTypeTag[][];
6
- }
1
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
2
+
3
+ export interface IMetadataArray {
4
+ name: string;
5
+ tags: IMetadataTypeTag[][];
6
+ }
@@ -1,11 +1,11 @@
1
- import { IMetadataAlias } from "./IMetadataAlias";
2
- import { IMetadataArrayType } from "./IMetadataArrayType";
3
- import { IMetadataObjectType } from "./IMetadataObjectType";
4
- import { IMetadataTupleType } from "./IMetadataTupleType";
5
-
6
- export interface IMetadataComponents {
7
- objects: IMetadataObjectType[];
8
- aliases: IMetadataAlias[];
9
- arrays: IMetadataArrayType[];
10
- tuples: IMetadataTupleType[];
11
- }
1
+ import { IMetadataAliasType } from "./IMetadataAliasType";
2
+ import { IMetadataArrayType } from "./IMetadataArrayType";
3
+ import { IMetadataObjectType } from "./IMetadataObjectType";
4
+ import { IMetadataTupleType } from "./IMetadataTupleType";
5
+
6
+ export interface IMetadataComponents {
7
+ objects: IMetadataObjectType[];
8
+ aliases: IMetadataAliasType[];
9
+ arrays: IMetadataArrayType[];
10
+ tuples: IMetadataTupleType[];
11
+ }
@@ -5,7 +5,7 @@ import { IMetadataTypeTag } from "./IMetadataTypeTag";
5
5
 
6
6
  export interface IMetadataConstantValue<T extends Atomic.Type> {
7
7
  value: T;
8
- tags?: IMetadataTypeTag[][] | undefined;
8
+ tags: IMetadataTypeTag[][];
9
9
  description?: string | null;
10
10
  jsDocTags?: IJsDocTagInfo[];
11
11
  }
@@ -1,11 +1,11 @@
1
- import { MetadataAlias } from "./MetadataAlias";
1
+ import { MetadataAliasType } from "./MetadataAliasType";
2
2
  import { MetadataArrayType } from "./MetadataArrayType";
3
3
  import { MetadataObjectType } from "./MetadataObjectType";
4
4
  import { MetadataTupleType } from "./MetadataTupleType";
5
5
 
6
6
  export interface IMetadataDictionary {
7
7
  objects: Map<string, MetadataObjectType>;
8
- aliases: Map<string, MetadataAlias>;
8
+ aliases: Map<string, MetadataAliasType>;
9
9
  arrays: Map<string, MetadataArrayType>;
10
10
  tuples: Map<string, MetadataTupleType>;
11
11
  }
@@ -0,0 +1,8 @@
1
+ import { IMetadata } from "./IMetadata";
2
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
3
+
4
+ export interface IMetadataMap {
5
+ key: IMetadata;
6
+ value: IMetadata;
7
+ tags: IMetadataTypeTag[][];
8
+ }
@@ -0,0 +1,6 @@
1
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
2
+
3
+ export interface IMetadataNative {
4
+ name: string;
5
+ tags: IMetadataTypeTag[][];
6
+ }
@@ -1,13 +1,13 @@
1
- import { IJsDocTagInfo } from "./IJsDocTagInfo";
2
- import { IMetadataProperty } from "./IMetadataProperty";
3
-
4
- export interface IMetadataObjectType {
5
- name: string;
6
- properties: IMetadataProperty[];
7
- description?: undefined | string;
8
- jsDocTags: IJsDocTagInfo[];
9
-
10
- index: number;
11
- recursive: boolean;
12
- nullables: boolean[];
13
- }
1
+ import { IJsDocTagInfo } from "./IJsDocTagInfo";
2
+ import { IMetadataProperty } from "./IMetadataProperty";
3
+
4
+ export interface IMetadataObjectType {
5
+ name: string;
6
+ properties: IMetadataProperty[];
7
+ description?: undefined | string;
8
+ jsDocTags: IJsDocTagInfo[];
9
+
10
+ index: number;
11
+ recursive: boolean;
12
+ nullables: boolean[];
13
+ }
@@ -0,0 +1,7 @@
1
+ import { IMetadata } from "./IMetadata";
2
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
3
+
4
+ export interface IMetadataSet {
5
+ value: IMetadata;
6
+ tags: IMetadataTypeTag[][];
7
+ }
@@ -1,7 +1,7 @@
1
- import { IMetadata } from "./IMetadata";
2
- import { IMetadataTypeTag } from "./IMetadataTypeTag";
3
-
4
- export interface IMetadataTemplate {
5
- row: IMetadata[];
6
- tags?: IMetadataTypeTag[][] | undefined;
7
- }
1
+ import { IMetadata } from "./IMetadata";
2
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
3
+
4
+ export interface IMetadataTemplate {
5
+ row: IMetadata[];
6
+ tags: IMetadataTypeTag[][];
7
+ }
@@ -1,6 +1,6 @@
1
- import { IMetadataTypeTag } from "./IMetadataTypeTag";
2
-
3
- export interface IMetadataTuple {
4
- name: string;
5
- tags: IMetadataTypeTag[][];
6
- }
1
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
2
+
3
+ export interface IMetadataTuple {
4
+ name: string;
5
+ tags: IMetadataTypeTag[][];
6
+ }
@@ -1,16 +1,16 @@
1
- import type ts from "typescript";
2
-
3
- export interface IMetadataTypeTag {
4
- target: "boolean" | "bigint" | "number" | "string" | "array";
5
- name: string;
6
- kind: string;
7
- exclusive: boolean | string[];
8
- value?: any;
9
- validate?: string | undefined;
10
- schema?: object | undefined;
11
-
12
- /**
13
- * @internal
14
- */
15
- predicate?: (input: ts.Expression) => ts.Expression;
16
- }
1
+ import type ts from "typescript";
2
+
3
+ export interface IMetadataTypeTag {
4
+ target: "boolean" | "bigint" | "number" | "string" | "array" | "object";
5
+ name: string;
6
+ kind: string;
7
+ exclusive: boolean | string[];
8
+ value?: any;
9
+ validate?: string | undefined;
10
+ schema?: object | undefined;
11
+
12
+ /**
13
+ * @internal
14
+ */
15
+ predicate?: (input: ts.Expression) => ts.Expression;
16
+ }