@geekmidas/cli 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/README.md +119 -0
  2. package/dist/config-Bq72aj8e.mjs.map +1 -1
  3. package/dist/config-CFls09Ey.cjs.map +1 -1
  4. package/dist/config.d.cts +2 -2
  5. package/dist/config.d.mts +2 -2
  6. package/dist/index.cjs +2561 -34
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.mjs +2556 -29
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/openapi-Mwy2_R4W.mjs +957 -0
  11. package/dist/openapi-Mwy2_R4W.mjs.map +1 -0
  12. package/dist/{openapi-react-query-_-B3s8v_.mjs → openapi-react-query-CcciaVu5.mjs} +1 -1
  13. package/dist/{openapi-react-query-_-B3s8v_.mjs.map → openapi-react-query-CcciaVu5.mjs.map} +1 -1
  14. package/dist/{openapi-react-query-Cp-w8_05.cjs → openapi-react-query-o5iMi8tz.cjs} +1 -1
  15. package/dist/{openapi-react-query-Cp-w8_05.cjs.map → openapi-react-query-o5iMi8tz.cjs.map} +1 -1
  16. package/dist/openapi-react-query.cjs +1 -1
  17. package/dist/openapi-react-query.mjs +1 -1
  18. package/dist/openapi-tAIbJJU_.cjs +993 -0
  19. package/dist/openapi-tAIbJJU_.cjs.map +1 -0
  20. package/dist/openapi.cjs +1 -4
  21. package/dist/openapi.d.cts +1 -1
  22. package/dist/openapi.d.mts +1 -1
  23. package/dist/openapi.mjs +1 -4
  24. package/dist/{types-Bi7VzDUZ.d.mts → types-B3TXoj7v.d.mts} +21 -53
  25. package/dist/{types-KmjzMgu8.d.cts → types-C0hwnSjm.d.cts} +21 -53
  26. package/package.json +6 -6
  27. package/src/build/types.ts +13 -0
  28. package/src/config.ts +1 -0
  29. package/src/dev/index.ts +71 -8
  30. package/src/generators/EndpointGenerator.ts +46 -5
  31. package/src/generators/__tests__/EndpointGenerator.spec.ts +1 -1
  32. package/src/init/generators/config.ts +6 -1
  33. package/src/init/generators/package.ts +5 -1
  34. package/src/init/index.ts +9 -1
  35. package/src/init/templates/api.ts +31 -0
  36. package/src/init/templates/index.ts +1 -0
  37. package/src/init/templates/minimal.ts +83 -0
  38. package/src/types.ts +19 -0
  39. package/tsdown.config.ts +6 -0
  40. package/dist/CronGenerator-CCRYptuT.mjs +0 -55
  41. package/dist/CronGenerator-CCRYptuT.mjs.map +0 -1
  42. package/dist/CronGenerator-D4TWXQbh.cjs +0 -61
  43. package/dist/CronGenerator-D4TWXQbh.cjs.map +0 -1
  44. package/dist/CronGenerator-DWS3CCZt.d.cts +0 -14
  45. package/dist/CronGenerator-DZjdkEjI.d.mts +0 -14
  46. package/dist/EndpointGenerator-DGivkPLT.mjs +0 -335
  47. package/dist/EndpointGenerator-DGivkPLT.mjs.map +0 -1
  48. package/dist/EndpointGenerator-Dh7kMtuL.d.mts +0 -19
  49. package/dist/EndpointGenerator-npWEDoK2.cjs +0 -341
  50. package/dist/EndpointGenerator-npWEDoK2.cjs.map +0 -1
  51. package/dist/EndpointGenerator-zBsie_7s.d.cts +0 -19
  52. package/dist/FunctionGenerator-BmDHo27U.d.mts +0 -14
  53. package/dist/FunctionGenerator-CVk0h8tO.mjs +0 -54
  54. package/dist/FunctionGenerator-CVk0h8tO.mjs.map +0 -1
  55. package/dist/FunctionGenerator-DXjXBxUd.d.cts +0 -14
  56. package/dist/FunctionGenerator-DYTnyr4c.cjs +0 -60
  57. package/dist/FunctionGenerator-DYTnyr4c.cjs.map +0 -1
  58. package/dist/Generator-BGY-2dgI.d.cts +0 -27
  59. package/dist/Generator-CDt4pB3W.mjs +0 -41
  60. package/dist/Generator-CDt4pB3W.mjs.map +0 -1
  61. package/dist/Generator-CLVplqm2.cjs +0 -47
  62. package/dist/Generator-CLVplqm2.cjs.map +0 -1
  63. package/dist/Generator-yi9DH5TN.d.mts +0 -27
  64. package/dist/OpenApiTsGenerator-BVS4pOH7.mjs +0 -495
  65. package/dist/OpenApiTsGenerator-BVS4pOH7.mjs.map +0 -1
  66. package/dist/OpenApiTsGenerator-gPIIyppX.cjs +0 -501
  67. package/dist/OpenApiTsGenerator-gPIIyppX.cjs.map +0 -1
  68. package/dist/SubscriberGenerator-Bb-z3Kvx.d.cts +0 -15
  69. package/dist/SubscriberGenerator-CwsXqCpS.d.mts +0 -15
  70. package/dist/SubscriberGenerator-DABaJXML.mjs +0 -200
  71. package/dist/SubscriberGenerator-DABaJXML.mjs.map +0 -1
  72. package/dist/SubscriberGenerator-D_zpNGFr.cjs +0 -206
  73. package/dist/SubscriberGenerator-D_zpNGFr.cjs.map +0 -1
  74. package/dist/api-Bp5TIl1R.mjs +0 -167
  75. package/dist/api-Bp5TIl1R.mjs.map +0 -1
  76. package/dist/api-D4W9-tdZ.cjs +0 -173
  77. package/dist/api-D4W9-tdZ.cjs.map +0 -1
  78. package/dist/build/index.cjs +0 -15
  79. package/dist/build/index.d.cts +0 -7
  80. package/dist/build/index.d.mts +0 -7
  81. package/dist/build/index.mjs +0 -15
  82. package/dist/build/manifests.cjs +0 -4
  83. package/dist/build/manifests.d.cts +0 -13
  84. package/dist/build/manifests.d.mts +0 -13
  85. package/dist/build/manifests.mjs +0 -3
  86. package/dist/build/providerResolver.cjs +0 -5
  87. package/dist/build/providerResolver.d.cts +0 -23
  88. package/dist/build/providerResolver.d.mts +0 -23
  89. package/dist/build/providerResolver.mjs +0 -3
  90. package/dist/build/types.cjs +0 -0
  91. package/dist/build/types.d.cts +0 -3
  92. package/dist/build/types.d.mts +0 -3
  93. package/dist/build/types.mjs +0 -0
  94. package/dist/build-Cu6Mi0Lf.mjs +0 -87
  95. package/dist/build-Cu6Mi0Lf.mjs.map +0 -1
  96. package/dist/build-wmt8ZcmA.cjs +0 -93
  97. package/dist/build-wmt8ZcmA.cjs.map +0 -1
  98. package/dist/config-BP1IZynR.cjs +0 -168
  99. package/dist/config-BP1IZynR.cjs.map +0 -1
  100. package/dist/config-CIzRhm_D.d.mts +0 -11
  101. package/dist/config-CvehIYsb.d.cts +0 -11
  102. package/dist/config-UCK12Lrr.mjs +0 -162
  103. package/dist/config-UCK12Lrr.mjs.map +0 -1
  104. package/dist/dev/index.cjs +0 -17
  105. package/dist/dev/index.d.cts +0 -36
  106. package/dist/dev/index.d.mts +0 -36
  107. package/dist/dev/index.mjs +0 -13
  108. package/dist/dev-BBPWSllq.mjs +0 -348
  109. package/dist/dev-BBPWSllq.mjs.map +0 -1
  110. package/dist/dev-C2lCgE53.cjs +0 -378
  111. package/dist/dev-C2lCgE53.cjs.map +0 -1
  112. package/dist/docker-2-ipZDOJ.cjs +0 -119
  113. package/dist/docker-2-ipZDOJ.cjs.map +0 -1
  114. package/dist/docker-31GNwU3F.mjs +0 -113
  115. package/dist/docker-31GNwU3F.mjs.map +0 -1
  116. package/dist/env-CQ3hXAAW.d.mts +0 -11
  117. package/dist/env-CS0jvg7k.cjs +0 -144
  118. package/dist/env-CS0jvg7k.cjs.map +0 -1
  119. package/dist/env-D4YFgMqo.d.cts +0 -11
  120. package/dist/env-DEeVOvVu.mjs +0 -138
  121. package/dist/env-DEeVOvVu.mjs.map +0 -1
  122. package/dist/generators/CronGenerator.cjs +0 -4
  123. package/dist/generators/CronGenerator.d.cts +0 -5
  124. package/dist/generators/CronGenerator.d.mts +0 -5
  125. package/dist/generators/CronGenerator.mjs +0 -4
  126. package/dist/generators/EndpointGenerator.cjs +0 -4
  127. package/dist/generators/EndpointGenerator.d.cts +0 -5
  128. package/dist/generators/EndpointGenerator.d.mts +0 -5
  129. package/dist/generators/EndpointGenerator.mjs +0 -4
  130. package/dist/generators/FunctionGenerator.cjs +0 -4
  131. package/dist/generators/FunctionGenerator.d.cts +0 -5
  132. package/dist/generators/FunctionGenerator.d.mts +0 -5
  133. package/dist/generators/FunctionGenerator.mjs +0 -4
  134. package/dist/generators/Generator.cjs +0 -3
  135. package/dist/generators/Generator.d.cts +0 -4
  136. package/dist/generators/Generator.d.mts +0 -4
  137. package/dist/generators/Generator.mjs +0 -3
  138. package/dist/generators/OpenApiTsGenerator.cjs +0 -3
  139. package/dist/generators/OpenApiTsGenerator.d.cts +0 -44
  140. package/dist/generators/OpenApiTsGenerator.d.mts +0 -44
  141. package/dist/generators/OpenApiTsGenerator.mjs +0 -3
  142. package/dist/generators/SubscriberGenerator.cjs +0 -4
  143. package/dist/generators/SubscriberGenerator.d.cts +0 -5
  144. package/dist/generators/SubscriberGenerator.d.mts +0 -5
  145. package/dist/generators/SubscriberGenerator.mjs +0 -4
  146. package/dist/generators/index.cjs +0 -12
  147. package/dist/generators/index.d.cts +0 -8
  148. package/dist/generators/index.d.mts +0 -8
  149. package/dist/generators/index.mjs +0 -8
  150. package/dist/generators-3IemvCLk.cjs +0 -0
  151. package/dist/generators-FNpdfN6J.mjs +0 -0
  152. package/dist/index-DG6xNQMH.d.cts +0 -81
  153. package/dist/index-DZgrOOOW.d.mts +0 -81
  154. package/dist/init/generators/config.cjs +0 -3
  155. package/dist/init/generators/config.d.cts +0 -3
  156. package/dist/init/generators/config.d.mts +0 -3
  157. package/dist/init/generators/config.mjs +0 -3
  158. package/dist/init/generators/docker.cjs +0 -3
  159. package/dist/init/generators/docker.d.cts +0 -11
  160. package/dist/init/generators/docker.d.mts +0 -11
  161. package/dist/init/generators/docker.mjs +0 -3
  162. package/dist/init/generators/env.cjs +0 -3
  163. package/dist/init/generators/env.d.cts +0 -3
  164. package/dist/init/generators/env.d.mts +0 -3
  165. package/dist/init/generators/env.mjs +0 -3
  166. package/dist/init/generators/index.cjs +0 -14
  167. package/dist/init/generators/index.d.cts +0 -6
  168. package/dist/init/generators/index.d.mts +0 -6
  169. package/dist/init/generators/index.mjs +0 -11
  170. package/dist/init/generators/models.cjs +0 -3
  171. package/dist/init/generators/models.d.cts +0 -11
  172. package/dist/init/generators/models.d.mts +0 -11
  173. package/dist/init/generators/models.mjs +0 -3
  174. package/dist/init/generators/monorepo.cjs +0 -3
  175. package/dist/init/generators/monorepo.d.cts +0 -11
  176. package/dist/init/generators/monorepo.d.mts +0 -11
  177. package/dist/init/generators/monorepo.mjs +0 -3
  178. package/dist/init/generators/package.cjs +0 -8
  179. package/dist/init/generators/package.d.cts +0 -3
  180. package/dist/init/generators/package.d.mts +0 -3
  181. package/dist/init/generators/package.mjs +0 -8
  182. package/dist/init/generators/source.cjs +0 -3
  183. package/dist/init/generators/source.d.cts +0 -3
  184. package/dist/init/generators/source.d.mts +0 -3
  185. package/dist/init/generators/source.mjs +0 -3
  186. package/dist/init/index.cjs +0 -16
  187. package/dist/init/index.d.cts +0 -17
  188. package/dist/init/index.d.mts +0 -17
  189. package/dist/init/index.mjs +0 -16
  190. package/dist/init/templates/api.cjs +0 -3
  191. package/dist/init/templates/api.d.cts +0 -7
  192. package/dist/init/templates/api.d.mts +0 -7
  193. package/dist/init/templates/api.mjs +0 -3
  194. package/dist/init/templates/index.cjs +0 -12
  195. package/dist/init/templates/index.d.cts +0 -2
  196. package/dist/init/templates/index.d.mts +0 -2
  197. package/dist/init/templates/index.mjs +0 -7
  198. package/dist/init/templates/minimal.cjs +0 -3
  199. package/dist/init/templates/minimal.d.cts +0 -7
  200. package/dist/init/templates/minimal.d.mts +0 -7
  201. package/dist/init/templates/minimal.mjs +0 -3
  202. package/dist/init/templates/serverless.cjs +0 -3
  203. package/dist/init/templates/serverless.d.cts +0 -7
  204. package/dist/init/templates/serverless.d.mts +0 -7
  205. package/dist/init/templates/serverless.mjs +0 -3
  206. package/dist/init/templates/worker.cjs +0 -3
  207. package/dist/init/templates/worker.d.cts +0 -7
  208. package/dist/init/templates/worker.d.mts +0 -7
  209. package/dist/init/templates/worker.mjs +0 -3
  210. package/dist/init/utils.cjs +0 -7
  211. package/dist/init/utils.d.cts +0 -25
  212. package/dist/init/utils.d.mts +0 -25
  213. package/dist/init/utils.mjs +0 -3
  214. package/dist/init-BMA7xi8r.mjs +0 -161
  215. package/dist/init-BMA7xi8r.mjs.map +0 -1
  216. package/dist/init-D-7WEk-b.cjs +0 -167
  217. package/dist/init-D-7WEk-b.cjs.map +0 -1
  218. package/dist/manifests-BNKG6AXf.mjs +0 -68
  219. package/dist/manifests-BNKG6AXf.mjs.map +0 -1
  220. package/dist/manifests-D13Ej8AE.cjs +0 -80
  221. package/dist/manifests-D13Ej8AE.cjs.map +0 -1
  222. package/dist/minimal-BkyASH_C.mjs +0 -93
  223. package/dist/minimal-BkyASH_C.mjs.map +0 -1
  224. package/dist/minimal-CSFggzdH.cjs +0 -99
  225. package/dist/minimal-CSFggzdH.cjs.map +0 -1
  226. package/dist/models-BWlDfviw.mjs +0 -115
  227. package/dist/models-BWlDfviw.mjs.map +0 -1
  228. package/dist/models-BapGSoHC.cjs +0 -121
  229. package/dist/models-BapGSoHC.cjs.map +0 -1
  230. package/dist/monorepo-BBOWhkcd.mjs +0 -184
  231. package/dist/monorepo-BBOWhkcd.mjs.map +0 -1
  232. package/dist/monorepo-CFtxHeDh.cjs +0 -190
  233. package/dist/monorepo-CFtxHeDh.cjs.map +0 -1
  234. package/dist/openapi-DA9RkPJl.mjs +0 -74
  235. package/dist/openapi-DA9RkPJl.mjs.map +0 -1
  236. package/dist/openapi-DZH6RQHk.cjs +0 -98
  237. package/dist/openapi-DZH6RQHk.cjs.map +0 -1
  238. package/dist/package-6h-7QfJZ.d.cts +0 -11
  239. package/dist/package-BCe_KvGv.d.mts +0 -11
  240. package/dist/package-C3If80n1.mjs +0 -57
  241. package/dist/package-C3If80n1.mjs.map +0 -1
  242. package/dist/package-Dk8IMBOB.cjs +0 -62
  243. package/dist/package-Dk8IMBOB.cjs.map +0 -1
  244. package/dist/providerResolver-DEVKngbC.mjs +0 -96
  245. package/dist/providerResolver-DEVKngbC.mjs.map +0 -1
  246. package/dist/providerResolver-DOTbN9jo.cjs +0 -114
  247. package/dist/providerResolver-DOTbN9jo.cjs.map +0 -1
  248. package/dist/serverless-AGOS-l3G.cjs +0 -119
  249. package/dist/serverless-AGOS-l3G.cjs.map +0 -1
  250. package/dist/serverless-D5HjJByU.mjs +0 -113
  251. package/dist/serverless-D5HjJByU.mjs.map +0 -1
  252. package/dist/source-C1cyfHcF.cjs +0 -17
  253. package/dist/source-C1cyfHcF.cjs.map +0 -1
  254. package/dist/source-C3LiNUV9.d.mts +0 -11
  255. package/dist/source-CkQHBpwu.mjs +0 -11
  256. package/dist/source-CkQHBpwu.mjs.map +0 -1
  257. package/dist/source-Dtcjbokc.d.cts +0 -11
  258. package/dist/templates-C0EMmhwb.mjs +0 -88
  259. package/dist/templates-C0EMmhwb.mjs.map +0 -1
  260. package/dist/templates-CbgQ9dw0.cjs +0 -123
  261. package/dist/templates-CbgQ9dw0.cjs.map +0 -1
  262. package/dist/types-D2xYkOal.d.mts +0 -51
  263. package/dist/types-DA-r8HWZ.d.cts +0 -51
  264. package/dist/types.cjs +0 -0
  265. package/dist/types.d.cts +0 -2
  266. package/dist/types.d.mts +0 -2
  267. package/dist/types.mjs +0 -0
  268. package/dist/utils-CKEzCxc1.mjs +0 -69
  269. package/dist/utils-CKEzCxc1.mjs.map +0 -1
  270. package/dist/utils-DSdN2MTt.cjs +0 -99
  271. package/dist/utils-DSdN2MTt.cjs.map +0 -1
  272. package/dist/worker-CGhlqNH-.cjs +0 -156
  273. package/dist/worker-CGhlqNH-.cjs.map +0 -1
  274. package/dist/worker-CiP420As.mjs +0 -150
  275. package/dist/worker-CiP420As.mjs.map +0 -1
