@nestia/sdk 11.2.1 → 12.0.0-dev.20260520.1

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 (270) hide show
  1. package/assets/bundle/distribute/package.json +1 -1
  2. package/lib/NestiaSdkApplication.js +5 -4
  3. package/lib/NestiaSdkApplication.js.map +1 -1
  4. package/lib/NestiaSwaggerComposer.js +2 -2
  5. package/lib/NestiaSwaggerComposer.js.map +1 -1
  6. package/lib/analyses/AccessorAnalyzer.js.map +1 -1
  7. package/lib/analyses/ConfigAnalyzer.js +133 -7
  8. package/lib/analyses/ConfigAnalyzer.js.map +1 -1
  9. package/lib/analyses/ImportAnalyzer.d.ts +9 -2
  10. package/lib/analyses/ImportAnalyzer.js +13 -50
  11. package/lib/analyses/ImportAnalyzer.js.map +1 -1
  12. package/lib/analyses/PathAnalyzer.js.map +1 -1
  13. package/lib/analyses/ReflectControllerAnalyzer.js.map +1 -1
  14. package/lib/analyses/ReflectHttpOperationAnalyzer.d.ts +1 -1
  15. package/lib/analyses/ReflectHttpOperationAnalyzer.js +5 -4
  16. package/lib/analyses/ReflectHttpOperationAnalyzer.js.map +1 -1
  17. package/lib/analyses/ReflectHttpOperationExceptionAnalyzer.d.ts +1 -1
  18. package/lib/analyses/ReflectHttpOperationExceptionAnalyzer.js +22 -5
  19. package/lib/analyses/ReflectHttpOperationExceptionAnalyzer.js.map +1 -1
  20. package/lib/analyses/ReflectHttpOperationParameterAnalyzer.d.ts +1 -1
  21. package/lib/analyses/ReflectHttpOperationParameterAnalyzer.js +8 -8
  22. package/lib/analyses/ReflectHttpOperationParameterAnalyzer.js.map +1 -1
  23. package/lib/analyses/ReflectHttpOperationResponseAnalyzer.d.ts +1 -1
  24. package/lib/analyses/ReflectHttpOperationResponseAnalyzer.js +15 -15
  25. package/lib/analyses/ReflectHttpOperationResponseAnalyzer.js.map +1 -1
  26. package/lib/analyses/ReflectMetadataAnalyzer.js.map +1 -1
  27. package/lib/analyses/ReflectWebSocketOperationAnalyzer.d.ts +1 -1
  28. package/lib/analyses/ReflectWebSocketOperationAnalyzer.js +1 -1
  29. package/lib/analyses/ReflectWebSocketOperationAnalyzer.js.map +1 -1
  30. package/lib/analyses/SecurityAnalyzer.js.map +1 -1
  31. package/lib/analyses/TypedHttpRouteAnalyzer.d.ts +2 -1
  32. package/lib/analyses/TypedHttpRouteAnalyzer.js +296 -39
  33. package/lib/analyses/TypedHttpRouteAnalyzer.js.map +1 -1
  34. package/lib/analyses/TypedWebSocketRouteAnalyzer.js +1 -4
  35. package/lib/analyses/TypedWebSocketRouteAnalyzer.js.map +1 -1
  36. package/lib/decorators/OperationMetadata.d.ts +1 -1
  37. package/lib/decorators/OperationMetadata.js.map +1 -1
  38. package/lib/executable/internal/CommandParser.js.map +1 -1
  39. package/lib/executable/internal/NestiaConfigLoader.d.ts +6 -2
  40. package/lib/executable/internal/NestiaConfigLoader.js +285 -793
  41. package/lib/executable/internal/NestiaConfigLoader.js.map +1 -1
  42. package/lib/executable/internal/NestiaSdkCommand.js +6 -4
  43. package/lib/executable/internal/NestiaSdkCommand.js.map +1 -1
  44. package/lib/executable/sdk.js +17 -5
  45. package/lib/executable/sdk.js.map +1 -1
  46. package/lib/generates/CloneGenerator.js +2 -2
  47. package/lib/generates/CloneGenerator.js.map +1 -1
  48. package/lib/generates/E2eGenerator.js.map +1 -1
  49. package/lib/generates/SdkGenerator.js +6 -9
  50. package/lib/generates/SdkGenerator.js.map +1 -1
  51. package/lib/generates/SwaggerGenerator.js +20 -107
  52. package/lib/generates/SwaggerGenerator.js.map +1 -1
  53. package/lib/generates/internal/E2eFileProgrammer.js +44 -28
  54. package/lib/generates/internal/E2eFileProgrammer.js.map +1 -1
  55. package/lib/generates/internal/FilePrinter.d.ts +4 -4
  56. package/lib/generates/internal/FilePrinter.js +25 -16
  57. package/lib/generates/internal/FilePrinter.js.map +1 -1
  58. package/lib/generates/internal/ImportDictionary.d.ts +2 -2
  59. package/lib/generates/internal/ImportDictionary.js +7 -5
  60. package/lib/generates/internal/ImportDictionary.js.map +1 -1
  61. package/lib/generates/internal/SdkAliasCollection.d.ts +11 -11
  62. package/lib/generates/internal/SdkAliasCollection.js +27 -31
  63. package/lib/generates/internal/SdkAliasCollection.js.map +1 -1
  64. package/lib/generates/internal/SdkDistributionComposer.js +15 -70
  65. package/lib/generates/internal/SdkDistributionComposer.js.map +1 -1
  66. package/lib/generates/internal/SdkFileProgrammer.js +2 -2
  67. package/lib/generates/internal/SdkFileProgrammer.js.map +1 -1
  68. package/lib/generates/internal/SdkHttpCloneProgrammer.d.ts +2 -2
  69. package/lib/generates/internal/SdkHttpCloneProgrammer.js +6 -12
  70. package/lib/generates/internal/SdkHttpCloneProgrammer.js.map +1 -1
  71. package/lib/generates/internal/SdkHttpCloneReferencer.js +2 -1
  72. package/lib/generates/internal/SdkHttpCloneReferencer.js.map +1 -1
  73. package/lib/generates/internal/SdkHttpFunctionProgrammer.d.ts +2 -2
  74. package/lib/generates/internal/SdkHttpFunctionProgrammer.js +73 -77
  75. package/lib/generates/internal/SdkHttpFunctionProgrammer.js.map +1 -1
  76. package/lib/generates/internal/SdkHttpNamespaceProgrammer.d.ts +2 -2
  77. package/lib/generates/internal/SdkHttpNamespaceProgrammer.js +64 -66
  78. package/lib/generates/internal/SdkHttpNamespaceProgrammer.js.map +1 -1
  79. package/lib/generates/internal/SdkHttpParameterProgrammer.d.ts +4 -10
  80. package/lib/generates/internal/SdkHttpParameterProgrammer.js +15 -22
  81. package/lib/generates/internal/SdkHttpParameterProgrammer.js.map +1 -1
  82. package/lib/generates/internal/SdkHttpRouteProgrammer.d.ts +2 -2
  83. package/lib/generates/internal/SdkHttpRouteProgrammer.js +18 -20
  84. package/lib/generates/internal/SdkHttpRouteProgrammer.js.map +1 -1
  85. package/lib/generates/internal/SdkHttpSimulationProgrammer.d.ts +3 -3
  86. package/lib/generates/internal/SdkHttpSimulationProgrammer.js +47 -49
  87. package/lib/generates/internal/SdkHttpSimulationProgrammer.js.map +1 -1
  88. package/lib/generates/internal/SdkImportWizard.js.map +1 -1
  89. package/lib/generates/internal/SdkRouteDirectory.js.map +1 -1
  90. package/lib/generates/internal/SdkTypeProgrammer.d.ts +4 -4
  91. package/lib/generates/internal/SdkTypeProgrammer.js +66 -67
  92. package/lib/generates/internal/SdkTypeProgrammer.js.map +1 -1
  93. package/lib/generates/internal/SdkTypeTagProgrammer.d.ts +1 -2
  94. package/lib/generates/internal/SdkTypeTagProgrammer.js +29 -11
  95. package/lib/generates/internal/SdkTypeTagProgrammer.js.map +1 -1
  96. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.d.ts +2 -2
  97. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js +55 -55
  98. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js.map +1 -1
  99. package/lib/generates/internal/SdkWebSocketParameterProgrammer.d.ts +3 -3
  100. package/lib/generates/internal/SdkWebSocketParameterProgrammer.js +9 -12
  101. package/lib/generates/internal/SdkWebSocketParameterProgrammer.js.map +1 -1
  102. package/lib/generates/internal/SdkWebSocketRouteProgrammer.d.ts +2 -2
  103. package/lib/generates/internal/SdkWebSocketRouteProgrammer.js +43 -45
  104. package/lib/generates/internal/SdkWebSocketRouteProgrammer.js.map +1 -1
  105. package/lib/generates/internal/SwaggerDescriptionComposer.js.map +1 -1
  106. package/lib/generates/internal/SwaggerOperationComposer.d.ts +1 -1
  107. package/lib/generates/internal/SwaggerOperationComposer.js +5 -4
  108. package/lib/generates/internal/SwaggerOperationComposer.js.map +1 -1
  109. package/lib/generates/internal/SwaggerOperationParameterComposer.d.ts +0 -3
  110. package/lib/generates/internal/SwaggerOperationParameterComposer.js +19 -20
  111. package/lib/generates/internal/SwaggerOperationParameterComposer.js.map +1 -1
  112. package/lib/generates/internal/SwaggerOperationResponseComposer.d.ts +1 -1
  113. package/lib/generates/internal/SwaggerOperationResponseComposer.js +4 -3
  114. package/lib/generates/internal/SwaggerOperationResponseComposer.js.map +1 -1
  115. package/lib/index.js.map +1 -1
  116. package/lib/internal/legacy.d.ts +180 -0
  117. package/lib/internal/legacy.js +361 -0
  118. package/lib/internal/legacy.js.map +1 -0
  119. package/lib/structures/INestiaProject.d.ts +0 -2
  120. package/lib/{transformers → structures}/IOperationMetadata.d.ts +2 -7
  121. package/lib/structures/IOperationMetadata.js.map +1 -0
  122. package/lib/structures/IReflectHttpOperationException.d.ts +1 -1
  123. package/lib/structures/IReflectHttpOperationParameter.d.ts +1 -1
  124. package/lib/structures/IReflectHttpOperationSuccess.d.ts +1 -1
  125. package/lib/structures/IReflectOperationError.d.ts +1 -1
  126. package/lib/structures/IReflectOperationError.js.map +1 -1
  127. package/lib/structures/IReflectWebSocketOperation.d.ts +2 -2
  128. package/lib/structures/ITypedApplication.d.ts +1 -1
  129. package/lib/structures/ITypedHttpRouteException.d.ts +1 -1
  130. package/lib/structures/ITypedHttpRouteParameter.d.ts +1 -1
  131. package/lib/structures/ITypedHttpRouteSuccess.d.ts +1 -1
  132. package/lib/structures/ITypedWebSocketRoute.d.ts +2 -2
  133. package/lib/transform.d.ts +9 -3
  134. package/lib/transform.js +47 -5
  135. package/lib/transform.js.map +1 -1
  136. package/lib/utils/ArrayUtil.js.map +1 -1
  137. package/lib/utils/FileRetriever.js.map +1 -1
  138. package/lib/utils/MapUtil.js.map +1 -1
  139. package/lib/utils/PathUtil.js.map +1 -1
  140. package/lib/utils/SourceFinder.js.map +1 -1
  141. package/lib/utils/StringUtil.js.map +1 -1
  142. package/lib/utils/TsConfigReader.d.ts +7 -0
  143. package/lib/utils/TsConfigReader.js +102 -0
  144. package/lib/utils/TsConfigReader.js.map +1 -0
  145. package/lib/utils/TtscExecutor.d.ts +8 -0
  146. package/lib/utils/TtscExecutor.js +58 -0
  147. package/lib/utils/TtscExecutor.js.map +1 -0
  148. package/lib/utils/VersioningStrategy.js.map +1 -1
  149. package/lib/validators/HttpHeadersValidator.d.ts +8 -5
  150. package/lib/validators/HttpHeadersValidator.js +7 -26
  151. package/lib/validators/HttpHeadersValidator.js.map +1 -1
  152. package/lib/validators/HttpQueryValidator.d.ts +8 -5
  153. package/lib/validators/HttpQueryValidator.js +7 -26
  154. package/lib/validators/HttpQueryValidator.js.map +1 -1
  155. package/lib/{transformers → validators}/TextPlainValidator.d.ts +1 -1
  156. package/lib/{transformers → validators}/TextPlainValidator.js +2 -1
  157. package/lib/validators/TextPlainValidator.js.map +1 -0
  158. package/package.json +21 -19
  159. package/src/NestiaSdkApplication.ts +9 -5
  160. package/src/NestiaSwaggerComposer.ts +2 -3
  161. package/src/analyses/ConfigAnalyzer.ts +175 -1
  162. package/src/analyses/ImportAnalyzer.ts +15 -49
  163. package/src/analyses/ReflectControllerAnalyzer.ts +1 -1
  164. package/src/analyses/ReflectHttpOperationAnalyzer.ts +1 -1
  165. package/src/analyses/ReflectHttpOperationExceptionAnalyzer.ts +24 -6
  166. package/src/analyses/ReflectHttpOperationParameterAnalyzer.ts +3 -3
  167. package/src/analyses/ReflectHttpOperationResponseAnalyzer.ts +14 -10
  168. package/src/analyses/ReflectWebSocketOperationAnalyzer.ts +2 -2
  169. package/src/analyses/TypedHttpRouteAnalyzer.ts +354 -22
  170. package/src/decorators/OperationMetadata.ts +1 -1
  171. package/src/executable/internal/NestiaConfigLoader.ts +419 -53
  172. package/src/executable/internal/NestiaSdkCommand.ts +9 -10
  173. package/src/executable/sdk.ts +15 -4
  174. package/src/generates/CloneGenerator.ts +10 -10
  175. package/src/generates/SwaggerGenerator.ts +28 -9
  176. package/src/generates/internal/E2eFileProgrammer.ts +80 -43
  177. package/src/generates/internal/FilePrinter.ts +38 -37
  178. package/src/generates/internal/ImportDictionary.ts +18 -16
  179. package/src/generates/internal/SdkAliasCollection.ts +41 -40
  180. package/src/generates/internal/SdkDistributionComposer.ts +21 -8
  181. package/src/generates/internal/SdkFileProgrammer.ts +7 -5
  182. package/src/generates/internal/SdkHttpCloneProgrammer.ts +10 -10
  183. package/src/generates/internal/SdkHttpCloneReferencer.ts +6 -6
  184. package/src/generates/internal/SdkHttpFunctionProgrammer.ts +101 -78
  185. package/src/generates/internal/SdkHttpNamespaceProgrammer.ts +153 -145
  186. package/src/generates/internal/SdkHttpParameterProgrammer.ts +20 -33
  187. package/src/generates/internal/SdkHttpRouteProgrammer.ts +2 -2
  188. package/src/generates/internal/SdkHttpSimulationProgrammer.ts +88 -86
  189. package/src/generates/internal/SdkTypeProgrammer.ts +93 -99
  190. package/src/generates/internal/SdkTypeTagProgrammer.ts +12 -12
  191. package/src/generates/internal/SdkWebSocketNamespaceProgrammer.ts +128 -118
  192. package/src/generates/internal/SdkWebSocketParameterProgrammer.ts +15 -13
  193. package/src/generates/internal/SdkWebSocketRouteProgrammer.ts +133 -112
  194. package/src/generates/internal/SwaggerOperationComposer.ts +1 -1
  195. package/src/generates/internal/SwaggerOperationParameterComposer.ts +10 -9
  196. package/src/generates/internal/SwaggerOperationResponseComposer.ts +1 -1
  197. package/src/internal/legacy.ts +492 -0
  198. package/src/structures/INestiaProject.ts +0 -3
  199. package/src/{transformers → structures}/IOperationMetadata.ts +2 -7
  200. package/src/structures/IReflectHttpOperationException.ts +1 -1
  201. package/src/structures/IReflectHttpOperationParameter.ts +1 -1
  202. package/src/structures/IReflectHttpOperationSuccess.ts +1 -1
  203. package/src/structures/IReflectOperationError.ts +1 -1
  204. package/src/structures/IReflectWebSocketOperation.ts +2 -2
  205. package/src/structures/ITypedApplication.ts +1 -1
  206. package/src/structures/ITypedHttpRouteException.ts +1 -1
  207. package/src/structures/ITypedHttpRouteParameter.ts +1 -1
  208. package/src/structures/ITypedHttpRouteSuccess.ts +1 -1
  209. package/src/structures/ITypedWebSocketRoute.ts +2 -2
  210. package/src/transform.ts +68 -7
  211. package/src/utils/TsConfigReader.ts +108 -0
  212. package/src/utils/TtscExecutor.ts +63 -0
  213. package/src/validators/HttpHeadersValidator.ts +8 -37
  214. package/src/validators/HttpQueryValidator.ts +8 -37
  215. package/src/{transformers → validators}/TextPlainValidator.ts +2 -2
  216. package/lib/analyses/DtoAnalyzer.d.ts +0 -21
  217. package/lib/analyses/DtoAnalyzer.js +0 -219
  218. package/lib/analyses/DtoAnalyzer.js.map +0 -1
  219. package/lib/analyses/ExceptionAnalyzer.d.ts +0 -0
  220. package/lib/analyses/ExceptionAnalyzer.js +0 -2
  221. package/lib/analyses/ExceptionAnalyzer.js.map +0 -1
  222. package/lib/analyses/GenericAnalyzer.d.ts +0 -4
  223. package/lib/analyses/GenericAnalyzer.js +0 -42
  224. package/lib/analyses/GenericAnalyzer.js.map +0 -1
  225. package/lib/structures/IReflectApplication.d.ts +0 -6
  226. package/lib/structures/IReflectApplication.js +0 -3
  227. package/lib/structures/IReflectApplication.js.map +0 -1
  228. package/lib/structures/MethodType.d.ts +0 -4
  229. package/lib/structures/MethodType.js +0 -8
  230. package/lib/structures/MethodType.js.map +0 -1
  231. package/lib/structures/ParamCategory.d.ts +0 -1
  232. package/lib/structures/ParamCategory.js +0 -3
  233. package/lib/structures/ParamCategory.js.map +0 -1
  234. package/lib/structures/TypeEntry.d.ts +0 -9
  235. package/lib/structures/TypeEntry.js +0 -21
  236. package/lib/structures/TypeEntry.js.map +0 -1
  237. package/lib/transformers/IOperationMetadata.js.map +0 -1
  238. package/lib/transformers/ISdkOperationTransformerContext.d.ts +0 -7
  239. package/lib/transformers/ISdkOperationTransformerContext.js +0 -3
  240. package/lib/transformers/ISdkOperationTransformerContext.js.map +0 -1
  241. package/lib/transformers/SdkOperationProgrammer.d.ts +0 -15
  242. package/lib/transformers/SdkOperationProgrammer.js +0 -186
  243. package/lib/transformers/SdkOperationProgrammer.js.map +0 -1
  244. package/lib/transformers/SdkOperationTransformer.d.ts +0 -4
  245. package/lib/transformers/SdkOperationTransformer.js +0 -128
  246. package/lib/transformers/SdkOperationTransformer.js.map +0 -1
  247. package/lib/transformers/TextPlainValidator.js.map +0 -1
  248. package/lib/utils/MetadataUtil.d.ts +0 -4
  249. package/lib/utils/MetadataUtil.js +0 -34
  250. package/lib/utils/MetadataUtil.js.map +0 -1
  251. package/lib/utils/StripEnums.d.ts +0 -3
  252. package/lib/utils/StripEnums.js +0 -3
  253. package/lib/utils/StripEnums.js.map +0 -1
  254. package/lib/utils/TypeLiteralExpression.d.ts +0 -0
  255. package/lib/utils/TypeLiteralExpression.js +0 -2
  256. package/lib/utils/TypeLiteralExpression.js.map +0 -1
  257. package/src/analyses/DtoAnalyzer.ts +0 -260
  258. package/src/analyses/ExceptionAnalyzer.ts +0 -154
  259. package/src/analyses/GenericAnalyzer.ts +0 -49
  260. package/src/structures/IReflectApplication.ts +0 -8
  261. package/src/structures/MethodType.ts +0 -5
  262. package/src/structures/ParamCategory.ts +0 -1
  263. package/src/structures/TypeEntry.ts +0 -22
  264. package/src/transformers/ISdkOperationTransformerContext.ts +0 -8
  265. package/src/transformers/SdkOperationProgrammer.ts +0 -240
  266. package/src/transformers/SdkOperationTransformer.ts +0 -248
  267. package/src/utils/MetadataUtil.ts +0 -26
  268. package/src/utils/StripEnums.ts +0 -5
  269. package/src/utils/TypeLiteralExpression.ts +0 -0
  270. /package/lib/{transformers → structures}/IOperationMetadata.js +0 -0
