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,278 +1,280 @@
1
- import ts from "typescript";
2
-
3
- import { IMetadataComponents } from "../schemas/metadata/IMetadataComponents";
4
- import { Metadata } from "../schemas/metadata/Metadata";
5
- import { MetadataAlias } from "../schemas/metadata/MetadataAlias";
6
- import { MetadataArrayType } from "../schemas/metadata/MetadataArrayType";
7
- import { MetadataObject } from "../schemas/metadata/MetadataObject";
8
- import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
9
-
10
- import { Writable } from "../typings/Writable";
11
-
12
- import { MapUtil } from "../utils/MapUtil";
13
-
14
- import { CommentFactory } from "./CommentFactory";
15
- import { TypeFactory } from "./TypeFactory";
16
-
17
- export class MetadataCollection {
18
- private objects_: Map<ts.Type, MetadataObject>;
19
- private object_unions_: Map<string, MetadataObject[]>;
20
- private aliases_: Map<ts.Type, MetadataAlias>;
21
- private arrays_: Map<ts.Type, MetadataArrayType>;
22
- private tuples_: Map<ts.Type, MetadataTupleType>;
23
-
24
- private names_: Map<string, Map<ts.Type, string>>;
25
- private object_index_: number;
26
- private recursive_array_index_: number;
27
- private recursive_tuple_index_: number;
28
-
29
- public constructor(
30
- private readonly options?: Partial<MetadataCollection.IOptions>,
31
- ) {
32
- this.objects_ = new Map();
33
- this.object_unions_ = new Map();
34
- this.aliases_ = new Map();
35
- this.arrays_ = new Map();
36
- this.tuples_ = new Map();
37
-
38
- this.names_ = new Map();
39
- this.object_index_ = 0;
40
- this.recursive_array_index_ = 0;
41
- this.recursive_tuple_index_ = 0;
42
- }
43
-
44
- public clone(): MetadataCollection {
45
- const output: MetadataCollection = new MetadataCollection();
46
- output.objects_ = new Map(this.objects_);
47
- output.object_unions_ = new Map(this.object_unions_);
48
- output.aliases_ = new Map(this.aliases_);
49
- output.arrays_ = new Map(this.arrays_);
50
- output.tuples_ = new Map(this.tuples_);
51
- output.names_ = new Map(this.names_);
52
- output.object_index_ = this.object_index_;
53
- output.recursive_array_index_ = this.recursive_array_index_;
54
- output.recursive_tuple_index_ = this.recursive_tuple_index_;
55
- return output;
56
- }
57
-
58
- /* -----------------------------------------------------------
59
- ACCESSORS
60
- ----------------------------------------------------------- */
61
- public aliases(): MetadataAlias[] {
62
- return [...this.aliases_.values()];
63
- }
64
-
65
- public objects(): MetadataObject[] {
66
- return [...this.objects_.values()];
67
- }
68
-
69
- public unions(): MetadataObject[][] {
70
- return [...this.object_unions_.values()];
71
- }
72
-
73
- public arrays(): MetadataArrayType[] {
74
- return [...this.arrays_.values()];
75
- }
76
-
77
- public tuples(): MetadataTupleType[] {
78
- return [...this.tuples_.values()];
79
- }
80
-
81
- private getName(checker: ts.TypeChecker, type: ts.Type): string {
82
- const name: string = (() => {
83
- const str: string = TypeFactory.getFullName({
84
- checker,
85
- type,
86
- });
87
- return this.options?.replace ? this.options.replace(str) : str;
88
- })();
89
-
90
- const duplicates: Map<ts.Type, string> = MapUtil.take(
91
- this.names_,
92
- name,
93
- () => new Map(),
94
- );
95
- const oldbie: string | undefined = duplicates.get(type);
96
- if (oldbie !== undefined) return oldbie;
97
-
98
- const addicted: string = duplicates.size
99
- ? `${name}.o${duplicates.size}`
100
- : name;
101
- duplicates.set(type, addicted);
102
- return addicted;
103
- }
104
-
105
- /**
106
- * @internal
107
- */
108
- public getUnionIndex(meta: Metadata): number {
109
- const key: string = meta.objects.map((obj) => obj.name).join(" | ");
110
- MapUtil.take(this.object_unions_, key, () => meta.objects);
111
- return [...this.object_unions_.keys()].indexOf(key);
112
- }
113
-
114
- /* -----------------------------------------------------------
115
- INSTANCES
116
- ----------------------------------------------------------- */
117
- public emplace(
118
- checker: ts.TypeChecker,
119
- type: ts.Type,
120
- ): [MetadataObject, boolean] {
121
- const oldbie = this.objects_.get(type);
122
- if (oldbie !== undefined) return [oldbie, false];
123
-
124
- const $id: string = this.getName(checker, type);
125
- const obj: MetadataObject = MetadataObject.create({
126
- name: $id,
127
- properties: [],
128
- description:
129
- (type.aliasSymbol && CommentFactory.description(type.aliasSymbol)) ??
130
- (type.symbol && CommentFactory.description(type.symbol)) ??
131
- undefined,
132
- jsDocTags:
133
- type.aliasSymbol?.getJsDocTags() ?? type.symbol?.getJsDocTags() ?? [],
134
- validated: false,
135
- index: this.object_index_++,
136
- recursive: null!,
137
- nullables: [],
138
- });
139
- this.objects_.set(type, obj);
140
- return [obj, true];
141
- }
142
-
143
- public emplaceAlias(
144
- checker: ts.TypeChecker,
145
- type: ts.Type,
146
- symbol: ts.Symbol,
147
- ): [MetadataAlias, boolean, (meta: Metadata) => void] {
148
- const oldbie = this.aliases_.get(type);
149
- if (oldbie !== undefined) return [oldbie, false, () => {}];
150
-
151
- const $id: string = this.getName(checker, type);
152
- const alias: MetadataAlias = MetadataAlias.create({
153
- name: $id,
154
- value: null!,
155
- description: CommentFactory.description(symbol) ?? null,
156
- recursive: null!,
157
- nullables: [],
158
- jsDocTags: symbol.getJsDocTags() ?? [],
159
- });
160
- this.aliases_.set(type, alias);
161
- return [alias, true, (meta) => (Writable(alias).value = meta)];
162
- }
163
-
164
- public emplaceArray(
165
- checker: ts.TypeChecker,
166
- type: ts.Type,
167
- ): [MetadataArrayType, boolean, (meta: Metadata) => void] {
168
- const oldbie = this.arrays_.get(type);
169
- if (oldbie !== undefined) return [oldbie, false, () => {}];
170
-
171
- const $id = this.getName(checker, type);
172
- const array: MetadataArrayType = MetadataArrayType.create({
173
- name: $id,
174
- value: null!,
175
- index: null,
176
- recursive: null!,
177
- nullables: [],
178
- });
179
- this.arrays_.set(type, array);
180
- return [array, true, (meta) => (Writable(array).value = meta)];
181
- }
182
-
183
- public emplaceTuple(
184
- checker: ts.TypeChecker,
185
- type: ts.TupleType,
186
- ): [MetadataTupleType, boolean, (elements: Metadata[]) => void] {
187
- const oldbie = this.tuples_.get(type);
188
- if (oldbie !== undefined) return [oldbie, false, () => {}];
189
-
190
- const $id = this.getName(checker, type);
191
- const tuple: MetadataTupleType = MetadataTupleType.create({
192
- name: $id,
193
- elements: null!,
194
- index: null,
195
- recursive: null!,
196
- nullables: [],
197
- });
198
- this.tuples_.set(type, tuple);
199
- return [tuple, true, (elements) => (Writable(tuple).elements = elements)];
200
- }
201
-
202
- /**
203
- * @internal
204
- */
205
- public setObjectRecursive(obj: MetadataObject, recursive: boolean): void {
206
- Writable(obj).recursive = recursive;
207
- }
208
-
209
- /**
210
- * @internal
211
- */
212
- public setAliasRecursive(alias: MetadataAlias, recursive: boolean): void {
213
- Writable(alias).recursive = recursive;
214
- }
215
-
216
- /**
217
- * @internal
218
- */
219
- public setArrayRecursive(array: MetadataArrayType, recursive: boolean): void {
220
- Writable(array).recursive = recursive;
221
- if (recursive) Writable(array).index = this.recursive_array_index_++;
222
- }
223
-
224
- public setTupleRecursive(tuple: MetadataTupleType, recursive: boolean): void {
225
- Writable(tuple).recursive = recursive;
226
- if (recursive) Writable(tuple).index = this.recursive_tuple_index_++;
227
- }
228
-
229
- public toJSON(): IMetadataComponents {
230
- return {
231
- objects: this.objects().map((o) => o.toJSON()),
232
- aliases: this.aliases().map((d) => d.toJSON()),
233
- arrays: [...this.arrays_.values()].map((a) => a.toJSON()),
234
- tuples: [...this.tuples_.values()].map((t) => t.toJSON()),
235
- };
236
- }
237
- }
238
- export namespace MetadataCollection {
239
- export interface IOptions {
240
- replace?(str: string): string;
241
- }
242
-
243
- export const replace = (str: string): string => {
244
- let replaced: string = str;
245
- for (const [before] of REPLACERS)
246
- replaced = replaced.split(before).join("");
247
- if (replaced.length !== 0) return replaced;
248
-
249
- for (const [before, after] of REPLACERS)
250
- str = str.split(before).join(after);
251
- return str;
252
- };
253
-
254
- export const escape = (str: string): string => {
255
- for (const [before, after] of REPLACERS)
256
- if (after !== "") str = str.split(after).join(before);
257
- return str;
258
- };
259
- }
260
- const REPLACERS: [string, string][] = [
261
- ["$", "_dollar_"],
262
- ["&", "_and_"],
263
- ["|", "_or_"],
264
- ["{", "_blt_"],
265
- ["}", "_bgt_"],
266
- ["<", "_lt_"],
267
- [">", "_gt_"],
268
- ["[", "_alt_"],
269
- ["]", "_agt_"],
270
- [",", "_comma_"],
271
- ["`", "_backquote_"],
272
- ["'", "_singlequote_"],
273
- ['"', "_doublequote_"],
274
- [" ", "_space_"],
275
- ["?", "_question_"],
276
- [":", "_colon_"],
277
- [";", "_semicolon_"],
278
- ];
1
+ import ts from "typescript";
2
+
3
+ import { IMetadataComponents } from "../schemas/metadata/IMetadataComponents";
4
+ import { Metadata } from "../schemas/metadata/Metadata";
5
+ import { MetadataAlias } from "../schemas/metadata/MetadataAlias";
6
+ import { MetadataArrayType } from "../schemas/metadata/MetadataArrayType";
7
+ import { MetadataObjectType } from "../schemas/metadata/MetadataObjectType";
8
+ import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
9
+
10
+ import { Writable } from "../typings/Writable";
11
+
12
+ import { MapUtil } from "../utils/MapUtil";
13
+
14
+ import { CommentFactory } from "./CommentFactory";
15
+ import { TypeFactory } from "./TypeFactory";
16
+
17
+ export class MetadataCollection {
18
+ private objects_: Map<ts.Type, MetadataObjectType>;
19
+ private object_unions_: Map<string, MetadataObjectType[]>;
20
+ private aliases_: Map<ts.Type, MetadataAlias>;
21
+ private arrays_: Map<ts.Type, MetadataArrayType>;
22
+ private tuples_: Map<ts.Type, MetadataTupleType>;
23
+
24
+ private names_: Map<string, Map<ts.Type, string>>;
25
+ private object_index_: number;
26
+ private recursive_array_index_: number;
27
+ private recursive_tuple_index_: number;
28
+
29
+ public constructor(
30
+ private readonly options?: Partial<MetadataCollection.IOptions>,
31
+ ) {
32
+ this.objects_ = new Map();
33
+ this.object_unions_ = new Map();
34
+ this.aliases_ = new Map();
35
+ this.arrays_ = new Map();
36
+ this.tuples_ = new Map();
37
+
38
+ this.names_ = new Map();
39
+ this.object_index_ = 0;
40
+ this.recursive_array_index_ = 0;
41
+ this.recursive_tuple_index_ = 0;
42
+ }
43
+
44
+ public clone(): MetadataCollection {
45
+ const output: MetadataCollection = new MetadataCollection();
46
+ output.objects_ = new Map(this.objects_);
47
+ output.object_unions_ = new Map(this.object_unions_);
48
+ output.aliases_ = new Map(this.aliases_);
49
+ output.arrays_ = new Map(this.arrays_);
50
+ output.tuples_ = new Map(this.tuples_);
51
+ output.names_ = new Map(this.names_);
52
+ output.object_index_ = this.object_index_;
53
+ output.recursive_array_index_ = this.recursive_array_index_;
54
+ output.recursive_tuple_index_ = this.recursive_tuple_index_;
55
+ return output;
56
+ }
57
+
58
+ /* -----------------------------------------------------------
59
+ ACCESSORS
60
+ ----------------------------------------------------------- */
61
+ public aliases(): MetadataAlias[] {
62
+ return [...this.aliases_.values()];
63
+ }
64
+
65
+ public objects(): MetadataObjectType[] {
66
+ return [...this.objects_.values()];
67
+ }
68
+
69
+ public unions(): MetadataObjectType[][] {
70
+ return [...this.object_unions_.values()];
71
+ }
72
+
73
+ public arrays(): MetadataArrayType[] {
74
+ return [...this.arrays_.values()];
75
+ }
76
+
77
+ public tuples(): MetadataTupleType[] {
78
+ return [...this.tuples_.values()];
79
+ }
80
+
81
+ private getName(checker: ts.TypeChecker, type: ts.Type): string {
82
+ const name: string = (() => {
83
+ const str: string = TypeFactory.getFullName({
84
+ checker,
85
+ type,
86
+ });
87
+ return this.options?.replace ? this.options.replace(str) : str;
88
+ })();
89
+
90
+ const duplicates: Map<ts.Type, string> = MapUtil.take(
91
+ this.names_,
92
+ name,
93
+ () => new Map(),
94
+ );
95
+ const oldbie: string | undefined = duplicates.get(type);
96
+ if (oldbie !== undefined) return oldbie;
97
+
98
+ const addicted: string = duplicates.size
99
+ ? `${name}.o${duplicates.size}`
100
+ : name;
101
+ duplicates.set(type, addicted);
102
+ return addicted;
103
+ }
104
+
105
+ /**
106
+ * @internal
107
+ */
108
+ public getUnionIndex(meta: Metadata): number {
109
+ const key: string = meta.objects.map((obj) => obj.type.name).join(" | ");
110
+ MapUtil.take(this.object_unions_, key, () =>
111
+ meta.objects.map((o) => o.type),
112
+ );
113
+ return [...this.object_unions_.keys()].indexOf(key);
114
+ }
115
+
116
+ /* -----------------------------------------------------------
117
+ INSTANCES
118
+ ----------------------------------------------------------- */
119
+ public emplace(
120
+ checker: ts.TypeChecker,
121
+ type: ts.Type,
122
+ ): [MetadataObjectType, boolean] {
123
+ const oldbie = this.objects_.get(type);
124
+ if (oldbie !== undefined) return [oldbie, false];
125
+
126
+ const $id: string = this.getName(checker, type);
127
+ const obj: MetadataObjectType = MetadataObjectType.create({
128
+ name: $id,
129
+ properties: [],
130
+ description:
131
+ (type.aliasSymbol && CommentFactory.description(type.aliasSymbol)) ??
132
+ (type.symbol && CommentFactory.description(type.symbol)) ??
133
+ undefined,
134
+ jsDocTags:
135
+ type.aliasSymbol?.getJsDocTags() ?? type.symbol?.getJsDocTags() ?? [],
136
+ validated: false,
137
+ index: this.object_index_++,
138
+ recursive: null!,
139
+ nullables: [],
140
+ });
141
+ this.objects_.set(type, obj);
142
+ return [obj, true];
143
+ }
144
+
145
+ public emplaceAlias(
146
+ checker: ts.TypeChecker,
147
+ type: ts.Type,
148
+ symbol: ts.Symbol,
149
+ ): [MetadataAlias, boolean, (meta: Metadata) => void] {
150
+ const oldbie = this.aliases_.get(type);
151
+ if (oldbie !== undefined) return [oldbie, false, () => {}];
152
+
153
+ const $id: string = this.getName(checker, type);
154
+ const alias: MetadataAlias = MetadataAlias.create({
155
+ name: $id,
156
+ value: null!,
157
+ description: CommentFactory.description(symbol) ?? null,
158
+ recursive: null!,
159
+ nullables: [],
160
+ jsDocTags: symbol.getJsDocTags() ?? [],
161
+ });
162
+ this.aliases_.set(type, alias);
163
+ return [alias, true, (meta) => (Writable(alias).value = meta)];
164
+ }
165
+
166
+ public emplaceArray(
167
+ checker: ts.TypeChecker,
168
+ type: ts.Type,
169
+ ): [MetadataArrayType, boolean, (meta: Metadata) => void] {
170
+ const oldbie = this.arrays_.get(type);
171
+ if (oldbie !== undefined) return [oldbie, false, () => {}];
172
+
173
+ const $id = this.getName(checker, type);
174
+ const array: MetadataArrayType = MetadataArrayType.create({
175
+ name: $id,
176
+ value: null!,
177
+ index: null,
178
+ recursive: null!,
179
+ nullables: [],
180
+ });
181
+ this.arrays_.set(type, array);
182
+ return [array, true, (meta) => (Writable(array).value = meta)];
183
+ }
184
+
185
+ public emplaceTuple(
186
+ checker: ts.TypeChecker,
187
+ type: ts.TupleType,
188
+ ): [MetadataTupleType, boolean, (elements: Metadata[]) => void] {
189
+ const oldbie = this.tuples_.get(type);
190
+ if (oldbie !== undefined) return [oldbie, false, () => {}];
191
+
192
+ const $id = this.getName(checker, type);
193
+ const tuple: MetadataTupleType = MetadataTupleType.create({
194
+ name: $id,
195
+ elements: null!,
196
+ index: null,
197
+ recursive: null!,
198
+ nullables: [],
199
+ });
200
+ this.tuples_.set(type, tuple);
201
+ return [tuple, true, (elements) => (Writable(tuple).elements = elements)];
202
+ }
203
+
204
+ /**
205
+ * @internal
206
+ */
207
+ public setObjectRecursive(obj: MetadataObjectType, recursive: boolean): void {
208
+ Writable(obj).recursive = recursive;
209
+ }
210
+
211
+ /**
212
+ * @internal
213
+ */
214
+ public setAliasRecursive(alias: MetadataAlias, recursive: boolean): void {
215
+ Writable(alias).recursive = recursive;
216
+ }
217
+
218
+ /**
219
+ * @internal
220
+ */
221
+ public setArrayRecursive(array: MetadataArrayType, recursive: boolean): void {
222
+ Writable(array).recursive = recursive;
223
+ if (recursive) Writable(array).index = this.recursive_array_index_++;
224
+ }
225
+
226
+ public setTupleRecursive(tuple: MetadataTupleType, recursive: boolean): void {
227
+ Writable(tuple).recursive = recursive;
228
+ if (recursive) Writable(tuple).index = this.recursive_tuple_index_++;
229
+ }
230
+
231
+ public toJSON(): IMetadataComponents {
232
+ return {
233
+ objects: this.objects().map((o) => o.toJSON()),
234
+ aliases: this.aliases().map((d) => d.toJSON()),
235
+ arrays: [...this.arrays_.values()].map((a) => a.toJSON()),
236
+ tuples: [...this.tuples_.values()].map((t) => t.toJSON()),
237
+ };
238
+ }
239
+ }
240
+ export namespace MetadataCollection {
241
+ export interface IOptions {
242
+ replace?(str: string): string;
243
+ }
244
+
245
+ export const replace = (str: string): string => {
246
+ let replaced: string = str;
247
+ for (const [before] of REPLACERS)
248
+ replaced = replaced.split(before).join("");
249
+ if (replaced.length !== 0) return replaced;
250
+
251
+ for (const [before, after] of REPLACERS)
252
+ str = str.split(before).join(after);
253
+ return str;
254
+ };
255
+
256
+ export const escape = (str: string): string => {
257
+ for (const [before, after] of REPLACERS)
258
+ if (after !== "") str = str.split(after).join(before);
259
+ return str;
260
+ };
261
+ }
262
+ const REPLACERS: [string, string][] = [
263
+ ["$", "_dollar_"],
264
+ ["&", "_and_"],
265
+ ["|", "_or_"],
266
+ ["{", "_blt_"],
267
+ ["}", "_bgt_"],
268
+ ["<", "_lt_"],
269
+ [">", "_gt_"],
270
+ ["[", "_alt_"],
271
+ ["]", "_agt_"],
272
+ [",", "_comma_"],
273
+ ["`", "_backquote_"],
274
+ ["'", "_singlequote_"],
275
+ ['"', "_doublequote_"],
276
+ [" ", "_space_"],
277
+ ["?", "_question_"],
278
+ [":", "_colon_"],
279
+ [";", "_semicolon_"],
280
+ ];
@@ -6,6 +6,7 @@ import { MetadataArrayType } from "../schemas/metadata/MetadataArrayType";
6
6
  import { MetadataConstant } from "../schemas/metadata/MetadataConstant";
