typia 7.0.0-dev.20241007 → 7.0.0-dev.20241008

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 (240) hide show
  1. package/lib/factories/ExpressionFactory.d.ts +1 -1
  2. package/lib/factories/ValueFactory.d.ts +1 -1
  3. package/lib/programmers/AssertProgrammer.d.ts +5 -2
  4. package/lib/programmers/AssertProgrammer.js +12 -5
  5. package/lib/programmers/AssertProgrammer.js.map +1 -1
  6. package/lib/programmers/ImportProgrammer.d.ts +25 -4
  7. package/lib/programmers/ImportProgrammer.js +67 -31
  8. package/lib/programmers/ImportProgrammer.js.map +1 -1
  9. package/lib/programmers/RandomProgrammer.js +48 -32
  10. package/lib/programmers/RandomProgrammer.js.map +1 -1
  11. package/lib/programmers/ValidateProgrammer.js +10 -4
  12. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  13. package/lib/programmers/functional/FunctionalAssertFunctionProgrammer.js +1 -1
  14. package/lib/programmers/functional/FunctionalAssertFunctionProgrammer.js.map +1 -1
  15. package/lib/programmers/functional/FunctionalValidateFunctionProgrammer.d.ts +1 -0
  16. package/lib/programmers/functional/FunctionalValidateFunctionProgrammer.js +14 -5
  17. package/lib/programmers/functional/FunctionalValidateFunctionProgrammer.js.map +1 -1
  18. package/lib/programmers/functional/FunctionalValidateParametersProgrammer.js +5 -1
  19. package/lib/programmers/functional/FunctionalValidateParametersProgrammer.js.map +1 -1
  20. package/lib/programmers/functional/FunctionalValidateReturnProgrammer.js +1 -0
  21. package/lib/programmers/functional/FunctionalValidateReturnProgrammer.js.map +1 -1
  22. package/lib/programmers/http/HttpAssertFormDataProgrammer.js +4 -1
  23. package/lib/programmers/http/HttpAssertFormDataProgrammer.js.map +1 -1
  24. package/lib/programmers/http/HttpAssertHeadersProgrammer.js +4 -1
  25. package/lib/programmers/http/HttpAssertHeadersProgrammer.js.map +1 -1
  26. package/lib/programmers/http/HttpAssertQueryProgrammer.js +4 -1
  27. package/lib/programmers/http/HttpAssertQueryProgrammer.js.map +1 -1
  28. package/lib/programmers/http/HttpFormDataProgrammer.js +10 -6
  29. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  30. package/lib/programmers/http/HttpHeadersProgrammer.js +10 -6
  31. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  32. package/lib/programmers/http/HttpQueryProgrammer.js +10 -6
  33. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  34. package/lib/programmers/http/HttpValidateFormDataProgrammer.js +5 -3
  35. package/lib/programmers/http/HttpValidateFormDataProgrammer.js.map +1 -1
  36. package/lib/programmers/http/HttpValidateHeadersProgrammer.js +5 -3
  37. package/lib/programmers/http/HttpValidateHeadersProgrammer.js.map +1 -1
  38. package/lib/programmers/http/HttpValidateQueryProgrammer.js +5 -3
  39. package/lib/programmers/http/HttpValidateQueryProgrammer.js.map +1 -1
  40. package/lib/programmers/json/JsonAssertParseProgrammer.js +14 -7
  41. package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
  42. package/lib/programmers/json/JsonAssertStringifyProgrammer.js +4 -1
  43. package/lib/programmers/json/JsonAssertStringifyProgrammer.js.map +1 -1
  44. package/lib/programmers/json/JsonIsParseProgrammer.js +10 -6
  45. package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
  46. package/lib/programmers/json/JsonValidateParseProgrammer.js +16 -4
  47. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  48. package/lib/programmers/json/JsonValidateStringifyProgrammer.js +7 -3
  49. package/lib/programmers/json/JsonValidateStringifyProgrammer.js.map +1 -1
  50. package/lib/programmers/misc/MiscAssertCloneProgrammer.js +4 -1
  51. package/lib/programmers/misc/MiscAssertCloneProgrammer.js.map +1 -1
  52. package/lib/programmers/misc/MiscAssertPruneProgrammer.js +4 -1
  53. package/lib/programmers/misc/MiscAssertPruneProgrammer.js.map +1 -1
  54. package/lib/programmers/misc/MiscCloneProgrammer.js +10 -6
  55. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  56. package/lib/programmers/misc/MiscValidateCloneProgrammer.js +5 -3
  57. package/lib/programmers/misc/MiscValidateCloneProgrammer.js.map +1 -1
  58. package/lib/programmers/misc/MiscValidatePruneProgrammer.js +10 -4
  59. package/lib/programmers/misc/MiscValidatePruneProgrammer.js.map +1 -1
  60. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js +4 -1
  61. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js.map +1 -1
  62. package/lib/programmers/notations/NotationGeneralProgrammer.d.ts +2 -1
  63. package/lib/programmers/notations/NotationGeneralProgrammer.js +13 -5
  64. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  65. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js +5 -3
  66. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js.map +1 -1
  67. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +4 -1
  68. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
  69. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.js +4 -1
  70. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.js.map +1 -1
  71. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +10 -6
  72. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  73. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +5 -3
  74. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
  75. package/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.js +7 -3
  76. package/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.js.map +1 -1
  77. package/package.json +1 -1
  78. package/src/factories/JsonMetadataFactory.ts +63 -63
  79. package/src/factories/ProtobufFactory.ts +275 -275
  80. package/src/programmers/AssertProgrammer.ts +454 -456
  81. package/src/programmers/CheckerProgrammer.ts +1610 -1610
  82. package/src/programmers/ImportProgrammer.ts +184 -109
  83. package/src/programmers/IsProgrammer.ts +273 -273
  84. package/src/programmers/RandomProgrammer.ts +168 -149
  85. package/src/programmers/TypiaProgrammer.ts +171 -171
  86. package/src/programmers/ValidateProgrammer.ts +434 -430
  87. package/src/programmers/functional/FunctionalAssertFunctionProgrammer.ts +1 -1
  88. package/src/programmers/functional/FunctionalValidateFunctionProgrammer.ts +12 -16
  89. package/src/programmers/functional/FunctionalValidateParametersProgrammer.ts +5 -12
  90. package/src/programmers/functional/FunctionalValidateReturnProgrammer.ts +1 -0
  91. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  92. package/src/programmers/http/HttpAssertFormDataProgrammer.ts +99 -96
  93. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +99 -96
  94. package/src/programmers/http/HttpAssertQueryProgrammer.ts +105 -102
  95. package/src/programmers/http/HttpFormDataProgrammer.ts +304 -308
  96. package/src/programmers/http/HttpHeadersProgrammer.ts +400 -404
  97. package/src/programmers/http/HttpIsFormDataProgrammer.ts +108 -108
  98. package/src/programmers/http/HttpIsHeadersProgrammer.ts +108 -108
  99. package/src/programmers/http/HttpIsQueryProgrammer.ts +114 -114
  100. package/src/programmers/http/HttpParameterProgrammer.ts +115 -115
  101. package/src/programmers/http/HttpQueryProgrammer.ts +329 -333
  102. package/src/programmers/http/HttpValidateFormDataProgrammer.ts +92 -90
  103. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +92 -90
  104. package/src/programmers/http/HttpValidateQueryProgrammer.ts +98 -96
  105. package/src/programmers/json/JsonApplicationProgrammer.ts +92 -92
  106. package/src/programmers/json/JsonAssertParseProgrammer.ts +103 -104
  107. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +115 -112
  108. package/src/programmers/json/JsonIsParseProgrammer.ts +114 -118
  109. package/src/programmers/json/JsonIsStringifyProgrammer.ts +108 -108
  110. package/src/programmers/json/JsonStringifyProgrammer.ts +1124 -1124
  111. package/src/programmers/json/JsonValidateParseProgrammer.ts +105 -95
  112. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +124 -119
  113. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +95 -92
  114. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +116 -113
  115. package/src/programmers/misc/MiscCloneProgrammer.ts +1025 -1029
  116. package/src/programmers/misc/MiscIsCloneProgrammer.ts +99 -99
  117. package/src/programmers/misc/MiscIsPruneProgrammer.ts +97 -97
  118. package/src/programmers/misc/MiscLiteralsProgrammer.ts +80 -80
  119. package/src/programmers/misc/MiscPruneProgrammer.ts +725 -725
  120. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +111 -109
  121. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +113 -109
  122. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +101 -98
  123. package/src/programmers/notations/NotationGeneralProgrammer.ts +977 -973
  124. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +105 -105
  125. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +119 -117
  126. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +98 -95
  127. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +102 -99
  128. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +708 -711
  129. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +1019 -1019
  130. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +109 -109
  131. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +98 -98
  132. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +92 -90
  133. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +119 -114
  134. package/src/transform.ts +35 -35
  135. package/src/transformers/CallExpressionTransformer.ts +540 -540
  136. package/src/transformers/FileTransformer.ts +120 -120
  137. package/src/transformers/IProgrammerProps.ts +11 -11
  138. package/src/transformers/ITransformOptions.ts +62 -62
  139. package/src/transformers/ITransformProps.ts +9 -9
  140. package/src/transformers/ITypiaContext.ts +18 -18
  141. package/src/transformers/ImportTransformer.ts +66 -66
  142. package/src/transformers/NodeTransformer.ts +17 -17
  143. package/src/transformers/TransformerError.ts +59 -59
  144. package/src/transformers/features/AssertTransformer.ts +24 -24
  145. package/src/transformers/features/CreateAssertTransformer.ts +24 -24
  146. package/src/transformers/features/CreateIsTransformer.ts +18 -18
  147. package/src/transformers/features/CreateRandomTransformer.ts +43 -43
  148. package/src/transformers/features/CreateValidateTransformer.ts +18 -18
  149. package/src/transformers/features/IsTransformer.ts +18 -18
  150. package/src/transformers/features/RandomTransformer.ts +41 -41
  151. package/src/transformers/features/ValidateTransformer.ts +18 -18
  152. package/src/transformers/features/functional/FunctionalGenericTransformer.ts +57 -57
  153. package/src/transformers/features/http/CreateHttpAssertFormDataTransformer.ts +13 -13
  154. package/src/transformers/features/http/CreateHttpAssertHeadersTransformer.ts +13 -13
  155. package/src/transformers/features/http/CreateHttpAssertQueryTransformer.ts +13 -13
  156. package/src/transformers/features/http/CreateHttpFormDataTransformer.ts +13 -13
  157. package/src/transformers/features/http/CreateHttpHeadersTransformer.ts +13 -13
  158. package/src/transformers/features/http/CreateHttpIsFormDataTransformer.ts +13 -13
  159. package/src/transformers/features/http/CreateHttpIsHeadersTransformer.ts +13 -13
  160. package/src/transformers/features/http/CreateHttpIsQueryTransformer.ts +13 -13
  161. package/src/transformers/features/http/CreateHttpParameterTransformer.ts +13 -13
  162. package/src/transformers/features/http/CreateHttpQueryTransformer.ts +13 -13
  163. package/src/transformers/features/http/CreateHttpValidateFormDataTransformer.ts +13 -13
  164. package/src/transformers/features/http/CreateHttpValidateHeadersTransformer.ts +13 -13
  165. package/src/transformers/features/http/CreateHttpValidateQueryTransformer.ts +13 -13
  166. package/src/transformers/features/http/HttpAssertFormDataTransformer.ts +13 -13
  167. package/src/transformers/features/http/HttpAssertHeadersTransformer.ts +13 -13
  168. package/src/transformers/features/http/HttpAssertQueryTransformer.ts +13 -13
  169. package/src/transformers/features/http/HttpFormDataTransformer.ts +13 -13
  170. package/src/transformers/features/http/HttpHeadersTransformer.ts +13 -13
  171. package/src/transformers/features/http/HttpIsFormDataTransformer.ts +13 -13
  172. package/src/transformers/features/http/HttpIsHeadersTransformer.ts +13 -13
  173. package/src/transformers/features/http/HttpIsQueryTransformer.ts +13 -13
  174. package/src/transformers/features/http/HttpParameterTransformer.ts +13 -13
  175. package/src/transformers/features/http/HttpQueryTransformer.ts +13 -13
  176. package/src/transformers/features/http/HttpValidateFormDataTransformer.ts +13 -13
  177. package/src/transformers/features/http/HttpValidateHeadersTransformer.ts +13 -13
  178. package/src/transformers/features/http/HttpValidateQueryTransformer.ts +13 -13
  179. package/src/transformers/features/json/JsonApplicationTransformer.ts +130 -130
  180. package/src/transformers/features/json/JsonAssertParseTransformer.ts +13 -13
  181. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +13 -13
  182. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +13 -13
  183. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +13 -13
  184. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +13 -13
  185. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +13 -13
  186. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +13 -13
  187. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +13 -13
  188. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +13 -13
  189. package/src/transformers/features/json/JsonIsParseTransformer.ts +13 -13
  190. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +13 -13
  191. package/src/transformers/features/json/JsonStringifyTransformer.ts +13 -13
  192. package/src/transformers/features/json/JsonValidateParseTransformer.ts +13 -13
  193. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +13 -13
  194. package/src/transformers/features/llm/LlmApplicationTransformer.ts +86 -86
  195. package/src/transformers/features/llm/LlmSchemaTransformer.ts +59 -59
  196. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +13 -13
  197. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +13 -13
  198. package/src/transformers/features/misc/MiscCloneTransformer.ts +13 -13
  199. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +13 -13
  200. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +13 -13
  201. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +13 -13
  202. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +13 -13
  203. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +13 -13
  204. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +13 -13
  205. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +13 -13
  206. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +13 -13
  207. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +13 -13
  208. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +13 -13
  209. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +35 -35
  210. package/src/transformers/features/misc/MiscPruneTransformer.ts +13 -13
  211. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +13 -13
  212. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +13 -13
  213. package/src/transformers/features/notations/NotationAssertGeneralTransformer.ts +20 -20
  214. package/src/transformers/features/notations/NotationCreateAssertGeneralTransformer.ts +20 -20
  215. package/src/transformers/features/notations/NotationCreateGeneralTransformer.ts +20 -20
  216. package/src/transformers/features/notations/NotationCreateIsGeneralTransformer.ts +20 -20
  217. package/src/transformers/features/notations/NotationCreateValidateGeneralTransformer.ts +20 -20
  218. package/src/transformers/features/notations/NotationGeneralTransformer.ts +18 -18
  219. package/src/transformers/features/notations/NotationIsGeneralTransformer.ts +20 -20
  220. package/src/transformers/features/notations/NotationValidateGeneralTransformer.ts +20 -20
  221. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +13 -13
  222. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +13 -13
  223. package/src/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.ts +13 -13
  224. package/src/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.ts +13 -13
  225. package/src/transformers/features/protobuf/ProtobufCreateDecodeTransformer.ts +13 -13
  226. package/src/transformers/features/protobuf/ProtobufCreateEncodeTransformer.ts +13 -13
  227. package/src/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.ts +13 -13
  228. package/src/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.ts +13 -13
  229. package/src/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.ts +13 -13
  230. package/src/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.ts +13 -13
  231. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +13 -13
  232. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +13 -13
  233. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +13 -13
  234. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +13 -13
  235. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +35 -35
  236. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +13 -13
  237. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +13 -13
  238. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +69 -69
  239. package/src/transformers/features/reflect/ReflectNameTransformer.ts +82 -82
  240. package/src/transformers/internal/GenericTransformer.ts +101 -101
