subaya 1.0.0

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 (296) hide show
  1. package/README.md +156 -0
  2. package/dist/commands/api/OrpcGeneratorCommand.d.ts +16 -0
  3. package/dist/commands/api/OrpcGeneratorCommand.d.ts.map +1 -0
  4. package/dist/commands/api/OrpcGeneratorCommand.js +100 -0
  5. package/dist/commands/api/OrpcGeneratorCommand.js.map +1 -0
  6. package/dist/commands/api/generators/ApiMethodGenerator.d.ts +22 -0
  7. package/dist/commands/api/generators/ApiMethodGenerator.d.ts.map +1 -0
  8. package/dist/commands/api/generators/ApiMethodGenerator.js +73 -0
  9. package/dist/commands/api/generators/ApiMethodGenerator.js.map +1 -0
  10. package/dist/commands/api/generators/QueryStringGenerator.d.ts +7 -0
  11. package/dist/commands/api/generators/QueryStringGenerator.d.ts.map +1 -0
  12. package/dist/commands/api/generators/QueryStringGenerator.js +34 -0
  13. package/dist/commands/api/generators/QueryStringGenerator.js.map +1 -0
  14. package/dist/commands/api/generators/SchemaGenerator.d.ts +5 -0
  15. package/dist/commands/api/generators/SchemaGenerator.d.ts.map +1 -0
  16. package/dist/commands/api/generators/SchemaGenerator.js +61 -0
  17. package/dist/commands/api/generators/SchemaGenerator.js.map +1 -0
  18. package/dist/commands/api/services/ApiFileWriter.d.ts +9 -0
  19. package/dist/commands/api/services/ApiFileWriter.d.ts.map +1 -0
  20. package/dist/commands/api/services/ApiFileWriter.js +112 -0
  21. package/dist/commands/api/services/ApiFileWriter.js.map +1 -0
  22. package/dist/commands/api/services/DependencyChecker.d.ts +6 -0
  23. package/dist/commands/api/services/DependencyChecker.d.ts.map +1 -0
  24. package/dist/commands/api/services/DependencyChecker.js +63 -0
  25. package/dist/commands/api/services/DependencyChecker.js.map +1 -0
  26. package/dist/commands/api/utils/CommentGenerator.d.ts +6 -0
  27. package/dist/commands/api/utils/CommentGenerator.d.ts.map +1 -0
  28. package/dist/commands/api/utils/CommentGenerator.js +52 -0
  29. package/dist/commands/api/utils/CommentGenerator.js.map +1 -0
  30. package/dist/commands/api/utils/ParameterExtractor.d.ts +10 -0
  31. package/dist/commands/api/utils/ParameterExtractor.d.ts.map +1 -0
  32. package/dist/commands/api/utils/ParameterExtractor.js +29 -0
  33. package/dist/commands/api/utils/ParameterExtractor.js.map +1 -0
  34. package/dist/commands/api/utils/ResponseTypeExtractor.d.ts +9 -0
  35. package/dist/commands/api/utils/ResponseTypeExtractor.d.ts.map +1 -0
  36. package/dist/commands/api/utils/ResponseTypeExtractor.js +36 -0
  37. package/dist/commands/api/utils/ResponseTypeExtractor.js.map +1 -0
  38. package/dist/commands/api/utils/TypeResolver.d.ts +6 -0
  39. package/dist/commands/api/utils/TypeResolver.d.ts.map +1 -0
  40. package/dist/commands/api/utils/TypeResolver.js +38 -0
  41. package/dist/commands/api/utils/TypeResolver.js.map +1 -0
  42. package/dist/commands/axios/AxiosGeneratorCommand.d.ts +5 -0
  43. package/dist/commands/axios/AxiosGeneratorCommand.d.ts.map +1 -0
  44. package/dist/commands/axios/AxiosGeneratorCommand.js +56 -0
  45. package/dist/commands/axios/AxiosGeneratorCommand.js.map +1 -0
  46. package/dist/commands/env/EnvGeneratorCommand.d.ts +8 -0
  47. package/dist/commands/env/EnvGeneratorCommand.d.ts.map +1 -0
  48. package/dist/commands/env/EnvGeneratorCommand.js +62 -0
  49. package/dist/commands/env/EnvGeneratorCommand.js.map +1 -0
  50. package/dist/commands/icon/IconGenerateCommand.d.ts +6 -0
  51. package/dist/commands/icon/IconGenerateCommand.d.ts.map +1 -0
  52. package/dist/commands/icon/IconGenerateCommand.js +103 -0
  53. package/dist/commands/icon/IconGenerateCommand.js.map +1 -0
  54. package/dist/commands/image/BackgroundRemoveCommand.d.ts +7 -0
  55. package/dist/commands/image/BackgroundRemoveCommand.d.ts.map +1 -0
  56. package/dist/commands/image/BackgroundRemoveCommand.js +89 -0
  57. package/dist/commands/image/BackgroundRemoveCommand.js.map +1 -0
  58. package/dist/commands/image/ImageOptimizeCommand.d.ts +8 -0
  59. package/dist/commands/image/ImageOptimizeCommand.d.ts.map +1 -0
  60. package/dist/commands/image/ImageOptimizeCommand.js +161 -0
  61. package/dist/commands/image/ImageOptimizeCommand.js.map +1 -0
  62. package/dist/commands/image/ImageResizeCommand.d.ts +5 -0
  63. package/dist/commands/image/ImageResizeCommand.d.ts.map +1 -0
  64. package/dist/commands/image/ImageResizeCommand.js +64 -0
  65. package/dist/commands/image/ImageResizeCommand.js.map +1 -0
  66. package/dist/commands/index.d.ts +4 -0
  67. package/dist/commands/index.d.ts.map +1 -0
  68. package/dist/commands/index.js +4 -0
  69. package/dist/commands/index.js.map +1 -0
  70. package/dist/commands/localstorage/LocalstorageGeneratorCommand.d.ts +5 -0
  71. package/dist/commands/localstorage/LocalstorageGeneratorCommand.d.ts.map +1 -0
  72. package/dist/commands/localstorage/LocalstorageGeneratorCommand.js +45 -0
  73. package/dist/commands/localstorage/LocalstorageGeneratorCommand.js.map +1 -0
  74. package/dist/commands/provider/ProviderGeneratorCommand.d.ts +5 -0
  75. package/dist/commands/provider/ProviderGeneratorCommand.d.ts.map +1 -0
  76. package/dist/commands/provider/ProviderGeneratorCommand.js +54 -0
  77. package/dist/commands/provider/ProviderGeneratorCommand.js.map +1 -0
  78. package/dist/commands/route/NextRouteGeneratorCommand.d.ts +12 -0
  79. package/dist/commands/route/NextRouteGeneratorCommand.d.ts.map +1 -0
  80. package/dist/commands/route/NextRouteGeneratorCommand.js +126 -0
  81. package/dist/commands/route/NextRouteGeneratorCommand.js.map +1 -0
  82. package/dist/commands/share/ShareGeneratorCommand.d.ts +5 -0
  83. package/dist/commands/share/ShareGeneratorCommand.d.ts.map +1 -0
  84. package/dist/commands/share/ShareGeneratorCommand.js +44 -0
  85. package/dist/commands/share/ShareGeneratorCommand.js.map +1 -0
  86. package/dist/commands/state/StateGeneratorCommand.d.ts +10 -0
  87. package/dist/commands/state/StateGeneratorCommand.d.ts.map +1 -0
  88. package/dist/commands/state/StateGeneratorCommand.js +99 -0
  89. package/dist/commands/state/StateGeneratorCommand.js.map +1 -0
  90. package/dist/commands/supabase/SupabaseCommand.d.ts +7 -0
  91. package/dist/commands/supabase/SupabaseCommand.d.ts.map +1 -0
  92. package/dist/commands/supabase/SupabaseCommand.js +140 -0
  93. package/dist/commands/supabase/SupabaseCommand.js.map +1 -0
  94. package/dist/config/defaultConfig.d.ts +4 -0
  95. package/dist/config/defaultConfig.d.ts.map +1 -0
  96. package/dist/config/defaultConfig.js +15 -0
  97. package/dist/config/defaultConfig.js.map +1 -0
  98. package/dist/config/initial.d.ts +5 -0
  99. package/dist/config/initial.d.ts.map +1 -0
  100. package/dist/config/initial.js +32 -0
  101. package/dist/config/initial.js.map +1 -0
  102. package/dist/core/BaseCommand.d.ts +10 -0
  103. package/dist/core/BaseCommand.d.ts.map +1 -0
  104. package/dist/core/BaseCommand.js +36 -0
  105. package/dist/core/BaseCommand.js.map +1 -0
  106. package/dist/core/CommandRegistry.d.ts +15 -0
  107. package/dist/core/CommandRegistry.d.ts.map +1 -0
  108. package/dist/core/CommandRegistry.js +58 -0
  109. package/dist/core/CommandRegistry.js.map +1 -0
  110. package/dist/core/ConfigManager.d.ts +11 -0
  111. package/dist/core/ConfigManager.d.ts.map +1 -0
  112. package/dist/core/ConfigManager.js +42 -0
  113. package/dist/core/ConfigManager.js.map +1 -0
  114. package/dist/core/EnsureSystem.d.ts +10 -0
  115. package/dist/core/EnsureSystem.d.ts.map +1 -0
  116. package/dist/core/EnsureSystem.js +118 -0
  117. package/dist/core/EnsureSystem.js.map +1 -0
  118. package/dist/core/FileSystemService.d.ts +20 -0
  119. package/dist/core/FileSystemService.d.ts.map +1 -0
  120. package/dist/core/FileSystemService.js +97 -0
  121. package/dist/core/FileSystemService.js.map +1 -0
  122. package/dist/core/FrameworkDetector.d.ts +7 -0
  123. package/dist/core/FrameworkDetector.d.ts.map +1 -0
  124. package/dist/core/FrameworkDetector.js +33 -0
  125. package/dist/core/FrameworkDetector.js.map +1 -0
  126. package/dist/core/ProviderBuilder.d.ts +25 -0
  127. package/dist/core/ProviderBuilder.d.ts.map +1 -0
  128. package/dist/core/ProviderBuilder.js +227 -0
  129. package/dist/core/ProviderBuilder.js.map +1 -0
  130. package/dist/core/index.d.ts +7 -0
  131. package/dist/core/index.d.ts.map +1 -0
  132. package/dist/core/index.js +7 -0
  133. package/dist/core/index.js.map +1 -0
  134. package/dist/index.d.ts +3 -0
  135. package/dist/index.d.ts.map +1 -0
  136. package/dist/index.js +105 -0
  137. package/dist/index.js.map +1 -0
  138. package/dist/template/api/gen/httpClient.d.ts +2 -0
  139. package/dist/template/api/gen/httpClient.d.ts.map +1 -0
  140. package/dist/template/api/gen/httpClient.js +177 -0
  141. package/dist/template/api/gen/httpClient.js.map +1 -0
  142. package/dist/template/api/gen/queryApiClient.d.ts +2 -0
  143. package/dist/template/api/gen/queryApiClient.d.ts.map +1 -0
  144. package/dist/template/api/gen/queryApiClient.js +27 -0
  145. package/dist/template/api/gen/queryApiClient.js.map +1 -0
  146. package/dist/template/api/gen/queryReactQueryClient.d.ts +13 -0
  147. package/dist/template/api/gen/queryReactQueryClient.d.ts.map +1 -0
  148. package/dist/template/api/gen/queryReactQueryClient.js +159 -0
  149. package/dist/template/api/gen/queryReactQueryClient.js.map +1 -0
  150. package/dist/template/api/type/httpClientType.d.ts +2 -0
  151. package/dist/template/api/type/httpClientType.d.ts.map +1 -0
  152. package/dist/template/api/type/httpClientType.js +2 -0
  153. package/dist/template/api/type/httpClientType.js.map +1 -0
  154. package/dist/template/axios/instance.d.ts +2 -0
  155. package/dist/template/axios/instance.d.ts.map +1 -0
  156. package/dist/template/axios/instance.js +91 -0
  157. package/dist/template/axios/instance.js.map +1 -0
  158. package/dist/template/axios/refresh.d.ts +2 -0
  159. package/dist/template/axios/refresh.d.ts.map +1 -0
  160. package/dist/template/axios/refresh.js +81 -0
  161. package/dist/template/axios/refresh.js.map +1 -0
  162. package/dist/template/imageAsNext.d.ts +2 -0
  163. package/dist/template/imageAsNext.d.ts.map +1 -0
  164. package/dist/template/imageAsNext.js +104 -0
  165. package/dist/template/imageAsNext.js.map +1 -0
  166. package/dist/template/localstorage/LocalStorageManager.d.ts +2 -0
  167. package/dist/template/localstorage/LocalStorageManager.d.ts.map +1 -0
  168. package/dist/template/localstorage/LocalStorageManager.js +64 -0
  169. package/dist/template/localstorage/LocalStorageManager.js.map +1 -0
  170. package/dist/template/localstorage/localStorage.d.ts +2 -0
  171. package/dist/template/localstorage/localStorage.d.ts.map +1 -0
  172. package/dist/template/localstorage/localStorage.js +9 -0
  173. package/dist/template/localstorage/localStorage.js.map +1 -0
  174. package/dist/template/localstorage/localStorageType.d.ts +2 -0
  175. package/dist/template/localstorage/localStorageType.d.ts.map +1 -0
  176. package/dist/template/localstorage/localStorageType.js +6 -0
  177. package/dist/template/localstorage/localStorageType.js.map +1 -0
  178. package/dist/template/localstorage/useSharedStorage.d.ts +2 -0
  179. package/dist/template/localstorage/useSharedStorage.d.ts.map +1 -0
  180. package/dist/template/localstorage/useSharedStorage.js +24 -0
  181. package/dist/template/localstorage/useSharedStorage.js.map +1 -0
  182. package/dist/template/logger/api-logger.d.ts +2 -0
  183. package/dist/template/logger/api-logger.d.ts.map +1 -0
  184. package/dist/template/logger/api-logger.js +44 -0
  185. package/dist/template/logger/api-logger.js.map +1 -0
  186. package/dist/template/logger/styled-console.d.ts +2 -0
  187. package/dist/template/logger/styled-console.d.ts.map +1 -0
  188. package/dist/template/logger/styled-console.js +27 -0
  189. package/dist/template/logger/styled-console.js.map +1 -0
  190. package/dist/template/provider/defaultProvider.tsx +6 -0
  191. package/dist/template/provider/providerTemplates.d.ts +9 -0
  192. package/dist/template/provider/providerTemplates.d.ts.map +1 -0
  193. package/dist/template/provider/providerTemplates.js +40 -0
  194. package/dist/template/provider/providerTemplates.js.map +1 -0
  195. package/dist/template/provider/providerTemplates.ts +47 -0
  196. package/dist/template/share/copyText.d.ts +2 -0
  197. package/dist/template/share/copyText.d.ts.map +1 -0
  198. package/dist/template/share/copyText.js +12 -0
  199. package/dist/template/share/copyText.js.map +1 -0
  200. package/dist/template/share/sharer.d.ts +2 -0
  201. package/dist/template/share/sharer.d.ts.map +1 -0
  202. package/dist/template/share/sharer.js +211 -0
  203. package/dist/template/share/sharer.js.map +1 -0
  204. package/dist/template/share/useSharer.d.ts +2 -0
  205. package/dist/template/share/useSharer.d.ts.map +1 -0
  206. package/dist/template/share/useSharer.js +78 -0
  207. package/dist/template/share/useSharer.js.map +1 -0
  208. package/dist/template/state/zustand-persist.d.ts +2 -0
  209. package/dist/template/state/zustand-persist.d.ts.map +1 -0
  210. package/dist/template/state/zustand-persist.js +53 -0
  211. package/dist/template/state/zustand-persist.js.map +1 -0
  212. package/dist/template/state/zustand-provider-store.d.ts +2 -0
  213. package/dist/template/state/zustand-provider-store.d.ts.map +1 -0
  214. package/dist/template/state/zustand-provider-store.js +19 -0
  215. package/dist/template/state/zustand-provider-store.js.map +1 -0
  216. package/dist/template/state/zustand-provider.d.ts +2 -0
  217. package/dist/template/state/zustand-provider.d.ts.map +1 -0
  218. package/dist/template/state/zustand-provider.js +46 -0
  219. package/dist/template/state/zustand-provider.js.map +1 -0
  220. package/dist/template/state/zustand.d.ts +2 -0
  221. package/dist/template/state/zustand.d.ts.map +1 -0
  222. package/dist/template/state/zustand.js +38 -0
  223. package/dist/template/state/zustand.js.map +1 -0
  224. package/dist/template/supabase/actions/supabaseAdmin.d.ts +2 -0
  225. package/dist/template/supabase/actions/supabaseAdmin.d.ts.map +1 -0
  226. package/dist/template/supabase/actions/supabaseAdmin.js +21 -0
  227. package/dist/template/supabase/actions/supabaseAdmin.js.map +1 -0
  228. package/dist/template/supabase/actions/supabaseCrud.d.ts +3 -0
  229. package/dist/template/supabase/actions/supabaseCrud.d.ts.map +1 -0
  230. package/dist/template/supabase/actions/supabaseCrud.js +72 -0
  231. package/dist/template/supabase/actions/supabaseCrud.js.map +1 -0
  232. package/dist/template/supabase/actions/supabaseCrudWithAdmin.d.ts +2 -0
  233. package/dist/template/supabase/actions/supabaseCrudWithAdmin.d.ts.map +1 -0
  234. package/dist/template/supabase/actions/supabaseCrudWithAdmin.js +57 -0
  235. package/dist/template/supabase/actions/supabaseCrudWithAdmin.js.map +1 -0
  236. package/dist/template/supabase/supabaseAdminLayout.d.ts +2 -0
  237. package/dist/template/supabase/supabaseAdminLayout.d.ts.map +1 -0
  238. package/dist/template/supabase/supabaseAdminLayout.js +7 -0
  239. package/dist/template/supabase/supabaseAdminLayout.js.map +1 -0
  240. package/dist/template/supabase/supabaseAdminLoginLayout.d.ts +2 -0
  241. package/dist/template/supabase/supabaseAdminLoginLayout.d.ts.map +1 -0
  242. package/dist/template/supabase/supabaseAdminLoginLayout.js +121 -0
  243. package/dist/template/supabase/supabaseAdminLoginLayout.js.map +1 -0
  244. package/dist/template/supabase/supabaseProxy.d.ts +2 -0
  245. package/dist/template/supabase/supabaseProxy.d.ts.map +1 -0
  246. package/dist/template/supabase/supabaseProxy.js +42 -0
  247. package/dist/template/supabase/supabaseProxy.js.map +1 -0
  248. package/dist/template/supabase/utilBase.d.ts +3 -0
  249. package/dist/template/supabase/utilBase.d.ts.map +1 -0
  250. package/dist/template/supabase/utilBase.js +29 -0
  251. package/dist/template/supabase/utilBase.js.map +1 -0
  252. package/dist/types/BaseExtensionCommands.d.ts +38 -0
  253. package/dist/types/BaseExtensionCommands.d.ts.map +1 -0
  254. package/dist/types/BaseExtensionCommands.js +20 -0
  255. package/dist/types/BaseExtensionCommands.js.map +1 -0
  256. package/dist/types/config.d.ts +19 -0
  257. package/dist/types/config.d.ts.map +1 -0
  258. package/dist/types/config.js +2 -0
  259. package/dist/types/config.js.map +1 -0
  260. package/dist/types/env.d.ts +7 -0
  261. package/dist/types/env.d.ts.map +1 -0
  262. package/dist/types/env.js +5 -0
  263. package/dist/types/env.js.map +1 -0
  264. package/dist/types/index.d.ts +31 -0
  265. package/dist/types/index.d.ts.map +1 -0
  266. package/dist/types/index.js +2 -0
  267. package/dist/types/index.js.map +1 -0
  268. package/dist/utils/PathSearcher.d.ts +8 -0
  269. package/dist/utils/PathSearcher.d.ts.map +1 -0
  270. package/dist/utils/PathSearcher.js +40 -0
  271. package/dist/utils/PathSearcher.js.map +1 -0
  272. package/dist/utils/askInput.d.ts +10 -0
  273. package/dist/utils/askInput.d.ts.map +1 -0
  274. package/dist/utils/askInput.js +12 -0
  275. package/dist/utils/askInput.js.map +1 -0
  276. package/dist/utils/askSections.d.ts +13 -0
  277. package/dist/utils/askSections.d.ts.map +1 -0
  278. package/dist/utils/askSections.js +14 -0
  279. package/dist/utils/askSections.js.map +1 -0
  280. package/dist/utils/coverHyphenToQuotes.d.ts +2 -0
  281. package/dist/utils/coverHyphenToQuotes.d.ts.map +1 -0
  282. package/dist/utils/coverHyphenToQuotes.js +4 -0
  283. package/dist/utils/coverHyphenToQuotes.js.map +1 -0
  284. package/dist/utils/pathToAlias.d.ts +2 -0
  285. package/dist/utils/pathToAlias.d.ts.map +1 -0
  286. package/dist/utils/pathToAlias.js +4 -0
  287. package/dist/utils/pathToAlias.js.map +1 -0
  288. package/dist/utils/showSubaya.d.ts +2 -0
  289. package/dist/utils/showSubaya.d.ts.map +1 -0
  290. package/dist/utils/showSubaya.js +14 -0
  291. package/dist/utils/showSubaya.js.map +1 -0
  292. package/dist/utils/validateConfig.d.ts +3 -0
  293. package/dist/utils/validateConfig.d.ts.map +1 -0
  294. package/dist/utils/validateConfig.js +45 -0
  295. package/dist/utils/validateConfig.js.map +1 -0
  296. package/package.json +66 -0
