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,236 +1,236 @@
1
- import ts from "typescript";
2
-
3
- import { ArrayUtil } from "../../../utils/ArrayUtil";
4
-
5
- import { TypeFactory } from "../../TypeFactory";
6
- import { IMetadataIteratorProps } from "./IMetadataIteratorProps";
7
-
8
- export const iterate_metadata_native = (
9
- props: IMetadataIteratorProps,
10
- ): boolean => {
11
- const name: string = TypeFactory.getFullName({
12
- checker: props.checker,
13
- type: props.type,
14
- symbol: props.type.getSymbol(),
15
- });
16
- const simple: IClassInfo | undefined = SIMPLES.get(name);
17
- if (
18
- simple !== undefined &&
19
- validate({
20
- checker: props.checker,
21
- type: props.type,
22
- info: simple,
23
- })
24
- ) {
25
- ArrayUtil.set(props.metadata.natives, name, (str) => str);
26
- return true;
27
- }
28
-
29
- for (const generic of GENERICS)
30
- if (
31
- name.substring(0, generic.name.length) === generic.name &&
32
- validate({
33
- checker: props.checker,
34
- type: props.type,
35
- info: generic,
36
- })
37
- ) {
38
- ArrayUtil.set(props.metadata.natives, generic.name ?? name, (str) => str);
39
- return true;
40
- }
41
- return false;
42
- };
43
-
44
- const validate = (props: {
45
- checker: ts.TypeChecker;
46
- type: ts.Type;
47
- info: IClassInfo;
48
- }) =>
49
- (props.info.methods ?? []).every((method) => {
50
- const returnType = TypeFactory.getReturnTypeOfClassMethod({
51
- checker: props.checker,
52
- class: props.type,
53
- function: method.name,
54
- });
55
- return (
56
- returnType !== null &&
57
- props.checker.typeToString(returnType) === method.return
58
- );
59
- }) &&
60
- (props.info.properties ?? []).every((property) => {
61
- const prop = props.checker.getPropertyOfType(props.type, property.name);
62
- const propType = prop?.valueDeclaration
63
- ? props.checker.getTypeAtLocation(prop?.valueDeclaration)
64
- : undefined;
65
- return (
66
- propType !== undefined &&
67
- props.checker.typeToString(propType) === property.type
68
- );
69
- });
70
-
71
- const getBinaryProps = (className: string): IClassInfo => ({
72
- name: className,
73
- methods: [
74
- ...["indexOf", "lastIndexOf"].map((name) => ({
75
- name,
76
- return: "number",
77
- })),
78
- ...["some", "every"].map((name) => ({
79
- name,
80
- return: "boolean",
81
- })),
82
- ...["join", "toLocaleString"].map((name) => ({
83
- name,
84
- return: "string",
85
- })),
86
- ...["reverse", "slice", "subarray"].map((name) => ({
87
- name,
88
- return: className,
89
- })),
90
- ],
91
- properties: ["BYTES_PER_ELEMENT", "length", "byteLength", "byteOffset"].map(
92
- (name) => ({
93
- name,
94
- type: "number",
95
- }),
96
- ),
97
- });
98
- const SIMPLES: Map<string, IClassInfo> = new Map([
99
- [
100
- "Date",
101
- {
102
- methods: ["getTime", "getFullYear", "getMonth", "getMinutes"].map(
103
- (name) => ({
104
- name,
105
- return: "number",
106
- }),
107
- ),
108
- },
109
- ],
110
- [
111
- "Boolean",
112
- {
113
- methods: [
114
- {
115
- name: "valueOf",
116
- return: "boolean",
117
- },
118
- ],
119
- },
120
- ],
121
- [
122
- "Number",
123
- {
124
- methods: [
125
- ...["toFixed", "toExponential", "toPrecision"].map((name) => ({
126
- name,
127
- return: "string",
128
- })),
129
- { name: "valueOf", return: "number" },
130
- ],
131
- },
132
- ],
133
- [
134
- "String",
135
- {
136
- methods: [
137
- "charAt",
138
- "concat",
139
- "valueOf",
140
- "trim",
141
- "replace",
142
- "substring",
143
- ].map((name) => ({ name, return: "string" })),
144
- },
145
- ],
146
- ...[
147
- "Uint8Array",
148
- "Uint8ClampedArray",
149
- "Uint16Array",
150
- "Uint32Array",
151
- "BigUint64Array",
152
- "Int8Array",
153
- "Int16Array",
154
- "Int32Array",
155
- "BigInt64Array",
156
- "Float32Array",
157
- "Float64Array",
158
- ].map((name) => [name, getBinaryProps(name)] as const),
159
- ...["ArrayBuffer", "SharedArrayBuffer"].map((className) => {
160
- const info: IClassInfo = {
161
- methods: [{ name: "slice", return: className }],
162
- properties: [{ name: "byteLength", type: "number" }],
163
- };
164
- return [className, info] as const;
165
- }),
166
- ...["Blob", "File"].map(
167
- (className) =>
168
- [
169
- className,
170
- {
171
- methods: [
172
- { name: "arrayBuffer", return: "Promise<ArrayBuffer>" },
173
- { name: "slice", return: "Blob" },
174
- { name: "text", return: "Promise<string>" },
175
- ],
176
- properties: [
177
- { name: "size", type: "number" },
178
- { name: "type", type: "string" },
179
- ],
180
- },
181
- ] satisfies [string, IClassInfo],
182
- ),
183
- [
184
- "DataView",
185
- {
186
- methods: [
187
- "getFloat32",
188
- "getFloat64",
189
- "getInt8",
190
- "getInt16",
191
- "getInt32",
192
- "getUint8",
193
- "getUint16",
194
- "getUint32",
195
- ].map((name) => ({
196
- name,
197
- return: "number",
198
- })),
199
- },
200
- ],
201
- [
202
- "RegExp",
203
- {
204
- methods: [
205
- {
206
- name: "test",
207
- return: "boolean",
208
- },
209
- ],
210
- },
211
- ],
212
- ]);
213
- const GENERICS: Array<IClassInfo & { name: string }> = [
214
- "WeakMap",
215
- "WeakSet",
216
- ].map((name) => ({
217
- name,
218
- methods: ["has", "delete"].map((name) => ({
219
- name,
220
- return: "boolean",
221
- })),
222
- }));
223
-
224
- interface IClassInfo {
225
- name?: string;
226
- methods?: IMethod[];
227
- properties?: IProperty[];
228
- }
229
- interface IProperty {
230
- name: string;
231
- type: string;
232
- }
233
- interface IMethod {
234
- name: string;
235
- return: string;
236
- }
1
+ import ts from "typescript";
2
+
3
+ import { ArrayUtil } from "../../../utils/ArrayUtil";
4
+
5
+ import { TypeFactory } from "../../TypeFactory";
6
+ import { IMetadataIteratorProps } from "./IMetadataIteratorProps";
7
+
8
+ export const iterate_metadata_native = (
9
+ props: IMetadataIteratorProps,
10
+ ): boolean => {
11
+ const name: string = TypeFactory.getFullName({
12
+ checker: props.checker,
13
+ type: props.type,
14
+ symbol: props.type.getSymbol(),
15
+ });
16
+ const simple: IClassInfo | undefined = SIMPLES.get(name);
17
+ if (
18
+ simple !== undefined &&
19
+ validate({
20
+ checker: props.checker,
21
+ type: props.type,
22
+ info: simple,
23
+ })
24
+ ) {
25
+ ArrayUtil.set(props.metadata.natives, name, (str) => str);
26
+ return true;
27
+ }
28
+
29
+ for (const generic of GENERICS)
30
+ if (
31
+ name.substring(0, generic.name.length) === generic.name &&
32
+ validate({
33
+ checker: props.checker,
34
+ type: props.type,
35
+ info: generic,
36
+ })
37
+ ) {
38
+ ArrayUtil.set(props.metadata.natives, generic.name ?? name, (str) => str);
39
+ return true;
40
+ }
41
+ return false;
42
+ };
43
+
44
+ const validate = (props: {
45
+ checker: ts.TypeChecker;
46
+ type: ts.Type;
47
+ info: IClassInfo;
48
+ }) =>
49
+ (props.info.methods ?? []).every((method) => {
50
+ const returnType = TypeFactory.getReturnTypeOfClassMethod({
51
+ checker: props.checker,
52
+ class: props.type,
53
+ function: method.name,
54
+ });
55
+ return (
56
+ returnType !== null &&
57
+ props.checker.typeToString(returnType) === method.return
58
+ );
59
+ }) &&
60
+ (props.info.properties ?? []).every((property) => {
61
+ const prop = props.checker.getPropertyOfType(props.type, property.name);
62
+ const propType = prop?.valueDeclaration
63
+ ? props.checker.getTypeAtLocation(prop?.valueDeclaration)
64
+ : undefined;
65
+ return (
66
+ propType !== undefined &&
67
+ props.checker.typeToString(propType) === property.type
68
+ );
69
+ });
70
+
71
+ const getBinaryProps = (className: string): IClassInfo => ({
72
+ name: className,
73
+ methods: [
74
+ ...["indexOf", "lastIndexOf"].map((name) => ({
75
+ name,
76
+ return: "number",
77
+ })),
78
+ ...["some", "every"].map((name) => ({
79
+ name,
80
+ return: "boolean",
81
+ })),
82
+ ...["join", "toLocaleString"].map((name) => ({
83
+ name,
84
+ return: "string",
85
+ })),
86
+ ...["reverse", "slice", "subarray"].map((name) => ({
87
+ name,
88
+ return: className,
89
+ })),
90
+ ],
91
+ properties: ["BYTES_PER_ELEMENT", "length", "byteLength", "byteOffset"].map(
92
+ (name) => ({
93
+ name,
94
+ type: "number",
95
+ }),
96
+ ),
97
+ });
98
+ const SIMPLES: Map<string, IClassInfo> = new Map([
99
+ [
100
+ "Date",
101
+ {
102
+ methods: ["getTime", "getFullYear", "getMonth", "getMinutes"].map(
103
+ (name) => ({
104
+ name,
105
+ return: "number",
106
+ }),
107
+ ),
108
+ },
109
+ ],
110
+ [
111
+ "Boolean",
112
+ {
113
+ methods: [
114
+ {
115
+ name: "valueOf",
116
+ return: "boolean",
117
+ },
118
+ ],
119
+ },
120
+ ],
121
+ [
122
+ "Number",
123
+ {
124
+ methods: [
125
+ ...["toFixed", "toExponential", "toPrecision"].map((name) => ({
126
+ name,
127
+ return: "string",
128
+ })),
129
+ { name: "valueOf", return: "number" },
130
+ ],
131
+ },
132
+ ],
133
+ [
134
+ "String",
135
+ {
136
+ methods: [
137
+ "charAt",
138
+ "concat",
139
+ "valueOf",
140
+ "trim",
141
+ "replace",
142
+ "substring",
143
+ ].map((name) => ({ name, return: "string" })),
144
+ },
145
+ ],
146
+ ...[
147
+ "Uint8Array",
148
+ "Uint8ClampedArray",
149
+ "Uint16Array",
150
+ "Uint32Array",
151
+ "BigUint64Array",
152
+ "Int8Array",
153
+ "Int16Array",
154
+ "Int32Array",
155
+ "BigInt64Array",
156
+ "Float32Array",
157
+ "Float64Array",
158
+ ].map((name) => [name, getBinaryProps(name)] as const),
159
+ ...["ArrayBuffer", "SharedArrayBuffer"].map((className) => {
160
+ const info: IClassInfo = {
161
+ methods: [{ name: "slice", return: className }],
162
+ properties: [{ name: "byteLength", type: "number" }],
163
+ };
164
+ return [className, info] as const;
165
+ }),
166
+ ...["Blob", "File"].map(
167
+ (className) =>
168
+ [
169
+ className,
170
+ {
171
+ methods: [
172
+ { name: "arrayBuffer", return: "Promise<ArrayBuffer>" },
173
+ { name: "slice", return: "Blob" },
174
+ { name: "text", return: "Promise<string>" },
175
+ ],
176
+ properties: [
177
+ { name: "size", type: "number" },
178
+ { name: "type", type: "string" },
179
+ ],
180
+ },
181
+ ] satisfies [string, IClassInfo],
182
+ ),
183
+ [
184
+ "DataView",
185
+ {
186
+ methods: [
187
+ "getFloat32",
188
+ "getFloat64",
189
+ "getInt8",
190
+ "getInt16",
191
+ "getInt32",
192
+ "getUint8",
193
+ "getUint16",
194
+ "getUint32",
195
+ ].map((name) => ({
196
+ name,
197
+ return: "number",
198
+ })),
199
+ },
200
+ ],
201
+ [
202
+ "RegExp",
203
+ {
204
+ methods: [
205
+ {
206
+ name: "test",
207
+ return: "boolean",
208
+ },
209
+ ],
210
+ },
211
+ ],
212
+ ]);
213
+ const GENERICS: Array<IClassInfo & { name: string }> = [
214
+ "WeakMap",
215
+ "WeakSet",
216
+ ].map((name) => ({
217
+ name,
218
+ methods: ["has", "delete"].map((name) => ({
219
+ name,
220
+ return: "boolean",
221
+ })),
222
+ }));
223
+
224
+ interface IClassInfo {
225
+ name?: string;
226
+ methods?: IMethod[];
227
+ properties?: IProperty[];
228
+ }
229
+ interface IProperty {
230
+ name: string;
231
+ type: string;
232
+ }
233
+ interface IMethod {
234
+ name: string;
235
+ return: string;
236
+ }
@@ -1,27 +1,35 @@
1
- import ts from "typescript";
2
-
3
- import { MetadataObject } from "../../../schemas/metadata/MetadataObject";
4
-
5
- import { ArrayUtil } from "../../../utils/ArrayUtil";
6
-
7
- import { IMetadataIteratorProps } from "./IMetadataIteratorProps";
8
- import { emplace_metadata_object } from "./emplace_metadata_object";
9
-
10
- export const iterate_metadata_object = (
11
- props: IMetadataIteratorProps,
12
- ensure: boolean = false,
13
- ): boolean => {
14
- if (ensure === false) {
15
- const filter = (flag: ts.TypeFlags) => (props.type.getFlags() & flag) !== 0;
16
- if (
17
- !filter(ts.TypeFlags.Object) &&
18
- !props.type.isIntersection() &&
19
- (props.type as any).intrinsicName !== "object"
20
- )
21
- return false;
22
- }
23
-
24
- const obj: MetadataObject = emplace_metadata_object(props);
25
- ArrayUtil.add(props.metadata.objects, obj, (elem) => elem.name === obj.name);
26
- return true;
27
- };
1
+ import ts from "typescript";
2
+
3
+ import { MetadataObject } from "../../../schemas/metadata/MetadataObject";
4
+ import { MetadataObjectType } from "../../../schemas/metadata/MetadataObjectType";
5
+
6
+ import { ArrayUtil } from "../../../utils/ArrayUtil";
7
+
8
+ import { IMetadataIteratorProps } from "./IMetadataIteratorProps";
9
+ import { emplace_metadata_object } from "./emplace_metadata_object";
10
+
11
+ export const iterate_metadata_object = (
12
+ props: IMetadataIteratorProps,
13
+ ensure: boolean = false,
14
+ ): boolean => {
15
+ if (ensure === false) {
16
+ const filter = (flag: ts.TypeFlags) => (props.type.getFlags() & flag) !== 0;
17
+ if (
18
+ !filter(ts.TypeFlags.Object) &&
19
+ !props.type.isIntersection() &&
20
+ (props.type as any).intrinsicName !== "object"
21
+ )
22
+ return false;
23
+ }
24
+
25
+ const obj: MetadataObjectType = emplace_metadata_object(props);
26
+ ArrayUtil.add(
27
+ props.metadata.objects,
28
+ MetadataObject.create({
29
+ type: obj,
30
+ tags: [],
31
+ }),
32
+ (elem) => elem.type.name === obj.name,
33
+ );
34
+ return true;
35
+ };
@@ -1,39 +1,39 @@
1
- import ts from "typescript";
2
-
3
- import { ArrayUtil } from "../../../utils/ArrayUtil";
4
-
5
- import { TypeFactory } from "../../TypeFactory";
6
- import { IMetadataIteratorProps } from "./IMetadataIteratorProps";
7
- import { explore_metadata } from "./explore_metadata";
8
-
9
- export const iterate_metadata_set = (
10
- props: IMetadataIteratorProps,
11
- ): boolean => {
12
- const type: ts.Type = props.checker.getApparentType(props.type);
13
-
14
- const name = TypeFactory.getFullName({
15
- checker: props.checker,
16
- type: type,
17
- symbol: type.getSymbol(),
18
- });
19
- const generic = type.aliasSymbol
20
- ? type.aliasTypeArguments
21
- : props.checker.getTypeArguments(type as ts.TypeReference);
22
- if (name.substring(0, 4) !== "Set<" || generic?.length !== 1) return false;
23
-
24
- const key: ts.Type = generic[0]!;
25
- ArrayUtil.set(
26
- props.metadata.sets,
27
- explore_metadata({
28
- ...props,
29
- type: key,
30
- explore: {
31
- ...props.explore,
32
- escaped: false,
33
- aliased: false,
34
- },
35
- }),
36
- (elem) => elem.getName(),
37
- );
38
- return true;
39
- };
1
+ import ts from "typescript";
2
+
3
+ import { ArrayUtil } from "../../../utils/ArrayUtil";
4
+
5
+ import { TypeFactory } from "../../TypeFactory";
6
+ import { IMetadataIteratorProps } from "./IMetadataIteratorProps";
7
+ import { explore_metadata } from "./explore_metadata";
8
+
9
+ export const iterate_metadata_set = (
10
+ props: IMetadataIteratorProps,
11
+ ): boolean => {
12
+ const type: ts.Type = props.checker.getApparentType(props.type);
13
+
14
+ const name = TypeFactory.getFullName({
15
+ checker: props.checker,
16
+ type: type,
17
+ symbol: type.getSymbol(),
18
+ });
19
+ const generic = type.aliasSymbol
20
+ ? type.aliasTypeArguments
21
+ : props.checker.getTypeArguments(type as ts.TypeReference);
22
+ if (name.substring(0, 4) !== "Set<" || generic?.length !== 1) return false;
23
+
24
+ const key: ts.Type = generic[0]!;
25
+ ArrayUtil.set(
26
+ props.metadata.sets,
27
+ explore_metadata({
28
+ ...props,
29
+ type: key,
30
+ explore: {
31
+ ...props.explore,
32
+ escaped: false,
33
+ aliased: false,
34
+ },
35
+ }),
36
+ (elem) => elem.getName(),
37
+ );
38
+ return true;
39
+ };