@bett3r-dev/blueprint-schema 1.6.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -0
- package/build/cjs/apply-design.d.ts +5 -5
- package/build/cjs/apply-design.d.ts.map +1 -1
- package/build/cjs/apply-design.js +21 -5
- package/build/cjs/apply-design.js.map +1 -1
- package/build/cjs/apply-overrides.d.ts +3 -3
- package/build/cjs/apply-overrides.d.ts.map +1 -1
- package/build/cjs/apply-overrides.js +5 -1
- package/build/cjs/apply-overrides.js.map +1 -1
- package/build/cjs/card-channel.d.ts +18 -0
- package/build/cjs/card-channel.d.ts.map +1 -0
- package/build/cjs/card-channel.js +30 -0
- package/build/cjs/card-channel.js.map +1 -0
- package/build/cjs/convergence.d.ts +2 -2
- package/build/cjs/convergence.d.ts.map +1 -1
- package/build/cjs/coverage-links.d.ts +27 -0
- package/build/cjs/coverage-links.d.ts.map +1 -0
- package/build/cjs/coverage-links.js +117 -0
- package/build/cjs/coverage-links.js.map +1 -0
- package/build/cjs/design.d.ts +44 -2
- package/build/cjs/design.d.ts.map +1 -1
- package/build/cjs/design.js +42 -2
- package/build/cjs/design.js.map +1 -1
- package/build/cjs/diagnostics.d.ts +2 -2
- package/build/cjs/diagnostics.d.ts.map +1 -1
- package/build/cjs/edge-endpoints.d.ts +33 -0
- package/build/cjs/edge-endpoints.d.ts.map +1 -0
- package/build/cjs/edge-endpoints.js +83 -0
- package/build/cjs/edge-endpoints.js.map +1 -0
- package/build/cjs/edges.d.ts +2 -2
- package/build/cjs/edges.d.ts.map +1 -1
- package/build/cjs/edges.js +2 -1
- package/build/cjs/edges.js.map +1 -1
- package/build/cjs/effective-design.d.ts +21 -0
- package/build/cjs/effective-design.d.ts.map +1 -0
- package/build/cjs/effective-design.js +172 -0
- package/build/cjs/effective-design.js.map +1 -0
- package/build/cjs/entry-points.d.ts +2 -2
- package/build/cjs/entry-points.d.ts.map +1 -1
- package/build/cjs/find-orphan-nodes.d.ts +3 -3
- package/build/cjs/find-orphan-nodes.d.ts.map +1 -1
- package/build/cjs/flow-traversal.d.ts +3 -3
- package/build/cjs/flow-traversal.d.ts.map +1 -1
- package/build/cjs/fork-scenarios.d.ts +44 -0
- package/build/cjs/fork-scenarios.d.ts.map +1 -0
- package/build/cjs/fork-scenarios.js +83 -0
- package/build/cjs/fork-scenarios.js.map +1 -0
- package/build/cjs/graph.d.ts +27 -2
- package/build/cjs/graph.d.ts.map +1 -1
- package/build/cjs/graph.js +36 -0
- package/build/cjs/graph.js.map +1 -1
- package/build/cjs/handler-scope.d.ts +3 -3
- package/build/cjs/handler-scope.d.ts.map +1 -1
- package/build/cjs/index.d.ts +9 -0
- package/build/cjs/index.d.ts.map +1 -1
- package/build/cjs/index.js +9 -0
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/invariants.d.ts +26 -0
- package/build/cjs/invariants.d.ts.map +1 -0
- package/build/cjs/invariants.js +39 -0
- package/build/cjs/invariants.js.map +1 -0
- package/build/cjs/map-links.d.ts +1 -0
- package/build/cjs/map-links.d.ts.map +1 -1
- package/build/cjs/map-links.js +14 -1
- package/build/cjs/map-links.js.map +1 -1
- package/build/cjs/map-structure.d.ts +172 -3
- package/build/cjs/map-structure.d.ts.map +1 -1
- package/build/cjs/map-structure.js +46 -4
- package/build/cjs/map-structure.js.map +1 -1
- package/build/cjs/map-vocabulary.d.ts +29 -1
- package/build/cjs/map-vocabulary.d.ts.map +1 -1
- package/build/cjs/map-vocabulary.js +72 -2
- package/build/cjs/map-vocabulary.js.map +1 -1
- package/build/cjs/nodes.d.ts +11 -1
- package/build/cjs/nodes.d.ts.map +1 -1
- package/build/cjs/nodes.js +4 -2
- package/build/cjs/nodes.js.map +1 -1
- package/build/cjs/ops.d.ts +43 -10
- package/build/cjs/ops.d.ts.map +1 -1
- package/build/cjs/ops.js +1 -1
- package/build/cjs/ops.js.map +1 -1
- package/build/cjs/overrides.d.ts +5 -2
- package/build/cjs/overrides.d.ts.map +1 -1
- package/build/cjs/overrides.js.map +1 -1
- package/build/cjs/package.json +1 -0
- package/build/cjs/reachability.d.ts +4 -4
- package/build/cjs/reachability.d.ts.map +1 -1
- package/build/cjs/reachability.js +5 -1
- package/build/cjs/reachability.js.map +1 -1
- package/build/cjs/reality-check.d.ts +4 -4
- package/build/cjs/reality-check.d.ts.map +1 -1
- package/build/cjs/reality-check.js +52 -9
- package/build/cjs/reality-check.js.map +1 -1
- package/build/cjs/session-phase.d.ts +80 -0
- package/build/cjs/session-phase.d.ts.map +1 -0
- package/build/cjs/session-phase.js +97 -0
- package/build/cjs/session-phase.js.map +1 -0
- package/build/cjs/session.d.ts +21 -0
- package/build/cjs/session.d.ts.map +1 -1
- package/build/cjs/session.js +19 -0
- package/build/cjs/session.js.map +1 -1
- package/build/cjs/spec.d.ts +140 -0
- package/build/cjs/spec.d.ts.map +1 -0
- package/build/cjs/spec.js +514 -0
- package/build/cjs/spec.js.map +1 -0
- package/build/cjs/topology.d.ts +2 -2
- package/build/cjs/topology.d.ts.map +1 -1
- package/build/cjs/topology.js +2 -0
- package/build/cjs/topology.js.map +1 -1
- package/build/cjs/unproduced-events.d.ts +10 -0
- package/build/cjs/unproduced-events.d.ts.map +1 -0
- package/build/cjs/unproduced-events.js +37 -0
- package/build/cjs/unproduced-events.js.map +1 -0
- package/build/cjs/validate-design.d.ts +3 -3
- package/build/cjs/validate-design.d.ts.map +1 -1
- package/build/cjs/validate-design.js +40 -3
- package/build/cjs/validate-design.js.map +1 -1
- package/build/esm/apply-design.d.ts +5 -5
- package/build/esm/apply-design.d.ts.map +1 -1
- package/build/esm/apply-design.js +21 -5
- package/build/esm/apply-design.js.map +1 -1
- package/build/esm/apply-overrides.d.ts +3 -3
- package/build/esm/apply-overrides.d.ts.map +1 -1
- package/build/esm/apply-overrides.js +5 -1
- package/build/esm/apply-overrides.js.map +1 -1
- package/build/esm/card-channel.d.ts +18 -0
- package/build/esm/card-channel.d.ts.map +1 -0
- package/build/esm/card-channel.js +25 -0
- package/build/esm/card-channel.js.map +1 -0
- package/build/esm/convergence.d.ts +2 -2
- package/build/esm/convergence.d.ts.map +1 -1
- package/build/esm/coverage-links.d.ts +27 -0
- package/build/esm/coverage-links.d.ts.map +1 -0
- package/build/esm/coverage-links.js +113 -0
- package/build/esm/coverage-links.js.map +1 -0
- package/build/esm/design.d.ts +44 -2
- package/build/esm/design.d.ts.map +1 -1
- package/build/esm/design.js +38 -1
- package/build/esm/design.js.map +1 -1
- package/build/esm/diagnostics.d.ts +2 -2
- package/build/esm/diagnostics.d.ts.map +1 -1
- package/build/esm/edge-endpoints.d.ts +33 -0
- package/build/esm/edge-endpoints.d.ts.map +1 -0
- package/build/esm/edge-endpoints.js +77 -0
- package/build/esm/edge-endpoints.js.map +1 -0
- package/build/esm/edges.d.ts +2 -2
- package/build/esm/edges.d.ts.map +1 -1
- package/build/esm/edges.js +2 -1
- package/build/esm/edges.js.map +1 -1
- package/build/esm/effective-design.d.ts +21 -0
- package/build/esm/effective-design.d.ts.map +1 -0
- package/build/esm/effective-design.js +169 -0
- package/build/esm/effective-design.js.map +1 -0
- package/build/esm/entry-points.d.ts +2 -2
- package/build/esm/entry-points.d.ts.map +1 -1
- package/build/esm/find-orphan-nodes.d.ts +3 -3
- package/build/esm/find-orphan-nodes.d.ts.map +1 -1
- package/build/esm/flow-traversal.d.ts +3 -3
- package/build/esm/flow-traversal.d.ts.map +1 -1
- package/build/esm/fork-scenarios.d.ts +44 -0
- package/build/esm/fork-scenarios.d.ts.map +1 -0
- package/build/esm/fork-scenarios.js +78 -0
- package/build/esm/fork-scenarios.js.map +1 -0
- package/build/esm/graph.d.ts +27 -2
- package/build/esm/graph.d.ts.map +1 -1
- package/build/esm/graph.js +33 -0
- package/build/esm/graph.js.map +1 -1
- package/build/esm/handler-scope.d.ts +3 -3
- package/build/esm/handler-scope.d.ts.map +1 -1
- package/build/esm/index.d.ts +9 -0
- package/build/esm/index.d.ts.map +1 -1
- package/build/esm/index.js +9 -0
- package/build/esm/index.js.map +1 -1
- package/build/esm/invariants.d.ts +26 -0
- package/build/esm/invariants.d.ts.map +1 -0
- package/build/esm/invariants.js +36 -0
- package/build/esm/invariants.js.map +1 -0
- package/build/esm/map-links.d.ts +1 -0
- package/build/esm/map-links.d.ts.map +1 -1
- package/build/esm/map-links.js +14 -1
- package/build/esm/map-links.js.map +1 -1
- package/build/esm/map-structure.d.ts +172 -3
- package/build/esm/map-structure.d.ts.map +1 -1
- package/build/esm/map-structure.js +42 -3
- package/build/esm/map-structure.js.map +1 -1
- package/build/esm/map-vocabulary.d.ts +29 -1
- package/build/esm/map-vocabulary.d.ts.map +1 -1
- package/build/esm/map-vocabulary.js +64 -1
- package/build/esm/map-vocabulary.js.map +1 -1
- package/build/esm/nodes.d.ts +11 -1
- package/build/esm/nodes.d.ts.map +1 -1
- package/build/esm/nodes.js +4 -2
- package/build/esm/nodes.js.map +1 -1
- package/build/esm/ops.d.ts +43 -10
- package/build/esm/ops.d.ts.map +1 -1
- package/build/esm/ops.js +1 -1
- package/build/esm/ops.js.map +1 -1
- package/build/esm/overrides.d.ts +5 -2
- package/build/esm/overrides.d.ts.map +1 -1
- package/build/esm/overrides.js.map +1 -1
- package/build/esm/reachability.d.ts +4 -4
- package/build/esm/reachability.d.ts.map +1 -1
- package/build/esm/reachability.js +5 -1
- package/build/esm/reachability.js.map +1 -1
- package/build/esm/reality-check.d.ts +4 -4
- package/build/esm/reality-check.d.ts.map +1 -1
- package/build/esm/reality-check.js +53 -10
- package/build/esm/reality-check.js.map +1 -1
- package/build/esm/session-phase.d.ts +80 -0
- package/build/esm/session-phase.d.ts.map +1 -0
- package/build/esm/session-phase.js +93 -0
- package/build/esm/session-phase.js.map +1 -0
- package/build/esm/session.d.ts +21 -0
- package/build/esm/session.d.ts.map +1 -1
- package/build/esm/session.js +17 -0
- package/build/esm/session.js.map +1 -1
- package/build/esm/spec.d.ts +140 -0
- package/build/esm/spec.d.ts.map +1 -0
- package/build/esm/spec.js +501 -0
- package/build/esm/spec.js.map +1 -0
- package/build/esm/topology.d.ts +2 -2
- package/build/esm/topology.d.ts.map +1 -1
- package/build/esm/topology.js +2 -0
- package/build/esm/topology.js.map +1 -1
- package/build/esm/unproduced-events.d.ts +10 -0
- package/build/esm/unproduced-events.d.ts.map +1 -0
- package/build/esm/unproduced-events.js +32 -0
- package/build/esm/unproduced-events.js.map +1 -0
- package/build/esm/validate-design.d.ts +3 -3
- package/build/esm/validate-design.d.ts.map +1 -1
- package/build/esm/validate-design.js +41 -4
- package/build/esm/validate-design.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +14 -4
- package/schema/map.schema.json +62 -1
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
function byString(a, b) {
|
|
2
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
3
|
+
}
|
|
4
|
+
const byPair = (a, b) => byString(a.esId, b.esId) || byString(a.scenarioId, b.scenarioId);
|
|
5
|
+
const sortedUnique = (ids) => [...new Set(ids)].sort(byString);
|
|
6
|
+
// Lineages: union along every supersedes pointer that names a scenario on the map. Returns each
|
|
7
|
+
// scenario's lineage root; an id the map does not hold is its own root.
|
|
8
|
+
function lineageRoots(scenarios) {
|
|
9
|
+
const parent = new Map(scenarios.map(s => [s.id, s.id]));
|
|
10
|
+
const rootOf = (id) => {
|
|
11
|
+
let root = id;
|
|
12
|
+
while (parent.has(root) && parent.get(root) !== root)
|
|
13
|
+
root = parent.get(root);
|
|
14
|
+
return root;
|
|
15
|
+
};
|
|
16
|
+
for (const s of scenarios) {
|
|
17
|
+
if (s.supersedes !== undefined && parent.has(s.supersedes))
|
|
18
|
+
parent.set(rootOf(s.id), rootOf(s.supersedes));
|
|
19
|
+
}
|
|
20
|
+
return rootOf;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* ESAS-295: every scenario in `id`'s lineage, `id` included, in map order, whatever each member's status;
|
|
24
|
+
* the lineage the join counts pairs for and the store's map-cover / map-uncover act on. An id the map does
|
|
25
|
+
* not hold is its own one-member lineage, `[ id ]`, so a pair left on a withdrawn scenario can be uncovered.
|
|
26
|
+
*/
|
|
27
|
+
export function scenarioLineage(scenarios, id) {
|
|
28
|
+
if (!scenarios.some(s => s.id === id))
|
|
29
|
+
return [id];
|
|
30
|
+
const rootOf = lineageRoots(scenarios);
|
|
31
|
+
const root = rootOf(id);
|
|
32
|
+
return scenarios.filter(s => rootOf(s.id) === root).map(s => s.id);
|
|
33
|
+
}
|
|
34
|
+
export function joinCoverageLinks(merged, map) {
|
|
35
|
+
const nodeIds = new Set(merged.nodes.map(node => node.id));
|
|
36
|
+
const removedIds = new Set(merged.nodes.filter(node => node.status === 'removed').map(node => node.id));
|
|
37
|
+
const scenarios = new Map(map.scenarios.map(s => [s.id, s]));
|
|
38
|
+
const position = new Map(map.scenarios.map((s, index) => [s.id, index]));
|
|
39
|
+
const rootOf = lineageRoots(map.scenarios);
|
|
40
|
+
// How far down its supersedes chain a scenario sits: the newest member is the deepest.
|
|
41
|
+
const depthOf = (id) => {
|
|
42
|
+
const seen = new Set();
|
|
43
|
+
let depth = 0;
|
|
44
|
+
for (let at = scenarios.get(id)?.supersedes; at !== undefined && scenarios.has(at) && !seen.has(at); at = scenarios.get(at)?.supersedes) {
|
|
45
|
+
seen.add(at);
|
|
46
|
+
depth += 1;
|
|
47
|
+
}
|
|
48
|
+
return depth;
|
|
49
|
+
};
|
|
50
|
+
const members = new Map();
|
|
51
|
+
for (const s of map.scenarios)
|
|
52
|
+
members.set(rootOf(s.id), [...(members.get(rootOf(s.id)) ?? []), s.id]);
|
|
53
|
+
const isLive = (id) => scenarios.get(id)?.status.kind !== 'struck';
|
|
54
|
+
// The representative is the newest non-struck member; a fully struck lineage has none.
|
|
55
|
+
const representativeOf = new Map();
|
|
56
|
+
for (const [root, ids] of members) {
|
|
57
|
+
const standing = ids.filter(isLive);
|
|
58
|
+
if (standing.length === 0)
|
|
59
|
+
continue;
|
|
60
|
+
const newest = standing.reduce((best, id) => {
|
|
61
|
+
const delta = depthOf(id) - depthOf(best);
|
|
62
|
+
return delta > 0 || (delta === 0 && position.get(id) > position.get(best)) ? id : best;
|
|
63
|
+
});
|
|
64
|
+
representativeOf.set(root, newest);
|
|
65
|
+
}
|
|
66
|
+
const dangling = [];
|
|
67
|
+
const removed = [];
|
|
68
|
+
const liveOf = new Map();
|
|
69
|
+
const staleOf = new Map();
|
|
70
|
+
for (const link of map.coverage) {
|
|
71
|
+
const pair = { esId: link.esId, scenarioId: link.scenarioId };
|
|
72
|
+
const known = scenarios.has(link.scenarioId);
|
|
73
|
+
const verdict = !nodeIds.has(link.esId) || !known ? 'dangling' : removedIds.has(link.esId) ? 'removed' : 'live';
|
|
74
|
+
if (verdict === 'dangling')
|
|
75
|
+
dangling.push(pair);
|
|
76
|
+
if (verdict === 'removed')
|
|
77
|
+
removed.push(pair);
|
|
78
|
+
if (!known)
|
|
79
|
+
continue;
|
|
80
|
+
const into = verdict === 'live' ? liveOf : staleOf;
|
|
81
|
+
const root = rootOf(link.scenarioId);
|
|
82
|
+
into.set(root, [...(into.get(root) ?? []), link.esId]);
|
|
83
|
+
}
|
|
84
|
+
const coversOf = {};
|
|
85
|
+
const staleCoverage = {};
|
|
86
|
+
const coveredByOf = new Map();
|
|
87
|
+
for (const [root, representative] of representativeOf) {
|
|
88
|
+
const live = sortedUnique(liveOf.get(root) ?? []);
|
|
89
|
+
const stale = sortedUnique(staleOf.get(root) ?? []);
|
|
90
|
+
for (const id of members.get(root)) {
|
|
91
|
+
if (!isLive(id))
|
|
92
|
+
continue;
|
|
93
|
+
coversOf[id] = [...live];
|
|
94
|
+
staleCoverage[id] = [...stale];
|
|
95
|
+
}
|
|
96
|
+
for (const esId of live)
|
|
97
|
+
coveredByOf.set(esId, [...(coveredByOf.get(esId) ?? []), representative]);
|
|
98
|
+
}
|
|
99
|
+
const coveredBy = {};
|
|
100
|
+
for (const esId of [...coveredByOf.keys()].sort(byString))
|
|
101
|
+
coveredBy[esId] = sortedUnique(coveredByOf.get(esId));
|
|
102
|
+
return {
|
|
103
|
+
coversOf: sortedRecord(coversOf),
|
|
104
|
+
staleCoverage: sortedRecord(staleCoverage),
|
|
105
|
+
coveredBy,
|
|
106
|
+
dangling: dangling.sort(byPair),
|
|
107
|
+
removed: removed.sort(byPair)
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function sortedRecord(record) {
|
|
111
|
+
return Object.fromEntries(Object.keys(record).sort(byString).map(key => [key, record[key]]));
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=coverage-links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverage-links.js","sourceRoot":"","sources":["../../src/coverage-links.ts"],"names":[],"mappings":"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"}
|
package/build/esm/design.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { EdgeKind, EdgeKindSource } from './edges.js';
|
|
2
|
-
import { DesignAuthor, NodeType, ReadModelQuery } from './nodes.js';
|
|
1
|
+
import type { EdgeKind, EdgeKindSource } from './edges.js';
|
|
2
|
+
import type { DesignAuthor, NodeType, ReadModelQuery } from './nodes.js';
|
|
3
3
|
export type DesignSchemaVersion = 1;
|
|
4
4
|
export declare const BLUEPRINT_DESIGN_FILENAME = "design.json";
|
|
5
5
|
export type DesignAttribution = {
|
|
6
6
|
author: DesignAuthor;
|
|
7
7
|
ts: string;
|
|
8
8
|
note?: string;
|
|
9
|
+
/** ESAS-205: the member an agent wrote this for, when it wrote with a job key that member's press queued. */
|
|
10
|
+
onBehalfOf?: string;
|
|
9
11
|
};
|
|
10
12
|
export type ProposedNode = DesignAttribution & {
|
|
11
13
|
type: NodeType;
|
|
@@ -13,6 +15,9 @@ export type ProposedNode = DesignAttribution & {
|
|
|
13
15
|
subdomain: string;
|
|
14
16
|
resourceKey?: string;
|
|
15
17
|
queries?: ReadModelQuery[];
|
|
18
|
+
rule?: string;
|
|
19
|
+
errorCodes?: string[];
|
|
20
|
+
generic?: boolean;
|
|
16
21
|
};
|
|
17
22
|
export type ProposedEdge = DesignAttribution & {
|
|
18
23
|
from: string;
|
|
@@ -26,12 +31,27 @@ export type ModifiableNodeFields = {
|
|
|
26
31
|
subdomain: string;
|
|
27
32
|
resourceKey: string;
|
|
28
33
|
queries: ReadModelQuery[];
|
|
34
|
+
rule: string;
|
|
35
|
+
errorCodes: string[];
|
|
36
|
+
generic: boolean;
|
|
29
37
|
};
|
|
30
38
|
export declare const MODIFIABLE_NODE_FIELDS: readonly (keyof ModifiableNodeFields)[];
|
|
39
|
+
/**
|
|
40
|
+
* A change the design makes to an element that already exists. `set` overwrites the listed fields; a modify whose
|
|
41
|
+
* `set` is empty marks the element edited for a change no field holds (a command's data schema, an aggregate's logic,
|
|
42
|
+
* a policy, an event's payload), and its `note` describes that change — validateDesign refuses one with neither.
|
|
43
|
+
*/
|
|
31
44
|
export type ModifyEntry = DesignAttribution & {
|
|
32
45
|
id: string;
|
|
33
46
|
set: Partial<ModifiableNodeFields>;
|
|
34
47
|
};
|
|
48
|
+
/** Whether a modify changes none of the fields, so it only declares the change its note describes. */
|
|
49
|
+
export declare const isNoteOnlyModify: (entry: Pick<ModifyEntry, "set">) => boolean;
|
|
50
|
+
/**
|
|
51
|
+
* The note an element carries once a further entry's note lands on it: both, one line each, so a second modify of
|
|
52
|
+
* the same element never loses the first's description; a note it already carries is not repeated.
|
|
53
|
+
*/
|
|
54
|
+
export declare function joinedNote(prior: string | undefined, next: string | undefined): string | undefined;
|
|
35
55
|
export type RemoveEntry = DesignAttribution & ({
|
|
36
56
|
kind: 'node';
|
|
37
57
|
id: string;
|
|
@@ -50,13 +70,35 @@ export type CommentIdRef = {
|
|
|
50
70
|
commentId: string;
|
|
51
71
|
};
|
|
52
72
|
export type CommentAnchor = string | EdgeRef | CommentIdRef | null;
|
|
73
|
+
/**
|
|
74
|
+
* The impact map's own general channel. `null` stays the eventstorming board's (and every pre-split
|
|
75
|
+
* board-wide comment's) general channel; a board-wide remark made on the map is anchored here instead,
|
|
76
|
+
* so a reader knows which board it was made on. `#` appears in no artifact name and no map entry id.
|
|
77
|
+
*/
|
|
78
|
+
export declare const MAP_GENERAL_ANCHOR = "#map";
|
|
53
79
|
export type DesignComment = DesignAttribution & {
|
|
54
80
|
id: string;
|
|
55
81
|
anchor: CommentAnchor;
|
|
56
82
|
resolved: boolean;
|
|
57
83
|
text: string;
|
|
58
84
|
mentions?: string[];
|
|
85
|
+
/** ESAS-266: a board reaction to its thread, not a remark; it asks the agent nothing. */
|
|
86
|
+
reaction?: CommentReaction;
|
|
59
87
|
};
|
|
88
|
+
export type CommentReaction = 'thumbs-up';
|
|
89
|
+
export declare const COMMENT_REACTIONS: readonly CommentReaction[];
|
|
90
|
+
/** The mention that names the design agent, with or without its leading "@", in any case. */
|
|
91
|
+
export declare const BLUEPRINT_AGENT_HANDLE = "blueprint";
|
|
92
|
+
/**
|
|
93
|
+
* ESAS-266 (ADR-109), ESAS-242 F4: whether a comment asks the design agent to reply. A reaction never does;
|
|
94
|
+
* otherwise a comment naming nobody does, and one naming people does only when the agent is among them.
|
|
95
|
+
* The server's reply trigger and the board's summon both read it. The hosted engine does not validate a comment
|
|
96
|
+
* before it lands, so a malformed mention list reads as naming nobody and a non-string mention as no one, not a throw.
|
|
97
|
+
*/
|
|
98
|
+
export declare const commentSummonsAgent: (entry: {
|
|
99
|
+
readonly mentions?: unknown;
|
|
100
|
+
readonly reaction?: unknown;
|
|
101
|
+
}) => boolean;
|
|
60
102
|
export type MemberRef = {
|
|
61
103
|
id: string;
|
|
62
104
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design.d.ts","sourceRoot":"","sources":["../../src/design.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"design.d.ts","sourceRoot":"","sources":["../../src/design.ts"],"names":[],"mappings":"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"}
|
package/build/esm/design.js
CHANGED
|
@@ -3,8 +3,45 @@ export const MODIFIABLE_NODE_FIELDS = [
|
|
|
3
3
|
'label',
|
|
4
4
|
'subdomain',
|
|
5
5
|
'resourceKey',
|
|
6
|
-
'queries'
|
|
6
|
+
'queries',
|
|
7
|
+
'rule',
|
|
8
|
+
'errorCodes',
|
|
9
|
+
'generic'
|
|
7
10
|
];
|
|
11
|
+
/** Whether a modify changes none of the fields, so it only declares the change its note describes. */
|
|
12
|
+
export const isNoteOnlyModify = (entry) => Object.keys(entry.set ?? {}).length === 0;
|
|
13
|
+
/**
|
|
14
|
+
* The note an element carries once a further entry's note lands on it: both, one line each, so a second modify of
|
|
15
|
+
* the same element never loses the first's description; a note it already carries is not repeated.
|
|
16
|
+
*/
|
|
17
|
+
export function joinedNote(prior, next) {
|
|
18
|
+
if (next === undefined || next.trim() === '')
|
|
19
|
+
return prior;
|
|
20
|
+
if (prior === undefined || prior.trim() === '')
|
|
21
|
+
return next;
|
|
22
|
+
return prior.split('\n').includes(next) ? prior : `${prior}\n${next}`;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The impact map's own general channel. `null` stays the eventstorming board's (and every pre-split
|
|
26
|
+
* board-wide comment's) general channel; a board-wide remark made on the map is anchored here instead,
|
|
27
|
+
* so a reader knows which board it was made on. `#` appears in no artifact name and no map entry id.
|
|
28
|
+
*/
|
|
29
|
+
export const MAP_GENERAL_ANCHOR = '#map';
|
|
30
|
+
export const COMMENT_REACTIONS = ['thumbs-up'];
|
|
31
|
+
/** The mention that names the design agent, with or without its leading "@", in any case. */
|
|
32
|
+
export const BLUEPRINT_AGENT_HANDLE = 'blueprint';
|
|
33
|
+
/**
|
|
34
|
+
* ESAS-266 (ADR-109), ESAS-242 F4: whether a comment asks the design agent to reply. A reaction never does;
|
|
35
|
+
* otherwise a comment naming nobody does, and one naming people does only when the agent is among them.
|
|
36
|
+
* The server's reply trigger and the board's summon both read it. The hosted engine does not validate a comment
|
|
37
|
+
* before it lands, so a malformed mention list reads as naming nobody and a non-string mention as no one, not a throw.
|
|
38
|
+
*/
|
|
39
|
+
export const commentSummonsAgent = (entry) => {
|
|
40
|
+
const mentions = Array.isArray(entry.mentions) ? entry.mentions : [];
|
|
41
|
+
return entry.reaction === undefined
|
|
42
|
+
&& (mentions.length === 0
|
|
43
|
+
|| mentions.some(mention => typeof mention === 'string' && mention.replace(/^@/, '').toLowerCase() === BLUEPRINT_AGENT_HANDLE));
|
|
44
|
+
};
|
|
8
45
|
const MENTION_TOKEN = /@([A-Za-z0-9._-]+)/g;
|
|
9
46
|
export const resolveMentions = (text, directory) => {
|
|
10
47
|
const ids = [];
|
package/build/esm/design.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design.js","sourceRoot":"","sources":["../../src/design.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,yBAAyB,GAAG,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"design.js","sourceRoot":"","sources":["../../src/design.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { EdgeKind } from './edges.js';
|
|
2
|
-
import { NodeType } from './nodes.js';
|
|
1
|
+
import type { EdgeKind } from './edges.js';
|
|
2
|
+
import type { NodeType } from './nodes.js';
|
|
3
3
|
export type UnresolvedEdgeDirection = 'source' | 'target';
|
|
4
4
|
export type UnresolvedEdge = {
|
|
5
5
|
anchorId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,uBAAuB,CAAC;IACnC,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,YAAY,GAAG,aAAa,CAAC;AAE5E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EACJ,UAAU,GACV,kBAAkB,GAClB,YAAY,GACZ,eAAe,GACf,eAAe,GACf,0BAA0B,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,2BAA2B,EAAE,0BAA0B,EAAE,CAAC;IAC1D,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;CACvC,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,WAAW,CAW9C"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** The id a `<subdomain>:<type>:<slug>` reference names, when it is one of `known`; otherwise undefined. */
|
|
2
|
+
export declare function canonicalEndpoint(endpoint: string, known: ReadonlySet<string>): string | undefined;
|
|
3
|
+
type EndpointField = 'from' | 'to' | 'handlers';
|
|
4
|
+
/** An endpoint that names no node: which edge, which field, and the proposed ids closest to it. */
|
|
5
|
+
export type UnresolvedEndpoint = {
|
|
6
|
+
edge: number;
|
|
7
|
+
field: EndpointField;
|
|
8
|
+
endpoint: string;
|
|
9
|
+
closest: string[];
|
|
10
|
+
};
|
|
11
|
+
/** Up to `count` of `ids`, nearest `endpoint` first. */
|
|
12
|
+
export declare function closestIds(endpoint: string, ids: Iterable<string>, count?: number): string[];
|
|
13
|
+
/**
|
|
14
|
+
* Judges each edge's endpoints (from, to and handlers) at the door. An endpoint stands when it is a proposed id or a
|
|
15
|
+
* node of `graph`; a reference to one is rewritten to its id. With no graph, an endpoint shaped as a node id stands as a
|
|
16
|
+
* reference to code, as before. Anything else is unresolved, with the proposed ids closest to it. A non-string endpoint
|
|
17
|
+
* is left to the design's own validation.
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveEdgeEndpoints<Edge extends {
|
|
20
|
+
from?: unknown;
|
|
21
|
+
to?: unknown;
|
|
22
|
+
handlers?: unknown;
|
|
23
|
+
}>(edges: readonly Edge[], { proposed, graph }: {
|
|
24
|
+
proposed: ReadonlySet<string>;
|
|
25
|
+
graph?: ReadonlySet<string>;
|
|
26
|
+
}): {
|
|
27
|
+
edges: Edge[];
|
|
28
|
+
unresolved: UnresolvedEndpoint[];
|
|
29
|
+
};
|
|
30
|
+
/** The refusal message for unresolved endpoints, naming each and the proposed ids closest to it. */
|
|
31
|
+
export declare function unresolvedEndpointsMessage(unresolved: readonly UnresolvedEndpoint[]): string;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=edge-endpoints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-endpoints.d.ts","sourceRoot":"","sources":["../../src/edge-endpoints.ts"],"names":[],"mappings":"AAYA,4GAA4G;AAC5G,wBAAgB,iBAAiB,CAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GAAI,MAAM,GAAG,SAAS,CAQpG;AAED,KAAK,aAAa,GAAG,MAAM,GAAG,IAAI,GAAG,UAAU,CAAC;AAEhD,mGAAmG;AACnG,MAAM,MAAM,kBAAkB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAa7G,wDAAwD;AACxD,wBAAgB,UAAU,CAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,SAAI,GAAI,MAAM,EAAE,CAOzF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,SAAS;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EACpG,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,GAClF;IAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAAC,UAAU,EAAE,kBAAkB,EAAE,CAAA;CAAE,CAoBrD;AAED,oGAAoG;AACpG,wBAAgB,0BAA0B,CAAE,UAAU,EAAE,SAAS,kBAAkB,EAAE,GAAI,MAAM,CAM9F"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { nodeId, parseNodeId } from './graph.js';
|
|
2
|
+
import { NODE_TYPE_BY_ABBREV, NODE_TYPES } from './nodes.js';
|
|
3
|
+
/**
|
|
4
|
+
* Edge endpoints are node ids (`<subdomain>_<abbrev>_<slug>`, as `proposedNodeId` derives them). A design agent can
|
|
5
|
+
* instead write a reference, `<subdomain>:<type>:<slug>`, which names the same node but matches no id, so the edge
|
|
6
|
+
* dangles. These resolve such a reference to the id it names, and judge an endpoint at the door.
|
|
7
|
+
*/
|
|
8
|
+
const typeOf = (segment) => NODE_TYPES.includes(segment) ? segment : NODE_TYPE_BY_ABBREV[segment];
|
|
9
|
+
/** The id a `<subdomain>:<type>:<slug>` reference names, when it is one of `known`; otherwise undefined. */
|
|
10
|
+
export function canonicalEndpoint(endpoint, known) {
|
|
11
|
+
const segments = endpoint.split(':');
|
|
12
|
+
if (segments.length !== 3)
|
|
13
|
+
return undefined;
|
|
14
|
+
const [subdomain, segment, slug] = segments;
|
|
15
|
+
const type = typeOf(segment.trim().toLowerCase());
|
|
16
|
+
if (type === undefined || subdomain.trim() === '' || slug.trim() === '')
|
|
17
|
+
return undefined;
|
|
18
|
+
const id = nodeId(subdomain, type, slug);
|
|
19
|
+
return known.has(id) ? id : undefined;
|
|
20
|
+
}
|
|
21
|
+
const distance = (a, b) => {
|
|
22
|
+
let previous = Array.from({ length: b.length + 1 }, (_value, index) => index);
|
|
23
|
+
for (let i = 1; i <= a.length; i++) {
|
|
24
|
+
const row = [i];
|
|
25
|
+
for (let j = 1; j <= b.length; j++)
|
|
26
|
+
row[j] = Math.min(previous[j] + 1, row[j - 1] + 1, previous[j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1));
|
|
27
|
+
previous = row;
|
|
28
|
+
}
|
|
29
|
+
return previous[b.length];
|
|
30
|
+
};
|
|
31
|
+
/** Up to `count` of `ids`, nearest `endpoint` first. */
|
|
32
|
+
export function closestIds(endpoint, ids, count = 3) {
|
|
33
|
+
const probe = endpoint.toLowerCase().replace(/:/g, '_');
|
|
34
|
+
return [...ids]
|
|
35
|
+
.map(id => ({ id, at: distance(probe, id) }))
|
|
36
|
+
.sort((a, b) => a.at - b.at || a.id.localeCompare(b.id))
|
|
37
|
+
.slice(0, count)
|
|
38
|
+
.map(entry => entry.id);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Judges each edge's endpoints (from, to and handlers) at the door. An endpoint stands when it is a proposed id or a
|
|
42
|
+
* node of `graph`; a reference to one is rewritten to its id. With no graph, an endpoint shaped as a node id stands as a
|
|
43
|
+
* reference to code, as before. Anything else is unresolved, with the proposed ids closest to it. A non-string endpoint
|
|
44
|
+
* is left to the design's own validation.
|
|
45
|
+
*/
|
|
46
|
+
export function resolveEdgeEndpoints(edges, { proposed, graph }) {
|
|
47
|
+
const known = graph === undefined ? proposed : new Set([...proposed, ...graph]);
|
|
48
|
+
const unresolved = [];
|
|
49
|
+
const resolved = edges.map((edge, index) => {
|
|
50
|
+
const judge = (endpoint, field) => {
|
|
51
|
+
if (typeof endpoint !== 'string' || known.has(endpoint))
|
|
52
|
+
return endpoint;
|
|
53
|
+
const id = canonicalEndpoint(endpoint, known);
|
|
54
|
+
if (id !== undefined)
|
|
55
|
+
return id;
|
|
56
|
+
if (graph === undefined && parseNodeId(endpoint) !== undefined)
|
|
57
|
+
return endpoint;
|
|
58
|
+
unresolved.push({ edge: index, field, endpoint, closest: closestIds(endpoint, proposed) });
|
|
59
|
+
return endpoint;
|
|
60
|
+
};
|
|
61
|
+
return {
|
|
62
|
+
...edge,
|
|
63
|
+
...('from' in edge ? { from: judge(edge.from, 'from') } : {}),
|
|
64
|
+
...('to' in edge ? { to: judge(edge.to, 'to') } : {}),
|
|
65
|
+
...(Array.isArray(edge.handlers) ? { handlers: edge.handlers.map(handler => judge(handler, 'handlers')) } : {})
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
return { edges: resolved, unresolved };
|
|
69
|
+
}
|
|
70
|
+
/** The refusal message for unresolved endpoints, naming each and the proposed ids closest to it. */
|
|
71
|
+
export function unresolvedEndpointsMessage(unresolved) {
|
|
72
|
+
const each = unresolved.map(({ edge, field, endpoint, closest }) => `edges[${edge}].${field} ${JSON.stringify(endpoint)}`
|
|
73
|
+
+ (closest.length > 0 ? ` (closest proposed: ${closest.join(', ')})` : ''));
|
|
74
|
+
return `refusing the whole propose batch: ${each.join('; ')} names no node. An edge endpoint is a node id, `
|
|
75
|
+
+ '`<subdomain>_<abbrev>_<slug>` as the propose call returns it in nodeIds, of a node this design proposes or of the code graph.';
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=edge-endpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-endpoints.js","sourceRoot":"","sources":["../../src/edge-endpoints.ts"],"names":[],"mappings":"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"}
|
package/build/esm/edges.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DesignStatus, Origin } from './nodes.js';
|
|
2
|
-
export type EdgeKind = 'handled-by' | 'produces' | 'emits' | 'triggers' | 'issues' | 'projected-to' | 'reads-from' | 'transactionally-writes-to' | 'writes-to' | 'calls' | 'uses-cache' | 'causes' | 'invokes' | 'subscribes-to';
|
|
1
|
+
import type { DesignStatus, Origin } from './nodes.js';
|
|
2
|
+
export type EdgeKind = 'handled-by' | 'produces' | 'emits' | 'triggers' | 'issues' | 'projected-to' | 'reads-from' | 'transactionally-writes-to' | 'writes-to' | 'calls' | 'uses-cache' | 'causes' | 'invokes' | 'subscribes-to' | 'guarded-by';
|
|
3
3
|
export declare const EDGE_KINDS: readonly EdgeKind[];
|
|
4
4
|
export type EdgeKindSource = 'chosen' | 'guessed';
|
|
5
5
|
export declare const EDGE_KIND_SOURCES: readonly EdgeKindSource[];
|
package/build/esm/edges.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edges.d.ts","sourceRoot":"","sources":["../../src/edges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"edges.d.ts","sourceRoot":"","sources":["../../src/edges.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,UAAU,GACV,OAAO,GACP,UAAU,GACV,QAAQ,GACR,cAAc,GACd,YAAY,GACZ,2BAA2B,GAC3B,WAAW,GACX,OAAO,GACP,YAAY,GACZ,QAAQ,GACR,SAAS,GACT,eAAe,GACf,YAAY,CAAC;AAEjB,eAAO,MAAM,UAAU,EAAE,SAAS,QAAQ,EAgBhC,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElD,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EAAqC,CAAC;AAE7F,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC"}
|
package/build/esm/edges.js
CHANGED
package/build/esm/edges.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edges.js","sourceRoot":"","sources":["../../src/edges.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"edges.js","sourceRoot":"","sources":["../../src/edges.ts"],"names":[],"mappings":"AAmBA,MAAM,CAAC,MAAM,UAAU,GAAwB;IAC7C,YAAY;IACZ,UAAU;IACV,OAAO;IACP,UAAU;IACV,QAAQ;IACR,cAAc;IACd,YAAY;IACZ,2BAA2B;IAC3B,WAAW;IACX,OAAO;IACP,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,eAAe;IACf,YAAY;CACJ,CAAC;AAIX,MAAM,CAAC,MAAM,iBAAiB,GAA8B,CAAE,QAAQ,EAAE,SAAS,CAAW,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { DesignFile } from './design.js';
|
|
2
|
+
import type { MapFile } from './map-structure.js';
|
|
3
|
+
/**
|
|
4
|
+
* The effective design: the design as its consumers read it, with every modify and removal that targets one of the
|
|
5
|
+
* design's own proposals folded into the proposals. A modify of a proposed node edits the proposal, and when it sets the
|
|
6
|
+
* label or subdomain the proposal's derived id moves with it, so every edge, handler scope, comment anchor and map
|
|
7
|
+
* reference to the old id follows. A removal of a proposed node or edge drops it, with every proposed edge touching a
|
|
8
|
+
* dropped node. An edge endpoint written as a `<subdomain>:<type>:<slug>` reference to a proposal is read as that
|
|
9
|
+
* proposal's id; an endpoint naming nothing stays as it is. Modifies and removals of code (graph) elements stay as they are. The session's op history is never
|
|
10
|
+
* folded: this is an export, for the bundle's design.json and map.json and for blueprint.md.
|
|
11
|
+
*/
|
|
12
|
+
export type EffectiveDesign = {
|
|
13
|
+
design: DesignFile;
|
|
14
|
+
map: MapFile;
|
|
15
|
+
/** Each proposed node id a modify moved, to the id it ends at. */
|
|
16
|
+
renamed: ReadonlyMap<string, string>;
|
|
17
|
+
/** Each proposed node id a removal dropped, as it read when dropped. */
|
|
18
|
+
dropped: ReadonlySet<string>;
|
|
19
|
+
};
|
|
20
|
+
export declare function effectiveDesignOf(design: DesignFile, map: MapFile): EffectiveDesign;
|
|
21
|
+
//# sourceMappingURL=effective-design.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effective-design.d.ts","sourceRoot":"","sources":["../../src/effective-design.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,UAAU,EAMX,MAAM,aAAa,CAAC;AAIrB,OAAO,KAAK,EAAgB,OAAO,EAAkB,MAAM,oBAAoB,CAAC;AAEhF;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;IACb,kEAAkE;IAClE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,wEAAwE;IACxE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC9B,CAAC;AAuDF,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,GAAI,eAAe,CAqGrF"}
|