holarchy-core-logic 0.2.0 → 0.3.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/authoring.d.ts +1 -1
- package/dist/authoring.d.ts.map +1 -1
- package/dist/authoring.js +8 -9
- package/dist/authoring.js.map +1 -1
- package/dist/authority-store.d.ts +7 -2
- package/dist/authority-store.d.ts.map +1 -1
- package/dist/authority-store.js +21 -8
- package/dist/authority-store.js.map +1 -1
- package/dist/effective.d.ts +1 -3
- package/dist/effective.d.ts.map +1 -1
- package/dist/effective.js +0 -2
- package/dist/effective.js.map +1 -1
- package/dist/governance-policy.d.ts +5 -0
- package/dist/governance-policy.d.ts.map +1 -0
- package/dist/governance-policy.js +57 -0
- package/dist/governance-policy.js.map +1 -0
- package/dist/index.d.ts +15 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -6
- package/dist/index.js.map +1 -1
- package/dist/organization-authority.d.ts +10 -0
- package/dist/organization-authority.d.ts.map +1 -0
- package/dist/organization-authority.js +229 -0
- package/dist/organization-authority.js.map +1 -0
- package/dist/organization-entity.d.ts +6 -0
- package/dist/organization-entity.d.ts.map +1 -0
- package/dist/organization-entity.js +95 -0
- package/dist/organization-entity.js.map +1 -0
- package/dist/organization-field-edits.d.ts +4 -0
- package/dist/organization-field-edits.d.ts.map +1 -0
- package/dist/organization-field-edits.js +89 -0
- package/dist/organization-field-edits.js.map +1 -0
- package/dist/organization-mutations.d.ts +43 -0
- package/dist/organization-mutations.d.ts.map +1 -0
- package/dist/organization-mutations.js +295 -0
- package/dist/organization-mutations.js.map +1 -0
- package/dist/organization-reconciliation.d.ts +86 -0
- package/dist/organization-reconciliation.d.ts.map +1 -0
- package/dist/organization-reconciliation.js +290 -0
- package/dist/organization-reconciliation.js.map +1 -0
- package/dist/organization-scope.d.ts +8 -0
- package/dist/organization-scope.d.ts.map +1 -0
- package/dist/organization-scope.js +89 -0
- package/dist/organization-scope.js.map +1 -0
- package/dist/organization-snapshot-timeline.d.ts.map +1 -1
- package/dist/organization-snapshot-timeline.js +1 -25
- package/dist/organization-snapshot-timeline.js.map +1 -1
- package/dist/organization-state.d.ts +25 -0
- package/dist/organization-state.d.ts.map +1 -0
- package/dist/organization-state.js +314 -0
- package/dist/organization-state.js.map +1 -0
- package/dist/validator.d.ts +6 -5
- package/dist/validator.d.ts.map +1 -1
- package/dist/validator.js +3 -1
- package/dist/validator.js.map +1 -1
- package/package.json +30 -12
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { dataRecord, dataArray, json, HolonAuthorityContractError } from './authority-store.js';
|
|
2
|
+
import { parseOrganizationEntity, canonicalOrganizationValue } from './organization-entity.js';
|
|
3
|
+
const fail = (path, message) => { throw new HolonAuthorityContractError('invalid-organization', path, message); };
|
|
4
|
+
const same = (a, b) => canonicalOrganizationValue(a) === canonicalOrganizationValue(b);
|
|
5
|
+
const exact = (v, keys, path) => {
|
|
6
|
+
const r = { ...dataRecord(v, path) };
|
|
7
|
+
for (const k of keys)
|
|
8
|
+
if (!Object.hasOwn(r, k))
|
|
9
|
+
fail(`${path}.${k}`, 'Missing field');
|
|
10
|
+
for (const k of Object.keys(r))
|
|
11
|
+
if (!keys.includes(k))
|
|
12
|
+
fail(`${path}.${k}`, 'Unknown field');
|
|
13
|
+
return r;
|
|
14
|
+
};
|
|
15
|
+
const check = (actual, expected, path) => {
|
|
16
|
+
if (!same(actual, expected))
|
|
17
|
+
fail(path, 'Mutation precondition failed');
|
|
18
|
+
};
|
|
19
|
+
export function parseEdit(value, path) {
|
|
20
|
+
const raw = dataRecord(value, path), type = raw.type;
|
|
21
|
+
const shapes = { AddField: ['value'], RemoveField: ['expected'], SetField: ['expected', 'value'], ListInsert: ['expected', 'index', 'value'], ListRemove: ['expected', 'index'], ListMove: ['expected', 'fromIndex', 'toIndex'] };
|
|
22
|
+
if (typeof type !== 'string' || !Object.hasOwn(shapes, type))
|
|
23
|
+
fail(path, 'Unknown field operation');
|
|
24
|
+
const e = exact(raw, ['type', 'path', ...shapes[type]], path);
|
|
25
|
+
const parts = dataArray(e.path, `${path}.path`);
|
|
26
|
+
if (!parts.length || parts.some(p => typeof p !== 'string' || !p.length || ['__proto__', 'constructor', 'prototype'].includes(p)))
|
|
27
|
+
fail(path, 'Expected safe nonempty field path');
|
|
28
|
+
if (Object.hasOwn(e, 'expected'))
|
|
29
|
+
json(e.expected, `${path}.expected`);
|
|
30
|
+
if (Object.hasOwn(e, 'value'))
|
|
31
|
+
json(e.value, `${path}.value`);
|
|
32
|
+
if (String(type).startsWith('List') && !Array.isArray(e.expected))
|
|
33
|
+
fail(path, 'List operation requires expected list');
|
|
34
|
+
for (const key of ['index', 'fromIndex', 'toIndex'])
|
|
35
|
+
if (Object.hasOwn(e, key) && (!Number.isSafeInteger(e[key]) || Number(e[key]) < 0))
|
|
36
|
+
fail(path, 'Expected nonnegative index');
|
|
37
|
+
return structuredClone(e);
|
|
38
|
+
}
|
|
39
|
+
export function patch(entity, edits, path, validate = true) {
|
|
40
|
+
const result = structuredClone(entity);
|
|
41
|
+
for (const edit of edits) {
|
|
42
|
+
let owner = result;
|
|
43
|
+
for (const key of edit.path.slice(0, -1)) {
|
|
44
|
+
const child = owner[key];
|
|
45
|
+
if (!Object.hasOwn(owner, key) || child === null || typeof child !== 'object' || Array.isArray(child))
|
|
46
|
+
fail(path, 'Field path is absent or not an object');
|
|
47
|
+
owner = child;
|
|
48
|
+
}
|
|
49
|
+
const key = edit.path.at(-1);
|
|
50
|
+
if (edit.type === 'AddField') {
|
|
51
|
+
if (Object.hasOwn(owner, key))
|
|
52
|
+
fail(path, 'Mutation precondition failed: field already exists');
|
|
53
|
+
owner[key] = structuredClone(edit.value);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (!Object.hasOwn(owner, key))
|
|
57
|
+
fail(path, 'Field is absent');
|
|
58
|
+
check(owner[key], edit.expected, path);
|
|
59
|
+
if (edit.type === 'RemoveField') {
|
|
60
|
+
delete owner[key];
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (edit.type === 'SetField') {
|
|
64
|
+
owner[key] = structuredClone(edit.value);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (!Array.isArray(owner[key]))
|
|
68
|
+
fail(path, 'Expected list');
|
|
69
|
+
const list = [...owner[key]];
|
|
70
|
+
if (edit.type === 'ListInsert') {
|
|
71
|
+
if (edit.index > list.length)
|
|
72
|
+
fail(path, 'Index outside list');
|
|
73
|
+
list.splice(edit.index, 0, structuredClone(edit.value));
|
|
74
|
+
}
|
|
75
|
+
if (edit.type === 'ListRemove') {
|
|
76
|
+
if (edit.index >= list.length)
|
|
77
|
+
fail(path, 'Index outside list');
|
|
78
|
+
list.splice(edit.index, 1);
|
|
79
|
+
}
|
|
80
|
+
if (edit.type === 'ListMove') {
|
|
81
|
+
if (edit.fromIndex >= list.length || edit.toIndex >= list.length)
|
|
82
|
+
fail(path, 'Index outside list');
|
|
83
|
+
list.splice(edit.toIndex, 0, list.splice(edit.fromIndex, 1)[0]);
|
|
84
|
+
}
|
|
85
|
+
owner[key] = list;
|
|
86
|
+
}
|
|
87
|
+
return validate ? parseOrganizationEntity(result, path) : result;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=organization-field-edits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization-field-edits.js","sourceRoot":"","sources":["../src/organization-field-edits.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAC/F,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,OAAe,EAAS,EAAE,GAAG,MAAM,IAAI,2BAA2B,CAAC,sBAAsB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACzI,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC,KAAK,0BAA0B,CAAC,CAAC,CAAC,CAAC;AACzG,MAAM,KAAK,GAAG,CAAC,CAAU,EAAE,IAAuB,EAAE,IAAY,EAAE,EAAE;IAChE,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,IAAI;QAChB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YACpB,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IAC9C,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AACF,MAAM,KAAK,GAAG,CAAC,MAAe,EAAE,QAAiB,EAAE,IAAY,EAAE,EAAE;IAC/D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;AACnD,CAAC,CAAC;AACF,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,IAAY;IAClD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACrD,MAAM,MAAM,GAA6B,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC;IAC5P,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;QACxD,IAAI,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAc,CAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC7H,IAAI,CAAC,IAAI,EAAE,mCAAmC,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC;QAC5B,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,WAAW,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,QAAQ,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC7D,IAAI,CAAC,IAAI,EAAE,uCAAuC,CAAC,CAAC;IACxD,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC;QAC/C,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC9E,IAAI,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;IACjD,OAAO,eAAe,CAAC,CAAC,CAAqC,CAAC;AAClE,CAAC;AACD,MAAM,UAAU,KAAK,CAAC,MAA0B,EAAE,KAAuC,EAAE,IAAY,EAAE,QAAQ,GAAG,IAAI;IACpH,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAuC,CAAC;IAC7E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,KAAK,GAAG,MAAM,CAAC;QACnB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACjG,IAAI,CAAC,IAAI,EAAE,uCAAuC,CAAC,CAAC;YACxD,KAAK,GAAG,KAAgC,CAAC;QAC7C,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC3B,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;gBACzB,IAAI,CAAC,IAAI,EAAE,oDAAoD,CAAC,CAAC;YACrE,KAAK,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,SAAS;QACb,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;YAC1B,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAClC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;YAClB,SAAS;QACb,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC3B,KAAK,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,SAAS;QACb,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,CAAC,GAAI,KAAK,CAAC,GAAG,CAAiB,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;gBACxB,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM;gBACzB,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM;gBAC5D,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,OAAO,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAuC,CAAC;AACtG,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { OrganizationEntity, OrganizationEntityType, OrganizationMutation, OrganizationMutationEvidence, OrganizationEntityValueMutation, OrganizationLegacyTypedMutation, OrganizationFieldEdit, JsonObject } from 'holarchy-core-contract';
|
|
2
|
+
import { DispatchEngine } from 'depa-processor';
|
|
3
|
+
export declare function organizationEntityValue(entity: OrganizationEntity): JsonObject;
|
|
4
|
+
export declare function isOrganizationEntityValueMutation(m: OrganizationMutation): m is OrganizationEntityValueMutation;
|
|
5
|
+
type ValueMutation = OrganizationEntityValueMutation;
|
|
6
|
+
type LegacyEdits = Extract<OrganizationLegacyTypedMutation, {
|
|
7
|
+
edits: readonly OrganizationFieldEdit[];
|
|
8
|
+
}>;
|
|
9
|
+
type Normalized = ValueMutation | LegacyEdits;
|
|
10
|
+
type RebaseResult = {
|
|
11
|
+
after: OrganizationEntity | null;
|
|
12
|
+
operation: OrganizationMutation | null;
|
|
13
|
+
};
|
|
14
|
+
export interface OrganizationMutationDefinition {
|
|
15
|
+
readonly type: string;
|
|
16
|
+
readonly entityType: OrganizationEntityType;
|
|
17
|
+
readonly action: string;
|
|
18
|
+
readonly fields: readonly string[];
|
|
19
|
+
normalize(raw: Record<string, unknown>): Normalized;
|
|
20
|
+
validate(m: Normalized): void;
|
|
21
|
+
apply(b: OrganizationEntity | null, m: Normalized): OrganizationEntity | null;
|
|
22
|
+
rebase(current: OrganizationEntity | null, evidence: OrganizationMutationEvidence, m: Normalized): RebaseResult;
|
|
23
|
+
invert(evidence: OrganizationMutationEvidence, id: string): OrganizationMutation;
|
|
24
|
+
}
|
|
25
|
+
export declare const organizationMutationDefinitions: readonly OrganizationMutationDefinition[];
|
|
26
|
+
export declare function organizationMutationDescriptor(type: string): OrganizationMutationDefinition;
|
|
27
|
+
export declare function parseOrganizationMutation(value: unknown, path?: string): OrganizationMutation;
|
|
28
|
+
export declare function normalizeOrganizationMutationValues(value: OrganizationMutation): OrganizationMutation;
|
|
29
|
+
export declare function organizationEntityReferences(e: OrganizationEntity | null): readonly string[];
|
|
30
|
+
export declare function materializeOrganizationMutation(before: OrganizationEntity | null, input: OrganizationMutation): OrganizationMutationEvidence;
|
|
31
|
+
export declare function rebaseOrganizationMutation(current: OrganizationEntity | null, evidence: OrganizationMutationEvidence): RebaseResult;
|
|
32
|
+
export declare function invertOrganizationMutation(evidence: OrganizationMutationEvidence, id: string): OrganizationMutation;
|
|
33
|
+
export interface OrganizationMutationRuntime {
|
|
34
|
+
readonly dispatcher: DispatchEngine<OrganizationMutationEvidence>;
|
|
35
|
+
}
|
|
36
|
+
type DispatchInput = {
|
|
37
|
+
readonly before: OrganizationEntity | null;
|
|
38
|
+
readonly mutation: OrganizationMutation;
|
|
39
|
+
};
|
|
40
|
+
export declare function createOrganizationMutationRuntime(): OrganizationMutationRuntime;
|
|
41
|
+
export declare function dispatchOrganizationMutation(runtime: OrganizationMutationRuntime, input: DispatchInput, config: null): Promise<OrganizationMutationEvidence>;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=organization-mutations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization-mutations.d.ts","sourceRoot":"","sources":["../src/organization-mutations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { ManifestRegistryComposer, DispatchEngine, DispatchStrategyConfig, createRouteKeyDispatchRequest, runByFuncStyleAdapter, stdMakeNullOuterComputed, stdMakeIdentityInnerRuntime, stdMakeIdentityInnerInput, stdMakeIdentityInnerConfig, stdMakeIdentityOuterOutput } from 'depa-processor';
|
|
2
|
+
import { dataRecord, dataArray, HolonAuthorityContractError } from './authority-store.js';
|
|
3
|
+
import { parseOrganizationEntity, parseOrganizationEntityFields, canonicalOrganizationValue } from './organization-entity.js';
|
|
4
|
+
import { parseEdit, patch } from './organization-field-edits.js';
|
|
5
|
+
const fail = (path, message) => { throw new HolonAuthorityContractError('invalid-organization', path, message); };
|
|
6
|
+
const same = (a, b) => canonicalOrganizationValue(a) === canonicalOrganizationValue(b);
|
|
7
|
+
const own = (v, k) => Object.hasOwn(v, k);
|
|
8
|
+
const record = (v) => v !== null && typeof v === 'object' && !Array.isArray(v);
|
|
9
|
+
const identity = (v, p) => {
|
|
10
|
+
if (typeof v !== 'string' || !/^[A-Za-z_][A-Za-z0-9_.:-]*$/.test(v))
|
|
11
|
+
fail(p, 'Expected identity');
|
|
12
|
+
};
|
|
13
|
+
const check = (a, b, p) => {
|
|
14
|
+
if (!same(a, b))
|
|
15
|
+
fail(p, 'Mutation precondition failed');
|
|
16
|
+
};
|
|
17
|
+
function exact(r, required, optional, p) {
|
|
18
|
+
for (const k of required)
|
|
19
|
+
if (!own(r, k))
|
|
20
|
+
fail(`${p}.${k}`, 'Missing field');
|
|
21
|
+
for (const k of Object.keys(r))
|
|
22
|
+
if (!required.includes(k) && !optional.includes(k))
|
|
23
|
+
fail(`${p}.${k}`, 'Unknown field');
|
|
24
|
+
}
|
|
25
|
+
export function organizationEntityValue(entity) { const { kind, id, ...fields } = entity; return fields; }
|
|
26
|
+
export function isOrganizationEntityValueMutation(m) { return ['beforeValue', 'afterValue', 'beforeAbsent', 'afterAbsent'].some(k => own(m, k)); }
|
|
27
|
+
const namingField = (k) => k === 'Member' ? 'displayName' : 'name';
|
|
28
|
+
function rawEntity(r, key, k) {
|
|
29
|
+
const e = parseOrganizationEntity(r[key]);
|
|
30
|
+
if (e.kind !== k || e.id !== r.entityId)
|
|
31
|
+
fail('$.mutation', 'Mutation resource identity mismatch');
|
|
32
|
+
return organizationEntityValue(e);
|
|
33
|
+
}
|
|
34
|
+
function readAt(v, path) {
|
|
35
|
+
let c = v;
|
|
36
|
+
for (const k of path) {
|
|
37
|
+
if (!record(c) || !own(c, k))
|
|
38
|
+
return undefined;
|
|
39
|
+
c = c[k];
|
|
40
|
+
}
|
|
41
|
+
return c;
|
|
42
|
+
}
|
|
43
|
+
function leaves(v, p = []) { return Object.entries(v).flatMap(([k, x]) => record(x) && Object.keys(x).length ? leaves(x, [...p, k]) : [{ path: [...p, k], value: x }]); }
|
|
44
|
+
function setProjection(v, path, x) {
|
|
45
|
+
let o = v;
|
|
46
|
+
for (const k of path.slice(0, -1)) {
|
|
47
|
+
if (['__proto__', 'constructor', 'prototype'].includes(k))
|
|
48
|
+
fail('$.mutation', 'Unsafe field path');
|
|
49
|
+
if (!own(o, k))
|
|
50
|
+
o[k] = {};
|
|
51
|
+
o = o[k];
|
|
52
|
+
}
|
|
53
|
+
const k = path.at(-1);
|
|
54
|
+
if (['__proto__', 'constructor', 'prototype'].includes(k))
|
|
55
|
+
fail('$.mutation', 'Unsafe field path');
|
|
56
|
+
o[k] = structuredClone(x);
|
|
57
|
+
}
|
|
58
|
+
function projectionEdits(m, context = null) {
|
|
59
|
+
const edits = [];
|
|
60
|
+
const visit = (b, a, p = []) => {
|
|
61
|
+
for (const [k, value] of Object.entries(a)) {
|
|
62
|
+
const path = [...p, k];
|
|
63
|
+
if (record(value) && Object.keys(value).length && (record(b[k]) || record(readAt(context, path))))
|
|
64
|
+
visit(record(b[k]) ? b[k] : {}, value, path);
|
|
65
|
+
else
|
|
66
|
+
edits.push(parseEdit(own(b, k) ? { type: 'SetField', path, expected: b[k], value } : { type: 'AddField', path, value }, '$.mutation.afterValue'));
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
visit(m.beforeValue ?? {}, m.afterValue ?? {});
|
|
70
|
+
for (const path of m.removeFields ?? []) {
|
|
71
|
+
const expected = readAt(m.beforeValue, path);
|
|
72
|
+
if (expected === undefined)
|
|
73
|
+
fail('$.mutation.removeFields', 'Removal requires before value');
|
|
74
|
+
if (edits.some(e => same(e.path, path)))
|
|
75
|
+
fail('$.mutation.removeFields', 'Field cannot be set and removed together');
|
|
76
|
+
edits.push(parseEdit({ type: 'RemoveField', path, expected }, '$.mutation.removeFields'));
|
|
77
|
+
}
|
|
78
|
+
return edits;
|
|
79
|
+
}
|
|
80
|
+
function applyProjected(before, m) {
|
|
81
|
+
if (!before)
|
|
82
|
+
fail('$.mutation', 'Mutation precondition failed: missing entity');
|
|
83
|
+
if ('edits' in m)
|
|
84
|
+
return patch(before, m.edits, `$.mutations.${m.id}`);
|
|
85
|
+
for (const g of leaves(m.beforeValue ?? {}))
|
|
86
|
+
check(readAt(before, g.path), g.value, `$.mutations.${m.id}.beforeValue`);
|
|
87
|
+
return patch(before, projectionEdits(m, before), `$.mutations.${m.id}`);
|
|
88
|
+
}
|
|
89
|
+
const actions = {
|
|
90
|
+
Create: { fields: ['value'], slots: ['beforeAbsent', 'afterValue'], fullAfter: true, normalize: (r, k) => ({ beforeAbsent: true, afterValue: rawEntity(r, 'value', k) }), apply: (b, m) => { check(b, null, '$.mutation'); return parseOrganizationEntity({ ...('afterValue' in m ? m.afterValue : {}), kind: m.entityType, id: m.entityId }); }, inverse: 'Delete' },
|
|
91
|
+
Delete: { fields: ['expected'], slots: ['beforeValue', 'afterAbsent'], fullBefore: true, normalize: (r, k) => ({ beforeValue: rawEntity(r, 'expected', k), afterAbsent: true }), apply: (b, m) => { check(b && organizationEntityValue(b), 'beforeValue' in m ? m.beforeValue : undefined, '$.mutation'); return null; }, inverse: 'Create' },
|
|
92
|
+
Replace: { fields: ['expected', 'value'], slots: ['beforeValue', 'afterValue'], fullBefore: true, fullAfter: true, normalize: (r, k) => ({ beforeValue: rawEntity(r, 'expected', k), afterValue: rawEntity(r, 'value', k) }), apply: (b, m) => { check(b && organizationEntityValue(b), 'beforeValue' in m ? m.beforeValue : undefined, '$.mutation'); return parseOrganizationEntity({ ...('afterValue' in m ? m.afterValue : {}), kind: m.entityType, id: m.entityId }); }, inverse: 'Replace' },
|
|
93
|
+
Activate: { fields: ['expected'], slots: ['beforeValue', 'afterValue'], selected: () => ['effectiveState'], normalize: r => ({ beforeValue: { effectiveState: r.expected }, afterValue: { effectiveState: true } }), validate: m => check(m.afterValue?.effectiveState, true, '$.mutation.afterValue.effectiveState'), apply: applyProjected, inverse: 'Deactivate' },
|
|
94
|
+
Deactivate: { fields: ['expected'], slots: ['beforeValue', 'afterValue'], selected: () => ['effectiveState'], normalize: r => ({ beforeValue: { effectiveState: r.expected }, afterValue: { effectiveState: false } }), validate: m => check(m.afterValue?.effectiveState, false, '$.mutation.afterValue.effectiveState'), apply: applyProjected, inverse: 'Activate' },
|
|
95
|
+
Rename: { fields: ['expected', 'name'], slots: ['beforeValue', 'afterValue'], selected: k => [namingField(k)], normalize: (r, k) => ({ beforeValue: { [namingField(k)]: r.expected }, afterValue: { [namingField(k)]: r.name } }), apply: applyProjected, inverse: 'Rename' },
|
|
96
|
+
Reparent: { fields: ['expectedParent', 'parent'], slots: ['beforeValue', 'afterValue'], selected: () => ['parentHolonId'], normalize: r => ({ beforeValue: { parentHolonId: r.expectedParent }, afterValue: { parentHolonId: r.parent } }), apply: applyProjected, inverse: 'Reparent' },
|
|
97
|
+
Patch: { fields: ['edits'], slots: ['beforeValue', 'afterValue'], normalize: r => ({ edits: r.edits }), apply: applyProjected, inverse: 'Replace' },
|
|
98
|
+
};
|
|
99
|
+
/** The field interpreter is shared by apply and rebase; it also computes list targets. */
|
|
100
|
+
function rebaseEdits(current, evidence, m) {
|
|
101
|
+
const edits = 'edits' in m ? m.edits : projectionEdits(m, evidence.before);
|
|
102
|
+
let expected = evidence.before, after = current;
|
|
103
|
+
const remaining = [];
|
|
104
|
+
const writes = new Set(edits.map(e => JSON.stringify(e.path)));
|
|
105
|
+
if (!('edits' in m))
|
|
106
|
+
for (const g of leaves(m.beforeValue ?? {}))
|
|
107
|
+
if (!writes.has(JSON.stringify(g.path)))
|
|
108
|
+
check(readAt(current, g.path), g.value, '$.mutation.beforeValue');
|
|
109
|
+
for (const edit of edits) {
|
|
110
|
+
expected = patch(expected, [edit], `$.mutations.${m.id}`, false);
|
|
111
|
+
const desired = readAt(expected, edit.path), actual = readAt(after, edit.path), owner = readAt(after, edit.path.slice(0, -1));
|
|
112
|
+
if (record(owner) && same(actual, desired))
|
|
113
|
+
continue;
|
|
114
|
+
after = patch(after, [edit], `$.mutations.${m.id}`, false);
|
|
115
|
+
remaining.push(edit);
|
|
116
|
+
}
|
|
117
|
+
const validated = parseOrganizationEntity(after);
|
|
118
|
+
if (!remaining.length)
|
|
119
|
+
return { after: validated, operation: null };
|
|
120
|
+
if ('edits' in m)
|
|
121
|
+
return { after: validated, operation: { ...m, edits: remaining } };
|
|
122
|
+
if (remaining.length === edits.length)
|
|
123
|
+
return { after: validated, operation: m };
|
|
124
|
+
const beforeValue = {}, afterValue = {}, removeFields = [];
|
|
125
|
+
for (const e of remaining) {
|
|
126
|
+
if ('expected' in e)
|
|
127
|
+
setProjection(beforeValue, e.path, e.expected);
|
|
128
|
+
if (e.type === 'RemoveField')
|
|
129
|
+
removeFields.push(e.path);
|
|
130
|
+
else
|
|
131
|
+
setProjection(afterValue, e.path, readAt(validated, e.path));
|
|
132
|
+
}
|
|
133
|
+
for (const g of leaves(m.beforeValue ?? {}))
|
|
134
|
+
if (!writes.has(JSON.stringify(g.path)))
|
|
135
|
+
setProjection(beforeValue, g.path, g.value);
|
|
136
|
+
const { removeFields: _old, ...rest } = m;
|
|
137
|
+
return { after: validated, operation: { ...rest, beforeValue, afterValue, ...(removeFields.length ? { removeFields } : {}) } };
|
|
138
|
+
}
|
|
139
|
+
function makeDefinition(entityType, action) {
|
|
140
|
+
const spec = actions[action], type = `${entityType}${action}`;
|
|
141
|
+
return Object.freeze({ type, entityType, action, fields: spec.fields,
|
|
142
|
+
normalize(raw) { const base = { id: raw.id, type: raw.type, entityType: raw.entityType, entityId: raw.entityId, ...(own(raw, 'commandId') ? { commandId: raw.commandId } : {}) }; return (['beforeValue', 'afterValue', 'beforeAbsent', 'afterAbsent'].some(k => own(raw, k)) ? raw : { ...base, ...spec.normalize(raw, entityType) }); },
|
|
143
|
+
validate(m) {
|
|
144
|
+
if ('edits' in m) {
|
|
145
|
+
exact(m, ['id', 'type', 'entityType', 'entityId', 'edits'], ['commandId'], '$.mutation');
|
|
146
|
+
if (action !== 'Patch')
|
|
147
|
+
fail('$.mutation', 'Only Patch supports Edits');
|
|
148
|
+
dataArray(m.edits, '$.mutation.edits').forEach((e, i) => parseEdit(e, `$.mutation.edits[${i}]`));
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
exact(m, ['id', 'type', 'entityType', 'entityId', ...spec.slots], ['commandId', ...(action === 'Patch' ? ['removeFields'] : [])], '$.mutation');
|
|
152
|
+
for (const slot of ['beforeAbsent', 'afterAbsent'])
|
|
153
|
+
if (own(m, slot) && m[slot] !== true)
|
|
154
|
+
fail(`$.mutation.${slot}`, 'Expected true');
|
|
155
|
+
for (const slot of ['beforeValue', 'afterValue'])
|
|
156
|
+
if (own(m, slot)) {
|
|
157
|
+
const f = parseOrganizationEntityFields(entityType, m[slot], `$.mutation.${slot}`);
|
|
158
|
+
const selected = spec.selected?.(entityType);
|
|
159
|
+
if (selected)
|
|
160
|
+
exact(f, selected, [], `$.mutation.${slot}`);
|
|
161
|
+
if ((slot === 'beforeValue' && spec.fullBefore) || (slot === 'afterValue' && spec.fullAfter))
|
|
162
|
+
parseOrganizationEntity({ ...f, kind: entityType, id: m.entityId });
|
|
163
|
+
}
|
|
164
|
+
if (own(m, 'removeFields')) {
|
|
165
|
+
dataArray(m.removeFields, '$.mutation.removeFields').forEach(p => {
|
|
166
|
+
if (!Array.isArray(p))
|
|
167
|
+
fail('$.mutation.removeFields', 'Expected field paths');
|
|
168
|
+
parseEdit({ type: 'RemoveField', path: p, expected: null }, '$.mutation.removeFields');
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
if (action === 'Patch')
|
|
172
|
+
projectionEdits(m);
|
|
173
|
+
spec.validate?.(m);
|
|
174
|
+
},
|
|
175
|
+
apply: spec.apply,
|
|
176
|
+
rebase(current, evidence, m) {
|
|
177
|
+
if (same(current, evidence.after))
|
|
178
|
+
return { after: current, operation: null };
|
|
179
|
+
if (spec.apply === applyProjected && current)
|
|
180
|
+
return rebaseEdits(current, evidence, m);
|
|
181
|
+
return { after: materializeOrganizationMutation(current, m).after, operation: m };
|
|
182
|
+
},
|
|
183
|
+
invert(evidence, id) {
|
|
184
|
+
const before = evidence.after, after = evidence.before;
|
|
185
|
+
const base = { id, type: `${entityType}${spec.inverse}`, entityType, entityId: evidence.entityId };
|
|
186
|
+
if (!before)
|
|
187
|
+
return parseOrganizationMutation({ ...base, beforeAbsent: true, afterValue: organizationEntityValue(after) });
|
|
188
|
+
if (!after)
|
|
189
|
+
return parseOrganizationMutation({ ...base, beforeValue: organizationEntityValue(before), afterAbsent: true });
|
|
190
|
+
const selected = spec.selected?.(entityType);
|
|
191
|
+
const project = (e) => selected ? Object.fromEntries(selected.map(k => [k, e[k]])) : organizationEntityValue(e);
|
|
192
|
+
const inverseType = selected?.[0] === 'effectiveState' ? `${entityType}${after.effectiveState ? 'Activate' : 'Deactivate'}` : base.type;
|
|
193
|
+
return parseOrganizationMutation({ ...base, type: inverseType, beforeValue: project(before), afterValue: project(after) });
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
const kinds = ['Holon', 'Member', 'Membership', 'Role', 'RoleAssignment', 'GovernancePolicy'];
|
|
198
|
+
const manifests = kinds.flatMap(k => ['Create', 'Delete', 'Replace', 'Activate', 'Deactivate', 'Patch', ...(['Holon', 'Member', 'Role', 'GovernancePolicy'].includes(k) ? ['Rename'] : []), ...(k === 'Membership' ? ['Reparent'] : [])].map(a => ({ type: 'component_manifest', id: `holon.${k}${a}`, kind: 'component', exportName: `${k}${a}`, build: () => makeDefinition(k, a) })));
|
|
199
|
+
export const organizationMutationDefinitions = Object.freeze(ManifestRegistryComposer.composeDefs(manifests));
|
|
200
|
+
const definitions = Object.freeze(Object.fromEntries(organizationMutationDefinitions.map(d => [d.type, d])));
|
|
201
|
+
export function organizationMutationDescriptor(type) {
|
|
202
|
+
if (!own(definitions, type))
|
|
203
|
+
fail('$.mutation.type', `Unknown mutation category ${type}`);
|
|
204
|
+
return definitions[type];
|
|
205
|
+
}
|
|
206
|
+
export function parseOrganizationMutation(value, path = '$.mutation') {
|
|
207
|
+
const raw = { ...dataRecord(value, path) };
|
|
208
|
+
if (!own(raw, 'type')) {
|
|
209
|
+
exact(raw, ['id', 'entityId', 'before', 'after'], [], path);
|
|
210
|
+
identity(raw.id, path);
|
|
211
|
+
identity(raw.entityId, path);
|
|
212
|
+
const before = raw.before === null ? null : parseOrganizationEntity(raw.before, path), after = raw.after === null ? null : parseOrganizationEntity(raw.after, path);
|
|
213
|
+
if ((!before && !after) || (before && before.id !== raw.entityId) || (after && after.id !== raw.entityId))
|
|
214
|
+
fail(path, 'Mutation identity mismatch');
|
|
215
|
+
return { id: String(raw.id), entityId: String(raw.entityId), before, after };
|
|
216
|
+
}
|
|
217
|
+
if (typeof raw.type !== 'string')
|
|
218
|
+
fail(path, 'Expected mutation type');
|
|
219
|
+
const def = organizationMutationDescriptor(String(raw.type));
|
|
220
|
+
identity(raw.id, path);
|
|
221
|
+
identity(raw.entityId, path);
|
|
222
|
+
if (own(raw, 'commandId'))
|
|
223
|
+
identity(raw.commandId, path);
|
|
224
|
+
if (raw.entityType !== def.entityType)
|
|
225
|
+
fail(path, 'Mutation entityType does not match operation category');
|
|
226
|
+
if (!isOrganizationEntityValueMutation(raw)) {
|
|
227
|
+
exact(raw, ['id', 'type', 'entityType', 'entityId', ...def.fields], ['commandId'], path);
|
|
228
|
+
if (own(raw, 'edits'))
|
|
229
|
+
raw.edits = dataArray(raw.edits, path).map((e, i) => parseEdit(e, `${path}.edits[${i}]`));
|
|
230
|
+
}
|
|
231
|
+
def.validate(def.normalize(raw));
|
|
232
|
+
return structuredClone(raw);
|
|
233
|
+
}
|
|
234
|
+
export function normalizeOrganizationMutationValues(value) { const m = parseOrganizationMutation(value); return m.type ? structuredClone(organizationMutationDescriptor(m.type).normalize(m)) : m; }
|
|
235
|
+
export function organizationEntityReferences(e) {
|
|
236
|
+
if (!e)
|
|
237
|
+
return [];
|
|
238
|
+
const fields = { Membership: ['subjectId', 'parentHolonId'], Role: ['holonId'], GovernancePolicy: ['holonId'], RoleAssignment: ['membershipId', 'roleId'] };
|
|
239
|
+
return (fields[e.kind] ?? []).map(k => `${k === 'subjectId' ? 'subject' : 'entity'}:${e[k]}`);
|
|
240
|
+
}
|
|
241
|
+
export function materializeOrganizationMutation(before, input) {
|
|
242
|
+
const m = parseOrganizationMutation(input), path = `$.mutations.${m.id}`;
|
|
243
|
+
if (before && before.id !== m.entityId)
|
|
244
|
+
fail(path, 'Mutation identity mismatch');
|
|
245
|
+
let after, readPaths = [['*']], writePaths = readPaths;
|
|
246
|
+
if (!m.type) {
|
|
247
|
+
check(before, m.before, path);
|
|
248
|
+
after = m.after;
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
const def = organizationMutationDescriptor(m.type), n = def.normalize(m);
|
|
252
|
+
if (before && before.kind !== m.entityType)
|
|
253
|
+
fail(path, 'Mutation entity type mismatch');
|
|
254
|
+
after = def.apply(before, n);
|
|
255
|
+
if ('edits' in n) {
|
|
256
|
+
readPaths = n.edits.map(e => e.path);
|
|
257
|
+
writePaths = readPaths;
|
|
258
|
+
}
|
|
259
|
+
else if (!n.beforeAbsent && !n.afterAbsent && def.action !== 'Replace') {
|
|
260
|
+
readPaths = leaves(n.beforeValue ?? {}).map(e => e.path);
|
|
261
|
+
writePaths = projectionEdits(n, before).map(e => e.path);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
const entityType = (before ?? after).kind;
|
|
265
|
+
return { id: m.id, entityId: m.entityId, before, after, operation: m, reads: readPaths.map(p => p.join('.')), writes: writePaths.map(p => p.join('.')), fieldAccesses: [...readPaths.map(path => ({ entityType, entityId: m.entityId, path, mode: 'read' })), ...writePaths.map(path => ({ entityType, entityId: m.entityId, path, mode: 'write' }))], references: organizationEntityReferences(after) };
|
|
266
|
+
}
|
|
267
|
+
export function rebaseOrganizationMutation(current, evidence) {
|
|
268
|
+
const m = evidence.operation;
|
|
269
|
+
if (!m.type)
|
|
270
|
+
return { after: materializeOrganizationMutation(current, m).after, operation: m };
|
|
271
|
+
if (current && (current.id !== m.entityId || current.kind !== m.entityType))
|
|
272
|
+
fail('$.mutation', 'Mutation identity mismatch');
|
|
273
|
+
const def = organizationMutationDescriptor(m.type), normalized = def.normalize(m), result = def.rebase(current, evidence, normalized);
|
|
274
|
+
return result.operation && same(result.operation, normalized) ? { ...result, operation: m } : result;
|
|
275
|
+
}
|
|
276
|
+
export function invertOrganizationMutation(evidence, id) {
|
|
277
|
+
if (!evidence.operation.type)
|
|
278
|
+
return parseOrganizationMutation({ id, entityId: evidence.entityId, before: evidence.after, after: evidence.before });
|
|
279
|
+
return organizationMutationDescriptor(evidence.operation.type).invert(evidence, id);
|
|
280
|
+
}
|
|
281
|
+
export function createOrganizationMutationRuntime() {
|
|
282
|
+
const handler = (input) => { const i = input; return materializeOrganizationMutation(i.before, i.mutation); };
|
|
283
|
+
const dispatcher = new DispatchEngine();
|
|
284
|
+
dispatcher.registerStrategy(DispatchStrategyConfig.forRouteKeyStrategy({ handlerMap: new Map([...organizationMutationDefinitions.map(d => [d.type, handler]), ['legacy', handler]]) }));
|
|
285
|
+
return Object.freeze({ dispatcher });
|
|
286
|
+
}
|
|
287
|
+
export async function dispatchOrganizationMutation(runtime, input, config) {
|
|
288
|
+
return runByFuncStyleAdapter(runtime, input, config, stdMakeNullOuterComputed, stdMakeIdentityInnerRuntime, stdMakeIdentityInnerInput, stdMakeIdentityInnerConfig, async (rt, i) => {
|
|
289
|
+
const r = await rt.dispatcher.dispatch(createRouteKeyDispatchRequest(i.mutation.type ?? 'legacy', i, false));
|
|
290
|
+
if (!r.isHandled())
|
|
291
|
+
fail('$.mutation.type', 'Unknown mutation dispatch');
|
|
292
|
+
return r.getResult();
|
|
293
|
+
}, stdMakeIdentityOuterOutput);
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=organization-mutations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization-mutations.js","sourceRoot":"","sources":["../src/organization-mutations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { InferenceInput, InferenceResult } from "depa-inference-contract";
|
|
2
|
+
import type { HolonDiagnostic, JsonObject, OrganizationChangeSet, OrganizationMutation, OrganizationState } from "holarchy-core-contract";
|
|
3
|
+
export interface OrganizationReconciliationRuntime {
|
|
4
|
+
infer(input: InferenceInput): Promise<InferenceResult>;
|
|
5
|
+
/** Optional authority-backed history/scope gate. Without it this is a projection-only preview. */
|
|
6
|
+
validateCandidate?(input: {
|
|
7
|
+
readonly remote: OrganizationState;
|
|
8
|
+
readonly candidate: OrganizationState;
|
|
9
|
+
readonly changeSet: OrganizationChangeSet;
|
|
10
|
+
}): Promise<readonly HolonDiagnostic[]>;
|
|
11
|
+
}
|
|
12
|
+
export interface OrganizationLocalProposal {
|
|
13
|
+
readonly changeSet: OrganizationChangeSet;
|
|
14
|
+
readonly dependsOn: readonly string[];
|
|
15
|
+
}
|
|
16
|
+
export interface OrganizationReconciliationInput {
|
|
17
|
+
/** Complete authority projections at one effective time; scoped issued snapshots are not valid inputs. */
|
|
18
|
+
readonly base: OrganizationState;
|
|
19
|
+
readonly remote: OrganizationState;
|
|
20
|
+
readonly local: readonly OrganizationLocalProposal[];
|
|
21
|
+
readonly maxEpochs?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface OrganizationReconciliationCause {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly changeSetId: string;
|
|
26
|
+
readonly code: string;
|
|
27
|
+
readonly path: string;
|
|
28
|
+
readonly message: string;
|
|
29
|
+
readonly detail?: JsonObject;
|
|
30
|
+
readonly mutationType?: string;
|
|
31
|
+
readonly commandId?: string;
|
|
32
|
+
readonly entityType?: string;
|
|
33
|
+
readonly mutationId?: string;
|
|
34
|
+
readonly entityId?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface OrganizationReconciliationEpoch {
|
|
37
|
+
readonly epoch: number;
|
|
38
|
+
readonly rejectedChangeSetIds: readonly string[];
|
|
39
|
+
readonly causes: readonly OrganizationReconciliationCause[];
|
|
40
|
+
readonly inference: InferenceResult;
|
|
41
|
+
}
|
|
42
|
+
export interface OrganizationReconciliationResult {
|
|
43
|
+
readonly status: "ready" | "incomplete";
|
|
44
|
+
readonly validation: "projection-only" | "authority-backed";
|
|
45
|
+
readonly base: OrganizationState;
|
|
46
|
+
readonly remote: OrganizationState;
|
|
47
|
+
readonly candidate: OrganizationState | null;
|
|
48
|
+
readonly basisDigest: string;
|
|
49
|
+
readonly acceptedChangeSetIds: readonly string[];
|
|
50
|
+
readonly rejectedChangeSetIds: readonly string[];
|
|
51
|
+
readonly causes: readonly OrganizationReconciliationCause[];
|
|
52
|
+
readonly inference: InferenceResult | null;
|
|
53
|
+
readonly epochs: readonly OrganizationReconciliationEpoch[];
|
|
54
|
+
readonly replayedOperations: readonly {
|
|
55
|
+
readonly changeSetId: string;
|
|
56
|
+
readonly mutation: OrganizationMutation;
|
|
57
|
+
}[];
|
|
58
|
+
readonly diagnostics: readonly {
|
|
59
|
+
readonly code: string;
|
|
60
|
+
readonly message: string;
|
|
61
|
+
}[];
|
|
62
|
+
}
|
|
63
|
+
export interface ReconciledOrganizationChangeSet {
|
|
64
|
+
readonly changeSet: OrganizationChangeSet;
|
|
65
|
+
readonly provenance: {
|
|
66
|
+
readonly selectedChangeSetIds: readonly string[];
|
|
67
|
+
readonly operations: readonly {
|
|
68
|
+
readonly changeSetId: string;
|
|
69
|
+
readonly mutationId: string;
|
|
70
|
+
readonly successorMutationId: string;
|
|
71
|
+
}[];
|
|
72
|
+
readonly baseRevision: number;
|
|
73
|
+
readonly remoteRevision: number;
|
|
74
|
+
readonly basisDigest: string;
|
|
75
|
+
readonly programFingerprint: string;
|
|
76
|
+
readonly inputFingerprint: string;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/** Read-only preview over complete authority projections, not scoped issued snapshots.
|
|
80
|
+
* Versioned governance constraints use the same evaluator as public authoring.
|
|
81
|
+
* The inference workspace and candidate never write organization authority.
|
|
82
|
+
*/
|
|
83
|
+
export declare function reconcileOrganization(runtime: OrganizationReconciliationRuntime, input: OrganizationReconciliationInput): Promise<OrganizationReconciliationResult>;
|
|
84
|
+
/** Explicit adoption of all accepted whole groups. Reconcile again to select a different subset. */
|
|
85
|
+
export declare function createReconciledChangeSet(result: OrganizationReconciliationResult, id: string): ReconciledOrganizationChangeSet;
|
|
86
|
+
//# sourceMappingURL=organization-reconciliation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization-reconciliation.d.ts","sourceRoot":"","sources":["../src/organization-reconciliation.ts"],"names":[],"mappings":"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"}
|