@agent-teams/feature-module-standard 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/README.md +29 -20
- package/dist/features/conformance-fixtures/testing/conformance-case-inputs.d.ts +53 -0
- package/dist/features/conformance-fixtures/testing/conformance-case-inputs.d.ts.map +1 -0
- package/dist/features/conformance-fixtures/testing/conformance-case-inputs.js +70 -0
- package/dist/features/conformance-fixtures/testing/conformance-case-inputs.js.map +1 -0
- package/dist/features/conformance-fixtures/testing/conformance-cases-later.d.ts +3 -0
- package/dist/features/conformance-fixtures/testing/conformance-cases-later.d.ts.map +1 -0
- package/dist/features/conformance-fixtures/testing/conformance-cases-later.js +170 -0
- package/dist/features/conformance-fixtures/testing/conformance-cases-later.js.map +1 -0
- package/dist/features/conformance-fixtures/testing/conformance-cases.d.ts +3 -16
- package/dist/features/conformance-fixtures/testing/conformance-cases.d.ts.map +1 -1
- package/dist/features/conformance-fixtures/testing/conformance-cases.js +102 -215
- package/dist/features/conformance-fixtures/testing/conformance-cases.js.map +1 -1
- package/dist/features/conformance-fixtures/testing/example-sources.d.ts.map +1 -1
- package/dist/features/conformance-fixtures/testing/example-sources.js +12 -8
- package/dist/features/conformance-fixtures/testing/example-sources.js.map +1 -1
- package/dist/features/conformance-fixtures/testing/example-tree.d.ts +8 -8
- package/dist/features/conformance-fixtures/testing/example-tree.d.ts.map +1 -1
- package/dist/features/conformance-fixtures/testing/example-tree.js +39 -27
- package/dist/features/conformance-fixtures/testing/example-tree.js.map +1 -1
- package/dist/features/feature-dependencies/application/check-feature-dependencies.d.ts +2 -2
- package/dist/features/feature-dependencies/application/check-feature-dependencies.d.ts.map +1 -1
- package/dist/features/feature-dependencies/application/check-feature-dependencies.js +88 -56
- package/dist/features/feature-dependencies/application/check-feature-dependencies.js.map +1 -1
- package/dist/features/feature-dependencies/application/feature-graphs.d.ts.map +1 -1
- package/dist/features/feature-dependencies/application/feature-graphs.js +1 -1
- package/dist/features/feature-dependencies/application/feature-graphs.js.map +1 -1
- package/dist/features/feature-dependencies/application/layer-direction.d.ts +2 -2
- package/dist/features/feature-dependencies/application/layer-direction.d.ts.map +1 -1
- package/dist/features/feature-dependencies/application/layer-direction.js +17 -11
- package/dist/features/feature-dependencies/application/layer-direction.js.map +1 -1
- package/dist/features/feature-layout/application/analyze-feature-tree.d.ts +1 -1
- package/dist/features/feature-layout/application/analyze-feature-tree.d.ts.map +1 -1
- package/dist/features/feature-layout/application/analyze-feature-tree.js +62 -28
- package/dist/features/feature-layout/application/analyze-feature-tree.js.map +1 -1
- package/dist/features/feature-layout/application/find-overlapping-roots.d.ts.map +1 -1
- package/dist/features/feature-layout/application/find-overlapping-roots.js +3 -2
- package/dist/features/feature-layout/application/find-overlapping-roots.js.map +1 -1
- package/dist/features/feature-layout/application/infer-directory-layout.d.ts +2 -2
- package/dist/features/feature-layout/application/infer-directory-layout.d.ts.map +1 -1
- package/dist/features/feature-layout/application/infer-directory-layout.js +3 -4
- package/dist/features/feature-layout/application/infer-directory-layout.js.map +1 -1
- package/dist/features/feature-model/domain/model.d.ts +10 -10
- package/dist/features/feature-model/domain/model.d.ts.map +1 -1
- package/dist/features/feature-model/domain/model.js +39 -13
- package/dist/features/feature-model/domain/model.js.map +1 -1
- package/dist/features/module-check/application/check-feature-module.d.ts +1 -1
- package/dist/features/module-check/application/check-feature-module.d.ts.map +1 -1
- package/dist/features/module-check/application/check-feature-module.js +24 -12
- package/dist/features/module-check/application/check-feature-module.js.map +1 -1
- package/dist/features/node-runner/application/run-feature-module-check.d.ts +4 -4
- package/dist/features/node-runner/application/run-feature-module-check.d.ts.map +1 -1
- package/dist/features/node-runner/application/run-feature-module-check.js +58 -24
- package/dist/features/node-runner/application/run-feature-module-check.js.map +1 -1
- package/dist/features/node-runner/composition/check-feature-module-on-disk.d.ts +1 -1
- package/dist/features/node-runner/composition/check-feature-module-on-disk.d.ts.map +1 -1
- package/dist/features/node-runner/composition/check-feature-module-on-disk.js +12 -5
- package/dist/features/node-runner/composition/check-feature-module-on-disk.js.map +1 -1
- package/dist/fixtures.d.ts +4 -4
- package/dist/fixtures.d.ts.map +1 -1
- package/dist/fixtures.js +3 -3
- package/dist/fixtures.js.map +1 -1
- package/dist/index.d.ts +12 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +3 -3
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +2 -2
- package/dist/node.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,55 +1,67 @@
|
|
|
1
|
-
import { inferDirectoryLayout } from
|
|
1
|
+
import { inferDirectoryLayout } from "../../feature-layout/application/infer-directory-layout.js";
|
|
2
2
|
/** The informative example tree of Feature Module Standard v1.1, section "Sub-features", as one valid module. */
|
|
3
|
-
export const FEATURES_ROOT =
|
|
4
|
-
export const TEST_FEATURES_ROOT =
|
|
3
|
+
export const FEATURES_ROOT = "src/features";
|
|
4
|
+
export const TEST_FEATURES_ROOT = "tests/features";
|
|
5
5
|
// Identity -> root below the features root; a sub-feature sits in its parent's `features` container.
|
|
6
6
|
const roots = {
|
|
7
|
-
orders:
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
billing:
|
|
12
|
-
|
|
7
|
+
orders: "orders",
|
|
8
|
+
"orders/pricing": "orders/features/pricing",
|
|
9
|
+
"orders/discounts": "orders/features/discounts",
|
|
10
|
+
"orders/discounts/coupons": "orders/features/discounts/features/coupons",
|
|
11
|
+
billing: "billing",
|
|
12
|
+
"billing/coupons": "billing/features/coupons",
|
|
13
13
|
};
|
|
14
14
|
/** The roots of the example features, for cases that declare them. */
|
|
15
15
|
export const exampleRoots = Object.values(roots).map((root) => `${FEATURES_ROOT}/${root}`);
|
|
16
|
-
const parts = [
|
|
16
|
+
const parts = ["public", "domain", "application", "composition", "contract", "group"];
|
|
17
17
|
const partPaths = {
|
|
18
|
-
public:
|
|
19
|
-
domain:
|
|
20
|
-
application:
|
|
21
|
-
composition:
|
|
22
|
-
contract:
|
|
23
|
-
group:
|
|
18
|
+
public: "contracts/public.ts",
|
|
19
|
+
domain: "domain/model.ts",
|
|
20
|
+
application: "application/use-case.ts",
|
|
21
|
+
composition: "composition/feature.ts",
|
|
22
|
+
contract: "composition/feature.contracts.ts",
|
|
23
|
+
group: "composition/feature.group.ts",
|
|
24
24
|
};
|
|
25
25
|
/** The file of one part of an example feature: its public entrypoint, composition code, composition contract and so on. */
|
|
26
26
|
export const fileOf = (feature, part) => `${FEATURES_ROOT}/${roots[feature]}/${partPaths[part]}`;
|
|
27
|
-
export const MODULE_COMPOSITION =
|
|
27
|
+
export const MODULE_COMPOSITION = "src/module.ts";
|
|
28
28
|
export const roleDirectories = {
|
|
29
|
-
contracts:
|
|
29
|
+
contracts: "contracts",
|
|
30
|
+
domain: "domain",
|
|
31
|
+
application: "application",
|
|
32
|
+
adapters: "adapters",
|
|
33
|
+
composition: "composition",
|
|
30
34
|
};
|
|
31
|
-
export const importOf = (from, to, mode =
|
|
35
|
+
export const importOf = (from, to, mode = "runtime", reexport = false) => ({ from, to, mode, line: 1, ...(reexport ? { reexport } : {}) });
|
|
32
36
|
const features = Object.keys(roots);
|
|
33
37
|
const parentOf = (feature) => features.filter((candidate) => feature.startsWith(`${candidate}/`)).at(-1);
|
|
34
38
|
/** A valid module: every parent wires the composition surface of each direct sub-feature, the module wires the top level. */
|
|
35
39
|
export function exampleModule(namesModuleComposition = true) {
|
|
36
|
-
const files = [
|
|
37
|
-
|
|
40
|
+
const files = [
|
|
41
|
+
MODULE_COMPOSITION,
|
|
42
|
+
...features.flatMap((feature) => parts.map((part) => fileOf(feature, part))),
|
|
43
|
+
];
|
|
44
|
+
const subFeatureRoots = exampleRoots.filter((root) => root.includes("/features/", FEATURES_ROOT.length + 1));
|
|
38
45
|
const assembly = features.flatMap((feature) => {
|
|
39
46
|
const parent = parentOf(feature);
|
|
40
47
|
return parent === undefined
|
|
41
|
-
? [importOf(MODULE_COMPOSITION, fileOf(feature,
|
|
42
|
-
: [importOf(fileOf(parent,
|
|
48
|
+
? [importOf(MODULE_COMPOSITION, fileOf(feature, "group"))]
|
|
49
|
+
: [importOf(fileOf(parent, "composition"), fileOf(feature, "group"))];
|
|
43
50
|
});
|
|
44
51
|
return {
|
|
45
|
-
...inferDirectoryLayout({
|
|
52
|
+
...inferDirectoryLayout({
|
|
53
|
+
featuresRoot: FEATURES_ROOT,
|
|
54
|
+
files,
|
|
55
|
+
roleDirectories,
|
|
56
|
+
subFeatureRoots,
|
|
57
|
+
}),
|
|
46
58
|
files,
|
|
47
59
|
...(namesModuleComposition ? { moduleComposition: [MODULE_COMPOSITION] } : {}),
|
|
48
60
|
testFeaturesRoot: TEST_FEATURES_ROOT,
|
|
49
61
|
surfaces: {
|
|
50
|
-
public: features.map((feature) => fileOf(feature,
|
|
51
|
-
compositionContract: features.map((feature) => fileOf(feature,
|
|
52
|
-
compositionSurface: features.map((feature) => fileOf(feature,
|
|
62
|
+
public: features.map((feature) => fileOf(feature, "public")),
|
|
63
|
+
compositionContract: features.map((feature) => fileOf(feature, "contract")),
|
|
64
|
+
compositionSurface: features.map((feature) => fileOf(feature, "group")),
|
|
53
65
|
},
|
|
54
66
|
imports: assembly,
|
|
55
67
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"example-tree.js","sourceRoot":"","sources":["../../../../src/features/conformance-fixtures/testing/example-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4DAA4D,CAAC;
|
|
1
|
+
{"version":3,"file":"example-tree.js","sourceRoot":"","sources":["../../../../src/features/conformance-fixtures/testing/example-tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Diagnostic, FeatureModuleInput } from
|
|
2
|
-
import type { FeatureTree } from
|
|
1
|
+
import type { Diagnostic, FeatureModuleInput } from "../../feature-model/domain/model.js";
|
|
2
|
+
import type { FeatureTree } from "../../feature-layout/application/analyze-feature-tree.js";
|
|
3
3
|
/** Edge rules: visibility, curated surfaces, layer direction, composition contracts, assembly, republication, cycles. */
|
|
4
4
|
export declare function checkFeatureDependencies(input: FeatureModuleInput, tree: FeatureTree): readonly Diagnostic[];
|
|
5
5
|
//# sourceMappingURL=check-feature-dependencies.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-feature-dependencies.d.ts","sourceRoot":"","sources":["../../../../src/features/feature-dependencies/application/check-feature-dependencies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,
|
|
1
|
+
{"version":3,"file":"check-feature-dependencies.d.ts","sourceRoot":"","sources":["../../../../src/features/feature-dependencies/application/check-feature-dependencies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,kBAAkB,EAKnB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0DAA0D,CAAC;AA6Y5F,yHAAyH;AACzH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,WAAW,GAChB,SAAS,UAAU,EAAE,CAyDvB"}
|
|
@@ -1,25 +1,30 @@
|
|
|
1
|
-
import { diagnostic, isPortablePath } from
|
|
2
|
-
import { cyclicComponents, findCycles } from
|
|
3
|
-
import { layerDirectionAllowed } from
|
|
1
|
+
import { diagnostic, isPortablePath } from "../../feature-model/domain/model.js";
|
|
2
|
+
import { cyclicComponents, findCycles } from "./feature-graphs.js";
|
|
3
|
+
import { layerDirectionAllowed } from "./layer-direction.js";
|
|
4
4
|
const isAncestor = (ancestor, node) => node.id.startsWith(`${ancestor.id}/`);
|
|
5
5
|
// A top-level feature is visible to the module; a sub-feature to its parent and the parent's descendants.
|
|
6
|
-
const visible = (from, to) => to.parent === undefined ||
|
|
7
|
-
|
|
8
|
-
const
|
|
6
|
+
const visible = (from, to) => to.parent === undefined ||
|
|
7
|
+
(from !== undefined && (from.id === to.parent || from.id.startsWith(`${to.parent}/`)));
|
|
8
|
+
const directionOf = (from, to) => isAncestor(to, from) ? "upward" : to.parent === from.id ? "downward" : "lateral";
|
|
9
|
+
const pairKey = (...parts) => parts.join("\u0000");
|
|
9
10
|
function indexSurfaces(input, tree, problems) {
|
|
10
11
|
const index = new Map();
|
|
11
12
|
const mapped = [
|
|
12
|
-
[
|
|
13
|
-
[
|
|
14
|
-
[
|
|
13
|
+
["public", input.surfaces?.public],
|
|
14
|
+
["internal-api", input.surfaces?.internalApi],
|
|
15
|
+
["composition-contract", input.surfaces?.compositionContract],
|
|
16
|
+
["composition-surface", input.surfaces?.compositionSurface],
|
|
17
|
+
["testing", input.surfaces?.testing],
|
|
15
18
|
];
|
|
16
19
|
for (const [kind, files] of mapped) {
|
|
17
20
|
for (const file of files ?? []) {
|
|
18
21
|
if (tree.ownerOf(file) === undefined) {
|
|
19
|
-
problems.push(diagnostic(
|
|
22
|
+
problems.push(diagnostic("surface-unowned", `${file}: a ${kind} surface file belongs to no feature.`, {
|
|
23
|
+
path: file,
|
|
24
|
+
}));
|
|
20
25
|
}
|
|
21
|
-
if (kind ===
|
|
22
|
-
problems.push(diagnostic(
|
|
26
|
+
if (kind === "composition-contract" && tree.roleOf(file) !== "composition") {
|
|
27
|
+
problems.push(diagnostic("composition-contract-misplaced", `${file}: a composition contract is composition code of its feature.`, { path: file }));
|
|
23
28
|
}
|
|
24
29
|
index.set(file, (index.get(file) ?? new Set()).add(kind));
|
|
25
30
|
}
|
|
@@ -27,68 +32,80 @@ function indexSurfaces(input, tree, problems) {
|
|
|
27
32
|
return index;
|
|
28
33
|
}
|
|
29
34
|
const arrow = ({ record }) => `${record.from} -> ${record.to}`;
|
|
30
|
-
const at = ({ record }) => ({
|
|
35
|
+
const at = ({ record }) => ({
|
|
36
|
+
path: record.from,
|
|
37
|
+
line: record.line,
|
|
38
|
+
});
|
|
31
39
|
function sameFeatureEdge(ctx, view) {
|
|
32
40
|
const { fromRole, toRole } = view;
|
|
33
|
-
if (view.kinds.has(
|
|
34
|
-
ctx.problems.push(diagnostic(
|
|
41
|
+
if (view.kinds.has("composition-contract") && fromRole !== "composition") {
|
|
42
|
+
ctx.problems.push(diagnostic("composition-contract-layer", `${arrow(view)}: only composition code may depend on a composition contract, its own feature's included.`, at(view)));
|
|
35
43
|
}
|
|
36
|
-
else if (fromRole !== undefined &&
|
|
37
|
-
|
|
44
|
+
else if (fromRole !== undefined &&
|
|
45
|
+
toRole !== undefined &&
|
|
46
|
+
!layerDirectionAllowed(fromRole, toRole, "same-feature")) {
|
|
47
|
+
ctx.problems.push(diagnostic("layer-direction", `${arrow(view)}: ${fromRole} cannot import ${toRole}.`, at(view)));
|
|
38
48
|
}
|
|
39
49
|
}
|
|
40
|
-
const republishable = (kinds) => [
|
|
50
|
+
const republishable = (kinds) => ["public", "composition-contract"].filter((kind) => kinds?.has(kind) === true);
|
|
41
51
|
// A re-export from a public or composition-contract surface to such a surface is a republication, never a use edge.
|
|
42
52
|
function republication(ctx, view) {
|
|
43
53
|
const { record, from, to, kinds } = view;
|
|
44
54
|
const own = republishable(ctx.surfaces.get(record.from));
|
|
45
55
|
const target = republishable(kinds);
|
|
46
|
-
if (!ctx.nested ||
|
|
56
|
+
if (!ctx.nested ||
|
|
57
|
+
from === undefined ||
|
|
58
|
+
record.reexport !== true ||
|
|
59
|
+
own.length === 0 ||
|
|
60
|
+
target.length === 0) {
|
|
47
61
|
return false;
|
|
48
62
|
}
|
|
49
63
|
const surface = own.find((kind) => target.includes(kind));
|
|
50
64
|
if (to.parent !== from.id) {
|
|
51
65
|
ctx.problems.push(isAncestor(from, to)
|
|
52
|
-
? diagnostic(
|
|
53
|
-
: diagnostic(
|
|
66
|
+
? diagnostic("republication-skips-level", `${arrow(view)}: ${from.id} republishes only from its direct sub-features, not from ${to.id}.`, at(view))
|
|
67
|
+
: diagnostic("republication-not-sub-feature", `${arrow(view)}: ${from.id} republishes only from its direct sub-features, and ${to.id} is not one.`, at(view)));
|
|
54
68
|
}
|
|
55
69
|
else if (surface === undefined) {
|
|
56
|
-
ctx.problems.push(diagnostic(
|
|
70
|
+
ctx.problems.push(diagnostic("republication-mismatch", `${arrow(view)}: a republication re-exports the same surface of its parent, not another one.`, at(view)));
|
|
57
71
|
}
|
|
58
72
|
else if (!ctx.republished.has(pairKey(from.id, to.id, surface))) {
|
|
59
|
-
ctx.problems.push(diagnostic(
|
|
73
|
+
ctx.problems.push(diagnostic("republication-undeclared", `${arrow(view)}: ${from.id} republishes the ${surface} of ${to.id} without a declaration.`, at(view)));
|
|
60
74
|
}
|
|
61
75
|
return true;
|
|
62
76
|
}
|
|
63
77
|
// Composition code is the composition role of a feature and, outside every feature, the module-level files the profile names.
|
|
64
|
-
const composes = (ctx, view) => view.fromRole ===
|
|
78
|
+
const composes = (ctx, view) => view.fromRole === "composition" ||
|
|
65
79
|
(view.from === undefined && ctx.input.moduleComposition?.includes(view.record.from) === true);
|
|
66
80
|
function assemblyEdge(ctx, view) {
|
|
67
81
|
const { from, to } = view;
|
|
68
82
|
if (to.parent === undefined) {
|
|
69
83
|
if (!composes(ctx, view)) {
|
|
70
|
-
ctx.problems.push(diagnostic(
|
|
84
|
+
ctx.problems.push(diagnostic("deep-import", `${arrow(view)}: only composition code wires the composition surface of ${to.id}.`, at(view)));
|
|
71
85
|
}
|
|
72
86
|
return;
|
|
73
87
|
}
|
|
74
|
-
if (from?.id === to.parent && view.fromRole ===
|
|
75
|
-
if (view.record.mode ===
|
|
88
|
+
if (from?.id === to.parent && view.fromRole === "composition") {
|
|
89
|
+
if (view.record.mode === "runtime") {
|
|
76
90
|
ctx.wired.add(to.id);
|
|
77
91
|
}
|
|
78
92
|
return;
|
|
79
93
|
}
|
|
80
|
-
ctx.problems.push(diagnostic(
|
|
94
|
+
ctx.problems.push(diagnostic("assembly-misplaced", `${arrow(view)}: only the feature composition of ${to.parent} wires ${to.id}.`, at(view)));
|
|
81
95
|
}
|
|
82
96
|
function layerOfUse(ctx, view) {
|
|
83
97
|
const { from, fromRole, kinds } = view;
|
|
84
|
-
if (kinds.has(
|
|
85
|
-
ctx.problems.push(diagnostic(
|
|
98
|
+
if (kinds.has("composition-contract") && !composes(ctx, view)) {
|
|
99
|
+
ctx.problems.push(diagnostic("composition-contract-layer", `${arrow(view)}: only composition code may depend on a composition contract.`, at(view)));
|
|
86
100
|
return;
|
|
87
101
|
}
|
|
88
102
|
// A public entrypoint outside any role directory is still a transport contract surface.
|
|
89
|
-
const target = view.toRole ?? (kinds.has(
|
|
90
|
-
if (from !== undefined &&
|
|
91
|
-
|
|
103
|
+
const target = view.toRole ?? (kinds.has("public") ? "contracts" : undefined);
|
|
104
|
+
if (from !== undefined &&
|
|
105
|
+
fromRole !== undefined &&
|
|
106
|
+
target !== undefined &&
|
|
107
|
+
!layerDirectionAllowed(fromRole, target, "other-feature")) {
|
|
108
|
+
ctx.problems.push(diagnostic("layer-direction", `${arrow(view)}: ${fromRole} cannot import ${target} of another feature.`, at(view)));
|
|
92
109
|
}
|
|
93
110
|
}
|
|
94
111
|
function recordUse(ctx, view, from, declared = true) {
|
|
@@ -96,28 +113,32 @@ function recordUse(ctx, view, from, declared = true) {
|
|
|
96
113
|
if (!ctx.uses.has(key)) {
|
|
97
114
|
ctx.uses.set(key, { from, to: view.to, direction: directionOf(from, view.to), ...at(view) });
|
|
98
115
|
}
|
|
99
|
-
if (declared &&
|
|
100
|
-
ctx.
|
|
116
|
+
if (declared &&
|
|
117
|
+
ctx.input.useEdges !== undefined &&
|
|
118
|
+
!ctx.input.useEdges.some((edge) => edge.from === from.id && edge.to === view.to.id)) {
|
|
119
|
+
ctx.problems.push(diagnostic("use-undeclared", `${from.id} -> ${view.to.id}: a use edge missing from the declared feature graph.`, at(view)));
|
|
101
120
|
}
|
|
102
121
|
}
|
|
103
122
|
function crossFeatureEdge(ctx, view) {
|
|
104
123
|
if (republication(ctx, view)) {
|
|
105
124
|
return;
|
|
106
125
|
}
|
|
107
|
-
const assembly = view.kinds.has(
|
|
126
|
+
const assembly = view.kinds.has("composition-surface");
|
|
108
127
|
if (assembly) {
|
|
109
128
|
assemblyEdge(ctx, view);
|
|
110
129
|
}
|
|
111
|
-
const curated = view.kinds.has(
|
|
130
|
+
const curated = view.kinds.has("public") ||
|
|
131
|
+
view.kinds.has("internal-api") ||
|
|
132
|
+
view.kinds.has("composition-contract");
|
|
112
133
|
if (!curated && assembly) {
|
|
113
134
|
return;
|
|
114
135
|
}
|
|
115
136
|
if (!visible(view.from, view.to)) {
|
|
116
|
-
ctx.problems.push(diagnostic(
|
|
137
|
+
ctx.problems.push(diagnostic("not-visible", `${arrow(view)}: ${view.to.id} is not visible to its dependent.`, at(view)));
|
|
117
138
|
}
|
|
118
139
|
else if (!curated) {
|
|
119
140
|
// A deep import breaks the surface rule and may break the direction rule too; both are reported.
|
|
120
|
-
ctx.problems.push(diagnostic(
|
|
141
|
+
ctx.problems.push(diagnostic("deep-import", `${arrow(view)}: not a curated surface of ${view.to.id}.`, at(view)));
|
|
121
142
|
layerOfUse(ctx, view);
|
|
122
143
|
// The edge still exists: it counts for cycles, though it needs no declaration to be rejected.
|
|
123
144
|
if (view.from !== undefined) {
|
|
@@ -141,55 +162,57 @@ function testEdge(ctx, record, owner, to) {
|
|
|
141
162
|
const where = { path: record.from, line: record.line };
|
|
142
163
|
const arrowText = `${record.from} -> ${record.to}`;
|
|
143
164
|
if (!visible(owner, to)) {
|
|
144
|
-
ctx.problems.push(diagnostic(
|
|
165
|
+
ctx.problems.push(diagnostic("not-visible", `${arrowText}: ${to.id} is not visible to a test of ${owner.id}.`, where));
|
|
145
166
|
}
|
|
146
|
-
else if (!(kinds.has(
|
|
147
|
-
ctx.problems.push(diagnostic(
|
|
167
|
+
else if (!(kinds.has("public") || kinds.has("internal-api") || kinds.has("testing"))) {
|
|
168
|
+
ctx.problems.push(diagnostic("deep-import", `${arrowText}: a test of ${owner.id} uses only public, internal API and testing surfaces of ${to.id}.`, where));
|
|
148
169
|
}
|
|
149
170
|
}
|
|
150
171
|
function checkDeclarations(ctx) {
|
|
151
172
|
const { input, tree, problems } = ctx;
|
|
152
173
|
for (const { from, to, surface } of input.republications ?? []) {
|
|
153
174
|
if (tree.node(to)?.parent !== from || tree.node(from) === undefined) {
|
|
154
|
-
problems.push(diagnostic(
|
|
175
|
+
problems.push(diagnostic("republication-invalid", `${from} -> ${to}: ${surface} republication is declared from a direct sub-feature only.`));
|
|
155
176
|
}
|
|
156
177
|
}
|
|
157
178
|
const declared = [];
|
|
158
179
|
for (const { from, to } of input.useEdges ?? []) {
|
|
159
180
|
const [source, target] = [tree.node(from), tree.node(to)];
|
|
160
181
|
if (source === undefined || target === undefined) {
|
|
161
|
-
problems.push(diagnostic(
|
|
182
|
+
problems.push(diagnostic("use-edge-invalid", `${from} -> ${to}: a declared use edge names an unknown feature.`));
|
|
162
183
|
}
|
|
163
184
|
else if (!visible(source, target)) {
|
|
164
|
-
problems.push(diagnostic(
|
|
185
|
+
problems.push(diagnostic("not-visible", `${from} -> ${to}: ${to} is not visible to ${from}.`));
|
|
165
186
|
}
|
|
166
|
-
else if (directionOf(source, target) !==
|
|
187
|
+
else if (directionOf(source, target) !== "upward") {
|
|
167
188
|
declared.push([from, to]);
|
|
168
189
|
}
|
|
169
190
|
}
|
|
170
191
|
for (const cycle of findCycles(declared)) {
|
|
171
|
-
problems.push(diagnostic(
|
|
192
|
+
problems.push(diagnostic("feature-cycle", `Declared feature graph: ${cycle.join(" -> ")}`));
|
|
172
193
|
}
|
|
173
194
|
}
|
|
174
195
|
function checkGraphs(ctx, loadEdges) {
|
|
175
196
|
// Upward edges are outside the cycle graph; runtime and type-only references count alike.
|
|
176
|
-
const observed = [...ctx.uses.values()]
|
|
197
|
+
const observed = [...ctx.uses.values()]
|
|
198
|
+
.filter((edge) => edge.direction !== "upward")
|
|
199
|
+
.map((edge) => [edge.from.id, edge.to.id]);
|
|
177
200
|
for (const cycle of findCycles(observed)) {
|
|
178
|
-
ctx.problems.push(diagnostic(
|
|
201
|
+
ctx.problems.push(diagnostic("feature-cycle", `Observed feature graph: ${cycle.join(" -> ")}`));
|
|
179
202
|
}
|
|
180
203
|
for (const component of cyclicComponents(loadEdges)) {
|
|
181
204
|
const owners = new Set(component.map((file) => ctx.tree.ownerOf(file)?.id));
|
|
182
205
|
if (owners.size > 1) {
|
|
183
|
-
ctx.problems.push(diagnostic(
|
|
206
|
+
ctx.problems.push(diagnostic("load-cycle", `Load-time import cycle between features: ${component.join(", ")}`, { path: component[0] ?? "" }));
|
|
184
207
|
}
|
|
185
208
|
}
|
|
186
209
|
for (const node of ctx.tree.nodes) {
|
|
187
210
|
if (node.parent === undefined) {
|
|
188
211
|
continue;
|
|
189
212
|
}
|
|
190
|
-
const exposes = [...ctx.surfaces].some(([file, kinds]) => kinds.has(
|
|
213
|
+
const exposes = [...ctx.surfaces].some(([file, kinds]) => kinds.has("composition-surface") && ctx.tree.ownerOf(file) === node);
|
|
191
214
|
if (exposes && !ctx.wired.has(node.id)) {
|
|
192
|
-
ctx.problems.push(diagnostic(
|
|
215
|
+
ctx.problems.push(diagnostic("assembly-missing", `${node.id}: its composition surface is not wired by the feature composition of ${node.parent}.`, { path: node.root }));
|
|
193
216
|
}
|
|
194
217
|
}
|
|
195
218
|
}
|
|
@@ -197,7 +220,12 @@ function checkGraphs(ctx, loadEdges) {
|
|
|
197
220
|
export function checkFeatureDependencies(input, tree) {
|
|
198
221
|
const problems = [];
|
|
199
222
|
const ctx = {
|
|
200
|
-
input,
|
|
223
|
+
input,
|
|
224
|
+
tree,
|
|
225
|
+
problems,
|
|
226
|
+
surfaces: indexSurfaces(input, tree, problems),
|
|
227
|
+
uses: new Map(),
|
|
228
|
+
wired: new Set(),
|
|
201
229
|
nested: tree.nodes.some((node) => node.parent !== undefined),
|
|
202
230
|
republished: new Set((input.republications ?? []).map(({ from, to, surface }) => pairKey(from, to, surface))),
|
|
203
231
|
};
|
|
@@ -205,7 +233,7 @@ export function checkFeatureDependencies(input, tree) {
|
|
|
205
233
|
const testFiles = new Set(input.testFiles ?? []);
|
|
206
234
|
for (const record of input.imports) {
|
|
207
235
|
if (!isPortablePath(record.from) || !isPortablePath(record.to)) {
|
|
208
|
-
problems.push(diagnostic(
|
|
236
|
+
problems.push(diagnostic("invalid-path", `${record.from} -> ${record.to}: not a repository-relative path with / separators.`));
|
|
209
237
|
continue;
|
|
210
238
|
}
|
|
211
239
|
const [from, to] = [tree.ownerOf(record.from), tree.ownerOf(record.to)];
|
|
@@ -219,11 +247,15 @@ export function checkFeatureDependencies(input, tree) {
|
|
|
219
247
|
}
|
|
220
248
|
continue;
|
|
221
249
|
}
|
|
222
|
-
if (record.mode ===
|
|
250
|
+
if (record.mode === "runtime" && from !== undefined) {
|
|
223
251
|
loadEdges.push([record.from, record.to]);
|
|
224
252
|
}
|
|
225
253
|
const view = {
|
|
226
|
-
record,
|
|
254
|
+
record,
|
|
255
|
+
from,
|
|
256
|
+
to,
|
|
257
|
+
fromRole: tree.roleOf(record.from),
|
|
258
|
+
toRole: tree.roleOf(record.to),
|
|
227
259
|
kinds: ctx.surfaces.get(record.to) ?? new Set(),
|
|
228
260
|
};
|
|
229
261
|
if (from === to) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-feature-dependencies.js","sourceRoot":"","sources":["../../../../src/features/feature-dependencies/application/check-feature-dependencies.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"check-feature-dependencies.js","sourceRoot":"","sources":["../../../../src/features/feature-dependencies/application/check-feature-dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-graphs.d.ts","sourceRoot":"","sources":["../../../../src/features/feature-dependencies/application/feature-graphs.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;AAEvD,oHAAoH;AACpH,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"feature-graphs.d.ts","sourceRoot":"","sources":["../../../../src/features/feature-dependencies/application/feature-graphs.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;AAEvD,oHAAoH;AACpH,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,EAAE,CA+B5D;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,MAAM,EAAE,EAAE,CAyDnE"}
|
|
@@ -89,6 +89,6 @@ export function cyclicComponents(edges) {
|
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
return components.toSorted((a, b) => ((a[0] ??
|
|
92
|
+
return components.toSorted((a, b) => ((a[0] ?? "") < (b[0] ?? "") ? -1 : 1));
|
|
93
93
|
}
|
|
94
94
|
//# sourceMappingURL=feature-graphs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-graphs.js","sourceRoot":"","sources":["../../../../src/features/feature-dependencies/application/feature-graphs.ts"],"names":[],"mappings":"AAEA,oHAAoH;AACpH,MAAM,UAAU,UAAU,CAAC,KAAqB;IAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/B,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"feature-graphs.js","sourceRoot":"","sources":["../../../../src/features/feature-dependencies/application/feature-graphs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { LayerRole } from
|
|
1
|
+
import type { LayerRole } from "../../feature-model/domain/model.js";
|
|
2
2
|
/** `same-feature` is the dependency direction inside one feature; `other-feature` the one toward a visible curated surface of another. */
|
|
3
|
-
export type LayerScope =
|
|
3
|
+
export type LayerScope = "same-feature" | "other-feature";
|
|
4
4
|
export declare function layerDirectionAllowed(from: LayerRole, to: LayerRole, scope: LayerScope): boolean;
|
|
5
5
|
//# sourceMappingURL=layer-direction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layer-direction.d.ts","sourceRoot":"","sources":["../../../../src/features/feature-dependencies/application/layer-direction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAErE,0IAA0I;AAC1I,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"layer-direction.d.ts","sourceRoot":"","sources":["../../../../src/features/feature-dependencies/application/layer-direction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAErE,0IAA0I;AAC1I,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,eAAe,CAAC;AAmC1D,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAGhG"}
|
|
@@ -1,23 +1,29 @@
|
|
|
1
|
-
const production = [
|
|
2
|
-
|
|
1
|
+
const production = [
|
|
2
|
+
"domain",
|
|
3
|
+
"application",
|
|
4
|
+
"contracts",
|
|
5
|
+
"adapters",
|
|
6
|
+
"composition",
|
|
7
|
+
];
|
|
8
|
+
const everything = [...production, "testing"];
|
|
3
9
|
// The base direction rules of FMS v1 for the abstract roles, as one fixed table. A profile can only strengthen them:
|
|
4
10
|
// domain and application never import contracts; adapters reach sibling features through their own application core
|
|
5
11
|
// and composition; composition wires across layers; a feature's own testing layer stays out of its production code,
|
|
6
12
|
// while composition may reach the curated qualification surface of another feature. The kernel takes no profile
|
|
7
13
|
// input here, so a repository that needs a stricter table applies it on top of this answer.
|
|
8
14
|
const targets = {
|
|
9
|
-
|
|
10
|
-
domain: [
|
|
11
|
-
application: [
|
|
12
|
-
contracts: [
|
|
13
|
-
adapters: [
|
|
15
|
+
"same-feature": {
|
|
16
|
+
domain: ["domain"],
|
|
17
|
+
application: ["domain", "application"],
|
|
18
|
+
contracts: ["contracts"],
|
|
19
|
+
adapters: ["adapters", "application", "domain", "contracts"],
|
|
14
20
|
composition: production,
|
|
15
21
|
testing: everything,
|
|
16
22
|
},
|
|
17
|
-
|
|
18
|
-
domain: [
|
|
19
|
-
application: [
|
|
20
|
-
contracts: [
|
|
23
|
+
"other-feature": {
|
|
24
|
+
domain: ["domain"],
|
|
25
|
+
application: ["domain", "application"],
|
|
26
|
+
contracts: ["contracts"],
|
|
21
27
|
adapters: [],
|
|
22
28
|
composition: everything,
|
|
23
29
|
testing: everything,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layer-direction.js","sourceRoot":"","sources":["../../../../src/features/feature-dependencies/application/layer-direction.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,GAAyB,
|
|
1
|
+
{"version":3,"file":"layer-direction.js","sourceRoot":"","sources":["../../../../src/features/feature-dependencies/application/layer-direction.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,GAAyB;IACvC,QAAQ;IACR,aAAa;IACb,WAAW;IACX,UAAU;IACV,aAAa;CACd,CAAC;AACF,MAAM,UAAU,GAAyB,CAAC,GAAG,UAAU,EAAE,SAAS,CAAC,CAAC;AAEpE,qHAAqH;AACrH,oHAAoH;AACpH,oHAAoH;AACpH,gHAAgH;AAChH,4FAA4F;AAC5F,MAAM,OAAO,GAA8E;IACzF,cAAc,EAAE;QACd,MAAM,EAAE,CAAC,QAAQ,CAAC;QAClB,WAAW,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC;QACtC,SAAS,EAAE,CAAC,WAAW,CAAC;QACxB,QAAQ,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,CAAC;QAC5D,WAAW,EAAE,UAAU;QACvB,OAAO,EAAE,UAAU;KACpB;IACD,eAAe,EAAE;QACf,MAAM,EAAE,CAAC,QAAQ,CAAC;QAClB,WAAW,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC;QACtC,SAAS,EAAE,CAAC,WAAW,CAAC;QACxB,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,UAAU;QACvB,OAAO,EAAE,UAAU;KACpB;CACF,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,IAAe,EAAE,EAAa,EAAE,KAAiB;IACrF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC"}
|