typia 7.0.0-dev.20241011 → 7.0.0-dev.20241012

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 (250) hide show
  1. package/lib/factories/MetadataCollection.d.ts +4 -4
  2. package/lib/factories/MetadataCollection.js +6 -4
  3. package/lib/factories/MetadataCollection.js.map +1 -1
  4. package/lib/factories/MetadataFactory.d.ts +2 -2
  5. package/lib/factories/MetadataFactory.js +8 -2
  6. package/lib/factories/MetadataFactory.js.map +1 -1
  7. package/lib/factories/MetadataTypeTagFactory.d.ts +2 -2
  8. package/lib/factories/MetadataTypeTagFactory.js +6 -6
  9. package/lib/factories/MetadataTypeTagFactory.js.map +1 -1
  10. package/lib/factories/MetadataTypeTagSchemaFactory.d.ts +2 -2
  11. package/lib/factories/MetadataTypeTagSchemaFactory.js +1 -1
  12. package/lib/factories/MetadataTypeTagSchemaFactory.js.map +1 -1
  13. package/lib/factories/ProtobufFactory.js +12 -22
  14. package/lib/factories/ProtobufFactory.js.map +1 -1
  15. package/lib/factories/internal/metadata/emplace_metadata_object.d.ts +2 -2
  16. package/lib/factories/internal/metadata/iterate_metadata_collection.js +2 -1
  17. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  18. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts +2 -2
  19. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +5 -2
  20. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  21. package/lib/factories/internal/metadata/iterate_metadata_object.js +5 -1
  22. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  23. package/lib/factories/internal/metadata/iterate_metadata_sort.js +6 -2
  24. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  25. package/lib/internal/$ProtobufSizer.js +1 -8
  26. package/lib/internal/$ProtobufSizer.js.map +1 -1
  27. package/lib/json.d.ts +1 -1
  28. package/lib/module.d.ts +1 -1
  29. package/lib/module.js +1 -1
  30. package/lib/module.js.map +1 -1
  31. package/lib/programmers/CheckerProgrammer.d.ts +2 -2
  32. package/lib/programmers/CheckerProgrammer.js +5 -3
  33. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  34. package/lib/programmers/FeatureProgrammer.d.ts +5 -5
  35. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  36. package/lib/programmers/IsProgrammer.d.ts +2 -2
  37. package/lib/programmers/RandomProgrammer.js +1 -1
  38. package/lib/programmers/RandomProgrammer.js.map +1 -1
  39. package/lib/programmers/helpers/ProtobufUtil.d.ts +2 -2
  40. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  41. package/lib/programmers/helpers/PruneJoiner.d.ts +2 -2
  42. package/lib/programmers/helpers/RandomJoiner.d.ts +2 -2
  43. package/lib/programmers/helpers/UnionExplorer.d.ts +3 -3
  44. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  45. package/lib/programmers/helpers/UnionPredicator.d.ts +3 -3
  46. package/lib/programmers/helpers/UnionPredicator.js.map +1 -1
  47. package/lib/programmers/http/HttpFormDataProgrammer.js +1 -1
  48. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  49. package/lib/programmers/http/HttpHeadersProgrammer.js +1 -1
  50. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  51. package/lib/programmers/http/HttpQueryProgrammer.js +2 -2
  52. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  53. package/lib/programmers/internal/application_union_discriminator.js +2 -2
  54. package/lib/programmers/internal/application_union_discriminator.js.map +1 -1
  55. package/lib/programmers/internal/application_v30_alias.js +1 -1
  56. package/lib/programmers/internal/application_v30_alias.js.map +1 -1
  57. package/lib/programmers/internal/application_v30_schema.js +1 -1
  58. package/lib/programmers/internal/application_v30_schema.js.map +1 -1
  59. package/lib/programmers/internal/application_v31_alias.js +1 -1
  60. package/lib/programmers/internal/application_v31_alias.js.map +1 -1
  61. package/lib/programmers/internal/application_v31_schema.js +1 -1
  62. package/lib/programmers/internal/application_v31_schema.js.map +1 -1
  63. package/lib/programmers/internal/llm_schema_object.js +1 -1
  64. package/lib/programmers/internal/llm_schema_object.js.map +1 -1
  65. package/lib/programmers/internal/llm_schema_station.js +2 -2
  66. package/lib/programmers/internal/llm_schema_station.js.map +1 -1
  67. package/lib/programmers/internal/prune_object_properties.js.map +1 -1
  68. package/lib/programmers/json/JsonApplicationProgrammer.js +6 -5
  69. package/lib/programmers/json/JsonApplicationProgrammer.js.map +1 -1
  70. package/lib/programmers/json/JsonSchemasProgrammer.d.ts +1 -1
  71. package/lib/programmers/json/JsonStringifyProgrammer.js +3 -3
  72. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  73. package/lib/programmers/llm/LlmApplicationProgrammer.js +7 -6
  74. package/lib/programmers/llm/LlmApplicationProgrammer.js.map +1 -1
  75. package/lib/programmers/llm/LlmSchemaProgrammer.js +1 -1
  76. package/lib/programmers/llm/LlmSchemaProgrammer.js.map +1 -1
  77. package/lib/programmers/misc/MiscCloneProgrammer.js +1 -1
  78. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  79. package/lib/programmers/misc/MiscPruneProgrammer.js +1 -1
  80. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  81. package/lib/programmers/notations/NotationGeneralProgrammer.js +1 -1
  82. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  83. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +6 -6
  84. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  85. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +1 -1
  86. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  87. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +3 -3
  88. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  89. package/lib/schemas/json/IJsonSchemaCollection.js +3 -0
  90. package/lib/schemas/json/IJsonSchemaCollection.js.map +1 -0
  91. package/lib/schemas/metadata/IMetadata.d.ts +4 -1
  92. package/lib/schemas/metadata/IMetadataArray.d.ts +1 -2
  93. package/lib/schemas/metadata/IMetadataComponents.d.ts +2 -2
  94. package/lib/schemas/metadata/IMetadataDictionary.d.ts +2 -2
  95. package/lib/schemas/metadata/IMetadataObject.d.ts +2 -8
  96. package/lib/schemas/metadata/IMetadataObjectType.d.ts +11 -0
  97. package/lib/schemas/{json/IJsonSchemaList.js → metadata/IMetadataObjectType.js} +1 -1
  98. package/lib/schemas/metadata/IMetadataObjectType.js.map +1 -0
  99. package/lib/schemas/metadata/IMetadataTuple.d.ts +1 -2
  100. package/lib/schemas/metadata/Metadata.js +14 -15
  101. package/lib/schemas/metadata/Metadata.js.map +1 -1
  102. package/lib/schemas/metadata/MetadataArray.js +1 -1
  103. package/lib/schemas/metadata/MetadataArray.js.map +1 -1
  104. package/lib/schemas/metadata/MetadataComponents.d.ts +2 -2
  105. package/lib/schemas/metadata/MetadataComponents.js +2 -2
  106. package/lib/schemas/metadata/MetadataComponents.js.map +1 -1
  107. package/lib/schemas/metadata/MetadataObject.d.ts +8 -12
  108. package/lib/schemas/metadata/MetadataObject.js +44 -82
  109. package/lib/schemas/metadata/MetadataObject.js.map +1 -1
  110. package/lib/schemas/metadata/MetadataObjectType.d.ts +20 -0
  111. package/lib/schemas/metadata/MetadataObjectType.js +106 -0
  112. package/lib/schemas/metadata/MetadataObjectType.js.map +1 -0
  113. package/lib/schemas/metadata/MetadataTuple.js +1 -1
  114. package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
  115. package/lib/transformers/TransformerError.js.map +1 -1
  116. package/package.json +2 -2
  117. package/src/executable/TypiaGenerateWizard.ts +83 -83
  118. package/src/executable/TypiaSetupWizard.ts +174 -174
  119. package/src/executable/setup/ArgumentParser.ts +42 -42
  120. package/src/executable/setup/FileRetriever.ts +19 -19
  121. package/src/executable/setup/PackageManager.ts +87 -87
  122. package/src/factories/IdentifierFactory.ts +89 -89
  123. package/src/factories/MetadataCollection.ts +280 -278
  124. package/src/factories/MetadataFactory.ts +11 -5
  125. package/src/factories/MetadataTypeTagFactory.ts +386 -385
  126. package/src/factories/MetadataTypeTagSchemaFactory.ts +82 -82
  127. package/src/factories/NumericRangeFactory.ts +72 -72
  128. package/src/factories/ProtobufFactory.ts +14 -28
  129. package/src/factories/StatementFactory.ts +90 -90
  130. package/src/factories/TemplateFactory.ts +64 -64
  131. package/src/factories/TypeFactory.ts +140 -140
  132. package/src/factories/internal/metadata/emplace_metadata_alias.ts +32 -32
  133. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +39 -39
  134. package/src/factories/internal/metadata/emplace_metadata_object.ts +2 -2
  135. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +56 -56
  136. package/src/factories/internal/metadata/explore_metadata.ts +30 -30
  137. package/src/factories/internal/metadata/iterate_metadata.ts +54 -54
  138. package/src/factories/internal/metadata/iterate_metadata_alias.ts +28 -28
  139. package/src/factories/internal/metadata/iterate_metadata_array.ts +63 -63
  140. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  141. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +28 -28
  142. package/src/factories/internal/metadata/iterate_metadata_collection.ts +4 -3
  143. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +2 -2
  144. package/src/factories/internal/metadata/iterate_metadata_constant.ts +76 -76
  145. package/src/factories/internal/metadata/iterate_metadata_escape.ts +49 -49
  146. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +219 -216
  147. package/src/factories/internal/metadata/iterate_metadata_map.ts +52 -52
  148. package/src/factories/internal/metadata/iterate_metadata_native.ts +236 -236
  149. package/src/factories/internal/metadata/iterate_metadata_object.ts +35 -27
  150. package/src/factories/internal/metadata/iterate_metadata_set.ts +39 -39
  151. package/src/factories/internal/metadata/iterate_metadata_sort.ts +87 -83
  152. package/src/factories/internal/metadata/iterate_metadata_template.ts +42 -42
  153. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +26 -26
  154. package/src/factories/internal/metadata/iterate_metadata_union.ts +19 -19
  155. package/src/internal/$ProtobufSizer.ts +1 -7
  156. package/src/json.ts +1 -1
  157. package/src/module.ts +1 -1
  158. package/src/programmers/CheckerProgrammer.ts +7 -5
  159. package/src/programmers/FeatureProgrammer.ts +9 -6
  160. package/src/programmers/IsProgrammer.ts +2 -2
  161. package/src/programmers/RandomProgrammer.ts +3 -3
  162. package/src/programmers/functional/FunctionalIsFunctionProgrammer.ts +72 -72
  163. package/src/programmers/functional/FunctionalIsParametersProgrammer.ts +113 -113
  164. package/src/programmers/functional/FunctionalIsReturnProgrammer.ts +116 -116
  165. package/src/programmers/functional/internal/FunctionalGeneralProgrammer.ts +34 -34
  166. package/src/programmers/helpers/AtomicPredicator.ts +35 -35
  167. package/src/programmers/helpers/CloneJoiner.ts +143 -143
  168. package/src/programmers/helpers/HttpMetadataUtil.ts +21 -21
  169. package/src/programmers/helpers/NotationJoiner.ts +144 -144
  170. package/src/programmers/helpers/ProtobufUtil.ts +125 -125
  171. package/src/programmers/helpers/PruneJoiner.ts +148 -148
  172. package/src/programmers/helpers/RandomJoiner.ts +2 -2
  173. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  174. package/src/programmers/helpers/UnionExplorer.ts +372 -372
  175. package/src/programmers/helpers/UnionPredicator.ts +79 -77
  176. package/src/programmers/http/HttpFormDataProgrammer.ts +3 -3
  177. package/src/programmers/http/HttpHeadersProgrammer.ts +3 -3
  178. package/src/programmers/http/HttpQueryProgrammer.ts +4 -4
  179. package/src/programmers/internal/application_array.ts +56 -56
  180. package/src/programmers/internal/application_bigint.ts +25 -25
  181. package/src/programmers/internal/application_boolean.ts +25 -25
  182. package/src/programmers/internal/application_escaped.ts +96 -96
  183. package/src/programmers/internal/application_number.ts +25 -25
  184. package/src/programmers/internal/application_plugin.ts +19 -19
  185. package/src/programmers/internal/application_string.ts +25 -25
  186. package/src/programmers/internal/application_templates.ts +64 -64
  187. package/src/programmers/internal/application_union_discriminator.ts +35 -35
  188. package/src/programmers/internal/application_v30_alias.ts +59 -59
  189. package/src/programmers/internal/application_v30_native.ts +29 -29
  190. package/src/programmers/internal/application_v30_object.ts +165 -165
  191. package/src/programmers/internal/application_v30_schema.ts +220 -220
  192. package/src/programmers/internal/application_v30_tuple.ts +33 -33
  193. package/src/programmers/internal/application_v31_alias.ts +47 -47
  194. package/src/programmers/internal/application_v31_constant.ts +29 -29
  195. package/src/programmers/internal/application_v31_native.ts +25 -25
  196. package/src/programmers/internal/application_v31_object.ts +147 -147
  197. package/src/programmers/internal/application_v31_schema.ts +215 -215
  198. package/src/programmers/internal/application_v31_tuple.ts +22 -22
  199. package/src/programmers/internal/check_array_length.ts +46 -46
  200. package/src/programmers/internal/check_bigint.ts +49 -49
  201. package/src/programmers/internal/check_everything.ts +23 -23
  202. package/src/programmers/internal/check_native.ts +27 -27
  203. package/src/programmers/internal/check_number.ts +111 -111
  204. package/src/programmers/internal/check_string.ts +49 -49
  205. package/src/programmers/internal/check_template.ts +48 -48
  206. package/src/programmers/internal/check_union_array_like.ts +334 -334
  207. package/src/programmers/internal/decode_union_object.ts +116 -116
  208. package/src/programmers/internal/feature_object_entries.ts +2 -2
  209. package/src/programmers/internal/llm_schema_array.ts +22 -22
  210. package/src/programmers/internal/llm_schema_escaped.ts +84 -84
  211. package/src/programmers/internal/llm_schema_object.ts +132 -132
  212. package/src/programmers/internal/llm_schema_station.ts +190 -190
  213. package/src/programmers/internal/metadata_to_pattern.ts +42 -42
  214. package/src/programmers/internal/postfix_of_tuple.ts +5 -5
  215. package/src/programmers/internal/prune_object_properties.ts +2 -2
  216. package/src/programmers/internal/stringify_dynamic_properties.ts +162 -162
  217. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  218. package/src/programmers/internal/template_to_pattern.ts +23 -23
  219. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +23 -23
  220. package/src/programmers/json/JsonApplicationProgrammer.ts +3 -3
  221. package/src/programmers/json/JsonSchemasProgrammer.ts +1 -1
  222. package/src/programmers/json/JsonStringifyProgrammer.ts +5 -5
  223. package/src/programmers/llm/LlmApplicationProgrammer.ts +4 -4
  224. package/src/programmers/llm/LlmSchemaProgrammer.ts +1 -1
  225. package/src/programmers/misc/MiscCloneProgrammer.ts +3 -3
  226. package/src/programmers/misc/MiscPruneProgrammer.ts +3 -3
  227. package/src/programmers/notations/NotationGeneralProgrammer.ts +3 -3
  228. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +11 -11
  229. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +8 -8
  230. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +201 -201
  231. package/src/schemas/json/{IJsonSchemaList.ts → IJsonSchemaCollection.ts} +22 -22
  232. package/src/schemas/metadata/IMetadata.ts +4 -1
  233. package/src/schemas/metadata/IMetadataArray.ts +1 -2
  234. package/src/schemas/metadata/IMetadataComponents.ts +2 -2
  235. package/src/schemas/metadata/IMetadataDictionary.ts +11 -11
  236. package/src/schemas/metadata/IMetadataObject.ts +6 -13
  237. package/src/schemas/metadata/IMetadataObjectType.ts +13 -0
  238. package/src/schemas/metadata/IMetadataTuple.ts +1 -2
  239. package/src/schemas/metadata/Metadata.ts +616 -616
  240. package/src/schemas/metadata/MetadataArray.ts +1 -1
  241. package/src/schemas/metadata/MetadataComponents.ts +98 -98
  242. package/src/schemas/metadata/MetadataObject.ts +48 -139
  243. package/src/schemas/metadata/MetadataObjectType.ts +149 -0
  244. package/src/schemas/metadata/MetadataTuple.ts +1 -1
  245. package/src/transformers/TransformerError.ts +8 -7
  246. package/src/transformers/features/json/JsonSchemasTransformer.ts +1 -1
  247. package/src/utils/MapUtil.ts +14 -14
  248. package/src/utils/NameEncoder.ts +32 -32
  249. package/lib/schemas/json/IJsonSchemaList.js.map +0 -1
  250. /package/lib/schemas/json/{IJsonSchemaList.d.ts → IJsonSchemaCollection.d.ts} +0 -0
