@geekmidas/cli 0.6.2 → 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 (271) hide show
  1. package/dist/config.d.cts +1 -1
  2. package/dist/config.d.mts +1 -1
  3. package/dist/index.cjs +2561 -34
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.mjs +2556 -29
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/openapi-Mwy2_R4W.mjs +957 -0
  8. package/dist/openapi-Mwy2_R4W.mjs.map +1 -0
  9. package/dist/{openapi-react-query-_-B3s8v_.mjs → openapi-react-query-CcciaVu5.mjs} +1 -1
  10. package/dist/{openapi-react-query-_-B3s8v_.mjs.map → openapi-react-query-CcciaVu5.mjs.map} +1 -1
  11. package/dist/{openapi-react-query-Cp-w8_05.cjs → openapi-react-query-o5iMi8tz.cjs} +1 -1
  12. package/dist/{openapi-react-query-Cp-w8_05.cjs.map → openapi-react-query-o5iMi8tz.cjs.map} +1 -1
  13. package/dist/openapi-react-query.cjs +1 -1
  14. package/dist/openapi-react-query.mjs +1 -1
  15. package/dist/openapi-tAIbJJU_.cjs +993 -0
  16. package/dist/openapi-tAIbJJU_.cjs.map +1 -0
  17. package/dist/openapi.cjs +1 -4
  18. package/dist/openapi.d.cts +1 -1
  19. package/dist/openapi.d.mts +1 -1
  20. package/dist/openapi.mjs +1 -4
  21. package/dist/{types-Bi7VzDUZ.d.mts → types-B3TXoj7v.d.mts} +21 -53
  22. package/dist/{types-KmjzMgu8.d.cts → types-C0hwnSjm.d.cts} +21 -53
  23. package/package.json +5 -5
  24. package/src/build/types.ts +13 -0
  25. package/src/dev/index.ts +71 -8
  26. package/src/generators/EndpointGenerator.ts +46 -5
  27. package/src/generators/__tests__/EndpointGenerator.spec.ts +1 -1
  28. package/src/init/generators/config.ts +6 -1
  29. package/src/init/generators/package.ts +5 -1
  30. package/src/init/index.ts +9 -1
  31. package/src/init/templates/api.ts +31 -0
  32. package/src/init/templates/index.ts +1 -0
  33. package/src/init/templates/minimal.ts +83 -0
  34. package/src/types.ts +19 -0
  35. package/tsdown.config.ts +6 -0
  36. package/dist/CronGenerator-CCRYptuT.mjs +0 -55
  37. package/dist/CronGenerator-CCRYptuT.mjs.map +0 -1
  38. package/dist/CronGenerator-D4TWXQbh.cjs +0 -61
  39. package/dist/CronGenerator-D4TWXQbh.cjs.map +0 -1
  40. package/dist/CronGenerator-DWS3CCZt.d.cts +0 -14
  41. package/dist/CronGenerator-DZjdkEjI.d.mts +0 -14
  42. package/dist/EndpointGenerator-DGivkPLT.mjs +0 -335
  43. package/dist/EndpointGenerator-DGivkPLT.mjs.map +0 -1
  44. package/dist/EndpointGenerator-Dh7kMtuL.d.mts +0 -19
  45. package/dist/EndpointGenerator-npWEDoK2.cjs +0 -341
  46. package/dist/EndpointGenerator-npWEDoK2.cjs.map +0 -1
  47. package/dist/EndpointGenerator-zBsie_7s.d.cts +0 -19
  48. package/dist/FunctionGenerator-BmDHo27U.d.mts +0 -14
  49. package/dist/FunctionGenerator-CVk0h8tO.mjs +0 -54
  50. package/dist/FunctionGenerator-CVk0h8tO.mjs.map +0 -1
  51. package/dist/FunctionGenerator-DXjXBxUd.d.cts +0 -14
  52. package/dist/FunctionGenerator-DYTnyr4c.cjs +0 -60
  53. package/dist/FunctionGenerator-DYTnyr4c.cjs.map +0 -1
  54. package/dist/Generator-BGY-2dgI.d.cts +0 -27
  55. package/dist/Generator-CDt4pB3W.mjs +0 -41
  56. package/dist/Generator-CDt4pB3W.mjs.map +0 -1
  57. package/dist/Generator-CLVplqm2.cjs +0 -47
  58. package/dist/Generator-CLVplqm2.cjs.map +0 -1
  59. package/dist/Generator-yi9DH5TN.d.mts +0 -27
  60. package/dist/OpenApiTsGenerator-BVS4pOH7.mjs +0 -495
  61. package/dist/OpenApiTsGenerator-BVS4pOH7.mjs.map +0 -1
  62. package/dist/OpenApiTsGenerator-gPIIyppX.cjs +0 -501
  63. package/dist/OpenApiTsGenerator-gPIIyppX.cjs.map +0 -1
  64. package/dist/SubscriberGenerator-Bb-z3Kvx.d.cts +0 -15
  65. package/dist/SubscriberGenerator-CwsXqCpS.d.mts +0 -15
  66. package/dist/SubscriberGenerator-DABaJXML.mjs +0 -200
  67. package/dist/SubscriberGenerator-DABaJXML.mjs.map +0 -1
  68. package/dist/SubscriberGenerator-D_zpNGFr.cjs +0 -206
  69. package/dist/SubscriberGenerator-D_zpNGFr.cjs.map +0 -1
  70. package/dist/api-Bp5TIl1R.mjs +0 -167
  71. package/dist/api-Bp5TIl1R.mjs.map +0 -1
  72. package/dist/api-D4W9-tdZ.cjs +0 -173
  73. package/dist/api-D4W9-tdZ.cjs.map +0 -1
  74. package/dist/build/index.cjs +0 -15
  75. package/dist/build/index.d.cts +0 -7
  76. package/dist/build/index.d.mts +0 -7
  77. package/dist/build/index.mjs +0 -15
  78. package/dist/build/manifests.cjs +0 -4
  79. package/dist/build/manifests.d.cts +0 -13
  80. package/dist/build/manifests.d.mts +0 -13
  81. package/dist/build/manifests.mjs +0 -3
  82. package/dist/build/providerResolver.cjs +0 -5
  83. package/dist/build/providerResolver.d.cts +0 -23
  84. package/dist/build/providerResolver.d.mts +0 -23
  85. package/dist/build/providerResolver.mjs +0 -3
  86. package/dist/build/types.cjs +0 -0
  87. package/dist/build/types.d.cts +0 -3
  88. package/dist/build/types.d.mts +0 -3
  89. package/dist/build/types.mjs +0 -0
  90. package/dist/build-Cu6Mi0Lf.mjs +0 -87
  91. package/dist/build-Cu6Mi0Lf.mjs.map +0 -1
  92. package/dist/build-wmt8ZcmA.cjs +0 -93
  93. package/dist/build-wmt8ZcmA.cjs.map +0 -1
  94. package/dist/config-BP1IZynR.cjs +0 -168
  95. package/dist/config-BP1IZynR.cjs.map +0 -1
  96. package/dist/config-CIzRhm_D.d.mts +0 -11
  97. package/dist/config-CvehIYsb.d.cts +0 -11
  98. package/dist/config-UCK12Lrr.mjs +0 -162
  99. package/dist/config-UCK12Lrr.mjs.map +0 -1
  100. package/dist/dev/index.cjs +0 -17
  101. package/dist/dev/index.d.cts +0 -36
  102. package/dist/dev/index.d.mts +0 -36
  103. package/dist/dev/index.mjs +0 -13
  104. package/dist/dev-BBPWSllq.mjs +0 -348
  105. package/dist/dev-BBPWSllq.mjs.map +0 -1
  106. package/dist/dev-C2lCgE53.cjs +0 -378
  107. package/dist/dev-C2lCgE53.cjs.map +0 -1
  108. package/dist/docker-2-ipZDOJ.cjs +0 -119
  109. package/dist/docker-2-ipZDOJ.cjs.map +0 -1
  110. package/dist/docker-31GNwU3F.mjs +0 -113
  111. package/dist/docker-31GNwU3F.mjs.map +0 -1
  112. package/dist/env-CQ3hXAAW.d.mts +0 -11
  113. package/dist/env-CS0jvg7k.cjs +0 -144
  114. package/dist/env-CS0jvg7k.cjs.map +0 -1
  115. package/dist/env-D4YFgMqo.d.cts +0 -11
  116. package/dist/env-DEeVOvVu.mjs +0 -138
  117. package/dist/env-DEeVOvVu.mjs.map +0 -1
  118. package/dist/generators/CronGenerator.cjs +0 -4
  119. package/dist/generators/CronGenerator.d.cts +0 -5
  120. package/dist/generators/CronGenerator.d.mts +0 -5
  121. package/dist/generators/CronGenerator.mjs +0 -4
  122. package/dist/generators/EndpointGenerator.cjs +0 -4
  123. package/dist/generators/EndpointGenerator.d.cts +0 -5
  124. package/dist/generators/EndpointGenerator.d.mts +0 -5
  125. package/dist/generators/EndpointGenerator.mjs +0 -4
  126. package/dist/generators/FunctionGenerator.cjs +0 -4
  127. package/dist/generators/FunctionGenerator.d.cts +0 -5
  128. package/dist/generators/FunctionGenerator.d.mts +0 -5
  129. package/dist/generators/FunctionGenerator.mjs +0 -4
  130. package/dist/generators/Generator.cjs +0 -3
  131. package/dist/generators/Generator.d.cts +0 -4
  132. package/dist/generators/Generator.d.mts +0 -4
  133. package/dist/generators/Generator.mjs +0 -3
  134. package/dist/generators/OpenApiTsGenerator.cjs +0 -3
  135. package/dist/generators/OpenApiTsGenerator.d.cts +0 -44
  136. package/dist/generators/OpenApiTsGenerator.d.mts +0 -44
  137. package/dist/generators/OpenApiTsGenerator.mjs +0 -3
  138. package/dist/generators/SubscriberGenerator.cjs +0 -4
  139. package/dist/generators/SubscriberGenerator.d.cts +0 -5
  140. package/dist/generators/SubscriberGenerator.d.mts +0 -5
  141. package/dist/generators/SubscriberGenerator.mjs +0 -4
  142. package/dist/generators/index.cjs +0 -12
  143. package/dist/generators/index.d.cts +0 -8
  144. package/dist/generators/index.d.mts +0 -8
  145. package/dist/generators/index.mjs +0 -8
  146. package/dist/generators-3IemvCLk.cjs +0 -0
  147. package/dist/generators-FNpdfN6J.mjs +0 -0
  148. package/dist/index-DG6xNQMH.d.cts +0 -81
  149. package/dist/index-DZgrOOOW.d.mts +0 -81
  150. package/dist/init/generators/config.cjs +0 -3
  151. package/dist/init/generators/config.d.cts +0 -3
  152. package/dist/init/generators/config.d.mts +0 -3
  153. package/dist/init/generators/config.mjs +0 -3
  154. package/dist/init/generators/docker.cjs +0 -3
  155. package/dist/init/generators/docker.d.cts +0 -11
  156. package/dist/init/generators/docker.d.mts +0 -11
  157. package/dist/init/generators/docker.mjs +0 -3
  158. package/dist/init/generators/env.cjs +0 -3
  159. package/dist/init/generators/env.d.cts +0 -3
  160. package/dist/init/generators/env.d.mts +0 -3
  161. package/dist/init/generators/env.mjs +0 -3
  162. package/dist/init/generators/index.cjs +0 -14
  163. package/dist/init/generators/index.d.cts +0 -6
  164. package/dist/init/generators/index.d.mts +0 -6
  165. package/dist/init/generators/index.mjs +0 -11
  166. package/dist/init/generators/models.cjs +0 -3
  167. package/dist/init/generators/models.d.cts +0 -11
  168. package/dist/init/generators/models.d.mts +0 -11
  169. package/dist/init/generators/models.mjs +0 -3
  170. package/dist/init/generators/monorepo.cjs +0 -3
  171. package/dist/init/generators/monorepo.d.cts +0 -11
  172. package/dist/init/generators/monorepo.d.mts +0 -11
  173. package/dist/init/generators/monorepo.mjs +0 -3
  174. package/dist/init/generators/package.cjs +0 -8
  175. package/dist/init/generators/package.d.cts +0 -3
  176. package/dist/init/generators/package.d.mts +0 -3
  177. package/dist/init/generators/package.mjs +0 -8
  178. package/dist/init/generators/source.cjs +0 -3
  179. package/dist/init/generators/source.d.cts +0 -3
  180. package/dist/init/generators/source.d.mts +0 -3
  181. package/dist/init/generators/source.mjs +0 -3
  182. package/dist/init/index.cjs +0 -16
  183. package/dist/init/index.d.cts +0 -17
  184. package/dist/init/index.d.mts +0 -17
  185. package/dist/init/index.mjs +0 -16
  186. package/dist/init/templates/api.cjs +0 -3
  187. package/dist/init/templates/api.d.cts +0 -7
  188. package/dist/init/templates/api.d.mts +0 -7
  189. package/dist/init/templates/api.mjs +0 -3
  190. package/dist/init/templates/index.cjs +0 -12
  191. package/dist/init/templates/index.d.cts +0 -2
  192. package/dist/init/templates/index.d.mts +0 -2
  193. package/dist/init/templates/index.mjs +0 -7
  194. package/dist/init/templates/minimal.cjs +0 -3
  195. package/dist/init/templates/minimal.d.cts +0 -7
  196. package/dist/init/templates/minimal.d.mts +0 -7
  197. package/dist/init/templates/minimal.mjs +0 -3
  198. package/dist/init/templates/serverless.cjs +0 -3
  199. package/dist/init/templates/serverless.d.cts +0 -7
  200. package/dist/init/templates/serverless.d.mts +0 -7
  201. package/dist/init/templates/serverless.mjs +0 -3
  202. package/dist/init/templates/worker.cjs +0 -3
  203. package/dist/init/templates/worker.d.cts +0 -7
  204. package/dist/init/templates/worker.d.mts +0 -7
  205. package/dist/init/templates/worker.mjs +0 -3
  206. package/dist/init/utils.cjs +0 -7
  207. package/dist/init/utils.d.cts +0 -25
  208. package/dist/init/utils.d.mts +0 -25
  209. package/dist/init/utils.mjs +0 -3
  210. package/dist/init-BMA7xi8r.mjs +0 -161
  211. package/dist/init-BMA7xi8r.mjs.map +0 -1
  212. package/dist/init-D-7WEk-b.cjs +0 -167
  213. package/dist/init-D-7WEk-b.cjs.map +0 -1
  214. package/dist/manifests-BNKG6AXf.mjs +0 -68
  215. package/dist/manifests-BNKG6AXf.mjs.map +0 -1
  216. package/dist/manifests-D13Ej8AE.cjs +0 -80
  217. package/dist/manifests-D13Ej8AE.cjs.map +0 -1
  218. package/dist/minimal-BkyASH_C.mjs +0 -93
  219. package/dist/minimal-BkyASH_C.mjs.map +0 -1
  220. package/dist/minimal-CSFggzdH.cjs +0 -99
  221. package/dist/minimal-CSFggzdH.cjs.map +0 -1
  222. package/dist/models-BWlDfviw.mjs +0 -115
  223. package/dist/models-BWlDfviw.mjs.map +0 -1
  224. package/dist/models-BapGSoHC.cjs +0 -121
  225. package/dist/models-BapGSoHC.cjs.map +0 -1
  226. package/dist/monorepo-BBOWhkcd.mjs +0 -184
  227. package/dist/monorepo-BBOWhkcd.mjs.map +0 -1
  228. package/dist/monorepo-CFtxHeDh.cjs +0 -190
  229. package/dist/monorepo-CFtxHeDh.cjs.map +0 -1
  230. package/dist/openapi-DA9RkPJl.mjs +0 -74
  231. package/dist/openapi-DA9RkPJl.mjs.map +0 -1
  232. package/dist/openapi-DZH6RQHk.cjs +0 -98
  233. package/dist/openapi-DZH6RQHk.cjs.map +0 -1
  234. package/dist/package-6h-7QfJZ.d.cts +0 -11
  235. package/dist/package-BCe_KvGv.d.mts +0 -11
  236. package/dist/package-C3If80n1.mjs +0 -57
  237. package/dist/package-C3If80n1.mjs.map +0 -1
  238. package/dist/package-Dk8IMBOB.cjs +0 -62
  239. package/dist/package-Dk8IMBOB.cjs.map +0 -1
  240. package/dist/providerResolver-DEVKngbC.mjs +0 -96
  241. package/dist/providerResolver-DEVKngbC.mjs.map +0 -1
  242. package/dist/providerResolver-DOTbN9jo.cjs +0 -114
  243. package/dist/providerResolver-DOTbN9jo.cjs.map +0 -1
  244. package/dist/serverless-AGOS-l3G.cjs +0 -119
  245. package/dist/serverless-AGOS-l3G.cjs.map +0 -1
  246. package/dist/serverless-D5HjJByU.mjs +0 -113
  247. package/dist/serverless-D5HjJByU.mjs.map +0 -1
  248. package/dist/source-C1cyfHcF.cjs +0 -17
  249. package/dist/source-C1cyfHcF.cjs.map +0 -1
  250. package/dist/source-C3LiNUV9.d.mts +0 -11
  251. package/dist/source-CkQHBpwu.mjs +0 -11
  252. package/dist/source-CkQHBpwu.mjs.map +0 -1
  253. package/dist/source-Dtcjbokc.d.cts +0 -11
  254. package/dist/templates-C0EMmhwb.mjs +0 -88
  255. package/dist/templates-C0EMmhwb.mjs.map +0 -1
  256. package/dist/templates-CbgQ9dw0.cjs +0 -123
  257. package/dist/templates-CbgQ9dw0.cjs.map +0 -1
  258. package/dist/types-D2xYkOal.d.mts +0 -51
  259. package/dist/types-DA-r8HWZ.d.cts +0 -51
  260. package/dist/types.cjs +0 -0
  261. package/dist/types.d.cts +0 -2
  262. package/dist/types.d.mts +0 -2
  263. package/dist/types.mjs +0 -0
  264. package/dist/utils-CKEzCxc1.mjs +0 -69
  265. package/dist/utils-CKEzCxc1.mjs.map +0 -1
  266. package/dist/utils-DSdN2MTt.cjs +0 -99
  267. package/dist/utils-DSdN2MTt.cjs.map +0 -1
  268. package/dist/worker-CGhlqNH-.cjs +0 -156
  269. package/dist/worker-CGhlqNH-.cjs.map +0 -1
  270. package/dist/worker-CiP420As.mjs +0 -150
  271. package/dist/worker-CiP420As.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"providerResolver-DEVKngbC.mjs","names":["config: GkmConfig","options: BuildOptions","providers: LegacyProvider[]","mainProvider: MainProvider","providersConfig?: ProvidersConfig","providersConfig: ProvidersConfig","config:\n | boolean\n | AWSApiGatewayConfig\n | AWSLambdaConfig\n | ServerConfig\n | undefined","service: 'apiGateway' | 'lambda'","subService?: 'v1' | 'v2' | 'functions' | 'crons'"],"sources":["../src/build/providerResolver.ts"],"sourcesContent":["import type {\n AWSApiGatewayConfig,\n AWSLambdaConfig,\n BuildOptions,\n GkmConfig,\n LegacyProvider,\n MainProvider,\n ProvidersConfig,\n ServerConfig,\n} from '../types';\n\nexport interface ResolvedProviders {\n providers: LegacyProvider[];\n enableOpenApi: boolean;\n}\n\n/**\n * Resolves provider configuration from the new simplified system\n * to the internal legacy format for backward compatibility\n */\nexport function resolveProviders(\n config: GkmConfig,\n options: BuildOptions,\n): ResolvedProviders {\n const providers: LegacyProvider[] = [];\n let enableOpenApi = options.enableOpenApi || false;\n\n // Handle legacy providers option (deprecated)\n if (options.providers) {\n return {\n providers: options.providers,\n enableOpenApi,\n };\n }\n\n // Handle new provider option\n if (options.provider) {\n const resolvedProviders = resolveMainProvider(\n options.provider,\n config.providers,\n );\n providers.push(...resolvedProviders.providers);\n enableOpenApi = resolvedProviders.enableOpenApi || enableOpenApi;\n }\n // Default: build all configured providers\n else if (config.providers) {\n const resolvedProviders = resolveAllConfiguredProviders(config.providers);\n providers.push(...resolvedProviders.providers);\n enableOpenApi = resolvedProviders.enableOpenApi || enableOpenApi;\n }\n // Fallback: use default AWS configuration\n else {\n providers.push('aws-apigatewayv2', 'aws-lambda');\n }\n\n return {\n providers: [...new Set(providers)], // Remove duplicates\n enableOpenApi,\n };\n}\n\nfunction resolveMainProvider(\n mainProvider: MainProvider,\n providersConfig?: ProvidersConfig,\n): ResolvedProviders {\n const providers: LegacyProvider[] = [];\n let enableOpenApi = false;\n\n if (mainProvider === 'aws') {\n const awsConfig = providersConfig?.aws;\n\n // Resolve API Gateway providers\n if (awsConfig?.apiGateway) {\n if (isEnabled(awsConfig.apiGateway.v1)) {\n providers.push('aws-apigatewayv1');\n }\n if (isEnabled(awsConfig.apiGateway.v2)) {\n providers.push('aws-apigatewayv2');\n }\n } else {\n // Default: enable v2 if no specific config\n providers.push('aws-apigatewayv2');\n }\n\n // Resolve Lambda providers\n if (awsConfig?.lambda) {\n if (\n isEnabled(awsConfig.lambda.functions) ||\n isEnabled(awsConfig.lambda.crons)\n ) {\n providers.push('aws-lambda');\n }\n } else {\n // Default: enable lambda if no specific config\n providers.push('aws-lambda');\n }\n } else if (mainProvider === 'server') {\n providers.push('server');\n const serverConfig = providersConfig?.server;\n\n if (typeof serverConfig === 'object' && serverConfig?.enableOpenApi) {\n enableOpenApi = true;\n }\n }\n\n return { providers, enableOpenApi };\n}\n\nfunction resolveAllConfiguredProviders(\n providersConfig: ProvidersConfig,\n): ResolvedProviders {\n const providers: LegacyProvider[] = [];\n let enableOpenApi = false;\n\n // AWS providers\n if (providersConfig.aws) {\n const awsProviders = resolveMainProvider('aws', providersConfig);\n providers.push(...awsProviders.providers);\n }\n\n // Server provider\n if (providersConfig.server && isEnabled(providersConfig.server)) {\n providers.push('server');\n if (\n typeof providersConfig.server === 'object' &&\n providersConfig.server.enableOpenApi\n ) {\n enableOpenApi = true;\n }\n }\n\n return { providers, enableOpenApi };\n}\n\nfunction isEnabled(\n config:\n | boolean\n | AWSApiGatewayConfig\n | AWSLambdaConfig\n | ServerConfig\n | undefined,\n): boolean {\n if (config === undefined) return false;\n if (typeof config === 'boolean') return config;\n return config.enabled !== false; // Default to true if enabled is not explicitly false\n}\n\n/**\n * Gets configuration for a specific AWS service\n */\nexport function getAWSServiceConfig<\n T extends AWSApiGatewayConfig | AWSLambdaConfig,\n>(\n config: GkmConfig,\n service: 'apiGateway' | 'lambda',\n subService?: 'v1' | 'v2' | 'functions' | 'crons',\n): T | undefined {\n const awsConfig = config.providers?.aws;\n if (!awsConfig) return undefined;\n\n if (service === 'apiGateway' && awsConfig.apiGateway) {\n const apiConfig = subService\n ? awsConfig.apiGateway[subService as 'v1' | 'v2']\n : undefined;\n return typeof apiConfig === 'object' ? (apiConfig as T) : undefined;\n }\n\n if (service === 'lambda' && awsConfig.lambda) {\n const lambdaConfig = subService\n ? awsConfig.lambda[subService as 'functions' | 'crons']\n : undefined;\n return typeof lambdaConfig === 'object' ? (lambdaConfig as T) : undefined;\n }\n\n return undefined;\n}\n\n/**\n * Gets server configuration\n */\nexport function getServerConfig(config: GkmConfig): ServerConfig | undefined {\n const serverConfig = config.providers?.server;\n return typeof serverConfig === 'object' ? serverConfig : undefined;\n}\n"],"mappings":";;;;;AAoBA,SAAgB,iBACdA,QACAC,SACmB;CACnB,MAAMC,YAA8B,CAAE;CACtC,IAAI,gBAAgB,QAAQ,iBAAiB;AAG7C,KAAI,QAAQ,UACV,QAAO;EACL,WAAW,QAAQ;EACnB;CACD;AAIH,KAAI,QAAQ,UAAU;EACpB,MAAM,oBAAoB,oBACxB,QAAQ,UACR,OAAO,UACR;AACD,YAAU,KAAK,GAAG,kBAAkB,UAAU;AAC9C,kBAAgB,kBAAkB,iBAAiB;CACpD,WAEQ,OAAO,WAAW;EACzB,MAAM,oBAAoB,8BAA8B,OAAO,UAAU;AACzE,YAAU,KAAK,GAAG,kBAAkB,UAAU;AAC9C,kBAAgB,kBAAkB,iBAAiB;CACpD,MAGC,WAAU,KAAK,oBAAoB,aAAa;AAGlD,QAAO;EACL,WAAW,CAAC,GAAG,IAAI,IAAI,UAAW;EAClC;CACD;AACF;AAED,SAAS,oBACPC,cACAC,iBACmB;CACnB,MAAMF,YAA8B,CAAE;CACtC,IAAI,gBAAgB;AAEpB,KAAI,iBAAiB,OAAO;EAC1B,MAAM,YAAY,iBAAiB;AAGnC,MAAI,WAAW,YAAY;AACzB,OAAI,UAAU,UAAU,WAAW,GAAG,CACpC,WAAU,KAAK,mBAAmB;AAEpC,OAAI,UAAU,UAAU,WAAW,GAAG,CACpC,WAAU,KAAK,mBAAmB;EAErC,MAEC,WAAU,KAAK,mBAAmB;AAIpC,MAAI,WAAW,QACb;OACE,UAAU,UAAU,OAAO,UAAU,IACrC,UAAU,UAAU,OAAO,MAAM,CAEjC,WAAU,KAAK,aAAa;EAC7B,MAGD,WAAU,KAAK,aAAa;CAE/B,WAAU,iBAAiB,UAAU;AACpC,YAAU,KAAK,SAAS;EACxB,MAAM,eAAe,iBAAiB;AAEtC,aAAW,iBAAiB,YAAY,cAAc,cACpD,iBAAgB;CAEnB;AAED,QAAO;EAAE;EAAW;CAAe;AACpC;AAED,SAAS,8BACPG,iBACmB;CACnB,MAAMH,YAA8B,CAAE;CACtC,IAAI,gBAAgB;AAGpB,KAAI,gBAAgB,KAAK;EACvB,MAAM,eAAe,oBAAoB,OAAO,gBAAgB;AAChE,YAAU,KAAK,GAAG,aAAa,UAAU;CAC1C;AAGD,KAAI,gBAAgB,UAAU,UAAU,gBAAgB,OAAO,EAAE;AAC/D,YAAU,KAAK,SAAS;AACxB,aACS,gBAAgB,WAAW,YAClC,gBAAgB,OAAO,cAEvB,iBAAgB;CAEnB;AAED,QAAO;EAAE;EAAW;CAAe;AACpC;AAED,SAAS,UACPI,QAMS;AACT,KAAI,kBAAsB,QAAO;AACjC,YAAW,WAAW,UAAW,QAAO;AACxC,QAAO,OAAO,YAAY;AAC3B;;;;AAKD,SAAgB,oBAGdN,QACAO,SACAC,YACe;CACf,MAAM,YAAY,OAAO,WAAW;AACpC,MAAK,UAAW;AAEhB,KAAI,YAAY,gBAAgB,UAAU,YAAY;EACpD,MAAM,YAAY,aACd,UAAU,WAAW;AAEzB,gBAAc,cAAc,WAAY;CACzC;AAED,KAAI,YAAY,YAAY,UAAU,QAAQ;EAC5C,MAAM,eAAe,aACjB,UAAU,OAAO;AAErB,gBAAc,iBAAiB,WAAY;CAC5C;AAED;AACD;;;;AAKD,SAAgB,gBAAgBR,QAA6C;CAC3E,MAAM,eAAe,OAAO,WAAW;AACvC,eAAc,iBAAiB,WAAW;AAC3C"}