package/src/transform.ts CHANGED
@@ -1,9 +1,70 @@
1
- import ts from "typescript";
1
+ import path from "node:path";
2
+ import { fileURLToPath } from "node:url";
2
3
 
3
- import { SdkOperationTransformer } from "./transformers/SdkOperationTransformer";
4
+ interface ITtscPluginFactoryContext {
5
+ projectRoot: string;
6
+ }
4
7
 
5
- export const transform = (
6
- program: ts.Program,
7
- ): ts.TransformerFactory<ts.SourceFile> =>
8
- SdkOperationTransformer.iterateFile(program.getTypeChecker());
9
- export default transform;
8
+ interface ITtscPlugin {
9
+ name: string;
10
+ source: string;
11
+ }
12
+
13
+ const filename: string = currentFilename();
14
+ const dirname: string = path.dirname(filename);
15
+
16
+ export function createTtscPlugin(
17
+ context: ITtscPluginFactoryContext,
18
+ ): ITtscPlugin {
19
+ const root: string =
20
+ resolvePackageRoot("@nestia/core/package.json", context.projectRoot) ??
21
+ inferCorePackageRoot();
22
+ return {
23
+ name: "@nestia/sdk",
24
+ source: path.resolve(root, "native", "cmd", "ttsc-nestia"),
25
+ };
26
+ }
27
+ export default createTtscPlugin;
28
+
29
+ function resolvePackageRoot(
30
+ packageJson: string,
31
+ projectRoot: string,
32
+ ): string | null {
33
+ try {
34
+ return path.dirname(require.resolve(packageJson, { paths: [projectRoot] }));
35
+ } catch {
36
+ return null;
37
+ }
38
+ }
39
+
40
+ function inferCorePackageRoot(): string {
41
+ return path.resolve(dirname, "..", "..", "core");
42
+ }
43
+
44
+ function currentFilename(): string {
45
+ if (
46
+ typeof __filename === "string" &&
47
+ __filename !== "[stdin]" &&
48
+ __filename.length !== 0
49
+ )
50
+ return normalizeFilename(__filename);
51
+
52
+ const line: string | undefined = new Error().stack
53
+ ?.split("\n")
54
+ .find(
55
+ (entry) =>
56
+ entry.includes("/src/transform.ts") ||
57
+ entry.includes("/lib/transform.js") ||
58
+ entry.includes("/lib/transform.mjs"),
59
+ );
60
+ const matched: RegExpMatchArray | null | undefined = line?.match(
61
+ /\(([^()]+):\d+:\d+\)|at ([^\s()]+):\d+:\d+/,
62
+ );
63
+ const fallback: string = typeof __filename === "string" ? __filename : "";
64
+ return normalizeFilename(matched?.[1] ?? matched?.[2] ?? fallback);
65
+ }
66
+
67
+ function normalizeFilename(value: string): string {
68
+ if (value.startsWith("file:")) return fileURLToPath(value);
69
+ return value;
70
+ }
@@ -0,0 +1,108 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+
4
+ export namespace TsConfigReader {
5
+ export interface ITsConfig {
6
+ extends?: string | string[];
7
+ compilerOptions?: Record<string, any>;
8
+ }
9
+
10
+ export const read = async (file: string): Promise<ITsConfig> =>
11
+ merge(file, new Set());
12
+
13
+ const merge = async (file: string, visited: Set<string>): Promise<ITsConfig> => {
14
+ const location: string = path.resolve(file);
15
+ if (visited.has(location)) return {};
16
+ visited.add(location);
17
+
18
+ const current: ITsConfig = parse(
19
+ await fs.promises.readFile(location, "utf8"),
20
+ );
21
+ const bases: ITsConfig[] = [];
22
+ for (const parent of asArray(current.extends)) {
23
+ const next: string | null = resolveExtends(parent, path.dirname(location));
24
+ if (next !== null) bases.push(await merge(next, visited));
25
+ }
26
+ return [...bases, current].reduce<ITsConfig>(
27
+ (acc, elem) => ({
28
+ ...acc,
29
+ ...elem,
30
+ compilerOptions: {
31
+ ...(acc.compilerOptions ?? {}),
32
+ ...(elem.compilerOptions ?? {}),
33
+ },
34
+ }),
35
+ {},
36
+ );
37
+ };
38
+
39
+ const parse = (text: string): ITsConfig =>
40
+ JSON.parse(stripTrailingCommas(stripJsonComments(text))) as ITsConfig;
41
+
42
+ const asArray = <T>(value: T | T[] | undefined): T[] =>
43
+ value === undefined ? [] : Array.isArray(value) ? value : [value];
44
+
45
+ const resolveExtends = (specifier: string, cwd: string): string | null => {
46
+ const candidates = (base: string): string[] => {
47
+ const ext: string = path.extname(base);
48
+ return ext === ".json" || ext === ".jsonc" ? [base] : [base, `${base}.json`];
49
+ };
50
+
51
+ if (path.isAbsolute(specifier) || specifier.startsWith(".")) {
52
+ for (const candidate of candidates(path.resolve(cwd, specifier)))
53
+ if (fs.existsSync(candidate)) return candidate;
54
+ return null;
55
+ }
56
+
57
+ for (const candidate of [
58
+ specifier,
59
+ ...candidates(specifier),
60
+ path.join(specifier, "tsconfig.json"),
61
+ ])
62
+ try {
63
+ return require.resolve(candidate, { paths: [cwd] });
64
+ } catch {
65
+ continue;
66
+ }
67
+ return null;
68
+ };
69
+
70
+ const stripJsonComments = (input: string): string => {
71
+ let output = "";
72
+ let string: false | '"' | "'" = false;
73
+ let escaped = false;
74
+ for (let i = 0; i < input.length; ++i) {
75
+ const ch = input[i]!;
76
+ const next = input[i + 1];
77
+ if (string !== false) {
78
+ output += ch;
79
+ if (escaped) escaped = false;
80
+ else if (ch === "\\") escaped = true;
81
+ else if (ch === string) string = false;
82
+ continue;
83
+ }
84
+ if (ch === '"' || ch === "'") {
85
+ string = ch;
86
+ output += ch;
87
+ continue;
88
+ }
89
+ if (ch === "/" && next === "/") {
90
+ while (i < input.length && input[i] !== "\n") ++i;
91
+ output += "\n";
92
+ continue;
93
+ }
94
+ if (ch === "/" && next === "*") {
95
+ i += 2;
96
+ while (i < input.length && !(input[i] === "*" && input[i + 1] === "/"))
97
+ ++i;
98
+ ++i;
99
+ continue;
100
+ }
101
+ output += ch;
102
+ }
103
+ return output;
104
+ };
105
+
106
+ const stripTrailingCommas = (input: string): string =>
107
+ input.replace(/,\s*([}\]])/g, "$1");
108
+ }
@@ -0,0 +1,63 @@
1
+ import cp from "child_process";
2
+ import fs from "fs";
3
+ import path from "path";
4
+
5
+ export namespace TtscExecutor {
6
+ export const run = (props: {
7
+ cwd: string;
8
+ project: string;
9
+ stdio?: cp.StdioOptions;
10
+ }): Buffer => {
11
+ const args: string[] = [bin(props.cwd), "-p", props.project];
12
+ if (process.env.TTSC_CACHE_DIR !== undefined)
13
+ args.push("--cache-dir", process.env.TTSC_CACHE_DIR);
14
+ return cp.execFileSync(process.execPath, args, {
15
+ cwd: props.cwd,
16
+ stdio: props.stdio ?? "pipe",
17
+ maxBuffer: 64 * 1024 * 1024,
18
+ });
19
+ };
20
+
21
+ const bin_: Map<string, string> = new Map();
22
+
23
+ const bin = (cwd: string): string => {
24
+ const cached: string | undefined = bin_.get(cwd);
25
+ if (cached !== undefined) return cached;
26
+
27
+ // Prefer the user's project-local ttsc; fall back to the module's own
28
+ // lookup path so a programmatic caller without an installed ttsc in
29
+ // `cwd` still resolves the bundled dep.
30
+ let manifest: string;
31
+ try {
32
+ manifest = require.resolve("ttsc/package.json", { paths: [cwd] });
33
+ } catch {
34
+ manifest = require.resolve("ttsc/package.json");
35
+ }
36
+ const directory: string = path.dirname(manifest);
37
+ const pack: { bin?: string | Record<string, string> } = JSON.parse(
38
+ fs.readFileSync(manifest, "utf8"),
39
+ );
40
+ const location: string | undefined =
41
+ typeof pack.bin === "string" ? pack.bin : pack.bin?.ttsc;
42
+ if (location === undefined) {
43
+ const keys =
44
+ typeof pack.bin === "object" && pack.bin !== null
45
+ ? Object.keys(pack.bin).join(", ")
46
+ : "<none>";
47
+ throw new Error(
48
+ `Unable to find "ttsc" binary from package metadata. ` +
49
+ `Available bin entries: ${keys}. ` +
50
+ `Reinstall with: npm install --save-dev ttsc`,
51
+ );
52
+ }
53
+
54
+ const resolved: string = path.join(directory, location);
55
+ if (!fs.existsSync(resolved))
56
+ throw new Error(
57
+ `"ttsc" binary not found at "${resolved}". ` +
58
+ `Reinstall with: npm install --save-dev ttsc`,
59
+ );
60
+ bin_.set(cwd, resolved);
61
+ return resolved;
62
+ };
63
+ }
@@ -1,40 +1,11 @@
1
- import {
2
- MetadataArrayType,
3
- MetadataFactory,
4
- MetadataSchema,
5
- } from "@typia/core";
1
+ import { MetadataFactory } from "../internal/legacy";
6
2
 
