@forge-cms/runtime 0.7.0 → 0.8.0

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/dist/runtime.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { ForgeCmsConfig, AdapterSet } from './config.js';
2
2
  import type { CollectionBySlug, CollectionDefinition, CollectionDocument, CollectionRegistry, CollectionSlug, GlobalDefinition } from '@forge-cms/core';
3
- import type { DatabaseRecord } from '@forge-cms/db';
3
+ import type { DatabaseRecord, SchemaPlan } from '@forge-cms/db';
4
4
  import type { OperationContext } from './context.js';
5
5
  import type { ReconcileStorageOptions, ReconcileStorageReport } from './storage-intents.js';
6
6
  import type { TypedCountArgs, TypedCreateArgs, TypedDeleteArgs, TypedFindArgs, TypedFindByIDArgs, TypedFindOneArgs, TypedPaginatedDocs, TypedPreviewArgs, TypedUpdateArgs } from './typed-api.js';
@@ -33,13 +33,37 @@ export declare class ForgeCmsRuntime<TEnv = unknown, TCollections extends Collec
33
33
  private wireManagedDeleteGuards;
34
34
  /** Initialise all adapters with the runtime environment */
35
35
  init(): this;
36
- /** Sync database schema for all registered collections and globals */
36
+ /**
37
+ * Creates and additively upgrades every table the CMS uses: collections, `_global_<slug>`,
38
+ * `_versions_<slug>`, `_forge_storage_intents`, and the auth adapter's own tables.
39
+ *
40
+ * Plan first (spec 070): when the database implements `planSchema`, the whole schema — including the
41
+ * auth adapter's tables — is planned before anything runs. Any change that needs a reviewed
42
+ * migration throws `SchemaDriftError` with **no table touched anywhere**. Otherwise each area is
43
+ * synced (fresh tables and safe additive changes only). A database without `planSchema` keeps its
44
+ * own `syncSchema` behaviour, unplanned.
45
+ */
37
46
  syncSchema(): Promise<void>;
47
+ /**
48
+ * The complete schema drift plan (spec 070) for every table {@link syncSchema} manages, merged with
49
+ * the auth adapter's own (`AuthAdapter.planSchema`). Read-only: inspects the database and runs
50
+ * aggregate probes, never DDL or writes. Throws when the database adapter cannot inspect its
51
+ * persisted schema — an uninspectable schema is never reported as compatible.
52
+ */
53
+ planSchema(): Promise<SchemaPlan>;
54
+ /** Every table definition this runtime syncs through its database adapter. */
55
+ private tableDefinitions;
56
+ /**
57
+ * The refusal for a blocking plan. Duplicate version identities keep spec 062's domain diagnostic
58
+ * (examples and the inspection query) instead of the generic index conflict.
59
+ */
60
+ private schemaDriftError;
38
61
  /**
39
62
  * Creates/extends one `_versions_<slug>` table additively. Adding its unique
40
63
  * `(documentId, versionNumber)` index fails on a database that already holds duplicate version
41
64
  * identities (only the pre-062 read-then-insert race produced them): history is then reported, never
42
- * deleted, renumbered or merged — the operator decides (spec 062 §8, roadmap 0.7 / M03).
65
+ * deleted, renumbered or merged — the operator decides (spec 062 §8). Planning (spec 070) normally
66
+ * reports this before anything runs; this path covers adapters without `planSchema`.
43
67
  */
44
68
  private syncVersionTable;
