@supatype/cli 0.1.0-alpha.7 → 0.1.0-alpha.8
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 +67 -62
- package/.turbo/turbo-typecheck.log +1 -1
- package/dist/app/proxy-dev-app.d.ts +13 -0
- package/dist/app/proxy-dev-app.d.ts.map +1 -0
- package/dist/app/proxy-dev-app.js +53 -0
- package/dist/app/proxy-dev-app.js.map +1 -0
- package/dist/binary-cache.d.ts +5 -0
- package/dist/binary-cache.d.ts.map +1 -1
- package/dist/binary-cache.js +13 -0
- package/dist/binary-cache.js.map +1 -1
- package/dist/commands/cloud.d.ts +11 -3
- package/dist/commands/cloud.d.ts.map +1 -1
- package/dist/commands/cloud.js +33 -25
- package/dist/commands/cloud.js.map +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +3 -17
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts +3 -3
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +66 -59
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/diff.d.ts.map +1 -1
- package/dist/commands/diff.js +11 -1
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/init.js +16 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +42 -12
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +16 -0
- package/dist/commands/update.js.map +1 -1
- package/dist/dev-compose.d.ts +17 -0
- package/dist/dev-compose.d.ts.map +1 -0
- package/dist/dev-compose.js +374 -0
- package/dist/dev-compose.js.map +1 -0
- package/dist/diff-output.d.ts +4 -0
- package/dist/diff-output.d.ts.map +1 -0
- package/dist/diff-output.js +12 -0
- package/dist/diff-output.js.map +1 -0
- package/dist/docker-postgres.d.ts +21 -3
- package/dist/docker-postgres.d.ts.map +1 -1
- package/dist/docker-postgres.js +130 -18
- package/dist/docker-postgres.js.map +1 -1
- package/dist/engine-client.d.ts +5 -3
- package/dist/engine-client.d.ts.map +1 -1
- package/dist/engine-client.js +2 -1
- package/dist/engine-client.js.map +1 -1
- package/dist/kong-config.d.ts +4 -0
- package/dist/kong-config.d.ts.map +1 -1
- package/dist/kong-config.js +12 -1
- package/dist/kong-config.js.map +1 -1
- package/dist/process-manager.d.ts +2 -0
- package/dist/process-manager.d.ts.map +1 -1
- package/dist/process-manager.js +16 -1
- package/dist/process-manager.js.map +1 -1
- package/dist/project-config.d.ts +21 -1
- package/dist/project-config.d.ts.map +1 -1
- package/dist/project-config.js +15 -0
- package/dist/project-config.js.map +1 -1
- package/dist/runtime-routes.d.ts +9 -0
- package/dist/runtime-routes.d.ts.map +1 -1
- package/dist/runtime-routes.js +75 -12
- package/dist/runtime-routes.js.map +1 -1
- package/dist/schema-ast-v2.d.ts +127 -0
- package/dist/schema-ast-v2.d.ts.map +1 -0
- package/dist/schema-ast-v2.js +226 -0
- package/dist/schema-ast-v2.js.map +1 -0
- package/dist/self-host-compose.d.ts +12 -4
- package/dist/self-host-compose.d.ts.map +1 -1
- package/dist/self-host-compose.js +146 -35
- package/dist/self-host-compose.js.map +1 -1
- package/dist/studio-admin-roles.d.ts +7 -0
- package/dist/studio-admin-roles.d.ts.map +1 -0
- package/dist/studio-admin-roles.js +14 -0
- package/dist/studio-admin-roles.js.map +1 -0
- package/dist/studio-dev-server.d.ts +22 -0
- package/dist/studio-dev-server.d.ts.map +1 -0
- package/dist/studio-dev-server.js +28 -0
- package/dist/studio-dev-server.js.map +1 -0
- package/dist/type-extractor.d.ts +3 -30
- package/dist/type-extractor.d.ts.map +1 -1
- package/dist/type-extractor.js +485 -148
- package/dist/type-extractor.js.map +1 -1
- package/dist/type-resolver.d.ts +33 -0
- package/dist/type-resolver.d.ts.map +1 -0
- package/dist/type-resolver.js +338 -0
- package/dist/type-resolver.js.map +1 -0
- package/package.json +1 -1
- package/src/TYPE-RESOLUTION.md +294 -0
- package/src/app/proxy-dev-app.ts +67 -0
- package/src/binary-cache.ts +20 -0
- package/src/commands/cloud.ts +40 -30
- package/src/commands/deploy.ts +3 -18
- package/src/commands/dev.ts +72 -69
- package/src/commands/diff.ts +11 -1
- package/src/commands/init.ts +16 -3
- package/src/commands/push.ts +49 -13
- package/src/commands/update.ts +17 -0
- package/src/dev-compose.ts +455 -0
- package/src/diff-output.ts +12 -0
- package/src/docker-postgres.ts +184 -27
- package/src/engine-client.ts +9 -4
- package/src/kong-config.ts +16 -1
- package/src/process-manager.ts +18 -1
- package/src/project-config.ts +34 -1
- package/src/runtime-routes.ts +87 -12
- package/src/schema-ast-v2.ts +324 -0
- package/src/self-host-compose.ts +168 -36
- package/src/studio-admin-roles.ts +16 -0
- package/src/studio-dev-server.ts +53 -0
- package/src/type-extractor.ts +649 -186
- package/src/type-resolver.ts +457 -0
- package/tests/config.test.ts +34 -3
- package/tests/docker-postgres.test.ts +39 -0
- package/tests/normalize-admin-config.test.ts +48 -0
- package/tests/proxy-dev-app.test.ts +33 -0
- package/tests/runtime-contract.test.ts +119 -4
- package/tests/studio-admin-roles.test.ts +27 -0
- package/tests/type-extractor.test.ts +607 -23
- package/tests/type-resolver.test.ts +59 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type SupatypeProjectConfig } from "./project-config.js";
|
|
2
2
|
export interface SelfHostComposePaths {
|
|
3
3
|
dir: string;
|
|
4
4
|
composePath: string;
|
|
@@ -8,7 +8,15 @@ export interface SelfHostComposePaths {
|
|
|
8
8
|
export declare function selfHostComposePaths(cwd: string): SelfHostComposePaths;
|
|
9
9
|
export declare function appUpstreamForCompose(config: SupatypeProjectConfig): string | undefined;
|
|
10
10
|
export declare function staticDirForCompose(config: SupatypeProjectConfig): string | undefined;
|
|
11
|
-
|
|
12
|
-
export declare
|
|
13
|
-
export
|
|
11
|
+
/** Host Vite dev server as seen from Kong inside Docker Compose. */
|
|
12
|
+
export declare const COMPOSE_STUDIO_HOST_URL = "http://host.docker.internal:3002";
|
|
13
|
+
export interface SelfHostComposeOptions {
|
|
14
|
+
/** `supatype dev` with provider docker: internal-only db/server; Kong on host :18473. */
|
|
15
|
+
devLocal?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function renderSelfHostCompose(config: SupatypeProjectConfig, cwd?: string, options?: SelfHostComposeOptions): string;
|
|
18
|
+
export declare function writeSelfHostCompose(cwd: string, config: SupatypeProjectConfig, options?: SelfHostComposeOptions): SelfHostComposePaths;
|
|
19
|
+
export declare function runDockerCompose(composePath: string, args: string[], projectRoot?: string, composeProject?: string): number;
|
|
20
|
+
/** Compose project name for a Supatype project — isolates docker state per project. */
|
|
21
|
+
export declare function composeProjectName(projectName: string): string;
|
|
14
22
|
//# sourceMappingURL=self-host-compose.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-host-compose.d.ts","sourceRoot":"","sources":["../src/self-host-compose.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"self-host-compose.d.ts","sourceRoot":"","sources":["../src/self-host-compose.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqC,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAInG,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAQtE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,GAAG,SAAS,CAIvF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,GAAG,SAAS,CAIrF;AAwBD,oEAAoE;AACpE,eAAO,MAAM,uBAAuB,qCAAqC,CAAA;AA+CzE,MAAM,WAAW,sBAAsB;IACrC,yFAAyF;IACzF,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,EAC7B,GAAG,GAAE,MAAsB,EAC3B,OAAO,CAAC,EAAE,sBAAsB,GAC/B,MAAM,CAqMR;AAoBD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,qBAAqB,EAC7B,OAAO,CAAC,EAAE,sBAAsB,GAC/B,oBAAoB,CAmBtB;AAED,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,GAAE,MAAsB,EACnC,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CAoBR;AAED,uFAAuF;AACvF,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG9D"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { dirname, join, relative, resolve } from "node:path";
|
|
3
3
|
import { spawnSync } from "node:child_process";
|
|
4
|
+
import { preferredFunctionsPathFromProject } from "./project-config.js";
|
|
5
|
+
import { hasEngineOverride, hasStudioOverride } from "./binary-cache.js";
|
|
4
6
|
import { buildKongDeclarative } from "./kong-config.js";
|
|
5
7
|
export function selfHostComposePaths(cwd) {
|
|
6
8
|
const dir = resolve(cwd, ".supatype", "self-host");
|
|
@@ -23,15 +25,61 @@ export function staticDirForCompose(config) {
|
|
|
23
25
|
const dir = config.app.static_dir?.trim();
|
|
24
26
|
return dir && dir.length > 0 ? dir : "./public";
|
|
25
27
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Bind-mount source for `/project` in generated compose files.
|
|
30
|
+
* Paths are resolved from `--project-directory` (always the project root in `runDockerCompose`),
|
|
31
|
+
* not from the compose file directory — use `.` not `../..`.
|
|
32
|
+
*/
|
|
33
|
+
function projectMountPath(_cwd) {
|
|
34
|
+
return ".";
|
|
35
|
+
}
|
|
36
|
+
/** Paths in generated compose are resolved from `--project-directory` (project root). */
|
|
37
|
+
function relativeFromProjectRoot(cwd, target) {
|
|
38
|
+
let rel = relative(resolve(cwd), resolve(target)).replace(/\\/g, "/");
|
|
29
39
|
if (!rel.startsWith(".") && !rel.startsWith("/")) {
|
|
30
40
|
rel = `./${rel}`;
|
|
31
41
|
}
|
|
32
|
-
return rel
|
|
42
|
+
return rel;
|
|
43
|
+
}
|
|
44
|
+
function kongMountPath(_cwd) {
|
|
45
|
+
return ".supatype/self-host/kong.yml";
|
|
46
|
+
}
|
|
47
|
+
/** Host Vite dev server as seen from Kong inside Docker Compose. */
|
|
48
|
+
export const COMPOSE_STUDIO_HOST_URL = "http://host.docker.internal:3002";
|
|
49
|
+
/** Local monorepo Studio image for `supatype dev` (dogfooding). */
|
|
50
|
+
function studioServiceBlock(cwd, devLocal) {
|
|
51
|
+
if (!devLocal) {
|
|
52
|
+
return ` image: \${SUPATYPE_STUDIO_IMAGE:-supatype/studio:latest}`;
|
|
53
|
+
}
|
|
54
|
+
const monorepoRoot = resolve(cwd, "..", "supatype");
|
|
55
|
+
const studioDockerfile = join(monorepoRoot, "packages", "studio", "Dockerfile");
|
|
56
|
+
if (!existsSync(studioDockerfile) || !existsSync(join(monorepoRoot, "pnpm-workspace.yaml"))) {
|
|
57
|
+
return ` image: \${SUPATYPE_STUDIO_IMAGE:-supatype/studio:latest}`;
|
|
58
|
+
}
|
|
59
|
+
const context = relativeFromProjectRoot(cwd, monorepoRoot);
|
|
60
|
+
return ` build:
|
|
61
|
+
context: ${context}
|
|
62
|
+
dockerfile: packages/studio/Dockerfile
|
|
63
|
+
image: supatype/studio:dev-local`;
|
|
33
64
|
}
|
|
34
|
-
|
|
65
|
+
/** Host dev app (Astro/Vite on the machine) as seen from inside compose services. */
|
|
66
|
+
function proxyUpstreamForCompose(upstream, devLocal) {
|
|
67
|
+
const trimmed = upstream.trim();
|
|
68
|
+
if (!devLocal)
|
|
69
|
+
return trimmed;
|
|
70
|
+
try {
|
|
71
|
+
const url = new URL(trimmed);
|
|
72
|
+
if (url.hostname === "localhost" || url.hostname === "127.0.0.1") {
|
|
73
|
+
url.hostname = "host.docker.internal";
|
|
74
|
+
return url.toString();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// keep literal upstream when not a URL
|
|
79
|
+
}
|
|
80
|
+
return trimmed;
|
|
81
|
+
}
|
|
82
|
+
function serverAppEnvForCompose(config, devLocal) {
|
|
35
83
|
const mode = config.app.mode ?? "none";
|
|
36
84
|
const lines = [` SUPATYPE_APP_MODE: ${mode}`];
|
|
37
85
|
if (mode === "static") {
|
|
@@ -39,25 +87,62 @@ function serverAppEnvForCompose(config) {
|
|
|
39
87
|
lines.push(` SUPATYPE_APP_STATIC_DIR: /project/${dir.replace(/^\.\//, "")}`);
|
|
40
88
|
}
|
|
41
89
|
else if (mode === "proxy" && config.app.upstream?.trim()) {
|
|
42
|
-
lines.push(` SUPATYPE_APP_UPSTREAM: ${config.app.upstream
|
|
90
|
+
lines.push(` SUPATYPE_APP_UPSTREAM: ${proxyUpstreamForCompose(config.app.upstream, devLocal)}`);
|
|
43
91
|
}
|
|
44
92
|
return lines.join("\n");
|
|
45
93
|
}
|
|
46
|
-
export function renderSelfHostCompose(config, cwd = process.cwd()) {
|
|
94
|
+
export function renderSelfHostCompose(config, cwd = process.cwd(), options) {
|
|
47
95
|
const projectMount = projectMountPath(cwd);
|
|
48
|
-
const
|
|
96
|
+
const kongMount = kongMountPath(cwd);
|
|
97
|
+
const devLocal = options?.devLocal === true;
|
|
98
|
+
const studioHostDev = devLocal && hasStudioOverride(config);
|
|
99
|
+
const appEnv = serverAppEnvForCompose(config, devLocal);
|
|
100
|
+
const studioService = studioServiceBlock(cwd, devLocal);
|
|
101
|
+
const studioBlock = studioHostDev
|
|
102
|
+
? ""
|
|
103
|
+
: `
|
|
104
|
+
studio:
|
|
105
|
+
${studioService}
|
|
106
|
+
environment:
|
|
107
|
+
SUPATYPE_CLOUD_JSON: '{"url":"\${API_EXTERNAL_URL:-http://localhost:18473}","anonKey":"\${ANON_KEY:-}"}'
|
|
108
|
+
expose:
|
|
109
|
+
- "3002"
|
|
110
|
+
`;
|
|
111
|
+
const kongDependsOn = studioHostDev
|
|
112
|
+
? ` - server`
|
|
113
|
+
: ` - server
|
|
114
|
+
- studio`;
|
|
115
|
+
const publishDbToHost = !devLocal || hasEngineOverride(config);
|
|
116
|
+
const dbPorts = publishDbToHost
|
|
117
|
+
? devLocal
|
|
118
|
+
? ` ports:
|
|
119
|
+
- "127.0.0.1:\${SUPATYPE_DEV_DB_PORT:-54329}:5432"
|
|
120
|
+
`
|
|
121
|
+
: ` ports:
|
|
122
|
+
- "5432:5432"
|
|
123
|
+
`
|
|
124
|
+
: "";
|
|
125
|
+
const serverPorts = devLocal
|
|
126
|
+
? ""
|
|
127
|
+
: ` ports:
|
|
128
|
+
- "9999:9999"
|
|
129
|
+
`;
|
|
130
|
+
const minioPorts = devLocal
|
|
131
|
+
? ""
|
|
132
|
+
: ` ports:
|
|
133
|
+
- "9000:9000"
|
|
134
|
+
- "9001:9001"
|
|
135
|
+
`;
|
|
49
136
|
return `# Generated by supatype self-host compose
|
|
50
137
|
# Kong → supatype-server (unified gateway) → internal PostgREST / storage / etc.
|
|
51
138
|
services:
|
|
52
139
|
db:
|
|
53
|
-
image: \${SUPATYPE_POSTGRES_IMAGE:-supatype/postgres:
|
|
140
|
+
image: \${SUPATYPE_POSTGRES_IMAGE:-supatype/postgres:latest}
|
|
54
141
|
environment:
|
|
55
142
|
POSTGRES_USER: \${POSTGRES_USER:-supatype_admin}
|
|
56
143
|
POSTGRES_PASSWORD: \${POSTGRES_PASSWORD:-postgres}
|
|
57
144
|
POSTGRES_DB: \${POSTGRES_DB:-supatype}
|
|
58
|
-
|
|
59
|
-
- "5432:5432"
|
|
60
|
-
volumes:
|
|
145
|
+
${dbPorts} volumes:
|
|
61
146
|
- db-data:/var/lib/postgresql/data
|
|
62
147
|
healthcheck:
|
|
63
148
|
test: ["CMD-SHELL", "pg_isready -U \${POSTGRES_USER:-supatype_admin}"]
|
|
@@ -71,7 +156,7 @@ services:
|
|
|
71
156
|
- "3000"
|
|
72
157
|
environment:
|
|
73
158
|
PGRST_DB_URI: postgresql://\${POSTGRES_USER:-supatype_admin}:\${POSTGRES_PASSWORD:-postgres}@db:5432/\${POSTGRES_DB:-supatype}
|
|
74
|
-
PGRST_DB_SCHEMA: "public, supatype"
|
|
159
|
+
PGRST_DB_SCHEMA: "public, supatype, graphql_public"
|
|
75
160
|
PGRST_DB_ANON_ROLE: anon
|
|
76
161
|
PGRST_JWT_SECRET: \${JWT_SECRET:-super-secret-jwt-token-change-in-production}
|
|
77
162
|
PGRST_DB_EXTRA_SEARCH_PATH: public,extensions
|
|
@@ -110,19 +195,20 @@ services:
|
|
|
110
195
|
SUPATYPE_URL: \${API_EXTERNAL_URL:-http://localhost:18473}
|
|
111
196
|
SUPATYPE_ANON_KEY: \${ANON_KEY:-}
|
|
112
197
|
SUPATYPE_SERVICE_ROLE_KEY: \${SERVICE_ROLE_KEY:-}
|
|
198
|
+
STRIPE_SECRET_KEY: \${STRIPE_SECRET_KEY:-}
|
|
199
|
+
STRIPE_WEBHOOK_SECRET: \${STRIPE_WEBHOOK_SECRET:-}
|
|
200
|
+
SITE_URL: \${SITE_URL:-\${API_EXTERNAL_URL:-http://localhost:18473}}
|
|
113
201
|
depends_on:
|
|
114
202
|
db:
|
|
115
203
|
condition: service_healthy
|
|
116
204
|
|
|
117
205
|
server:
|
|
118
206
|
image: \${SUPATYPE_SERVER_IMAGE:-\${SUPATYPE_AUTH_IMAGE:-supatype/server:latest}}
|
|
119
|
-
|
|
120
|
-
- "9999:9999"
|
|
121
|
-
volumes:
|
|
207
|
+
${serverPorts} volumes:
|
|
122
208
|
- ${projectMount}:/project:ro
|
|
123
209
|
working_dir: /project
|
|
124
210
|
environment:
|
|
125
|
-
SUPATYPE_MODE: standalone
|
|
211
|
+
SUPATYPE_MODE: ${devLocal ? "dev" : "standalone"}
|
|
126
212
|
SUPATYPE_MANIFEST_PATH: /project/.supatype/manifest.json
|
|
127
213
|
SUPATYPE_ADMIN_CONFIG_PATH: /project/.supatype/admin-config.json
|
|
128
214
|
SUPATYPE_API_CONFIG_PATH: /project/.supatype/api-config.json
|
|
@@ -150,6 +236,7 @@ ${appEnv}
|
|
|
150
236
|
GOTRUE_JWT_ADMIN_ROLES: service_role,supatype_admin
|
|
151
237
|
GOTRUE_MAILER_AUTOCONFIRM: \${GOTRUE_MAILER_AUTOCONFIRM:-true}
|
|
152
238
|
GOTRUE_DISABLE_SIGNUP: \${DISABLE_SIGNUP:-false}
|
|
239
|
+
${devLocal ? " STUDIO_OPEN_DEV: \"1\"\n" : ""}
|
|
153
240
|
depends_on:
|
|
154
241
|
db:
|
|
155
242
|
condition: service_healthy
|
|
@@ -166,17 +253,20 @@ ${appEnv}
|
|
|
166
253
|
environment:
|
|
167
254
|
MINIO_ROOT_USER: supatype
|
|
168
255
|
MINIO_ROOT_PASSWORD: supatype-secret
|
|
169
|
-
|
|
170
|
-
- "9000:9000"
|
|
171
|
-
- "9001:9001"
|
|
172
|
-
volumes:
|
|
256
|
+
${minioPorts} volumes:
|
|
173
257
|
- minio-data:/data
|
|
174
258
|
|
|
175
|
-
|
|
176
|
-
image: \${
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
259
|
+
schema-engine:
|
|
260
|
+
image: \${SUPATYPE_ENGINE_IMAGE:-supatype/schema-engine:latest}
|
|
261
|
+
profiles: ["tools"]
|
|
262
|
+
entrypoint: ["supatype-engine"]
|
|
263
|
+
volumes:
|
|
264
|
+
- ${projectMount}:/project
|
|
265
|
+
working_dir: /project
|
|
266
|
+
depends_on:
|
|
267
|
+
db:
|
|
268
|
+
condition: service_healthy
|
|
269
|
+
${studioBlock}
|
|
180
270
|
kong:
|
|
181
271
|
image: kong:3.6
|
|
182
272
|
environment:
|
|
@@ -187,12 +277,11 @@ ${appEnv}
|
|
|
187
277
|
KONG_PROXY_ERROR_LOG: /dev/stderr
|
|
188
278
|
KONG_ADMIN_ERROR_LOG: /dev/stderr
|
|
189
279
|
volumes:
|
|
190
|
-
-
|
|
280
|
+
- ${kongMount}:/etc/kong/kong.yml:ro
|
|
191
281
|
ports:
|
|
192
|
-
- "18473:8000"
|
|
282
|
+
- "\${SUPATYPE_KONG_PORT:-18473}:8000"
|
|
193
283
|
depends_on:
|
|
194
|
-
|
|
195
|
-
- studio
|
|
284
|
+
${kongDependsOn}
|
|
196
285
|
|
|
197
286
|
volumes:
|
|
198
287
|
db-data:
|
|
@@ -213,24 +302,46 @@ function ensureComposeManifest(cwd) {
|
|
|
213
302
|
};
|
|
214
303
|
writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
|
|
215
304
|
}
|
|
216
|
-
|
|
305
|
+
function ensureProjectFunctionsDir(cwd, config) {
|
|
306
|
+
mkdirSync(preferredFunctionsPathFromProject(config, cwd), { recursive: true });
|
|
307
|
+
}
|
|
308
|
+
export function writeSelfHostCompose(cwd, config, options) {
|
|
217
309
|
const paths = selfHostComposePaths(cwd);
|
|
218
310
|
mkdirSync(paths.dir, { recursive: true });
|
|
311
|
+
ensureProjectFunctionsDir(cwd, config);
|
|
219
312
|
ensureComposeManifest(cwd);
|
|
220
|
-
writeFileSync(paths.composePath, renderSelfHostCompose(config, cwd), "utf8");
|
|
313
|
+
writeFileSync(paths.composePath, renderSelfHostCompose(config, cwd, options), "utf8");
|
|
314
|
+
const studioHostDev = options?.devLocal === true && hasStudioOverride(config);
|
|
221
315
|
writeFileSync(paths.kongPath, buildKongDeclarative({
|
|
222
316
|
unifiedGateway: true,
|
|
317
|
+
...(studioHostDev && {
|
|
318
|
+
studioServiceUrl: COMPOSE_STUDIO_HOST_URL,
|
|
319
|
+
studioStripPath: false,
|
|
320
|
+
}),
|
|
223
321
|
}), "utf8");
|
|
224
322
|
return paths;
|
|
225
323
|
}
|
|
226
|
-
export function runDockerCompose(composePath, args, projectRoot = process.cwd()) {
|
|
324
|
+
export function runDockerCompose(composePath, args, projectRoot = process.cwd(), composeProject) {
|
|
227
325
|
const envFile = resolve(projectRoot, ".env");
|
|
228
|
-
const composeArgs = ["compose"
|
|
326
|
+
const composeArgs = ["compose"];
|
|
327
|
+
// Per-project name isolates containers/volumes/network so multiple Supatype
|
|
328
|
+
// projects on one machine never share a database (default would be the
|
|
329
|
+
// ".supatype/self-host" dir name, identical for every project).
|
|
330
|
+
if (composeProject)
|
|
331
|
+
composeArgs.push("-p", composeProject);
|
|
332
|
+
// Resolve ${VAR} in compose.yml from the project root .env (not .supatype/self-host/).
|
|
333
|
+
composeArgs.push("--project-directory", projectRoot);
|
|
334
|
+
composeArgs.push("-f", composePath);
|
|
229
335
|
if (existsSync(envFile)) {
|
|
230
336
|
composeArgs.push("--env-file", envFile);
|
|
231
337
|
}
|
|
232
338
|
composeArgs.push(...args);
|
|
233
|
-
const result = spawnSync("docker", composeArgs, { stdio: "inherit", cwd:
|
|
339
|
+
const result = spawnSync("docker", composeArgs, { stdio: "inherit", cwd: projectRoot });
|
|
234
340
|
return result.status ?? 1;
|
|
235
341
|
}
|
|
342
|
+
/** Compose project name for a Supatype project — isolates docker state per project. */
|
|
343
|
+
export function composeProjectName(projectName) {
|
|
344
|
+
const slug = projectName.toLowerCase().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "");
|
|
345
|
+
return `supatype-${slug || "project"}`;
|
|
346
|
+
}
|
|
236
347
|
//# sourceMappingURL=self-host-compose.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-host-compose.js","sourceRoot":"","sources":["../src/self-host-compose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"self-host-compose.js","sourceRoot":"","sources":["../src/self-host-compose.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SupatypeProjectConfig } from "./project-config.js";
|
|
2
|
+
export declare const DEFAULT_STUDIO_ADMIN_ROLES: readonly ["admin", "supatype_admin"];
|
|
3
|
+
/** Studio admin roles from `supatype.config.ts` `admin.roles` or defaults. */
|
|
4
|
+
export declare function studioAdminRoles(cfg: SupatypeProjectConfig): string[];
|
|
5
|
+
/** Merge `adminRoles` into engine admin-config JSON for Studio and supatype-server. */
|
|
6
|
+
export declare function withAdminRoles(admin: unknown, cfg: SupatypeProjectConfig): Record<string, unknown>;
|
|
7
|
+
//# sourceMappingURL=studio-admin-roles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"studio-admin-roles.d.ts","sourceRoot":"","sources":["../src/studio-admin-roles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhE,eAAO,MAAM,0BAA0B,sCAAuC,CAAA;AAE9E,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAIrE;AAED,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGlG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const DEFAULT_STUDIO_ADMIN_ROLES = ["admin", "supatype_admin"];
|
|
2
|
+
/** Studio admin roles from `supatype.config.ts` `admin.roles` or defaults. */
|
|
3
|
+
export function studioAdminRoles(cfg) {
|
|
4
|
+
const roles = cfg.admin?.roles;
|
|
5
|
+
if (roles !== undefined && roles.length > 0)
|
|
6
|
+
return roles;
|
|
7
|
+
return [...DEFAULT_STUDIO_ADMIN_ROLES];
|
|
8
|
+
}
|
|
9
|
+
/** Merge `adminRoles` into engine admin-config JSON for Studio and supatype-server. */
|
|
10
|
+
export function withAdminRoles(admin, cfg) {
|
|
11
|
+
const base = typeof admin === "object" && admin !== null ? admin : {};
|
|
12
|
+
return { ...base, adminRoles: studioAdminRoles(cfg) };
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=studio-admin-roles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"studio-admin-roles.js","sourceRoot":"","sources":["../src/studio-admin-roles.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAU,CAAA;AAE9E,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,GAA0B;IACzD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,CAAA;IAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IACzD,OAAO,CAAC,GAAG,0BAA0B,CAAC,CAAA;AACxC,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,GAA0B;IACvE,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAE,KAAiC,CAAC,CAAC,CAAC,EAAE,CAAA;IAClG,OAAO,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAA;AACvD,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ProcessManager } from "./process-manager.js";
|
|
2
|
+
export interface StudioDevServerOptions {
|
|
3
|
+
cwd: string;
|
|
4
|
+
studioOverride: string;
|
|
5
|
+
pidDir: string;
|
|
6
|
+
serviceRoleKey: string;
|
|
7
|
+
/**
|
|
8
|
+
* Where Vite proxies API requests (Kong gateway port for compose dev, or
|
|
9
|
+
* supatype-server port for native `supatype dev`).
|
|
10
|
+
*/
|
|
11
|
+
proxyTarget: string;
|
|
12
|
+
/**
|
|
13
|
+
* Public Supatype URL the browser uses. Compose dev: Kong on the host.
|
|
14
|
+
* Native dev: Vite dev server (same origin as Studio).
|
|
15
|
+
*/
|
|
16
|
+
viteSupatypeUrl: string;
|
|
17
|
+
/** Vite `base` — `/studio/` when behind Kong at `/studio/`; `/` for native dev on :3002. */
|
|
18
|
+
basePath?: string;
|
|
19
|
+
}
|
|
20
|
+
/** Start @supatype/studio Vite dev server when `overrides.studio` is set. */
|
|
21
|
+
export declare function startStudioViteDevServer(opts: StudioDevServerOptions): ProcessManager | null;
|
|
22
|
+
//# sourceMappingURL=studio-dev-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"studio-dev-server.d.ts","sourceRoot":"","sources":["../src/studio-dev-server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAIrD,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAA;IACX,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAA;IACvB,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,6EAA6E;AAC7E,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,sBAAsB,GAAG,cAAc,GAAG,IAAI,CA0B5F"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
import { ProcessManager } from "./process-manager.js";
|
|
4
|
+
const STUDIO_PORT = 3002;
|
|
5
|
+
/** Start @supatype/studio Vite dev server when `overrides.studio` is set. */
|
|
6
|
+
export function startStudioViteDevServer(opts) {
|
|
7
|
+
const studioDir = resolve(opts.cwd, opts.studioOverride);
|
|
8
|
+
const viteJs = join(studioDir, "node_modules", "vite", "bin", "vite.js");
|
|
9
|
+
if (!existsSync(viteJs)) {
|
|
10
|
+
console.warn(`[supatype] ⚠ Studio override set but vite not found at ${viteJs}. Run: pnpm install`);
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
const basePath = opts.basePath ?? "/";
|
|
14
|
+
return new ProcessManager(process.execPath, [viteJs, "--port", String(STUDIO_PORT), "--strictPort", "--host"], {
|
|
15
|
+
label: "studio",
|
|
16
|
+
pidDir: opts.pidDir,
|
|
17
|
+
cwd: studioDir,
|
|
18
|
+
colour: "\x1b[35m",
|
|
19
|
+
env: {
|
|
20
|
+
VITE_SUPATYPE_URL: opts.viteSupatypeUrl,
|
|
21
|
+
SUPATYPE_PROXY_TARGET: opts.proxyTarget,
|
|
22
|
+
VITE_SUPATYPE_ANON_KEY: opts.serviceRoleKey,
|
|
23
|
+
VITE_SUPATYPE_SERVICE_ROLE_KEY: opts.serviceRoleKey,
|
|
24
|
+
VITE_BASE_PATH: basePath,
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=studio-dev-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"studio-dev-server.js","sourceRoot":"","sources":["../src/studio-dev-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,MAAM,WAAW,GAAG,IAAI,CAAA;AAqBxB,6EAA6E;AAC7E,MAAM,UAAU,wBAAwB,CAAC,IAA4B;IACnE,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IACxE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,2DAA2D,MAAM,qBAAqB,CAAC,CAAA;QACpG,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAA;IACrC,OAAO,IAAI,cAAc,CACvB,OAAO,CAAC,QAAQ,EAChB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,EACjE;QACE,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,GAAG,EAAE,SAAS;QACd,MAAM,EAAE,UAAU;QAClB,GAAG,EAAE;YACH,iBAAiB,EAAE,IAAI,CAAC,eAAe;YACvC,qBAAqB,EAAE,IAAI,CAAC,WAAW;YACvC,sBAAsB,EAAE,IAAI,CAAC,cAAc;YAC3C,8BAA8B,EAAE,IAAI,CAAC,cAAc;YACnD,cAAc,EAAE,QAAQ;SACzB;KACF,CACF,CAAA;AACH,CAAC"}
|
package/dist/type-extractor.d.ts
CHANGED
|
@@ -1,31 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
interface ModelAst {
|
|
5
|
-
name: string;
|
|
6
|
-
tableName: string;
|
|
7
|
-
fields: Record<string, FieldAst>;
|
|
8
|
-
access: Record<string, unknown>;
|
|
9
|
-
indexes: unknown[];
|
|
10
|
-
options: Record<string, unknown>;
|
|
11
|
-
}
|
|
12
|
-
/** Resolved row for `storage.buckets` — matches engine `StorageBucketAst` (camelCase JSON). */
|
|
13
|
-
export interface ExtractedStorageBucketAst {
|
|
14
|
-
id: string;
|
|
15
|
-
public: boolean;
|
|
16
|
-
/** `public` / `private` / `custom` — drives DB `access_mode` and S3 helpers (engine + storage server). */
|
|
17
|
-
accessMode?: "public" | "private" | "custom";
|
|
18
|
-
allowedMimeTypes?: string[];
|
|
19
|
-
fileSizeLimit?: number;
|
|
20
|
-
/** Bucket-scoped `storage.objects` RLS (`read`, `create`, `delete`). */
|
|
21
|
-
access?: Record<string, unknown>;
|
|
22
|
-
/** Raw S3 bucket policy JSON; overrides default public-read when `public` is true if set. */
|
|
23
|
-
s3BucketPolicy?: string;
|
|
24
|
-
}
|
|
25
|
-
export interface ExtractedSchemaAst {
|
|
26
|
-
models: ModelAst[];
|
|
27
|
-
storageBuckets?: ExtractedStorageBucketAst[];
|
|
28
|
-
}
|
|
29
|
-
export declare function extractSchemaAstFromTypes(schemaPath: string, cwd?: string): ExtractedSchemaAst | null;
|
|
30
|
-
export {};
|
|
1
|
+
import { type ExtractedSchemaAstV2 } from "./schema-ast-v2.js";
|
|
2
|
+
export type { ExtractedSchemaAstV2 as ExtractedSchemaAst, ExtractedStorageBucketAst } from "./schema-ast-v2.js";
|
|
3
|
+
export declare function extractSchemaAstFromTypes(schemaPath: string, cwd?: string): ExtractedSchemaAstV2 | null;
|
|
31
4
|
//# sourceMappingURL=type-extractor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-extractor.d.ts","sourceRoot":"","sources":["../src/type-extractor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"type-extractor.d.ts","sourceRoot":"","sources":["../src/type-extractor.ts"],"names":[],"mappings":"AAaA,OAAO,EAOL,KAAK,oBAAoB,EAI1B,MAAM,oBAAoB,CAAA;AAE3B,YAAY,EAAE,oBAAoB,IAAI,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAM/G,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAsB,GAC1B,oBAAoB,GAAG,IAAI,CA4G7B"}
|