@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/types.ts
DELETED
|
@@ -1,363 +0,0 @@
|
|
|
1
|
-
export type MainProvider = 'aws' | 'server';
|
|
2
|
-
export type LegacyProvider =
|
|
3
|
-
| 'server'
|
|
4
|
-
| 'aws-apigatewayv1'
|
|
5
|
-
| 'aws-apigatewayv2'
|
|
6
|
-
| 'aws-lambda';
|
|
7
|
-
|
|
8
|
-
export interface PartitionedRoutes {
|
|
9
|
-
paths: string | string[];
|
|
10
|
-
partition: (filepath: string) => string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export type Routes = string | string[] | PartitionedRoutes;
|
|
14
|
-
|
|
15
|
-
export function isPartitionedRoutes(
|
|
16
|
-
routes: Routes | undefined,
|
|
17
|
-
): routes is PartitionedRoutes {
|
|
18
|
-
return (
|
|
19
|
-
typeof routes === 'object' &&
|
|
20
|
-
routes !== null &&
|
|
21
|
-
!Array.isArray(routes) &&
|
|
22
|
-
'paths' in routes
|
|
23
|
-
);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export interface ProviderConfig {
|
|
27
|
-
enabled?: boolean;
|
|
28
|
-
outputDir?: string;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export interface AWSApiGatewayConfig extends ProviderConfig {
|
|
32
|
-
// Additional AWS API Gateway specific options
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export interface AWSLambdaConfig extends ProviderConfig {
|
|
36
|
-
// Additional AWS Lambda specific options
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export interface ProductionConfig {
|
|
40
|
-
/** Enable production mode (default: false) */
|
|
41
|
-
enabled?: boolean;
|
|
42
|
-
/** Bundle server into single file (default: true) */
|
|
43
|
-
bundle?: boolean;
|
|
44
|
-
/** Minify bundled output (default: true) */
|
|
45
|
-
minify?: boolean;
|
|
46
|
-
/** Health check endpoint path (default: '/health') */
|
|
47
|
-
healthCheck?: string;
|
|
48
|
-
/** Enable graceful shutdown handling (default: true) */
|
|
49
|
-
gracefulShutdown?: boolean;
|
|
50
|
-
/** Packages to exclude from bundling (default: []) */
|
|
51
|
-
external?: string[];
|
|
52
|
-
/** Include subscribers in production build (default: 'exclude' for serverless) */
|
|
53
|
-
subscribers?: 'include' | 'exclude';
|
|
54
|
-
/** Include OpenAPI spec in production (default: false) */
|
|
55
|
-
openapi?: boolean;
|
|
56
|
-
/**
|
|
57
|
-
* Enable build-time optimized handler generation (default: true)
|
|
58
|
-
* Generates specialized handlers based on endpoint tier:
|
|
59
|
-
* - minimal: Near-raw-Hono performance for simple endpoints
|
|
60
|
-
* - standard: Optimized handlers for auth/services
|
|
61
|
-
* - full: Uses HonoEndpoint.addRoutes for complex endpoints
|
|
62
|
-
*/
|
|
63
|
-
optimizedHandlers?: boolean;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/** Service-specific configuration for docker-compose */
|
|
67
|
-
export interface ServiceConfig {
|
|
68
|
-
/**
|
|
69
|
-
* Full Docker image reference (e.g., 'postgis/postgis:16-3.4-alpine').
|
|
70
|
-
* When specified, overrides the default image entirely.
|
|
71
|
-
*/
|
|
72
|
-
image?: string;
|
|
73
|
-
/**
|
|
74
|
-
* Docker image version/tag (e.g., '15-alpine' for postgres).
|
|
75
|
-
* Only used when `image` is not specified.
|
|
76
|
-
*/
|
|
77
|
-
version?: string;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Supported event backend types.
|
|
82
|
-
*
|
|
83
|
-
* - `pgboss`: Reuses PostgreSQL with a dedicated user/schema. Auto-enables db service.
|
|
84
|
-
* - `sns`: Adds LocalStack container with SNS+SQS services.
|
|
85
|
-
* - `rabbitmq`: Adds RabbitMQ container.
|
|
86
|
-
*
|
|
87
|
-
* All backends generate EVENT_PUBLISHER_CONNECTION_STRING and EVENT_SUBSCRIBER_CONNECTION_STRING.
|
|
88
|
-
*/
|
|
89
|
-
export type EventsBackend = 'pgboss' | 'sns' | 'rabbitmq';
|
|
90
|
-
|
|
91
|
-
/** Supported docker-compose service names */
|
|
92
|
-
export type ComposeServiceName =
|
|
93
|
-
| 'postgres'
|
|
94
|
-
| 'redis'
|
|
95
|
-
| 'rabbitmq'
|
|
96
|
-
| 'minio'
|
|
97
|
-
| 'mailpit'
|
|
98
|
-
| 'localstack';
|
|
99
|
-
|
|
100
|
-
/** Services configuration - can be boolean (use defaults) or object with version */
|
|
101
|
-
export type ComposeServicesConfig = {
|
|
102
|
-
[K in ComposeServiceName]?: boolean | ServiceConfig;
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
export interface DockerConfig {
|
|
106
|
-
/** Container registry URL (e.g., 'ghcr.io/myorg') */
|
|
107
|
-
registry?: string;
|
|
108
|
-
/** Docker image name (default: derived from package.json name) */
|
|
109
|
-
imageName?: string;
|
|
110
|
-
/** Base Docker image (default: 'node:22-alpine') */
|
|
111
|
-
baseImage?: string;
|
|
112
|
-
/** Container port (default: 3000) */
|
|
113
|
-
port?: number;
|
|
114
|
-
/** docker-compose services to include */
|
|
115
|
-
compose?: {
|
|
116
|
-
/**
|
|
117
|
-
* Services to include in docker-compose.
|
|
118
|
-
* Can be an object with service configs or an array of service names (legacy).
|
|
119
|
-
*
|
|
120
|
-
* @example Object format (recommended)
|
|
121
|
-
* services: {
|
|
122
|
-
* postgres: { version: '15-alpine' },
|
|
123
|
-
* redis: true, // use default version
|
|
124
|
-
* }
|
|
125
|
-
*
|
|
126
|
-
* @example Array format (legacy, uses default versions)
|
|
127
|
-
* services: ['postgres', 'redis']
|
|
128
|
-
*/
|
|
129
|
-
services?: ComposeServicesConfig | ComposeServiceName[];
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
export interface ServerConfig extends ProviderConfig {
|
|
134
|
-
enableOpenApi?: boolean;
|
|
135
|
-
port?: number;
|
|
136
|
-
/** Production build configuration */
|
|
137
|
-
production?: ProductionConfig;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
export type Runtime = 'node' | 'bun';
|
|
141
|
-
|
|
142
|
-
export interface TelescopeConfig {
|
|
143
|
-
/** Enable/disable telescope (default: true in development) */
|
|
144
|
-
enabled?: boolean;
|
|
145
|
-
/** Port for telescope to use (defaults to server port) */
|
|
146
|
-
port?: number;
|
|
147
|
-
/** Path prefix for telescope UI (default: /__telescope) */
|
|
148
|
-
path?: string;
|
|
149
|
-
/** Ignore patterns for telescope (e.g., ['/health', '/metrics']) */
|
|
150
|
-
ignore?: string[];
|
|
151
|
-
/** Record request/response bodies (default: true) */
|
|
152
|
-
recordBody?: boolean;
|
|
153
|
-
/** Maximum entries to keep in memory (default: 1000) */
|
|
154
|
-
maxEntries?: number;
|
|
155
|
-
/** Enable WebSocket for real-time updates (default: true, requires @hono/node-ws for Node.js) */
|
|
156
|
-
websocket?: boolean;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
export interface StudioConfig {
|
|
160
|
-
/** Enable/disable studio (default: true in development) */
|
|
161
|
-
enabled?: boolean;
|
|
162
|
-
/** Path prefix for studio UI (default: /__studio) */
|
|
163
|
-
path?: string;
|
|
164
|
-
/** Schema to introspect (default: 'public') */
|
|
165
|
-
schema?: string;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
export interface OpenApiConfig {
|
|
169
|
-
/** Enable OpenAPI generation (default: true) */
|
|
170
|
-
enabled?: boolean;
|
|
171
|
-
/** API title */
|
|
172
|
-
title?: string;
|
|
173
|
-
/** API version */
|
|
174
|
-
version?: string;
|
|
175
|
-
/** API description */
|
|
176
|
-
description?: string;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
export interface HooksConfig {
|
|
180
|
-
/**
|
|
181
|
-
* Path to a module exporting server lifecycle hooks.
|
|
182
|
-
* The module should export `beforeSetup` and/or `afterSetup` functions.
|
|
183
|
-
*
|
|
184
|
-
* @example
|
|
185
|
-
* ```typescript
|
|
186
|
-
* // src/config/hooks.ts
|
|
187
|
-
* import type { Hono } from 'hono';
|
|
188
|
-
* import type { Logger } from '@geekmidas/logger';
|
|
189
|
-
* import type { EnvironmentParser } from '@geekmidas/envkit';
|
|
190
|
-
*
|
|
191
|
-
* // Called BEFORE gkm endpoints are registered
|
|
192
|
-
* export function beforeSetup(app: Hono, ctx: { envParser: EnvironmentParser; logger: Logger }) {
|
|
193
|
-
* app.use('*', cors());
|
|
194
|
-
* app.get('/custom/health', (c) => c.json({ status: 'ok' }));
|
|
195
|
-
* }
|
|
196
|
-
*
|
|
197
|
-
* // Called AFTER gkm endpoints are registered
|
|
198
|
-
* export function afterSetup(app: Hono, ctx: { envParser: EnvironmentParser; logger: Logger }) {
|
|
199
|
-
* app.notFound((c) => c.json({ error: 'Not found' }, 404));
|
|
200
|
-
* app.onError((err, c) => c.json({ error: err.message }, 500));
|
|
201
|
-
* }
|
|
202
|
-
* ```
|
|
203
|
-
*/
|
|
204
|
-
server?: string;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
/** Dokploy deployment configuration */
|
|
208
|
-
export interface DokployProviderConfig {
|
|
209
|
-
/** Dokploy API endpoint (e.g., 'https://dokploy.example.com') */
|
|
210
|
-
endpoint: string;
|
|
211
|
-
/** Project ID in Dokploy */
|
|
212
|
-
projectId: string;
|
|
213
|
-
/** Application ID in Dokploy */
|
|
214
|
-
applicationId: string;
|
|
215
|
-
/** Container registry (overrides docker.registry if set) */
|
|
216
|
-
registry?: string;
|
|
217
|
-
/** Registry ID in Dokploy (recommended for private registries) */
|
|
218
|
-
registryId?: string;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
export interface ProvidersConfig {
|
|
222
|
-
aws?: {
|
|
223
|
-
apiGateway?: {
|
|
224
|
-
v1?: boolean | AWSApiGatewayConfig;
|
|
225
|
-
v2?: boolean | AWSApiGatewayConfig;
|
|
226
|
-
};
|
|
227
|
-
lambda?: {
|
|
228
|
-
functions?: boolean | AWSLambdaConfig;
|
|
229
|
-
crons?: boolean | AWSLambdaConfig;
|
|
230
|
-
};
|
|
231
|
-
};
|
|
232
|
-
server?: boolean | ServerConfig;
|
|
233
|
-
/** Dokploy deployment configuration */
|
|
234
|
-
dokploy?: boolean | DokployProviderConfig;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
export interface GkmConfig {
|
|
238
|
-
routes: Routes;
|
|
239
|
-
functions?: Routes;
|
|
240
|
-
crons?: Routes;
|
|
241
|
-
subscribers?: Routes;
|
|
242
|
-
queues?: Routes;
|
|
243
|
-
topics?: Routes;
|
|
244
|
-
envParser: string;
|
|
245
|
-
logger: string;
|
|
246
|
-
providers?: ProvidersConfig;
|
|
247
|
-
/**
|
|
248
|
-
* Server lifecycle hooks for customizing the Hono app.
|
|
249
|
-
* Allows adding custom routes, middleware, error handlers, etc.
|
|
250
|
-
*
|
|
251
|
-
* @example
|
|
252
|
-
* hooks: {
|
|
253
|
-
* server: './src/config/hooks'
|
|
254
|
-
* }
|
|
255
|
-
*/
|
|
256
|
-
hooks?: HooksConfig;
|
|
257
|
-
/**
|
|
258
|
-
* Telescope configuration for debugging/monitoring.
|
|
259
|
-
* Can be:
|
|
260
|
-
* - A string path to a module that exports a Telescope instance (recommended)
|
|
261
|
-
* - A boolean to enable/disable with defaults
|
|
262
|
-
* - A TelescopeConfig object for inline configuration
|
|
263
|
-
*/
|
|
264
|
-
telescope?: string | boolean | TelescopeConfig;
|
|
265
|
-
/**
|
|
266
|
-
* Studio configuration for database browsing.
|
|
267
|
-
* Can be:
|
|
268
|
-
* - A string path to a module that exports a Studio instance (recommended)
|
|
269
|
-
* - A boolean to enable/disable with defaults
|
|
270
|
-
* - A StudioConfig object for inline configuration
|
|
271
|
-
*
|
|
272
|
-
* Requires a database connection configured via services.
|
|
273
|
-
*/
|
|
274
|
-
studio?: string | boolean | StudioConfig;
|
|
275
|
-
/**
|
|
276
|
-
* OpenAPI generation configuration.
|
|
277
|
-
* Can be:
|
|
278
|
-
* - A boolean to enable/disable with defaults (output: ./src/api/openapi.ts)
|
|
279
|
-
* - An OpenApiConfig object for customization
|
|
280
|
-
*
|
|
281
|
-
* When enabled, OpenAPI spec is generated on startup and regenerated on route changes.
|
|
282
|
-
*
|
|
283
|
-
* @example
|
|
284
|
-
* openapi: true
|
|
285
|
-
*
|
|
286
|
-
* @example
|
|
287
|
-
* openapi: {
|
|
288
|
-
* output: './src/api/openapi.ts',
|
|
289
|
-
* title: 'My API',
|
|
290
|
-
* version: '1.0.0',
|
|
291
|
-
* }
|
|
292
|
-
*/
|
|
293
|
-
openapi?: boolean | OpenApiConfig;
|
|
294
|
-
/** Runtime to use for dev server (default: 'node') */
|
|
295
|
-
runtime?: Runtime;
|
|
296
|
-
/**
|
|
297
|
-
* Environment file(s) to load for development.
|
|
298
|
-
* Can be:
|
|
299
|
-
* - A string path to a single env file (e.g., '.env.local')
|
|
300
|
-
* - An array of paths to load in order (later files override earlier)
|
|
301
|
-
* - Defaults to '.env' if not specified
|
|
302
|
-
*
|
|
303
|
-
* @example
|
|
304
|
-
* env: '.env.local'
|
|
305
|
-
*
|
|
306
|
-
* @example
|
|
307
|
-
* env: ['.env', '.env.local']
|
|
308
|
-
*/
|
|
309
|
-
env?: string | string[];
|
|
310
|
-
/**
|
|
311
|
-
* Docker deployment configuration.
|
|
312
|
-
* Used by `gkm docker` and `gkm prepack` commands.
|
|
313
|
-
*
|
|
314
|
-
* @example
|
|
315
|
-
* docker: {
|
|
316
|
-
* registry: 'ghcr.io/myorg',
|
|
317
|
-
* imageName: 'my-api',
|
|
318
|
-
* compose: {
|
|
319
|
-
* services: ['postgres', 'redis']
|
|
320
|
-
* }
|
|
321
|
-
* }
|
|
322
|
-
*/
|
|
323
|
-
docker?: DockerConfig;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
export interface BuildOptions {
|
|
327
|
-
provider?: MainProvider;
|
|
328
|
-
// Legacy support - will be deprecated
|
|
329
|
-
providers?: LegacyProvider[];
|
|
330
|
-
enableOpenApi?: boolean;
|
|
331
|
-
/** Build for production (no dev tools, bundled output) */
|
|
332
|
-
production?: boolean;
|
|
333
|
-
/** Skip bundling step in production build */
|
|
334
|
-
skipBundle?: boolean;
|
|
335
|
-
/** Stage for secrets injection (e.g., 'production', 'staging') */
|
|
336
|
-
stage?: string;
|
|
337
|
-
/**
|
|
338
|
-
* When true, optional environment variables (those with `.optional()` or
|
|
339
|
-
* `.default()` in the envParser) are suffixed with `?` within each
|
|
340
|
-
* construct's `environment` array in the manifest (e.g. `PORT?`).
|
|
341
|
-
* Defaults to false.
|
|
342
|
-
*/
|
|
343
|
-
markOptional?: boolean;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
/** Result from build command when secrets are injected */
|
|
347
|
-
export interface BuildResult {
|
|
348
|
-
/** Ephemeral master key for deployment (only if stage was provided) */
|
|
349
|
-
masterKey?: string;
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
// The deployment manifest types are a shared, dependency-free data contract
|
|
353
|
-
// in `@geekmidas/manifest`, re-exported here for back-compat with existing
|
|
354
|
-
// `@geekmidas/cli` imports.
|
|
355
|
-
export type {
|
|
356
|
-
CronInfo,
|
|
357
|
-
FunctionInfo,
|
|
358
|
-
Manifest,
|
|
359
|
-
QueueInfo,
|
|
360
|
-
RouteInfo,
|
|
361
|
-
SubscriberInfo,
|
|
362
|
-
TopicInfo,
|
|
363
|
-
} from '@geekmidas/manifest';
|
|
@@ -1,354 +0,0 @@
|
|
|
1
|
-
import { execSync } from 'node:child_process';
|
|
2
|
-
import { writeFileSync } from 'node:fs';
|
|
3
|
-
import { mkdir, rm } from 'node:fs/promises';
|
|
4
|
-
import { tmpdir } from 'node:os';
|
|
5
|
-
import { join } from 'node:path';
|
|
6
|
-
import { HttpResponse, http } from 'msw';
|
|
7
|
-
import { setupServer } from 'msw/node';
|
|
8
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
9
|
-
import { upgradeCommand } from '../index';
|
|
10
|
-
|
|
11
|
-
vi.mock('node:child_process', () => ({
|
|
12
|
-
execSync: vi.fn(),
|
|
13
|
-
}));
|
|
14
|
-
|
|
15
|
-
const NPM_REGISTRY = 'https://registry.npmjs.org';
|
|
16
|
-
|
|
17
|
-
const server = setupServer();
|
|
18
|
-
|
|
19
|
-
function writePackageJson(dir: string, content: Record<string, unknown>) {
|
|
20
|
-
writeFileSync(join(dir, 'package.json'), JSON.stringify(content, null, 2));
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
describe('upgradeCommand', () => {
|
|
24
|
-
let tempDir: string;
|
|
25
|
-
let originalCwd: string;
|
|
26
|
-
|
|
27
|
-
beforeEach(async () => {
|
|
28
|
-
tempDir = join(tmpdir(), `gkm-upgrade-test-${Date.now()}`);
|
|
29
|
-
await mkdir(tempDir, { recursive: true });
|
|
30
|
-
originalCwd = process.cwd();
|
|
31
|
-
process.chdir(tempDir);
|
|
32
|
-
server.listen({ onUnhandledRequest: 'bypass' });
|
|
33
|
-
vi.mocked(execSync).mockReset();
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
afterEach(async () => {
|
|
37
|
-
process.chdir(originalCwd);
|
|
38
|
-
server.resetHandlers();
|
|
39
|
-
server.close();
|
|
40
|
-
await rm(tempDir, { recursive: true, force: true });
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('should report no packages found when none exist', async () => {
|
|
44
|
-
writePackageJson(tempDir, {
|
|
45
|
-
name: 'test-project',
|
|
46
|
-
dependencies: { lodash: '^4.0.0' },
|
|
47
|
-
});
|
|
48
|
-
// Create a lockfile so detectPackageManager finds a root
|
|
49
|
-
writeFileSync(join(tempDir, 'package-lock.json'), '{}');
|
|
50
|
-
|
|
51
|
-
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
|
52
|
-
|
|
53
|
-
await upgradeCommand();
|
|
54
|
-
|
|
55
|
-
const output = logSpy.mock.calls.flat().join('\n');
|
|
56
|
-
expect(output).toContain('No @geekmidas packages found');
|
|
57
|
-
|
|
58
|
-
logSpy.mockRestore();
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
it('should detect workspace refs and mark them as workspace status', async () => {
|
|
62
|
-
writeFileSync(join(tempDir, 'package-lock.json'), '{}');
|
|
63
|
-
writePackageJson(tempDir, {
|
|
64
|
-
name: 'test-monorepo',
|
|
65
|
-
workspaces: ['packages/*'],
|
|
66
|
-
dependencies: {
|
|
67
|
-
'@geekmidas/constructs': 'workspace:*',
|
|
68
|
-
},
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
const pkgDir = join(tempDir, 'packages', 'api');
|
|
72
|
-
await mkdir(pkgDir, { recursive: true });
|
|
73
|
-
writePackageJson(pkgDir, {
|
|
74
|
-
name: '@test/api',
|
|
75
|
-
dependencies: {
|
|
76
|
-
'@geekmidas/auth': 'workspace:~',
|
|
77
|
-
},
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
server.use(
|
|
81
|
-
http.get(`${NPM_REGISTRY}/@geekmidas/constructs/latest`, () => {
|
|
82
|
-
return HttpResponse.json({ version: '1.1.1' });
|
|
83
|
-
}),
|
|
84
|
-
http.get(`${NPM_REGISTRY}/@geekmidas/auth/latest`, () => {
|
|
85
|
-
return HttpResponse.json({ version: '1.0.0' });
|
|
86
|
-
}),
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
|
90
|
-
|
|
91
|
-
await upgradeCommand();
|
|
92
|
-
|
|
93
|
-
const output = logSpy.mock.calls.flat().join('\n');
|
|
94
|
-
expect(output).toContain('workspace');
|
|
95
|
-
expect(output).toContain('All @geekmidas packages are up to date');
|
|
96
|
-
|
|
97
|
-
logSpy.mockRestore();
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
it('should identify packages that need upgrade', async () => {
|
|
101
|
-
writeFileSync(join(tempDir, 'package-lock.json'), '{}');
|
|
102
|
-
writePackageJson(tempDir, {
|
|
103
|
-
name: 'test-project',
|
|
104
|
-
dependencies: {
|
|
105
|
-
'@geekmidas/constructs': '^1.0.0',
|
|
106
|
-
'@geekmidas/auth': '~1.0.0',
|
|
107
|
-
},
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
server.use(
|
|
111
|
-
http.get(`${NPM_REGISTRY}/@geekmidas/constructs/latest`, () => {
|
|
112
|
-
return HttpResponse.json({ version: '1.2.0' });
|
|
113
|
-
}),
|
|
114
|
-
http.get(`${NPM_REGISTRY}/@geekmidas/auth/latest`, () => {
|
|
115
|
-
return HttpResponse.json({ version: '1.1.0' });
|
|
116
|
-
}),
|
|
117
|
-
);
|
|
118
|
-
|
|
119
|
-
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
|
120
|
-
|
|
121
|
-
await upgradeCommand({ dryRun: true });
|
|
122
|
-
|
|
123
|
-
const output = logSpy.mock.calls.flat().join('\n');
|
|
124
|
-
expect(output).toContain('⬆ upgrade');
|
|
125
|
-
expect(output).toContain('2 package(s) can be upgraded');
|
|
126
|
-
expect(output).toContain('--dry-run: No changes made');
|
|
127
|
-
expect(output).toContain('npm update');
|
|
128
|
-
|
|
129
|
-
logSpy.mockRestore();
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
it('should report up-to-date when versions match', async () => {
|
|
133
|
-
writeFileSync(join(tempDir, 'package-lock.json'), '{}');
|
|
134
|
-
writePackageJson(tempDir, {
|
|
135
|
-
name: 'test-project',
|
|
136
|
-
dependencies: {
|
|
137
|
-
'@geekmidas/errors': '1.0.0',
|
|
138
|
-
},
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
server.use(
|
|
142
|
-
http.get(`${NPM_REGISTRY}/@geekmidas/errors/latest`, () => {
|
|
143
|
-
return HttpResponse.json({ version: '1.0.0' });
|
|
144
|
-
}),
|
|
145
|
-
);
|
|
146
|
-
|
|
147
|
-
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
|
148
|
-
|
|
149
|
-
await upgradeCommand();
|
|
150
|
-
|
|
151
|
-
const output = logSpy.mock.calls.flat().join('\n');
|
|
152
|
-
expect(output).toContain('✓ up-to-date');
|
|
153
|
-
expect(output).toContain('All @geekmidas packages are up to date');
|
|
154
|
-
|
|
155
|
-
logSpy.mockRestore();
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
it('should execute upgrade command when not dry-run', async () => {
|
|
159
|
-
writeFileSync(join(tempDir, 'package-lock.json'), '{}');
|
|
160
|
-
writePackageJson(tempDir, {
|
|
161
|
-
name: 'test-project',
|
|
162
|
-
dependencies: {
|
|
163
|
-
'@geekmidas/errors': '^1.0.0',
|
|
164
|
-
},
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
server.use(
|
|
168
|
-
http.get(`${NPM_REGISTRY}/@geekmidas/errors/latest`, () => {
|
|
169
|
-
return HttpResponse.json({ version: '2.0.0' });
|
|
170
|
-
}),
|
|
171
|
-
);
|
|
172
|
-
|
|
173
|
-
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
|
174
|
-
|
|
175
|
-
await upgradeCommand();
|
|
176
|
-
|
|
177
|
-
expect(execSync).toHaveBeenCalledWith(
|
|
178
|
-
expect.stringContaining('npm update @geekmidas/errors'),
|
|
179
|
-
expect.objectContaining({ stdio: 'inherit' }),
|
|
180
|
-
);
|
|
181
|
-
|
|
182
|
-
logSpy.mockRestore();
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
it('should use pnpm update -r when pnpm is detected', async () => {
|
|
186
|
-
writeFileSync(join(tempDir, 'pnpm-lock.yaml'), '');
|
|
187
|
-
writePackageJson(tempDir, {
|
|
188
|
-
name: 'test-project',
|
|
189
|
-
dependencies: {
|
|
190
|
-
'@geekmidas/logger': '^1.0.0',
|
|
191
|
-
},
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
server.use(
|
|
195
|
-
http.get(`${NPM_REGISTRY}/@geekmidas/logger/latest`, () => {
|
|
196
|
-
return HttpResponse.json({ version: '2.0.0' });
|
|
197
|
-
}),
|
|
198
|
-
);
|
|
199
|
-
|
|
200
|
-
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
|
201
|
-
|
|
202
|
-
await upgradeCommand();
|
|
203
|
-
|
|
204
|
-
expect(execSync).toHaveBeenCalledWith(
|
|
205
|
-
expect.stringContaining('pnpm update -r @geekmidas/logger --latest'),
|
|
206
|
-
expect.anything(),
|
|
207
|
-
);
|
|
208
|
-
|
|
209
|
-
logSpy.mockRestore();
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
it('should scan all workspace packages in pnpm workspace', async () => {
|
|
213
|
-
writeFileSync(join(tempDir, 'pnpm-lock.yaml'), '');
|
|
214
|
-
writeFileSync(
|
|
215
|
-
join(tempDir, 'pnpm-workspace.yaml'),
|
|
216
|
-
'packages:\n - "packages/*"\n - "apps/*"\n',
|
|
217
|
-
);
|
|
218
|
-
writePackageJson(tempDir, {
|
|
219
|
-
name: 'test-monorepo',
|
|
220
|
-
devDependencies: {
|
|
221
|
-
'@geekmidas/cli': '^1.0.0',
|
|
222
|
-
},
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
const apiDir = join(tempDir, 'apps', 'api');
|
|
226
|
-
await mkdir(apiDir, { recursive: true });
|
|
227
|
-
writePackageJson(apiDir, {
|
|
228
|
-
name: '@test/api',
|
|
229
|
-
dependencies: {
|
|
230
|
-
'@geekmidas/constructs': '^1.0.0',
|
|
231
|
-
},
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
const libDir = join(tempDir, 'packages', 'shared');
|
|
235
|
-
await mkdir(libDir, { recursive: true });
|
|
236
|
-
writePackageJson(libDir, {
|
|
237
|
-
name: '@test/shared',
|
|
238
|
-
dependencies: {
|
|
239
|
-
'@geekmidas/errors': '^1.0.0',
|
|
240
|
-
},
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
server.use(
|
|
244
|
-
http.get(`${NPM_REGISTRY}/@geekmidas/cli/latest`, () => {
|
|
245
|
-
return HttpResponse.json({ version: '2.0.0' });
|
|
246
|
-
}),
|
|
247
|
-
http.get(`${NPM_REGISTRY}/@geekmidas/constructs/latest`, () => {
|
|
248
|
-
return HttpResponse.json({ version: '2.0.0' });
|
|
249
|
-
}),
|
|
250
|
-
http.get(`${NPM_REGISTRY}/@geekmidas/errors/latest`, () => {
|
|
251
|
-
return HttpResponse.json({ version: '2.0.0' });
|
|
252
|
-
}),
|
|
253
|
-
);
|
|
254
|
-
|
|
255
|
-
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
|
256
|
-
|
|
257
|
-
await upgradeCommand({ dryRun: true });
|
|
258
|
-
|
|
259
|
-
const output = logSpy.mock.calls.flat().join('\n');
|
|
260
|
-
expect(output).toContain('Found 3 package(s) in workspace');
|
|
261
|
-
expect(output).toContain('3 package(s) can be upgraded');
|
|
262
|
-
|
|
263
|
-
logSpy.mockRestore();
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
it('should handle npm registry errors gracefully', async () => {
|
|
267
|
-
writeFileSync(join(tempDir, 'package-lock.json'), '{}');
|
|
268
|
-
writePackageJson(tempDir, {
|
|
269
|
-
name: 'test-project',
|
|
270
|
-
dependencies: {
|
|
271
|
-
'@geekmidas/nonexistent': '^1.0.0',
|
|
272
|
-
},
|
|
273
|
-
});
|
|
274
|
-
|
|
275
|
-
server.use(
|
|
276
|
-
http.get(`${NPM_REGISTRY}/@geekmidas/nonexistent/latest`, () => {
|
|
277
|
-
return new HttpResponse(null, { status: 404 });
|
|
278
|
-
}),
|
|
279
|
-
);
|
|
280
|
-
|
|
281
|
-
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
|
282
|
-
|
|
283
|
-
await upgradeCommand();
|
|
284
|
-
|
|
285
|
-
const output = logSpy.mock.calls.flat().join('\n');
|
|
286
|
-
expect(output).toContain('unknown');
|
|
287
|
-
|
|
288
|
-
logSpy.mockRestore();
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
it('should throw when execSync fails', async () => {
|
|
292
|
-
writeFileSync(join(tempDir, 'package-lock.json'), '{}');
|
|
293
|
-
writePackageJson(tempDir, {
|
|
294
|
-
name: 'test-project',
|
|
295
|
-
dependencies: {
|
|
296
|
-
'@geekmidas/errors': '^1.0.0',
|
|
297
|
-
},
|
|
298
|
-
});
|
|
299
|
-
|
|
300
|
-
server.use(
|
|
301
|
-
http.get(`${NPM_REGISTRY}/@geekmidas/errors/latest`, () => {
|
|
302
|
-
return HttpResponse.json({ version: '2.0.0' });
|
|
303
|
-
}),
|
|
304
|
-
);
|
|
305
|
-
|
|
306
|
-
vi.mocked(execSync).mockImplementation(() => {
|
|
307
|
-
throw new Error('command failed');
|
|
308
|
-
});
|
|
309
|
-
|
|
310
|
-
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
|
311
|
-
|
|
312
|
-
await expect(upgradeCommand()).rejects.toThrow('Package upgrade failed');
|
|
313
|
-
|
|
314
|
-
logSpy.mockRestore();
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
it('should scan deps, devDeps, and peerDeps', async () => {
|
|
318
|
-
writeFileSync(join(tempDir, 'package-lock.json'), '{}');
|
|
319
|
-
writePackageJson(tempDir, {
|
|
320
|
-
name: 'test-project',
|
|
321
|
-
dependencies: {
|
|
322
|
-
'@geekmidas/constructs': '^1.0.0',
|
|
323
|
-
},
|
|
324
|
-
devDependencies: {
|
|
325
|
-
'@geekmidas/testkit': '^1.0.0',
|
|
326
|
-
},
|
|
327
|
-
peerDependencies: {
|
|
328
|
-
'@geekmidas/logger': '^1.0.0',
|
|
329
|
-
},
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
server.use(
|
|
333
|
-
http.get(`${NPM_REGISTRY}/@geekmidas/constructs/latest`, () => {
|
|
334
|
-
return HttpResponse.json({ version: '2.0.0' });
|
|
335
|
-
}),
|
|
336
|
-
http.get(`${NPM_REGISTRY}/@geekmidas/testkit/latest`, () => {
|
|
337
|
-
return HttpResponse.json({ version: '2.0.0' });
|
|
338
|
-
}),
|
|
339
|
-
http.get(`${NPM_REGISTRY}/@geekmidas/logger/latest`, () => {
|
|
340
|
-
return HttpResponse.json({ version: '2.0.0' });
|
|
341
|
-
}),
|
|
342
|
-
);
|
|
343
|
-
|
|
344
|
-
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
|
345
|
-
|
|
346
|
-
await upgradeCommand({ dryRun: true });
|
|
347
|
-
|
|
348
|
-
const output = logSpy.mock.calls.flat().join('\n');
|
|
349
|
-
expect(output).toContain('Checking 3 unique @geekmidas package(s)');
|
|
350
|
-
expect(output).toContain('3 package(s) can be upgraded');
|
|
351
|
-
|
|
352
|
-
logSpy.mockRestore();
|
|
353
|
-
});
|
|
354
|
-
});
|