3
+ /**
4
+ * Validator slot reserved for `@TypedHeaders` per-field SDK-side checks.
5
+ * Returns `[]` because the typia native transform already enforces the
6
+ * "atomic-or-array-of-atomic" constraint at compile time, and `MetadataFactory.validate`
7
+ * — the only call site — is itself a passthrough on the v13 runtime.
8
+ */
7
9
  export namespace HttpHeadersValidator {
8
- export const validate = (props: {
9
- metadata: MetadataSchema;
10
- explore: MetadataFactory.IExplore;
11
- }): string[] => {
12
- const errors: string[] = [];
13
- const insert = (msg: string) => errors.push(msg);
14
-
15
- if (props.explore.top === true) {
16
- const expected: number =
17
- props.metadata.atomics.length +
18
- props.metadata.templates.length +
19
- props.metadata.constants
20
- .map((c) => c.values.length)
21
- .reduce((a, b) => a + b, 0) +
22
- props.metadata.arrays.length;
23
- if (props.metadata.size() !== expected)
24
- insert("Only atomic or array of atomic types are allowed.");
25
- } else if (
26
- props.explore.nested !== null &&
27
- props.explore.nested instanceof MetadataArrayType
28
- ) {
29
- const expected: number =
30
- props.metadata.atomics.length +
31
- props.metadata.templates.length +
32
- props.metadata.constants
33
- .map((c) => c.values.length)
34
- .reduce((a, b) => a + b, 0);
35
- if (props.metadata.size() !== expected)
36
- insert("Only atomic types are allowed in array.");
37
- }
38
- return errors;
39
- };
10
+ export const validate: MetadataFactory.Validator = () => [];
40
11
  }
