@supatype/cli 0.2.1 → 0.3.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 +1 -1
- package/.turbo/turbo-test.log +193 -157
- package/.turbo/turbo-typecheck.log +1 -1
- package/dist/api-config-cache.d.ts +34 -0
- package/dist/api-config-cache.d.ts.map +1 -0
- package/dist/api-config-cache.js +123 -0
- package/dist/api-config-cache.js.map +1 -0
- package/dist/cache-identity-scope.d.ts +38 -0
- package/dist/cache-identity-scope.d.ts.map +1 -0
- package/dist/cache-identity-scope.js +70 -0
- package/dist/cache-identity-scope.js.map +1 -0
- package/dist/cache-provider.d.ts +30 -0
- package/dist/cache-provider.d.ts.map +1 -0
- package/dist/cache-provider.js +60 -0
- package/dist/cache-provider.js.map +1 -0
- package/dist/cli-version-embedded.js +1 -1
- package/dist/commands/add.js +1 -1
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/admin.d.ts.map +1 -1
- package/dist/commands/admin.js +21 -4
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/cache.d.ts +1 -1
- package/dist/commands/cache.js +3 -3
- package/dist/commands/cache.js.map +1 -1
- package/dist/commands/cloud.d.ts.map +1 -1
- package/dist/commands/cloud.js +2 -1
- package/dist/commands/cloud.js.map +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +2 -1
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +61 -8
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/diff.d.ts.map +1 -1
- package/dist/commands/diff.js +2 -1
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/functions.d.ts.map +1 -1
- package/dist/commands/functions.js +6 -2
- package/dist/commands/functions.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +13 -9
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/keys.d.ts +35 -0
- package/dist/commands/keys.d.ts.map +1 -1
- package/dist/commands/keys.js +90 -6
- package/dist/commands/keys.js.map +1 -1
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +2 -1
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +61 -1
- package/dist/commands/push.js.map +1 -1
- package/dist/compose-services.d.ts.map +1 -1
- package/dist/compose-services.js +2 -1
- package/dist/compose-services.js.map +1 -1
- package/dist/dev-compose.d.ts +13 -0
- package/dist/dev-compose.d.ts.map +1 -1
- package/dist/dev-compose.js +119 -16
- package/dist/dev-compose.js.map +1 -1
- package/dist/engine-floor.d.ts +11 -1
- package/dist/engine-floor.d.ts.map +1 -1
- package/dist/engine-floor.js +49 -16
- package/dist/engine-floor.js.map +1 -1
- package/dist/functions-deno-types.d.ts +9 -0
- package/dist/functions-deno-types.d.ts.map +1 -1
- package/dist/functions-deno-types.js +45 -1
- package/dist/functions-deno-types.js.map +1 -1
- package/dist/functions-router-gen.d.ts.map +1 -1
- package/dist/functions-router-gen.js +113 -81
- package/dist/functions-router-gen.js.map +1 -1
- package/dist/kong-config.d.ts +1 -1
- package/dist/model-cache.d.ts +44 -0
- package/dist/model-cache.d.ts.map +1 -0
- package/dist/model-cache.js +106 -0
- package/dist/model-cache.js.map +1 -0
- package/dist/model-hooks.d.ts +5 -0
- package/dist/model-hooks.d.ts.map +1 -1
- package/dist/model-hooks.js +29 -1
- package/dist/model-hooks.js.map +1 -1
- package/dist/model-versioning.d.ts +80 -0
- package/dist/model-versioning.d.ts.map +1 -0
- package/dist/model-versioning.js +140 -0
- package/dist/model-versioning.js.map +1 -0
- package/dist/postgres-ctl.d.ts +55 -0
- package/dist/postgres-ctl.d.ts.map +1 -1
- package/dist/postgres-ctl.js +84 -8
- package/dist/postgres-ctl.js.map +1 -1
- package/dist/preview-config-check.d.ts +21 -0
- package/dist/preview-config-check.d.ts.map +1 -0
- package/dist/preview-config-check.js +47 -0
- package/dist/preview-config-check.js.map +1 -0
- package/dist/project-config.d.ts +182 -5
- package/dist/project-config.d.ts.map +1 -1
- package/dist/project-config.js +125 -8
- package/dist/project-config.js.map +1 -1
- package/dist/resolve-target.d.ts +9 -0
- package/dist/resolve-target.d.ts.map +1 -1
- package/dist/resolve-target.js.map +1 -1
- package/dist/rest-cache-admin.d.ts.map +1 -1
- package/dist/rest-cache-admin.js +6 -2
- package/dist/rest-cache-admin.js.map +1 -1
- package/dist/schema-ast-v2.d.ts +32 -1
- package/dist/schema-ast-v2.d.ts.map +1 -1
- package/dist/schema-ast-v2.js +14 -1
- package/dist/schema-ast-v2.js.map +1 -1
- package/dist/self-host-compose.d.ts +20 -1
- package/dist/self-host-compose.d.ts.map +1 -1
- package/dist/self-host-compose.js +227 -29
- package/dist/self-host-compose.js.map +1 -1
- package/dist/studio-admin-roles.d.ts +8 -1
- package/dist/studio-admin-roles.d.ts.map +1 -1
- package/dist/studio-admin-roles.js +16 -2
- package/dist/studio-admin-roles.js.map +1 -1
- package/dist/type-extractor.d.ts +7 -0
- package/dist/type-extractor.d.ts.map +1 -1
- package/dist/type-extractor.js +234 -3
- package/dist/type-extractor.js.map +1 -1
- package/package.json +2 -2
- package/src/api-config-cache.ts +142 -0
- package/src/cache-identity-scope.ts +92 -0
- package/src/cache-provider.ts +61 -0
- package/src/cli-version-embedded.ts +1 -1
- package/src/commands/add.ts +1 -1
- package/src/commands/admin.ts +23 -6
- package/src/commands/cache.ts +3 -3
- package/src/commands/cloud.ts +2 -1
- package/src/commands/deploy.ts +2 -1
- package/src/commands/dev.ts +68 -7
- package/src/commands/diff.ts +2 -1
- package/src/commands/functions.ts +6 -2
- package/src/commands/init.ts +13 -9
- package/src/commands/keys.ts +112 -7
- package/src/commands/migrate.ts +2 -1
- package/src/commands/push.ts +68 -1
- package/src/compose-services.ts +2 -1
- package/src/dev-compose.ts +151 -15
- package/src/engine-floor.ts +73 -16
- package/src/functions-deno-types.ts +48 -1
- package/src/functions-router-gen.ts +113 -81
- package/src/kong-config.ts +1 -1
- package/src/model-cache.ts +122 -0
- package/src/model-hooks.ts +26 -2
- package/src/model-versioning.ts +167 -0
- package/src/postgres-ctl.ts +103 -9
- package/src/preview-config-check.ts +52 -0
- package/src/project-config.ts +273 -11
- package/src/resolve-target.ts +11 -1
- package/src/rest-cache-admin.ts +8 -2
- package/src/schema-ast-v2.ts +47 -0
- package/src/self-host-compose.ts +250 -29
- package/src/studio-admin-roles.ts +16 -2
- package/src/type-extractor.ts +281 -2
- package/tests/api-config-cache-seed.test.ts +180 -0
- package/tests/cache-identity-scope.test.ts +61 -0
- package/tests/cache-provider-config.test.ts +132 -0
- package/tests/engine-floor.test.ts +43 -0
- package/tests/external-database-compose.test.ts +74 -3
- package/tests/field-masking-tier.test.ts +3 -3
- package/tests/fixtures/identity-scope-corpus.json +42 -0
- package/tests/functions-concurrency.test.ts +71 -0
- package/tests/init.test.ts +36 -2
- package/tests/keys-write.test.ts +148 -0
- package/tests/model-cache-declaration.test.ts +229 -0
- package/tests/model-cache-manifest.test.ts +99 -0
- package/tests/model-hooks.test.ts +55 -0
- package/tests/model-versions.test.ts +229 -0
- package/tests/native-keyspace.test.ts +130 -0
- package/tests/preview-config-check.test.ts +104 -0
- package/tests/rest-cache-admin.test.ts +36 -0
- package/tests/runtime-contract.test.ts +176 -22
- package/tests/studio-admin-roles.test.ts +32 -0
- package/tests/type-extractor.test.ts +113 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -38,9 +38,28 @@ export function generateFunctionsRouterSource(routerFilePath, fns) {
|
|
|
38
38
|
const imports = fns.map((fn, i) => `import handler_${i} from "${importSpecFromRouter(routerFilePath, fn.entrypoint)}"`);
|
|
39
39
|
const routes = fns.map((fn, i) => ` "${fn.name}": handler_${i},`);
|
|
40
40
|
return `// Auto-generated: do not edit (regenerated by supatype dev / functions serve)
|
|
41
|
+
import { AsyncLocalStorage } from "node:async_hooks"
|
|
41
42
|
${imports.join("\n")}
|
|
42
43
|
|
|
43
|
-
|
|
44
|
+
/**
|
|
45
|
+
* What a function is told about the call it is serving.
|
|
46
|
+
*
|
|
47
|
+
* Passed as the second argument rather than injected into the process environment, so
|
|
48
|
+
* invocations do not have to
|
|
49
|
+
* be serialised to keep one call's configuration out of another's.
|
|
50
|
+
*/
|
|
51
|
+
interface FunctionContext {
|
|
52
|
+
readonly executionId: string
|
|
53
|
+
readonly functionName: string
|
|
54
|
+
readonly url: string
|
|
55
|
+
readonly anonKey: string
|
|
56
|
+
readonly serviceRoleKey?: string
|
|
57
|
+
readonly dbUrl?: string
|
|
58
|
+
readonly region: string
|
|
59
|
+
readonly env: Readonly<Record<string, string>>
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const handlers: Record<string, (req: Request, ctx: FunctionContext) => Response | Promise<Response>> = {
|
|
44
63
|
${routes.join("\n")}
|
|
45
64
|
}
|
|
46
65
|
|
|
@@ -50,17 +69,57 @@ const normalizedFunctionsDir = functionsDir.endsWith("/") ? functionsDir.slice(0
|
|
|
50
69
|
const sharedEnvPath = Deno.env.get("SUPATYPE_SHARED_ENV_FILE")
|
|
51
70
|
?? (normalizedFunctionsDir ? normalizedFunctionsDir + "/.env.local" : "")
|
|
52
71
|
|
|
53
|
-
|
|
72
|
+
// Nothing per-invocation is written to Deno.env, so invocations run concurrently.
|
|
73
|
+
//
|
|
74
|
+
// This used to hold a lock across the whole handler because the config was delivered by mutating
|
|
75
|
+
// the process environment, which is global: two concurrent calls would read each other's values.
|
|
76
|
+
// The lock made the router run one invocation at a time, so a function waiting on a slow API
|
|
77
|
+
// blocked every other function locally, and the deployed worker had the same lock, so local
|
|
78
|
+
// behaved exactly like production and the serialisation was invisible.
|
|
79
|
+
const invocationStore = new AsyncLocalStorage<{ executionId: string; functionName: string }>()
|
|
80
|
+
|
|
81
|
+
const realConsole = {
|
|
82
|
+
debug: console.debug.bind(console),
|
|
83
|
+
info: console.info.bind(console),
|
|
84
|
+
log: console.log.bind(console),
|
|
85
|
+
warn: console.warn.bind(console),
|
|
86
|
+
error: console.error.bind(console),
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function projectRef(): string {
|
|
90
|
+
return (Deno.env.get("SUPATYPE_PROJECT_REF") ?? "").trim() || "unknown"
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function emit(level: string, message: string, extra: Record<string, unknown> = {}): void {
|
|
94
|
+
const current = invocationStore.getStore()
|
|
95
|
+
const line = {
|
|
96
|
+
timestamp: new Date().toISOString(),
|
|
97
|
+
level,
|
|
98
|
+
service: "functions-worker",
|
|
99
|
+
project_ref: projectRef(),
|
|
100
|
+
...(current ? { request_id: current.executionId, function: current.functionName } : {}),
|
|
101
|
+
message,
|
|
102
|
+
...extra,
|
|
103
|
+
}
|
|
104
|
+
const write = level === "error" ? realConsole.error : realConsole.log
|
|
105
|
+
write(JSON.stringify(line))
|
|
106
|
+
}
|
|
54
107
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
envLock = new Promise<void>(resolve => { release = resolve })
|
|
59
|
-
await prev
|
|
108
|
+
function formatArg(value: unknown): string {
|
|
109
|
+
if (typeof value === "string") return value
|
|
110
|
+
if (value instanceof Error) return value.stack ?? value.name + ": " + value.message
|
|
60
111
|
try {
|
|
61
|
-
return
|
|
62
|
-
}
|
|
63
|
-
|
|
112
|
+
return JSON.stringify(value) ?? String(value)
|
|
113
|
+
} catch {
|
|
114
|
+
return String(value)
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// A function's own console output, structured and attributed to the call that wrote it. Captured
|
|
119
|
+
// before any handler runs so nothing it logs escapes unlabelled.
|
|
120
|
+
for (const [method, level] of [["debug", "debug"], ["info", "info"], ["log", "info"], ["warn", "warn"], ["error", "error"]] as const) {
|
|
121
|
+
console[method] = (...args: unknown[]): void => {
|
|
122
|
+
emit(level, args.map(formatArg).join(" "))
|
|
64
123
|
}
|
|
65
124
|
}
|
|
66
125
|
|
|
@@ -69,12 +128,17 @@ async function readEnvFile(path: string): Promise<Record<string, string>> {
|
|
|
69
128
|
try {
|
|
70
129
|
const text = await Deno.readTextFile(path)
|
|
71
130
|
const out: Record<string, string> = {}
|
|
72
|
-
for (const
|
|
73
|
-
const
|
|
74
|
-
if (!
|
|
75
|
-
const eq =
|
|
131
|
+
for (const raw of text.split("\\n")) {
|
|
132
|
+
const line = raw.trim()
|
|
133
|
+
if (!line || line.startsWith("#")) continue
|
|
134
|
+
const eq = line.indexOf("=")
|
|
76
135
|
if (eq <= 0) continue
|
|
77
|
-
|
|
136
|
+
const key = line.slice(0, eq).trim()
|
|
137
|
+
let value = line.slice(eq + 1).trim()
|
|
138
|
+
if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
|
|
139
|
+
value = value.slice(1, -1)
|
|
140
|
+
}
|
|
141
|
+
out[key] = value
|
|
78
142
|
}
|
|
79
143
|
return out
|
|
80
144
|
} catch {
|
|
@@ -85,32 +149,16 @@ async function readEnvFile(path: string): Promise<Record<string, string>> {
|
|
|
85
149
|
async function scopedEnvForFunction(fnName: string): Promise<Record<string, string>> {
|
|
86
150
|
const shared = await readEnvFile(sharedEnvPath)
|
|
87
151
|
if (!normalizedFunctionsDir) return shared
|
|
88
|
-
const
|
|
89
|
-
const fnVars = await readEnvFile(fnPath)
|
|
152
|
+
const fnVars = await readEnvFile(normalizedFunctionsDir + "/.env." + fnName + ".local")
|
|
90
153
|
return { ...shared, ...fnVars }
|
|
91
154
|
}
|
|
92
155
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
Deno.env.set(k, v)
|
|
100
|
-
}
|
|
101
|
-
try {
|
|
102
|
-
return await run()
|
|
103
|
-
} finally {
|
|
104
|
-
for (const k of Object.keys(scoped)) {
|
|
105
|
-
const old = prev.get(k)
|
|
106
|
-
if (old === undefined) Deno.env.delete(k)
|
|
107
|
-
else Deno.env.set(k, old)
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
})
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
Deno.serve({ port }, async (req: Request): Promise<Response> => {
|
|
156
|
+
Deno.serve({
|
|
157
|
+
port,
|
|
158
|
+
onListen: ({ hostname, port: bound }) => {
|
|
159
|
+
emit("info", "functions router listening on http://" + hostname + ":" + bound)
|
|
160
|
+
},
|
|
161
|
+
}, async (req: Request): Promise<Response> => {
|
|
114
162
|
const url = new URL(req.url)
|
|
115
163
|
const pathParts = url.pathname
|
|
116
164
|
.replace(/^\\/functions\\/v1\\/?/, "")
|
|
@@ -121,58 +169,42 @@ Deno.serve({ port }, async (req: Request): Promise<Response> => {
|
|
|
121
169
|
if (!fnName || !handlers[fnName]) {
|
|
122
170
|
return new Response(JSON.stringify({
|
|
123
171
|
error: "not_found",
|
|
124
|
-
message: fnName ?
|
|
172
|
+
message: fnName ? 'Function "' + fnName + '" not found' : "No function specified",
|
|
125
173
|
available: Object.keys(handlers),
|
|
126
174
|
}), { status: 404, headers: { "Content-Type": "application/json" } })
|
|
127
175
|
}
|
|
128
176
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
const supatypeServiceRole = Deno.env.get("SUPATYPE_SERVICE_ROLE_KEY")
|
|
143
|
-
const supatypeDbUrl = Deno.env.get("SUPATYPE_DB_URL") ?? Deno.env.get("DATABASE_URL")
|
|
144
|
-
const supatypeJwks = Deno.env.get("SUPATYPE_JWKS")
|
|
145
|
-
|
|
146
|
-
setScoped("SUPATYPE_URL", supatypeUrl)
|
|
147
|
-
setScoped("SUPATYPE_ANON_KEY", supatypeAnon)
|
|
148
|
-
setScoped("SUPATYPE_SERVICE_ROLE_KEY", supatypeServiceRole)
|
|
149
|
-
setScoped("SUPATYPE_DB_URL", supatypeDbUrl)
|
|
150
|
-
setScoped("SUPATYPE_JWKS", supatypeJwks)
|
|
151
|
-
if (!Deno.env.get("SUPATYPE_PUBLISHABLE_KEYS") && supatypeAnon) {
|
|
152
|
-
setScoped("SUPATYPE_PUBLISHABLE_KEYS", JSON.stringify({ anon: supatypeAnon }))
|
|
153
|
-
}
|
|
154
|
-
if (!Deno.env.get("SUPATYPE_SECRET_KEYS") && supatypeServiceRole) {
|
|
155
|
-
setScoped("SUPATYPE_SECRET_KEYS", JSON.stringify({ service_role: supatypeServiceRole }))
|
|
156
|
-
}
|
|
177
|
+
const anonKey = Deno.env.get("SUPATYPE_ANON_KEY") ?? ""
|
|
178
|
+
const serviceRoleKey = Deno.env.get("SUPATYPE_SERVICE_ROLE_KEY")
|
|
179
|
+
const dbUrl = Deno.env.get("SUPATYPE_DB_URL") ?? Deno.env.get("DATABASE_URL")
|
|
180
|
+
const context: FunctionContext = {
|
|
181
|
+
executionId: crypto.randomUUID(),
|
|
182
|
+
functionName: fnName,
|
|
183
|
+
url: Deno.env.get("SUPATYPE_URL") ?? "",
|
|
184
|
+
anonKey,
|
|
185
|
+
...(serviceRoleKey ? { serviceRoleKey } : {}),
|
|
186
|
+
...(dbUrl ? { dbUrl } : {}),
|
|
187
|
+
region: Deno.env.get("SUPATYPE_REGION") ?? "local",
|
|
188
|
+
env: await scopedEnvForFunction(fnName),
|
|
189
|
+
}
|
|
157
190
|
|
|
158
|
-
|
|
159
|
-
setScoped("SUPATYPE_EXECUTION_ID", crypto.randomUUID())
|
|
160
|
-
setScoped("DENO_DEPLOYMENT_ID", Deno.env.get("DENO_DEPLOYMENT_ID") ?? "local-dev")
|
|
191
|
+
const start = performance.now()
|
|
161
192
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
193
|
+
try {
|
|
194
|
+
const response = await invocationStore.run(
|
|
195
|
+
{ executionId: context.executionId, functionName: fnName },
|
|
196
|
+
async () => handlers[fnName]!(req, context),
|
|
197
|
+
)
|
|
198
|
+
emit("info", req.method + " /functions/v1/" + fnName + " -> " + response.status, {
|
|
199
|
+
status: response.status,
|
|
200
|
+
duration_ms: Number((performance.now() - start).toFixed(1)),
|
|
170
201
|
})
|
|
171
|
-
const duration = (performance.now() - start).toFixed(1)
|
|
172
|
-
console.log(\`\${req.method} /functions/v1/\${fnName} → \${response.status} (\${duration}ms)\`)
|
|
173
202
|
return response
|
|
174
203
|
} catch (err) {
|
|
175
|
-
|
|
204
|
+
emit("error", err instanceof Error ? err.message : "Unknown error", {
|
|
205
|
+
status: 500,
|
|
206
|
+
duration_ms: Number((performance.now() - start).toFixed(1)),
|
|
207
|
+
})
|
|
176
208
|
return new Response(JSON.stringify({
|
|
177
209
|
error: "function_error",
|
|
178
210
|
message: err instanceof Error ? err.message : "Unknown error",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions-router-gen.js","sourceRoot":"","sources":["../src/functions-router-gen.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,OAAO,IAAI,WAAW,GACvB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAOrF,oFAAoF;AACpF,MAAM,UAAU,wBAAwB,CAAC,YAAoB;IAC3D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,CAAA;IAExC,MAAM,OAAO,GAAG,WAAW,CAAC,YAAY,CAAC,CAAA;IACzC,MAAM,GAAG,GAA8B,EAAE,CAAA;IAEzC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAQ;QAE5D,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;QAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAE7B,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;YAC1C,IAAI,UAAU,CAAC,OAAO,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAA;QACzE,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACnC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AACzD,CAAC;AAED,SAAS,oBAAoB,CAAC,cAAsB,EAAE,UAAkB;IACtE,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAC7E,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,GAAG,EAAE,CAAA;IAC3C,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,6BAA6B,CAC3C,cAAsB,EACtB,GAA8B;IAE9B,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CACrB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CACR,kBAAkB,CAAC,UAAU,oBAAoB,CAAC,cAAc,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CACtF,CAAA;IACD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,CAAA;IAElE,OAAO
|
|
1
|
+
{"version":3,"file":"functions-router-gen.js","sourceRoot":"","sources":["../src/functions-router-gen.ts"],"names":[],"mappings":"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"}
|
package/dist/kong-config.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export interface KongDeclarativeOptions {
|
|
|
18
18
|
/** See {@link RuntimeRouteOptions.studioStripPath}. */
|
|
19
19
|
studioStripPath?: boolean | undefined;
|
|
20
20
|
/**
|
|
21
|
-
* When set, append a global Kong `acme` plugin (Let's Encrypt) with
|
|
21
|
+
* When set, append a global Kong `acme` plugin (Let's Encrypt) with RESP
|
|
22
22
|
* storage so the self-host gateway provisions and renews TLS automatically.
|
|
23
23
|
*/
|
|
24
24
|
acme?: {
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** One table's cache declaration, as the manifest carries it. */
|
|
2
|
+
export interface ManifestCacheEntry {
|
|
3
|
+
enabled?: boolean;
|
|
4
|
+
maxTtl?: number;
|
|
5
|
+
public?: boolean;
|
|
6
|
+
rows?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Every model's cache declaration, keyed by table name.
|
|
10
|
+
*
|
|
11
|
+
* A model that declared nothing is absent rather than present-and-empty. The distinction is
|
|
12
|
+
* load-bearing: the declaration is a ceiling, so "no entry" means *nothing may cache this table*,
|
|
13
|
+
* and an empty entry would read as "declared, permitting nothing" — the same outcome by a route
|
|
14
|
+
* that looks like a bug.
|
|
15
|
+
*/
|
|
16
|
+
export declare function manifestCache(ast: unknown): Record<string, ManifestCacheEntry>;
|
|
17
|
+
/** The two env names the Postgres image reads to turn Mode B on. */
|
|
18
|
+
export declare const ROWCACHE_DECODE_ENV = "SUPATYPE_KEYSPACE_ROWCACHE_DECODE";
|
|
19
|
+
export declare const ROWCACHE_READTHROUGH_ENV = "SUPATYPE_KEYSPACE_ROWCACHE_READTHROUGH";
|
|
20
|
+
/** Whether any model declares `cache: { rows: true }`. */
|
|
21
|
+
export declare function declaresRowCache(ast: unknown): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Keep the row cache's two switches in `.env` matching what the schema declares.
|
|
24
|
+
*
|
|
25
|
+
* `cache: { rows: true }` registers a table with the row cache, and registration alone serves
|
|
26
|
+
* nothing: Mode B needs `pg_keyspace.rowcache_decode` for the invalidation worker and
|
|
27
|
+
* `rowcache_readthrough` to fill on a primary-key miss. Both are written by the image's entrypoint
|
|
28
|
+
* from these variables, before any server starts, so they cannot be switched at runtime and cannot
|
|
29
|
+
* be decided by the compose file alone: only a push knows whether any model declares `rows`.
|
|
30
|
+
*
|
|
31
|
+
* Without this the stack came up with the row-cache segment reserved, the tables registered, both
|
|
32
|
+
* switches off and nothing anywhere saying so. Studio's panel was the only thing that reported it,
|
|
33
|
+
* and it reported it as an operator's missing configuration rather than as a push that had not
|
|
34
|
+
* finished the job.
|
|
35
|
+
*
|
|
36
|
+
* Written to `.env` rather than baked into the compose file for the same reason `SUPATYPE_KONG_PORT`
|
|
37
|
+
* is: `self-host compose render` runs with no AST in hand, so a value the compose file hardcoded
|
|
38
|
+
* would be whatever the last render guessed.
|
|
39
|
+
*
|
|
40
|
+
* Returns the new state when it changed, and null when it did not. A change needs the database
|
|
41
|
+
* container recreated, which the caller is the one that can say.
|
|
42
|
+
*/
|
|
43
|
+
export declare function syncRowCacheEnv(cwd: string, ast: unknown): "on" | "off" | null;
|
|
44
|
+
//# sourceMappingURL=model-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-cache.d.ts","sourceRoot":"","sources":["../src/model-cache.ts"],"names":[],"mappings":"AAqBA,iEAAiE;AACjE,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AASD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CA8B9E;AAID,oEAAoE;AACpE,eAAO,MAAM,mBAAmB,sCAAsC,CAAA;AACtE,eAAO,MAAM,wBAAwB,2CAA2C,CAAA;AAEhF,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEtD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAa9E"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lift each model's `cache` declaration into the shape the route manifest carries.
|
|
3
|
+
*
|
|
4
|
+
* Keyed by **table**, like `hooks` and `validators`, because that is what a REST path carries — the
|
|
5
|
+
* model name never reaches the wire.
|
|
6
|
+
*
|
|
7
|
+
* ## Why the manifest and not the AST
|
|
8
|
+
*
|
|
9
|
+
* `supatype push` writes the declaration into `annotations.platform.cache` too, and the server does
|
|
10
|
+
* not read it there. The schema engine writes `_supatype.schema_state.ast_snapshot` as
|
|
11
|
+
* `serde_json::to_value(&ast)` — its own parsed struct, re-serialised — and its
|
|
12
|
+
* `PlatformModelAnnotations` knows only `access` and `searchFields`. An unknown key is not an error
|
|
13
|
+
* to serde; it is silently dropped. So a declaration left to ride the AST would vanish between here
|
|
14
|
+
* and the server with nothing anywhere reporting it.
|
|
15
|
+
*
|
|
16
|
+
* `hooks` has always taken this route for the same reason. Plan §13.1 said otherwise and said to
|
|
17
|
+
* verify before relying on it; this is the verified path.
|
|
18
|
+
*/
|
|
19
|
+
import { readEnvValue, upsertEnvFile } from "./env-file.js";
|
|
20
|
+
/**
|
|
21
|
+
* Every model's cache declaration, keyed by table name.
|
|
22
|
+
*
|
|
23
|
+
* A model that declared nothing is absent rather than present-and-empty. The distinction is
|
|
24
|
+
* load-bearing: the declaration is a ceiling, so "no entry" means *nothing may cache this table*,
|
|
25
|
+
* and an empty entry would read as "declared, permitting nothing" — the same outcome by a route
|
|
26
|
+
* that looks like a bug.
|
|
27
|
+
*/
|
|
28
|
+
export function manifestCache(ast) {
|
|
29
|
+
const models = ast?.models;
|
|
30
|
+
if (!Array.isArray(models))
|
|
31
|
+
return {};
|
|
32
|
+
const out = {};
|
|
33
|
+
for (const model of models) {
|
|
34
|
+
// Guarded before the optional chains, not by them: `x?.y` protects against `x.y` being
|
|
35
|
+
// nullish, not against `x` itself being null — so a malformed entry in the models array would
|
|
36
|
+
// throw a TypeError out of `supatype push` rather than being skipped.
|
|
37
|
+
if (typeof model !== "object" || model === null)
|
|
38
|
+
continue;
|
|
39
|
+
const shaped = model;
|
|
40
|
+
const table = shaped.annotations?.db?.tableName;
|
|
41
|
+
const cache = shaped.annotations?.platform?.cache;
|
|
42
|
+
if (typeof table !== "string" || table.length === 0)
|
|
43
|
+
continue;
|
|
44
|
+
if (typeof cache !== "object" || cache === null)
|
|
45
|
+
continue;
|
|
46
|
+
const entry = {};
|
|
47
|
+
// Copied key by key rather than spread, so a field added to the AST shape has to be added here
|
|
48
|
+
// deliberately. The manifest is a wire format read by another process; silently widening it is
|
|
49
|
+
// how the two ends stop agreeing about what a field means.
|
|
50
|
+
if (typeof cache.enabled === "boolean")
|
|
51
|
+
entry.enabled = cache.enabled;
|
|
52
|
+
if (typeof cache.public === "boolean")
|
|
53
|
+
entry.public = cache.public;
|
|
54
|
+
if (typeof cache.rows === "boolean")
|
|
55
|
+
entry.rows = cache.rows;
|
|
56
|
+
if (typeof cache.maxTtl === "number" && Number.isFinite(cache.maxTtl) && cache.maxTtl >= 0) {
|
|
57
|
+
entry.maxTtl = cache.maxTtl;
|
|
58
|
+
}
|
|
59
|
+
if (Object.keys(entry).length > 0)
|
|
60
|
+
out[table] = entry;
|
|
61
|
+
}
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
// ─── Row cache enablement ────────────────────────────────────────────────────
|
|
65
|
+
/** The two env names the Postgres image reads to turn Mode B on. */
|
|
66
|
+
export const ROWCACHE_DECODE_ENV = "SUPATYPE_KEYSPACE_ROWCACHE_DECODE";
|
|
67
|
+
export const ROWCACHE_READTHROUGH_ENV = "SUPATYPE_KEYSPACE_ROWCACHE_READTHROUGH";
|
|
68
|
+
/** Whether any model declares `cache: { rows: true }`. */
|
|
69
|
+
export function declaresRowCache(ast) {
|
|
70
|
+
return Object.values(manifestCache(ast)).some((entry) => entry.rows === true);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Keep the row cache's two switches in `.env` matching what the schema declares.
|
|
74
|
+
*
|
|
75
|
+
* `cache: { rows: true }` registers a table with the row cache, and registration alone serves
|
|
76
|
+
* nothing: Mode B needs `pg_keyspace.rowcache_decode` for the invalidation worker and
|
|
77
|
+
* `rowcache_readthrough` to fill on a primary-key miss. Both are written by the image's entrypoint
|
|
78
|
+
* from these variables, before any server starts, so they cannot be switched at runtime and cannot
|
|
79
|
+
* be decided by the compose file alone: only a push knows whether any model declares `rows`.
|
|
80
|
+
*
|
|
81
|
+
* Without this the stack came up with the row-cache segment reserved, the tables registered, both
|
|
82
|
+
* switches off and nothing anywhere saying so. Studio's panel was the only thing that reported it,
|
|
83
|
+
* and it reported it as an operator's missing configuration rather than as a push that had not
|
|
84
|
+
* finished the job.
|
|
85
|
+
*
|
|
86
|
+
* Written to `.env` rather than baked into the compose file for the same reason `SUPATYPE_KONG_PORT`
|
|
87
|
+
* is: `self-host compose render` runs with no AST in hand, so a value the compose file hardcoded
|
|
88
|
+
* would be whatever the last render guessed.
|
|
89
|
+
*
|
|
90
|
+
* Returns the new state when it changed, and null when it did not. A change needs the database
|
|
91
|
+
* container recreated, which the caller is the one that can say.
|
|
92
|
+
*/
|
|
93
|
+
export function syncRowCacheEnv(cwd, ast) {
|
|
94
|
+
const want = declaresRowCache(ast);
|
|
95
|
+
const value = want ? "1" : "0";
|
|
96
|
+
const current = readEnvValue(cwd, ROWCACHE_DECODE_ENV, "");
|
|
97
|
+
const currentThrough = readEnvValue(cwd, ROWCACHE_READTHROUGH_ENV, "");
|
|
98
|
+
if (current === value && currentThrough === value)
|
|
99
|
+
return null;
|
|
100
|
+
upsertEnvFile(cwd, {
|
|
101
|
+
[ROWCACHE_DECODE_ENV]: value,
|
|
102
|
+
[ROWCACHE_READTHROUGH_ENV]: value,
|
|
103
|
+
});
|
|
104
|
+
return want ? "on" : "off";
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=model-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-cache.js","sourceRoot":"","sources":["../src/model-cache.ts"],"names":[],"mappings":"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"}
|
package/dist/model-hooks.d.ts
CHANGED
|
@@ -72,6 +72,11 @@ export declare const DEFAULT_HOOK_TIMEOUT_MS = 2000;
|
|
|
72
72
|
* the worse half of that: the schema says the field is checked, and no error appears anywhere,
|
|
73
73
|
* because the write simply succeeds.
|
|
74
74
|
*
|
|
75
|
+
* `cache` is here for a third reason of the same kind: the declaration is a ceiling the server
|
|
76
|
+
* enforces, and a manifest carrying a stale one lets a table be cached that the schema has since
|
|
77
|
+
* stopped permitting — or stops one the schema now allows, which is merely slow rather than wrong.
|
|
78
|
+
* The first of those is why it is written at push and not left to drift.
|
|
79
|
+
*
|
|
75
80
|
* **Only updates a manifest that is already there.** Creating one from scratch here would be a
|
|
76
81
|
* hazard: `functions_enabled` is a plain bool on the server's side, so a manifest carrying only
|
|
77
82
|
* hooks would read as functions *disabled*, the exact defect this repo fixed a commit ago, arriving
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-hooks.d.ts","sourceRoot":"","sources":["../src/model-hooks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model-hooks.d.ts","sourceRoot":"","sources":["../src/model-hooks.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,EAAE,CAuB1D;AAeD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,EACZ,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,GACV,MAAM,EAAE,CAoBV;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAa/F;AAED,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;CACjC;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAwC7F;AAGD,sGAAsG;AACtG,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,6FAA6F;AAC7F,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,EAAE,CAuBpE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAkClG;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,OAAO,EACZ,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,GACV,MAAM,EAAE,CAqBV;AAED,qGAAqG;AACrG,eAAO,MAAM,uBAAuB,OAAO,CAAA;AAE3C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAmBpE;AA8BD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,iDAAiD;IACjD,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,2EAA2E;IAC3E,iBAAiB,EAAE,OAAO,CAAA;IAC1B,8FAA8F;IAC9F,UAAU,EAAE,OAAO,CAAA;IACnB,mDAAmD;IACnD,UAAU,EAAE,iBAAiB,EAAE,CAAA;IAC/B;;;;;;OAMG;IACH,iBAAiB,EAAE,iBAAiB,EAAE,CAAA;IACtC,mFAAmF;IACnF,mBAAmB,EAAE,OAAO,CAAA;CAC7B;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,WAAW,CAwCxF"}
|
package/dist/model-hooks.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
12
12
|
import { join, relative } from "node:path";
|
|
13
13
|
import { generateHooksModule } from "./hooks-generator.js";
|
|
14
|
+
import { manifestCache } from "./model-cache.js";
|
|
14
15
|
/** Every hook declared across the schema, in a stable order for reporting. */
|
|
15
16
|
export function declaredHooks(ast) {
|
|
16
17
|
const models = ast?.models;
|
|
@@ -18,6 +19,9 @@ export function declaredHooks(ast) {
|
|
|
18
19
|
return [];
|
|
19
20
|
const out = [];
|
|
20
21
|
for (const model of models) {
|
|
22
|
+
// Guarded before the optional chains, not by them: see manifestHooks.
|
|
23
|
+
if (typeof model !== "object" || model === null)
|
|
24
|
+
continue;
|
|
21
25
|
const shaped = model;
|
|
22
26
|
const hooks = shaped.annotations?.platform?.hooks;
|
|
23
27
|
if (typeof hooks !== "object" || hooks === null)
|
|
@@ -103,6 +107,11 @@ export function manifestHooks(ast) {
|
|
|
103
107
|
return {};
|
|
104
108
|
const out = {};
|
|
105
109
|
for (const model of models) {
|
|
110
|
+
// Guarded before the optional chains, not by them: `x?.y` protects against `x.y` being
|
|
111
|
+
// nullish, not against `x` itself being null, so a malformed entry in the models array would
|
|
112
|
+
// throw a TypeError out of `supatype push` rather than being skipped.
|
|
113
|
+
if (typeof model !== "object" || model === null)
|
|
114
|
+
continue;
|
|
106
115
|
const shaped = model;
|
|
107
116
|
const table = shaped.annotations?.db?.tableName;
|
|
108
117
|
const hooks = shaped.annotations?.platform?.hooks;
|
|
@@ -138,6 +147,9 @@ export function declaredValidators(ast) {
|
|
|
138
147
|
return [];
|
|
139
148
|
const out = [];
|
|
140
149
|
for (const model of models) {
|
|
150
|
+
// Guarded before the optional chains, not by them: see manifestHooks.
|
|
151
|
+
if (typeof model !== "object" || model === null)
|
|
152
|
+
continue;
|
|
141
153
|
const shaped = model;
|
|
142
154
|
const validators = shaped.annotations?.platform?.validate;
|
|
143
155
|
if (typeof validators !== "object" || validators === null)
|
|
@@ -165,6 +177,11 @@ export function manifestValidators(ast) {
|
|
|
165
177
|
return {};
|
|
166
178
|
const out = {};
|
|
167
179
|
for (const model of models) {
|
|
180
|
+
// Guarded before the optional chains, not by them: `x?.y` protects against `x.y` being
|
|
181
|
+
// nullish, not against `x` itself being null, so a malformed entry in the models array would
|
|
182
|
+
// throw a TypeError out of `supatype push` rather than being skipped.
|
|
183
|
+
if (typeof model !== "object" || model === null)
|
|
184
|
+
continue;
|
|
168
185
|
const shaped = model;
|
|
169
186
|
const table = shaped.annotations?.db?.tableName;
|
|
170
187
|
const validators = shaped.annotations?.platform?.validate;
|
|
@@ -222,6 +239,11 @@ export const DEFAULT_HOOK_TIMEOUT_MS = 2000;
|
|
|
222
239
|
* the worse half of that: the schema says the field is checked, and no error appears anywhere,
|
|
223
240
|
* because the write simply succeeds.
|
|
224
241
|
*
|
|
242
|
+
* `cache` is here for a third reason of the same kind: the declaration is a ceiling the server
|
|
243
|
+
* enforces, and a manifest carrying a stale one lets a table be cached that the schema has since
|
|
244
|
+
* stopped permitting — or stops one the schema now allows, which is merely slow rather than wrong.
|
|
245
|
+
* The first of those is why it is written at push and not left to drift.
|
|
246
|
+
*
|
|
225
247
|
* **Only updates a manifest that is already there.** Creating one from scratch here would be a
|
|
226
248
|
* hazard: `functions_enabled` is a plain bool on the server's side, so a manifest carrying only
|
|
227
249
|
* hooks would read as functions *disabled*, the exact defect this repo fixed a commit ago, arriving
|
|
@@ -244,7 +266,8 @@ export function syncManifestHooks(cwd, ast) {
|
|
|
244
266
|
return false;
|
|
245
267
|
const changedHooks = applyManifestMap(parsed, "hooks", manifestHooks(ast));
|
|
246
268
|
const changedValidators = applyManifestMap(parsed, "validators", manifestValidators(ast));
|
|
247
|
-
|
|
269
|
+
const changedCache = applyManifestMap(parsed, "cache", manifestCache(ast));
|
|
270
|
+
if (!changedHooks && !changedValidators && !changedCache)
|
|
248
271
|
return false;
|
|
249
272
|
writeFileSync(manifestPath, `${JSON.stringify(parsed, null, 2)}\n`, "utf8");
|
|
250
273
|
return true;
|
|
@@ -256,6 +279,11 @@ export function syncManifestHooks(cwd, ast) {
|
|
|
256
279
|
* when it decides whether the manifest predates the feature, and an empty object left behind by a
|
|
257
280
|
* schema that no longer declares any is not the same statement.
|
|
258
281
|
*/
|
|
282
|
+
/**
|
|
283
|
+
* `Record<string, unknown>` rather than a hook map: this never looks inside a value, it compares
|
|
284
|
+
* the serialised form and swaps it. It was typed to hooks only because hooks were the first caller,
|
|
285
|
+
* and that narrowness is what a third key would otherwise have had to work around.
|
|
286
|
+
*/
|
|
259
287
|
function applyManifestMap(manifest, key, map) {
|
|
260
288
|
const next = JSON.stringify(map);
|
|
261
289
|
if (next === JSON.stringify(manifest[key] ?? {}))
|
package/dist/model-hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-hooks.js","sourceRoot":"","sources":["../src/model-hooks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model-hooks.js","sourceRoot":"","sources":["../src/model-hooks.ts"],"names":[],"mappings":"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"}
|