@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
|
@@ -1,347 +0,0 @@
|
|
|
1
|
-
import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { tmpdir } from 'node:os';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
5
|
-
import { prepareEntryCredentials } from '../index';
|
|
6
|
-
|
|
7
|
-
describe('prepareEntryCredentials', () => {
|
|
8
|
-
let workspaceDir: string;
|
|
9
|
-
|
|
10
|
-
beforeEach(async () => {
|
|
11
|
-
workspaceDir = join(tmpdir(), `gkm-entry-test-${Date.now()}`);
|
|
12
|
-
await mkdir(workspaceDir, { recursive: true });
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
afterEach(async () => {
|
|
16
|
-
await rm(workspaceDir, { recursive: true, force: true });
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
describe('workspace with port config', () => {
|
|
20
|
-
beforeEach(async () => {
|
|
21
|
-
// Create workspace structure:
|
|
22
|
-
// workspace/
|
|
23
|
-
// gkm.config.ts
|
|
24
|
-
// apps/
|
|
25
|
-
// api/
|
|
26
|
-
// package.json
|
|
27
|
-
// auth/
|
|
28
|
-
// package.json
|
|
29
|
-
|
|
30
|
-
// Create gkm.config.ts
|
|
31
|
-
const gkmConfig = `
|
|
32
|
-
import { defineWorkspace } from '@geekmidas/cli/config';
|
|
33
|
-
|
|
34
|
-
export default defineWorkspace({
|
|
35
|
-
name: 'test-workspace',
|
|
36
|
-
apps: {
|
|
37
|
-
api: {
|
|
38
|
-
type: 'backend',
|
|
39
|
-
path: 'apps/api',
|
|
40
|
-
port: 3000,
|
|
41
|
-
routes: './src/endpoints/**/*.ts',
|
|
42
|
-
envParser: './src/config/env#envParser',
|
|
43
|
-
logger: './src/config/logger#logger',
|
|
44
|
-
},
|
|
45
|
-
auth: {
|
|
46
|
-
type: 'backend',
|
|
47
|
-
path: 'apps/auth',
|
|
48
|
-
port: 3002,
|
|
49
|
-
envParser: './src/config/env#envParser',
|
|
50
|
-
logger: './src/config/logger#logger',
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
services: {},
|
|
54
|
-
});
|
|
55
|
-
`;
|
|
56
|
-
await writeFile(join(workspaceDir, 'gkm.config.ts'), gkmConfig);
|
|
57
|
-
|
|
58
|
-
// Create apps directories
|
|
59
|
-
await mkdir(join(workspaceDir, 'apps', 'api', 'src'), {
|
|
60
|
-
recursive: true,
|
|
61
|
-
});
|
|
62
|
-
await mkdir(join(workspaceDir, 'apps', 'auth', 'src'), {
|
|
63
|
-
recursive: true,
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
// Create package.json for api app
|
|
67
|
-
await writeFile(
|
|
68
|
-
join(workspaceDir, 'apps', 'api', 'package.json'),
|
|
69
|
-
JSON.stringify({ name: '@test/api', version: '0.0.1' }, null, 2),
|
|
70
|
-
);
|
|
71
|
-
|
|
72
|
-
// Create package.json for auth app
|
|
73
|
-
await writeFile(
|
|
74
|
-
join(workspaceDir, 'apps', 'auth', 'package.json'),
|
|
75
|
-
JSON.stringify({ name: '@test/auth', version: '0.0.1' }, null, 2),
|
|
76
|
-
);
|
|
77
|
-
|
|
78
|
-
// Create entry files
|
|
79
|
-
await writeFile(
|
|
80
|
-
join(workspaceDir, 'apps', 'api', 'src', 'index.ts'),
|
|
81
|
-
'console.log("api");',
|
|
82
|
-
);
|
|
83
|
-
await writeFile(
|
|
84
|
-
join(workspaceDir, 'apps', 'auth', 'src', 'index.ts'),
|
|
85
|
-
'console.log("auth");',
|
|
86
|
-
);
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
it('should inject PORT from workspace config for api app (port 3000)', async () => {
|
|
90
|
-
const apiDir = join(workspaceDir, 'apps', 'api');
|
|
91
|
-
|
|
92
|
-
const result = await prepareEntryCredentials({ cwd: apiDir });
|
|
93
|
-
|
|
94
|
-
expect(result.resolvedPort).toBe(3000);
|
|
95
|
-
expect(result.credentials.PORT).toBe('3000');
|
|
96
|
-
expect(result.appName).toBe('api');
|
|
97
|
-
expect(result.secretsRoot).toBe(workspaceDir);
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
it('should inject PORT from workspace config for auth app (port 3002)', async () => {
|
|
101
|
-
const authDir = join(workspaceDir, 'apps', 'auth');
|
|
102
|
-
|
|
103
|
-
const result = await prepareEntryCredentials({ cwd: authDir });
|
|
104
|
-
|
|
105
|
-
expect(result.resolvedPort).toBe(3002);
|
|
106
|
-
expect(result.credentials.PORT).toBe('3002');
|
|
107
|
-
expect(result.appName).toBe('auth');
|
|
108
|
-
expect(result.secretsRoot).toBe(workspaceDir);
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
it('should use explicit --port over workspace config', async () => {
|
|
112
|
-
const authDir = join(workspaceDir, 'apps', 'auth');
|
|
113
|
-
|
|
114
|
-
const result = await prepareEntryCredentials({
|
|
115
|
-
cwd: authDir,
|
|
116
|
-
explicitPort: 4000,
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
expect(result.resolvedPort).toBe(4000);
|
|
120
|
-
expect(result.credentials.PORT).toBe('4000');
|
|
121
|
-
expect(result.appName).toBe('auth');
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
it('should write credentials to app-specific dev-secrets file at workspace root', async () => {
|
|
125
|
-
const apiDir = join(workspaceDir, 'apps', 'api');
|
|
126
|
-
|
|
127
|
-
const result = await prepareEntryCredentials({ cwd: apiDir });
|
|
128
|
-
|
|
129
|
-
// Verify the file was written at workspace root with app-specific name
|
|
130
|
-
expect(result.secretsJsonPath).toBe(
|
|
131
|
-
join(workspaceDir, '.gkm', 'dev-secrets-api.json'),
|
|
132
|
-
);
|
|
133
|
-
|
|
134
|
-
// Verify file contents
|
|
135
|
-
const content = await readFile(result.secretsJsonPath, 'utf-8');
|
|
136
|
-
const parsed = JSON.parse(content);
|
|
137
|
-
|
|
138
|
-
expect(parsed.PORT).toBe('3000');
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
describe('without workspace config', () => {
|
|
143
|
-
beforeEach(async () => {
|
|
144
|
-
// Create a simple directory without workspace config
|
|
145
|
-
await mkdir(join(workspaceDir, 'src'), { recursive: true });
|
|
146
|
-
await writeFile(
|
|
147
|
-
join(workspaceDir, 'package.json'),
|
|
148
|
-
JSON.stringify({ name: 'standalone-app', version: '0.0.1' }, null, 2),
|
|
149
|
-
);
|
|
150
|
-
await writeFile(
|
|
151
|
-
join(workspaceDir, 'src', 'index.ts'),
|
|
152
|
-
'console.log("standalone");',
|
|
153
|
-
);
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
it('should fallback to port 3000 when no workspace config exists', async () => {
|
|
157
|
-
const result = await prepareEntryCredentials({ cwd: workspaceDir });
|
|
158
|
-
|
|
159
|
-
expect(result.resolvedPort).toBe(3000);
|
|
160
|
-
expect(result.credentials.PORT).toBe('3000');
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
it('should use explicit --port when no workspace config exists', async () => {
|
|
164
|
-
const result = await prepareEntryCredentials({
|
|
165
|
-
cwd: workspaceDir,
|
|
166
|
-
explicitPort: 5000,
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
expect(result.resolvedPort).toBe(5000);
|
|
170
|
-
expect(result.credentials.PORT).toBe('5000');
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
it('should write credentials with app name from package.json when not in workspace', async () => {
|
|
174
|
-
const result = await prepareEntryCredentials({ cwd: workspaceDir });
|
|
175
|
-
|
|
176
|
-
// App name extracted from package.json is used for app-specific filename
|
|
177
|
-
expect(result.secretsJsonPath).toBe(
|
|
178
|
-
join(workspaceDir, '.gkm', 'dev-secrets-standalone-app.json'),
|
|
179
|
-
);
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
describe('with GKM_CONFIG_PATH set (turbo environment)', () => {
|
|
184
|
-
const originalEnv = process.env.GKM_CONFIG_PATH;
|
|
185
|
-
|
|
186
|
-
beforeEach(async () => {
|
|
187
|
-
// Create workspace structure
|
|
188
|
-
const gkmConfig = `
|
|
189
|
-
import { defineWorkspace } from '@geekmidas/cli/config';
|
|
190
|
-
|
|
191
|
-
export default defineWorkspace({
|
|
192
|
-
name: 'test-workspace',
|
|
193
|
-
apps: {
|
|
194
|
-
api: {
|
|
195
|
-
type: 'backend',
|
|
196
|
-
path: 'apps/api',
|
|
197
|
-
port: 3000,
|
|
198
|
-
routes: './src/endpoints/**/*.ts',
|
|
199
|
-
envParser: './src/config/env#envParser',
|
|
200
|
-
logger: './src/config/logger#logger',
|
|
201
|
-
},
|
|
202
|
-
auth: {
|
|
203
|
-
type: 'backend',
|
|
204
|
-
path: 'apps/auth',
|
|
205
|
-
port: 3002,
|
|
206
|
-
envParser: './src/config/env#envParser',
|
|
207
|
-
logger: './src/config/logger#logger',
|
|
208
|
-
},
|
|
209
|
-
},
|
|
210
|
-
services: {},
|
|
211
|
-
});
|
|
212
|
-
`;
|
|
213
|
-
await writeFile(join(workspaceDir, 'gkm.config.ts'), gkmConfig);
|
|
214
|
-
|
|
215
|
-
// Create apps directories
|
|
216
|
-
await mkdir(join(workspaceDir, 'apps', 'api', 'src'), {
|
|
217
|
-
recursive: true,
|
|
218
|
-
});
|
|
219
|
-
await mkdir(join(workspaceDir, 'apps', 'auth', 'src'), {
|
|
220
|
-
recursive: true,
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
// Create package.json files
|
|
224
|
-
await writeFile(
|
|
225
|
-
join(workspaceDir, 'apps', 'api', 'package.json'),
|
|
226
|
-
JSON.stringify({ name: '@test/api', version: '0.0.1' }, null, 2),
|
|
227
|
-
);
|
|
228
|
-
await writeFile(
|
|
229
|
-
join(workspaceDir, 'apps', 'auth', 'package.json'),
|
|
230
|
-
JSON.stringify({ name: '@test/auth', version: '0.0.1' }, null, 2),
|
|
231
|
-
);
|
|
232
|
-
|
|
233
|
-
// Set GKM_CONFIG_PATH like turbo does
|
|
234
|
-
process.env.GKM_CONFIG_PATH = join(workspaceDir, 'gkm.config.ts');
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
afterEach(() => {
|
|
238
|
-
// Restore original env
|
|
239
|
-
if (originalEnv === undefined) {
|
|
240
|
-
delete process.env.GKM_CONFIG_PATH;
|
|
241
|
-
} else {
|
|
242
|
-
process.env.GKM_CONFIG_PATH = originalEnv;
|
|
243
|
-
}
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
it('should read port from workspace config when GKM_CONFIG_PATH is set', async () => {
|
|
247
|
-
const authDir = join(workspaceDir, 'apps', 'auth');
|
|
248
|
-
|
|
249
|
-
const result = await prepareEntryCredentials({ cwd: authDir });
|
|
250
|
-
|
|
251
|
-
expect(result.resolvedPort).toBe(3002);
|
|
252
|
-
expect(result.credentials.PORT).toBe('3002');
|
|
253
|
-
expect(result.appName).toBe('auth');
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
it('should read port 3000 for api when GKM_CONFIG_PATH is set', async () => {
|
|
257
|
-
const apiDir = join(workspaceDir, 'apps', 'api');
|
|
258
|
-
|
|
259
|
-
const result = await prepareEntryCredentials({ cwd: apiDir });
|
|
260
|
-
|
|
261
|
-
expect(result.resolvedPort).toBe(3000);
|
|
262
|
-
expect(result.credentials.PORT).toBe('3000');
|
|
263
|
-
expect(result.appName).toBe('api');
|
|
264
|
-
});
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
describe('with secrets', () => {
|
|
268
|
-
beforeEach(async () => {
|
|
269
|
-
// Create workspace with secrets
|
|
270
|
-
const gkmConfig = `
|
|
271
|
-
import { defineWorkspace } from '@geekmidas/cli/config';
|
|
272
|
-
|
|
273
|
-
export default defineWorkspace({
|
|
274
|
-
name: 'test-workspace',
|
|
275
|
-
apps: {
|
|
276
|
-
api: {
|
|
277
|
-
type: 'backend',
|
|
278
|
-
path: 'apps/api',
|
|
279
|
-
port: 3000,
|
|
280
|
-
routes: './src/endpoints/**/*.ts',
|
|
281
|
-
envParser: './src/config/env#envParser',
|
|
282
|
-
logger: './src/config/logger#logger',
|
|
283
|
-
},
|
|
284
|
-
},
|
|
285
|
-
services: {},
|
|
286
|
-
});
|
|
287
|
-
`;
|
|
288
|
-
await writeFile(join(workspaceDir, 'gkm.config.ts'), gkmConfig);
|
|
289
|
-
|
|
290
|
-
await mkdir(join(workspaceDir, 'apps', 'api', 'src'), {
|
|
291
|
-
recursive: true,
|
|
292
|
-
});
|
|
293
|
-
await writeFile(
|
|
294
|
-
join(workspaceDir, 'apps', 'api', 'package.json'),
|
|
295
|
-
JSON.stringify({ name: '@test/api', version: '0.0.1' }, null, 2),
|
|
296
|
-
);
|
|
297
|
-
await writeFile(
|
|
298
|
-
join(workspaceDir, 'apps', 'api', 'src', 'index.ts'),
|
|
299
|
-
'console.log("api");',
|
|
300
|
-
);
|
|
301
|
-
|
|
302
|
-
// Create unencrypted secrets (legacy format for testing)
|
|
303
|
-
await mkdir(join(workspaceDir, '.gkm', 'secrets'), { recursive: true });
|
|
304
|
-
const secrets = {
|
|
305
|
-
stage: 'development',
|
|
306
|
-
createdAt: new Date().toISOString(),
|
|
307
|
-
updatedAt: new Date().toISOString(),
|
|
308
|
-
services: {},
|
|
309
|
-
urls: {
|
|
310
|
-
DATABASE_URL: 'postgresql://localhost:5432/test',
|
|
311
|
-
},
|
|
312
|
-
custom: {
|
|
313
|
-
API_KEY: 'test-api-key',
|
|
314
|
-
},
|
|
315
|
-
};
|
|
316
|
-
await writeFile(
|
|
317
|
-
join(workspaceDir, '.gkm', 'secrets', 'development.json'),
|
|
318
|
-
JSON.stringify(secrets, null, 2),
|
|
319
|
-
);
|
|
320
|
-
});
|
|
321
|
-
|
|
322
|
-
it('should load secrets and inject PORT', async () => {
|
|
323
|
-
const apiDir = join(workspaceDir, 'apps', 'api');
|
|
324
|
-
|
|
325
|
-
const result = await prepareEntryCredentials({ cwd: apiDir });
|
|
326
|
-
|
|
327
|
-
expect(result.credentials.PORT).toBe('3000');
|
|
328
|
-
expect(result.credentials.DATABASE_URL).toBe(
|
|
329
|
-
'postgresql://localhost:5432/test',
|
|
330
|
-
);
|
|
331
|
-
expect(result.credentials.API_KEY).toBe('test-api-key');
|
|
332
|
-
});
|
|
333
|
-
|
|
334
|
-
it('should write both secrets and PORT to dev-secrets.json', async () => {
|
|
335
|
-
const apiDir = join(workspaceDir, 'apps', 'api');
|
|
336
|
-
|
|
337
|
-
const result = await prepareEntryCredentials({ cwd: apiDir });
|
|
338
|
-
|
|
339
|
-
const content = await readFile(result.secretsJsonPath, 'utf-8');
|
|
340
|
-
const parsed = JSON.parse(content);
|
|
341
|
-
|
|
342
|
-
expect(parsed.PORT).toBe('3000');
|
|
343
|
-
expect(parsed.DATABASE_URL).toBe('postgresql://localhost:5432/test');
|
|
344
|
-
expect(parsed.API_KEY).toBe('test-api-key');
|
|
345
|
-
});
|
|
346
|
-
});
|
|
347
|
-
});
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import { mkdir, readFile, rm } from 'node:fs/promises';
|
|
2
|
-
import { tmpdir } from 'node:os';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
5
|
-
import { createEntryWrapper, findSecretsRoot } from '../index';
|
|
6
|
-
|
|
7
|
-
describe('findSecretsRoot', () => {
|
|
8
|
-
let testDir: string;
|
|
9
|
-
|
|
10
|
-
beforeEach(async () => {
|
|
11
|
-
testDir = join(
|
|
12
|
-
tmpdir(),
|
|
13
|
-
`gkm-test-${Date.now()}-${Math.random().toString(36).slice(2)}`,
|
|
14
|
-
);
|
|
15
|
-
await mkdir(testDir, { recursive: true });
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
afterEach(async () => {
|
|
19
|
-
await rm(testDir, { recursive: true, force: true });
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('should return startDir when no .gkm/secrets exists', () => {
|
|
23
|
-
const result = findSecretsRoot(testDir);
|
|
24
|
-
expect(result).toBe(testDir);
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
it('should find secrets in current directory', async () => {
|
|
28
|
-
await mkdir(join(testDir, '.gkm', 'secrets'), { recursive: true });
|
|
29
|
-
|
|
30
|
-
const result = findSecretsRoot(testDir);
|
|
31
|
-
expect(result).toBe(testDir);
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it('should find secrets in parent directory', async () => {
|
|
35
|
-
const childDir = join(testDir, 'apps', 'auth');
|
|
36
|
-
await mkdir(childDir, { recursive: true });
|
|
37
|
-
await mkdir(join(testDir, '.gkm', 'secrets'), { recursive: true });
|
|
38
|
-
|
|
39
|
-
const result = findSecretsRoot(childDir);
|
|
40
|
-
expect(result).toBe(testDir);
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('should find secrets in grandparent directory', async () => {
|
|
44
|
-
const grandchildDir = join(testDir, 'apps', 'auth', 'src');
|
|
45
|
-
await mkdir(grandchildDir, { recursive: true });
|
|
46
|
-
await mkdir(join(testDir, '.gkm', 'secrets'), { recursive: true });
|
|
47
|
-
|
|
48
|
-
const result = findSecretsRoot(grandchildDir);
|
|
49
|
-
expect(result).toBe(testDir);
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
it('should prefer closer secrets directory', async () => {
|
|
53
|
-
// Create secrets in both parent and child
|
|
54
|
-
const childDir = join(testDir, 'apps', 'auth');
|
|
55
|
-
await mkdir(join(testDir, '.gkm', 'secrets'), { recursive: true });
|
|
56
|
-
await mkdir(join(childDir, '.gkm', 'secrets'), { recursive: true });
|
|
57
|
-
|
|
58
|
-
const result = findSecretsRoot(childDir);
|
|
59
|
-
expect(result).toBe(childDir);
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
describe('createEntryWrapper', () => {
|
|
64
|
-
let testDir: string;
|
|
65
|
-
|
|
66
|
-
beforeEach(async () => {
|
|
67
|
-
testDir = join(
|
|
68
|
-
tmpdir(),
|
|
69
|
-
`gkm-test-${Date.now()}-${Math.random().toString(36).slice(2)}`,
|
|
70
|
-
);
|
|
71
|
-
await mkdir(testDir, { recursive: true });
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
afterEach(async () => {
|
|
75
|
-
await rm(testDir, { recursive: true, force: true });
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
it('should create wrapper without secrets injection', async () => {
|
|
79
|
-
const wrapperPath = join(testDir, 'wrapper.ts');
|
|
80
|
-
const entryPath = '/path/to/entry.ts';
|
|
81
|
-
|
|
82
|
-
await createEntryWrapper(wrapperPath, entryPath, undefined);
|
|
83
|
-
|
|
84
|
-
const content = await readFile(wrapperPath, 'utf-8');
|
|
85
|
-
|
|
86
|
-
expect(content).toContain("await import('/path/to/entry.ts')");
|
|
87
|
-
expect(content).not.toContain('Credentials');
|
|
88
|
-
expect(content).toContain("Entry wrapper generated by 'gkm dev --entry'");
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
it('should create wrapper with secrets injection', async () => {
|
|
92
|
-
const wrapperPath = join(testDir, 'wrapper.ts');
|
|
93
|
-
const entryPath = '/path/to/entry.ts';
|
|
94
|
-
const secretsPath = '/path/to/secrets.json';
|
|
95
|
-
|
|
96
|
-
await createEntryWrapper(wrapperPath, entryPath, secretsPath);
|
|
97
|
-
|
|
98
|
-
const content = await readFile(wrapperPath, 'utf-8');
|
|
99
|
-
|
|
100
|
-
expect(content).toContain('globalThis.__gkm_credentials__');
|
|
101
|
-
expect(content).toContain(secretsPath);
|
|
102
|
-
expect(content).toContain('Object.assign(process.env');
|
|
103
|
-
expect(content).toContain("await import('/path/to/entry.ts')");
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
it('should inject secrets before entry import', async () => {
|
|
107
|
-
const wrapperPath = join(testDir, 'wrapper.ts');
|
|
108
|
-
const entryPath = '/path/to/entry.ts';
|
|
109
|
-
const secretsPath = '/path/to/secrets.json';
|
|
110
|
-
|
|
111
|
-
await createEntryWrapper(wrapperPath, entryPath, secretsPath);
|
|
112
|
-
|
|
113
|
-
const content = await readFile(wrapperPath, 'utf-8');
|
|
114
|
-
|
|
115
|
-
const credentialsIndex = content.indexOf('__gkm_credentials__');
|
|
116
|
-
const importIndex = content.indexOf("await import('/path/to/entry.ts')");
|
|
117
|
-
|
|
118
|
-
expect(credentialsIndex).toBeGreaterThan(-1);
|
|
119
|
-
expect(importIndex).toBeGreaterThan(-1);
|
|
120
|
-
expect(credentialsIndex).toBeLessThan(importIndex);
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
it('should include shebang line', async () => {
|
|
124
|
-
const wrapperPath = join(testDir, 'wrapper.ts');
|
|
125
|
-
const entryPath = '/path/to/entry.ts';
|
|
126
|
-
|
|
127
|
-
await createEntryWrapper(wrapperPath, entryPath, undefined);
|
|
128
|
-
|
|
129
|
-
const content = await readFile(wrapperPath, 'utf-8');
|
|
130
|
-
|
|
131
|
-
expect(content.startsWith('#!/usr/bin/env node')).toBe(true);
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
it('should handle Windows-style paths', async () => {
|
|
135
|
-
const wrapperPath = join(testDir, 'wrapper.ts');
|
|
136
|
-
const entryPath = 'C:\\Users\\test\\project\\src\\index.ts';
|
|
137
|
-
|
|
138
|
-
await createEntryWrapper(wrapperPath, entryPath, undefined);
|
|
139
|
-
|
|
140
|
-
const content = await readFile(wrapperPath, 'utf-8');
|
|
141
|
-
|
|
142
|
-
expect(content).toContain(entryPath);
|
|
143
|
-
});
|
|
144
|
-
});
|