@geekmidas/cli 0.5.1 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/README.md +7 -7
  2. package/dist/{CronGenerator-BPTqNYOR.d.cts → CronGenerator-DWS3CCZt.d.cts} +4 -4
  3. package/dist/{CronGenerator-YAj59JUd.d.mts → CronGenerator-DZjdkEjI.d.mts} +4 -4
  4. package/dist/{EndpointGenerator-ChAD1INz.d.cts → EndpointGenerator-Dh7kMtuL.d.mts} +4 -4
  5. package/dist/{EndpointGenerator-Cj3O1U8-.d.mts → EndpointGenerator-zBsie_7s.d.cts} +4 -4
  6. package/dist/{FunctionGenerator-429-9NER.d.cts → FunctionGenerator-BmDHo27U.d.mts} +4 -4
  7. package/dist/{FunctionGenerator-BQ4ehoID.d.mts → FunctionGenerator-DXjXBxUd.d.cts} +4 -4
  8. package/dist/{Generator-BjHK_qce.d.mts → Generator-BGY-2dgI.d.cts} +3 -3
  9. package/dist/{Generator-DxQMCQp7.d.cts → Generator-yi9DH5TN.d.mts} +3 -3
  10. package/dist/{OpenApiTsGenerator-C4mHHaku.mjs → OpenApiTsGenerator-BVS4pOH7.mjs} +2 -2
  11. package/dist/{OpenApiTsGenerator-C4mHHaku.mjs.map → OpenApiTsGenerator-BVS4pOH7.mjs.map} +1 -1
  12. package/dist/{OpenApiTsGenerator-Be-sKGTT.cjs → OpenApiTsGenerator-gPIIyppX.cjs} +2 -2
  13. package/dist/{OpenApiTsGenerator-Be-sKGTT.cjs.map → OpenApiTsGenerator-gPIIyppX.cjs.map} +1 -1
  14. package/dist/{SubscriberGenerator-7uX42xyG.d.mts → SubscriberGenerator-Bb-z3Kvx.d.cts} +4 -4
  15. package/dist/{SubscriberGenerator-Dtb3HS4i.d.cts → SubscriberGenerator-CwsXqCpS.d.mts} +4 -4
  16. package/dist/{api-BKIN0s0S.mjs → api-Bp5TIl1R.mjs} +29 -46
  17. package/dist/api-Bp5TIl1R.mjs.map +1 -0
  18. package/dist/{api-B3SCEHPf.cjs → api-D4W9-tdZ.cjs} +29 -46
  19. package/dist/api-D4W9-tdZ.cjs.map +1 -0
  20. package/dist/build/index.cjs +5 -3
  21. package/dist/build/index.d.cts +1 -1
  22. package/dist/build/index.d.mts +1 -1
  23. package/dist/build/index.mjs +5 -3
  24. package/dist/build/manifests.cjs +1 -1
  25. package/dist/build/manifests.d.cts +1 -1
  26. package/dist/build/manifests.d.mts +1 -1
  27. package/dist/build/manifests.mjs +1 -1
  28. package/dist/build/providerResolver.d.cts +1 -1
  29. package/dist/build/providerResolver.d.mts +1 -1
  30. package/dist/build/types.d.cts +2 -2
  31. package/dist/build/types.d.mts +2 -2
  32. package/dist/{build-B8C_qHir.mjs → build-Cu6Mi0Lf.mjs} +3 -3
  33. package/dist/{build-B8C_qHir.mjs.map → build-Cu6Mi0Lf.mjs.map} +1 -1
  34. package/dist/{build-D0Wr49bf.cjs → build-wmt8ZcmA.cjs} +3 -3
  35. package/dist/{build-D0Wr49bf.cjs.map → build-wmt8ZcmA.cjs.map} +1 -1
  36. package/dist/{config-CLEDqKO3.cjs → config-BP1IZynR.cjs} +17 -6
  37. package/dist/config-BP1IZynR.cjs.map +1 -0
  38. package/dist/{config-Ba-Gbpbc.d.cts → config-CIzRhm_D.d.mts} +2 -2
  39. package/dist/{config-DBsmMDhf.d.mts → config-CvehIYsb.d.cts} +2 -2
  40. package/dist/{config-Dp8RonV_.mjs → config-UCK12Lrr.mjs} +17 -6
  41. package/dist/config-UCK12Lrr.mjs.map +1 -0
  42. package/dist/config.d.cts +1 -1
  43. package/dist/config.d.mts +1 -1
  44. package/dist/dev/index.cjs +3 -1
  45. package/dist/dev/index.d.cts +2 -2
  46. package/dist/dev/index.d.mts +2 -2
  47. package/dist/dev/index.mjs +3 -1
  48. package/dist/{dev-B734w3L1.mjs → dev-BBPWSllq.mjs} +6 -1
  49. package/dist/dev-BBPWSllq.mjs.map +1 -0
  50. package/dist/{dev-DHqYn8k4.cjs → dev-C2lCgE53.cjs} +6 -1
  51. package/dist/dev-C2lCgE53.cjs.map +1 -0
  52. package/dist/{docker-5d8Yh5_X.cjs → docker-2-ipZDOJ.cjs} +1 -1
  53. package/dist/{docker-5d8Yh5_X.cjs.map → docker-2-ipZDOJ.cjs.map} +1 -1
  54. package/dist/{docker-DlUqdFle.mjs → docker-31GNwU3F.mjs} +1 -1
  55. package/dist/{docker-DlUqdFle.mjs.map → docker-31GNwU3F.mjs.map} +1 -1
  56. package/dist/{env-HfuJRlg5.d.cts → env-CQ3hXAAW.d.mts} +2 -2
  57. package/dist/{env-B-OKjgI4.cjs → env-CS0jvg7k.cjs} +1 -1
  58. package/dist/{env-B-OKjgI4.cjs.map → env-CS0jvg7k.cjs.map} +1 -1
  59. package/dist/{env-nd-iQPYM.d.mts → env-D4YFgMqo.d.cts} +2 -2
  60. package/dist/{env-tv1HlZlw.mjs → env-DEeVOvVu.mjs} +1 -1
  61. package/dist/{env-tv1HlZlw.mjs.map → env-DEeVOvVu.mjs.map} +1 -1
  62. package/dist/generators/CronGenerator.d.cts +4 -4
  63. package/dist/generators/CronGenerator.d.mts +4 -4
  64. package/dist/generators/EndpointGenerator.d.cts +4 -4
  65. package/dist/generators/EndpointGenerator.d.mts +4 -4
  66. package/dist/generators/FunctionGenerator.d.cts +4 -4
  67. package/dist/generators/FunctionGenerator.d.mts +4 -4
  68. package/dist/generators/Generator.d.cts +3 -3
  69. package/dist/generators/Generator.d.mts +3 -3
  70. package/dist/generators/OpenApiTsGenerator.cjs +1 -1
  71. package/dist/generators/OpenApiTsGenerator.mjs +1 -1
  72. package/dist/generators/SubscriberGenerator.d.cts +4 -4
  73. package/dist/generators/SubscriberGenerator.d.mts +4 -4
  74. package/dist/generators/index.d.cts +7 -7
  75. package/dist/generators/index.d.mts +7 -7
  76. package/dist/{index-C523No_B.d.mts → index-DG6xNQMH.d.cts} +25 -8
  77. package/dist/{index-DrzN4xkQ.d.cts → index-DZgrOOOW.d.mts} +25 -8
  78. package/dist/index.cjs +21 -21
  79. package/dist/index.cjs.map +1 -1
  80. package/dist/index.mjs +21 -21
  81. package/dist/index.mjs.map +1 -1
  82. package/dist/init/generators/config.cjs +1 -1
  83. package/dist/init/generators/config.d.cts +2 -2
  84. package/dist/init/generators/config.d.mts +2 -2
  85. package/dist/init/generators/config.mjs +1 -1
  86. package/dist/init/generators/docker.cjs +1 -1
  87. package/dist/init/generators/docker.d.cts +1 -1
  88. package/dist/init/generators/docker.d.mts +1 -1
  89. package/dist/init/generators/docker.mjs +1 -1
  90. package/dist/init/generators/env.cjs +1 -1
  91. package/dist/init/generators/env.d.cts +2 -2
  92. package/dist/init/generators/env.d.mts +2 -2
  93. package/dist/init/generators/env.mjs +1 -1
  94. package/dist/init/generators/index.cjs +9 -4
  95. package/dist/init/generators/index.d.cts +5 -5
  96. package/dist/init/generators/index.d.mts +5 -5
  97. package/dist/init/generators/index.mjs +9 -4
  98. package/dist/init/generators/models.cjs +1 -1
  99. package/dist/init/generators/models.d.cts +1 -1
  100. package/dist/init/generators/models.d.mts +1 -1
  101. package/dist/init/generators/models.mjs +1 -1
  102. package/dist/init/generators/monorepo.cjs +1 -1
  103. package/dist/init/generators/monorepo.d.cts +1 -1
  104. package/dist/init/generators/monorepo.d.mts +1 -1
  105. package/dist/init/generators/monorepo.mjs +1 -1
  106. package/dist/init/generators/package.cjs +6 -1
  107. package/dist/init/generators/package.d.cts +2 -2
  108. package/dist/init/generators/package.d.mts +2 -2
  109. package/dist/init/generators/package.mjs +6 -1
  110. package/dist/init/generators/source.cjs +1 -1
  111. package/dist/init/generators/source.d.cts +2 -2
  112. package/dist/init/generators/source.d.mts +2 -2
  113. package/dist/init/generators/source.mjs +1 -1
  114. package/dist/init/index.cjs +14 -14
  115. package/dist/init/index.d.cts +1 -1
  116. package/dist/init/index.d.mts +1 -1
  117. package/dist/init/index.mjs +14 -14
  118. package/dist/init/templates/api.cjs +1 -1
  119. package/dist/init/templates/api.d.cts +1 -1
  120. package/dist/init/templates/api.d.mts +1 -1
  121. package/dist/init/templates/api.mjs +1 -1
  122. package/dist/init/templates/index.cjs +8 -6
  123. package/dist/init/templates/index.d.cts +2 -2
  124. package/dist/init/templates/index.d.mts +2 -2
  125. package/dist/init/templates/index.mjs +6 -6
  126. package/dist/init/templates/minimal.cjs +1 -1
  127. package/dist/init/templates/minimal.d.cts +1 -1
  128. package/dist/init/templates/minimal.d.mts +1 -1
  129. package/dist/init/templates/minimal.mjs +1 -1
  130. package/dist/init/templates/serverless.cjs +1 -1
  131. package/dist/init/templates/serverless.d.cts +1 -1
  132. package/dist/init/templates/serverless.d.mts +1 -1
  133. package/dist/init/templates/serverless.mjs +1 -1
  134. package/dist/init/templates/worker.cjs +1 -1
  135. package/dist/init/templates/worker.d.cts +1 -1
  136. package/dist/init/templates/worker.d.mts +1 -1
  137. package/dist/init/templates/worker.mjs +1 -1
  138. package/dist/init/utils.cjs +1 -1
  139. package/dist/init/utils.mjs +1 -1
  140. package/dist/{init-CtOnZn3G.mjs → init-BMA7xi8r.mjs} +37 -21
  141. package/dist/init-BMA7xi8r.mjs.map +1 -0
  142. package/dist/{init-qLFsWR-R.cjs → init-D-7WEk-b.cjs} +37 -21
  143. package/dist/init-D-7WEk-b.cjs.map +1 -0
  144. package/dist/{manifests-DIA_2QYd.mjs → manifests-BNKG6AXf.mjs} +1 -1
  145. package/dist/{manifests-DIA_2QYd.mjs.map → manifests-BNKG6AXf.mjs.map} +1 -1
  146. package/dist/{manifests-VJ9-2JpW.cjs → manifests-D13Ej8AE.cjs} +1 -1
  147. package/dist/{manifests-VJ9-2JpW.cjs.map → manifests-D13Ej8AE.cjs.map} +1 -1
  148. package/dist/{minimal-C4GsE45s.mjs → minimal-BkyASH_C.mjs} +15 -9
  149. package/dist/minimal-BkyASH_C.mjs.map +1 -0
  150. package/dist/{minimal-Bdhhpp7v.cjs → minimal-CSFggzdH.cjs} +15 -9
  151. package/dist/minimal-CSFggzdH.cjs.map +1 -0
  152. package/dist/{models-cvNg6Oea.mjs → models-BWlDfviw.mjs} +1 -1
  153. package/dist/{models-cvNg6Oea.mjs.map → models-BWlDfviw.mjs.map} +1 -1
  154. package/dist/{models-DyNwdOcz.cjs → models-BapGSoHC.cjs} +1 -1
  155. package/dist/{models-DyNwdOcz.cjs.map → models-BapGSoHC.cjs.map} +1 -1
  156. package/dist/{monorepo-Cknwzj5C.mjs → monorepo-BBOWhkcd.mjs} +1 -1
  157. package/dist/{monorepo-Cknwzj5C.mjs.map → monorepo-BBOWhkcd.mjs.map} +1 -1
  158. package/dist/{monorepo-sEK8gW59.cjs → monorepo-CFtxHeDh.cjs} +1 -1
  159. package/dist/{monorepo-sEK8gW59.cjs.map → monorepo-CFtxHeDh.cjs.map} +1 -1
  160. package/dist/openapi-DA9RkPJl.mjs +74 -0
  161. package/dist/openapi-DA9RkPJl.mjs.map +1 -0
  162. package/dist/openapi-DZH6RQHk.cjs +98 -0
  163. package/dist/openapi-DZH6RQHk.cjs.map +1 -0
  164. package/dist/{openapi-react-query-DxHjXQvg.cjs → openapi-react-query-Cp-w8_05.cjs} +1 -1
  165. package/dist/{openapi-react-query-DxHjXQvg.cjs.map → openapi-react-query-Cp-w8_05.cjs.map} +1 -1
  166. package/dist/{openapi-react-query-o7Mp1Jd5.mjs → openapi-react-query-_-B3s8v_.mjs} +1 -1
  167. package/dist/{openapi-react-query-o7Mp1Jd5.mjs.map → openapi-react-query-_-B3s8v_.mjs.map} +1 -1
  168. package/dist/openapi-react-query.cjs +1 -1
  169. package/dist/openapi-react-query.mjs +1 -1
  170. package/dist/openapi.cjs +6 -3
  171. package/dist/openapi.d.cts +23 -3
  172. package/dist/openapi.d.mts +23 -3
  173. package/dist/openapi.mjs +3 -3
  174. package/dist/{package-C7WhWU8m.d.mts → package-6h-7QfJZ.d.cts} +2 -2
  175. package/dist/{package-DvWEMz6z.d.cts → package-BCe_KvGv.d.mts} +2 -2
  176. package/dist/{package-CIfmeuSW.mjs → package-C3If80n1.mjs} +7 -1
  177. package/dist/package-C3If80n1.mjs.map +1 -0
  178. package/dist/{package-PP-o1nvq.cjs → package-Dk8IMBOB.cjs} +6 -1
  179. package/dist/package-Dk8IMBOB.cjs.map +1 -0
  180. package/dist/{serverless-Yav3GRVz.cjs → serverless-AGOS-l3G.cjs} +15 -10
  181. package/dist/serverless-AGOS-l3G.cjs.map +1 -0
  182. package/dist/{serverless-DkHBF2vC.mjs → serverless-D5HjJByU.mjs} +15 -10
  183. package/dist/serverless-D5HjJByU.mjs.map +1 -0
  184. package/dist/{source-DT5Xhiob.cjs → source-C1cyfHcF.cjs} +1 -1
  185. package/dist/{source-DT5Xhiob.cjs.map → source-C1cyfHcF.cjs.map} +1 -1
  186. package/dist/{source-D6v2BnKT.d.mts → source-C3LiNUV9.d.mts} +2 -2
  187. package/dist/{source-DnaH_MLA.mjs → source-CkQHBpwu.mjs} +1 -1
  188. package/dist/{source-DnaH_MLA.mjs.map → source-CkQHBpwu.mjs.map} +1 -1
  189. package/dist/{source-D8fK9qRo.d.cts → source-Dtcjbokc.d.cts} +2 -2
  190. package/dist/templates-C0EMmhwb.mjs +88 -0
  191. package/dist/templates-C0EMmhwb.mjs.map +1 -0
  192. package/dist/templates-CbgQ9dw0.cjs +123 -0
  193. package/dist/templates-CbgQ9dw0.cjs.map +1 -0
  194. package/dist/{types-Cxl8-uwV.d.mts → types-Bi7VzDUZ.d.mts} +31 -2
  195. package/dist/{types-C4KITv-y.d.mts → types-D2xYkOal.d.mts} +2 -2
  196. package/dist/{types-DLFN49M3.d.cts → types-DA-r8HWZ.d.cts} +2 -2
  197. package/dist/{types-DB99_qIy.d.cts → types-KmjzMgu8.d.cts} +31 -2
  198. package/dist/types.d.cts +2 -2
  199. package/dist/types.d.mts +2 -2
  200. package/dist/{utils-C31-SWHP.mjs → utils-CKEzCxc1.mjs} +1 -1
  201. package/dist/{utils-C31-SWHP.mjs.map → utils-CKEzCxc1.mjs.map} +1 -1
  202. package/dist/{utils-BX3F4fT8.cjs → utils-DSdN2MTt.cjs} +1 -1
  203. package/dist/{utils-BX3F4fT8.cjs.map → utils-DSdN2MTt.cjs.map} +1 -1
  204. package/dist/{worker--8O5a3Hv.cjs → worker-CGhlqNH-.cjs} +15 -9
  205. package/dist/worker-CGhlqNH-.cjs.map +1 -0
  206. package/dist/{worker-Jme7uOOJ.mjs → worker-CiP420As.mjs} +15 -9
  207. package/dist/worker-CiP420As.mjs.map +1 -0
  208. package/examples/gkm.config.ts +3 -5
  209. package/package.json +4 -4
  210. package/src/__tests__/openapi.spec.ts +395 -302
  211. package/src/dev/__tests__/index.spec.ts +6 -3
  212. package/src/dev/index.ts +18 -0
  213. package/src/generators/OpenApiTsGenerator.ts +1 -1
  214. package/src/init/generators/config.ts +23 -5
  215. package/src/init/generators/package.ts +11 -4
  216. package/src/init/index.ts +26 -7
  217. package/src/init/templates/api.ts +38 -56
  218. package/src/init/templates/index.ts +46 -11
  219. package/src/init/templates/minimal.ts +23 -10
  220. package/src/init/templates/serverless.ts +23 -11
  221. package/src/init/templates/worker.ts +23 -10
  222. package/src/openapi.ts +83 -45
  223. package/src/types.ts +30 -0
  224. package/dist/api-B3SCEHPf.cjs.map +0 -1
  225. package/dist/api-BKIN0s0S.mjs.map +0 -1
  226. package/dist/config-CLEDqKO3.cjs.map +0 -1
  227. package/dist/config-Dp8RonV_.mjs.map +0 -1
  228. package/dist/dev-B734w3L1.mjs.map +0 -1
  229. package/dist/dev-DHqYn8k4.cjs.map +0 -1
  230. package/dist/init-CtOnZn3G.mjs.map +0 -1
  231. package/dist/init-qLFsWR-R.cjs.map +0 -1
  232. package/dist/minimal-Bdhhpp7v.cjs.map +0 -1
  233. package/dist/minimal-C4GsE45s.mjs.map +0 -1
  234. package/dist/openapi-BQWPWyNB.cjs +0 -56
  235. package/dist/openapi-BQWPWyNB.cjs.map +0 -1
  236. package/dist/openapi-DBX8cJJ8.mjs +0 -50
  237. package/dist/openapi-DBX8cJJ8.mjs.map +0 -1
  238. package/dist/package-CIfmeuSW.mjs.map +0 -1
  239. package/dist/package-PP-o1nvq.cjs.map +0 -1
  240. package/dist/serverless-DkHBF2vC.mjs.map +0 -1
  241. package/dist/serverless-Yav3GRVz.cjs.map +0 -1
  242. package/dist/templates-CBFUwpBy.mjs +0 -64
  243. package/dist/templates-CBFUwpBy.mjs.map +0 -1
  244. package/dist/templates-DM_rtYYW.cjs +0 -87
  245. package/dist/templates-DM_rtYYW.cjs.map +0 -1
  246. package/dist/worker--8O5a3Hv.cjs.map +0 -1
  247. package/dist/worker-Jme7uOOJ.mjs.map +0 -1