45
69
  /** Find a collection definition by slug */
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAarD,OAAO,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAU5F,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAe,CAC1B,IAAI,GAAG,OAAO,EACd,YAAY,SAAS,kBAAkB,GAAG,oBAAoB,EAAE,CAChE,YAAW,gBAAgB;IAC3B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;gBAElB,MAAM,EAAE,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC;IAmCtD;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAsB/B,2DAA2D;IAC3D,IAAI,IAAI,IAAI;IAQZ,sEAAsE;IAChE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmCjC;;;;;OAKG;YACW,gBAAgB;IAiC9B,2CAA2C;IAC3C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAI7D,gDAAgD;IAChD,cAAc,IAAI,SAAS,oBAAoB,EAAE;IAIjD,uCAAuC;IACvC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIrD,4CAA4C;IAC5C,UAAU,IAAI,SAAS,gBAAgB,EAAE;IAYzC,IAAI,CAAC,KAAK,SAAS,cAAc,CAAC,YAAY,CAAC,EAC7C,IAAI,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC,GACvC,OAAO,CAAC,kBAAkB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAMnD,QAAQ,CAAC,KAAK,SAAS,cAAc,CAAC,YAAY,CAAC,EACjD,IAAI,EAAE,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,GAC3C,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;IAMrE;;;OAGG;IACH,OAAO,CAAC,KAAK,SAAS,cAAc,CAAC,YAAY,CAAC,EAChD,IAAI,EAAE,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,GAC1C,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;IAM5E,KAAK,CAAC,KAAK,SAAS,cAAc,CAAC,YAAY,CAAC,EAC9C,IAAI,EAAE,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC,GACxC,OAAO,CAAC,MAAM,CAAC;IAIlB,MAAM,CAAC,KAAK,SAAS,cAAc,CAAC,YAAY,CAAC,EAC/C,IAAI,EAAE,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,GACzC,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;IAMrE,MAAM,CAAC,KAAK,SAAS,cAAc,CAAC,YAAY,CAAC,EAC/C,IAAI,EAAE,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,GACzC,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;IAMrE,MAAM,CAAC,KAAK,SAAS,cAAc,CAAC,YAAY,CAAC,EAC/C,IAAI,EAAE,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,GACzC,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;IAQrE,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAItE,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC;IAMrE,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAIxD,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlD,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;IAIjE,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAMxD;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAMpF;;;;;;OAMG;IACH,OAAO,CAAC,KAAK,SAAS,cAAc,CAAC,YAAY,CAAC,EAChD,IAAI,EAAE,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,GAC1C,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;CAKtE;AAED;;;;;;;;GAQG;AAEH,MAAM,MAAM,kBAAkB,CAAC,IAAI,GAAG,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
package/dist/runtime.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { SchemaDriftError, formatSchemaPlan, mergeSchemaPlans, resolveCollectionIndexes } from '@forge-cms/db';
1
2
  import { isReferenced, noReferenceAssertions, validateRelationSchema } from './relation-lifecycle.js';
2
3
  import * as operations from './operations.js';
3
4
  import { validateLocalizationSchema } from './localization.js';
@@ -83,25 +84,19 @@ export class ForgeCmsRuntime {
83
84
  this.adapters.storage.init(env);
84
85
  return this;
85
86
  }
86
- /** Sync database schema for all registered collections and globals */
87
+ /**
88
+ * Creates and additively upgrades every table the CMS uses: collections, `_global_<slug>`,
89
+ * `_versions_<slug>`, `_forge_storage_intents`, and the auth adapter's own tables.
90
+ *
91
+ * Plan first (spec 070): when the database implements `planSchema`, the whole schema — including the
92
+ * auth adapter's tables — is planned before anything runs. Any change that needs a reviewed
93
+ * migration throws `SchemaDriftError` with **no table touched anywhere**. Otherwise each area is
94
+ * synced (fresh tables and safe additive changes only). A database without `planSchema` keeps its
95
+ * own `syncSchema` behaviour, unplanned.
96
+ */
87
97
  async syncSchema() {
88
- await this.adapters.database.syncSchema(this.config.collections);
89
- await this.adapters.auth.syncSchema?.();
90
- // Durable storage-cleanup intents (spec 067), only where uploads exist.
91
- if (hasUploadCollections(this.config.collections)) {
92
- await this.adapters.database.syncSchema([storageIntentsDefinition()]);
93
- }
94
- for (const global of this.config.globals ?? []) {
95
- await this.adapters.database.syncSchema([
96
- {
97
- slug: `_global_${global.slug}`,
98
- fields: global.fields,
99
- ...(global.drafts === true && { drafts: true })
100
- }
101
- ]);
102
- }
103
- // Version tables for collections with versions enabled (spec 062 §1/§8).
104
98
  const versioned = this.config.collections.filter((c) => versionOps.versionsEnabled(c));
99
+ // Checked before anything is created: history needs a document and its snapshot to commit together.
105
100
  if (versioned.length > 0) {
106
101
  const database = this.adapters.database;
107
102
  if (typeof database.atomicWrite !== 'function') {
@@ -110,15 +105,104 @@ export class ForgeCmsRuntime {
110
105
  `snapshot must commit together (specs 060/062); '${String(database.name)}' does not.`);
111
106
  }
112
107
  }
108
+ if (typeof this.adapters.database.planSchema === 'function') {
109
+ const plan = await this.planSchema();
110
+ if (plan.blocking)
111
+ throw await this.schemaDriftError(plan);
112
+ }
113
+ await this.adapters.database.syncSchema(this.config.collections);
114
+ await this.adapters.auth.syncSchema?.();
115
+ // Durable storage-cleanup intents (spec 067), only where uploads exist.
116
+ if (hasUploadCollections(this.config.collections)) {
117
+ await this.adapters.database.syncSchema([storageIntentsDefinition()]);
118
+ }
119
+ for (const global of this.config.globals ?? []) {
120
+ await this.adapters.database.syncSchema([globalTableDefinition(global)]);
121
+ }
122
+ // Version tables for collections with versions enabled (spec 062 §1/§8).
113
123
  for (const collection of versioned) {
114
124
  await this.syncVersionTable(collection);
115
125
  }
116
126
  }
