@jeger-ai/opengantry 2.7.0 → 3.0.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/README.md +132 -328
- package/dist/cli/commands/arch.d.ts +1 -0
- package/dist/cli/commands/arch.d.ts.map +1 -1
- package/dist/cli/commands/arch.js +17 -6
- package/dist/cli/commands/arch.js.map +1 -1
- package/dist/cli/commands/blueprint.d.ts +7 -0
- package/dist/cli/commands/blueprint.d.ts.map +1 -0
- package/dist/cli/commands/blueprint.js +69 -0
- package/dist/cli/commands/blueprint.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +12 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/lib/architecture-drift-doctor.d.ts +4 -0
- package/dist/cli/lib/architecture-drift-doctor.d.ts.map +1 -0
- package/dist/cli/lib/architecture-drift-doctor.js +58 -0
- package/dist/cli/lib/architecture-drift-doctor.js.map +1 -0
- package/dist/cli/lib/blueprint-engine.d.ts +22 -0
- package/dist/cli/lib/blueprint-engine.d.ts.map +1 -0
- package/dist/cli/lib/blueprint-engine.js +127 -0
- package/dist/cli/lib/blueprint-engine.js.map +1 -0
- package/dist/cli/lib/discovery-proposal.d.ts +19 -0
- package/dist/cli/lib/discovery-proposal.d.ts.map +1 -0
- package/dist/cli/lib/discovery-proposal.js +110 -0
- package/dist/cli/lib/discovery-proposal.js.map +1 -0
- package/dist/cli/lib/discovery-scanner.d.ts +47 -0
- package/dist/cli/lib/discovery-scanner.d.ts.map +1 -0
- package/dist/cli/lib/discovery-scanner.js +81 -0
- package/dist/cli/lib/discovery-scanner.js.map +1 -0
- package/dist/cli/lib/doctor-core.d.ts.map +1 -1
- package/dist/cli/lib/doctor-core.js +2 -0
- package/dist/cli/lib/doctor-core.js.map +1 -1
- package/dist/cli/lib/domains/domain-adapter.d.ts +38 -0
- package/dist/cli/lib/domains/domain-adapter.d.ts.map +1 -0
- package/dist/cli/lib/domains/domain-adapter.js +20 -0
- package/dist/cli/lib/domains/domain-adapter.js.map +1 -0
- package/dist/cli/lib/domains/domain-code.d.ts +3 -0
- package/dist/cli/lib/domains/domain-code.d.ts.map +1 -0
- package/dist/cli/lib/domains/domain-code.js +171 -0
- package/dist/cli/lib/domains/domain-code.js.map +1 -0
- package/dist/cli/lib/domains/domain-content.d.ts +3 -0
- package/dist/cli/lib/domains/domain-content.d.ts.map +1 -0
- package/dist/cli/lib/domains/domain-content.js +190 -0
- package/dist/cli/lib/domains/domain-content.js.map +1 -0
- package/dist/cli/lib/domains/index.d.ts +5 -0
- package/dist/cli/lib/domains/index.d.ts.map +1 -0
- package/dist/cli/lib/domains/index.js +5 -0
- package/dist/cli/lib/domains/index.js.map +1 -0
- package/dist/cli/lib/errors.d.ts +0 -6
- package/dist/cli/lib/errors.d.ts.map +1 -1
- package/dist/cli/lib/errors.js +0 -4
- package/dist/cli/lib/errors.js.map +1 -1
- package/dist/cli/lib/gxt-error-codes.d.ts +0 -2
- package/dist/cli/lib/gxt-error-codes.d.ts.map +1 -1
- package/dist/cli/lib/gxt-error-codes.js +0 -2
- package/dist/cli/lib/gxt-error-codes.js.map +1 -1
- package/dist/cli/lib/init-discover.d.ts +14 -0
- package/dist/cli/lib/init-discover.d.ts.map +1 -0
- package/dist/cli/lib/init-discover.js +45 -0
- package/dist/cli/lib/init-discover.js.map +1 -0
- package/dist/cli/lib/target-architecture.d.ts +12 -3
- package/dist/cli/lib/target-architecture.d.ts.map +1 -1
- package/dist/cli/lib/target-architecture.js +108 -8
- package/dist/cli/lib/target-architecture.js.map +1 -1
- package/dist/cli/lib/verification-plan.d.ts +22 -0
- package/dist/cli/lib/verification-plan.d.ts.map +1 -0
- package/dist/cli/lib/verification-plan.js +26 -0
- package/dist/cli/lib/verification-plan.js.map +1 -0
- package/dist/cli/lib/verify-export.d.ts.map +1 -1
- package/dist/cli/lib/verify-export.js +27 -17
- package/dist/cli/lib/verify-export.js.map +1 -1
- package/dist/cli/lib/verify-failure-normalize.d.ts +2 -1
- package/dist/cli/lib/verify-failure-normalize.d.ts.map +1 -1
- package/dist/cli/lib/verify-failure-normalize.js +37 -1
- package/dist/cli/lib/verify-failure-normalize.js.map +1 -1
- package/dist/cli/lib/verify-finding.d.ts +16 -0
- package/dist/cli/lib/verify-finding.d.ts.map +1 -0
- package/dist/cli/lib/verify-finding.js +11 -0
- package/dist/cli/lib/verify-finding.js.map +1 -0
- package/dist/cli/lib/verify-payload.d.ts +4 -0
- package/dist/cli/lib/verify-payload.d.ts.map +1 -1
- package/dist/cli/lib/verify-payload.js +1 -1
- package/dist/cli/lib/verify-payload.js.map +1 -1
- package/dist/cli/lib/version.gen.d.ts +1 -1
- package/dist/cli/lib/version.gen.js +1 -1
- package/dist/cli/program-blueprint.d.ts +3 -0
- package/dist/cli/program-blueprint.d.ts.map +1 -0
- package/dist/cli/program-blueprint.js +12 -0
- package/dist/cli/program-blueprint.js.map +1 -0
- package/dist/cli/program-core.d.ts.map +1 -1
- package/dist/cli/program-core.js +5 -1
- package/dist/cli/program-core.js.map +1 -1
- package/dist/cli/program-workflow.d.ts.map +1 -1
- package/dist/cli/program-workflow.js +19 -1
- package/dist/cli/program-workflow.js.map +1 -1
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +2 -0
- package/dist/cli/program.js.map +1 -1
- package/package.json +1 -1
- package/templates/.gitagent/foreman/SUBSTRATE.version.json +1 -1
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { registerDomainAdapter, } from "./domain-adapter.js";
|
|
2
|
+
const BOILERPLATE_MIN_LINES = 2;
|
|
3
|
+
const BOILERPLATE_MAX_LINES = 12;
|
|
4
|
+
/** Extract verbatim multi-line blocks (≥2 lines, trimmed) for exact-match boilerplate detection. */
|
|
5
|
+
function extractVerbatimBlocks(body) {
|
|
6
|
+
const lines = body.split(/\r?\n/);
|
|
7
|
+
const blocks = [];
|
|
8
|
+
for (let start = 0; start < lines.length; start++) {
|
|
9
|
+
for (let len = BOILERPLATE_MIN_LINES; len <= BOILERPLATE_MAX_LINES && start + len <= lines.length; len++) {
|
|
10
|
+
const slice = lines.slice(start, start + len);
|
|
11
|
+
const trimmed = slice.map((l) => l.trimEnd()).join("\n").trim();
|
|
12
|
+
if (trimmed.length < 20)
|
|
13
|
+
continue;
|
|
14
|
+
if (!/[a-zA-Z]/.test(trimmed))
|
|
15
|
+
continue;
|
|
16
|
+
blocks.push({ block: trimmed, line: start + 1 });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return blocks;
|
|
20
|
+
}
|
|
21
|
+
function extractFrontmatterKeys(body) {
|
|
22
|
+
if (!body.startsWith("---"))
|
|
23
|
+
return [];
|
|
24
|
+
const end = body.indexOf("\n---", 3);
|
|
25
|
+
if (end === -1)
|
|
26
|
+
return [];
|
|
27
|
+
const fm = body.slice(3, end);
|
|
28
|
+
const keys = [];
|
|
29
|
+
for (const line of fm.split(/\r?\n/)) {
|
|
30
|
+
const m = /^([a-zA-Z0-9_-]+):/.exec(line.trim());
|
|
31
|
+
if (m)
|
|
32
|
+
keys.push(m[1]);
|
|
33
|
+
}
|
|
34
|
+
return keys.sort();
|
|
35
|
+
}
|
|
36
|
+
function extractContentEvidence(files) {
|
|
37
|
+
const blockOccurrences = new Map();
|
|
38
|
+
for (const file of files) {
|
|
39
|
+
for (const { block, line } of extractVerbatimBlocks(file.body)) {
|
|
40
|
+
const entry = blockOccurrences.get(block) ?? { files: new Set(), evidence: [] };
|
|
41
|
+
entry.files.add(file.rel);
|
|
42
|
+
if (entry.evidence.length < 3) {
|
|
43
|
+
entry.evidence.push({
|
|
44
|
+
file: file.rel,
|
|
45
|
+
line,
|
|
46
|
+
snippet: block.split("\n")[0].slice(0, 120),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
blockOccurrences.set(block, entry);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const conventions = [];
|
|
53
|
+
const anomalies = [];
|
|
54
|
+
let convIdx = 0;
|
|
55
|
+
let anomIdx = 0;
|
|
56
|
+
const sharedBlocks = [...blockOccurrences.entries()]
|
|
57
|
+
.filter(([, v]) => v.files.size >= 2)
|
|
58
|
+
.sort((a, b) => a[0].localeCompare(b[0]));
|
|
59
|
+
for (const [block, meta] of sharedBlocks.slice(0, 10)) {
|
|
60
|
+
convIdx += 1;
|
|
61
|
+
const fileList = [...meta.files].sort();
|
|
62
|
+
conventions.push({
|
|
63
|
+
id: `conv-${convIdx}`,
|
|
64
|
+
description: `Verbatim boilerplate in ${fileList.length} files: "${block.split("\n")[0].slice(0, 60)}…"`,
|
|
65
|
+
coverage_pct: Math.round((fileList.length / files.length) * 100),
|
|
66
|
+
evidence: meta.evidence,
|
|
67
|
+
});
|
|
68
|
+
for (const file of files) {
|
|
69
|
+
if (meta.files.has(file.rel))
|
|
70
|
+
continue;
|
|
71
|
+
if (!file.body.includes(block)) {
|
|
72
|
+
anomIdx += 1;
|
|
73
|
+
anomalies.push({
|
|
74
|
+
id: `anom-${anomIdx}`,
|
|
75
|
+
description: `${file.rel} missing verbatim boilerplate present in ${fileList.length} sibling file(s)`,
|
|
76
|
+
coverage_pct: 0,
|
|
77
|
+
evidence: [
|
|
78
|
+
{
|
|
79
|
+
file: file.rel,
|
|
80
|
+
line: 1,
|
|
81
|
+
snippet: `(missing block starting: ${block.split("\n")[0].slice(0, 80)})`,
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
});
|
|
85
|
+
if (anomIdx >= 5)
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const fmKeyCounts = new Map();
|
|
91
|
+
for (const file of files) {
|
|
92
|
+
for (const key of extractFrontmatterKeys(file.body)) {
|
|
93
|
+
fmKeyCounts.set(key, (fmKeyCounts.get(key) ?? 0) + 1);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
for (const [key, count] of [...fmKeyCounts.entries()].sort((a, b) => a[0].localeCompare(b[0]))) {
|
|
97
|
+
if (count < 2)
|
|
98
|
+
continue;
|
|
99
|
+
convIdx += 1;
|
|
100
|
+
conventions.push({
|
|
101
|
+
id: `conv-fm-${convIdx}`,
|
|
102
|
+
description: `YAML frontmatter key "${key}" in ${count}/${files.length} files`,
|
|
103
|
+
coverage_pct: Math.round((count / files.length) * 100),
|
|
104
|
+
evidence: files
|
|
105
|
+
.filter((f) => extractFrontmatterKeys(f.body).includes(key))
|
|
106
|
+
.slice(0, 2)
|
|
107
|
+
.map((f) => ({ file: f.rel, line: 1, snippet: `${key}:` })),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
conventions: conventions.sort((a, b) => a.id.localeCompare(b.id)),
|
|
112
|
+
anomalies: anomalies.sort((a, b) => a.id.localeCompare(b.id)),
|
|
113
|
+
dependency_edges: [],
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function escapeRegexLiteral(s) {
|
|
117
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
118
|
+
}
|
|
119
|
+
function buildContentBlueprintQuestions(conventions, anomalies) {
|
|
120
|
+
const questions = [];
|
|
121
|
+
for (const [i, anomaly] of anomalies.entries()) {
|
|
122
|
+
const ev = anomaly.evidence[0];
|
|
123
|
+
questions.push({
|
|
124
|
+
id: `q-${i + 1}`,
|
|
125
|
+
message: `${anomaly.description} — evidence at ${ev.file}:${ev.line}. Require this boilerplate in all files?`,
|
|
126
|
+
evidence: { file: ev.file, line: ev.line },
|
|
127
|
+
ruleId: `rule-${i + 1}`,
|
|
128
|
+
evidenceSnippet: ev.snippet,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
for (const [i, conv] of conventions.entries()) {
|
|
132
|
+
if (questions.length >= 5)
|
|
133
|
+
break;
|
|
134
|
+
const ev = conv.evidence[0];
|
|
135
|
+
if (!ev)
|
|
136
|
+
continue;
|
|
137
|
+
questions.push({
|
|
138
|
+
id: `q-conv-${i + 1}`,
|
|
139
|
+
message: `${conv.description}. Enforce via require_pattern at ${ev.file}:${ev.line}?`,
|
|
140
|
+
evidence: { file: ev.file, line: ev.line },
|
|
141
|
+
ruleId: `rule-conv-${i + 1}`,
|
|
142
|
+
evidenceSnippet: ev.snippet,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
return questions.slice(0, Math.max(3, questions.length));
|
|
146
|
+
}
|
|
147
|
+
function buildContentRule(question, choice, evidence) {
|
|
148
|
+
if (choice === "legacy")
|
|
149
|
+
return null;
|
|
150
|
+
const snippet = question.evidenceSnippet ?? evidence.snippet;
|
|
151
|
+
if (snippet.startsWith("(missing block")) {
|
|
152
|
+
const inner = /starting: (.+)\)/.exec(snippet)?.[1];
|
|
153
|
+
if (!inner || choice !== "enforce")
|
|
154
|
+
return null;
|
|
155
|
+
return {
|
|
156
|
+
id: question.ruleId,
|
|
157
|
+
from_layer: "content",
|
|
158
|
+
applies_to: ["content/**"],
|
|
159
|
+
require_pattern: escapeRegexLiteral(inner.trim()),
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
if (snippet.includes("…") || snippet.length < 8) {
|
|
163
|
+
return {
|
|
164
|
+
id: question.ruleId,
|
|
165
|
+
from_layer: "content",
|
|
166
|
+
applies_to: ["content/**"],
|
|
167
|
+
require_pattern: escapeRegexLiteral(snippet.replace(/…$/, "").trim()),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
if (choice === "enforce") {
|
|
171
|
+
return {
|
|
172
|
+
id: question.ruleId,
|
|
173
|
+
from_layer: "content",
|
|
174
|
+
applies_to: ["content/**"],
|
|
175
|
+
require_pattern: escapeRegexLiteral(snippet.trim()),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
export const contentDomainAdapter = {
|
|
181
|
+
key: "content",
|
|
182
|
+
label: "Brand/compliance content (markdown, HTML, text)",
|
|
183
|
+
fileExtensions: [".md", ".html", ".htm", ".txt", ".json"],
|
|
184
|
+
defaultScanGlobs: ["content/**"],
|
|
185
|
+
extractEvidence: (_repoRoot, files) => extractContentEvidence(files),
|
|
186
|
+
buildBlueprintQuestions: buildContentBlueprintQuestions,
|
|
187
|
+
buildRuleFromAnswer: (q, choice, ev) => buildContentRule(q, choice, ev),
|
|
188
|
+
};
|
|
189
|
+
registerDomainAdapter(contentDomainAdapter);
|
|
190
|
+
//# sourceMappingURL=domain-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-content.js","sourceRoot":"","sources":["../../../../src/cli/lib/domains/domain-content.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Side-effect imports register built-in domain adapters. */
|
|
2
|
+
import "./domain-code.js";
|
|
3
|
+
import "./domain-content.js";
|
|
4
|
+
export { getDomainAdapter, listDomainKeys, isDomainFile, registerDomainAdapter, type DomainAdapter, type DomainKey, type DomainBlueprintQuestion, type DomainEnforcementChoice, type DomainFileRecord, type DomainEvidenceResult, } from "./domain-adapter.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/domains/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,OAAO,kBAAkB,CAAC;AAC1B,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/lib/domains/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,OAAO,kBAAkB,CAAC;AAC1B,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,qBAAqB,GAOtB,MAAM,qBAAqB,CAAC"}
|
package/dist/cli/lib/errors.d.ts
CHANGED
|
@@ -11,12 +11,6 @@ export declare class GantryUserError extends Error {
|
|
|
11
11
|
get gxtCode(): string;
|
|
12
12
|
}
|
|
13
13
|
export declare function isGantryUserError(e: unknown): e is GantryUserError;
|
|
14
|
-
/** @deprecated Use {@link GantryUserError}; alias kept for one release (v2.7.0). */
|
|
15
|
-
export declare const GapmanUserError: typeof GantryUserError;
|
|
16
|
-
/** @deprecated Use {@link GantryUserError}; alias kept for one release (v2.7.0). */
|
|
17
|
-
export type GapmanUserError = GantryUserError;
|
|
18
|
-
/** @deprecated Use {@link isGantryUserError}; alias kept for one release (v2.7.0). */
|
|
19
|
-
export declare const isGapmanUserError: typeof isGantryUserError;
|
|
20
14
|
/** User-facing failure reporter: message + optional Fix: hint, no stack by default. */
|
|
21
15
|
export declare function reportUserFacingError(e: unknown): void;
|
|
22
16
|
export interface UserFacingErrorJson {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/errors.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,sFAAsF;AACtF,qBAAa,eAAgB,SAAQ,KAAK;IAEtC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAErB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;IACtB,QAAQ,CAAC,QAAQ;gBAHR,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACN,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,QAAQ,SAAI;IAMvB,oDAAoD;IACpD,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,eAAe,CAElE;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/errors.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,sFAAsF;AACtF,qBAAa,eAAgB,SAAQ,KAAK;IAEtC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAErB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;IACtB,QAAQ,CAAC,QAAQ;gBAHR,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACN,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,QAAQ,SAAI;IAMvB,oDAAoD;IACpD,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,eAAe,CAElE;AASD,uFAAuF;AACvF,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAkBtD;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAWrE;AAED,MAAM,WAAW,iBAAiB;IAChC,CAAC,EAAE,CAAC,CAAC;IACL,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE/D;AAsCD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,iBAAiB,GACxB,iBAAiB,CAmBnB"}
|
package/dist/cli/lib/errors.js
CHANGED
|
@@ -25,10 +25,6 @@ export class GantryUserError extends Error {
|
|
|
25
25
|
export function isGantryUserError(e) {
|
|
26
26
|
return e instanceof GantryUserError;
|
|
27
27
|
}
|
|
28
|
-
/** @deprecated Use {@link GantryUserError}; alias kept for one release (v2.7.0). */
|
|
29
|
-
export const GapmanUserError = GantryUserError;
|
|
30
|
-
/** @deprecated Use {@link isGantryUserError}; alias kept for one release (v2.7.0). */
|
|
31
|
-
export const isGapmanUserError = isGantryUserError;
|
|
32
28
|
function logUnexpectedError(error) {
|
|
33
29
|
if (readEnvWithLegacy("DEBUG") === "1") {
|
|
34
30
|
logError(error.stack ?? error.message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/cli/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAKtD,sFAAsF;AACtF,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAE7B;IAEA;IACA;IAJX,YACW,IAAY,EACrB,OAAe,EACN,IAAa,EACb,WAAW,CAAC;QAErB,KAAK,CAAC,OAAO,CAAC,CAAC;QALN,SAAI,GAAJ,IAAI,CAAQ;QAEZ,SAAI,GAAJ,IAAI,CAAS;QACb,aAAQ,GAAR,QAAQ,CAAI;QAGrB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;IAED,oDAAoD;IACpD,IAAI,OAAO;QACT,OAAO,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;CACF;AAED,MAAM,UAAU,iBAAiB,CAAC,CAAU;IAC1C,OAAO,CAAC,YAAY,eAAe,CAAC;AACtC,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/cli/lib/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,4 @@ export declare function mapGitProofCodeToGxt(code: string): GxtErrorCode;
|
|
|
32
32
|
export declare function gxtCodeFromGantryUserError(code: string): GxtErrorCode;
|
|
33
33
|
/** @internal Test helper — returns undefined when code would fall through to VERIFY_FAILED unexpectedly. */
|
|
34
34
|
export declare function isKnownGantryUserErrorCode(code: string): boolean;
|
|
35
|
-
/** @deprecated Use {@link gxtCodeFromGantryUserError}; alias kept for one release (v2.7.0). */
|
|
36
|
-
export declare const gxtCodeFromGapmanUserError: typeof gxtCodeFromGantryUserError;
|
|
37
35
|
//# sourceMappingURL=gxt-error-codes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gxt-error-codes.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/gxt-error-codes.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;CAyBZ,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AA6BtE,8DAA8D;AAC9D,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAMnE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAE/D;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAMrE;AAED,4GAA4G;AAC5G,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhE
|
|
1
|
+
{"version":3,"file":"gxt-error-codes.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/gxt-error-codes.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;CAyBZ,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AA6BtE,8DAA8D;AAC9D,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAMnE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAE/D;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAMrE;AAED,4GAA4G;AAC5G,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhE"}
|
|
@@ -76,6 +76,4 @@ export function gxtCodeFromGantryUserError(code) {
|
|
|
76
76
|
export function isKnownGantryUserErrorCode(code) {
|
|
77
77
|
return code.startsWith("GXT_") || code in GIT_PROOF_TO_GXT || code in GANTRY_USER_ERROR_TO_GXT;
|
|
78
78
|
}
|
|
79
|
-
/** @deprecated Use {@link gxtCodeFromGantryUserError}; alias kept for one release (v2.7.0). */
|
|
80
|
-
export const gxtCodeFromGapmanUserError = gxtCodeFromGantryUserError;
|
|
81
79
|
//# sourceMappingURL=gxt-error-codes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gxt-error-codes.js","sourceRoot":"","sources":["../../../src/cli/lib/gxt-error-codes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"gxt-error-codes.js","sourceRoot":"","sources":["../../../src/cli/lib/gxt-error-codes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type DiscoveryApplyResult } from "./discovery-proposal.js";
|
|
2
|
+
import type { DiscoveryProposal } from "./discovery-scanner.js";
|
|
3
|
+
export interface InitDiscoverOptions {
|
|
4
|
+
yes?: boolean;
|
|
5
|
+
stdout?: boolean;
|
|
6
|
+
domain?: string;
|
|
7
|
+
onProgress?: (filesScanned: number) => void;
|
|
8
|
+
}
|
|
9
|
+
/** Run gantry init --discover: emit proposal, optionally apply after confirmation. */
|
|
10
|
+
export declare function runInitDiscoverFlow(repoRoot: string, options?: InitDiscoverOptions): Promise<{
|
|
11
|
+
proposal: DiscoveryProposal;
|
|
12
|
+
applied: DiscoveryApplyResult | null;
|
|
13
|
+
}>;
|
|
14
|
+
//# sourceMappingURL=init-discover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-discover.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/init-discover.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAWD,sFAAsF;AACtF,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC;IAAE,QAAQ,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAA;CAAE,CAAC,CAwChF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { CLI_NAME } from "./constants.js";
|
|
2
|
+
import { logInfo } from "./cli-io.js";
|
|
3
|
+
import { applyDiscoveryProposal, emitDiscoveryProposal, } from "./discovery-proposal.js";
|
|
4
|
+
async function promptConfirmApply() {
|
|
5
|
+
const { confirm, isCancel } = await import("@clack/prompts");
|
|
6
|
+
const answer = await confirm({
|
|
7
|
+
message: "Apply discovery proposal to TARGET_ARCHITECTURE.yaml and MANIFEST.json?",
|
|
8
|
+
});
|
|
9
|
+
if (isCancel(answer) || answer !== true)
|
|
10
|
+
return false;
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
/** Run gantry init --discover: emit proposal, optionally apply after confirmation. */
|
|
14
|
+
export async function runInitDiscoverFlow(repoRoot, options = {}) {
|
|
15
|
+
const started = Date.now();
|
|
16
|
+
let progressLogged = false;
|
|
17
|
+
const { proposal, proposalPath } = emitDiscoveryProposal(repoRoot, {
|
|
18
|
+
domain: options.domain,
|
|
19
|
+
onProgress: (n) => {
|
|
20
|
+
if (!progressLogged && Date.now() - started > 1000) {
|
|
21
|
+
logInfo(`${CLI_NAME} discover: scanning… (${n} files so far)`);
|
|
22
|
+
progressLogged = true;
|
|
23
|
+
}
|
|
24
|
+
options.onProgress?.(n);
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
if (options.stdout) {
|
|
28
|
+
process.stdout.write(`${JSON.stringify(proposal, null, 2)}\n`);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
logInfo(`${CLI_NAME} discover: wrote ${proposalPath} (${proposal.scan_stats.files_scanned} files, ${proposal.scan_stats.duration_ms}ms)`);
|
|
32
|
+
logInfo(`${CLI_NAME} discover: ${proposal.conventions.length} convention(s), ${proposal.anomalies.length} anomaly(ies)`);
|
|
33
|
+
}
|
|
34
|
+
if (proposal.conventions.length === 0 && proposal.anomalies.length === 0) {
|
|
35
|
+
logInfo(`${CLI_NAME} discover: no conventions detected — refine scan roots or add source files`);
|
|
36
|
+
}
|
|
37
|
+
const shouldApply = options.yes === true || (options.stdout !== true && (await promptConfirmApply()));
|
|
38
|
+
if (!shouldApply) {
|
|
39
|
+
return { proposal, applied: null };
|
|
40
|
+
}
|
|
41
|
+
const applied = applyDiscoveryProposal(repoRoot, proposal);
|
|
42
|
+
logInfo(`${CLI_NAME} discover: applied ${applied.targetArchitecturePath} and ${applied.manifestPath}`);
|
|
43
|
+
return { proposal, applied };
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=init-discover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-discover.js","sourceRoot":"","sources":["../../../src/cli/lib/init-discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GAEtB,MAAM,yBAAyB,CAAC;AAUjC,KAAK,UAAU,kBAAkB;IAC/B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;QAC3B,OAAO,EAAE,yEAAyE;KACnF,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,UAA+B,EAAE;IAEjC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,qBAAqB,CAAC,QAAQ,EAAE;QACjE,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;YAChB,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,EAAE,CAAC;gBACnD,OAAO,CAAC,GAAG,QAAQ,yBAAyB,CAAC,gBAAgB,CAAC,CAAC;gBAC/D,cAAc,GAAG,IAAI,CAAC;YACxB,CAAC;YACD,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,OAAO,CACL,GAAG,QAAQ,oBAAoB,YAAY,KAAK,QAAQ,CAAC,UAAU,CAAC,aAAa,WAAW,QAAQ,CAAC,UAAU,CAAC,WAAW,KAAK,CACjI,CAAC;QACF,OAAO,CACL,GAAG,QAAQ,cAAc,QAAQ,CAAC,WAAW,CAAC,MAAM,mBAAmB,QAAQ,CAAC,SAAS,CAAC,MAAM,eAAe,CAChH,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzE,OAAO,CAAC,GAAG,QAAQ,4EAA4E,CAAC,CAAC;IACnG,CAAC;IAED,MAAM,WAAW,GACf,OAAO,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,kBAAkB,EAAE,CAAC,CAAC,CAAC;IACpF,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3D,OAAO,CACL,GAAG,QAAQ,sBAAsB,OAAO,CAAC,sBAAsB,QAAQ,OAAO,CAAC,YAAY,EAAE,CAC9F,CAAC;IACF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export declare const TARGET_ARCHITECTURE_FILENAME: "TARGET_ARCHITECTURE.yaml";
|
|
2
|
-
export declare const TARGET_ARCHITECTURE_SCHEMA_VERSION: "0.2.0";
|
|
3
2
|
export declare const TARGET_ARCHITECTURE_LEGACY_SCHEMA_VERSION: "0.1.0";
|
|
4
|
-
export declare const
|
|
3
|
+
export declare const TARGET_ARCHITECTURE_SCHEMA_VERSION: "0.2.0";
|
|
4
|
+
export declare const TARGET_ARCHITECTURE_V3_SCHEMA_VERSION: "0.3.0";
|
|
5
|
+
export declare const SUPPORTED_TARGET_ARCHITECTURE_SCHEMA_VERSIONS: readonly ["0.1.0", "0.2.0", "0.3.0"];
|
|
5
6
|
export type TargetArchitectureSchemaVersion = (typeof SUPPORTED_TARGET_ARCHITECTURE_SCHEMA_VERSIONS)[number];
|
|
6
7
|
export interface ArchLayerSpec {
|
|
7
8
|
id: string;
|
|
@@ -13,9 +14,15 @@ export interface ArchRuleSpec {
|
|
|
13
14
|
forbid_import_layer?: string;
|
|
14
15
|
forbid_specifier_substring?: string;
|
|
15
16
|
forbid_resolved_path_substring?: string;
|
|
17
|
+
/** Schema 0.3.0: glob(s) for pattern rules (content domain). */
|
|
18
|
+
applies_to?: string[];
|
|
19
|
+
forbid_pattern?: string;
|
|
20
|
+
require_pattern?: string;
|
|
16
21
|
}
|
|
17
22
|
export interface TargetArchitectureSpec {
|
|
18
23
|
schema_version: TargetArchitectureSchemaVersion;
|
|
24
|
+
/** Schema 0.3.0: domain adapter key (code | content). */
|
|
25
|
+
domain?: string;
|
|
19
26
|
/** Explicit scan roots (schema 0.2.0+). When absent, derived from layer globs. */
|
|
20
27
|
scan_roots?: string[];
|
|
21
28
|
/** Supported languages for boundary checks (default: typescript). */
|
|
@@ -48,5 +55,7 @@ export declare function checkArchBoundariesForFiles(spec: TargetArchitectureSpec
|
|
|
48
55
|
export declare function runArchCheck(repoRoot: string, files: readonly string[], options?: {
|
|
49
56
|
manifestTmvcRoots?: readonly string[];
|
|
50
57
|
}): ArchCheckResult;
|
|
51
|
-
export declare function formatArchCheckHuman(result: ArchCheckResult): string;
|
|
58
|
+
export declare function formatArchCheckHuman(result: ArchCheckResult, label?: "arch" | "perimeter"): string;
|
|
59
|
+
/** Walk all files under scan_roots for the spec's domain. */
|
|
60
|
+
export declare function walkPerimeterFiles(repoRoot: string, spec: TargetArchitectureSpec): string[];
|
|
52
61
|
//# sourceMappingURL=target-architecture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target-architecture.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/target-architecture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"target-architecture.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/target-architecture.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,12 +5,16 @@ import { CLI_NAME } from "./constants.js";
|
|
|
5
5
|
import { toPosixRel } from "./cli-io.js";
|
|
6
6
|
import { normalizeRepoRelativePath } from "./tmvc-path.js";
|
|
7
7
|
import { extractBindingsFromSnippet, extractImportsWithMeta, } from "./import-scanner.js";
|
|
8
|
+
import { walkDomainFiles } from "./discovery-scanner.js";
|
|
9
|
+
import { getDomainAdapter } from "./domains/index.js";
|
|
8
10
|
export const TARGET_ARCHITECTURE_FILENAME = "TARGET_ARCHITECTURE.yaml";
|
|
9
|
-
export const TARGET_ARCHITECTURE_SCHEMA_VERSION = "0.2.0";
|
|
10
11
|
export const TARGET_ARCHITECTURE_LEGACY_SCHEMA_VERSION = "0.1.0";
|
|
12
|
+
export const TARGET_ARCHITECTURE_SCHEMA_VERSION = "0.2.0";
|
|
13
|
+
export const TARGET_ARCHITECTURE_V3_SCHEMA_VERSION = "0.3.0";
|
|
11
14
|
export const SUPPORTED_TARGET_ARCHITECTURE_SCHEMA_VERSIONS = [
|
|
12
15
|
TARGET_ARCHITECTURE_LEGACY_SCHEMA_VERSION,
|
|
13
16
|
TARGET_ARCHITECTURE_SCHEMA_VERSION,
|
|
17
|
+
TARGET_ARCHITECTURE_V3_SCHEMA_VERSION,
|
|
14
18
|
];
|
|
15
19
|
function globMatches(repoRel, glob) {
|
|
16
20
|
const norm = normalizeRepoRelativePath(repoRel);
|
|
@@ -83,7 +87,12 @@ export function targetArchitectureMigrationHint(version) {
|
|
|
83
87
|
/** Derive scan roots from spec layers or optional manifest TMVC fallback. */
|
|
84
88
|
export function resolveArchScanRoots(spec, manifestTmvcRoots) {
|
|
85
89
|
if (spec.scan_roots && spec.scan_roots.length > 0) {
|
|
86
|
-
return spec.scan_roots.map(
|
|
90
|
+
return spec.scan_roots.map((root) => {
|
|
91
|
+
const norm = normalizeRepoRelativePath(root);
|
|
92
|
+
if (norm.includes("*"))
|
|
93
|
+
return norm;
|
|
94
|
+
return `${norm.replace(/\/$/, "")}/**`;
|
|
95
|
+
});
|
|
87
96
|
}
|
|
88
97
|
const fromLayers = spec.layers.flatMap((layer) => layer.globs.map(normalizeRepoRelativePath));
|
|
89
98
|
if (fromLayers.length > 0)
|
|
@@ -105,8 +114,75 @@ function fileMatchesScanRoots(repoRel, scanRoots) {
|
|
|
105
114
|
const norm = normalizeRepoRelativePath(repoRel);
|
|
106
115
|
return scanRoots.some((root) => globMatches(norm, root));
|
|
107
116
|
}
|
|
108
|
-
function
|
|
117
|
+
function fileMatchesAppliesTo(repoRel, appliesTo, scanRoots) {
|
|
118
|
+
if (appliesTo && appliesTo.length > 0) {
|
|
119
|
+
return appliesTo.some((g) => globMatches(repoRel, g));
|
|
120
|
+
}
|
|
121
|
+
return fileMatchesScanRoots(repoRel, scanRoots);
|
|
122
|
+
}
|
|
123
|
+
function isImportRule(rule) {
|
|
124
|
+
return (rule.forbid_import_layer != null ||
|
|
125
|
+
rule.forbid_specifier_substring != null ||
|
|
126
|
+
rule.forbid_resolved_path_substring != null);
|
|
127
|
+
}
|
|
128
|
+
function isPatternRule(rule) {
|
|
129
|
+
return rule.forbid_pattern != null || rule.require_pattern != null;
|
|
130
|
+
}
|
|
131
|
+
function shouldEvaluateImportRules(spec) {
|
|
132
|
+
const domain = spec.domain?.toLowerCase();
|
|
133
|
+
return domain == null || domain === "" || domain === "code";
|
|
134
|
+
}
|
|
135
|
+
function compilePerimeterPattern(pattern) {
|
|
136
|
+
try {
|
|
137
|
+
if (pattern.startsWith("(?i)")) {
|
|
138
|
+
return new RegExp(pattern.slice(4), "im");
|
|
139
|
+
}
|
|
140
|
+
return new RegExp(pattern, "m");
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function findPatternMatchLine(body, pattern) {
|
|
147
|
+
const re = compilePerimeterPattern(pattern);
|
|
148
|
+
if (!re)
|
|
149
|
+
return null;
|
|
150
|
+
const m = re.exec(body);
|
|
151
|
+
if (!m || m.index == null)
|
|
152
|
+
return null;
|
|
153
|
+
const before = body.slice(0, m.index);
|
|
154
|
+
const line = before.split(/\r?\n/).length;
|
|
155
|
+
const lastNl = before.lastIndexOf("\n");
|
|
156
|
+
const column = m.index - (lastNl === -1 ? 0 : lastNl + 1) + 1;
|
|
157
|
+
return { line, column, match: m[0] ?? "" };
|
|
158
|
+
}
|
|
159
|
+
function checkPatternRulesForFile(violations, repoRel, body, rules, scanRoots) {
|
|
160
|
+
for (const rule of rules) {
|
|
161
|
+
if (!isPatternRule(rule))
|
|
162
|
+
continue;
|
|
163
|
+
if (!fileMatchesAppliesTo(repoRel, rule.applies_to, scanRoots))
|
|
164
|
+
continue;
|
|
165
|
+
if (rule.forbid_pattern) {
|
|
166
|
+
const hit = findPatternMatchLine(body, rule.forbid_pattern);
|
|
167
|
+
if (hit) {
|
|
168
|
+
recordViolation(violations, repoRel, rule.id, hit.match, [], hit.line, hit.column);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (rule.require_pattern) {
|
|
172
|
+
const hit = findPatternMatchLine(body, rule.require_pattern);
|
|
173
|
+
if (!hit) {
|
|
174
|
+
recordViolation(violations, repoRel, rule.id, `(missing: ${rule.require_pattern})`, [], 1, 1);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
function fileMatchesLanguage(repoRel, languages, domain) {
|
|
109
180
|
const norm = normalizeRepoRelativePath(repoRel).toLowerCase();
|
|
181
|
+
if (domain === "content") {
|
|
182
|
+
return /\.(md|html|htm|txt|json)$/i.test(norm);
|
|
183
|
+
}
|
|
184
|
+
if (languages.includes("typescript") && /\.tsx?$/i.test(norm))
|
|
185
|
+
return true;
|
|
110
186
|
if (languages.includes("typescript") && norm.endsWith(".ts"))
|
|
111
187
|
return true;
|
|
112
188
|
return false;
|
|
@@ -125,6 +201,7 @@ export function validateTargetArchitecture(raw) {
|
|
|
125
201
|
}
|
|
126
202
|
const scan_roots = parseStringArrayField(o.scan_roots, "scan_roots");
|
|
127
203
|
const languages = parseStringArrayField(o.languages, "languages");
|
|
204
|
+
const domain = typeof o.domain === "string" ? o.domain.trim() : undefined;
|
|
128
205
|
const layers = o.layers.map((layer, i) => {
|
|
129
206
|
if (layer == null || typeof layer !== "object") {
|
|
130
207
|
throw new Error(`TARGET_ARCHITECTURE.yaml: layers[${String(i)}] invalid`);
|
|
@@ -159,10 +236,16 @@ export function validateTargetArchitecture(raw) {
|
|
|
159
236
|
...(r.forbid_resolved_path_substring != null
|
|
160
237
|
? { forbid_resolved_path_substring: String(r.forbid_resolved_path_substring) }
|
|
161
238
|
: {}),
|
|
239
|
+
...(parseStringArrayField(r.applies_to, "applies_to")
|
|
240
|
+
? { applies_to: parseStringArrayField(r.applies_to, "applies_to") }
|
|
241
|
+
: {}),
|
|
242
|
+
...(r.forbid_pattern != null ? { forbid_pattern: String(r.forbid_pattern) } : {}),
|
|
243
|
+
...(r.require_pattern != null ? { require_pattern: String(r.require_pattern) } : {}),
|
|
162
244
|
};
|
|
163
245
|
});
|
|
164
246
|
return {
|
|
165
247
|
schema_version,
|
|
248
|
+
...(domain ? { domain } : {}),
|
|
166
249
|
...(scan_roots ? { scan_roots } : {}),
|
|
167
250
|
...(languages ? { languages } : {}),
|
|
168
251
|
layers,
|
|
@@ -185,23 +268,29 @@ export function checkArchBoundariesForFiles(spec, repoRoot, files, options = {})
|
|
|
185
268
|
const root = path.resolve(repoRoot);
|
|
186
269
|
const scanRoots = resolveArchScanRoots(spec, options.manifestTmvcRoots);
|
|
187
270
|
const languages = resolveArchLanguages(spec);
|
|
271
|
+
const evaluateImports = shouldEvaluateImportRules(spec);
|
|
188
272
|
for (const file of files) {
|
|
189
273
|
const abs = path.isAbsolute(file) ? path.resolve(file) : path.join(root, file);
|
|
190
274
|
const repoRel = toPosixRel(root, abs);
|
|
191
275
|
if (!fileMatchesScanRoots(repoRel, scanRoots))
|
|
192
276
|
continue;
|
|
193
|
-
if (!fileMatchesLanguage(repoRel, languages))
|
|
277
|
+
if (!fileMatchesLanguage(repoRel, languages, spec.domain))
|
|
194
278
|
continue;
|
|
195
279
|
if (!fs.existsSync(abs))
|
|
196
280
|
continue;
|
|
197
|
-
const fromLayer = layerForFile(spec, repoRel);
|
|
198
281
|
const src = fs.readFileSync(abs, "utf8");
|
|
282
|
+
checkPatternRulesForFile(violations, repoRel, src, spec.rules, scanRoots);
|
|
283
|
+
if (!evaluateImports)
|
|
284
|
+
continue;
|
|
285
|
+
const fromLayer = layerForFile(spec, repoRel);
|
|
199
286
|
const imports = extractImportsWithMeta(src, true);
|
|
200
287
|
for (const imp of imports) {
|
|
201
288
|
const bindings = extractBindingsFromSnippet(imp.snippet);
|
|
202
289
|
const resolved = resolveImportPath(repoRel, imp.spec);
|
|
203
290
|
const targetLayer = resolved ? layerForFile(spec, resolved) : "other";
|
|
204
291
|
for (const rule of spec.rules) {
|
|
292
|
+
if (!isImportRule(rule))
|
|
293
|
+
continue;
|
|
205
294
|
if (rule.from_layer !== fromLayer)
|
|
206
295
|
continue;
|
|
207
296
|
if (rule.forbid_import_layer && targetLayer === rule.forbid_import_layer) {
|
|
@@ -224,10 +313,21 @@ export function runArchCheck(repoRoot, files, options = {}) {
|
|
|
224
313
|
const absFiles = files.map((f) => path.isAbsolute(f) ? f : path.join(repoRoot, f.replace(/\\/g, path.sep)));
|
|
225
314
|
return checkArchBoundariesForFiles(spec, repoRoot, absFiles, options);
|
|
226
315
|
}
|
|
227
|
-
export function formatArchCheckHuman(result) {
|
|
316
|
+
export function formatArchCheckHuman(result, label = "arch") {
|
|
228
317
|
if (result.ok)
|
|
229
|
-
return `${CLI_NAME}
|
|
318
|
+
return `${CLI_NAME} ${label} check: OK`;
|
|
230
319
|
const lines = result.violations.map((v) => `${v.file}:${String(v.line)}:${String(v.column)} ${v.rule_id} ${v.module_specifier}`);
|
|
231
|
-
return [`${CLI_NAME}
|
|
320
|
+
return [`${CLI_NAME} ${label} check: ${String(result.violations.length)} violation(s)`, ...lines].join("\n");
|
|
321
|
+
}
|
|
322
|
+
/** Walk all files under scan_roots for the spec's domain. */
|
|
323
|
+
export function walkPerimeterFiles(repoRoot, spec) {
|
|
324
|
+
const domain = spec.domain?.toLowerCase() ?? "code";
|
|
325
|
+
const adapter = getDomainAdapter(domain);
|
|
326
|
+
const scanRoots = resolveArchScanRoots(spec);
|
|
327
|
+
const all = walkDomainFiles(repoRoot, adapter.fileExtensions);
|
|
328
|
+
return all.filter((abs) => {
|
|
329
|
+
const rel = toPosixRel(repoRoot, abs);
|
|
330
|
+
return fileMatchesScanRoots(rel, scanRoots);
|
|
331
|
+
});
|
|
232
332
|
}
|
|
233
333
|
//# sourceMappingURL=target-architecture.js.map
|