@intentset/architecture 0.8.1 → 0.9.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/areas.d.ts +1 -1
- package/dist/areas.d.ts.map +1 -1
- package/dist/areas.js +3 -0
- package/dist/areas.js.map +1 -1
- package/dist/baseline.d.ts +96 -11
- package/dist/baseline.d.ts.map +1 -1
- package/dist/baseline.js +219 -22
- package/dist/baseline.js.map +1 -1
- package/dist/boundaries.d.ts +11 -2
- package/dist/boundaries.d.ts.map +1 -1
- package/dist/boundaries.js +175 -17
- package/dist/boundaries.js.map +1 -1
- package/dist/check.d.ts +9 -2
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +21 -6
- package/dist/check.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +32 -1
- package/dist/config.js.map +1 -1
- package/dist/extract.d.ts +36 -1
- package/dist/extract.d.ts.map +1 -1
- package/dist/extract.js +142 -22
- package/dist/extract.js.map +1 -1
- package/dist/finding.d.ts +12 -0
- package/dist/finding.d.ts.map +1 -1
- package/dist/finding.js +6 -1
- package/dist/finding.js.map +1 -1
- package/dist/imports.d.ts +16 -0
- package/dist/imports.d.ts.map +1 -1
- package/dist/imports.js +17 -2
- package/dist/imports.js.map +1 -1
- package/dist/index.d.ts +8 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/layers.d.ts +6 -0
- package/dist/layers.d.ts.map +1 -1
- package/dist/layers.js +19 -0
- package/dist/layers.js.map +1 -1
- package/dist/names.d.ts +48 -0
- package/dist/names.d.ts.map +1 -0
- package/dist/names.js +194 -0
- package/dist/names.js.map +1 -0
- package/package.json +2 -2
- package/src/areas.ts +3 -1
- package/src/baseline.ts +266 -24
- package/src/boundaries.ts +191 -22
- package/src/check.ts +34 -7
- package/src/config.ts +44 -1
- package/src/extract.ts +168 -22
- package/src/finding.ts +19 -1
- package/src/imports.ts +25 -3
- package/src/index.ts +16 -4
- package/src/layers.ts +18 -0
- package/src/names.ts +215 -0
package/dist/areas.d.ts
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import type { AreaConfig } from "./config.ts";
|
|
17
17
|
import { type Finding } from "./finding.ts";
|
|
18
|
-
import type
|
|
18
|
+
import { type ImportEdge } from "./imports.ts";
|
|
19
19
|
import type { Model } from "./regions.ts";
|
|
20
20
|
export declare const AREA_REVIEW_REQUIRED: string[];
|
|
21
21
|
export interface AreaCheck {
|
package/dist/areas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"areas.d.ts","sourceRoot":"","sources":["../src/areas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,KAAK,OAAO,EAAqB,MAAM,cAAc,CAAC;AAC/D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"areas.d.ts","sourceRoot":"","sources":["../src/areas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,KAAK,OAAO,EAAqB,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,KAAK,UAAU,EAAW,MAAM,cAAc,CAAC;AAGxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,eAAO,MAAM,oBAAoB,UAGhC,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,oDAAoD;AACpD,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAE3F;AAED,gEAAgE;AAChE,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAEpF;AAED,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhF;AAID,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,CAuLhF"}
|
package/dist/areas.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { extractSchema, findCalls } from "./extract.js";
|
|
2
2
|
import { finding, listSome } from "./finding.js";
|
|
3
|
+
import { takenBy } from "./imports.js";
|
|
3
4
|
import { isCode } from "./paths.js";
|
|
4
5
|
import { compareStrings, matchAny } from "./patterns.js";
|
|
5
6
|
export const AREA_REVIEW_REQUIRED = [
|
|
@@ -77,6 +78,7 @@ export function checkAreas(model, edges) {
|
|
|
77
78
|
message: `${edge.from}, in the ${from.name} backend, imports ${edge.to} from the ${to.name} backend, and area backends deploy separately.`,
|
|
78
79
|
remediation: "Move what both need into the shared backend package, and reach the other area's data through its published resource names (profile §9, AMP008, AMP012).",
|
|
79
80
|
edges: [{ from: edge.from, to: edge.to }],
|
|
81
|
+
taken: takenBy(edge),
|
|
80
82
|
}));
|
|
81
83
|
}
|
|
82
84
|
else if (from === null && matchAny(sharedBackend, edge.from)) {
|
|
@@ -88,6 +90,7 @@ export function checkAreas(model, edges) {
|
|
|
88
90
|
message: `${edge.from}, in the shared backend package, imports ${edge.to} from the ${to.name} backend, and the shared package must stay domain-neutral.`,
|
|
89
91
|
remediation: "Pass what the shared code needs in as a parameter, or move the code into the area that owns it (profile §9, AMP008).",
|
|
90
92
|
edges: [{ from: edge.from, to: edge.to }],
|
|
93
|
+
taken: takenBy(edge),
|
|
91
94
|
}));
|
|
92
95
|
}
|
|
93
96
|
}
|
package/dist/areas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"areas.js","sourceRoot":"","sources":["../src/areas.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAmB,MAAM,cAAc,CAAC;AACzE,OAAO,EAAgB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"areas.js","sourceRoot":"","sources":["../src/areas.ts"],"names":[],"mappings":"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"}
|
package/dist/baseline.d.ts
CHANGED
|
@@ -5,35 +5,120 @@
|
|
|
5
5
|
* warning marked "(baselined)" and is counted apart; in strict mode the
|
|
6
6
|
* baseline is ignored, so the two modes are always distinguishable.
|
|
7
7
|
*
|
|
8
|
-
* An entry fingerprints
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
8
|
+
* An entry fingerprints what a finding is about, not how its message reads
|
|
9
|
+
* (0.9, closing #20 and #88): the code, path, artifact and field, then, for a
|
|
10
|
+
* finding about one import, how it imports, its target and one name it takes,
|
|
11
|
+
* so a finding about an import is held one name at a time; for another finding
|
|
12
|
+
* with edges, its file and slice edges; for one with neither edges nor a
|
|
13
|
+
* field, its message, which is all that tells it from another. Nothing hashed
|
|
14
|
+
* carries a line number, so moving an import does not unbaseline it, while a
|
|
15
|
+
* new file, a new target, a new name or a larger cycle is a new entry and
|
|
16
|
+
* stays an error. A message that names unrelated state, such as AMP007's list
|
|
17
|
+
* of declared areas, no longer moves a fingerprint. Matching is one entry per
|
|
18
|
+
* key: a baseline of one violation does not absorb a second copy of it. An
|
|
19
|
+
* entry also keeps the name and the message it was written from, so a reader
|
|
20
|
+
* of the file, or of a diff of it, sees what each entry holds.
|
|
21
|
+
*
|
|
22
|
+
* An entry written before 0.9 fingerprints the whole message. It still
|
|
23
|
+
* matches, by that fingerprint, and goes when the baseline is written again,
|
|
24
|
+
* which writes the current form; a review reads that as a rewrite, not as
|
|
25
|
+
* growth.
|
|
26
|
+
*
|
|
27
|
+
* A baseline only shrinks. An entry that matches nothing in migration mode is
|
|
28
|
+
* VSA014, an error: the violation it held is gone, and the entry would let it
|
|
29
|
+
* come back unnoticed. `compareBaselines` says what a change added to a
|
|
30
|
+
* baseline and what it retired, for `intentset review` (VSA §9).
|
|
13
31
|
*/
|
|
14
32
|
import { type Diagnostic } from "@intentset/core";
|
|
33
|
+
import type { SubjectEdge, Taken } from "./finding.ts";
|
|
15
34
|
export type Mode = "migration" | "strict";
|
|
16
35
|
export interface BaselineEntry {
|
|
17
36
|
code: string;
|
|
18
37
|
path: string | null;
|
|
19
38
|
artifact?: string;
|
|
39
|
+
/** For an entry about an import, the one name it holds (`type X` for a type-only name, `*` for every name). */
|
|
40
|
+
name?: string;
|
|
41
|
+
/** The diagnostic's message without notes. Written since 0.9; an older file's entries have none. */
|
|
42
|
+
message?: string;
|
|
43
|
+
/** `v2-` and a hash of what the finding is about since 0.9; a bare hash of the whole message before. */
|
|
20
44
|
fingerprint: string;
|
|
21
45
|
}
|
|
46
|
+
/** What a diagnostic is about beyond its code and place, from the finding it came from. */
|
|
47
|
+
export interface BaselineSubject {
|
|
48
|
+
edges: readonly SubjectEdge[];
|
|
49
|
+
taken?: Taken;
|
|
50
|
+
}
|
|
51
|
+
/** The prefix of a fingerprint written since 0.9. */
|
|
52
|
+
export declare const FINGERPRINT_V2 = "v2-";
|
|
53
|
+
/** A stale entry: reported, never recorded in a baseline. */
|
|
54
|
+
export declare const STALE_ENTRY_CODE = "VSA014";
|
|
22
55
|
/** The message without the notes exceptions and baselines add. */
|
|
23
56
|
export declare function plainMessage(message: string): string;
|
|
57
|
+
/** The fingerprint before 0.9: the whole message. Kept so a baseline written then still matches. */
|
|
24
58
|
export declare function fingerprint(diagnostic: Diagnostic): string;
|
|
25
|
-
/**
|
|
26
|
-
|
|
59
|
+
/**
|
|
60
|
+
* The keys a diagnostic is held by: one for each name a finding about an import takes, else one. `subject` is what
|
|
61
|
+
* the finding is about; a diagnostic with none, such as a configuration error, is held by its field or its message.
|
|
62
|
+
*/
|
|
63
|
+
export declare function baselineKeys(diagnostic: Diagnostic, subject?: BaselineSubject): {
|
|
64
|
+
name: string | null;
|
|
65
|
+
fingerprint: string;
|
|
66
|
+
}[];
|
|
67
|
+
/**
|
|
68
|
+
* Record every error, and every diagnostic already baselined, as the baseline to adopt: one entry per key. Sorted.
|
|
69
|
+
* A stale entry's VSA014 is not recorded: writing the baseline again is how a stale entry is retired.
|
|
70
|
+
*/
|
|
71
|
+
export declare function writeBaseline(diagnostics: readonly Diagnostic[], subjectOf?: (diagnostic: Diagnostic) => BaselineSubject | undefined): BaselineEntry[];
|
|
27
72
|
/** Parse a baseline file. Throws on a shape that is not an array of entries, since a misread baseline must not pass silently. */
|
|
28
73
|
export declare function parseBaseline(text: string): BaselineEntry[];
|
|
29
74
|
/**
|
|
30
|
-
* Apply a baseline. In migration mode
|
|
31
|
-
*
|
|
32
|
-
*
|
|
75
|
+
* Apply a baseline. In migration mode an error is baselined, a "(baselined)" warning, when an entry holds each of its
|
|
76
|
+
* keys, or, for a baseline written before 0.9, when one entry holds its whole message. An error with some of its
|
|
77
|
+
* names held stays an error, noting the names the baseline does not hold, and the held ones are not stale. Entries
|
|
78
|
+
* nothing matched are returned as stale. Strict mode returns the diagnostics unchanged.
|
|
33
79
|
*/
|
|
34
|
-
export declare function applyBaseline(diagnostics: readonly Diagnostic[], baseline: readonly BaselineEntry[], mode?: Mode): {
|
|
80
|
+
export declare function applyBaseline(diagnostics: readonly Diagnostic[], baseline: readonly BaselineEntry[], mode?: Mode, subjectOf?: (diagnostic: Diagnostic) => BaselineSubject | undefined): {
|
|
35
81
|
diagnostics: Diagnostic[];
|
|
36
82
|
baselined: number;
|
|
37
83
|
stale: BaselineEntry[];
|
|
38
84
|
};
|
|
85
|
+
/** What an entry says it holds: its code, path and message, or its fingerprint when it was written without one. */
|
|
86
|
+
export declare function describeEntry(entry: BaselineEntry): string;
|
|
87
|
+
/**
|
|
88
|
+
* VSA014 for each entry a migration run matched to nothing. `baseline` is the whole baseline, so each diagnostic
|
|
89
|
+
* points at its entry's index in the file; `path` is the file's repository-relative path when it is known.
|
|
90
|
+
*/
|
|
91
|
+
export declare function staleEntryDiagnostics(stale: readonly BaselineEntry[], baseline: readonly BaselineEntry[], path: string | null): Diagnostic[];
|
|
92
|
+
export interface BaselineComparison {
|
|
93
|
+
/** Entries the base did not hold: the baseline grew by these. */
|
|
94
|
+
added: BaselineEntry[];
|
|
95
|
+
/** Entries the base held that are gone: retired. */
|
|
96
|
+
removed: BaselineEntry[];
|
|
97
|
+
/** An entry whose file was renamed, with what it says renamed too: neither added nor retired. */
|
|
98
|
+
moved: {
|
|
99
|
+
from: BaselineEntry;
|
|
100
|
+
to: BaselineEntry;
|
|
101
|
+
}[];
|
|
102
|
+
/** A VSA005 cycle replaced by one among the same slices or fewer, with no more edges: a shrink, not growth. */
|
|
103
|
+
replaced: {
|
|
104
|
+
from: BaselineEntry;
|
|
105
|
+
to: BaselineEntry;
|
|
106
|
+
}[];
|
|
107
|
+
/**
|
|
108
|
+
* An entry written before 0.9 and the entries written since for the same code, path and artifact (and message,
|
|
109
|
+
* where both carry one): the same violations in the current form, one entry per name.
|
|
110
|
+
*/
|
|
111
|
+
rewritten: {
|
|
112
|
+
from: BaselineEntry;
|
|
113
|
+
to: BaselineEntry[];
|
|
114
|
+
}[];
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* What a change did to a baseline: `base` is the base's copy (null when the base has none, so every entry is new),
|
|
118
|
+
* `head` the change's, `renames` the files the change renamed, old path to new. Entries are matched one for one by
|
|
119
|
+
* fingerprint. Of the rest, an entry is moved when renaming its path and message gives another's, or, for an entry
|
|
120
|
+
* written without a message, when its path was renamed to the other's with the same code and artifact; and a cycle
|
|
121
|
+
* is replaced when the new one's slices are among the old one's and it has no more edges. Each list is sorted.
|
|
122
|
+
*/
|
|
123
|
+
export declare function compareBaselines(base: readonly BaselineEntry[] | null, head: readonly BaselineEntry[], renames?: ReadonlyMap<string, string>): BaselineComparison;
|
|
39
124
|
//# sourceMappingURL=baseline.d.ts.map
|
package/dist/baseline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"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"}
|
package/dist/baseline.js
CHANGED
|
@@ -5,16 +5,38 @@
|
|
|
5
5
|
* warning marked "(baselined)" and is counted apart; in strict mode the
|
|
6
6
|
* baseline is ignored, so the two modes are always distinguishable.
|
|
7
7
|
*
|
|
8
|
-
* An entry fingerprints
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
8
|
+
* An entry fingerprints what a finding is about, not how its message reads
|
|
9
|
+
* (0.9, closing #20 and #88): the code, path, artifact and field, then, for a
|
|
10
|
+
* finding about one import, how it imports, its target and one name it takes,
|
|
11
|
+
* so a finding about an import is held one name at a time; for another finding
|
|
12
|
+
* with edges, its file and slice edges; for one with neither edges nor a
|
|
13
|
+
* field, its message, which is all that tells it from another. Nothing hashed
|
|
14
|
+
* carries a line number, so moving an import does not unbaseline it, while a
|
|
15
|
+
* new file, a new target, a new name or a larger cycle is a new entry and
|
|
16
|
+
* stays an error. A message that names unrelated state, such as AMP007's list
|
|
17
|
+
* of declared areas, no longer moves a fingerprint. Matching is one entry per
|
|
18
|
+
* key: a baseline of one violation does not absorb a second copy of it. An
|
|
19
|
+
* entry also keeps the name and the message it was written from, so a reader
|
|
20
|
+
* of the file, or of a diff of it, sees what each entry holds.
|
|
21
|
+
*
|
|
22
|
+
* An entry written before 0.9 fingerprints the whole message. It still
|
|
23
|
+
* matches, by that fingerprint, and goes when the baseline is written again,
|
|
24
|
+
* which writes the current form; a review reads that as a rewrite, not as
|
|
25
|
+
* growth.
|
|
26
|
+
*
|
|
27
|
+
* A baseline only shrinks. An entry that matches nothing in migration mode is
|
|
28
|
+
* VSA014, an error: the violation it held is gone, and the entry would let it
|
|
29
|
+
* come back unnoticed. `compareBaselines` says what a change added to a
|
|
30
|
+
* baseline and what it retired, for `intentset review` (VSA §9).
|
|
13
31
|
*/
|
|
14
32
|
import { canonicalJson, sha256Hex } from "@intentset/core";
|
|
15
33
|
import { annotate } from "./exceptions.js";
|
|
16
34
|
import { compareStrings } from "./patterns.js";
|
|
17
|
-
|
|
35
|
+
/** The prefix of a fingerprint written since 0.9. */
|
|
36
|
+
export const FINGERPRINT_V2 = "v2-";
|
|
37
|
+
/** A stale entry: reported, never recorded in a baseline. */
|
|
38
|
+
export const STALE_ENTRY_CODE = "VSA014";
|
|
39
|
+
const NOTES = / \((?:baselined|excepted by [^()]*|exception [^()]* expired [^()]*|not in the baseline: [^()]*)\)(?=\.?$)/;
|
|
18
40
|
/** The message without the notes exceptions and baselines add. */
|
|
19
41
|
export function plainMessage(message) {
|
|
20
42
|
let out = message;
|
|
@@ -24,6 +46,7 @@ export function plainMessage(message) {
|
|
|
24
46
|
}
|
|
25
47
|
return out;
|
|
26
48
|
}
|
|
49
|
+
/** The fingerprint before 0.9: the whole message. Kept so a baseline written then still matches. */
|
|
27
50
|
export function fingerprint(diagnostic) {
|
|
28
51
|
return sha256Hex(canonicalJson({
|
|
29
52
|
code: diagnostic.code,
|
|
@@ -36,16 +59,50 @@ export function fingerprint(diagnostic) {
|
|
|
36
59
|
function isBaselined(diagnostic) {
|
|
37
60
|
return diagnostic.severity === "warning" && / \(baselined\)\.?$/.test(diagnostic.message);
|
|
38
61
|
}
|
|
39
|
-
/**
|
|
40
|
-
|
|
62
|
+
/**
|
|
63
|
+
* The keys a diagnostic is held by: one for each name a finding about an import takes, else one. `subject` is what
|
|
64
|
+
* the finding is about; a diagnostic with none, such as a configuration error, is held by its field or its message.
|
|
65
|
+
*/
|
|
66
|
+
export function baselineKeys(diagnostic, subject) {
|
|
67
|
+
const place = {
|
|
68
|
+
code: diagnostic.code,
|
|
69
|
+
path: diagnostic.path,
|
|
70
|
+
artifact: diagnostic.artifact,
|
|
71
|
+
field: diagnostic.field ?? null,
|
|
72
|
+
};
|
|
73
|
+
const key = (identity, name) => ({
|
|
74
|
+
name,
|
|
75
|
+
fingerprint: `${FINGERPRINT_V2}${sha256Hex(canonicalJson({ ...place, ...identity, name }))}`,
|
|
76
|
+
});
|
|
77
|
+
if (subject?.taken !== undefined) {
|
|
78
|
+
const { kind, to, names } = subject.taken;
|
|
79
|
+
const each = names.length === 0 ? [null] : [...new Set(names)].sort(compareStrings);
|
|
80
|
+
return each.map((name) => key({ kind, to }, name));
|
|
81
|
+
}
|
|
82
|
+
if (subject !== undefined && subject.edges.length > 0) {
|
|
83
|
+
const edges = [...new Set(subject.edges.map((edge) => `${edge.from} -> ${edge.to}`))].sort(compareStrings);
|
|
84
|
+
return [key({ edges }, null)];
|
|
85
|
+
}
|
|
86
|
+
if (diagnostic.field !== undefined)
|
|
87
|
+
return [key({}, null)];
|
|
88
|
+
return [key({ message: plainMessage(diagnostic.message) }, null)];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Record every error, and every diagnostic already baselined, as the baseline to adopt: one entry per key. Sorted.
|
|
92
|
+
* A stale entry's VSA014 is not recorded: writing the baseline again is how a stale entry is retired.
|
|
93
|
+
*/
|
|
94
|
+
export function writeBaseline(diagnostics, subjectOf = () => undefined) {
|
|
41
95
|
return diagnostics
|
|
42
96
|
.filter((diagnostic) => diagnostic.severity === "error" || isBaselined(diagnostic))
|
|
43
|
-
.
|
|
97
|
+
.filter((diagnostic) => diagnostic.code !== STALE_ENTRY_CODE)
|
|
98
|
+
.flatMap((diagnostic) => baselineKeys(diagnostic, subjectOf(diagnostic)).map((key) => ({
|
|
44
99
|
code: diagnostic.code,
|
|
45
100
|
path: diagnostic.path,
|
|
46
101
|
...(diagnostic.artifact !== null ? { artifact: diagnostic.artifact } : {}),
|
|
47
|
-
|
|
48
|
-
|
|
102
|
+
...(key.name !== null ? { name: key.name } : {}),
|
|
103
|
+
message: plainMessage(diagnostic.message),
|
|
104
|
+
fingerprint: key.fingerprint,
|
|
105
|
+
})))
|
|
49
106
|
.sort((a, b) => compareStrings(a.code, b.code) ||
|
|
50
107
|
compareStrings(a.path ?? "", b.path ?? "") ||
|
|
51
108
|
compareStrings(a.fingerprint, b.fingerprint));
|
|
@@ -62,23 +119,28 @@ export function parseBaseline(text) {
|
|
|
62
119
|
typeof entry.code !== "string" ||
|
|
63
120
|
typeof entry.fingerprint !== "string" ||
|
|
64
121
|
!(typeof entry.path === "string" || entry.path === null) ||
|
|
65
|
-
!(entry.artifact === undefined || typeof entry.artifact === "string")
|
|
66
|
-
|
|
122
|
+
!(entry.artifact === undefined || typeof entry.artifact === "string") ||
|
|
123
|
+
!(entry.name === undefined || typeof entry.name === "string") ||
|
|
124
|
+
!(entry.message === undefined || typeof entry.message === "string")) {
|
|
125
|
+
throw new Error(`baseline entry ${i} is not { code, path, artifact?, name?, message?, fingerprint }`);
|
|
67
126
|
}
|
|
68
127
|
return {
|
|
69
128
|
code: entry.code,
|
|
70
129
|
path: entry.path,
|
|
71
130
|
...(typeof entry.artifact === "string" ? { artifact: entry.artifact } : {}),
|
|
131
|
+
...(typeof entry.name === "string" ? { name: entry.name } : {}),
|
|
132
|
+
...(typeof entry.message === "string" ? { message: entry.message } : {}),
|
|
72
133
|
fingerprint: entry.fingerprint,
|
|
73
134
|
};
|
|
74
135
|
});
|
|
75
136
|
}
|
|
76
137
|
/**
|
|
77
|
-
* Apply a baseline. In migration mode
|
|
78
|
-
*
|
|
79
|
-
*
|
|
138
|
+
* Apply a baseline. In migration mode an error is baselined, a "(baselined)" warning, when an entry holds each of its
|
|
139
|
+
* keys, or, for a baseline written before 0.9, when one entry holds its whole message. An error with some of its
|
|
140
|
+
* names held stays an error, noting the names the baseline does not hold, and the held ones are not stale. Entries
|
|
141
|
+
* nothing matched are returned as stale. Strict mode returns the diagnostics unchanged.
|
|
80
142
|
*/
|
|
81
|
-
export function applyBaseline(diagnostics, baseline, mode = "migration") {
|
|
143
|
+
export function applyBaseline(diagnostics, baseline, mode = "migration", subjectOf = () => undefined) {
|
|
82
144
|
if (mode === "strict")
|
|
83
145
|
return { diagnostics: [...diagnostics], baselined: 0, stale: [] };
|
|
84
146
|
const remaining = new Map();
|
|
@@ -87,18 +149,153 @@ export function applyBaseline(diagnostics, baseline, mode = "migration") {
|
|
|
87
149
|
list.push(entry);
|
|
88
150
|
remaining.set(entry.fingerprint, list);
|
|
89
151
|
}
|
|
152
|
+
const held = (fingerprint) => (remaining.get(fingerprint)?.length ?? 0) > 0;
|
|
153
|
+
const take = (fingerprint) => remaining.get(fingerprint)?.pop();
|
|
90
154
|
let baselined = 0;
|
|
91
155
|
const out = diagnostics.map((diagnostic) => {
|
|
92
156
|
if (diagnostic.severity !== "error")
|
|
93
157
|
return diagnostic;
|
|
94
|
-
const
|
|
95
|
-
|
|
158
|
+
const keys = baselineKeys(diagnostic, subjectOf(diagnostic));
|
|
159
|
+
const have = keys.filter((key) => held(key.fingerprint));
|
|
160
|
+
const legacy = fingerprint(diagnostic);
|
|
161
|
+
if (have.length === keys.length || held(legacy)) {
|
|
162
|
+
if (have.length === keys.length)
|
|
163
|
+
for (const key of keys)
|
|
164
|
+
take(key.fingerprint);
|
|
165
|
+
else
|
|
166
|
+
take(legacy);
|
|
167
|
+
baselined++;
|
|
168
|
+
return { ...diagnostic, severity: "warning", message: annotate(diagnostic.message, "baselined") };
|
|
169
|
+
}
|
|
170
|
+
for (const key of have)
|
|
171
|
+
take(key.fingerprint);
|
|
172
|
+
if (have.length === 0)
|
|
96
173
|
return diagnostic;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
return { ...diagnostic, severity: "warning", message: annotate(diagnostic.message, "baselined") };
|
|
174
|
+
const missing = keys.filter((key) => !have.includes(key)).map((key) => key.name ?? "it");
|
|
175
|
+
return { ...diagnostic, message: annotate(diagnostic.message, `not in the baseline: ${missing.join(", ")}`) };
|
|
100
176
|
});
|
|
101
177
|
const stale = [...remaining.values()].flat().sort((a, b) => compareStrings(a.fingerprint, b.fingerprint));
|
|
102
178
|
return { diagnostics: out, baselined, stale };
|
|
103
179
|
}
|
|
180
|
+
/** What an entry says it holds: its code, path and message, or its fingerprint when it was written without one. */
|
|
181
|
+
export function describeEntry(entry) {
|
|
182
|
+
const where = `${entry.code} ${entry.path ?? "(no path)"}${entry.name === undefined ? "" : ` [${entry.name}]`}`;
|
|
183
|
+
return entry.message === undefined
|
|
184
|
+
? `${where} (fingerprint ${entry.fingerprint.slice(0, 16)})`
|
|
185
|
+
: `${where}: ${entry.message}`;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* VSA014 for each entry a migration run matched to nothing. `baseline` is the whole baseline, so each diagnostic
|
|
189
|
+
* points at its entry's index in the file; `path` is the file's repository-relative path when it is known.
|
|
190
|
+
*/
|
|
191
|
+
export function staleEntryDiagnostics(stale, baseline, path) {
|
|
192
|
+
return stale.map((entry) => {
|
|
193
|
+
const index = baseline.indexOf(entry);
|
|
194
|
+
return {
|
|
195
|
+
code: STALE_ENTRY_CODE,
|
|
196
|
+
severity: "error",
|
|
197
|
+
origin: "architecture",
|
|
198
|
+
artifact: entry.artifact ?? null,
|
|
199
|
+
path,
|
|
200
|
+
...(index >= 0 ? { field: `/${index}` } : {}),
|
|
201
|
+
message: `A baseline entry matches no diagnostic, so the violation it held is gone and the entry would let it come back: ${describeEntry(entry).replace(/\.$/, "")}.`,
|
|
202
|
+
remediation: "Remove the entry, or write the baseline again with --write-baseline, so the baseline only shrinks (VSA §9, VSA014).",
|
|
203
|
+
};
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
const CYCLE = /^Slices (.+) form a compile-time dependency cycle, .*, from (\d+) observed import edges? and (\d+) declared dependsOn edges?\.$/;
|
|
207
|
+
function cycleOf(entry) {
|
|
208
|
+
const match = entry.code === "VSA005" && entry.message !== undefined ? CYCLE.exec(entry.message) : null;
|
|
209
|
+
if (match === null)
|
|
210
|
+
return null;
|
|
211
|
+
return { slices: new Set(match[1].split(", ")), edges: Number(match[2]) + Number(match[3]) };
|
|
212
|
+
}
|
|
213
|
+
/** `text` with every renamed path in it replaced by its new path, longest old path first. */
|
|
214
|
+
function renamed(text, renames) {
|
|
215
|
+
let out = text;
|
|
216
|
+
for (const [from, to] of [...renames].sort((a, b) => b[0].length - a[0].length || compareStrings(a[0], b[0]))) {
|
|
217
|
+
out = out.split(from).join(to);
|
|
218
|
+
}
|
|
219
|
+
return out;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* What a change did to a baseline: `base` is the base's copy (null when the base has none, so every entry is new),
|
|
223
|
+
* `head` the change's, `renames` the files the change renamed, old path to new. Entries are matched one for one by
|
|
224
|
+
* fingerprint. Of the rest, an entry is moved when renaming its path and message gives another's, or, for an entry
|
|
225
|
+
* written without a message, when its path was renamed to the other's with the same code and artifact; and a cycle
|
|
226
|
+
* is replaced when the new one's slices are among the old one's and it has no more edges. Each list is sorted.
|
|
227
|
+
*/
|
|
228
|
+
export function compareBaselines(base, head, renames = new Map()) {
|
|
229
|
+
const waiting = new Map();
|
|
230
|
+
for (const entry of base ?? []) {
|
|
231
|
+
const list = waiting.get(entry.fingerprint) ?? [];
|
|
232
|
+
list.push(entry);
|
|
233
|
+
waiting.set(entry.fingerprint, list);
|
|
234
|
+
}
|
|
235
|
+
let added = [];
|
|
236
|
+
for (const entry of head) {
|
|
237
|
+
const list = waiting.get(entry.fingerprint);
|
|
238
|
+
if (list !== undefined && list.length > 0)
|
|
239
|
+
list.pop();
|
|
240
|
+
else
|
|
241
|
+
added.push(entry);
|
|
242
|
+
}
|
|
243
|
+
let removed = [...waiting.values()].flat();
|
|
244
|
+
const pair = (test) => {
|
|
245
|
+
const pairs = [];
|
|
246
|
+
for (const to of [...added]) {
|
|
247
|
+
const from = removed.find((candidate) => test(candidate, to));
|
|
248
|
+
if (from === undefined)
|
|
249
|
+
continue;
|
|
250
|
+
pairs.push({ from, to });
|
|
251
|
+
removed = removed.filter((entry) => entry !== from);
|
|
252
|
+
added = added.filter((entry) => entry !== to);
|
|
253
|
+
}
|
|
254
|
+
return pairs;
|
|
255
|
+
};
|
|
256
|
+
const moved = pair((from, to) => {
|
|
257
|
+
if (from.code !== to.code || from.artifact !== to.artifact || from.path === null || to.path === null)
|
|
258
|
+
return false;
|
|
259
|
+
if (from.name !== to.name)
|
|
260
|
+
return false;
|
|
261
|
+
if (renamed(from.path, renames) !== to.path)
|
|
262
|
+
return false;
|
|
263
|
+
if (from.message === undefined || to.message === undefined)
|
|
264
|
+
return renames.get(from.path) === to.path;
|
|
265
|
+
return renamed(from.message, renames) === to.message;
|
|
266
|
+
});
|
|
267
|
+
const replaced = pair((from, to) => {
|
|
268
|
+
const old = cycleOf(from);
|
|
269
|
+
const now = cycleOf(to);
|
|
270
|
+
if (old === null || now === null || ![...now.slices].every((slice) => old.slices.has(slice)))
|
|
271
|
+
return false;
|
|
272
|
+
return now.slices.size < old.slices.size || now.edges <= old.edges;
|
|
273
|
+
});
|
|
274
|
+
const rewritten = [];
|
|
275
|
+
for (const from of [...removed]) {
|
|
276
|
+
if (from.fingerprint.startsWith(FINGERPRINT_V2))
|
|
277
|
+
continue;
|
|
278
|
+
const to = added.filter((entry) => entry.fingerprint.startsWith(FINGERPRINT_V2) &&
|
|
279
|
+
entry.code === from.code &&
|
|
280
|
+
entry.path === from.path &&
|
|
281
|
+
entry.artifact === from.artifact &&
|
|
282
|
+
(from.message === undefined || entry.message === from.message));
|
|
283
|
+
if (to.length === 0)
|
|
284
|
+
continue;
|
|
285
|
+
rewritten.push({ from, to });
|
|
286
|
+
removed = removed.filter((entry) => entry !== from);
|
|
287
|
+
added = added.filter((entry) => !to.includes(entry));
|
|
288
|
+
}
|
|
289
|
+
const order = (a, b) => compareStrings(a.code, b.code) ||
|
|
290
|
+
compareStrings(a.path ?? "", b.path ?? "") ||
|
|
291
|
+
compareStrings(a.fingerprint, b.fingerprint);
|
|
292
|
+
const byTo = (a, b) => order(a.to, b.to);
|
|
293
|
+
return {
|
|
294
|
+
added: added.sort(order),
|
|
295
|
+
removed: removed.sort(order),
|
|
296
|
+
moved: moved.sort(byTo),
|
|
297
|
+
replaced: replaced.sort(byTo),
|
|
298
|
+
rewritten: rewritten.sort((a, b) => order(a.from, b.from)),
|
|
299
|
+
};
|
|
300
|
+
}
|
|
104
301
|
//# sourceMappingURL=baseline.js.map
|
package/dist/baseline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"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"}
|
package/dist/boundaries.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Finding } from "./finding.ts";
|
|
2
|
-
import type
|
|
2
|
+
import { type ImportEdge } from "./imports.ts";
|
|
3
|
+
import { NameIndex } from "./names.ts";
|
|
3
4
|
import { type Model } from "./regions.ts";
|
|
4
5
|
import type { Resolver } from "./resolve.ts";
|
|
5
6
|
export interface SliceEdge {
|
|
@@ -16,8 +17,16 @@ export interface BoundaryResult {
|
|
|
16
17
|
fileEdges: number;
|
|
17
18
|
/** Those between two different slices. */
|
|
18
19
|
crossSliceEdges: number;
|
|
20
|
+
/** Names a layered file takes that could not be followed to the file that defines them: not checked, never passed. */
|
|
21
|
+
untraced: string[];
|
|
19
22
|
}
|
|
20
|
-
export declare function checkBoundaries(model: Model, edges: readonly ImportEdge[], resolver: Resolver): BoundaryResult;
|
|
23
|
+
export declare function checkBoundaries(model: Model, edges: readonly ImportEdge[], resolver: Resolver, names?: NameIndex): BoundaryResult;
|
|
24
|
+
/**
|
|
25
|
+
* TS008: a slice file outside the presentation layer that renders JSX. The automatic runtime needs no import for it,
|
|
26
|
+
* so this reads the file rather than an edge. Composition, shared code and tests may render; a file in no layer is
|
|
27
|
+
* VSA006's warning already.
|
|
28
|
+
*/
|
|
29
|
+
export declare function checkJsx(model: Model, jsx: ReadonlyMap<string, number>): Finding[];
|
|
21
30
|
/** One warning per slice whose code files are in no declared layer, or in a layer the matrix does not know (VSA006). */
|
|
22
31
|
export declare function checkUnclassified(model: Model): Finding[];
|
|
23
32
|
//# sourceMappingURL=boundaries.d.ts.map
|
package/dist/boundaries.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boundaries.d.ts","sourceRoot":"","sources":["../src/boundaries.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"boundaries.d.ts","sourceRoot":"","sources":["../src/boundaries.ts"],"names":[],"mappings":"AAqDA,OAAO,EAAE,KAAK,OAAO,EAAqB,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,KAAK,UAAU,EAAW,MAAM,cAAc,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAmB,KAAK,KAAK,EAA+B,MAAM,cAAc,CAAC;AACxF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,0DAA0D;IAC1D,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,6FAA6F;IAC7F,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnC,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,eAAe,EAAE,MAAM,CAAC;IACxB,sHAAsH;IACtH,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAyDD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,QAAQ,EAAE,QAAQ,EAClB,KAAK,GAAE,SAA2C,GACjD,cAAc,CAgdhB;AAeD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,EAAE,CAwBlF;AAED,wHAAwH;AACxH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,CAmCzD"}
|