typia 4.3.2-dev.20230821 → 4.3.3-dev.20230825

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 (241) hide show
  1. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +2 -0
  2. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  3. package/lib/programmers/helpers/CloneJoiner.js +10 -2
  4. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  5. package/lib/programmers/internal/check_dynamic_properties.js +1 -1
  6. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  7. package/package.json +2 -2
  8. package/src/CustomValidatorMap.ts +126 -126
  9. package/src/IRandomGenerator.ts +34 -34
  10. package/src/IValidation.ts +21 -21
  11. package/src/Primitive.ts +131 -131
  12. package/src/TypeGuardError.ts +36 -36
  13. package/src/executable/TypiaGenerateWizard.ts +85 -85
  14. package/src/executable/TypiaSetupWizard.ts +153 -153
  15. package/src/executable/setup/ArgumentParser.ts +45 -45
  16. package/src/executable/setup/CommandExecutor.ts +8 -8
  17. package/src/executable/setup/FileRetriever.ts +22 -22
  18. package/src/executable/setup/PackageManager.ts +71 -71
  19. package/src/executable/setup/PluginConfigurator.ts +70 -70
  20. package/src/executable/typia.ts +52 -52
  21. package/src/factories/CommentFactory.ts +84 -84
  22. package/src/factories/ExpressionFactory.ts +77 -77
  23. package/src/factories/IdentifierFactory.ts +59 -59
  24. package/src/factories/LiteralFactory.ts +39 -39
  25. package/src/factories/MetadataCollection.ts +269 -269
  26. package/src/factories/MetadataFactory.ts +34 -34
  27. package/src/factories/MetadataTagFactory.ts +361 -361
  28. package/src/factories/StatementFactory.ts +24 -24
  29. package/src/factories/TemplateFactory.ts +58 -58
  30. package/src/factories/TypeFactory.ts +124 -124
  31. package/src/factories/ValueFactory.ts +12 -12
  32. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  33. package/src/factories/internal/metadata/emend_metadata_atomics.ts +33 -33
  34. package/src/factories/internal/metadata/emplace_metadata_alias.ts +40 -40
  35. package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -34
  36. package/src/factories/internal/metadata/emplace_metadata_object.ts +136 -136
  37. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +50 -50
  38. package/src/factories/internal/metadata/explore_metadata.ts +38 -38
  39. package/src/factories/internal/metadata/iterate_metadata.ts +81 -81
  40. package/src/factories/internal/metadata/iterate_metadata_alias.ts +30 -30
  41. package/src/factories/internal/metadata/iterate_metadata_array.ts +24 -24
  42. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  43. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  44. package/src/factories/internal/metadata/iterate_metadata_collection.ts +133 -133
  45. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  46. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +88 -84
  47. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  48. package/src/factories/internal/metadata/iterate_metadata_native.ts +219 -219
  49. package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -43
  50. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -49
  51. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  52. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  53. package/src/factories/internal/metadata/iterate_metadata_tag.ts +31 -31
  54. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  55. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +24 -24
  56. package/src/factories/internal/metadata/iterate_metadata_union.ts +24 -24
  57. package/src/functional/$any.ts +2 -2
  58. package/src/functional/$dictionary.ts +25 -25
  59. package/src/functional/$every.ts +11 -11
  60. package/src/functional/$guard.ts +35 -35
  61. package/src/functional/$is_between.ts +2 -2
  62. package/src/functional/$is_custom.ts +14 -14
  63. package/src/functional/$is_date.ts +3 -3
  64. package/src/functional/$is_datetime.ts +2 -2
  65. package/src/functional/$is_email.ts +4 -4
  66. package/src/functional/$is_ipv4.ts +4 -4
  67. package/src/functional/$is_ipv6.ts +4 -4
  68. package/src/functional/$is_url.ts +4 -4
  69. package/src/functional/$is_uuid.ts +4 -4
  70. package/src/functional/$join.ts +46 -46
  71. package/src/functional/$number.ts +12 -12
  72. package/src/functional/$report.ts +15 -15
  73. package/src/functional/$rest.ts +3 -3
  74. package/src/functional/$string.ts +50 -50
  75. package/src/functional/$tail.ts +5 -5
  76. package/src/functional/Namespace.ts +127 -127
  77. package/src/index.ts +4 -4
  78. package/src/metadata/ICommentTag.ts +4 -4
  79. package/src/metadata/IJsDocTagInfo.ts +10 -10
  80. package/src/metadata/IMetadata.ts +28 -28
  81. package/src/metadata/IMetadataAlias.ts +14 -14
  82. package/src/metadata/IMetadataApplication.ts +7 -7
  83. package/src/metadata/IMetadataArray.ts +10 -10
  84. package/src/metadata/IMetadataCollection.ts +11 -11
  85. package/src/metadata/IMetadataConstant.ts +16 -16
  86. package/src/metadata/IMetadataDictionary.ts +14 -14
  87. package/src/metadata/IMetadataEntry.ts +6 -6
  88. package/src/metadata/IMetadataObject.ts +18 -18
  89. package/src/metadata/IMetadataProperty.ts +11 -11
  90. package/src/metadata/IMetadataResolved.ts +6 -6
  91. package/src/metadata/IMetadataTag.ts +112 -112
  92. package/src/metadata/IMetadataTuple.ts +10 -10
  93. package/src/metadata/Metadata.ts +607 -607
  94. package/src/metadata/MetadataAlias.ts +66 -66
  95. package/src/metadata/MetadataArray.ts +55 -55
  96. package/src/metadata/MetadataConstant.ts +3 -3
  97. package/src/metadata/MetadataObject.ts +129 -129
  98. package/src/metadata/MetadataProperty.ts +64 -64
  99. package/src/metadata/MetadataResolved.ts +51 -51
  100. package/src/metadata/MetadataTuple.ts +58 -58
  101. package/src/module.ts +2038 -2038
  102. package/src/programmers/ApplicationProgrammer.ts +47 -47
  103. package/src/programmers/AssertCloneProgrammer.ts +71 -71
  104. package/src/programmers/AssertParseProgrammer.ts +66 -66
  105. package/src/programmers/AssertProgrammer.ts +279 -279
  106. package/src/programmers/AssertPruneProgrammer.ts +68 -68
  107. package/src/programmers/AssertStringifyProgrammer.ts +66 -66
  108. package/src/programmers/CheckerProgrammer.ts +1173 -1173
  109. package/src/programmers/CloneProgrammer.ts +587 -587
  110. package/src/programmers/FeatureProgrammer.ts +495 -495
  111. package/src/programmers/IsCloneProgrammer.ts +78 -78
  112. package/src/programmers/IsParseProgrammer.ts +72 -72
  113. package/src/programmers/IsProgrammer.ts +239 -239
  114. package/src/programmers/IsPruneProgrammer.ts +73 -73
  115. package/src/programmers/IsStringifyProgrammer.ts +76 -76
  116. package/src/programmers/LiteralsProgrammer.ts +64 -64
  117. package/src/programmers/PruneProgrammer.ts +542 -542
  118. package/src/programmers/RandomProgrammer.ts +578 -578
  119. package/src/programmers/StringifyProgrammer.ts +986 -986
  120. package/src/programmers/TypiaProgrammer.ts +129 -129
  121. package/src/programmers/ValidateCloneProgrammer.ts +85 -85
  122. package/src/programmers/ValidateParseProgrammer.ts +70 -70
  123. package/src/programmers/ValidateProgrammer.ts +305 -305
  124. package/src/programmers/ValidatePruneProgrammer.ts +78 -78
  125. package/src/programmers/ValidateStringifyProgrammer.ts +84 -84
  126. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  127. package/src/programmers/helpers/CloneJoiner.ts +168 -131
  128. package/src/programmers/helpers/FunctionImporeter.ts +78 -78
  129. package/src/programmers/helpers/ICheckEntry.ts +12 -12
  130. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  131. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  132. package/src/programmers/helpers/PruneJoiner.ts +143 -143
  133. package/src/programmers/helpers/RandomJoiner.ts +173 -173
  134. package/src/programmers/helpers/RandomRanger.ts +208 -208
  135. package/src/programmers/helpers/StringifyJoinder.ts +113 -113
  136. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  137. package/src/programmers/helpers/UnionExplorer.ts +305 -305
  138. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  139. package/src/programmers/helpers/disable_function_importer_declare.ts +26 -26
  140. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  141. package/src/programmers/internal/application_alias.ts +66 -66
  142. package/src/programmers/internal/application_array.ts +30 -30
  143. package/src/programmers/internal/application_boolean.ts +15 -15
  144. package/src/programmers/internal/application_constant.ts +26 -26
  145. package/src/programmers/internal/application_default.ts +17 -17
  146. package/src/programmers/internal/application_default_string.ts +33 -33
  147. package/src/programmers/internal/application_native.ts +39 -39
  148. package/src/programmers/internal/application_number.ts +80 -80
  149. package/src/programmers/internal/application_object.ts +165 -165
  150. package/src/programmers/internal/application_resolved.ts +55 -55
  151. package/src/programmers/internal/application_schema.ts +157 -157
  152. package/src/programmers/internal/application_string.ts +44 -44
  153. package/src/programmers/internal/application_templates.ts +25 -25
  154. package/src/programmers/internal/application_tuple.ts +57 -57
  155. package/src/programmers/internal/check_array.ts +30 -30
  156. package/src/programmers/internal/check_array_length.ts +35 -35
  157. package/src/programmers/internal/check_bigint.ts +110 -110
  158. package/src/programmers/internal/check_custom.ts +31 -31
  159. package/src/programmers/internal/check_dynamic_properties.ts +194 -195
  160. package/src/programmers/internal/check_everything.ts +28 -28
  161. package/src/programmers/internal/check_native.ts +21 -21
  162. package/src/programmers/internal/check_object.ts +55 -55
  163. package/src/programmers/internal/check_string.ts +25 -25
  164. package/src/programmers/internal/check_string_tags.ts +67 -67
  165. package/src/programmers/internal/check_template.ts +56 -56
  166. package/src/programmers/internal/check_union_array_like.ts +329 -329
  167. package/src/programmers/internal/decode_union_object.ts +73 -73
  168. package/src/programmers/internal/feature_object_entries.ts +63 -63
  169. package/src/programmers/internal/get_comment_tags.ts +23 -23
  170. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  171. package/src/programmers/internal/prune_object_properties.ts +60 -60
  172. package/src/programmers/internal/random_custom.ts +29 -29
  173. package/src/programmers/internal/stringify_dynamic_properties.ts +171 -171
  174. package/src/programmers/internal/stringify_native.ts +7 -7
  175. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  176. package/src/programmers/internal/template_to_pattern.ts +15 -15
  177. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -16
  178. package/src/schemas/IJsonApplication.ts +8 -8
  179. package/src/schemas/IJsonComponents.ts +33 -33
  180. package/src/schemas/IJsonSchema.ts +133 -133
  181. package/src/transform.ts +27 -27
  182. package/src/transformers/CallExpressionTransformer.ts +179 -179
  183. package/src/transformers/FileTransformer.ts +47 -47
  184. package/src/transformers/IProject.ts +11 -11
  185. package/src/transformers/ITransformOptions.ts +62 -62
  186. package/src/transformers/ImportTransformer.ts +66 -66
  187. package/src/transformers/NodeTransformer.ts +13 -13
  188. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +112 -112
  189. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  190. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  191. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  192. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  193. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  194. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  195. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  196. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  197. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  198. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +39 -39
  199. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  200. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  201. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  202. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  203. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +28 -28
  204. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +53 -53
  205. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  206. package/src/transformers/features/miscellaneous/RandomTransformer.ts +42 -42
  207. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  208. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  209. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  210. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  211. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  212. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  213. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  214. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  215. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  216. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +12 -12
  217. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  218. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  219. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +12 -12
  220. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  221. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  222. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  223. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  224. package/src/transformers/features/validators/CreateAssertTransformer.ts +13 -13
  225. package/src/transformers/features/validators/CreateIsTransformer.ts +11 -11
  226. package/src/transformers/features/validators/CreateValidateTransformer.ts +13 -13
  227. package/src/transformers/features/validators/IsTransformer.ts +11 -11
  228. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  229. package/src/transformers/internal/GenericTransformer.ts +97 -97
  230. package/src/typings/Atomic.ts +17 -17
  231. package/src/typings/ClassProperties.ts +5 -5
  232. package/src/typings/Customizable.ts +5 -5
  233. package/src/typings/OmitNever.ts +3 -3
  234. package/src/typings/SpecialFields.ts +3 -3
  235. package/src/typings/Writable.ts +11 -11
  236. package/src/utils/ArrayUtil.ts +45 -45
  237. package/src/utils/Escaper.ts +46 -46
  238. package/src/utils/MapUtil.ts +12 -12
  239. package/src/utils/PatternUtil.ts +33 -33
  240. package/src/utils/RandomGenerator.ts +81 -81
  241. package/src/utils/Singleton.ts +17 -17