@@ -1,40 +1,11 @@
1
- import {
2
- MetadataArrayType,
3
- MetadataFactory,
4
- MetadataSchema,
5
- } from "@typia/core";
1
+ import { MetadataFactory } from "../internal/legacy";
6
2
 
3
+ /**
4
+ * Validator slot reserved for `@TypedQuery` per-field SDK-side checks.
5
+ * Returns `[]` because the typia native transform already enforces the
6
+ * atomic-only constraint at compile time, and `MetadataFactory.validate` —
7
+ * the only call site — is itself a passthrough on the v13 runtime.
8
+ */
7
9
  export namespace HttpQueryValidator {
8
- export const validate = (props: {
9
- metadata: MetadataSchema;
10
- explore: MetadataFactory.IExplore;
11
- }): string[] => {
12
- const errors: string[] = [];
13
- const insert = (msg: string) => errors.push(msg);
14
-
15
- if (props.explore.top === true) {
16
- const expected: number =
17
- props.metadata.atomics.length +
18
- props.metadata.templates.length +
19
- props.metadata.constants
20
- .map((c) => c.values.length)
21
- .reduce((a, b) => a + b, 0) +
22
- props.metadata.arrays.length;
23
- if (props.metadata.size() !== expected)
24
- insert("Only atomic or array of atomic types are allowed.");
25
- } else if (
26
- props.explore.nested !== null &&
27
- props.explore.nested instanceof MetadataArrayType
28
- ) {
29
- const expected: number =
30
- props.metadata.atomics.length +
31
- props.metadata.templates.length +
32
- props.metadata.constants
33
- .map((c) => c.values.length)
34
- .reduce((a, b) => a + b, 0);
35
- if (props.metadata.size() !== expected)
36
- insert("Only atomic types are allowed in array.");
37
- }
38
- return errors;
39
- };
10
+ export const validate: MetadataFactory.Validator = () => [];
40
11
  }