@@ -1,201 +1,201 @@
1
- import ts from "typescript";
2
-
3
- import { MetadataCollection } from "../../factories/MetadataCollection";
4
- import { ProtobufFactory } from "../../factories/ProtobufFactory";
5
-
6
- import { Metadata } from "../../schemas/metadata/Metadata";
7
- import { MetadataAtomic } from "../../schemas/metadata/MetadataAtomic";
8
- import { MetadataObject } from "../../schemas/metadata/MetadataObject";
9
- import { MetadataProperty } from "../../schemas/metadata/MetadataProperty";
10
-
11
- import { ITypiaContext } from "../../transformers/ITypiaContext";
12
-
13
- import { MapUtil } from "../../utils/MapUtil";
14
- import { NameEncoder } from "../../utils/NameEncoder";
15
-
16
- import { ProtobufUtil } from "../helpers/ProtobufUtil";
17
-
18
- export namespace ProtobufMessageProgrammer {
19
- export interface IProps {
20
- context: ITypiaContext;
21
- type: ts.Type;
22
- }
23
- export const write = (props: IProps) => {
24
- // PARSE TARGET TYPE
25
- const collection: MetadataCollection = new MetadataCollection();
26
- ProtobufFactory.metadata({
27
- method: "message",
28
- checker: props.context.checker,
29
- transformer: props.context.transformer,
30
- collection,
31
- type: props.type,
32
- });
33
-
34
- // STRINGIFY
35
- const hierarchies: Map<string, Hierarchy> = new Map();
36
- for (const object of collection.objects())
37
- if (is_dynamic_object(object) === false)
38
- emplace({
39
- hierarchies,
40
- object,
41
- });
42
-
43
- const content: string =
44
- `syntax = "proto3";\n\n` +
45
- [...hierarchies.values()]
46
- .map((hier) => write_hierarchy(hier))
47
- .join("\n\n");
48
-
49
- // RETURNS
50
- return ts.factory.createStringLiteral(content);
51
- };
52
-
53
- const emplace = (props: {
54
- hierarchies: Map<string, Hierarchy>;
55
- object: MetadataObject;
56
- }) => {
57
- let hierarchies: Map<string, Hierarchy> = props.hierarchies;
58
- const accessors: string[] = props.object.name.split(".");
59
- accessors.forEach((access, i) => {
60
- const hierarchy: Hierarchy = MapUtil.take(hierarchies, access, () => ({
61
- key: access,
62
- object: null!,
63
- children: new Map(),
64
- }));
65
- hierarchies = hierarchy.children;
66
- if (i === accessors.length - 1) hierarchy.object = props.object;
67
- });
68
- };
69
-
70
- const is_dynamic_object = (object: MetadataObject): boolean =>
71
- object.properties.length === 1 &&
72
- object.properties[0]!.key.isSoleLiteral() === false;
73
-
74
- const write_hierarchy = (hierarchy: Hierarchy): string => {
75
- const elements: string[] = [
76
- `message ${NameEncoder.encode(hierarchy.key)} {`,
77
- ];
78
- if (hierarchy.object !== null) {
79
- const text: string = write_object(hierarchy.object);
80
- elements.push(...text.split("\n").map((str) => `${TAB}${str}`));
81
- }
82
- if (hierarchy.children.size)
83
- elements.push(
84
- [...hierarchy.children.values()]
85
- .map((child) => write_hierarchy(child))
86
- .map((body) =>
87
- body
88
- .split("\n")
89
- .map((line) => `${TAB}${line}`)
90
- .join("\n"),
91
- )
92
- .join("\n\n"),
93
- );
94
- elements.push("}");
95
- return elements.join("\n");
96
- };
97
-
98
- const write_object = (object: MetadataObject): string => {
99
- const sequence: IPointer<number> = { value: 0 };
100
- return object.properties
101
- .map((p) => {
102
- const key: string = p.key.getSoleLiteral()!;
103
- const type: string = decode({
104
- sequence,
105
- metadata: p.value,
106
- });
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
- })
117
- .join("\n");
118
- };
119
-
120
- /* -----------------------------------------------------------
121
- DECODERS
122
- ----------------------------------------------------------- */
123
- const decode = (props: {
124
- sequence: IPointer<number>;
125
- metadata: Metadata;
126
- }): 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)
141
- ? decode_map({
142
- sequence: props.sequence,
143
- entry: MetadataProperty.create({
144
- ...obj.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.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");
176
- };
177
-
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
- })}>`;
189
- }
190
-
191
- interface Hierarchy {
192
- key: string;
193
- object: MetadataObject | null;
194
- children: Map<string, Hierarchy>;
195
- }
196
-
197
- interface IPointer<T> {
198
- value: T;
199
- }
200
-
201
- const TAB = " ".repeat(2);
1
+ import ts from "typescript";
2
+
3
+ import { MetadataCollection } from "../../factories/MetadataCollection";
4
+ import { ProtobufFactory } from "../../factories/ProtobufFactory";
5
+
6
+ import { Metadata } from "../../schemas/metadata/Metadata";
7
+ import { MetadataAtomic } from "../../schemas/metadata/MetadataAtomic";
8
+ import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
9
+ import { MetadataProperty } from "../../schemas/metadata/MetadataProperty";
10
+
11
+ import { ITypiaContext } from "../../transformers/ITypiaContext";
12
+
13
+ import { MapUtil } from "../../utils/MapUtil";
14
+ import { NameEncoder } from "../../utils/NameEncoder";
15
+
16
+ import { ProtobufUtil } from "../helpers/ProtobufUtil";
17
+
18
+ export namespace ProtobufMessageProgrammer {
19
+ export interface IProps {
20
+ context: ITypiaContext;
21
+ type: ts.Type;
22
+ }
23
+ export const write = (props: IProps) => {
24
+ // PARSE TARGET TYPE
25
+ const collection: MetadataCollection = new MetadataCollection();
26
+ ProtobufFactory.metadata({
27
+ method: "message",
28
+ checker: props.context.checker,
29
+ transformer: props.context.transformer,
30
+ collection,
31
+ type: props.type,
32
+ });
33
+
34
+ // STRINGIFY
35
+ const hierarchies: Map<string, Hierarchy> = new Map();
36
+ for (const object of collection.objects())
37
+ if (is_dynamic_object(object) === false)
38
+ emplace({
39
+ hierarchies,
40
+ object,
41
+ });
42
+
43
+ const content: string =
44
+ `syntax = "proto3";\n\n` +
45
+ [...hierarchies.values()]
46
+ .map((hier) => write_hierarchy(hier))
47
+ .join("\n\n");
48
+
49
+ // RETURNS
50
+ return ts.factory.createStringLiteral(content);
51
+ };
52
+
53
+ const emplace = (props: {
54
+ hierarchies: Map<string, Hierarchy>;
55
+ object: MetadataObjectType;
56
+ }) => {
57
+ let hierarchies: Map<string, Hierarchy> = props.hierarchies;
58
+ const accessors: string[] = props.object.name.split(".");
59
+ accessors.forEach((access, i) => {
60
+ const hierarchy: Hierarchy = MapUtil.take(hierarchies, access, () => ({
61
+ key: access,
62
+ object: null!,
63
+ children: new Map(),
64
+ }));
65
+ hierarchies = hierarchy.children;
66
+ if (i === accessors.length - 1) hierarchy.object = props.object;
67
+ });
68
+ };
69
+
70
+ const is_dynamic_object = (object: MetadataObjectType): boolean =>
71
+ object.properties.length === 1 &&
72
+ object.properties[0]!.key.isSoleLiteral() === false;
73
+
74
+ const write_hierarchy = (hierarchy: Hierarchy): string => {
75
+ const elements: string[] = [
76
+ `message ${NameEncoder.encode(hierarchy.key)} {`,
77
+ ];
78
+ if (hierarchy.object !== null) {
79
+ const text: string = write_object(hierarchy.object);
80
+ elements.push(...text.split("\n").map((str) => `${TAB}${str}`));
81
+ }
82
+ if (hierarchy.children.size)
83
+ elements.push(
84
+ [...hierarchy.children.values()]
85
+ .map((child) => write_hierarchy(child))
86
+ .map((body) =>
87
+ body
88
+ .split("\n")
89
+ .map((line) => `${TAB}${line}`)
90
+ .join("\n"),
91
+ )
92
+ .join("\n\n"),
93
+ );
94
+ elements.push("}");
95
+ return elements.join("\n");
96
+ };
97
+
98
+ const write_object = (object: MetadataObjectType): string => {
99
+ const sequence: IPointer<number> = { value: 0 };
100
+ return object.properties
101
+ .map((p) => {
102
+ const key: string = p.key.getSoleLiteral()!;
103
+ const type: string = decode({
104
+ sequence,
105
+ metadata: p.value,
106
+ });
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
+ })
117
+ .join("\n");
118
+ };
119
+
120
+ /* -----------------------------------------------------------
121
+ DECODERS
122
+ ----------------------------------------------------------- */
123
+ const decode = (props: {
124
+ sequence: IPointer<number>;
125
+ metadata: Metadata;
126
+ }): 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");
176
+ };
177
+
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
+ })}>`;
189
+ }
190
+
191
+ interface Hierarchy {
192
+ key: string;
193
+ object: MetadataObjectType | null;
194
+ children: Map<string, Hierarchy>;
195
+ }
196
+
197
+ interface IPointer<T> {
198
+ value: T;
199
+ }
200
+
201
+ const TAB = " ".repeat(2);
@@ -1,22 +1,22 @@
1
- import type { OpenApi, OpenApiV3 } from "@samchon/openapi";
2
-
3
- export type IJsonSchemaCollection<
4
- Version extends "3.0" | "3.1" = "3.1",
5
- Types = unknown[],
6
- > = Version extends "3.0"
7
- ? IJsonSchemaCollection.IV3_0<Types>
8
- : IJsonSchemaCollection.IV3_1<Types>;
9
- export namespace IJsonSchemaCollection {
10
- export interface IV3_0<Types = unknown[]> {
11
- version: "3.0";
12
- schemas: OpenApiV3.IJsonSchema[];
13
- components: OpenApiV3.IComponents;
14
- __types?: Types | undefined;
15
- }
16
- export interface IV3_1<Types = unknown[]> {
17
- version: "3.1";
18
- components: OpenApi.IComponents;
19
- schemas: OpenApi.IJsonSchema[];
20
- __types?: Types | undefined;
21
- }
22
- }
1
+ import type { OpenApi, OpenApiV3 } from "@samchon/openapi";
2
+
3
+ export type IJsonSchemaCollection<
4
+ Version extends "3.0" | "3.1" = "3.1",
5
+ Types = unknown[],
6
+ > = Version extends "3.0"
7
+ ? IJsonSchemaCollection.IV3_0<Types>
8
+ : IJsonSchemaCollection.IV3_1<Types>;
9
+ export namespace IJsonSchemaCollection {
10
+ export interface IV3_0<Types = unknown[]> {
11
+ version: "3.0";
12
+ schemas: OpenApiV3.IJsonSchema[];
13
+ components: OpenApiV3.IComponents;
14
+ __types?: Types | undefined;
15
+ }
16
+ export interface IV3_1<Types = unknown[]> {
17
+ version: "3.1";
18
+ components: OpenApi.IComponents;
19
+ schemas: OpenApi.IJsonSchema[];
20
+ __types?: Types | undefined;
21
+ }
22
+ }
@@ -27,7 +27,10 @@ export interface IMetadata {
27
27
  name: string;
28
28
  tags: IMetadataTypeTag[][];
29
29
  }[];
