@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
package/src/build/index.ts
DELETED
|
@@ -1,616 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
import { existsSync } from 'node:fs';
|
|
3
|
-
import { mkdir } from 'node:fs/promises';
|
|
4
|
-
import { join, relative, resolve } from 'node:path';
|
|
5
|
-
import type { Cron } from '@geekmidas/constructs/crons';
|
|
6
|
-
import type { Endpoint } from '@geekmidas/constructs/endpoints';
|
|
7
|
-
import type { Function } from '@geekmidas/constructs/functions';
|
|
8
|
-
import type { Queue } from '@geekmidas/constructs/queue';
|
|
9
|
-
import type { Subscriber } from '@geekmidas/constructs/subscribers';
|
|
10
|
-
import type { Topic } from '@geekmidas/constructs/topic';
|
|
11
|
-
import {
|
|
12
|
-
loadAppConfig,
|
|
13
|
-
loadConfig,
|
|
14
|
-
loadWorkspaceConfig,
|
|
15
|
-
parseModuleConfig,
|
|
16
|
-
} from '../config';
|
|
17
|
-
import {
|
|
18
|
-
getProductionConfigFromGkm,
|
|
19
|
-
normalizeHooksConfig,
|
|
20
|
-
normalizeProductionConfig,
|
|
21
|
-
normalizeStudioConfig,
|
|
22
|
-
normalizeTelescopeConfig,
|
|
23
|
-
} from '../dev';
|
|
24
|
-
import {
|
|
25
|
-
CronGenerator,
|
|
26
|
-
EndpointGenerator,
|
|
27
|
-
FunctionGenerator,
|
|
28
|
-
type GeneratedConstruct,
|
|
29
|
-
QueueGenerator,
|
|
30
|
-
SubscriberGenerator,
|
|
31
|
-
TopicGenerator,
|
|
32
|
-
} from '../generators';
|
|
33
|
-
import { generateOpenApi, openapiCommand } from '../openapi.js';
|
|
34
|
-
import {
|
|
35
|
-
type BuildOptions,
|
|
36
|
-
type BuildResult,
|
|
37
|
-
isPartitionedRoutes,
|
|
38
|
-
type LegacyProvider,
|
|
39
|
-
type RouteInfo,
|
|
40
|
-
type Routes,
|
|
41
|
-
} from '../types';
|
|
42
|
-
import {
|
|
43
|
-
getAppBuildOrder,
|
|
44
|
-
type NormalizedAppConfig,
|
|
45
|
-
type NormalizedWorkspace,
|
|
46
|
-
} from '../workspace/index.js';
|
|
47
|
-
import {
|
|
48
|
-
generateAwsManifest,
|
|
49
|
-
generateServerManifest,
|
|
50
|
-
type ManifestField,
|
|
51
|
-
type ServerAppInfo,
|
|
52
|
-
} from './manifests';
|
|
53
|
-
import { groupInfosByPartition, hasPartitions } from './partitions';
|
|
54
|
-
import { resolveProviders } from './providerResolver';
|
|
55
|
-
import type { BuildContext } from './types';
|
|
56
|
-
|
|
57
|
-
const logger = console;
|
|
58
|
-
|
|
59
|
-
export async function buildCommand(
|
|
60
|
-
options: BuildOptions,
|
|
61
|
-
): Promise<BuildResult> {
|
|
62
|
-
// Load config with workspace detection
|
|
63
|
-
const loadedConfig = await loadWorkspaceConfig();
|
|
64
|
-
|
|
65
|
-
// Route to workspace build mode for multi-app workspaces
|
|
66
|
-
// BUT only if we're at the workspace root (prevents recursive builds when
|
|
67
|
-
// Turbo runs gkm build in each app subdirectory)
|
|
68
|
-
if (loadedConfig.type === 'workspace') {
|
|
69
|
-
const cwd = resolve(process.cwd());
|
|
70
|
-
const workspaceRoot = resolve(loadedConfig.workspace.root);
|
|
71
|
-
const isAtWorkspaceRoot = cwd === workspaceRoot;
|
|
72
|
-
|
|
73
|
-
if (isAtWorkspaceRoot) {
|
|
74
|
-
logger.log('📦 Detected workspace configuration');
|
|
75
|
-
return workspaceBuildCommand(loadedConfig.workspace, options);
|
|
76
|
-
}
|
|
77
|
-
// When running from inside an app directory, use app-specific config
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Single-app build - use app config if in workspace, otherwise legacy config
|
|
81
|
-
const config =
|
|
82
|
-
loadedConfig.type === 'workspace'
|
|
83
|
-
? (await loadAppConfig()).gkmConfig
|
|
84
|
-
: await loadConfig();
|
|
85
|
-
|
|
86
|
-
// Resolve providers from new config format
|
|
87
|
-
const resolved = resolveProviders(config, options);
|
|
88
|
-
|
|
89
|
-
// Normalize production configuration
|
|
90
|
-
const productionConfigFromGkm = getProductionConfigFromGkm(config);
|
|
91
|
-
const production = normalizeProductionConfig(
|
|
92
|
-
options.production ?? false,
|
|
93
|
-
productionConfigFromGkm,
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
if (production) {
|
|
97
|
-
logger.log(`🏭 Building for PRODUCTION`);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
logger.log(`Building with providers: ${resolved.providers.join(', ')}`);
|
|
101
|
-
logger.log(`Loading routes from: ${formatRoutes(config.routes)}`);
|
|
102
|
-
if (config.functions) {
|
|
103
|
-
logger.log(`Loading functions from: ${formatRoutes(config.functions)}`);
|
|
104
|
-
}
|
|
105
|
-
if (config.crons) {
|
|
106
|
-
logger.log(`Loading crons from: ${formatRoutes(config.crons)}`);
|
|
107
|
-
}
|
|
108
|
-
if (config.subscribers) {
|
|
109
|
-
logger.log(`Loading subscribers from: ${formatRoutes(config.subscribers)}`);
|
|
110
|
-
}
|
|
111
|
-
logger.log(`Using envParser: ${config.envParser}`);
|
|
112
|
-
|
|
113
|
-
// Parse envParser and logger configuration
|
|
114
|
-
const { path: envParserPath, importPattern: envParserImportPattern } =
|
|
115
|
-
parseModuleConfig(config.envParser, 'envParser');
|
|
116
|
-
const { path: loggerPath, importPattern: loggerImportPattern } =
|
|
117
|
-
parseModuleConfig(config.logger, 'logger');
|
|
118
|
-
|
|
119
|
-
// Normalize telescope configuration (disabled in production)
|
|
120
|
-
const telescope = production
|
|
121
|
-
? undefined
|
|
122
|
-
: normalizeTelescopeConfig(config.telescope);
|
|
123
|
-
if (telescope) {
|
|
124
|
-
logger.log(`🔭 Telescope enabled at ${telescope.path}`);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Normalize studio configuration (disabled in production)
|
|
128
|
-
const studio = production ? undefined : normalizeStudioConfig(config.studio);
|
|
129
|
-
if (studio) {
|
|
130
|
-
logger.log(`🗄️ Studio enabled at ${studio.path}`);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// Normalize hooks configuration
|
|
134
|
-
const hooks = normalizeHooksConfig(config.hooks);
|
|
135
|
-
if (hooks) {
|
|
136
|
-
logger.log(`🪝 Server hooks enabled`);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// Extract docker compose services for env var auto-population
|
|
140
|
-
const services = config.docker?.compose?.services;
|
|
141
|
-
const dockerServices = services
|
|
142
|
-
? Array.isArray(services)
|
|
143
|
-
? {
|
|
144
|
-
postgres: services.includes('postgres'),
|
|
145
|
-
redis: services.includes('redis'),
|
|
146
|
-
rabbitmq: services.includes('rabbitmq'),
|
|
147
|
-
}
|
|
148
|
-
: {
|
|
149
|
-
postgres: Boolean(services.postgres),
|
|
150
|
-
redis: Boolean(services.redis),
|
|
151
|
-
rabbitmq: Boolean(services.rabbitmq),
|
|
152
|
-
}
|
|
153
|
-
: undefined;
|
|
154
|
-
|
|
155
|
-
const buildContext: BuildContext = {
|
|
156
|
-
envParserPath,
|
|
157
|
-
envParserImportPattern,
|
|
158
|
-
loggerPath,
|
|
159
|
-
loggerImportPattern,
|
|
160
|
-
telescope,
|
|
161
|
-
studio,
|
|
162
|
-
hooks,
|
|
163
|
-
production,
|
|
164
|
-
dockerServices,
|
|
165
|
-
markOptional: options.markOptional ?? false,
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
// Initialize generators
|
|
169
|
-
const endpointGenerator = new EndpointGenerator();
|
|
170
|
-
const functionGenerator = new FunctionGenerator();
|
|
171
|
-
const cronGenerator = new CronGenerator();
|
|
172
|
-
const subscriberGenerator = new SubscriberGenerator();
|
|
173
|
-
const queueGenerator = new QueueGenerator();
|
|
174
|
-
const topicGenerator = new TopicGenerator();
|
|
175
|
-
|
|
176
|
-
// Load all constructs in parallel
|
|
177
|
-
const [
|
|
178
|
-
allEndpoints,
|
|
179
|
-
allFunctions,
|
|
180
|
-
allCrons,
|
|
181
|
-
allSubscribers,
|
|
182
|
-
allQueues,
|
|
183
|
-
allTopics,
|
|
184
|
-
] = await Promise.all([
|
|
185
|
-
endpointGenerator.load(config.routes),
|
|
186
|
-
config.functions ? functionGenerator.load(config.functions) : [],
|
|
187
|
-
config.crons ? cronGenerator.load(config.crons) : [],
|
|
188
|
-
config.subscribers ? subscriberGenerator.load(config.subscribers) : [],
|
|
189
|
-
config.queues ? queueGenerator.load(config.queues) : [],
|
|
190
|
-
config.topics ? topicGenerator.load(config.topics) : [],
|
|
191
|
-
]);
|
|
192
|
-
|
|
193
|
-
logger.log(`Found ${allEndpoints.length} endpoints`);
|
|
194
|
-
logger.log(`Found ${allFunctions.length} functions`);
|
|
195
|
-
logger.log(`Found ${allCrons.length} crons`);
|
|
196
|
-
logger.log(`Found ${allSubscribers.length} subscribers`);
|
|
197
|
-
logger.log(`Found ${allQueues.length} queues`);
|
|
198
|
-
logger.log(`Found ${allTopics.length} topics`);
|
|
199
|
-
|
|
200
|
-
if (
|
|
201
|
-
allEndpoints.length === 0 &&
|
|
202
|
-
allFunctions.length === 0 &&
|
|
203
|
-
allCrons.length === 0 &&
|
|
204
|
-
allSubscribers.length === 0 &&
|
|
205
|
-
allQueues.length === 0 &&
|
|
206
|
-
allTopics.length === 0
|
|
207
|
-
) {
|
|
208
|
-
logger.log(
|
|
209
|
-
'No endpoints, functions, crons, subscribers, queues, or topics found to process',
|
|
210
|
-
);
|
|
211
|
-
return {};
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
// Ensure .gkm directory exists
|
|
215
|
-
const rootOutputDir = join(process.cwd(), '.gkm');
|
|
216
|
-
await mkdir(rootOutputDir, { recursive: true });
|
|
217
|
-
|
|
218
|
-
// Build for each provider and generate per-provider manifests
|
|
219
|
-
let result: BuildResult = {};
|
|
220
|
-
for (const provider of resolved.providers) {
|
|
221
|
-
const providerResult = await buildForProvider(
|
|
222
|
-
provider,
|
|
223
|
-
buildContext,
|
|
224
|
-
rootOutputDir,
|
|
225
|
-
endpointGenerator,
|
|
226
|
-
functionGenerator,
|
|
227
|
-
cronGenerator,
|
|
228
|
-
subscriberGenerator,
|
|
229
|
-
queueGenerator,
|
|
230
|
-
topicGenerator,
|
|
231
|
-
allEndpoints,
|
|
232
|
-
allFunctions,
|
|
233
|
-
allCrons,
|
|
234
|
-
allSubscribers,
|
|
235
|
-
allQueues,
|
|
236
|
-
allTopics,
|
|
237
|
-
resolved.enableOpenApi,
|
|
238
|
-
options.skipBundle ?? false,
|
|
239
|
-
options.stage,
|
|
240
|
-
);
|
|
241
|
-
// Keep the master key from the server provider
|
|
242
|
-
if (providerResult.masterKey) {
|
|
243
|
-
result = providerResult;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
// Generate OpenAPI spec as part of the build
|
|
248
|
-
await generateOpenApi(config, { bustCache: true });
|
|
249
|
-
|
|
250
|
-
return result;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
async function buildForProvider(
|
|
254
|
-
provider: LegacyProvider,
|
|
255
|
-
context: BuildContext,
|
|
256
|
-
rootOutputDir: string,
|
|
257
|
-
endpointGenerator: EndpointGenerator,
|
|
258
|
-
functionGenerator: FunctionGenerator,
|
|
259
|
-
cronGenerator: CronGenerator,
|
|
260
|
-
subscriberGenerator: SubscriberGenerator,
|
|
261
|
-
queueGenerator: QueueGenerator,
|
|
262
|
-
topicGenerator: TopicGenerator,
|
|
263
|
-
endpoints: GeneratedConstruct<Endpoint<any, any, any, any, any, any>>[],
|
|
264
|
-
functions: GeneratedConstruct<Function<any, any, any, any>>[],
|
|
265
|
-
crons: GeneratedConstruct<Cron<any, any, any, any>>[],
|
|
266
|
-
subscribers: GeneratedConstruct<Subscriber<any, any, any, any, any, any>>[],
|
|
267
|
-
queues: GeneratedConstruct<Queue<any, any, any, any>>[],
|
|
268
|
-
topics: GeneratedConstruct<Topic<any, any>>[],
|
|
269
|
-
enableOpenApi: boolean,
|
|
270
|
-
skipBundle: boolean,
|
|
271
|
-
stage?: string,
|
|
272
|
-
): Promise<BuildResult> {
|
|
273
|
-
const outputDir = join(process.cwd(), '.gkm', provider);
|
|
274
|
-
|
|
275
|
-
// Ensure output directory exists
|
|
276
|
-
await mkdir(outputDir, { recursive: true });
|
|
277
|
-
|
|
278
|
-
logger.log(`\nGenerating handlers for provider: ${provider}`);
|
|
279
|
-
|
|
280
|
-
// Build all constructs in parallel.
|
|
281
|
-
// context.markOptional is forwarded to each generator so that
|
|
282
|
-
// getEnvironment({ markOptional }) produces `VARNAME?` for optional vars.
|
|
283
|
-
const [
|
|
284
|
-
routes,
|
|
285
|
-
functionInfos,
|
|
286
|
-
cronInfos,
|
|
287
|
-
subscriberInfos,
|
|
288
|
-
queueInfos,
|
|
289
|
-
topicInfos,
|
|
290
|
-
] = await Promise.all([
|
|
291
|
-
endpointGenerator.build(context, endpoints, outputDir, {
|
|
292
|
-
provider,
|
|
293
|
-
enableOpenApi,
|
|
294
|
-
}),
|
|
295
|
-
functionGenerator.build(context, functions, outputDir, { provider }),
|
|
296
|
-
cronGenerator.build(context, crons, outputDir, { provider }),
|
|
297
|
-
subscriberGenerator.build(context, subscribers, outputDir, { provider }),
|
|
298
|
-
queueGenerator.build(context, queues, outputDir, { provider }),
|
|
299
|
-
topicGenerator.build(context, topics, outputDir, { provider }),
|
|
300
|
-
]);
|
|
301
|
-
|
|
302
|
-
logger.log(
|
|
303
|
-
`Generated ${routes.length} routes, ${functionInfos.length} functions, ${cronInfos.length} crons, ${subscriberInfos.length} subscribers, ${queueInfos.length} queues, ${topicInfos.length} topics for ${provider}`,
|
|
304
|
-
);
|
|
305
|
-
|
|
306
|
-
// Assemble manifest fields (flat or partitioned per construct type)
|
|
307
|
-
const manifestRoutes = assembleManifestField(routes, endpoints);
|
|
308
|
-
const manifestFunctions = assembleManifestField(functionInfos, functions);
|
|
309
|
-
const manifestCrons = assembleManifestField(cronInfos, crons);
|
|
310
|
-
const manifestQueues = assembleManifestField(queueInfos, queues);
|
|
311
|
-
const manifestTopics = assembleManifestField(topicInfos, topics);
|
|
312
|
-
const manifestSubscribers = assembleManifestField(
|
|
313
|
-
subscriberInfos,
|
|
314
|
-
subscribers,
|
|
315
|
-
);
|
|
316
|
-
|
|
317
|
-
// Generate provider-specific manifest
|
|
318
|
-
if (provider === 'server') {
|
|
319
|
-
// For server, collect actual route metadata from endpoint constructs
|
|
320
|
-
const routeMetadata: RouteInfo[] = await Promise.all(
|
|
321
|
-
endpoints.map(async ({ construct }) => ({
|
|
322
|
-
path: construct._path,
|
|
323
|
-
method: construct.method,
|
|
324
|
-
handler: '', // Not needed for server manifest
|
|
325
|
-
authorizer: construct.authorizer?.name ?? 'none',
|
|
326
|
-
})),
|
|
327
|
-
);
|
|
328
|
-
|
|
329
|
-
const serverRouteField = assembleManifestField(routeMetadata, endpoints);
|
|
330
|
-
|
|
331
|
-
const appInfo: ServerAppInfo = {
|
|
332
|
-
handler: relative(process.cwd(), join(outputDir, 'app.ts')),
|
|
333
|
-
endpoints: relative(process.cwd(), join(outputDir, 'endpoints.ts')),
|
|
334
|
-
};
|
|
335
|
-
|
|
336
|
-
await generateServerManifest(
|
|
337
|
-
rootOutputDir,
|
|
338
|
-
appInfo,
|
|
339
|
-
serverRouteField,
|
|
340
|
-
manifestSubscribers,
|
|
341
|
-
manifestQueues,
|
|
342
|
-
manifestTopics,
|
|
343
|
-
);
|
|
344
|
-
|
|
345
|
-
// Bundle for production if enabled
|
|
346
|
-
let masterKey: string | undefined;
|
|
347
|
-
if (context.production?.bundle && !skipBundle) {
|
|
348
|
-
logger.log(`\n📦 Bundling production server...`);
|
|
349
|
-
const { bundleServer } = await import('./bundler');
|
|
350
|
-
|
|
351
|
-
// Collect all constructs for environment variable validation
|
|
352
|
-
const allConstructs = [
|
|
353
|
-
...endpoints.map((e) => e.construct),
|
|
354
|
-
...functions.map((f) => f.construct),
|
|
355
|
-
...crons.map((c) => c.construct),
|
|
356
|
-
...subscribers.map((s) => s.construct),
|
|
357
|
-
...queues.map((q) => q.construct),
|
|
358
|
-
];
|
|
359
|
-
|
|
360
|
-
// Get docker compose services for auto-populating env vars
|
|
361
|
-
const dockerServices = context.dockerServices;
|
|
362
|
-
|
|
363
|
-
const bundleResult = await bundleServer({
|
|
364
|
-
entryPoint: join(outputDir, 'server.ts'),
|
|
365
|
-
outputDir: join(outputDir, 'dist'),
|
|
366
|
-
minify: context.production.minify,
|
|
367
|
-
sourcemap: false,
|
|
368
|
-
external: context.production.external,
|
|
369
|
-
stage,
|
|
370
|
-
constructs: allConstructs,
|
|
371
|
-
dockerServices,
|
|
372
|
-
});
|
|
373
|
-
masterKey = bundleResult.masterKey;
|
|
374
|
-
logger.log(`✅ Bundle complete: .gkm/server/dist/server.mjs`);
|
|
375
|
-
|
|
376
|
-
// Display master key if secrets were injected
|
|
377
|
-
if (masterKey) {
|
|
378
|
-
logger.log(`\n🔐 Secrets encrypted for deployment`);
|
|
379
|
-
logger.log(` Deploy with: GKM_MASTER_KEY=${masterKey}`);
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
return { masterKey };
|
|
384
|
-
} else {
|
|
385
|
-
// For AWS providers, generate AWS manifest
|
|
386
|
-
await generateAwsManifest(
|
|
387
|
-
rootOutputDir,
|
|
388
|
-
manifestRoutes,
|
|
389
|
-
manifestFunctions,
|
|
390
|
-
manifestCrons,
|
|
391
|
-
manifestSubscribers,
|
|
392
|
-
manifestQueues,
|
|
393
|
-
manifestTopics,
|
|
394
|
-
);
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
return {};
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
/**
|
|
401
|
-
* Result of building a single app in a workspace.
|
|
402
|
-
*/
|
|
403
|
-
export interface AppBuildResult {
|
|
404
|
-
appName: string;
|
|
405
|
-
type: 'backend' | 'web' | 'mobile';
|
|
406
|
-
success: boolean;
|
|
407
|
-
outputPath?: string;
|
|
408
|
-
error?: string;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
/**
|
|
412
|
-
* Result of workspace build command.
|
|
413
|
-
*/
|
|
414
|
-
export interface WorkspaceBuildResult extends BuildResult {
|
|
415
|
-
apps: AppBuildResult[];
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
/**
|
|
419
|
-
* Detect available package manager.
|
|
420
|
-
* @internal Exported for testing
|
|
421
|
-
*/
|
|
422
|
-
export function detectPackageManager(): 'pnpm' | 'npm' | 'yarn' {
|
|
423
|
-
if (existsSync('pnpm-lock.yaml')) return 'pnpm';
|
|
424
|
-
if (existsSync('yarn.lock')) return 'yarn';
|
|
425
|
-
return 'npm';
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
/**
|
|
429
|
-
* Get the turbo command for running builds.
|
|
430
|
-
* @internal Exported for testing
|
|
431
|
-
*/
|
|
432
|
-
export function getTurboCommand(
|
|
433
|
-
pm: 'pnpm' | 'npm' | 'yarn',
|
|
434
|
-
filter?: string,
|
|
435
|
-
): string {
|
|
436
|
-
const filterArg = filter ? ` --filter=${filter}` : '';
|
|
437
|
-
switch (pm) {
|
|
438
|
-
case 'pnpm':
|
|
439
|
-
return `pnpm exec turbo run build${filterArg}`;
|
|
440
|
-
case 'yarn':
|
|
441
|
-
return `yarn turbo run build${filterArg}`;
|
|
442
|
-
case 'npm':
|
|
443
|
-
return `npx turbo run build${filterArg}`;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
/**
|
|
448
|
-
* Build all apps in a workspace using Turbo for dependency-ordered parallel builds.
|
|
449
|
-
* @internal Exported for testing
|
|
450
|
-
*/
|
|
451
|
-
export async function workspaceBuildCommand(
|
|
452
|
-
workspace: NormalizedWorkspace,
|
|
453
|
-
options: BuildOptions,
|
|
454
|
-
): Promise<WorkspaceBuildResult> {
|
|
455
|
-
const results: AppBuildResult[] = [];
|
|
456
|
-
const apps = Object.entries(workspace.apps);
|
|
457
|
-
const backendApps = apps.filter(([, app]) => app.type === 'backend');
|
|
458
|
-
const frontendApps = apps.filter(([, app]) => app.type === 'web');
|
|
459
|
-
|
|
460
|
-
logger.log(`\n🏗️ Building workspace: ${workspace.name}`);
|
|
461
|
-
logger.log(
|
|
462
|
-
` Backend apps: ${backendApps.map(([name]) => name).join(', ') || 'none'}`,
|
|
463
|
-
);
|
|
464
|
-
logger.log(
|
|
465
|
-
` Frontend apps: ${frontendApps.map(([name]) => name).join(', ') || 'none'}`,
|
|
466
|
-
);
|
|
467
|
-
|
|
468
|
-
if (options.production) {
|
|
469
|
-
logger.log(` 🏭 Production mode enabled`);
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
// Get build order (topologically sorted by dependencies)
|
|
473
|
-
const buildOrder = getAppBuildOrder(workspace);
|
|
474
|
-
logger.log(` Build order: ${buildOrder.join(' → ')}`);
|
|
475
|
-
|
|
476
|
-
// Use Turbo for parallel builds with dependency awareness
|
|
477
|
-
const pm = detectPackageManager();
|
|
478
|
-
logger.log(`\n📦 Using ${pm} with Turbo for parallel builds...\n`);
|
|
479
|
-
|
|
480
|
-
try {
|
|
481
|
-
// Run turbo build which handles dependency ordering and parallelization
|
|
482
|
-
const turboCommand = getTurboCommand(pm);
|
|
483
|
-
logger.log(`Running: ${turboCommand}`);
|
|
484
|
-
|
|
485
|
-
await new Promise<void>((resolve, reject) => {
|
|
486
|
-
const child = spawn(turboCommand, {
|
|
487
|
-
shell: true,
|
|
488
|
-
cwd: workspace.root,
|
|
489
|
-
stdio: 'inherit',
|
|
490
|
-
env: {
|
|
491
|
-
...process.env,
|
|
492
|
-
// Pass production flag to builds
|
|
493
|
-
NODE_ENV: options.production ? 'production' : 'development',
|
|
494
|
-
},
|
|
495
|
-
});
|
|
496
|
-
|
|
497
|
-
child.on('close', (code) => {
|
|
498
|
-
if (code === 0) {
|
|
499
|
-
resolve();
|
|
500
|
-
} else {
|
|
501
|
-
reject(new Error(`Turbo build failed with exit code ${code}`));
|
|
502
|
-
}
|
|
503
|
-
});
|
|
504
|
-
|
|
505
|
-
child.on('error', (err) => {
|
|
506
|
-
reject(err);
|
|
507
|
-
});
|
|
508
|
-
});
|
|
509
|
-
|
|
510
|
-
// Mark all apps as successful
|
|
511
|
-
for (const [appName, app] of apps) {
|
|
512
|
-
const outputPath = getAppOutputPath(workspace, appName, app);
|
|
513
|
-
results.push({
|
|
514
|
-
appName,
|
|
515
|
-
type: app.type,
|
|
516
|
-
success: true,
|
|
517
|
-
outputPath,
|
|
518
|
-
});
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
logger.log(`\n✅ Workspace build complete!`);
|
|
522
|
-
|
|
523
|
-
// Generate OpenAPI specs and copy to frontend apps
|
|
524
|
-
await openapiCommand({ cwd: workspace.root });
|
|
525
|
-
|
|
526
|
-
// Summary
|
|
527
|
-
logger.log(`\n📋 Build Summary:`);
|
|
528
|
-
for (const result of results) {
|
|
529
|
-
const icon =
|
|
530
|
-
result.type === 'backend'
|
|
531
|
-
? '⚙️'
|
|
532
|
-
: result.type === 'mobile'
|
|
533
|
-
? '📱'
|
|
534
|
-
: '🌐';
|
|
535
|
-
logger.log(
|
|
536
|
-
` ${icon} ${result.appName}: ${result.outputPath || 'built'}`,
|
|
537
|
-
);
|
|
538
|
-
}
|
|
539
|
-
} catch (error) {
|
|
540
|
-
const errorMessage =
|
|
541
|
-
error instanceof Error ? error.message : 'Build failed';
|
|
542
|
-
logger.log(`\n❌ Build failed: ${errorMessage}`);
|
|
543
|
-
|
|
544
|
-
// Mark all apps as failed
|
|
545
|
-
for (const [appName, app] of apps) {
|
|
546
|
-
results.push({
|
|
547
|
-
appName,
|
|
548
|
-
type: app.type,
|
|
549
|
-
success: false,
|
|
550
|
-
error: errorMessage,
|
|
551
|
-
});
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
throw error;
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
return { apps: results };
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
/**
|
|
561
|
-
* Get the output path for a built app.
|
|
562
|
-
*/
|
|
563
|
-
function getAppOutputPath(
|
|
564
|
-
workspace: NormalizedWorkspace,
|
|
565
|
-
_appName: string,
|
|
566
|
-
app: NormalizedAppConfig,
|
|
567
|
-
): string {
|
|
568
|
-
const appPath = join(workspace.root, app.path);
|
|
569
|
-
|
|
570
|
-
if (app.type === 'mobile') {
|
|
571
|
-
// Mobile builds are produced by the framework's own toolchain
|
|
572
|
-
// (e.g. EAS Build) — no local output path.
|
|
573
|
-
return '';
|
|
574
|
-
}
|
|
575
|
-
if (app.type === 'web') {
|
|
576
|
-
switch (app.framework) {
|
|
577
|
-
case 'vite':
|
|
578
|
-
case 'tanstack-start':
|
|
579
|
-
return join(appPath, 'dist');
|
|
580
|
-
case 'remix':
|
|
581
|
-
return join(appPath, 'build');
|
|
582
|
-
default:
|
|
583
|
-
return join(appPath, '.next');
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
// Backend .gkm output
|
|
587
|
-
return join(appPath, '.gkm');
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
/**
|
|
591
|
-
* Format routes for logging, handling PartitionedRoutes.
|
|
592
|
-
*/
|
|
593
|
-
function formatRoutes(routes: Routes): string {
|
|
594
|
-
if (isPartitionedRoutes(routes)) {
|
|
595
|
-
const paths = Array.isArray(routes.paths)
|
|
596
|
-
? routes.paths.join(', ')
|
|
597
|
-
: routes.paths;
|
|
598
|
-
return `${paths} (partitioned)`;
|
|
599
|
-
}
|
|
600
|
-
return Array.isArray(routes) ? routes.join(', ') : routes;
|
|
601
|
-
}
|
|
602
|
-
|
|
603
|
-
/**
|
|
604
|
-
* Assemble a ManifestField from build infos and constructs.
|
|
605
|
-
* If any construct has a partition, returns a Record<string, T[]>.
|
|
606
|
-
* Otherwise, returns a flat T[].
|
|
607
|
-
*/
|
|
608
|
-
function assembleManifestField<T>(
|
|
609
|
-
infos: T[],
|
|
610
|
-
constructs: GeneratedConstruct<any>[],
|
|
611
|
-
): ManifestField<T> {
|
|
612
|
-
if (!hasPartitions(constructs)) {
|
|
613
|
-
return infos;
|
|
614
|
-
}
|
|
615
|
-
return groupInfosByPartition(infos, constructs);
|
|
616
|
-
}
|