@supatype/cli 0.3.2 → 0.3.3

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.
Files changed (83) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +163 -161
  3. package/.turbo/turbo-typecheck.log +1 -1
  4. package/CHANGELOG.md +77 -0
  5. package/dist/augmentation-generator.d.ts.map +1 -1
  6. package/dist/augmentation-generator.js +70 -15
  7. package/dist/augmentation-generator.js.map +1 -1
  8. package/dist/cli-version-embedded.js +1 -1
  9. package/dist/commands/generate.d.ts.map +1 -1
  10. package/dist/commands/generate.js +3 -3
  11. package/dist/commands/generate.js.map +1 -1
  12. package/dist/commands/init.d.ts.map +1 -1
  13. package/dist/commands/init.js +29 -19
  14. package/dist/commands/init.js.map +1 -1
  15. package/dist/commands/seed.d.ts +27 -1
  16. package/dist/commands/seed.d.ts.map +1 -1
  17. package/dist/commands/seed.js +206 -33
  18. package/dist/commands/seed.js.map +1 -1
  19. package/dist/engine-client.d.ts +1 -0
  20. package/dist/engine-client.d.ts.map +1 -1
  21. package/dist/engine-client.js +47 -2
  22. package/dist/engine-client.js.map +1 -1
  23. package/dist/engine-floor.d.ts +27 -4
  24. package/dist/engine-floor.d.ts.map +1 -1
  25. package/dist/engine-floor.js +90 -9
  26. package/dist/engine-floor.js.map +1 -1
  27. package/dist/gitignore.d.ts.map +1 -1
  28. package/dist/gitignore.js +7 -0
  29. package/dist/gitignore.js.map +1 -1
  30. package/dist/hooks-generator.d.ts.map +1 -1
  31. package/dist/hooks-generator.js +18 -3
  32. package/dist/hooks-generator.js.map +1 -1
  33. package/dist/seed-connection.d.ts +60 -0
  34. package/dist/seed-connection.d.ts.map +1 -0
  35. package/dist/seed-connection.js +90 -0
  36. package/dist/seed-connection.js.map +1 -0
  37. package/dist/seed-ir.d.ts +66 -0
  38. package/dist/seed-ir.d.ts.map +1 -0
  39. package/dist/seed-ir.js +265 -0
  40. package/dist/seed-ir.js.map +1 -0
  41. package/dist/seed-runner.d.ts +44 -0
  42. package/dist/seed-runner.d.ts.map +1 -0
  43. package/dist/seed-runner.js +83 -0
  44. package/dist/seed-runner.js.map +1 -0
  45. package/dist/seed.d.ts +345 -0
  46. package/dist/seed.d.ts.map +1 -1
  47. package/dist/seed.js +138 -0
  48. package/dist/seed.js.map +1 -1
  49. package/dist/self-host-compose.d.ts.map +1 -1
  50. package/dist/self-host-compose.js +14 -8
  51. package/dist/self-host-compose.js.map +1 -1
  52. package/dist/type-extractor.d.ts.map +1 -1
  53. package/dist/type-extractor.js +73 -0
  54. package/dist/type-extractor.js.map +1 -1
  55. package/dist/type-generation.d.ts +29 -0
  56. package/dist/type-generation.d.ts.map +1 -1
  57. package/dist/type-generation.js +52 -0
  58. package/dist/type-generation.js.map +1 -1
  59. package/package.json +2 -2
  60. package/src/augmentation-generator.ts +73 -14
  61. package/src/cli-version-embedded.ts +1 -1
  62. package/src/commands/generate.ts +7 -3
  63. package/src/commands/init.ts +31 -21
  64. package/src/commands/seed.ts +294 -44
  65. package/src/engine-client.ts +52 -3
  66. package/src/engine-floor.ts +100 -9
  67. package/src/gitignore.ts +7 -0
  68. package/src/hooks-generator.ts +21 -6
  69. package/src/seed-connection.ts +146 -0
  70. package/src/seed-ir.ts +311 -0
  71. package/src/seed-runner.ts +109 -0
  72. package/src/seed.ts +408 -0
  73. package/src/self-host-compose.ts +14 -8
  74. package/src/type-extractor.ts +101 -0
  75. package/src/type-generation.ts +64 -0
  76. package/tests/access-composition.test.ts +123 -0
  77. package/tests/augmentation-generator.test.ts +149 -9
  78. package/tests/engine-floor.test.ts +93 -0
  79. package/tests/fixtures/seed_golden_ir.json +186 -0
  80. package/tests/runtime-contract.test.ts +31 -6
  81. package/tests/seed-connection.test.ts +158 -0
  82. package/tests/seed-ir.test.ts +436 -0
  83. package/tsconfig.tsbuildinfo +1 -1