@@ -1,24 +1,24 @@
1
- import ts from "typescript";
2
-
3
- export namespace StatementFactory {
4
- export const constant = (name: string, initializer?: ts.Expression) =>
5
- ts.factory.createVariableStatement(
6
- undefined,
7
- ts.factory.createVariableDeclarationList(
8
- [
9
- ts.factory.createVariableDeclaration(
10
- name,
11
- undefined,
12
- undefined,
13
- initializer,
14
- ),
15
- ],
16
- ts.NodeFlags.Const,
17
- ),
18
- );
19
-
20
- export const transpile = (script: string) =>
21
- ts.factory.createExpressionStatement(
22
- ts.factory.createIdentifier(ts.transpile(script)),
23
- );
24
- }
1
+ import ts from "typescript";
2
+
3
+ export namespace StatementFactory {
4
+ export const constant = (name: string, initializer?: ts.Expression) =>
5
+ ts.factory.createVariableStatement(
6
+ undefined,
7
+ ts.factory.createVariableDeclarationList(
8
+ [
9
+ ts.factory.createVariableDeclaration(
10
+ name,
11
+ undefined,
12
+ undefined,
13
+ initializer,
14
+ ),
15
+ ],
16
+ ts.NodeFlags.Const,
17
+ ),
18
+ );
19
+
20
+ export const transpile = (script: string) =>
21
+ ts.factory.createExpressionStatement(
22
+ ts.factory.createIdentifier(ts.transpile(script)),
23
+ );
24
+ }
@@ -1,58 +1,58 @@
1
- import ts from "typescript";
2
-
3
- export namespace TemplateFactory {
4
- export const generate = (expressions: ts.Expression[]): ts.Expression => {
5
- if (expressions.every((exp) => ts.isStringLiteral(exp)))
6
- return ts.factory.createStringLiteral(
7
- (expressions as ts.StringLiteral[])
8
- .map((str) => str.text)
9
- .join(""),
10
- );
11
-
12
- const it: IIterator = {
13
- value: "",
14
- index: 0,
15
- };
16
- gather(expressions)(it);
17
-
18
- const head: ts.TemplateHead = ts.factory.createTemplateHead(it.value);
19
- const spans: ts.TemplateSpan[] = [];
20
-
21
- while (true) {
22
- const elem: ts.Expression = expressions[it.index++]!;
23
- gather(expressions)(it);
24
-
25
- const broken: boolean = it.index === expressions.length;
26
- spans.push(
27
- ts.factory.createTemplateSpan(
28
- elem,
29
- broken
30
- ? ts.factory.createTemplateTail(it.value)
31
- : ts.factory.createTemplateMiddle(it.value),
32
- ),
33
- );
34
- if (broken === true) break;
35
- }
36
- return ts.factory.createTemplateExpression(head, spans);
37
- };
38
-
39
- const gather =
40
- (expressions: ts.Expression[]) =>
41
- (it: IIterator): void => {
42
- const found: number = expressions.findIndex(
43
- (elem, index) => index >= it.index && !ts.isStringLiteral(elem),
44
- );
45
-
46
- const last: number = found !== -1 ? found : expressions.length;
47
- it.value = expressions
48
- .slice(it.index, last)
49
- .map((elem) => (elem as ts.StringLiteral).text)
50
- .reduce((x, y) => x + y, "");
51
- it.index = last;
52
- };
53
-
54
- interface IIterator {
55
- value: string;
56
- index: number;
57
- }
58
- }
1
+ import ts from "typescript";
2
+
3
+ export namespace TemplateFactory {
4
+ export const generate = (expressions: ts.Expression[]): ts.Expression => {
5
+ if (expressions.every((exp) => ts.isStringLiteral(exp)))
6
+ return ts.factory.createStringLiteral(
7
+ (expressions as ts.StringLiteral[])
8
+ .map((str) => str.text)
9
+ .join(""),
10
+ );
11
+
12
+ const it: IIterator = {
13
+ value: "",
14
+ index: 0,
15
+ };
16
+ gather(expressions)(it);
17
+
18
+ const head: ts.TemplateHead = ts.factory.createTemplateHead(it.value);
19
+ const spans: ts.TemplateSpan[] = [];
20
+
21
+ while (true) {
22
+ const elem: ts.Expression = expressions[it.index++]!;
23
+ gather(expressions)(it);
24
+
25
+ const broken: boolean = it.index === expressions.length;
26
+ spans.push(
27
+ ts.factory.createTemplateSpan(
28
+ elem,
29
+ broken
30
+ ? ts.factory.createTemplateTail(it.value)
31
+ : ts.factory.createTemplateMiddle(it.value),
32
+ ),
33
+ );
34
+ if (broken === true) break;
35
+ }
36
+ return ts.factory.createTemplateExpression(head, spans);
37
+ };
38
+
39
+ const gather =
40
+ (expressions: ts.Expression[]) =>
41
+ (it: IIterator): void => {
42
+ const found: number = expressions.findIndex(
43
+ (elem, index) => index >= it.index && !ts.isStringLiteral(elem),
44
+ );
45
+
46
+ const last: number = found !== -1 ? found : expressions.length;
47
+ it.value = expressions
48
+ .slice(it.index, last)
49
+ .map((elem) => (elem as ts.StringLiteral).text)
50
+ .reduce((x, y) => x + y, "");
51
+ it.index = last;
52
+ };
53
+
54
+ interface IIterator {
55
+ value: string;
56
+ index: number;
57
+ }
58
+ }
@@ -1,124 +1,124 @@
1
- import ts from "typescript";
2
-
3
- export namespace TypeFactory {
4
- export const resolve =
5
- (checker: ts.TypeChecker) =>
6
- (type: ts.Type): ts.Type | null =>
7
- getReturnType(checker)(type)("toJSON");
8
-
9
- export const isFunction = (type: ts.Type): boolean =>
10
- getFunction(type) !== null;
11
-
12
- const getFunction = (type: ts.Type) => {
13
- const node = type.symbol?.declarations?.[0];
14
- if (node === undefined) return null;
15
-
16
- return ts.isFunctionLike(node)
17
- ? node
18
- : ts.isPropertyAssignment(node) || ts.isPropertyDeclaration(node)
19
- ? ts.isFunctionLike(node.initializer)
20
- ? node.initializer
21
- : null
22
- : null;
23
- };
24
-
25
- export const getReturnType =
26
- (checker: ts.TypeChecker) =>
27
- (type: ts.Type) =>
28
- (name: string): ts.Type | null => {
29
- // FIND TO-JSON METHOD
30
- const symbol: ts.Symbol | undefined = type.getProperty(name);
31
- if (!symbol) return null;
32
- else if (!symbol.valueDeclaration) return null;
33
-
34
- // GET FUNCTION DECLARATION
35
- const functor: ts.Type = checker.getTypeOfSymbolAtLocation(
36
- symbol,
37
- symbol.valueDeclaration,
38
- );
39
-
40
- // RETURNS THE RETURN-TYPE
41
- const signature: ts.Signature | undefined =
42
- checker.getSignaturesOfType(functor, ts.SignatureKind.Call)[0];
43
- return signature ? signature.getReturnType() : null;
44
- };
45
-
46
- export const getFullName =
47
- (checker: ts.TypeChecker) =>
48
- (type: ts.Type, symbol?: ts.Symbol): string => {
49
- // PRIMITIVE
50
- symbol ??= type.aliasSymbol ?? type.getSymbol();
51
- if (symbol === undefined) return checker.typeToString(type);
52
-
53
- // UNION OR INTERSECT
54
- if (
55
- type.aliasSymbol === undefined &&
56
- type.isUnionOrIntersection()
57
- ) {
58
- const joiner: string = type.isIntersection() ? " & " : " | ";
59
- return type.types
60
- .map((child) => getFullName(checker)(child))
61
- .join(joiner);
62
- }
63
-
64
- //----
65
- // SPECIALIZATION
66
- //----
67
- const name: string = get_name(symbol);
68
-
69
- // CHECK GENERIC
70
- const generic: readonly ts.Type[] = type.aliasSymbol
71
- ? type.aliasTypeArguments || []
72
- : checker.getTypeArguments(type as ts.TypeReference);
73
- return generic.length
74
- ? name === "Promise"
75
- ? getFullName(checker)(generic[0]!)
76
- : `${name}<${generic
77
- .map((child) => getFullName(checker)(child))
78
- .join(", ")}>`
79
- : name;
80
- };
81
-
82
- const explore_name =
83
- (decl: ts.Node) =>
84
- (name: string): string =>
85
- ts.isModuleBlock(decl)
86
- ? explore_name(decl.parent.parent)(
87
- `${decl.parent.name.getFullText().trim()}.${name}`,
88
- )
89
- : name;
90
-
91
- const get_name = (symbol: ts.Symbol): string => {
92
- const parent = symbol.getDeclarations()?.[0]?.parent;
93
- return parent
94
- ? explore_name(parent)(symbol.escapedName.toString())
95
- : "__type";
96
- };
97
-
98
- export const keyword = (
99
- type:
100
- | "void"
101
- | "any"
102
- | "unknown"
103
- | "boolean"
104
- | "number"
105
- | "bigint"
106
- | "string",
107
- ) => {
108
- return ts.factory.createKeywordTypeNode(
109
- type === "void"
110
- ? ts.SyntaxKind.VoidKeyword
111
- : type === "any"
112
- ? ts.SyntaxKind.AnyKeyword
113
- : type === "unknown"
114
- ? ts.SyntaxKind.UnknownKeyword
115
- : type === "boolean"
116
- ? ts.SyntaxKind.BooleanKeyword
117
- : type === "number"
118
- ? ts.SyntaxKind.NumberKeyword
119
- : type === "bigint"
120
- ? ts.SyntaxKind.BigIntKeyword
121
- : ts.SyntaxKind.StringKeyword,
122
- );
123
- };
124
- }
1
+ import ts from "typescript";
2
+
3
+ export namespace TypeFactory {
4
+ export const resolve =
5
+ (checker: ts.TypeChecker) =>
6
+ (type: ts.Type): ts.Type | null =>
7
+ getReturnType(checker)(type)("toJSON");
8
+
9
+ export const isFunction = (type: ts.Type): boolean =>
10
+ getFunction(type) !== null;
11
+
12
+ const getFunction = (type: ts.Type) => {
13
+ const node = type.symbol?.declarations?.[0];
14
+ if (node === undefined) return null;
15
+
16
+ return ts.isFunctionLike(node)
17
+ ? node
18
+ : ts.isPropertyAssignment(node) || ts.isPropertyDeclaration(node)
19
+ ? ts.isFunctionLike(node.initializer)
20
+ ? node.initializer
21
+ : null
22
+ : null;
23
+ };
24
+
25
+ export const getReturnType =
26
+ (checker: ts.TypeChecker) =>
27
+ (type: ts.Type) =>
28
+ (name: string): ts.Type | null => {
29
+ // FIND TO-JSON METHOD
30
+ const symbol: ts.Symbol | undefined = type.getProperty(name);
31
+ if (!symbol) return null;
32
+ else if (!symbol.valueDeclaration) return null;
33
+
34
+ // GET FUNCTION DECLARATION
35
+ const functor: ts.Type = checker.getTypeOfSymbolAtLocation(
36
+ symbol,
37
+ symbol.valueDeclaration,
38
+ );
39
+
40
+ // RETURNS THE RETURN-TYPE
41
+ const signature: ts.Signature | undefined =
42
+ checker.getSignaturesOfType(functor, ts.SignatureKind.Call)[0];
43
+ return signature ? signature.getReturnType() : null;
44
+ };
45
+
46
+ export const getFullName =
47
+ (checker: ts.TypeChecker) =>
48
+ (type: ts.Type, symbol?: ts.Symbol): string => {
49
+ // PRIMITIVE
50
+ symbol ??= type.aliasSymbol ?? type.getSymbol();
51
+ if (symbol === undefined) return checker.typeToString(type);
52
+
53
+ // UNION OR INTERSECT
54
+ if (
55
+ type.aliasSymbol === undefined &&
56
+ type.isUnionOrIntersection()
57
+ ) {
58
+ const joiner: string = type.isIntersection() ? " & " : " | ";
59
+ return type.types
60
+ .map((child) => getFullName(checker)(child))
61
+ .join(joiner);
62
+ }
63
+
64
+ //----
65
+ // SPECIALIZATION
66
+ //----
67
+ const name: string = get_name(symbol);
68
+
69
+ // CHECK GENERIC
70
+ const generic: readonly ts.Type[] = type.aliasSymbol
71
+ ? type.aliasTypeArguments || []
72
+ : checker.getTypeArguments(type as ts.TypeReference);
73
+ return generic.length
74
+ ? name === "Promise"
75
+ ? getFullName(checker)(generic[0]!)
76
+ : `${name}<${generic
77
+ .map((child) => getFullName(checker)(child))
78
+ .join(", ")}>`
79
+ : name;
80
+ };
81
+
82
+ const explore_name =
83
+ (decl: ts.Node) =>
84
+ (name: string): string =>
85
+ ts.isModuleBlock(decl)
86
+ ? explore_name(decl.parent.parent)(
87
+ `${decl.parent.name.getFullText().trim()}.${name}`,
88
+ )
89
+ : name;
90
+
91
+ const get_name = (symbol: ts.Symbol): string => {
92
+ const parent = symbol.getDeclarations()?.[0]?.parent;
93
+ return parent
94
+ ? explore_name(parent)(symbol.escapedName.toString())
95
+ : "__type";
96
+ };
97
+
98
+ export const keyword = (
99
+ type:
100
+ | "void"
101
+ | "any"
102
+ | "unknown"
103
+ | "boolean"
104
+ | "number"
105
+ | "bigint"
106
+ | "string",
107
+ ) => {
108
+ return ts.factory.createKeywordTypeNode(
109
+ type === "void"
110
+ ? ts.SyntaxKind.VoidKeyword
111
+ : type === "any"
112
+ ? ts.SyntaxKind.AnyKeyword
113
+ : type === "unknown"
114
+ ? ts.SyntaxKind.UnknownKeyword
115
+ : type === "boolean"
116
+ ? ts.SyntaxKind.BooleanKeyword
117
+ : type === "number"
118
+ ? ts.SyntaxKind.NumberKeyword
119
+ : type === "bigint"
120
+ ? ts.SyntaxKind.BigIntKeyword
121
+ : ts.SyntaxKind.StringKeyword,
122
+ );
123
+ };
124
+ }
@@ -1,12 +1,12 @@
1
- import ts from "typescript";
2
-
3
- export namespace ValueFactory {
4
- export const NULL = () => ts.factory.createNull();
5
- export const UNDEFINED = () => ts.factory.createIdentifier("undefined");
6
- export const BOOLEAN = (value: boolean) =>
7
- value ? ts.factory.createTrue() : ts.factory.createFalse();
8
- export const INPUT = (str: string = "input") =>
9
- ts.factory.createIdentifier(str);
10
- export const TYPEOF = (input: ts.Expression) =>
11
- ts.factory.createTypeOfExpression(input);
12
- }
1
+ import ts from "typescript";
2
+
3
+ export namespace ValueFactory {
4
+ export const NULL = () => ts.factory.createNull();
5
+ export const UNDEFINED = () => ts.factory.createIdentifier("undefined");
6
+ export const BOOLEAN = (value: boolean) =>
7
+ value ? ts.factory.createTrue() : ts.factory.createFalse();
8
+ export const INPUT = (str: string = "input") =>
9
+ ts.factory.createIdentifier(str);
10
+ export const TYPEOF = (input: ts.Expression) =>
11
+ ts.factory.createTypeOfExpression(input);
12
+ }
@@ -1,12 +1,12 @@
1
- import { Metadata } from "../../../metadata/Metadata";
2
-
3
- export namespace MetadataHelper {
4
- export const literal_to_metadata = (key: string): Metadata => {
5
- const metadata: Metadata = Metadata.initialize();
6
- metadata.constants.push({
7
- type: "string",
8
- values: [key],
9
- });
10
- return metadata;
11
- };
12
- }
1
+ import { Metadata } from "../../../metadata/Metadata";
2
+
3
+ export namespace MetadataHelper {
4
+ export const literal_to_metadata = (key: string): Metadata => {
5
+ const metadata: Metadata = Metadata.initialize();
6
+ metadata.constants.push({
7
+ type: "string",
8
+ values: [key],
9
+ });
10
+ return metadata;
11
+ };
12
+ }
@@ -1,33 +1,33 @@
1
- import { Metadata } from "../../../metadata/Metadata";
2
-
3
- import { ArrayUtil } from "../../../utils/ArrayUtil";
4
-
5
- export const emend_metadata_atomics = (meta: Metadata) => {
6
- // ATOMICS
7
- for (const type of meta.atomics) {
8
- const index: number = meta.constants.findIndex((c) => c.type === type);
9
- if (index !== -1) meta.constants.splice(index, 1);
10
- }
11
-
12
- // BOOLEAN
13
- {
14
- const index: number = meta.constants.findIndex(
15
- (c) => c.type === "boolean",
16
- );
17
- if (index !== -1 && meta.constants[index]!.values.length === 2) {
18
- meta.constants.splice(index, 1);
19
- ArrayUtil.take(
20
- meta.atomics,
21
- (type) => type === "boolean",
22
- () => "boolean",
23
- );
24
- }
25
- }
26
-
27
- // TEMPLATE
28
- if (
29
- meta.templates.length &&
30
- meta.atomics.find((type) => type === "string") !== undefined
31
- )
32
- meta.templates.splice(0, meta.templates.length);
33
- };
1
+ import { Metadata } from "../../../metadata/Metadata";
2
+
3
+ import { ArrayUtil } from "../../../utils/ArrayUtil";
4
+
5
+ export const emend_metadata_atomics = (meta: Metadata) => {
6
+ // ATOMICS
7
+ for (const type of meta.atomics) {
8
+ const index: number = meta.constants.findIndex((c) => c.type === type);
9
+ if (index !== -1) meta.constants.splice(index, 1);
10
+ }
11
+
12
+ // BOOLEAN
13
+ {
14
+ const index: number = meta.constants.findIndex(
15
+ (c) => c.type === "boolean",
16
+ );
17
+ if (index !== -1 && meta.constants[index]!.values.length === 2) {
18
+ meta.constants.splice(index, 1);
19
+ ArrayUtil.take(
20
+ meta.atomics,
21
+ (type) => type === "boolean",
22
+ () => "boolean",
23
+ );
24
+ }
25
+ }
26
+
27
+ // TEMPLATE
28
+ if (
29
+ meta.templates.length &&
30
+ meta.atomics.find((type) => type === "string") !== undefined
31
+ )
32
+ meta.templates.splice(0, meta.templates.length);
33
+ };
@@ -1,40 +1,40 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../../metadata/Metadata";
4
- import { MetadataAlias } from "../../../metadata/MetadataAlias";
5
-
6
- import { ArrayUtil } from "../../../utils/ArrayUtil";
7
-
8
- import { MetadataCollection } from "../../MetadataCollection";
9
- import { MetadataFactory } from "../../MetadataFactory";
10
- import { MetadataTagFactory } from "../../MetadataTagFactory";
11
- import { explore_metadata } from "./explore_metadata";
12
-
13
- export const emplace_metadata_alias =
14
- (checker: ts.TypeChecker) =>
15
- (options: MetadataFactory.IOptions) =>
16
- (collection: MetadataCollection) =>
17
- (type: ts.Type, nullable: boolean): MetadataAlias => {
18
- // CHECK EXISTENCE
19
- const [alias, newbie, closure] = collection.emplaceAlias(
20
- checker,
21
- type,
22
- type.aliasSymbol!,
23
- );
24
- ArrayUtil.add(alias.nullables, nullable);
25
- if (newbie === false) return alias;
26
-
27
- // CONSTRUCT VALUE TYPE
28
- const value: Metadata = explore_metadata(checker)(options)(collection)(
29
- type,
30
- false,
31
- true,
32
- );
33
- closure(value);
34
- alias.tags.push(
35
- ...MetadataTagFactory.generate(value)(alias.jsDocTags)(
36
- () => alias.name,
37
- ),
38
- );
39
- return alias;
40
- };
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../../metadata/Metadata";
4
+ import { MetadataAlias } from "../../../metadata/MetadataAlias";
5
+
6
+ import { ArrayUtil } from "../../../utils/ArrayUtil";
7
+
8
+ import { MetadataCollection } from "../../MetadataCollection";
9
+ import { MetadataFactory } from "../../MetadataFactory";
10
+ import { MetadataTagFactory } from "../../MetadataTagFactory";
11
+ import { explore_metadata } from "./explore_metadata";
12
+
13
+ export const emplace_metadata_alias =
14
+ (checker: ts.TypeChecker) =>
15
+ (options: MetadataFactory.IOptions) =>
16
+ (collection: MetadataCollection) =>
17
+ (type: ts.Type, nullable: boolean): MetadataAlias => {
18
+ // CHECK EXISTENCE
19
+ const [alias, newbie, closure] = collection.emplaceAlias(
20
+ checker,
21
+ type,
22
+ type.aliasSymbol!,
23
+ );
24
+ ArrayUtil.add(alias.nullables, nullable);
25
+ if (newbie === false) return alias;
26
+
27
+ // CONSTRUCT VALUE TYPE
28
+ const value: Metadata = explore_metadata(checker)(options)(collection)(
29
+ type,
30
+ false,
31
+ true,
32
+ );
33
+ closure(value);
34
+ alias.tags.push(
35
+ ...MetadataTagFactory.generate(value)(alias.jsDocTags)(
36
+ () => alias.name,
37
+ ),
38
+ );
39
+ return alias;
40
+ };