@@ -1,120 +1,120 @@
1
- import ts from "typescript";
2
-
3
- import { ImportProgrammer } from "../programmers/ImportProgrammer";
4
-
5
- import { Singleton } from "../utils/Singleton";
6
-
7
- import { ITypiaContext } from "./ITypiaContext";
8
- import { NodeTransformer } from "./NodeTransformer";
9
- import { TransformerError } from "./TransformerError";
10
-
11
- export namespace FileTransformer {
12
- export const transform =
13
- (environments: Omit<ITypiaContext, "transformer" | "importer">) =>
14
- (transformer: ts.TransformationContext) =>
15
- (file: ts.SourceFile): ts.SourceFile => {
16
- if (file.isDeclarationFile) return file;
17
-
18
- const importer: ImportProgrammer = new ImportProgrammer();
19
- const context: ITypiaContext = {
20
- ...environments,
21
- transformer,
22
- importer,
23
- };
24
- checkJsDocParsingMode.get(context, file);
25
-
26
- file = ts.visitEachChild(
27
- file,
28
- (node) =>
29
- iterate_node({
30
- context,
31
- node,
32
- }),
33
- transformer,
34
- );
35
- return ts.factory.updateSourceFile(
36
- file,
37
- [...importer.toStatements(), ...file.statements],
38
- false,
39
- file.referencedFiles,
40
- file.typeReferenceDirectives,
41
- file.hasNoDefaultLib,
42
- file.libReferenceDirectives,
43
- );
44
- // return ts.factory.createSourceFile(
45
- // file.statements,
46
- // // [...importer.toStatements(), ...file.statements],
47
- // file.endOfFileToken as any,
48
- // file.flags,
49
- // );
50
- };
51
-
52
- const iterate_node = (props: {
53
- context: ITypiaContext;
54
- node: ts.Node;
55
- }): ts.Node =>
56
- ts.visitEachChild(
57
- try_transform_node(props) ?? props.node,
58
- (node) =>
59
- iterate_node({
60
- context: props.context,
61
- node,
62
- }),
63
- props.context.transformer,
64
- );
65
-
66
- const try_transform_node = (props: {
67
- context: ITypiaContext;
68
- node: ts.Node;
69
- }): ts.Node | null => {
70
- try {
71
- return NodeTransformer.transform(props);
72
- } catch (exp) {
73
- // ONLY ACCEPT TRANSFORMER-ERROR
74
- if (!isTransformerError(exp)) throw exp;
75
-
76
- // REPORT DIAGNOSTIC
77
- const diagnostic = ts.createDiagnosticForNode(props.node, {
78
- key: exp.code,
79
- category: ts.DiagnosticCategory.Error,
80
- message: exp.message,
81
- code: `(${exp.code})` as any,
82
- });
83
- props.context.extras.addDiagnostic(diagnostic);
84
- return null;
85
- }
86
- };
87
- }
88
-
89
- const isTransformerError = (error: any): error is TransformerError =>
90
- typeof error === "object" &&
91
- error !== null &&
92
- error.constructor.name === "TransformerError" &&
93
- typeof error.code === "string" &&
94
- typeof error.message === "string";
95
-
96
- const checkJsDocParsingMode = new Singleton(
97
- (context: ITypiaContext, file: ts.SourceFile) => {
98
- if (
99
- typeof file.jsDocParsingMode === "number" &&
100
- file.jsDocParsingMode !== 0
101
- ) {
102
- context.extras.addDiagnostic(
103
- ts.createDiagnosticForNode(file, {
104
- code: `(typia setup)` as any,
105
- key: "jsDocParsingMode",
106
- category: ts.DiagnosticCategory.Warning,
107
- message: [
108
- `Run "npx typia setup" or "npx typia patch" command again.`,
109
- ``,
110
- `Since TypeScript v5.3 update, "tsc" no more parses JSDoc comments. Therefore, "typia" also cannot utilize those JSDoc comments too, and it damages on some features of "typia" like "comment tags" or "JSON schema" generator.`,
111
- ``,
112
- `To solve this problem, run "npx typia setup" or "npx typia patch" command to hack the TypeScript compiler to revive the JSDoc parsing feature.`,
113
- ``,
114
- ` - reference: https://github.com/microsoft/TypeScript/pull/55739`,
115
- ].join("\n"),
116
- }),
117
- );
118
- }
119
- },
120
- );
1
+ import ts from "typescript";
2
+
3
+ import { ImportProgrammer } from "../programmers/ImportProgrammer";
4
+
5
+ import { Singleton } from "../utils/Singleton";
6
+
7
+ import { ITypiaContext } from "./ITypiaContext";
8
+ import { NodeTransformer } from "./NodeTransformer";
9
+ import { TransformerError } from "./TransformerError";
10
+
11
+ export namespace FileTransformer {
12
+ export const transform =
13
+ (environments: Omit<ITypiaContext, "transformer" | "importer">) =>
14
+ (transformer: ts.TransformationContext) =>
15
+ (file: ts.SourceFile): ts.SourceFile => {
16
+ if (file.isDeclarationFile) return file;
17
+
18
+ const importer: ImportProgrammer = new ImportProgrammer();
19
+ const context: ITypiaContext = {
20
+ ...environments,
21
+ transformer,
22
+ importer,
23
+ };
24
+ checkJsDocParsingMode.get(context, file);
25
+
26
+ file = ts.visitEachChild(
27
+ file,
28
+ (node) =>
29
+ iterate_node({
30
+ context,
31
+ node,
32
+ }),
33
+ transformer,
34
+ );
35
+ return ts.factory.updateSourceFile(
36
+ file,
37
+ [...importer.toStatements(), ...file.statements],
38
+ false,
39
+ file.referencedFiles,
40
+ file.typeReferenceDirectives,
41
+ file.hasNoDefaultLib,
42
+ file.libReferenceDirectives,
43
+ );
44
+ // return ts.factory.createSourceFile(
45
+ // file.statements,
46
+ // // [...importer.toStatements(), ...file.statements],
47
+ // file.endOfFileToken as any,
48
+ // file.flags,
49
+ // );
50
+ };
51
+
52
+ const iterate_node = (props: {
53
+ context: ITypiaContext;
54
+ node: ts.Node;
55
+ }): ts.Node =>
56
+ ts.visitEachChild(
57
+ try_transform_node(props) ?? props.node,
58
+ (node) =>
59
+ iterate_node({
60
+ context: props.context,
61
+ node,
62
+ }),
63
+ props.context.transformer,
64
+ );
65
+
66
+ const try_transform_node = (props: {
67
+ context: ITypiaContext;
68
+ node: ts.Node;
69
+ }): ts.Node | null => {
70
+ try {
71
+ return NodeTransformer.transform(props);
72
+ } catch (exp) {
73
+ // ONLY ACCEPT TRANSFORMER-ERROR
74
+ if (!isTransformerError(exp)) throw exp;
75
+
76
+ // REPORT DIAGNOSTIC
77
+ const diagnostic = ts.createDiagnosticForNode(props.node, {
78
+ key: exp.code,
79
+ category: ts.DiagnosticCategory.Error,
80
+ message: exp.message,
81
+ code: `(${exp.code})` as any,
82
+ });
83
+ props.context.extras.addDiagnostic(diagnostic);
84
+ return null;
85
+ }
86
+ };
87
+ }
88
+
89
+ const isTransformerError = (error: any): error is TransformerError =>
90
+ typeof error === "object" &&
91
+ error !== null &&
92
+ error.constructor.name === "TransformerError" &&
93
+ typeof error.code === "string" &&
94
+ typeof error.message === "string";
95
+
96
+ const checkJsDocParsingMode = new Singleton(
97
+ (context: ITypiaContext, file: ts.SourceFile) => {
98
+ if (
99
+ typeof file.jsDocParsingMode === "number" &&
100
+ file.jsDocParsingMode !== 0
101
+ ) {
102
+ context.extras.addDiagnostic(
103
+ ts.createDiagnosticForNode(file, {
104
+ code: `(typia setup)` as any,
105
+ key: "jsDocParsingMode",
106
+ category: ts.DiagnosticCategory.Warning,
107
+ message: [
108
+ `Run "npx typia setup" or "npx typia patch" command again.`,
109
+ ``,
110
+ `Since TypeScript v5.3 update, "tsc" no more parses JSDoc comments. Therefore, "typia" also cannot utilize those JSDoc comments too, and it damages on some features of "typia" like "comment tags" or "JSON schema" generator.`,
111
+ ``,
112
+ `To solve this problem, run "npx typia setup" or "npx typia patch" command to hack the TypeScript compiler to revive the JSDoc parsing feature.`,
113
+ ``,
114
+ ` - reference: https://github.com/microsoft/TypeScript/pull/55739`,
115
+ ].join("\n"),
116
+ }),
117
+ );
118
+ }
119
+ },
120
+ );
@@ -1,11 +1,11 @@
1
- import ts from "typescript";
2
-
3
- import { ITypiaContext } from "./ITypiaContext";
4
-
5
- export interface IProgrammerProps {
6
- context: ITypiaContext;
7
- modulo: ts.LeftHandSideExpression;
8
- type: ts.Type;
9
- name: string | undefined;
10
- init?: ts.Expression | undefined;
11
- }
1
+ import ts from "typescript";
2
+
3
+ import { ITypiaContext } from "./ITypiaContext";
4
+
5
+ export interface IProgrammerProps {
6
+ context: ITypiaContext;
7
+ modulo: ts.LeftHandSideExpression;
8
+ type: ts.Type;
9
+ name: string | undefined;
10
+ init?: ts.Expression | undefined;
11
+ }
@@ -1,62 +1,62 @@
1
- export interface ITransformOptions {
2
- /**
3
- * Whether to validate finite number or not.
4
- *
5
- * If configured true, number typed values would be validated by Number.isNaN().
6
- *
7
- * However, whatever you configure, it would be ignored when marshaling or parsing.
8
- *
9
- * - when marshaling, always be true
10
- * - assertStringify()
11
- * - validateEncode()
12
- * - when parsing, always be false
13
- * - assertParse()
14
- * - isDecode()
15
- *
16
- * @default false
17
- */
18
- finite?: undefined | boolean;
19
-
20
- /**
21
- * Whether to validate finite number or not.
22
- *
23
- * If configured true, number typed values would be validated by Number.isFinite().
24
- *
25
- * However, whatever you configure, it can be ignored in below case.
26
- *
27
- * - when `finite` option is true, this option would be ignored
28
- * - when marshaling, always be true
29
- * - assertStringify()
30
- * - validateEncode()
31
- * - when parsing, always be false
32
- * - assertParse()
33
- * - isDecode()
34
- *
35
- * @default false
36
- */
37
- numeric?: undefined | boolean;
38
-
39
- /**
40
- * Whether to validate functional type or not.
41
- *
42
- * However, whatever you configure, it becomes false when marshaling or parsing.
43
- *
44
- * @default false
45
- */
46
- functional?: undefined | boolean;
47
-
48
- /**
49
- * Whether to check undefined value or not.
50
- *
51
- * JavaScript can assign `undefined` value to a specific property and it is an
52
- * issue when validating without allowing superfluous properties. Should undefined
53
- * value assigned superfluous property be allowed or not?
54
- *
55
- * Note that, this option only works on {@link equals} function. Other function
56
- * like {@link assertEquals} or {@link validateEquals} would ignore this option
57
- * value and always allow the `undefined` value.
58
- *
59
- * @default true
60
- */
61
- undefined?: undefined | boolean;
62
- }
1
+ export interface ITransformOptions {
2
+ /**
3
+ * Whether to validate finite number or not.
4
+ *
5
+ * If configured true, number typed values would be validated by Number.isNaN().
6
+ *
7
+ * However, whatever you configure, it would be ignored when marshaling or parsing.
8
+ *
9
+ * - when marshaling, always be true
10
+ * - assertStringify()
11
+ * - validateEncode()
12
+ * - when parsing, always be false
13
+ * - assertParse()
14
+ * - isDecode()
15
+ *
16
+ * @default false
17
+ */
18
+ finite?: undefined | boolean;
19
+
20
+ /**
21
+ * Whether to validate finite number or not.
22
+ *
23
+ * If configured true, number typed values would be validated by Number.isFinite().
24
+ *
25
+ * However, whatever you configure, it can be ignored in below case.
26
+ *
27
+ * - when `finite` option is true, this option would be ignored
28
+ * - when marshaling, always be true
29
+ * - assertStringify()
30
+ * - validateEncode()
31
+ * - when parsing, always be false
32
+ * - assertParse()
33
+ * - isDecode()
34
+ *
35
+ * @default false
36
+ */
37
+ numeric?: undefined | boolean;
38
+
39
+ /**
40
+ * Whether to validate functional type or not.
41
+ *
42
+ * However, whatever you configure, it becomes false when marshaling or parsing.
43
+ *
44
+ * @default false
45
+ */
46
+ functional?: undefined | boolean;
47
+
48
+ /**
49
+ * Whether to check undefined value or not.
50
+ *
51
+ * JavaScript can assign `undefined` value to a specific property and it is an
52
+ * issue when validating without allowing superfluous properties. Should undefined
53
+ * value assigned superfluous property be allowed or not?
54
+ *
55
+ * Note that, this option only works on {@link equals} function. Other function
56
+ * like {@link assertEquals} or {@link validateEquals} would ignore this option
57
+ * value and always allow the `undefined` value.
58
+ *
59
+ * @default true
60
+ */
61
+ undefined?: undefined | boolean;
62
+ }
@@ -1,9 +1,9 @@
1
- import ts from "typescript";
2
-
3
- import { ITypiaContext } from "./ITypiaContext";
4
-
5
- export interface ITransformProps {
6
- context: ITypiaContext;
7
- modulo: ts.LeftHandSideExpression;
8
- expression: ts.CallExpression;
9
- }
1
+ import ts from "typescript";
2
+
3
+ import { ITypiaContext } from "./ITypiaContext";
4
+
5
+ export interface ITransformProps {
6
+ context: ITypiaContext;
7
+ modulo: ts.LeftHandSideExpression;
8
+ expression: ts.CallExpression;
9
+ }
@@ -1,18 +1,18 @@
1
- import ts from "typescript";
2
-
3
- import { ImportProgrammer } from "../programmers/ImportProgrammer";
4
-
5
- import { ITransformOptions } from "./ITransformOptions";
6
-
7
- export interface ITypiaContext {
8
- program: ts.Program;
9
- compilerOptions: ts.CompilerOptions;
10
- checker: ts.TypeChecker;
11
- printer: ts.Printer;
12
- options: ITransformOptions;
13
- transformer: ts.TransformationContext;
14
- importer: ImportProgrammer;
15
- extras: {
16
- addDiagnostic: (diag: ts.Diagnostic) => number;
17
- };
18
- }
1
+ import ts from "typescript";
2
+
3
+ import { ImportProgrammer } from "../programmers/ImportProgrammer";
4
+
5
+ import { ITransformOptions } from "./ITransformOptions";
6
+
7
+ export interface ITypiaContext {
8
+ program: ts.Program;
9
+ compilerOptions: ts.CompilerOptions;
10
+ checker: ts.TypeChecker;
11
+ printer: ts.Printer;
12
+ options: ITransformOptions;
13
+ transformer: ts.TransformationContext;
14
+ importer: ImportProgrammer;
15
+ extras: {
16
+ addDiagnostic: (diag: ts.Diagnostic) => number;
17
+ };
18
+ }
@@ -1,66 +1,66 @@
1
- import path from "path";
2
- import ts from "typescript";
3
-
4
- export namespace ImportTransformer {
5
- export const transform =
6
- (from: string) =>
7
- (to: string) =>
8
- (context: ts.TransformationContext) =>
9
- (file: ts.SourceFile) =>
10
- transform_file(from)(to)(context)(file);
11
-
12
- const transform_file =
13
- (top: string) =>
14
- (to: string) =>
15
- (context: ts.TransformationContext) =>
16
- (file: ts.SourceFile): ts.SourceFile => {
17
- if (file.isDeclarationFile) return file;
18
-
19
- const from: string = get_directory_path(
20
- path.resolve(file.getSourceFile().fileName),
21
- );
22
- to = from.replace(top, to);
23
-
24
- return ts.visitEachChild(
25
- file,
26
- (node) => transform_node(top)(from)(to)(node),
27
- context,
28
- );
29
- };
30
-
31
- const transform_node =
32
- (top: string) => (from: string) => (to: string) => (node: ts.Node) => {
33
- if (
34
- !ts.isImportDeclaration(node) ||
35
- !ts.isStringLiteral(node.moduleSpecifier)
36
- )
37
- return node;
38
-
39
- const text: string = node.moduleSpecifier.text;
40
- if (text[0] !== ".") return node;
41
-
42
- const location: string = path.resolve(from, text);
43
- if (location.indexOf(top) === 0) return node;
44
-
45
- const replaced: string = (() => {
46
- const simple: string = path
47
- .relative(to, location)
48
- .split(path.sep)
49
- .join("/");
50
- return simple[0] === "." ? simple : `./${simple}`;
51
- })();
52
-
53
- return ts.factory.createImportDeclaration(
54
- undefined,
55
- node.importClause,
56
- ts.factory.createStringLiteral(replaced),
57
- node.assertClause,
58
- );
59
- };
60
- }
61
-
62
- const get_directory_path = (file: string): string => {
63
- const splitted: string[] = path.resolve(file).split(path.sep);
64
- splitted.pop();
65
- return path.resolve(splitted.join(path.sep));
66
- };
1
+ import path from "path";
2
+ import ts from "typescript";
3
+
4
+ export namespace ImportTransformer {
5
+ export const transform =
6
+ (from: string) =>
7
+ (to: string) =>
8
+ (context: ts.TransformationContext) =>
9
+ (file: ts.SourceFile) =>
10
+ transform_file(from)(to)(context)(file);
11
+
12
+ const transform_file =
13
+ (top: string) =>
14
+ (to: string) =>
15
+ (context: ts.TransformationContext) =>
16
+ (file: ts.SourceFile): ts.SourceFile => {
17
+ if (file.isDeclarationFile) return file;
18
+
19
+ const from: string = get_directory_path(
20
+ path.resolve(file.getSourceFile().fileName),
21
+ );
22
+ to = from.replace(top, to);
23
+
24
+ return ts.visitEachChild(
25
+ file,
26
+ (node) => transform_node(top)(from)(to)(node),
27
+ context,
28
+ );
29
+ };
30
+
31
+ const transform_node =
32
+ (top: string) => (from: string) => (to: string) => (node: ts.Node) => {
33
+ if (
34
+ !ts.isImportDeclaration(node) ||
35
+ !ts.isStringLiteral(node.moduleSpecifier)
36
+ )
37
+ return node;
38
+
39
+ const text: string = node.moduleSpecifier.text;
40
+ if (text[0] !== ".") return node;
41
+
42
+ const location: string = path.resolve(from, text);
43
+ if (location.indexOf(top) === 0) return node;
44
+
45
+ const replaced: string = (() => {
46
+ const simple: string = path
47
+ .relative(to, location)
48
+ .split(path.sep)
49
+ .join("/");
50
+ return simple[0] === "." ? simple : `./${simple}`;
51
+ })();
52
+
53
+ return ts.factory.createImportDeclaration(
54
+ undefined,
55
+ node.importClause,
56
+ ts.factory.createStringLiteral(replaced),
57
+ node.assertClause,
58
+ );
59
+ };
60
+ }
61
+
62
+ const get_directory_path = (file: string): string => {
63
+ const splitted: string[] = path.resolve(file).split(path.sep);
64
+ splitted.pop();
65
+ return path.resolve(splitted.join(path.sep));
66
+ };
@@ -1,17 +1,17 @@
1
- import ts from "typescript";
2
-
3
- import { CallExpressionTransformer } from "./CallExpressionTransformer";
4
- import { ITypiaContext } from "./ITypiaContext";
5
-
6
- export namespace NodeTransformer {
7
- export const transform = (props: {
8
- context: ITypiaContext;
9
- node: ts.Node;
10
- }): ts.Node | null =>
11
- ts.isCallExpression(props.node) && props.node.parent
12
- ? CallExpressionTransformer.transform({
13
- context: props.context,
14
- expression: props.node,
15
- })
16
- : props.node;
17
- }
1
+ import ts from "typescript";
2
+
3
+ import { CallExpressionTransformer } from "./CallExpressionTransformer";
4
+ import { ITypiaContext } from "./ITypiaContext";
5
+
6
+ export namespace NodeTransformer {
7
+ export const transform = (props: {
8
+ context: ITypiaContext;
9
+ node: ts.Node;
10
+ }): ts.Node | null =>
11
+ ts.isCallExpression(props.node) && props.node.parent
12
+ ? CallExpressionTransformer.transform({
13
+ context: props.context,
14
+ expression: props.node,
15
+ })
16
+ : props.node;
17
+ }