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
@@ -0,0 +1,159 @@
1
+ import { camelCase, constantCase, pascalCase } from "change-case";
2
+ export const genQueryReactQueryClient = (apiName, methods, importErrorTypeArr) => {
3
+ const apiInstance = camelCase(apiName.toLocaleLowerCase()) + "Api";
4
+ const constantPrefix = constantCase(apiName);
5
+ const genImportArr = () => {
6
+ if (importErrorTypeArr.length === 0) {
7
+ return "";
8
+ }
9
+ const sortedImportTypeArr = importErrorTypeArr
10
+ .filter((type) => type !== "any" && !type.includes("[]"))
11
+ .sort((a, b) => a.localeCompare(b));
12
+ const importStrSet = [...new Set(sortedImportTypeArr)];
13
+ if (importStrSet.length < 5) {
14
+ return `import { ${importStrSet.join(", ")} } from "../@types/data-contracts";`;
15
+ }
16
+ return `import {
17
+ ${importStrSet.join(",\n ")},
18
+ } from "../@types/data-contracts";`;
19
+ };
20
+ let isNeedInfiniteQueryInFile = false;
21
+ let isNeedMutationInFile = false;
22
+ let isNeedQueryInFile = false;
23
+ let queryKeys = "";
24
+ let queryHooks = "";
25
+ methods.forEach((methodInfo) => {
26
+ const { operationId, method, hasQuery, hasPathParams, responseType, errorType, comments, isInfinite } = methodInfo;
27
+ const pascalOpId = pascalCase(operationId);
28
+ const camelOpId = pascalCase(operationId).charAt(0).toLowerCase() + pascalCase(operationId).slice(1);
29
+ const constantOpId = constantCase(operationId);
30
+ const isGet = method.toUpperCase() === "GET";
31
+ const needsInfinite = isGet && hasQuery && isInfinite;
32
+ const hasVariables = hasPathParams || hasQuery;
33
+ // QUERY_KEY 생성
34
+ const targetQueryKey = constantOpId.replace(`${constantPrefix}_`, "");
35
+ if (isGet) {
36
+ if (needsInfinite) {
37
+ isNeedInfiniteQueryInFile = true;
38
+ queryKeys += ` ${targetQueryKey}: (variables?: Parameter<typeof ${apiInstance}.${camelOpId}>) =>\n`;
39
+ queryKeys += ` ["$${targetQueryKey}", variables].filter((key) => typeof key !== "undefined"),\n`;
40
+ queryKeys += ` ${targetQueryKey}_INFINITE: (variables?: Parameter<typeof ${apiInstance}.${camelOpId}>) =>\n`;
41
+ queryKeys += ` ["$${targetQueryKey}_INFINITE", variables].filter((key) => typeof key !== "undefined"),\n`;
42
+ }
43
+ else {
44
+ if (hasVariables) {
45
+ queryKeys += ` ${targetQueryKey}: (variables?: Parameter<typeof ${apiInstance}.${camelOpId}>) =>\n`;
46
+ queryKeys += ` ["$${targetQueryKey}", variables].filter((key) => typeof key !== "undefined"),\n`;
47
+ }
48
+ else {
49
+ queryKeys += ` ${targetQueryKey}: (variables?: Parameter<typeof ${apiInstance}.${camelOpId}>) =>\n`;
50
+ queryKeys += ` ["$${targetQueryKey}", variables].filter((key) => typeof key !== "undefined"),\n`;
51
+ }
52
+ }
53
+ }
54
+ else {
55
+ queryKeys += ` ${targetQueryKey}: () => ["${targetQueryKey}"].filter((key) => typeof key !== "undefined"),\n`;
56
+ }
57
+ // Hook 생성
58
+ const commentStr = comments.map((c) => ` * ${c}`).join("\n");
59
+ if (isGet) {
60
+ // useQuery Hook
61
+ isNeedQueryInFile = true;
62
+ queryHooks += `/**\n${commentStr}\n */\n`;
63
+ queryHooks += `export const use${pascalOpId}Query = (\n`;
64
+ queryHooks += hasVariables
65
+ ? ` params: QueryHookParams<typeof ${apiInstance}.${camelOpId}, AxiosError<${errorType}>>,\n`
66
+ : ` params?: QueryHookParams<typeof ${apiInstance}.${camelOpId}, AxiosError<${errorType}>>,\n`;
67
+ queryHooks += `) => {\n`;
68
+ queryHooks += ` const queryKey = QUERY_KEY_${constantPrefix}_API.${targetQueryKey}(params${hasVariables ? "" : "?"}.variables)\n`;
69
+ queryHooks += ` return useQuery({\n`;
70
+ queryHooks += ` queryKey,\n`;
71
+ queryHooks += ` queryFn: () => ${apiInstance}.${camelOpId}(params${hasVariables ? "" : "?"}.variables),\n`;
72
+ queryHooks += ` ...params?.options,\n`;
73
+ queryHooks += ` })\n`;
74
+ queryHooks += `}\n\n`;
75
+ // useInfiniteQuery Hook (hasQuery가 있는 경우)
76
+ if (needsInfinite) {
77
+ importErrorTypeArr.push(responseType);
78
+ queryHooks += `/**\n${commentStr}\n */\n`;
79
+ queryHooks += `export const use${pascalOpId}InfiniteQuery = (\n`;
80
+ queryHooks += ` params: InfiniteQueryHookParams<${responseType}, AxiosError<${errorType}>>,\n`;
81
+ queryHooks += `) => {\n`;
82
+ queryHooks += ` const queryKey = QUERY_KEY_${constantPrefix}_API.${targetQueryKey}_INFINITE(params.variables)\n\n`;
83
+ queryHooks += ` return useInfiniteQuery({\n`;
84
+ queryHooks += ` queryKey,\n`;
85
+ queryHooks += ` initialPageParam: 0,\n`;
86
+ queryHooks += ` queryFn: ({ pageParam = 0 }) => {\n`;
87
+ queryHooks += ` return ${apiInstance}.${camelOpId}({\n`;
88
+ queryHooks += ` ...params.variables,\n`;
89
+ queryHooks += ` query: {\n`;
90
+ queryHooks += ` ...params.variables?.query,\n`;
91
+ queryHooks += ` offset: String(pageParam),\n`;
92
+ queryHooks += ` },\n`;
93
+ queryHooks += ` })\n`;
94
+ queryHooks += ` },\n`;
95
+ queryHooks += ` getNextPageParam: (lastPage) => {\n`;
96
+ queryHooks += ` return lastPage.nextOffset\n`;
97
+ queryHooks += ` },\n`;
98
+ queryHooks += ` ...params?.options,\n`;
99
+ queryHooks += ` })\n`;
100
+ queryHooks += `}\n\n`;
101
+ }
102
+ }
103
+ else {
104
+ // useMutation Hook
105
+ isNeedMutationInFile = true;
106
+ queryHooks += `/**\n${commentStr}\n */\n`;
107
+ queryHooks += `export const use${pascalOpId}Mutation = (\n`;
108
+ queryHooks += ` params: MutationHookParams<typeof ${apiInstance}.${camelOpId}, AxiosError<${errorType}>>,\n`;
109
+ queryHooks += `) => {\n`;
110
+ queryHooks += ` const mutationKey = QUERY_KEY_${constantPrefix}_API.${targetQueryKey}()\n`;
111
+ queryHooks += ` return useMutation({\n`;
112
+ queryHooks += ` mutationKey,\n`;
113
+ queryHooks += ` mutationFn: ${apiInstance}.${camelOpId},\n`;
114
+ queryHooks += ` ...params?.options,\n`;
115
+ queryHooks += ` })\n`;
116
+ queryHooks += `}\n\n`;
117
+ }
118
+ });
119
+ const importFromTanstackQuery = () => {
120
+ const importArr = [];
121
+ if (isNeedInfiniteQueryInFile) {
122
+ importArr.push("useInfiniteQuery");
123
+ }
124
+ if (isNeedMutationInFile) {
125
+ importArr.push("useMutation");
126
+ }
127
+ if (isNeedQueryInFile) {
128
+ importArr.push("useQuery");
129
+ }
130
+ return importArr.join(", ");
131
+ };
132
+ const importFromReactQueryType = () => {
133
+ const importArr = [];
134
+ if (isNeedInfiniteQueryInFile) {
135
+ importArr.push("InfiniteQueryHookParams");
136
+ }
137
+ if (isNeedMutationInFile) {
138
+ importArr.push("MutationHookParams");
139
+ }
140
+ if (isNeedQueryInFile) {
141
+ importArr.push("QueryHookParams");
142
+ importArr.push("Parameter");
143
+ }
144
+ return importArr.join(", ");
145
+ };
146
+ return `import { ${importFromTanstackQuery()} } from "@tanstack/react-query"
147
+ import { AxiosError } from "axios"
148
+ import { ${importFromReactQueryType()} } from "../@types/react-query-type"
149
+ import { ${apiInstance} } from "./${apiName}.api"
150
+ ${importErrorTypeArr.length === 0 ? "" : `\n${genImportArr()}`}
151
+ /**
152
+ * QUERY_KEYS
153
+ */
154
+ export const QUERY_KEY_${constantPrefix}_API = {
155
+ ${queryKeys}}
156
+
157
+ ${queryHooks}`;
158
+ };
159
+ //# sourceMappingURL=queryReactQueryClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryReactQueryClient.js","sourceRoot":"","sources":["../../../../src/template/api/gen/queryReactQueryClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAajE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,OAAe,EAAE,OAA0B,EAAE,kBAA4B,EAAE,EAAE;IACpH,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,GAAG,KAAK,CAAA;IAClE,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IAE5C,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,mBAAmB,GAAG,kBAAkB;aAC3C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;aACxD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAA;QACtD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,YAAY,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,qCAAqC,CAAA;QACjF,CAAC;QACD,OAAO;IACP,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;mCACK,CAAA;IACjC,CAAC,CAAA;IAED,IAAI,yBAAyB,GAAG,KAAK,CAAA;IACrC,IAAI,oBAAoB,GAAG,KAAK,CAAA;IAChC,IAAI,iBAAiB,GAAG,KAAK,CAAA;IAC7B,IAAI,SAAS,GAAG,EAAE,CAAA;IAClB,IAAI,UAAU,GAAG,EAAE,CAAA;IAEnB,OAAO,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QAC7B,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,UAAU,CAAA;QAElH,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,CAAA;QAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACpG,MAAM,YAAY,GAAG,YAAY,CAAC,WAAW,CAAC,CAAA;QAE9C,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAA;QAC5C,MAAM,aAAa,GAAG,KAAK,IAAI,QAAQ,IAAI,UAAU,CAAA;QAErD,MAAM,YAAY,GAAG,aAAa,IAAI,QAAQ,CAAA;QAE9C,eAAe;QACf,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,GAAG,EAAE,EAAE,CAAC,CAAA;QACrE,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,aAAa,EAAE,CAAC;gBAClB,yBAAyB,GAAG,IAAI,CAAA;gBAChC,SAAS,IAAI,KAAK,cAAc,mCAAmC,WAAW,IAAI,SAAS,SAAS,CAAA;gBACpG,SAAS,IAAI,UAAU,cAAc,8DAA8D,CAAA;gBACnG,SAAS,IAAI,KAAK,cAAc,4CAA4C,WAAW,IAAI,SAAS,SAAS,CAAA;gBAC7G,SAAS,IAAI,UAAU,cAAc,uEAAuE,CAAA;YAC9G,CAAC;iBAAM,CAAC;gBACN,IAAI,YAAY,EAAE,CAAC;oBACjB,SAAS,IAAI,KAAK,cAAc,mCAAmC,WAAW,IAAI,SAAS,SAAS,CAAA;oBACpG,SAAS,IAAI,UAAU,cAAc,8DAA8D,CAAA;gBACrG,CAAC;qBAAM,CAAC;oBACN,SAAS,IAAI,KAAK,cAAc,mCAAmC,WAAW,IAAI,SAAS,SAAS,CAAA;oBACpG,SAAS,IAAI,UAAU,cAAc,8DAA8D,CAAA;gBACrG,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,SAAS,IAAI,KAAK,cAAc,aAAa,cAAc,mDAAmD,CAAA;QAChH,CAAC;QAED,UAAU;QACV,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE5D,IAAI,KAAK,EAAE,CAAC;YACV,gBAAgB;YAChB,iBAAiB,GAAG,IAAI,CAAA;YACxB,UAAU,IAAI,QAAQ,UAAU,SAAS,CAAA;YACzC,UAAU,IAAI,mBAAmB,UAAU,aAAa,CAAA;YACxD,UAAU,IAAI,YAAY;gBACxB,CAAC,CAAC,oCAAoC,WAAW,IAAI,SAAS,gBAAgB,SAAS,OAAO;gBAC9F,CAAC,CAAC,qCAAqC,WAAW,IAAI,SAAS,gBAAgB,SAAS,OAAO,CAAA;YACjG,UAAU,IAAI,UAAU,CAAA;YACxB,UAAU,IAAI,gCAAgC,cAAc,QAAQ,cAAc,UAAU,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,eAAe,CAAA;YAClI,UAAU,IAAI,uBAAuB,CAAA;YACrC,UAAU,IAAI,iBAAiB,CAAA;YAC/B,UAAU,IAAI,sBAAsB,WAAW,IAAI,SAAS,UAAU,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAA;YAC7G,UAAU,IAAI,2BAA2B,CAAA;YACzC,UAAU,IAAI,QAAQ,CAAA;YACtB,UAAU,IAAI,OAAO,CAAA;YAErB,0CAA0C;YAC1C,IAAI,aAAa,EAAE,CAAC;gBAClB,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;gBACrC,UAAU,IAAI,QAAQ,UAAU,SAAS,CAAA;gBACzC,UAAU,IAAI,mBAAmB,UAAU,qBAAqB,CAAA;gBAChE,UAAU,IAAI,qCAAqC,YAAY,gBAAgB,SAAS,OAAO,CAAA;gBAC/F,UAAU,IAAI,UAAU,CAAA;gBACxB,UAAU,IAAI,gCAAgC,cAAc,QAAQ,cAAc,iCAAiC,CAAA;gBACnH,UAAU,IAAI,+BAA+B,CAAA;gBAC7C,UAAU,IAAI,iBAAiB,CAAA;gBAC/B,UAAU,IAAI,4BAA4B,CAAA;gBAC1C,UAAU,IAAI,yCAAyC,CAAA;gBACvD,UAAU,IAAI,gBAAgB,WAAW,IAAI,SAAS,MAAM,CAAA;gBAC5D,UAAU,IAAI,gCAAgC,CAAA;gBAC9C,UAAU,IAAI,oBAAoB,CAAA;gBAClC,UAAU,IAAI,yCAAyC,CAAA;gBACvD,UAAU,IAAI,wCAAwC,CAAA;gBACtD,UAAU,IAAI,cAAc,CAAA;gBAC5B,UAAU,IAAI,YAAY,CAAA;gBAC1B,UAAU,IAAI,UAAU,CAAA;gBACxB,UAAU,IAAI,yCAAyC,CAAA;gBACvD,UAAU,IAAI,oCAAoC,CAAA;gBAClD,UAAU,IAAI,UAAU,CAAA;gBACxB,UAAU,IAAI,2BAA2B,CAAA;gBACzC,UAAU,IAAI,QAAQ,CAAA;gBACtB,UAAU,IAAI,OAAO,CAAA;YACvB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,mBAAmB;YACnB,oBAAoB,GAAG,IAAI,CAAA;YAC3B,UAAU,IAAI,QAAQ,UAAU,SAAS,CAAA;YACzC,UAAU,IAAI,mBAAmB,UAAU,gBAAgB,CAAA;YAC3D,UAAU,IAAI,uCAAuC,WAAW,IAAI,SAAS,gBAAgB,SAAS,OAAO,CAAA;YAC7G,UAAU,IAAI,UAAU,CAAA;YACxB,UAAU,IAAI,mCAAmC,cAAc,QAAQ,cAAc,MAAM,CAAA;YAC3F,UAAU,IAAI,0BAA0B,CAAA;YACxC,UAAU,IAAI,oBAAoB,CAAA;YAClC,UAAU,IAAI,mBAAmB,WAAW,IAAI,SAAS,KAAK,CAAA;YAC9D,UAAU,IAAI,2BAA2B,CAAA;YACzC,UAAU,IAAI,QAAQ,CAAA;YACtB,UAAU,IAAI,OAAO,CAAA;QACvB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,uBAAuB,GAAG,GAAG,EAAE;QACnC,MAAM,SAAS,GAAG,EAAE,CAAA;QACpB,IAAI,yBAAyB,EAAE,CAAC;YAC9B,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QACpC,CAAC;QACD,IAAI,oBAAoB,EAAE,CAAC;YACzB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAC/B,CAAC;QACD,IAAI,iBAAiB,EAAE,CAAC;YACtB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC5B,CAAC;QACD,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC,CAAA;IACD,MAAM,wBAAwB,GAAG,GAAG,EAAE;QACpC,MAAM,SAAS,GAAG,EAAE,CAAA;QACpB,IAAI,yBAAyB,EAAE,CAAC;YAC9B,SAAS,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;QAC3C,CAAC;QACD,IAAI,oBAAoB,EAAE,CAAC;YACzB,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;QACtC,CAAC;QACD,IAAI,iBAAiB,EAAE,CAAC;YACtB,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;YACjC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC7B,CAAC;QACD,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC,CAAA;IACD,OAAO,YAAY,uBAAuB,EAAE;;WAEnC,wBAAwB,EAAE;WAC1B,WAAW,cAAc,OAAO;EACzC,kBAAkB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,EAAE;;;;yBAIrC,cAAc;EACrC,SAAS;;EAET,UAAU,EAAE,CAAA;AACd,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=httpClientType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpClientType.d.ts","sourceRoot":"","sources":["../../../../src/template/api/type/httpClientType.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=httpClientType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpClientType.js","sourceRoot":"","sources":["../../../../src/template/api/type/httpClientType.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const axiosInstance: (noRefresh: boolean) => string;
2
+ //# sourceMappingURL=instance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../../src/template/axios/instance.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GACxB,WAAW,OAAO,WA0FmC,CAAA"}
@@ -0,0 +1,91 @@
1
+ export const axiosInstance = (noRefresh) => `import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from "axios"
2
+ import qs from "qs"
3
+
4
+ import { ENV } from "@/configs/env"
5
+ import { apiLogger } from "@/utils/logger/api-logger"
6
+ import styledConsole from "@/utils/logger/styled-console"
7
+ ${!noRefresh ? `import { tokenStorage } from "@/store/local/index"` : ""}
8
+ ${!noRefresh ? `import { refresh } from "./refresh"\n` : ""}
9
+ const isDev = ENV.NODE_ENV === "development"
10
+
11
+ export class HttpClient {
12
+ private instance: AxiosInstance
13
+
14
+ constructor(config?: AxiosRequestConfig) {
15
+ this.instance = axios.create({
16
+ baseURL: ENV.API_BASE_URL,
17
+ timeout: 5000,
18
+ headers: {
19
+ "Content-Type": "application/json",
20
+ },
21
+ ...config,
22
+ })
23
+ this.setupInterceptors()
24
+ }
25
+
26
+ private setupInterceptors() {
27
+ this.instance.interceptors.request.use(
28
+ (config) => {
29
+ ${noRefresh ? "// " : ""}const token = tokenStorage?.get()
30
+ ${noRefresh ? "// " : ""}const isAccess = !!token && !!token.access
31
+ ${noRefresh ? "// " : ""}if (isAccess) {
32
+ ${noRefresh ? "// " : ""} config.headers.setAuthorization(\`Bearer \${token.access}\`)
33
+ ${noRefresh ? "// " : ""}}
34
+ return config
35
+ },
36
+ (error) => {
37
+ return Promise.reject(error)
38
+ },
39
+ )
40
+
41
+ this.instance.interceptors.response.use(
42
+ (res) => {
43
+ const { status, config: reqData, data: resData } = res
44
+ if (isDev) apiLogger({ status, reqData, resData })
45
+ return res
46
+ },
47
+ async (error: AxiosError) => {
48
+ try {
49
+ const { response: res, config: reqData } = error || {}
50
+ const { status } = res || { status: 400 }
51
+ ${noRefresh ? "// " : ""}const isUnAuthError = status === 401
52
+ ${noRefresh ? "// " : ""}const isExpiredToken = status === 444
53
+
54
+ if (isDev) apiLogger({ status, reqData, resData: error, method: "error" })
55
+
56
+ ${noRefresh ? "// " : ""}if (isExpiredToken && reqData) {
57
+ ${noRefresh ? "// " : ""} const refreshedConfig = await refresh(reqData)
58
+ ${noRefresh ? "// " : ""} if (refreshedConfig) {
59
+ ${noRefresh ? "// " : ""} return this.instance.request(refreshedConfig)
60
+ ${noRefresh ? "// " : ""} }
61
+ ${noRefresh ? "// " : ""}}
62
+
63
+ ${noRefresh ? "// " : ""}if (isUnAuthError) {
64
+ ${noRefresh ? "// " : ""} tokenStorage?.remove()
65
+ ${noRefresh ? "// " : ""}}
66
+
67
+ return Promise.reject(error)
68
+ } catch (e) {
69
+ styledConsole({
70
+ method: "error",
71
+ topic: "UN_HANDLED",
72
+ title: "axios-interceptor",
73
+ data: e,
74
+ })
75
+ return Promise.reject(e)
76
+ }
77
+ },
78
+ )
79
+
80
+ this.instance.defaults.paramsSerializer = (params) => {
81
+ return qs.stringify(params, { arrayFormat: "repeat" })
82
+ }
83
+ }
84
+
85
+ public getInstance(): AxiosInstance {
86
+ return this.instance
87
+ }
88
+ }
89
+
90
+ export const instance = new HttpClient().getInstance()`;
91
+ //# sourceMappingURL=instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance.js","sourceRoot":"","sources":["../../../src/template/axios/instance.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,SAAkB,EAClB,EAAE,CAAC;;;;;;EAMH,CAAC,SAAS,CAAC,CAAC,CAAC,oDAAoD,CAAC,CAAC,CAAC,EAAE;EACtE,CAAC,SAAS,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;UAqBjD,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;UACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;UACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;UACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;UACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;YAkBpB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;;;YAItB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;YAEtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;uDAyBqB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const axiosRefresh: () => string;
2
+ //# sourceMappingURL=refresh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/template/axios/refresh.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,cA+EvB,CAAA"}
@@ -0,0 +1,81 @@
1
+ export const axiosRefresh = () => `import { ENV } from "@/configs/env"
2
+ import { tokenStorage } from "@/store/local/index"
3
+ import { TokenType } from "@/types/localStorageType"
4
+ import axios, { InternalAxiosRequestConfig } from "axios"
5
+
6
+ type RefreshSubscriber = (access: string | null) => void
7
+
8
+ let isTokenRefreshing = false
9
+ let refreshSubscribers: RefreshSubscriber[] = []
10
+
11
+ const onTokenRefreshed = (access: string) => {
12
+ refreshSubscribers.forEach((callback) => callback(access))
13
+ refreshSubscribers = []
14
+ }
15
+
16
+ const onTokenRefreshFailed = () => {
17
+ refreshSubscribers.forEach((callback) => callback(null))
18
+ refreshSubscribers = []
19
+ }
20
+
21
+ const refreshToken = async (): Promise<TokenType> => {
22
+ try {
23
+ const token = tokenStorage?.get()
24
+ if (!token?.refresh) {
25
+ throw new Error("Refresh token not found")
26
+ }
27
+
28
+ const { data: newToken } = await axios.post<TokenType>(\`\${ENV.API_BASE_URL}/v1/user/refresh/\`, {
29
+ refresh: token.refresh,
30
+ })
31
+
32
+ const updatedToken = { ...token, ...newToken }
33
+ tokenStorage?.set(updatedToken)
34
+
35
+ return newToken
36
+ } catch (err) {
37
+ tokenStorage?.remove()
38
+
39
+ if (typeof window !== "undefined") {
40
+ window.location.href = "/login"
41
+ }
42
+ throw err
43
+ }
44
+ }
45
+
46
+ export const refresh = async (
47
+ originalRequest?: InternalAxiosRequestConfig,
48
+ ): Promise<InternalAxiosRequestConfig | null> => {
49
+ if (!originalRequest) {
50
+ return null
51
+ }
52
+
53
+ return new Promise((resolve, reject) => {
54
+ refreshSubscribers.push((access: string | null) => {
55
+ if (access) {
56
+ if (originalRequest.headers) {
57
+ originalRequest.headers.set("Authorization", \`Bearer \${access}\`)
58
+ }
59
+ resolve(originalRequest)
60
+ } else {
61
+ reject(new Error("Refresh token failed and cleared"))
62
+ }
63
+ })
64
+
65
+ if (!isTokenRefreshing) {
66
+ isTokenRefreshing = true
67
+
68
+ refreshToken()
69
+ .then((token) => {
70
+ onTokenRefreshed(token.access)
71
+ })
72
+ .catch(() => {
73
+ onTokenRefreshFailed()
74
+ })
75
+ .finally(() => {
76
+ isTokenRefreshing = false
77
+ })
78
+ }
79
+ })
80
+ }`;
81
+ //# sourceMappingURL=refresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../../src/template/axios/refresh.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+EhC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const nextImageComponentString = "'use client';\n\nimport { ComponentProps, Ref, useState } from 'react';\n\nimport NextImage, { ImageProps as NextImageProps } from 'next/image';\n\ninterface ImageAsNextProps\n extends Omit<ComponentProps<'div'>, 'children' | 'onError' | 'onLoad'> {\n src: NextImageProps['src'];\n alt: NextImageProps['alt'];\n children?: React.ReactNode;\n loader?: NextImageProps['loader'];\n fill?: NextImageProps['fill'];\n preload?: NextImageProps['preload'];\n priority?: NextImageProps['priority'];\n loading?: NextImageProps['loading'];\n placeholder?: NextImageProps['placeholder'];\n blurDataURL?: NextImageProps['blurDataURL'];\n unoptimized?: NextImageProps['unoptimized'];\n sizes?: NextImageProps['sizes'];\n onLoad?: NextImageProps['onLoad'];\n onError?: NextImageProps['onError'];\n id?: string;\n isDisabledSkeleton?: boolean;\n isLoading?: boolean;\n imageClassName?: string;\n ref?: Ref<HTMLImageElement>;\n}\n\nconst ImageAsNext = ({\n src,\n alt,\n children,\n fill = true,\n loader,\n preload,\n priority = false,\n loading,\n placeholder,\n blurDataURL,\n unoptimized,\n sizes = '100vw',\n onLoad,\n onError,\n id,\n\n isLoading,\n isDisabledSkeleton,\n\n className = '',\n imageClassName = '',\n ref,\n ...props\n}: ImageAsNextProps) => {\n const [internalIsLoading, setInternalIsLoading] = useState(true);\n\n const isCurrentlyLoading =\n isLoading !== undefined ? isLoading : internalIsLoading;\n const showSkeleton = !isDisabledSkeleton && isCurrentlyLoading;\n\n return (\n <div\n className={`relative overflow-hidden object-contain ${\n showSkeleton ? 'animate-pulse bg-gray-200 dark:bg-gray-700' : ''\n } ${className}`}\n {...props}\n >\n <NextImage\n ref={ref}\n src={src}\n alt={alt}\n fill={fill}\n loader={loader}\n preload={preload}\n priority={priority}\n loading={loading}\n placeholder={placeholder}\n blurDataURL={blurDataURL}\n unoptimized={unoptimized}\n sizes={sizes}\n id={id}\n className={`transition-opacity object-fit duration-300 ${\n showSkeleton ? 'opacity-0' : 'opacity-100'\n } ${imageClassName}`}\n onLoad={(e) => {\n setInternalIsLoading(false);\n onLoad?.(e);\n }}\n onError={(e) => {\n setInternalIsLoading(false);\n onError?.(e);\n }}\n />\n\n {children && <div className=\"absolute inset-0\">{children}</div>}\n </div>\n );\n};\n\nexport default ImageAsNext;\n\n\n";
2
+ //# sourceMappingURL=imageAsNext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageAsNext.d.ts","sourceRoot":"","sources":["../../src/template/imageAsNext.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,uhFAsGpC,CAAA"}
@@ -0,0 +1,104 @@
1
+ export const nextImageComponentString = `'use client';
2
+
3
+ import { ComponentProps, Ref, useState } from 'react';
4
+
5
+ import NextImage, { ImageProps as NextImageProps } from 'next/image';
6
+
7
+ interface ImageAsNextProps
8
+ extends Omit<ComponentProps<'div'>, 'children' | 'onError' | 'onLoad'> {
9
+ src: NextImageProps['src'];
10
+ alt: NextImageProps['alt'];
11
+ children?: React.ReactNode;
12
+ loader?: NextImageProps['loader'];
13
+ fill?: NextImageProps['fill'];
14
+ preload?: NextImageProps['preload'];
15
+ priority?: NextImageProps['priority'];
16
+ loading?: NextImageProps['loading'];
17
+ placeholder?: NextImageProps['placeholder'];
18
+ blurDataURL?: NextImageProps['blurDataURL'];
19
+ unoptimized?: NextImageProps['unoptimized'];
20
+ sizes?: NextImageProps['sizes'];
21
+ onLoad?: NextImageProps['onLoad'];
22
+ onError?: NextImageProps['onError'];
23
+ id?: string;
24
+ isDisabledSkeleton?: boolean;
25
+ isLoading?: boolean;
26
+ imageClassName?: string;
27
+ ref?: Ref<HTMLImageElement>;
28
+ }
29
+
30
+ const ImageAsNext = ({
31
+ src,
32
+ alt,
33
+ children,
34
+ fill = true,
35
+ loader,
36
+ preload,
37
+ priority = false,
38
+ loading,
39
+ placeholder,
40
+ blurDataURL,
41
+ unoptimized,
42
+ sizes = '100vw',
43
+ onLoad,
44
+ onError,
45
+ id,
46
+
47
+ isLoading,
48
+ isDisabledSkeleton,
49
+
50
+ className = '',
51
+ imageClassName = '',
52
+ ref,
53
+ ...props
54
+ }: ImageAsNextProps) => {
55
+ const [internalIsLoading, setInternalIsLoading] = useState(true);
56
+
57
+ const isCurrentlyLoading =
58
+ isLoading !== undefined ? isLoading : internalIsLoading;
59
+ const showSkeleton = !isDisabledSkeleton && isCurrentlyLoading;
60
+
61
+ return (
62
+ <div
63
+ className={\`relative overflow-hidden object-contain \${
64
+ showSkeleton ? 'animate-pulse bg-gray-200 dark:bg-gray-700' : ''
65
+ } \${className}\`}
66
+ {...props}
67
+ >
68
+ <NextImage
69
+ ref={ref}
70
+ src={src}
71
+ alt={alt}
72
+ fill={fill}
73
+ loader={loader}
74
+ preload={preload}
75
+ priority={priority}
76
+ loading={loading}
77
+ placeholder={placeholder}
78
+ blurDataURL={blurDataURL}
79
+ unoptimized={unoptimized}
80
+ sizes={sizes}
81
+ id={id}
82
+ className={\`transition-opacity object-fit duration-300 \${
83
+ showSkeleton ? 'opacity-0' : 'opacity-100'
84
+ } \${imageClassName}\`}
85
+ onLoad={(e) => {
86
+ setInternalIsLoading(false);
87
+ onLoad?.(e);
88
+ }}
89
+ onError={(e) => {
90
+ setInternalIsLoading(false);
91
+ onError?.(e);
92
+ }}
93
+ />
94
+
95
+ {children && <div className="absolute inset-0">{children}</div>}
96
+ </div>
97
+ );
98
+ };
99
+
100
+ export default ImageAsNext;
101
+
102
+
103
+ `;
104
+ //# sourceMappingURL=imageAsNext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageAsNext.js","sourceRoot":"","sources":["../../src/template/imageAsNext.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsGvC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const LocalStorageManager = "export type Listener = () => void\n\nexport class LocalStorageManager<T> {\n private key: string\n public initialValue: T\n private listeners: Set<Listener> = new Set()\n\n constructor(key: string, initialValue: T) {\n this.key = key\n this.initialValue = initialValue\n }\n\n get(): T {\n if (typeof window === \"undefined\") return this.initialValue\n\n try {\n const item = window.localStorage.getItem(this.key)\n return item ? JSON.parse(item) : this.initialValue\n } catch (error) {\n console.warn(`[LocalStorage] Error reading key \"${this.key}\":`, error)\n return this.initialValue\n }\n }\n\n set = (value: T | ((val: T) => T)): void => {\n if (typeof window === \"undefined\") return\n\n try {\n const newValue = value instanceof Function ? value(this.get()) : value\n window.localStorage.setItem(this.key, JSON.stringify(newValue))\n this.notify()\n } catch (error) {\n console.error(`[LocalStorage] Error setting key \"${this.key}\":`, error)\n }\n }\n\n remove = (): void => {\n if (typeof window === \"undefined\") return\n window.localStorage.removeItem(this.key)\n this.notify()\n }\n\n subscribe = (listener: Listener): (() => void) => {\n this.listeners.add(listener)\n\n const handleStorageChange = (event: StorageEvent) => {\n if (event.key === this.key) {\n listener()\n }\n }\n\n window.addEventListener(\"storage\", handleStorageChange)\n\n return () => {\n this.listeners.delete(listener)\n window.removeEventListener(\"storage\", handleStorageChange)\n }\n }\n\n private notify() {\n this.listeners.forEach((listener) => listener())\n }\n}";
2
+ //# sourceMappingURL=LocalStorageManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalStorageManager.d.ts","sourceRoot":"","sources":["../../../src/template/localstorage/LocalStorageManager.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,+qDA8D9B,CAAA"}
@@ -0,0 +1,64 @@
1
+ export const LocalStorageManager = `export type Listener = () => void
2
+
3
+ export class LocalStorageManager<T> {
4
+ private key: string
5
+ public initialValue: T
6
+ private listeners: Set<Listener> = new Set()
7
+
8
+ constructor(key: string, initialValue: T) {
9
+ this.key = key
10
+ this.initialValue = initialValue
11
+ }
12
+
13
+ get(): T {
14
+ if (typeof window === "undefined") return this.initialValue
15
+
16
+ try {
17
+ const item = window.localStorage.getItem(this.key)
18
+ return item ? JSON.parse(item) : this.initialValue
19
+ } catch (error) {
20
+ console.warn(\`[LocalStorage] Error reading key "\${this.key}":\`, error)
21
+ return this.initialValue
22
+ }
23
+ }
24
+
25
+ set = (value: T | ((val: T) => T)): void => {
26
+ if (typeof window === "undefined") return
27
+
28
+ try {
29
+ const newValue = value instanceof Function ? value(this.get()) : value
30
+ window.localStorage.setItem(this.key, JSON.stringify(newValue))
31
+ this.notify()
32
+ } catch (error) {
33
+ console.error(\`[LocalStorage] Error setting key "\${this.key}":\`, error)
34
+ }
35
+ }
36
+
37
+ remove = (): void => {
38
+ if (typeof window === "undefined") return
39
+ window.localStorage.removeItem(this.key)
40
+ this.notify()
41
+ }
42
+
43
+ subscribe = (listener: Listener): (() => void) => {
44
+ this.listeners.add(listener)
45
+
46
+ const handleStorageChange = (event: StorageEvent) => {
47
+ if (event.key === this.key) {
48
+ listener()
49
+ }
50
+ }
51
+
52
+ window.addEventListener("storage", handleStorageChange)
53
+
54
+ return () => {
55
+ this.listeners.delete(listener)
56
+ window.removeEventListener("storage", handleStorageChange)
57
+ }
58
+ }
59
+
60
+ private notify() {
61
+ this.listeners.forEach((listener) => listener())
62
+ }
63
+ }`;
64
+ //# sourceMappingURL=LocalStorageManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalStorageManager.js","sourceRoot":"","sources":["../../../src/template/localstorage/LocalStorageManager.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8DjC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const localStorage = "import { TokenType } from \"@/types/localStorageType\"\nimport { LocalStorageManager } from \"@/utils/storage/LocalStorageManager\"\n\nexport const tokenStorage = new LocalStorageManager<TokenType>(\"token\", {\n access: \"\",\n refresh: \"\",\n hash: \"\",\n})";
2
+ //# sourceMappingURL=localStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localStorage.d.ts","sourceRoot":"","sources":["../../../src/template/localstorage/localStorage.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,6QAOtB,CAAA"}
@@ -0,0 +1,9 @@
1
+ export const localStorage = `import { TokenType } from "@/types/localStorageType"
2
+ import { LocalStorageManager } from "@/utils/storage/LocalStorageManager"
3
+
4
+ export const tokenStorage = new LocalStorageManager<TokenType>("token", {
5
+ access: "",
6
+ refresh: "",
7
+ hash: "",
8
+ })`;
9
+ //# sourceMappingURL=localStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localStorage.js","sourceRoot":"","sources":["../../../src/template/localstorage/localStorage.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;GAOzB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const localStorageType = "export type TokenType = {\n access: string\n refresh: string\n hash: string\n}";
2
+ //# sourceMappingURL=localStorageType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localStorageType.d.ts","sourceRoot":"","sources":["../../../src/template/localstorage/localStorageType.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,sFAI3B,CAAA"}
@@ -0,0 +1,6 @@
1
+ export const localStorageType = `export type TokenType = {
2
+ access: string
3
+ refresh: string
4
+ hash: string
5
+ }`;
6
+ //# sourceMappingURL=localStorageType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localStorageType.js","sourceRoot":"","sources":["../../../src/template/localstorage/localStorageType.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;EAI9B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const useSharedStorage = "import { useCallback, useEffect, useState, useSyncExternalStore } from \"react\"\nimport { LocalStorageManager } from \"@/utils/storage/LocalStorageManager\"\n\nexport function useSharedStorage<T>(manager: LocalStorageManager<T>) {\n const storeValue = useSyncExternalStore(\n manager.subscribe,\n () => manager.get(),\n () => manager.initialValue,\n )\n\n const [isMounted, setIsMounted] = useState(false)\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n const value = isMounted ? storeValue : manager.initialValue\n\n const setValue = useCallback((val: T | ((prev: T) => T)) => manager.set(val), [manager])\n const removeValue = useCallback(() => manager.remove(), [manager])\n\n return [value, setValue, removeValue] as const\n}";
2
+ //# sourceMappingURL=useSharedStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSharedStorage.d.ts","sourceRoot":"","sources":["../../../src/template/localstorage/useSharedStorage.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,4vBAsB3B,CAAA"}