@supatype/cli 0.1.0-alpha.9 → 0.1.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/.turbo/turbo-build.log +2 -2
- package/.turbo/turbo-test.log +285 -69
- package/.turbo/turbo-typecheck.log +1 -1
- package/assets/supatype-logo-wordmark.ascii.txt +6 -0
- package/bin/dev-entry.ts +2 -1
- package/dist/app/framework.js +1 -3
- package/dist/app/framework.js.map +1 -1
- package/dist/app/proxy-dev-app.d.ts +14 -0
- package/dist/app/proxy-dev-app.d.ts.map +1 -1
- package/dist/app/proxy-dev-app.js +110 -6
- package/dist/app/proxy-dev-app.js.map +1 -1
- package/dist/app-config.d.ts +10 -0
- package/dist/app-config.d.ts.map +1 -1
- package/dist/app-config.js +72 -0
- package/dist/app-config.js.map +1 -1
- package/dist/assets/supatype-logo-wordmark.ascii.txt +6 -0
- package/dist/binary-cache.d.ts +19 -7
- package/dist/binary-cache.d.ts.map +1 -1
- package/dist/binary-cache.js +92 -46
- package/dist/binary-cache.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +17 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.d.ts +3 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +86 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/admin.d.ts +28 -1
- package/dist/commands/admin.d.ts.map +1 -1
- package/dist/commands/admin.js +297 -149
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/adopt.d.ts +3 -0
- package/dist/commands/adopt.d.ts.map +1 -0
- package/dist/commands/adopt.js +55 -0
- package/dist/commands/adopt.js.map +1 -0
- package/dist/commands/app.d.ts.map +1 -1
- package/dist/commands/app.js +20 -17
- package/dist/commands/app.js.map +1 -1
- package/dist/commands/cache.d.ts.map +1 -1
- package/dist/commands/cache.js +11 -10
- package/dist/commands/cache.js.map +1 -1
- package/dist/commands/cloud.d.ts +4 -9
- package/dist/commands/cloud.d.ts.map +1 -1
- package/dist/commands/cloud.js +75 -125
- package/dist/commands/cloud.js.map +1 -1
- package/dist/commands/db.d.ts.map +1 -1
- package/dist/commands/db.js +37 -58
- package/dist/commands/db.js.map +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +140 -96
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +74 -39
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/diff.d.ts.map +1 -1
- package/dist/commands/diff.js +39 -39
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +78 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/engine.d.ts.map +1 -1
- package/dist/commands/engine.js +5 -4
- package/dist/commands/engine.js.map +1 -1
- package/dist/commands/functions.d.ts.map +1 -1
- package/dist/commands/functions.js +172 -119
- package/dist/commands/functions.js.map +1 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +5 -4
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/init.d.ts +35 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +883 -107
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/introspect.d.ts +3 -0
- package/dist/commands/introspect.d.ts.map +1 -0
- package/dist/commands/introspect.js +35 -0
- package/dist/commands/introspect.js.map +1 -0
- package/dist/commands/keys.d.ts +15 -1
- package/dist/commands/keys.d.ts.map +1 -1
- package/dist/commands/keys.js +46 -10
- package/dist/commands/keys.js.map +1 -1
- package/dist/commands/link-helpers.d.ts +15 -0
- package/dist/commands/link-helpers.d.ts.map +1 -0
- package/dist/commands/link-helpers.js +225 -0
- package/dist/commands/link-helpers.js.map +1 -0
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +5 -4
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/migrate-from-v1.d.ts.map +1 -1
- package/dist/commands/migrate-from-v1.js +3 -2
- package/dist/commands/migrate-from-v1.js.map +1 -1
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +119 -26
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/pg.d.ts.map +1 -1
- package/dist/commands/pg.js +11 -12
- package/dist/commands/pg.js.map +1 -1
- package/dist/commands/plugins.d.ts.map +1 -1
- package/dist/commands/plugins.js +55 -46
- package/dist/commands/plugins.js.map +1 -1
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +33 -5
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +111 -138
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/seed.d.ts.map +1 -1
- package/dist/commands/seed.js +4 -3
- package/dist/commands/seed.js.map +1 -1
- package/dist/commands/self-host.d.ts +2 -2
- package/dist/commands/self-host.d.ts.map +1 -1
- package/dist/commands/self-host.js +65 -50
- package/dist/commands/self-host.js.map +1 -1
- package/dist/commands/self-update.d.ts.map +1 -1
- package/dist/commands/self-update.js +3 -2
- package/dist/commands/self-update.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +95 -29
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js +3 -2
- package/dist/commands/types.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +54 -21
- package/dist/commands/update.js.map +1 -1
- package/dist/compose-rename.d.ts +10 -0
- package/dist/compose-rename.d.ts.map +1 -0
- package/dist/compose-rename.js +67 -0
- package/dist/compose-rename.js.map +1 -0
- package/dist/config.d.ts +2 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/dev-compose.d.ts +26 -0
- package/dist/dev-compose.d.ts.map +1 -1
- package/dist/dev-compose.js +357 -79
- package/dist/dev-compose.js.map +1 -1
- package/dist/dev-log-bus.d.ts +30 -0
- package/dist/dev-log-bus.d.ts.map +1 -0
- package/dist/dev-log-bus.js +87 -0
- package/dist/dev-log-bus.js.map +1 -0
- package/dist/dev-log-filter.d.ts +10 -0
- package/dist/dev-log-filter.d.ts.map +1 -0
- package/dist/dev-log-filter.js +36 -0
- package/dist/dev-log-filter.js.map +1 -0
- package/dist/dev-logo.d.ts +12 -0
- package/dist/dev-logo.d.ts.map +1 -0
- package/dist/dev-logo.js +56 -0
- package/dist/dev-logo.js.map +1 -0
- package/dist/dev-ports.d.ts +27 -0
- package/dist/dev-ports.d.ts.map +1 -0
- package/dist/dev-ports.js +171 -0
- package/dist/dev-ports.js.map +1 -0
- package/dist/dev-session-lock.d.ts +25 -0
- package/dist/dev-session-lock.d.ts.map +1 -0
- package/dist/dev-session-lock.js +81 -0
- package/dist/dev-session-lock.js.map +1 -0
- package/dist/dev-session.d.ts +26 -0
- package/dist/dev-session.d.ts.map +1 -0
- package/dist/dev-session.js +106 -0
- package/dist/dev-session.js.map +1 -0
- package/dist/dev-shutdown.d.ts +25 -0
- package/dist/dev-shutdown.d.ts.map +1 -0
- package/dist/dev-shutdown.js +114 -0
- package/dist/dev-shutdown.js.map +1 -0
- package/dist/dev-task-colors.d.ts +13 -0
- package/dist/dev-task-colors.d.ts.map +1 -0
- package/dist/dev-task-colors.js +43 -0
- package/dist/dev-task-colors.js.map +1 -0
- package/dist/dev-tui.d.ts +24 -0
- package/dist/dev-tui.d.ts.map +1 -0
- package/dist/dev-tui.js +188 -0
- package/dist/dev-tui.js.map +1 -0
- package/dist/diff-output.d.ts +5 -1
- package/dist/diff-output.d.ts.map +1 -1
- package/dist/diff-output.js +69 -0
- package/dist/diff-output.js.map +1 -1
- package/dist/docker-runtime.d.ts +30 -0
- package/dist/docker-runtime.d.ts.map +1 -0
- package/dist/docker-runtime.js +118 -0
- package/dist/docker-runtime.js.map +1 -0
- package/dist/engine-client.d.ts +10 -1
- package/dist/engine-client.d.ts.map +1 -1
- package/dist/engine-client.js +76 -17
- package/dist/engine-client.js.map +1 -1
- package/dist/engine-push-output.d.ts +17 -0
- package/dist/engine-push-output.d.ts.map +1 -0
- package/dist/engine-push-output.js +64 -0
- package/dist/engine-push-output.js.map +1 -0
- package/dist/ensure-binary.js +2 -2
- package/dist/ensure-binary.js.map +1 -1
- package/dist/env-file.d.ts +5 -0
- package/dist/env-file.d.ts.map +1 -0
- package/dist/env-file.js +33 -0
- package/dist/env-file.js.map +1 -0
- package/dist/gitignore.d.ts +8 -0
- package/dist/gitignore.d.ts.map +1 -0
- package/dist/gitignore.js +41 -0
- package/dist/gitignore.js.map +1 -0
- package/dist/kong-config.d.ts +9 -0
- package/dist/kong-config.d.ts.map +1 -1
- package/dist/kong-config.js +18 -1
- package/dist/kong-config.js.map +1 -1
- package/dist/link.d.ts +66 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/link.js +160 -0
- package/dist/link.js.map +1 -0
- package/dist/process-manager.d.ts +8 -0
- package/dist/process-manager.d.ts.map +1 -1
- package/dist/process-manager.js +53 -9
- package/dist/process-manager.js.map +1 -1
- package/dist/project-config.d.ts +30 -3
- package/dist/project-config.d.ts.map +1 -1
- package/dist/project-config.js +37 -4
- package/dist/project-config.js.map +1 -1
- package/dist/prompts.d.ts +3 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +3 -0
- package/dist/prompts.js.map +1 -0
- package/dist/pull-utils.d.ts +50 -14
- package/dist/pull-utils.d.ts.map +1 -1
- package/dist/pull-utils.js +152 -12
- package/dist/pull-utils.js.map +1 -1
- package/dist/resolve-target.d.ts +86 -0
- package/dist/resolve-target.d.ts.map +1 -0
- package/dist/resolve-target.js +291 -0
- package/dist/resolve-target.js.map +1 -0
- package/dist/restore-system-relation-targets.d.ts +3 -0
- package/dist/restore-system-relation-targets.d.ts.map +1 -0
- package/dist/restore-system-relation-targets.js +45 -0
- package/dist/restore-system-relation-targets.js.map +1 -0
- package/dist/runtime-routes.d.ts.map +1 -1
- package/dist/runtime-routes.js +7 -0
- package/dist/runtime-routes.js.map +1 -1
- package/dist/schema-ast-v2.d.ts +1 -1
- package/dist/schema-ast-v2.d.ts.map +1 -1
- package/dist/schema-ast-v2.js +2 -2
- package/dist/schema-ast-v2.js.map +1 -1
- package/dist/schema-sources.d.ts +40 -0
- package/dist/schema-sources.d.ts.map +1 -0
- package/dist/schema-sources.js +183 -0
- package/dist/schema-sources.js.map +1 -0
- package/dist/scripts/postinstall.js +5 -1
- package/dist/scripts/postinstall.js.map +1 -1
- package/dist/self-host-compose.d.ts +37 -1
- package/dist/self-host-compose.d.ts.map +1 -1
- package/dist/self-host-compose.js +234 -43
- package/dist/self-host-compose.js.map +1 -1
- package/dist/storage-provision.d.ts +4 -0
- package/dist/storage-provision.d.ts.map +1 -1
- package/dist/storage-provision.js +24 -2
- package/dist/storage-provision.js.map +1 -1
- package/dist/supatype-eval-1781522769253.d.mts +2 -0
- package/dist/supatype-eval-1781522769253.d.mts.map +1 -0
- package/dist/supatype-eval-1781522769253.mjs +3 -0
- package/dist/supatype-eval-1781522769253.mjs.map +1 -0
- package/dist/systemd.js +2 -2
- package/dist/systemd.js.map +1 -1
- package/dist/target-client.d.ts +10 -0
- package/dist/target-client.d.ts.map +1 -0
- package/dist/target-client.js +22 -0
- package/dist/target-client.js.map +1 -0
- package/dist/type-extractor.d.ts +11 -0
- package/dist/type-extractor.d.ts.map +1 -1
- package/dist/type-extractor.js +95 -8
- package/dist/type-extractor.js.map +1 -1
- package/dist/ui/brand.d.ts +9 -0
- package/dist/ui/brand.d.ts.map +1 -0
- package/dist/ui/brand.js +11 -0
- package/dist/ui/brand.js.map +1 -0
- package/dist/ui/confirm.d.ts +12 -0
- package/dist/ui/confirm.d.ts.map +1 -0
- package/dist/ui/confirm.js +28 -0
- package/dist/ui/confirm.js.map +1 -0
- package/dist/ui/fatal.d.ts +10 -0
- package/dist/ui/fatal.d.ts.map +1 -0
- package/dist/ui/fatal.js +34 -0
- package/dist/ui/fatal.js.map +1 -0
- package/dist/ui/index.d.ts +9 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +9 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/interactive.d.ts +3 -0
- package/dist/ui/interactive.d.ts.map +1 -0
- package/dist/ui/interactive.js +5 -0
- package/dist/ui/interactive.js.map +1 -0
- package/dist/ui/messages.d.ts +10 -0
- package/dist/ui/messages.d.ts.map +1 -0
- package/dist/ui/messages.js +35 -0
- package/dist/ui/messages.js.map +1 -0
- package/dist/ui/next-steps.d.ts +3 -0
- package/dist/ui/next-steps.d.ts.map +1 -0
- package/dist/ui/next-steps.js +10 -0
- package/dist/ui/next-steps.js.map +1 -0
- package/dist/ui/progress.d.ts +5 -0
- package/dist/ui/progress.d.ts.map +1 -0
- package/dist/ui/progress.js +24 -0
- package/dist/ui/progress.js.map +1 -0
- package/dist/ui/prompts.d.ts +14 -0
- package/dist/ui/prompts.d.ts.map +1 -0
- package/dist/ui/prompts.js +34 -0
- package/dist/ui/prompts.js.map +1 -0
- package/package.json +5 -2
- package/src/app/framework.ts +1 -3
- package/src/app/proxy-dev-app.ts +114 -6
- package/src/app-config.ts +80 -0
- package/src/binary-cache.ts +102 -52
- package/src/cli.ts +16 -2
- package/src/commands/add.ts +97 -0
- package/src/commands/admin.ts +381 -190
- package/src/commands/adopt.ts +82 -0
- package/src/commands/app.ts +20 -17
- package/src/commands/cache.ts +11 -10
- package/src/commands/cloud.ts +91 -142
- package/src/commands/db.ts +40 -63
- package/src/commands/deploy.ts +186 -126
- package/src/commands/dev.ts +98 -55
- package/src/commands/diff.ts +52 -43
- package/src/commands/doctor.ts +103 -0
- package/src/commands/engine.ts +5 -4
- package/src/commands/functions.ts +187 -123
- package/src/commands/generate.ts +5 -4
- package/src/commands/init.ts +1087 -104
- package/src/commands/introspect.ts +48 -0
- package/src/commands/keys.ts +56 -14
- package/src/commands/link-helpers.ts +273 -0
- package/src/commands/logs.ts +5 -4
- package/src/commands/migrate-from-v1.ts +3 -2
- package/src/commands/migrate.ts +167 -27
- package/src/commands/pg.ts +13 -18
- package/src/commands/plugins.ts +55 -46
- package/src/commands/pull.ts +38 -9
- package/src/commands/push.ts +148 -175
- package/src/commands/seed.ts +5 -4
- package/src/commands/self-host.ts +85 -54
- package/src/commands/self-update.ts +3 -2
- package/src/commands/status.ts +102 -33
- package/src/commands/types.ts +3 -2
- package/src/commands/update.ts +59 -23
- package/src/compose-rename.ts +76 -0
- package/src/config.ts +2 -1
- package/src/dev-compose.ts +462 -76
- package/src/dev-log-bus.ts +101 -0
- package/src/dev-log-filter.ts +32 -0
- package/src/dev-logo.ts +61 -0
- package/src/dev-ports.ts +212 -0
- package/src/dev-session-lock.ts +101 -0
- package/src/dev-session.ts +130 -0
- package/src/dev-shutdown.ts +147 -0
- package/src/dev-task-colors.ts +47 -0
- package/src/dev-tui.ts +232 -0
- package/src/diff-output.ts +79 -1
- package/src/docker-runtime.ts +151 -0
- package/src/engine-client.ts +81 -17
- package/src/engine-push-output.ts +75 -0
- package/src/ensure-binary.ts +2 -2
- package/src/env-file.ts +37 -0
- package/src/gitignore.ts +48 -0
- package/src/kong-config.ts +24 -1
- package/src/link.ts +243 -0
- package/src/process-manager.ts +66 -10
- package/src/project-config.ts +62 -7
- package/src/prompts.ts +2 -0
- package/src/pull-utils.ts +217 -23
- package/src/resolve-target.ts +419 -0
- package/src/restore-system-relation-targets.ts +45 -0
- package/src/runtime-routes.ts +7 -0
- package/src/schema-ast-v2.ts +2 -1
- package/src/schema-sources.ts +248 -0
- package/src/scripts/postinstall.ts +7 -1
- package/src/self-host-compose.ts +262 -46
- package/src/storage-provision.ts +33 -1
- package/src/supatype-eval-1781522769253.mts +1 -0
- package/src/systemd.ts +2 -2
- package/src/target-client.ts +40 -0
- package/src/type-extractor.ts +124 -11
- package/src/ui/README.md +17 -0
- package/src/ui/brand.ts +12 -0
- package/src/ui/confirm.ts +38 -0
- package/src/ui/fatal.ts +43 -0
- package/src/ui/index.ts +8 -0
- package/src/ui/interactive.ts +4 -0
- package/src/ui/messages.ts +43 -0
- package/src/ui/next-steps.ts +10 -0
- package/src/ui/progress.ts +28 -0
- package/src/ui/prompts.ts +40 -0
- package/tests/admin-ensure.test.ts +59 -0
- package/tests/cli-help.test.ts +27 -2
- package/tests/config.test.ts +29 -2
- package/tests/dev-ports.test.ts +41 -0
- package/tests/dev-session-lock.test.ts +54 -0
- package/tests/dev-ui.test.ts +162 -0
- package/tests/docker-runtime.test.ts +236 -0
- package/tests/engine-push-output.test.ts +67 -0
- package/tests/init.test.ts +197 -18
- package/tests/link.test.ts +148 -0
- package/tests/minisign.test.ts +102 -0
- package/tests/proxy-dev-app.test.ts +45 -1
- package/tests/pull-utils.test.ts +5 -4
- package/tests/runtime-contract.test.ts +186 -2
- package/tests/schema-sources.test.ts +119 -0
- package/tests/storage-provision.test.ts +100 -0
- package/tests/ui-confirm.test.ts +41 -0
- package/tests/ui-messages.test.ts +66 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* self-host commands — manage self-hosted deployments.
|
|
3
3
|
*
|
|
4
|
-
* Compose-based commands are the
|
|
5
|
-
* Native/systemd commands
|
|
4
|
+
* Compose-based commands are the default path.
|
|
5
|
+
* Native/systemd commands remain available for bare-metal deployments.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { Command } from "commander"
|
|
@@ -17,7 +17,10 @@ import { resolveBinary } from "../binary-cache.js"
|
|
|
17
17
|
import { generateUnits } from "../systemd.js"
|
|
18
18
|
import { readPid } from "../process-manager.js"
|
|
19
19
|
import { localStorageEnv } from "../local-storage.js"
|
|
20
|
-
import { runDockerCompose, writeSelfHostCompose } from "../self-host-compose.js"
|
|
20
|
+
import { composeProjectName, exitComposeFailed, runDockerCompose, writeSelfHostCompose } from "../self-host-compose.js"
|
|
21
|
+
import { file, error, info, plain, warn } from "../ui/messages.js"
|
|
22
|
+
import { nextSteps } from "../ui/next-steps.js"
|
|
23
|
+
import { withSpinner } from "../ui/progress.js"
|
|
21
24
|
|
|
22
25
|
export function registerSelfHost(program: Command): void {
|
|
23
26
|
const selfHostCmd = program
|
|
@@ -35,20 +38,27 @@ export function registerSelfHost(program: Command): void {
|
|
|
35
38
|
const cwd = process.cwd()
|
|
36
39
|
const config = loadConfig(cwd)
|
|
37
40
|
const out = writeSelfHostCompose(cwd, config)
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
file("wrote", out.composePath)
|
|
42
|
+
file("wrote", out.kongPath)
|
|
40
43
|
})
|
|
41
44
|
|
|
42
45
|
composeCmd
|
|
43
46
|
.command("up")
|
|
44
47
|
.description("Render and start compose services")
|
|
45
48
|
.option("-d, --detach", "Start in detached mode", true)
|
|
46
|
-
.action((opts: { detach?: boolean }) => {
|
|
49
|
+
.action(async (opts: { detach?: boolean }) => {
|
|
47
50
|
const cwd = process.cwd()
|
|
48
51
|
const config = loadConfig(cwd)
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
+
const project = composeProjectName(config.project.name)
|
|
53
|
+
const args = opts.detach ? ["up", "-d"] : ["up"]
|
|
54
|
+
const brand = { intro: "Self-host deployment" }
|
|
55
|
+
const status = await withSpinner("Starting self-host Compose stack", async () => {
|
|
56
|
+
const out = writeSelfHostCompose(cwd, config)
|
|
57
|
+
return runDockerCompose(out.composePath, args, cwd, project, { brand })
|
|
58
|
+
})
|
|
59
|
+
if (status !== 0) {
|
|
60
|
+
exitComposeFailed(status, "Could not start the self-host Compose stack.", brand)
|
|
61
|
+
}
|
|
52
62
|
})
|
|
53
63
|
|
|
54
64
|
composeCmd
|
|
@@ -58,7 +68,17 @@ export function registerSelfHost(program: Command): void {
|
|
|
58
68
|
const cwd = process.cwd()
|
|
59
69
|
const config = loadConfig(cwd)
|
|
60
70
|
const out = writeSelfHostCompose(cwd, config)
|
|
61
|
-
|
|
71
|
+
const brand = { intro: "Self-host deployment" }
|
|
72
|
+
const status = runDockerCompose(
|
|
73
|
+
out.composePath,
|
|
74
|
+
["down"],
|
|
75
|
+
cwd,
|
|
76
|
+
composeProjectName(config.project.name),
|
|
77
|
+
{ brand },
|
|
78
|
+
)
|
|
79
|
+
if (status !== 0) {
|
|
80
|
+
exitComposeFailed(status, "Could not stop the self-host Compose stack.", brand)
|
|
81
|
+
}
|
|
62
82
|
})
|
|
63
83
|
|
|
64
84
|
composeCmd
|
|
@@ -68,7 +88,13 @@ export function registerSelfHost(program: Command): void {
|
|
|
68
88
|
const cwd = process.cwd()
|
|
69
89
|
const config = loadConfig(cwd)
|
|
70
90
|
const out = writeSelfHostCompose(cwd, config)
|
|
71
|
-
process.exitCode = runDockerCompose(
|
|
91
|
+
process.exitCode = runDockerCompose(
|
|
92
|
+
out.composePath,
|
|
93
|
+
["ps"],
|
|
94
|
+
cwd,
|
|
95
|
+
composeProjectName(config.project.name),
|
|
96
|
+
{ brand: { intro: "Self-host deployment" } },
|
|
97
|
+
)
|
|
72
98
|
})
|
|
73
99
|
|
|
74
100
|
composeCmd
|
|
@@ -83,10 +109,16 @@ export function registerSelfHost(program: Command): void {
|
|
|
83
109
|
const args = ["logs"]
|
|
84
110
|
if (opts.follow) args.push("-f")
|
|
85
111
|
if (opts.service) args.push(opts.service)
|
|
86
|
-
process.exitCode = runDockerCompose(
|
|
112
|
+
process.exitCode = runDockerCompose(
|
|
113
|
+
out.composePath,
|
|
114
|
+
args,
|
|
115
|
+
cwd,
|
|
116
|
+
composeProjectName(config.project.name),
|
|
117
|
+
{ brand: { intro: "Self-host deployment" } },
|
|
118
|
+
)
|
|
87
119
|
})
|
|
88
120
|
|
|
89
|
-
// ──
|
|
121
|
+
// ── Native/systemd helpers (hidden; compose is the default self-host path) ─────
|
|
90
122
|
|
|
91
123
|
const legacyCmd = new Command("native")
|
|
92
124
|
selfHostCmd.addCommand(legacyCmd, { hidden: true })
|
|
@@ -105,42 +137,41 @@ export function registerSelfHost(program: Command): void {
|
|
|
105
137
|
user?: string
|
|
106
138
|
enable: boolean
|
|
107
139
|
}) => {
|
|
108
|
-
|
|
140
|
+
logNativeHint("install-service")
|
|
109
141
|
const cwd = process.cwd()
|
|
110
142
|
const config = loadConfig(cwd)
|
|
111
143
|
|
|
112
144
|
const systemdDir = opts.outputDir ?? ".supatype/systemd"
|
|
113
145
|
const absSystemdDir = resolve(cwd, systemdDir)
|
|
114
146
|
|
|
115
|
-
|
|
147
|
+
info("Generating systemd unit files...")
|
|
116
148
|
const { postgres, server } = generateUnits(config, cwd, {
|
|
117
149
|
outputDir: absSystemdDir,
|
|
118
150
|
...(opts.user !== undefined && { user: opts.user }),
|
|
119
151
|
})
|
|
120
|
-
|
|
121
|
-
|
|
152
|
+
plain(` wrote ${postgres}`)
|
|
153
|
+
plain(` wrote ${server}`)
|
|
122
154
|
|
|
123
155
|
if (!opts.enable) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
`
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
)
|
|
156
|
+
nextSteps("To install manually:", [
|
|
157
|
+
`sudo cp ${postgres} /etc/systemd/system/`,
|
|
158
|
+
`sudo cp ${server} /etc/systemd/system/`,
|
|
159
|
+
"sudo systemctl daemon-reload",
|
|
160
|
+
"sudo systemctl enable --now supatype-postgres supatype-server",
|
|
161
|
+
])
|
|
131
162
|
return
|
|
132
163
|
}
|
|
133
164
|
|
|
134
165
|
if (process.platform !== "linux") {
|
|
135
|
-
|
|
136
|
-
"
|
|
166
|
+
info(
|
|
167
|
+
"systemd unit installation is only supported on Linux. " +
|
|
137
168
|
`Unit files are at ${absSystemdDir}/`,
|
|
138
169
|
)
|
|
139
170
|
return
|
|
140
171
|
}
|
|
141
172
|
|
|
142
173
|
// Install to /etc/systemd/system/
|
|
143
|
-
|
|
174
|
+
info("Installing to /etc/systemd/system/ (requires sudo)...")
|
|
144
175
|
const units = [
|
|
145
176
|
{ src: postgres, dest: "/etc/systemd/system/supatype-postgres.service" },
|
|
146
177
|
{ src: server, dest: "/etc/systemd/system/supatype-server.service" },
|
|
@@ -148,7 +179,7 @@ export function registerSelfHost(program: Command): void {
|
|
|
148
179
|
for (const { src, dest } of units) {
|
|
149
180
|
const cp = spawnSync("sudo", ["cp", src, dest], { stdio: "inherit" })
|
|
150
181
|
if (cp.status !== 0) {
|
|
151
|
-
|
|
182
|
+
error(`Failed to copy ${src} to ${dest}`)
|
|
152
183
|
process.exit(1)
|
|
153
184
|
}
|
|
154
185
|
}
|
|
@@ -163,9 +194,9 @@ export function registerSelfHost(program: Command): void {
|
|
|
163
194
|
)
|
|
164
195
|
if (enable.status !== 0) { process.exit(1) }
|
|
165
196
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
197
|
+
info("Services installed and started.")
|
|
198
|
+
plain(" supatype-postgres.service")
|
|
199
|
+
plain(" supatype-server.service")
|
|
169
200
|
},
|
|
170
201
|
)
|
|
171
202
|
|
|
@@ -175,7 +206,7 @@ export function registerSelfHost(program: Command): void {
|
|
|
175
206
|
.command("serve", "Start supatype-server in the foreground (for standalone mode)")
|
|
176
207
|
.option("--port <port>", "Override port from config")
|
|
177
208
|
.action(async (opts: { port?: string }) => {
|
|
178
|
-
|
|
209
|
+
logNativeHint("serve")
|
|
179
210
|
const cwd = process.cwd()
|
|
180
211
|
const config = loadConfig(cwd)
|
|
181
212
|
|
|
@@ -191,7 +222,7 @@ export function registerSelfHost(program: Command): void {
|
|
|
191
222
|
const stateDir = join(homedir(), ".supatype", "projects", config.project.name)
|
|
192
223
|
const storageEnv = config.storage?.provider !== "s3" ? localStorageEnv(stateDir) : {}
|
|
193
224
|
|
|
194
|
-
|
|
225
|
+
info(`Starting supatype-server on port ${port}...`)
|
|
195
226
|
const result = spawnSync(serverBin, args, {
|
|
196
227
|
stdio: "inherit",
|
|
197
228
|
cwd,
|
|
@@ -205,7 +236,7 @@ export function registerSelfHost(program: Command): void {
|
|
|
205
236
|
legacyCmd
|
|
206
237
|
.command("reload", "Reload the running supatype-server (SIGHUP for config reload)")
|
|
207
238
|
.action(() => {
|
|
208
|
-
|
|
239
|
+
logNativeHint("reload")
|
|
209
240
|
const cwd = process.cwd()
|
|
210
241
|
const config = loadConfig(cwd)
|
|
211
242
|
const stateDir = join(homedir(), ".supatype", "projects", config.project.name)
|
|
@@ -218,16 +249,16 @@ export function registerSelfHost(program: Command): void {
|
|
|
218
249
|
process.exitCode = result.status ?? 1
|
|
219
250
|
return
|
|
220
251
|
}
|
|
221
|
-
|
|
252
|
+
error("Server does not appear to be running (no PID file found).")
|
|
222
253
|
process.exitCode = 1
|
|
223
254
|
return
|
|
224
255
|
}
|
|
225
256
|
|
|
226
257
|
try {
|
|
227
258
|
process.kill(pid, "SIGHUP")
|
|
228
|
-
|
|
259
|
+
info(`Sent SIGHUP to supatype-server (pid ${pid}).`)
|
|
229
260
|
} catch (err) {
|
|
230
|
-
|
|
261
|
+
error(`Failed to signal pid ${pid}: ${(err as Error).message}`)
|
|
231
262
|
process.exitCode = 1
|
|
232
263
|
}
|
|
233
264
|
})
|
|
@@ -237,12 +268,12 @@ export function registerSelfHost(program: Command): void {
|
|
|
237
268
|
legacyCmd
|
|
238
269
|
.command("status", "Show running status of supatype services")
|
|
239
270
|
.action(() => {
|
|
240
|
-
|
|
271
|
+
logNativeHint("status")
|
|
241
272
|
const cwd = process.cwd()
|
|
242
273
|
const config = loadConfig(cwd)
|
|
243
274
|
const stateDir = join(homedir(), ".supatype", "projects", config.project.name)
|
|
244
275
|
|
|
245
|
-
|
|
276
|
+
plain(`Project: ${config.project.name}\n`)
|
|
246
277
|
|
|
247
278
|
if (process.platform === "linux" && existsSync("/run/systemd/system")) {
|
|
248
279
|
// systemd is active
|
|
@@ -251,19 +282,19 @@ export function registerSelfHost(program: Command): void {
|
|
|
251
282
|
encoding: "utf8",
|
|
252
283
|
})
|
|
253
284
|
const active = result.stdout?.includes("active (running)") ? "running" : "stopped"
|
|
254
|
-
|
|
285
|
+
plain(` ${svc}: ${active}`)
|
|
255
286
|
}
|
|
256
287
|
} else {
|
|
257
288
|
// PID file check
|
|
258
289
|
const serverPid = readPid(join(stateDir, "pid"), "server")
|
|
259
290
|
const pgPid = readPid(join(stateDir, "pid"), "postgres")
|
|
260
|
-
|
|
261
|
-
|
|
291
|
+
plain(` postgres: ${pgPid ? `running (pid ${pgPid})` : "stopped"}`)
|
|
292
|
+
plain(` supatype-server: ${serverPid ? `running (pid ${serverPid})` : "stopped"}`)
|
|
262
293
|
}
|
|
263
294
|
|
|
264
295
|
const logDir = join(stateDir, "logs")
|
|
265
296
|
if (existsSync(logDir)) {
|
|
266
|
-
|
|
297
|
+
plain(`\nLogs: ${logDir}`)
|
|
267
298
|
}
|
|
268
299
|
})
|
|
269
300
|
|
|
@@ -275,7 +306,7 @@ export function registerSelfHost(program: Command): void {
|
|
|
275
306
|
.option("--lines <n>", "Number of lines to show", "50")
|
|
276
307
|
.option("-f, --follow", "Follow log output")
|
|
277
308
|
.action((opts: { service?: string; lines: string; follow?: boolean }) => {
|
|
278
|
-
|
|
309
|
+
logNativeHint("logs")
|
|
279
310
|
const cwd = process.cwd()
|
|
280
311
|
const config = loadConfig(cwd)
|
|
281
312
|
const stateDir = join(homedir(), ".supatype", "projects", config.project.name)
|
|
@@ -301,7 +332,7 @@ export function registerSelfHost(program: Command): void {
|
|
|
301
332
|
|
|
302
333
|
for (const { label, file } of targets) {
|
|
303
334
|
if (!existsSync(file)) {
|
|
304
|
-
|
|
335
|
+
plain(`[${label}] log file not found: ${file}`)
|
|
305
336
|
continue
|
|
306
337
|
}
|
|
307
338
|
if (opts.follow) {
|
|
@@ -311,7 +342,7 @@ export function registerSelfHost(program: Command): void {
|
|
|
311
342
|
const n = parseInt(opts.lines, 10)
|
|
312
343
|
const content = readFileSync(file, "utf8")
|
|
313
344
|
const lines = content.split("\n")
|
|
314
|
-
|
|
345
|
+
plain(lines.slice(-n).join("\n"))
|
|
315
346
|
}
|
|
316
347
|
}
|
|
317
348
|
})
|
|
@@ -323,7 +354,7 @@ export function registerSelfHost(program: Command): void {
|
|
|
323
354
|
.option("--output <path>", "Output file path (default: ./backups/backup-<timestamp>.sql.gz)")
|
|
324
355
|
.option("--connection <url>", "Database connection URL (overrides config)")
|
|
325
356
|
.action((opts: { output?: string; connection?: string }) => {
|
|
326
|
-
|
|
357
|
+
logNativeHint("backup")
|
|
327
358
|
const cwd = process.cwd()
|
|
328
359
|
const config = loadConfig(cwd)
|
|
329
360
|
const conn = opts.connection ?? connectionString(config)
|
|
@@ -335,7 +366,7 @@ export function registerSelfHost(program: Command): void {
|
|
|
335
366
|
|
|
336
367
|
mkdirSync(resolve(outFile, ".."), { recursive: true })
|
|
337
368
|
|
|
338
|
-
|
|
369
|
+
info(`Backing up database to ${outFile}...`)
|
|
339
370
|
try {
|
|
340
371
|
// Avoid shell interpolation of user-supplied values.
|
|
341
372
|
const pgDump = spawnSync("pg_dump", [conn], {
|
|
@@ -348,17 +379,17 @@ export function registerSelfHost(program: Command): void {
|
|
|
348
379
|
|
|
349
380
|
const compressed = gzipSync(pgDump.stdout)
|
|
350
381
|
writeFileSync(outFile, compressed)
|
|
351
|
-
|
|
382
|
+
info("Backup complete.")
|
|
352
383
|
} catch (err) {
|
|
353
|
-
|
|
384
|
+
error(`Backup failed: ${(err as Error).message}`)
|
|
354
385
|
process.exit(1)
|
|
355
386
|
}
|
|
356
387
|
})
|
|
357
388
|
}
|
|
358
389
|
|
|
359
|
-
function
|
|
360
|
-
|
|
361
|
-
`
|
|
362
|
-
"Use `supatype self-host compose`
|
|
390
|
+
function logNativeHint(cmd: string): void {
|
|
391
|
+
warn(
|
|
392
|
+
`self-host native ${cmd}: Docker Compose is the default path. ` +
|
|
393
|
+
"Use `supatype self-host compose` unless you need bare-metal systemd/binaries.",
|
|
363
394
|
)
|
|
364
395
|
}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import type { Command } from "commander"
|
|
9
9
|
import { sep } from "node:path"
|
|
10
|
+
import { error, plain } from "../ui/messages.js"
|
|
10
11
|
|
|
11
12
|
function looksLikeNpmOrWorkspaceCLI(): boolean {
|
|
12
13
|
const main = process.argv[1] ?? ""
|
|
@@ -27,7 +28,7 @@ export function registerSelfUpdate(program: Command): void {
|
|
|
27
28
|
)
|
|
28
29
|
.action(() => {
|
|
29
30
|
if (looksLikeNpmOrWorkspaceCLI()) {
|
|
30
|
-
|
|
31
|
+
plain(
|
|
31
32
|
"This CLI was installed via npm (or runs from the package workspace).\n" +
|
|
32
33
|
"Update with:\n\n npm update -g @supatype/cli\n\n" +
|
|
33
34
|
"To bump engine/server/postgres/deno pinned in supatype.config.ts, use:\n\n supatype update\n",
|
|
@@ -35,7 +36,7 @@ export function registerSelfUpdate(program: Command): void {
|
|
|
35
36
|
return
|
|
36
37
|
}
|
|
37
38
|
|
|
38
|
-
|
|
39
|
+
error(
|
|
39
40
|
"Standalone CLI self-update (replace binary from CDN) is not published yet.\n\n" +
|
|
40
41
|
"Install or upgrade via npm:\n npm install -g @supatype/cli\n\n" +
|
|
41
42
|
"Component binaries (engine, server, postgres, deno):\n supatype update\n",
|
package/src/commands/status.ts
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* supatype status — show
|
|
2
|
+
* supatype status — show linked target or local dev stack state.
|
|
3
3
|
*/
|
|
4
4
|
import type { Command } from "commander"
|
|
5
5
|
import { spawnSync } from "node:child_process"
|
|
6
|
+
import { existsSync } from "node:fs"
|
|
7
|
+
import { resolve } from "node:path"
|
|
6
8
|
import { LOCAL_KONG_HOST_PORT, localKongBaseUrl } from "../local-gateway.js"
|
|
9
|
+
import { loadLocalEnvironment, loadProjectLink } from "../link.js"
|
|
10
|
+
import { resolveTarget, targetStatus } from "../resolve-target.js"
|
|
11
|
+
import { error, info, plain, warn } from "../ui/messages.js"
|
|
7
12
|
|
|
8
13
|
interface ServiceStatus {
|
|
9
14
|
name: string
|
|
@@ -16,42 +21,106 @@ interface ServiceStatus {
|
|
|
16
21
|
export function registerStatus(program: Command): void {
|
|
17
22
|
program
|
|
18
23
|
.command("status")
|
|
19
|
-
.description("Show
|
|
20
|
-
.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
{
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
for (const svc of services) {
|
|
39
|
-
const icon = svc.status === "running" ? "●" : svc.status === "stopped" ? "○" : "✕"
|
|
40
|
-
const status = svc.status.padEnd(8)
|
|
41
|
-
const port = svc.port ? `:${svc.port}` : ""
|
|
42
|
-
const uptime = svc.uptime ? ` (${svc.uptime})` : ""
|
|
43
|
-
console.log(` ${icon} ${svc.name.padEnd(maxName)} ${status} ${port}${uptime}`)
|
|
24
|
+
.description("Show linked target status or local dev services")
|
|
25
|
+
.option("--env <name>", "Target environment when linked")
|
|
26
|
+
.action(async (opts: { env?: string }) => {
|
|
27
|
+
const cwd = process.cwd()
|
|
28
|
+
const link = loadProjectLink(cwd)
|
|
29
|
+
const localEnv = loadLocalEnvironment(cwd)
|
|
30
|
+
|
|
31
|
+
if (link || localEnv) {
|
|
32
|
+
try {
|
|
33
|
+
const target = resolveTarget(cwd, { env: opts.env })
|
|
34
|
+
if (target.mode !== "direct") {
|
|
35
|
+
await printLinkedStatus(target)
|
|
36
|
+
return
|
|
37
|
+
}
|
|
38
|
+
} catch (err) {
|
|
39
|
+
error((err as Error).message)
|
|
40
|
+
process.exitCode = 1
|
|
41
|
+
return
|
|
42
|
+
}
|
|
44
43
|
}
|
|
45
44
|
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
printLocalStackStatus(cwd)
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async function printLinkedStatus(target: ReturnType<typeof resolveTarget>): Promise<void> {
|
|
50
|
+
info(`Target: ${target.mode} (${target.environment})`)
|
|
51
|
+
info(`Project: ${target.projectRef}`)
|
|
52
|
+
info(`API: ${target.apiBaseUrl}${target.apiPrefix}`)
|
|
53
|
+
plain()
|
|
48
54
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
55
|
+
try {
|
|
56
|
+
const data = (await targetStatus(target)) as Record<string, unknown>
|
|
57
|
+
if (data.functions && Array.isArray(data.functions)) {
|
|
58
|
+
plain(`Functions (${data.functions.length}):`)
|
|
59
|
+
for (const fn of data.functions as Array<{ name?: string } | string>) {
|
|
60
|
+
const name = typeof fn === "string" ? fn : fn.name
|
|
61
|
+
if (name) plain(` • ${name}`)
|
|
53
62
|
}
|
|
54
|
-
|
|
63
|
+
plain()
|
|
64
|
+
}
|
|
65
|
+
if (data.deploymentId) {
|
|
66
|
+
info(`Active deployment: ${data.deploymentId}`)
|
|
67
|
+
}
|
|
68
|
+
if (data.controlPlane) {
|
|
69
|
+
info(`Control plane: ${data.controlPlane}`)
|
|
70
|
+
}
|
|
71
|
+
} catch (err) {
|
|
72
|
+
warn(`Could not fetch remote status: ${(err as Error).message}`)
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function printLocalStackStatus(cwd: string): void {
|
|
77
|
+
const localEnv = loadLocalEnvironment(cwd)
|
|
78
|
+
const kongPort = localEnv?.kongPort ?? LOCAL_KONG_HOST_PORT
|
|
79
|
+
|
|
80
|
+
const services: ServiceStatus[] = [
|
|
81
|
+
{ name: "Postgres", container: "supatype-postgres", port: 5432 },
|
|
82
|
+
{ name: "PostgREST", container: "supatype-postgrest", port: 3000 },
|
|
83
|
+
{ name: "GoTrue", container: "supatype-gotrue", port: 9999 },
|
|
84
|
+
{ name: "Kong", container: "supatype-kong", port: kongPort },
|
|
85
|
+
{ name: "Control plane", container: "supatype-control-plane" },
|
|
86
|
+
{ name: "MinIO", container: "supatype-minio", port: 9000 },
|
|
87
|
+
{ name: "Realtime", container: "supatype-realtime", port: 4000 },
|
|
88
|
+
{ name: "Studio", container: "supatype-studio", port: 3100 },
|
|
89
|
+
].map((svc) => {
|
|
90
|
+
const status = getContainerStatus(svc.container)
|
|
91
|
+
const uptime = getContainerUptime(svc.container)
|
|
92
|
+
return { ...svc, status, ...(uptime !== undefined && { uptime }) }
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
plain("Supatype Local Development Stack\n")
|
|
96
|
+
|
|
97
|
+
const maxName = Math.max(...services.map((s) => s.name.length))
|
|
98
|
+
for (const svc of services) {
|
|
99
|
+
const icon = svc.status === "running" ? "●" : svc.status === "stopped" ? "○" : "✕"
|
|
100
|
+
const status = svc.status.padEnd(8)
|
|
101
|
+
const port = svc.port ? `:${svc.port}` : ""
|
|
102
|
+
const uptime = svc.uptime ? ` (${svc.uptime})` : ""
|
|
103
|
+
plain(` ${icon} ${svc.name.padEnd(maxName)} ${status} ${port}${uptime}`)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const running = services.filter((s) => s.status === "running")
|
|
107
|
+
plain(`\n${running.length}/${services.length} services running`)
|
|
108
|
+
|
|
109
|
+
if (running.length > 0) {
|
|
110
|
+
const apiUrl = localEnv?.apiUrl ?? localKongBaseUrl()
|
|
111
|
+
plain(`\nAPI URL: ${apiUrl}`)
|
|
112
|
+
plain(`Studio: http://localhost:3100`)
|
|
113
|
+
if (localEnv?.databaseUrl) {
|
|
114
|
+
plain(`Database: ${localEnv.databaseUrl}`)
|
|
115
|
+
} else {
|
|
116
|
+
plain(`Database: postgresql://supatype_admin:postgres@localhost:5432/postgres`)
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (existsSync(resolve(cwd, ".supatype/environment.json"))) {
|
|
121
|
+
plain("\nLocal environment file: .supatype/environment.json")
|
|
122
|
+
info("Link remote ops: supatype link --url <api> --token $SERVICE_ROLE_KEY")
|
|
123
|
+
}
|
|
55
124
|
}
|
|
56
125
|
|
|
57
126
|
function getContainerStatus(name: string): "running" | "stopped" | "error" {
|
package/src/commands/types.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { existsSync, readFileSync } from "node:fs"
|
|
|
3
3
|
import { resolve, relative } from "node:path"
|
|
4
4
|
import ts from "typescript"
|
|
5
5
|
import { loadConfig } from "../config.js"
|
|
6
|
+
import { error, plain } from "../ui/messages.js"
|
|
6
7
|
|
|
7
8
|
export function registerTypes(program: Command): void {
|
|
8
9
|
const types = program.command("types").description("Type generation and validation utilities")
|
|
@@ -63,11 +64,11 @@ export function registerTypes(program: Command): void {
|
|
|
63
64
|
}
|
|
64
65
|
|
|
65
66
|
if (errors.length > 0) {
|
|
66
|
-
for (const err of errors)
|
|
67
|
+
for (const err of errors) error(err)
|
|
67
68
|
process.exit(1)
|
|
68
69
|
}
|
|
69
70
|
|
|
70
|
-
|
|
71
|
+
plain("types check passed")
|
|
71
72
|
})
|
|
72
73
|
}
|
|
73
74
|
|