@@ -29,6 +29,18 @@ const minimalTemplate = {
29
29
  "fmt:check": "biome format ."
30
30
  },
31
31
  files: (options) => {
32
+ const { loggerType, routesStructure } = options;
33
+ const loggerContent = `import { createLogger } from '@geekmidas/logger/${loggerType}';
34
+
35
+ export const logger = createLogger();
36
+ `;
37
+ const getRoutePath = (file) => {
38
+ switch (routesStructure) {
39
+ case "centralized-endpoints": return `src/endpoints/${file}`;
40
+ case "centralized-routes": return `src/routes/${file}`;
41
+ case "domain-based": return `src/${file.replace(".ts", "")}/routes/index.ts`;
42
+ }
43
+ };
32
44
  const files = [
33
45
  {
34
46
  path: "src/config/env.ts",
@@ -46,16 +58,10 @@ export const config = envParser
46
58
  },
47
59
  {
48
60
  path: "src/config/logger.ts",
49
- content: `import { PinoLogger } from '@geekmidas/logger/pino';
50
-
51
- export const logger = new PinoLogger({
52
- app: '${options.name}',
53
- level: process.env.LOG_LEVEL || 'info',
54
- });
55
- `
61
+ content: loggerContent
56
62
  },
57
63
  {
58
- path: "src/endpoints/health.ts",
64
+ path: getRoutePath("health.ts"),
59
65
  content: `import { e } from '@geekmidas/constructs/endpoints';
60
66
 
61
67
  export default e
@@ -84,4 +90,4 @@ export const telescope = new Telescope({
84
90
 
85
91
  //#endregion
86
92
  export { minimalTemplate };
87
- //# sourceMappingURL=minimal-C4GsE45s.mjs.map
93
+ //# sourceMappingURL=minimal-BkyASH_C.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimal-BkyASH_C.mjs","names":["minimalTemplate: TemplateConfig","options: TemplateOptions","file: string","files: GeneratedFile[]"],"sources":["../src/init/templates/minimal.ts"],"sourcesContent":["import type {\n GeneratedFile,\n TemplateConfig,\n TemplateOptions,\n} from './index.js';\n\nexport const minimalTemplate: TemplateConfig = {\n name: 'minimal',\n description: 'Basic health endpoint',\n\n dependencies: {\n '@geekmidas/constructs': 'workspace:*',\n '@geekmidas/envkit': 'workspace:*',\n '@geekmidas/logger': 'workspace:*',\n hono: '~4.8.2',\n pino: '~9.6.0',\n },\n\n devDependencies: {\n '@biomejs/biome': '~1.9.4',\n '@geekmidas/cli': 'workspace:*',\n '@types/node': '~22.0.0',\n tsx: '~4.20.0',\n turbo: '~2.3.0',\n typescript: '~5.8.2',\n vitest: '~4.0.0',\n },\n\n scripts: {\n dev: 'gkm dev',\n build: 'gkm build',\n test: 'vitest',\n 'test:once': 'vitest run',\n typecheck: 'tsc --noEmit',\n lint: 'biome lint .',\n fmt: 'biome format . --write',\n 'fmt:check': 'biome format .',\n },\n\n files: (options: TemplateOptions): GeneratedFile[] => {\n const { loggerType, routesStructure } = options;\n\n const loggerContent = `import { createLogger } from '@geekmidas/logger/${loggerType}';\n\nexport const logger = createLogger();\n`;\n\n // Get route path based on structure\n const getRoutePath = (file: string) => {\n switch (routesStructure) {\n case 'centralized-endpoints':\n return `src/endpoints/${file}`;\n case 'centralized-routes':\n return `src/routes/${file}`;\n case 'domain-based':\n return `src/${file.replace('.ts', '')}/routes/index.ts`;\n }\n };\n\n const files: GeneratedFile[] = [\n // src/config/env.ts\n {\n path: 'src/config/env.ts',\n content: `import { EnvironmentParser } from '@geekmidas/envkit';\n\nexport const envParser = new EnvironmentParser(process.env);\n\nexport const config = envParser\n .create((get) => ({\n port: get('PORT').string().transform(Number).default(3000),\n nodeEnv: get('NODE_ENV').string().default('development'),\n }))\n .parse();\n`,\n },\n\n // src/config/logger.ts\n {\n path: 'src/config/logger.ts',\n content: loggerContent,\n },\n\n // health endpoint\n {\n path: getRoutePath('health.ts'),\n content: `import { e } from '@geekmidas/constructs/endpoints';\n\nexport default e\n .get('/health')\n .handle(async () => ({\n status: 'ok',\n timestamp: new Date().toISOString(),\n }));\n`,\n },\n ];\n\n // Add Telescope config if enabled\n if (options.telescope) {\n files.push({\n path: 'src/config/telescope.ts',\n content: `import { Telescope } from '@geekmidas/telescope';\nimport { InMemoryStorage } from '@geekmidas/telescope/storage/memory';\n\nexport const telescope = new Telescope({\n storage: new InMemoryStorage({ maxEntries: 100 }),\n enabled: process.env.NODE_ENV === 'development',\n});\n`,\n });\n }\n\n return files;\n },\n};\n"],"mappings":";AAMA,MAAaA,kBAAkC;CAC7C,MAAM;CACN,aAAa;CAEb,cAAc;EACZ,yBAAyB;EACzB,qBAAqB;EACrB,qBAAqB;EACrB,MAAM;EACN,MAAM;CACP;CAED,iBAAiB;EACf,kBAAkB;EAClB,kBAAkB;EAClB,eAAe;EACf,KAAK;EACL,OAAO;EACP,YAAY;EACZ,QAAQ;CACT;CAED,SAAS;EACP,KAAK;EACL,OAAO;EACP,MAAM;EACN,aAAa;EACb,WAAW;EACX,MAAM;EACN,KAAK;EACL,aAAa;CACd;CAED,OAAO,CAACC,YAA8C;EACpD,MAAM,EAAE,YAAY,iBAAiB,GAAG;EAExC,MAAM,iBAAiB,kDAAkD,WAAW;;;;EAMpF,MAAM,eAAe,CAACC,SAAiB;AACrC,WAAQ,iBAAR;IACE,KAAK,wBACH,SAAQ,gBAAgB,KAAK;IAC/B,KAAK,qBACH,SAAQ,aAAa,KAAK;IAC5B,KAAK,eACH,SAAQ,MAAM,KAAK,QAAQ,OAAO,GAAG,CAAC;GACzC;EACF;EAED,MAAMC,QAAyB;GAE7B;IACE,MAAM;IACN,UAAU;;;;;;;;;;;GAWX;GAGD;IACE,MAAM;IACN,SAAS;GACV;GAGD;IACE,MAAM,aAAa,YAAY;IAC/B,UAAU;;;;;;;;;GASX;EACF;AAGD,MAAI,QAAQ,UACV,OAAM,KAAK;GACT,MAAM;GACN,UAAU;;;;;;;;EAQX,EAAC;AAGJ,SAAO;CACR;AACF"}
@@ -30,6 +30,18 @@ const minimalTemplate = {
30
30
  "fmt:check": "biome format ."
31
31
  },
32
32
  files: (options) => {
33
+ const { loggerType, routesStructure } = options;
34
+ const loggerContent = `import { createLogger } from '@geekmidas/logger/${loggerType}';
35
+
36
+ export const logger = createLogger();
37
+ `;
38
+ const getRoutePath = (file) => {
39
+ switch (routesStructure) {
40
+ case "centralized-endpoints": return `src/endpoints/${file}`;
41
+ case "centralized-routes": return `src/routes/${file}`;
42
+ case "domain-based": return `src/${file.replace(".ts", "")}/routes/index.ts`;
43
+ }
44
+ };
33
45
  const files = [
34
46
  {
35
47
  path: "src/config/env.ts",
@@ -47,16 +59,10 @@ export const config = envParser
47
59
  },
48
60
  {
49
61
  path: "src/config/logger.ts",
50
- content: `import { PinoLogger } from '@geekmidas/logger/pino';
51
-
52
- export const logger = new PinoLogger({
53
- app: '${options.name}',
54
- level: process.env.LOG_LEVEL || 'info',
55
- });
56
- `
62
+ content: loggerContent
57
63
  },
58
64
  {
59
- path: "src/endpoints/health.ts",
65
+ path: getRoutePath("health.ts"),
60
66
  content: `import { e } from '@geekmidas/constructs/endpoints';
61
67
 
62
68
  export default e
@@ -90,4 +96,4 @@ Object.defineProperty(exports, 'minimalTemplate', {
90
96
  return minimalTemplate;
91
97
  }
92
98
  });
93
- //# sourceMappingURL=minimal-Bdhhpp7v.cjs.map
99
+ //# sourceMappingURL=minimal-CSFggzdH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimal-CSFggzdH.cjs","names":["minimalTemplate: TemplateConfig","options: TemplateOptions","file: string","files: GeneratedFile[]"],"sources":["../src/init/templates/minimal.ts"],"sourcesContent":["import type {\n GeneratedFile,\n TemplateConfig,\n TemplateOptions,\n} from './index.js';\n\nexport const minimalTemplate: TemplateConfig = {\n name: 'minimal',\n description: 'Basic health endpoint',\n\n dependencies: {\n '@geekmidas/constructs': 'workspace:*',\n '@geekmidas/envkit': 'workspace:*',\n '@geekmidas/logger': 'workspace:*',\n hono: '~4.8.2',\n pino: '~9.6.0',\n },\n\n devDependencies: {\n '@biomejs/biome': '~1.9.4',\n '@geekmidas/cli': 'workspace:*',\n '@types/node': '~22.0.0',\n tsx: '~4.20.0',\n turbo: '~2.3.0',\n typescript: '~5.8.2',\n vitest: '~4.0.0',\n },\n\n scripts: {\n dev: 'gkm dev',\n build: 'gkm build',\n test: 'vitest',\n 'test:once': 'vitest run',\n typecheck: 'tsc --noEmit',\n lint: 'biome lint .',\n fmt: 'biome format . --write',\n 'fmt:check': 'biome format .',\n },\n\n files: (options: TemplateOptions): GeneratedFile[] => {\n const { loggerType, routesStructure } = options;\n\n const loggerContent = `import { createLogger } from '@geekmidas/logger/${loggerType}';\n\nexport const logger = createLogger();\n`;\n\n // Get route path based on structure\n const getRoutePath = (file: string) => {\n switch (routesStructure) {\n case 'centralized-endpoints':\n return `src/endpoints/${file}`;\n case 'centralized-routes':\n return `src/routes/${file}`;\n case 'domain-based':\n return `src/${file.replace('.ts', '')}/routes/index.ts`;\n }\n };\n\n const files: GeneratedFile[] = [\n // src/config/env.ts\n {\n path: 'src/config/env.ts',\n content: `import { EnvironmentParser } from '@geekmidas/envkit';\n\nexport const envParser = new EnvironmentParser(process.env);\n\nexport const config = envParser\n .create((get) => ({\n port: get('PORT').string().transform(Number).default(3000),\n nodeEnv: get('NODE_ENV').string().default('development'),\n }))\n .parse();\n`,\n },\n\n // src/config/logger.ts\n {\n path: 'src/config/logger.ts',\n content: loggerContent,\n },\n\n // health endpoint\n {\n path: getRoutePath('health.ts'),\n content: `import { e } from '@geekmidas/constructs/endpoints';\n\nexport default e\n .get('/health')\n .handle(async () => ({\n status: 'ok',\n timestamp: new Date().toISOString(),\n }));\n`,\n },\n ];\n\n // Add Telescope config if enabled\n if (options.telescope) {\n files.push({\n path: 'src/config/telescope.ts',\n content: `import { Telescope } from '@geekmidas/telescope';\nimport { InMemoryStorage } from '@geekmidas/telescope/storage/memory';\n\nexport const telescope = new Telescope({\n storage: new InMemoryStorage({ maxEntries: 100 }),\n enabled: process.env.NODE_ENV === 'development',\n});\n`,\n });\n }\n\n return files;\n },\n};\n"],"mappings":";;AAMA,MAAaA,kBAAkC;CAC7C,MAAM;CACN,aAAa;CAEb,cAAc;EACZ,yBAAyB;EACzB,qBAAqB;EACrB,qBAAqB;EACrB,MAAM;EACN,MAAM;CACP;CAED,iBAAiB;EACf,kBAAkB;EAClB,kBAAkB;EAClB,eAAe;EACf,KAAK;EACL,OAAO;EACP,YAAY;EACZ,QAAQ;CACT;CAED,SAAS;EACP,KAAK;EACL,OAAO;EACP,MAAM;EACN,aAAa;EACb,WAAW;EACX,MAAM;EACN,KAAK;EACL,aAAa;CACd;CAED,OAAO,CAACC,YAA8C;EACpD,MAAM,EAAE,YAAY,iBAAiB,GAAG;EAExC,MAAM,iBAAiB,kDAAkD,WAAW;;;;EAMpF,MAAM,eAAe,CAACC,SAAiB;AACrC,WAAQ,iBAAR;IACE,KAAK,wBACH,SAAQ,gBAAgB,KAAK;IAC/B,KAAK,qBACH,SAAQ,aAAa,KAAK;IAC5B,KAAK,eACH,SAAQ,MAAM,KAAK,QAAQ,OAAO,GAAG,CAAC;GACzC;EACF;EAED,MAAMC,QAAyB;GAE7B;IACE,MAAM;IACN,UAAU;;;;;;;;;;;GAWX;GAGD;IACE,MAAM;IACN,SAAS;GACV;GAGD;IACE,MAAM,aAAa,YAAY;IAC/B,UAAU;;;;;;;;;GASX;EACF;AAGD,MAAI,QAAQ,UACV,OAAM,KAAK;GACT,MAAM;GACN,UAAU;;;;;;;;EAQX,EAAC;AAGJ,SAAO;CACR;AACF"}
@@ -112,4 +112,4 @@ export type UpdateUser = z.infer<typeof updateUserSchema>;
112
112
 
113
113
  //#endregion
114
114
  export { generateModelsPackage };
115
- //# sourceMappingURL=models-cvNg6Oea.mjs.map
115
+ //# sourceMappingURL=models-BWlDfviw.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"models-cvNg6Oea.mjs","names":["options: TemplateOptions"],"sources":["../src/init/generators/models.ts"],"sourcesContent":["import type { GeneratedFile, TemplateOptions } from '../templates/index.js';\n\n/**\n * Generate packages/models for shared Zod schemas (monorepo only)\n */\nexport function generateModelsPackage(\n options: TemplateOptions,\n): GeneratedFile[] {\n if (!options.monorepo) {\n return [];\n }\n\n // Package name based on project name\n const packageName = `@${options.name}/models`;\n\n // package.json for models\n const packageJson = {\n name: packageName,\n version: '0.0.1',\n private: true,\n type: 'module',\n exports: {\n '.': {\n types: './dist/index.d.ts',\n import: './dist/index.js',\n },\n './*': {\n types: './dist/*.d.ts',\n import: './dist/*.js',\n },\n },\n scripts: {\n build: 'tsc',\n 'build:watch': 'tsc --watch',\n typecheck: 'tsc --noEmit',\n },\n dependencies: {\n zod: '~4.1.0',\n },\n devDependencies: {\n typescript: '~5.8.2',\n },\n };\n\n // tsconfig.json for models - extends root\n const tsConfig = {\n extends: '../../tsconfig.json',\n compilerOptions: {\n outDir: './dist',\n rootDir: './src',\n },\n include: ['src/**/*.ts'],\n exclude: ['node_modules', 'dist'],\n };\n\n // Main index.ts with example schemas\n const indexTs = `import { z } from 'zod';\n\n// ============================================\n// Common Schemas\n// ============================================\n\nexport const idSchema = z.string().uuid();\n\nexport const timestampsSchema = z.object({\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n\nexport const paginationSchema = z.object({\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().positive().max(100).default(20),\n});\n\nexport const paginatedResponseSchema = <T extends z.ZodTypeAny>(itemSchema: T) =>\n z.object({\n items: z.array(itemSchema),\n total: z.number(),\n page: z.number(),\n limit: z.number(),\n totalPages: z.number(),\n });\n\n// ============================================\n// User Schemas\n// ============================================\n\nexport const userSchema = z.object({\n id: idSchema,\n email: z.string().email(),\n name: z.string().min(1).max(100),\n ...timestampsSchema.shape,\n});\n\nexport const createUserSchema = userSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n});\n\nexport const updateUserSchema = createUserSchema.partial();\n\n// ============================================\n// Type Exports\n// ============================================\n\nexport type Id = z.infer<typeof idSchema>;\nexport type Timestamps = z.infer<typeof timestampsSchema>;\nexport type Pagination = z.infer<typeof paginationSchema>;\nexport type User = z.infer<typeof userSchema>;\nexport type CreateUser = z.infer<typeof createUserSchema>;\nexport type UpdateUser = z.infer<typeof updateUserSchema>;\n`;\n\n return [\n {\n path: 'packages/models/package.json',\n content: JSON.stringify(packageJson, null, 2) + '\\n',\n },\n {\n path: 'packages/models/tsconfig.json',\n content: JSON.stringify(tsConfig, null, 2) + '\\n',\n },\n {\n path: 'packages/models/src/index.ts',\n content: indexTs,\n },\n ];\n}\n"],"mappings":";;;;AAKA,SAAgB,sBACdA,SACiB;AACjB,MAAK,QAAQ,SACX,QAAO,CAAE;CAIX,MAAM,eAAe,GAAG,QAAQ,KAAK;CAGrC,MAAM,cAAc;EAClB,MAAM;EACN,SAAS;EACT,SAAS;EACT,MAAM;EACN,SAAS;GACP,KAAK;IACH,OAAO;IACP,QAAQ;GACT;GACD,OAAO;IACL,OAAO;IACP,QAAQ;GACT;EACF;EACD,SAAS;GACP,OAAO;GACP,eAAe;GACf,WAAW;EACZ;EACD,cAAc,EACZ,KAAK,SACN;EACD,iBAAiB,EACf,YAAY,SACb;CACF;CAGD,MAAM,WAAW;EACf,SAAS;EACT,iBAAiB;GACf,QAAQ;GACR,SAAS;EACV;EACD,SAAS,CAAC,aAAc;EACxB,SAAS,CAAC,gBAAgB,MAAO;CAClC;CAGD,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DjB,QAAO;EACL;GACE,MAAM;GACN,SAAS,KAAK,UAAU,aAAa,MAAM,EAAE,GAAG;EACjD;EACD;GACE,MAAM;GACN,SAAS,KAAK,UAAU,UAAU,MAAM,EAAE,GAAG;EAC9C;EACD;GACE,MAAM;GACN,SAAS;EACV;CACF;AACF"}
1
+ {"version":3,"file":"models-BWlDfviw.mjs","names":["options: TemplateOptions"],"sources":["../src/init/generators/models.ts"],"sourcesContent":["import type { GeneratedFile, TemplateOptions } from '../templates/index.js';\n\n/**\n * Generate packages/models for shared Zod schemas (monorepo only)\n */\nexport function generateModelsPackage(\n options: TemplateOptions,\n): GeneratedFile[] {\n if (!options.monorepo) {\n return [];\n }\n\n // Package name based on project name\n const packageName = `@${options.name}/models`;\n\n // package.json for models\n const packageJson = {\n name: packageName,\n version: '0.0.1',\n private: true,\n type: 'module',\n exports: {\n '.': {\n types: './dist/index.d.ts',\n import: './dist/index.js',\n },\n './*': {\n types: './dist/*.d.ts',\n import: './dist/*.js',\n },\n },\n scripts: {\n build: 'tsc',\n 'build:watch': 'tsc --watch',\n typecheck: 'tsc --noEmit',\n },\n dependencies: {\n zod: '~4.1.0',\n },\n devDependencies: {\n typescript: '~5.8.2',\n },\n };\n\n // tsconfig.json for models - extends root\n const tsConfig = {\n extends: '../../tsconfig.json',\n compilerOptions: {\n outDir: './dist',\n rootDir: './src',\n },\n include: ['src/**/*.ts'],\n exclude: ['node_modules', 'dist'],\n };\n\n // Main index.ts with example schemas\n const indexTs = `import { z } from 'zod';\n\n// ============================================\n// Common Schemas\n// ============================================\n\nexport const idSchema = z.string().uuid();\n\nexport const timestampsSchema = z.object({\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n\nexport const paginationSchema = z.object({\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().positive().max(100).default(20),\n});\n\nexport const paginatedResponseSchema = <T extends z.ZodTypeAny>(itemSchema: T) =>\n z.object({\n items: z.array(itemSchema),\n total: z.number(),\n page: z.number(),\n limit: z.number(),\n totalPages: z.number(),\n });\n\n// ============================================\n// User Schemas\n// ============================================\n\nexport const userSchema = z.object({\n id: idSchema,\n email: z.string().email(),\n name: z.string().min(1).max(100),\n ...timestampsSchema.shape,\n});\n\nexport const createUserSchema = userSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n});\n\nexport const updateUserSchema = createUserSchema.partial();\n\n// ============================================\n// Type Exports\n// ============================================\n\nexport type Id = z.infer<typeof idSchema>;\nexport type Timestamps = z.infer<typeof timestampsSchema>;\nexport type Pagination = z.infer<typeof paginationSchema>;\nexport type User = z.infer<typeof userSchema>;\nexport type CreateUser = z.infer<typeof createUserSchema>;\nexport type UpdateUser = z.infer<typeof updateUserSchema>;\n`;\n\n return [\n {\n path: 'packages/models/package.json',\n content: JSON.stringify(packageJson, null, 2) + '\\n',\n },\n {\n path: 'packages/models/tsconfig.json',\n content: JSON.stringify(tsConfig, null, 2) + '\\n',\n },\n {\n path: 'packages/models/src/index.ts',\n content: indexTs,\n },\n ];\n}\n"],"mappings":";;;;AAKA,SAAgB,sBACdA,SACiB;AACjB,MAAK,QAAQ,SACX,QAAO,CAAE;CAIX,MAAM,eAAe,GAAG,QAAQ,KAAK;CAGrC,MAAM,cAAc;EAClB,MAAM;EACN,SAAS;EACT,SAAS;EACT,MAAM;EACN,SAAS;GACP,KAAK;IACH,OAAO;IACP,QAAQ;GACT;GACD,OAAO;IACL,OAAO;IACP,QAAQ;GACT;EACF;EACD,SAAS;GACP,OAAO;GACP,eAAe;GACf,WAAW;EACZ;EACD,cAAc,EACZ,KAAK,SACN;EACD,iBAAiB,EACf,YAAY,SACb;CACF;CAGD,MAAM,WAAW;EACf,SAAS;EACT,iBAAiB;GACf,QAAQ;GACR,SAAS;EACV;EACD,SAAS,CAAC,aAAc;EACxB,SAAS,CAAC,gBAAgB,MAAO;CAClC;CAGD,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DjB,QAAO;EACL;GACE,MAAM;GACN,SAAS,KAAK,UAAU,aAAa,MAAM,EAAE,GAAG;EACjD;EACD;GACE,MAAM;GACN,SAAS,KAAK,UAAU,UAAU,MAAM,EAAE,GAAG;EAC9C;EACD;GACE,MAAM;GACN,SAAS;EACV;CACF;AACF"}
@@ -118,4 +118,4 @@ Object.defineProperty(exports, 'generateModelsPackage', {
118
118
  return generateModelsPackage;
119
119
  }
120
120
  });
121
- //# sourceMappingURL=models-DyNwdOcz.cjs.map
121
+ //# sourceMappingURL=models-BapGSoHC.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"models-DyNwdOcz.cjs","names":["options: TemplateOptions"],"sources":["../src/init/generators/models.ts"],"sourcesContent":["import type { GeneratedFile, TemplateOptions } from '../templates/index.js';\n\n/**\n * Generate packages/models for shared Zod schemas (monorepo only)\n */\nexport function generateModelsPackage(\n options: TemplateOptions,\n): GeneratedFile[] {\n if (!options.monorepo) {\n return [];\n }\n\n // Package name based on project name\n const packageName = `@${options.name}/models`;\n\n // package.json for models\n const packageJson = {\n name: packageName,\n version: '0.0.1',\n private: true,\n type: 'module',\n exports: {\n '.': {\n types: './dist/index.d.ts',\n import: './dist/index.js',\n },\n './*': {\n types: './dist/*.d.ts',\n import: './dist/*.js',\n },\n },\n scripts: {\n build: 'tsc',\n 'build:watch': 'tsc --watch',\n typecheck: 'tsc --noEmit',\n },\n dependencies: {\n zod: '~4.1.0',\n },\n devDependencies: {\n typescript: '~5.8.2',\n },\n };\n\n // tsconfig.json for models - extends root\n const tsConfig = {\n extends: '../../tsconfig.json',\n compilerOptions: {\n outDir: './dist',\n rootDir: './src',\n },\n include: ['src/**/*.ts'],\n exclude: ['node_modules', 'dist'],\n };\n\n // Main index.ts with example schemas\n const indexTs = `import { z } from 'zod';\n\n// ============================================\n// Common Schemas\n// ============================================\n\nexport const idSchema = z.string().uuid();\n\nexport const timestampsSchema = z.object({\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n\nexport const paginationSchema = z.object({\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().positive().max(100).default(20),\n});\n\nexport const paginatedResponseSchema = <T extends z.ZodTypeAny>(itemSchema: T) =>\n z.object({\n items: z.array(itemSchema),\n total: z.number(),\n page: z.number(),\n limit: z.number(),\n totalPages: z.number(),\n });\n\n// ============================================\n// User Schemas\n// ============================================\n\nexport const userSchema = z.object({\n id: idSchema,\n email: z.string().email(),\n name: z.string().min(1).max(100),\n ...timestampsSchema.shape,\n});\n\nexport const createUserSchema = userSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n});\n\nexport const updateUserSchema = createUserSchema.partial();\n\n// ============================================\n// Type Exports\n// ============================================\n\nexport type Id = z.infer<typeof idSchema>;\nexport type Timestamps = z.infer<typeof timestampsSchema>;\nexport type Pagination = z.infer<typeof paginationSchema>;\nexport type User = z.infer<typeof userSchema>;\nexport type CreateUser = z.infer<typeof createUserSchema>;\nexport type UpdateUser = z.infer<typeof updateUserSchema>;\n`;\n\n return [\n {\n path: 'packages/models/package.json',\n content: JSON.stringify(packageJson, null, 2) + '\\n',\n },\n {\n path: 'packages/models/tsconfig.json',\n content: JSON.stringify(tsConfig, null, 2) + '\\n',\n },\n {\n path: 'packages/models/src/index.ts',\n content: indexTs,\n },\n ];\n}\n"],"mappings":";;;;;AAKA,SAAgB,sBACdA,SACiB;AACjB,MAAK,QAAQ,SACX,QAAO,CAAE;CAIX,MAAM,eAAe,GAAG,QAAQ,KAAK;CAGrC,MAAM,cAAc;EAClB,MAAM;EACN,SAAS;EACT,SAAS;EACT,MAAM;EACN,SAAS;GACP,KAAK;IACH,OAAO;IACP,QAAQ;GACT;GACD,OAAO;IACL,OAAO;IACP,QAAQ;GACT;EACF;EACD,SAAS;GACP,OAAO;GACP,eAAe;GACf,WAAW;EACZ;EACD,cAAc,EACZ,KAAK,SACN;EACD,iBAAiB,EACf,YAAY,SACb;CACF;CAGD,MAAM,WAAW;EACf,SAAS;EACT,iBAAiB;GACf,QAAQ;GACR,SAAS;EACV;EACD,SAAS,CAAC,aAAc;EACxB,SAAS,CAAC,gBAAgB,MAAO;CAClC;CAGD,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DjB,QAAO;EACL;GACE,MAAM;GACN,SAAS,KAAK,UAAU,aAAa,MAAM,EAAE,GAAG;EACjD;EACD;GACE,MAAM;GACN,SAAS,KAAK,UAAU,UAAU,MAAM,EAAE,GAAG;EAC9C;EACD;GACE,MAAM;GACN,SAAS;EACV;CACF;AACF"}
1
+ {"version":3,"file":"models-BapGSoHC.cjs","names":["options: TemplateOptions"],"sources":["../src/init/generators/models.ts"],"sourcesContent":["import type { GeneratedFile, TemplateOptions } from '../templates/index.js';\n\n/**\n * Generate packages/models for shared Zod schemas (monorepo only)\n */\nexport function generateModelsPackage(\n options: TemplateOptions,\n): GeneratedFile[] {\n if (!options.monorepo) {\n return [];\n }\n\n // Package name based on project name\n const packageName = `@${options.name}/models`;\n\n // package.json for models\n const packageJson = {\n name: packageName,\n version: '0.0.1',\n private: true,\n type: 'module',\n exports: {\n '.': {\n types: './dist/index.d.ts',\n import: './dist/index.js',\n },\n './*': {\n types: './dist/*.d.ts',\n import: './dist/*.js',\n },\n },\n scripts: {\n build: 'tsc',\n 'build:watch': 'tsc --watch',\n typecheck: 'tsc --noEmit',\n },\n dependencies: {\n zod: '~4.1.0',\n },\n devDependencies: {\n typescript: '~5.8.2',\n },\n };\n\n // tsconfig.json for models - extends root\n const tsConfig = {\n extends: '../../tsconfig.json',\n compilerOptions: {\n outDir: './dist',\n rootDir: './src',\n },\n include: ['src/**/*.ts'],\n exclude: ['node_modules', 'dist'],\n };\n\n // Main index.ts with example schemas\n const indexTs = `import { z } from 'zod';\n\n// ============================================\n// Common Schemas\n// ============================================\n\nexport const idSchema = z.string().uuid();\n\nexport const timestampsSchema = z.object({\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n\nexport const paginationSchema = z.object({\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().positive().max(100).default(20),\n});\n\nexport const paginatedResponseSchema = <T extends z.ZodTypeAny>(itemSchema: T) =>\n z.object({\n items: z.array(itemSchema),\n total: z.number(),\n page: z.number(),\n limit: z.number(),\n totalPages: z.number(),\n });\n\n// ============================================\n// User Schemas\n// ============================================\n\nexport const userSchema = z.object({\n id: idSchema,\n email: z.string().email(),\n name: z.string().min(1).max(100),\n ...timestampsSchema.shape,\n});\n\nexport const createUserSchema = userSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n});\n\nexport const updateUserSchema = createUserSchema.partial();\n\n// ============================================\n// Type Exports\n// ============================================\n\nexport type Id = z.infer<typeof idSchema>;\nexport type Timestamps = z.infer<typeof timestampsSchema>;\nexport type Pagination = z.infer<typeof paginationSchema>;\nexport type User = z.infer<typeof userSchema>;\nexport type CreateUser = z.infer<typeof createUserSchema>;\nexport type UpdateUser = z.infer<typeof updateUserSchema>;\n`;\n\n return [\n {\n path: 'packages/models/package.json',\n content: JSON.stringify(packageJson, null, 2) + '\\n',\n },\n {\n path: 'packages/models/tsconfig.json',\n content: JSON.stringify(tsConfig, null, 2) + '\\n',\n },\n {\n path: 'packages/models/src/index.ts',\n content: indexTs,\n },\n ];\n}\n"],"mappings":";;;;;AAKA,SAAgB,sBACdA,SACiB;AACjB,MAAK,QAAQ,SACX,QAAO,CAAE;CAIX,MAAM,eAAe,GAAG,QAAQ,KAAK;CAGrC,MAAM,cAAc;EAClB,MAAM;EACN,SAAS;EACT,SAAS;EACT,MAAM;EACN,SAAS;GACP,KAAK;IACH,OAAO;IACP,QAAQ;GACT;GACD,OAAO;IACL,OAAO;IACP,QAAQ;GACT;EACF;EACD,SAAS;GACP,OAAO;GACP,eAAe;GACf,WAAW;EACZ;EACD,cAAc,EACZ,KAAK,SACN;EACD,iBAAiB,EACf,YAAY,SACb;CACF;CAGD,MAAM,WAAW;EACf,SAAS;EACT,iBAAiB;GACf,QAAQ;GACR,SAAS;EACV;EACD,SAAS,CAAC,aAAc;EACxB,SAAS,CAAC,gBAAgB,MAAO;CAClC;CAGD,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DjB,QAAO;EACL;GACE,MAAM;GACN,SAAS,KAAK,UAAU,aAAa,MAAM,EAAE,GAAG;EACjD;EACD;GACE,MAAM;GACN,SAAS,KAAK,UAAU,UAAU,MAAM,EAAE,GAAG;EAC9C;EACD;GACE,MAAM;GACN,SAAS;EACV;CACF;AACF"}
@@ -181,4 +181,4 @@ coverage/
181
181
 
182
182
  //#endregion
183
183
  export { generateMonorepoFiles };
184
- //# sourceMappingURL=monorepo-Cknwzj5C.mjs.map
184
+ //# sourceMappingURL=monorepo-BBOWhkcd.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"monorepo-Cknwzj5C.mjs","names":["options: TemplateOptions","_template: TemplateConfig"],"sources":["../src/init/generators/monorepo.ts"],"sourcesContent":["import type {\n GeneratedFile,\n TemplateConfig,\n TemplateOptions,\n} from '../templates/index.js';\n\n/**\n * Generate monorepo root files (pnpm-workspace.yaml, root package.json, etc.)\n */\nexport function generateMonorepoFiles(\n options: TemplateOptions,\n _template: TemplateConfig,\n): GeneratedFile[] {\n if (!options.monorepo) {\n return [];\n }\n\n // Root package.json for monorepo\n const rootPackageJson = {\n name: options.name,\n version: '0.0.1',\n private: true,\n type: 'module',\n scripts: {\n dev: 'turbo dev',\n build: 'turbo build',\n test: 'turbo test',\n 'test:once': 'turbo test:once',\n typecheck: 'turbo typecheck',\n lint: 'biome lint .',\n fmt: 'biome format . --write',\n 'fmt:check': 'biome format .',\n },\n devDependencies: {\n '@biomejs/biome': '~1.9.4',\n turbo: '~2.3.0',\n typescript: '~5.8.2',\n vitest: '~4.0.0',\n },\n };\n\n // pnpm-workspace.yaml - detect folder structure from apiPath\n const apiPathParts = options.apiPath.split('/');\n const appsFolder = apiPathParts[0] || 'apps';\n\n const pnpmWorkspace = `packages:\n - '${appsFolder}/*'\n - 'packages/*'\n`;\n\n // Root biome.json\n const biomeConfig = {\n $schema: 'https://biomejs.dev/schemas/1.9.4/schema.json',\n vcs: {\n enabled: true,\n clientKind: 'git',\n useIgnoreFile: true,\n },\n organizeImports: {\n enabled: true,\n },\n formatter: {\n enabled: true,\n indentStyle: 'space',\n indentWidth: 2,\n lineWidth: 80,\n },\n javascript: {\n formatter: {\n quoteStyle: 'single',\n trailingCommas: 'all',\n semicolons: 'always',\n arrowParentheses: 'always',\n },\n },\n linter: {\n enabled: true,\n rules: {\n recommended: true,\n correctness: {\n noUnusedImports: 'error',\n noUnusedVariables: 'error',\n },\n style: {\n noNonNullAssertion: 'off',\n },\n },\n },\n files: {\n ignore: ['node_modules', 'dist', '.gkm', 'coverage'],\n },\n };\n\n // Root turbo.json\n const turboConfig = {\n $schema: 'https://turbo.build/schema.json',\n tasks: {\n build: {\n dependsOn: ['^build'],\n outputs: ['dist/**'],\n },\n dev: {\n cache: false,\n persistent: true,\n },\n test: {\n dependsOn: ['^build'],\n cache: false,\n },\n 'test:once': {\n dependsOn: ['^build'],\n outputs: ['coverage/**'],\n },\n typecheck: {\n dependsOn: ['^build'],\n outputs: [],\n },\n lint: {\n outputs: [],\n },\n fmt: {\n outputs: [],\n },\n },\n };\n\n // Root .gitignore\n const gitignore = `# Dependencies\nnode_modules/\n\n# Build output\ndist/\n.gkm/\n\n# Environment\n.env\n.env.local\n.env.*.local\n\n# IDE\n.idea/\n.vscode/\n*.swp\n*.swo\n\n# OS\n.DS_Store\nThumbs.db\n\n# Logs\n*.log\nnpm-debug.log*\nyarn-debug.log*\npnpm-debug.log*\n\n# Test coverage\ncoverage/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Turbo\n.turbo/\n`;\n\n // Root tsconfig.json - base config for all packages\n const tsConfig = {\n compilerOptions: {\n target: 'ES2022',\n module: 'NodeNext',\n moduleResolution: 'NodeNext',\n lib: ['ES2022'],\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n forceConsistentCasingInFileNames: true,\n resolveJsonModule: true,\n declaration: true,\n declarationMap: true,\n composite: true,\n },\n exclude: ['node_modules', 'dist'],\n };\n\n return [\n {\n path: 'package.json',\n content: JSON.stringify(rootPackageJson, null, 2) + '\\n',\n },\n {\n path: 'pnpm-workspace.yaml',\n content: pnpmWorkspace,\n },\n {\n path: 'tsconfig.json',\n content: JSON.stringify(tsConfig, null, 2) + '\\n',\n },\n {\n path: 'biome.json',\n content: JSON.stringify(biomeConfig, null, 2) + '\\n',\n },\n {\n path: 'turbo.json',\n content: JSON.stringify(turboConfig, null, 2) + '\\n',\n },\n {\n path: '.gitignore',\n content: gitignore,\n },\n ];\n}\n"],"mappings":";;;;AASA,SAAgB,sBACdA,SACAC,WACiB;AACjB,MAAK,QAAQ,SACX,QAAO,CAAE;CAIX,MAAM,kBAAkB;EACtB,MAAM,QAAQ;EACd,SAAS;EACT,SAAS;EACT,MAAM;EACN,SAAS;GACP,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,WAAW;GACX,MAAM;GACN,KAAK;GACL,aAAa;EACd;EACD,iBAAiB;GACf,kBAAkB;GAClB,OAAO;GACP,YAAY;GACZ,QAAQ;EACT;CACF;CAGD,MAAM,eAAe,QAAQ,QAAQ,MAAM,IAAI;CAC/C,MAAM,aAAa,aAAa,MAAM;CAEtC,MAAM,iBAAiB;OAClB,WAAW;;;CAKhB,MAAM,cAAc;EAClB,SAAS;EACT,KAAK;GACH,SAAS;GACT,YAAY;GACZ,eAAe;EAChB;EACD,iBAAiB,EACf,SAAS,KACV;EACD,WAAW;GACT,SAAS;GACT,aAAa;GACb,aAAa;GACb,WAAW;EACZ;EACD,YAAY,EACV,WAAW;GACT,YAAY;GACZ,gBAAgB;GAChB,YAAY;GACZ,kBAAkB;EACnB,EACF;EACD,QAAQ;GACN,SAAS;GACT,OAAO;IACL,aAAa;IACb,aAAa;KACX,iBAAiB;KACjB,mBAAmB;IACpB;IACD,OAAO,EACL,oBAAoB,MACrB;GACF;EACF;EACD,OAAO,EACL,QAAQ;GAAC;GAAgB;GAAQ;GAAQ;EAAW,EACrD;CACF;CAGD,MAAM,cAAc;EAClB,SAAS;EACT,OAAO;GACL,OAAO;IACL,WAAW,CAAC,QAAS;IACrB,SAAS,CAAC,SAAU;GACrB;GACD,KAAK;IACH,OAAO;IACP,YAAY;GACb;GACD,MAAM;IACJ,WAAW,CAAC,QAAS;IACrB,OAAO;GACR;GACD,aAAa;IACX,WAAW,CAAC,QAAS;IACrB,SAAS,CAAC,aAAc;GACzB;GACD,WAAW;IACT,WAAW,CAAC,QAAS;IACrB,SAAS,CAAE;GACZ;GACD,MAAM,EACJ,SAAS,CAAE,EACZ;GACD,KAAK,EACH,SAAS,CAAE,EACZ;EACF;CACF;CAGD,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCnB,MAAM,WAAW;EACf,iBAAiB;GACf,QAAQ;GACR,QAAQ;GACR,kBAAkB;GAClB,KAAK,CAAC,QAAS;GACf,QAAQ;GACR,iBAAiB;GACjB,cAAc;GACd,kCAAkC;GAClC,mBAAmB;GACnB,aAAa;GACb,gBAAgB;GAChB,WAAW;EACZ;EACD,SAAS,CAAC,gBAAgB,MAAO;CAClC;AAED,QAAO;EACL;GACE,MAAM;GACN,SAAS,KAAK,UAAU,iBAAiB,MAAM,EAAE,GAAG;EACrD;EACD;GACE,MAAM;GACN,SAAS;EACV;EACD;GACE,MAAM;GACN,SAAS,KAAK,UAAU,UAAU,MAAM,EAAE,GAAG;EAC9C;EACD;GACE,MAAM;GACN,SAAS,KAAK,UAAU,aAAa,MAAM,EAAE,GAAG;EACjD;EACD;GACE,MAAM;GACN,SAAS,KAAK,UAAU,aAAa,MAAM,EAAE,GAAG;EACjD;EACD;GACE,MAAM;GACN,SAAS;EACV;CACF;AACF"}
1
+ {"version":3,"file":"monorepo-BBOWhkcd.mjs","names":["options: TemplateOptions","_template: TemplateConfig"],"sources":["../src/init/generators/monorepo.ts"],"sourcesContent":["import type {\n GeneratedFile,\n TemplateConfig,\n TemplateOptions,\n} from '../templates/index.js';\n\n/**\n * Generate monorepo root files (pnpm-workspace.yaml, root package.json, etc.)\n */\nexport function generateMonorepoFiles(\n options: TemplateOptions,\n _template: TemplateConfig,\n): GeneratedFile[] {\n if (!options.monorepo) {\n return [];\n }\n\n // Root package.json for monorepo\n const rootPackageJson = {\n name: options.name,\n version: '0.0.1',\n private: true,\n type: 'module',\n scripts: {\n dev: 'turbo dev',\n build: 'turbo build',\n test: 'turbo test',\n 'test:once': 'turbo test:once',\n typecheck: 'turbo typecheck',\n lint: 'biome lint .',\n fmt: 'biome format . --write',\n 'fmt:check': 'biome format .',\n },\n devDependencies: {\n '@biomejs/biome': '~1.9.4',\n turbo: '~2.3.0',\n typescript: '~5.8.2',\n vitest: '~4.0.0',\n },\n };\n\n // pnpm-workspace.yaml - detect folder structure from apiPath\n const apiPathParts = options.apiPath.split('/');\n const appsFolder = apiPathParts[0] || 'apps';\n\n const pnpmWorkspace = `packages:\n - '${appsFolder}/*'\n - 'packages/*'\n`;\n\n // Root biome.json\n const biomeConfig = {\n $schema: 'https://biomejs.dev/schemas/1.9.4/schema.json',\n vcs: {\n enabled: true,\n clientKind: 'git',\n useIgnoreFile: true,\n },\n organizeImports: {\n enabled: true,\n },\n formatter: {\n enabled: true,\n indentStyle: 'space',\n indentWidth: 2,\n lineWidth: 80,\n },\n javascript: {\n formatter: {\n quoteStyle: 'single',\n trailingCommas: 'all',\n semicolons: 'always',\n arrowParentheses: 'always',\n },\n },\n linter: {\n enabled: true,\n rules: {\n recommended: true,\n correctness: {\n noUnusedImports: 'error',\n noUnusedVariables: 'error',\n },\n style: {\n noNonNullAssertion: 'off',\n },\n },\n },\n files: {\n ignore: ['node_modules', 'dist', '.gkm', 'coverage'],\n },\n };\n\n // Root turbo.json\n const turboConfig = {\n $schema: 'https://turbo.build/schema.json',\n tasks: {\n build: {\n dependsOn: ['^build'],\n outputs: ['dist/**'],\n },\n dev: {\n cache: false,\n persistent: true,\n },\n test: {\n dependsOn: ['^build'],\n cache: false,\n },\n 'test:once': {\n dependsOn: ['^build'],\n outputs: ['coverage/**'],\n },\n typecheck: {\n dependsOn: ['^build'],\n outputs: [],\n },\n lint: {\n outputs: [],\n },\n fmt: {\n outputs: [],\n },\n },\n };\n\n // Root .gitignore\n const gitignore = `# Dependencies\nnode_modules/\n\n# Build output\ndist/\n.gkm/\n\n# Environment\n.env\n.env.local\n.env.*.local\n\n# IDE\n.idea/\n.vscode/\n*.swp\n*.swo\n\n# OS\n.DS_Store\nThumbs.db\n\n# Logs\n*.log\nnpm-debug.log*\nyarn-debug.log*\npnpm-debug.log*\n\n# Test coverage\ncoverage/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Turbo\n.turbo/\n`;\n\n // Root tsconfig.json - base config for all packages\n const tsConfig = {\n compilerOptions: {\n target: 'ES2022',\n module: 'NodeNext',\n moduleResolution: 'NodeNext',\n lib: ['ES2022'],\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n forceConsistentCasingInFileNames: true,\n resolveJsonModule: true,\n declaration: true,\n declarationMap: true,\n composite: true,\n },\n exclude: ['node_modules', 'dist'],\n };\n\n return [\n {\n path: 'package.json',\n content: JSON.stringify(rootPackageJson, null, 2) + '\\n',\n },\n {\n path: 'pnpm-workspace.yaml',\n content: pnpmWorkspace,\n },\n {\n path: 'tsconfig.json',\n content: JSON.stringify(tsConfig, null, 2) + '\\n',\n },\n {\n path: 'biome.json',\n content: JSON.stringify(biomeConfig, null, 2) + '\\n',\n },\n {\n path: 'turbo.json',\n content: JSON.stringify(turboConfig, null, 2) + '\\n',\n },\n {\n path: '.gitignore',\n content: gitignore,\n },\n ];\n}\n"],"mappings":";;;;AASA,SAAgB,sBACdA,SACAC,WACiB;AACjB,MAAK,QAAQ,SACX,QAAO,CAAE;CAIX,MAAM,kBAAkB;EACtB,MAAM,QAAQ;EACd,SAAS;EACT,SAAS;EACT,MAAM;EACN,SAAS;GACP,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,WAAW;GACX,MAAM;GACN,KAAK;GACL,aAAa;EACd;EACD,iBAAiB;GACf,kBAAkB;GAClB,OAAO;GACP,YAAY;GACZ,QAAQ;EACT;CACF;CAGD,MAAM,eAAe,QAAQ,QAAQ,MAAM,IAAI;CAC/C,MAAM,aAAa,aAAa,MAAM;CAEtC,MAAM,iBAAiB;OAClB,WAAW;;;CAKhB,MAAM,cAAc;EAClB,SAAS;EACT,KAAK;GACH,SAAS;GACT,YAAY;GACZ,eAAe;EAChB;EACD,iBAAiB,EACf,SAAS,KACV;EACD,WAAW;GACT,SAAS;GACT,aAAa;GACb,aAAa;GACb,WAAW;EACZ;EACD,YAAY,EACV,WAAW;GACT,YAAY;GACZ,gBAAgB;GAChB,YAAY;GACZ,kBAAkB;EACnB,EACF;EACD,QAAQ;GACN,SAAS;GACT,OAAO;IACL,aAAa;IACb,aAAa;KACX,iBAAiB;KACjB,mBAAmB;IACpB;IACD,OAAO,EACL,oBAAoB,MACrB;GACF;EACF;EACD,OAAO,EACL,QAAQ;GAAC;GAAgB;GAAQ;GAAQ;EAAW,EACrD;CACF;CAGD,MAAM,cAAc;EAClB,SAAS;EACT,OAAO;GACL,OAAO;IACL,WAAW,CAAC,QAAS;IACrB,SAAS,CAAC,SAAU;GACrB;GACD,KAAK;IACH,OAAO;IACP,YAAY;GACb;GACD,MAAM;IACJ,WAAW,CAAC,QAAS;IACrB,OAAO;GACR;GACD,aAAa;IACX,WAAW,CAAC,QAAS;IACrB,SAAS,CAAC,aAAc;GACzB;GACD,WAAW;IACT,WAAW,CAAC,QAAS;IACrB,SAAS,CAAE;GACZ;GACD,MAAM,EACJ,SAAS,CAAE,EACZ;GACD,KAAK,EACH,SAAS,CAAE,EACZ;EACF;CACF;CAGD,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCnB,MAAM,WAAW;EACf,iBAAiB;GACf,QAAQ;GACR,QAAQ;GACR,kBAAkB;GAClB,KAAK,CAAC,QAAS;GACf,QAAQ;GACR,iBAAiB;GACjB,cAAc;GACd,kCAAkC;GAClC,mBAAmB;GACnB,aAAa;GACb,gBAAgB;GAChB,WAAW;EACZ;EACD,SAAS,CAAC,gBAAgB,MAAO;CAClC;AAED,QAAO;EACL;GACE,MAAM;GACN,SAAS,KAAK,UAAU,iBAAiB,MAAM,EAAE,GAAG;EACrD;EACD;GACE,MAAM;GACN,SAAS;EACV;EACD;GACE,MAAM;GACN,SAAS,KAAK,UAAU,UAAU,MAAM,EAAE,GAAG;EAC9C;EACD;GACE,MAAM;GACN,SAAS,KAAK,UAAU,aAAa,MAAM,EAAE,GAAG;EACjD;EACD;GACE,MAAM;GACN,SAAS,KAAK,UAAU,aAAa,MAAM,EAAE,GAAG;EACjD;EACD;GACE,MAAM;GACN,SAAS;EACV;CACF;AACF"}
@@ -187,4 +187,4 @@ Object.defineProperty(exports, 'generateMonorepoFiles', {
187
187
  return generateMonorepoFiles;
188
188
  }
189
189
  });
