@geekmidas/cli 9.0.2 → 10.0.0-alpha.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.
- package/README.md +71 -120
- package/dist/{CachedStateProvider-BdX7klRc.cjs → CachedStateProvider-BLo7zv7S.cjs} +1 -1
- package/dist/CachedStateProvider-BxoAm-B2.mjs +3 -0
- package/dist/{CachedStateProvider-klLWZXWF.cjs → CachedStateProvider-CqPdW7CB.cjs} +1 -1
- package/dist/{CachedStateProvider-klLWZXWF.cjs.map → CachedStateProvider-CqPdW7CB.cjs.map} +1 -1
- package/dist/{CachedStateProvider-CzyFct42.mjs → CachedStateProvider-DTniehMP.mjs} +1 -1
- package/dist/{CachedStateProvider-CzyFct42.mjs.map → CachedStateProvider-DTniehMP.mjs.map} +1 -1
- package/dist/{HostingerProvider-B2ZYz7Yc.mjs → HostingerProvider-Cft7lEYr.mjs} +4 -3
- package/dist/HostingerProvider-Cft7lEYr.mjs.map +1 -0
- package/dist/{HostingerProvider-CrHfsgz9.cjs → HostingerProvider-h3EbEp-Z.cjs} +4 -3
- package/dist/HostingerProvider-h3EbEp-Z.cjs.map +1 -0
- package/dist/{LocalStateProvider-CP49rjzt.mjs → LocalStateProvider-Bn6tS-oL.mjs} +1 -1
- package/dist/{LocalStateProvider-CP49rjzt.mjs.map → LocalStateProvider-Bn6tS-oL.mjs.map} +1 -1
- package/dist/{LocalStateProvider-CalzNfNA.cjs → LocalStateProvider-Db9SEjyH.cjs} +1 -1
- package/dist/{LocalStateProvider-CalzNfNA.cjs.map → LocalStateProvider-Db9SEjyH.cjs.map} +1 -1
- package/dist/{Route53Provider-tlgBzrRQ.mjs → Route53Provider-RdpUDJQk.mjs} +1 -1
- package/dist/{Route53Provider-tlgBzrRQ.mjs.map → Route53Provider-RdpUDJQk.mjs.map} +1 -1
- package/dist/{Route53Provider-DwgXiLxt.cjs → Route53Provider-di2fMM5N.cjs} +1 -1
- package/dist/{Route53Provider-DwgXiLxt.cjs.map → Route53Provider-di2fMM5N.cjs.map} +1 -1
- package/dist/{SSMStateProvider-BlrTiV5m.mjs → SSMStateProvider-BRt2py-A.mjs} +1 -1
- package/dist/{SSMStateProvider-BlrTiV5m.mjs.map → SSMStateProvider-BRt2py-A.mjs.map} +1 -1
- package/dist/{SSMStateProvider-Bt6r8CTL.cjs → SSMStateProvider-DyX8s9HI.cjs} +1 -1
- package/dist/{SSMStateProvider-Bt6r8CTL.cjs.map → SSMStateProvider-DyX8s9HI.cjs.map} +1 -1
- package/dist/{backup-provisioner-Xunq-p_8.mjs → backup-provisioner-Bgj5Vi_L.mjs} +2 -2
- package/dist/{backup-provisioner-Xunq-p_8.mjs.map → backup-provisioner-Bgj5Vi_L.mjs.map} +1 -1
- package/dist/{backup-provisioner-B3HBN-2k.cjs → backup-provisioner-BrsHwYG0.cjs} +2 -2
- package/dist/{backup-provisioner-B3HBN-2k.cjs.map → backup-provisioner-BrsHwYG0.cjs.map} +1 -1
- package/dist/{bundler-Dufq3uvI.cjs → bundler-BY1OmV1e.cjs} +44 -14
- package/dist/bundler-BY1OmV1e.cjs.map +1 -0
- package/dist/{bundler-DkA4qzUD.mjs → bundler-Be8Zg4Wd.mjs} +45 -15
- package/dist/bundler-Be8Zg4Wd.mjs.map +1 -0
- package/dist/config-D8o6I_7Z.mjs +469 -0
- package/dist/config-D8o6I_7Z.mjs.map +1 -0
- package/dist/config-DbPE1KXF.cjs +535 -0
- package/dist/config-DbPE1KXF.cjs.map +1 -0
- package/dist/config.cjs +3 -2
- package/dist/config.d.cts +2 -2
- package/dist/config.d.cts.map +1 -1
- package/dist/config.d.mts +2 -2
- package/dist/config.d.mts.map +1 -1
- package/dist/config.mjs +3 -2
- package/dist/{credentials-s1kLcIzK.mjs → credentials-B5zRHdAl.mjs} +21 -6
- package/dist/credentials-B5zRHdAl.mjs.map +1 -0
- package/dist/{credentials-C8DWtnMY.cjs → credentials-BapzjyV5.cjs} +26 -5
- package/dist/credentials-BapzjyV5.cjs.map +1 -0
- package/dist/credentials-Dh0Q6HzY.mjs +2548 -0
- package/dist/credentials-Dh0Q6HzY.mjs.map +1 -0
- package/dist/credentials-K961ThG3.cjs +2680 -0
- package/dist/credentials-K961ThG3.cjs.map +1 -0
- package/dist/deploy/sniffer-routes-worker.cjs +6 -2
- package/dist/deploy/sniffer-routes-worker.cjs.map +1 -1
- package/dist/deploy/sniffer-routes-worker.mjs +6 -2
- package/dist/deploy/sniffer-routes-worker.mjs.map +1 -1
- package/dist/discover-CAlFgYec.mjs +229 -0
- package/dist/discover-CAlFgYec.mjs.map +1 -0
- package/dist/discover-DTmFeloL.cjs +271 -0
- package/dist/discover-DTmFeloL.cjs.map +1 -0
- package/dist/dokploy-api-BS2xnJLZ.mjs +3 -0
- package/dist/{dokploy-api-CqOIKHme.cjs → dokploy-api-BsVH0y_s.cjs} +141 -32
- package/dist/dokploy-api-BsVH0y_s.cjs.map +1 -0
- package/dist/dokploy-api-BuxDRo3l.cjs +3 -0
- package/dist/{dokploy-api-sfZFlWuE.mjs → dokploy-api-aTFPz7_4.mjs} +141 -32
- package/dist/dokploy-api-aTFPz7_4.mjs.map +1 -0
- package/dist/emit-CbcRolsa.cjs +236 -0
- package/dist/emit-CbcRolsa.cjs.map +1 -0
- package/dist/emit-CiZS_5Ub.mjs +206 -0
- package/dist/emit-CiZS_5Ub.mjs.map +1 -0
- package/dist/{encryption-MfXAiFTm.cjs → encryption-C6jaU0hE.cjs} +1 -1
- package/dist/{encryption-MfXAiFTm.cjs.map → encryption-C6jaU0hE.cjs.map} +1 -1
- package/dist/{encryption-BVS7Vmzs.cjs → encryption-CHzzeR8a.cjs} +1 -1
- package/dist/encryption-CQUncu7v.mjs +3 -0
- package/dist/{encryption-CO5Q4Bhf.mjs → encryption-D-abyhZx.mjs} +1 -1
- package/dist/{encryption-CO5Q4Bhf.mjs.map → encryption-D-abyhZx.mjs.map} +1 -1
- package/dist/fullstack-secrets-C-GGohke.cjs +111 -0
- package/dist/fullstack-secrets-C-GGohke.cjs.map +1 -0
- package/dist/fullstack-secrets-D1o9-G5l.mjs +87 -0
- package/dist/fullstack-secrets-D1o9-G5l.mjs.map +1 -0
- package/dist/{fullstack-secrets-BYzi6Hwl.cjs → generator-CNzBw7g5.cjs} +1 -114
- package/dist/generator-CNzBw7g5.cjs.map +1 -0
- package/dist/{fullstack-secrets-l8s3II_H.mjs → generator-VE2JrFlY.mjs} +2 -85
- package/dist/generator-VE2JrFlY.mjs.map +1 -0
- package/dist/index-BThUzEIp.d.mts +175 -0
- package/dist/index-BThUzEIp.d.mts.map +1 -0
- package/dist/index-CHB4tSzX.d.cts +175 -0
- package/dist/index-CHB4tSzX.d.cts.map +1 -0
- package/dist/index.cjs +2329 -1584
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +2306 -1561
- package/dist/index.mjs.map +1 -1
- package/dist/{openapi-Cfwi0fqF.mjs → openapi-CgpMWMmM.mjs} +174 -95
- package/dist/openapi-CgpMWMmM.mjs.map +1 -0
- package/dist/{openapi-BzNOC7_i.cjs → openapi-CljONd_M.cjs} +175 -108
- package/dist/openapi-CljONd_M.cjs.map +1 -0
- package/dist/{openapi-react-query-C4iIvpPf.mjs → openapi-react-query-Byltvm_7.mjs} +2 -2
- package/dist/openapi-react-query-Byltvm_7.mjs.map +1 -0
- package/dist/{openapi-react-query-CYWik72n.cjs → openapi-react-query-CmJ1xDbn.cjs} +2 -2
- package/dist/openapi-react-query-CmJ1xDbn.cjs.map +1 -0
- package/dist/openapi-react-query.cjs +1 -1
- package/dist/openapi-react-query.mjs +1 -1
- package/dist/openapi.cjs +4 -3
- package/dist/openapi.d.cts +1 -1
- package/dist/openapi.d.mts +1 -1
- package/dist/openapi.mjs +4 -3
- package/dist/reconcile/public.cjs +9 -0
- package/dist/reconcile/public.d.cts +125 -0
- package/dist/reconcile/public.d.cts.map +1 -0
- package/dist/reconcile/public.d.mts +125 -0
- package/dist/reconcile/public.d.mts.map +1 -0
- package/dist/reconcile/public.mjs +4 -0
- package/dist/{reconcile-B2FoJE0a.mjs → reconcile-CFs8C_1a.mjs} +5 -4
- package/dist/reconcile-CFs8C_1a.mjs.map +1 -0
- package/dist/{reconcile-BzqKJ2Rt.cjs → reconcile-D0pimNiy.cjs} +5 -4
- package/dist/reconcile-D0pimNiy.cjs.map +1 -0
- package/dist/setup-CJiQM2pX.cjs +473 -0
- package/dist/setup-CJiQM2pX.cjs.map +1 -0
- package/dist/setup-DMtU3p41.cjs +11 -0
- package/dist/setup-DOsYueeQ.mjs +443 -0
- package/dist/setup-DOsYueeQ.mjs.map +1 -0
- package/dist/setup-DSutDAlt.mjs +11 -0
- package/dist/{storage-B1wvztiJ.cjs → storage-BJmzYxt8.cjs} +1 -1
- package/dist/{storage-B1wvztiJ.cjs.map → storage-BJmzYxt8.cjs.map} +1 -1
- package/dist/{storage-DOEtT2Hr.cjs → storage-BM9hGpgv.cjs} +1 -1
- package/dist/{storage-dbb9RyBl.mjs → storage-Bi24WfoW.mjs} +1 -1
- package/dist/{storage-dbb9RyBl.mjs.map → storage-Bi24WfoW.mjs.map} +1 -1
- package/dist/{storage-Cs4WBsc4.mjs → storage-CYlGwWTj.mjs} +1 -1
- package/dist/{sync-CSooqRQ8.mjs → sync-CmEuNZsB.mjs} +2 -2
- package/dist/{sync-CSooqRQ8.mjs.map → sync-CmEuNZsB.mjs.map} +1 -1
- package/dist/sync-D306yOWu.cjs +4 -0
- package/dist/{sync-o_CtEbvR.cjs → sync-SizaChmC.cjs} +2 -2
- package/dist/{sync-o_CtEbvR.cjs.map → sync-SizaChmC.cjs.map} +1 -1
- package/dist/{sync-B5UHXwRM.mjs → sync-hOqAWHR6.mjs} +1 -1
- package/dist/{index-Bw548Bta.d.mts → types-C-arnQ1r.d.mts} +590 -143
- package/dist/types-C-arnQ1r.d.mts.map +1 -0
- package/dist/{index-DTpkeFb8.d.cts → types-abJQuk7m.d.cts} +590 -143
- package/dist/types-abJQuk7m.d.cts.map +1 -0
- package/dist/workspace/index.cjs +5 -1
- package/dist/workspace/index.d.cts +3 -3
- package/dist/workspace/index.d.mts +3 -3
- package/dist/workspace/index.mjs +2 -2
- package/dist/{workspace-D-37Ylqo.mjs → workspace-7FqprxuJ.mjs} +117 -30
- package/dist/workspace-7FqprxuJ.mjs.map +1 -0
- package/dist/workspace-8acupeaI.cjs +9 -0
- package/dist/{workspace-CQTT7HJQ.cjs → workspace-XvqO9jIv.cjs} +139 -28
- package/dist/workspace-XvqO9jIv.cjs.map +1 -0
- package/dist/workspace-yP5AHnrn.mjs +8 -0
- package/package.json +26 -9
- package/CHANGELOG.md +0 -650
- package/FUNCTION_CRON_SUPPORT.md +0 -266
- package/dist/CachedStateProvider-GcGziXh1.mjs +0 -3
- package/dist/HostingerProvider-B2ZYz7Yc.mjs.map +0 -1
- package/dist/HostingerProvider-CrHfsgz9.cjs.map +0 -1
- package/dist/bundler-DkA4qzUD.mjs.map +0 -1
- package/dist/bundler-Dufq3uvI.cjs.map +0 -1
- package/dist/config-Bbu1JKvf.mjs +0 -211
- package/dist/config-Bbu1JKvf.mjs.map +0 -1
- package/dist/config-DujV8DbR.cjs +0 -253
- package/dist/config-DujV8DbR.cjs.map +0 -1
- package/dist/credentials-C8DWtnMY.cjs.map +0 -1
- package/dist/credentials-s1kLcIzK.mjs.map +0 -1
- package/dist/dokploy-api-BPYkG-ZZ.cjs +0 -3
- package/dist/dokploy-api-BiSzWM4v.mjs +0 -3
- package/dist/dokploy-api-CqOIKHme.cjs.map +0 -1
- package/dist/dokploy-api-sfZFlWuE.mjs.map +0 -1
- package/dist/encryption-Bd_m4q3g.mjs +0 -3
- package/dist/fullstack-secrets-BYzi6Hwl.cjs.map +0 -1
- package/dist/fullstack-secrets-l8s3II_H.mjs.map +0 -1
- package/dist/index-Bw548Bta.d.mts.map +0 -1
- package/dist/index-DTpkeFb8.d.cts.map +0 -1
- package/dist/openapi-BzNOC7_i.cjs.map +0 -1
- package/dist/openapi-Cfwi0fqF.mjs.map +0 -1
- package/dist/openapi-react-query-C4iIvpPf.mjs.map +0 -1
- package/dist/openapi-react-query-CYWik72n.cjs.map +0 -1
- package/dist/reconcile-B2FoJE0a.mjs.map +0 -1
- package/dist/reconcile-BzqKJ2Rt.cjs.map +0 -1
- package/dist/setup-DDXUXzzl.mjs +0 -765
- package/dist/setup-DDXUXzzl.mjs.map +0 -1
- package/dist/setup-DLwhfyt-.cjs +0 -8
- package/dist/setup-Dh-B7YTX.mjs +0 -8
- package/dist/setup-WZ-xqAQO.cjs +0 -849
- package/dist/setup-WZ-xqAQO.cjs.map +0 -1
- package/dist/sync-BLA94rgC.cjs +0 -4
- package/dist/types-B3GQUg3k.d.mts +0 -280
- package/dist/types-B3GQUg3k.d.mts.map +0 -1
- package/dist/types-BWQDiooe.d.cts +0 -280
- package/dist/types-BWQDiooe.d.cts.map +0 -1
- package/dist/workspace-CQTT7HJQ.cjs.map +0 -1
- package/dist/workspace-D-37Ylqo.mjs.map +0 -1
- package/docs/OPENAPI_TYPESCRIPT_DESIGN.md +0 -408
- package/docs/dev-server-resilience-design.md +0 -189
- package/docs/manifest-refactor-design.md +0 -287
- package/examples/cron-example.ts +0 -45
- package/examples/env.ts +0 -33
- package/examples/function-example.ts +0 -40
- package/examples/gkm.config.json +0 -22
- package/examples/gkm.config.ts +0 -14
- package/examples/gkm.minimal.config.json +0 -7
- package/examples/gkm.production.config.json +0 -27
- package/examples/logger.ts +0 -10
- package/scripts/sync-versions.ts +0 -108
- package/src/__tests__/EndpointGenerator.hooks.spec.ts +0 -204
- package/src/__tests__/config.spec.ts +0 -422
- package/src/__tests__/loadEnvFiles.spec.ts +0 -131
- package/src/__tests__/normalizeHooksConfig.spec.ts +0 -63
- package/src/__tests__/openapi-react-query.spec.ts +0 -506
- package/src/__tests__/openapi.spec.ts +0 -625
- package/src/__tests__/test-helpers.ts +0 -181
- package/src/auth/__tests__/credentials.spec.ts +0 -331
- package/src/auth/__tests__/index.spec.ts +0 -237
- package/src/auth/credentials.ts +0 -286
- package/src/auth/index.ts +0 -233
- package/src/build/__tests__/bundler.spec.ts +0 -446
- package/src/build/__tests__/endpoint-analyzer.spec.ts +0 -623
- package/src/build/__tests__/handler-templates.spec.ts +0 -1287
- package/src/build/__tests__/index-new.spec.ts +0 -550
- package/src/build/__tests__/manifests.spec.ts +0 -583
- package/src/build/__tests__/partitions.spec.ts +0 -110
- package/src/build/__tests__/workspace-build.spec.ts +0 -215
- package/src/build/bundler.ts +0 -256
- package/src/build/endpoint-analyzer.ts +0 -236
- package/src/build/handler-templates.ts +0 -1253
- package/src/build/index.ts +0 -616
- package/src/build/manifests.ts +0 -285
- package/src/build/partitions.ts +0 -58
- package/src/build/providerResolver.ts +0 -184
- package/src/build/types.ts +0 -104
- package/src/config.ts +0 -330
- package/src/credentials/__tests__/fullDockerPorts.spec.ts +0 -144
- package/src/credentials/__tests__/helpers.ts +0 -112
- package/src/credentials/__tests__/prepareEntryCredentials.spec.ts +0 -125
- package/src/credentials/__tests__/readonlyDockerPorts.spec.ts +0 -190
- package/src/credentials/__tests__/workspaceCredentials.spec.ts +0 -209
- package/src/credentials/index.ts +0 -843
- package/src/debug.ts +0 -68
- package/src/deploy/CachedStateProvider.ts +0 -86
- package/src/deploy/LocalStateProvider.ts +0 -57
- package/src/deploy/SSMStateProvider.ts +0 -117
- package/src/deploy/StateProvider.ts +0 -175
- package/src/deploy/__tests__/CachedStateProvider.spec.ts +0 -235
- package/src/deploy/__tests__/HostingerProvider.spec.ts +0 -347
- package/src/deploy/__tests__/LocalStateProvider.spec.ts +0 -130
- package/src/deploy/__tests__/Route53Provider.spec.ts +0 -425
- package/src/deploy/__tests__/SSMStateProvider.spec.ts +0 -201
- package/src/deploy/__tests__/__fixtures__/entry-apps/async-entry.ts +0 -24
- package/src/deploy/__tests__/__fixtures__/entry-apps/nested-config-entry.ts +0 -24
- package/src/deploy/__tests__/__fixtures__/entry-apps/no-env-entry.ts +0 -12
- package/src/deploy/__tests__/__fixtures__/entry-apps/simple-entry.ts +0 -14
- package/src/deploy/__tests__/__fixtures__/entry-apps/throwing-entry.ts +0 -16
- package/src/deploy/__tests__/__fixtures__/env-parsers/non-function-export.ts +0 -10
- package/src/deploy/__tests__/__fixtures__/env-parsers/optional-env-parser.ts +0 -21
- package/src/deploy/__tests__/__fixtures__/env-parsers/parseable-env-parser.ts +0 -18
- package/src/deploy/__tests__/__fixtures__/env-parsers/throwing-env-parser.ts +0 -16
- package/src/deploy/__tests__/__fixtures__/env-parsers/valid-env-parser.ts +0 -16
- package/src/deploy/__tests__/__fixtures__/route-apps/endpoints/auth.ts +0 -16
- package/src/deploy/__tests__/__fixtures__/route-apps/endpoints/health.ts +0 -13
- package/src/deploy/__tests__/__fixtures__/route-apps/endpoints/users.ts +0 -15
- package/src/deploy/__tests__/__fixtures__/route-apps/services.ts +0 -55
- package/src/deploy/__tests__/backup-provisioner.spec.ts +0 -428
- package/src/deploy/__tests__/createDnsProvider.spec.ts +0 -195
- package/src/deploy/__tests__/createStateProvider.spec.ts +0 -126
- package/src/deploy/__tests__/dns-orchestration.spec.ts +0 -192
- package/src/deploy/__tests__/dns-verification.spec.ts +0 -229
- package/src/deploy/__tests__/docker.spec.ts +0 -149
- package/src/deploy/__tests__/dokploy-api.spec.ts +0 -697
- package/src/deploy/__tests__/dokploy.spec.ts +0 -435
- package/src/deploy/__tests__/domain.spec.ts +0 -235
- package/src/deploy/__tests__/env-resolver.spec.ts +0 -903
- package/src/deploy/__tests__/index.spec.ts +0 -1091
- package/src/deploy/__tests__/init.spec.ts +0 -793
- package/src/deploy/__tests__/secrets.spec.ts +0 -303
- package/src/deploy/__tests__/sniffer.spec.ts +0 -838
- package/src/deploy/__tests__/state-e2e.spec.ts +0 -387
- package/src/deploy/__tests__/state.spec.ts +0 -876
- package/src/deploy/__tests__/undeploy.spec.ts +0 -758
- package/src/deploy/backup-provisioner.ts +0 -316
- package/src/deploy/dns/DnsProvider.ts +0 -201
- package/src/deploy/dns/HostingerProvider.ts +0 -174
- package/src/deploy/dns/Route53Provider.ts +0 -340
- package/src/deploy/dns/hostinger-api.ts +0 -261
- package/src/deploy/dns/index.ts +0 -627
- package/src/deploy/docker.ts +0 -260
- package/src/deploy/dokploy-api.ts +0 -1101
- package/src/deploy/dokploy.ts +0 -177
- package/src/deploy/domain.ts +0 -134
- package/src/deploy/env-resolver.ts +0 -305
- package/src/deploy/index.ts +0 -2094
- package/src/deploy/init.ts +0 -427
- package/src/deploy/secrets.ts +0 -187
- package/src/deploy/sniffer-envkit-patch.ts +0 -61
- package/src/deploy/sniffer-hooks.ts +0 -57
- package/src/deploy/sniffer-loader.ts +0 -28
- package/src/deploy/sniffer-routes-worker.ts +0 -104
- package/src/deploy/sniffer-worker.ts +0 -75
- package/src/deploy/sniffer.ts +0 -578
- package/src/deploy/state-commands.ts +0 -274
- package/src/deploy/state.ts +0 -482
- package/src/deploy/types.ts +0 -102
- package/src/deploy/undeploy.ts +0 -407
- package/src/dev/__tests__/entry-integration.spec.ts +0 -347
- package/src/dev/__tests__/entry.spec.ts +0 -144
- package/src/dev/__tests__/index.spec.ts +0 -2084
- package/src/dev/index.ts +0 -1649
- package/src/docker/__tests__/compose.spec.ts +0 -1142
- package/src/docker/__tests__/templates.spec.ts +0 -694
- package/src/docker/compose.ts +0 -808
- package/src/docker/index.ts +0 -523
- package/src/docker/templates.ts +0 -1067
- package/src/exec/index.ts +0 -118
- package/src/generators/CronGenerator.ts +0 -105
- package/src/generators/EndpointGenerator.ts +0 -954
- package/src/generators/FunctionGenerator.ts +0 -117
- package/src/generators/Generator.ts +0 -147
- package/src/generators/OpenApiTsGenerator.ts +0 -821
- package/src/generators/QueueGenerator.ts +0 -245
- package/src/generators/SubscriberGenerator.ts +0 -282
- package/src/generators/TopicGenerator.ts +0 -45
- package/src/generators/__tests__/CronGenerator.spec.ts +0 -445
- package/src/generators/__tests__/EndpointGenerator.spec.ts +0 -544
- package/src/generators/__tests__/FunctionGenerator.spec.ts +0 -256
- package/src/generators/__tests__/Generator.bustCache.spec.ts +0 -72
- package/src/generators/__tests__/OpenApiTsGenerator.registry.spec.ts +0 -98
- package/src/generators/__tests__/OpenApiTsGenerator.responseType.spec.ts +0 -56
- package/src/generators/__tests__/QueueGenerator.spec.ts +0 -141
- package/src/generators/__tests__/SubscriberGenerator.spec.ts +0 -410
- package/src/generators/index.ts +0 -11
- package/src/index.ts +0 -972
- package/src/init/__tests__/generators.spec.ts +0 -1070
- package/src/init/__tests__/init.spec.ts +0 -577
- package/src/init/__tests__/utils.spec.ts +0 -104
- package/src/init/generators/auth.ts +0 -225
- package/src/init/generators/config.ts +0 -316
- package/src/init/generators/docker.ts +0 -388
- package/src/init/generators/env.ts +0 -62
- package/src/init/generators/index.ts +0 -6
- package/src/init/generators/mobile-expo.ts +0 -576
- package/src/init/generators/models.ts +0 -153
- package/src/init/generators/monorepo.ts +0 -475
- package/src/init/generators/package.ts +0 -95
- package/src/init/generators/source.ts +0 -15
- package/src/init/generators/test.ts +0 -178
- package/src/init/generators/ui.ts +0 -1473
- package/src/init/generators/web-tanstack.ts +0 -348
- package/src/init/generators/web.ts +0 -363
- package/src/init/index.ts +0 -542
- package/src/init/templates/api.ts +0 -404
- package/src/init/templates/index.ts +0 -342
- package/src/init/templates/minimal.ts +0 -207
- package/src/init/templates/serverless.ts +0 -148
- package/src/init/templates/worker.ts +0 -216
- package/src/init/utils.ts +0 -197
- package/src/init/versions.ts +0 -52
- package/src/openapi-react-query.ts +0 -288
- package/src/openapi.ts +0 -259
- package/src/secrets/__tests__/encryption.spec.ts +0 -226
- package/src/secrets/__tests__/generator.spec.ts +0 -575
- package/src/secrets/__tests__/index.spec.ts +0 -91
- package/src/secrets/__tests__/reconcile.spec.ts +0 -123
- package/src/secrets/__tests__/storage.spec.ts +0 -645
- package/src/secrets/encryption.ts +0 -91
- package/src/secrets/generator.ts +0 -329
- package/src/secrets/index.ts +0 -417
- package/src/secrets/keystore.ts +0 -144
- package/src/secrets/reconcile.ts +0 -53
- package/src/secrets/storage.ts +0 -337
- package/src/secrets/sync.ts +0 -136
- package/src/secrets/types.ts +0 -70
- package/src/setup/__tests__/auto-setup.spec.ts +0 -147
- package/src/setup/__tests__/reconcile-secrets.spec.ts +0 -439
- package/src/setup/fullstack-secrets.ts +0 -140
- package/src/setup/index.ts +0 -411
- package/src/test/__tests__/__fixtures__/workspace.ts +0 -104
- package/src/test/__tests__/api.spec.ts +0 -199
- package/src/test/__tests__/auth.spec.ts +0 -162
- package/src/test/__tests__/index.spec.ts +0 -502
- package/src/test/__tests__/web.spec.ts +0 -210
- package/src/test/index.ts +0 -198
- package/src/types.ts +0 -363
- package/src/upgrade/__tests__/index.spec.ts +0 -354
- package/src/upgrade/index.ts +0 -253
- package/src/workspace/__tests__/client-generator.spec.ts +0 -326
- package/src/workspace/__tests__/index.spec.ts +0 -766
- package/src/workspace/__tests__/publicEnv.spec.ts +0 -64
- package/src/workspace/__tests__/schema.spec.ts +0 -737
- package/src/workspace/__tests__/type-inference.spec.ts +0 -251
- package/src/workspace/client-generator.ts +0 -109
- package/src/workspace/index.ts +0 -433
- package/src/workspace/publicEnv.ts +0 -57
- package/src/workspace/schema.ts +0 -861
- package/src/workspace/types.ts +0 -943
- package/tsconfig.json +0 -9
- package/tsdown.config.ts +0 -22
|
@@ -1,342 +0,0 @@
|
|
|
1
|
-
import { apiTemplate } from './api.js';
|
|
2
|
-
import { minimalTemplate } from './minimal.js';
|
|
3
|
-
import { serverlessTemplate } from './serverless.js';
|
|
4
|
-
import { workerTemplate } from './worker.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* OpenAPI output path (fixed, not configurable)
|
|
8
|
-
*/
|
|
9
|
-
export const OPENAPI_OUTPUT_PATH = './.gkm/openapi.ts';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Endpoints output path (generated by gkm dev/build)
|
|
13
|
-
*/
|
|
14
|
-
export const ENDPOINTS_OUTPUT_PATH = './.gkm/server/endpoints.ts';
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Logger implementation type
|
|
18
|
-
*/
|
|
19
|
-
export type LoggerType = 'pino' | 'console';
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Routes structure pattern
|
|
23
|
-
*/
|
|
24
|
-
export type RoutesStructure =
|
|
25
|
-
| 'centralized-endpoints'
|
|
26
|
-
| 'centralized-routes'
|
|
27
|
-
| 'domain-based';
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Package manager type
|
|
31
|
-
*/
|
|
32
|
-
export type PackageManager = 'pnpm' | 'npm' | 'yarn' | 'bun';
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Deploy target type
|
|
36
|
-
*/
|
|
37
|
-
export type DeployTarget = 'dokploy' | 'none';
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Services selection
|
|
41
|
-
*/
|
|
42
|
-
export interface ServicesSelection {
|
|
43
|
-
db: boolean;
|
|
44
|
-
cache: boolean;
|
|
45
|
-
mail: boolean;
|
|
46
|
-
storage: boolean;
|
|
47
|
-
events?: import('../../types.js').EventsBackend;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Frontend framework for the fullstack template's client app.
|
|
52
|
-
* Limited to the three with first-class scaffolds; the wider
|
|
53
|
-
* `FrontendFramework` type also covers `vite` and `remix` which
|
|
54
|
-
* users can configure manually after init.
|
|
55
|
-
*/
|
|
56
|
-
export type FullstackFrontendFramework = 'nextjs' | 'tanstack-start' | 'expo';
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Options collected from user prompts
|
|
60
|
-
*/
|
|
61
|
-
export interface TemplateOptions {
|
|
62
|
-
name: string;
|
|
63
|
-
template: TemplateName;
|
|
64
|
-
telescope: boolean;
|
|
65
|
-
database: boolean;
|
|
66
|
-
studio: boolean;
|
|
67
|
-
loggerType: LoggerType;
|
|
68
|
-
routesStructure: RoutesStructure;
|
|
69
|
-
monorepo: boolean;
|
|
70
|
-
/** Path for the API app in monorepo (e.g., 'apps/api') */
|
|
71
|
-
apiPath: string;
|
|
72
|
-
/** Selected package manager */
|
|
73
|
-
packageManager: PackageManager;
|
|
74
|
-
/** Deploy target */
|
|
75
|
-
deployTarget: DeployTarget;
|
|
76
|
-
/** Services selection */
|
|
77
|
-
services: ServicesSelection;
|
|
78
|
-
/** Frontend framework (fullstack template only) */
|
|
79
|
-
frontendFramework?: FullstackFrontendFramework;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* A file to be generated
|
|
84
|
-
*/
|
|
85
|
-
export interface GeneratedFile {
|
|
86
|
-
path: string;
|
|
87
|
-
content: string;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Template configuration
|
|
92
|
-
*/
|
|
93
|
-
export interface TemplateConfig {
|
|
94
|
-
name: TemplateName;
|
|
95
|
-
description: string;
|
|
96
|
-
dependencies: Record<string, string>;
|
|
97
|
-
devDependencies: Record<string, string>;
|
|
98
|
-
scripts: Record<string, string>;
|
|
99
|
-
files: (options: TemplateOptions) => GeneratedFile[];
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export type TemplateName =
|
|
103
|
-
| 'minimal'
|
|
104
|
-
| 'api'
|
|
105
|
-
| 'serverless'
|
|
106
|
-
| 'worker'
|
|
107
|
-
| 'fullstack';
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* All available templates
|
|
111
|
-
*/
|
|
112
|
-
export const templates: Record<
|
|
113
|
-
Exclude<TemplateName, 'fullstack'>,
|
|
114
|
-
TemplateConfig
|
|
115
|
-
> = {
|
|
116
|
-
minimal: minimalTemplate,
|
|
117
|
-
api: apiTemplate,
|
|
118
|
-
serverless: serverlessTemplate,
|
|
119
|
-
worker: workerTemplate,
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Template choices for prompts (Story 1.11 simplified to api + fullstack)
|
|
124
|
-
*/
|
|
125
|
-
export const templateChoices = [
|
|
126
|
-
{
|
|
127
|
-
title: 'API',
|
|
128
|
-
value: 'api' as TemplateName,
|
|
129
|
-
description: 'Single backend API with endpoints',
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
title: 'Fullstack',
|
|
133
|
-
value: 'fullstack' as TemplateName,
|
|
134
|
-
description: 'Monorepo with API + Next.js + shared models',
|
|
135
|
-
},
|
|
136
|
-
];
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* All template choices (includes advanced options)
|
|
140
|
-
*/
|
|
141
|
-
export const allTemplateChoices = [
|
|
142
|
-
{
|
|
143
|
-
title: 'Minimal',
|
|
144
|
-
value: 'minimal' as TemplateName,
|
|
145
|
-
description: 'Basic health endpoint',
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
title: 'API',
|
|
149
|
-
value: 'api' as TemplateName,
|
|
150
|
-
description: 'Full API with auth, database, services',
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
title: 'Fullstack',
|
|
154
|
-
value: 'fullstack' as TemplateName,
|
|
155
|
-
description: 'Monorepo with API + Next.js + shared models',
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
title: 'Serverless',
|
|
159
|
-
value: 'serverless' as TemplateName,
|
|
160
|
-
description: 'AWS Lambda handlers',
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
title: 'Worker',
|
|
164
|
-
value: 'worker' as TemplateName,
|
|
165
|
-
description: 'Background job processing',
|
|
166
|
-
},
|
|
167
|
-
];
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Frontend framework choices for the fullstack template prompt.
|
|
171
|
-
*/
|
|
172
|
-
export const frontendFrameworkChoices = [
|
|
173
|
-
{
|
|
174
|
-
title: 'Next.js',
|
|
175
|
-
value: 'nextjs' as FullstackFrontendFramework,
|
|
176
|
-
description: 'React server components, app router (default)',
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
title: 'TanStack Start',
|
|
180
|
-
value: 'tanstack-start' as FullstackFrontendFramework,
|
|
181
|
-
description: 'File-based router on Vite + Nitro',
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
|
-
title: 'Expo',
|
|
185
|
-
value: 'expo' as FullstackFrontendFramework,
|
|
186
|
-
description: 'React Native mobile app (iOS + Android)',
|
|
187
|
-
},
|
|
188
|
-
];
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Logger type choices for prompts
|
|
192
|
-
*/
|
|
193
|
-
export const loggerTypeChoices = [
|
|
194
|
-
{
|
|
195
|
-
title: 'Pino',
|
|
196
|
-
value: 'pino' as LoggerType,
|
|
197
|
-
description: 'Fast JSON logger for production (recommended)',
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
title: 'Console',
|
|
201
|
-
value: 'console' as LoggerType,
|
|
202
|
-
description: 'Simple console logger for development',
|
|
203
|
-
},
|
|
204
|
-
];
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* Routes structure choices for prompts
|
|
208
|
-
*/
|
|
209
|
-
export const routesStructureChoices = [
|
|
210
|
-
{
|
|
211
|
-
title: 'Centralized (endpoints)',
|
|
212
|
-
value: 'centralized-endpoints' as RoutesStructure,
|
|
213
|
-
description: 'src/endpoints/**/*.ts',
|
|
214
|
-
},
|
|
215
|
-
{
|
|
216
|
-
title: 'Centralized (routes)',
|
|
217
|
-
value: 'centralized-routes' as RoutesStructure,
|
|
218
|
-
description: 'src/routes/**/*.ts',
|
|
219
|
-
},
|
|
220
|
-
{
|
|
221
|
-
title: 'Domain-based',
|
|
222
|
-
value: 'domain-based' as RoutesStructure,
|
|
223
|
-
description: 'src/**/routes/*.ts (e.g., src/users/routes/list.ts)',
|
|
224
|
-
},
|
|
225
|
-
];
|
|
226
|
-
|
|
227
|
-
/**
|
|
228
|
-
* Package manager choices for prompts
|
|
229
|
-
*/
|
|
230
|
-
export const packageManagerChoices = [
|
|
231
|
-
{
|
|
232
|
-
title: 'pnpm',
|
|
233
|
-
value: 'pnpm' as PackageManager,
|
|
234
|
-
description: 'Fast, disk space efficient (recommended)',
|
|
235
|
-
},
|
|
236
|
-
{
|
|
237
|
-
title: 'npm',
|
|
238
|
-
value: 'npm' as PackageManager,
|
|
239
|
-
description: 'Node.js default package manager',
|
|
240
|
-
},
|
|
241
|
-
{
|
|
242
|
-
title: 'yarn',
|
|
243
|
-
value: 'yarn' as PackageManager,
|
|
244
|
-
description: 'Yarn package manager',
|
|
245
|
-
},
|
|
246
|
-
{
|
|
247
|
-
title: 'bun',
|
|
248
|
-
value: 'bun' as PackageManager,
|
|
249
|
-
description: 'Fast JavaScript runtime and package manager',
|
|
250
|
-
},
|
|
251
|
-
];
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* Deploy target choices for prompts
|
|
255
|
-
*/
|
|
256
|
-
export const deployTargetChoices = [
|
|
257
|
-
{
|
|
258
|
-
title: 'Dokploy',
|
|
259
|
-
value: 'dokploy' as DeployTarget,
|
|
260
|
-
description: 'Deploy to Dokploy (Docker-based hosting)',
|
|
261
|
-
},
|
|
262
|
-
{
|
|
263
|
-
title: 'Configure later',
|
|
264
|
-
value: 'none' as DeployTarget,
|
|
265
|
-
description: 'Skip deployment setup for now',
|
|
266
|
-
},
|
|
267
|
-
];
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* Services choices for multi-select prompt
|
|
271
|
-
*/
|
|
272
|
-
export const servicesChoices = [
|
|
273
|
-
{
|
|
274
|
-
title: 'PostgreSQL',
|
|
275
|
-
value: 'db',
|
|
276
|
-
description: 'PostgreSQL database',
|
|
277
|
-
},
|
|
278
|
-
{
|
|
279
|
-
title: 'Redis',
|
|
280
|
-
value: 'cache',
|
|
281
|
-
description: 'Redis cache',
|
|
282
|
-
},
|
|
283
|
-
{
|
|
284
|
-
title: 'Mailpit',
|
|
285
|
-
value: 'mail',
|
|
286
|
-
description: 'Email testing service (dev only)',
|
|
287
|
-
},
|
|
288
|
-
{
|
|
289
|
-
title: 'MinIO',
|
|
290
|
-
value: 'storage',
|
|
291
|
-
description: 'S3-compatible object storage (dev only)',
|
|
292
|
-
},
|
|
293
|
-
];
|
|
294
|
-
|
|
295
|
-
/**
|
|
296
|
-
* Event backend choices for prompts
|
|
297
|
-
*/
|
|
298
|
-
export const eventsBackendChoices = [
|
|
299
|
-
{
|
|
300
|
-
title: 'pg-boss',
|
|
301
|
-
value: 'pgboss' as const,
|
|
302
|
-
description:
|
|
303
|
-
'PostgreSQL-based job queue (reuses postgres, no extra container)',
|
|
304
|
-
},
|
|
305
|
-
{
|
|
306
|
-
title: 'SNS/SQS',
|
|
307
|
-
value: 'sns' as const,
|
|
308
|
-
description: 'AWS SNS+SQS via LocalStack for local dev',
|
|
309
|
-
},
|
|
310
|
-
{
|
|
311
|
-
title: 'RabbitMQ',
|
|
312
|
-
value: 'rabbitmq' as const,
|
|
313
|
-
description: 'AMQP message broker',
|
|
314
|
-
},
|
|
315
|
-
{
|
|
316
|
-
title: 'None',
|
|
317
|
-
value: undefined,
|
|
318
|
-
description: 'Skip event backend',
|
|
319
|
-
},
|
|
320
|
-
];
|
|
321
|
-
|
|
322
|
-
/**
|
|
323
|
-
* Get a template by name
|
|
324
|
-
*/
|
|
325
|
-
export function getTemplate(name: TemplateName): TemplateConfig | null {
|
|
326
|
-
if (name === 'fullstack') {
|
|
327
|
-
// Fullstack template is handled specially, uses api template as base
|
|
328
|
-
return templates.api;
|
|
329
|
-
}
|
|
330
|
-
const template = templates[name];
|
|
331
|
-
if (!template) {
|
|
332
|
-
throw new Error(`Unknown template: ${name}`);
|
|
333
|
-
}
|
|
334
|
-
return template;
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
/**
|
|
338
|
-
* Check if a template is the fullstack monorepo template
|
|
339
|
-
*/
|
|
340
|
-
export function isFullstackTemplate(name: TemplateName): boolean {
|
|
341
|
-
return name === 'fullstack';
|
|
342
|
-
}
|
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import { GEEKMIDAS_VERSIONS } from '../versions.js';
|
|
2
|
-
import type {
|
|
3
|
-
GeneratedFile,
|
|
4
|
-
TemplateConfig,
|
|
5
|
-
TemplateOptions,
|
|
6
|
-
} from './index.js';
|
|
7
|
-
|
|
8
|
-
export const minimalTemplate: TemplateConfig = {
|
|
9
|
-
name: 'minimal',
|
|
10
|
-
description: 'Basic health endpoint',
|
|
11
|
-
|
|
12
|
-
dependencies: {
|
|
13
|
-
'@geekmidas/audit': GEEKMIDAS_VERSIONS['@geekmidas/audit'],
|
|
14
|
-
'@geekmidas/constructs': GEEKMIDAS_VERSIONS['@geekmidas/constructs'],
|
|
15
|
-
'@geekmidas/envkit': GEEKMIDAS_VERSIONS['@geekmidas/envkit'],
|
|
16
|
-
'@geekmidas/logger': GEEKMIDAS_VERSIONS['@geekmidas/logger'],
|
|
17
|
-
'@geekmidas/rate-limit': GEEKMIDAS_VERSIONS['@geekmidas/rate-limit'],
|
|
18
|
-
'@geekmidas/schema': GEEKMIDAS_VERSIONS['@geekmidas/schema'],
|
|
19
|
-
'@hono/node-server': '~1.14.1',
|
|
20
|
-
hono: '~4.8.2',
|
|
21
|
-
pino: '~9.6.0',
|
|
22
|
-
zod: '~4.1.0',
|
|
23
|
-
},
|
|
24
|
-
|
|
25
|
-
devDependencies: {
|
|
26
|
-
'@biomejs/biome': '~2.3.0',
|
|
27
|
-
'@geekmidas/cli': GEEKMIDAS_VERSIONS['@geekmidas/cli'],
|
|
28
|
-
'@types/node': '~22.0.0',
|
|
29
|
-
esbuild: '~0.27.0',
|
|
30
|
-
tsx: '~4.20.0',
|
|
31
|
-
turbo: '~2.3.0',
|
|
32
|
-
typescript: '~5.8.2',
|
|
33
|
-
vitest: '~4.0.0',
|
|
34
|
-
},
|
|
35
|
-
|
|
36
|
-
scripts: {
|
|
37
|
-
dev: 'gkm dev',
|
|
38
|
-
build: 'gkm build',
|
|
39
|
-
test: 'vitest',
|
|
40
|
-
'test:once': 'vitest run',
|
|
41
|
-
typecheck: 'tsc --noEmit',
|
|
42
|
-
lint: 'biome lint .',
|
|
43
|
-
fmt: 'biome format . --write',
|
|
44
|
-
'fmt:check': 'biome format .',
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
files: (options: TemplateOptions): GeneratedFile[] => {
|
|
48
|
-
const { loggerType, routesStructure } = options;
|
|
49
|
-
|
|
50
|
-
const loggerContent = `import { createLogger } from '@geekmidas/logger/${loggerType}';
|
|
51
|
-
|
|
52
|
-
export const logger = createLogger();
|
|
53
|
-
`;
|
|
54
|
-
|
|
55
|
-
// Get route path based on structure
|
|
56
|
-
const getRoutePath = (file: string) => {
|
|
57
|
-
switch (routesStructure) {
|
|
58
|
-
case 'centralized-endpoints':
|
|
59
|
-
return `src/endpoints/${file}`;
|
|
60
|
-
case 'centralized-routes':
|
|
61
|
-
return `src/routes/${file}`;
|
|
62
|
-
case 'domain-based':
|
|
63
|
-
return `src/${file.replace('.ts', '')}/routes/index.ts`;
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
const files: GeneratedFile[] = [
|
|
68
|
-
// src/config/env.ts
|
|
69
|
-
{
|
|
70
|
-
path: 'src/config/env.ts',
|
|
71
|
-
content: `import { Credentials } from '@geekmidas/envkit/credentials';
|
|
72
|
-
import { EnvironmentParser } from '@geekmidas/envkit';
|
|
73
|
-
|
|
74
|
-
export const envParser = new EnvironmentParser({ ...process.env, ...Credentials });
|
|
75
|
-
|
|
76
|
-
// Global config - only minimal shared values
|
|
77
|
-
// Service-specific config should be parsed in each service
|
|
78
|
-
export const config = envParser
|
|
79
|
-
.create((get) => ({
|
|
80
|
-
nodeEnv: get('NODE_ENV').enum(['development', 'test', 'production']).default('development'),
|
|
81
|
-
stage: get('STAGE').enum(['development', 'staging', 'production']).default('development'),
|
|
82
|
-
}))
|
|
83
|
-
.parse();
|
|
84
|
-
`,
|
|
85
|
-
},
|
|
86
|
-
|
|
87
|
-
// src/config/logger.ts
|
|
88
|
-
{
|
|
89
|
-
path: 'src/config/logger.ts',
|
|
90
|
-
content: loggerContent,
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
// health endpoint
|
|
94
|
-
{
|
|
95
|
-
path: getRoutePath('health.ts'),
|
|
96
|
-
content: `import { e } from '@geekmidas/constructs/endpoints';
|
|
97
|
-
import { z } from 'zod';
|
|
98
|
-
|
|
99
|
-
export const healthEndpoint = e
|
|
100
|
-
.get('/health')
|
|
101
|
-
.output(z.object({
|
|
102
|
-
status: z.string(),
|
|
103
|
-
timestamp: z.string(),
|
|
104
|
-
}))
|
|
105
|
-
.handle(async () => ({
|
|
106
|
-
status: 'ok',
|
|
107
|
-
timestamp: new Date().toISOString(),
|
|
108
|
-
}));
|
|
109
|
-
`,
|
|
110
|
-
},
|
|
111
|
-
];
|
|
112
|
-
|
|
113
|
-
// Add database service if enabled
|
|
114
|
-
if (options.database) {
|
|
115
|
-
files.push({
|
|
116
|
-
path: 'src/services/database.ts',
|
|
117
|
-
content: `import type { Service, ServiceRegisterOptions } from '@geekmidas/services';
|
|
118
|
-
import { Kysely, PostgresDialect } from 'kysely';
|
|
119
|
-
import pg from 'pg';
|
|
120
|
-
|
|
121
|
-
// Define your database schema
|
|
122
|
-
export interface Database {
|
|
123
|
-
// Add your tables here
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
export const databaseService = {
|
|
127
|
-
serviceName: 'database' as const,
|
|
128
|
-
async register({ envParser, context }: ServiceRegisterOptions) {
|
|
129
|
-
const logger = context.getLogger();
|
|
130
|
-
logger.info('Connecting to database');
|
|
131
|
-
|
|
132
|
-
const config = envParser
|
|
133
|
-
.create((get) => ({
|
|
134
|
-
url: get('DATABASE_URL').string(),
|
|
135
|
-
}))
|
|
136
|
-
.parse();
|
|
137
|
-
|
|
138
|
-
const db = new Kysely<Database>({
|
|
139
|
-
dialect: new PostgresDialect({
|
|
140
|
-
pool: new pg.Pool({ connectionString: config.url }),
|
|
141
|
-
}),
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
logger.info('Database connection established');
|
|
145
|
-
return db;
|
|
146
|
-
},
|
|
147
|
-
} satisfies Service<'database', Kysely<Database>>;
|
|
148
|
-
`,
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// Add Telescope config if enabled
|
|
153
|
-
if (options.telescope) {
|
|
154
|
-
files.push({
|
|
155
|
-
path: 'src/config/telescope.ts',
|
|
156
|
-
content: `import { Telescope } from '@geekmidas/telescope';
|
|
157
|
-
import { InMemoryStorage } from '@geekmidas/telescope/storage/memory';
|
|
158
|
-
|
|
159
|
-
export const telescope = new Telescope({
|
|
160
|
-
storage: new InMemoryStorage({ maxEntries: 100 }),
|
|
161
|
-
enabled: process.env.NODE_ENV === 'development',
|
|
162
|
-
});
|
|
163
|
-
`,
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// Add Studio config if enabled (requires database)
|
|
168
|
-
if (options.studio && options.database) {
|
|
169
|
-
files.push({
|
|
170
|
-
path: 'src/config/studio.ts',
|
|
171
|
-
content: `import { Direction, InMemoryMonitoringStorage, Studio } from '@geekmidas/studio';
|
|
172
|
-
import { Kysely, PostgresDialect } from 'kysely';
|
|
173
|
-
import pg from 'pg';
|
|
174
|
-
import type { Database } from '~/services/database.ts';
|
|
175
|
-
import { envParser } from '~/config/env.ts';
|
|
176
|
-
|
|
177
|
-
// Parse database config for Studio
|
|
178
|
-
const studioConfig = envParser
|
|
179
|
-
.create((get) => ({
|
|
180
|
-
databaseUrl: get('DATABASE_URL').string(),
|
|
181
|
-
}))
|
|
182
|
-
.parse();
|
|
183
|
-
|
|
184
|
-
// Create a Kysely instance for Studio
|
|
185
|
-
const db = new Kysely<Database>({
|
|
186
|
-
dialect: new PostgresDialect({
|
|
187
|
-
pool: new pg.Pool({ connectionString: studioConfig.databaseUrl }),
|
|
188
|
-
}),
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
export const studio = new Studio<Database>({
|
|
192
|
-
monitoring: {
|
|
193
|
-
storage: new InMemoryMonitoringStorage({ maxEntries: 100 }),
|
|
194
|
-
},
|
|
195
|
-
data: {
|
|
196
|
-
db,
|
|
197
|
-
cursor: { field: 'id', direction: Direction.Desc },
|
|
198
|
-
},
|
|
199
|
-
enabled: process.env.NODE_ENV === 'development',
|
|
200
|
-
});
|
|
201
|
-
`,
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
return files;
|
|
206
|
-
},
|
|
207
|
-
};
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { GEEKMIDAS_VERSIONS } from '../versions.js';
|
|
2
|
-
import type {
|
|
3
|
-
GeneratedFile,
|
|
4
|
-
TemplateConfig,
|
|
5
|
-
TemplateOptions,
|
|
6
|
-
} from './index.js';
|
|
7
|
-
|
|
8
|
-
export const serverlessTemplate: TemplateConfig = {
|
|
9
|
-
name: 'serverless',
|
|
10
|
-
description: 'AWS Lambda handlers',
|
|
11
|
-
|
|
12
|
-
dependencies: {
|
|
13
|
-
'@geekmidas/audit': GEEKMIDAS_VERSIONS['@geekmidas/audit'],
|
|
14
|
-
'@geekmidas/constructs': GEEKMIDAS_VERSIONS['@geekmidas/constructs'],
|
|
15
|
-
'@geekmidas/envkit': GEEKMIDAS_VERSIONS['@geekmidas/envkit'],
|
|
16
|
-
'@geekmidas/logger': GEEKMIDAS_VERSIONS['@geekmidas/logger'],
|
|
17
|
-
'@geekmidas/cloud': GEEKMIDAS_VERSIONS['@geekmidas/cloud'],
|
|
18
|
-
'@geekmidas/rate-limit': GEEKMIDAS_VERSIONS['@geekmidas/rate-limit'],
|
|
19
|
-
'@geekmidas/schema': GEEKMIDAS_VERSIONS['@geekmidas/schema'],
|
|
20
|
-
'@hono/node-server': '~1.14.1',
|
|
21
|
-
hono: '~4.8.2',
|
|
22
|
-
pino: '~9.6.0',
|
|
23
|
-
},
|
|
24
|
-
|
|
25
|
-
devDependencies: {
|
|
26
|
-
'@biomejs/biome': '~2.3.0',
|
|
27
|
-
'@geekmidas/cli': GEEKMIDAS_VERSIONS['@geekmidas/cli'],
|
|
28
|
-
'@types/aws-lambda': '~8.10.92',
|
|
29
|
-
'@types/node': '~22.0.0',
|
|
30
|
-
tsx: '~4.20.0',
|
|
31
|
-
turbo: '~2.3.0',
|
|
32
|
-
typescript: '~5.8.2',
|
|
33
|
-
vitest: '~4.0.0',
|
|
34
|
-
},
|
|
35
|
-
|
|
36
|
-
scripts: {
|
|
37
|
-
dev: 'gkm dev',
|
|
38
|
-
build: 'gkm build --provider aws-apigatewayv2',
|
|
39
|
-
test: 'vitest',
|
|
40
|
-
'test:once': 'vitest run',
|
|
41
|
-
typecheck: 'tsc --noEmit',
|
|
42
|
-
lint: 'biome lint .',
|
|
43
|
-
fmt: 'biome format . --write',
|
|
44
|
-
'fmt:check': 'biome format .',
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
files: (options: TemplateOptions): GeneratedFile[] => {
|
|
48
|
-
const { loggerType, routesStructure } = options;
|
|
49
|
-
|
|
50
|
-
const loggerContent = `import { createLogger } from '@geekmidas/logger/${loggerType}';
|
|
51
|
-
|
|
52
|
-
export const logger = createLogger();
|
|
53
|
-
`;
|
|
54
|
-
|
|
55
|
-
// Get route path based on structure
|
|
56
|
-
const getRoutePath = (file: string) => {
|
|
57
|
-
switch (routesStructure) {
|
|
58
|
-
case 'centralized-endpoints':
|
|
59
|
-
return `src/endpoints/${file}`;
|
|
60
|
-
case 'centralized-routes':
|
|
61
|
-
return `src/routes/${file}`;
|
|
62
|
-
case 'domain-based':
|
|
63
|
-
return `src/${file.replace('.ts', '')}/routes/index.ts`;
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
const files: GeneratedFile[] = [
|
|
68
|
-
// src/config/env.ts
|
|
69
|
-
{
|
|
70
|
-
path: 'src/config/env.ts',
|
|
71
|
-
content: `import { Credentials } from '@geekmidas/envkit/credentials';
|
|
72
|
-
import { EnvironmentParser } from '@geekmidas/envkit';
|
|
73
|
-
|
|
74
|
-
export const envParser = new EnvironmentParser({ ...process.env, ...Credentials });
|
|
75
|
-
|
|
76
|
-
// Global config - only minimal shared values
|
|
77
|
-
// Service-specific config should be parsed in each service
|
|
78
|
-
export const config = envParser
|
|
79
|
-
.create((get) => ({
|
|
80
|
-
nodeEnv: get('NODE_ENV').enum(['development', 'test', 'production']).default('development'),
|
|
81
|
-
stage: get('STAGE').enum(['dev', 'staging', 'prod']).default('dev'),
|
|
82
|
-
}))
|
|
83
|
-
.parse();
|
|
84
|
-
`,
|
|
85
|
-
},
|
|
86
|
-
|
|
87
|
-
// src/config/logger.ts
|
|
88
|
-
{
|
|
89
|
-
path: 'src/config/logger.ts',
|
|
90
|
-
content: loggerContent,
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
// health endpoint
|
|
94
|
-
{
|
|
95
|
-
path: getRoutePath('health.ts'),
|
|
96
|
-
content: `import { e } from '@geekmidas/constructs/endpoints';
|
|
97
|
-
import { z } from 'zod';
|
|
98
|
-
|
|
99
|
-
export const healthEndpoint = e
|
|
100
|
-
.get('/health')
|
|
101
|
-
.output(z.object({
|
|
102
|
-
status: z.string(),
|
|
103
|
-
timestamp: z.string(),
|
|
104
|
-
region: z.string(),
|
|
105
|
-
}))
|
|
106
|
-
.handle(async () => ({
|
|
107
|
-
status: 'ok',
|
|
108
|
-
timestamp: new Date().toISOString(),
|
|
109
|
-
region: process.env.AWS_REGION || 'local',
|
|
110
|
-
}));
|
|
111
|
-
`,
|
|
112
|
-
},
|
|
113
|
-
|
|
114
|
-
// src/functions/hello.ts
|
|
115
|
-
{
|
|
116
|
-
path: 'src/functions/hello.ts',
|
|
117
|
-
content: `import { f } from '@geekmidas/constructs/functions';
|
|
118
|
-
import { z } from 'zod';
|
|
119
|
-
|
|
120
|
-
export const helloFunction = f
|
|
121
|
-
.input(z.object({ name: z.string() }))
|
|
122
|
-
.output(z.object({ message: z.string() }))
|
|
123
|
-
.handle(async ({ input }) => ({
|
|
124
|
-
message: \`Hello, \${input.name}!\`,
|
|
125
|
-
}));
|
|
126
|
-
`,
|
|
127
|
-
},
|
|
128
|
-
];
|
|
129
|
-
|
|
130
|
-
// Add Telescope config if enabled
|
|
131
|
-
if (options.telescope) {
|
|
132
|
-
files.push({
|
|
133
|
-
path: 'src/config/telescope.ts',
|
|
134
|
-
content: `import { Telescope } from '@geekmidas/telescope';
|
|
135
|
-
import { InMemoryStorage } from '@geekmidas/telescope/storage/memory';
|
|
136
|
-
|
|
137
|
-
// Note: For production Lambda, consider using a persistent storage
|
|
138
|
-
export const telescope = new Telescope({
|
|
139
|
-
storage: new InMemoryStorage({ maxEntries: 50 }),
|
|
140
|
-
enabled: process.env.STAGE === 'dev',
|
|
141
|
-
});
|
|
142
|
-
`,
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
return files;
|
|
147
|
-
},
|
|
148
|
-
};
|