package/README.md ADDED
@@ -0,0 +1,156 @@
1
+ # IOG (Image Optimization Generator)
2
+
3
+ 프론트엔드 개발을 위한 CLI 도구 라이브러리입니다. 이미지 최적화, 상태 관리, API 설정 등을 자동화합니다.
4
+
5
+ ## 프로젝트 구조
6
+
7
+ ```
8
+ src/
9
+ ├── core/ # 코어 시스템
10
+ │ ├── BaseCommand.ts # 모든 커맨드의 베이스 클래스
11
+ │ ├── BaseExtensionCommands.ts # API, State, Route 커맨드 베이스
12
+ │ ├── CommandRegistry.ts # 커맨드 등록 및 관리
13
+ │ ├── ConfigManager.ts # 설정 관리 (Singleton)
14
+ │ ├── FileSystemService.ts # 파일 시스템 유틸리티
15
+ │ └── FrameworkDetector.ts # 프레임워크 감지
16
+
17
+ ├── commands/ # 커맨드 구현
18
+ │ ├── image/
19
+ │ │ ├── ImageOptimizeCommand.ts # 이미지 최적화
20
+ │ │ ├── ImageResizeCommand.ts # 이미지 리사이즈
21
+ │ │ └── BackgroundRemoveCommand.ts # 배경 제거
22
+ │ ├── api/ # (향후 확장) axios, orpc
23
+ │ ├── state/ # (향후 확장) zustand, redux
24
+ │ └── route/ # (향후 확장) route 생성
25
+
26
+ ├── utils/ # 유틸리티
27
+ │ └── PathSearcher.ts # 파일 검색
28
+
29
+ ├── types/ # 타입 정의
30
+ │ └── index.ts
31
+
32
+ ├── config/ # 기본 설정
33
+ │ └── index.ts
34
+
35
+ ├── template/ # 템플릿
36
+ │ └── nextImage.ts
37
+
38
+ └── index.ts # CLI 진입점
39
+ ```
40
+
41
+ ## 아키텍처
42
+
43
+ ### 1. Core Layer
44
+ - **BaseCommand**: 모든 커맨드가 상속받는 추상 클래스
45
+ - **CommandRegistry**: 커맨드 등록 및 디스패칭
46
+ - **ConfigManager**: Singleton 패턴으로 설정 관리
47
+ - **FileSystemService**: 파일 시스템 작업 추상화
48
+ - **FrameworkDetector**: Next.js/React 자동 감지
49
+
50
+ ### 2. Command Pattern
51
+ 각 커맨드는 `ICommand` 인터페이스를 구현하며 `execute()` 메서드를 통해 실행됩니다.
52
+
53
+ ```typescript
54
+ export interface ICommand {
55
+ execute(): Promise<void>
56
+ }
57
+
58
+ export abstract class BaseCommand implements ICommand {
59
+ protected async getContext(): Promise<CommandContext>
60
+ abstract execute(): Promise<void>
61
+ }
62
+ ```
63
+
64
+ ### 3. 확장 가능한 구조
65
+ 새로운 기능 추가 시:
66
+
67
+ 1. `commands/` 디렉토리에 새 커맨드 클래스 작성
68
+ 2. `BaseCommand` 또는 `BaseApiCommand` 등을 상속
69
+ 3. `CommandRegistry`에 등록
70
+ 4. `types/index.ts`에 필요한 타입 추가
71
+ 5. `config/index.ts`에 기본 설정 추가
72
+
73
+ ## 사용법
74
+
75
+ ```bash
76
+ # 설치
77
+ npm install -g image-optimization-generator
78
+
79
+ # 이미지 최적화
80
+ iog image optimize
81
+
82
+ # 이미지 리사이즈
83
+ iog image resize
84
+
85
+ # 배경 제거
86
+ iog image removebg
87
+ ```
88
+
89
+ ## 설정 파일
90
+
91
+ 프로젝트 루트에 `iog.config.js` 생성:
92
+
93
+ ```javascript
94
+ export default {
95
+ image: {
96
+ inputImageDir: "public/images",
97
+ optimize: {
98
+ outputDir: "public/webp",
99
+ filePath: "src/generated/path/image.ts",
100
+ componentsPath: "src/components",
101
+ maxWidth: {
102
+ bg: 1920,
103
+ mbg: 1080,
104
+ thumb: 1080,
105
+ icon: 128,
106
+ },
107
+ },
108
+ removebg: {
109
+ removebgApiKey: null, // 또는 API 키
110
+ },
111
+ resize: {
112
+ maxWidth: 1920,
113
+ },
114
+ },
115
+ // 향후 확장
116
+ api: {
117
+ baseUrl: "https://api.example.com",
118
+ outputDir: "src/api",
119
+ },
120
+ state: {
121
+ type: "zustand",
122
+ outputDir: "src/store",
123
+ },
124
+ }
125
+ ```
126
+
127
+ ## 향후 확장 계획
128
+
129
+ ### API 관련
130
+ - Axios 인스턴스 자동 생성
131
+ - oRPC (tRPC 대체) 설정 생성
132
+ - API 라우트 자동 생성
133
+
134
+ ### State 관리
135
+ - Zustand store 생성
136
+ - Redux toolkit 설정
137
+ - Jotai/Recoil 지원
138
+
139
+ ### Route 관리
140
+ - Next.js App Router 자동 생성
141
+ - React Router 설정
142
+
143
+ ## 개발
144
+
145
+ ```bash
146
+ # 빌드
147
+ npm run build
148
+
149
+ # 로컬 테스트
150
+ npm link
151
+ iog image optimize
152
+ ```
153
+
154
+ ## 라이선스
155
+
156
+ ISC
@@ -0,0 +1,16 @@
1
+ import { BaseApiCommand } from "../../types/BaseExtensionCommands.js";
2
+ import type { DefaultConfigType } from "../../types/config.js";
3
+ export declare class OrpcGeneratorCommand extends BaseApiCommand {
4
+ protected validateApiConfig(config: DefaultConfigType): {
5
+ hasBaseUrl: boolean;
6
+ };
7
+ generateAllApiAndQueries(paths: Record<string, any>, enumTypesContent: string): Promise<string>;
8
+ private writeAllApiFiles;
9
+ generateHttpClient(): Promise<void>;
10
+ generateReactQueryTypes(): Promise<void>;
11
+ generateApiClass(content: string): Promise<void>;
12
+ createApiClass(schemas: Record<string, any>): Promise<string>;
13
+ private checkDependencies;
14
+ execute(): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=OrpcGeneratorCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrpcGeneratorCommand.d.ts","sourceRoot":"","sources":["../../../src/commands/api/OrpcGeneratorCommand.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAA;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAc9D,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG;QAAE,UAAU,EAAE,OAAO,CAAA;KAAE;IAMzE,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAwCvF,gBAAgB;IAOxB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YAIrD,iBAAiB;IAgBzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAwB/B"}
@@ -0,0 +1,100 @@
1
+ import fs from "fs-extra";
2
+ import path from "path";
3
+ import { FileSystemService } from "../../core/FileSystemService.js";
4
+ import { BaseApiCommand } from "../../types/BaseExtensionCommands.js";
5
+ import { ProviderGeneratorCommand } from "../provider/ProviderGeneratorCommand.js";
6
+ import { ApiMethodGenerator } from "./generators/ApiMethodGenerator.js";
7
+ import { SchemaGenerator } from "./generators/SchemaGenerator.js";
8
+ import { ApiFileWriter } from "./services/ApiFileWriter.js";
9
+ import { DependencyChecker } from "./services/DependencyChecker.js";
10
+ export class OrpcGeneratorCommand extends BaseApiCommand {
11
+ validateApiConfig(config) {
12
+ return {
13
+ hasBaseUrl: !!config?.api?.baseUrl,
14
+ };
15
+ }
16
+ async generateAllApiAndQueries(paths, enumTypesContent) {
17
+ const categorizedQueries = {};
18
+ let allEnumTypes = enumTypesContent;
19
+ for (const [pathName, methods] of Object.entries(paths)) {
20
+ for (const [method, data] of Object.entries(methods)) {
21
+ try {
22
+ const result = ApiMethodGenerator.generate(pathName, method, data);
23
+ allEnumTypes += result.enumTypes;
24
+ const tags = data.tags || [];
25
+ for (const tag of tags) {
26
+ if (!categorizedQueries[tag]) {
27
+ categorizedQueries[tag] = {
28
+ queries: [],
29
+ importTypeArr: [],
30
+ methods: [],
31
+ errorTypeArr: [],
32
+ };
33
+ }
34
+ categorizedQueries[tag].queries.push(result.methodOutput);
35
+ categorizedQueries[tag].importTypeArr.push(...result.importTypeArr);
36
+ categorizedQueries[tag].methods.push(result.methodInfo);
37
+ if (result.errorTypes.length > 0) {
38
+ const filteredErrorTypes = result.errorTypes.filter((t) => !t.includes("Record"));
39
+ categorizedQueries[tag].errorTypeArr.push(...filteredErrorTypes);
40
+ }
41
+ }
42
+ }
43
+ catch (error) {
44
+ continue;
45
+ }
46
+ }
47
+ }
48
+ await this.writeAllApiFiles(categorizedQueries);
49
+ return allEnumTypes;
50
+ }
51
+ async writeAllApiFiles(categorizedQueries) {
52
+ for (const [tag, data] of Object.entries(categorizedQueries)) {
53
+ await ApiFileWriter.writeApiClient(tag, data.queries, data.importTypeArr);
54
+ await ApiFileWriter.writeReactQueryHooks(tag, data.methods, data.errorTypeArr);
55
+ }
56
+ }
57
+ async generateHttpClient() {
58
+ await ApiFileWriter.writeHttpClient();
59
+ }
60
+ async generateReactQueryTypes() {
61
+ await ApiFileWriter.writeReactQueryTypes();
62
+ }
63
+ async generateApiClass(content) {
64
+ await ApiFileWriter.writeDataContracts(content);
65
+ }
66
+ async createApiClass(schemas) {
67
+ return SchemaGenerator.generate(schemas);
68
+ }
69
+ async checkDependencies() {
70
+ const axiosDir = path.join(FileSystemService.getOutputPath("configs"), "axios");
71
+ const storeDir = FileSystemService.getOutputPath("store");
72
+ const configsDir = FileSystemService.getOutputPath("configs");
73
+ await DependencyChecker.checkAndGenerateAxios(axiosDir);
74
+ const hasAxiosInstance = await FileSystemService.hasFile(axiosDir, "instance.ts");
75
+ await DependencyChecker.checkAndGenerateStorage(storeDir, !hasAxiosInstance);
76
+ await DependencyChecker.checkAndGenerateEnv(configsDir);
77
+ await new ProviderGeneratorCommand().execute(["reactquery"]);
78
+ return true;
79
+ }
80
+ async execute() {
81
+ await this.getContext();
82
+ const config = this.getConfig();
83
+ await fs.ensureDir(FileSystemService.getOutputPath("generated"));
84
+ const { hasBaseUrl } = this.validateApiConfig(config);
85
+ if (!hasBaseUrl || !config.api.baseUrl) {
86
+ console.warn("⚠️ oRPC baseUrl is not set.");
87
+ return;
88
+ }
89
+ await this.checkDependencies();
90
+ const response = await fetch(config.api.baseUrl);
91
+ const data = await response.json();
92
+ await this.generateHttpClient();
93
+ await this.generateReactQueryTypes();
94
+ const schemaContent = await this.createApiClass(data.components.schemas);
95
+ const finalContent = await this.generateAllApiAndQueries(data.paths, schemaContent);
96
+ await this.generateApiClass(finalContent);
97
+ console.log("✅ oRPC configuration generated successfully");
98
+ }
99
+ }
100
+ //# sourceMappingURL=OrpcGeneratorCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrpcGeneratorCommand.js","sourceRoot":"","sources":["../../../src/commands/api/OrpcGeneratorCommand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export interface ApiMethodInfo {
2
+ operationId: string;
3
+ method: string;
4
+ hasQuery: boolean;
5
+ hasPathParams: boolean;
6
+ responseType: string;
7
+ errorType: string;
8
+ comments: string[];
9
+ isInfinite: boolean;
10
+ }
11
+ export interface ApiMethodResult {
12
+ methodOutput: string;
13
+ enumTypes: string;
14
+ importTypeArr: string[];
15
+ errorTypes: string[];
16
+ methodInfo: ApiMethodInfo;
17
+ }
18
+ export declare class ApiMethodGenerator {
19
+ static generate(pathName: string, method: string, data: any): ApiMethodResult;
20
+ private static buildMethodSignature;
21
+ }
22
+ //# sourceMappingURL=ApiMethodGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiMethodGenerator.d.ts","sourceRoot":"","sources":["../../../../src/commands/api/generators/ApiMethodGenerator.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,OAAO,CAAA;IACjB,aAAa,EAAE,OAAO,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,UAAU,EAAE,aAAa,CAAA;CAC1B;AAED,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,eAAe;IAyD7E,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAsCpC"}
@@ -0,0 +1,73 @@
1
+ import { pascalCase } from "change-case";
2
+ import { CommentGenerator } from "../utils/CommentGenerator.js";
3
+ import { ParameterExtractor } from "../utils/ParameterExtractor.js";
4
+ import { ResponseTypeExtractor } from "../utils/ResponseTypeExtractor.js";
5
+ import { TypeResolver } from "../utils/TypeResolver.js";
6
+ import { QueryStringGenerator } from "./QueryStringGenerator.js";
7
+ export class ApiMethodGenerator {
8
+ static generate(pathName, method, data) {
9
+ const importTypeArr = [];
10
+ const errorTypes = [];
11
+ if (!data.tags || data.tags.length === 0) {
12
+ throw new Error("No tags found");
13
+ }
14
+ const tags = data.tags;
15
+ const operationId = data.operationId || `${method}_${pathName.replace(/[^a-zA-Z0-9]/g, "_")}`;
16
+ const pascalOpId = pascalCase(operationId);
17
+ const camelOpId = pascalOpId.charAt(0).toLowerCase() + pascalOpId.slice(1);
18
+ const comments = CommentGenerator.collectApiComments(data, tags, pascalOpId, method, pathName);
19
+ let methodOutput = CommentGenerator.generate(comments);
20
+ const { pathParams, queryParams, hasBody, bodyType } = ParameterExtractor.extract(data);
21
+ const { responseType, errorType, errorTypes: extractedErrorTypes } = ResponseTypeExtractor.extract(data.responses);
22
+ errorTypes.push(...extractedErrorTypes);
23
+ const args = [...pathParams];
24
+ const { queryString, enumTypes } = QueryStringGenerator.generate(queryParams, camelOpId, importTypeArr);
25
+ if (queryString) {
26
+ args.push(queryString);
27
+ }
28
+ if (hasBody) {
29
+ args.push(`data: ${bodyType}`);
30
+ }
31
+ args.push("params?: RequestParams");
32
+ const templatePath = pathName.replace(/\{([^}]+)\}/g, (_, p1) => `\${variables?.${p1}}`);
33
+ args.forEach((arg) => TypeResolver.addImportType(arg, importTypeArr));
34
+ TypeResolver.addImportType(responseType, importTypeArr);
35
+ extractedErrorTypes.forEach((t) => TypeResolver.addImportType(t, importTypeArr));
36
+ methodOutput += this.buildMethodSignature(camelOpId, args, responseType, errorType, templatePath, method, queryParams, hasBody, data.security);
37
+ const methodInfo = {
38
+ operationId,
39
+ method,
40
+ hasQuery: queryParams.length > 0,
41
+ hasPathParams: pathParams.length > 0,
42
+ isInfinite: queryParams.some((q) => q.name === "offset"),
43
+ responseType,
44
+ errorType,
45
+ comments,
46
+ };
47
+ return { methodOutput, enumTypes, importTypeArr, errorTypes, methodInfo };
48
+ }
49
+ static buildMethodSignature(camelOpId, args, responseType, errorType, templatePath, method, queryParams, hasBody, isSecure) {
50
+ let output = "";
51
+ output += ` ${camelOpId} = (${args.length > 0 ? `variables?: {\n${args.map((a) => " " + a).join(",\n")}\n },\n` : ""}) =>\n`;
52
+ output += ` this.request<${responseType}, ${errorType}>({\n`;
53
+ output += ` path: \`${templatePath}\`,\n`;
54
+ output += ` method: "${method.toUpperCase()}",\n`;
55
+ if (queryParams.length > 0) {
56
+ output += " query: variables?.query,\n";
57
+ }
58
+ if (hasBody) {
59
+ output += " body: variables?.data,\n";
60
+ output += " type: ContentType.Json,\n";
61
+ }
62
+ else {
63
+ output += ' format: "json",\n';
64
+ }
65
+ if (isSecure) {
66
+ output += " secure: true,\n";
67
+ }
68
+ output += " ...variables?.params,\n";
69
+ output += " })";
70
+ return output;
71
+ }
72
+ }
73
+ //# sourceMappingURL=ApiMethodGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiMethodGenerator.js","sourceRoot":"","sources":["../../../../src/commands/api/generators/ApiMethodGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare class QueryStringGenerator {
2
+ static generate(queryParams: any[], camelOpId: string, importTypeArr: string[]): {
3
+ queryString: string;
4
+ enumTypes: string;
5
+ };
6
+ }
7
+ //# sourceMappingURL=QueryStringGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryStringGenerator.d.ts","sourceRoot":"","sources":["../../../../src/commands/api/generators/QueryStringGenerator.ts"],"names":[],"mappings":"AAGA,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,QAAQ,CACb,WAAW,EAAE,GAAG,EAAE,EAClB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EAAE,GACtB;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;CAiC9C"}
@@ -0,0 +1,34 @@
1
+ import { pascalCase } from "change-case";
2
+ import { TypeResolver } from "../utils/TypeResolver.js";
3
+ export class QueryStringGenerator {
4
+ static generate(queryParams, camelOpId, importTypeArr) {
5
+ if (queryParams.length === 0) {
6
+ return { queryString: "", enumTypes: "" };
7
+ }
8
+ const isQueryRequired = queryParams.some((q) => q.required);
9
+ let queryStr = `query${isQueryRequired ? "" : "?"}: {\n`;
10
+ let enumTypes = "";
11
+ for (const q of queryParams) {
12
+ if (q.description) {
13
+ queryStr += ` /** ${q.description.replace(/\n/g, " ")} */\n`;
14
+ }
15
+ if (q.schema?.format) {
16
+ queryStr += ` /** @format ${q.schema.format} */\n`;
17
+ }
18
+ const qType = TypeResolver.resolve(q.schema || q, "", q.name);
19
+ if (q?.schema?.enum || q?.schema?.items?.enum) {
20
+ const enumArr = q?.schema?.enum || q?.schema?.items?.enum;
21
+ const target = pascalCase(camelOpId + "Params" + qType);
22
+ queryStr += ` ${q.name}${q.required ? "" : "?"}: ${target};\n`;
23
+ enumTypes += `export type ${target} = ${enumArr.map((e) => `'${e}'`).join(" | ")};\n\n`;
24
+ TypeResolver.addImportType(target, importTypeArr);
25
+ }
26
+ else {
27
+ queryStr += ` ${q.name}${q.required ? "" : "?"}: ${qType};\n`;
28
+ }
29
+ }
30
+ queryStr += " }";
31
+ return { queryString: queryStr, enumTypes };
32
+ }
33
+ }
34
+ //# sourceMappingURL=QueryStringGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryStringGenerator.js","sourceRoot":"","sources":["../../../../src/commands/api/generators/QueryStringGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,MAAM,OAAO,oBAAoB;IAC/B,MAAM,CAAC,QAAQ,CACb,WAAkB,EAClB,SAAiB,EACjB,aAAuB;QAEvB,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAA;QAC3C,CAAC;QAED,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QAC3D,IAAI,QAAQ,GAAG,QAAQ,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAA;QACxD,IAAI,SAAS,GAAG,EAAE,CAAA;QAElB,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBAClB,QAAQ,IAAI,eAAe,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAA;YACrE,CAAC;YACD,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBACrB,QAAQ,IAAI,uBAAuB,CAAC,CAAC,MAAM,CAAC,MAAM,OAAO,CAAA;YAC3D,CAAC;YAED,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;YAE7D,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBAC9C,MAAM,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAA;gBACzD,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAA;gBACvD,QAAQ,IAAI,WAAW,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,KAAK,CAAA;gBACrE,SAAS,IAAI,eAAe,MAAM,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAA;gBAC/F,YAAY,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;YACnD,CAAC;iBAAM,CAAC;gBACN,QAAQ,IAAI,WAAW,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,KAAK,CAAA;YACtE,CAAC;QACH,CAAC;QAED,QAAQ,IAAI,SAAS,CAAA;QACrB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;IAC7C,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export declare class SchemaGenerator {
2
+ static generate(schemas: Record<string, any>): string;
3
+ private static generateEnumType;
4
+ }
5
+ //# sourceMappingURL=SchemaGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaGenerator.d.ts","sourceRoot":"","sources":["../../../../src/commands/api/generators/SchemaGenerator.ts"],"names":[],"mappings":"AAIA,qBAAa,eAAe;IAC1B,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAkDrD,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAqBhC"}
@@ -0,0 +1,61 @@
1
+ import { CommentGenerator } from "../utils/CommentGenerator.js";
2
+ import { TypeResolver } from "../utils/TypeResolver.js";
3
+ import { coverHyphenToQuotes } from "../../../utils/coverHyphenToQuotes.js";
4
+ export class SchemaGenerator {
5
+ static generate(schemas) {
6
+ let output = "";
7
+ const enums = {};
8
+ for (const [schemaName, schema] of Object.entries(schemas)) {
9
+ output += `export interface ${schemaName}Type {\n`;
10
+ const properties = schema.properties || {};
11
+ const requiredProps = schema.required || [];
12
+ for (const [propName, prop] of Object.entries(properties)) {
13
+ const comments = CommentGenerator.collectPropertyComments(prop);
14
+ if (comments.length > 0) {
15
+ output += CommentGenerator.generate(comments);
16
+ }
17
+ const isRequired = requiredProps.includes(propName);
18
+ const isReadOnly = prop.readOnly;
19
+ const isNullable = prop.nullable;
20
+ let propType = TypeResolver.resolve(prop, schemaName, propName);
21
+ if (isNullable) {
22
+ propType += " | null";
23
+ }
24
+ const modifier = isReadOnly ? "readonly " : "";
25
+ const optionalMark = isRequired ? "" : "?";
26
+ output += ` ${modifier}${coverHyphenToQuotes(propName)}${optionalMark}: ${propType};\n`;
27
+ const enumPropName = `${schemaName}${propName.charAt(0).toUpperCase()}${propName.slice(1)}Type`;
28
+ const propObj = prop;
29
+ if (propObj.enum?.length > 0 && !enums[enumPropName]) {
30
+ enums[enumPropName] = this.generateEnumType(propObj, enumPropName);
31
+ }
32
+ }
33
+ output += "}\n\n";
34
+ }
35
+ output += "\n\n";
36
+ for (const enumOutput of Object.values(enums)) {
37
+ output += `${enumOutput}\n\n`;
38
+ }
39
+ return output.trim() + "\n\n";
40
+ }
41
+ static generateEnumType(prop, enumPropName) {
42
+ let enumOutput = "";
43
+ if (prop.description) {
44
+ const enumComments = prop.description.split("\n");
45
+ enumOutput = CommentGenerator.generate(enumComments);
46
+ }
47
+ if (prop["x-enumNames"]?.length > 0 && prop["x-enumNames"].length === prop.enum.length) {
48
+ enumOutput += `export type ${enumPropName} = keyof typeof ${enumPropName}Map;
49
+ export const ${enumPropName}Map = {
50
+ ${prop.enum.map((e, index) => `${coverHyphenToQuotes(e)}: '${prop["x-enumNames"][index]}'`).join(",\n ")},
51
+ } as const;`;
52
+ }
53
+ else {
54
+ enumOutput += `export type ${enumPropName}Map = {
55
+ ${prop.enum.map((e) => `${e}`).join(" | ")},
56
+ };`;
57
+ }
58
+ return enumOutput;
59
+ }
60
+ }
61
+ //# sourceMappingURL=SchemaGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaGenerator.js","sourceRoot":"","sources":["../../../../src/commands/api/generators/SchemaGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ApiMethodInfo } from "../generators/ApiMethodGenerator.js";
2
+ export declare class ApiFileWriter {
3
+ static writeApiClient(tag: string, queries: string[], importTypeArr: string[]): Promise<void>;
4
+ static writeReactQueryHooks(tag: string, methods: ApiMethodInfo[], errorTypeArr: string[]): Promise<void>;
5
+ static writeHttpClient(): Promise<void>;
6
+ static writeReactQueryTypes(): Promise<void>;
7
+ static writeDataContracts(content: string): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=ApiFileWriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiFileWriter.d.ts","sourceRoot":"","sources":["../../../../src/commands/api/services/ApiFileWriter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAExE,qBAAa,aAAa;WACX,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;WAYtF,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;WAYlG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;WAUhC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;WAkErC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAShE"}
@@ -0,0 +1,112 @@
1
+ import { pascalCase } from "change-case";
2
+ import path from "path";
3
+ import { FileSystemService } from "../../../core/FileSystemService.js";
4
+ import { genApiHttpClient } from "../../../template/api/gen/httpClient.js";
5
+ import { genQueryApiClient } from "../../../template/api/gen/queryApiClient.js";
6
+ import { genQueryReactQueryClient } from "../../../template/api/gen/queryReactQueryClient.js";
7
+ export class ApiFileWriter {
8
+ static async writeApiClient(tag, queries, importTypeArr) {
9
+ const name = pascalCase(tag);
10
+ const outputDir = path.join("src", "generated", "api", name);
11
+ await FileSystemService.writeFileOrSkip({
12
+ dir: outputDir,
13
+ generateType: "overwrite",
14
+ file: `${name}.api`,
15
+ content: genQueryApiClient(name, queries, importTypeArr),
16
+ });
17
+ }
18
+ static async writeReactQueryHooks(tag, methods, errorTypeArr) {
19
+ const name = pascalCase(tag);
20
+ const outputDir = path.join("src", "generated", "api", name);
21
+ await FileSystemService.writeFileOrSkip({
22
+ dir: outputDir,
23
+ generateType: "overwrite",
24
+ file: `${name}.query`,
25
+ content: genQueryReactQueryClient(name, methods, errorTypeArr),
26
+ });
27
+ }
28
+ static async writeHttpClient() {
29
+ const outputDir = path.join("src", "generated", "api", "@http-client");
30
+ await FileSystemService.writeFileOrSkip({
31
+ dir: outputDir,
32
+ generateType: "overwrite",
33
+ file: "index",
34
+ content: genApiHttpClient,
35
+ });
36
+ }
37
+ static async writeReactQueryTypes() {
38
+ const content = `import {
39
+ DefaultError,
40
+ InfiniteData,
41
+ QueryKey,
42
+ UseInfiniteQueryOptions,
43
+ UseMutationOptions,
44
+ UseQueryOptions,
45
+ } from "@tanstack/react-query"
46
+ import { AxiosError } from 'axios'
47
+
48
+ export type QueryHookParams<
49
+ T extends CustomRequestFn,
50
+ Error = AxiosError<any>,
51
+ Data = RequestFnReturn<T>,
52
+ Variables = Parameter<T>
53
+ > = {
54
+ options?: Omit<UseQueryOptions<Data, Error>, 'queryKey' | 'queryFn'>
55
+ } & OptionalVariables<Variables>
56
+
57
+ export type InfiniteQueryHookParams<TQueryFnData, TError = DefaultError, TPageParam = number> = {
58
+ variables: any
59
+ options?: Omit<
60
+ UseInfiniteQueryOptions<
61
+ TQueryFnData,
62
+ TError,
63
+ InfiniteData<TQueryFnData, TPageParam>,
64
+ QueryKey,
65
+ TPageParam
66
+ >,
67
+ "queryKey" | "queryFn" | "initialPageParam" | "getNextPageParam" | "getPreviousPageParam"
68
+ >
69
+ }
70
+
71
+ export type MutationHookParams<
72
+ T extends CustomRequestFn,
73
+ Error = AxiosError<any>,
74
+ Data = RequestFnReturn<T>,
75
+ Variables = Parameter<T>
76
+ > = {
77
+ options?: Omit<UseMutationOptions<Data, Error, Variables>, 'mutationFn' | 'mutationKey'>
78
+ }
79
+
80
+ export type OptionalVariables<T> = undefined extends T
81
+ ? {
82
+ variables?: T
83
+ }
84
+ : {
85
+ variables: T
86
+ }
87
+
88
+ export type Parameter<T> = T extends (param: infer U) => any ? U : never
89
+
90
+ export type CustomRequestFn = (variables?: any) => Promise<any>
91
+
92
+ export type RequestFnReturn<T extends CustomRequestFn> = Awaited<ReturnType<T>>
93
+ `;
94
+ const outputDir = path.join("src", "generated", "api", "@types");
95
+ await FileSystemService.writeFileOrSkip({
96
+ dir: outputDir,
97
+ generateType: "overwrite",
98
+ file: "react-query-type",
99
+ content,
100
+ });
101
+ }
102
+ static async writeDataContracts(content) {
103
+ const outputDir = path.join("src", "generated", "api", "@types");
104
+ await FileSystemService.writeFileOrSkip({
105
+ dir: outputDir,
106
+ file: "data-contracts",
107
+ generateType: "overwrite",
108
+ content,
109
+ });
110
+ }
111
+ }
112
+ //# sourceMappingURL=ApiFileWriter.js.map