127
+ /**
128
+ * The complete schema drift plan (spec 070) for every table {@link syncSchema} manages, merged with
129
+ * the auth adapter's own (`AuthAdapter.planSchema`). Read-only: inspects the database and runs
130
+ * aggregate probes, never DDL or writes. Throws when the database adapter cannot inspect its
131
+ * persisted schema — an uninspectable schema is never reported as compatible.
132
+ */
133
+ async planSchema() {
134
+ const database = this.adapters.database;
135
+ if (typeof database.planSchema !== 'function') {
136
+ throw new Error(`The '${database.name}' database adapter cannot inspect its persisted schema: it does not ` +
137
+ `implement DatabaseAdapter.planSchema() (spec 070), so ForgeCMS cannot tell whether that ` +
138
+ `schema is compatible with this configuration.`);
139
+ }
140
+ const plans = [await database.planSchema(this.tableDefinitions())];
141
+ const auth = await this.adapters.auth.planSchema?.();
142
+ if (auth)
143
+ plans.push(auth);
144
+ return mergeSchemaPlans(plans);
145
+ }
146
+ /** Every table definition this runtime syncs through its database adapter. */
147
+ tableDefinitions() {
148
+ return [
149
+ ...this.config.collections,
150
+ ...(hasUploadCollections(this.config.collections) ? [storageIntentsDefinition()] : []),
151
+ ...(this.config.globals ?? []).map(globalTableDefinition),
152
+ ...this.config.collections
153
+ .filter((c) => versionOps.versionsEnabled(c))
154
+ .map((c) => versionOps.versionCollectionDefinition(c.slug))
155
+ ];
156
+ }
157
+ /**
158
+ * The refusal for a blocking plan. Duplicate version identities keep spec 062's domain diagnostic
159
+ * (examples and the inspection query) instead of the generic index conflict.
160
+ */
161
+ async schemaDriftError(plan) {
162
+ for (const collection of this.config.collections.filter((c) => versionOps.versionsEnabled(c))) {
163
+ const definition = versionOps.versionCollectionDefinition(collection.slug);
164
+ const identityIndex = resolveCollectionIndexes(definition)[0]?.name;
165
+ const conflict = plan.changes.find((change) => change.table === definition.slug &&
166
+ change.target.name === identityIndex &&
167
+ (change.duplicateGroups ?? 0) > 0);
168
+ if (!conflict)
169
+ continue;
170
+ try {
171
+ // Registers just the identity columns with the adapter so the scan can read them (the blocked
172
+ // plan added none of the table's new columns). This sync blocks by construction, whatever
173
+ // another process does meanwhile: the stored version table always has `data`/`createdAt`,
174
+ // which this definition omits (`column-removed`). So it runs no DDL and writes no baseline.
175
+ // Like any refused sync, it leaves the adapter unfit for use until a sync succeeds; that
176
+ // successful sync registers the full definition again.
177
+ const identity = definition.fields;
178
+ await this.adapters.database
179
+ .syncSchema([
180
+ {
181
+ ...definition,
182
+ fields: {
183
+ ...(identity.documentId && { documentId: identity.documentId }),
184
+ ...(identity.versionNumber && { versionNumber: identity.versionNumber })
185
+ }
186
+ }
187
+ ])
188
+ .catch(() => undefined);
189
+ const duplicates = await versionOps.findDuplicateVersionIdentities(this.adapters.database, definition.slug);
190
+ if (duplicates.length > 0) {
191
+ return new SchemaDriftError(plan, `${duplicateVersionMessage(definition.slug, duplicates)}\n\n${formatSchemaPlan(plan)}`);
192
+ }
193
+ }
194
+ catch {
195
+ // Fall through to the generic report, which still names the conflict.
196
+ }
197
+ }
198
+ return new SchemaDriftError(plan);
199
+ }
117
200
  /**
118
201
  * Creates/extends one `_versions_<slug>` table additively. Adding its unique
119
202
  * `(documentId, versionNumber)` index fails on a database that already holds duplicate version
120
203
  * identities (only the pre-062 read-then-insert race produced them): history is then reported, never
121
- * deleted, renumbered or merged — the operator decides (spec 062 §8, roadmap 0.7 / M03).
204
+ * deleted, renumbered or merged — the operator decides (spec 062 §8). Planning (spec 070) normally
205
+ * reports this before anything runs; this path covers adapters without `planSchema`.
122
206
  */
