@supatype/cli 0.1.1 → 0.1.2
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 +1 -1
- package/.turbo/turbo-test.log +114 -90
- package/.turbo/turbo-typecheck.log +2 -2
- package/dist/binary-cache.d.ts +2 -0
- package/dist/binary-cache.d.ts.map +1 -1
- package/dist/binary-cache.js +36 -0
- package/dist/binary-cache.js.map +1 -1
- package/dist/binary-download-lock.d.ts +12 -0
- package/dist/binary-download-lock.d.ts.map +1 -0
- package/dist/binary-download-lock.js +106 -0
- package/dist/binary-download-lock.js.map +1 -0
- package/dist/cli-package-version.d.ts +3 -0
- package/dist/cli-package-version.d.ts.map +1 -0
- package/dist/cli-package-version.js +15 -0
- package/dist/cli-package-version.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +5 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.js +25 -19
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/admin.d.ts.map +1 -1
- package/dist/commands/admin.js +22 -6
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/cache.d.ts +1 -1
- package/dist/commands/cache.d.ts.map +1 -1
- package/dist/commands/cache.js +98 -5
- package/dist/commands/cache.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +26 -22
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/init.d.ts +3 -4
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +238 -168
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/link-helpers.d.ts.map +1 -1
- package/dist/commands/link-helpers.js +26 -25
- package/dist/commands/link-helpers.js.map +1 -1
- package/dist/compose-local-server-image.d.ts +13 -0
- package/dist/compose-local-server-image.d.ts.map +1 -0
- package/dist/compose-local-server-image.js +57 -0
- package/dist/compose-local-server-image.js.map +1 -0
- package/dist/compose-rename.d.ts.map +1 -1
- package/dist/compose-rename.js +5 -8
- package/dist/compose-rename.js.map +1 -1
- package/dist/dev-compose.d.ts.map +1 -1
- package/dist/dev-compose.js +111 -54
- package/dist/dev-compose.js.map +1 -1
- package/dist/dev-log-bus.d.ts +5 -0
- package/dist/dev-log-bus.d.ts.map +1 -1
- package/dist/dev-log-bus.js +14 -0
- package/dist/dev-log-bus.js.map +1 -1
- package/dist/dev-log-filter.d.ts +4 -0
- package/dist/dev-log-filter.d.ts.map +1 -1
- package/dist/dev-log-filter.js +52 -0
- package/dist/dev-log-filter.js.map +1 -1
- package/dist/dev-ports.d.ts.map +1 -1
- package/dist/dev-ports.js +19 -12
- package/dist/dev-ports.js.map +1 -1
- package/dist/dev-ready-panel.d.ts +19 -0
- package/dist/dev-ready-panel.d.ts.map +1 -0
- package/dist/dev-ready-panel.js +49 -0
- package/dist/dev-ready-panel.js.map +1 -0
- package/dist/dev-session-lock.d.ts.map +1 -1
- package/dist/dev-session-lock.js +5 -8
- package/dist/dev-session-lock.js.map +1 -1
- package/dist/dev-session.d.ts +18 -5
- package/dist/dev-session.d.ts.map +1 -1
- package/dist/dev-session.js +91 -18
- package/dist/dev-session.js.map +1 -1
- package/dist/dev-shutdown.d.ts +2 -0
- package/dist/dev-shutdown.d.ts.map +1 -1
- package/dist/dev-shutdown.js +29 -15
- package/dist/dev-shutdown.js.map +1 -1
- package/dist/dev-task-colors.d.ts +3 -1
- package/dist/dev-task-colors.d.ts.map +1 -1
- package/dist/dev-task-colors.js +23 -3
- package/dist/dev-task-colors.js.map +1 -1
- package/dist/docker-runtime.js +1 -1
- package/dist/docker-runtime.js.map +1 -1
- package/dist/engine-push-output.d.ts +1 -0
- package/dist/engine-push-output.d.ts.map +1 -1
- package/dist/engine-push-output.js +4 -1
- package/dist/engine-push-output.js.map +1 -1
- package/dist/ensure-binary.d.ts.map +1 -1
- package/dist/ensure-binary.js +14 -2
- package/dist/ensure-binary.js.map +1 -1
- package/dist/ensure-component-binaries.d.ts +17 -0
- package/dist/ensure-component-binaries.d.ts.map +1 -0
- package/dist/ensure-component-binaries.js +45 -0
- package/dist/ensure-component-binaries.js.map +1 -0
- package/dist/ensure-dev-api-config.d.ts +3 -0
- package/dist/ensure-dev-api-config.d.ts.map +1 -0
- package/dist/ensure-dev-api-config.js +17 -0
- package/dist/ensure-dev-api-config.js.map +1 -0
- package/dist/init-dependency-versions.d.ts +13 -0
- package/dist/init-dependency-versions.d.ts.map +1 -0
- package/dist/init-dependency-versions.js +53 -0
- package/dist/init-dependency-versions.js.map +1 -0
- package/dist/init-package-json.d.ts +21 -0
- package/dist/init-package-json.d.ts.map +1 -0
- package/dist/init-package-json.js +46 -0
- package/dist/init-package-json.js.map +1 -0
- package/dist/postgres-ctl.d.ts.map +1 -1
- package/dist/postgres-ctl.js +2 -1
- package/dist/postgres-ctl.js.map +1 -1
- package/dist/required-host-components.d.ts +11 -0
- package/dist/required-host-components.d.ts.map +1 -0
- package/dist/required-host-components.js +25 -0
- package/dist/required-host-components.js.map +1 -0
- package/dist/resolve-api-url.d.ts +6 -0
- package/dist/resolve-api-url.d.ts.map +1 -0
- package/dist/resolve-api-url.js +39 -0
- package/dist/resolve-api-url.js.map +1 -0
- package/dist/rest-cache-admin.d.ts +33 -0
- package/dist/rest-cache-admin.d.ts.map +1 -0
- package/dist/rest-cache-admin.js +96 -0
- package/dist/rest-cache-admin.js.map +1 -0
- package/dist/scripts/postinstall.d.ts +4 -6
- package/dist/scripts/postinstall.d.ts.map +1 -1
- package/dist/scripts/postinstall.js +8 -41
- package/dist/scripts/postinstall.js.map +1 -1
- package/dist/self-host-compose.d.ts.map +1 -1
- package/dist/self-host-compose.js +23 -13
- package/dist/self-host-compose.js.map +1 -1
- package/dist/studio-dev-server.d.ts +4 -2
- package/dist/studio-dev-server.d.ts.map +1 -1
- package/dist/studio-dev-server.js +3 -2
- package/dist/studio-dev-server.js.map +1 -1
- package/dist/ui/brand.d.ts +2 -5
- package/dist/ui/brand.d.ts.map +1 -1
- package/dist/ui/brand.js +2 -7
- package/dist/ui/brand.js.map +1 -1
- package/dist/ui/clack-api.d.ts +44 -0
- package/dist/ui/clack-api.d.ts.map +1 -0
- package/dist/ui/clack-api.js +76 -0
- package/dist/ui/clack-api.js.map +1 -0
- package/dist/ui/clack.d.ts +14 -0
- package/dist/ui/clack.d.ts.map +1 -0
- package/dist/ui/clack.js +147 -0
- package/dist/ui/clack.js.map +1 -0
- package/dist/ui/components/FlowSpinner.d.ts +5 -0
- package/dist/ui/components/FlowSpinner.d.ts.map +1 -0
- package/dist/ui/components/FlowSpinner.js +8 -0
- package/dist/ui/components/FlowSpinner.js.map +1 -0
- package/dist/ui/components/LogoWordmark.d.ts +9 -0
- package/dist/ui/components/LogoWordmark.d.ts.map +1 -0
- package/dist/ui/components/LogoWordmark.js +17 -0
- package/dist/ui/components/LogoWordmark.js.map +1 -0
- package/dist/ui/components/PromptPanel.d.ts +5 -0
- package/dist/ui/components/PromptPanel.d.ts.map +1 -0
- package/dist/ui/components/PromptPanel.js +7 -0
- package/dist/ui/components/PromptPanel.js.map +1 -0
- package/dist/ui/components/SelectField.d.ts +11 -0
- package/dist/ui/components/SelectField.d.ts.map +1 -0
- package/dist/ui/components/SelectField.js +19 -0
- package/dist/ui/components/SelectField.js.map +1 -0
- package/dist/ui/confirm.d.ts +2 -1
- package/dist/ui/confirm.d.ts.map +1 -1
- package/dist/ui/confirm.js +4 -4
- package/dist/ui/confirm.js.map +1 -1
- package/dist/ui/dev/DevDashboard.d.ts +8 -0
- package/dist/ui/dev/DevDashboard.d.ts.map +1 -0
- package/dist/ui/dev/DevDashboard.js +151 -0
- package/dist/ui/dev/DevDashboard.js.map +1 -0
- package/dist/ui/dev/DevReadyPanelView.d.ts +7 -0
- package/dist/ui/dev/DevReadyPanelView.d.ts.map +1 -0
- package/dist/ui/dev/DevReadyPanelView.js +29 -0
- package/dist/ui/dev/DevReadyPanelView.js.map +1 -0
- package/dist/ui/fatal.d.ts.map +1 -1
- package/dist/ui/fatal.js +5 -11
- package/dist/ui/fatal.js.map +1 -1
- package/dist/ui/flows/FlowApp.d.ts +8 -0
- package/dist/ui/flows/FlowApp.d.ts.map +1 -0
- package/dist/ui/flows/FlowApp.js +42 -0
- package/dist/ui/flows/FlowApp.js.map +1 -0
- package/dist/ui/flows/prompt-fields.d.ts +48 -0
- package/dist/ui/flows/prompt-fields.d.ts.map +1 -0
- package/dist/ui/flows/prompt-fields.js +88 -0
- package/dist/ui/flows/prompt-fields.js.map +1 -0
- package/dist/ui/flows/types.d.ts +41 -0
- package/dist/ui/flows/types.d.ts.map +1 -0
- package/dist/ui/flows/types.js +2 -0
- package/dist/ui/flows/types.js.map +1 -0
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +1 -1
- package/dist/ui/messages.d.ts +1 -0
- package/dist/ui/messages.d.ts.map +1 -1
- package/dist/ui/messages.js +48 -8
- package/dist/ui/messages.js.map +1 -1
- package/dist/ui/progress.d.ts +5 -1
- package/dist/ui/progress.d.ts.map +1 -1
- package/dist/ui/progress.js +12 -3
- package/dist/ui/progress.js.map +1 -1
- package/dist/ui/prompts.d.ts +7 -5
- package/dist/ui/prompts.d.ts.map +1 -1
- package/dist/ui/prompts.js +15 -8
- package/dist/ui/prompts.js.map +1 -1
- package/dist/ui/runtime/cancel.d.ts +4 -0
- package/dist/ui/runtime/cancel.d.ts.map +1 -0
- package/dist/ui/runtime/cancel.js +6 -0
- package/dist/ui/runtime/cancel.js.map +1 -0
- package/dist/ui/runtime/command-chrome.d.ts +17 -0
- package/dist/ui/runtime/command-chrome.d.ts.map +1 -0
- package/dist/ui/runtime/command-chrome.js +123 -0
- package/dist/ui/runtime/command-chrome.js.map +1 -0
- package/dist/ui/runtime/dev-prompt-queue.d.ts +30 -0
- package/dist/ui/runtime/dev-prompt-queue.d.ts.map +1 -0
- package/dist/ui/runtime/dev-prompt-queue.js +57 -0
- package/dist/ui/runtime/dev-prompt-queue.js.map +1 -0
- package/dist/ui/runtime/flow-session.d.ts +4 -0
- package/dist/ui/runtime/flow-session.d.ts.map +1 -0
- package/dist/ui/runtime/flow-session.js +8 -0
- package/dist/ui/runtime/flow-session.js.map +1 -0
- package/dist/ui/runtime/run-clack-flow.d.ts +5 -0
- package/dist/ui/runtime/run-clack-flow.d.ts.map +1 -0
- package/dist/ui/runtime/run-clack-flow.js +34 -0
- package/dist/ui/runtime/run-clack-flow.js.map +1 -0
- package/dist/ui/theme.d.ts +24 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +34 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/valkey-sidecar.d.ts +17 -0
- package/dist/valkey-sidecar.d.ts.map +1 -0
- package/dist/valkey-sidecar.js +94 -0
- package/dist/valkey-sidecar.js.map +1 -0
- package/package.json +9 -3
- package/src/binary-cache.ts +61 -0
- package/src/binary-download-lock.ts +124 -0
- package/src/cli-package-version.ts +15 -0
- package/src/cli.ts +6 -2
- package/src/commands/add.ts +26 -19
- package/src/commands/admin.ts +24 -6
- package/src/commands/cache.ts +105 -5
- package/src/commands/dev.ts +26 -21
- package/src/commands/init.ts +124 -45
- package/src/commands/link-helpers.ts +30 -29
- package/src/compose-local-server-image.ts +68 -0
- package/src/compose-rename.ts +5 -8
- package/src/dev-compose.ts +136 -51
- package/src/dev-log-bus.ts +18 -0
- package/src/dev-log-filter.ts +42 -0
- package/src/dev-ports.ts +22 -11
- package/src/dev-ready-panel.ts +63 -0
- package/src/dev-session-lock.ts +5 -8
- package/src/dev-session.ts +98 -18
- package/src/dev-shutdown.ts +29 -17
- package/src/dev-task-colors.ts +22 -3
- package/src/docker-runtime.ts +1 -1
- package/src/engine-push-output.ts +5 -1
- package/src/ensure-binary.ts +21 -1
- package/src/ensure-component-binaries.ts +71 -0
- package/src/ensure-dev-api-config.ts +18 -0
- package/src/init-dependency-versions.ts +69 -0
- package/src/init-package-json.ts +63 -0
- package/src/postgres-ctl.ts +2 -1
- package/src/required-host-components.ts +37 -0
- package/src/resolve-api-url.ts +43 -0
- package/src/rest-cache-admin.ts +135 -0
- package/src/scripts/postinstall.ts +9 -46
- package/src/self-host-compose.ts +22 -12
- package/src/studio-dev-server.ts +5 -4
- package/src/ui/README.md +13 -9
- package/src/ui/brand.ts +2 -8
- package/src/ui/clack-api.ts +123 -0
- package/src/ui/clack.ts +153 -0
- package/src/ui/components/FlowSpinner.tsx +15 -0
- package/src/ui/components/LogoWordmark.tsx +36 -0
- package/src/ui/components/PromptPanel.tsx +17 -0
- package/src/ui/components/SelectField.tsx +58 -0
- package/src/ui/confirm.ts +5 -4
- package/src/ui/dev/DevDashboard.tsx +213 -0
- package/src/ui/dev/DevReadyPanelView.tsx +67 -0
- package/src/ui/fatal.ts +5 -10
- package/src/ui/flows/FlowApp.tsx +67 -0
- package/src/ui/flows/prompt-fields.tsx +192 -0
- package/src/ui/flows/types.ts +50 -0
- package/src/ui/index.ts +1 -1
- package/src/ui/messages.ts +50 -8
- package/src/ui/progress.ts +14 -3
- package/src/ui/prompts.ts +17 -9
- package/src/ui/runtime/cancel.ts +6 -0
- package/src/ui/runtime/command-chrome.ts +147 -0
- package/src/ui/runtime/dev-prompt-queue.ts +84 -0
- package/src/ui/runtime/flow-session.ts +11 -0
- package/src/ui/runtime/run-clack-flow.tsx +52 -0
- package/src/ui/theme.ts +41 -0
- package/src/valkey-sidecar.ts +126 -0
- package/tests/binary-cache-cloud-overrides.test.ts +2 -2
- package/tests/binary-download-lock.test.ts +41 -0
- package/tests/cli-help.test.ts +7 -4
- package/tests/cli-package-version.test.ts +15 -0
- package/tests/command-chrome-coverage.test.ts +149 -0
- package/tests/command-chrome-wrap.test.ts +51 -0
- package/tests/config.test.ts +8 -4
- package/tests/dev-ready-panel.test.ts +20 -0
- package/tests/dev-ui.test.ts +42 -2
- package/tests/docker-runtime.test.ts +9 -20
- package/tests/ensure-dev-api-config.test.ts +22 -0
- package/tests/init-dependency-versions.test.ts +62 -0
- package/tests/init-package-json.test.ts +18 -0
- package/tests/init.test.ts +30 -3
- package/tests/required-host-components.test.ts +51 -0
- package/tests/resolve-api-url.test.ts +23 -0
- package/tests/rest-cache-admin.test.ts +28 -0
- package/tests/runtime-contract.test.ts +12 -3
- package/tests/tsconfig.json +8 -2
- package/tests/ui-confirm.test.ts +13 -9
- package/tests/ui-messages.test.ts +4 -18
- package/tsconfig.json +1 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/vitest.config.ts +3 -0
- package/dist/dev-tui.d.ts +0 -24
- package/dist/dev-tui.d.ts.map +0 -1
- package/dist/dev-tui.js +0 -188
- package/dist/dev-tui.js.map +0 -1
- package/src/dev-tui.ts +0 -232
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-helpers.d.ts","sourceRoot":"","sources":["../../src/commands/link-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,YAAY,CAAA;AA6BnB,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgFnD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS1D;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"link-helpers.d.ts","sourceRoot":"","sources":["../../src/commands/link-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,YAAY,CAAA;AA6BnB,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgFnD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS1D;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8HhB;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAOtD"}
|
|
@@ -5,7 +5,7 @@ import { targetFetch } from "../target-client.js";
|
|
|
5
5
|
import { error, info, plain } from "../ui/messages.js";
|
|
6
6
|
import { nextSteps } from "../ui/next-steps.js";
|
|
7
7
|
import { isInteractive } from "../ui/interactive.js";
|
|
8
|
-
import { ensureNotCancelled,
|
|
8
|
+
import { ensureNotCancelled, p, runClackFlow } from "../ui/prompts.js";
|
|
9
9
|
function resolveLinkToken(opts) {
|
|
10
10
|
return (opts.token ??
|
|
11
11
|
opts.serviceRoleKey ??
|
|
@@ -112,30 +112,31 @@ export async function runLinkAction(opts) {
|
|
|
112
112
|
let project = opts.project;
|
|
113
113
|
let url = opts.url;
|
|
114
114
|
if (isInteractive() && !project && !url) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
115
|
+
await runClackFlow(async () => {
|
|
116
|
+
p.intro("Link this project");
|
|
117
|
+
const targetKind = ensureNotCancelled(await p.select({
|
|
118
|
+
message: "Link target",
|
|
119
|
+
options: [
|
|
120
|
+
{ value: "cloud", label: "Supatype Cloud", hint: "managed project on supatype.com" },
|
|
121
|
+
{ value: "self-host", label: "Self-host", hint: "your Kong gateway URL" },
|
|
122
|
+
],
|
|
123
|
+
}));
|
|
124
|
+
if (targetKind === "cloud") {
|
|
125
|
+
project = ensureNotCancelled(await p.text({
|
|
126
|
+
message: "Cloud project slug",
|
|
127
|
+
placeholder: projectRef,
|
|
128
|
+
defaultValue: projectRef,
|
|
129
|
+
})).trim();
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
url = ensureNotCancelled(await p.text({
|
|
133
|
+
message: "Kong gateway URL",
|
|
134
|
+
placeholder: "https://api.example.com",
|
|
135
|
+
defaultValue: "http://localhost:18473",
|
|
136
|
+
})).trim();
|
|
137
|
+
}
|
|
138
|
+
p.outro("Linking...");
|
|
139
|
+
});
|
|
139
140
|
}
|
|
140
141
|
const token = resolveLinkToken(opts);
|
|
141
142
|
if (opts.fixGitignore) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-helpers.js","sourceRoot":"","sources":["../../src/commands/link-helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,eAAe,GAEhB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"link-helpers.js","sourceRoot":"","sources":["../../src/commands/link-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SupatypeProjectConfig } from "./project-config.js";
|
|
2
|
+
/** Docker tag for compose dev when `versions.server` is `local`. */
|
|
3
|
+
export declare const LOCAL_SERVER_DOCKER_IMAGE = "supatype/server:local-dev";
|
|
4
|
+
/** Find the server repo root (directory containing `Dockerfile`) from an overrides.server binary path. */
|
|
5
|
+
export declare function resolveServerSourceRoot(serverOverride: string, cwd: string): string | null;
|
|
6
|
+
/**
|
|
7
|
+
* When `versions.server` is `local`, build a Linux server image from the source tree
|
|
8
|
+
* next to `overrides.server` so compose dev matches the contributor's binary.
|
|
9
|
+
*/
|
|
10
|
+
export declare function ensureLocalServerDockerImage(cwd: string, config: SupatypeProjectConfig, brand?: {
|
|
11
|
+
intro?: string;
|
|
12
|
+
}): Promise<string | undefined>;
|
|
13
|
+
//# sourceMappingURL=compose-local-server-image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-local-server-image.d.ts","sourceRoot":"","sources":["../src/compose-local-server-image.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhE,oEAAoE;AACpE,eAAO,MAAM,yBAAyB,8BAA8B,CAAA;AAEpE,0GAA0G;AAC1G,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU1F;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,qBAAqB,EAC7B,KAAK,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmC7B"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
3
|
+
import { spawnSync } from "node:child_process";
|
|
4
|
+
import { VERSION_PIN_LOCAL } from "./binary-cache.js";
|
|
5
|
+
import { appendStackOutput, getActiveDevSession } from "./dev-session.js";
|
|
6
|
+
import { requireDockerDaemon } from "./docker-runtime.js";
|
|
7
|
+
/** Docker tag for compose dev when `versions.server` is `local`. */
|
|
8
|
+
export const LOCAL_SERVER_DOCKER_IMAGE = "supatype/server:local-dev";
|
|
9
|
+
/** Find the server repo root (directory containing `Dockerfile`) from an overrides.server binary path. */
|
|
10
|
+
export function resolveServerSourceRoot(serverOverride, cwd) {
|
|
11
|
+
const binaryPath = isAbsolute(serverOverride) ? serverOverride : resolve(cwd, serverOverride);
|
|
12
|
+
let dir = dirname(binaryPath);
|
|
13
|
+
for (let depth = 0; depth < 5; depth++) {
|
|
14
|
+
if (existsSync(join(dir, "Dockerfile")))
|
|
15
|
+
return dir;
|
|
16
|
+
const parent = dirname(dir);
|
|
17
|
+
if (parent === dir)
|
|
18
|
+
break;
|
|
19
|
+
dir = parent;
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* When `versions.server` is `local`, build a Linux server image from the source tree
|
|
25
|
+
* next to `overrides.server` so compose dev matches the contributor's binary.
|
|
26
|
+
*/
|
|
27
|
+
export async function ensureLocalServerDockerImage(cwd, config, brand) {
|
|
28
|
+
if (config.versions?.server !== VERSION_PIN_LOCAL)
|
|
29
|
+
return undefined;
|
|
30
|
+
const override = config.overrides?.server?.trim();
|
|
31
|
+
if (!override)
|
|
32
|
+
return undefined;
|
|
33
|
+
const root = resolveServerSourceRoot(override, cwd);
|
|
34
|
+
if (!root) {
|
|
35
|
+
console.warn(`[supatype] ⚠ versions.server is "local" but no Dockerfile found near ${override}. ` +
|
|
36
|
+
"Compose will use the default supatype/server:latest image.");
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
requireDockerDaemon(brand?.intro ? { brand: { intro: brand.intro } } : undefined);
|
|
40
|
+
const dockerfile = join(root, "Dockerfile");
|
|
41
|
+
console.log(`[supatype] Building local server Docker image from ${root}…`);
|
|
42
|
+
const result = spawnSync("docker", ["build", "--progress=plain", "-t", LOCAL_SERVER_DOCKER_IMAGE, "-f", dockerfile, root], { encoding: "utf8", stdio: "pipe" });
|
|
43
|
+
const tui = getActiveDevSession()?.isTui() ?? false;
|
|
44
|
+
if (!tui) {
|
|
45
|
+
appendStackOutput(result.stdout, "log");
|
|
46
|
+
appendStackOutput(result.stderr, result.status === 0 ? "log" : "error");
|
|
47
|
+
}
|
|
48
|
+
else if (result.status !== 0) {
|
|
49
|
+
appendStackOutput(result.stderr || result.stdout || "docker build failed", "error");
|
|
50
|
+
}
|
|
51
|
+
if (result.status !== 0) {
|
|
52
|
+
throw new Error(`docker build failed for local server (exit ${result.status ?? "unknown"})`);
|
|
53
|
+
}
|
|
54
|
+
console.log(`[supatype] Local server image ready: ${LOCAL_SERVER_DOCKER_IMAGE}`);
|
|
55
|
+
return LOCAL_SERVER_DOCKER_IMAGE;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=compose-local-server-image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-local-server-image.js","sourceRoot":"","sources":["../src/compose-local-server-image.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-rename.d.ts","sourceRoot":"","sources":["../src/compose-rename.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"compose-rename.d.ts","sourceRoot":"","sources":["../src/compose-rename.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAwC,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAKxG;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,MAAM,EACX,kBAAkB,EAAE,MAAM,EAC1B,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAkCf"}
|
package/dist/compose-rename.js
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { existsSync, readFileSync } from "node:fs";
|
|
5
5
|
import { join } from "node:path";
|
|
6
|
-
import * as p from "@clack/prompts";
|
|
7
6
|
import { loadLocalEnvironment } from "./link.js";
|
|
8
7
|
import { composeStackHasContainers } from "./dev-session-lock.js";
|
|
9
8
|
import { composeProjectName, runDockerCompose } from "./self-host-compose.js";
|
|
9
|
+
import { confirm as uiConfirm } from "./ui/confirm.js";
|
|
10
10
|
import { isInteractive } from "./ui/interactive.js";
|
|
11
|
-
import { warn } from "./ui/messages.js";
|
|
11
|
+
import { success, warn } from "./ui/messages.js";
|
|
12
12
|
/**
|
|
13
13
|
* When `project.name` changes, the compose project slug changes too (`supatype-{name}`).
|
|
14
14
|
* Offer to stop containers from the previous slug so volumes/ports do not linger.
|
|
@@ -31,17 +31,14 @@ export async function handleComposeProjectRename(cwd, currentProjectName, paths)
|
|
|
31
31
|
warn(`Stop it manually: docker compose -p ${previousCompose} down`);
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
-
const stopOld = await
|
|
35
|
-
|
|
36
|
-
initialValue: true,
|
|
37
|
-
});
|
|
38
|
-
if (p.isCancel(stopOld) || !stopOld) {
|
|
34
|
+
const stopOld = await uiConfirm(`${message}\n\nStop the old Docker stack now?`, { default: true });
|
|
35
|
+
if (!stopOld) {
|
|
39
36
|
warn(`Leaving "${previousCompose}" running. Stop it with: docker compose -p ${previousCompose} down`);
|
|
40
37
|
return;
|
|
41
38
|
}
|
|
42
39
|
const status = runDockerCompose(paths.composePath, ["down"], cwd, previousCompose, { quiet: true });
|
|
43
40
|
if (status === 0) {
|
|
44
|
-
|
|
41
|
+
success(`Stopped old stack "${previousCompose}".`);
|
|
45
42
|
warnIfHardcodedComposeScripts(cwd, previousCompose);
|
|
46
43
|
}
|
|
47
44
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-rename.js","sourceRoot":"","sources":["../src/compose-rename.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"compose-rename.js","sourceRoot":"","sources":["../src/compose-rename.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-compose.d.ts","sourceRoot":"","sources":["../src/dev-compose.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,EAML,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"dev-compose.d.ts","sourceRoot":"","sources":["../src/dev-compose.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,EAML,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAA;AAiB5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAI7D,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAuBjF,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAIrF;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAA;CACf;AAED,kEAAkE;AAClE,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAkBD;;;GAGG;AACH,wBAAsB,oCAAoC,CACxD,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,qBAAqB,EAC7B,KAAK,CAAC,EAAE,kBAAkB,GACzB,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,qBAAqB,EAC7B,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAIT;AAED;;;;GAIG;AACH,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,qBAAqB,EAC7B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAkZD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CA6DtG;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+ChG;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4MtH"}
|
package/dist/dev-compose.js
CHANGED
|
@@ -5,20 +5,22 @@ import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
|
5
5
|
import { homedir } from "node:os";
|
|
6
6
|
import { dirname, join, resolve } from "node:path";
|
|
7
7
|
import { spawnSync } from "node:child_process";
|
|
8
|
-
import { startProxyDevApp } from "./app/proxy-dev-app.js";
|
|
8
|
+
import { startProxyDevApp, resolveProxyDevScript } from "./app/proxy-dev-app.js";
|
|
9
9
|
import { loadSchemaAst } from "./config.js";
|
|
10
10
|
import { connectionString, projectRootFromConfig, resolveRuntimeProvider, schemaPathFromProject, } from "./project-config.js";
|
|
11
11
|
import { signJwt } from "./jwt.js";
|
|
12
12
|
import { ensureDevDbPort, ensureKongPort } from "./dev-ports.js";
|
|
13
13
|
import { handleComposeProjectRename } from "./compose-rename.js";
|
|
14
14
|
import { recoverStaleDevSession, writeDevSessionLock } from "./dev-session-lock.js";
|
|
15
|
-
import {
|
|
15
|
+
import { endDevSession, startDevSession } from "./dev-session.js";
|
|
16
|
+
import { ensureDevApiConfig } from "./ensure-dev-api-config.js";
|
|
16
17
|
import { COMPOSE_PINNED_IMAGE_ENV_KEYS, composeDockerImageEnv, composeProjectName, exitComposeFailed, runDockerCompose, schemaEngineImageForPush, writeSelfHostCompose, } from "./self-host-compose.js";
|
|
17
18
|
import { hasEngineOverride } from "./binary-cache.js";
|
|
18
|
-
import { startStudioViteDevServer } from "./studio-dev-server.js";
|
|
19
|
+
import { STUDIO_DEV_PORT, startStudioViteDevServer } from "./studio-dev-server.js";
|
|
20
|
+
import { ensureLocalServerDockerImage } from "./compose-local-server-image.js";
|
|
19
21
|
import { ensureEngine, engineRequest } from "./engine-client.js";
|
|
20
22
|
import { writeSchemaSourcePushArtifacts } from "./schema-sources.js";
|
|
21
|
-
import {
|
|
23
|
+
import { readEnvValue, upsertEnvFile } from "./env-file.js";
|
|
22
24
|
import { writeLocalEnvironment } from "./link.js";
|
|
23
25
|
import { registerDevShutdown } from "./dev-shutdown.js";
|
|
24
26
|
import { filterComposeNoise, formatEnginePushMessage, parseEngineJsonOutput, parseEnginePushOutput, } from "./engine-push-output.js";
|
|
@@ -26,6 +28,7 @@ import { withAdminRoles } from "./studio-admin-roles.js";
|
|
|
26
28
|
import { restoreSystemRelationTargets } from "./restore-system-relation-targets.js";
|
|
27
29
|
import { provisionBucketsFromAst } from "./storage-provision.js";
|
|
28
30
|
import { ensureFirstAdminUserForProject } from "./commands/admin.js";
|
|
31
|
+
import { publishDevReady } from "./dev-ready-panel.js";
|
|
29
32
|
const LOCAL_JWT_SECRET = "super-secret-jwt-token-with-at-least-32-characters-long";
|
|
30
33
|
/** Default host port for compose Postgres when `overrides.engine` is set (devLocal). */
|
|
31
34
|
const COMPOSE_DEV_DB_PORT = 54329;
|
|
@@ -113,7 +116,7 @@ export async function resolveHostEngineDatabaseUrl(cwd, config, explicit) {
|
|
|
113
116
|
async function resolveKongPort(cwd) {
|
|
114
117
|
return ensureKongPort(cwd, { context: "dev" });
|
|
115
118
|
}
|
|
116
|
-
function upsertDevComposeEnv(cwd, config, anonKey, serviceRoleKey, kongPort, devDbPort) {
|
|
119
|
+
function upsertDevComposeEnv(cwd, config, anonKey, serviceRoleKey, kongPort, devDbPort, localServerImage) {
|
|
117
120
|
const apiUrl = `http://localhost:${kongPort}`;
|
|
118
121
|
const imagePins = composeDockerImageEnv(config);
|
|
119
122
|
const updates = {
|
|
@@ -131,6 +134,7 @@ function upsertDevComposeEnv(cwd, config, anonKey, serviceRoleKey, kongPort, dev
|
|
|
131
134
|
SITE_URL: apiUrl,
|
|
132
135
|
GOTRUE_MAILER_AUTOCONFIRM: "true",
|
|
133
136
|
...imagePins,
|
|
137
|
+
...(localServerImage !== undefined && { SUPATYPE_SERVER_IMAGE: localServerImage }),
|
|
134
138
|
};
|
|
135
139
|
if (devDbPort !== undefined) {
|
|
136
140
|
updates.SUPATYPE_DEV_DB_PORT = String(devDbPort);
|
|
@@ -141,8 +145,8 @@ function upsertDevComposeEnv(cwd, config, anonKey, serviceRoleKey, kongPort, dev
|
|
|
141
145
|
upsertEnvFile(cwd, updates, removeImageKeys);
|
|
142
146
|
}
|
|
143
147
|
/** Keep compose + Studio on the same freshly signed dev JWTs; sync optional image pins from config. */
|
|
144
|
-
function ensureDevComposeEnv(cwd, config, anonKey, serviceRoleKey, kongPort, devDbPort) {
|
|
145
|
-
upsertDevComposeEnv(cwd, config, anonKey, serviceRoleKey, kongPort, devDbPort);
|
|
148
|
+
function ensureDevComposeEnv(cwd, config, anonKey, serviceRoleKey, kongPort, devDbPort, localServerImage) {
|
|
149
|
+
upsertDevComposeEnv(cwd, config, anonKey, serviceRoleKey, kongPort, devDbPort, localServerImage);
|
|
146
150
|
}
|
|
147
151
|
async function waitComposeHealthy(paths, cwd, maxMs, composeProject) {
|
|
148
152
|
const composeDir = dirname(paths.composePath);
|
|
@@ -174,6 +178,29 @@ async function waitKongReady(kongPort, maxSec) {
|
|
|
174
178
|
}
|
|
175
179
|
throw new Error(`Kong gateway at ${base} did not become ready within ${maxSec}s`);
|
|
176
180
|
}
|
|
181
|
+
/** Kong may be up while server → storage is still starting (503 or upstream errors). */
|
|
182
|
+
async function waitStorageApiReady(kongPort, serviceRoleKey, maxSec) {
|
|
183
|
+
const url = `http://localhost:${kongPort}/storage/v1/bucket`;
|
|
184
|
+
const headers = { Authorization: `Bearer ${serviceRoleKey}` };
|
|
185
|
+
for (let i = 0; i < maxSec; i++) {
|
|
186
|
+
try {
|
|
187
|
+
const res = await fetch(url, { headers });
|
|
188
|
+
if (res.ok)
|
|
189
|
+
return;
|
|
190
|
+
const body = await res.text();
|
|
191
|
+
const kongUpstreamDown = body.includes("invalid response was received from the upstream server");
|
|
192
|
+
if (!kongUpstreamDown && res.status !== 503) {
|
|
193
|
+
// Non-transient storage response (e.g. 401) — stop waiting.
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
/* retry */
|
|
199
|
+
}
|
|
200
|
+
await new Promise((r) => setTimeout(r, 1000));
|
|
201
|
+
}
|
|
202
|
+
console.warn(`[supatype] Storage API at ${url} did not become ready within ${maxSec}s — bucket provisioning may fail.`);
|
|
203
|
+
}
|
|
177
204
|
async function provisionDockerStorageBuckets(ast, kongPort, serviceRoleKey) {
|
|
178
205
|
await provisionBucketsFromAst(ast, `http://localhost:${kongPort}/storage/v1`, serviceRoleKey);
|
|
179
206
|
}
|
|
@@ -482,6 +509,7 @@ export async function pushSchemaDocker(cwd, config) {
|
|
|
482
509
|
exitComposeFailed(upGateway, "Could not start the Compose gateway stack.", pushBrand);
|
|
483
510
|
}
|
|
484
511
|
await waitKongReady(kongPort, 120);
|
|
512
|
+
await waitStorageApiReady(kongPort, serviceRoleKey, 90);
|
|
485
513
|
await provisionDockerStorageBuckets(ast, kongPort, serviceRoleKey);
|
|
486
514
|
await ensureFirstAdminUserForProject(cwd, config, {
|
|
487
515
|
compose: { project, composePath: paths.composePath },
|
|
@@ -501,12 +529,44 @@ export async function runDevCompose(cwd, config, opts) {
|
|
|
501
529
|
const jwtBase = { iss: "supatype", iat: now, exp: now + 315_360_000 };
|
|
502
530
|
const anonKey = signJwt({ ...jwtBase, role: "anon" }, LOCAL_JWT_SECRET);
|
|
503
531
|
const serviceRoleKey = signJwt({ ...jwtBase, role: "service_role" }, LOCAL_JWT_SECRET);
|
|
504
|
-
|
|
532
|
+
const devBrand = { intro: "Local development" };
|
|
533
|
+
const localServerImage = await ensureLocalServerDockerImage(cwd, config, devBrand);
|
|
534
|
+
ensureDevComposeEnv(cwd, config, anonKey, serviceRoleKey, kongPort, devDbPort, localServerImage);
|
|
505
535
|
console.log(`[supatype] provider: docker — starting self-host Compose stack (project ${project}, gateway :${kongPort})...`);
|
|
506
536
|
const paths = writeSelfHostCompose(cwd, config, { devLocal: true });
|
|
537
|
+
if (ensureDevApiConfig(cwd)) {
|
|
538
|
+
console.log("[supatype] API config written to .supatype/api-config.json");
|
|
539
|
+
}
|
|
540
|
+
const shutdownState = {
|
|
541
|
+
studioProc: null,
|
|
542
|
+
appProc: null,
|
|
543
|
+
schemaWatcher: null,
|
|
544
|
+
debounceTimer: null,
|
|
545
|
+
};
|
|
546
|
+
registerDevShutdown(async () => {
|
|
547
|
+
shutdownState.schemaWatcher?.close();
|
|
548
|
+
shutdownState.schemaWatcher = null;
|
|
549
|
+
if (shutdownState.debounceTimer) {
|
|
550
|
+
clearTimeout(shutdownState.debounceTimer);
|
|
551
|
+
shutdownState.debounceTimer = null;
|
|
552
|
+
}
|
|
553
|
+
console.log("[supatype] Shutting down compose...");
|
|
554
|
+
await shutdownState.studioProc?.stop();
|
|
555
|
+
await shutdownState.appProc?.stop();
|
|
556
|
+
const downStatus = runDockerCompose(paths.composePath, ["down"], cwd, project, { quiet: true });
|
|
557
|
+
if (downStatus === 0) {
|
|
558
|
+
console.log("[supatype] Compose stack stopped.");
|
|
559
|
+
}
|
|
560
|
+
else {
|
|
561
|
+
console.warn(`[supatype] Compose down exited with status ${downStatus}.`);
|
|
562
|
+
}
|
|
563
|
+
}, {
|
|
564
|
+
cwd,
|
|
565
|
+
compose: { cwd, composePath: paths.composePath, composeProject: project },
|
|
566
|
+
});
|
|
507
567
|
await recoverStaleDevSession(cwd);
|
|
508
568
|
await handleComposeProjectRename(cwd, config.project.name, paths);
|
|
509
|
-
|
|
569
|
+
console.log("[supatype] Bringing up Docker Compose services...");
|
|
510
570
|
const upStatus = runDockerCompose(paths.composePath, ["up", "-d"], cwd, project, {
|
|
511
571
|
quiet: true,
|
|
512
572
|
brand: devBrand,
|
|
@@ -522,8 +582,18 @@ export async function runDevCompose(cwd, config, opts) {
|
|
|
522
582
|
await ensureFirstAdminUserForProject(cwd, config, {
|
|
523
583
|
compose: { project, composePath: paths.composePath },
|
|
524
584
|
});
|
|
585
|
+
if (localServerImage !== undefined) {
|
|
586
|
+
console.log("[supatype] Recreating server with local image...");
|
|
587
|
+
const recreateStatus = runDockerCompose(paths.composePath, ["up", "-d", "--force-recreate", "--no-deps", "server"], cwd, project, { quiet: true, brand: devBrand });
|
|
588
|
+
if (recreateStatus !== 0) {
|
|
589
|
+
endDevSession();
|
|
590
|
+
exitComposeFailed(recreateStatus, "Could not recreate the server container with the local image.", devBrand);
|
|
591
|
+
}
|
|
592
|
+
}
|
|
525
593
|
console.log("[supatype] Waiting for API gateway...");
|
|
526
594
|
await waitKongReady(kongPort, 120);
|
|
595
|
+
console.log("[supatype] Waiting for storage API...");
|
|
596
|
+
await waitStorageApiReady(kongPort, serviceRoleKey, 90);
|
|
527
597
|
writeLocalEnvironment(cwd, {
|
|
528
598
|
target: "local",
|
|
529
599
|
apiUrl: `http://localhost:${kongPort}`,
|
|
@@ -543,6 +613,7 @@ export async function runDevCompose(cwd, config, opts) {
|
|
|
543
613
|
await provisionDockerStorageBuckets(ast, kongPort, serviceRoleKey);
|
|
544
614
|
const pidDir = join(homedir(), ".supatype", "projects", config.project.name, "pid");
|
|
545
615
|
mkdirSync(pidDir, { recursive: true });
|
|
616
|
+
startDevSession();
|
|
546
617
|
let studioProc = null;
|
|
547
618
|
const studioOverride = config.overrides?.studio;
|
|
548
619
|
if (studioOverride) {
|
|
@@ -552,64 +623,50 @@ export async function runDevCompose(cwd, config, opts) {
|
|
|
552
623
|
pidDir,
|
|
553
624
|
serviceRoleKey,
|
|
554
625
|
proxyTarget: `http://localhost:${kongPort}`,
|
|
555
|
-
viteSupatypeUrl: `http://localhost:${
|
|
626
|
+
viteSupatypeUrl: `http://localhost:${STUDIO_DEV_PORT}`,
|
|
556
627
|
basePath: "/studio/",
|
|
557
628
|
});
|
|
558
629
|
studioProc?.start();
|
|
630
|
+
shutdownState.studioProc = studioProc;
|
|
559
631
|
if (studioProc) {
|
|
560
|
-
console.log(
|
|
632
|
+
console.log(`[supatype] Studio (overrides.studio) — live reload proxied at http://localhost:${kongPort}/studio/`);
|
|
561
633
|
}
|
|
562
634
|
}
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
if (debounceTimer) {
|
|
585
|
-
clearTimeout(debounceTimer);
|
|
586
|
-
debounceTimer = null;
|
|
587
|
-
}
|
|
588
|
-
console.log("[supatype] Shutting down compose...");
|
|
589
|
-
await studioProc?.stop();
|
|
590
|
-
await appProc?.stop();
|
|
591
|
-
const downStatus = runDockerCompose(paths.composePath, ["down"], cwd, project, { quiet: true });
|
|
592
|
-
if (downStatus === 0) {
|
|
593
|
-
console.log("[supatype] Compose stack stopped.");
|
|
594
|
-
}
|
|
595
|
-
else {
|
|
596
|
-
console.warn(`[supatype] Compose down exited with status ${downStatus}.`);
|
|
597
|
-
}
|
|
598
|
-
}, {
|
|
599
|
-
cwd,
|
|
600
|
-
compose: { cwd, composePath: paths.composePath, composeProject: project },
|
|
635
|
+
const links = [
|
|
636
|
+
{ label: "API", url: `http://localhost:${kongPort}` },
|
|
637
|
+
{ label: "REST", url: `http://localhost:${kongPort}/rest/v1/` },
|
|
638
|
+
{ label: "Auth", url: `http://localhost:${kongPort}/auth/v1/` },
|
|
639
|
+
{ label: "Storage", url: `http://localhost:${kongPort}/storage/v1/` },
|
|
640
|
+
{ label: "Realtime", url: `ws://localhost:${kongPort}/realtime/v1/` },
|
|
641
|
+
];
|
|
642
|
+
if (resolveProxyDevScript(config) !== null) {
|
|
643
|
+
links.push({ label: "App", url: `http://localhost:${kongPort}/` });
|
|
644
|
+
}
|
|
645
|
+
links.push({ label: "Studio", url: `http://localhost:${kongPort}/studio/` });
|
|
646
|
+
const hints = [];
|
|
647
|
+
if (existsSync(join(cwd, "seed.ts"))) {
|
|
648
|
+
hints.push("Demo data: pnpm seed");
|
|
649
|
+
}
|
|
650
|
+
publishDevReady({
|
|
651
|
+
title: `Services running (Docker · ${project})`,
|
|
652
|
+
links,
|
|
653
|
+
anonKey,
|
|
654
|
+
serviceRoleKey,
|
|
655
|
+
...(hints.length > 0 ? { hints } : {}),
|
|
601
656
|
});
|
|
657
|
+
const appProc = startProxyDevApp(cwd, config, pidDir);
|
|
658
|
+
shutdownState.appProc = appProc;
|
|
602
659
|
if (opts.watch) {
|
|
603
660
|
const schemaDir = join(projectRootFromConfig(config, cwd), config.schema?.path ?? "schema/index.ts", "..");
|
|
604
661
|
console.log(`[supatype] Watching ${schemaDir} for changes...`);
|
|
605
662
|
const { watch } = await import("node:fs");
|
|
606
|
-
schemaWatcher = watch(schemaDir, { recursive: true }, (_eventType, filename) => {
|
|
663
|
+
shutdownState.schemaWatcher = watch(schemaDir, { recursive: true }, (_eventType, filename) => {
|
|
607
664
|
if (!filename?.endsWith(".ts"))
|
|
608
665
|
return;
|
|
609
|
-
if (debounceTimer)
|
|
610
|
-
clearTimeout(debounceTimer);
|
|
611
|
-
debounceTimer = setTimeout(() => {
|
|
612
|
-
debounceTimer = null;
|
|
666
|
+
if (shutdownState.debounceTimer)
|
|
667
|
+
clearTimeout(shutdownState.debounceTimer);
|
|
668
|
+
shutdownState.debounceTimer = setTimeout(() => {
|
|
669
|
+
shutdownState.debounceTimer = null;
|
|
613
670
|
console.log(`\n[supatype] Change detected in ${filename}, pushing schema...`);
|
|
614
671
|
runComposeSchemaPushQueued(cwd, config, paths, schemaPath, project)
|
|
615
672
|
.then(async () => {
|