30
- objects: string[];
30
+ objects: {
31
+ name: string;
32
+ tags: IMetadataTypeTag[][];
33
+ }[];
31
34
  aliases: string[];
32
35
 
33
36
  natives: string[];
@@ -1,7 +1,6 @@
1
- import { IMetadataArrayType } from "./IMetadataArrayType";
2
1
  import { IMetadataTypeTag } from "./IMetadataTypeTag";
3
2
 
4
3
  export interface IMetadataArray {
5
- type: IMetadataArrayType;
4
+ name: string;
6
5
  tags: IMetadataTypeTag[][];
7
6
  }
@@ -1,10 +1,10 @@
1
1
  import { IMetadataAlias } from "./IMetadataAlias";
2
2
  import { IMetadataArrayType } from "./IMetadataArrayType";
3
- import { IMetadataObject } from "./IMetadataObject";
3
+ import { IMetadataObjectType } from "./IMetadataObjectType";
4
4
  import { IMetadataTupleType } from "./IMetadataTupleType";
5
5
 
6
6
  export interface IMetadataComponents {
7
- objects: IMetadataObject[];
7
+ objects: IMetadataObjectType[];
8
8
  aliases: IMetadataAlias[];
9
9
  arrays: IMetadataArrayType[];
10
10
  tuples: IMetadataTupleType[];
@@ -1,11 +1,11 @@
1
- import { MetadataAlias } from "./MetadataAlias";
2
- import { MetadataArrayType } from "./MetadataArrayType";
3
- import { MetadataObject } from "./MetadataObject";
4
- import { MetadataTupleType } from "./MetadataTupleType";
5
-
6
- export interface IMetadataDictionary {
7
- objects: Map<string, MetadataObject>;
8
- aliases: Map<string, MetadataAlias>;
9
- arrays: Map<string, MetadataArrayType>;
10
- tuples: Map<string, MetadataTupleType>;
11
- }
1
+ import { MetadataAlias } from "./MetadataAlias";
2
+ import { MetadataArrayType } from "./MetadataArrayType";
3
+ import { MetadataObjectType } from "./MetadataObjectType";
4
+ import { MetadataTupleType } from "./MetadataTupleType";
5
+
6
+ export interface IMetadataDictionary {
7
+ objects: Map<string, MetadataObjectType>;
8
+ aliases: Map<string, MetadataAlias>;
9
+ arrays: Map<string, MetadataArrayType>;
10
+ tuples: Map<string, MetadataTupleType>;
11
+ }
@@ -1,13 +1,6 @@
1
- import { IJsDocTagInfo } from "./IJsDocTagInfo";
2
- import { IMetadataProperty } from "./IMetadataProperty";
3
-
4
- export interface IMetadataObject {
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 { IMetadataTypeTag } from "./IMetadataTypeTag";
2
+
3
+ export interface IMetadataObject {
4
+ name: string;
5
+ tags: IMetadataTypeTag[][];
6
+ }
@@ -0,0 +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,7 +1,6 @@
1
- import { IMetadataTupleType } from "./IMetadataTupleType";
2
1
  import { IMetadataTypeTag } from "./IMetadataTypeTag";
3
2
 
4
3
  export interface IMetadataTuple {
5
- type: IMetadataTupleType;
4
+ name: string;
6
5
  tags: IMetadataTypeTag[][];
7
6
  }