@agent-teams/engineering-foundation 0.1.0 → 0.2.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 +20 -15
- package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.d.ts +6 -0
- package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.d.ts.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.js +199 -0
- package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.js.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.d.ts +27 -0
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.d.ts.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.js +7 -0
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.js.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.d.ts +5 -0
- package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.d.ts.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.js +219 -0
- package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.js.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.d.ts +5 -0
- package/dist/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.d.ts.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.js +2 -0
- package/dist/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.js.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/rules.d.ts +26 -0
- package/dist/capabilities/workspace-dependency-declarations/application/rules.d.ts.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/rules.js +28 -0
- package/dist/capabilities/workspace-dependency-declarations/application/rules.js.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/contract/config.d.ts +19 -0
- package/dist/capabilities/workspace-dependency-declarations/contract/config.d.ts.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/contract/config.js +10 -0
- package/dist/capabilities/workspace-dependency-declarations/contract/config.js.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/module.d.ts +3 -0
- package/dist/capabilities/workspace-dependency-declarations/module.d.ts.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/module.js +45 -0
- package/dist/capabilities/workspace-dependency-declarations/module.js.map +1 -0
- package/dist/capability-runtime.d.ts +34 -0
- package/dist/capability-runtime.d.ts.map +1 -0
- package/dist/capability-runtime.js +86 -0
- package/dist/capability-runtime.js.map +1 -0
- package/dist/check-contract.d.ts +56 -0
- package/dist/check-contract.d.ts.map +1 -0
- package/dist/check-contract.js +2 -0
- package/dist/check-contract.js.map +1 -0
- package/dist/check-runner.d.ts +11 -0
- package/dist/check-runner.d.ts.map +1 -0
- package/dist/check-runner.js +70 -0
- package/dist/check-runner.js.map +1 -0
- package/dist/cli.js +73 -8
- package/dist/cli.js.map +1 -1
- package/dist/composition/capability-registry.d.ts +3 -0
- package/dist/composition/capability-registry.d.ts.map +1 -0
- package/dist/composition/capability-registry.js +6 -0
- package/dist/composition/capability-registry.js.map +1 -0
- package/dist/foundation-config.d.ts +15 -0
- package/dist/foundation-config.d.ts.map +1 -0
- package/dist/foundation-config.js +10 -0
- package/dist/foundation-config.js.map +1 -0
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/local-mode/consumer-policy.d.ts +0 -1
- package/dist/local-mode/consumer-policy.d.ts.map +1 -1
- package/dist/local-mode/consumer-policy.js +1 -4
- package/dist/local-mode/consumer-policy.js.map +1 -1
- package/dist/local-mode/inspection.d.ts +1 -1
- package/dist/local-mode/inspection.d.ts.map +1 -1
- package/dist/local-mode/inspection.js +1 -1
- package/dist/local-mode/inspection.js.map +1 -1
- package/dist/local-mode/service.js +2 -1
- package/dist/local-mode/service.js.map +1 -1
- package/dist/package-self-check.d.ts.map +1 -1
- package/dist/package-self-check.js +11 -4
- package/dist/package-self-check.js.map +1 -1
- package/dist/report-renderer.d.ts +3 -0
- package/dist/report-renderer.d.ts.map +1 -0
- package/dist/report-renderer.js +31 -0
- package/dist/report-renderer.js.map +1 -0
- package/dist/schema-catalog.d.ts +7 -0
- package/dist/schema-catalog.d.ts.map +1 -0
- package/dist/schema-catalog.js +58 -0
- package/dist/schema-catalog.js.map +1 -0
- package/dist/semantic-version.d.ts +2 -0
- package/dist/semantic-version.d.ts.map +1 -0
- package/dist/semantic-version.js +5 -0
- package/dist/semantic-version.js.map +1 -0
- package/dist/strict-yaml.d.ts +6 -0
- package/dist/strict-yaml.d.ts.map +1 -0
- package/dist/strict-yaml.js +99 -0
- package/dist/strict-yaml.js.map +1 -0
- package/package.json +6 -1
- package/presets/oxlint/base.json +39 -0
- package/presets/oxlint/node.json +8 -0
- package/presets/typescript/base.json +17 -0
- package/presets/typescript/node.json +9 -0
- package/schemas/foundation-check-report/v1.schema.json +138 -0
- package/schemas/foundation-config/v1.schema.json +49 -0
- package/schemas/workspace-dependency-declarations/v1.schema.json +61 -0
- package/dist/config.d.ts +0 -18
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -106
- package/dist/config.js.map +0 -1
package/README.md
CHANGED
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
Development-only engineering foundation for Agent Teams repositories.
|
|
4
4
|
|
|
5
|
-
The package exposes
|
|
6
|
-
|
|
5
|
+
The package exposes strict YAML configuration, deterministic policy checks,
|
|
6
|
+
shared compiler/linter presets, and explicit local versus registry lifecycle
|
|
7
|
+
tooling. It is not a production runtime dependency.
|
|
7
8
|
|
|
8
9
|
Consumer CI should run both policy gates:
|
|
9
10
|
|
|
10
11
|
```bash
|
|
12
|
+
agent-teams-foundation check
|
|
11
13
|
agent-teams-foundation assert-dev-only
|
|
12
14
|
agent-teams-foundation assert-registry
|
|
13
15
|
```
|
|
@@ -16,17 +18,20 @@ Local attach accepts only a built target whose versioned local-mode protocol,
|
|
|
16
18
|
exports, runtime dependencies, and real CLI self-check agree with its package
|
|
17
19
|
metadata.
|
|
18
20
|
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
capabilities: {
|
|
27
|
-
architecture: { enabled: true, configPath: "architecture/package-catalog.yaml" },
|
|
28
|
-
documentation: { enabled: true, configPath: "docs/metadata.schema.json" },
|
|
29
|
-
lint: { enabled: true }
|
|
30
|
-
}
|
|
31
|
-
});
|
|
21
|
+
```yaml
|
|
22
|
+
schemaVersion: 1
|
|
23
|
+
project:
|
|
24
|
+
id: consumer-repository
|
|
25
|
+
capabilities:
|
|
26
|
+
workspace.dependency-declarations:
|
|
27
|
+
configPath: architecture/foundation/dependency-declarations.yaml
|
|
32
28
|
```
|
|
29
|
+
|
|
30
|
+
The root file is `foundation.config.yaml`. Use
|
|
31
|
+
`agent-teams-foundation schema foundation-config/v1` for its canonical schema
|
|
32
|
+
and `agent-teams-foundation explain <rule-id>` for rule guidance.
|
|
33
|
+
|
|
34
|
+
TypeScript consumers may extend
|
|
35
|
+
`@agent-teams/engineering-foundation/presets/typescript/node.json`. Oxlint JSON
|
|
36
|
+
configuration extends
|
|
37
|
+
`./node_modules/@agent-teams/engineering-foundation/presets/oxlint/node.json`.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { WorkspaceSnapshot } from "../../../application/model/workspace-snapshot.js";
|
|
2
|
+
import type { WorkspaceReader } from "../../../application/ports/workspace-reader.js";
|
|
3
|
+
export declare class PnpmWorkspaceReader implements WorkspaceReader {
|
|
4
|
+
read(consumerRoot: string, signal?: AbortSignal): Promise<WorkspaceSnapshot>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=pnpm-workspace-reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnpm-workspace-reader.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAIV,iBAAiB,EAClB,MAAM,kDAAkD,CAAC;AAE1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAmRtF,qBAAa,mBAAoB,YAAW,eAAe;IACnD,IAAI,CACR,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,iBAAiB,CAAC,CA2B5B;CACF"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { glob, readFile, realpath, stat } from "node:fs/promises";
|
|
2
|
+
import { isAbsolute, posix, relative, resolve, sep } from "node:path";
|
|
3
|
+
import { CapabilityInputError } from "../../../../../capability-runtime.js";
|
|
4
|
+
import { assertNotCancelled, loadStrictYamlFile } from "../../../../../strict-yaml.js";
|
|
5
|
+
import { DEPENDENCY_SECTIONS } from "../../../application/model/workspace-snapshot.js";
|
|
6
|
+
const MAX_MANIFEST_BYTES = 2 * 1024 * 1024;
|
|
7
|
+
const MAX_WORKSPACE_PACKAGES = 5_000;
|
|
8
|
+
const READ_CONCURRENCY = 32;
|
|
9
|
+
const IGNORED_GLOBS = [
|
|
10
|
+
"**/.git/**",
|
|
11
|
+
"**/node_modules/**",
|
|
12
|
+
"**/dist/**",
|
|
13
|
+
"**/coverage/**"
|
|
14
|
+
];
|
|
15
|
+
function inputError(code, message, phase) {
|
|
16
|
+
throw new CapabilityInputError({ code, message, phase, retryable: false });
|
|
17
|
+
}
|
|
18
|
+
function isRecord(value) {
|
|
19
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
20
|
+
}
|
|
21
|
+
function toPosixPath(path) {
|
|
22
|
+
return path.split(sep).join("/");
|
|
23
|
+
}
|
|
24
|
+
function validateWorkspacePatterns(value) {
|
|
25
|
+
if (value === undefined) {
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
if (!Array.isArray(value) ||
|
|
29
|
+
value.some((pattern) => typeof pattern !== "string" ||
|
|
30
|
+
pattern.length === 0 ||
|
|
31
|
+
pattern.includes("\\") ||
|
|
32
|
+
pattern.startsWith("/") ||
|
|
33
|
+
pattern.split("/").includes(".."))) {
|
|
34
|
+
inputError("PNPM_WORKSPACE_INVALID", "pnpm-workspace.yaml packages must contain repository-relative POSIX glob patterns.", "workspace-discovery");
|
|
35
|
+
}
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
function stringRecord(value, field, phase) {
|
|
39
|
+
if (!isRecord(value)) {
|
|
40
|
+
inputError("GOVERNED_INPUT_INVALID", `${field} must be an object.`, phase);
|
|
41
|
+
}
|
|
42
|
+
for (const [name, specifier] of Object.entries(value)) {
|
|
43
|
+
if (name.length === 0 || typeof specifier !== "string" || specifier.length === 0) {
|
|
44
|
+
inputError("GOVERNED_INPUT_INVALID", `${field} must contain non-empty string values.`, phase);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return value;
|
|
48
|
+
}
|
|
49
|
+
function optionalStringArray(value, field) {
|
|
50
|
+
if (value === undefined) {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
if (!Array.isArray(value) || value.some((entry) => typeof entry !== "string")) {
|
|
54
|
+
inputError("PACKAGE_MANIFEST_INVALID", `${field} must be an array of package names.`, "package-manifest");
|
|
55
|
+
}
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
async function readJsonManifest(consumerRoot, manifestPath, signal) {
|
|
59
|
+
assertNotCancelled(signal);
|
|
60
|
+
const canonicalRoot = await realpath(consumerRoot);
|
|
61
|
+
const absolutePath = resolve(canonicalRoot, manifestPath);
|
|
62
|
+
const canonicalPath = await realpath(absolutePath).catch(() => inputError("PACKAGE_MANIFEST_UNAVAILABLE", `Workspace package manifest is unavailable: ${manifestPath}.`, "package-manifest"));
|
|
63
|
+
const relation = relative(canonicalRoot, canonicalPath);
|
|
64
|
+
if (relation === ".." ||
|
|
65
|
+
relation.startsWith(`..${sep}`) ||
|
|
66
|
+
isAbsolute(relation)) {
|
|
67
|
+
inputError("PACKAGE_MANIFEST_ESCAPE", `Workspace package manifest escapes the consumer repository: ${manifestPath}.`, "package-manifest");
|
|
68
|
+
}
|
|
69
|
+
const metadata = await stat(canonicalPath);
|
|
70
|
+
if (!metadata.isFile() || metadata.size > MAX_MANIFEST_BYTES) {
|
|
71
|
+
inputError("PACKAGE_MANIFEST_INVALID", `Workspace package manifest must be a regular file no larger than ${MAX_MANIFEST_BYTES} bytes: ${manifestPath}.`, "package-manifest");
|
|
72
|
+
}
|
|
73
|
+
let input;
|
|
74
|
+
try {
|
|
75
|
+
input = JSON.parse(await readFile(canonicalPath, "utf8"));
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
inputError("PACKAGE_MANIFEST_INVALID", `Workspace package manifest is not valid JSON: ${manifestPath}.`, "package-manifest");
|
|
79
|
+
}
|
|
80
|
+
if (!isRecord(input)) {
|
|
81
|
+
inputError("PACKAGE_MANIFEST_INVALID", `Workspace package manifest must contain an object: ${manifestPath}.`, "package-manifest");
|
|
82
|
+
}
|
|
83
|
+
const packageName = typeof input.name === "string" && input.name.length > 0
|
|
84
|
+
? input.name
|
|
85
|
+
: `<unnamed:${manifestPath}>`;
|
|
86
|
+
const dependencies = [];
|
|
87
|
+
for (const section of DEPENDENCY_SECTIONS) {
|
|
88
|
+
if (input[section] === undefined) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const declarations = stringRecord(input[section], `${manifestPath} ${section}`, "package-manifest");
|
|
92
|
+
for (const [dependencyName, specifier] of Object.entries(declarations)) {
|
|
93
|
+
dependencies.push({
|
|
94
|
+
packageName,
|
|
95
|
+
manifestPath,
|
|
96
|
+
section,
|
|
97
|
+
dependencyName,
|
|
98
|
+
specifier
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const bundledDependencies = [
|
|
103
|
+
...optionalStringArray(input.bundleDependencies, `${manifestPath} bundleDependencies`),
|
|
104
|
+
...optionalStringArray(input.bundledDependencies, `${manifestPath} bundledDependencies`)
|
|
105
|
+
].toSorted();
|
|
106
|
+
return {
|
|
107
|
+
name: packageName,
|
|
108
|
+
manifestPath,
|
|
109
|
+
...(typeof input.packageManager === "string"
|
|
110
|
+
? { packageManager: input.packageManager }
|
|
111
|
+
: {}),
|
|
112
|
+
dependencies: dependencies.toSorted(compareDeclarations),
|
|
113
|
+
bundledDependencies
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function compareDeclarations(left, right) {
|
|
117
|
+
return (left.dependencyName.localeCompare(right.dependencyName) ||
|
|
118
|
+
left.section.localeCompare(right.section));
|
|
119
|
+
}
|
|
120
|
+
function parseCatalog(workspace, field) {
|
|
121
|
+
const value = workspace[field];
|
|
122
|
+
if (value === undefined) {
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
125
|
+
if (field === "catalog") {
|
|
126
|
+
return Object.entries(stringRecord(value, "catalog", "workspace-manifest")).map(([dependencyName, version]) => ({
|
|
127
|
+
catalogName: "default",
|
|
128
|
+
dependencyName,
|
|
129
|
+
version
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
if (!isRecord(value)) {
|
|
133
|
+
inputError("PNPM_WORKSPACE_INVALID", "catalogs must be an object.", "workspace-manifest");
|
|
134
|
+
}
|
|
135
|
+
const entries = [];
|
|
136
|
+
for (const [catalogName, catalog] of Object.entries(value)) {
|
|
137
|
+
for (const [dependencyName, version] of Object.entries(stringRecord(catalog, `catalogs.${catalogName}`, "workspace-manifest"))) {
|
|
138
|
+
entries.push({ catalogName, dependencyName, version });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return entries;
|
|
142
|
+
}
|
|
143
|
+
function selectedByPatterns(directory, patterns) {
|
|
144
|
+
if (directory === ".") {
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
const positive = patterns.filter((pattern) => !pattern.startsWith("!"));
|
|
148
|
+
const negative = patterns
|
|
149
|
+
.filter((pattern) => pattern.startsWith("!"))
|
|
150
|
+
.map((pattern) => pattern.slice(1));
|
|
151
|
+
return (positive.some((pattern) => posix.matchesGlob(directory, pattern)) &&
|
|
152
|
+
!negative.some((pattern) => posix.matchesGlob(directory, pattern)));
|
|
153
|
+
}
|
|
154
|
+
async function discoverManifestPaths(consumerRoot, patterns, signal) {
|
|
155
|
+
const manifests = new Set(["package.json"]);
|
|
156
|
+
for await (const candidate of glob("**/package.json", {
|
|
157
|
+
cwd: consumerRoot,
|
|
158
|
+
exclude: IGNORED_GLOBS
|
|
159
|
+
})) {
|
|
160
|
+
assertNotCancelled(signal);
|
|
161
|
+
const manifestPath = toPosixPath(candidate);
|
|
162
|
+
const directory = posix.dirname(manifestPath);
|
|
163
|
+
if (selectedByPatterns(directory, patterns)) {
|
|
164
|
+
manifests.add(manifestPath);
|
|
165
|
+
if (manifests.size > MAX_WORKSPACE_PACKAGES) {
|
|
166
|
+
inputError("WORKSPACE_LIMIT_EXCEEDED", `Workspace contains more than ${MAX_WORKSPACE_PACKAGES} package manifests.`, "workspace-discovery");
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return [...manifests].toSorted();
|
|
171
|
+
}
|
|
172
|
+
async function readManifestBatch(consumerRoot, paths, signal) {
|
|
173
|
+
const packages = [];
|
|
174
|
+
for (let index = 0; index < paths.length; index += READ_CONCURRENCY) {
|
|
175
|
+
const batch = paths.slice(index, index + READ_CONCURRENCY);
|
|
176
|
+
packages.push(...(await Promise.all(batch.map((path) => readJsonManifest(consumerRoot, path, signal)))));
|
|
177
|
+
}
|
|
178
|
+
return packages.toSorted((left, right) => left.manifestPath.localeCompare(right.manifestPath));
|
|
179
|
+
}
|
|
180
|
+
export class PnpmWorkspaceReader {
|
|
181
|
+
async read(consumerRoot, signal) {
|
|
182
|
+
const input = await loadStrictYamlFile(consumerRoot, "pnpm-workspace.yaml", "workspace-manifest", signal);
|
|
183
|
+
if (!isRecord(input)) {
|
|
184
|
+
inputError("PNPM_WORKSPACE_INVALID", "pnpm-workspace.yaml must contain an object.", "workspace-manifest");
|
|
185
|
+
}
|
|
186
|
+
const patterns = validateWorkspacePatterns(input.packages);
|
|
187
|
+
const manifestPaths = await discoverManifestPaths(consumerRoot, patterns, signal);
|
|
188
|
+
return {
|
|
189
|
+
...(typeof input.catalogMode === "string" ? { catalogMode: input.catalogMode } : {}),
|
|
190
|
+
catalogs: [
|
|
191
|
+
...parseCatalog(input, "catalog"),
|
|
192
|
+
...parseCatalog(input, "catalogs")
|
|
193
|
+
].toSorted((left, right) => left.catalogName.localeCompare(right.catalogName) ||
|
|
194
|
+
left.dependencyName.localeCompare(right.dependencyName)),
|
|
195
|
+
packages: await readManifestBatch(consumerRoot, manifestPaths, signal)
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=pnpm-workspace-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnpm-workspace-reader.js","sourceRoot":"","sources":["../../../../../../src/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare const DEPENDENCY_SECTIONS: readonly ["dependencies", "devDependencies", "optionalDependencies", "peerDependencies"];
|
|
2
|
+
export type DependencySection = (typeof DEPENDENCY_SECTIONS)[number];
|
|
3
|
+
export interface DependencyDeclaration {
|
|
4
|
+
readonly packageName: string;
|
|
5
|
+
readonly manifestPath: string;
|
|
6
|
+
readonly section: DependencySection;
|
|
7
|
+
readonly dependencyName: string;
|
|
8
|
+
readonly specifier: string;
|
|
9
|
+
}
|
|
10
|
+
export interface WorkspacePackage {
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly manifestPath: string;
|
|
13
|
+
readonly packageManager?: string;
|
|
14
|
+
readonly dependencies: readonly DependencyDeclaration[];
|
|
15
|
+
readonly bundledDependencies: readonly string[];
|
|
16
|
+
}
|
|
17
|
+
export interface CatalogEntry {
|
|
18
|
+
readonly catalogName: string;
|
|
19
|
+
readonly dependencyName: string;
|
|
20
|
+
readonly version: string;
|
|
21
|
+
}
|
|
22
|
+
export interface WorkspaceSnapshot {
|
|
23
|
+
readonly catalogMode?: string;
|
|
24
|
+
readonly catalogs: readonly CatalogEntry[];
|
|
25
|
+
readonly packages: readonly WorkspacePackage[];
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=workspace-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-snapshot.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,YAC9B,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,CACV,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACxD,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAChD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-snapshot.js","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,cAAc;IACd,iBAAiB;IACjB,sBAAsB;IACtB,kBAAkB;CACV,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FoundationDiagnostic } from "../../../../check-contract.js";
|
|
2
|
+
import type { WorkspaceDependencyDeclarationsConfig } from "../../contract/config.js";
|
|
3
|
+
import type { WorkspaceSnapshot } from "../model/workspace-snapshot.js";
|
|
4
|
+
export declare function evaluateWorkspaceDependencies(snapshot: WorkspaceSnapshot, config: WorkspaceDependencyDeclarationsConfig): readonly FoundationDiagnostic[];
|
|
5
|
+
//# sourceMappingURL=evaluate-workspace-dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate-workspace-dependencies.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EACrB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,gCAAgC,CAAC;AAuRxC,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,qCAAqC,GAC5C,SAAS,oBAAoB,EAAE,CAOjC"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { isExactVersion } from "../../../../semantic-version.js";
|
|
2
|
+
import { RULES } from "../rules.js";
|
|
3
|
+
function diagnostic(input) {
|
|
4
|
+
return {
|
|
5
|
+
ruleId: input.rule.id,
|
|
6
|
+
severity: input.rule.severity,
|
|
7
|
+
subject: input.subject,
|
|
8
|
+
message: input.message,
|
|
9
|
+
location: { path: input.path },
|
|
10
|
+
relatedLocations: [],
|
|
11
|
+
evidence: input.evidence ?? [],
|
|
12
|
+
remediation: input.rule.remediation,
|
|
13
|
+
requiresArchitectureReview: input.rule.requiresArchitectureReview
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function declarationSubject(declaration) {
|
|
17
|
+
return `${declaration.packageName}:${declaration.section}:${declaration.dependencyName}`;
|
|
18
|
+
}
|
|
19
|
+
function catalogName(specifier) {
|
|
20
|
+
if (specifier === "catalog:") {
|
|
21
|
+
return "default";
|
|
22
|
+
}
|
|
23
|
+
if (specifier.startsWith("catalog:") && specifier.length > "catalog:".length) {
|
|
24
|
+
return specifier.slice("catalog:".length);
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
function isReservedPackage(name, scopes) {
|
|
29
|
+
return scopes.some((scope) => name.startsWith(scope));
|
|
30
|
+
}
|
|
31
|
+
function evaluateCatalogs(snapshot) {
|
|
32
|
+
const diagnostics = [];
|
|
33
|
+
if (snapshot.catalogMode !== "strict") {
|
|
34
|
+
diagnostics.push(diagnostic({
|
|
35
|
+
rule: RULES.catalogModeNotStrict,
|
|
36
|
+
subject: "pnpm-workspace:catalogMode",
|
|
37
|
+
message: "pnpm workspace catalogMode must be strict.",
|
|
38
|
+
path: "pnpm-workspace.yaml",
|
|
39
|
+
evidence: [
|
|
40
|
+
{ kind: "actual", value: snapshot.catalogMode ?? "missing" }
|
|
41
|
+
]
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
for (const entry of snapshot.catalogs) {
|
|
45
|
+
if (!isExactVersion(entry.version)) {
|
|
46
|
+
diagnostics.push(diagnostic({
|
|
47
|
+
rule: RULES.catalogVersionNotExact,
|
|
48
|
+
subject: `catalog:${entry.catalogName}:${entry.dependencyName}`,
|
|
49
|
+
message: `Catalog dependency ${entry.dependencyName} must use an exact version.`,
|
|
50
|
+
path: "pnpm-workspace.yaml",
|
|
51
|
+
evidence: [{ kind: "specifier", value: entry.version }]
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return diagnostics;
|
|
56
|
+
}
|
|
57
|
+
function evaluatePackageManager(snapshot) {
|
|
58
|
+
const root = snapshot.packages.find((entry) => entry.manifestPath === "package.json");
|
|
59
|
+
const packageManager = root?.packageManager;
|
|
60
|
+
if (packageManager === undefined ||
|
|
61
|
+
!packageManager.startsWith("pnpm@") ||
|
|
62
|
+
!isExactVersion(packageManager.slice("pnpm@".length))) {
|
|
63
|
+
return [
|
|
64
|
+
diagnostic({
|
|
65
|
+
rule: RULES.packageManagerNotExact,
|
|
66
|
+
subject: "workspace-root:packageManager",
|
|
67
|
+
message: "The workspace root must pin an exact pnpm version.",
|
|
68
|
+
path: "package.json",
|
|
69
|
+
evidence: [{ kind: "actual", value: packageManager ?? "missing" }]
|
|
70
|
+
})
|
|
71
|
+
];
|
|
72
|
+
}
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
function evaluatePackageNames(snapshot) {
|
|
76
|
+
const diagnostics = [];
|
|
77
|
+
const byName = new Map();
|
|
78
|
+
for (const workspacePackage of snapshot.packages) {
|
|
79
|
+
if (workspacePackage.name.startsWith("<unnamed:")) {
|
|
80
|
+
diagnostics.push(diagnostic({
|
|
81
|
+
rule: RULES.workspacePackageNameMissing,
|
|
82
|
+
subject: workspacePackage.manifestPath,
|
|
83
|
+
message: "Workspace package manifest must declare a package name.",
|
|
84
|
+
path: workspacePackage.manifestPath
|
|
85
|
+
}));
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const paths = byName.get(workspacePackage.name) ?? [];
|
|
89
|
+
paths.push(workspacePackage.manifestPath);
|
|
90
|
+
byName.set(workspacePackage.name, paths);
|
|
91
|
+
}
|
|
92
|
+
for (const [name, paths] of byName) {
|
|
93
|
+
if (paths.length > 1) {
|
|
94
|
+
diagnostics.push(diagnostic({
|
|
95
|
+
rule: RULES.duplicateWorkspacePackageName,
|
|
96
|
+
subject: name,
|
|
97
|
+
message: `Workspace package name ${name} is declared by multiple manifests.`,
|
|
98
|
+
path: paths.toSorted()[0] ?? "package.json",
|
|
99
|
+
evidence: [{ kind: "manifest-paths", value: paths.toSorted().join(", ") }]
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return diagnostics;
|
|
104
|
+
}
|
|
105
|
+
function evaluateDeclarations(snapshot, config) {
|
|
106
|
+
const diagnostics = [];
|
|
107
|
+
const workspaceNames = new Set(snapshot.packages
|
|
108
|
+
.map((entry) => entry.name)
|
|
109
|
+
.filter((name) => !name.startsWith("<unnamed:")));
|
|
110
|
+
const devOnly = new Set(config.policies.developmentOnlyPackages);
|
|
111
|
+
const exactRegistryDevOnly = new Set(config.policies.exactRegistryDevelopmentOnlyPackages);
|
|
112
|
+
const allDevOnly = new Set([...devOnly, ...exactRegistryDevOnly]);
|
|
113
|
+
const catalogKeys = new Set(snapshot.catalogs.map((entry) => `${entry.catalogName}\u0000${entry.dependencyName}`));
|
|
114
|
+
for (const workspacePackage of snapshot.packages) {
|
|
115
|
+
const grouped = Map.groupBy(workspacePackage.dependencies, (declaration) => declaration.dependencyName);
|
|
116
|
+
for (const [dependencyName, declarations] of grouped) {
|
|
117
|
+
if (declarations.length > 1) {
|
|
118
|
+
diagnostics.push(diagnostic({
|
|
119
|
+
rule: RULES.dependencyDeclaredMultipleTimes,
|
|
120
|
+
subject: `${workspacePackage.name}:${dependencyName}`,
|
|
121
|
+
message: `Dependency ${dependencyName} is declared in multiple dependency sections.`,
|
|
122
|
+
path: workspacePackage.manifestPath,
|
|
123
|
+
evidence: [
|
|
124
|
+
{
|
|
125
|
+
kind: "sections",
|
|
126
|
+
value: declarations.map((entry) => entry.section).toSorted().join(", ")
|
|
127
|
+
}
|
|
128
|
+
]
|
|
129
|
+
}));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
for (const dependency of workspacePackage.dependencies) {
|
|
133
|
+
const subject = declarationSubject(dependency);
|
|
134
|
+
if (allDevOnly.has(dependency.dependencyName)) {
|
|
135
|
+
if (dependency.section !== "devDependencies") {
|
|
136
|
+
diagnostics.push(diagnostic({
|
|
137
|
+
rule: RULES.developmentOnlyPackageInRuntimeSection,
|
|
138
|
+
subject,
|
|
139
|
+
message: `Development-only package ${dependency.dependencyName} cannot be declared in ${dependency.section}.`,
|
|
140
|
+
path: dependency.manifestPath
|
|
141
|
+
}));
|
|
142
|
+
}
|
|
143
|
+
if (exactRegistryDevOnly.has(dependency.dependencyName) &&
|
|
144
|
+
!isExactVersion(dependency.specifier)) {
|
|
145
|
+
diagnostics.push(diagnostic({
|
|
146
|
+
rule: RULES.exactRegistryDevelopmentOnlyPackageVersionNotExact,
|
|
147
|
+
subject,
|
|
148
|
+
message: `Development-only package ${dependency.dependencyName} must use an exact registry version.`,
|
|
149
|
+
path: dependency.manifestPath,
|
|
150
|
+
evidence: [{ kind: "specifier", value: dependency.specifier }]
|
|
151
|
+
}));
|
|
152
|
+
}
|
|
153
|
+
if (exactRegistryDevOnly.has(dependency.dependencyName)) {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (workspaceNames.has(dependency.dependencyName)) {
|
|
158
|
+
if (!dependency.specifier.startsWith("workspace:")) {
|
|
159
|
+
diagnostics.push(diagnostic({
|
|
160
|
+
rule: RULES.internalDependencyWithoutWorkspaceProtocol,
|
|
161
|
+
subject,
|
|
162
|
+
message: `Internal dependency ${dependency.dependencyName} must use the workspace protocol.`,
|
|
163
|
+
path: dependency.manifestPath,
|
|
164
|
+
evidence: [{ kind: "specifier", value: dependency.specifier }]
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
if (isReservedPackage(dependency.dependencyName, config.policies.reservedScopes)) {
|
|
170
|
+
diagnostics.push(diagnostic({
|
|
171
|
+
rule: RULES.reservedScopePackageNotInWorkspace,
|
|
172
|
+
subject,
|
|
173
|
+
message: `Reserved-scope dependency ${dependency.dependencyName} is not a workspace package.`,
|
|
174
|
+
path: dependency.manifestPath
|
|
175
|
+
}));
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
const referencedCatalog = catalogName(dependency.specifier);
|
|
179
|
+
if (referencedCatalog === undefined) {
|
|
180
|
+
diagnostics.push(diagnostic({
|
|
181
|
+
rule: RULES.externalVersionNotCataloged,
|
|
182
|
+
subject,
|
|
183
|
+
message: `External dependency ${dependency.dependencyName} must use a catalog reference.`,
|
|
184
|
+
path: dependency.manifestPath,
|
|
185
|
+
evidence: [{ kind: "specifier", value: dependency.specifier }]
|
|
186
|
+
}));
|
|
187
|
+
}
|
|
188
|
+
else if (!catalogKeys.has(`${referencedCatalog}\u0000${dependency.dependencyName}`)) {
|
|
189
|
+
diagnostics.push(diagnostic({
|
|
190
|
+
rule: RULES.catalogReferenceMissing,
|
|
191
|
+
subject,
|
|
192
|
+
message: `Catalog ${referencedCatalog} does not declare ${dependency.dependencyName}.`,
|
|
193
|
+
path: dependency.manifestPath,
|
|
194
|
+
evidence: [{ kind: "catalog", value: referencedCatalog }]
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
for (const packageName of workspacePackage.bundledDependencies) {
|
|
199
|
+
if (allDevOnly.has(packageName)) {
|
|
200
|
+
diagnostics.push(diagnostic({
|
|
201
|
+
rule: RULES.developmentOnlyPackageBundled,
|
|
202
|
+
subject: `${workspacePackage.name}:bundle:${packageName}`,
|
|
203
|
+
message: `Development-only package ${packageName} cannot be bundled.`,
|
|
204
|
+
path: workspacePackage.manifestPath
|
|
205
|
+
}));
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return diagnostics;
|
|
210
|
+
}
|
|
211
|
+
export function evaluateWorkspaceDependencies(snapshot, config) {
|
|
212
|
+
return [
|
|
213
|
+
...evaluateCatalogs(snapshot),
|
|
214
|
+
...evaluatePackageManager(snapshot),
|
|
215
|
+
...evaluatePackageNames(snapshot),
|
|
216
|
+
...evaluateDeclarations(snapshot, config)
|
|
217
|
+
];
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=evaluate-workspace-dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate-workspace-dependencies.js","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-reader.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAExE,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC9E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-reader.js","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/ports/workspace-reader.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { DiagnosticSeverity } from "../../../check-contract.js";
|
|
2
|
+
export interface RuleMetadata {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly rationale: string;
|
|
5
|
+
readonly severity: DiagnosticSeverity;
|
|
6
|
+
readonly remediation: string;
|
|
7
|
+
readonly documentation: string;
|
|
8
|
+
readonly requiresArchitectureReview: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare const RULES: Readonly<{
|
|
11
|
+
catalogModeNotStrict: RuleMetadata;
|
|
12
|
+
catalogReferenceMissing: RuleMetadata;
|
|
13
|
+
catalogVersionNotExact: RuleMetadata;
|
|
14
|
+
dependencyDeclaredMultipleTimes: RuleMetadata;
|
|
15
|
+
developmentOnlyPackageBundled: RuleMetadata;
|
|
16
|
+
developmentOnlyPackageInRuntimeSection: RuleMetadata;
|
|
17
|
+
exactRegistryDevelopmentOnlyPackageVersionNotExact: RuleMetadata;
|
|
18
|
+
duplicateWorkspacePackageName: RuleMetadata;
|
|
19
|
+
externalVersionNotCataloged: RuleMetadata;
|
|
20
|
+
internalDependencyWithoutWorkspaceProtocol: RuleMetadata;
|
|
21
|
+
packageManagerNotExact: RuleMetadata;
|
|
22
|
+
reservedScopePackageNotInWorkspace: RuleMetadata;
|
|
23
|
+
workspacePackageNameMissing: RuleMetadata;
|
|
24
|
+
}>;
|
|
25
|
+
export declare const RULES_BY_ID: ReadonlyMap<string, RuleMetadata>;
|
|
26
|
+
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/workspace-dependency-declarations/application/rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;CAC9C;AAqBD,eAAO,MAAM,KAAK;;;;;;;;;;;;;;EAoEhB,CAAC;AAEH,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAEzD,CAAC"}
|