@@ -1,12 +1,28 @@
1
+ /**
2
+ * `supatype seed`: find the seed files, collect what they describe, hand it to the engine.
3
+ *
4
+ * Discovery and the Cloud guard are what this command already did. The rest is new only in
5
+ * that it collects rather than executes: no connection handling, no SQL, no transaction, no
6
+ * error mapping, because those are the engine's now and six more language runners should not
7
+ * each reimplement them and disagree.
8
+ *
9
+ * Both module shapes are supported. A default-exported function is the new contract and is
10
+ * handed a context; a module with no default export is the old one, which does its work on
11
+ * import and is told so by name. Nothing here removes the old shape.
12
+ */
1
13
  import { existsSync, readdirSync } from "node:fs";
2
- import { join, resolve } from "node:path";
3
- import { isLinkedToCloudProject } from "../binary-cache.js";
4
- import { loadConfig } from "../config.js";
5
- import { projectRootFromConfig } from "../project-config.js";
6
- import { runTsFile } from "../tsx-runner.js";
7
- import { error, info } from "../ui/messages.js";
14
+ import { join, relative, resolve, sep } from "node:path";
15
+ import { isLinkedToCloudProject, pinnedVersion } from "../binary-cache.js";
16
+ import { loadConfig, loadSchemaAst } from "../config.js";
17
+ import { engineRequest, ensureEngine } from "../engine-client.js";
18
+ import { seedUnsupportedByPinnedEngine } from "../engine-floor.js";
19
+ import { pgSchema, projectRootFromConfig, schemaPathFromProject } from "../project-config.js";
20
+ import { DsnNotFound, redact, resolveSeedDsn } from "../seed-connection.js";
21
+ import { collectSeed, SeedCollectionFailed } from "../seed-runner.js";
22
+ import { seedBuilderPathWithDefaults } from "../type-generation.js";
23
+ import { error, info, success, warn } from "../ui/messages.js";
8
24
  const SEED_EXT = /\.(ts|mts|tsx)$/;
