typia 7.0.0-dev.20241007 → 7.0.0-dev.20241009

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 (244) hide show
  1. package/lib/factories/ExpressionFactory.d.ts +1 -1
  2. package/lib/factories/ValueFactory.d.ts +1 -1
  3. package/lib/internal/$jsonStringifyString.d.ts +13 -1
  4. package/lib/internal/$jsonStringifyString.js +0 -1
  5. package/lib/internal/$jsonStringifyString.js.map +1 -1
  6. package/lib/programmers/AssertProgrammer.d.ts +5 -2
  7. package/lib/programmers/AssertProgrammer.js +12 -5
  8. package/lib/programmers/AssertProgrammer.js.map +1 -1
  9. package/lib/programmers/ImportProgrammer.d.ts +25 -4
  10. package/lib/programmers/ImportProgrammer.js +67 -31
  11. package/lib/programmers/ImportProgrammer.js.map +1 -1
  12. package/lib/programmers/RandomProgrammer.js +48 -32
  13. package/lib/programmers/RandomProgrammer.js.map +1 -1
  14. package/lib/programmers/ValidateProgrammer.js +10 -4
  15. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  16. package/lib/programmers/functional/FunctionalAssertFunctionProgrammer.js +1 -1
  17. package/lib/programmers/functional/FunctionalAssertFunctionProgrammer.js.map +1 -1
  18. package/lib/programmers/functional/FunctionalValidateFunctionProgrammer.d.ts +1 -0
  19. package/lib/programmers/functional/FunctionalValidateFunctionProgrammer.js +14 -5
  20. package/lib/programmers/functional/FunctionalValidateFunctionProgrammer.js.map +1 -1
  21. package/lib/programmers/functional/FunctionalValidateParametersProgrammer.js +5 -1
  22. package/lib/programmers/functional/FunctionalValidateParametersProgrammer.js.map +1 -1
  23. package/lib/programmers/functional/FunctionalValidateReturnProgrammer.js +1 -0
  24. package/lib/programmers/functional/FunctionalValidateReturnProgrammer.js.map +1 -1
  25. package/lib/programmers/http/HttpAssertFormDataProgrammer.js +4 -1
  26. package/lib/programmers/http/HttpAssertFormDataProgrammer.js.map +1 -1
  27. package/lib/programmers/http/HttpAssertHeadersProgrammer.js +4 -1
  28. package/lib/programmers/http/HttpAssertHeadersProgrammer.js.map +1 -1
  29. package/lib/programmers/http/HttpAssertQueryProgrammer.js +4 -1
  30. package/lib/programmers/http/HttpAssertQueryProgrammer.js.map +1 -1
  31. package/lib/programmers/http/HttpFormDataProgrammer.js +10 -6
  32. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  33. package/lib/programmers/http/HttpHeadersProgrammer.js +10 -6
  34. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  35. package/lib/programmers/http/HttpQueryProgrammer.js +10 -6
  36. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  37. package/lib/programmers/http/HttpValidateFormDataProgrammer.js +5 -3
  38. package/lib/programmers/http/HttpValidateFormDataProgrammer.js.map +1 -1
  39. package/lib/programmers/http/HttpValidateHeadersProgrammer.js +5 -3
  40. package/lib/programmers/http/HttpValidateHeadersProgrammer.js.map +1 -1
  41. package/lib/programmers/http/HttpValidateQueryProgrammer.js +5 -3
  42. package/lib/programmers/http/HttpValidateQueryProgrammer.js.map +1 -1
  43. package/lib/programmers/json/JsonAssertParseProgrammer.js +14 -7
  44. package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
  45. package/lib/programmers/json/JsonAssertStringifyProgrammer.js +4 -1
  46. package/lib/programmers/json/JsonAssertStringifyProgrammer.js.map +1 -1
  47. package/lib/programmers/json/JsonIsParseProgrammer.js +10 -6
  48. package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
  49. package/lib/programmers/json/JsonValidateParseProgrammer.js +16 -4
  50. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  51. package/lib/programmers/json/JsonValidateStringifyProgrammer.js +7 -3
  52. package/lib/programmers/json/JsonValidateStringifyProgrammer.js.map +1 -1
  53. package/lib/programmers/misc/MiscAssertCloneProgrammer.js +4 -1
  54. package/lib/programmers/misc/MiscAssertCloneProgrammer.js.map +1 -1
  55. package/lib/programmers/misc/MiscAssertPruneProgrammer.js +4 -1
  56. package/lib/programmers/misc/MiscAssertPruneProgrammer.js.map +1 -1
  57. package/lib/programmers/misc/MiscCloneProgrammer.js +10 -6
  58. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  59. package/lib/programmers/misc/MiscValidateCloneProgrammer.js +5 -3
  60. package/lib/programmers/misc/MiscValidateCloneProgrammer.js.map +1 -1
  61. package/lib/programmers/misc/MiscValidatePruneProgrammer.js +10 -4
  62. package/lib/programmers/misc/MiscValidatePruneProgrammer.js.map +1 -1
  63. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js +4 -1
  64. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js.map +1 -1
  65. package/lib/programmers/notations/NotationGeneralProgrammer.d.ts +2 -1
  66. package/lib/programmers/notations/NotationGeneralProgrammer.js +13 -5
  67. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  68. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js +5 -3
  69. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js.map +1 -1
  70. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +4 -1
  71. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
  72. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.js +4 -1
  73. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.js.map +1 -1
  74. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +10 -6
  75. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  76. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +5 -3
  77. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
  78. package/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.js +7 -3
  79. package/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.js.map +1 -1
  80. package/package.json +1 -1
  81. package/src/factories/JsonMetadataFactory.ts +63 -63
  82. package/src/factories/ProtobufFactory.ts +275 -275
  83. package/src/internal/$jsonStringifyString.ts +0 -1
  84. package/src/programmers/AssertProgrammer.ts +454 -456
  85. package/src/programmers/CheckerProgrammer.ts +1610 -1610
  86. package/src/programmers/ImportProgrammer.ts +184 -109
  87. package/src/programmers/IsProgrammer.ts +273 -273
  88. package/src/programmers/RandomProgrammer.ts +168 -149
  89. package/src/programmers/TypiaProgrammer.ts +171 -171
  90. package/src/programmers/ValidateProgrammer.ts +434 -430
  91. package/src/programmers/functional/FunctionalAssertFunctionProgrammer.ts +1 -1
  92. package/src/programmers/functional/FunctionalValidateFunctionProgrammer.ts +12 -16
  93. package/src/programmers/functional/FunctionalValidateParametersProgrammer.ts +5 -12
  94. package/src/programmers/functional/FunctionalValidateReturnProgrammer.ts +1 -0
  95. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  96. package/src/programmers/http/HttpAssertFormDataProgrammer.ts +99 -96
  97. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +99 -96
  98. package/src/programmers/http/HttpAssertQueryProgrammer.ts +105 -102
  99. package/src/programmers/http/HttpFormDataProgrammer.ts +304 -308
  100. package/src/programmers/http/HttpHeadersProgrammer.ts +400 -404
  101. package/src/programmers/http/HttpIsFormDataProgrammer.ts +108 -108
  102. package/src/programmers/http/HttpIsHeadersProgrammer.ts +108 -108
  103. package/src/programmers/http/HttpIsQueryProgrammer.ts +114 -114
  104. package/src/programmers/http/HttpParameterProgrammer.ts +115 -115
  105. package/src/programmers/http/HttpQueryProgrammer.ts +329 -333
  106. package/src/programmers/http/HttpValidateFormDataProgrammer.ts +92 -90
  107. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +92 -90
  108. package/src/programmers/http/HttpValidateQueryProgrammer.ts +98 -96
  109. package/src/programmers/json/JsonApplicationProgrammer.ts +92 -92
  110. package/src/programmers/json/JsonAssertParseProgrammer.ts +103 -104
  111. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +115 -112
  112. package/src/programmers/json/JsonIsParseProgrammer.ts +114 -118
  113. package/src/programmers/json/JsonIsStringifyProgrammer.ts +108 -108
  114. package/src/programmers/json/JsonStringifyProgrammer.ts +1124 -1124
  115. package/src/programmers/json/JsonValidateParseProgrammer.ts +105 -95
  116. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +124 -119
  117. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +95 -92
  118. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +116 -113
  119. package/src/programmers/misc/MiscCloneProgrammer.ts +1025 -1029
  120. package/src/programmers/misc/MiscIsCloneProgrammer.ts +99 -99
  121. package/src/programmers/misc/MiscIsPruneProgrammer.ts +97 -97
  122. package/src/programmers/misc/MiscLiteralsProgrammer.ts +80 -80
  123. package/src/programmers/misc/MiscPruneProgrammer.ts +725 -725
  124. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +111 -109
  125. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +113 -109
  126. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +101 -98
  127. package/src/programmers/notations/NotationGeneralProgrammer.ts +977 -973
  128. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +105 -105
  129. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +119 -117
  130. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +98 -95
  131. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +102 -99
  132. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +708 -711
  133. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +1019 -1019
  134. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +109 -109
  135. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +98 -98
  136. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +92 -90
  137. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +119 -114
  138. package/src/transform.ts +35 -35
  139. package/src/transformers/CallExpressionTransformer.ts +540 -540
  140. package/src/transformers/FileTransformer.ts +120 -120
  141. package/src/transformers/IProgrammerProps.ts +11 -11
  142. package/src/transformers/ITransformOptions.ts +62 -62
  143. package/src/transformers/ITransformProps.ts +9 -9
  144. package/src/transformers/ITypiaContext.ts +18 -18
  145. package/src/transformers/ImportTransformer.ts +66 -66
  146. package/src/transformers/NodeTransformer.ts +17 -17
  147. package/src/transformers/TransformerError.ts +59 -59
  148. package/src/transformers/features/AssertTransformer.ts +24 -24
  149. package/src/transformers/features/CreateAssertTransformer.ts +24 -24
  150. package/src/transformers/features/CreateIsTransformer.ts +18 -18
  151. package/src/transformers/features/CreateRandomTransformer.ts +43 -43
  152. package/src/transformers/features/CreateValidateTransformer.ts +18 -18
  153. package/src/transformers/features/IsTransformer.ts +18 -18
  154. package/src/transformers/features/RandomTransformer.ts +41 -41
  155. package/src/transformers/features/ValidateTransformer.ts +18 -18
  156. package/src/transformers/features/functional/FunctionalGenericTransformer.ts +57 -57
  157. package/src/transformers/features/http/CreateHttpAssertFormDataTransformer.ts +13 -13
  158. package/src/transformers/features/http/CreateHttpAssertHeadersTransformer.ts +13 -13
  159. package/src/transformers/features/http/CreateHttpAssertQueryTransformer.ts +13 -13
  160. package/src/transformers/features/http/CreateHttpFormDataTransformer.ts +13 -13
  161. package/src/transformers/features/http/CreateHttpHeadersTransformer.ts +13 -13
  162. package/src/transformers/features/http/CreateHttpIsFormDataTransformer.ts +13 -13
  163. package/src/transformers/features/http/CreateHttpIsHeadersTransformer.ts +13 -13
  164. package/src/transformers/features/http/CreateHttpIsQueryTransformer.ts +13 -13
  165. package/src/transformers/features/http/CreateHttpParameterTransformer.ts +13 -13
  166. package/src/transformers/features/http/CreateHttpQueryTransformer.ts +13 -13
  167. package/src/transformers/features/http/CreateHttpValidateFormDataTransformer.ts +13 -13
  168. package/src/transformers/features/http/CreateHttpValidateHeadersTransformer.ts +13 -13
  169. package/src/transformers/features/http/CreateHttpValidateQueryTransformer.ts +13 -13
  170. package/src/transformers/features/http/HttpAssertFormDataTransformer.ts +13 -13
  171. package/src/transformers/features/http/HttpAssertHeadersTransformer.ts +13 -13
  172. package/src/transformers/features/http/HttpAssertQueryTransformer.ts +13 -13
  173. package/src/transformers/features/http/HttpFormDataTransformer.ts +13 -13
  174. package/src/transformers/features/http/HttpHeadersTransformer.ts +13 -13
  175. package/src/transformers/features/http/HttpIsFormDataTransformer.ts +13 -13
  176. package/src/transformers/features/http/HttpIsHeadersTransformer.ts +13 -13
  177. package/src/transformers/features/http/HttpIsQueryTransformer.ts +13 -13
  178. package/src/transformers/features/http/HttpParameterTransformer.ts +13 -13
  179. package/src/transformers/features/http/HttpQueryTransformer.ts +13 -13
  180. package/src/transformers/features/http/HttpValidateFormDataTransformer.ts +13 -13
  181. package/src/transformers/features/http/HttpValidateHeadersTransformer.ts +13 -13
  182. package/src/transformers/features/http/HttpValidateQueryTransformer.ts +13 -13
  183. package/src/transformers/features/json/JsonApplicationTransformer.ts +130 -130
  184. package/src/transformers/features/json/JsonAssertParseTransformer.ts +13 -13
  185. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +13 -13
  186. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +13 -13
  187. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +13 -13
  188. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +13 -13
  189. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +13 -13
  190. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +13 -13
  191. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +13 -13
  192. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +13 -13
  193. package/src/transformers/features/json/JsonIsParseTransformer.ts +13 -13
  194. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +13 -13
  195. package/src/transformers/features/json/JsonStringifyTransformer.ts +13 -13
  196. package/src/transformers/features/json/JsonValidateParseTransformer.ts +13 -13
  197. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +13 -13
  198. package/src/transformers/features/llm/LlmApplicationTransformer.ts +86 -86
  199. package/src/transformers/features/llm/LlmSchemaTransformer.ts +59 -59
  200. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +13 -13
  201. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +13 -13
  202. package/src/transformers/features/misc/MiscCloneTransformer.ts +13 -13
  203. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +13 -13
  204. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +13 -13
  205. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +13 -13
  206. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +13 -13
  207. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +13 -13
  208. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +13 -13
  209. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +13 -13
  210. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +13 -13
  211. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +13 -13
  212. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +13 -13
  213. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +35 -35
  214. package/src/transformers/features/misc/MiscPruneTransformer.ts +13 -13
  215. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +13 -13
  216. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +13 -13
  217. package/src/transformers/features/notations/NotationAssertGeneralTransformer.ts +20 -20
  218. package/src/transformers/features/notations/NotationCreateAssertGeneralTransformer.ts +20 -20
  219. package/src/transformers/features/notations/NotationCreateGeneralTransformer.ts +20 -20
  220. package/src/transformers/features/notations/NotationCreateIsGeneralTransformer.ts +20 -20
  221. package/src/transformers/features/notations/NotationCreateValidateGeneralTransformer.ts +20 -20
  222. package/src/transformers/features/notations/NotationGeneralTransformer.ts +18 -18
  223. package/src/transformers/features/notations/NotationIsGeneralTransformer.ts +20 -20
  224. package/src/transformers/features/notations/NotationValidateGeneralTransformer.ts +20 -20
  225. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +13 -13
  226. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +13 -13
  227. package/src/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.ts +13 -13
  228. package/src/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.ts +13 -13
  229. package/src/transformers/features/protobuf/ProtobufCreateDecodeTransformer.ts +13 -13
  230. package/src/transformers/features/protobuf/ProtobufCreateEncodeTransformer.ts +13 -13
  231. package/src/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.ts +13 -13
  232. package/src/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.ts +13 -13
  233. package/src/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.ts +13 -13
  234. package/src/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.ts +13 -13
  235. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +13 -13
  236. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +13 -13
  237. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +13 -13
  238. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +13 -13
  239. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +35 -35
  240. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +13 -13
  241. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +13 -13
  242. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +69 -69
  243. package/src/transformers/features/reflect/ReflectNameTransformer.ts +82 -82
  244. 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
+ }