7
7
  import { MetadataFunction } from "../schemas/metadata/MetadataFunction";
8
8
  import { MetadataObject } from "../schemas/metadata/MetadataObject";
9
+ import { MetadataObjectType } from "../schemas/metadata/MetadataObjectType";
9
10
  import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
10
11
  import { explore_metadata } from "./internal/metadata/explore_metadata";
11
12
  import { iterate_metadata_collection } from "./internal/metadata/iterate_metadata_collection";
@@ -36,7 +37,7 @@ export namespace MetadataFactory {
36
37
  }
37
38
  export interface IExplore {
38
39
  top: boolean;
39
- object: MetadataObject | null;
40
+ object: MetadataObjectType | null;
40
41
  property: string | object | null;
41
42
  nested: null | MetadataAlias | MetadataArrayType | MetadataTupleType;
42
43
  parameter: string | null;
@@ -200,7 +201,7 @@ export namespace MetadataFactory {
200
201
  for (const object of props.metadata.objects)
201
202
  validateObject({
202
203
  ...props,
203
- object,
204
+ object: object.type,
204
205
  });
205
206
  for (const func of props.metadata.functions)
206
207
  validateFunction({
@@ -302,7 +303,7 @@ export namespace MetadataFactory {
302
303
  transformer?: ts.TransformationContext;
303
304
  options: IOptions;
304
305
  visitor: IValidationVisitor;
305
- object: MetadataObject;
306
+ object: MetadataObjectType;
306
307
  }) => {
307
308
  if (props.visitor.objects.has(props.object)) return;
308
309
  props.visitor.objects.add(props.object);
@@ -321,7 +322,12 @@ export namespace MetadataFactory {
321
322
  const errors: string[] = props.options.validate(
322
323
  Metadata.create({
323
324
  ...Metadata.initialize(),
324
- objects: [props.object],
325
+ objects: [
326
+ MetadataObject.create({
327
+ type: props.object,
328
+ tags: [],
329
+ }),
330
+ ],
325
331
  }),
326
332
  explore,
327
333
  );
@@ -391,7 +397,7 @@ export namespace MetadataFactory {
391
397
  interface IValidationVisitor {
392
398
  functor: Validator;
393
399
  errors: IError[];
394
- objects: Set<MetadataObject>;
400
+ objects: Set<MetadataObjectType>;
395
401
  arrays: Set<MetadataArrayType>;
396
402
  tuples: Set<MetadataTupleType>;
397
403
  aliases: Set<MetadataAlias>;