9
- /** Seed entries under `seeds/`, sorted by filename (Phase 10.6 C19). */
25
+ /** Seed entries under `seeds/`, sorted by filename. */
10
26
  export function discoverSeedsDir(cwd, seedsDir) {
11
27
  if (!existsSync(seedsDir))
12
28
  return [];
@@ -19,38 +35,195 @@ export function registerSeed(program) {
19
35
  .command("seed [file]")
20
36
  .description("Run database seeds: optional single file; else all seeds/*.ts (alphabetical); else seed.ts")
21
37
  .option("--force", "Allow running when the project is linked to Supatype Cloud (dangerous)", false)
38
+ .option("--atomic", "Run every seed file in one transaction", false)
39
+ .option("--status", "Show what has been applied, and what has changed since", false)
40
+ .option("--connection <dsn>", "Database to seed, instead of the resolved one")
41
+ .option("--environment <name>", "Environment name, for an `environment` condition")
22
42
  .action(async (file, opts) => {
23
- const cwd = process.cwd();
24
- const config = loadConfig(cwd);
25
- if (isLinkedToCloudProject(cwd, config) && !opts.force) {
26
- error("This project is linked to Supatype Cloud. Refusing to run seeds locally.\n" +
27
- " Pass --force only if you intend to target this linked project (advanced).");
28
- process.exit(1);
43
+ const code = await runSeed(file, opts);
44
+ if (code !== 0)
45
+ process.exit(code);
46
+ });
47
+ }
48
+ /**
49
+ * Separated from the action so the exit code is a value rather than a side effect.
50
+ *
51
+ * `0` applied, `1` a seed failed, `2` the run could not start. The split is what lets CI
52
+ * retry one and not the other.
53
+ */
54
+ export async function runSeed(file, opts) {
55
+ const cwd = process.cwd();
56
+ const config = loadConfig(cwd);
57
+ if (isLinkedToCloudProject(cwd, config) && !opts.force) {
58
+ error("This project is linked to Supatype Cloud. Refusing to run seeds locally.\n" +
59
+ " Pass --force only if you intend to target this linked project (advanced).");
60
+ return 2;
61
+ }
62
+ // Before the connection is resolved and before a builder is looked for: an engine that cannot
63
+ // seed makes both of those pointless, and the pin is the cheapest thing here to read.
64
+ const tooOld = seedUnsupportedByPinnedEngine(pinnedVersion("engine", config));
65
+ if (tooOld !== undefined) {
66
+ error(tooOld);
67
+ return 2;
68
+ }
69
+ let dsn;
70
+ try {
71
+ dsn = resolveSeedDsn(cwd, config, {
72
+ connection: opts.connection,
73
+ allowDerived: true,
74
+ }).dsn;
75
+ }
76
+ catch (e) {
77
+ error(e instanceof DsnNotFound ? e.message : String(e));
78
+ return 2;
79
+ }
80
+ await ensureEngine();
81
+ if (opts.status)
82
+ return await reportStatus(dsn);
83
+ const paths = seedPaths(file, cwd, config);
84
+ const missing = paths.filter((p) => !existsSync(p));
85
+ if (missing.length > 0) {
86
+ error(`Seed file(s) not found:\n ${missing.join("\n ")}`);
87
+ return 2;
88
+ }
89
+ const builderPath = locateBuilder(cwd, config);
90
+ if (builderPath === undefined)
91
+ return 2;
92
+ const prepared = [];
93
+ for (const path of paths) {
94
+ const label = toPosix(relative(cwd, path));
95
+ let collected;
96
+ try {
97
+ collected = collectSeed(path, {
98
+ cwd,
99
+ builderPath,
100
+ environment: opts.environment,
101
+ });
29
102
  }
30
- const root = projectRootFromConfig(config, cwd);
31
- const seedsDir = join(root, "seeds");
32
- let paths;
33
- if (file !== undefined && file.trim() !== "") {
34
- paths = [resolve(cwd, file)];
103
+ catch (e) {
104
+ error(e instanceof SeedCollectionFailed ? e.message : String(e));
105
+ return 1;
35
106
  }
36
- else {
37
- paths = discoverSeedsDir(cwd, seedsDir);
38
- if (paths.length === 0) {
39
- paths = [resolve(root, "seed.ts")];
40
- }
107
+ if (collected.stdout.trim().length > 0) {
108
+ for (const line of collected.stdout.trimEnd().split(/\r?\n/))
109
+ info(` ${label}: ${line}`);
41
110
  }
42
- const missing = paths.filter((p) => !existsSync(p));
43
- if (missing.length > 0) {
44
- error(`Seed file(s) not found:\n ${missing.join("\n ")}`);
45
- process.exit(1);
111
+ if (collected.result.shape === "legacy") {
112
+ warn(`${label} has no default export, so it ran on import.\n` +
113
+ " Export a default function to have its writes collected, ordered and applied in one transaction.");
114
+ continue;
46
115
  }
47
- for (const seedFile of paths) {
48
- info(`Running ${seedFile}...`);
49
- const result = runTsFile(seedFile, { cwd, stdio: "inherit" });
50
- if (result.exitCode !== 0) {
51
- process.exit(result.exitCode);
52
- }
116
+ prepared.push({
117
+ file: label,
118
+ document: collected.result.ir,
119
+ config: collected.result.config,
120
+ });
121
+ }
122
+ if (prepared.length === 0) {
123
+ info("No seed operations to apply.");
124
+ return 0;
125
+ }
126
+ return await apply(prepared, { cwd, config, dsn, opts });
127
+ }
128
+ // --- Discovery ---
129
+ function seedPaths(file, cwd, config) {
130
+ if (file !== undefined && file.trim() !== "")
131
+ return [resolve(cwd, file)];
132
+ const root = projectRootFromConfig(config, cwd);
133
+ const fromDir = discoverSeedsDir(cwd, join(root, "seeds"));
134
+ return fromDir.length > 0 ? fromDir : [resolve(root, "seed.ts")];
135
+ }
136
+ /**
137
+ * The generated builder, which the runtime needs for the manifest and the fingerprint.
138
+ *
139
+ * Absent is a setup problem with a one-line remedy rather than a crash: the builder is
140
+ * gitignored by design, so a fresh clone that has not run `generate` is the ordinary case.
141
+ */
142
+ function locateBuilder(cwd, config) {
143
+ const relativePath = seedBuilderPathWithDefaults(config.output);
144
+ const path = resolve(cwd, relativePath);
145
+ if (!existsSync(path)) {
146
+ error(`The generated seed builder is missing: ${toPosix(relativePath)}\n` +
147
+ " Run `supatype generate`. It needs no database and no running stack.");
148
+ return undefined;
149
+ }
150
+ return path;
151
+ }
152
+ async function apply(prepared, options) {
153
+ const { cwd, config, dsn, opts } = options;
154
+ const ast = loadSchemaAst(schemaPathFromProject(config, cwd), cwd);
155
+ // The engine takes one `--run-once` for the run, so a file asking for it decides for all
156
+ // of them. Said out loud rather than generalised silently, because the difference is
157
+ // whether work someone expected to happen happens.
158
+ const askedRunOnce = prepared.filter((one) => one.config.runOnce === true);
159
+ if (askedRunOnce.length > 0 && askedRunOnce.length !== prepared.length) {
160
+ warn("Some seed files declare `runOnce` and others do not, and the run takes one setting.\n" +
161
+ ` Applying it to all of them, because ${askedRunOnce
162
+ .map((one) => one.file)
163
+ .join(", ")} asked for it.`);
164
+ }
165
+ const result = await engineRequest("/seed", {
166
+ ast,
167
+ ir_documents: prepared.map((one) => JSON.stringify({ ...one.document, file: one.file })),
168
+ database_url: dsn,
169
+ schema: pgSchema(config),
170
+ atomic: opts.atomic,
171
+ run_once: askedRunOnce.length > 0,
172
+ ...(opts.environment !== undefined ? { environment: opts.environment } : {}),
173
+ });
174
+ return report(result, prepared.length, dsn);
175
+ }
176
+ /**
177
+ * Print what happened to every file, then the outcome.
178
+ *
179
+ * Every file, not just the one that failed: without `--atomic` a failure in the third of
180
+ * five leaves the first two committed, and a report that mentioned only the failure would
181
+ * leave the reader to guess at the rest.
182
+ */
183
+ function report(result, count, dsn) {
184
+ for (const file of result.files ?? []) {
185
+ const rows = Object.entries(file.written ?? {})
186
+ .map(([model, written]) => `${model} ${written}`)
187
+ .join(", ");
188
+ info(` ${file.file.padEnd(32)} ${file.status}${rows.length > 0 ? ` (${rows})` : ""}`);
189
+ for (const skipped of file.skippedGroups ?? []) {
190
+ info(` condition was false, skipped: ${skipped}`);
53
191
  }
192
+ }
193
+ if (result.ok) {
194
+ success(`Seeded ${count} file(s) into ${redact(dsn)}.`);
195
+ return 0;
196
+ }
197
+ const failure = result.error;
198
+ if (failure === undefined) {
199
+ error("The seed failed, and the engine said nothing about why.");
200
+ return 1;
201
+ }
202
+ const where = [failure.file, failure.path].filter((part) => part !== undefined && part !== "");
203
+ error((failure.message ?? failure.kind) +
204
+ (where.length > 0 ? `\n at ${where.join(" ")}` : "") +
205
+ (failure.remedy !== undefined && failure.remedy !== null ? `\n ${failure.remedy}` : ""));
206
+ // Nothing ran because nothing could: the environment, not the seed.
207
+ return failure.kind === "connection" || failure.kind === "document" ? 2 : 1;
208
+ }
209
+ async function reportStatus(dsn) {
210
+ const result = await engineRequest("/seed", {
211
+ database_url: dsn,
212
+ status: true,
54
213
  });
214
+ const files = result.files ?? [];
215
+ if (files.length === 0) {
216
+ info(`No seeds have been applied to ${redact(dsn)}.`);
217
+ return 0;
218
+ }
219
+ for (const entry of files) {
220
+ info(` ${entry.file.padEnd(32)} ${entry.status.padEnd(12)} ${entry.appliedAt} ` +
221
+ `${entry.durationMs}ms${entry.drifted ? " changed since it was applied" : ""}`);
222
+ }
223
+ return 0;
224
+ }
225
+ /** Reported with forward slashes, so the message reads the same on every platform. */
226
+ function toPosix(path) {
227
+ return path.split(sep).join("/");
55
228
  }
56
229
  //# sourceMappingURL=seed.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/commands/seed.ts"],"names":[],"mappings":"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"}
@@ -73,6 +73,7 @@ export declare function engineHealth(): Promise<boolean>;
73
73
  * /introspect → engine introspect
74
74
  * /validate → engine validate
75
75
  * /admin → engine admin (admin-config JSON on stdout)
76
+ * /seed → engine seed (result document JSON on stdout)
76
77
  */
77
78
  export declare function engineRequest<T = unknown>(endpoint: string, body: Record<string, unknown>): Promise<T>;
78
79
  //# sourceMappingURL=engine-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine-client.d.ts","sourceRoot":"","sources":["../src/engine-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAcH,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAA;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAC/D;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,KAAK,CAAC;YACb,IAAI,EAAE,MAAM,CAAA;YACZ,IAAI,EAAE,MAAM,CAAA;YACZ,QAAQ,EAAE,OAAO,CAAA;YACjB,OAAO,CAAC,EAAE,MAAM,CAAA;YAChB,UAAU,CAAC,EAAE,OAAO,CAAA;YACpB,MAAM,CAAC,EAAE,OAAO,CAAA;YAChB,UAAU,CAAC,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAA;SAC/C,CAAC,CAAA;KACH,CAAC,CAAA;CACH;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,EAAE,EAAE,OAAO,CAAA;IACX,IAAI,EAAE,CAAC,CAAA;IACP,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,WAAY,SAAQ,KAAK;aAGlB,QAAQ,EAAE,MAAM;aAChB,QAAQ,EAAE,MAAM,GAAG,IAAI;gBAFvC,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GAAG,IAAI;CAK1C;AAkDD,mEAAmE;AACnE,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;AAED,8DAA8D;AAC9D,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAQrD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,CAAC,GAAG,OAAO,EAC7C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,CAAC,CAAC,CA0DZ"}
1
+ {"version":3,"file":"engine-client.d.ts","sourceRoot":"","sources":["../src/engine-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAcH,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAA;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAC/D;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,KAAK,CAAC;YACb,IAAI,EAAE,MAAM,CAAA;YACZ,IAAI,EAAE,MAAM,CAAA;YACZ,QAAQ,EAAE,OAAO,CAAA;YACjB,OAAO,CAAC,EAAE,MAAM,CAAA;YAChB,UAAU,CAAC,EAAE,OAAO,CAAA;YACpB,MAAM,CAAC,EAAE,OAAO,CAAA;YAChB,UAAU,CAAC,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAA;SAC/C,CAAC,CAAA;KACH,CAAC,CAAA;CACH;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,EAAE,EAAE,OAAO,CAAA;IACX,IAAI,EAAE,CAAC,CAAA;IACP,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,WAAY,SAAQ,KAAK;aAGlB,QAAQ,EAAE,MAAM;aAChB,QAAQ,EAAE,MAAM,GAAG,IAAI;gBAFvC,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GAAG,IAAI;CAK1C;AAkDD,mEAAmE;AACnE,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;AAED,8DAA8D;AAC9D,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAQrD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAAC,CAAC,GAAG,OAAO,EAC7C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,CAAC,CAAC,CAiFZ"}
@@ -92,6 +92,7 @@ export async function engineHealth() {
92
92
  * /introspect → engine introspect
93
93
  * /validate → engine validate
94
94
  * /admin → engine admin (admin-config JSON on stdout)
95
+ * /seed → engine seed (result document JSON on stdout)
95
96
  */
96
97
  export async function engineRequest(endpoint, body) {
97
98
  const bin = await getEngineBin();
@@ -109,6 +110,18 @@ export async function engineRequest(endpoint, body) {
109
110
  writeFileSync(gzPath, Buffer.from(body["schema_sources_gz_base64"], "base64"));
110
111
  cleanup.push(gzPath);
111
112
  }
113
+ // One file per seed document. The engine takes `--ir` once per document rather than one
114
+ // combined blob, so a failure can name the file it was in.
115
+ const irPaths = [];
116
+ const documents = body["ir_documents"];
117
+ if (Array.isArray(documents)) {
118
+ documents.forEach((document, index) => {
119
+ const irPath = join(tmpDir, `ir-${Date.now()}-${index}.json`);
120
+ writeFileSync(irPath, typeof document === "string" ? document : JSON.stringify(document));
121
+ cleanup.push(irPath);
122
+ irPaths.push(irPath);
123
+ });
124
+ }
112
125
  if (body["schema_sources_manifest"] !== undefined) {
113
126
  manifestPath = join(tmpDir, `manifest-${Date.now()}.json`);
114
127
  writeFileSync(manifestPath, JSON.stringify(body["schema_sources_manifest"]));
@@ -117,6 +130,7 @@ export async function engineRequest(endpoint, body) {
117
130
  const args = endpointToArgs(endpoint, body, reqFile, {
118
131
  ...(gzPath !== undefined ? { gzPath } : {}),
119
132
  ...(manifestPath !== undefined ? { manifestPath } : {}),
133
+ ...(irPaths.length > 0 ? { irPaths } : {}),
120
134
  });
121
135
  const result = spawnSync(bin, args, {
122
136
  encoding: "utf8",
@@ -128,7 +142,15 @@ export async function engineRequest(endpoint, body) {
128
142
  }
129
143
  catch { /* ignore */ }
130
144
  }
131
- if (result.status !== 0) {
145
+ // A failed seed is an answer, not a crash.
146
+ //
147
+ // `engine seed` exits 1 when the seed itself failed and prints the result document on
148
+ // stdout: which file, what it wrote before it stopped, and the error in the schema's own
149
+ // terms. Treating a non-zero exit as "no output" threw all of that away and reported
150
+ // `Engine /seed failed (exit 1): (no output)`, which is worse than the raw Postgres error
151
+ // it replaced. Anything without a document to read still throws.
152
+ const reportsFailureAsData = endpoint === "/seed" && (result.stdout?.trim().length ?? 0) > 0;
153
+ if (result.status !== 0 && !reportsFailureAsData) {
132
154
  const stderr = result.stderr?.trim() || "(no output)";
133
155
  throw new EngineError(`Engine ${endpoint} failed (exit ${result.status}): ${stderr}`, endpoint, result.status);
134
156
  }
@@ -180,7 +202,30 @@ function endpointToArgs(endpoint, body, reqFile, sources) {
180
202
  return ["parse", "--input", reqFile];
181
203
  case "/generate": {
182
204
  const lang = body["lang"] ?? "typescript";
183
- return ["generate", "--input", reqFile, "--lang", lang];
205
+ const artifact = body["artifact"] ?? "types";
206
+ return ["generate", "--input", reqFile, "--lang", lang, "--artifact", artifact];
207
+ }
208
+ case "/seed": {
209
+ // `--status` reads the ledger and needs no schema, so it does not take `--input`:
210
+ // passing one would make the command fail on a project whose schema has moved on.
211
+ if (body["status"] === true) {
212
+ return ["seed", "--database-url", dbUrl, "--status"];
213
+ }
214
+ const documents = (sources?.irPaths ?? []).flatMap((path) => ["--ir", path]);
215
+ const environment = typeof body["environment"] === "string" ? ["--environment", body["environment"]] : [];
216
+ return [
217
+ "seed",
218
+ "--input",
219
+ reqFile,
220
+ ...documents,
221
+ "--database-url",
222
+ dbUrl,
223
+ "--schema",
224
+ schema,
225
+ ...environment,
226
+ ...(body["atomic"] === true ? ["--atomic"] : []),
227
+ ...(body["run_once"] === true ? ["--run-once"] : []),
228
+ ];
184
229
  }
185
230
  case "/introspect":
186
231
  return ["introspect", "--database-url", dbUrl, "--schema", schema];
@@ -1 +1 @@
1
- {"version":3,"file":"engine-client.js","sourceRoot":"","sources":["../src/engine-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine-client.js","sourceRoot":"","sources":["../src/engine-client.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,25 @@ export declare const ENGINE_MIN_FOR_BOUNDS = "0.2.0";
33
33
  * no snapshot table, and Studio saves drafts into nothing.
34
34
  */
35
35
  export declare const ENGINE_MIN_FOR_VERSIONS = "0.3.0";
36
+ /**
37
+ * First engine release that normalises a rich text column's contents (schema-engine v0.4.0).
38
+ *
39
+ * Silent in the same way `versions` is, and for a reason worth naming. The generated types accept
40
+ * a plain string on the way in and promise a Lexical document on the way out, and a trigger is
41
+ * what makes the second half true for every writer. An older engine emits no trigger and rejects
42
+ * nothing, so the string is stored exactly as it was written and every later read returns
43
+ * something the types say cannot happen.
44
+ */
45
+ export declare const ENGINE_MIN_FOR_RICHTEXT_TRIGGER = "0.4.0";
46
+ /**
47
+ * First engine release that has a `seed` subcommand (schema-engine v0.4.0).
48
+ *
49
+ * Unconditional, where everything else in this file is conditional on the schema. There is no way
50
+ * to write a seed that does not need the subcommand, so there is nothing to read the project for
51
+ * and nothing to point at. An older engine answers the request with a usage error about an
52
+ * unrecognised argument, which names no part of the project and reads like a broken install.
53
+ */
54
+ export declare const ENGINE_MIN_FOR_SEED = "0.4.0";
36
55
  /**
37
56
  * Compare two dotted versions numerically. Returns <0, 0 or >0.
38
57
  *
@@ -48,13 +67,17 @@ export declare function compareVersions(a: string, b: string): number;
48
67
  * that gets deleted the first time it is inconvenient.
49
68
  */
50
69
  export declare function boundsRequiringHelpers(ast: ExtractedSchemaAstV2): string[];
70
+ /** Rich text fields, which need a trigger only a new enough engine emits. */
71
+ export declare function fieldsNeedingRichTextTrigger(ast: ExtractedSchemaAstV2): string[];
51
72
  /** Models declaring `versions`, which needs a whole layer only a new enough engine emits. */
52
73
  export declare function modelsRequiringVersions(ast: ExtractedSchemaAstV2): string[];
74
+ export declare function assertEngineSupportsSchema(ast: ExtractedSchemaAstV2, pinnedEngineVersion: string | undefined): void;
53
75
  /**
54
- * Refuse a push whose schema needs something this engine cannot apply.
76
+ * Why the pinned engine cannot run a seed, or undefined when it can.
55
77
  *
56
- * Takes the pin from `versions.engine`, or undefined when unpinned. See the note above on why
57
- * that is the right source rather than the binary's own `--version`.
78
+ * Returns rather than throws, because the seed command answers in exit codes and this is a `2`:
79
+ * the run could not start, alongside a missing builder or an unreachable database, rather than a
80
+ * `1` where the seed itself was wrong.
58
81
  */
59
- export declare function assertEngineSupportsSchema(ast: ExtractedSchemaAstV2, pinnedEngineVersion: string | undefined): void;
82
+ export declare function seedUnsupportedByPinnedEngine(pinnedEngineVersion: string | undefined): string | undefined;
60
83
  //# sourceMappingURL=engine-floor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine-floor.d.ts","sourceRoot":"","sources":["../src/engine-floor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAc,MAAM,oBAAoB,CAAA;AAE1E,mGAAmG;AACnG,eAAO,MAAM,qBAAqB,UAAU,CAAA;AAE5C;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,UAAU,CAAA;AAE9C;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB5D;AAoBD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAE1E;AAED,6FAA6F;AAC7F,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAI3E;AA0CD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,oBAAoB,EACzB,mBAAmB,EAAE,MAAM,GAAG,SAAS,GACtC,IAAI,CAsBN"}
1
+ {"version":3,"file":"engine-floor.d.ts","sourceRoot":"","sources":["../src/engine-floor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAc,MAAM,oBAAoB,CAAA;AAE1E,mGAAmG;AACnG,eAAO,MAAM,qBAAqB,UAAU,CAAA;AAE5C;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,UAAU,CAAA;AAE9C;;;;;;;;GAQG;AACH,eAAO,MAAM,+BAA+B,UAAU,CAAA;AAEtD;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,UAAU,CAAA;AAE1C;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB5D;AAoBD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAE1E;AAED,6EAA6E;AAC7E,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAQhF;AAED,6FAA6F;AAC7F,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAI3E;AAqFD,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,oBAAoB,EACzB,mBAAmB,EAAE,MAAM,GAAG,SAAS,GACtC,IAAI,CAoBN;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,mBAAmB,EAAE,MAAM,GAAG,SAAS,GACtC,MAAM,GAAG,SAAS,CAapB"}
@@ -8,6 +8,25 @@ export const ENGINE_MIN_FOR_BOUNDS = "0.2.0";
8
8
  * no snapshot table, and Studio saves drafts into nothing.
9
9
  */
10
10
  export const ENGINE_MIN_FOR_VERSIONS = "0.3.0";
11
+ /**
12
+ * First engine release that normalises a rich text column's contents (schema-engine v0.4.0).
13
+ *
14
+ * Silent in the same way `versions` is, and for a reason worth naming. The generated types accept
15
+ * a plain string on the way in and promise a Lexical document on the way out, and a trigger is
16
+ * what makes the second half true for every writer. An older engine emits no trigger and rejects
17
+ * nothing, so the string is stored exactly as it was written and every later read returns
18
+ * something the types say cannot happen.
19
+ */
20
+ export const ENGINE_MIN_FOR_RICHTEXT_TRIGGER = "0.4.0";
21
+ /**
22
+ * First engine release that has a `seed` subcommand (schema-engine v0.4.0).
23
+ *
24
+ * Unconditional, where everything else in this file is conditional on the schema. There is no way
25
+ * to write a seed that does not need the subcommand, so there is nothing to read the project for
26
+ * and nothing to point at. An older engine answers the request with a usage error about an
27
+ * unrecognised argument, which names no part of the project and reads like a broken install.
28
+ */
29
+ export const ENGINE_MIN_FOR_SEED = "0.4.0";
11
30
  /**
12
31
  * Compare two dotted versions numerically. Returns <0, 0 or >0.
13
32
  *
@@ -58,6 +77,17 @@ function modelsWithConstraints(models) {
58
77
  export function boundsRequiringHelpers(ast) {
59
78
  return [...fieldsWithBounds(ast.models), ...modelsWithConstraints(ast.models)];
60
79
  }
80
+ /** Rich text fields, which need a trigger only a new enough engine emits. */
81
+ export function fieldsNeedingRichTextTrigger(ast) {
82
+ const found = [];
83
+ for (const model of ast.models) {
84
+ for (const [fieldName, field] of Object.entries(model.fields)) {
85
+ if (field.kind === "richText")
86
+ found.push(`${model.name}.${fieldName}`);
87
+ }
88
+ }
89
+ return found;
90
+ }
61
91
  /** Models declaring `versions`, which needs a whole layer only a new enough engine emits. */
62
92
  export function modelsRequiringVersions(ast) {
63
93
  return ast.models
@@ -82,6 +112,16 @@ const ENGINE_REQUIREMENTS = [
82
112
  `push reports success and you get a model with no history, no drafts and an editor that ` +
83
113
  `saves into nothing. That silence is the reason this refuses.`,
84
114
  },
115
+ {
116
+ since: ENGINE_MIN_FOR_RICHTEXT_TRIGGER,
117
+ declaredBy: fieldsNeedingRichTextTrigger,
118
+ feature: "rich text columns",
119
+ consequence: `Only engine ${ENGINE_MIN_FOR_RICHTEXT_TRIGGER}+ emits the trigger that turns a plain ` +
120
+ `string written into one of these columns into a Lexical document. The generated types ` +
121
+ `accept a string on the way in and promise a document on the way out, and the trigger is ` +
122
+ `the only thing that makes the second half true. Without it the string is stored as it ` +
123
+ `was written and a later read returns what the types say is impossible.`,
124
+ },
85
125
  ];
86
126
  /**
87
127
  * Refuse a push whose schema needs something this engine cannot apply.
@@ -89,10 +129,30 @@ const ENGINE_REQUIREMENTS = [
89
129
  * Takes the pin from `versions.engine`, or undefined when unpinned. See the note above on why
90
130
  * that is the right source rather than the binary's own `--version`.
91
131
  */
132
+ /**
133
+ * Whether a pin can be compared at all.
134
+ *
135
+ * Unpinned resolves to latest, and `local` points at a build whose version the config does not
136
+ * know. Neither can be compared, and neither is the case that breaks.
137
+ */
138
+ function comparable(pin) {
139
+ return pin !== undefined && pin !== "local";
140
+ }
141
+ /**
142
+ * The parts every refusal here shares: what is needed, and what to do about it.
143
+ *
144
+ * One builder rather than one per check, because the remedy is the only part of this message
145
+ * anyone acts on, and a second copy is a second place for it to go stale.
146
+ */
147
+ function refusal(parts) {
148
+ return (`${parts.needs}, which needs schema-engine ${parts.since} or newer, and this project ` +
149
+ `pins ${parts.pinned}.\n\n` +
150
+ `${parts.body}\n\n` +
151
+ `Raise or remove the pin in supatype.config.ts:\n` +
152
+ ` versions: { engine: "${parts.since}" } // or omit it to track latest`);
153
+ }
92
154
  export function assertEngineSupportsSchema(ast, pinnedEngineVersion) {
93
- // Unpinned resolves to latest, and `local` points at a build whose version the config does not
94
- // know. Neither can be compared, and neither is the case that breaks.
95
- if (pinnedEngineVersion === undefined || pinnedEngineVersion === "local")
155
+ if (!comparable(pinnedEngineVersion))
96
156
  return;
97
157
  for (const requirement of ENGINE_REQUIREMENTS) {
98
158
  if (compareVersions(pinnedEngineVersion, requirement.since) >= 0)
@@ -102,12 +162,33 @@ export function assertEngineSupportsSchema(ast, pinnedEngineVersion) {
102
162
  continue;
103
163
  const shown = needed.slice(0, 3).join(", ");
104
164
  const more = needed.length > 3 ? `, and ${needed.length - 3} more` : "";
105
- throw new Error(`This schema declares ${requirement.feature}, which needs schema-engine ` +
106
- `${requirement.since} or newer, and this project pins ${pinnedEngineVersion}.\n\n` +
107
- ` Declared on: ${shown}${more}\n\n` +
108
- `${requirement.consequence}\n\n` +
109
- `Raise or remove the pin in supatype.config.ts:\n` +
110
- ` versions: { engine: "${requirement.since}" } // or omit it to track latest`);
165
+ throw new Error(refusal({
166
+ needs: `This schema declares ${requirement.feature}`,
167
+ since: requirement.since,
168
+ pinned: pinnedEngineVersion,
169
+ body: ` Declared on: ${shown}${more}\n\n${requirement.consequence}`,
170
+ }));
111
171
  }
112
172
  }
173
+ /**
174
+ * Why the pinned engine cannot run a seed, or undefined when it can.
175
+ *
176
+ * Returns rather than throws, because the seed command answers in exit codes and this is a `2`:
177
+ * the run could not start, alongside a missing builder or an unreachable database, rather than a
178
+ * `1` where the seed itself was wrong.
179
+ */
180
+ export function seedUnsupportedByPinnedEngine(pinnedEngineVersion) {
181
+ if (!comparable(pinnedEngineVersion))
182
+ return undefined;
183
+ if (compareVersions(pinnedEngineVersion, ENGINE_MIN_FOR_SEED) >= 0)
184
+ return undefined;
185
+ return refusal({
186
+ needs: "Seeding is done by the engine",
187
+ since: ENGINE_MIN_FOR_SEED,
188
+ pinned: pinnedEngineVersion,
189
+ body: `An engine older than ${ENGINE_MIN_FOR_SEED} has no \`seed\` subcommand. It would answer ` +
190
+ `this run with a usage error about an unrecognised argument, which names nothing about ` +
191
+ `your project and reads like a broken install.`,
192
+ });
193
+ }
113
194
  //# sourceMappingURL=engine-floor.js.map