@forge-cms/runtime 0.3.0 → 0.5.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/globals.d.ts.map +1 -1
- package/dist/globals.js +25 -4
- package/dist/globals.js.map +1 -1
- package/dist/handlers.d.ts +13 -7
- package/dist/handlers.d.ts.map +1 -1
- package/dist/handlers.js +27 -52
- package/dist/handlers.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/operations.d.ts +50 -0
- package/dist/operations.d.ts.map +1 -1
- package/dist/operations.js +162 -57
- package/dist/operations.js.map +1 -1
- package/dist/populate.d.ts +23 -3
- package/dist/populate.d.ts.map +1 -1
- package/dist/populate.js +40 -8
- package/dist/populate.js.map +1 -1
- package/dist/read-policy.d.ts +35 -0
- package/dist/read-policy.d.ts.map +1 -0
- package/dist/read-policy.js +59 -0
- package/dist/read-policy.js.map +1 -0
- package/dist/relation-integrity.d.ts +70 -9
- package/dist/relation-integrity.d.ts.map +1 -1
- package/dist/relation-integrity.js +88 -59
- package/dist/relation-integrity.js.map +1 -1
- package/dist/runtime.d.ts +5 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +8 -29
- package/dist/runtime.js.map +1 -1
- package/dist/typed-api.d.ts +2 -2
- package/dist/typed-api.d.ts.map +1 -1
- package/dist/versions.d.ts +4 -6
- package/dist/versions.d.ts.map +1 -1
- package/dist/versions.js +56 -29
- package/dist/versions.js.map +1 -1
- package/package.json +7 -7
|
@@ -1,33 +1,94 @@
|
|
|
1
|
-
import type { CollectionDefinition, RelationFieldOptions } from '@forge-cms/core';
|
|
1
|
+
import type { CmsUser, CollectionDefinition, RelationFieldOptions } from '@forge-cms/core';
|
|
2
2
|
import type { DatabaseRecord } from '@forge-cms/db';
|
|
3
3
|
import type { OperationContext } from './context.js';
|
|
4
4
|
/**
|
|
5
5
|
* Relation integrity utilities for handling cascade, restrict, and set-null on delete.
|
|
6
|
+
*
|
|
7
|
+
* Spec 058 §5 hardening: dependent mutations (cascade delete, set-null update) now route through a
|
|
8
|
+
* caller-supplied {@link RelationMutator} — structurally typed here so this module never imports
|
|
9
|
+
* `operations.ts` (which imports *this* module for `checkDeleteRestrictions`/etc.; a two-way import
|
|
10
|
+
* would be a cycle). `operations.ts`'s `deleteDocument` supplies a real mutator backed by its own
|
|
11
|
+
* `deleteDocument`/`update` functions, so a cascade/set-null gets the full pipeline (access, field-
|
|
12
|
+
* write checks, validation, hooks, version snapshots, and — for cascade — recursive relation-integrity
|
|
13
|
+
* on each dependent document) instead of a raw, unchecked adapter write. A caller that does not supply
|
|
14
|
+
* a mutator (every pre-058 direct caller of these exported functions, including this package's own
|
|
15
|
+
* unit tests) gets the previous raw-adapter-write behavior unchanged — these functions remain usable as
|
|
16
|
+
* low-level primitives, they just don't recurse in that mode (matching their pre-058 one-level-only
|
|
17
|
+
* behavior, documented explicitly rather than silently changed).
|
|
6
18
|
*/
|
|
19
|
+
export interface RelationMutator {
|
|
20
|
+
deleteDocument(args: {
|
|
21
|
+
collection: string;
|
|
22
|
+
id: string;
|
|
23
|
+
user?: CmsUser | null;
|
|
24
|
+
overrideAccess?: boolean;
|
|
25
|
+
}): Promise<unknown>;
|
|
26
|
+
update(args: {
|
|
27
|
+
collection: string;
|
|
28
|
+
id: string;
|
|
29
|
+
data: Record<string, unknown>;
|
|
30
|
+
user?: CmsUser | null;
|
|
31
|
+
overrideAccess?: boolean;
|
|
32
|
+
}): Promise<unknown>;
|
|
33
|
+
}
|
|
34
|
+
export interface RelationIntegrityOptions {
|
|
35
|
+
/**
|
|
36
|
+
* Routes dependent mutations through the real Local API pipeline instead of a raw adapter write.
|
|
37
|
+
* Omitted = raw `ctx.adapters.database.delete()`/`.update()` calls (the pre-058 behavior, kept for
|
|
38
|
+
* direct/advanced callers) — `operations.ts`'s `deleteDocument` always supplies one.
|
|
39
|
+
*/
|
|
40
|
+
mutator?: RelationMutator;
|
|
41
|
+
/** Attributed to dependent mutations (hooks/audit) when a mutator is supplied. */
|
|
42
|
+
user?: CmsUser | null;
|
|
43
|
+
/**
|
|
44
|
+
* Cycle/self-relation/diamond-reference guard shared across one whole cascade+set-null traversal —
|
|
45
|
+
* every processed `"collection:id"` is added here before it is mutated, so a reference cycle cannot
|
|
46
|
+
* be revisited and a document reachable by two different cascade paths is only ever mutated once.
|
|
47
|
+
* Callers normally omit this; `operations.ts`'s `deleteDocument` seeds and threads one through.
|
|
48
|
+
*/
|
|
49
|
+
visited?: Set<string>;
|
|
50
|
+
}
|
|
7
51
|
/**
|
|
8
|
-
* Finds all relation fields in a collection that reference a target collection.
|
|
52
|
+
* Finds all relation fields in a collection that reference a target collection. Includes
|
|
53
|
+
* self-relations (`collection === targetCollection`) — spec 058 §5 removed the previous same-collection
|
|
54
|
+
* skip, which silently let a self-relation's `onDelete` go unenforced entirely.
|
|
9
55
|
*/
|
|
10
56
|
export declare function findRelationFields(collection: CollectionDefinition, targetCollection: string): Array<{
|
|
11
57
|
fieldName: string;
|
|
12
58
|
options: RelationFieldOptions;
|
|
13
59
|
}>;
|
|
14
60
|
/**
|
|
15
|
-
* Finds all documents in a collection that reference a specific document ID.
|
|
61
|
+
* Finds all documents in a collection that reference a specific document ID. The many-relation branch
|
|
62
|
+
* uses the `containsValue` operator (spec 050, every adapter) for a real database-side membership
|
|
63
|
+
* query instead of an unconditional full-table scan filtered in JavaScript (spec 058 §5).
|
|
16
64
|
*/
|
|
17
65
|
export declare function findReferencingDocuments(ctx: OperationContext, collection: CollectionDefinition, fieldName: string, documentId: string, many: boolean): Promise<DatabaseRecord[]>;
|
|
18
66
|
/**
|
|
19
|
-
* Checks if a document can be deleted based on relation constraints.
|
|
20
|
-
*
|
|
67
|
+
* Checks if a document can be deleted based on relation constraints. Throws {@link InvalidInputError}
|
|
68
|
+
* — before any mutation happens — if deletion is restricted, or if a `set-null` relation targets a
|
|
69
|
+
* `required: true` field that has live references: a null value can never satisfy a required field, so
|
|
70
|
+
* this is treated the same as `restrict` rather than failing deep inside a partially-completed cascade
|
|
71
|
+
* with a generic validation error (spec 058 §5's required-field-on-set-null guard).
|
|
21
72
|
*/
|
|
22
73
|
export declare function checkDeleteRestrictions(ctx: OperationContext, targetCollection: CollectionDefinition, documentId: string): Promise<void>;
|
|
23
74
|
/**
|
|
24
|
-
* Handles cascade delete: deletes all documents that reference the deleted document.
|
|
75
|
+
* Handles cascade delete: deletes all documents that reference the deleted document. With a real
|
|
76
|
+
* mutator supplied, each dependent delete recurses through the full delete pipeline (its own
|
|
77
|
+
* `checkDeleteRestrictions`/cascade/set-null included) — so a cascade chain several levels deep is
|
|
78
|
+
* fully processed, not just one level. Not transactional: if a later step fails (a second-level
|
|
79
|
+
* `restrict`, a hook throwing, a DB error), documents already deleted by earlier steps stay deleted —
|
|
80
|
+
* the current `DatabaseAdapter` contract has no cross-document transaction to roll back with, and this
|
|
81
|
+
* matches the pre-058 code's identical (if previously undocumented) property.
|
|
25
82
|
*/
|
|
26
|
-
export declare function handleCascadeDelete(ctx: OperationContext, targetCollection: CollectionDefinition, documentId: string): Promise<void>;
|
|
83
|
+
export declare function handleCascadeDelete(ctx: OperationContext, targetCollection: CollectionDefinition, documentId: string, integrityOptions?: RelationIntegrityOptions): Promise<void>;
|
|
27
84
|
/**
|
|
28
|
-
* Handles set-null: sets relation fields to null
|
|
85
|
+
* Handles set-null: sets relation fields to null (or removes the id from a many-relation array) in
|
|
86
|
+
* all referencing documents. Skips a document already processed elsewhere in this same delete
|
|
87
|
+
* operation (cascade-deleted, or already set-null'd via another field/path) via the shared `visited`
|
|
88
|
+
* set — including the case of a self-relation pointing a document at itself, which would otherwise try
|
|
89
|
+
* to update a row that is itself mid-deletion.
|
|
29
90
|
*/
|
|
30
|
-
export declare function handleSetNullOnDelete(ctx: OperationContext, targetCollection: CollectionDefinition, documentId: string): Promise<void>;
|
|
91
|
+
export declare function handleSetNullOnDelete(ctx: OperationContext, targetCollection: CollectionDefinition, documentId: string, integrityOptions?: RelationIntegrityOptions): Promise<void>;
|
|
31
92
|
/**
|
|
32
93
|
* Finds orphaned documents: documents with relation fields pointing to non-existent documents.
|
|
33
94
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation-integrity.d.ts","sourceRoot":"","sources":["../src/relation-integrity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"relation-integrity.d.ts","sourceRoot":"","sources":["../src/relation-integrity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrD;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,IAAI,EAAE;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QACtB,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrB,MAAM,CAAC,IAAI,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QACtB,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,kFAAkF;IAClF,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACvB;AASD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,oBAAoB,EAChC,gBAAgB,EAAE,MAAM,GACvB,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,oBAAoB,CAAA;CAAE,CAAC,CAa7D;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,gBAAgB,EACrB,UAAU,EAAE,oBAAoB,EAChC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,cAAc,EAAE,CAAC,CAW3B;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,gBAAgB,EACrB,gBAAgB,EAAE,oBAAoB,EACtC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,gBAAgB,EACrB,gBAAgB,EAAE,oBAAoB,EACtC,UAAU,EAAE,MAAM,EAClB,gBAAgB,GAAE,wBAA6B,GAC9C,OAAO,CAAC,IAAI,CAAC,CAoCf;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,gBAAgB,EACrB,gBAAgB,EAAE,oBAAoB,EACtC,UAAU,EAAE,MAAM,EAClB,gBAAgB,GAAE,wBAA6B,GAC9C,OAAO,CAAC,IAAI,CAAC,CAuCf;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,gBAAgB,EACrB,UAAU,EAAE,oBAAoB,GAC/B,OAAO,CAAC,KAAK,CAAC;IAAE,QAAQ,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAkCpF"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { InvalidInputError } from './errors.js';
|
|
2
|
+
function defaultMutator(ctx) {
|
|
3
|
+
return {
|
|
4
|
+
deleteDocument: (args) => ctx.adapters.database.delete(args.collection, args.id),
|
|
5
|
+
update: (args) => ctx.adapters.database.update(args.collection, args.id, args.data)
|
|
6
|
+
};
|
|
7
|
+
}
|
|
2
8
|
/**
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* Finds all relation fields in a collection that reference a target collection.
|
|
9
|
+
* Finds all relation fields in a collection that reference a target collection. Includes
|
|
10
|
+
* self-relations (`collection === targetCollection`) — spec 058 §5 removed the previous same-collection
|
|
11
|
+
* skip, which silently let a self-relation's `onDelete` go unenforced entirely.
|
|
7
12
|
*/
|
|
8
13
|
export function findRelationFields(collection, targetCollection) {
|
|
9
14
|
const relations = [];
|
|
@@ -18,96 +23,120 @@ export function findRelationFields(collection, targetCollection) {
|
|
|
18
23
|
return relations;
|
|
19
24
|
}
|
|
20
25
|
/**
|
|
21
|
-
* Finds all documents in a collection that reference a specific document ID.
|
|
26
|
+
* Finds all documents in a collection that reference a specific document ID. The many-relation branch
|
|
27
|
+
* uses the `containsValue` operator (spec 050, every adapter) for a real database-side membership
|
|
28
|
+
* query instead of an unconditional full-table scan filtered in JavaScript (spec 058 §5).
|
|
22
29
|
*/
|
|
23
30
|
export async function findReferencingDocuments(ctx, collection, fieldName, documentId, many) {
|
|
24
31
|
if (many) {
|
|
25
|
-
// For many relations, we need to check if the ID is in the array
|
|
26
|
-
const allDocs = await ctx.adapters.database.findMany({ collection: collection.slug });
|
|
27
|
-
return allDocs.filter((doc) => {
|
|
28
|
-
const value = doc[fieldName];
|
|
29
|
-
return Array.isArray(value) && value.includes(documentId);
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
// For single relations, use where clause
|
|
34
32
|
return ctx.adapters.database.findMany({
|
|
35
33
|
collection: collection.slug,
|
|
36
|
-
where: { [fieldName]: documentId }
|
|
34
|
+
where: { [fieldName]: { containsValue: documentId } }
|
|
37
35
|
});
|
|
38
36
|
}
|
|
37
|
+
return ctx.adapters.database.findMany({
|
|
38
|
+
collection: collection.slug,
|
|
39
|
+
where: { [fieldName]: documentId }
|
|
40
|
+
});
|
|
39
41
|
}
|
|
40
42
|
/**
|
|
41
|
-
* Checks if a document can be deleted based on relation constraints.
|
|
42
|
-
*
|
|
43
|
+
* Checks if a document can be deleted based on relation constraints. Throws {@link InvalidInputError}
|
|
44
|
+
* — before any mutation happens — if deletion is restricted, or if a `set-null` relation targets a
|
|
45
|
+
* `required: true` field that has live references: a null value can never satisfy a required field, so
|
|
46
|
+
* this is treated the same as `restrict` rather than failing deep inside a partially-completed cascade
|
|
47
|
+
* with a generic validation error (spec 058 §5's required-field-on-set-null guard).
|
|
43
48
|
*/
|
|
44
49
|
export async function checkDeleteRestrictions(ctx, targetCollection, documentId) {
|
|
45
|
-
// Check all collections for relations to this collection
|
|
46
50
|
for (const collection of ctx.getCollections()) {
|
|
47
|
-
if (collection.slug === targetCollection.slug)
|
|
48
|
-
continue;
|
|
49
51
|
const relations = findRelationFields(collection, targetCollection.slug);
|
|
50
52
|
for (const { fieldName, options } of relations) {
|
|
51
53
|
const onDelete = options.onDelete ?? 'restrict';
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
54
|
+
const unsafeRequiredSetNull = onDelete === 'set-null' && options.required === true;
|
|
55
|
+
if (onDelete !== 'restrict' && !unsafeRequiredSetNull)
|
|
56
|
+
continue;
|
|
57
|
+
const referencing = await findReferencingDocuments(ctx, collection, fieldName, documentId, options.many ?? false);
|
|
58
|
+
if (referencing.length === 0)
|
|
59
|
+
continue;
|
|
60
|
+
if (unsafeRequiredSetNull) {
|
|
61
|
+
throw new InvalidInputError(`Cannot delete document '${documentId}' from '${targetCollection.slug}': field '${fieldName}' ` +
|
|
62
|
+
`on '${collection.slug}' is required and configured 'onDelete: set-null', which cannot ` +
|
|
63
|
+
`satisfy ${referencing.length} referencing document(s) without violating that requirement`);
|
|
58
64
|
}
|
|
65
|
+
throw new InvalidInputError(`Cannot delete document '${documentId}' from '${targetCollection.slug}': ` +
|
|
66
|
+
`referenced by ${referencing.length} document(s) in '${collection.slug}'`);
|
|
59
67
|
}
|
|
60
68
|
}
|
|
61
69
|
}
|
|
62
70
|
/**
|
|
63
|
-
* Handles cascade delete: deletes all documents that reference the deleted document.
|
|
71
|
+
* Handles cascade delete: deletes all documents that reference the deleted document. With a real
|
|
72
|
+
* mutator supplied, each dependent delete recurses through the full delete pipeline (its own
|
|
73
|
+
* `checkDeleteRestrictions`/cascade/set-null included) — so a cascade chain several levels deep is
|
|
74
|
+
* fully processed, not just one level. Not transactional: if a later step fails (a second-level
|
|
75
|
+
* `restrict`, a hook throwing, a DB error), documents already deleted by earlier steps stay deleted —
|
|
76
|
+
* the current `DatabaseAdapter` contract has no cross-document transaction to roll back with, and this
|
|
77
|
+
* matches the pre-058 code's identical (if previously undocumented) property.
|
|
64
78
|
*/
|
|
65
|
-
export async function handleCascadeDelete(ctx, targetCollection, documentId) {
|
|
79
|
+
export async function handleCascadeDelete(ctx, targetCollection, documentId, integrityOptions = {}) {
|
|
80
|
+
const mutator = integrityOptions.mutator ?? defaultMutator(ctx);
|
|
81
|
+
const visited = integrityOptions.visited ?? new Set();
|
|
82
|
+
const user = integrityOptions.user ?? null;
|
|
66
83
|
for (const collection of ctx.getCollections()) {
|
|
67
|
-
if (collection.slug === targetCollection.slug)
|
|
68
|
-
continue;
|
|
69
84
|
const relations = findRelationFields(collection, targetCollection.slug);
|
|
70
85
|
for (const { fieldName, options } of relations) {
|
|
71
86
|
const onDelete = options.onDelete ?? 'restrict';
|
|
72
|
-
if (onDelete
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
87
|
+
if (onDelete !== 'cascade')
|
|
88
|
+
continue;
|
|
89
|
+
const referencing = await findReferencingDocuments(ctx, collection, fieldName, documentId, options.many ?? false);
|
|
90
|
+
for (const doc of referencing) {
|
|
91
|
+
const key = `${collection.slug}:${doc.id}`;
|
|
92
|
+
// Already deleted (or in progress) via another cascade path, or a reference cycle — do not
|
|
93
|
+
// reprocess or recurse forever.
|
|
94
|
+
if (visited.has(key))
|
|
95
|
+
continue;
|
|
96
|
+
visited.add(key);
|
|
97
|
+
await mutator.deleteDocument({
|
|
98
|
+
collection: collection.slug,
|
|
99
|
+
id: doc.id,
|
|
100
|
+
overrideAccess: true,
|
|
101
|
+
...(user !== null && { user })
|
|
102
|
+
});
|
|
78
103
|
}
|
|
79
104
|
}
|
|
80
105
|
}
|
|
81
106
|
}
|
|
82
107
|
/**
|
|
83
|
-
* Handles set-null: sets relation fields to null
|
|
108
|
+
* Handles set-null: sets relation fields to null (or removes the id from a many-relation array) in
|
|
109
|
+
* all referencing documents. Skips a document already processed elsewhere in this same delete
|
|
110
|
+
* operation (cascade-deleted, or already set-null'd via another field/path) via the shared `visited`
|
|
111
|
+
* set — including the case of a self-relation pointing a document at itself, which would otherwise try
|
|
112
|
+
* to update a row that is itself mid-deletion.
|
|
84
113
|
*/
|
|
85
|
-
export async function handleSetNullOnDelete(ctx, targetCollection, documentId) {
|
|
114
|
+
export async function handleSetNullOnDelete(ctx, targetCollection, documentId, integrityOptions = {}) {
|
|
115
|
+
const mutator = integrityOptions.mutator ?? defaultMutator(ctx);
|
|
116
|
+
const visited = integrityOptions.visited ?? new Set();
|
|
117
|
+
const user = integrityOptions.user ?? null;
|
|
86
118
|
for (const collection of ctx.getCollections()) {
|
|
87
|
-
if (collection.slug === targetCollection.slug)
|
|
88
|
-
continue;
|
|
89
119
|
const relations = findRelationFields(collection, targetCollection.slug);
|
|
90
120
|
for (const { fieldName, options } of relations) {
|
|
91
121
|
const onDelete = options.onDelete ?? 'restrict';
|
|
92
|
-
if (onDelete
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
122
|
+
if (onDelete !== 'set-null')
|
|
123
|
+
continue;
|
|
124
|
+
const referencing = await findReferencingDocuments(ctx, collection, fieldName, documentId, options.many ?? false);
|
|
125
|
+
for (const doc of referencing) {
|
|
126
|
+
const key = `${collection.slug}:${doc.id}`;
|
|
127
|
+
if (visited.has(key))
|
|
128
|
+
continue;
|
|
129
|
+
visited.add(key);
|
|
130
|
+
const newValue = options.many
|
|
131
|
+
? (doc[fieldName] ?? []).filter((id) => id !== documentId)
|
|
132
|
+
: null;
|
|
133
|
+
await mutator.update({
|
|
134
|
+
collection: collection.slug,
|
|
135
|
+
id: doc.id,
|
|
136
|
+
data: { [fieldName]: newValue },
|
|
137
|
+
overrideAccess: true,
|
|
138
|
+
...(user !== null && { user })
|
|
139
|
+
});
|
|
111
140
|
}
|
|
112
141
|
}
|
|
113
142
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation-integrity.js","sourceRoot":"","sources":["../src/relation-integrity.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"relation-integrity.js","sourceRoot":"","sources":["../src/relation-integrity.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -53,8 +53,11 @@ export declare class ForgeCmsRuntime<TEnv = unknown, TCollections extends Collec
|
|
|
53
53
|
restoreVersion(args: RestoreVersionArgs): Promise<DatabaseRecord>;
|
|
54
54
|
createVersion(args: CreateVersionArgs): Promise<Version>;
|
|
55
55
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
56
|
+
* A non-persistent simulation of a permitted create/update (spec 058 §3) — merges stored data with
|
|
57
|
+
* unsaved changes for an existing document, or previews a new one. Delegates to `operations.preview`,
|
|
58
|
+
* which enforces the same access/field-projection policy `find`/`create`/`update` do; see that
|
|
59
|
+
* function's docs for the exact semantics. `overrideAccess` defaults to `true` like every other Local
|
|
60
|
+
* API method (a direct call is trusted server code).
|
|
58
61
|
*/
|
|
59
62
|
preview<TSlug extends CollectionSlug<TCollections>>(args: TypedPreviewArgs<TCollections, TSlug>): Promise<CollectionDocument<CollectionBySlug<TCollections, TSlug>>>;
|
|
60
63
|
}
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.js
CHANGED
|
@@ -128,42 +128,21 @@ export class ForgeCmsRuntime {
|
|
|
128
128
|
return versionOps.getVersion(this, args);
|
|
129
129
|
}
|
|
130
130
|
restoreVersion(args) {
|
|
131
|
-
return
|
|
131
|
+
return operations.restoreVersion(this, args);
|
|
132
132
|
}
|
|
133
133
|
createVersion(args) {
|
|
134
134
|
return versionOps.createVersion(this, args);
|
|
135
135
|
}
|
|
136
136
|
// --- Preview ----------------------------------------------------------------------------
|
|
137
137
|
/**
|
|
138
|
-
*
|
|
139
|
-
*
|
|
138
|
+
* A non-persistent simulation of a permitted create/update (spec 058 §3) — merges stored data with
|
|
139
|
+
* unsaved changes for an existing document, or previews a new one. Delegates to `operations.preview`,
|
|
140
|
+
* which enforces the same access/field-projection policy `find`/`create`/`update` do; see that
|
|
141
|
+
* function's docs for the exact semantics. `overrideAccess` defaults to `true` like every other Local
|
|
142
|
+
* API method (a direct call is trusted server code).
|
|
140
143
|
*/
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
if (!collection) {
|
|
144
|
-
throw new (await import('./errors.js')).NotFoundError(`Collection '${args.collection}' not found`);
|
|
145
|
-
}
|
|
146
|
-
let previewData;
|
|
147
|
-
let existing = null;
|
|
148
|
-
if (args.id) {
|
|
149
|
-
existing = await this.adapters.database.findById(args.collection, args.id);
|
|
150
|
-
if (!existing) {
|
|
151
|
-
throw new (await import('./errors.js')).NotFoundError(`Document '${args.id}' not found`);
|
|
152
|
-
}
|
|
153
|
-
previewData = { ...existing, ...args.data };
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
previewData = args.data;
|
|
157
|
-
}
|
|
158
|
-
// Apply field defaults and auto-slugs
|
|
159
|
-
const { applyFieldDefaults, applyAutoSlugs } = await import('./defaults.js');
|
|
160
|
-
previewData = applyAutoSlugs(collection, applyFieldDefaults(collection, previewData), existing ?? undefined);
|
|
161
|
-
// Populate relations if depth > 0
|
|
162
|
-
if (args.depth && args.depth > 0) {
|
|
163
|
-
const { populateRecord } = await import('./populate.js');
|
|
164
|
-
previewData = await populateRecord(previewData, collection, this);
|
|
165
|
-
}
|
|
166
|
-
return previewData;
|
|
144
|
+
preview(args) {
|
|
145
|
+
return operations.preview(this, args);
|
|
167
146
|
}
|
|
168
147
|
}
|
|
169
148
|
//# sourceMappingURL=runtime.js.map
|
package/dist/runtime.js.map
CHANGED
|
@@ -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/dist/typed-api.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CollectionBySlug, CollectionDefinition, CollectionDocument, CollectionInput, CollectionRegistry, CollectionSlug } from '@forge-cms/core';
|
|
2
2
|
import type { WhereCondition } from '@forge-cms/db';
|
|
3
|
-
import type { CountArgs, CreateArgs, DeleteArgs, FindArgs, FindByIDArgs, FindOneArgs, PaginatedDocs, UpdateArgs } from './operations.js';
|
|
3
|
+
import type { BaseOperationArgs, CountArgs, CreateArgs, DeleteArgs, FindArgs, FindByIDArgs, FindOneArgs, PaginatedDocs, UpdateArgs } from './operations.js';
|
|
4
4
|
/**
|
|
5
5
|
* The Local API generic arg/result wiring for the typed collection surface (`runtime.ts`). Kept in
|
|
6
6
|
* one file, isolated from `operations.ts` (untyped, unchanged) and from the method bodies in
|
|
@@ -51,7 +51,7 @@ export type TypedUpdateArgs<TCollections extends CollectionRegistry, TSlug exten
|
|
|
51
51
|
export type TypedDeleteArgs<TCollections extends CollectionRegistry, TSlug extends CollectionSlug<TCollections>> = Omit<DeleteArgs, 'collection'> & {
|
|
52
52
|
collection: TSlug;
|
|
53
53
|
};
|
|
54
|
-
export type TypedPreviewArgs<TCollections extends CollectionRegistry, TSlug extends CollectionSlug<TCollections>> = {
|
|
54
|
+
export type TypedPreviewArgs<TCollections extends CollectionRegistry, TSlug extends CollectionSlug<TCollections>> = Omit<BaseOperationArgs, 'collection' | 'depth' | 'locale'> & {
|
|
55
55
|
collection: TSlug;
|
|
56
56
|
data: CollectionInput<CollectionBySlug<TCollections, TSlug>>;
|
|
57
57
|
id?: string;
|
package/dist/typed-api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typed-api.d.ts","sourceRoot":"","sources":["../src/typed-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACb,UAAU,EACX,MAAM,iBAAiB,CAAC;AAEzB;;;;GAIG;AAEH,uGAAuG;AACvG,MAAM,MAAM,cAAc,CAAC,WAAW,SAAS,oBAAoB,IAAI,OAAO,CAC5E,MAAM,kBAAkB,CAAC,WAAW,CAAC,EACrC,MAAM,CACP,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,WAAW,SAAS,oBAAoB,IAC3D,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC,CAAC,GAC5D;IAAE,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,CAAA;CAAE,GAClC;IAAE,EAAE,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,CAAA;CAAE,CAAC;AAEtC,yFAAyF;AACzF,MAAM,MAAM,cAAc,CAAC,WAAW,SAAS,oBAAoB,IAC/D,cAAc,CAAC,WAAW,CAAC,GAC3B;IAAE,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;CAAE,EAAE,CAAC;AAErE,MAAM,MAAM,aAAa,CACvB,YAAY,SAAS,kBAAkB,EACvC,KAAK,SAAS,cAAc,CAAC,YAAY,CAAC,IACxC,IAAI,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC,GAAG;IACpD,UAAU,EAAE,KAAK,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1D,IAAI,CAAC,EAAE,cAAc,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAC3B,YAAY,SAAS,kBAAkB,EACvC,KAAK,SAAS,cAAc,CAAC,YAAY,CAAC,IACxC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG;IAAE,UAAU,EAAE,KAAK,CAAA;CAAE,CAAC;AAE7D,iGAAiG;AACjG,MAAM,MAAM,gBAAgB,CAC1B,YAAY,SAAS,kBAAkB,EACvC,KAAK,SAAS,cAAc,CAAC,YAAY,CAAC,IACxC,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC,GAAG;IACvD,UAAU,EAAE,KAAK,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1D,IAAI,CAAC,EAAE,cAAc,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,cAAc,CACxB,YAAY,SAAS,kBAAkB,EACvC,KAAK,SAAS,cAAc,CAAC,YAAY,CAAC,IACxC,IAAI,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG;IAC5C,UAAU,EAAE,KAAK,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,eAAe,CACzB,YAAY,SAAS,kBAAkB,EACvC,KAAK,SAAS,cAAc,CAAC,YAAY,CAAC,IACxC,IAAI,CAAC,UAAU,EAAE,YAAY,GAAG,MAAM,CAAC,GAAG;IAC5C,UAAU,EAAE,KAAK,CAAC;IAClB,IAAI,EAAE,eAAe,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,eAAe,CACzB,YAAY,SAAS,kBAAkB,EACvC,KAAK,SAAS,cAAc,CAAC,YAAY,CAAC,IACxC,IAAI,CAAC,UAAU,EAAE,YAAY,GAAG,MAAM,CAAC,GAAG;IAC5C,UAAU,EAAE,KAAK,CAAC;IAClB,IAAI,EAAE,eAAe,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,eAAe,CACzB,YAAY,SAAS,kBAAkB,EACvC,KAAK,SAAS,cAAc,CAAC,YAAY,CAAC,IACxC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG;IAAE,UAAU,EAAE,KAAK,CAAA;CAAE,CAAC;AAE3D,MAAM,MAAM,gBAAgB,CAC1B,YAAY,SAAS,kBAAkB,EACvC,KAAK,SAAS,cAAc,CAAC,YAAY,CAAC,IACxC;
|
|
1
|
+
{"version":3,"file":"typed-api.d.ts","sourceRoot":"","sources":["../src/typed-api.ts"],"names":[],"mappings":"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"}
|
package/dist/versions.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { CmsUser, CollectionDefinition, Version } from '@forge-cms/core';
|
|
2
|
-
import type { DatabaseRecord } from '@forge-cms/db';
|
|
3
2
|
import type { OperationContext } from './context.js';
|
|
4
3
|
export interface ListVersionsArgs {
|
|
5
4
|
collection: string;
|
|
@@ -36,13 +35,12 @@ declare function autosaveEnabled(collection: CollectionDefinition): boolean;
|
|
|
36
35
|
*/
|
|
37
36
|
export declare function listVersions(ctx: OperationContext, args: ListVersionsArgs): Promise<Version[]>;
|
|
38
37
|
/**
|
|
39
|
-
* Gets a specific version by id.
|
|
38
|
+
* Gets a specific version by id. `overrideAccess: true` (the default, matching every other Local API
|
|
39
|
+
* method) returns the raw, unfiltered snapshot with no owner-visibility check — used internally by
|
|
40
|
+
* {@link import('./operations.js').restoreVersion}, where the authoritative access gate is the
|
|
41
|
+
* subsequent `update()` call, not this read.
|
|
40
42
|
*/
|
|
41
43
|
export declare function getVersion(ctx: OperationContext, args: GetVersionArgs): Promise<Version>;
|
|
42
|
-
/**
|
|
43
|
-
* Restores a document to a specific version. Creates a new version with the restored data.
|
|
44
|
-
*/
|
|
45
|
-
export declare function restoreVersion(ctx: OperationContext, args: RestoreVersionArgs): Promise<DatabaseRecord>;
|
|
46
44
|
/**
|
|
47
45
|
* Creates a new version of a document. Called automatically on updates when versions are enabled.
|
|
48
46
|
*/
|
package/dist/versions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAMrD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD,iBAAS,eAAe,CAAC,UAAU,EAAE,oBAAoB,GAAG,OAAO,CAKlE;AAED,iBAAS,eAAe,CAAC,UAAU,EAAE,oBAAoB,GAAG,OAAO,CAKlE;AAuCD;;GAEG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,OAAO,EAAE,CAAC,CA+BpB;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAiB9F;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,OAAO,CAAC,CAiClB;AAiBD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC"}
|