@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/debug.ts
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
let _debug = false;
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Enable debug mode globally.
|
|
5
|
-
* When enabled, verbose error details are shown everywhere.
|
|
6
|
-
*/
|
|
7
|
-
export function enableDebug(): void {
|
|
8
|
-
_debug = true;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Check if debug mode is active.
|
|
13
|
-
* Activated by `--debug` flag or `GKM_DEBUG=1` env var.
|
|
14
|
-
*/
|
|
15
|
-
export function isDebug(): boolean {
|
|
16
|
-
return _debug || process.env.GKM_DEBUG === '1';
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Log a message only when debug mode is active.
|
|
21
|
-
*/
|
|
22
|
-
export function debug(...args: unknown[]): void {
|
|
23
|
-
if (isDebug()) {
|
|
24
|
-
console.debug('[debug]', ...args);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Format a fatal error for display.
|
|
30
|
-
* Always includes the full stack trace since these are process-ending errors.
|
|
31
|
-
*/
|
|
32
|
-
export function formatError(error: unknown): string {
|
|
33
|
-
if (!(error instanceof Error)) {
|
|
34
|
-
return String(error);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
let output = error.stack ?? error.message;
|
|
38
|
-
|
|
39
|
-
// Include cause chain if present
|
|
40
|
-
let cause = error.cause;
|
|
41
|
-
while (cause) {
|
|
42
|
-
if (cause instanceof Error) {
|
|
43
|
-
output += `\n\nCaused by: ${cause.stack ?? cause.message}`;
|
|
44
|
-
cause = cause.cause;
|
|
45
|
-
} else {
|
|
46
|
-
output += `\n\nCaused by: ${String(cause)}`;
|
|
47
|
-
break;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return output;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Format a non-fatal error for display.
|
|
56
|
-
* Shows only the message by default, full stack in debug mode.
|
|
57
|
-
*/
|
|
58
|
-
export function formatWarning(error: unknown): string {
|
|
59
|
-
if (!(error instanceof Error)) {
|
|
60
|
-
return String(error);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
if (!isDebug()) {
|
|
64
|
-
return error.message;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return error.stack ?? error.message;
|
|
68
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cached State Provider
|
|
3
|
-
*
|
|
4
|
-
* Wraps a remote state provider (SSM) with local filesystem cache.
|
|
5
|
-
* - Read: Local first, then remote if missing
|
|
6
|
-
* - Write: Remote first, then update local cache
|
|
7
|
-
*
|
|
8
|
-
* This enables fast local development while keeping SSM as source of truth.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import type { StateProvider } from './StateProvider';
|
|
12
|
-
import type { DokployStageState } from './state';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Cached state provider that wraps a remote provider with local cache.
|
|
16
|
-
*/
|
|
17
|
-
export class CachedStateProvider implements StateProvider {
|
|
18
|
-
constructor(
|
|
19
|
-
private readonly remote: StateProvider,
|
|
20
|
-
private readonly local: StateProvider,
|
|
21
|
-
) {}
|
|
22
|
-
|
|
23
|
-
async read(stage: string): Promise<DokployStageState | null> {
|
|
24
|
-
// Try local cache first
|
|
25
|
-
const localState = await this.local.read(stage);
|
|
26
|
-
if (localState) {
|
|
27
|
-
return localState;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Fall back to remote
|
|
31
|
-
const remoteState = await this.remote.read(stage);
|
|
32
|
-
if (remoteState) {
|
|
33
|
-
// Update local cache
|
|
34
|
-
await this.local.write(stage, remoteState);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return remoteState;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
async write(stage: string, state: DokployStageState): Promise<void> {
|
|
41
|
-
// Write to remote first (source of truth)
|
|
42
|
-
await this.remote.write(stage, state);
|
|
43
|
-
|
|
44
|
-
// Update local cache
|
|
45
|
-
await this.local.write(stage, state);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Force pull from remote to local.
|
|
50
|
-
* Used by `gkm state pull` command.
|
|
51
|
-
*/
|
|
52
|
-
async pull(stage: string): Promise<DokployStageState | null> {
|
|
53
|
-
const remoteState = await this.remote.read(stage);
|
|
54
|
-
if (remoteState) {
|
|
55
|
-
await this.local.write(stage, remoteState);
|
|
56
|
-
}
|
|
57
|
-
return remoteState;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Force push from local to remote.
|
|
62
|
-
* Used by `gkm state push` command.
|
|
63
|
-
*/
|
|
64
|
-
async push(stage: string): Promise<DokployStageState | null> {
|
|
65
|
-
const localState = await this.local.read(stage);
|
|
66
|
-
if (localState) {
|
|
67
|
-
await this.remote.write(stage, localState);
|
|
68
|
-
}
|
|
69
|
-
return localState;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Get both local and remote state for comparison.
|
|
74
|
-
* Used by `gkm state diff` command.
|
|
75
|
-
*/
|
|
76
|
-
async diff(stage: string): Promise<{
|
|
77
|
-
local: DokployStageState | null;
|
|
78
|
-
remote: DokployStageState | null;
|
|
79
|
-
}> {
|
|
80
|
-
const [local, remote] = await Promise.all([
|
|
81
|
-
this.local.read(stage),
|
|
82
|
-
this.remote.read(stage),
|
|
83
|
-
]);
|
|
84
|
-
return { local, remote };
|
|
85
|
-
}
|
|
86
|
-
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Local Filesystem State Provider
|
|
3
|
-
*
|
|
4
|
-
* Stores deployment state in .gkm/deploy-{stage}.json files.
|
|
5
|
-
* This is the default provider for local development.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
9
|
-
import { join } from 'node:path';
|
|
10
|
-
import type { StateProvider } from './StateProvider';
|
|
11
|
-
import type { DokployStageState } from './state';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Get the state file path for a stage.
|
|
15
|
-
*/
|
|
16
|
-
function getStateFilePath(workspaceRoot: string, stage: string): string {
|
|
17
|
-
return join(workspaceRoot, '.gkm', `deploy-${stage}.json`);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Local filesystem state provider.
|
|
22
|
-
*
|
|
23
|
-
* Stores state in .gkm/deploy-{stage}.json files in the workspace root.
|
|
24
|
-
*/
|
|
25
|
-
export class LocalStateProvider implements StateProvider {
|
|
26
|
-
constructor(private readonly workspaceRoot: string) {}
|
|
27
|
-
|
|
28
|
-
async read(stage: string): Promise<DokployStageState | null> {
|
|
29
|
-
const filePath = getStateFilePath(this.workspaceRoot, stage);
|
|
30
|
-
|
|
31
|
-
try {
|
|
32
|
-
const content = await readFile(filePath, 'utf-8');
|
|
33
|
-
return JSON.parse(content) as DokployStageState;
|
|
34
|
-
} catch (error) {
|
|
35
|
-
// File doesn't exist - return null
|
|
36
|
-
if ((error as NodeJS.ErrnoException).code === 'ENOENT') {
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
// Log other errors but don't fail
|
|
40
|
-
console.warn(`Warning: Could not read deploy state: ${error}`);
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
async write(stage: string, state: DokployStageState): Promise<void> {
|
|
46
|
-
const filePath = getStateFilePath(this.workspaceRoot, stage);
|
|
47
|
-
const dir = join(this.workspaceRoot, '.gkm');
|
|
48
|
-
|
|
49
|
-
// Ensure .gkm directory exists
|
|
50
|
-
await mkdir(dir, { recursive: true });
|
|
51
|
-
|
|
52
|
-
// Update last deployed timestamp
|
|
53
|
-
state.lastDeployedAt = new Date().toISOString();
|
|
54
|
-
|
|
55
|
-
await writeFile(filePath, JSON.stringify(state, null, 2));
|
|
56
|
-
}
|
|
57
|
-
}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AWS SSM Parameter Store State Provider
|
|
3
|
-
*
|
|
4
|
-
* Stores deployment state as SecureString parameters in AWS SSM.
|
|
5
|
-
* Uses AWS-managed KMS key for encryption (free tier).
|
|
6
|
-
*
|
|
7
|
-
* Parameter naming: /gkm/{workspaceName}/{stage}/state
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import {
|
|
11
|
-
GetParameterCommand,
|
|
12
|
-
ParameterNotFound,
|
|
13
|
-
PutParameterCommand,
|
|
14
|
-
SSMClient,
|
|
15
|
-
type SSMClientConfig,
|
|
16
|
-
} from '@aws-sdk/client-ssm';
|
|
17
|
-
import type { AwsRegion, StateProvider } from './StateProvider';
|
|
18
|
-
import type { DokployStageState } from './state';
|
|
19
|
-
|
|
20
|
-
export interface SSMStateProviderOptions {
|
|
21
|
-
/** Workspace name (used in parameter path) */
|
|
22
|
-
workspaceName: string;
|
|
23
|
-
/** AWS region */
|
|
24
|
-
region?: AwsRegion;
|
|
25
|
-
/** AWS profile name (optional - uses default credential chain if not provided) */
|
|
26
|
-
profile?: string;
|
|
27
|
-
/** AWS credentials (optional - uses default credential chain if not provided) */
|
|
28
|
-
credentials?: SSMClientConfig['credentials'];
|
|
29
|
-
/** Custom endpoint (for LocalStack or other S3-compatible services) */
|
|
30
|
-
endpoint?: string;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* AWS SSM Parameter Store state provider.
|
|
35
|
-
*
|
|
36
|
-
* Stores state as encrypted SecureString parameters.
|
|
37
|
-
* Parameter path: /gkm/{workspaceName}/{stage}/state
|
|
38
|
-
*/
|
|
39
|
-
export class SSMStateProvider implements StateProvider {
|
|
40
|
-
constructor(
|
|
41
|
-
readonly workspaceName: string,
|
|
42
|
-
private readonly client: SSMClient,
|
|
43
|
-
) {}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Create an SSMStateProvider with a new SSMClient.
|
|
47
|
-
*/
|
|
48
|
-
static create(options: SSMStateProviderOptions): SSMStateProvider {
|
|
49
|
-
const clientConfig: SSMClientConfig = {
|
|
50
|
-
region: options.region,
|
|
51
|
-
endpoint: options.endpoint,
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
// Use profile credentials if specified, otherwise use provided credentials or default chain
|
|
55
|
-
if (options.profile) {
|
|
56
|
-
// Dynamic import to avoid requiring @aws-sdk/credential-providers when not using profiles
|
|
57
|
-
const { fromIni } = require('@aws-sdk/credential-providers');
|
|
58
|
-
clientConfig.credentials = fromIni({ profile: options.profile });
|
|
59
|
-
} else if (options.credentials) {
|
|
60
|
-
clientConfig.credentials = options.credentials;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const client = new SSMClient(clientConfig);
|
|
64
|
-
return new SSMStateProvider(options.workspaceName, client);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Get the SSM parameter name for a stage.
|
|
69
|
-
*/
|
|
70
|
-
private getParameterName(stage: string): string {
|
|
71
|
-
return `/gkm/${this.workspaceName}/${stage}/state`;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
async read(stage: string): Promise<DokployStageState | null> {
|
|
75
|
-
const parameterName = this.getParameterName(stage);
|
|
76
|
-
|
|
77
|
-
try {
|
|
78
|
-
const response = await this.client.send(
|
|
79
|
-
new GetParameterCommand({
|
|
80
|
-
Name: parameterName,
|
|
81
|
-
WithDecryption: true,
|
|
82
|
-
}),
|
|
83
|
-
);
|
|
84
|
-
|
|
85
|
-
if (!response.Parameter?.Value) {
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
return JSON.parse(response.Parameter.Value) as DokployStageState;
|
|
90
|
-
} catch (error) {
|
|
91
|
-
// Parameter doesn't exist - return null (new deployment)
|
|
92
|
-
if (error instanceof ParameterNotFound) {
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// Re-throw other errors (permission denied, network, etc.)
|
|
97
|
-
throw error;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
async write(stage: string, state: DokployStageState): Promise<void> {
|
|
102
|
-
const parameterName = this.getParameterName(stage);
|
|
103
|
-
|
|
104
|
-
// Update last deployed timestamp
|
|
105
|
-
state.lastDeployedAt = new Date().toISOString();
|
|
106
|
-
|
|
107
|
-
await this.client.send(
|
|
108
|
-
new PutParameterCommand({
|
|
109
|
-
Name: parameterName,
|
|
110
|
-
Value: JSON.stringify(state),
|
|
111
|
-
Type: 'SecureString',
|
|
112
|
-
Overwrite: true,
|
|
113
|
-
Description: `GKM deployment state for ${this.workspaceName}/${stage}`,
|
|
114
|
-
}),
|
|
115
|
-
);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* State Provider Interface
|
|
3
|
-
*
|
|
4
|
-
* Abstracts the storage backend for deployment state.
|
|
5
|
-
* Built-in providers: LocalStateProvider, SSMStateProvider
|
|
6
|
-
* Users can also supply custom implementations.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import type { DokployStageState } from './state';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Interface for deployment state storage providers.
|
|
13
|
-
*
|
|
14
|
-
* Implementations must handle:
|
|
15
|
-
* - Reading state for a stage (returns null if not found)
|
|
16
|
-
* - Writing state for a stage (creates or updates)
|
|
17
|
-
*/
|
|
18
|
-
export interface StateProvider {
|
|
19
|
-
/**
|
|
20
|
-
* Read deployment state for a stage.
|
|
21
|
-
*
|
|
22
|
-
* @param stage - The deployment stage (e.g., 'development', 'production')
|
|
23
|
-
* @returns The state object or null if not found
|
|
24
|
-
*/
|
|
25
|
-
read(stage: string): Promise<DokployStageState | null>;
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Write deployment state for a stage.
|
|
29
|
-
*
|
|
30
|
-
* @param stage - The deployment stage
|
|
31
|
-
* @param state - The state object to persist
|
|
32
|
-
*/
|
|
33
|
-
write(stage: string, state: DokployStageState): Promise<void>;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Valid AWS regions.
|
|
38
|
-
*/
|
|
39
|
-
export type AwsRegion =
|
|
40
|
-
| 'us-east-1'
|
|
41
|
-
| 'us-east-2'
|
|
42
|
-
| 'us-west-1'
|
|
43
|
-
| 'us-west-2'
|
|
44
|
-
| 'af-south-1'
|
|
45
|
-
| 'ap-east-1'
|
|
46
|
-
| 'ap-south-1'
|
|
47
|
-
| 'ap-south-2'
|
|
48
|
-
| 'ap-southeast-1'
|
|
49
|
-
| 'ap-southeast-2'
|
|
50
|
-
| 'ap-southeast-3'
|
|
51
|
-
| 'ap-southeast-4'
|
|
52
|
-
| 'ap-northeast-1'
|
|
53
|
-
| 'ap-northeast-2'
|
|
54
|
-
| 'ap-northeast-3'
|
|
55
|
-
| 'ca-central-1'
|
|
56
|
-
| 'eu-central-1'
|
|
57
|
-
| 'eu-central-2'
|
|
58
|
-
| 'eu-west-1'
|
|
59
|
-
| 'eu-west-2'
|
|
60
|
-
| 'eu-west-3'
|
|
61
|
-
| 'eu-south-1'
|
|
62
|
-
| 'eu-south-2'
|
|
63
|
-
| 'eu-north-1'
|
|
64
|
-
| 'me-south-1'
|
|
65
|
-
| 'me-central-1'
|
|
66
|
-
| 'sa-east-1';
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Local state provider config.
|
|
70
|
-
*/
|
|
71
|
-
export interface LocalStateConfig {
|
|
72
|
-
provider: 'local';
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* SSM state provider config (requires region).
|
|
77
|
-
*/
|
|
78
|
-
export interface SSMStateConfig {
|
|
79
|
-
provider: 'ssm';
|
|
80
|
-
/** AWS region (required for SSM provider) */
|
|
81
|
-
region: AwsRegion;
|
|
82
|
-
/** AWS profile name (optional - uses default credential chain if not provided) */
|
|
83
|
-
profile?: string;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Custom state provider config.
|
|
88
|
-
*/
|
|
89
|
-
export interface CustomStateConfig {
|
|
90
|
-
/** Custom StateProvider implementation */
|
|
91
|
-
provider: StateProvider;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* State configuration types.
|
|
96
|
-
*/
|
|
97
|
-
export type StateConfig = LocalStateConfig | SSMStateConfig | CustomStateConfig;
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Check if value is a StateProvider implementation.
|
|
101
|
-
*/
|
|
102
|
-
export function isStateProvider(value: unknown): value is StateProvider {
|
|
103
|
-
return (
|
|
104
|
-
typeof value === 'object' &&
|
|
105
|
-
value !== null &&
|
|
106
|
-
typeof (value as StateProvider).read === 'function' &&
|
|
107
|
-
typeof (value as StateProvider).write === 'function'
|
|
108
|
-
);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
export interface CreateStateProviderOptions {
|
|
112
|
-
/** State config from workspace */
|
|
113
|
-
config?: StateConfig;
|
|
114
|
-
/** Workspace root directory (for local provider) */
|
|
115
|
-
workspaceRoot: string;
|
|
116
|
-
/** Workspace name (for SSM parameter path) */
|
|
117
|
-
workspaceName: string;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Create a state provider based on configuration.
|
|
122
|
-
*
|
|
123
|
-
* - 'local': LocalStateProvider (default)
|
|
124
|
-
* - 'ssm': CachedStateProvider with SSM as source of truth
|
|
125
|
-
* - Custom: Use provided StateProvider implementation
|
|
126
|
-
*/
|
|
127
|
-
export async function createStateProvider(
|
|
128
|
-
options: CreateStateProviderOptions,
|
|
129
|
-
): Promise<StateProvider> {
|
|
130
|
-
const { config, workspaceRoot, workspaceName } = options;
|
|
131
|
-
|
|
132
|
-
// Default to local provider if no config
|
|
133
|
-
if (!config) {
|
|
134
|
-
const { LocalStateProvider } = await import('./LocalStateProvider');
|
|
135
|
-
return new LocalStateProvider(workspaceRoot);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// Custom provider implementation
|
|
139
|
-
if (isStateProvider(config.provider)) {
|
|
140
|
-
return config.provider;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Built-in providers (discriminated by provider string)
|
|
144
|
-
const provider = config.provider;
|
|
145
|
-
|
|
146
|
-
if (provider === 'local') {
|
|
147
|
-
const { LocalStateProvider } = await import('./LocalStateProvider');
|
|
148
|
-
return new LocalStateProvider(workspaceRoot);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
if (provider === 'ssm') {
|
|
152
|
-
if (!workspaceName) {
|
|
153
|
-
throw new Error(
|
|
154
|
-
'Workspace name is required for SSM state provider. Set "name" in gkm.config.ts.',
|
|
155
|
-
);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
const { LocalStateProvider } = await import('./LocalStateProvider');
|
|
159
|
-
const { SSMStateProvider } = await import('./SSMStateProvider');
|
|
160
|
-
const { CachedStateProvider } = await import('./CachedStateProvider');
|
|
161
|
-
|
|
162
|
-
const ssmConfig = config as SSMStateConfig;
|
|
163
|
-
const local = new LocalStateProvider(workspaceRoot);
|
|
164
|
-
const ssm = SSMStateProvider.create({
|
|
165
|
-
workspaceName,
|
|
166
|
-
region: ssmConfig.region,
|
|
167
|
-
profile: ssmConfig.profile,
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
return new CachedStateProvider(ssm, local);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// Should never reach here - custom providers handled above
|
|
174
|
-
throw new Error(`Unknown state provider: ${JSON.stringify(config)}`);
|
|
175
|
-
}
|