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
@@ -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
+ }
@@ -11,8 +11,11 @@ import { MetadataAtomic } from "./MetadataAtomic";
11
11
  import { MetadataConstant } from "./MetadataConstant";
12
12
  import { MetadataEscaped } from "./MetadataEscaped";
13
13
  import { MetadataFunction } from "./MetadataFunction";
14
+ import { MetadataMap } from "./MetadataMap";
15
+ import { MetadataNative } from "./MetadataNative";
14
16
  import { MetadataObject } from "./MetadataObject";
15
17
  import { MetadataObjectType } from "./MetadataObjectType";
18
+ import { MetadataSet } from "./MetadataSet";
16
19
  import { MetadataTemplate } from "./MetadataTemplate";
17
20
  import { MetadataTuple } from "./MetadataTuple";
18
21
 
@@ -34,15 +37,16 @@ export class Metadata {
34
37
  public objects: MetadataObject[];
35
38
  public functions: MetadataFunction[];
36
39
 
37
- public natives: string[];
38
- public sets: Metadata[];
39
- public maps: Metadata.Entry[];
40
+ public natives: MetadataNative[];
41
+ public sets: MetadataSet[];
42
+ public maps: MetadataMap[];
40
43
 
41
44
  /** @internal */ private name_?: string;
42
45
  /** @internal */ private parent_resolved_: boolean = false;
43
46
  /** @internal */ public union_index?: number;
44
47
  /** @internal */ public fixed_?: number | null;
45
48
  /** @internal */ public boolean_literal_intersected_?: boolean;
49
+ /** @internal */ private is_sequence_?: boolean;
46
50
 
47
51
  /* -----------------------------------------------------------
48
52
  CONSTRUCTORS
@@ -126,14 +130,11 @@ export class Metadata {
126
130
  arrays: this.arrays.map((array) => array.toJSON()),
127
131
  tuples: this.tuples.map((tuple) => tuple.toJSON()),
128
132
  objects: this.objects.map((obj) => obj.toJSON()),
129
- aliases: this.aliases.map((alias) => alias.name),
130
-
131
- natives: this.natives.slice(),
132
- sets: this.sets.map((meta) => meta.toJSON()),
133
- maps: this.maps.map((entry) => ({
134
- key: entry.key.toJSON(),
135
- value: entry.value.toJSON(),
136
- })),
133
+ aliases: this.aliases.map((alias) => alias.toJSON()),
134
+
135
+ natives: this.natives.map((native) => native.toJSON()),
136
+ sets: this.sets.map((set) => set.toJSON()),
137
+ maps: this.maps.map((map) => map.toJSON()),
137
138
  };
138
139
  }
139
140
 
@@ -185,19 +186,30 @@ export class Metadata {
185
186
  });
186
187
  }),
187
188
  aliases: meta.aliases.map((alias) => {
188
- const found = dict.aliases.get(alias);
189
- if (found === undefined)
189
+ const type = dict.aliases.get(alias.name);
190
+ if (type === undefined)
190
191
  throw new RangeError(
191
192
  `Error on Metadata.from(): failed to find alias "${alias}".`,
192
193
  );
193
- return found;
194
+ return MetadataAlias.create({
195
+ type,
196
+ tags: alias.tags.map((r) => r.slice()),
197
+ });
194
198
  }),
195
- natives: meta.natives.slice(),
196
- sets: meta.sets.map((meta) => this.from(meta, dict)),
197
- maps: meta.maps.map((entry) => ({
198
- key: this.from(entry.key, dict),
199
- value: this.from(entry.value, dict),
200
- })),
199
+ natives: meta.natives.map((native) => MetadataNative.create(native)),
200
+ sets: meta.sets.map((set) =>
201
+ MetadataSet.create({
202
+ value: Metadata.from(set.value, dict),
203
+ tags: set.tags.map((r) => r.slice()),
204
+ }),
205
+ ),
206
+ maps: meta.maps.map((map) =>
207
+ MetadataMap.create({
208
+ key: this.from(map.key, dict),
209
+ value: this.from(map.value, dict),
210
+ tags: map.tags.map((r) => r.slice()),
211
+ }),
212
+ ),
201
213
  });
202
214
  }
203
215
 
@@ -250,6 +262,39 @@ export class Metadata {
250
262
  );
251
263
  }
252
264
 
265
+ /**
266
+ * @internal
267
+ */
268
+ public isSequence(): boolean {
269
+ return (this.is_sequence_ ??= (() => {
270
+ const exists = (tags: IMetadataTypeTag[][]): boolean =>
271
+ tags.some((row) => {
272
+ const sequence = row.find(
273
+ (t) =>
274
+ t.kind === "sequence" &&
275
+ typeof (t.schema as any)?.["x-protobuf-sequence"] === "number",
276
+ );
277
+ if (sequence === undefined) return false;
278
+ const value: number = Number(
279
+ (sequence.schema as any)["x-protobuf-sequence"],
280
+ );
281
+ return !Number.isNaN(value);
282
+ });
283
+ return (
284
+ this.atomics.some((atomic) => exists(atomic.tags)) &&
285
+ this.constants.some((c) =>
286
+ c.values.some((v) => exists(v.tags ?? [])),
287
+ ) &&
288
+ this.templates.some((tpl) => exists(tpl.tags)) &&
289
+ this.arrays.some((array) => exists(array.tags)) &&
290
+ this.objects.some((object) => exists(object.tags)) &&
291
+ this.natives.some(
292
+ (native) => native.name === "Uint8Array" && exists(native.tags),
293
+ )
294
+ );
295
+ })());
296
+ }
297
+
253
298
  public isConstant(): boolean {
254
299
  return this.bucket() === (this.constants.length ? 1 : 0);
255
300
  }
@@ -423,7 +468,8 @@ export namespace Metadata {
423
468
 
424
469
  // ALIASES
425
470
  for (const yd of y.aliases)
426
- if (x.aliases.some((xd) => xd.name === yd.name) === false) return false;
471
+ if (x.aliases.some((xd) => xd.type.name === yd.type.name) === false)
472
+ return false;
427
473
 
428
474
  // NATIVES
429
475
  for (const yn of y.natives)
@@ -431,7 +477,8 @@ export namespace Metadata {
431
477
 
432
478
  // SETS
433
479
  for (const ys of y.sets)
434
- if (x.sets.some((xs) => covers(xs, ys)) === false) return false;
480
+ if (x.sets.some((xs) => covers(xs.value, ys.value)) === false)
481
+ return false;
435
482
 
436
483
  //----
437
484
  // VALUES
@@ -476,7 +523,6 @@ export namespace Metadata {
476
523
  required: x.required && y.required,
477
524
  optional: x.optional || y.optional,
478
525
  functions: x.functions.length ? x.functions : y.functions, // @todo
479
-
480
526
  escaped:
481
527
  x.escaped !== null && y.escaped !== null
482
528
  ? MetadataEscaped.create({
@@ -491,12 +537,10 @@ export namespace Metadata {
491
537
  })(y.atomics),
492
538
  constants: [...x.constants],
493
539
  templates: x.templates.slice(),
494
-
495
540
  rest:
496
541
  x.rest !== null && y.rest !== null
497
542
  ? merge(x.rest, y.rest)
498
543
  : (x.rest ?? y.rest),
499
- // arrays: x.arrays.slice(),
500
544
  arrays: mergeTaggedTypes({
501
545
  container: x.arrays,
502
546
  equals: (x, y) => x.type.name === y.type.name,
@@ -507,12 +551,33 @@ export namespace Metadata {
507
551
  equals: (x, y) => x.type.name === y.type.name,
508
552
  getter: (x) => x.tags,
509
553
  })(y.tuples),
510
- objects: x.objects.slice(),
511
- aliases: x.aliases.slice(),
512
-
513
- natives: [...new Set([...x.natives, ...y.natives])],
514
- sets: x.sets.slice(),
515
- maps: x.maps.slice(),
554
+ objects: mergeTaggedTypes({
555
+ container: x.objects,
556
+ equals: (x, y) => x.type.name === y.type.name,
557
+ getter: (x) => x.tags,
558
+ })(y.objects),
559
+ aliases: mergeTaggedTypes({
560
+ container: x.aliases,
561
+ equals: (x, y) => x.type.name === y.type.name,
562
+ getter: (x) => x.tags,
563
+ })(y.aliases),
564
+ natives: mergeTaggedTypes({
565
+ container: x.natives,
566
+ equals: (x, y) => x.name === y.name,
567
+ getter: (x) => x.tags,
568
+ })(y.natives),
569
+ sets: mergeTaggedTypes({
570
+ container: x.sets,
571
+ equals: (x, y) => x.value.getName() === y.value.getName(),
572
+ getter: (x) => x.tags,
573
+ })(y.sets),
574
+ maps: mergeTaggedTypes({
575
+ container: x.maps,
576
+ equals: (x, y) =>
577
+ x.key.getName() === y.key.getName() &&
578
+ x.value.getName() === y.value.getName(),
579
+ getter: (x) => x.tags,
580
+ })(y.maps),
516
581
  });
517
582
  for (const constant of y.constants) {
518
583
  const target: MetadataConstant = ArrayUtil.take(
@@ -527,11 +592,6 @@ export namespace Metadata {
527
592
  for (const value of constant.values)
528
593
  ArrayUtil.add(target.values, value, (a, b) => a.value === b.value);
529
594
  }
530
- for (const obj of y.objects)
531
- ArrayUtil.set(output.objects, obj, (elem) => elem.type.name);
532
- for (const alias of y.aliases)
533
- ArrayUtil.set(output.aliases, alias, (elem) => elem.name);
534
-
535
595
  return output;
536
596
  };
537
597
  }
@@ -554,17 +614,16 @@ const getName = (metadata: Metadata): string => {
554
614
  for (const template of metadata.templates) elements.push(template.getName());
555
615
 
556
616
  // NATIVES
557
- for (const native of metadata.natives) elements.push(native);
558
- for (const set of metadata.sets) elements.push(`Set<${set.getName()}>`);
559
- for (const map of metadata.maps)
560
- elements.push(`Map<${map.key.getName()}, ${map.value.getName()}>`);
617
+ for (const native of metadata.natives) elements.push(native.getName());
618
+ for (const set of metadata.sets) elements.push(set.getName());
619
+ for (const map of metadata.maps) elements.push(map.getName());
561
620
 
562
621
  // INSTANCES
563
622
  if (metadata.rest !== null) elements.push(`...${metadata.rest.getName()}`);
564
623
  for (const tuple of metadata.tuples) elements.push(tuple.type.name);
565
624
  for (const array of metadata.arrays) elements.push(array.getName());
566
625
  for (const object of metadata.objects) elements.push(object.getName());
567
- for (const alias of metadata.aliases) elements.push(alias.name);
626
+ for (const alias of metadata.aliases) elements.push(alias.getName());
568
627
  if (metadata.escaped !== null) elements.push(metadata.escaped.getName());
569
628
 
570
629
  // RETURNS
@@ -574,12 +633,6 @@ const getName = (metadata: Metadata): string => {
574
633
  elements.sort();
575
634
  return `(${elements.join(" | ")})`;
576
635
  };
577
- export namespace Metadata {
578
- export interface Entry {
579
- key: Metadata;
580
- value: Metadata;
581
- }
582
- }
583
636
 
584
637
  const mergeTaggedTypes =
585
638
  <T>(props: {
@@ -1,61 +1,46 @@
1
- import { ClassProperties } from "../../typings/ClassProperties";
2
-
3
- import { IJsDocTagInfo } from "./IJsDocTagInfo";
4
- import { IMetadataAlias } from "./IMetadataAlias";
5
- import { Metadata } from "./Metadata";
6
-
7
- export class MetadataAlias {
8
- public readonly name: string;
9
- public readonly value: Metadata;
10
- public readonly description: string | null;
11
- public readonly jsDocTags: IJsDocTagInfo[];
12
- public readonly recursive: boolean;
13
- public readonly nullables: boolean[];
14
-
15
- /* -----------------------------------------------------------
16
- CONSTRUCTORS
17
- ----------------------------------------------------------- */
18
- /**
19
- * @hidden
20
- */
21
- private constructor(props: ClassProperties<MetadataAlias>) {
22
- this.name = props.name;
23
- this.value = props.value;
24
- this.description = props.description;
25
- this.jsDocTags = props.jsDocTags;
26
- this.recursive = props.recursive;
27
- this.nullables = props.nullables;
28
- }
29
-
30
- /**
31
- * @internal
32
- */
33
- public static create(props: ClassProperties<MetadataAlias>): MetadataAlias {
34
- return new MetadataAlias(props);
35
- }
36
-
37
- /**
38
- * @internal
39
- */
40
- public static _From_without_value(props: Omit<IMetadataAlias, "value">) {
41
- return MetadataAlias.create({
42
- name: props.name,
43
- value: null!,
44
- description: props.description,
45
- recursive: props.recursive,
46
- jsDocTags: props.jsDocTags.slice(),
47
- nullables: props.nullables.slice(),
48
- });
49
- }
50
-
51
- public toJSON(): IMetadataAlias {
52
- return {
53
- name: this.name,
54
- value: this.value.toJSON(),
55
- description: this.description,
56
- recursive: this.recursive,
57
- jsDocTags: this.jsDocTags.slice(),
58
- nullables: this.nullables.slice(),
59
- };
60
- }
61
- }
1
+ import { ClassProperties } from "../../typings/ClassProperties";
2
+
3
+ import { IMetadataAlias } from "./IMetadataAlias";
4
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
5
+ import { MetadataAliasType } from "./MetadataAliasType";
6
+
7
+ export class MetadataAlias {
8
+ public readonly type: MetadataAliasType;
9
+ public readonly tags: IMetadataTypeTag[][];
10
+ private name_?: string;
11
+
12
+ private constructor(props: ClassProperties<MetadataAlias>) {
13
+ this.type = props.type;
14
+ this.tags = props.tags;
15
+ this.type = props.type;
16
+ }
17
+
18
+ public static create(props: ClassProperties<MetadataAlias>): MetadataAlias {
19
+ return new MetadataAlias(props);
20
+ }
21
+
22
+ public getName(): string {
23
+ return (this.name_ ??= (() => {
24
+ if (this.tags.length === 0) return this.type.name;
25
+ else if (this.tags.length === 1) {
26
+ const str: string = [
27
+ this.type.name,
28
+ ...this.tags[0]!.map((t) => t.name),
29
+ ].join(" & ");
30
+ return `(${str})`;
31
+ }
32
+ const rows: string[] = this.tags.map((row) => {
33
+ const str: string = row.map((t) => t.name).join(" & ");
34
+ return row.length === 1 ? str : `(${str})`;
35
+ });
36
+ return `(${this.type.name} & (${rows.join(" | ")}))`;
37
+ })());
38
+ }
39
+
40
+ public toJSON(): IMetadataAlias {
41
+ return {
42
+ name: this.type.name,
43
+ tags: this.tags,
44
+ };
45
+ }
46
+ }
@@ -0,0 +1,63 @@
1
+ import { ClassProperties } from "../../typings/ClassProperties";
2
+
3
+ import { IJsDocTagInfo } from "./IJsDocTagInfo";
4
+ import { IMetadataAliasType } from "./IMetadataAliasType";
5
+ import { Metadata } from "./Metadata";
6
+
7
+ export class MetadataAliasType {
8
+ public readonly name: string;
9
+ public readonly value: Metadata;
10
+ public readonly description: string | null;
11
+ public readonly jsDocTags: IJsDocTagInfo[];
12
+ public readonly recursive: boolean;
13
+ public readonly nullables: boolean[];
14
+
15
+ /* -----------------------------------------------------------
16
+ CONSTRUCTORS
17
+ ----------------------------------------------------------- */
18
+ /**
19
+ * @hidden
20
+ */
21
+ private constructor(props: ClassProperties<MetadataAliasType>) {
22
+ this.name = props.name;
23
+ this.value = props.value;
24
+ this.description = props.description;
25
+ this.jsDocTags = props.jsDocTags;
26
+ this.recursive = props.recursive;
27
+ this.nullables = props.nullables;
28
+ }
29
+
30
+ /**
31
+ * @internal
32
+ */
33
+ public static create(
34
+ props: ClassProperties<MetadataAliasType>,
35
+ ): MetadataAliasType {
36
+ return new MetadataAliasType(props);
37
+ }
38
+
39
+ /**
40
+ * @internal
41
+ */
42
+ public static _From_without_value(props: Omit<IMetadataAliasType, "value">) {
43
+ return MetadataAliasType.create({
44
+ name: props.name,
45
+ value: null!,
46
+ description: props.description,
47
+ recursive: props.recursive,
48
+ jsDocTags: props.jsDocTags.slice(),
49
+ nullables: props.nullables.slice(),
50
+ });
51
+ }
52
+
53
+ public toJSON(): IMetadataAliasType {
54
+ return {
55
+ name: this.name,
56
+ value: this.value.toJSON(),
57
+ description: this.description,
58
+ recursive: this.recursive,
59
+ jsDocTags: this.jsDocTags.slice(),
60
+ nullables: this.nullables.slice(),
61
+ };
62
+ }
63
+ }