123
207
  async syncVersionTable(collection) {
124
208
  const definition = versionOps.versionCollectionDefinition(collection.slug);
@@ -135,17 +219,7 @@ export class ForgeCmsRuntime {
135
219
  }
136
220
  if (duplicates.length === 0)
137
221
  throw err;
138
- const examples = duplicates
139
- .slice(0, 5)
140
- .map((d) => `document "${d.documentId}" version ${d.versionNumber} (${d.rows} rows)`)
141
- .join('; ');
142
- throw new Error(`Cannot add the unique (documentId, versionNumber) index to "${definition.slug}": it already ` +
143
- `contains ${duplicates.length} duplicate version ${duplicates.length === 1 ? 'identity' : 'identities'} ` +
144
- `— e.g. ${examples}. They were produced by concurrent updates before ForgeCMS enforced ` +
145
- `version identity. ForgeCMS will not delete, renumber or merge version history automatically. ` +
146
- `Inspect them with: SELECT "documentId", "versionNumber", COUNT(*) FROM "${definition.slug}" ` +
147
- `GROUP BY "documentId", "versionNumber" HAVING COUNT(*) > 1; decide which rows to keep ` +
148
- `(renumber or delete the extras after taking a backup), then restart.`, { cause: err });
222
+ throw new Error(duplicateVersionMessage(definition.slug, duplicates), { cause: err });
149
223
  }
150
224
  }
151
225
  /** Find a collection definition by slug */
@@ -237,4 +311,26 @@ export class ForgeCmsRuntime {
237
311
  return operations.preview(this, args);
238
312
  }
239
313
  }
314
+ /** The internal table a global is stored in. */
315
+ function globalTableDefinition(global) {
316
+ return {
317
+ slug: `_global_${global.slug}`,
318
+ fields: global.fields,
319
+ ...(global.drafts === true && { drafts: true })
320
+ };
321
+ }
322
+ /** Spec 062's diagnostic for historical duplicate version identities. */
323
+ function duplicateVersionMessage(slug, duplicates) {
324
+ const examples = duplicates
325
+ .slice(0, 5)
326
+ .map((d) => `document "${d.documentId}" version ${d.versionNumber} (${d.rows} rows)`)
327
+ .join('; ');
328
+ return (`Cannot add the unique (documentId, versionNumber) index to "${slug}": it already ` +
329
+ `contains ${duplicates.length} duplicate version ${duplicates.length === 1 ? 'identity' : 'identities'} ` +
330
+ `— e.g. ${examples}. They were produced by concurrent updates before ForgeCMS enforced ` +
331
+ `version identity. ForgeCMS will not delete, renumber or merge version history automatically. ` +
332
+ `Inspect them with: SELECT "documentId", "versionNumber", COUNT(*) FROM "${slug}" ` +
333
+ `GROUP BY "documentId", "versionNumber" HAVING COUNT(*) > 1; decide which rows to keep ` +
334
+ `(renumber or delete the extras after taking a backup), then restart.`);
335
+ }
240
336
  //# sourceMappingURL=runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge-cms/runtime",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "Runtime orchestrator for ForgeCMS — binds schema, adapters, and handlers.",
5
5
  "author": "ForgeCMS contributors",
6
6
  "license": "MIT",
@@ -35,17 +35,17 @@
35
35
  }
36
36
  },
37
37
  "dependencies": {
38
- "@forge-cms/api": "0.7.0",
39
- "@forge-cms/auth": "0.7.0",
40
- "@forge-cms/core": "0.7.0",
41
- "@forge-cms/db": "0.7.0",
42
- "@forge-cms/storage": "0.7.0"
38
+ "@forge-cms/api": "0.8.0",
39
+ "@forge-cms/auth": "0.8.0",
40
+ "@forge-cms/storage": "0.8.0",
41
+ "@forge-cms/core": "0.8.0",
42
+ "@forge-cms/db": "0.8.0"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@libsql/client": "0.17.3",
46
46
  "typescript": "5.9.2",
47
47
  "vitest": "4.1.6",
48
- "@forge-cms/testing": "0.7.0"
48
+ "@forge-cms/testing": "0.8.0"
49
49
  },
50
50
  "scripts": {
51
51
  "build": "tsc -p tsconfig.build.json",