@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,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.forkScenarioKey = exports.FORK_SCENARIO_KEY_PREFIX = void 0;
|
|
4
|
+
exports.joinForkScenarios = joinForkScenarios;
|
|
5
|
+
/** Every virtual proposal's key starts with it; no entry id can, since a map id never holds a colon. */
|
|
6
|
+
exports.FORK_SCENARIO_KEY_PREFIX = 'derived:';
|
|
7
|
+
const forkScenarioKey = (forkId, optionId, walk) => `${exports.FORK_SCENARIO_KEY_PREFIX}${forkId}/${optionId}/${walk}`;
|
|
8
|
+
exports.forkScenarioKey = forkScenarioKey;
|
|
9
|
+
const isStructural = (walk) => walk.kind === 'structural';
|
|
10
|
+
const hasGherkin = (walk) => walk.given !== undefined && walk.when !== undefined && walk.then !== undefined;
|
|
11
|
+
const stepsOf = (text) => text === undefined ? [] : [{ text }];
|
|
12
|
+
// The walk's fields a basis records; `kind` absent reads as behavioral, so spelling it out changes nothing.
|
|
13
|
+
const sameWalk = (walk, basis) => walk.text === basis.text
|
|
14
|
+
&& isStructural(walk) === isStructural(basis)
|
|
15
|
+
&& walk.given === basis.given
|
|
16
|
+
&& walk.when === basis.when
|
|
17
|
+
&& walk.then === basis.then;
|
|
18
|
+
function reviewReasonOf(derivedFrom, forks) {
|
|
19
|
+
const fork = forks.get(derivedFrom.forkId);
|
|
20
|
+
if (fork === undefined)
|
|
21
|
+
return 'fork-gone';
|
|
22
|
+
if (fork.status.kind === 'open')
|
|
23
|
+
return 'reopened';
|
|
24
|
+
if (fork.status.kind === 'moot')
|
|
25
|
+
return 'moot';
|
|
26
|
+
if (fork.status.option !== derivedFrom.optionId)
|
|
27
|
+
return 'option-changed';
|
|
28
|
+
// A derivation from before ESAS-296 names no walk; it is judged on its fork and option alone.
|
|
29
|
+
if (derivedFrom.walk === undefined)
|
|
30
|
+
return null;
|
|
31
|
+
const option = fork.card?.options.find(candidate => candidate.id === derivedFrom.optionId);
|
|
32
|
+
const walk = option?.walks.find(candidate => candidate.scenario === derivedFrom.walk);
|
|
33
|
+
if (walk === undefined)
|
|
34
|
+
return 'walk-gone';
|
|
35
|
+
if (derivedFrom.basis !== undefined && !sameWalk(walk, derivedFrom.basis))
|
|
36
|
+
return 'walk-changed';
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Every decided, testable fork proposes one scenario per behavioural walk of its chosen option, in
|
|
41
|
+
* map order, unless a stored scenario already names that (fork, option, walk) in any status; and
|
|
42
|
+
* every stored scenario with derivedFrom is judged against its fork, in map order.
|
|
43
|
+
*/
|
|
44
|
+
function joinForkScenarios(map) {
|
|
45
|
+
const stored = new Set(map.scenarios.flatMap(({ derivedFrom }) => derivedFrom?.walk === undefined
|
|
46
|
+
? []
|
|
47
|
+
: [(0, exports.forkScenarioKey)(derivedFrom.forkId, derivedFrom.optionId, derivedFrom.walk)]));
|
|
48
|
+
const proposals = [];
|
|
49
|
+
for (const fork of map.forks) {
|
|
50
|
+
const status = fork.status;
|
|
51
|
+
if (status.kind !== 'decided' || fork.testable === false)
|
|
52
|
+
continue;
|
|
53
|
+
const chosenWalks = (fork.card?.options ?? [])
|
|
54
|
+
.filter(option => option.id === status.option)
|
|
55
|
+
.flatMap(option => option.walks);
|
|
56
|
+
for (const walk of chosenWalks) {
|
|
57
|
+
const key = (0, exports.forkScenarioKey)(fork.id, status.option, walk.scenario);
|
|
58
|
+
if (isStructural(walk) || stored.has(key))
|
|
59
|
+
continue;
|
|
60
|
+
const ready = hasGherkin(walk);
|
|
61
|
+
proposals.push({
|
|
62
|
+
key,
|
|
63
|
+
forkId: fork.id,
|
|
64
|
+
optionId: status.option,
|
|
65
|
+
walk: walk.scenario,
|
|
66
|
+
source: status.source,
|
|
67
|
+
state: ready ? 'ready' : 'needs-gherkin',
|
|
68
|
+
title: walk.scenario,
|
|
69
|
+
text: walk.text,
|
|
70
|
+
anchors: [fork.anchor ?? fork.id],
|
|
71
|
+
given: ready ? stepsOf(walk.given) : [],
|
|
72
|
+
when: ready ? stepsOf(walk.when) : [],
|
|
73
|
+
then: ready ? stepsOf(walk.then) : []
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const forks = new Map(map.forks.map(fork => [fork.id, fork]));
|
|
78
|
+
const derived = map.scenarios.flatMap(({ id, derivedFrom }) => derivedFrom === undefined
|
|
79
|
+
? []
|
|
80
|
+
: [{ scenarioId: id, reviewReason: reviewReasonOf(derivedFrom, forks) }]);
|
|
81
|
+
return { proposals, derived };
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=fork-scenarios.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fork-scenarios.js","sourceRoot":"","sources":["../../src/fork-scenarios.ts"],"names":[],"mappings":"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"}
|
package/build/cjs/graph.d.ts
CHANGED
|
@@ -1,15 +1,40 @@
|
|
|
1
|
-
import { BlueprintEdge } from './edges.js';
|
|
2
|
-
import { BlueprintNode, NodeType } from './nodes.js';
|
|
1
|
+
import type { BlueprintEdge } from './edges.js';
|
|
2
|
+
import { type BlueprintNode, type NodeType } from './nodes.js';
|
|
3
3
|
export type SchemaVersion = 1;
|
|
4
|
+
/**
|
|
5
|
+
* The type words a repository's code names end in, by node type, as the repository declares them
|
|
6
|
+
* (`{ "aggregate": "Aggregate" }`). They are the repository's convention, never Blueprint's: its
|
|
7
|
+
* extractor writes them on the graph, and Blueprint tolerates exactly those. A label carries no type
|
|
8
|
+
* word by guarantee, so a node proposed as `Greeter` is realized by the code named `GreeterAggregate`
|
|
9
|
+
* ({@link codeNodeId}).
|
|
10
|
+
*/
|
|
11
|
+
export type TypeWords = Partial<Record<NodeType, string>>;
|
|
4
12
|
export type BlueprintGraph = {
|
|
5
13
|
schemaVersion: SchemaVersion;
|
|
6
14
|
subdomains: string[];
|
|
7
15
|
nodes: BlueprintNode[];
|
|
8
16
|
edges: BlueprintEdge[];
|
|
17
|
+
typeWords?: TypeWords;
|
|
9
18
|
};
|
|
10
19
|
export declare function emptyGraph(): BlueprintGraph;
|
|
11
20
|
export declare function slugify(label: string): string;
|
|
12
21
|
export declare function nodeId(subdomain: string, type: NodeType, label: string): string;
|
|
22
|
+
/** The type words a graph carries, each a string with a letter or digit; anything else in the field is ignored. */
|
|
23
|
+
export declare function typeWordsOf(graph: Pick<BlueprintGraph, 'typeWords'>): TypeWords | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* The name the code of a node labelled `label` carries when its type's word is `word`: the label
|
|
26
|
+
* without the word it may end in, in PascalCase, then the word once. `Greeter` and `Greeter
|
|
27
|
+
* Aggregate` are both `GreeterAggregate`. The label ends in the word when its last letters and
|
|
28
|
+
* digits spell it, case and anything between them aside (`Orders Read Model` ends in `Readmodel`);
|
|
29
|
+
* a label that is nothing but the word keeps it.
|
|
30
|
+
*/
|
|
31
|
+
export declare function codeName(label: string, word: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* The id the code of a node proposed as (`subdomain`, `type`, `label`) extracts to when the
|
|
34
|
+
* repository declares a type word for `type`: the id of its {@link codeName}. `undefined` when the
|
|
35
|
+
* repository declares none for the type, so a proposal is realized by its own id alone.
|
|
36
|
+
*/
|
|
37
|
+
export declare function codeNodeId(subdomain: string, type: NodeType, label: string, typeWords: TypeWords | undefined): string | undefined;
|
|
13
38
|
export type ParsedNodeId = {
|
|
14
39
|
subdomain: string;
|
|
15
40
|
type: NodeType;
|
package/build/cjs/graph.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,KAAK,aAAa,EAAoC,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjG,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC;AAE9B;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,wBAAgB,UAAU,IAAI,cAAc,CAE3C;AAED,wBAAgB,OAAO,CAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAO/C;AAED,wBAAgB,MAAM,CAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAEjF;AAED,mHAAmH;AACnH,wBAAgB,WAAW,CAAE,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,GAAI,SAAS,GAAG,SAAS,CAM7F;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAI,MAAM,CAQ9D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GAAG,SAAS,GAC/B,MAAM,GAAG,SAAS,CAGpB;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,WAAW,CAAE,EAAE,EAAE,MAAM,GAAI,YAAY,GAAG,SAAS,CAOlE"}
|
package/build/cjs/graph.js
CHANGED
|
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.emptyGraph = emptyGraph;
|
|
4
4
|
exports.slugify = slugify;
|
|
5
5
|
exports.nodeId = nodeId;
|
|
6
|
+
exports.typeWordsOf = typeWordsOf;
|
|
7
|
+
exports.codeName = codeName;
|
|
8
|
+
exports.codeNodeId = codeNodeId;
|
|
6
9
|
exports.parseNodeId = parseNodeId;
|
|
7
10
|
const nodes_js_1 = require("./nodes.js");
|
|
8
11
|
function emptyGraph() {
|
|
@@ -19,6 +22,39 @@ function slugify(label) {
|
|
|
19
22
|
function nodeId(subdomain, type, label) {
|
|
20
23
|
return `${slugify(subdomain)}_${nodes_js_1.NODE_ABBREV[type]}_${slugify(label)}`;
|
|
21
24
|
}
|
|
25
|
+
/** The type words a graph carries, each a string with a letter or digit; anything else in the field is ignored. */
|
|
26
|
+
function typeWordsOf(graph) {
|
|
27
|
+
const declared = graph.typeWords;
|
|
28
|
+
if (declared === null || typeof declared !== 'object' || Array.isArray(declared))
|
|
29
|
+
return undefined;
|
|
30
|
+
const words = Object.entries(declared).filter((entry) => Object.prototype.hasOwnProperty.call(nodes_js_1.NODE_ABBREV, entry[0]) && typeof entry[1] === 'string' && /[a-zA-Z0-9]/.test(entry[1]));
|
|
31
|
+
return words.length > 0 ? Object.fromEntries(words) : undefined;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The name the code of a node labelled `label` carries when its type's word is `word`: the label
|
|
35
|
+
* without the word it may end in, in PascalCase, then the word once. `Greeter` and `Greeter
|
|
36
|
+
* Aggregate` are both `GreeterAggregate`. The label ends in the word when its last letters and
|
|
37
|
+
* digits spell it, case and anything between them aside (`Orders Read Model` ends in `Readmodel`);
|
|
38
|
+
* a label that is nothing but the word keeps it.
|
|
39
|
+
*/
|
|
40
|
+
function codeName(label, word) {
|
|
41
|
+
const letters = [...word.replace(/[^a-zA-Z0-9]/g, '')];
|
|
42
|
+
const tail = new RegExp(`[^a-zA-Z0-9]*${letters.join('[^a-zA-Z0-9]*')}$`, 'i');
|
|
43
|
+
const stripped = label.replace(tail, '');
|
|
44
|
+
const bare = slugify(stripped) === '' ? label : stripped;
|
|
45
|
+
const pascal = slugify(bare).split('-').filter(Boolean)
|
|
46
|
+
.map(segment => segment.charAt(0).toUpperCase() + segment.slice(1)).join('');
|
|
47
|
+
return `${pascal}${word}`;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The id the code of a node proposed as (`subdomain`, `type`, `label`) extracts to when the
|
|
51
|
+
* repository declares a type word for `type`: the id of its {@link codeName}. `undefined` when the
|
|
52
|
+
* repository declares none for the type, so a proposal is realized by its own id alone.
|
|
53
|
+
*/
|
|
54
|
+
function codeNodeId(subdomain, type, label, typeWords) {
|
|
55
|
+
const word = typeWords?.[type];
|
|
56
|
+
return word === undefined ? undefined : nodeId(subdomain, type, codeName(label, word));
|
|
57
|
+
}
|
|
22
58
|
function parseNodeId(id) {
|
|
23
59
|
const segments = id.split('_');
|
|
24
60
|
if (segments.length !== 3)
|
package/build/cjs/graph.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { HandlerScopeIssue } from './diagnostics.js';
|
|
2
|
-
import { EdgeKind } from './edges.js';
|
|
3
|
-
import { BlueprintNode, NodeType } from './nodes.js';
|
|
1
|
+
import type { HandlerScopeIssue } from './diagnostics.js';
|
|
2
|
+
import type { EdgeKind } from './edges.js';
|
|
3
|
+
import type { BlueprintNode, NodeType } from './nodes.js';
|
|
4
4
|
export type HandlerAttachment = {
|
|
5
5
|
discriminator: NodeType;
|
|
6
6
|
via: EdgeKind;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler-scope.d.ts","sourceRoot":"","sources":["../../src/handler-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"handler-scope.d.ts","sourceRoot":"","sources":["../../src/handler-scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,QAAQ,CAAC;IACxB,GAAG,EAAE,QAAQ,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAKtF,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,iBAAiB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAClC,CAAC;AAKF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC9B,KAAK,EAAE,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,GAC5D,iBAAiB,CAenB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACvC,KAAK,EAAE,iBAAiB,GACvB,kBAAkB,CA4BpB"}
|
package/build/cjs/index.d.ts
CHANGED
|
@@ -9,19 +9,28 @@ export * from './entry-points.js';
|
|
|
9
9
|
export * from './diagnostics.js';
|
|
10
10
|
export * from './overrides.js';
|
|
11
11
|
export * from './find-orphan-nodes.js';
|
|
12
|
+
export * from './unproduced-events.js';
|
|
12
13
|
export * from './apply-overrides.js';
|
|
13
14
|
export * from './design.js';
|
|
14
15
|
export * from './ops.js';
|
|
15
16
|
export * from './op-chain.js';
|
|
16
17
|
export * from './validate-design.js';
|
|
17
18
|
export * from './apply-design.js';
|
|
19
|
+
export * from './effective-design.js';
|
|
20
|
+
export * from './edge-endpoints.js';
|
|
18
21
|
export * from './reality-check.js';
|
|
19
22
|
export * from './convergence.js';
|
|
20
23
|
export * from './replication.js';
|
|
21
24
|
export * from './session.js';
|
|
25
|
+
export * from './session-phase.js';
|
|
22
26
|
export * from './organisation.js';
|
|
23
27
|
export * from './retention.js';
|
|
24
28
|
export * from './map-vocabulary.js';
|
|
25
29
|
export * from './map-structure.js';
|
|
26
30
|
export * from './map-links.js';
|
|
31
|
+
export * from './coverage-links.js';
|
|
32
|
+
export * from './card-channel.js';
|
|
33
|
+
export * from './fork-scenarios.js';
|
|
34
|
+
export * from './invariants.js';
|
|
35
|
+
export * from './spec.js';
|
|
27
36
|
//# sourceMappingURL=index.d.ts.map
|
package/build/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC"}
|
package/build/cjs/index.js
CHANGED
|
@@ -25,19 +25,28 @@ __exportStar(require("./entry-points.js"), exports);
|
|
|
25
25
|
__exportStar(require("./diagnostics.js"), exports);
|
|
26
26
|
__exportStar(require("./overrides.js"), exports);
|
|
27
27
|
__exportStar(require("./find-orphan-nodes.js"), exports);
|
|
28
|
+
__exportStar(require("./unproduced-events.js"), exports);
|
|
28
29
|
__exportStar(require("./apply-overrides.js"), exports);
|
|
29
30
|
__exportStar(require("./design.js"), exports);
|
|
30
31
|
__exportStar(require("./ops.js"), exports);
|
|
31
32
|
__exportStar(require("./op-chain.js"), exports);
|
|
32
33
|
__exportStar(require("./validate-design.js"), exports);
|
|
33
34
|
__exportStar(require("./apply-design.js"), exports);
|
|
35
|
+
__exportStar(require("./effective-design.js"), exports);
|
|
36
|
+
__exportStar(require("./edge-endpoints.js"), exports);
|
|
34
37
|
__exportStar(require("./reality-check.js"), exports);
|
|
35
38
|
__exportStar(require("./convergence.js"), exports);
|
|
36
39
|
__exportStar(require("./replication.js"), exports);
|
|
37
40
|
__exportStar(require("./session.js"), exports);
|
|
41
|
+
__exportStar(require("./session-phase.js"), exports);
|
|
38
42
|
__exportStar(require("./organisation.js"), exports);
|
|
39
43
|
__exportStar(require("./retention.js"), exports);
|
|
40
44
|
__exportStar(require("./map-vocabulary.js"), exports);
|
|
41
45
|
__exportStar(require("./map-structure.js"), exports);
|
|
42
46
|
__exportStar(require("./map-links.js"), exports);
|
|
47
|
+
__exportStar(require("./coverage-links.js"), exports);
|
|
48
|
+
__exportStar(require("./card-channel.js"), exports);
|
|
49
|
+
__exportStar(require("./fork-scenarios.js"), exports);
|
|
50
|
+
__exportStar(require("./invariants.js"), exports);
|
|
51
|
+
__exportStar(require("./spec.js"), exports);
|
|
43
52
|
//# sourceMappingURL=index.js.map
|
package/build/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,6CAA2B;AAC3B,6CAA2B;AAC3B,gDAA8B;AAC9B,qDAAmC;AACnC,sDAAoC;AACpC,oDAAkC;AAClC,oDAAkC;AAClC,mDAAiC;AACjC,iDAA+B;AAC/B,yDAAuC;AACvC,uDAAqC;AACrC,8CAA4B;AAC5B,2CAAyB;AACzB,gDAA8B;AAC9B,uDAAqC;AACrC,oDAAkC;AAClC,qDAAmC;AACnC,mDAAiC;AACjC,mDAAiC;AACjC,+CAA6B;AAC7B,oDAAkC;AAClC,iDAA+B;AAC/B,sDAAoC;AACpC,qDAAmC;AACnC,iDAA+B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,6CAA2B;AAC3B,6CAA2B;AAC3B,gDAA8B;AAC9B,qDAAmC;AACnC,sDAAoC;AACpC,oDAAkC;AAClC,oDAAkC;AAClC,mDAAiC;AACjC,iDAA+B;AAC/B,yDAAuC;AACvC,yDAAuC;AACvC,uDAAqC;AACrC,8CAA4B;AAC5B,2CAAyB;AACzB,gDAA8B;AAC9B,uDAAqC;AACrC,oDAAkC;AAClC,wDAAsC;AACtC,sDAAoC;AACpC,qDAAmC;AACnC,mDAAiC;AACjC,mDAAiC;AACjC,+CAA6B;AAC7B,qDAAmC;AACnC,oDAAkC;AAClC,iDAA+B;AAC/B,sDAAoC;AACpC,qDAAmC;AACnC,iDAA+B;AAC/B,sDAAoC;AACpC,oDAAkC;AAClC,sDAAoC;AACpC,kDAAgC;AAChC,4CAA0B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { CoverageReport } from './coverage-links.js';
|
|
2
|
+
import type { BlueprintEdge } from './edges.js';
|
|
3
|
+
import type { MapEntryId } from './map-structure.js';
|
|
4
|
+
import type { BlueprintNode } from './nodes.js';
|
|
5
|
+
/**
|
|
6
|
+
* ESAS-305: what the board says about one invariant, judged on read. `unproven` when no scenario
|
|
7
|
+
* covers it; `indistinct` when it is covered but its rejection cannot be told apart from another
|
|
8
|
+
* rule's on a command it guards: it has no error code, or one other invariant guarding one of the
|
|
9
|
+
* same commands carries every one of its codes.
|
|
10
|
+
*/
|
|
11
|
+
export type InvariantJudgement = {
|
|
12
|
+
coveredBy: MapEntryId[];
|
|
13
|
+
unproven: boolean;
|
|
14
|
+
indistinct: boolean;
|
|
15
|
+
};
|
|
16
|
+
export type InvariantGraph = {
|
|
17
|
+
nodes: ReadonlyArray<Pick<BlueprintNode, 'id' | 'type' | 'status' | 'errorCodes'>>;
|
|
18
|
+
edges: ReadonlyArray<Pick<BlueprintEdge, 'from' | 'to' | 'kind' | 'status'>>;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Judges every invariant of the merged graph against the coverage join (joinCoverageLinks). Pure:
|
|
22
|
+
* it reads its inputs and returns a fresh record keyed by invariant id; it never refuses a write
|
|
23
|
+
* (ADR-106). A removed invariant or a removed guarded-by edge takes no part.
|
|
24
|
+
*/
|
|
25
|
+
export declare function judgeInvariants(merged: InvariantGraph, coverage: Pick<CoverageReport, 'coveredBy'>): Record<string, InvariantJudgement>;
|
|
26
|
+
//# sourceMappingURL=invariants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invariants.d.ts","sourceRoot":"","sources":["../../src/invariants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC;IACnF,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;CAC9E,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,GAC1C,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CA6BpC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.judgeInvariants = judgeInvariants;
|
|
4
|
+
/**
|
|
5
|
+
* Judges every invariant of the merged graph against the coverage join (joinCoverageLinks). Pure:
|
|
6
|
+
* it reads its inputs and returns a fresh record keyed by invariant id; it never refuses a write
|
|
7
|
+
* (ADR-106). A removed invariant or a removed guarded-by edge takes no part.
|
|
8
|
+
*/
|
|
9
|
+
function judgeInvariants(merged, coverage) {
|
|
10
|
+
const invariants = merged.nodes.filter(node => node.type === 'invariant' && node.status !== 'removed');
|
|
11
|
+
const codesOf = new Map(invariants.map(node => [node.id, new Set(node.errorCodes ?? [])]));
|
|
12
|
+
const guardedBy = new Map();
|
|
13
|
+
for (const edge of merged.edges) {
|
|
14
|
+
if (edge.kind !== 'guarded-by' || edge.status === 'removed' || !codesOf.has(edge.to))
|
|
15
|
+
continue;
|
|
16
|
+
guardedBy.set(edge.from, (guardedBy.get(edge.from) ?? new Set()).add(edge.to));
|
|
17
|
+
}
|
|
18
|
+
const neighboursOf = (id) => {
|
|
19
|
+
const neighbours = new Set();
|
|
20
|
+
for (const guards of guardedBy.values()) {
|
|
21
|
+
if (!guards.has(id))
|
|
22
|
+
continue;
|
|
23
|
+
for (const other of guards)
|
|
24
|
+
if (other !== id)
|
|
25
|
+
neighbours.add(other);
|
|
26
|
+
}
|
|
27
|
+
return neighbours;
|
|
28
|
+
};
|
|
29
|
+
const judged = {};
|
|
30
|
+
for (const { id } of invariants) {
|
|
31
|
+
const coveredBy = [...(coverage.coveredBy[id] ?? [])];
|
|
32
|
+
const unproven = coveredBy.length === 0;
|
|
33
|
+
const codes = [...codesOf.get(id)];
|
|
34
|
+
const indistinct = !unproven && (codes.length === 0 || [...neighboursOf(id)].some(other => codes.every(code => codesOf.get(other).has(code))));
|
|
35
|
+
judged[id] = { coveredBy, unproven, indistinct };
|
|
36
|
+
}
|
|
37
|
+
return judged;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=invariants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invariants.js","sourceRoot":"","sources":["../../src/invariants.ts"],"names":[],"mappings":";;AA2BA,0CAgCC;AArCD;;;;GAIG;AACH,SAAgB,eAAe,CAC7B,MAAsB,EACtB,QAA2C;IAE3C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAE,CAAC;IACzG,MAAM,OAAO,GAAG,IAAI,GAAG,CAAE,UAAU,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,CAAC,CAAE,IAAI,CAAC,EAAE,EAAE,IAAI,GAAG,CAAE,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAE,CAAE,CAAC,CAAC;IAEjG,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;IACjD,KAAM,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,IAAK,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,CAAE;YAAE,SAAS;QAClG,SAAS,CAAC,GAAG,CAAE,IAAI,CAAC,IAAI,EAAE,CAAE,SAAS,CAAC,GAAG,CAAE,IAAI,CAAC,IAAI,CAAE,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,CAAE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,YAAY,GAAG,CAAE,EAAU,EAAgB,EAAE;QACjD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,KAAM,MAAM,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,IAAK,CAAC,MAAM,CAAC,GAAG,CAAE,EAAE,CAAE;gBAAE,SAAS;YACjC,KAAM,MAAM,KAAK,IAAI,MAAM;gBAAG,IAAK,KAAK,KAAK,EAAE;oBAAG,UAAU,CAAC,GAAG,CAAE,KAAK,CAAE,CAAC;QAC5E,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,MAAM,GAAuC,EAAE,CAAC;IACtD,KAAM,MAAM,EAAE,EAAE,EAAE,IAAI,UAAU,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,CAAE,GAAG,CAAE,QAAQ,CAAC,SAAS,CAAE,EAAE,CAAE,IAAI,EAAE,CAAC,CAAE,CAAC;QAC3D,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,CAAE,GAAG,OAAO,CAAC,GAAG,CAAE,EAAE,CAAiB,CAAE,CAAC;QACtD,MAAM,UAAU,GAAG,CAAC,QAAQ,IAAI,CAAE,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAE,GAAG,YAAY,CAAE,EAAE,CAAE,CAAE,CAAC,IAAI,CAAE,KAAK,CAAC,EAAE,CAC9F,KAAK,CAAC,KAAK,CAAE,IAAI,CAAC,EAAE,CAAG,OAAO,CAAC,GAAG,CAAE,KAAK,CAAmB,CAAC,GAAG,CAAE,IAAI,CAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,CAAE,EAAE,CAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/build/cjs/map-links.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export type MapLinkReport = {
|
|
|
7
7
|
orphanedBy: Record<MapEntryId, string[]>;
|
|
8
8
|
dangling: MapLink[];
|
|
9
9
|
removed: MapLink[];
|
|
10
|
+
unserved: MapEntryId[];
|
|
10
11
|
};
|
|
11
12
|
export declare function joinMapLinks(merged: BlueprintGraph, design: DesignFile, map: MapFile): MapLinkReport;
|
|
12
13
|
//# sourceMappingURL=map-links.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-links.d.ts","sourceRoot":"","sources":["../../src/map-links.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"map-links.d.ts","sourceRoot":"","sources":["../../src/map-links.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB,CAAC;AAgBF,wBAAgB,YAAY,CAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,GAAI,aAAa,CAwDtG"}
|
package/build/cjs/map-links.js
CHANGED
|
@@ -54,6 +54,19 @@ function joinMapLinks(merged, design, map) {
|
|
|
54
54
|
.filter(link => mapNodes.has(link.deliverableId) && removedIds.has(link.esId))
|
|
55
55
|
.map(link => ({ esId: link.esId, deliverableId: link.deliverableId }))
|
|
56
56
|
.sort((a, b) => byString(a.esId, b.esId) || byString(a.deliverableId, b.deliverableId));
|
|
57
|
-
|
|
57
|
+
// ESAS-330 D3: a link serves its deliverable when it names a live graph node. A1: under a graph
|
|
58
|
+
// that knows no node (the Design done check joins against emptyGraph()) liveness cannot be judged,
|
|
59
|
+
// so any link serves; struck deliverables are excluded.
|
|
60
|
+
const graphKnown = merged.nodes.length > 0;
|
|
61
|
+
const served = new Set(map.links
|
|
62
|
+
.filter(link => !graphKnown || (nodeIds.has(link.esId) && !removedIds.has(link.esId)))
|
|
63
|
+
.map(link => link.deliverableId));
|
|
64
|
+
const unserved = [];
|
|
65
|
+
for (const node of [...map.nodes].sort((a, b) => byString(a.id, b.id))) {
|
|
66
|
+
if (node.level !== 'deliverable' || node.struck !== undefined || served.has(node.id))
|
|
67
|
+
continue;
|
|
68
|
+
unserved.push(node.id);
|
|
69
|
+
}
|
|
70
|
+
return { unlinked, orphaned, orphanedBy, dangling, removed, unserved };
|
|
58
71
|
}
|
|
59
72
|
//# sourceMappingURL=map-links.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-links.js","sourceRoot":"","sources":["../../src/map-links.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"map-links.js","sourceRoot":"","sources":["../../src/map-links.ts"],"names":[],"mappings":";;AA4BA,oCAwDC;AApFD,uDAAmD;AAcnD,SAAS,QAAQ,CAAE,CAAS,EAAE,CAAS;IACrC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,UAAU,CAAE,MAAsB,EAAE,MAAkB;IAC7D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAM,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QAAG,GAAG,CAAC,GAAG,CAAE,IAAA,gCAAc,EAAE,IAAI,CAAE,CAAC,CAAC;IACnF,KAAM,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE;QAAG,GAAG,CAAC,GAAG,CAAE,KAAK,CAAC,EAAE,CAAE,CAAC;IAC/D,KAAM,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,IAAK,IAAI,CAAC,MAAM,KAAK,SAAS;YAAG,GAAG,CAAC,MAAM,CAAE,IAAI,CAAC,EAAE,CAAE,CAAC;IACzD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,YAAY,CAAE,MAAsB,EAAE,MAAkB,EAAE,GAAY;IACpF,MAAM,QAAQ,GAAG,UAAU,CAAE,MAAM,EAAE,MAAM,CAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAE,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC,CAAC;IAC7G,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,CAAC,CAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAE,CAAE,CAAC,CAAC;IAEtE,MAAM,cAAc,GAAG,IAAI,GAAG,EAAwB,CAAC;IACvD,KAAM,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC9B,cAAc,CAAC,GAAG,CAAE,IAAI,CAAC,IAAI,EAAE,CAAE,GAAG,CAAE,cAAc,CAAC,GAAG,CAAE,IAAI,CAAC,IAAI,CAAE,IAAI,EAAE,CAAE,EAAE,IAAI,CAAC,aAAa,CAAE,CAAC,CAAC;IACvG,CAAC;IAED,MAAM,MAAM,GAAG,CAAE,aAAyB,EAAY,EAAE;QACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAE,aAAa,CAAE,CAAC;QAC3C,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;IACzD,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAiC,EAAE,CAAC;IACpD,KAAM,MAAM,EAAE,IAAI,CAAE,GAAG,QAAQ,CAAE,CAAC,IAAI,CAAE,QAAQ,CAAE,EAAC,CAAC;QAClD,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAE,EAAE,CAAE,CAAC;QAC9C,IAAK,YAAY,KAAK,SAAS,EAAE,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAE,EAAE,CAAE,CAAC;YACpB,SAAS;QACX,CAAC;QACD,IAAK,CAAC,YAAY,CAAC,KAAK,CAAE,MAAM,CAAE;YAAE,SAAS;QAC7C,QAAQ,CAAC,IAAI,CAAE,EAAE,CAAE,CAAC;QACpB,KAAM,MAAM,aAAa,IAAI,YAAY,EAAE,CAAC;YAC1C,CAAE,UAAU,CAAE,aAAa,CAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAE,EAAE,CAAE,CAAC;QACnD,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK;SACvB,MAAM,CAAE,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAE,IAAI,CAAC,IAAI,CAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAE,IAAI,CAAC,aAAa,CAAE,CAAC;SACjF,GAAG,CAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;SACtE,IAAI,CAAC,CAAE,CAAC,EAAE,CAAC,EAAG,EAAE,CAAC,QAAQ,CAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAE,IAAI,QAAQ,CAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,aAAa,CAAE,CAAC,CAAC;IAEhG,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK;SACtB,MAAM,CAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAE,IAAI,CAAC,aAAa,CAAE,IAAI,UAAU,CAAC,GAAG,CAAE,IAAI,CAAC,IAAI,CAAE,CAAC;SAClF,GAAG,CAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;SACtE,IAAI,CAAC,CAAE,CAAC,EAAE,CAAC,EAAG,EAAE,CAAC,QAAQ,CAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAE,IAAI,QAAQ,CAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,aAAa,CAAE,CAAC,CAAC;IAEhG,gGAAgG;IAChG,mGAAmG;IACnG,wDAAwD;IACxD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAE,GAAG,CAAC,KAAK;SAC9B,MAAM,CAAE,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,IAAI,CAAE,OAAO,CAAC,GAAG,CAAE,IAAI,CAAC,IAAI,CAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAE,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC;SAC3F,GAAG,CAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAE,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,KAAM,MAAM,IAAI,IAAI,CAAE,GAAG,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,CAAE,CAAC,EAAE,CAAC,EAAG,EAAE,CAAC,QAAQ,CAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAE,CAAC,EAAC,CAAC;QAC7E,IAAK,IAAI,CAAC,KAAK,KAAK,aAAa,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,CAAE;YAAE,SAAS;QAClG,QAAQ,CAAC,IAAI,CAAE,IAAI,CAAC,EAAE,CAAE,CAAC;IAC3B,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACzE,CAAC"}
|