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,72 +1,72 @@
1
- import ts from "typescript";
2
-
3
- import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
-
5
- import { ITypiaContext } from "../../transformers/ITypiaContext";
6
-
7
- import { FunctionalIsParametersProgrammer } from "./FunctionalIsParametersProgrammer";
8
- import { FunctionalIsReturnProgrammer } from "./FunctionalIsReturnProgrammer";
9
-
10
- export namespace FunctionalIsFunctionProgrammer {
11
- export interface IConfig {
12
- equals: boolean;
13
- }
14
- export interface IProps {
15
- context: ITypiaContext;
16
- modulo: ts.LeftHandSideExpression;
17
- config: IConfig;
18
- declaration: ts.FunctionDeclaration;
19
- expression: ts.Expression;
20
- init?: ts.Expression | undefined;
21
- }
22
-
23
- export const write = (props: IProps): ts.CallExpression => {
24
- const p = FunctionalIsParametersProgrammer.decompose(props);
25
- const r = FunctionalIsReturnProgrammer.decompose(props);
26
- return ExpressionFactory.selfCall(
27
- ts.factory.createBlock(
28
- [
29
- ...p.functions,
30
- ...r.functions,
31
- ts.factory.createReturnStatement(
32
- ts.factory.createArrowFunction(
33
- r.async
34
- ? [ts.factory.createModifier(ts.SyntaxKind.AsyncKeyword)]
35
- : undefined,
36
- undefined,
37
- props.declaration.parameters,
38
- getReturnTypeNode({
39
- declaration: props.declaration,
40
- async: r.async,
41
- }),
42
- undefined,
43
- ts.factory.createBlock([...p.statements, ...r.statements], true),
44
- ),
45
- ),
46
- ],
47
- true,
48
- ),
49
- );
50
- };
51
-
52
- export const getReturnTypeNode = (props: {
53
- declaration: ts.FunctionDeclaration;
54
- async: boolean;
55
- }): ts.TypeNode | undefined =>
56
- props.declaration.type
57
- ? props.async
58
- ? !!(props.declaration.type! as ts.TypeReferenceNode).typeArguments?.[0]
59
- ? ts.factory.createTypeReferenceNode("Promise", [
60
- ts.factory.createUnionTypeNode([
61
- (props.declaration.type! as ts.TypeReferenceNode)
62
- .typeArguments![0]!,
63
- ts.factory.createTypeReferenceNode("null"),
64
- ]),
65
- ])
66
- : undefined
67
- : ts.factory.createUnionTypeNode([
68
- props.declaration.type,
69
- ts.factory.createTypeReferenceNode("null"),
70
- ])
71
- : undefined;
72
- }
1
+ import ts from "typescript";
2
+
3
+ import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
+
5
+ import { ITypiaContext } from "../../transformers/ITypiaContext";
6
+
7
+ import { FunctionalIsParametersProgrammer } from "./FunctionalIsParametersProgrammer";
8
+ import { FunctionalIsReturnProgrammer } from "./FunctionalIsReturnProgrammer";
9
+
10
+ export namespace FunctionalIsFunctionProgrammer {
11
+ export interface IConfig {
12
+ equals: boolean;
13
+ }
14
+ export interface IProps {
15
+ context: ITypiaContext;
16
+ modulo: ts.LeftHandSideExpression;
17
+ config: IConfig;
18
+ declaration: ts.FunctionDeclaration;
19
+ expression: ts.Expression;
20
+ init?: ts.Expression | undefined;
21
+ }
22
+
23
+ export const write = (props: IProps): ts.CallExpression => {
24
+ const p = FunctionalIsParametersProgrammer.decompose(props);
25
+ const r = FunctionalIsReturnProgrammer.decompose(props);
26
+ return ExpressionFactory.selfCall(
27
+ ts.factory.createBlock(
28
+ [
29
+ ...p.functions,
30
+ ...r.functions,
31
+ ts.factory.createReturnStatement(
32
+ ts.factory.createArrowFunction(
33
+ r.async
34
+ ? [ts.factory.createModifier(ts.SyntaxKind.AsyncKeyword)]
35
+ : undefined,
36
+ undefined,
37
+ props.declaration.parameters,
38
+ getReturnTypeNode({
39
+ declaration: props.declaration,
40
+ async: r.async,
41
+ }),
42
+ undefined,
43
+ ts.factory.createBlock([...p.statements, ...r.statements], true),
44
+ ),
45
+ ),
46
+ ],
47
+ true,
48
+ ),
49
+ );
50
+ };
51
+
52
+ export const getReturnTypeNode = (props: {
53
+ declaration: ts.FunctionDeclaration;
54
+ async: boolean;
55
+ }): ts.TypeNode | undefined =>
56
+ props.declaration.type
57
+ ? props.async
58
+ ? !!(props.declaration.type! as ts.TypeReferenceNode).typeArguments?.[0]
59
+ ? ts.factory.createTypeReferenceNode("Promise", [
60
+ ts.factory.createUnionTypeNode([
61
+ (props.declaration.type! as ts.TypeReferenceNode)
62
+ .typeArguments![0]!,
63
+ ts.factory.createTypeReferenceNode("null"),
64
+ ]),
65
+ ])
66
+ : undefined
67
+ : ts.factory.createUnionTypeNode([
68
+ props.declaration.type,
69
+ ts.factory.createTypeReferenceNode("null"),
70
+ ])
71
+ : undefined;
72
+ }
@@ -1,113 +1,113 @@
1
- import ts from "typescript";
2
-
3
- import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
- import { StatementFactory } from "../../factories/StatementFactory";
5
- import { TypeFactory } from "../../factories/TypeFactory";
6
-
7
- import { ITypiaContext } from "../../transformers/ITypiaContext";
8
-
9
- import { IsProgrammer } from "../IsProgrammer";
10
- import { FunctionalIsFunctionProgrammer } from "./FunctionalIsFunctionProgrammer";
11
- import { FunctionalGeneralProgrammer } from "./internal/FunctionalGeneralProgrammer";
12
-
13
- export namespace FunctionalIsParametersProgrammer {
14
- export interface IConfig {
15
- equals: boolean;
16
- }
17
- export interface IProps {
18
- context: ITypiaContext;
19
- modulo: ts.LeftHandSideExpression;
20
- config: IConfig;
21
- declaration: ts.FunctionDeclaration;
22
- expression: ts.Expression;
23
- init?: ts.Expression | undefined;
24
- }
25
- export interface IDecomposeProps {
26
- context: ITypiaContext;
27
- config: IConfig;
28
- modulo: ts.LeftHandSideExpression;
29
- declaration: ts.FunctionDeclaration;
30
- }
31
- export interface IDecomposeOutput {
32
- functions: ts.Statement[];
33
- statements: ts.Statement[];
34
- }
35
-
36
- export const write = (props: IProps): ts.CallExpression => {
37
- const { async } = FunctionalGeneralProgrammer.getReturnType({
38
- checker: props.context.checker,
39
- declaration: props.declaration,
40
- });
41
- const result = decompose(props);
42
- return ExpressionFactory.selfCall(
43
- ts.factory.createBlock(
44
- [
45
- ...result.functions,
46
- ts.factory.createReturnStatement(
47
- ts.factory.createArrowFunction(
48
- async
49
- ? [ts.factory.createModifier(ts.SyntaxKind.AsyncKeyword)]
50
- : undefined,
51
- undefined,
52
- props.declaration.parameters,
53
- FunctionalIsFunctionProgrammer.getReturnTypeNode({
54
- declaration: props.declaration,
55
- async,
56
- }),
57
- undefined,
58
- ts.factory.createBlock(
59
- [
60
- ...result.statements,
61
- ts.factory.createReturnStatement(
62
- ts.factory.createCallExpression(
63
- props.expression,
64
- undefined,
65
- props.declaration.parameters.map((p) =>
66
- ts.factory.createIdentifier(p.name.getText()),
67
- ),
68
- ),
69
- ),
70
- ],
71
- true,
72
- ),
73
- ),
74
- ),
75
- ],
76
- true,
77
- ),
78
- );
79
- };
80
-
81
- export const decompose = (props: IDecomposeProps): IDecomposeOutput => ({
82
- functions: props.declaration.parameters.map((p, i) =>
83
- StatementFactory.constant({
84
- name: `__is_param_${i}`,
85
- value: IsProgrammer.write({
86
- context: props.context,
87
- modulo: props.modulo,
88
- config: props.config,
89
- type: props.context.checker.getTypeFromTypeNode(
90
- p.type ?? TypeFactory.keyword("any"),
91
- ),
92
- init: undefined,
93
- name: undefined,
94
- }),
95
- }),
96
- ),
97
- statements: props.declaration.parameters
98
- .map((p, i) => [
99
- ts.factory.createIfStatement(
100
- ts.factory.createStrictEquality(
101
- ts.factory.createFalse(),
102
- ts.factory.createCallExpression(
103
- ts.factory.createIdentifier(`__is_param_${i}`),
104
- undefined,
105
- [ts.factory.createIdentifier(p.name.getText())],
106
- ),
107
- ),
108
- ts.factory.createReturnStatement(ts.factory.createNull()),
109
- ),
110
- ])
111
- .flat(),
112
- });
113
- }
1
+ import ts from "typescript";
2
+
3
+ import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
+ import { StatementFactory } from "../../factories/StatementFactory";
5
+ import { TypeFactory } from "../../factories/TypeFactory";
6
+
7
+ import { ITypiaContext } from "../../transformers/ITypiaContext";
8
+
9
+ import { IsProgrammer } from "../IsProgrammer";
10
+ import { FunctionalIsFunctionProgrammer } from "./FunctionalIsFunctionProgrammer";
11
+ import { FunctionalGeneralProgrammer } from "./internal/FunctionalGeneralProgrammer";
12
+
13
+ export namespace FunctionalIsParametersProgrammer {
14
+ export interface IConfig {
15
+ equals: boolean;
16
+ }
17
+ export interface IProps {
18
+ context: ITypiaContext;
19
+ modulo: ts.LeftHandSideExpression;
20
+ config: IConfig;
21
+ declaration: ts.FunctionDeclaration;
22
+ expression: ts.Expression;
23
+ init?: ts.Expression | undefined;
24
+ }
25
+ export interface IDecomposeProps {
26
+ context: ITypiaContext;
27
+ config: IConfig;
28
+ modulo: ts.LeftHandSideExpression;
29
+ declaration: ts.FunctionDeclaration;
30
+ }
31
+ export interface IDecomposeOutput {
32
+ functions: ts.Statement[];
33
+ statements: ts.Statement[];
34
+ }
35
+
36
+ export const write = (props: IProps): ts.CallExpression => {
37
+ const { async } = FunctionalGeneralProgrammer.getReturnType({
38
+ checker: props.context.checker,
39
+ declaration: props.declaration,
40
+ });
41
+ const result = decompose(props);
42
+ return ExpressionFactory.selfCall(
43
+ ts.factory.createBlock(
44
+ [
45
+ ...result.functions,
46
+ ts.factory.createReturnStatement(
47
+ ts.factory.createArrowFunction(
48
+ async
49
+ ? [ts.factory.createModifier(ts.SyntaxKind.AsyncKeyword)]
50
+ : undefined,
51
+ undefined,
52
+ props.declaration.parameters,
53
+ FunctionalIsFunctionProgrammer.getReturnTypeNode({
54
+ declaration: props.declaration,
55
+ async,
56
+ }),
57
+ undefined,
58
+ ts.factory.createBlock(
59
+ [
60
+ ...result.statements,
61
+ ts.factory.createReturnStatement(
62
+ ts.factory.createCallExpression(
63
+ props.expression,
64
+ undefined,
65
+ props.declaration.parameters.map((p) =>
66
+ ts.factory.createIdentifier(p.name.getText()),
67
+ ),
68
+ ),
69
+ ),
70
+ ],
71
+ true,
72
+ ),
73
+ ),
74
+ ),
75
+ ],
76
+ true,
77
+ ),
78
+ );
79
+ };
80
+
81
+ export const decompose = (props: IDecomposeProps): IDecomposeOutput => ({
82
+ functions: props.declaration.parameters.map((p, i) =>
83
+ StatementFactory.constant({
84
+ name: `__is_param_${i}`,
85
+ value: IsProgrammer.write({
86
+ context: props.context,
87
+ modulo: props.modulo,
88
+ config: props.config,
89
+ type: props.context.checker.getTypeFromTypeNode(
90
+ p.type ?? TypeFactory.keyword("any"),
91
+ ),
92
+ init: undefined,
93
+ name: undefined,
94
+ }),
95
+ }),
96
+ ),
97
+ statements: props.declaration.parameters
98
+ .map((p, i) => [
99
+ ts.factory.createIfStatement(
100
+ ts.factory.createStrictEquality(
101
+ ts.factory.createFalse(),
102
+ ts.factory.createCallExpression(
103
+ ts.factory.createIdentifier(`__is_param_${i}`),
104
+ undefined,
105
+ [ts.factory.createIdentifier(p.name.getText())],
106
+ ),
107
+ ),
108
+ ts.factory.createReturnStatement(ts.factory.createNull()),
109
+ ),
110
+ ])
111
+ .flat(),
112
+ });
113
+ }
@@ -1,116 +1,116 @@
1
- import ts from "typescript";
2
-
3
- import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
- import { StatementFactory } from "../../factories/StatementFactory";
5
-
6
- import { ITypiaContext } from "../../transformers/ITypiaContext";
7
-
8
- import { StringUtil } from "../../utils/StringUtil";
9
-
10
- import { IsProgrammer } from "../IsProgrammer";
11
- import { FunctionalIsFunctionProgrammer } from "./FunctionalIsFunctionProgrammer";
12
- import { FunctionalGeneralProgrammer } from "./internal/FunctionalGeneralProgrammer";
13
-
14
- export namespace FunctionalIsReturnProgrammer {
15
- export interface IConfig {
16
- equals: boolean;
17
- }
18
- export interface IProps {
19
- context: ITypiaContext;
20
- modulo: ts.LeftHandSideExpression;
21
- config: IConfig;
22
- declaration: ts.FunctionDeclaration;
23
- expression: ts.Expression;
24
- init?: ts.Expression | undefined;
25
- }
26
- export interface IDecomposeProps {
27
- context: ITypiaContext;
28
- modulo: ts.LeftHandSideExpression;
29
- config: IConfig;
30
- expression: ts.Expression;
31
- declaration: ts.FunctionDeclaration;
32
- }
33
- export interface IDecomposeOutput {
34
- async: boolean;
35
- functions: ts.Statement[];
36
- statements: ts.Statement[];
37
- }
38
-
39
- export const write = (props: IProps): ts.CallExpression => {
40
- const result = decompose(props);
41
- return ExpressionFactory.selfCall(
42
- ts.factory.createBlock(
43
- [
44
- ...result.functions,
45
- ts.factory.createReturnStatement(
46
- ts.factory.createArrowFunction(
47
- result.async
48
- ? [ts.factory.createModifier(ts.SyntaxKind.AsyncKeyword)]
49
- : undefined,
50
- undefined,
51
- props.declaration.parameters,
52
- FunctionalIsFunctionProgrammer.getReturnTypeNode({
53
- declaration: props.declaration,
54
- async: result.async,
55
- }),
56
- undefined,
57
- ts.factory.createBlock(result.statements, true),
58
- ),
59
- ),
60
- ],
61
- true,
62
- ),
63
- );
64
- };
65
-
66
- export const decompose = (props: IDecomposeProps): IDecomposeOutput => {
67
- const { type, async } = FunctionalGeneralProgrammer.getReturnType({
68
- checker: props.context.checker,
69
- declaration: props.declaration,
70
- });
71
- const caller: ts.CallExpression = ts.factory.createCallExpression(
72
- props.expression,
73
- undefined,
74
- props.declaration.parameters.map((p) =>
75
- ts.factory.createIdentifier(p.name.getText()),
76
- ),
77
- );
78
- const name: string = StringUtil.escapeDuplicate({
79
- keep: props.declaration.parameters.map((p) => p.name.getText()),
80
- input: "result",
81
- });
82
- return {
83
- async,
84
- functions: [
85
- StatementFactory.constant({
86
- name: "__is_return",
87
- value: IsProgrammer.write({
88
- ...props,
89
- type,
90
- name: undefined,
91
- init: undefined,
92
- }),
93
- }),
94
- ],
95
- statements: [
96
- StatementFactory.constant({
97
- name,
98
- value: async ? ts.factory.createAwaitExpression(caller) : caller,
99
- }),
100
- ts.factory.createReturnStatement(
101
- ts.factory.createConditionalExpression(
102
- ts.factory.createCallExpression(
103
- ts.factory.createIdentifier("__is_return"),
104
- undefined,
105
- [ts.factory.createIdentifier(name)],
106
- ),
107
- undefined,
108
- ts.factory.createIdentifier(name),
109
- undefined,
110
- ts.factory.createNull(),
111
- ),
112
- ),
113
- ],
114
- };
115
- };
116
- }
1
+ import ts from "typescript";
2
+
3
+ import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
+ import { StatementFactory } from "../../factories/StatementFactory";
5
+
6
+ import { ITypiaContext } from "../../transformers/ITypiaContext";
7
+
8
+ import { StringUtil } from "../../utils/StringUtil";
9
+
10
+ import { IsProgrammer } from "../IsProgrammer";
11
+ import { FunctionalIsFunctionProgrammer } from "./FunctionalIsFunctionProgrammer";
12
+ import { FunctionalGeneralProgrammer } from "./internal/FunctionalGeneralProgrammer";
13
+
14
+ export namespace FunctionalIsReturnProgrammer {
15
+ export interface IConfig {
16
+ equals: boolean;
17
+ }
18
+ export interface IProps {
19
+ context: ITypiaContext;
20
+ modulo: ts.LeftHandSideExpression;
21
+ config: IConfig;
22
+ declaration: ts.FunctionDeclaration;
23
+ expression: ts.Expression;
24
+ init?: ts.Expression | undefined;
25
+ }
26
+ export interface IDecomposeProps {
27
+ context: ITypiaContext;
28
+ modulo: ts.LeftHandSideExpression;
29
+ config: IConfig;
30
+ expression: ts.Expression;
31
+ declaration: ts.FunctionDeclaration;
32
+ }
33
+ export interface IDecomposeOutput {
34
+ async: boolean;
35
+ functions: ts.Statement[];
36
+ statements: ts.Statement[];
37
+ }
38
+
39
+ export const write = (props: IProps): ts.CallExpression => {
40
+ const result = decompose(props);
41
+ return ExpressionFactory.selfCall(
42
+ ts.factory.createBlock(
43
+ [
44
+ ...result.functions,
45
+ ts.factory.createReturnStatement(
46
+ ts.factory.createArrowFunction(
47
+ result.async
48
+ ? [ts.factory.createModifier(ts.SyntaxKind.AsyncKeyword)]
49
+ : undefined,
50
+ undefined,
51
+ props.declaration.parameters,
52
+ FunctionalIsFunctionProgrammer.getReturnTypeNode({
53
+ declaration: props.declaration,
54
+ async: result.async,
55
+ }),
56
+ undefined,
57
+ ts.factory.createBlock(result.statements, true),
58
+ ),
59
+ ),
60
+ ],
61
+ true,
62
+ ),
63
+ );
64
+ };
65
+
66
+ export const decompose = (props: IDecomposeProps): IDecomposeOutput => {
67
+ const { type, async } = FunctionalGeneralProgrammer.getReturnType({
68
+ checker: props.context.checker,
69
+ declaration: props.declaration,
70
+ });
71
+ const caller: ts.CallExpression = ts.factory.createCallExpression(
72
+ props.expression,
73
+ undefined,
74
+ props.declaration.parameters.map((p) =>
75
+ ts.factory.createIdentifier(p.name.getText()),
76
+ ),
77
+ );
78
+ const name: string = StringUtil.escapeDuplicate({
79
+ keep: props.declaration.parameters.map((p) => p.name.getText()),
80
+ input: "result",
81
+ });
82
+ return {
83
+ async,
84
+ functions: [
85
+ StatementFactory.constant({
86
+ name: "__is_return",
87
+ value: IsProgrammer.write({
88
+ ...props,
89
+ type,
90
+ name: undefined,
91
+ init: undefined,
92
+ }),
93
+ }),
94
+ ],
95
+ statements: [
96
+ StatementFactory.constant({
97
+ name,
98
+ value: async ? ts.factory.createAwaitExpression(caller) : caller,
99
+ }),
100
+ ts.factory.createReturnStatement(
101
+ ts.factory.createConditionalExpression(
102
+ ts.factory.createCallExpression(
103
+ ts.factory.createIdentifier("__is_return"),
104
+ undefined,
105
+ [ts.factory.createIdentifier(name)],
106
+ ),
107
+ undefined,
108
+ ts.factory.createIdentifier(name),
109
+ undefined,
110
+ ts.factory.createNull(),
111
+ ),
112
+ ),
113
+ ],
114
+ };
115
+ };
116
+ }
@@ -1,34 +1,34 @@
1
- import ts from "typescript";
2
-
3
- import { TypeFactory } from "../../../factories/TypeFactory";
4
-
5
- export namespace FunctionalGeneralProgrammer {
6
- export interface IProps {
7
- checker: ts.TypeChecker;
8
- declaration: ts.FunctionDeclaration | ts.SignatureDeclaration;
9
- }
10
- export interface IOutput {
11
- type: ts.Type;
12
- async: boolean;
13
- }
14
- export const getReturnType = (props: IProps): IOutput => {
15
- const signature: ts.Signature | undefined =
16
- props.checker.getSignatureFromDeclaration(props.declaration);
17
- const type: ts.Type =
18
- signature?.getReturnType() ??
19
- props.checker.getTypeFromTypeNode(TypeFactory.keyword("any"));
20
-
21
- if (type.symbol?.name === "Promise") {
22
- const generic: readonly ts.Type[] = props.checker.getTypeArguments(
23
- type as ts.TypeReference,
24
- );
25
- return generic.length === 1
26
- ? { type: generic[0]!, async: true }
27
- : {
28
- type: props.checker.getTypeFromTypeNode(TypeFactory.keyword("any")),
29
- async: false,
30
- };
31
- }
32
- return { type, async: false };
33
- };
34
- }
1
+ import ts from "typescript";
2
+
3
+ import { TypeFactory } from "../../../factories/TypeFactory";
4
+
5
+ export namespace FunctionalGeneralProgrammer {
6
+ export interface IProps {
7
+ checker: ts.TypeChecker;
8
+ declaration: ts.FunctionDeclaration | ts.SignatureDeclaration;
9
+ }
10
+ export interface IOutput {
11
+ type: ts.Type;
12
+ async: boolean;
13
+ }
14
+ export const getReturnType = (props: IProps): IOutput => {
15
+ const signature: ts.Signature | undefined =
16
+ props.checker.getSignatureFromDeclaration(props.declaration);
17
+ const type: ts.Type =
18
+ signature?.getReturnType() ??
19
+ props.checker.getTypeFromTypeNode(TypeFactory.keyword("any"));
20
+
21
+ if (type.symbol?.name === "Promise") {
22
+ const generic: readonly ts.Type[] = props.checker.getTypeArguments(
23
+ type as ts.TypeReference,
24
+ );
25
+ return generic.length === 1
26
+ ? { type: generic[0]!, async: true }
27
+ : {
28
+ type: props.checker.getTypeFromTypeNode(TypeFactory.keyword("any")),
29
+ async: false,
30
+ };
31
+ }
32
+ return { type, async: false };
33
+ };
34
+ }