@@ -1,173 +0,0 @@
1
-
2
- //#region src/init/templates/api.ts
3
- const apiTemplate = {
4
- name: "api",
5
- description: "Full API with auth, database, services",
6
- dependencies: {
7
- "@geekmidas/constructs": "workspace:*",
8
- "@geekmidas/envkit": "workspace:*",
9
- "@geekmidas/logger": "workspace:*",
10
- "@geekmidas/services": "workspace:*",
11
- "@geekmidas/errors": "workspace:*",
12
- "@geekmidas/auth": "workspace:*",
13
- hono: "~4.8.2",
14
- pino: "~9.6.0"
15
- },
16
- devDependencies: {
17
- "@biomejs/biome": "~1.9.4",
18
- "@geekmidas/cli": "workspace:*",
19
- "@types/node": "~22.0.0",
20
- tsx: "~4.20.0",
21
- turbo: "~2.3.0",
22
- typescript: "~5.8.2",
23
- vitest: "~4.0.0"
24
- },
25
- scripts: {
26
- dev: "gkm dev",
27
- build: "gkm build",
28
- test: "vitest",
29
- "test:once": "vitest run",
30
- typecheck: "tsc --noEmit",
31
- lint: "biome lint .",
32
- fmt: "biome format . --write",
33
- "fmt:check": "biome format ."
34
- },
35
- files: (options) => {
36
- const { loggerType, routesStructure } = options;
37
- const loggerContent = `import { createLogger } from '@geekmidas/logger/${loggerType}';
38
-
39
- export const logger = createLogger();
40
- `;
41
- const getRoutePath = (file) => {
42
- switch (routesStructure) {
43
- case "centralized-endpoints": return `src/endpoints/${file}`;
44
- case "centralized-routes": return `src/routes/${file}`;
45
- case "domain-based": {
46
- const parts = file.split("/");
47
- if (parts.length === 1) return `src/${file.replace(".ts", "")}/routes/index.ts`;
48
- return `src/${parts[0]}/routes/${parts.slice(1).join("/")}`;
49
- }
50
- }
51
- };
52
- const files = [
53
- {
54
- path: "src/config/env.ts",
55
- content: `import { EnvironmentParser } from '@geekmidas/envkit';
56
-
57
- export const envParser = new EnvironmentParser(process.env);
58
-
59
- export const config = envParser
60
- .create((get) => ({
61
- port: get('PORT').string().transform(Number).default(3000),
62
- nodeEnv: get('NODE_ENV').string().default('development'),
63
- jwtSecret: get('JWT_SECRET').string().default('change-me-in-production'),${options.database ? `
64
- database: {
65
- url: get('DATABASE_URL').string().default('postgresql://localhost:5432/mydb'),
66
- },` : ""}
67
- }))
68
- .parse();
69
- `
70
- },
71
- {
72
- path: "src/config/logger.ts",
73
- content: loggerContent
74
- },
75
- {
76
- path: getRoutePath("health.ts"),
77
- content: `import { e } from '@geekmidas/constructs/endpoints';
78
-
79
- export default e
80
- .get('/health')
81
- .handle(async () => ({
82
- status: 'ok',
83
- timestamp: new Date().toISOString(),
84
- }));
85
- `
86
- },
87
- {
88
- path: getRoutePath("users/list.ts"),
89
- content: `import { e } from '@geekmidas/constructs/endpoints';
90
-
91
- export default e
92
- .get('/users')
93
- .handle(async () => ({
94
- users: [
95
- { id: '1', name: 'Alice' },
96
- { id: '2', name: 'Bob' },
97
- ],
98
- }));
99
- `
100
- },
101
- {
102
- path: getRoutePath("users/get.ts"),
103
- content: `import { e } from '@geekmidas/constructs/endpoints';
104
- import { z } from 'zod';
105
-
106
- export default e
107
- .get('/users/:id')
108
- .params(z.object({ id: z.string() }))
109
- .handle(async ({ params }) => ({
110
- id: params.id,
111
- name: 'Alice',
112
- email: 'alice@example.com',
113
- }));
114
- `
115
- }
116
- ];
117
- if (options.database) files.push({
118
- path: "src/services/database.ts",
119
- content: `import type { Service } from '@geekmidas/services';
120
- import { Kysely, PostgresDialect } from 'kysely';
121
- import pg from 'pg';
122
-
123
- // Define your database schema
124
- export interface Database {
125
- users: {
126
- id: string;
127
- name: string;
128
- email: string;
129
- created_at: Date;
130
- };
131
- }
132
-
133
- export const databaseService = {
134
- serviceName: 'database' as const,
135
- async register(envParser) {
136
- const config = envParser
137
- .create((get) => ({
138
- url: get('DATABASE_URL').string(),
139
- }))
140
- .parse();
141
-
142
- return new Kysely<Database>({
143
- dialect: new PostgresDialect({
144
- pool: new pg.Pool({ connectionString: config.url }),
145
- }),
146
- });
147
- },
148
- } satisfies Service<'database', Kysely<Database>>;
149
- `
150
- });
151
- if (options.telescope) files.push({
152
- path: "src/config/telescope.ts",
153
- content: `import { Telescope } from '@geekmidas/telescope';
154
- import { InMemoryStorage } from '@geekmidas/telescope/storage/memory';
155
-
156
- export const telescope = new Telescope({
157
- storage: new InMemoryStorage({ maxEntries: 100 }),
158
- enabled: process.env.NODE_ENV === 'development',
159
- });
160
- `
161
- });
162
- return files;
163
- }
164
- };
165
-
166
- //#endregion
167
- Object.defineProperty(exports, 'apiTemplate', {
168
- enumerable: true,
169
- get: function () {
170
- return apiTemplate;
171
- }
172
- });
173
- //# sourceMappingURL=api-D4W9-tdZ.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-D4W9-tdZ.cjs","names":["apiTemplate: TemplateConfig","options: TemplateOptions","file: string","files: GeneratedFile[]"],"sources":["../src/init/templates/api.ts"],"sourcesContent":["import type {\n GeneratedFile,\n TemplateConfig,\n TemplateOptions,\n} from './index.js';\n\nexport const apiTemplate: TemplateConfig = {\n name: 'api',\n description: 'Full API with auth, database, services',\n\n dependencies: {\n '@geekmidas/constructs': 'workspace:*',\n '@geekmidas/envkit': 'workspace:*',\n '@geekmidas/logger': 'workspace:*',\n '@geekmidas/services': 'workspace:*',\n '@geekmidas/errors': 'workspace:*',\n '@geekmidas/auth': '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 const parts = file.split('/');\n if (parts.length === 1) {\n return `src/${file.replace('.ts', '')}/routes/index.ts`;\n }\n return `src/${parts[0]}/routes/${parts.slice(1).join('/')}`;\n }\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 jwtSecret: get('JWT_SECRET').string().default('change-me-in-production'),${\n options.database\n ? `\n database: {\n url: get('DATABASE_URL').string().default('postgresql://localhost:5432/mydb'),\n },`\n : ''\n }\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 // users endpoints\n {\n path: getRoutePath('users/list.ts'),\n content: `import { e } from '@geekmidas/constructs/endpoints';\n\nexport default e\n .get('/users')\n .handle(async () => ({\n users: [\n { id: '1', name: 'Alice' },\n { id: '2', name: 'Bob' },\n ],\n }));\n`,\n },\n {\n path: getRoutePath('users/get.ts'),\n content: `import { e } from '@geekmidas/constructs/endpoints';\nimport { z } from 'zod';\n\nexport default e\n .get('/users/:id')\n .params(z.object({ id: z.string() }))\n .handle(async ({ params }) => ({\n id: params.id,\n name: 'Alice',\n email: 'alice@example.com',\n }));\n`,\n },\n ];\n\n // Add database service if enabled\n if (options.database) {\n files.push({\n path: 'src/services/database.ts',\n content: `import type { Service } from '@geekmidas/services';\nimport { Kysely, PostgresDialect } from 'kysely';\nimport pg from 'pg';\n\n// Define your database schema\nexport interface Database {\n users: {\n id: string;\n name: string;\n email: string;\n created_at: Date;\n };\n}\n\nexport const databaseService = {\n serviceName: 'database' as const,\n async register(envParser) {\n const config = envParser\n .create((get) => ({\n url: get('DATABASE_URL').string(),\n }))\n .parse();\n\n return new Kysely<Database>({\n dialect: new PostgresDialect({\n pool: new pg.Pool({ connectionString: config.url }),\n }),\n });\n },\n} satisfies Service<'database', Kysely<Database>>;\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,cAA8B;CACzC,MAAM;CACN,aAAa;CAEb,cAAc;EACZ,yBAAyB;EACzB,qBAAqB;EACrB,qBAAqB;EACrB,uBAAuB;EACvB,qBAAqB;EACrB,mBAAmB;EACnB,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,gBAAgB;KACnB,MAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,SAAI,MAAM,WAAW,EACnB,SAAQ,MAAM,KAAK,QAAQ,OAAO,GAAG,CAAC;AAExC,aAAQ,MAAM,MAAM,GAAG,UAAU,MAAM,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IAC3D;GACF;EACF;EAED,MAAMC,QAAyB;GAE7B;IACE,MAAM;IACN,UAAU;;;;;;;;+EASZ,QAAQ,YACH;;;UAID,GACL;;;;GAIE;GAGD;IACE,MAAM;IACN,SAAS;GACV;GAGD;IACE,MAAM,aAAa,YAAY;IAC/B,UAAU;;;;;;;;;GASX;GAGD;IACE,MAAM,aAAa,gBAAgB;IACnC,UAAU;;;;;;;;;;;GAWX;GACD;IACE,MAAM,aAAa,eAAe;IAClC,UAAU;;;;;;;;;;;;GAYX;EACF;AAGD,MAAI,QAAQ,SACV,OAAM,KAAK;GACT,MAAM;GACN,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BX,EAAC;AAIJ,MAAI,QAAQ,UACV,OAAM,KAAK;GACT,MAAM;GACN,UAAU;;;;;;;;EAQX,EAAC;AAGJ,SAAO;CACR;AACF"}
@@ -1,15 +0,0 @@
1
- require('../config-CFls09Ey.cjs');
2
- require('../providerResolver-DOTbN9jo.cjs');
3
- require('../Generator-CLVplqm2.cjs');
4
- require('../CronGenerator-D4TWXQbh.cjs');
5
- require('../EndpointGenerator-npWEDoK2.cjs');
6
- require('../FunctionGenerator-DYTnyr4c.cjs');
7
- require('../SubscriberGenerator-D_zpNGFr.cjs');
8
- require('../generators-3IemvCLk.cjs');
9
- require('../OpenApiTsGenerator-gPIIyppX.cjs');
10
- require('../openapi-DZH6RQHk.cjs');
11
- require('../dev-C2lCgE53.cjs');
12
- require('../manifests-D13Ej8AE.cjs');
13
- const require_build = require('../build-wmt8ZcmA.cjs');
14
-
15
- exports.buildCommand = require_build.buildCommand;
@@ -1,7 +0,0 @@
1
- import { BuildOptions } from "../types-KmjzMgu8.cjs";
2
-
3
- //#region src/build/index.d.ts
4
- declare function buildCommand(options: BuildOptions): Promise<void>;
5
- //#endregion
6
- export { buildCommand };
7
- //# sourceMappingURL=index.d.cts.map
@@ -1,7 +0,0 @@
1
- import { BuildOptions } from "../types-Bi7VzDUZ.mjs";
2
-
3
- //#region src/build/index.d.ts
4
- declare function buildCommand(options: BuildOptions): Promise<void>;
5
- //#endregion
6
- export { buildCommand };
7
- //# sourceMappingURL=index.d.mts.map
@@ -1,15 +0,0 @@
1
- import "../config-Bq72aj8e.mjs";
2
- import "../providerResolver-DEVKngbC.mjs";
3
- import "../Generator-CDt4pB3W.mjs";
4
- import "../CronGenerator-CCRYptuT.mjs";
5
- import "../EndpointGenerator-DGivkPLT.mjs";
6
- import "../FunctionGenerator-CVk0h8tO.mjs";
7
- import "../SubscriberGenerator-DABaJXML.mjs";
8
- import "../generators-FNpdfN6J.mjs";
9
- import "../OpenApiTsGenerator-BVS4pOH7.mjs";
10
- import "../openapi-DA9RkPJl.mjs";
11
- import "../dev-BBPWSllq.mjs";
12
- import "../manifests-BNKG6AXf.mjs";
13
- import { buildCommand } from "../build-Cu6Mi0Lf.mjs";
14
-
15
- export { buildCommand };
@@ -1,4 +0,0 @@
1
- const require_manifests = require('../manifests-D13Ej8AE.cjs');
2
-
3
- exports.generateAwsManifest = require_manifests.generateAwsManifest;
4
- exports.generateServerManifest = require_manifests.generateServerManifest;
@@ -1,13 +0,0 @@
1
- import { CronInfo, FunctionInfo, RouteInfo, SubscriberInfo } from "../types-KmjzMgu8.cjs";
2
-
3
- //#region src/build/manifests.d.ts
4
- type ManifestProvider = 'aws' | 'server';
5
- interface ServerAppInfo {
6
- handler: string;
7
- endpoints: string;
8
- }
9
- declare function generateAwsManifest(outputDir: string, routes: RouteInfo[], functions: FunctionInfo[], crons: CronInfo[], subscribers: SubscriberInfo[]): Promise<void>;
10
- declare function generateServerManifest(outputDir: string, appInfo: ServerAppInfo, routes: RouteInfo[], subscribers: SubscriberInfo[]): Promise<void>;
11
- //#endregion
12
- export { ManifestProvider, ServerAppInfo, generateAwsManifest, generateServerManifest };
13
- //# sourceMappingURL=manifests.d.cts.map
@@ -1,13 +0,0 @@
1
- import { CronInfo, FunctionInfo, RouteInfo, SubscriberInfo } from "../types-Bi7VzDUZ.mjs";
2
-
3
- //#region src/build/manifests.d.ts
4
- type ManifestProvider = 'aws' | 'server';
5
- interface ServerAppInfo {
6
- handler: string;
7
- endpoints: string;
8
- }
9
- declare function generateAwsManifest(outputDir: string, routes: RouteInfo[], functions: FunctionInfo[], crons: CronInfo[], subscribers: SubscriberInfo[]): Promise<void>;
10
- declare function generateServerManifest(outputDir: string, appInfo: ServerAppInfo, routes: RouteInfo[], subscribers: SubscriberInfo[]): Promise<void>;
11
- //#endregion
12
- export { ManifestProvider, ServerAppInfo, generateAwsManifest, generateServerManifest };
13
- //# sourceMappingURL=manifests.d.mts.map
@@ -1,3 +0,0 @@
1
- import { generateAwsManifest, generateServerManifest } from "../manifests-BNKG6AXf.mjs";
2
-
3
- export { generateAwsManifest, generateServerManifest };
@@ -1,5 +0,0 @@
1
- const require_providerResolver = require('../providerResolver-DOTbN9jo.cjs');
2
-
3
- exports.getAWSServiceConfig = require_providerResolver.getAWSServiceConfig;
4
- exports.getServerConfig = require_providerResolver.getServerConfig;
5
- exports.resolveProviders = require_providerResolver.resolveProviders;
@@ -1,23 +0,0 @@
1
- import { AWSApiGatewayConfig, AWSLambdaConfig, BuildOptions, GkmConfig, LegacyProvider, ServerConfig } from "../types-KmjzMgu8.cjs";
2
-
3
- //#region src/build/providerResolver.d.ts
4
- interface ResolvedProviders {
5
- providers: LegacyProvider[];
6
- enableOpenApi: boolean;
7
- }
8
- /**
9
- * Resolves provider configuration from the new simplified system
10
- * to the internal legacy format for backward compatibility
11
- */
12
- declare function resolveProviders(config: GkmConfig, options: BuildOptions): ResolvedProviders;
13
- /**
14
- * Gets configuration for a specific AWS service
15
- */
16
- declare function getAWSServiceConfig<T extends AWSApiGatewayConfig | AWSLambdaConfig>(config: GkmConfig, service: 'apiGateway' | 'lambda', subService?: 'v1' | 'v2' | 'functions' | 'crons'): T | undefined;
17
- /**
18
- * Gets server configuration
19
- */
20
- declare function getServerConfig(config: GkmConfig): ServerConfig | undefined;
21
- //#endregion
22
- export { ResolvedProviders, getAWSServiceConfig, getServerConfig, resolveProviders };
23
- //# sourceMappingURL=providerResolver.d.cts.map
@@ -1,23 +0,0 @@
1
- import { AWSApiGatewayConfig, AWSLambdaConfig, BuildOptions, GkmConfig, LegacyProvider, ServerConfig } from "../types-Bi7VzDUZ.mjs";
2
-
3
- //#region src/build/providerResolver.d.ts
4
- interface ResolvedProviders {
5
- providers: LegacyProvider[];
6
- enableOpenApi: boolean;
7
- }
8
- /**
9
- * Resolves provider configuration from the new simplified system
10
- * to the internal legacy format for backward compatibility
11
- */
12
- declare function resolveProviders(config: GkmConfig, options: BuildOptions): ResolvedProviders;
13
- /**
14
- * Gets configuration for a specific AWS service
15
- */
16
- declare function getAWSServiceConfig<T extends AWSApiGatewayConfig | AWSLambdaConfig>(config: GkmConfig, service: 'apiGateway' | 'lambda', subService?: 'v1' | 'v2' | 'functions' | 'crons'): T | undefined;
17
- /**
18
- * Gets server configuration
19
- */
20
- declare function getServerConfig(config: GkmConfig): ServerConfig | undefined;
21
- //#endregion
22
- export { ResolvedProviders, getAWSServiceConfig, getServerConfig, resolveProviders };
23
- //# sourceMappingURL=providerResolver.d.mts.map
@@ -1,3 +0,0 @@
1
- import { getAWSServiceConfig, getServerConfig, resolveProviders } from "../providerResolver-DEVKngbC.mjs";
2
-
3
- export { getAWSServiceConfig, getServerConfig, resolveProviders };
File without changes
@@ -1,3 +0,0 @@
1
- import "../types-KmjzMgu8.cjs";
2
- import { BuildContext, NormalizedTelescopeConfig, ProcessedCron, ProcessedEndpoint, ProcessedFunction, ProviderBuildResult } from "../types-DA-r8HWZ.cjs";
3
- export { BuildContext, NormalizedTelescopeConfig, ProcessedCron, ProcessedEndpoint, ProcessedFunction, ProviderBuildResult };
@@ -1,3 +0,0 @@
1
- import "../types-Bi7VzDUZ.mjs";
2
- import { BuildContext, NormalizedTelescopeConfig, ProcessedCron, ProcessedEndpoint, ProcessedFunction, ProviderBuildResult } from "../types-D2xYkOal.mjs";
3
- export { BuildContext, NormalizedTelescopeConfig, ProcessedCron, ProcessedEndpoint, ProcessedFunction, ProviderBuildResult };
File without changes
@@ -1,87 +0,0 @@
1
- import { loadConfig, parseModuleConfig } from "./config-Bq72aj8e.mjs";
2
- import { resolveProviders } from "./providerResolver-DEVKngbC.mjs";
3
- import { CronGenerator } from "./CronGenerator-CCRYptuT.mjs";
4
- import { EndpointGenerator } from "./EndpointGenerator-DGivkPLT.mjs";
5
- import { FunctionGenerator } from "./FunctionGenerator-CVk0h8tO.mjs";
6
- import { SubscriberGenerator } from "./SubscriberGenerator-DABaJXML.mjs";
7
- import { normalizeTelescopeConfig } from "./dev-BBPWSllq.mjs";
8
- import { generateAwsManifest, generateServerManifest } from "./manifests-BNKG6AXf.mjs";
9
- import { mkdir } from "node:fs/promises";
10
- import { join, relative } from "node:path";
11
-
12
- //#region src/build/index.ts
13
- const logger = console;
14
- async function buildCommand(options) {
15
- const config = await loadConfig();
16
- const resolved = resolveProviders(config, options);
17
- logger.log(`Building with providers: ${resolved.providers.join(", ")}`);
18
- logger.log(`Loading routes from: ${config.routes}`);
19
- if (config.functions) logger.log(`Loading functions from: ${config.functions}`);
20
- if (config.crons) logger.log(`Loading crons from: ${config.crons}`);
21
- if (config.subscribers) logger.log(`Loading subscribers from: ${config.subscribers}`);
22
- logger.log(`Using envParser: ${config.envParser}`);
23
- const { path: envParserPath, importPattern: envParserImportPattern } = parseModuleConfig(config.envParser, "envParser");
24
- const { path: loggerPath, importPattern: loggerImportPattern } = parseModuleConfig(config.logger, "logger");
25
- const telescope = normalizeTelescopeConfig(config.telescope);
26
- if (telescope) logger.log(`🔭 Telescope enabled at ${telescope.path}`);
27
- const buildContext = {
28
- envParserPath,
29
- envParserImportPattern,
30
- loggerPath,
31
- loggerImportPattern,
32
- telescope
33
- };
34
- const endpointGenerator = new EndpointGenerator();
35
- const functionGenerator = new FunctionGenerator();
36
- const cronGenerator = new CronGenerator();
37
- const subscriberGenerator = new SubscriberGenerator();
38
- const [allEndpoints, allFunctions, allCrons, allSubscribers] = await Promise.all([
39
- endpointGenerator.load(config.routes),
40
- config.functions ? functionGenerator.load(config.functions) : [],
41
- config.crons ? cronGenerator.load(config.crons) : [],
42
- config.subscribers ? subscriberGenerator.load(config.subscribers) : []
43
- ]);
44
- logger.log(`Found ${allEndpoints.length} endpoints`);
45
- logger.log(`Found ${allFunctions.length} functions`);
46
- logger.log(`Found ${allCrons.length} crons`);
47
- logger.log(`Found ${allSubscribers.length} subscribers`);
48
- if (allEndpoints.length === 0 && allFunctions.length === 0 && allCrons.length === 0 && allSubscribers.length === 0) {
49
- logger.log("No endpoints, functions, crons, or subscribers found to process");
50
- return;
51
- }
52
- const rootOutputDir = join(process.cwd(), ".gkm");
53
- await mkdir(rootOutputDir, { recursive: true });
54
- for (const provider of resolved.providers) await buildForProvider(provider, buildContext, rootOutputDir, endpointGenerator, functionGenerator, cronGenerator, subscriberGenerator, allEndpoints, allFunctions, allCrons, allSubscribers, resolved.enableOpenApi);
55
- }
56
- async function buildForProvider(provider, context, rootOutputDir, endpointGenerator, functionGenerator, cronGenerator, subscriberGenerator, endpoints, functions, crons, subscribers, enableOpenApi) {
57
- const outputDir = join(process.cwd(), ".gkm", provider);
58
- await mkdir(outputDir, { recursive: true });
59
- logger.log(`\nGenerating handlers for provider: ${provider}`);
60
- const [routes, functionInfos, cronInfos, subscriberInfos] = await Promise.all([
61
- endpointGenerator.build(context, endpoints, outputDir, {
62
- provider,
63
- enableOpenApi
64
- }),
65
- functionGenerator.build(context, functions, outputDir, { provider }),
66
- cronGenerator.build(context, crons, outputDir, { provider }),
67
- subscriberGenerator.build(context, subscribers, outputDir, { provider })
68
- ]);
69
- logger.log(`Generated ${routes.length} routes, ${functionInfos.length} functions, ${cronInfos.length} crons, ${subscriberInfos.length} subscribers for ${provider}`);
70
- if (provider === "server") {
71
- const routeMetadata = await Promise.all(endpoints.map(async ({ construct }) => ({
72
- path: construct._path,
73
- method: construct.method,
74
- handler: "",
75
- authorizer: construct.authorizer?.name ?? "none"
76
- })));
77
- const appInfo = {
78
- handler: relative(process.cwd(), join(outputDir, "app.ts")),
79
- endpoints: relative(process.cwd(), join(outputDir, "endpoints.ts"))
80
- };
81
- await generateServerManifest(rootOutputDir, appInfo, routeMetadata, subscriberInfos);
82
- } else await generateAwsManifest(rootOutputDir, routes, functionInfos, cronInfos, subscriberInfos);
83
- }
84
-
85
- //#endregion
86
- export { buildCommand };
87
- //# sourceMappingURL=build-Cu6Mi0Lf.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build-Cu6Mi0Lf.mjs","names":["options: BuildOptions","buildContext: BuildContext","provider: LegacyProvider","context: BuildContext","rootOutputDir: string","endpointGenerator: EndpointGenerator","functionGenerator: FunctionGenerator","cronGenerator: CronGenerator","subscriberGenerator: SubscriberGenerator","endpoints: GeneratedConstruct<Endpoint<any, any, any, any, any, any>>[]","functions: GeneratedConstruct<Function<any, any, any, any>>[]","crons: GeneratedConstruct<Cron<any, any, any, any>>[]","subscribers: GeneratedConstruct<Subscriber<any, any, any, any, any, any>>[]","enableOpenApi: boolean","routeMetadata: RouteInfo[]","appInfo: ServerAppInfo"],"sources":["../src/build/index.ts"],"sourcesContent":["import { mkdir } from 'node:fs/promises';\nimport { join, relative } from 'node:path';\nimport type { Cron } from '@geekmidas/constructs/crons';\nimport type { Endpoint } from '@geekmidas/constructs/endpoints';\nimport type { Function } from '@geekmidas/constructs/functions';\nimport type { Subscriber } from '@geekmidas/constructs/subscribers';\nimport { loadConfig, parseModuleConfig } from '../config';\nimport { normalizeTelescopeConfig } from '../dev';\nimport {\n CronGenerator,\n EndpointGenerator,\n FunctionGenerator,\n type GeneratedConstruct,\n SubscriberGenerator,\n} from '../generators';\nimport type { BuildOptions, LegacyProvider, RouteInfo } from '../types';\nimport {\n type ServerAppInfo,\n generateAwsManifest,\n generateServerManifest,\n} from './manifests';\nimport { resolveProviders } from './providerResolver';\nimport type { BuildContext } from './types';\n\nconst logger = console;\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n const config = await loadConfig();\n\n // Resolve providers from new config format\n const resolved = resolveProviders(config, options);\n\n logger.log(`Building with providers: ${resolved.providers.join(', ')}`);\n logger.log(`Loading routes from: ${config.routes}`);\n if (config.functions) {\n logger.log(`Loading functions from: ${config.functions}`);\n }\n if (config.crons) {\n logger.log(`Loading crons from: ${config.crons}`);\n }\n if (config.subscribers) {\n logger.log(`Loading subscribers from: ${config.subscribers}`);\n }\n logger.log(`Using envParser: ${config.envParser}`);\n\n // Parse envParser and logger configuration\n const { path: envParserPath, importPattern: envParserImportPattern } =\n parseModuleConfig(config.envParser, 'envParser');\n const { path: loggerPath, importPattern: loggerImportPattern } =\n parseModuleConfig(config.logger, 'logger');\n\n // Normalize telescope configuration\n const telescope = normalizeTelescopeConfig(config.telescope);\n if (telescope) {\n logger.log(`🔭 Telescope enabled at ${telescope.path}`);\n }\n\n const buildContext: BuildContext = {\n envParserPath,\n envParserImportPattern,\n loggerPath,\n loggerImportPattern,\n telescope,\n };\n\n // Initialize generators\n const endpointGenerator = new EndpointGenerator();\n const functionGenerator = new FunctionGenerator();\n const cronGenerator = new CronGenerator();\n const subscriberGenerator = new SubscriberGenerator();\n\n // Load all constructs in parallel\n const [allEndpoints, allFunctions, allCrons, allSubscribers] =\n await Promise.all([\n endpointGenerator.load(config.routes),\n config.functions ? functionGenerator.load(config.functions) : [],\n config.crons ? cronGenerator.load(config.crons) : [],\n config.subscribers ? subscriberGenerator.load(config.subscribers) : [],\n ]);\n\n logger.log(`Found ${allEndpoints.length} endpoints`);\n logger.log(`Found ${allFunctions.length} functions`);\n logger.log(`Found ${allCrons.length} crons`);\n logger.log(`Found ${allSubscribers.length} subscribers`);\n\n if (\n allEndpoints.length === 0 &&\n allFunctions.length === 0 &&\n allCrons.length === 0 &&\n allSubscribers.length === 0\n ) {\n logger.log(\n 'No endpoints, functions, crons, or subscribers found to process',\n );\n return;\n }\n\n // Ensure .gkm directory exists\n const rootOutputDir = join(process.cwd(), '.gkm');\n await mkdir(rootOutputDir, { recursive: true });\n\n // Build for each provider and generate per-provider manifests\n for (const provider of resolved.providers) {\n await buildForProvider(\n provider,\n buildContext,\n rootOutputDir,\n endpointGenerator,\n functionGenerator,\n cronGenerator,\n subscriberGenerator,\n allEndpoints,\n allFunctions,\n allCrons,\n allSubscribers,\n resolved.enableOpenApi,\n );\n }\n}\n\nasync function buildForProvider(\n provider: LegacyProvider,\n context: BuildContext,\n rootOutputDir: string,\n endpointGenerator: EndpointGenerator,\n functionGenerator: FunctionGenerator,\n cronGenerator: CronGenerator,\n subscriberGenerator: SubscriberGenerator,\n endpoints: GeneratedConstruct<Endpoint<any, any, any, any, any, any>>[],\n functions: GeneratedConstruct<Function<any, any, any, any>>[],\n crons: GeneratedConstruct<Cron<any, any, any, any>>[],\n subscribers: GeneratedConstruct<Subscriber<any, any, any, any, any, any>>[],\n enableOpenApi: boolean,\n): Promise<void> {\n const outputDir = join(process.cwd(), '.gkm', provider);\n\n // Ensure output directory exists\n await mkdir(outputDir, { recursive: true });\n\n logger.log(`\\nGenerating handlers for provider: ${provider}`);\n\n // Build all constructs in parallel\n const [routes, functionInfos, cronInfos, subscriberInfos] = await Promise.all(\n [\n endpointGenerator.build(context, endpoints, outputDir, {\n provider,\n enableOpenApi,\n }),\n functionGenerator.build(context, functions, outputDir, { provider }),\n cronGenerator.build(context, crons, outputDir, { provider }),\n subscriberGenerator.build(context, subscribers, outputDir, { provider }),\n ],\n );\n\n logger.log(\n `Generated ${routes.length} routes, ${functionInfos.length} functions, ${cronInfos.length} crons, ${subscriberInfos.length} subscribers for ${provider}`,\n );\n\n // Generate provider-specific manifest\n if (provider === 'server') {\n // For server, collect actual route metadata from endpoint constructs\n const routeMetadata: RouteInfo[] = await Promise.all(\n endpoints.map(async ({ construct }) => ({\n path: construct._path,\n method: construct.method,\n handler: '', // Not needed for server manifest\n authorizer: construct.authorizer?.name ?? 'none',\n })),\n );\n\n const appInfo: ServerAppInfo = {\n handler: relative(process.cwd(), join(outputDir, 'app.ts')),\n endpoints: relative(process.cwd(), join(outputDir, 'endpoints.ts')),\n };\n\n await generateServerManifest(\n rootOutputDir,\n appInfo,\n routeMetadata,\n subscriberInfos,\n );\n } else {\n // For AWS providers, generate AWS manifest\n await generateAwsManifest(\n rootOutputDir,\n routes,\n functionInfos,\n cronInfos,\n subscriberInfos,\n );\n }\n}\n"],"mappings":"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"}
@@ -1,93 +0,0 @@
1
- const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const require_config = require('./config-CFls09Ey.cjs');
3
- const require_providerResolver = require('./providerResolver-DOTbN9jo.cjs');
4
- const require_CronGenerator = require('./CronGenerator-D4TWXQbh.cjs');
5
- const require_EndpointGenerator = require('./EndpointGenerator-npWEDoK2.cjs');
6
- const require_FunctionGenerator = require('./FunctionGenerator-DYTnyr4c.cjs');
7
- const require_SubscriberGenerator = require('./SubscriberGenerator-D_zpNGFr.cjs');
8
- const require_dev = require('./dev-C2lCgE53.cjs');
9
- const require_manifests = require('./manifests-D13Ej8AE.cjs');
10
- const node_fs_promises = require_chunk.__toESM(require("node:fs/promises"));
11
- const node_path = require_chunk.__toESM(require("node:path"));
12
-
13
- //#region src/build/index.ts
14
- const logger = console;
15
- async function buildCommand(options) {
16
- const config = await require_config.loadConfig();
17
- const resolved = require_providerResolver.resolveProviders(config, options);
18
- logger.log(`Building with providers: ${resolved.providers.join(", ")}`);
19
- logger.log(`Loading routes from: ${config.routes}`);
20
- if (config.functions) logger.log(`Loading functions from: ${config.functions}`);
21
- if (config.crons) logger.log(`Loading crons from: ${config.crons}`);
22
- if (config.subscribers) logger.log(`Loading subscribers from: ${config.subscribers}`);
23
- logger.log(`Using envParser: ${config.envParser}`);
24
- const { path: envParserPath, importPattern: envParserImportPattern } = require_config.parseModuleConfig(config.envParser, "envParser");
25
- const { path: loggerPath, importPattern: loggerImportPattern } = require_config.parseModuleConfig(config.logger, "logger");
26
- const telescope = require_dev.normalizeTelescopeConfig(config.telescope);
27
- if (telescope) logger.log(`🔭 Telescope enabled at ${telescope.path}`);
28
- const buildContext = {
29
- envParserPath,
30
- envParserImportPattern,
31
- loggerPath,
32
- loggerImportPattern,
33
- telescope
34
- };
35
- const endpointGenerator = new require_EndpointGenerator.EndpointGenerator();
36
- const functionGenerator = new require_FunctionGenerator.FunctionGenerator();
37
- const cronGenerator = new require_CronGenerator.CronGenerator();
38
- const subscriberGenerator = new require_SubscriberGenerator.SubscriberGenerator();
39
- const [allEndpoints, allFunctions, allCrons, allSubscribers] = await Promise.all([
40
- endpointGenerator.load(config.routes),
41
- config.functions ? functionGenerator.load(config.functions) : [],
42
- config.crons ? cronGenerator.load(config.crons) : [],
43
- config.subscribers ? subscriberGenerator.load(config.subscribers) : []
44
- ]);
45
- logger.log(`Found ${allEndpoints.length} endpoints`);
46
- logger.log(`Found ${allFunctions.length} functions`);
47
- logger.log(`Found ${allCrons.length} crons`);
48
- logger.log(`Found ${allSubscribers.length} subscribers`);
49
- if (allEndpoints.length === 0 && allFunctions.length === 0 && allCrons.length === 0 && allSubscribers.length === 0) {
50
- logger.log("No endpoints, functions, crons, or subscribers found to process");
51
- return;
52
- }
53
- const rootOutputDir = (0, node_path.join)(process.cwd(), ".gkm");
54
- await (0, node_fs_promises.mkdir)(rootOutputDir, { recursive: true });
55
- for (const provider of resolved.providers) await buildForProvider(provider, buildContext, rootOutputDir, endpointGenerator, functionGenerator, cronGenerator, subscriberGenerator, allEndpoints, allFunctions, allCrons, allSubscribers, resolved.enableOpenApi);
56
- }
57
- async function buildForProvider(provider, context, rootOutputDir, endpointGenerator, functionGenerator, cronGenerator, subscriberGenerator, endpoints, functions, crons, subscribers, enableOpenApi) {
58
- const outputDir = (0, node_path.join)(process.cwd(), ".gkm", provider);
59
- await (0, node_fs_promises.mkdir)(outputDir, { recursive: true });
60
- logger.log(`\nGenerating handlers for provider: ${provider}`);
61
- const [routes, functionInfos, cronInfos, subscriberInfos] = await Promise.all([
62
- endpointGenerator.build(context, endpoints, outputDir, {
63
- provider,
64
- enableOpenApi
65
- }),
66
- functionGenerator.build(context, functions, outputDir, { provider }),
67
- cronGenerator.build(context, crons, outputDir, { provider }),
68
- subscriberGenerator.build(context, subscribers, outputDir, { provider })
69
- ]);
70
- logger.log(`Generated ${routes.length} routes, ${functionInfos.length} functions, ${cronInfos.length} crons, ${subscriberInfos.length} subscribers for ${provider}`);
71
- if (provider === "server") {
72
- const routeMetadata = await Promise.all(endpoints.map(async ({ construct }) => ({
73
- path: construct._path,
74
- method: construct.method,
75
- handler: "",
76
- authorizer: construct.authorizer?.name ?? "none"
77
- })));
78
- const appInfo = {
79
- handler: (0, node_path.relative)(process.cwd(), (0, node_path.join)(outputDir, "app.ts")),
80
- endpoints: (0, node_path.relative)(process.cwd(), (0, node_path.join)(outputDir, "endpoints.ts"))
81
- };
82
- await require_manifests.generateServerManifest(rootOutputDir, appInfo, routeMetadata, subscriberInfos);
83
- } else await require_manifests.generateAwsManifest(rootOutputDir, routes, functionInfos, cronInfos, subscriberInfos);
84
- }
85
-
86
- //#endregion
87
- Object.defineProperty(exports, 'buildCommand', {
88
- enumerable: true,
89
- get: function () {
90
- return buildCommand;
91
- }
92
- });
93
- //# sourceMappingURL=build-wmt8ZcmA.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build-wmt8ZcmA.cjs","names":["options: BuildOptions","buildContext: BuildContext","EndpointGenerator","FunctionGenerator","CronGenerator","SubscriberGenerator","provider: LegacyProvider","context: BuildContext","rootOutputDir: string","endpointGenerator: EndpointGenerator","functionGenerator: FunctionGenerator","cronGenerator: CronGenerator","subscriberGenerator: SubscriberGenerator","endpoints: GeneratedConstruct<Endpoint<any, any, any, any, any, any>>[]","functions: GeneratedConstruct<Function<any, any, any, any>>[]","crons: GeneratedConstruct<Cron<any, any, any, any>>[]","subscribers: GeneratedConstruct<Subscriber<any, any, any, any, any, any>>[]","enableOpenApi: boolean","routeMetadata: RouteInfo[]","appInfo: ServerAppInfo"],"sources":["../src/build/index.ts"],"sourcesContent":["import { mkdir } from 'node:fs/promises';\nimport { join, relative } from 'node:path';\nimport type { Cron } from '@geekmidas/constructs/crons';\nimport type { Endpoint } from '@geekmidas/constructs/endpoints';\nimport type { Function } from '@geekmidas/constructs/functions';\nimport type { Subscriber } from '@geekmidas/constructs/subscribers';\nimport { loadConfig, parseModuleConfig } from '../config';\nimport { normalizeTelescopeConfig } from '../dev';\nimport {\n CronGenerator,\n EndpointGenerator,\n FunctionGenerator,\n type GeneratedConstruct,\n SubscriberGenerator,\n} from '../generators';\nimport type { BuildOptions, LegacyProvider, RouteInfo } from '../types';\nimport {\n type ServerAppInfo,\n generateAwsManifest,\n generateServerManifest,\n} from './manifests';\nimport { resolveProviders } from './providerResolver';\nimport type { BuildContext } from './types';\n\nconst logger = console;\n\nexport async function buildCommand(options: BuildOptions): Promise<void> {\n const config = await loadConfig();\n\n // Resolve providers from new config format\n const resolved = resolveProviders(config, options);\n\n logger.log(`Building with providers: ${resolved.providers.join(', ')}`);\n logger.log(`Loading routes from: ${config.routes}`);\n if (config.functions) {\n logger.log(`Loading functions from: ${config.functions}`);\n }\n if (config.crons) {\n logger.log(`Loading crons from: ${config.crons}`);\n }\n if (config.subscribers) {\n logger.log(`Loading subscribers from: ${config.subscribers}`);\n }\n logger.log(`Using envParser: ${config.envParser}`);\n\n // Parse envParser and logger configuration\n const { path: envParserPath, importPattern: envParserImportPattern } =\n parseModuleConfig(config.envParser, 'envParser');\n const { path: loggerPath, importPattern: loggerImportPattern } =\n parseModuleConfig(config.logger, 'logger');\n\n // Normalize telescope configuration\n const telescope = normalizeTelescopeConfig(config.telescope);\n if (telescope) {\n logger.log(`🔭 Telescope enabled at ${telescope.path}`);\n }\n\n const buildContext: BuildContext = {\n envParserPath,\n envParserImportPattern,\n loggerPath,\n loggerImportPattern,\n telescope,\n };\n\n // Initialize generators\n const endpointGenerator = new EndpointGenerator();\n const functionGenerator = new FunctionGenerator();\n const cronGenerator = new CronGenerator();\n const subscriberGenerator = new SubscriberGenerator();\n\n // Load all constructs in parallel\n const [allEndpoints, allFunctions, allCrons, allSubscribers] =\n await Promise.all([\n endpointGenerator.load(config.routes),\n config.functions ? functionGenerator.load(config.functions) : [],\n config.crons ? cronGenerator.load(config.crons) : [],\n config.subscribers ? subscriberGenerator.load(config.subscribers) : [],\n ]);\n\n logger.log(`Found ${allEndpoints.length} endpoints`);\n logger.log(`Found ${allFunctions.length} functions`);\n logger.log(`Found ${allCrons.length} crons`);\n logger.log(`Found ${allSubscribers.length} subscribers`);\n\n if (\n allEndpoints.length === 0 &&\n allFunctions.length === 0 &&\n allCrons.length === 0 &&\n allSubscribers.length === 0\n ) {\n logger.log(\n 'No endpoints, functions, crons, or subscribers found to process',\n );\n return;\n }\n\n // Ensure .gkm directory exists\n const rootOutputDir = join(process.cwd(), '.gkm');\n await mkdir(rootOutputDir, { recursive: true });\n\n // Build for each provider and generate per-provider manifests\n for (const provider of resolved.providers) {\n await buildForProvider(\n provider,\n buildContext,\n rootOutputDir,\n endpointGenerator,\n functionGenerator,\n cronGenerator,\n subscriberGenerator,\n allEndpoints,\n allFunctions,\n allCrons,\n allSubscribers,\n resolved.enableOpenApi,\n );\n }\n}\n\nasync function buildForProvider(\n provider: LegacyProvider,\n context: BuildContext,\n rootOutputDir: string,\n endpointGenerator: EndpointGenerator,\n functionGenerator: FunctionGenerator,\n cronGenerator: CronGenerator,\n subscriberGenerator: SubscriberGenerator,\n endpoints: GeneratedConstruct<Endpoint<any, any, any, any, any, any>>[],\n functions: GeneratedConstruct<Function<any, any, any, any>>[],\n crons: GeneratedConstruct<Cron<any, any, any, any>>[],\n subscribers: GeneratedConstruct<Subscriber<any, any, any, any, any, any>>[],\n enableOpenApi: boolean,\n): Promise<void> {\n const outputDir = join(process.cwd(), '.gkm', provider);\n\n // Ensure output directory exists\n await mkdir(outputDir, { recursive: true });\n\n logger.log(`\\nGenerating handlers for provider: ${provider}`);\n\n // Build all constructs in parallel\n const [routes, functionInfos, cronInfos, subscriberInfos] = await Promise.all(\n [\n endpointGenerator.build(context, endpoints, outputDir, {\n provider,\n enableOpenApi,\n }),\n functionGenerator.build(context, functions, outputDir, { provider }),\n cronGenerator.build(context, crons, outputDir, { provider }),\n subscriberGenerator.build(context, subscribers, outputDir, { provider }),\n ],\n );\n\n logger.log(\n `Generated ${routes.length} routes, ${functionInfos.length} functions, ${cronInfos.length} crons, ${subscriberInfos.length} subscribers for ${provider}`,\n );\n\n // Generate provider-specific manifest\n if (provider === 'server') {\n // For server, collect actual route metadata from endpoint constructs\n const routeMetadata: RouteInfo[] = await Promise.all(\n endpoints.map(async ({ construct }) => ({\n path: construct._path,\n method: construct.method,\n handler: '', // Not needed for server manifest\n authorizer: construct.authorizer?.name ?? 'none',\n })),\n );\n\n const appInfo: ServerAppInfo = {\n handler: relative(process.cwd(), join(outputDir, 'app.ts')),\n endpoints: relative(process.cwd(), join(outputDir, 'endpoints.ts')),\n };\n\n await generateServerManifest(\n rootOutputDir,\n appInfo,\n routeMetadata,\n subscriberInfos,\n );\n } else {\n // For AWS providers, generate AWS manifest\n await generateAwsManifest(\n rootOutputDir,\n routes,\n functionInfos,\n cronInfos,\n subscriberInfos,\n );\n }\n}\n"],"mappings":"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"}