@@ -1,4 +1,4 @@
1
- import { MetadataSchema } from "@typia/core";
1
+ import { MetadataSchema, sizeOf } from "../internal/legacy";
2
2
 
3
3
  export namespace TextPlainValidator {
4
4
  export const validate = (props: { metadata: MetadataSchema }): string[] => {
@@ -10,7 +10,7 @@ export namespace TextPlainValidator {
10
10
  .reduce((a, b) => a + b, 0) +
11
11
  props.metadata.templates.length +
12
12
  props.metadata.natives.filter((n) => n.name === "String").length;
13
- if (props.metadata.size() === 0 || props.metadata.size() !== expected)
13
+ if (sizeOf(props.metadata) === 0 || sizeOf(props.metadata) !== expected)
14
14
  return [`Only string type is allowed in the "text/plain" content type.`];
15
15
  return [];
16
16
  };
@@ -1,21 +0,0 @@
1
- import ts from "typescript";
2
- import { IReflectImport } from "../structures/IReflectImport";
3
- import { IReflectType } from "../structures/IReflectType";
4
- export declare namespace DtoAnalyzer {
5
- interface INodeProps {
6
- checker: ts.TypeChecker;
7
- imports: IReflectImport[];
8
- typeNode: ts.TypeNode;
9
- }
10
- interface ITypeProps {
11
- checker: ts.TypeChecker;
12
- imports: IReflectImport[];
13
- type: ts.Type;
14
- }
15
- interface IOutput {
16
- imports: IReflectImport[];
17
- type: IReflectType;
18
- }
19
- const analyzeNode: (props: INodeProps) => IOutput | null;
20
- const analyzeType: (props: ITypeProps) => IOutput | null;
21
- }
@@ -1,219 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.DtoAnalyzer = void 0;
7
- const typescript_1 = __importDefault(require("typescript"));
8
- const ImportAnalyzer_1 = require("./ImportAnalyzer");
9
- var DtoAnalyzer;
10
- (function (DtoAnalyzer) {
11
- DtoAnalyzer.analyzeNode = (props) => {
12
- try {
13
- const container = [];
14
- const type = exploreNode({
15
- checker: props.checker,
16
- imports: props.imports,
17
- container,
18
- }, props.typeNode);
19
- return {
20
- type,
21
- imports: ImportAnalyzer_1.ImportAnalyzer.merge(container),
22
- };
23
- }
24
- catch (_a) {
25
- return null;
26
- }
27
- };
28
- DtoAnalyzer.analyzeType = (props) => {
29
- try {
30
- const container = [];
31
- const type = exploreType({
32
- checker: props.checker,
33
- imports: props.imports,
34
- container,
35
- }, props.type);
36
- return {
37
- type,
38
- imports: ImportAnalyzer_1.ImportAnalyzer.merge(container),
39
- };
40
- }
41
- catch (_a) {
42
- return null;
43
- }
44
- };
45
- const exploreNode = (ctx, typeNode) => {
46
- var _a;
47
- // Analyze symbol, and take special cares
48
- if (typescript_1.default.isIntersectionTypeNode(typeNode))
49
- return {
50
- name: typeNode.types
51
- .map((child) => exploreNode(ctx, child))
52
- .map(getEscapedText)
53
- .join(" & "),
54
- };
55
- else if (typescript_1.default.isUnionTypeNode(typeNode))
56
- return {
57
- name: typeNode.types
58
- .map((child) => exploreNode(ctx, child))
59
- .map(getEscapedText)
60
- .join(" | "),
61
- };
62
- else if (typescript_1.default.isArrayTypeNode(typeNode)) {
63
- const element = exploreNode(ctx, typeNode.elementType);
64
- return {
65
- name: "Array",
66
- typeArguments: [element],
67
- };
68
- }
69
- else if (typescript_1.default.isParenthesizedTypeNode(typeNode))
70
- return {
71
- name: `(${exploreNode(ctx, typeNode.type).name})`,
72
- };
73
- else if (typescript_1.default.isTypeOperatorNode(typeNode)) {
74
- const prefix = typeNode.operator === typescript_1.default.SyntaxKind.KeyOfKeyword
75
- ? "keyof"
76
- : typeNode.operator === typescript_1.default.SyntaxKind.UniqueKeyword
77
- ? "unique"
78
- : typeNode.operator === typescript_1.default.SyntaxKind.ReadonlyKeyword
79
- ? "readonly"
80
- : null;
81
- if (prefix === null)
82
- return exploreType(ctx, ctx.checker.getTypeFromTypeNode(typeNode));
83
- return {
84
- name: `${prefix} ${exploreNode(ctx, typeNode.type).name}`,
85
- };
86
- }
87
- else if (typescript_1.default.isTypePredicateNode(typeNode) || typescript_1.default.isTypeQueryNode(typeNode))
88
- return exploreType(ctx, ctx.checker.getTypeFromTypeNode(typeNode));
89
- else if (typescript_1.default.isTypeReferenceNode(typeNode) === false)
90
- return {
91
- name: typeNode.getText(),
92
- };
93
- // Find matched import statement
94
- const name = typeNode.typeName.getText();
95
- const prefix = name.split(".")[0];
96
- let matched = false;
97
- const insert = (imp) => {
98
- matched || (matched = true);
99
- ctx.container.push(imp);
100
- };
101
- for (const imp of ctx.imports)
102
- if (prefix === imp.default)
103
- insert({
104
- file: imp.file,
105
- asterisk: null,
106
- default: prefix,
107
- elements: [],
108
- });
109
- else if (prefix === imp.asterisk)
110
- insert({
111
- file: imp.file,
112
- asterisk: prefix,
113
- default: null,
114
- elements: [],
115
- });
116
- else if (imp.elements.includes(prefix))
117
- insert({
118
- file: imp.file,
119
- asterisk: null,
120
- default: null,
121
- elements: [prefix],
122
- });
123
- if (prefix !== "Promise" && matched === false)
124
- return exploreType(ctx, ctx.checker.getTypeFromTypeNode(typeNode));
125
- // Finalize with generic arguments
126
- if (!!((_a = typeNode.typeArguments) === null || _a === void 0 ? void 0 : _a.length)) {
127
- const top = typeNode.typeArguments[0];
128
- if (name === "Promise")
129
- return exploreNode(ctx, top);
130
- return {
131
- name,
132
- typeArguments: typeNode.typeArguments.map((child) => exploreNode(ctx, child)),
133
- };
134
- }
135
- return { name };
136
- };
137
- const exploreType = (ctx, type) => {
138
- var _a, _b;
139
- // Analyze symbol, and take special cares
140
- const symbol = (_a = type.aliasSymbol) !== null && _a !== void 0 ? _a : type.symbol;
141
- if (type.aliasSymbol === undefined && type.isUnionOrIntersection()) {
142
- const joiner = type.isIntersection() ? " & " : " | ";
143
- return {
144
- name: type.types
145
- .map((child) => exploreType(ctx, child))
146
- .map(getEscapedText)
147
- .join(joiner),
148
- };
149
- }
150
- else if (ctx.checker.isArrayLikeType(type)) {
151
- const arrayItem = ctx.checker.getElementTypeOfArrayType(type);
152
- if (arrayItem === undefined)
153
- return { name: "Array<any>" };
154
- return {
155
- name: "Array",
156
- typeArguments: [exploreType(ctx, arrayItem)],
157
- };
158
- }
159
- else if (symbol === undefined)
160
- return {
161
- name: ctx.checker.typeToString(type, undefined, typescript_1.default.TypeFormatFlags.NoTruncation),
162
- };
163
- // Find matched import statement
164
- const name = getNameOfSymbol(symbol);
165
- const prefix = name.split(".")[0];
166
- let matched = false;
167
- const insert = (imp) => {
168
- matched || (matched = true);
169
- ctx.container.push(imp);
170
- };
171
- for (const imp of ctx.imports)
172
- if (imp.elements.includes(prefix))
173
- insert({
174
- file: imp.file,
175
- asterisk: null,
176
- default: null,
177
- elements: [prefix],
178
- });
179
- if (prefix !== "Promise" && matched === false)
180
- emplaceSymbol(ctx, symbol, prefix);
181
- // Finalize with generic arguments
182
- const generic = type.aliasSymbol
183
- ? ((_b = type.aliasTypeArguments) !== null && _b !== void 0 ? _b : [])
184
- : ctx.checker.getTypeArguments(type);
185
- return generic.length
186
- ? name === "Promise"
187
- ? exploreType(ctx, generic[0])
188
- : {
189
- name,
190
- typeArguments: generic.map((child) => exploreType(ctx, child)),
191
- }
192
- : { name };
193
- };
194
- const emplaceSymbol = (ctx, symbol, prefix) => {
195
- var _a, _b;
196
- // GET SOURCE FILE
197
- const sourceFile = (_b = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.getSourceFile();
198
- if (sourceFile === undefined)
199
- return;
200
- if (sourceFile.fileName.indexOf("/typescript/lib") === -1)
201
- ctx.container.push({
202
- file: sourceFile.fileName,
203
- asterisk: null,
204
- default: null,
205
- elements: [prefix],
206
- });
207
- };
208
- })(DtoAnalyzer || (exports.DtoAnalyzer = DtoAnalyzer = {}));
209
- const getEscapedText = (type) => type.typeArguments
210
- ? `${type.name}<${type.typeArguments.map(getEscapedText).join(", ")}>`
211
- : type.name;
212
- const getNameOfSymbol = (symbol) => {
213
- var _a, _b;
214
- return exploreName(symbol.escapedName.toString(), (_b = (_a = symbol.getDeclarations()) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.parent);
215
- };
216
- const exploreName = (name, decl) => decl && typescript_1.default.isModuleBlock(decl)
217
- ? exploreName(`${decl.parent.name.getFullText().trim()}.${name}`, decl.parent.parent)
218
- : name;
219
- //# sourceMappingURL=DtoAnalyzer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DtoAnalyzer.js","sourceRoot":"","sources":["../../src/analyses/DtoAnalyzer.ts"],"names":[],"mappings":"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"}
File without changes
@@ -1,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=ExceptionAnalyzer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExceptionAnalyzer.js","sourceRoot":"","sources":["../../src/analyses/ExceptionAnalyzer.ts"],"names":[],"mappings":""}
@@ -1,4 +0,0 @@
1
- import ts from "typescript";
2
- export declare namespace GenericAnalyzer {
3
- function analyze(checker: ts.TypeChecker, classNode: ts.ClassDeclaration): WeakMap<ts.Type, ts.Type>;
4
- }
@@ -1,42 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.GenericAnalyzer = void 0;
7
- const typescript_1 = __importDefault(require("typescript"));
8
- var GenericAnalyzer;
9
- (function (GenericAnalyzer) {
10
- function analyze(checker, classNode) {
11
- const dict = new WeakMap();
12
- explore(checker, dict, classNode);
13
- return dict;
14
- }
15
- GenericAnalyzer.analyze = analyze;
16
- function explore(checker, dict, classNode) {
17
- var _a, _b, _c;
18
- if (classNode.heritageClauses === undefined)
19
- return;
20
- for (const heritage of classNode.heritageClauses)
21
- for (const hType of heritage.types) {
22
- // MUST BE CLASS
23
- const expression = checker.getTypeAtLocation(hType.expression);
24
- const superNode = (_c = (_b = (_a = expression.symbol) === null || _a === void 0 ? void 0 : _a.getDeclarations) === null || _b === void 0 ? void 0 : _b.call(_a)) === null || _c === void 0 ? void 0 : _c[0];
25
- if (superNode === undefined || !typescript_1.default.isClassDeclaration(superNode))
26
- continue;
27
- // SPECIFY GENERICS
28
- const usages = hType.typeArguments || [];
29
- const parameters = superNode.typeParameters || [];
30
- parameters.forEach((param, index) => {
31
- const paramType = checker.getTypeAtLocation(param);
32
- const usageType = usages[index] !== undefined
33
- ? checker.getTypeAtLocation(usages[index])
34
- : checker.getTypeAtLocation(param.default);
35
- dict.set(paramType, usageType);
36
- });
37
- // RECURSIVE EXPLORATION
38
- explore(checker, dict, superNode);
39
- }
40
- }
41
- })(GenericAnalyzer || (exports.GenericAnalyzer = GenericAnalyzer = {}));
42
- //# sourceMappingURL=GenericAnalyzer.js.map