@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
package/src/commands/dev.ts
CHANGED
|
@@ -16,6 +16,7 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"
|
|
|
16
16
|
import { homedir } from "node:os"
|
|
17
17
|
import { isAbsolute, join, relative, resolve } from "node:path"
|
|
18
18
|
import { loadConfig } from "../config.js"
|
|
19
|
+
import type { ExtractedSchemaAstV2 } from "../schema-ast-v2.js"
|
|
19
20
|
import {
|
|
20
21
|
functionsPathCandidatesFromProject,
|
|
21
22
|
resolveRuntimeProvider,
|
|
@@ -36,7 +37,12 @@ import { ensureBinary } from "../ensure-binary.js"
|
|
|
36
37
|
import { startProxyDevApp } from "../app/proxy-dev-app.js"
|
|
37
38
|
import { ProcessManager } from "../process-manager.js"
|
|
38
39
|
import { startStudioViteDevServer } from "../studio-dev-server.js"
|
|
40
|
+
import { restoreSystemRelationTargets } from "../restore-system-relation-targets.js"
|
|
39
41
|
import { localStorageEnv } from "../local-storage.js"
|
|
42
|
+
import { beginDevSession, endDevSession, resolveDevUiMode, startDevSession } from "../dev-session.js"
|
|
43
|
+
import { probeDockerDaemon, reportDockerUnavailable } from "../docker-runtime.js"
|
|
44
|
+
import { fatalError } from "../ui/fatal.js"
|
|
45
|
+
import { registerDevShutdown } from "../dev-shutdown.js"
|
|
40
46
|
import {
|
|
41
47
|
initdb,
|
|
42
48
|
start as pgStart,
|
|
@@ -63,17 +69,71 @@ function gotrueSMTPFromEmailConfig(email: SupatypeProjectConfig["email"] | undef
|
|
|
63
69
|
return out
|
|
64
70
|
}
|
|
65
71
|
|
|
72
|
+
const NATIVE_PG_PORT = 5432
|
|
73
|
+
|
|
74
|
+
function portCheckCommand(port: number): string {
|
|
75
|
+
return process.platform === "win32"
|
|
76
|
+
? `netstat -ano | findstr :${port}`
|
|
77
|
+
: `lsof -i :${port}`
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async function assertNativeDevPortsFree(serverPort: number, postgrestPort: number): Promise<void> {
|
|
81
|
+
const brand = { intro: "Local development" }
|
|
82
|
+
if (await isPortInUse(NATIVE_PG_PORT)) {
|
|
83
|
+
fatalError(
|
|
84
|
+
`Port ${NATIVE_PG_PORT} is already in use.`,
|
|
85
|
+
["Another Postgres instance may be running.", `Check: ${portCheckCommand(NATIVE_PG_PORT)}`],
|
|
86
|
+
{ brand },
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
if (await isPortInUse(serverPort)) {
|
|
90
|
+
fatalError(
|
|
91
|
+
`Port ${serverPort} is already in use.`,
|
|
92
|
+
["Another supatype-server may be running.", `Check: ${portCheckCommand(serverPort)}`],
|
|
93
|
+
{ brand },
|
|
94
|
+
)
|
|
95
|
+
}
|
|
96
|
+
if (await isPortInUse(postgrestPort)) {
|
|
97
|
+
fatalError(
|
|
98
|
+
`Port ${postgrestPort} is already in use.`,
|
|
99
|
+
["Another service may be running.", `Check: ${portCheckCommand(postgrestPort)}`],
|
|
100
|
+
{ brand },
|
|
101
|
+
)
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
66
105
|
export function registerDev(program: Command): void {
|
|
67
106
|
program
|
|
68
107
|
.command("dev")
|
|
69
108
|
.description("Start local Postgres, apply schema, and run supatype-server")
|
|
70
109
|
.option("--no-watch", "Start services but do not watch for schema changes")
|
|
110
|
+
.option("--stream", "Print interleaved logs instead of the interactive TUI")
|
|
71
111
|
.option("--port <port>", "Port for supatype-server (overrides config)", String)
|
|
72
|
-
.action(async (opts: { watch: boolean; port?: string }) => {
|
|
112
|
+
.action(async (opts: { watch: boolean; stream?: boolean; port?: string }) => {
|
|
73
113
|
const cwd = process.cwd()
|
|
74
114
|
|
|
75
|
-
// ── 1. Load project config
|
|
115
|
+
// ── 1. Load project config (before TUI — fatal errors must hit real stderr) ──
|
|
76
116
|
const config = loadConfig(cwd)
|
|
117
|
+
const provider = resolveRuntimeProvider(config)
|
|
118
|
+
|
|
119
|
+
if (provider === "docker") {
|
|
120
|
+
const probe = probeDockerDaemon()
|
|
121
|
+
if (!probe.ok) {
|
|
122
|
+
reportDockerUnavailable(probe, { brand: { intro: "Local development" } })
|
|
123
|
+
process.exit(1)
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const projectName = config.project.name
|
|
128
|
+
const serverPort = opts.port ?? String(config.server.port ?? 54321)
|
|
129
|
+
const postgrestPort = String(config.server.postgrestPort ?? 3001)
|
|
130
|
+
|
|
131
|
+
if (provider !== "docker") {
|
|
132
|
+
await assertNativeDevPortsFree(Number(serverPort), Number(postgrestPort))
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
beginDevSession(resolveDevUiMode(opts.stream === true))
|
|
136
|
+
startDevSession()
|
|
77
137
|
if (hasMeaningfulOverrides(config)) {
|
|
78
138
|
console.warn("[supatype] Local binary overrides active:")
|
|
79
139
|
for (const line of describeActiveOverrides(config)) {
|
|
@@ -81,10 +141,6 @@ export function registerDev(program: Command): void {
|
|
|
81
141
|
}
|
|
82
142
|
console.warn("")
|
|
83
143
|
}
|
|
84
|
-
const projectName = config.project.name
|
|
85
|
-
const serverPort = opts.port ?? String(config.server.port ?? 54321)
|
|
86
|
-
const postgrestPort = String(config.server.postgrestPort ?? 3001)
|
|
87
|
-
const provider = resolveRuntimeProvider(config)
|
|
88
144
|
|
|
89
145
|
if (provider === "docker") {
|
|
90
146
|
const { runDevCompose } = await import("../dev-compose.js")
|
|
@@ -109,33 +165,10 @@ export function registerDev(program: Command): void {
|
|
|
109
165
|
mkdirSync(d, { recursive: true })
|
|
110
166
|
}
|
|
111
167
|
|
|
112
|
-
// ── 4. Port collision check ───────────────────────────────────────────
|
|
113
|
-
const pgPort = 5432
|
|
114
|
-
if (await isPortInUse(pgPort)) {
|
|
115
|
-
console.error(
|
|
116
|
-
`[supatype] Port ${pgPort} is already in use. Another Postgres instance may be running.\n` +
|
|
117
|
-
` Check: lsof -i :${pgPort}`,
|
|
118
|
-
)
|
|
119
|
-
process.exit(1)
|
|
120
|
-
}
|
|
121
|
-
if (await isPortInUse(Number(serverPort))) {
|
|
122
|
-
console.error(
|
|
123
|
-
`[supatype] Port ${serverPort} is already in use. Another supatype-server may be running.\n` +
|
|
124
|
-
` Check: lsof -i :${serverPort}`,
|
|
125
|
-
)
|
|
126
|
-
process.exit(1)
|
|
127
|
-
}
|
|
128
|
-
if (await isPortInUse(Number(postgrestPort))) {
|
|
129
|
-
console.error(
|
|
130
|
-
`[supatype] Port ${postgrestPort} is already in use. Another service may be running.\n` +
|
|
131
|
-
` Check: lsof -i :${postgrestPort}`,
|
|
132
|
-
)
|
|
133
|
-
process.exit(1)
|
|
134
|
-
}
|
|
135
|
-
|
|
136
168
|
// ── 5–7. Start Postgres ───────────────────────────────────────────────
|
|
137
169
|
let dbURL: string
|
|
138
170
|
let stopPostgres: () => void | Promise<void>
|
|
171
|
+
const pgPort = NATIVE_PG_PORT
|
|
139
172
|
const pgPassword = "postgres"
|
|
140
173
|
// pgBinDir is set on the native path and used to add DLL search path for
|
|
141
174
|
// PostgREST on Windows (PostgREST links against libpq + SSL from MinGW).
|
|
@@ -233,6 +266,9 @@ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticate
|
|
|
233
266
|
(e: unknown) => console.error("[supatype] Initial schema push failed:", (e as Error).message),
|
|
234
267
|
)
|
|
235
268
|
|
|
269
|
+
const { ensureFirstAdminUser } = await import("./admin.js")
|
|
270
|
+
await ensureFirstAdminUser(dbURL, { cwd })
|
|
271
|
+
|
|
236
272
|
// ── 10. Spawn supatype-server ─────────────────────────────────────────
|
|
237
273
|
|
|
238
274
|
// Resolve edge functions config: only enable Deno if a functions dir exists.
|
|
@@ -252,7 +288,8 @@ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticate
|
|
|
252
288
|
console.log(`[supatype] Edge functions enabled (${functionsDir})`)
|
|
253
289
|
try {
|
|
254
290
|
denoBinPath = await ensureBinary("deno", config)
|
|
255
|
-
|
|
291
|
+
const denoVersion = await (await import("../binary-cache.js")).resolveVersionFor("deno", config)
|
|
292
|
+
console.log(`[supatype] Deno runtime: ${denoBinPath} (v${denoVersion})`)
|
|
256
293
|
if (functionRoutes.length > 0) {
|
|
257
294
|
console.log(
|
|
258
295
|
`[supatype] Edge functions router: ${relative(cwd, denoServeScriptAbs) || ".supatype/functions-router.ts"} ` +
|
|
@@ -263,7 +300,7 @@ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticate
|
|
|
263
300
|
}
|
|
264
301
|
} catch (err) {
|
|
265
302
|
console.warn(
|
|
266
|
-
`[supatype] ⚠ Found ${functionsDir} but could not provision Deno
|
|
303
|
+
`[supatype] ⚠ Found ${functionsDir} but could not provision Deno — edge functions will not run.\n` +
|
|
267
304
|
` ${(err as Error).message}\n` +
|
|
268
305
|
" (Functions still appear in Studio; invocations need Deno.)",
|
|
269
306
|
)
|
|
@@ -473,8 +510,8 @@ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticate
|
|
|
473
510
|
|
|
474
511
|
|
|
475
512
|
// ── Shutdown handler ──────────────────────────────────────────────────
|
|
476
|
-
|
|
477
|
-
console.log("
|
|
513
|
+
registerDevShutdown(async () => {
|
|
514
|
+
console.log("[supatype] Shutting down...")
|
|
478
515
|
await Promise.all([
|
|
479
516
|
serverProc.stop(),
|
|
480
517
|
postgrestProc?.stop(),
|
|
@@ -482,10 +519,7 @@ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO authenticate
|
|
|
482
519
|
appProc?.stop(),
|
|
483
520
|
])
|
|
484
521
|
await stopPostgres()
|
|
485
|
-
|
|
486
|
-
}
|
|
487
|
-
process.once("SIGINT", cleanup)
|
|
488
|
-
process.once("SIGTERM", cleanup)
|
|
522
|
+
})
|
|
489
523
|
|
|
490
524
|
// ── 10. Schema watch ──────────────────────────────────────────────────
|
|
491
525
|
if (opts.watch) {
|
|
@@ -564,14 +598,27 @@ async function runSchemaPush(
|
|
|
564
598
|
|
|
565
599
|
// Push schema.
|
|
566
600
|
console.log("[supatype] Applying schema...")
|
|
567
|
-
const
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
)
|
|
572
|
-
|
|
601
|
+
const { ensureEngine, engineRequest } = await import("../engine-client.js")
|
|
602
|
+
const { writeSchemaSourcePushArtifacts } = await import("../schema-sources.js")
|
|
603
|
+
await ensureEngine()
|
|
604
|
+
const pgSchema = config?.schema?.pg_schema ?? "public"
|
|
605
|
+
const sources = writeSchemaSourcePushArtifacts(cwd)
|
|
606
|
+
try {
|
|
607
|
+
await engineRequest("/push", {
|
|
608
|
+
ast,
|
|
609
|
+
database_url: dbURL,
|
|
610
|
+
schema: pgSchema,
|
|
611
|
+
force: true,
|
|
612
|
+
...(sources
|
|
613
|
+
? {
|
|
614
|
+
schema_sources_gz_base64: sources.payload.dataBase64,
|
|
615
|
+
schema_sources_manifest: sources.payload.manifest,
|
|
616
|
+
}
|
|
617
|
+
: {}),
|
|
618
|
+
})
|
|
619
|
+
} catch (err) {
|
|
573
620
|
_lastFailedAst = astJson
|
|
574
|
-
throw
|
|
621
|
+
throw err
|
|
575
622
|
}
|
|
576
623
|
_lastPushedAst = astJson
|
|
577
624
|
_lastFailedAst = null
|
|
@@ -623,6 +670,7 @@ async function runSchemaPush(
|
|
|
623
670
|
} catch {
|
|
624
671
|
admin = adminResult.stdout
|
|
625
672
|
}
|
|
673
|
+
restoreSystemRelationTargets(admin, ast)
|
|
626
674
|
const merged = config ? withAdminRoles(admin, config) : admin
|
|
627
675
|
writeFileSync(adminConfigPath, `${JSON.stringify(merged, null, 2)}\n`)
|
|
628
676
|
}
|
|
@@ -631,10 +679,6 @@ async function runSchemaPush(
|
|
|
631
679
|
console.log("[supatype] Schema applied.")
|
|
632
680
|
}
|
|
633
681
|
|
|
634
|
-
// ---------------------------------------------------------------------------
|
|
635
|
-
// Storage bucket provisioning (local dev only)
|
|
636
|
-
// ---------------------------------------------------------------------------
|
|
637
|
-
|
|
638
682
|
function provisionStorageBuckets(
|
|
639
683
|
declared: Array<{
|
|
640
684
|
id: string
|
|
@@ -702,10 +746,9 @@ async function resolvePgBinDir(config: Awaited<ReturnType<typeof loadConfig>>):
|
|
|
702
746
|
}
|
|
703
747
|
|
|
704
748
|
// Locate cached Postgres archive.
|
|
705
|
-
const { cachePath } = await import("../binary-cache.js")
|
|
706
|
-
const version = config.versions.postgres
|
|
707
|
-
const { currentPlatform } = await import("../binary-cache.js")
|
|
749
|
+
const { cachePath, currentPlatform, resolveVersionFor } = await import("../binary-cache.js")
|
|
708
750
|
const platform = currentPlatform()
|
|
751
|
+
const version = await resolveVersionFor("postgres", config)
|
|
709
752
|
|
|
710
753
|
const pgCacheDir = cachePath("postgres", version)
|
|
711
754
|
const extractedDir = join(pgCacheDir, `pg-${version}`)
|
|
@@ -915,9 +958,9 @@ const EXTENSION_FIELDS: Record<string, { ext: string; fallback: AstField }> = {
|
|
|
915
958
|
}
|
|
916
959
|
|
|
917
960
|
function adaptUnsupportedKinds(
|
|
918
|
-
ast:
|
|
961
|
+
ast: ExtractedSchemaAstV2,
|
|
919
962
|
skipKinds: ReadonlySet<string>,
|
|
920
|
-
): { filtered:
|
|
963
|
+
): { filtered: ExtractedSchemaAstV2; adapted: string[] } {
|
|
921
964
|
const adapted: string[] = []
|
|
922
965
|
if (!ast || typeof ast !== "object") return { filtered: ast, adapted }
|
|
923
966
|
const schema = ast as AstSchema
|
|
@@ -937,7 +980,7 @@ function adaptUnsupportedKinds(
|
|
|
937
980
|
return { ...model, fields }
|
|
938
981
|
})
|
|
939
982
|
|
|
940
|
-
return { filtered: { ...schema, models }, adapted }
|
|
983
|
+
return { filtered: { ...schema, models } as ExtractedSchemaAstV2, adapted }
|
|
941
984
|
}
|
|
942
985
|
|
|
943
986
|
// ---------------------------------------------------------------------------
|
package/src/commands/diff.ts
CHANGED
|
@@ -1,63 +1,72 @@
|
|
|
1
1
|
import type { Command } from "commander"
|
|
2
2
|
import { loadConfig, loadSchemaAst } from "../config.js"
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { resolveRuntimeProvider, schemaPathFromProject } from "../project-config.js"
|
|
4
|
+
import { printDiffOperations, printDiffWarnings } from "../diff-output.js"
|
|
5
|
+
import { resolveTarget, targetSchemaDiff, schemaPgSchema } from "../resolve-target.js"
|
|
6
|
+
import { loadProjectLink } from "../link.js"
|
|
7
|
+
import { withSpinner } from "../ui/progress.js"
|
|
6
8
|
|
|
7
9
|
export function registerDiff(program: Command): void {
|
|
8
10
|
program
|
|
9
11
|
.command("diff")
|
|
10
12
|
.description("Show planned schema changes without applying them (dry run)")
|
|
11
13
|
.option("--connection <url>", "Database connection URL (overrides config)")
|
|
12
|
-
.
|
|
14
|
+
.option("--env <name>", "Target environment when linked")
|
|
15
|
+
.option("--direct", "Use local engine subprocess")
|
|
16
|
+
.action(async (opts: { connection?: string; env?: string; direct?: boolean }) => {
|
|
13
17
|
const cwd = process.cwd()
|
|
14
18
|
const config = loadConfig(cwd)
|
|
15
|
-
const
|
|
19
|
+
const pgSchema = schemaPgSchema(cwd)
|
|
16
20
|
|
|
17
|
-
await
|
|
21
|
+
const ast = await withSpinner("Loading schema", async () =>
|
|
22
|
+
loadSchemaAst(schemaPathFromProject(config, cwd), cwd),
|
|
23
|
+
)
|
|
18
24
|
|
|
19
|
-
|
|
20
|
-
const
|
|
25
|
+
const linked = loadProjectLink(cwd)
|
|
26
|
+
const useDirect = opts.direct || Boolean(opts.connection)
|
|
21
27
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
printDiffWarnings(diff)
|
|
30
|
-
|
|
31
|
-
if (ops.length === 0) {
|
|
32
|
-
console.log("No changes.")
|
|
28
|
+
if (linked && !useDirect && !opts.connection) {
|
|
29
|
+
const target = resolveTarget(cwd, { env: opts.env })
|
|
30
|
+
const diff = await withSpinner("Computing diff", () =>
|
|
31
|
+
targetSchemaDiff(target, ast, { schema: pgSchema }),
|
|
32
|
+
)
|
|
33
|
+
printDiffWarnings(diff)
|
|
34
|
+
printDiffOperations(diff)
|
|
33
35
|
return
|
|
34
36
|
}
|
|
35
37
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
38
|
+
if (
|
|
39
|
+
!opts.connection &&
|
|
40
|
+
!useDirect &&
|
|
41
|
+
resolveRuntimeProvider(config) === "docker"
|
|
42
|
+
) {
|
|
43
|
+
const localTarget = resolveTarget(cwd, { env: opts.env })
|
|
44
|
+
if (localTarget.mode === "local" && localTarget.token) {
|
|
45
|
+
const diff = await withSpinner("Computing diff", () =>
|
|
46
|
+
targetSchemaDiff(localTarget, ast, { schema: pgSchema }),
|
|
47
|
+
)
|
|
48
|
+
printDiffWarnings(diff)
|
|
49
|
+
printDiffOperations(diff)
|
|
50
|
+
return
|
|
51
|
+
}
|
|
52
|
+
const { diffSchemaDocker } = await import("../dev-compose.js")
|
|
53
|
+
const diff = await withSpinner("Computing diff via Docker Compose", () =>
|
|
54
|
+
diffSchemaDocker(cwd, config),
|
|
55
|
+
)
|
|
56
|
+
printDiffWarnings(diff)
|
|
57
|
+
printDiffOperations(diff)
|
|
58
|
+
return
|
|
55
59
|
}
|
|
56
60
|
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
const target = resolveTarget(cwd, {
|
|
62
|
+
env: opts.env,
|
|
63
|
+
direct: true,
|
|
64
|
+
connection: opts.connection,
|
|
65
|
+
})
|
|
66
|
+
const diff = await withSpinner("Computing diff", () =>
|
|
67
|
+
targetSchemaDiff(target, ast, { schema: pgSchema }),
|
|
68
|
+
)
|
|
69
|
+
printDiffWarnings(diff)
|
|
70
|
+
printDiffOperations(diff)
|
|
62
71
|
})
|
|
63
72
|
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type { Command } from "commander"
|
|
2
|
+
import { loadConfig, loadSchemaAst } from "../config.js"
|
|
3
|
+
import { info, plain } from "../ui/messages.js"
|
|
4
|
+
import { schemaPathFromProject } from "../project-config.js"
|
|
5
|
+
import { resolveTarget, targetSchemaDoctor, schemaPgSchema } from "../resolve-target.js"
|
|
6
|
+
import { loadProjectLink } from "../link.js"
|
|
7
|
+
import { resolveHostEngineDatabaseUrl } from "../dev-compose.js"
|
|
8
|
+
|
|
9
|
+
interface DoctorItem {
|
|
10
|
+
kind: string
|
|
11
|
+
table: string
|
|
12
|
+
name: string
|
|
13
|
+
fields: string[]
|
|
14
|
+
message: string
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface DoctorReport {
|
|
18
|
+
missing: DoctorItem[]
|
|
19
|
+
staleManaged: DoctorItem[]
|
|
20
|
+
unmanagedDrift: DoctorItem[]
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function printSection(title: string, items: DoctorItem[]): void {
|
|
24
|
+
if (items.length === 0) return
|
|
25
|
+
plain(`\n${title} (${items.length}):\n`)
|
|
26
|
+
for (const item of items) {
|
|
27
|
+
const fields = item.fields.length > 0 ? ` (${item.fields.join(", ")})` : ""
|
|
28
|
+
plain(` • ${item.table}.${item.name}${fields}`)
|
|
29
|
+
plain(` ${item.message}`)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function registerDoctor(program: Command): void {
|
|
34
|
+
program
|
|
35
|
+
.command("doctor")
|
|
36
|
+
.description("Report schema drift between schema/index.ts and the live database")
|
|
37
|
+
.option("--connection <url>", "Database connection URL (overrides config)")
|
|
38
|
+
.option("--env <name>", "Target environment when linked")
|
|
39
|
+
.option("--strict", "Exit non-zero when missing or stale managed drift exists")
|
|
40
|
+
.option("--no-cache", "Force full database introspection")
|
|
41
|
+
.option("--direct", "Use local engine subprocess")
|
|
42
|
+
.action(async (opts: {
|
|
43
|
+
connection?: string
|
|
44
|
+
env?: string
|
|
45
|
+
strict?: boolean
|
|
46
|
+
noCache?: boolean
|
|
47
|
+
direct?: boolean
|
|
48
|
+
}) => {
|
|
49
|
+
const cwd = process.cwd()
|
|
50
|
+
const config = loadConfig(cwd)
|
|
51
|
+
const pgSchema = schemaPgSchema(cwd)
|
|
52
|
+
|
|
53
|
+
info("Loading schema...")
|
|
54
|
+
const ast = loadSchemaAst(schemaPathFromProject(config, cwd), cwd)
|
|
55
|
+
|
|
56
|
+
let report: DoctorReport
|
|
57
|
+
|
|
58
|
+
const linked = loadProjectLink(cwd)
|
|
59
|
+
if (linked && !opts.direct && !opts.connection) {
|
|
60
|
+
const target = resolveTarget(cwd, { env: opts.env })
|
|
61
|
+
report = (await targetSchemaDoctor(target, ast, {
|
|
62
|
+
noCache: opts.noCache,
|
|
63
|
+
schema: pgSchema,
|
|
64
|
+
})) as DoctorReport
|
|
65
|
+
} else if (!opts.direct && !opts.connection) {
|
|
66
|
+
const connection = await resolveHostEngineDatabaseUrl(cwd, config, opts.connection)
|
|
67
|
+
const target = resolveTarget(cwd, { direct: true, connection })
|
|
68
|
+
report = (await targetSchemaDoctor(target, ast, {
|
|
69
|
+
noCache: opts.noCache,
|
|
70
|
+
schema: pgSchema,
|
|
71
|
+
})) as DoctorReport
|
|
72
|
+
void connection
|
|
73
|
+
} else {
|
|
74
|
+
const target = resolveTarget(cwd, {
|
|
75
|
+
env: opts.env,
|
|
76
|
+
direct: true,
|
|
77
|
+
connection: opts.connection,
|
|
78
|
+
})
|
|
79
|
+
report = (await targetSchemaDoctor(target, ast, {
|
|
80
|
+
noCache: opts.noCache,
|
|
81
|
+
schema: pgSchema,
|
|
82
|
+
})) as DoctorReport
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
printSection("Missing (in AST, not in DB)", report.missing ?? [])
|
|
86
|
+
printSection("Stale managed (stamped, not in AST)", report.staleManaged ?? [])
|
|
87
|
+
printSection("Unmanaged drift (manual decision)", report.unmanagedDrift ?? [])
|
|
88
|
+
|
|
89
|
+
const missing = report.missing?.length ?? 0
|
|
90
|
+
const stale = report.staleManaged?.length ?? 0
|
|
91
|
+
const unmanaged = report.unmanagedDrift?.length ?? 0
|
|
92
|
+
|
|
93
|
+
if (missing + stale + unmanaged === 0) {
|
|
94
|
+
info("No drift detected.")
|
|
95
|
+
} else {
|
|
96
|
+
plain(`\nSummary: ${missing} missing, ${stale} stale managed, ${unmanaged} unmanaged`)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (opts.strict && (missing > 0 || stale > 0)) {
|
|
100
|
+
process.exit(1)
|
|
101
|
+
}
|
|
102
|
+
})
|
|
103
|
+
}
|
package/src/commands/engine.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import type { Command } from "commander"
|
|
7
7
|
import { engineHealth } from "../engine-client.js"
|
|
8
|
+
import { error, info } from "../ui/messages.js"
|
|
8
9
|
|
|
9
10
|
export function registerEngine(program: Command): void {
|
|
10
11
|
const engine = program
|
|
@@ -16,14 +17,14 @@ export function registerEngine(program: Command): void {
|
|
|
16
17
|
.description("Check if the schema engine container is reachable")
|
|
17
18
|
.action(async () => {
|
|
18
19
|
const url = process.env["SUPATYPE_ENGINE_URL"] ?? "http://localhost:7500"
|
|
19
|
-
|
|
20
|
+
info(`Checking engine at ${url}...`)
|
|
20
21
|
|
|
21
22
|
const healthy = await engineHealth()
|
|
22
23
|
if (healthy) {
|
|
23
|
-
|
|
24
|
+
info("Engine is reachable and healthy.")
|
|
24
25
|
} else {
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
error("Engine is not reachable.")
|
|
27
|
+
error("Make sure the engine container is running (supatype dev or docker compose up).")
|
|
27
28
|
process.exitCode = 1
|
|
28
29
|
}
|
|
29
30
|
})
|