190
- //# sourceMappingURL=monorepo-sEK8gW59.cjs.map
190
+ //# sourceMappingURL=monorepo-CFtxHeDh.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"monorepo-sEK8gW59.cjs","names":["options: TemplateOptions","_template: TemplateConfig"],"sources":["../src/init/generators/monorepo.ts"],"sourcesContent":["import type {\n GeneratedFile,\n TemplateConfig,\n TemplateOptions,\n} from '../templates/index.js';\n\n/**\n * Generate monorepo root files (pnpm-workspace.yaml, root package.json, etc.)\n */\nexport function generateMonorepoFiles(\n options: TemplateOptions,\n _template: TemplateConfig,\n): GeneratedFile[] {\n if (!options.monorepo) {\n return [];\n }\n\n // Root package.json for monorepo\n const rootPackageJson = {\n name: options.name,\n version: '0.0.1',\n private: true,\n type: 'module',\n scripts: {\n dev: 'turbo dev',\n build: 'turbo build',\n test: 'turbo test',\n 'test:once': 'turbo test:once',\n typecheck: 'turbo typecheck',\n lint: 'biome lint .',\n fmt: 'biome format . --write',\n 'fmt:check': 'biome format .',\n },\n devDependencies: {\n '@biomejs/biome': '~1.9.4',\n turbo: '~2.3.0',\n typescript: '~5.8.2',\n vitest: '~4.0.0',\n },\n };\n\n // pnpm-workspace.yaml - detect folder structure from apiPath\n const apiPathParts = options.apiPath.split('/');\n const appsFolder = apiPathParts[0] || 'apps';\n\n const pnpmWorkspace = `packages:\n - '${appsFolder}/*'\n - 'packages/*'\n`;\n\n // Root biome.json\n const biomeConfig = {\n $schema: 'https://biomejs.dev/schemas/1.9.4/schema.json',\n vcs: {\n enabled: true,\n clientKind: 'git',\n useIgnoreFile: true,\n },\n organizeImports: {\n enabled: true,\n },\n formatter: {\n enabled: true,\n indentStyle: 'space',\n indentWidth: 2,\n lineWidth: 80,\n },\n javascript: {\n formatter: {\n quoteStyle: 'single',\n trailingCommas: 'all',\n semicolons: 'always',\n arrowParentheses: 'always',\n },\n },\n linter: {\n enabled: true,\n rules: {\n recommended: true,\n correctness: {\n noUnusedImports: 'error',\n noUnusedVariables: 'error',\n },\n style: {\n noNonNullAssertion: 'off',\n },\n },\n },\n files: {\n ignore: ['node_modules', 'dist', '.gkm', 'coverage'],\n },\n };\n\n // Root turbo.json\n const turboConfig = {\n $schema: 'https://turbo.build/schema.json',\n tasks: {\n build: {\n dependsOn: ['^build'],\n outputs: ['dist/**'],\n },\n dev: {\n cache: false,\n persistent: true,\n },\n test: {\n dependsOn: ['^build'],\n cache: false,\n },\n 'test:once': {\n dependsOn: ['^build'],\n outputs: ['coverage/**'],\n },\n typecheck: {\n dependsOn: ['^build'],\n outputs: [],\n },\n lint: {\n outputs: [],\n },\n fmt: {\n outputs: [],\n },\n },\n };\n\n // Root .gitignore\n const gitignore = `# Dependencies\nnode_modules/\n\n# Build output\ndist/\n.gkm/\n\n# Environment\n.env\n.env.local\n.env.*.local\n\n# IDE\n.idea/\n.vscode/\n*.swp\n*.swo\n\n# OS\n.DS_Store\nThumbs.db\n\n# Logs\n*.log\nnpm-debug.log*\nyarn-debug.log*\npnpm-debug.log*\n\n# Test coverage\ncoverage/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Turbo\n.turbo/\n`;\n\n // Root tsconfig.json - base config for all packages\n const tsConfig = {\n compilerOptions: {\n target: 'ES2022',\n module: 'NodeNext',\n moduleResolution: 'NodeNext',\n lib: ['ES2022'],\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n forceConsistentCasingInFileNames: true,\n resolveJsonModule: true,\n declaration: true,\n declarationMap: true,\n composite: true,\n },\n exclude: ['node_modules', 'dist'],\n };\n\n return [\n {\n path: 'package.json',\n content: JSON.stringify(rootPackageJson, null, 2) + '\\n',\n },\n {\n path: 'pnpm-workspace.yaml',\n content: pnpmWorkspace,\n },\n {\n path: 'tsconfig.json',\n content: JSON.stringify(tsConfig, null, 2) + '\\n',\n },\n {\n path: 'biome.json',\n content: JSON.stringify(biomeConfig, null, 2) + '\\n',\n },\n {\n path: 'turbo.json',\n content: JSON.stringify(turboConfig, null, 2) + '\\n',\n },\n {\n path: '.gitignore',\n content: gitignore,\n },\n ];\n}\n"],"mappings":";;;;;AASA,SAAgB,sBACdA,SACAC,WACiB;AACjB,MAAK,QAAQ,SACX,QAAO,CAAE;CAIX,MAAM,kBAAkB;EACtB,MAAM,QAAQ;EACd,SAAS;EACT,SAAS;EACT,MAAM;EACN,SAAS;GACP,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,WAAW;GACX,MAAM;GACN,KAAK;GACL,aAAa;EACd;EACD,iBAAiB;GACf,kBAAkB;GAClB,OAAO;GACP,YAAY;GACZ,QAAQ;EACT;CACF;CAGD,MAAM,eAAe,QAAQ,QAAQ,MAAM,IAAI;CAC/C,MAAM,aAAa,aAAa,MAAM;CAEtC,MAAM,iBAAiB;OAClB,WAAW;;;CAKhB,MAAM,cAAc;EAClB,SAAS;EACT,KAAK;GACH,SAAS;GACT,YAAY;GACZ,eAAe;EAChB;EACD,iBAAiB,EACf,SAAS,KACV;EACD,WAAW;GACT,SAAS;GACT,aAAa;GACb,aAAa;GACb,WAAW;EACZ;EACD,YAAY,EACV,WAAW;GACT,YAAY;GACZ,gBAAgB;GAChB,YAAY;GACZ,kBAAkB;EACnB,EACF;EACD,QAAQ;GACN,SAAS;GACT,OAAO;IACL,aAAa;IACb,aAAa;KACX,iBAAiB;KACjB,mBAAmB;IACpB;IACD,OAAO,EACL,oBAAoB,MACrB;GACF;EACF;EACD,OAAO,EACL,QAAQ;GAAC;GAAgB;GAAQ;GAAQ;EAAW,EACrD;CACF;CAGD,MAAM,cAAc;EAClB,SAAS;EACT,OAAO;GACL,OAAO;IACL,WAAW,CAAC,QAAS;IACrB,SAAS,CAAC,SAAU;GACrB;GACD,KAAK;IACH,OAAO;IACP,YAAY;GACb;GACD,MAAM;IACJ,WAAW,CAAC,QAAS;IACrB,OAAO;GACR;GACD,aAAa;IACX,WAAW,CAAC,QAAS;IACrB,SAAS,CAAC,aAAc;GACzB;GACD,WAAW;IACT,WAAW,CAAC,QAAS;IACrB,SAAS,CAAE;GACZ;GACD,MAAM,EACJ,SAAS,CAAE,EACZ;GACD,KAAK,EACH,SAAS,CAAE,EACZ;EACF;CACF;CAGD,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCnB,MAAM,WAAW;EACf,iBAAiB;GACf,QAAQ;GACR,QAAQ;GACR,kBAAkB;GAClB,KAAK,CAAC,QAAS;GACf,QAAQ;GACR,iBAAiB;GACjB,cAAc;GACd,kCAAkC;GAClC,mBAAmB;GACnB,aAAa;GACb,gBAAgB;GAChB,WAAW;EACZ;EACD,SAAS,CAAC,gBAAgB,MAAO;CAClC;AAED,QAAO;EACL;GACE,MAAM;GACN,SAAS,KAAK,UAAU,iBAAiB,MAAM,EAAE,GAAG;EACrD;EACD;GACE,MAAM;GACN,SAAS;EACV;EACD;GACE,MAAM;GACN,SAAS,KAAK,UAAU,UAAU,MAAM,EAAE,GAAG;EAC9C;EACD;GACE,MAAM;GACN,SAAS,KAAK,UAAU,aAAa,MAAM,EAAE,GAAG;EACjD;EACD;GACE,MAAM;GACN,SAAS,KAAK,UAAU,aAAa,MAAM,EAAE,GAAG;EACjD;EACD;GACE,MAAM;GACN,SAAS;EACV;CACF;AACF"}
1
+ {"version":3,"file":"monorepo-CFtxHeDh.cjs","names":["options: TemplateOptions","_template: TemplateConfig"],"sources":["../src/init/generators/monorepo.ts"],"sourcesContent":["import type {\n GeneratedFile,\n TemplateConfig,\n TemplateOptions,\n} from '../templates/index.js';\n\n/**\n * Generate monorepo root files (pnpm-workspace.yaml, root package.json, etc.)\n */\nexport function generateMonorepoFiles(\n options: TemplateOptions,\n _template: TemplateConfig,\n): GeneratedFile[] {\n if (!options.monorepo) {\n return [];\n }\n\n // Root package.json for monorepo\n const rootPackageJson = {\n name: options.name,\n version: '0.0.1',\n private: true,\n type: 'module',\n scripts: {\n dev: 'turbo dev',\n build: 'turbo build',\n test: 'turbo test',\n 'test:once': 'turbo test:once',\n typecheck: 'turbo typecheck',\n lint: 'biome lint .',\n fmt: 'biome format . --write',\n 'fmt:check': 'biome format .',\n },\n devDependencies: {\n '@biomejs/biome': '~1.9.4',\n turbo: '~2.3.0',\n typescript: '~5.8.2',\n vitest: '~4.0.0',\n },\n };\n\n // pnpm-workspace.yaml - detect folder structure from apiPath\n const apiPathParts = options.apiPath.split('/');\n const appsFolder = apiPathParts[0] || 'apps';\n\n const pnpmWorkspace = `packages:\n - '${appsFolder}/*'\n - 'packages/*'\n`;\n\n // Root biome.json\n const biomeConfig = {\n $schema: 'https://biomejs.dev/schemas/1.9.4/schema.json',\n vcs: {\n enabled: true,\n clientKind: 'git',\n useIgnoreFile: true,\n },\n organizeImports: {\n enabled: true,\n },\n formatter: {\n enabled: true,\n indentStyle: 'space',\n indentWidth: 2,\n lineWidth: 80,\n },\n javascript: {\n formatter: {\n quoteStyle: 'single',\n trailingCommas: 'all',\n semicolons: 'always',\n arrowParentheses: 'always',\n },\n },\n linter: {\n enabled: true,\n rules: {\n recommended: true,\n correctness: {\n noUnusedImports: 'error',\n noUnusedVariables: 'error',\n },\n style: {\n noNonNullAssertion: 'off',\n },\n },\n },\n files: {\n ignore: ['node_modules', 'dist', '.gkm', 'coverage'],\n },\n };\n\n // Root turbo.json\n const turboConfig = {\n $schema: 'https://turbo.build/schema.json',\n tasks: {\n build: {\n dependsOn: ['^build'],\n outputs: ['dist/**'],\n },\n dev: {\n cache: false,\n persistent: true,\n },\n test: {\n dependsOn: ['^build'],\n cache: false,\n },\n 'test:once': {\n dependsOn: ['^build'],\n outputs: ['coverage/**'],\n },\n typecheck: {\n dependsOn: ['^build'],\n outputs: [],\n },\n lint: {\n outputs: [],\n },\n fmt: {\n outputs: [],\n },\n },\n };\n\n // Root .gitignore\n const gitignore = `# Dependencies\nnode_modules/\n\n# Build output\ndist/\n.gkm/\n\n# Environment\n.env\n.env.local\n.env.*.local\n\n# IDE\n.idea/\n.vscode/\n*.swp\n*.swo\n\n# OS\n.DS_Store\nThumbs.db\n\n# Logs\n*.log\nnpm-debug.log*\nyarn-debug.log*\npnpm-debug.log*\n\n# Test coverage\ncoverage/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Turbo\n.turbo/\n`;\n\n // Root tsconfig.json - base config for all packages\n const tsConfig = {\n compilerOptions: {\n target: 'ES2022',\n module: 'NodeNext',\n moduleResolution: 'NodeNext',\n lib: ['ES2022'],\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n forceConsistentCasingInFileNames: true,\n resolveJsonModule: true,\n declaration: true,\n declarationMap: true,\n composite: true,\n },\n exclude: ['node_modules', 'dist'],\n };\n\n return [\n {\n path: 'package.json',\n content: JSON.stringify(rootPackageJson, null, 2) + '\\n',\n },\n {\n path: 'pnpm-workspace.yaml',\n content: pnpmWorkspace,\n },\n {\n path: 'tsconfig.json',\n content: JSON.stringify(tsConfig, null, 2) + '\\n',\n },\n {\n path: 'biome.json',\n content: JSON.stringify(biomeConfig, null, 2) + '\\n',\n },\n {\n path: 'turbo.json',\n content: JSON.stringify(turboConfig, null, 2) + '\\n',\n },\n {\n path: '.gitignore',\n content: gitignore,\n },\n ];\n}\n"],"mappings":";;;;;AASA,SAAgB,sBACdA,SACAC,WACiB;AACjB,MAAK,QAAQ,SACX,QAAO,CAAE;CAIX,MAAM,kBAAkB;EACtB,MAAM,QAAQ;EACd,SAAS;EACT,SAAS;EACT,MAAM;EACN,SAAS;GACP,KAAK;GACL,OAAO;GACP,MAAM;GACN,aAAa;GACb,WAAW;GACX,MAAM;GACN,KAAK;GACL,aAAa;EACd;EACD,iBAAiB;GACf,kBAAkB;GAClB,OAAO;GACP,YAAY;GACZ,QAAQ;EACT;CACF;CAGD,MAAM,eAAe,QAAQ,QAAQ,MAAM,IAAI;CAC/C,MAAM,aAAa,aAAa,MAAM;CAEtC,MAAM,iBAAiB;OAClB,WAAW;;;CAKhB,MAAM,cAAc;EAClB,SAAS;EACT,KAAK;GACH,SAAS;GACT,YAAY;GACZ,eAAe;EAChB;EACD,iBAAiB,EACf,SAAS,KACV;EACD,WAAW;GACT,SAAS;GACT,aAAa;GACb,aAAa;GACb,WAAW;EACZ;EACD,YAAY,EACV,WAAW;GACT,YAAY;GACZ,gBAAgB;GAChB,YAAY;GACZ,kBAAkB;EACnB,EACF;EACD,QAAQ;GACN,SAAS;GACT,OAAO;IACL,aAAa;IACb,aAAa;KACX,iBAAiB;KACjB,mBAAmB;IACpB;IACD,OAAO,EACL,oBAAoB,MACrB;GACF;EACF;EACD,OAAO,EACL,QAAQ;GAAC;GAAgB;GAAQ;GAAQ;EAAW,EACrD;CACF;CAGD,MAAM,cAAc;EAClB,SAAS;EACT,OAAO;GACL,OAAO;IACL,WAAW,CAAC,QAAS;IACrB,SAAS,CAAC,SAAU;GACrB;GACD,KAAK;IACH,OAAO;IACP,YAAY;GACb;GACD,MAAM;IACJ,WAAW,CAAC,QAAS;IACrB,OAAO;GACR;GACD,aAAa;IACX,WAAW,CAAC,QAAS;IACrB,SAAS,CAAC,aAAc;GACzB;GACD,WAAW;IACT,WAAW,CAAC,QAAS;IACrB,SAAS,CAAE;GACZ;GACD,MAAM,EACJ,SAAS,CAAE,EACZ;GACD,KAAK,EACH,SAAS,CAAE,EACZ;EACF;CACF;CAGD,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCnB,MAAM,WAAW;EACf,iBAAiB;GACf,QAAQ;GACR,QAAQ;GACR,kBAAkB;GAClB,KAAK,CAAC,QAAS;GACf,QAAQ;GACR,iBAAiB;GACjB,cAAc;GACd,kCAAkC;GAClC,mBAAmB;GACnB,aAAa;GACb,gBAAgB;GAChB,WAAW;EACZ;EACD,SAAS,CAAC,gBAAgB,MAAO;CAClC;AAED,QAAO;EACL;GACE,MAAM;GACN,SAAS,KAAK,UAAU,iBAAiB,MAAM,EAAE,GAAG;EACrD;EACD;GACE,MAAM;GACN,SAAS;EACV;EACD;GACE,MAAM;GACN,SAAS,KAAK,UAAU,UAAU,MAAM,EAAE,GAAG;EAC9C;EACD;GACE,MAAM;GACN,SAAS,KAAK,UAAU,aAAa,MAAM,EAAE,GAAG;EACjD;EACD;GACE,MAAM;GACN,SAAS,KAAK,UAAU,aAAa,MAAM,EAAE,GAAG;EACjD;EACD;GACE,MAAM;GACN,SAAS;EACV;CACF;AACF"}
@@ -0,0 +1,74 @@
1
+ import { loadConfig } from "./config-Bq72aj8e.mjs";
2
+ import { EndpointGenerator } from "./EndpointGenerator-DGivkPLT.mjs";
3
+ import { OpenApiTsGenerator } from "./OpenApiTsGenerator-BVS4pOH7.mjs";
4
+ import { mkdir, writeFile } from "node:fs/promises";
5
+ import { dirname, join } from "node:path";
6
+
7
+ //#region src/openapi.ts
8
+ /**
9
+ * Fixed output path for generated OpenAPI client (not configurable)
10
+ */
11
+ const OPENAPI_OUTPUT_PATH = "./.gkm/openapi.ts";
12
+ /**
13
+ * Resolve OpenAPI config from GkmConfig
14
+ */
15
+ function resolveOpenApiConfig(config) {
16
+ if (config.openapi === false) return { enabled: false };
17
+ if (config.openapi === true || config.openapi === void 0) return {
18
+ enabled: config.openapi === true,
19
+ title: "API Documentation",
20
+ version: "1.0.0",
21
+ description: "Auto-generated API documentation from endpoints"
22
+ };
23
+ return {
24
+ enabled: config.openapi.enabled !== false,
25
+ title: config.openapi.title || "API Documentation",
26
+ version: config.openapi.version || "1.0.0",
27
+ description: config.openapi.description || "Auto-generated API documentation from endpoints"
28
+ };
29
+ }
30
+ /**
31
+ * Generate OpenAPI spec from endpoints
32
+ * @returns Object with output path and endpoint count, or null if disabled
33
+ */
34
+ async function generateOpenApi(config, options = {}) {
35
+ const logger = options.silent ? { log: () => {} } : console;
36
+ const openApiConfig = resolveOpenApiConfig(config);
37
+ if (!openApiConfig.enabled) return null;
38
+ const endpointGenerator = new EndpointGenerator();
39
+ const loadedEndpoints = await endpointGenerator.load(config.routes);
40
+ if (loadedEndpoints.length === 0) {
41
+ logger.log("No valid endpoints found for OpenAPI generation");
42
+ return null;
43
+ }
44
+ const endpoints = loadedEndpoints.map(({ construct }) => construct);
45
+ const outputPath = join(process.cwd(), OPENAPI_OUTPUT_PATH);
46
+ await mkdir(dirname(outputPath), { recursive: true });
47
+ const tsGenerator = new OpenApiTsGenerator();
48
+ const tsContent = await tsGenerator.generate(endpoints, {
49
+ title: openApiConfig.title,
50
+ version: openApiConfig.version,
51
+ description: openApiConfig.description
52
+ });
53
+ await writeFile(outputPath, tsContent);
54
+ logger.log(`📄 OpenAPI client generated: ${OPENAPI_OUTPUT_PATH}`);
55
+ return {
56
+ outputPath,
57
+ endpointCount: loadedEndpoints.length
58
+ };
59
+ }
60
+ async function openapiCommand(options = {}) {
61
+ const logger = console;
62
+ try {
63
+ const config = await loadConfig(options.cwd);
64
+ if (!config.openapi) config.openapi = { enabled: true };
65
+ const result = await generateOpenApi(config);
66
+ if (result) logger.log(`Found ${result.endpointCount} endpoints`);
67
+ } catch (error) {
68
+ throw new Error(`OpenAPI generation failed: ${error.message}`);
69
+ }
70
+ }
71
+
72
+ //#endregion
73
+ export { OPENAPI_OUTPUT_PATH, generateOpenApi, openapiCommand, resolveOpenApiConfig };
74
+ //# sourceMappingURL=openapi-DA9RkPJl.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-DA9RkPJl.mjs","names":["config: GkmConfig","options: { silent?: boolean }","options: OpenAPIOptions"],"sources":["../src/openapi.ts"],"sourcesContent":["#!/usr/bin/env -S npx tsx\n\nimport { mkdir, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { loadConfig } from './config.js';\nimport { EndpointGenerator } from './generators/EndpointGenerator.js';\nimport { OpenApiTsGenerator } from './generators/OpenApiTsGenerator.js';\nimport type { GkmConfig, OpenApiConfig } from './types.js';\n\ninterface OpenAPIOptions {\n cwd?: string;\n}\n\n/**\n * Fixed output path for generated OpenAPI client (not configurable)\n */\nexport const OPENAPI_OUTPUT_PATH = './.gkm/openapi.ts';\n\n/**\n * Resolve OpenAPI config from GkmConfig\n */\nexport function resolveOpenApiConfig(\n config: GkmConfig,\n): OpenApiConfig & { enabled: boolean } {\n if (config.openapi === false) {\n return { enabled: false };\n }\n\n if (config.openapi === true || config.openapi === undefined) {\n return {\n enabled: config.openapi === true,\n title: 'API Documentation',\n version: '1.0.0',\n description: 'Auto-generated API documentation from endpoints',\n };\n }\n\n return {\n enabled: config.openapi.enabled !== false,\n title: config.openapi.title || 'API Documentation',\n version: config.openapi.version || '1.0.0',\n description:\n config.openapi.description ||\n 'Auto-generated API documentation from endpoints',\n };\n}\n\n/**\n * Generate OpenAPI spec from endpoints\n * @returns Object with output path and endpoint count, or null if disabled\n */\nexport async function generateOpenApi(\n config: GkmConfig,\n options: { silent?: boolean } = {},\n): Promise<{ outputPath: string; endpointCount: number } | null> {\n const logger = options.silent ? { log: () => {} } : console;\n const openApiConfig = resolveOpenApiConfig(config);\n\n if (!openApiConfig.enabled) {\n return null;\n }\n\n const endpointGenerator = new EndpointGenerator();\n const loadedEndpoints = await endpointGenerator.load(config.routes);\n\n if (loadedEndpoints.length === 0) {\n logger.log('No valid endpoints found for OpenAPI generation');\n return null;\n }\n\n const endpoints = loadedEndpoints.map(({ construct }) => construct);\n const outputPath = join(process.cwd(), OPENAPI_OUTPUT_PATH);\n\n await mkdir(dirname(outputPath), { recursive: true });\n\n const tsGenerator = new OpenApiTsGenerator();\n const tsContent = await tsGenerator.generate(endpoints, {\n title: openApiConfig.title!,\n version: openApiConfig.version!,\n description: openApiConfig.description!,\n });\n\n await writeFile(outputPath, tsContent);\n logger.log(`📄 OpenAPI client generated: ${OPENAPI_OUTPUT_PATH}`);\n\n return { outputPath, endpointCount: loadedEndpoints.length };\n}\n\nexport async function openapiCommand(\n options: OpenAPIOptions = {},\n): Promise<void> {\n const logger = console;\n\n try {\n const config = await loadConfig(options.cwd);\n\n // Enable openapi if not configured\n if (!config.openapi) {\n config.openapi = { enabled: true };\n }\n\n const result = await generateOpenApi(config);\n\n if (result) {\n logger.log(`Found ${result.endpointCount} endpoints`);\n }\n } catch (error) {\n throw new Error(`OpenAPI generation failed: ${(error as Error).message}`);\n }\n}\n"],"mappings":";;;;;;;;;;AAgBA,MAAa,sBAAsB;;;;AAKnC,SAAgB,qBACdA,QACsC;AACtC,KAAI,OAAO,YAAY,MACrB,QAAO,EAAE,SAAS,MAAO;AAG3B,KAAI,OAAO,YAAY,QAAQ,OAAO,mBACpC,QAAO;EACL,SAAS,OAAO,YAAY;EAC5B,OAAO;EACP,SAAS;EACT,aAAa;CACd;AAGH,QAAO;EACL,SAAS,OAAO,QAAQ,YAAY;EACpC,OAAO,OAAO,QAAQ,SAAS;EAC/B,SAAS,OAAO,QAAQ,WAAW;EACnC,aACE,OAAO,QAAQ,eACf;CACH;AACF;;;;;AAMD,eAAsB,gBACpBA,QACAC,UAAgC,CAAE,GAC6B;CAC/D,MAAM,SAAS,QAAQ,SAAS,EAAE,KAAK,MAAM,CAAE,EAAE,IAAG;CACpD,MAAM,gBAAgB,qBAAqB,OAAO;AAElD,MAAK,cAAc,QACjB,QAAO;CAGT,MAAM,oBAAoB,IAAI;CAC9B,MAAM,kBAAkB,MAAM,kBAAkB,KAAK,OAAO,OAAO;AAEnE,KAAI,gBAAgB,WAAW,GAAG;AAChC,SAAO,IAAI,kDAAkD;AAC7D,SAAO;CACR;CAED,MAAM,YAAY,gBAAgB,IAAI,CAAC,EAAE,WAAW,KAAK,UAAU;CACnE,MAAM,aAAa,KAAK,QAAQ,KAAK,EAAE,oBAAoB;AAE3D,OAAM,MAAM,QAAQ,WAAW,EAAE,EAAE,WAAW,KAAM,EAAC;CAErD,MAAM,cAAc,IAAI;CACxB,MAAM,YAAY,MAAM,YAAY,SAAS,WAAW;EACtD,OAAO,cAAc;EACrB,SAAS,cAAc;EACvB,aAAa,cAAc;CAC5B,EAAC;AAEF,OAAM,UAAU,YAAY,UAAU;AACtC,QAAO,KAAK,+BAA+B,oBAAoB,EAAE;AAEjE,QAAO;EAAE;EAAY,eAAe,gBAAgB;CAAQ;AAC7D;AAED,eAAsB,eACpBC,UAA0B,CAAE,GACb;CACf,MAAM,SAAS;AAEf,KAAI;EACF,MAAM,SAAS,MAAM,WAAW,QAAQ,IAAI;AAG5C,OAAK,OAAO,QACV,QAAO,UAAU,EAAE,SAAS,KAAM;EAGpC,MAAM,SAAS,MAAM,gBAAgB,OAAO;AAE5C,MAAI,OACF,QAAO,KAAK,QAAQ,OAAO,cAAc,YAAY;CAExD,SAAQ,OAAO;AACd,QAAM,IAAI,OAAO,6BAA8B,MAAgB,QAAQ;CACxE;AACF"}
@@ -0,0 +1,98 @@
1
+ const require_chunk = require('./chunk-CUT6urMc.cjs');
2
+ const require_config = require('./config-CFls09Ey.cjs');
3
+ const require_EndpointGenerator = require('./EndpointGenerator-npWEDoK2.cjs');
4
+ const require_OpenApiTsGenerator = require('./OpenApiTsGenerator-gPIIyppX.cjs');
5
+ const node_fs_promises = require_chunk.__toESM(require("node:fs/promises"));
6
+ const node_path = require_chunk.__toESM(require("node:path"));
7
+
8
+ //#region src/openapi.ts
9
+ /**
10
+ * Fixed output path for generated OpenAPI client (not configurable)
11
+ */
12
+ const OPENAPI_OUTPUT_PATH = "./.gkm/openapi.ts";
13
+ /**
14
+ * Resolve OpenAPI config from GkmConfig
15
+ */
16
+ function resolveOpenApiConfig(config) {
17
+ if (config.openapi === false) return { enabled: false };
18
+ if (config.openapi === true || config.openapi === void 0) return {
19
+ enabled: config.openapi === true,
20
+ title: "API Documentation",
21
+ version: "1.0.0",
22
+ description: "Auto-generated API documentation from endpoints"
23
+ };
24
+ return {
25
+ enabled: config.openapi.enabled !== false,
26
+ title: config.openapi.title || "API Documentation",
27
+ version: config.openapi.version || "1.0.0",
28
+ description: config.openapi.description || "Auto-generated API documentation from endpoints"
29
+ };
30
+ }
31
+ /**
32
+ * Generate OpenAPI spec from endpoints
33
+ * @returns Object with output path and endpoint count, or null if disabled
34
+ */
35
+ async function generateOpenApi(config, options = {}) {
36
+ const logger = options.silent ? { log: () => {} } : console;
37
+ const openApiConfig = resolveOpenApiConfig(config);
38
+ if (!openApiConfig.enabled) return null;
39
+ const endpointGenerator = new require_EndpointGenerator.EndpointGenerator();
40
+ const loadedEndpoints = await endpointGenerator.load(config.routes);
41
+ if (loadedEndpoints.length === 0) {
42
+ logger.log("No valid endpoints found for OpenAPI generation");
43
+ return null;
44
+ }
45
+ const endpoints = loadedEndpoints.map(({ construct }) => construct);
46
+ const outputPath = (0, node_path.join)(process.cwd(), OPENAPI_OUTPUT_PATH);
47
+ await (0, node_fs_promises.mkdir)((0, node_path.dirname)(outputPath), { recursive: true });
48
+ const tsGenerator = new require_OpenApiTsGenerator.OpenApiTsGenerator();
49
+ const tsContent = await tsGenerator.generate(endpoints, {
50
+ title: openApiConfig.title,
51
+ version: openApiConfig.version,
52
+ description: openApiConfig.description
53
+ });
54
+ await (0, node_fs_promises.writeFile)(outputPath, tsContent);
55
+ logger.log(`📄 OpenAPI client generated: ${OPENAPI_OUTPUT_PATH}`);
56
+ return {
57
+ outputPath,
58
+ endpointCount: loadedEndpoints.length
59
+ };
60
+ }
61
+ async function openapiCommand(options = {}) {
62
+ const logger = console;
63
+ try {
64
+ const config = await require_config.loadConfig(options.cwd);
65
+ if (!config.openapi) config.openapi = { enabled: true };
66
+ const result = await generateOpenApi(config);
67
+ if (result) logger.log(`Found ${result.endpointCount} endpoints`);
68
+ } catch (error) {
69
+ throw new Error(`OpenAPI generation failed: ${error.message}`);
70
+ }
71
+ }
72
+
73
+ //#endregion
74
+ Object.defineProperty(exports, 'OPENAPI_OUTPUT_PATH', {
75
+ enumerable: true,
76
+ get: function () {
77
+ return OPENAPI_OUTPUT_PATH;
78
+ }
79
+ });
80
+ Object.defineProperty(exports, 'generateOpenApi', {
81
+ enumerable: true,
82
+ get: function () {
83
+ return generateOpenApi;
84
+ }
85
+ });
86
+ Object.defineProperty(exports, 'openapiCommand', {
87
+ enumerable: true,
88
+ get: function () {
89
+ return openapiCommand;
90
+ }
91
+ });
92
+ Object.defineProperty(exports, 'resolveOpenApiConfig', {
93
+ enumerable: true,
94
+ get: function () {
95
+ return resolveOpenApiConfig;
96
+ }
97
+ });
98
+ //# sourceMappingURL=openapi-DZH6RQHk.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-DZH6RQHk.cjs","names":["config: GkmConfig","options: { silent?: boolean }","EndpointGenerator","OpenApiTsGenerator","options: OpenAPIOptions"],"sources":["../src/openapi.ts"],"sourcesContent":["#!/usr/bin/env -S npx tsx\n\nimport { mkdir, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { loadConfig } from './config.js';\nimport { EndpointGenerator } from './generators/EndpointGenerator.js';\nimport { OpenApiTsGenerator } from './generators/OpenApiTsGenerator.js';\nimport type { GkmConfig, OpenApiConfig } from './types.js';\n\ninterface OpenAPIOptions {\n cwd?: string;\n}\n\n/**\n * Fixed output path for generated OpenAPI client (not configurable)\n */\nexport const OPENAPI_OUTPUT_PATH = './.gkm/openapi.ts';\n\n/**\n * Resolve OpenAPI config from GkmConfig\n */\nexport function resolveOpenApiConfig(\n config: GkmConfig,\n): OpenApiConfig & { enabled: boolean } {\n if (config.openapi === false) {\n return { enabled: false };\n }\n\n if (config.openapi === true || config.openapi === undefined) {\n return {\n enabled: config.openapi === true,\n title: 'API Documentation',\n version: '1.0.0',\n description: 'Auto-generated API documentation from endpoints',\n };\n }\n\n return {\n enabled: config.openapi.enabled !== false,\n title: config.openapi.title || 'API Documentation',\n version: config.openapi.version || '1.0.0',\n description:\n config.openapi.description ||\n 'Auto-generated API documentation from endpoints',\n };\n}\n\n/**\n * Generate OpenAPI spec from endpoints\n * @returns Object with output path and endpoint count, or null if disabled\n */\nexport async function generateOpenApi(\n config: GkmConfig,\n options: { silent?: boolean } = {},\n): Promise<{ outputPath: string; endpointCount: number } | null> {\n const logger = options.silent ? { log: () => {} } : console;\n const openApiConfig = resolveOpenApiConfig(config);\n\n if (!openApiConfig.enabled) {\n return null;\n }\n\n const endpointGenerator = new EndpointGenerator();\n const loadedEndpoints = await endpointGenerator.load(config.routes);\n\n if (loadedEndpoints.length === 0) {\n logger.log('No valid endpoints found for OpenAPI generation');\n return null;\n }\n\n const endpoints = loadedEndpoints.map(({ construct }) => construct);\n const outputPath = join(process.cwd(), OPENAPI_OUTPUT_PATH);\n\n await mkdir(dirname(outputPath), { recursive: true });\n\n const tsGenerator = new OpenApiTsGenerator();\n const tsContent = await tsGenerator.generate(endpoints, {\n title: openApiConfig.title!,\n version: openApiConfig.version!,\n description: openApiConfig.description!,\n });\n\n await writeFile(outputPath, tsContent);\n logger.log(`📄 OpenAPI client generated: ${OPENAPI_OUTPUT_PATH}`);\n\n return { outputPath, endpointCount: loadedEndpoints.length };\n}\n\nexport async function openapiCommand(\n options: OpenAPIOptions = {},\n): Promise<void> {\n const logger = console;\n\n try {\n const config = await loadConfig(options.cwd);\n\n // Enable openapi if not configured\n if (!config.openapi) {\n config.openapi = { enabled: true };\n }\n\n const result = await generateOpenApi(config);\n\n if (result) {\n logger.log(`Found ${result.endpointCount} endpoints`);\n }\n } catch (error) {\n throw new Error(`OpenAPI generation failed: ${(error as Error).message}`);\n }\n}\n"],"mappings":";;;;;;;;;;;AAgBA,MAAa,sBAAsB;;;;AAKnC,SAAgB,qBACdA,QACsC;AACtC,KAAI,OAAO,YAAY,MACrB,QAAO,EAAE,SAAS,MAAO;AAG3B,KAAI,OAAO,YAAY,QAAQ,OAAO,mBACpC,QAAO;EACL,SAAS,OAAO,YAAY;EAC5B,OAAO;EACP,SAAS;EACT,aAAa;CACd;AAGH,QAAO;EACL,SAAS,OAAO,QAAQ,YAAY;EACpC,OAAO,OAAO,QAAQ,SAAS;EAC/B,SAAS,OAAO,QAAQ,WAAW;EACnC,aACE,OAAO,QAAQ,eACf;CACH;AACF;;;;;AAMD,eAAsB,gBACpBA,QACAC,UAAgC,CAAE,GAC6B;CAC/D,MAAM,SAAS,QAAQ,SAAS,EAAE,KAAK,MAAM,CAAE,EAAE,IAAG;CACpD,MAAM,gBAAgB,qBAAqB,OAAO;AAElD,MAAK,cAAc,QACjB,QAAO;CAGT,MAAM,oBAAoB,IAAIC;CAC9B,MAAM,kBAAkB,MAAM,kBAAkB,KAAK,OAAO,OAAO;AAEnE,KAAI,gBAAgB,WAAW,GAAG;AAChC,SAAO,IAAI,kDAAkD;AAC7D,SAAO;CACR;CAED,MAAM,YAAY,gBAAgB,IAAI,CAAC,EAAE,WAAW,KAAK,UAAU;CACnE,MAAM,aAAa,oBAAK,QAAQ,KAAK,EAAE,oBAAoB;AAE3D,OAAM,4BAAM,uBAAQ,WAAW,EAAE,EAAE,WAAW,KAAM,EAAC;CAErD,MAAM,cAAc,IAAIC;CACxB,MAAM,YAAY,MAAM,YAAY,SAAS,WAAW;EACtD,OAAO,cAAc;EACrB,SAAS,cAAc;EACvB,aAAa,cAAc;CAC5B,EAAC;AAEF,OAAM,gCAAU,YAAY,UAAU;AACtC,QAAO,KAAK,+BAA+B,oBAAoB,EAAE;AAEjE,QAAO;EAAE;EAAY,eAAe,gBAAgB;CAAQ;AAC7D;AAED,eAAsB,eACpBC,UAA0B,CAAE,GACb;CACf,MAAM,SAAS;AAEf,KAAI;EACF,MAAM,SAAS,MAAM,0BAAW,QAAQ,IAAI;AAG5C,OAAK,OAAO,QACV,QAAO,UAAU,EAAE,SAAS,KAAM;EAGpC,MAAM,SAAS,MAAM,gBAAgB,OAAO;AAE5C,MAAI,OACF,QAAO,KAAK,QAAQ,OAAO,cAAc,YAAY;CAExD,SAAQ,OAAO;AACd,QAAM,IAAI,OAAO,6BAA8B,MAAgB,QAAQ;CACxE;AACF"}
@@ -170,4 +170,4 @@ Object.defineProperty(exports, 'generateReactQueryCommand', {
170
170
  return generateReactQueryCommand;
171
171
  }
172
172
  });