@@ -1,114 +0,0 @@
1
-
2
- //#region src/build/providerResolver.ts
3
- /**
4
- * Resolves provider configuration from the new simplified system
5
- * to the internal legacy format for backward compatibility
6
- */
7
- function resolveProviders(config, options) {
8
- const providers = [];
9
- let enableOpenApi = options.enableOpenApi || false;
10
- if (options.providers) return {
11
- providers: options.providers,
12
- enableOpenApi
13
- };
14
- if (options.provider) {
15
- const resolvedProviders = resolveMainProvider(options.provider, config.providers);
16
- providers.push(...resolvedProviders.providers);
17
- enableOpenApi = resolvedProviders.enableOpenApi || enableOpenApi;
18
- } else if (config.providers) {
19
- const resolvedProviders = resolveAllConfiguredProviders(config.providers);
20
- providers.push(...resolvedProviders.providers);
21
- enableOpenApi = resolvedProviders.enableOpenApi || enableOpenApi;
22
- } else providers.push("aws-apigatewayv2", "aws-lambda");
23
- return {
24
- providers: [...new Set(providers)],
25
- enableOpenApi
26
- };
27
- }
28
- function resolveMainProvider(mainProvider, providersConfig) {
29
- const providers = [];
30
- let enableOpenApi = false;
31
- if (mainProvider === "aws") {
32
- const awsConfig = providersConfig?.aws;
33
- if (awsConfig?.apiGateway) {
34
- if (isEnabled(awsConfig.apiGateway.v1)) providers.push("aws-apigatewayv1");
35
- if (isEnabled(awsConfig.apiGateway.v2)) providers.push("aws-apigatewayv2");
36
- } else providers.push("aws-apigatewayv2");
37
- if (awsConfig?.lambda) {
38
- if (isEnabled(awsConfig.lambda.functions) || isEnabled(awsConfig.lambda.crons)) providers.push("aws-lambda");
39
- } else providers.push("aws-lambda");
40
- } else if (mainProvider === "server") {
41
- providers.push("server");
42
- const serverConfig = providersConfig?.server;
43
- if (typeof serverConfig === "object" && serverConfig?.enableOpenApi) enableOpenApi = true;
44
- }
45
- return {
46
- providers,
47
- enableOpenApi
48
- };
49
- }
50
- function resolveAllConfiguredProviders(providersConfig) {
51
- const providers = [];
52
- let enableOpenApi = false;
53
- if (providersConfig.aws) {
54
- const awsProviders = resolveMainProvider("aws", providersConfig);
55
- providers.push(...awsProviders.providers);
56
- }
57
- if (providersConfig.server && isEnabled(providersConfig.server)) {
58
- providers.push("server");
59
- if (typeof providersConfig.server === "object" && providersConfig.server.enableOpenApi) enableOpenApi = true;
60
- }
61
- return {
62
- providers,
63
- enableOpenApi
64
- };
65
- }
66
- function isEnabled(config) {
67
- if (config === void 0) return false;
68
- if (typeof config === "boolean") return config;
69
- return config.enabled !== false;
70
- }
71
- /**
72
- * Gets configuration for a specific AWS service
73
- */
74
- function getAWSServiceConfig(config, service, subService) {
75
- const awsConfig = config.providers?.aws;
76
- if (!awsConfig) return void 0;
77
- if (service === "apiGateway" && awsConfig.apiGateway) {
78
- const apiConfig = subService ? awsConfig.apiGateway[subService] : void 0;
79
- return typeof apiConfig === "object" ? apiConfig : void 0;
80
- }
81
- if (service === "lambda" && awsConfig.lambda) {
82
- const lambdaConfig = subService ? awsConfig.lambda[subService] : void 0;
83
- return typeof lambdaConfig === "object" ? lambdaConfig : void 0;
84
- }
85
- return void 0;
86
- }
87
- /**
88
- * Gets server configuration
89
- */
90
- function getServerConfig(config) {
91
- const serverConfig = config.providers?.server;
92
- return typeof serverConfig === "object" ? serverConfig : void 0;
93
- }
94
-
95
- //#endregion
96
- Object.defineProperty(exports, 'getAWSServiceConfig', {
97
- enumerable: true,
98
- get: function () {
99
- return getAWSServiceConfig;
100
- }
101
- });
102
- Object.defineProperty(exports, 'getServerConfig', {
103
- enumerable: true,
104
- get: function () {
105
- return getServerConfig;
106
- }
107
- });
108
- Object.defineProperty(exports, 'resolveProviders', {
109
- enumerable: true,
110
- get: function () {
111
- return resolveProviders;
112
- }
113
- });
114
- //# sourceMappingURL=providerResolver-DOTbN9jo.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"providerResolver-DOTbN9jo.cjs","names":["config: GkmConfig","options: BuildOptions","providers: LegacyProvider[]","mainProvider: MainProvider","providersConfig?: ProvidersConfig","providersConfig: ProvidersConfig","config:\n | boolean\n | AWSApiGatewayConfig\n | AWSLambdaConfig\n | ServerConfig\n | undefined","service: 'apiGateway' | 'lambda'","subService?: 'v1' | 'v2' | 'functions' | 'crons'"],"sources":["../src/build/providerResolver.ts"],"sourcesContent":["import type {\n AWSApiGatewayConfig,\n AWSLambdaConfig,\n BuildOptions,\n GkmConfig,\n LegacyProvider,\n MainProvider,\n ProvidersConfig,\n ServerConfig,\n} from '../types';\n\nexport interface ResolvedProviders {\n providers: LegacyProvider[];\n enableOpenApi: boolean;\n}\n\n/**\n * Resolves provider configuration from the new simplified system\n * to the internal legacy format for backward compatibility\n */\nexport function resolveProviders(\n config: GkmConfig,\n options: BuildOptions,\n): ResolvedProviders {\n const providers: LegacyProvider[] = [];\n let enableOpenApi = options.enableOpenApi || false;\n\n // Handle legacy providers option (deprecated)\n if (options.providers) {\n return {\n providers: options.providers,\n enableOpenApi,\n };\n }\n\n // Handle new provider option\n if (options.provider) {\n const resolvedProviders = resolveMainProvider(\n options.provider,\n config.providers,\n );\n providers.push(...resolvedProviders.providers);\n enableOpenApi = resolvedProviders.enableOpenApi || enableOpenApi;\n }\n // Default: build all configured providers\n else if (config.providers) {\n const resolvedProviders = resolveAllConfiguredProviders(config.providers);\n providers.push(...resolvedProviders.providers);\n enableOpenApi = resolvedProviders.enableOpenApi || enableOpenApi;\n }\n // Fallback: use default AWS configuration\n else {\n providers.push('aws-apigatewayv2', 'aws-lambda');\n }\n\n return {\n providers: [...new Set(providers)], // Remove duplicates\n enableOpenApi,\n };\n}\n\nfunction resolveMainProvider(\n mainProvider: MainProvider,\n providersConfig?: ProvidersConfig,\n): ResolvedProviders {\n const providers: LegacyProvider[] = [];\n let enableOpenApi = false;\n\n if (mainProvider === 'aws') {\n const awsConfig = providersConfig?.aws;\n\n // Resolve API Gateway providers\n if (awsConfig?.apiGateway) {\n if (isEnabled(awsConfig.apiGateway.v1)) {\n providers.push('aws-apigatewayv1');\n }\n if (isEnabled(awsConfig.apiGateway.v2)) {\n providers.push('aws-apigatewayv2');\n }\n } else {\n // Default: enable v2 if no specific config\n providers.push('aws-apigatewayv2');\n }\n\n // Resolve Lambda providers\n if (awsConfig?.lambda) {\n if (\n isEnabled(awsConfig.lambda.functions) ||\n isEnabled(awsConfig.lambda.crons)\n ) {\n providers.push('aws-lambda');\n }\n } else {\n // Default: enable lambda if no specific config\n providers.push('aws-lambda');\n }\n } else if (mainProvider === 'server') {\n providers.push('server');\n const serverConfig = providersConfig?.server;\n\n if (typeof serverConfig === 'object' && serverConfig?.enableOpenApi) {\n enableOpenApi = true;\n }\n }\n\n return { providers, enableOpenApi };\n}\n\nfunction resolveAllConfiguredProviders(\n providersConfig: ProvidersConfig,\n): ResolvedProviders {\n const providers: LegacyProvider[] = [];\n let enableOpenApi = false;\n\n // AWS providers\n if (providersConfig.aws) {\n const awsProviders = resolveMainProvider('aws', providersConfig);\n providers.push(...awsProviders.providers);\n }\n\n // Server provider\n if (providersConfig.server && isEnabled(providersConfig.server)) {\n providers.push('server');\n if (\n typeof providersConfig.server === 'object' &&\n providersConfig.server.enableOpenApi\n ) {\n enableOpenApi = true;\n }\n }\n\n return { providers, enableOpenApi };\n}\n\nfunction isEnabled(\n config:\n | boolean\n | AWSApiGatewayConfig\n | AWSLambdaConfig\n | ServerConfig\n | undefined,\n): boolean {\n if (config === undefined) return false;\n if (typeof config === 'boolean') return config;\n return config.enabled !== false; // Default to true if enabled is not explicitly false\n}\n\n/**\n * Gets configuration for a specific AWS service\n */\nexport function getAWSServiceConfig<\n T extends AWSApiGatewayConfig | AWSLambdaConfig,\n>(\n config: GkmConfig,\n service: 'apiGateway' | 'lambda',\n subService?: 'v1' | 'v2' | 'functions' | 'crons',\n): T | undefined {\n const awsConfig = config.providers?.aws;\n if (!awsConfig) return undefined;\n\n if (service === 'apiGateway' && awsConfig.apiGateway) {\n const apiConfig = subService\n ? awsConfig.apiGateway[subService as 'v1' | 'v2']\n : undefined;\n return typeof apiConfig === 'object' ? (apiConfig as T) : undefined;\n }\n\n if (service === 'lambda' && awsConfig.lambda) {\n const lambdaConfig = subService\n ? awsConfig.lambda[subService as 'functions' | 'crons']\n : undefined;\n return typeof lambdaConfig === 'object' ? (lambdaConfig as T) : undefined;\n }\n\n return undefined;\n}\n\n/**\n * Gets server configuration\n */\nexport function getServerConfig(config: GkmConfig): ServerConfig | undefined {\n const serverConfig = config.providers?.server;\n return typeof serverConfig === 'object' ? serverConfig : undefined;\n}\n"],"mappings":";;;;;;AAoBA,SAAgB,iBACdA,QACAC,SACmB;CACnB,MAAMC,YAA8B,CAAE;CACtC,IAAI,gBAAgB,QAAQ,iBAAiB;AAG7C,KAAI,QAAQ,UACV,QAAO;EACL,WAAW,QAAQ;EACnB;CACD;AAIH,KAAI,QAAQ,UAAU;EACpB,MAAM,oBAAoB,oBACxB,QAAQ,UACR,OAAO,UACR;AACD,YAAU,KAAK,GAAG,kBAAkB,UAAU;AAC9C,kBAAgB,kBAAkB,iBAAiB;CACpD,WAEQ,OAAO,WAAW;EACzB,MAAM,oBAAoB,8BAA8B,OAAO,UAAU;AACzE,YAAU,KAAK,GAAG,kBAAkB,UAAU;AAC9C,kBAAgB,kBAAkB,iBAAiB;CACpD,MAGC,WAAU,KAAK,oBAAoB,aAAa;AAGlD,QAAO;EACL,WAAW,CAAC,GAAG,IAAI,IAAI,UAAW;EAClC;CACD;AACF;AAED,SAAS,oBACPC,cACAC,iBACmB;CACnB,MAAMF,YAA8B,CAAE;CACtC,IAAI,gBAAgB;AAEpB,KAAI,iBAAiB,OAAO;EAC1B,MAAM,YAAY,iBAAiB;AAGnC,MAAI,WAAW,YAAY;AACzB,OAAI,UAAU,UAAU,WAAW,GAAG,CACpC,WAAU,KAAK,mBAAmB;AAEpC,OAAI,UAAU,UAAU,WAAW,GAAG,CACpC,WAAU,KAAK,mBAAmB;EAErC,MAEC,WAAU,KAAK,mBAAmB;AAIpC,MAAI,WAAW,QACb;OACE,UAAU,UAAU,OAAO,UAAU,IACrC,UAAU,UAAU,OAAO,MAAM,CAEjC,WAAU,KAAK,aAAa;EAC7B,MAGD,WAAU,KAAK,aAAa;CAE/B,WAAU,iBAAiB,UAAU;AACpC,YAAU,KAAK,SAAS;EACxB,MAAM,eAAe,iBAAiB;AAEtC,aAAW,iBAAiB,YAAY,cAAc,cACpD,iBAAgB;CAEnB;AAED,QAAO;EAAE;EAAW;CAAe;AACpC;AAED,SAAS,8BACPG,iBACmB;CACnB,MAAMH,YAA8B,CAAE;CACtC,IAAI,gBAAgB;AAGpB,KAAI,gBAAgB,KAAK;EACvB,MAAM,eAAe,oBAAoB,OAAO,gBAAgB;AAChE,YAAU,KAAK,GAAG,aAAa,UAAU;CAC1C;AAGD,KAAI,gBAAgB,UAAU,UAAU,gBAAgB,OAAO,EAAE;AAC/D,YAAU,KAAK,SAAS;AACxB,aACS,gBAAgB,WAAW,YAClC,gBAAgB,OAAO,cAEvB,iBAAgB;CAEnB;AAED,QAAO;EAAE;EAAW;CAAe;AACpC;AAED,SAAS,UACPI,QAMS;AACT,KAAI,kBAAsB,QAAO;AACjC,YAAW,WAAW,UAAW,QAAO;AACxC,QAAO,OAAO,YAAY;AAC3B;;;;AAKD,SAAgB,oBAGdN,QACAO,SACAC,YACe;CACf,MAAM,YAAY,OAAO,WAAW;AACpC,MAAK,UAAW;AAEhB,KAAI,YAAY,gBAAgB,UAAU,YAAY;EACpD,MAAM,YAAY,aACd,UAAU,WAAW;AAEzB,gBAAc,cAAc,WAAY;CACzC;AAED,KAAI,YAAY,YAAY,UAAU,QAAQ;EAC5C,MAAM,eAAe,aACjB,UAAU,OAAO;AAErB,gBAAc,iBAAiB,WAAY;CAC5C;AAED;AACD;;;;AAKD,SAAgB,gBAAgBR,QAA6C;CAC3E,MAAM,eAAe,OAAO,WAAW;AACvC,eAAc,iBAAiB,WAAW;AAC3C"}
@@ -1,119 +0,0 @@
1
-
2
- //#region src/init/templates/serverless.ts
3
- const serverlessTemplate = {
4
- name: "serverless",
5
- description: "AWS Lambda handlers",
6
- dependencies: {
7
- "@geekmidas/constructs": "workspace:*",
8
- "@geekmidas/envkit": "workspace:*",
9
- "@geekmidas/logger": "workspace:*",
10
- "@geekmidas/cloud": "workspace:*",
11
- hono: "~4.8.2",
12
- pino: "~9.6.0"
13
- },
14
- devDependencies: {
15
- "@biomejs/biome": "~1.9.4",
16
- "@geekmidas/cli": "workspace:*",
17
- "@types/aws-lambda": "~8.10.92",
18
- "@types/node": "~22.0.0",
19
- tsx: "~4.20.0",
20
- turbo: "~2.3.0",
21
- typescript: "~5.8.2",
22
- vitest: "~4.0.0"
23
- },
24
- scripts: {
25
- dev: "gkm dev",
26
- build: "gkm build --provider aws-apigatewayv2",
27
- test: "vitest",
28
- "test:once": "vitest run",
29
- typecheck: "tsc --noEmit",
30
- lint: "biome lint .",
31
- fmt: "biome format . --write",
32
- "fmt:check": "biome format ."
33
- },
34
- files: (options) => {
35
- const { loggerType, routesStructure } = options;
36
- const loggerContent = `import { createLogger } from '@geekmidas/logger/${loggerType}';
37
-
38
- export const logger = createLogger();
39
- `;
40
- const getRoutePath = (file) => {
41
- switch (routesStructure) {
42
- case "centralized-endpoints": return `src/endpoints/${file}`;
43
- case "centralized-routes": return `src/routes/${file}`;
44
- case "domain-based": return `src/${file.replace(".ts", "")}/routes/index.ts`;
45
- }
46
- };
47
- const files = [
48
- {
49
- path: "src/config/env.ts",
50
- content: `import { EnvironmentParser } from '@geekmidas/envkit';
51
-
52
- export const envParser = new EnvironmentParser(process.env);
53
-
54
- export const config = envParser
55
- .create((get) => ({
56
- stage: get('STAGE').string().default('dev'),
57
- region: get('AWS_REGION').string().default('us-east-1'),${options.database ? `
58
- database: {
59
- url: get('DATABASE_URL').string(),
60
- },` : ""}
61
- }))
62
- .parse();
63
- `
64
- },
65
- {
66
- path: "src/config/logger.ts",
67
- content: loggerContent
68
- },
69
- {
70
- path: getRoutePath("health.ts"),
71
- content: `import { e } from '@geekmidas/constructs/endpoints';
72
-
73
- export default e
74
- .get('/health')
75
- .handle(async () => ({
76
- status: 'ok',
77
- timestamp: new Date().toISOString(),
78
- region: process.env.AWS_REGION || 'local',
79
- }));
80
- `
81
- },
82
- {
83
- path: "src/functions/hello.ts",
84
- content: `import { f } from '@geekmidas/constructs/functions';
85
- import { z } from 'zod';
86
-
87
- export default f
88
- .input(z.object({ name: z.string() }))
89
- .output(z.object({ message: z.string() }))
90
- .handle(async ({ input }) => ({
91
- message: \`Hello, \${input.name}!\`,
92
- }));
93
- `
94
- }
95
- ];
96
- if (options.telescope) files.push({
97
- path: "src/config/telescope.ts",
98
- content: `import { Telescope } from '@geekmidas/telescope';
99
- import { InMemoryStorage } from '@geekmidas/telescope/storage/memory';
100
-
101
- // Note: For production Lambda, consider using a persistent storage
102
- export const telescope = new Telescope({
103
- storage: new InMemoryStorage({ maxEntries: 50 }),
104
- enabled: process.env.STAGE === 'dev',
105
- });
106
- `
107
- });
108
- return files;
109
- }
110
- };
111
-
112
- //#endregion
113
- Object.defineProperty(exports, 'serverlessTemplate', {
114
- enumerable: true,
115
- get: function () {
116
- return serverlessTemplate;
117
- }
118
- });
119
- //# sourceMappingURL=serverless-AGOS-l3G.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serverless-AGOS-l3G.cjs","names":["serverlessTemplate: TemplateConfig","options: TemplateOptions","file: string","files: GeneratedFile[]"],"sources":["../src/init/templates/serverless.ts"],"sourcesContent":["import type {\n GeneratedFile,\n TemplateConfig,\n TemplateOptions,\n} from './index.js';\n\nexport const serverlessTemplate: TemplateConfig = {\n name: 'serverless',\n description: 'AWS Lambda handlers',\n\n dependencies: {\n '@geekmidas/constructs': 'workspace:*',\n '@geekmidas/envkit': 'workspace:*',\n '@geekmidas/logger': 'workspace:*',\n '@geekmidas/cloud': '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/aws-lambda': '~8.10.92',\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 --provider aws-apigatewayv2',\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 stage: get('STAGE').string().default('dev'),\n region: get('AWS_REGION').string().default('us-east-1'),${\n options.database\n ? `\n database: {\n url: get('DATABASE_URL').string(),\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 region: process.env.AWS_REGION || 'local',\n }));\n`,\n },\n\n // src/functions/hello.ts\n {\n path: 'src/functions/hello.ts',\n content: `import { f } from '@geekmidas/constructs/functions';\nimport { z } from 'zod';\n\nexport default f\n .input(z.object({ name: z.string() }))\n .output(z.object({ message: z.string() }))\n .handle(async ({ input }) => ({\n message: \\`Hello, \\${input.name}!\\`,\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\n// Note: For production Lambda, consider using a persistent storage\nexport const telescope = new Telescope({\n storage: new InMemoryStorage({ maxEntries: 50 }),\n enabled: process.env.STAGE === 'dev',\n});\n`,\n });\n }\n\n return files;\n },\n};\n"],"mappings":";;AAMA,MAAaA,qBAAqC;CAChD,MAAM;CACN,aAAa;CAEb,cAAc;EACZ,yBAAyB;EACzB,qBAAqB;EACrB,qBAAqB;EACrB,oBAAoB;EACpB,MAAM;EACN,MAAM;CACP;CAED,iBAAiB;EACf,kBAAkB;EAClB,kBAAkB;EAClB,qBAAqB;EACrB,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;;;;;;;8DAQZ,QAAQ,YACH;;;UAID,GACL;;;;GAIE;GAGD;IACE,MAAM;IACN,SAAS;GACV;GAGD;IACE,MAAM,aAAa,YAAY;IAC/B,UAAU;;;;;;;;;;GAUX;GAGD;IACE,MAAM;IACN,UAAU;;;;;;;;;;GAUX;EACF;AAGD,MAAI,QAAQ,UACV,OAAM,KAAK;GACT,MAAM;GACN,UAAU;;;;;;;;;EASX,EAAC;AAGJ,SAAO;CACR;AACF"}
@@ -1,113 +0,0 @@
1
- //#region src/init/templates/serverless.ts
2
- const serverlessTemplate = {
3
- name: "serverless",
4
- description: "AWS Lambda handlers",
5
- dependencies: {
6
- "@geekmidas/constructs": "workspace:*",
7
- "@geekmidas/envkit": "workspace:*",
8
- "@geekmidas/logger": "workspace:*",
9
- "@geekmidas/cloud": "workspace:*",
10
- hono: "~4.8.2",
11
- pino: "~9.6.0"
12
- },
13
- devDependencies: {
14
- "@biomejs/biome": "~1.9.4",
15
- "@geekmidas/cli": "workspace:*",
16
- "@types/aws-lambda": "~8.10.92",
17
- "@types/node": "~22.0.0",
18
- tsx: "~4.20.0",
19
- turbo: "~2.3.0",
20
- typescript: "~5.8.2",
21
- vitest: "~4.0.0"
22
- },
23
- scripts: {
24
- dev: "gkm dev",
25
- build: "gkm build --provider aws-apigatewayv2",
26
- test: "vitest",
27
- "test:once": "vitest run",
28
- typecheck: "tsc --noEmit",
29
- lint: "biome lint .",
30
- fmt: "biome format . --write",
31
- "fmt:check": "biome format ."
32
- },
33
- files: (options) => {
34
- const { loggerType, routesStructure } = options;
35
- const loggerContent = `import { createLogger } from '@geekmidas/logger/${loggerType}';
36
-
37
- export const logger = createLogger();
38
- `;
39
- const getRoutePath = (file) => {
40
- switch (routesStructure) {
41
- case "centralized-endpoints": return `src/endpoints/${file}`;
42
- case "centralized-routes": return `src/routes/${file}`;
43
- case "domain-based": return `src/${file.replace(".ts", "")}/routes/index.ts`;
44
- }
45
- };
46
- const files = [
47
- {
48
- path: "src/config/env.ts",
49
- content: `import { EnvironmentParser } from '@geekmidas/envkit';
50
-
51
- export const envParser = new EnvironmentParser(process.env);
52
-
53
- export const config = envParser
54
- .create((get) => ({
55
- stage: get('STAGE').string().default('dev'),
56
- region: get('AWS_REGION').string().default('us-east-1'),${options.database ? `
57
- database: {
58
- url: get('DATABASE_URL').string(),
59
- },` : ""}
60
- }))
61
- .parse();
62
- `
63
- },
64
- {
65
- path: "src/config/logger.ts",
66
- content: loggerContent
67
- },
68
- {
69
- path: getRoutePath("health.ts"),
70
- content: `import { e } from '@geekmidas/constructs/endpoints';
71
-
72
- export default e
73
- .get('/health')
74
- .handle(async () => ({
75
- status: 'ok',
76
- timestamp: new Date().toISOString(),
77
- region: process.env.AWS_REGION || 'local',
78
- }));
79
- `
80
- },
81
- {
82
- path: "src/functions/hello.ts",
83
- content: `import { f } from '@geekmidas/constructs/functions';
84
- import { z } from 'zod';
85
-
86
- export default f
87
- .input(z.object({ name: z.string() }))
88
- .output(z.object({ message: z.string() }))
89
- .handle(async ({ input }) => ({
90
- message: \`Hello, \${input.name}!\`,
91
- }));
92
- `
93
- }
94
- ];
95
- if (options.telescope) files.push({
96
- path: "src/config/telescope.ts",
97
- content: `import { Telescope } from '@geekmidas/telescope';
98
- import { InMemoryStorage } from '@geekmidas/telescope/storage/memory';
99
-
100
- // Note: For production Lambda, consider using a persistent storage
101
- export const telescope = new Telescope({
102
- storage: new InMemoryStorage({ maxEntries: 50 }),
103
- enabled: process.env.STAGE === 'dev',
104
- });
105
- `
106
- });
107
- return files;
108
- }
109
- };
110
-
111
- //#endregion
112
- export { serverlessTemplate };
113
- //# sourceMappingURL=serverless-D5HjJByU.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serverless-D5HjJByU.mjs","names":["serverlessTemplate: TemplateConfig","options: TemplateOptions","file: string","files: GeneratedFile[]"],"sources":["../src/init/templates/serverless.ts"],"sourcesContent":["import type {\n GeneratedFile,\n TemplateConfig,\n TemplateOptions,\n} from './index.js';\n\nexport const serverlessTemplate: TemplateConfig = {\n name: 'serverless',\n description: 'AWS Lambda handlers',\n\n dependencies: {\n '@geekmidas/constructs': 'workspace:*',\n '@geekmidas/envkit': 'workspace:*',\n '@geekmidas/logger': 'workspace:*',\n '@geekmidas/cloud': '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/aws-lambda': '~8.10.92',\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 --provider aws-apigatewayv2',\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 stage: get('STAGE').string().default('dev'),\n region: get('AWS_REGION').string().default('us-east-1'),${\n options.database\n ? `\n database: {\n url: get('DATABASE_URL').string(),\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 region: process.env.AWS_REGION || 'local',\n }));\n`,\n },\n\n // src/functions/hello.ts\n {\n path: 'src/functions/hello.ts',\n content: `import { f } from '@geekmidas/constructs/functions';\nimport { z } from 'zod';\n\nexport default f\n .input(z.object({ name: z.string() }))\n .output(z.object({ message: z.string() }))\n .handle(async ({ input }) => ({\n message: \\`Hello, \\${input.name}!\\`,\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\n// Note: For production Lambda, consider using a persistent storage\nexport const telescope = new Telescope({\n storage: new InMemoryStorage({ maxEntries: 50 }),\n enabled: process.env.STAGE === 'dev',\n});\n`,\n });\n }\n\n return files;\n },\n};\n"],"mappings":";AAMA,MAAaA,qBAAqC;CAChD,MAAM;CACN,aAAa;CAEb,cAAc;EACZ,yBAAyB;EACzB,qBAAqB;EACrB,qBAAqB;EACrB,oBAAoB;EACpB,MAAM;EACN,MAAM;CACP;CAED,iBAAiB;EACf,kBAAkB;EAClB,kBAAkB;EAClB,qBAAqB;EACrB,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;;;;;;;8DAQZ,QAAQ,YACH;;;UAID,GACL;;;;GAIE;GAGD;IACE,MAAM;IACN,SAAS;GACV;GAGD;IACE,MAAM,aAAa,YAAY;IAC/B,UAAU;;;;;;;;;;GAUX;GAGD;IACE,MAAM;IACN,UAAU;;;;;;;;;;GAUX;EACF;AAGD,MAAI,QAAQ,UACV,OAAM,KAAK;GACT,MAAM;GACN,UAAU;;;;;;;;;EASX,EAAC;AAGJ,SAAO;CACR;AACF"}
@@ -1,17 +0,0 @@
1
-
2
- //#region src/init/generators/source.ts
3
- /**
4
- * Generate source files from template
5
- */
6
- function generateSourceFiles(options, template) {
7
- return template.files(options);
8
- }
9
-
10
- //#endregion
11
- Object.defineProperty(exports, 'generateSourceFiles', {
12
- enumerable: true,
13
- get: function () {
14
- return generateSourceFiles;
15
- }
16
- });
17
- //# sourceMappingURL=source-C1cyfHcF.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"source-C1cyfHcF.cjs","names":["options: TemplateOptions","template: TemplateConfig"],"sources":["../src/init/generators/source.ts"],"sourcesContent":["import type {\n GeneratedFile,\n TemplateConfig,\n TemplateOptions,\n} from '../templates/index.js';\n\n/**\n * Generate source files from template\n */\nexport function generateSourceFiles(\n options: TemplateOptions,\n template: TemplateConfig,\n): GeneratedFile[] {\n return template.files(options);\n}\n"],"mappings":";;;;;AASA,SAAgB,oBACdA,SACAC,UACiB;AACjB,QAAO,SAAS,MAAM,QAAQ;AAC/B"}
@@ -1,11 +0,0 @@
1
- import { GeneratedFile, TemplateConfig, TemplateOptions } from "./index-DZgrOOOW.mjs";
2
-
3
- //#region src/init/generators/source.d.ts
4
-
5
- /**
6
- * Generate source files from template
7
- */
8
- declare function generateSourceFiles(options: TemplateOptions, template: TemplateConfig): GeneratedFile[];
9
- //#endregion
10
- export { generateSourceFiles };
11
- //# sourceMappingURL=source-C3LiNUV9.d.mts.map
@@ -1,11 +0,0 @@
1
- //#region src/init/generators/source.ts
2
- /**
3
- * Generate source files from template
4
- */
5
- function generateSourceFiles(options, template) {
6
- return template.files(options);
7
- }
8
-
9
- //#endregion
10
- export { generateSourceFiles };
11
- //# sourceMappingURL=source-CkQHBpwu.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"source-CkQHBpwu.mjs","names":["options: TemplateOptions","template: TemplateConfig"],"sources":["../src/init/generators/source.ts"],"sourcesContent":["import type {\n GeneratedFile,\n TemplateConfig,\n TemplateOptions,\n} from '../templates/index.js';\n\n/**\n * Generate source files from template\n */\nexport function generateSourceFiles(\n options: TemplateOptions,\n template: TemplateConfig,\n): GeneratedFile[] {\n return template.files(options);\n}\n"],"mappings":";;;;AASA,SAAgB,oBACdA,SACAC,UACiB;AACjB,QAAO,SAAS,MAAM,QAAQ;AAC/B"}
@@ -1,11 +0,0 @@
1
- import { GeneratedFile, TemplateConfig, TemplateOptions } from "./index-DG6xNQMH.cjs";
2
-
3
- //#region src/init/generators/source.d.ts
4
-
5
- /**
6
- * Generate source files from template
7
- */
8
- declare function generateSourceFiles(options: TemplateOptions, template: TemplateConfig): GeneratedFile[];
9
- //#endregion
10
- export { generateSourceFiles };
11
- //# sourceMappingURL=source-Dtcjbokc.d.cts.map
@@ -1,88 +0,0 @@
1
- import { apiTemplate } from "./api-Bp5TIl1R.mjs";
2
- import { minimalTemplate } from "./minimal-BkyASH_C.mjs";
3
- import { serverlessTemplate } from "./serverless-D5HjJByU.mjs";
4
- import { workerTemplate } from "./worker-CiP420As.mjs";
5
-
6
- //#region src/init/templates/index.ts
7
- /**
8
- * OpenAPI output path (fixed, not configurable)
9
- */
10
- const OPENAPI_OUTPUT_PATH = "./.gkm/openapi.ts";
11
- /**
12
- * All available templates
13
- */
14
- const templates = {
15
- minimal: minimalTemplate,
16
- api: apiTemplate,
17
- serverless: serverlessTemplate,
18
- worker: workerTemplate
19
- };
20
- /**
21
- * Template choices for prompts
22
- */
23
- const templateChoices = [
24
- {
25
- title: "Minimal",
26
- value: "minimal",
27
- description: "Basic health endpoint"
28
- },
29
- {
30
- title: "API",
31
- value: "api",
32
- description: "Full API with auth, database, services"
33
- },
34
- {
35
- title: "Serverless",
36
- value: "serverless",
37
- description: "AWS Lambda handlers"
38
- },
39
- {
40
- title: "Worker",
41
- value: "worker",
42
- description: "Background job processing"
43
- }
44
- ];
45
- /**
46
- * Logger type choices for prompts
47
- */
48
- const loggerTypeChoices = [{
49
- title: "Pino",
50
- value: "pino",
51
- description: "Fast JSON logger for production (recommended)"
52
- }, {
53
- title: "Console",
54
- value: "console",
55
- description: "Simple console logger for development"
56
- }];
57
- /**
58
- * Routes structure choices for prompts
59
- */
60
- const routesStructureChoices = [
61
- {
62
- title: "Centralized (endpoints)",
63
- value: "centralized-endpoints",
64
- description: "src/endpoints/**/*.ts"
65
- },
66
- {
67
- title: "Centralized (routes)",
68
- value: "centralized-routes",
69
- description: "src/routes/**/*.ts"
70
- },
71
- {
72
- title: "Domain-based",
73
- value: "domain-based",
74
- description: "src/**/routes/*.ts (e.g., src/users/routes/list.ts)"
75
- }
76
- ];
77
- /**
78
- * Get a template by name
79
- */
80
- function getTemplate(name) {
81
- const template = templates[name];
82
- if (!template) throw new Error(`Unknown template: ${name}`);
83
- return template;
84
- }
85
-
86
- //#endregion
87
- export { OPENAPI_OUTPUT_PATH, getTemplate, loggerTypeChoices, routesStructureChoices, templateChoices, templates };
88
- //# sourceMappingURL=templates-C0EMmhwb.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"templates-C0EMmhwb.mjs","names":["templates: Record<TemplateName, TemplateConfig>","name: TemplateName"],"sources":["../src/init/templates/index.ts"],"sourcesContent":["import { apiTemplate } from './api.js';\nimport { minimalTemplate } from './minimal.js';\nimport { serverlessTemplate } from './serverless.js';\nimport { workerTemplate } from './worker.js';\n\n/**\n * OpenAPI output path (fixed, not configurable)\n */\nexport const OPENAPI_OUTPUT_PATH = './.gkm/openapi.ts';\n\n/**\n * Logger implementation type\n */\nexport type LoggerType = 'pino' | 'console';\n\n/**\n * Routes structure pattern\n */\nexport type RoutesStructure =\n | 'centralized-endpoints'\n | 'centralized-routes'\n | 'domain-based';\n\n/**\n * Options collected from user prompts\n */\nexport interface TemplateOptions {\n name: string;\n template: TemplateName;\n telescope: boolean;\n database: boolean;\n loggerType: LoggerType;\n routesStructure: RoutesStructure;\n monorepo: boolean;\n /** Path for the API app in monorepo (e.g., 'apps/api') */\n apiPath: string;\n}\n\n/**\n * A file to be generated\n */\nexport interface GeneratedFile {\n path: string;\n content: string;\n}\n\n/**\n * Template configuration\n */\nexport interface TemplateConfig {\n name: TemplateName;\n description: string;\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n scripts: Record<string, string>;\n files: (options: TemplateOptions) => GeneratedFile[];\n}\n\nexport type TemplateName = 'minimal' | 'api' | 'serverless' | 'worker';\n\n/**\n * All available templates\n */\nexport const templates: Record<TemplateName, TemplateConfig> = {\n minimal: minimalTemplate,\n api: apiTemplate,\n serverless: serverlessTemplate,\n worker: workerTemplate,\n};\n\n/**\n * Template choices for prompts\n */\nexport const templateChoices = [\n {\n title: 'Minimal',\n value: 'minimal' as TemplateName,\n description: 'Basic health endpoint',\n },\n {\n title: 'API',\n value: 'api' as TemplateName,\n description: 'Full API with auth, database, services',\n },\n {\n title: 'Serverless',\n value: 'serverless' as TemplateName,\n description: 'AWS Lambda handlers',\n },\n {\n title: 'Worker',\n value: 'worker' as TemplateName,\n description: 'Background job processing',\n },\n];\n\n/**\n * Logger type choices for prompts\n */\nexport const loggerTypeChoices = [\n {\n title: 'Pino',\n value: 'pino' as LoggerType,\n description: 'Fast JSON logger for production (recommended)',\n },\n {\n title: 'Console',\n value: 'console' as LoggerType,\n description: 'Simple console logger for development',\n },\n];\n\n/**\n * Routes structure choices for prompts\n */\nexport const routesStructureChoices = [\n {\n title: 'Centralized (endpoints)',\n value: 'centralized-endpoints' as RoutesStructure,\n description: 'src/endpoints/**/*.ts',\n },\n {\n title: 'Centralized (routes)',\n value: 'centralized-routes' as RoutesStructure,\n description: 'src/routes/**/*.ts',\n },\n {\n title: 'Domain-based',\n value: 'domain-based' as RoutesStructure,\n description: 'src/**/routes/*.ts (e.g., src/users/routes/list.ts)',\n },\n];\n\n/**\n * Get a template by name\n */\nexport function getTemplate(name: TemplateName): TemplateConfig {\n const template = templates[name];\n if (!template) {\n throw new Error(`Unknown template: ${name}`);\n }\n return template;\n}\n"],"mappings":";;;;;;;;;AAQA,MAAa,sBAAsB;;;;AAuDnC,MAAaA,YAAkD;CAC7D,SAAS;CACT,KAAK;CACL,YAAY;CACZ,QAAQ;AACT;;;;AAKD,MAAa,kBAAkB;CAC7B;EACE,OAAO;EACP,OAAO;EACP,aAAa;CACd;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;CACd;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;CACd;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;CACd;AACF;;;;AAKD,MAAa,oBAAoB,CAC/B;CACE,OAAO;CACP,OAAO;CACP,aAAa;AACd,GACD;CACE,OAAO;CACP,OAAO;CACP,aAAa;AACd,CACF;;;;AAKD,MAAa,yBAAyB;CACpC;EACE,OAAO;EACP,OAAO;EACP,aAAa;CACd;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;CACd;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;CACd;AACF;;;;AAKD,SAAgB,YAAYC,MAAoC;CAC9D,MAAM,WAAW,UAAU;AAC3B,MAAK,SACH,OAAM,IAAI,OAAO,oBAAoB,KAAK;AAE5C,QAAO;AACR"}