@ontologie/schema 0.1.0-preview.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/README.md +149 -0
- package/dist/compiler/compile.d.ts +36 -0
- package/dist/compiler/compile.d.ts.map +1 -0
- package/dist/compiler/compile.js +295 -0
- package/dist/compiler/compile.js.map +1 -0
- package/dist/compiler/resolve.d.ts +14 -0
- package/dist/compiler/resolve.d.ts.map +1 -0
- package/dist/compiler/resolve.js +132 -0
- package/dist/compiler/resolve.js.map +1 -0
- package/dist/compiler/validate.d.ts +15 -0
- package/dist/compiler/validate.d.ts.map +1 -0
- package/dist/compiler/validate.js +188 -0
- package/dist/compiler/validate.js.map +1 -0
- package/dist/diff/diff.d.ts +20 -0
- package/dist/diff/diff.d.ts.map +1 -0
- package/dist/diff/diff.js +393 -0
- package/dist/diff/diff.js.map +1 -0
- package/dist/diff/format.d.ts +21 -0
- package/dist/diff/format.d.ts.map +1 -0
- package/dist/diff/format.js +88 -0
- package/dist/diff/format.js.map +1 -0
- package/dist/dsl/action.d.ts +148 -0
- package/dist/dsl/action.d.ts.map +1 -0
- package/dist/dsl/action.js +330 -0
- package/dist/dsl/action.js.map +1 -0
- package/dist/dsl/interface.d.ts +32 -0
- package/dist/dsl/interface.d.ts.map +1 -0
- package/dist/dsl/interface.js +77 -0
- package/dist/dsl/interface.js.map +1 -0
- package/dist/dsl/link.d.ts +34 -0
- package/dist/dsl/link.d.ts.map +1 -0
- package/dist/dsl/link.js +95 -0
- package/dist/dsl/link.js.map +1 -0
- package/dist/dsl/object-type.d.ts +35 -0
- package/dist/dsl/object-type.d.ts.map +1 -0
- package/dist/dsl/object-type.js +102 -0
- package/dist/dsl/object-type.js.map +1 -0
- package/dist/dsl/property.d.ts +43 -0
- package/dist/dsl/property.d.ts.map +1 -0
- package/dist/dsl/property.js +125 -0
- package/dist/dsl/property.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/lock/lockfile.d.ts +31 -0
- package/dist/lock/lockfile.d.ts.map +1 -0
- package/dist/lock/lockfile.js +86 -0
- package/dist/lock/lockfile.js.map +1 -0
- package/dist/model-assurance.d.ts +27 -0
- package/dist/model-assurance.d.ts.map +1 -0
- package/dist/model-assurance.js +194 -0
- package/dist/model-assurance.js.map +1 -0
- package/dist/pull/emit-schema.d.ts +24 -0
- package/dist/pull/emit-schema.d.ts.map +1 -0
- package/dist/pull/emit-schema.js +476 -0
- package/dist/pull/emit-schema.js.map +1 -0
- package/dist/push/execute.d.ts +34 -0
- package/dist/push/execute.d.ts.map +1 -0
- package/dist/push/execute.js +119 -0
- package/dist/push/execute.js.map +1 -0
- package/dist/push/plan.d.ts +37 -0
- package/dist/push/plan.d.ts.map +1 -0
- package/dist/push/plan.js +484 -0
- package/dist/push/plan.js.map +1 -0
- package/dist/types.d.ts +330 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/push/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan — convert a DiffResult into an ordered list of CQRS commands.
|
|
3
|
+
*
|
|
4
|
+
* Ordering (dependency-safe):
|
|
5
|
+
* 1. Create interfaces
|
|
6
|
+
* 2. Create object types
|
|
7
|
+
* 3. Create links (source/target types exist)
|
|
8
|
+
* 4. Create actions (object types exist)
|
|
9
|
+
* 5. Update interfaces
|
|
10
|
+
* 6. Update object types
|
|
11
|
+
* 7. Update links
|
|
12
|
+
* 8. Update actions
|
|
13
|
+
* 9. Delete actions (before their parent types)
|
|
14
|
+
* 10. Delete links (before their source/target types)
|
|
15
|
+
* 11. Delete object types
|
|
16
|
+
* 12. Delete interfaces (last)
|
|
17
|
+
*
|
|
18
|
+
* Fixes over V2:
|
|
19
|
+
* - clearableString/clearableNumber send null to clear server-side fields
|
|
20
|
+
* - Link source/target change → DELETE_EDGE + CREATE_EDGE (not UPDATE_EDGE)
|
|
21
|
+
* - requirePlannedTypeId throws on missing entityId (no empty string)
|
|
22
|
+
* - readStringArrayAllowEmpty preserves empty arrays for clearing interfaces
|
|
23
|
+
*/
|
|
24
|
+
import type { OntologyManifest } from '@dataforge/sdk-types';
|
|
25
|
+
import type { DiffResult, CqrsCommand } from '../types.js';
|
|
26
|
+
/**
|
|
27
|
+
* Generate an ordered list of CQRS commands from a diff result.
|
|
28
|
+
*
|
|
29
|
+
* @param diffResult - The diff between local and remote manifests
|
|
30
|
+
* @param remote - The remote manifest (to resolve existing IDs)
|
|
31
|
+
* @param options - workspaceId, espaceId for command payloads
|
|
32
|
+
*/
|
|
33
|
+
export declare function planPush(diffResult: DiffResult, remote: OntologyManifest, options: {
|
|
34
|
+
workspaceId: string;
|
|
35
|
+
espaceId?: string;
|
|
36
|
+
}): CqrsCommand[];
|
|
37
|
+
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/push/plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AA0TvE;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD,WAAW,EAAE,CAoPf"}
|
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan — convert a DiffResult into an ordered list of CQRS commands.
|
|
3
|
+
*
|
|
4
|
+
* Ordering (dependency-safe):
|
|
5
|
+
* 1. Create interfaces
|
|
6
|
+
* 2. Create object types
|
|
7
|
+
* 3. Create links (source/target types exist)
|
|
8
|
+
* 4. Create actions (object types exist)
|
|
9
|
+
* 5. Update interfaces
|
|
10
|
+
* 6. Update object types
|
|
11
|
+
* 7. Update links
|
|
12
|
+
* 8. Update actions
|
|
13
|
+
* 9. Delete actions (before their parent types)
|
|
14
|
+
* 10. Delete links (before their source/target types)
|
|
15
|
+
* 11. Delete object types
|
|
16
|
+
* 12. Delete interfaces (last)
|
|
17
|
+
*
|
|
18
|
+
* Fixes over V2:
|
|
19
|
+
* - clearableString/clearableNumber send null to clear server-side fields
|
|
20
|
+
* - Link source/target change → DELETE_EDGE + CREATE_EDGE (not UPDATE_EDGE)
|
|
21
|
+
* - requirePlannedTypeId throws on missing entityId (no empty string)
|
|
22
|
+
* - readStringArrayAllowEmpty preserves empty arrays for clearing interfaces
|
|
23
|
+
*/
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Helpers
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
function isRecord(value) {
|
|
28
|
+
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
29
|
+
}
|
|
30
|
+
function asRecord(value, label) {
|
|
31
|
+
if (!isRecord(value)) {
|
|
32
|
+
throw new Error(`Invalid ${label}: expected object, got ${typeof value}`);
|
|
33
|
+
}
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
function readString(value) {
|
|
37
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
38
|
+
}
|
|
39
|
+
function readStringArray(value) {
|
|
40
|
+
if (!Array.isArray(value))
|
|
41
|
+
return undefined;
|
|
42
|
+
const items = value.filter((item) => typeof item === 'string' && item.length > 0);
|
|
43
|
+
return items.length > 0 ? items : undefined;
|
|
44
|
+
}
|
|
45
|
+
/** Like readStringArray, but preserves empty arrays (needed to clear all interfaces) */
|
|
46
|
+
function readStringArrayAllowEmpty(value) {
|
|
47
|
+
if (!Array.isArray(value))
|
|
48
|
+
return undefined;
|
|
49
|
+
return [...new Set(value.filter((item) => typeof item === 'string' && item.length > 0))];
|
|
50
|
+
}
|
|
51
|
+
/** Remove undefined values from a record for cleaner payloads */
|
|
52
|
+
function compactRecord(input) {
|
|
53
|
+
const output = {};
|
|
54
|
+
for (const [key, value] of Object.entries(input)) {
|
|
55
|
+
if (value !== undefined) {
|
|
56
|
+
output[key] = value;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return output;
|
|
60
|
+
}
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
// Clearable field helpers — send null to erase server-side values
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
function readOptionalString(value) {
|
|
65
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* For optional string fields that can be cleared server-side.
|
|
69
|
+
* Returns: string (update), null (clear), undefined (no change).
|
|
70
|
+
*/
|
|
71
|
+
function clearableString(after, before, key) {
|
|
72
|
+
const next = readOptionalString(after[key]);
|
|
73
|
+
const previous = readOptionalString(before[key]);
|
|
74
|
+
if (next !== undefined)
|
|
75
|
+
return next;
|
|
76
|
+
if (previous !== undefined)
|
|
77
|
+
return null; // was set, now absent → clear
|
|
78
|
+
return undefined; // neither had it
|
|
79
|
+
}
|
|
80
|
+
function clearableNumber(after, before, key) {
|
|
81
|
+
const next = after[key];
|
|
82
|
+
const previous = before[key];
|
|
83
|
+
if (typeof next === 'number')
|
|
84
|
+
return next;
|
|
85
|
+
if (typeof previous === 'number')
|
|
86
|
+
return null; // was set, now absent → clear
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
/** Throw if a remote ID is missing — never silently skip a planned change */
|
|
90
|
+
function requireRemoteId(ids, name, entity) {
|
|
91
|
+
const id = ids.get(name);
|
|
92
|
+
if (!id) {
|
|
93
|
+
throw new Error(`Cannot plan ${entity} change for "${name}": remote id not found`);
|
|
94
|
+
}
|
|
95
|
+
return id;
|
|
96
|
+
}
|
|
97
|
+
/** Strict: require a planned type ID exists for action creation */
|
|
98
|
+
function requirePlannedTypeId(ids, apiName, actionName) {
|
|
99
|
+
if (!apiName) {
|
|
100
|
+
throw new Error(`Cannot plan action "${actionName}": missing objectTypeApiName`);
|
|
101
|
+
}
|
|
102
|
+
const id = ids.get(apiName);
|
|
103
|
+
if (!id) {
|
|
104
|
+
throw new Error(`Cannot plan action "${actionName}": object type "${apiName}" id not found`);
|
|
105
|
+
}
|
|
106
|
+
return id;
|
|
107
|
+
}
|
|
108
|
+
function getEntityApiName(change, data) {
|
|
109
|
+
return readString(data.apiName) ?? readString(data.api_name) ?? change.name;
|
|
110
|
+
}
|
|
111
|
+
/** Check if a string field changed between before and after */
|
|
112
|
+
function changedStringField(before, after, key) {
|
|
113
|
+
return readString(before[key]) !== readString(after[key]);
|
|
114
|
+
}
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
// Property mapping with validation
|
|
117
|
+
// ---------------------------------------------------------------------------
|
|
118
|
+
function mapPropertyToNodeProperty(prop) {
|
|
119
|
+
const name = readString(prop.apiName) ?? readString(prop.name);
|
|
120
|
+
const type = readString(prop.dataType) ?? readString(prop.type);
|
|
121
|
+
if (!name) {
|
|
122
|
+
throw new Error('Invalid property: missing apiName/name');
|
|
123
|
+
}
|
|
124
|
+
if (!type) {
|
|
125
|
+
throw new Error(`Invalid property "${name}": missing dataType/type`);
|
|
126
|
+
}
|
|
127
|
+
return compactRecord({
|
|
128
|
+
name,
|
|
129
|
+
type,
|
|
130
|
+
required: prop.required === true,
|
|
131
|
+
indexed: prop.indexed === true,
|
|
132
|
+
unique: prop.unique === true,
|
|
133
|
+
defaultValue: prop.defaultValue,
|
|
134
|
+
semanticType: prop.semanticType,
|
|
135
|
+
constraints: prop.constraints,
|
|
136
|
+
enumValues: prop.enumValues,
|
|
137
|
+
description: prop.description,
|
|
138
|
+
mutableBy: Array.isArray(prop.mutableBy) && prop.mutableBy.length > 0 ? prop.mutableBy : undefined,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
function bucketChanges(changes) {
|
|
142
|
+
const bucket = {
|
|
143
|
+
addedTypes: [], removedTypes: [], modifiedTypes: [],
|
|
144
|
+
addedLinks: [], removedLinks: [], modifiedLinks: [],
|
|
145
|
+
addedActions: [], removedActions: [], modifiedActions: [],
|
|
146
|
+
addedInterfaces: [], removedInterfaces: [], modifiedInterfaces: [],
|
|
147
|
+
};
|
|
148
|
+
for (const change of changes) {
|
|
149
|
+
if (change.entity === 'objectType') {
|
|
150
|
+
if (change.kind === 'added')
|
|
151
|
+
bucket.addedTypes.push(change);
|
|
152
|
+
else if (change.kind === 'removed')
|
|
153
|
+
bucket.removedTypes.push(change);
|
|
154
|
+
else if (change.kind === 'modified')
|
|
155
|
+
bucket.modifiedTypes.push(change);
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (change.entity === 'linkType') {
|
|
159
|
+
if (change.kind === 'added')
|
|
160
|
+
bucket.addedLinks.push(change);
|
|
161
|
+
else if (change.kind === 'removed')
|
|
162
|
+
bucket.removedLinks.push(change);
|
|
163
|
+
else if (change.kind === 'modified')
|
|
164
|
+
bucket.modifiedLinks.push(change);
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
if (change.entity === 'action') {
|
|
168
|
+
if (change.kind === 'added')
|
|
169
|
+
bucket.addedActions.push(change);
|
|
170
|
+
else if (change.kind === 'removed')
|
|
171
|
+
bucket.removedActions.push(change);
|
|
172
|
+
else if (change.kind === 'modified')
|
|
173
|
+
bucket.modifiedActions.push(change);
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
if (change.entity === 'interface') {
|
|
177
|
+
if (change.kind === 'added')
|
|
178
|
+
bucket.addedInterfaces.push(change);
|
|
179
|
+
else if (change.kind === 'removed')
|
|
180
|
+
bucket.removedInterfaces.push(change);
|
|
181
|
+
else if (change.kind === 'modified')
|
|
182
|
+
bucket.modifiedInterfaces.push(change);
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
// Property changes are handled through their parent object/interface update.
|
|
186
|
+
if (change.entity === 'property')
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
return bucket;
|
|
190
|
+
}
|
|
191
|
+
// ---------------------------------------------------------------------------
|
|
192
|
+
// Node/Edge payload builders
|
|
193
|
+
// ---------------------------------------------------------------------------
|
|
194
|
+
function buildObjectTypeNode(change, options) {
|
|
195
|
+
const data = asRecord(change.after, `added objectType "${change.name}"`);
|
|
196
|
+
const apiName = getEntityApiName(change, data);
|
|
197
|
+
const properties = Array.isArray(data.properties)
|
|
198
|
+
? data.properties.map(mapPropertyToNodeProperty)
|
|
199
|
+
: [];
|
|
200
|
+
return compactRecord({
|
|
201
|
+
id: readString(data.id),
|
|
202
|
+
name: readString(data.displayName) ?? apiName,
|
|
203
|
+
displayName: readString(data.displayName),
|
|
204
|
+
type: 'ObjectType',
|
|
205
|
+
api_name: apiName,
|
|
206
|
+
description: data.description,
|
|
207
|
+
properties,
|
|
208
|
+
primaryKey: data.primaryKey,
|
|
209
|
+
interfaces: readStringArray(data.interfaces),
|
|
210
|
+
workspace_id: options.workspaceId,
|
|
211
|
+
espace_id: options.espaceId ?? '',
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
function buildInterfaceNode(change, options) {
|
|
215
|
+
const data = asRecord(change.after, `added interface "${change.name}"`);
|
|
216
|
+
const apiName = getEntityApiName(change, data);
|
|
217
|
+
const sharedProperties = Array.isArray(data.sharedProperties)
|
|
218
|
+
? data.sharedProperties.map(mapPropertyToNodeProperty)
|
|
219
|
+
: [];
|
|
220
|
+
return compactRecord({
|
|
221
|
+
id: readString(data.id),
|
|
222
|
+
name: readString(data.displayName) ?? apiName,
|
|
223
|
+
displayName: readString(data.displayName),
|
|
224
|
+
type: 'Interface',
|
|
225
|
+
api_name: apiName,
|
|
226
|
+
description: data.description,
|
|
227
|
+
properties: sharedProperties,
|
|
228
|
+
workspace_id: options.workspaceId,
|
|
229
|
+
espace_id: options.espaceId ?? '',
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
function buildEdgePayload(change, typeIds, options) {
|
|
233
|
+
const data = asRecord(change.after, `linkType "${change.name}"`);
|
|
234
|
+
const apiName = getEntityApiName(change, data);
|
|
235
|
+
const sourceTypeApiName = readString(data.sourceTypeApiName);
|
|
236
|
+
const targetTypeApiName = readString(data.targetTypeApiName);
|
|
237
|
+
if (!sourceTypeApiName || !targetTypeApiName) {
|
|
238
|
+
throw new Error(`Invalid linkType "${apiName}": missing sourceTypeApiName or targetTypeApiName`);
|
|
239
|
+
}
|
|
240
|
+
const sourceId = typeIds.get(sourceTypeApiName);
|
|
241
|
+
const targetId = typeIds.get(targetTypeApiName);
|
|
242
|
+
if (!sourceId || !targetId) {
|
|
243
|
+
throw new Error(`Cannot plan linkType "${apiName}": source or target type id not found ` +
|
|
244
|
+
`(${sourceTypeApiName} -> ${targetTypeApiName})`);
|
|
245
|
+
}
|
|
246
|
+
return compactRecord({
|
|
247
|
+
sourceId,
|
|
248
|
+
targetId,
|
|
249
|
+
sourceTypeApiName,
|
|
250
|
+
targetTypeApiName,
|
|
251
|
+
relationshipType: data.relationshipType ?? apiName,
|
|
252
|
+
api_name: apiName,
|
|
253
|
+
cardinality: data.cardinality ?? 'N:1',
|
|
254
|
+
label: data.label,
|
|
255
|
+
inverseName: data.inverseName,
|
|
256
|
+
properties: Array.isArray(data.properties) ? data.properties : undefined,
|
|
257
|
+
workspace_id: options.workspaceId,
|
|
258
|
+
espace_id: options.espaceId ?? '',
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
// ---------------------------------------------------------------------------
|
|
262
|
+
// Main planner
|
|
263
|
+
// ---------------------------------------------------------------------------
|
|
264
|
+
/**
|
|
265
|
+
* Generate an ordered list of CQRS commands from a diff result.
|
|
266
|
+
*
|
|
267
|
+
* @param diffResult - The diff between local and remote manifests
|
|
268
|
+
* @param remote - The remote manifest (to resolve existing IDs)
|
|
269
|
+
* @param options - workspaceId, espaceId for command payloads
|
|
270
|
+
*/
|
|
271
|
+
export function planPush(diffResult, remote, options) {
|
|
272
|
+
if (!diffResult.hasChanges)
|
|
273
|
+
return [];
|
|
274
|
+
const commands = [];
|
|
275
|
+
const bucket = bucketChanges(diffResult.changes);
|
|
276
|
+
// Build ID lookups from remote
|
|
277
|
+
const remoteTypeIds = new Map(remote.objectTypes.map(t => [t.apiName, t.id]));
|
|
278
|
+
const remoteLinkIds = new Map(remote.linkTypes.map(l => [l.apiName, l.id]));
|
|
279
|
+
const actionKey = (a) => `${a.objectTypeApiName}.${a.apiName}`;
|
|
280
|
+
const remoteActionIds = new Map((remote.actions ?? []).map(a => [actionKey(a), a.id]));
|
|
281
|
+
const remoteIfaceIds = new Map((remote.interfaces ?? []).map(i => [i.apiName, i.id]));
|
|
282
|
+
// Track IDs for types being created in this plan (for link resolution)
|
|
283
|
+
const plannedTypeIds = new Map(remoteTypeIds);
|
|
284
|
+
for (const change of bucket.addedTypes) {
|
|
285
|
+
const data = asRecord(change.after, `added objectType "${change.name}"`);
|
|
286
|
+
const apiName = getEntityApiName(change, data);
|
|
287
|
+
const id = readString(data.id);
|
|
288
|
+
if (id) {
|
|
289
|
+
plannedTypeIds.set(apiName, id);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
// --- 1. Create interfaces first ---
|
|
293
|
+
for (const change of bucket.addedInterfaces) {
|
|
294
|
+
commands.push({
|
|
295
|
+
type: 'CREATE_NODE',
|
|
296
|
+
payload: { node: buildInterfaceNode(change, options) },
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
// --- 2. Create object types ---
|
|
300
|
+
for (const change of bucket.addedTypes) {
|
|
301
|
+
commands.push({
|
|
302
|
+
type: 'CREATE_NODE',
|
|
303
|
+
payload: { node: buildObjectTypeNode(change, options) },
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
// --- 3. Create links (source/target types now exist) ---
|
|
307
|
+
for (const change of bucket.addedLinks) {
|
|
308
|
+
commands.push({
|
|
309
|
+
type: 'CREATE_EDGE',
|
|
310
|
+
payload: { edge: buildEdgePayload(change, plannedTypeIds, options) },
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
// --- 4. Create actions (object types now exist) ---
|
|
314
|
+
for (const change of bucket.addedActions) {
|
|
315
|
+
const actionData = asRecord(change.after, `added action "${change.name}"`);
|
|
316
|
+
const objectTypeApiName = readString(actionData.objectTypeApiName);
|
|
317
|
+
const entityId = requirePlannedTypeId(plannedTypeIds, objectTypeApiName, change.name);
|
|
318
|
+
commands.push({
|
|
319
|
+
type: 'CREATE_ACTION',
|
|
320
|
+
payload: {
|
|
321
|
+
entityId,
|
|
322
|
+
entityType: 'ObjectType',
|
|
323
|
+
espaceId: options.espaceId ?? '',
|
|
324
|
+
action: compactRecord({
|
|
325
|
+
name: actionData.apiName ?? change.name.split('.').pop() ?? change.name,
|
|
326
|
+
api_name: actionData.apiName ?? change.name.split('.').pop() ?? change.name,
|
|
327
|
+
display_name: actionData.displayName,
|
|
328
|
+
description: actionData.description,
|
|
329
|
+
object_type_api_name: objectTypeApiName,
|
|
330
|
+
action_type: actionData.actionType,
|
|
331
|
+
trigger: actionData.trigger,
|
|
332
|
+
parameters: Array.isArray(actionData.parameters) ? actionData.parameters : [],
|
|
333
|
+
conditions: Array.isArray(actionData.conditions) ? actionData.conditions : [],
|
|
334
|
+
effects: Array.isArray(actionData.effects) ? actionData.effects : [],
|
|
335
|
+
required_scopes: Array.isArray(actionData.requiredScopes) ? actionData.requiredScopes : [],
|
|
336
|
+
timeout: actionData.timeout,
|
|
337
|
+
execution_mode: actionData.executionMode ?? 'twin_apply',
|
|
338
|
+
risk: actionData.risk,
|
|
339
|
+
limits: actionData.limits,
|
|
340
|
+
input_mapping: actionData.inputMapping,
|
|
341
|
+
output_mapping: actionData.outputMapping,
|
|
342
|
+
retry_config: actionData.retryConfig,
|
|
343
|
+
implementation_type: actionData.implementationType,
|
|
344
|
+
workflow_id: actionData.workflowId,
|
|
345
|
+
agent_id: actionData.agentId,
|
|
346
|
+
metadata: actionData.metadata && typeof actionData.metadata === 'object' && Object.keys(actionData.metadata).length > 0
|
|
347
|
+
? actionData.metadata
|
|
348
|
+
: undefined,
|
|
349
|
+
workspace_id: options.workspaceId,
|
|
350
|
+
espace_id: options.espaceId ?? '',
|
|
351
|
+
}),
|
|
352
|
+
},
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
// --- 5. Update interfaces (clearable fields) ---
|
|
356
|
+
for (const change of bucket.modifiedInterfaces) {
|
|
357
|
+
const id = requireRemoteId(remoteIfaceIds, change.name, 'interface');
|
|
358
|
+
const ifaceData = asRecord(change.after, `modified interface "${change.name}"`);
|
|
359
|
+
const beforeData = asRecord(change.before, `previous interface "${change.name}"`);
|
|
360
|
+
const sharedProps = Array.isArray(ifaceData.sharedProperties)
|
|
361
|
+
? ifaceData.sharedProperties.map(mapPropertyToNodeProperty)
|
|
362
|
+
: [];
|
|
363
|
+
commands.push({
|
|
364
|
+
type: 'UPDATE_NODE',
|
|
365
|
+
payload: {
|
|
366
|
+
id,
|
|
367
|
+
updates: compactRecord({
|
|
368
|
+
properties: sharedProps,
|
|
369
|
+
displayName: clearableString(ifaceData, beforeData, 'displayName'),
|
|
370
|
+
description: clearableString(ifaceData, beforeData, 'description'),
|
|
371
|
+
}),
|
|
372
|
+
},
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
// --- 6. Update object types (clearable fields) ---
|
|
376
|
+
for (const change of bucket.modifiedTypes) {
|
|
377
|
+
const id = requireRemoteId(remoteTypeIds, change.name, 'objectType');
|
|
378
|
+
const typeData = asRecord(change.after, `modified objectType "${change.name}"`);
|
|
379
|
+
const beforeData = asRecord(change.before, `previous objectType "${change.name}"`);
|
|
380
|
+
const properties = Array.isArray(typeData.properties)
|
|
381
|
+
? typeData.properties.map(mapPropertyToNodeProperty)
|
|
382
|
+
: [];
|
|
383
|
+
commands.push({
|
|
384
|
+
type: 'UPDATE_NODE',
|
|
385
|
+
payload: {
|
|
386
|
+
id,
|
|
387
|
+
updates: compactRecord({
|
|
388
|
+
properties,
|
|
389
|
+
displayName: clearableString(typeData, beforeData, 'displayName'),
|
|
390
|
+
description: clearableString(typeData, beforeData, 'description'),
|
|
391
|
+
primaryKey: clearableString(typeData, beforeData, 'primaryKey'),
|
|
392
|
+
// [] must be sent to remove all interfaces
|
|
393
|
+
interfaces: Array.isArray(typeData.interfaces)
|
|
394
|
+
? readStringArrayAllowEmpty(typeData.interfaces)
|
|
395
|
+
: undefined,
|
|
396
|
+
}),
|
|
397
|
+
},
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
// --- 7. Update modified links (detect endpoint changes → DELETE+CREATE) ---
|
|
401
|
+
for (const change of bucket.modifiedLinks) {
|
|
402
|
+
const id = requireRemoteId(remoteLinkIds, change.name, 'linkType');
|
|
403
|
+
const linkData = asRecord(change.after, `modified linkType "${change.name}"`);
|
|
404
|
+
const beforeData = asRecord(change.before, `previous linkType "${change.name}"`);
|
|
405
|
+
// If source or target changed, must recreate (UPDATE_EDGE can't change endpoints)
|
|
406
|
+
const endpointChanged = changedStringField(beforeData, linkData, 'sourceTypeApiName') ||
|
|
407
|
+
changedStringField(beforeData, linkData, 'targetTypeApiName');
|
|
408
|
+
if (endpointChanged) {
|
|
409
|
+
commands.push({ type: 'DELETE_EDGE', payload: { id } });
|
|
410
|
+
commands.push({
|
|
411
|
+
type: 'CREATE_EDGE',
|
|
412
|
+
payload: { edge: buildEdgePayload(change, plannedTypeIds, options) },
|
|
413
|
+
});
|
|
414
|
+
continue;
|
|
415
|
+
}
|
|
416
|
+
commands.push({
|
|
417
|
+
type: 'UPDATE_EDGE',
|
|
418
|
+
payload: {
|
|
419
|
+
id,
|
|
420
|
+
updates: compactRecord({
|
|
421
|
+
relationshipType: clearableString(linkData, beforeData, 'relationshipType'),
|
|
422
|
+
cardinality: linkData.cardinality,
|
|
423
|
+
label: clearableString(linkData, beforeData, 'label'),
|
|
424
|
+
inverseName: clearableString(linkData, beforeData, 'inverseName'),
|
|
425
|
+
properties: Array.isArray(linkData.properties) ? linkData.properties : undefined,
|
|
426
|
+
}),
|
|
427
|
+
},
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
// --- 8. Update actions (clearable fields) ---
|
|
431
|
+
for (const change of bucket.modifiedActions) {
|
|
432
|
+
const actionId = requireRemoteId(remoteActionIds, change.name, 'action');
|
|
433
|
+
const actionData = asRecord(change.after, `modified action "${change.name}"`);
|
|
434
|
+
const beforeData = asRecord(change.before, `previous action "${change.name}"`);
|
|
435
|
+
commands.push({
|
|
436
|
+
type: 'UPDATE_ACTION',
|
|
437
|
+
payload: {
|
|
438
|
+
actionId,
|
|
439
|
+
updates: compactRecord({
|
|
440
|
+
display_name: clearableString(actionData, beforeData, 'displayName'),
|
|
441
|
+
description: clearableString(actionData, beforeData, 'description'),
|
|
442
|
+
action_type: actionData.actionType,
|
|
443
|
+
trigger: actionData.trigger,
|
|
444
|
+
parameters: Array.isArray(actionData.parameters) ? actionData.parameters : [],
|
|
445
|
+
conditions: Array.isArray(actionData.conditions) ? actionData.conditions : [],
|
|
446
|
+
effects: Array.isArray(actionData.effects) ? actionData.effects : [],
|
|
447
|
+
required_scopes: Array.isArray(actionData.requiredScopes) ? actionData.requiredScopes : [],
|
|
448
|
+
timeout: clearableNumber(actionData, beforeData, 'timeout'),
|
|
449
|
+
execution_mode: actionData.executionMode ?? 'twin_apply',
|
|
450
|
+
risk: actionData.risk,
|
|
451
|
+
limits: actionData.limits,
|
|
452
|
+
input_mapping: actionData.inputMapping,
|
|
453
|
+
output_mapping: actionData.outputMapping,
|
|
454
|
+
retry_config: actionData.retryConfig,
|
|
455
|
+
implementation_type: actionData.implementationType,
|
|
456
|
+
workflow_id: actionData.workflowId,
|
|
457
|
+
agent_id: actionData.agentId,
|
|
458
|
+
}),
|
|
459
|
+
},
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
// --- 9. Delete actions (before their parent types) ---
|
|
463
|
+
for (const change of bucket.removedActions) {
|
|
464
|
+
const actionId = requireRemoteId(remoteActionIds, change.name, 'action');
|
|
465
|
+
commands.push({ type: 'DELETE_ACTION', payload: { actionId } });
|
|
466
|
+
}
|
|
467
|
+
// --- 10. Delete links (before source/target types) ---
|
|
468
|
+
for (const change of bucket.removedLinks) {
|
|
469
|
+
const id = requireRemoteId(remoteLinkIds, change.name, 'linkType');
|
|
470
|
+
commands.push({ type: 'DELETE_EDGE', payload: { id } });
|
|
471
|
+
}
|
|
472
|
+
// --- 11. Delete object types ---
|
|
473
|
+
for (const change of bucket.removedTypes) {
|
|
474
|
+
const id = requireRemoteId(remoteTypeIds, change.name, 'objectType');
|
|
475
|
+
commands.push({ type: 'DELETE_NODE', payload: { id, cascadeEdges: true } });
|
|
476
|
+
}
|
|
477
|
+
// --- 12. Delete interfaces last ---
|
|
478
|
+
for (const change of bucket.removedInterfaces) {
|
|
479
|
+
const id = requireRemoteId(remoteIfaceIds, change.name, 'interface');
|
|
480
|
+
commands.push({ type: 'DELETE_NODE', payload: { id, cascadeEdges: true } });
|
|
481
|
+
}
|
|
482
|
+
return commands;
|
|
483
|
+
}
|
|
484
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/push/plan.ts"],"names":[],"mappings":"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"}
|