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
@@ -4,11 +4,12 @@ import { CommentFactory } from "../../factories/CommentFactory";
4
4
 
5
5
  import { IJsDocTagInfo } from "../../schemas/metadata/IJsDocTagInfo";
6
6
  import { Metadata } from "../../schemas/metadata/Metadata";
7
- import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
7
+ import { MetadataObject } from "../../schemas/metadata/MetadataObject";
8
8
 
9
9
  import { PatternUtil } from "../../utils/PatternUtil";
10
10
 
11
11
  import { application_description } from "./application_description";
12
+ import { application_plugin } from "./application_plugin";
12
13
  import { llm_schema_station } from "./llm_schema_station";
13
14
  import { metadata_to_pattern } from "./metadata_to_pattern";
14
15
 
@@ -16,9 +17,9 @@ import { metadata_to_pattern } from "./metadata_to_pattern";
16
17
  * @internal
17
18
  */
18
19
  export const llm_schema_object = (props: {
19
- object: MetadataObjectType;
20
+ object: MetadataObject;
20
21
  nullable: boolean;
21
- }): ILlmSchema.IObject => {
22
+ }): ILlmSchema.IObject[] => {
22
23
  // ITERATE PROPERTIES
23
24
  const properties: Record<string, any> = {};
24
25
  const extraMeta: ISuperfluous = {
@@ -27,7 +28,7 @@ export const llm_schema_object = (props: {
27
28
  };
28
29
  const required: string[] = [];
29
30
 
30
- for (const property of props.object.properties) {
31
+ for (const property of props.object.type.properties) {
31
32
  if (
32
33
  // FUNCTIONAL TYPE
33
34
  property.value.functions.length &&
@@ -82,20 +83,22 @@ export const llm_schema_object = (props: {
82
83
  }
83
84
  }
84
85
 
85
- return {
86
- type: "object",
87
- properties,
88
- nullable: props.nullable,
89
- required: required.length ? required : undefined,
90
- title: (() => {
91
- const info: IJsDocTagInfo | undefined = props.object.jsDocTags.find(
92
- (tag) => tag.name === "title",
93
- );
94
- return info?.text?.length ? CommentFactory.merge(info.text) : undefined;
95
- })(),
96
- description: application_description(props.object),
97
- additionalProperties: join(extraMeta),
98
- };
86
+ return application_plugin({
87
+ schema: {
88
+ type: "object",
89
+ properties,
90
+ nullable: props.nullable,
91
+ required: required.length ? required : undefined,
92
+ title: (() => {
93
+ const info: IJsDocTagInfo | undefined =
94
+ props.object.type.jsDocTags.find((tag) => tag.name === "title");
95
+ return info?.text?.length ? CommentFactory.merge(info.text) : undefined;
96
+ })(),
97
+ description: application_description(props.object.type),
98
+ additionalProperties: join(extraMeta),
99
+ },
100
+ tags: props.object.tags,
101
+ });
99
102
  };
100
103
 
101
104
  /**
@@ -99,8 +99,8 @@ export const llm_schema_station = (props: {
99
99
 
100
100
  // NATIVES
101
101
  for (const native of props.metadata.natives)
102
- if (AtomicPredicator.native(native)) {
103
- const type: string = native.toLowerCase();
102
+ if (AtomicPredicator.native(native.name)) {
103
+ const type: string = native.name.toLowerCase();
104
104
  if (props.metadata.atomics.some((a) => a.type === type)) continue;
105
105
  else if (type === "boolean")
106
106
  insert(
@@ -138,7 +138,7 @@ export const llm_schema_station = (props: {
138
138
  }),
139
139
  )[0]!,
140
140
  );
141
- } else insert(llm_schema_native(native));
141
+ } else insert(llm_schema_native(native.name));
142
142
  if (props.metadata.sets.length) insert(llm_schema_native("Set"));
143
143
  if (props.metadata.maps.length) insert(llm_schema_native("Map"));
144
144
 
@@ -149,16 +149,14 @@ export const llm_schema_station = (props: {
149
149
  "Error on LlmSchemaProgrammer.write(): LLM schema does not allow recursive object type.",
150
150
  );
151
151
  else
152
- insert(
153
- llm_schema_object({
154
- object: object.type,
155
- nullable: props.metadata.nullable,
156
- }),
157
- );
152
+ llm_schema_object({
153
+ object,
154
+ nullable: props.metadata.nullable,
155
+ }).forEach(insert);
158
156
 
159
157
  // ALIASES
160
158
  for (const alias of props.metadata.aliases)
161
- if (alias.recursive)
159
+ if (alias.type.recursive)
162
160
  throw new Error(
163
161
  "Error on LlmSchemaProgrammer.write(): LLM schema does not allow recursive alias type.",
164
162
  );
@@ -166,7 +164,7 @@ export const llm_schema_station = (props: {
166
164
  insert(
167
165
  llm_schema_station({
168
166
  ...props,
169
- metadata: alias.value,
167
+ metadata: alias.type.value,
170
168
  }),
171
169
  );
172
170
 
@@ -30,12 +30,12 @@ export namespace JsonSchemasProgrammer {
30
30
  output.push("JSON schema does not support Set type.");
31
31
  for (const native of metadata.natives)
32
32
  if (
33
- AtomicPredicator.native(native) === false &&
34
- native !== "Date" &&
35
- native !== "Blob" &&
36
- native !== "File"
33
+ AtomicPredicator.native(native.name) === false &&
34
+ native.name !== "Date" &&
35
+ native.name !== "Blob" &&
36
+ native.name !== "File"
37
37
  )
38
- output.push(`JSON schema does not support ${native} type.`);
38
+ output.push(`JSON schema does not support ${native.name} type.`);
39
39
  return output;
40
40
  };
41
41
 
@@ -235,10 +235,10 @@ export namespace JsonStringifyProgrammer {
235
235
  type: "resolved",
236
236
  is:
237
237
  props.metadata.escaped.original.size() === 1 &&
238
- props.metadata.escaped.original.natives[0] === "Date"
238
+ props.metadata.escaped.original.natives[0]?.name === "Date"
239
239
  ? () =>
240
240
  check_native({
241
- type: "Date",
241
+ name: "Date",
242
242
  input: props.input,
243
243
  })
244
244
  : () =>
@@ -427,14 +427,14 @@ export namespace JsonStringifyProgrammer {
427
427
  type: "object",
428
428
  is: () =>
429
429
  check_native({
430
- type: native,
430
+ name: native.name,
431
431
  input: props.input,
432
432
  }),
433
433
  value: () =>
434
- AtomicPredicator.native(native)
434
+ AtomicPredicator.native(native.name)
435
435
  ? decode_atomic({
436
436
  ...props,
437
- type: native.toLowerCase() as Atomic.Literal,
437
+ type: native.name.toLowerCase() as Atomic.Literal,
438
438
  })
439
439
  : ts.factory.createStringLiteral("{}"),
440
440
  });
@@ -26,14 +26,14 @@ export namespace LlmSchemaProgrammer {
26
26
  output.push("LLM schema does not support Set type.");
27
27
  for (const native of metadata.natives)
28
28
  if (
29
- AtomicPredicator.native(native) === false &&
30
- native !== "Date" &&
31
- native !== "Blob" &&
32
- native !== "File"
29
+ AtomicPredicator.native(native.name) === false &&
30
+ native.name !== "Date" &&
31
+ native.name !== "Blob" &&
32
+ native.name !== "File"
33
33
  )
34
- output.push(`LLM schema does not support ${native} type.`);
34
+ output.push(`LLM schema does not support ${native.name} type.`);
35
35
  if (
36
- metadata.aliases.some((a) => a.recursive) ||
36
+ metadata.aliases.some((a) => a.type.recursive) ||
37
37
  metadata.arrays.some((a) => a.type.recursive) ||
38
38
  metadata.objects.some((o) => o.type.recursive) ||
39
39
  metadata.tuples.some((t) => t.type.recursive)
@@ -9,7 +9,9 @@ import { TypeFactory } from "../../factories/TypeFactory";
9
9
 
10
10
  import { Metadata } from "../../schemas/metadata/Metadata";
11
11
  import { MetadataArray } from "../../schemas/metadata/MetadataArray";
12
+ import { MetadataMap } from "../../schemas/metadata/MetadataMap";
12
13
  import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
14
+ import { MetadataSet } from "../../schemas/metadata/MetadataSet";
13
15
  import { MetadataTuple } from "../../schemas/metadata/MetadataTuple";
14
16
  import { MetadataTupleType } from "../../schemas/metadata/MetadataTupleType";
15
17
 
@@ -270,16 +272,18 @@ export namespace MiscCloneProgrammer {
270
272
  for (const native of props.metadata.natives)
271
273
  unions.push({
272
274
  type: "native",
273
- is: () => ExpressionFactory.isInstanceOf(native, props.input),
275
+ is: () => ExpressionFactory.isInstanceOf(native.name, props.input),
274
276
  value: () =>
275
- native === "Boolean" || native === "Number" || native === "String"
277
+ native.name === "Boolean" ||
278
+ native.name === "Number" ||
279
+ native.name === "String"
276
280
  ? ts.factory.createCallExpression(
277
281
  IdentifierFactory.access(props.input, "valueOf"),
278
282
  undefined,
279
283
  undefined,
280
284
  )
281
285
  : decode_native({
282
- type: native,
286
+ type: native.name,
283
287
  input: props.input,
284
288
  }),
285
289
  });
@@ -578,7 +582,7 @@ export namespace MiscCloneProgrammer {
578
582
  config: FeatureProgrammer.IConfig;
579
583
  functor: FunctionProgrammer;
580
584
  input: ts.Expression;
581
- sets: Metadata[];
585
+ sets: MetadataSet[];
582
586
  explore: FeatureProgrammer.IExplore;
583
587
  }): ts.Expression =>
584
588
  ts.factory.createCallExpression(
@@ -634,7 +638,7 @@ export namespace MiscCloneProgrammer {
634
638
  config: FeatureProgrammer.IConfig;
635
639
  functor: FunctionProgrammer;
636
640
  input: ts.Expression;
637
- maps: Metadata.Entry[];
641
+ maps: MetadataMap[];
638
642
  explore: FeatureProgrammer.IExplore;
639
643
  }): ts.Expression =>
640
644
  ts.factory.createCallExpression(
@@ -967,9 +971,9 @@ export namespace MiscCloneProgrammer {
967
971
  absorb: true,
968
972
  validate: (metadata) => {
969
973
  const output: string[] = [];
970
- if (metadata.natives.some((n) => n === "WeakSet"))
974
+ if (metadata.natives.some((native) => native.name === "WeakSet"))
971
975
  output.push("unable to clone WeakSet");
972
- else if (metadata.natives.some((n) => n === "WeakMap"))
976
+ else if (metadata.natives.some((native) => native.name === "WeakMap"))
973
977
  output.push("unable to clone WeakMap");
974
978
  return output;
975
979
  },
@@ -221,7 +221,7 @@ export namespace MiscPruneProgrammer {
221
221
  for (const native of props.metadata.natives)
222
222
  unions.push({
223
223
  type: "native",
224
- is: () => ExpressionFactory.isInstanceOf(native, props.input),
224
+ is: () => ExpressionFactory.isInstanceOf(native.name, props.input),
225
225
  value: () => ts.factory.createReturnStatement(),
226
226
  });
227
227
  if (props.metadata.sets.length)
@@ -9,7 +9,9 @@ import { TypeFactory } from "../../factories/TypeFactory";
9
9
 
10
10
  import { Metadata } from "../../schemas/metadata/Metadata";
11
11
  import { MetadataArray } from "../../schemas/metadata/MetadataArray";
12
+ import { MetadataMap } from "../../schemas/metadata/MetadataMap";
12
13
  import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
14
+ import { MetadataSet } from "../../schemas/metadata/MetadataSet";
13
15
  import { MetadataTuple } from "../../schemas/metadata/MetadataTuple";
14
16
  import { MetadataTupleType } from "../../schemas/metadata/MetadataTupleType";
15
17
 
@@ -298,19 +300,21 @@ export namespace NotationGeneralProgrammer {
298
300
  }),
299
301
  });
300
302
  for (const native of props.metadata.natives) {
301
- if (native === "WeakSet" || native === "WeakMap") continue;
303
+ if (native.name === "WeakSet" || native.name === "WeakMap") continue;
302
304
  unions.push({
303
305
  type: "native",
304
- is: () => ExpressionFactory.isInstanceOf(native, props.input),
306
+ is: () => ExpressionFactory.isInstanceOf(native.name, props.input),
305
307
  value: () =>
306
- native === "Boolean" || native === "Number" || native === "String"
308
+ native.name === "Boolean" ||
309
+ native.name === "Number" ||
310
+ native.name === "String"
307
311
  ? ts.factory.createCallExpression(
308
312
  IdentifierFactory.access(props.input, "valueOf"),
309
313
  undefined,
310
314
  undefined,
311
315
  )
312
316
  : decode_native({
313
- name: native,
317
+ name: native.name,
314
318
  input: props.input,
315
319
  }),
316
320
  });
@@ -530,7 +534,7 @@ export namespace NotationGeneralProgrammer {
530
534
  functor: FunctionProgrammer;
531
535
  input: ts.Expression;
532
536
  explore: FeatureProgrammer.IExplore;
533
- sets: Metadata[];
537
+ sets: Array<MetadataSet>;
534
538
  }): ts.Expression =>
535
539
  ts.factory.createCallExpression(
536
540
  UnionExplorer.set({
@@ -585,7 +589,7 @@ export namespace NotationGeneralProgrammer {
585
589
  config: FeatureProgrammer.IConfig;
586
590
  functor: FunctionProgrammer;
587
591
  input: ts.Expression;
588
- maps: Metadata.Entry[];
592
+ maps: Array<MetadataMap>;
589
593
  explore: FeatureProgrammer.IExplore;
590
594
  }): ts.Expression =>
591
595
  ts.factory.createCallExpression(
@@ -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
 
@@ -359,12 +360,13 @@ export namespace ProtobufDecodeProgrammer {
359
360
 
360
361
  const required: boolean =
361
362
  props.metadata.isRequired() && !props.metadata.nullable;
362
- for (const atomic of ProtobufUtil.getAtomics(props.metadata))
363
+ // @todo
364
+ for (const [atomic] of ProtobufUtil.getAtomics(props.metadata))
363
365
  emplace(
364
366
  atomic,
365
367
  decode_atomic({
366
368
  metadata: props.metadata,
367
- type: atomic,
369
+ type: atomic as ProtobufAtomic,
368
370
  }),
369
371
  );
370
372
  if (props.metadata.natives.length) emplace("bytes", decode_bytes("bytes"));
@@ -420,8 +422,9 @@ export namespace ProtobufDecodeProgrammer {
420
422
  );
421
423
  if (props.type !== "int64" && props.type !== "uint64") return call;
422
424
 
423
- const isNumber: boolean = ProtobufUtil.getNumbers(props.metadata).some(
424
- (n) => n === props.type,
425
+ // @todo
426
+ const isNumber: boolean = ProtobufUtil.getNumbers(props.metadata).has(
427
+ props.type,
425
428
  );
426
429
  return isNumber
427
430
  ? ts.factory.createCallExpression(
@@ -456,7 +459,11 @@ export namespace ProtobufDecodeProgrammer {
456
459
  ),
457
460
  ),
458
461
  );
459
- const atomics = ProtobufUtil.getAtomics(props.array.type.value);
462
+
463
+ // @todo
464
+ const atomics = Array.from(
465
+ ProtobufUtil.getAtomics(props.array.type.value).keys(),
466
+ ) as ProtobufAtomic[];
460
467
  const decoder = atomics.length
461
468
  ? () =>
462
469
  decode_atomic({
@@ -610,7 +617,7 @@ export namespace ProtobufDecodeProgrammer {
610
617
  context: ITypiaContext;
611
618
  functor: FunctionProgrammer;
612
619
  accessor: ts.ElementAccessExpression | ts.PropertyAccessExpression;
613
- entry: Metadata.Entry;
620
+ entry: MetadataMap | MetadataProperty;
614
621
  required: boolean;
615
622
  }): ts.Statement[] =>
616
623
  decode_entry({
@@ -644,7 +651,7 @@ export namespace ProtobufDecodeProgrammer {
644
651
  functor: FunctionProgrammer;
645
652
  initializer: () => ts.Expression;
646
653
  setter: () => ts.Expression;
647
- entry: Metadata.Entry;
654
+ entry: MetadataMap | MetadataProperty;
648
655
  required: boolean;
649
656
  }): ts.Statement[] => {
650
657
  const statements: ts.Statement[] = [
@@ -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" ||
@@ -5,6 +5,7 @@ import { ProtobufFactory } from "../../factories/ProtobufFactory";
5
5
 
6
6
  import { Metadata } from "../../schemas/metadata/Metadata";
7
7
  import { MetadataAtomic } from "../../schemas/metadata/MetadataAtomic";
8
+ import { MetadataMap } from "../../schemas/metadata/MetadataMap";
8
9
  import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
9
10
  import { MetadataProperty } from "../../schemas/metadata/MetadataProperty";
10
11
 
@@ -118,25 +119,27 @@ export namespace ProtobufMessageProgrammer {
118
119
  };
119
120
 
120
121
  /* -----------------------------------------------------------
121
- DECODERS
122
- ----------------------------------------------------------- */
122
+ DECODERS
123
+ ----------------------------------------------------------- */
123
124
  const decode = (props: {
124
125
  sequence: IPointer<number>;
125
126
  metadata: Metadata;
126
127
  }): 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);
128
+ const union: Map<string, number | null> = new Map();
129
+ for (const native of props.metadata.natives)
130
+ if (native.name === "Uint8Array")
131
+ union.set("bytes", ProtobufUtil.getSequence(native.tags[0] ?? []));
132
+ ProtobufUtil.getAtomics(props.metadata, union);
131
133
  for (const array of props.metadata.arrays)
132
- elements.add(
134
+ union.set(
133
135
  `repeated ${decode({
134
136
  sequence: props.sequence,
135
137
  metadata: array.type.value,
136
138
  })}`,
139
+ ProtobufUtil.getSequence(array.tags[0] ?? []),
137
140
  );
138
141
  for (const obj of props.metadata.objects)
139
- elements.add(
142
+ union.set(
140
143
  is_dynamic_object(obj.type)
141
144
  ? decode_map({
142
145
  sequence: props.sequence,
@@ -155,29 +158,51 @@ export namespace ProtobufMessageProgrammer {
155
158
  }),
156
159
  })
157
160
  : NameEncoder.encode(obj.type.name),
161
+ ProtobufUtil.getSequence(obj.tags[0] ?? []),
158
162
  );
159
163
  for (const entry of props.metadata.maps)
160
- elements.add(
164
+ union.set(
161
165
  decode_map({
162
166
  sequence: props.sequence,
163
167
  entry,
164
168
  }),
169
+ ProtobufUtil.getSequence(entry.tags[0] ?? []),
165
170
  );
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");
171
+
172
+ const sequenced: boolean = Array.from(union.values()).every(
173
+ (x) => x !== null,
174
+ );
175
+ if (sequenced === false)
176
+ return union.size === 1
177
+ ? union.keys().next().value!
178
+ : [
179
+ "oneof ${name} {",
180
+ ...Array.from(union.keys()).map((str) => {
181
+ const index: number = ++props.sequence.value;
182
+ return `${TAB}${str} v${index} = ${index};`;
183
+ }),
184
+ "}",
185
+ ].join("\n");
186
+ else if (union.size === 1) {
187
+ const [key, value] = union.entries().next().value!;
188
+ props.sequence.value = value!;
189
+ return `${key} $\{name} = ${value}`;
190
+ }
191
+ props.sequence.value = Math.max(
192
+ ...Array.from(union.values()).filter((v) => v !== null),
193
+ );
194
+ return [
195
+ "oneof ${name} {",
196
+ ...Array.from(union.entries()).map(
197
+ ([key, value]) => `${TAB}${key} v${value} = ${value};`,
198
+ ),
199
+ "}",
200
+ ].join("\n");
176
201
  };
177
202
 
178
203
  const decode_map = (props: {
179
204
  sequence: IPointer<number>;
180
- entry: Metadata.Entry;
205
+ entry: MetadataMap | MetadataProperty;
181
206
  }): string =>
182
207
  `map<${decode({
183
208
  sequence: props.sequence,
@@ -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
+ }