@geekmidas/cli 9.0.2 → 10.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -122
- 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 +2530 -1810
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +2506 -1786
- 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
package/src/init/index.ts
DELETED
|
@@ -1,542 +0,0 @@
|
|
|
1
|
-
import { execSync } from 'node:child_process';
|
|
2
|
-
import { mkdir, writeFile } from 'node:fs/promises';
|
|
3
|
-
import { dirname, join } from 'node:path';
|
|
4
|
-
import prompts from 'prompts';
|
|
5
|
-
import { createStageSecrets } from '../secrets/generator.js';
|
|
6
|
-
import { getKeyPath } from '../secrets/keystore.js';
|
|
7
|
-
import { writeStageSecrets } from '../secrets/storage.js';
|
|
8
|
-
import {
|
|
9
|
-
generateDbPassword,
|
|
10
|
-
generateDbUrl,
|
|
11
|
-
} from '../setup/fullstack-secrets.js';
|
|
12
|
-
import type { ComposeServiceName, EventsBackend } from '../types.js';
|
|
13
|
-
import { generateAuthAppFiles } from './generators/auth.js';
|
|
14
|
-
import { generateConfigFiles } from './generators/config.js';
|
|
15
|
-
import {
|
|
16
|
-
type DatabaseAppConfig,
|
|
17
|
-
generateDockerFiles,
|
|
18
|
-
} from './generators/docker.js';
|
|
19
|
-
import { generateEnvFiles } from './generators/env.js';
|
|
20
|
-
import { generateExpoAppFiles } from './generators/mobile-expo.js';
|
|
21
|
-
import { generateModelsPackage } from './generators/models.js';
|
|
22
|
-
import { generateMonorepoFiles } from './generators/monorepo.js';
|
|
23
|
-
import { generatePackageJson } from './generators/package.js';
|
|
24
|
-
import { generateSourceFiles } from './generators/source.js';
|
|
25
|
-
import { generateTestFiles } from './generators/test.js';
|
|
26
|
-
import { generateUiPackageFiles } from './generators/ui.js';
|
|
27
|
-
import { generateWebAppFiles } from './generators/web.js';
|
|
28
|
-
import { generateTanStackWebFiles } from './generators/web-tanstack.js';
|
|
29
|
-
import {
|
|
30
|
-
type DeployTarget,
|
|
31
|
-
deployTargetChoices,
|
|
32
|
-
eventsBackendChoices,
|
|
33
|
-
type FullstackFrontendFramework,
|
|
34
|
-
frontendFrameworkChoices,
|
|
35
|
-
getTemplate,
|
|
36
|
-
isFullstackTemplate,
|
|
37
|
-
loggerTypeChoices,
|
|
38
|
-
type PackageManager,
|
|
39
|
-
packageManagerChoices,
|
|
40
|
-
routesStructureChoices,
|
|
41
|
-
type ServicesSelection,
|
|
42
|
-
servicesChoices,
|
|
43
|
-
type TemplateName,
|
|
44
|
-
type TemplateOptions,
|
|
45
|
-
templateChoices,
|
|
46
|
-
} from './templates/index.js';
|
|
47
|
-
import {
|
|
48
|
-
checkDirectoryExists,
|
|
49
|
-
detectPackageManager,
|
|
50
|
-
getInstallCommand,
|
|
51
|
-
getRunCommand,
|
|
52
|
-
validateProjectName,
|
|
53
|
-
} from './utils.js';
|
|
54
|
-
|
|
55
|
-
export interface InitOptions {
|
|
56
|
-
/** Project name */
|
|
57
|
-
name?: string;
|
|
58
|
-
/** Template to use */
|
|
59
|
-
template?: TemplateName;
|
|
60
|
-
/** Skip dependency installation */
|
|
61
|
-
skipInstall?: boolean;
|
|
62
|
-
/** Use defaults for all prompts */
|
|
63
|
-
yes?: boolean;
|
|
64
|
-
/** Force monorepo setup (deprecated, use fullstack template) */
|
|
65
|
-
monorepo?: boolean;
|
|
66
|
-
/** API app path in monorepo */
|
|
67
|
-
apiPath?: string;
|
|
68
|
-
/** Package manager to use */
|
|
69
|
-
pm?: PackageManager;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Main init command - scaffolds a new project
|
|
74
|
-
*/
|
|
75
|
-
export async function initCommand(
|
|
76
|
-
projectName?: string,
|
|
77
|
-
options: InitOptions = {},
|
|
78
|
-
): Promise<void> {
|
|
79
|
-
const cwd = process.cwd();
|
|
80
|
-
const detectedPkgManager = detectPackageManager(cwd);
|
|
81
|
-
|
|
82
|
-
// Handle Ctrl+C gracefully
|
|
83
|
-
prompts.override({});
|
|
84
|
-
const onCancel = () => {
|
|
85
|
-
process.exit(0);
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
// Gather answers via prompts
|
|
89
|
-
const answers = await prompts(
|
|
90
|
-
[
|
|
91
|
-
{
|
|
92
|
-
type: projectName || options.name ? null : 'text',
|
|
93
|
-
name: 'name',
|
|
94
|
-
message: 'Project name:',
|
|
95
|
-
initial: 'my-app',
|
|
96
|
-
validate: (value: string) => {
|
|
97
|
-
const nameValid = validateProjectName(value);
|
|
98
|
-
if (nameValid !== true) return nameValid;
|
|
99
|
-
const dirValid = checkDirectoryExists(value, cwd);
|
|
100
|
-
if (dirValid !== true) return dirValid;
|
|
101
|
-
return true;
|
|
102
|
-
},
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
type: options.template || options.yes ? null : 'select',
|
|
106
|
-
name: 'template',
|
|
107
|
-
message: 'Template:',
|
|
108
|
-
choices: templateChoices,
|
|
109
|
-
initial: 0,
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
type: options.yes ? null : 'multiselect',
|
|
113
|
-
name: 'services',
|
|
114
|
-
message: 'Services (space to select, enter to confirm):',
|
|
115
|
-
choices: servicesChoices.map((c) => ({ ...c, selected: true })),
|
|
116
|
-
hint: '- Space to select. Return to submit',
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
type: options.yes ? null : 'select',
|
|
120
|
-
name: 'eventsBackend',
|
|
121
|
-
message: 'Event backend:',
|
|
122
|
-
choices: eventsBackendChoices,
|
|
123
|
-
initial: 0,
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
type: options.yes ? null : 'select',
|
|
127
|
-
name: 'packageManager',
|
|
128
|
-
message: 'Package manager:',
|
|
129
|
-
choices: packageManagerChoices,
|
|
130
|
-
initial: packageManagerChoices.findIndex(
|
|
131
|
-
(c) => c.value === detectedPkgManager,
|
|
132
|
-
),
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
type: options.yes ? null : 'select',
|
|
136
|
-
name: 'deployTarget',
|
|
137
|
-
message: 'Deployment target:',
|
|
138
|
-
choices: deployTargetChoices,
|
|
139
|
-
initial: 0,
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
type: options.yes ? null : 'confirm',
|
|
143
|
-
name: 'telescope',
|
|
144
|
-
message: 'Include Telescope (debugging dashboard)?',
|
|
145
|
-
initial: true,
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
type: options.yes ? null : 'select',
|
|
149
|
-
name: 'loggerType',
|
|
150
|
-
message: 'Logger:',
|
|
151
|
-
choices: loggerTypeChoices,
|
|
152
|
-
initial: 0,
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
type: options.yes ? null : 'select',
|
|
156
|
-
name: 'routesStructure',
|
|
157
|
-
message: 'Routes structure:',
|
|
158
|
-
choices: routesStructureChoices,
|
|
159
|
-
initial: 0,
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
// Only prompt for frontend framework on the fullstack template.
|
|
163
|
-
type: (_prev, values) =>
|
|
164
|
-
!options.yes &&
|
|
165
|
-
(options.template === 'fullstack' || values.template === 'fullstack')
|
|
166
|
-
? 'select'
|
|
167
|
-
: null,
|
|
168
|
-
name: 'frontendFramework',
|
|
169
|
-
message: 'Frontend framework:',
|
|
170
|
-
choices: frontendFrameworkChoices,
|
|
171
|
-
initial: 0,
|
|
172
|
-
},
|
|
173
|
-
],
|
|
174
|
-
{ onCancel },
|
|
175
|
-
);
|
|
176
|
-
|
|
177
|
-
// Build final options
|
|
178
|
-
const name = projectName || options.name || answers.name;
|
|
179
|
-
if (!name) {
|
|
180
|
-
console.error('Project name is required');
|
|
181
|
-
process.exit(1);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// Validate name if provided via argument
|
|
185
|
-
if (projectName || options.name) {
|
|
186
|
-
const nameToValidate = projectName || options.name!;
|
|
187
|
-
const nameValid = validateProjectName(nameToValidate);
|
|
188
|
-
if (nameValid !== true) {
|
|
189
|
-
console.error(nameValid);
|
|
190
|
-
process.exit(1);
|
|
191
|
-
}
|
|
192
|
-
const dirValid = checkDirectoryExists(nameToValidate, cwd);
|
|
193
|
-
if (dirValid !== true) {
|
|
194
|
-
console.error(dirValid);
|
|
195
|
-
process.exit(1);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
const template: TemplateName = options.template || answers.template || 'api';
|
|
200
|
-
const isFullstack = isFullstackTemplate(template);
|
|
201
|
-
|
|
202
|
-
// For fullstack, force monorepo mode
|
|
203
|
-
// For api template, monorepo is optional (via --monorepo flag)
|
|
204
|
-
const monorepo = isFullstack || options.monorepo || false;
|
|
205
|
-
|
|
206
|
-
// Parse services selection
|
|
207
|
-
const servicesArray: string[] = options.yes
|
|
208
|
-
? ['db', 'cache', 'mail', 'storage']
|
|
209
|
-
: answers.services || [];
|
|
210
|
-
|
|
211
|
-
// Determine events backend (default to pgboss for all templates with --yes)
|
|
212
|
-
const eventsBackend: EventsBackend | undefined = options.yes
|
|
213
|
-
? 'pgboss'
|
|
214
|
-
: answers.eventsBackend;
|
|
215
|
-
|
|
216
|
-
const services: ServicesSelection = {
|
|
217
|
-
db: servicesArray.includes('db'),
|
|
218
|
-
cache: servicesArray.includes('cache'),
|
|
219
|
-
mail: servicesArray.includes('mail'),
|
|
220
|
-
storage: servicesArray.includes('storage'),
|
|
221
|
-
events: eventsBackend,
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
// pgboss requires postgres
|
|
225
|
-
if (services.events === 'pgboss') {
|
|
226
|
-
services.db = true;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
const pkgManager: PackageManager = options.pm
|
|
230
|
-
? options.pm
|
|
231
|
-
: options.yes
|
|
232
|
-
? 'pnpm'
|
|
233
|
-
: (answers.packageManager ?? detectedPkgManager);
|
|
234
|
-
|
|
235
|
-
const deployTarget: DeployTarget = options.yes
|
|
236
|
-
? 'dokploy'
|
|
237
|
-
: (answers.deployTarget ?? 'dokploy');
|
|
238
|
-
|
|
239
|
-
const database = services.db;
|
|
240
|
-
const frontendFramework: FullstackFrontendFramework | undefined = isFullstack
|
|
241
|
-
? options.yes
|
|
242
|
-
? 'nextjs'
|
|
243
|
-
: (answers.frontendFramework ?? 'nextjs')
|
|
244
|
-
: undefined;
|
|
245
|
-
const templateOptions: TemplateOptions = {
|
|
246
|
-
name,
|
|
247
|
-
template,
|
|
248
|
-
telescope: options.yes ? true : (answers.telescope ?? true),
|
|
249
|
-
database,
|
|
250
|
-
studio: database,
|
|
251
|
-
loggerType: options.yes ? 'pino' : (answers.loggerType ?? 'pino'),
|
|
252
|
-
routesStructure: options.yes
|
|
253
|
-
? 'centralized-endpoints'
|
|
254
|
-
: (answers.routesStructure ?? 'centralized-endpoints'),
|
|
255
|
-
monorepo,
|
|
256
|
-
apiPath: monorepo ? (options.apiPath ?? 'apps/api') : '',
|
|
257
|
-
packageManager: pkgManager,
|
|
258
|
-
deployTarget,
|
|
259
|
-
services,
|
|
260
|
-
frontendFramework,
|
|
261
|
-
};
|
|
262
|
-
|
|
263
|
-
const targetDir = join(cwd, name);
|
|
264
|
-
const baseTemplate = getTemplate(templateOptions.template);
|
|
265
|
-
|
|
266
|
-
const isMonorepo = templateOptions.monorepo;
|
|
267
|
-
const apiPath = templateOptions.apiPath;
|
|
268
|
-
|
|
269
|
-
console.log('\n🚀 Creating your project...\n');
|
|
270
|
-
|
|
271
|
-
// Create project directory
|
|
272
|
-
await mkdir(targetDir, { recursive: true });
|
|
273
|
-
|
|
274
|
-
// For monorepo, app files go in the specified apiPath (e.g., apps/api)
|
|
275
|
-
const appDir = isMonorepo ? join(targetDir, apiPath) : targetDir;
|
|
276
|
-
if (isMonorepo) {
|
|
277
|
-
await mkdir(appDir, { recursive: true });
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
// Generate per-app database configs for fullstack template
|
|
281
|
-
const dbApps: DatabaseAppConfig[] = [];
|
|
282
|
-
if (isFullstack && services.db) {
|
|
283
|
-
dbApps.push(
|
|
284
|
-
{ name: 'api', password: generateDbPassword() },
|
|
285
|
-
{ name: 'auth', password: generateDbPassword() },
|
|
286
|
-
);
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
// Collect app files (backend/api)
|
|
290
|
-
// Note: Docker files go to root for monorepo, so exclude them here
|
|
291
|
-
const appFiles = baseTemplate
|
|
292
|
-
? [
|
|
293
|
-
...generatePackageJson(templateOptions, baseTemplate),
|
|
294
|
-
...generateConfigFiles(templateOptions, baseTemplate),
|
|
295
|
-
...generateEnvFiles(templateOptions, baseTemplate),
|
|
296
|
-
...generateSourceFiles(templateOptions, baseTemplate),
|
|
297
|
-
...generateTestFiles(templateOptions, baseTemplate),
|
|
298
|
-
...(isMonorepo
|
|
299
|
-
? []
|
|
300
|
-
: generateDockerFiles(templateOptions, baseTemplate, dbApps)),
|
|
301
|
-
]
|
|
302
|
-
: [];
|
|
303
|
-
|
|
304
|
-
// For monorepo, docker files go at root level
|
|
305
|
-
const dockerFiles =
|
|
306
|
-
isMonorepo && baseTemplate
|
|
307
|
-
? generateDockerFiles(templateOptions, baseTemplate, dbApps)
|
|
308
|
-
: [];
|
|
309
|
-
|
|
310
|
-
// Collect root monorepo files (includes packages/models)
|
|
311
|
-
const rootFiles = baseTemplate
|
|
312
|
-
? [
|
|
313
|
-
...generateMonorepoFiles(templateOptions, baseTemplate),
|
|
314
|
-
...generateModelsPackage(templateOptions),
|
|
315
|
-
]
|
|
316
|
-
: [];
|
|
317
|
-
|
|
318
|
-
// Collect frontend app files for fullstack template, dispatched by framework
|
|
319
|
-
const webAppFiles = isFullstack
|
|
320
|
-
? frontendFramework === 'tanstack-start'
|
|
321
|
-
? generateTanStackWebFiles(templateOptions)
|
|
322
|
-
: frontendFramework === 'expo'
|
|
323
|
-
? generateExpoAppFiles(templateOptions)
|
|
324
|
-
: generateWebAppFiles(templateOptions)
|
|
325
|
-
: [];
|
|
326
|
-
|
|
327
|
-
// Collect auth app files for fullstack template
|
|
328
|
-
const authAppFiles = isFullstack ? generateAuthAppFiles(templateOptions) : [];
|
|
329
|
-
|
|
330
|
-
// Collect UI package files for fullstack template
|
|
331
|
-
const uiPackageFiles = isFullstack
|
|
332
|
-
? generateUiPackageFiles(templateOptions)
|
|
333
|
-
: [];
|
|
334
|
-
|
|
335
|
-
// Write root files (for monorepo)
|
|
336
|
-
for (const { path, content } of rootFiles) {
|
|
337
|
-
const fullPath = join(targetDir, path);
|
|
338
|
-
await mkdir(dirname(fullPath), { recursive: true });
|
|
339
|
-
await writeFile(fullPath, content);
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
// Write docker files at root for monorepo
|
|
343
|
-
for (const { path, content } of dockerFiles) {
|
|
344
|
-
const fullPath = join(targetDir, path);
|
|
345
|
-
await mkdir(dirname(fullPath), { recursive: true });
|
|
346
|
-
await writeFile(fullPath, content);
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
// Write app files (backend)
|
|
350
|
-
for (const { path, content } of appFiles) {
|
|
351
|
-
const fullPath = join(appDir, path);
|
|
352
|
-
await mkdir(dirname(fullPath), { recursive: true });
|
|
353
|
-
await writeFile(fullPath, content);
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
// Write web app files (frontend)
|
|
357
|
-
for (const { path, content } of webAppFiles) {
|
|
358
|
-
const fullPath = join(targetDir, path);
|
|
359
|
-
await mkdir(dirname(fullPath), { recursive: true });
|
|
360
|
-
await writeFile(fullPath, content);
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
// Write auth app files (authentication service)
|
|
364
|
-
for (const { path, content } of authAppFiles) {
|
|
365
|
-
const fullPath = join(targetDir, path);
|
|
366
|
-
await mkdir(dirname(fullPath), { recursive: true });
|
|
367
|
-
await writeFile(fullPath, content);
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
// Write UI package files (shared components)
|
|
371
|
-
for (const { path, content } of uiPackageFiles) {
|
|
372
|
-
const fullPath = join(targetDir, path);
|
|
373
|
-
await mkdir(dirname(fullPath), { recursive: true });
|
|
374
|
-
await writeFile(fullPath, content);
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
// Initialize encrypted secrets for development stage
|
|
378
|
-
console.log('🔐 Initializing encrypted secrets...\n');
|
|
379
|
-
const secretServices: ComposeServiceName[] = [];
|
|
380
|
-
if (services.db) secretServices.push('postgres');
|
|
381
|
-
if (services.cache) secretServices.push('redis');
|
|
382
|
-
if (services.storage) secretServices.push('minio');
|
|
383
|
-
if (services.mail) secretServices.push('mailpit');
|
|
384
|
-
if (services.events === 'sns') secretServices.push('localstack');
|
|
385
|
-
if (services.events === 'rabbitmq') secretServices.push('rabbitmq');
|
|
386
|
-
|
|
387
|
-
const devSecrets = createStageSecrets('development', secretServices, {
|
|
388
|
-
projectName: name,
|
|
389
|
-
eventsBackend: services.events,
|
|
390
|
-
});
|
|
391
|
-
|
|
392
|
-
// Add common custom secrets
|
|
393
|
-
const customSecrets: Record<string, string> = {
|
|
394
|
-
NODE_ENV: 'development',
|
|
395
|
-
PORT: '3000',
|
|
396
|
-
LOG_LEVEL: 'debug',
|
|
397
|
-
JWT_SECRET: `dev-${Date.now()}-${Math.random().toString(36).slice(2)}`,
|
|
398
|
-
};
|
|
399
|
-
|
|
400
|
-
// Add per-app database URLs and passwords for fullstack template
|
|
401
|
-
if (isFullstack && dbApps.length > 0) {
|
|
402
|
-
for (const app of dbApps) {
|
|
403
|
-
// Database URL for the app to use (all apps use same database, different users/schemas)
|
|
404
|
-
const urlKey = `${app.name.toUpperCase()}_DATABASE_URL`;
|
|
405
|
-
customSecrets[urlKey] = generateDbUrl(app.name, app.password, name);
|
|
406
|
-
|
|
407
|
-
// Database password for docker-compose init script
|
|
408
|
-
const passwordKey = `${app.name.toUpperCase()}_DB_PASSWORD`;
|
|
409
|
-
customSecrets[passwordKey] = app.password;
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
// Auth service secrets (better-auth)
|
|
413
|
-
customSecrets.AUTH_PORT = '3002';
|
|
414
|
-
customSecrets.AUTH_URL = 'http://localhost:3002'; // For API app to call auth service
|
|
415
|
-
customSecrets.BETTER_AUTH_SECRET = `better-auth-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
416
|
-
customSecrets.BETTER_AUTH_URL = 'http://localhost:3002';
|
|
417
|
-
customSecrets.BETTER_AUTH_TRUSTED_ORIGINS =
|
|
418
|
-
'http://localhost:3000,http://localhost:3001';
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
devSecrets.custom = customSecrets;
|
|
422
|
-
|
|
423
|
-
await writeStageSecrets(devSecrets, targetDir);
|
|
424
|
-
const keyPath = getKeyPath('development', name);
|
|
425
|
-
console.log(` Secrets: .gkm/secrets/development.json (encrypted)`);
|
|
426
|
-
console.log(` Key: ${keyPath}\n`);
|
|
427
|
-
|
|
428
|
-
// Install dependencies
|
|
429
|
-
if (!options.skipInstall) {
|
|
430
|
-
console.log('\n📦 Installing dependencies...\n');
|
|
431
|
-
try {
|
|
432
|
-
execSync(getInstallCommand(pkgManager), {
|
|
433
|
-
cwd: targetDir,
|
|
434
|
-
stdio: 'inherit',
|
|
435
|
-
});
|
|
436
|
-
} catch {
|
|
437
|
-
console.error('Failed to install dependencies');
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
// Format generated files with biome
|
|
441
|
-
try {
|
|
442
|
-
execSync('npx @biomejs/biome format --write --unsafe .', {
|
|
443
|
-
cwd: targetDir,
|
|
444
|
-
stdio: 'inherit',
|
|
445
|
-
});
|
|
446
|
-
} catch {
|
|
447
|
-
// Silently ignore format errors
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
// Initialize git repository
|
|
452
|
-
console.log('\n📦 Initializing git repository...\n');
|
|
453
|
-
try {
|
|
454
|
-
execSync('git init', { cwd: targetDir, stdio: 'pipe' });
|
|
455
|
-
execSync('git branch -M main', { cwd: targetDir, stdio: 'pipe' });
|
|
456
|
-
execSync('git add .', { cwd: targetDir, stdio: 'pipe' });
|
|
457
|
-
execSync('git commit -m "🎉 Project created with @geekmidas/toolbox"', {
|
|
458
|
-
cwd: targetDir,
|
|
459
|
-
stdio: 'pipe',
|
|
460
|
-
});
|
|
461
|
-
console.log(' Initialized git repository on branch main');
|
|
462
|
-
} catch {
|
|
463
|
-
console.log(
|
|
464
|
-
' Could not initialize git repository (git may not be installed)',
|
|
465
|
-
);
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
// Print success message with next steps
|
|
469
|
-
printNextSteps(name, templateOptions, pkgManager);
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
/**
|
|
473
|
-
* Print success message with next steps
|
|
474
|
-
*/
|
|
475
|
-
function printNextSteps(
|
|
476
|
-
projectName: string,
|
|
477
|
-
options: TemplateOptions,
|
|
478
|
-
pkgManager: PackageManager,
|
|
479
|
-
): void {
|
|
480
|
-
const devCommand = getRunCommand(pkgManager, 'dev');
|
|
481
|
-
const cdCommand = `cd ${projectName}`;
|
|
482
|
-
|
|
483
|
-
console.log(`\n${'─'.repeat(50)}`);
|
|
484
|
-
console.log('\n✅ Project created successfully!\n');
|
|
485
|
-
|
|
486
|
-
console.log('Next steps:\n');
|
|
487
|
-
console.log(` ${cdCommand}`);
|
|
488
|
-
|
|
489
|
-
if (options.services.db) {
|
|
490
|
-
console.log(` # Start PostgreSQL (if not running)`);
|
|
491
|
-
console.log(` docker compose up -d postgres`);
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
console.log(` ${devCommand}`);
|
|
495
|
-
console.log('');
|
|
496
|
-
|
|
497
|
-
if (options.monorepo) {
|
|
498
|
-
console.log('📁 Project structure:');
|
|
499
|
-
console.log(` ${projectName}/`);
|
|
500
|
-
console.log(` ├── apps/`);
|
|
501
|
-
console.log(` │ ├── api/ # Backend API`);
|
|
502
|
-
if (isFullstackTemplate(options.template)) {
|
|
503
|
-
console.log(` │ ├── auth/ # Auth service (better-auth)`);
|
|
504
|
-
switch (options.frontendFramework) {
|
|
505
|
-
case 'tanstack-start':
|
|
506
|
-
console.log(` │ └── web/ # TanStack Start frontend`);
|
|
507
|
-
break;
|
|
508
|
-
case 'expo':
|
|
509
|
-
console.log(` │ └── app/ # Expo (React Native) app`);
|
|
510
|
-
break;
|
|
511
|
-
default:
|
|
512
|
-
console.log(` │ └── web/ # Next.js frontend`);
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
console.log(` ├── packages/`);
|
|
516
|
-
console.log(` │ ├── models/ # Shared Zod schemas`);
|
|
517
|
-
if (isFullstackTemplate(options.template)) {
|
|
518
|
-
console.log(` │ └── ui/ # Shared UI components`);
|
|
519
|
-
}
|
|
520
|
-
console.log(` ├── .gkm/secrets/ # Encrypted secrets`);
|
|
521
|
-
console.log(` ├── gkm.config.ts # Workspace config`);
|
|
522
|
-
console.log(` └── turbo.json # Turbo config`);
|
|
523
|
-
console.log('');
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
console.log('🔐 Secrets management:');
|
|
527
|
-
console.log(` gkm secrets:show --stage development # View secrets`);
|
|
528
|
-
console.log(` gkm secrets:set KEY VALUE --stage development # Add secret`);
|
|
529
|
-
console.log(
|
|
530
|
-
` gkm secrets:init --stage production # Create production secrets`,
|
|
531
|
-
);
|
|
532
|
-
console.log('');
|
|
533
|
-
|
|
534
|
-
if (options.deployTarget === 'dokploy') {
|
|
535
|
-
console.log('🚀 Deployment:');
|
|
536
|
-
console.log(` ${getRunCommand(pkgManager, 'deploy')}`);
|
|
537
|
-
console.log('');
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
console.log('📚 Documentation: https://geekmidas.github.io/toolbox/');
|
|
541
|
-
console.log('');
|
|
542
|
-
}
|