173
- //# sourceMappingURL=openapi-react-query-DxHjXQvg.cjs.map
173
+ //# sourceMappingURL=openapi-react-query-Cp-w8_05.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"openapi-react-query-DxHjXQvg.cjs","names":["exec","options: ReactQueryOptions","spec: OpenAPISpec","operations: OperationInfo[]","operation: any","schema: any","apiName: string","op: OperationInfo","paramParts: string[]","exports","str: string"],"sources":["../src/openapi-react-query.ts"],"sourcesContent":["#!/usr/bin/env -S npx tsx\n\nimport { exec } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { promisify } from 'node:util';\n\nconst execAsync = promisify(exec);\n\ninterface ReactQueryOptions {\n input?: string;\n output?: string;\n name?: string;\n}\n\ninterface OpenAPISpec {\n openapi: string;\n info?: {\n title?: string;\n version?: string;\n };\n paths: Record<string, Record<string, any>>;\n}\n\nexport async function generateReactQueryCommand(\n options: ReactQueryOptions = {},\n): Promise<void> {\n const logger = console;\n\n try {\n // Read OpenAPI spec\n const inputPath = options.input || join(process.cwd(), 'openapi.json');\n\n if (!existsSync(inputPath)) {\n throw new Error(\n `OpenAPI spec not found at ${inputPath}. Run 'npx @geekmidas/cli openapi' first.`,\n );\n }\n\n const specContent = await readFile(inputPath, 'utf-8');\n const spec: OpenAPISpec = JSON.parse(specContent);\n\n // Generate TypeScript types from OpenAPI spec\n const outputDir = dirname(\n options.output || join(process.cwd(), 'src', 'api', 'hooks.ts'),\n );\n const typesPath = join(outputDir, 'openapi-types.d.ts');\n\n logger.log('Generating TypeScript types from OpenAPI spec...');\n\n try {\n // Use npx to run openapi-typescript\n await execAsync(\n `npx openapi-typescript \"${inputPath}\" -o \"${typesPath}\"`,\n { cwd: process.cwd() },\n );\n logger.log(`TypeScript types generated: ${typesPath}`);\n } catch (error) {\n logger.warn(\n 'Could not generate types with openapi-typescript. Install it for better type inference.',\n );\n logger.warn('Run: npm install -D openapi-typescript');\n\n // Generate basic types file\n await mkdir(dirname(typesPath), { recursive: true });\n await writeFile(\n typesPath,\n `// Auto-generated placeholder types\nexport interface paths {\n [path: string]: {\n [method: string]: {\n operationId?: string;\n parameters?: any;\n requestBody?: any;\n responses?: any;\n };\n };\n}\n`,\n );\n }\n\n // Extract operation info\n const operations = extractOperations(spec);\n\n // Generate TypeScript code\n const code = generateReactQueryCode(\n spec,\n operations,\n options.name || 'API',\n );\n\n // Write output\n const outputPath =\n options.output || join(process.cwd(), 'src', 'api', 'hooks.ts');\n await mkdir(dirname(outputPath), { recursive: true });\n await writeFile(outputPath, code);\n\n logger.log(`React Query hooks generated: ${outputPath}`);\n logger.log(`Generated ${operations.length} hooks`);\n } catch (error) {\n throw new Error(\n `React Query generation failed: ${(error as Error).message}`,\n );\n }\n}\n\ninterface OperationInfo {\n operationId: string;\n path: string;\n method: string;\n endpoint: string; // Full endpoint like 'GET /users/{id}'\n parameters?: Array<{ name: string; in: string; required?: boolean }>;\n requestBody?: boolean;\n responseType?: string;\n}\n\nfunction extractOperations(spec: OpenAPISpec): OperationInfo[] {\n const operations: OperationInfo[] = [];\n\n Object.entries(spec.paths).forEach(([path, methods]) => {\n Object.entries(methods).forEach(([method, operation]) => {\n if (operation.operationId) {\n operations.push({\n operationId: operation.operationId,\n path,\n method: method.toUpperCase(),\n endpoint: `${method.toUpperCase()} ${path}`,\n parameters: operation.parameters,\n requestBody: !!operation.requestBody,\n responseType: extractResponseType(operation),\n });\n }\n });\n });\n\n return operations;\n}\n\nfunction extractResponseType(operation: any): string {\n const responses = operation.responses;\n if (!responses) return 'unknown';\n\n const successResponse = responses['200'] || responses['201'];\n if (!successResponse?.content?.['application/json']?.schema) {\n return 'unknown';\n }\n\n // Basic type inference from schema\n const schema = successResponse.content['application/json'].schema;\n return schemaToTypeString(schema);\n}\n\nfunction schemaToTypeString(schema: any): string {\n if (!schema) return 'unknown';\n\n switch (schema.type) {\n case 'string':\n return 'string';\n case 'number':\n case 'integer':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'array':\n return `Array<${schemaToTypeString(schema.items)}>`;\n case 'object':\n if (schema.properties) {\n const props = Object.entries(schema.properties)\n .map(\n ([key, value]: [string, any]) =>\n `${key}: ${schemaToTypeString(value)}`,\n )\n .join('; ');\n return `{ ${props} }`;\n }\n return 'Record<string, unknown>';\n default:\n return 'unknown';\n }\n}\n\nfunction generateReactQueryCode(\n spec: OpenAPISpec,\n operations: OperationInfo[],\n apiName: string,\n): string {\n const imports = `import { createTypedQueryClient } from '@geekmidas/client';\nimport type { paths } from './openapi-types';\n\n// Create typed query client\nexport const ${apiName.toLowerCase()} = createTypedQueryClient<paths>({\n baseURL: process.env.NEXT_PUBLIC_API_URL || '/api',\n});\n\n// Export individual hooks for better DX\n`;\n\n const queryHooks = operations\n .filter((op) => op.method === 'GET')\n .map((op) => generateQueryHook(op, apiName))\n .join('\\n\\n');\n\n const mutationHooks = operations\n .filter((op) => op.method !== 'GET')\n .map((op) => generateMutationHook(op, apiName))\n .join('\\n\\n');\n\n const typeExports = generateTypeExports(operations);\n\n return `${imports}\n// Query Hooks\n${queryHooks}\n\n// Mutation Hooks\n${mutationHooks}\n\n// Type exports for convenience\n${typeExports}\n\n// Re-export the api for advanced usage\nexport { ${apiName.toLowerCase()} };\n`;\n}\n\nfunction generateQueryHook(op: OperationInfo, apiName: string): string {\n const hookName = `use${capitalize(op.operationId)}`;\n const endpoint = op.endpoint;\n const hasParams = op.parameters?.some((p) => p.in === 'path');\n const hasQuery = op.parameters?.some((p) => p.in === 'query');\n\n // Generate properly typed hook\n let params = '';\n let args = '';\n\n if (hasParams || hasQuery) {\n const paramParts: string[] = [];\n if (hasParams) {\n const pathParams =\n op.parameters?.filter((p) => p.in === 'path').map((p) => p.name) || [];\n paramParts.push(\n `params: { ${pathParams.map((p) => `${p}: string`).join('; ')} }`,\n );\n }\n if (hasQuery) {\n paramParts.push(`query?: Record<string, any>`);\n }\n params = `config: { ${paramParts.join('; ')} }, `;\n args = ', config';\n }\n\n return `export const ${hookName} = (\n ${params}options?: Parameters<typeof ${apiName.toLowerCase()}.useQuery>[2]\n) => {\n return ${apiName.toLowerCase()}.useQuery('${endpoint}' as any${args}, options);\n};`;\n}\n\nfunction generateMutationHook(op: OperationInfo, apiName: string): string {\n const hookName = `use${capitalize(op.operationId)}`;\n const endpoint = op.endpoint;\n\n return `export const ${hookName} = (\n options?: Parameters<typeof ${apiName.toLowerCase()}.useMutation>[1]\n) => {\n return ${apiName.toLowerCase()}.useMutation('${endpoint}' as any, options);\n};`;\n}\n\nfunction generateTypeExports(operations: OperationInfo[]): string {\n const exports = operations.map((op) => {\n const typeName = capitalize(op.operationId);\n const isQuery = op.method === 'GET';\n\n if (isQuery) {\n return `export type ${typeName}Response = Awaited<ReturnType<ReturnType<typeof use${typeName}>['data']>>;`;\n } else {\n return `export type ${typeName}Response = Awaited<ReturnType<ReturnType<typeof use${typeName}>['mutateAsync']>>;`;\n }\n });\n\n return exports.join('\\n');\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"openapi-react-query-Cp-w8_05.cjs","names":["exec","options: ReactQueryOptions","spec: OpenAPISpec","operations: OperationInfo[]","operation: any","schema: any","apiName: string","op: OperationInfo","paramParts: string[]","exports","str: string"],"sources":["../src/openapi-react-query.ts"],"sourcesContent":["#!/usr/bin/env -S npx tsx\n\nimport { exec } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { promisify } from 'node:util';\n\nconst execAsync = promisify(exec);\n\ninterface ReactQueryOptions {\n input?: string;\n output?: string;\n name?: string;\n}\n\ninterface OpenAPISpec {\n openapi: string;\n info?: {\n title?: string;\n version?: string;\n };\n paths: Record<string, Record<string, any>>;\n}\n\nexport async function generateReactQueryCommand(\n options: ReactQueryOptions = {},\n): Promise<void> {\n const logger = console;\n\n try {\n // Read OpenAPI spec\n const inputPath = options.input || join(process.cwd(), 'openapi.json');\n\n if (!existsSync(inputPath)) {\n throw new Error(\n `OpenAPI spec not found at ${inputPath}. Run 'npx @geekmidas/cli openapi' first.`,\n );\n }\n\n const specContent = await readFile(inputPath, 'utf-8');\n const spec: OpenAPISpec = JSON.parse(specContent);\n\n // Generate TypeScript types from OpenAPI spec\n const outputDir = dirname(\n options.output || join(process.cwd(), 'src', 'api', 'hooks.ts'),\n );\n const typesPath = join(outputDir, 'openapi-types.d.ts');\n\n logger.log('Generating TypeScript types from OpenAPI spec...');\n\n try {\n // Use npx to run openapi-typescript\n await execAsync(\n `npx openapi-typescript \"${inputPath}\" -o \"${typesPath}\"`,\n { cwd: process.cwd() },\n );\n logger.log(`TypeScript types generated: ${typesPath}`);\n } catch (error) {\n logger.warn(\n 'Could not generate types with openapi-typescript. Install it for better type inference.',\n );\n logger.warn('Run: npm install -D openapi-typescript');\n\n // Generate basic types file\n await mkdir(dirname(typesPath), { recursive: true });\n await writeFile(\n typesPath,\n `// Auto-generated placeholder types\nexport interface paths {\n [path: string]: {\n [method: string]: {\n operationId?: string;\n parameters?: any;\n requestBody?: any;\n responses?: any;\n };\n };\n}\n`,\n );\n }\n\n // Extract operation info\n const operations = extractOperations(spec);\n\n // Generate TypeScript code\n const code = generateReactQueryCode(\n spec,\n operations,\n options.name || 'API',\n );\n\n // Write output\n const outputPath =\n options.output || join(process.cwd(), 'src', 'api', 'hooks.ts');\n await mkdir(dirname(outputPath), { recursive: true });\n await writeFile(outputPath, code);\n\n logger.log(`React Query hooks generated: ${outputPath}`);\n logger.log(`Generated ${operations.length} hooks`);\n } catch (error) {\n throw new Error(\n `React Query generation failed: ${(error as Error).message}`,\n );\n }\n}\n\ninterface OperationInfo {\n operationId: string;\n path: string;\n method: string;\n endpoint: string; // Full endpoint like 'GET /users/{id}'\n parameters?: Array<{ name: string; in: string; required?: boolean }>;\n requestBody?: boolean;\n responseType?: string;\n}\n\nfunction extractOperations(spec: OpenAPISpec): OperationInfo[] {\n const operations: OperationInfo[] = [];\n\n Object.entries(spec.paths).forEach(([path, methods]) => {\n Object.entries(methods).forEach(([method, operation]) => {\n if (operation.operationId) {\n operations.push({\n operationId: operation.operationId,\n path,\n method: method.toUpperCase(),\n endpoint: `${method.toUpperCase()} ${path}`,\n parameters: operation.parameters,\n requestBody: !!operation.requestBody,\n responseType: extractResponseType(operation),\n });\n }\n });\n });\n\n return operations;\n}\n\nfunction extractResponseType(operation: any): string {\n const responses = operation.responses;\n if (!responses) return 'unknown';\n\n const successResponse = responses['200'] || responses['201'];\n if (!successResponse?.content?.['application/json']?.schema) {\n return 'unknown';\n }\n\n // Basic type inference from schema\n const schema = successResponse.content['application/json'].schema;\n return schemaToTypeString(schema);\n}\n\nfunction schemaToTypeString(schema: any): string {\n if (!schema) return 'unknown';\n\n switch (schema.type) {\n case 'string':\n return 'string';\n case 'number':\n case 'integer':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'array':\n return `Array<${schemaToTypeString(schema.items)}>`;\n case 'object':\n if (schema.properties) {\n const props = Object.entries(schema.properties)\n .map(\n ([key, value]: [string, any]) =>\n `${key}: ${schemaToTypeString(value)}`,\n )\n .join('; ');\n return `{ ${props} }`;\n }\n return 'Record<string, unknown>';\n default:\n return 'unknown';\n }\n}\n\nfunction generateReactQueryCode(\n spec: OpenAPISpec,\n operations: OperationInfo[],\n apiName: string,\n): string {\n const imports = `import { createTypedQueryClient } from '@geekmidas/client';\nimport type { paths } from './openapi-types';\n\n// Create typed query client\nexport const ${apiName.toLowerCase()} = createTypedQueryClient<paths>({\n baseURL: process.env.NEXT_PUBLIC_API_URL || '/api',\n});\n\n// Export individual hooks for better DX\n`;\n\n const queryHooks = operations\n .filter((op) => op.method === 'GET')\n .map((op) => generateQueryHook(op, apiName))\n .join('\\n\\n');\n\n const mutationHooks = operations\n .filter((op) => op.method !== 'GET')\n .map((op) => generateMutationHook(op, apiName))\n .join('\\n\\n');\n\n const typeExports = generateTypeExports(operations);\n\n return `${imports}\n// Query Hooks\n${queryHooks}\n\n// Mutation Hooks\n${mutationHooks}\n\n// Type exports for convenience\n${typeExports}\n\n// Re-export the api for advanced usage\nexport { ${apiName.toLowerCase()} };\n`;\n}\n\nfunction generateQueryHook(op: OperationInfo, apiName: string): string {\n const hookName = `use${capitalize(op.operationId)}`;\n const endpoint = op.endpoint;\n const hasParams = op.parameters?.some((p) => p.in === 'path');\n const hasQuery = op.parameters?.some((p) => p.in === 'query');\n\n // Generate properly typed hook\n let params = '';\n let args = '';\n\n if (hasParams || hasQuery) {\n const paramParts: string[] = [];\n if (hasParams) {\n const pathParams =\n op.parameters?.filter((p) => p.in === 'path').map((p) => p.name) || [];\n paramParts.push(\n `params: { ${pathParams.map((p) => `${p}: string`).join('; ')} }`,\n );\n }\n if (hasQuery) {\n paramParts.push(`query?: Record<string, any>`);\n }\n params = `config: { ${paramParts.join('; ')} }, `;\n args = ', config';\n }\n\n return `export const ${hookName} = (\n ${params}options?: Parameters<typeof ${apiName.toLowerCase()}.useQuery>[2]\n) => {\n return ${apiName.toLowerCase()}.useQuery('${endpoint}' as any${args}, options);\n};`;\n}\n\nfunction generateMutationHook(op: OperationInfo, apiName: string): string {\n const hookName = `use${capitalize(op.operationId)}`;\n const endpoint = op.endpoint;\n\n return `export const ${hookName} = (\n options?: Parameters<typeof ${apiName.toLowerCase()}.useMutation>[1]\n) => {\n return ${apiName.toLowerCase()}.useMutation('${endpoint}' as any, options);\n};`;\n}\n\nfunction generateTypeExports(operations: OperationInfo[]): string {\n const exports = operations.map((op) => {\n const typeName = capitalize(op.operationId);\n const isQuery = op.method === 'GET';\n\n if (isQuery) {\n return `export type ${typeName}Response = Awaited<ReturnType<ReturnType<typeof use${typeName}>['data']>>;`;\n } else {\n return `export type ${typeName}Response = Awaited<ReturnType<ReturnType<typeof use${typeName}>['mutateAsync']>>;`;\n }\n });\n\n return exports.join('\\n');\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n"],"mappings":";;;;;;;;AAQA,MAAM,YAAY,yBAAUA,wBAAK;AAiBjC,eAAsB,0BACpBC,UAA6B,CAAE,GAChB;CACf,MAAM,SAAS;AAEf,KAAI;EAEF,MAAM,YAAY,QAAQ,SAAS,oBAAK,QAAQ,KAAK,EAAE,eAAe;AAEtE,OAAK,wBAAW,UAAU,CACxB,OAAM,IAAI,OACP,4BAA4B,UAAU;EAI3C,MAAM,cAAc,MAAM,+BAAS,WAAW,QAAQ;EACtD,MAAMC,OAAoB,KAAK,MAAM,YAAY;EAGjD,MAAM,YAAY,uBAChB,QAAQ,UAAU,oBAAK,QAAQ,KAAK,EAAE,OAAO,OAAO,WAAW,CAChE;EACD,MAAM,YAAY,oBAAK,WAAW,qBAAqB;AAEvD,SAAO,IAAI,mDAAmD;AAE9D,MAAI;AAEF,SAAM,WACH,0BAA0B,UAAU,QAAQ,UAAU,IACvD,EAAE,KAAK,QAAQ,KAAK,CAAE,EACvB;AACD,UAAO,KAAK,8BAA8B,UAAU,EAAE;EACvD,SAAQ,OAAO;AACd,UAAO,KACL,0FACD;AACD,UAAO,KAAK,yCAAyC;AAGrD,SAAM,4BAAM,uBAAQ,UAAU,EAAE,EAAE,WAAW,KAAM,EAAC;AACpD,SAAM,gCACJ,YACC;;;;;;;;;;;EAYF;EACF;EAGD,MAAM,aAAa,kBAAkB,KAAK;EAG1C,MAAM,OAAO,uBACX,MACA,YACA,QAAQ,QAAQ,MACjB;EAGD,MAAM,aACJ,QAAQ,UAAU,oBAAK,QAAQ,KAAK,EAAE,OAAO,OAAO,WAAW;AACjE,QAAM,4BAAM,uBAAQ,WAAW,EAAE,EAAE,WAAW,KAAM,EAAC;AACrD,QAAM,gCAAU,YAAY,KAAK;AAEjC,SAAO,KAAK,+BAA+B,WAAW,EAAE;AACxD,SAAO,KAAK,YAAY,WAAW,OAAO,QAAQ;CACnD,SAAQ,OAAO;AACd,QAAM,IAAI,OACP,iCAAkC,MAAgB,QAAQ;CAE9D;AACF;AAYD,SAAS,kBAAkBA,MAAoC;CAC7D,MAAMC,aAA8B,CAAE;AAEtC,QAAO,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,QAAQ,KAAK;AACtD,SAAO,QAAQ,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,UAAU,KAAK;AACvD,OAAI,UAAU,YACZ,YAAW,KAAK;IACd,aAAa,UAAU;IACvB;IACA,QAAQ,OAAO,aAAa;IAC5B,WAAW,EAAE,OAAO,aAAa,CAAC,GAAG,KAAK;IAC1C,YAAY,UAAU;IACtB,eAAe,UAAU;IACzB,cAAc,oBAAoB,UAAU;GAC7C,EAAC;EAEL,EAAC;CACH,EAAC;AAEF,QAAO;AACR;AAED,SAAS,oBAAoBC,WAAwB;CACnD,MAAM,YAAY,UAAU;AAC5B,MAAK,UAAW,QAAO;CAEvB,MAAM,kBAAkB,UAAU,UAAU,UAAU;AACtD,MAAK,iBAAiB,UAAU,qBAAqB,OACnD,QAAO;CAIT,MAAM,SAAS,gBAAgB,QAAQ,oBAAoB;AAC3D,QAAO,mBAAmB,OAAO;AAClC;AAED,SAAS,mBAAmBC,QAAqB;AAC/C,MAAK,OAAQ,QAAO;AAEpB,SAAQ,OAAO,MAAf;EACE,KAAK,SACH,QAAO;EACT,KAAK;EACL,KAAK,UACH,QAAO;EACT,KAAK,UACH,QAAO;EACT,KAAK,QACH,SAAQ,QAAQ,mBAAmB,OAAO,MAAM,CAAC;EACnD,KAAK;AACH,OAAI,OAAO,YAAY;IACrB,MAAM,QAAQ,OAAO,QAAQ,OAAO,WAAW,CAC5C,IACC,CAAC,CAAC,KAAK,MAAqB,MACzB,EAAE,IAAI,IAAI,mBAAmB,MAAM,CAAC,EACxC,CACA,KAAK,KAAK;AACb,YAAQ,IAAI,MAAM;GACnB;AACD,UAAO;EACT,QACE,QAAO;CACV;AACF;AAED,SAAS,uBACPH,MACAC,YACAG,SACQ;CACR,MAAM,WAAW;;;;eAIJ,QAAQ,aAAa,CAAC;;;;;;CAOnC,MAAM,aAAa,WAChB,OAAO,CAAC,OAAO,GAAG,WAAW,MAAM,CACnC,IAAI,CAAC,OAAO,kBAAkB,IAAI,QAAQ,CAAC,CAC3C,KAAK,OAAO;CAEf,MAAM,gBAAgB,WACnB,OAAO,CAAC,OAAO,GAAG,WAAW,MAAM,CACnC,IAAI,CAAC,OAAO,qBAAqB,IAAI,QAAQ,CAAC,CAC9C,KAAK,OAAO;CAEf,MAAM,cAAc,oBAAoB,WAAW;AAEnD,SAAQ,EAAE,QAAQ;;EAElB,WAAW;;;EAGX,cAAc;;;EAGd,YAAY;;;WAGH,QAAQ,aAAa,CAAC;;AAEhC;AAED,SAAS,kBAAkBC,IAAmBD,SAAyB;CACrE,MAAM,YAAY,KAAK,WAAW,GAAG,YAAY,CAAC;CAClD,MAAM,WAAW,GAAG;CACpB,MAAM,YAAY,GAAG,YAAY,KAAK,CAAC,MAAM,EAAE,OAAO,OAAO;CAC7D,MAAM,WAAW,GAAG,YAAY,KAAK,CAAC,MAAM,EAAE,OAAO,QAAQ;CAG7D,IAAI,SAAS;CACb,IAAI,OAAO;AAEX,KAAI,aAAa,UAAU;EACzB,MAAME,aAAuB,CAAE;AAC/B,MAAI,WAAW;GACb,MAAM,aACJ,GAAG,YAAY,OAAO,CAAC,MAAM,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAE;AACxE,cAAW,MACR,YAAY,WAAW,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,KAAK,KAAK,CAAC,IAC/D;EACF;AACD,MAAI,SACF,YAAW,MAAM,6BAA6B;AAEhD,YAAU,YAAY,WAAW,KAAK,KAAK,CAAC;AAC5C,SAAO;CACR;AAED,SAAQ,eAAe,SAAS;IAC9B,OAAO,8BAA8B,QAAQ,aAAa,CAAC;;WAEpD,QAAQ,aAAa,CAAC,aAAa,SAAS,UAAU,KAAK;;AAErE;AAED,SAAS,qBAAqBD,IAAmBD,SAAyB;CACxE,MAAM,YAAY,KAAK,WAAW,GAAG,YAAY,CAAC;CAClD,MAAM,WAAW,GAAG;AAEpB,SAAQ,eAAe,SAAS;gCACF,QAAQ,aAAa,CAAC;;WAE3C,QAAQ,aAAa,CAAC,gBAAgB,SAAS;;AAEzD;AAED,SAAS,oBAAoBH,YAAqC;CAChE,MAAMM,YAAU,WAAW,IAAI,CAAC,OAAO;EACrC,MAAM,WAAW,WAAW,GAAG,YAAY;EAC3C,MAAM,UAAU,GAAG,WAAW;AAE9B,MAAI,QACF,SAAQ,cAAc,SAAS,qDAAqD,SAAS;MAE7F,SAAQ,cAAc,SAAS,qDAAqD,SAAS;CAEhG,EAAC;AAEF,QAAO,UAAQ,KAAK,KAAK;AAC1B;AAED,SAAS,WAAWC,KAAqB;AACvC,QAAO,IAAI,OAAO,EAAE,CAAC,aAAa,GAAG,IAAI,MAAM,EAAE;AAClD"}
@@ -164,4 +164,4 @@ function capitalize(str) {
164
164
 
165
165
  //#endregion
166
166
  export { generateReactQueryCommand };
167
- //# sourceMappingURL=openapi-react-query-o7Mp1Jd5.mjs.map
167
+ //# sourceMappingURL=openapi-react-query-_-B3s8v_.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"openapi-react-query-o7Mp1Jd5.mjs","names":["options: ReactQueryOptions","spec: OpenAPISpec","operations: OperationInfo[]","operation: any","schema: any","apiName: string","op: OperationInfo","paramParts: string[]","str: string"],"sources":["../src/openapi-react-query.ts"],"sourcesContent":["#!/usr/bin/env -S npx tsx\n\nimport { exec } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { promisify } from 'node:util';\n\nconst execAsync = promisify(exec);\n\ninterface ReactQueryOptions {\n input?: string;\n output?: string;\n name?: string;\n}\n\ninterface OpenAPISpec {\n openapi: string;\n info?: {\n title?: string;\n version?: string;\n };\n paths: Record<string, Record<string, any>>;\n}\n\nexport async function generateReactQueryCommand(\n options: ReactQueryOptions = {},\n): Promise<void> {\n const logger = console;\n\n try {\n // Read OpenAPI spec\n const inputPath = options.input || join(process.cwd(), 'openapi.json');\n\n if (!existsSync(inputPath)) {\n throw new Error(\n `OpenAPI spec not found at ${inputPath}. Run 'npx @geekmidas/cli openapi' first.`,\n );\n }\n\n const specContent = await readFile(inputPath, 'utf-8');\n const spec: OpenAPISpec = JSON.parse(specContent);\n\n // Generate TypeScript types from OpenAPI spec\n const outputDir = dirname(\n options.output || join(process.cwd(), 'src', 'api', 'hooks.ts'),\n );\n const typesPath = join(outputDir, 'openapi-types.d.ts');\n\n logger.log('Generating TypeScript types from OpenAPI spec...');\n\n try {\n // Use npx to run openapi-typescript\n await execAsync(\n `npx openapi-typescript \"${inputPath}\" -o \"${typesPath}\"`,\n { cwd: process.cwd() },\n );\n logger.log(`TypeScript types generated: ${typesPath}`);\n } catch (error) {\n logger.warn(\n 'Could not generate types with openapi-typescript. Install it for better type inference.',\n );\n logger.warn('Run: npm install -D openapi-typescript');\n\n // Generate basic types file\n await mkdir(dirname(typesPath), { recursive: true });\n await writeFile(\n typesPath,\n `// Auto-generated placeholder types\nexport interface paths {\n [path: string]: {\n [method: string]: {\n operationId?: string;\n parameters?: any;\n requestBody?: any;\n responses?: any;\n };\n };\n}\n`,\n );\n }\n\n // Extract operation info\n const operations = extractOperations(spec);\n\n // Generate TypeScript code\n const code = generateReactQueryCode(\n spec,\n operations,\n options.name || 'API',\n );\n\n // Write output\n const outputPath =\n options.output || join(process.cwd(), 'src', 'api', 'hooks.ts');\n await mkdir(dirname(outputPath), { recursive: true });\n await writeFile(outputPath, code);\n\n logger.log(`React Query hooks generated: ${outputPath}`);\n logger.log(`Generated ${operations.length} hooks`);\n } catch (error) {\n throw new Error(\n `React Query generation failed: ${(error as Error).message}`,\n );\n }\n}\n\ninterface OperationInfo {\n operationId: string;\n path: string;\n method: string;\n endpoint: string; // Full endpoint like 'GET /users/{id}'\n parameters?: Array<{ name: string; in: string; required?: boolean }>;\n requestBody?: boolean;\n responseType?: string;\n}\n\nfunction extractOperations(spec: OpenAPISpec): OperationInfo[] {\n const operations: OperationInfo[] = [];\n\n Object.entries(spec.paths).forEach(([path, methods]) => {\n Object.entries(methods).forEach(([method, operation]) => {\n if (operation.operationId) {\n operations.push({\n operationId: operation.operationId,\n path,\n method: method.toUpperCase(),\n endpoint: `${method.toUpperCase()} ${path}`,\n parameters: operation.parameters,\n requestBody: !!operation.requestBody,\n responseType: extractResponseType(operation),\n });\n }\n });\n });\n\n return operations;\n}\n\nfunction extractResponseType(operation: any): string {\n const responses = operation.responses;\n if (!responses) return 'unknown';\n\n const successResponse = responses['200'] || responses['201'];\n if (!successResponse?.content?.['application/json']?.schema) {\n return 'unknown';\n }\n\n // Basic type inference from schema\n const schema = successResponse.content['application/json'].schema;\n return schemaToTypeString(schema);\n}\n\nfunction schemaToTypeString(schema: any): string {\n if (!schema) return 'unknown';\n\n switch (schema.type) {\n case 'string':\n return 'string';\n case 'number':\n case 'integer':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'array':\n return `Array<${schemaToTypeString(schema.items)}>`;\n case 'object':\n if (schema.properties) {\n const props = Object.entries(schema.properties)\n .map(\n ([key, value]: [string, any]) =>\n `${key}: ${schemaToTypeString(value)}`,\n )\n .join('; ');\n return `{ ${props} }`;\n }\n return 'Record<string, unknown>';\n default:\n return 'unknown';\n }\n}\n\nfunction generateReactQueryCode(\n spec: OpenAPISpec,\n operations: OperationInfo[],\n apiName: string,\n): string {\n const imports = `import { createTypedQueryClient } from '@geekmidas/client';\nimport type { paths } from './openapi-types';\n\n// Create typed query client\nexport const ${apiName.toLowerCase()} = createTypedQueryClient<paths>({\n baseURL: process.env.NEXT_PUBLIC_API_URL || '/api',\n});\n\n// Export individual hooks for better DX\n`;\n\n const queryHooks = operations\n .filter((op) => op.method === 'GET')\n .map((op) => generateQueryHook(op, apiName))\n .join('\\n\\n');\n\n const mutationHooks = operations\n .filter((op) => op.method !== 'GET')\n .map((op) => generateMutationHook(op, apiName))\n .join('\\n\\n');\n\n const typeExports = generateTypeExports(operations);\n\n return `${imports}\n// Query Hooks\n${queryHooks}\n\n// Mutation Hooks\n${mutationHooks}\n\n// Type exports for convenience\n${typeExports}\n\n// Re-export the api for advanced usage\nexport { ${apiName.toLowerCase()} };\n`;\n}\n\nfunction generateQueryHook(op: OperationInfo, apiName: string): string {\n const hookName = `use${capitalize(op.operationId)}`;\n const endpoint = op.endpoint;\n const hasParams = op.parameters?.some((p) => p.in === 'path');\n const hasQuery = op.parameters?.some((p) => p.in === 'query');\n\n // Generate properly typed hook\n let params = '';\n let args = '';\n\n if (hasParams || hasQuery) {\n const paramParts: string[] = [];\n if (hasParams) {\n const pathParams =\n op.parameters?.filter((p) => p.in === 'path').map((p) => p.name) || [];\n paramParts.push(\n `params: { ${pathParams.map((p) => `${p}: string`).join('; ')} }`,\n );\n }\n if (hasQuery) {\n paramParts.push(`query?: Record<string, any>`);\n }\n params = `config: { ${paramParts.join('; ')} }, `;\n args = ', config';\n }\n\n return `export const ${hookName} = (\n ${params}options?: Parameters<typeof ${apiName.toLowerCase()}.useQuery>[2]\n) => {\n return ${apiName.toLowerCase()}.useQuery('${endpoint}' as any${args}, options);\n};`;\n}\n\nfunction generateMutationHook(op: OperationInfo, apiName: string): string {\n const hookName = `use${capitalize(op.operationId)}`;\n const endpoint = op.endpoint;\n\n return `export const ${hookName} = (\n options?: Parameters<typeof ${apiName.toLowerCase()}.useMutation>[1]\n) => {\n return ${apiName.toLowerCase()}.useMutation('${endpoint}' as any, options);\n};`;\n}\n\nfunction generateTypeExports(operations: OperationInfo[]): string {\n const exports = operations.map((op) => {\n const typeName = capitalize(op.operationId);\n const isQuery = op.method === 'GET';\n\n if (isQuery) {\n return `export type ${typeName}Response = Awaited<ReturnType<ReturnType<typeof use${typeName}>['data']>>;`;\n } else {\n return `export type ${typeName}Response = Awaited<ReturnType<ReturnType<typeof use${typeName}>['mutateAsync']>>;`;\n }\n });\n\n return exports.join('\\n');\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"openapi-react-query-_-B3s8v_.mjs","names":["options: ReactQueryOptions","spec: OpenAPISpec","operations: OperationInfo[]","operation: any","schema: any","apiName: string","op: OperationInfo","paramParts: string[]","str: string"],"sources":["../src/openapi-react-query.ts"],"sourcesContent":["#!/usr/bin/env -S npx tsx\n\nimport { exec } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { promisify } from 'node:util';\n\nconst execAsync = promisify(exec);\n\ninterface ReactQueryOptions {\n input?: string;\n output?: string;\n name?: string;\n}\n\ninterface OpenAPISpec {\n openapi: string;\n info?: {\n title?: string;\n version?: string;\n };\n paths: Record<string, Record<string, any>>;\n}\n\nexport async function generateReactQueryCommand(\n options: ReactQueryOptions = {},\n): Promise<void> {\n const logger = console;\n\n try {\n // Read OpenAPI spec\n const inputPath = options.input || join(process.cwd(), 'openapi.json');\n\n if (!existsSync(inputPath)) {\n throw new Error(\n `OpenAPI spec not found at ${inputPath}. Run 'npx @geekmidas/cli openapi' first.`,\n );\n }\n\n const specContent = await readFile(inputPath, 'utf-8');\n const spec: OpenAPISpec = JSON.parse(specContent);\n\n // Generate TypeScript types from OpenAPI spec\n const outputDir = dirname(\n options.output || join(process.cwd(), 'src', 'api', 'hooks.ts'),\n );\n const typesPath = join(outputDir, 'openapi-types.d.ts');\n\n logger.log('Generating TypeScript types from OpenAPI spec...');\n\n try {\n // Use npx to run openapi-typescript\n await execAsync(\n `npx openapi-typescript \"${inputPath}\" -o \"${typesPath}\"`,\n { cwd: process.cwd() },\n );\n logger.log(`TypeScript types generated: ${typesPath}`);\n } catch (error) {\n logger.warn(\n 'Could not generate types with openapi-typescript. Install it for better type inference.',\n );\n logger.warn('Run: npm install -D openapi-typescript');\n\n // Generate basic types file\n await mkdir(dirname(typesPath), { recursive: true });\n await writeFile(\n typesPath,\n `// Auto-generated placeholder types\nexport interface paths {\n [path: string]: {\n [method: string]: {\n operationId?: string;\n parameters?: any;\n requestBody?: any;\n responses?: any;\n };\n };\n}\n`,\n );\n }\n\n // Extract operation info\n const operations = extractOperations(spec);\n\n // Generate TypeScript code\n const code = generateReactQueryCode(\n spec,\n operations,\n options.name || 'API',\n );\n\n // Write output\n const outputPath =\n options.output || join(process.cwd(), 'src', 'api', 'hooks.ts');\n await mkdir(dirname(outputPath), { recursive: true });\n await writeFile(outputPath, code);\n\n logger.log(`React Query hooks generated: ${outputPath}`);\n logger.log(`Generated ${operations.length} hooks`);\n } catch (error) {\n throw new Error(\n `React Query generation failed: ${(error as Error).message}`,\n );\n }\n}\n\ninterface OperationInfo {\n operationId: string;\n path: string;\n method: string;\n endpoint: string; // Full endpoint like 'GET /users/{id}'\n parameters?: Array<{ name: string; in: string; required?: boolean }>;\n requestBody?: boolean;\n responseType?: string;\n}\n\nfunction extractOperations(spec: OpenAPISpec): OperationInfo[] {\n const operations: OperationInfo[] = [];\n\n Object.entries(spec.paths).forEach(([path, methods]) => {\n Object.entries(methods).forEach(([method, operation]) => {\n if (operation.operationId) {\n operations.push({\n operationId: operation.operationId,\n path,\n method: method.toUpperCase(),\n endpoint: `${method.toUpperCase()} ${path}`,\n parameters: operation.parameters,\n requestBody: !!operation.requestBody,\n responseType: extractResponseType(operation),\n });\n }\n });\n });\n\n return operations;\n}\n\nfunction extractResponseType(operation: any): string {\n const responses = operation.responses;\n if (!responses) return 'unknown';\n\n const successResponse = responses['200'] || responses['201'];\n if (!successResponse?.content?.['application/json']?.schema) {\n return 'unknown';\n }\n\n // Basic type inference from schema\n const schema = successResponse.content['application/json'].schema;\n return schemaToTypeString(schema);\n}\n\nfunction schemaToTypeString(schema: any): string {\n if (!schema) return 'unknown';\n\n switch (schema.type) {\n case 'string':\n return 'string';\n case 'number':\n case 'integer':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'array':\n return `Array<${schemaToTypeString(schema.items)}>`;\n case 'object':\n if (schema.properties) {\n const props = Object.entries(schema.properties)\n .map(\n ([key, value]: [string, any]) =>\n `${key}: ${schemaToTypeString(value)}`,\n )\n .join('; ');\n return `{ ${props} }`;\n }\n return 'Record<string, unknown>';\n default:\n return 'unknown';\n }\n}\n\nfunction generateReactQueryCode(\n spec: OpenAPISpec,\n operations: OperationInfo[],\n apiName: string,\n): string {\n const imports = `import { createTypedQueryClient } from '@geekmidas/client';\nimport type { paths } from './openapi-types';\n\n// Create typed query client\nexport const ${apiName.toLowerCase()} = createTypedQueryClient<paths>({\n baseURL: process.env.NEXT_PUBLIC_API_URL || '/api',\n});\n\n// Export individual hooks for better DX\n`;\n\n const queryHooks = operations\n .filter((op) => op.method === 'GET')\n .map((op) => generateQueryHook(op, apiName))\n .join('\\n\\n');\n\n const mutationHooks = operations\n .filter((op) => op.method !== 'GET')\n .map((op) => generateMutationHook(op, apiName))\n .join('\\n\\n');\n\n const typeExports = generateTypeExports(operations);\n\n return `${imports}\n// Query Hooks\n${queryHooks}\n\n// Mutation Hooks\n${mutationHooks}\n\n// Type exports for convenience\n${typeExports}\n\n// Re-export the api for advanced usage\nexport { ${apiName.toLowerCase()} };\n`;\n}\n\nfunction generateQueryHook(op: OperationInfo, apiName: string): string {\n const hookName = `use${capitalize(op.operationId)}`;\n const endpoint = op.endpoint;\n const hasParams = op.parameters?.some((p) => p.in === 'path');\n const hasQuery = op.parameters?.some((p) => p.in === 'query');\n\n // Generate properly typed hook\n let params = '';\n let args = '';\n\n if (hasParams || hasQuery) {\n const paramParts: string[] = [];\n if (hasParams) {\n const pathParams =\n op.parameters?.filter((p) => p.in === 'path').map((p) => p.name) || [];\n paramParts.push(\n `params: { ${pathParams.map((p) => `${p}: string`).join('; ')} }`,\n );\n }\n if (hasQuery) {\n paramParts.push(`query?: Record<string, any>`);\n }\n params = `config: { ${paramParts.join('; ')} }, `;\n args = ', config';\n }\n\n return `export const ${hookName} = (\n ${params}options?: Parameters<typeof ${apiName.toLowerCase()}.useQuery>[2]\n) => {\n return ${apiName.toLowerCase()}.useQuery('${endpoint}' as any${args}, options);\n};`;\n}\n\nfunction generateMutationHook(op: OperationInfo, apiName: string): string {\n const hookName = `use${capitalize(op.operationId)}`;\n const endpoint = op.endpoint;\n\n return `export const ${hookName} = (\n options?: Parameters<typeof ${apiName.toLowerCase()}.useMutation>[1]\n) => {\n return ${apiName.toLowerCase()}.useMutation('${endpoint}' as any, options);\n};`;\n}\n\nfunction generateTypeExports(operations: OperationInfo[]): string {\n const exports = operations.map((op) => {\n const typeName = capitalize(op.operationId);\n const isQuery = op.method === 'GET';\n\n if (isQuery) {\n return `export type ${typeName}Response = Awaited<ReturnType<ReturnType<typeof use${typeName}>['data']>>;`;\n } else {\n return `export type ${typeName}Response = Awaited<ReturnType<ReturnType<typeof use${typeName}>['mutateAsync']>>;`;\n }\n });\n\n return exports.join('\\n');\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env -S npx tsx
2
- const require_openapi_react_query = require('./openapi-react-query-DxHjXQvg.cjs');
2
+ const require_openapi_react_query = require('./openapi-react-query-Cp-w8_05.cjs');
3
3
 
4
4
  exports.generateReactQueryCommand = require_openapi_react_query.generateReactQueryCommand;