@intentset/architecture 0.8.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/areas.d.ts +1 -1
- package/dist/areas.d.ts.map +1 -1
- package/dist/areas.js +3 -0
- package/dist/areas.js.map +1 -1
- package/dist/baseline.d.ts +96 -11
- package/dist/baseline.d.ts.map +1 -1
- package/dist/baseline.js +219 -22
- package/dist/baseline.js.map +1 -1
- package/dist/boundaries.d.ts +11 -2
- package/dist/boundaries.d.ts.map +1 -1
- package/dist/boundaries.js +175 -17
- package/dist/boundaries.js.map +1 -1
- package/dist/check.d.ts +9 -2
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +21 -6
- package/dist/check.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +32 -1
- package/dist/config.js.map +1 -1
- package/dist/extract.d.ts +36 -1
- package/dist/extract.d.ts.map +1 -1
- package/dist/extract.js +142 -22
- package/dist/extract.js.map +1 -1
- package/dist/finding.d.ts +12 -0
- package/dist/finding.d.ts.map +1 -1
- package/dist/finding.js +6 -1
- package/dist/finding.js.map +1 -1
- package/dist/imports.d.ts +16 -0
- package/dist/imports.d.ts.map +1 -1
- package/dist/imports.js +17 -2
- package/dist/imports.js.map +1 -1
- package/dist/index.d.ts +8 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/layers.d.ts +6 -0
- package/dist/layers.d.ts.map +1 -1
- package/dist/layers.js +19 -0
- package/dist/layers.js.map +1 -1
- package/dist/names.d.ts +48 -0
- package/dist/names.d.ts.map +1 -0
- package/dist/names.js +194 -0
- package/dist/names.js.map +1 -0
- package/package.json +2 -2
- package/src/areas.ts +3 -1
- package/src/baseline.ts +266 -24
- package/src/boundaries.ts +191 -22
- package/src/check.ts +34 -7
- package/src/config.ts +44 -1
- package/src/extract.ts +168 -22
- package/src/finding.ts +19 -1
- package/src/imports.ts +25 -3
- package/src/index.ts +16 -4
- package/src/layers.ts +18 -0
- package/src/names.ts +215 -0
package/dist/imports.d.ts
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The resolved import graph of a tree (VSA003–VSA006, profile TS004): one
|
|
3
|
+
* edge per module reference in every code file, with the target file or,
|
|
4
|
+
* for a package outside the repository, the specifier alone. What could not
|
|
5
|
+
* be read or resolved is returned beside the edges, never folded into them.
|
|
6
|
+
*/
|
|
7
|
+
import { type LocalExports, type TakenName } from "./extract.ts";
|
|
8
|
+
import type { Taken } from "./finding.ts";
|
|
1
9
|
import type { Resolver, Via } from "./resolve.ts";
|
|
2
10
|
export interface ImportEdge {
|
|
3
11
|
from: string;
|
|
@@ -14,6 +22,8 @@ export interface ImportEdge {
|
|
|
14
22
|
via: Via;
|
|
15
23
|
/** Resolved through a `*` alias, an exports pattern or a package without exports (TS006). */
|
|
16
24
|
wildcardAlias: boolean;
|
|
25
|
+
/** The names it takes from the target (`RawImport.names`). */
|
|
26
|
+
names: TakenName[];
|
|
17
27
|
}
|
|
18
28
|
export interface UnresolvedImport {
|
|
19
29
|
path: string;
|
|
@@ -24,7 +34,13 @@ export interface UnresolvedImport {
|
|
|
24
34
|
export interface ImportGraph {
|
|
25
35
|
edges: ImportEdge[];
|
|
26
36
|
unresolved: UnresolvedImport[];
|
|
37
|
+
/** What each code file exports of its own, by path. */
|
|
38
|
+
exports: Map<string, LocalExports>;
|
|
39
|
+
/** The line of the first JSX element in each file that renders one, by path. */
|
|
40
|
+
jsx: Map<string, number>;
|
|
27
41
|
}
|
|
28
42
|
/** Build the graph over every code file in `files` (already filtered of ignored paths). */
|
|
29
43
|
export declare function buildImportGraph(files: ReadonlyMap<string, string>, resolver: Resolver): ImportGraph;
|
|
44
|
+
/** The import as a baseline identifies it (VSA §9): one entry per name it takes. */
|
|
45
|
+
export declare function takenBy(edge: ImportEdge): Taken;
|
|
30
46
|
//# sourceMappingURL=imports.d.ts.map
|
package/dist/imports.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../src/imports.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../src/imports.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAkB,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,cAAc,EAAE,OAAO,CAAC;IACxB,GAAG,EAAE,GAAG,CAAC;IACT,6FAA6F;IAC7F,aAAa,EAAE,OAAO,CAAC;IACvB,8DAA8D;IAC9D,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,uDAAuD;IACvD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACnC,gFAAgF;IAChF,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1B;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAwCpG;AAED,oFAAoF;AACpF,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,KAAK,CAO/C"}
|
package/dist/imports.js
CHANGED
|
@@ -11,10 +11,15 @@ import { compareStrings } from "./patterns.js";
|
|
|
11
11
|
export function buildImportGraph(files, resolver) {
|
|
12
12
|
const edges = [];
|
|
13
13
|
const unresolved = [];
|
|
14
|
+
const exported = new Map();
|
|
15
|
+
const rendered = new Map();
|
|
14
16
|
for (const path of [...files.keys()].sort(compareStrings)) {
|
|
15
17
|
if (!isCode(path))
|
|
16
18
|
continue;
|
|
17
|
-
const { imports, problems } = extractImports(path, files.get(path));
|
|
19
|
+
const { imports, problems, exports, jsx } = extractImports(path, files.get(path));
|
|
20
|
+
exported.set(path, exports);
|
|
21
|
+
if (jsx !== null)
|
|
22
|
+
rendered.set(path, jsx);
|
|
18
23
|
for (const problem of problems) {
|
|
19
24
|
unresolved.push({ path, line: problem.line, specifier: null, message: problem.message });
|
|
20
25
|
}
|
|
@@ -40,9 +45,19 @@ export function buildImportGraph(files, resolver) {
|
|
|
40
45
|
wildcardExport: raw.wildcard,
|
|
41
46
|
via: resolution.via,
|
|
42
47
|
wildcardAlias: resolution.wildcard,
|
|
48
|
+
names: raw.names,
|
|
43
49
|
});
|
|
44
50
|
}
|
|
45
51
|
}
|
|
46
|
-
return { edges, unresolved };
|
|
52
|
+
return { edges, unresolved, exports: exported, jsx: rendered };
|
|
53
|
+
}
|
|
54
|
+
/** The import as a baseline identifies it (VSA §9): one entry per name it takes. */
|
|
55
|
+
export function takenBy(edge) {
|
|
56
|
+
const names = edge.names.map((taken) => `${taken.typeOnly || edge.typeOnly ? "type " : ""}${taken.name}`);
|
|
57
|
+
return {
|
|
58
|
+
kind: edge.reexport ? "re-export" : edge.dynamic ? "dynamic" : "import",
|
|
59
|
+
to: edge.to ?? edge.specifier,
|
|
60
|
+
names: [...new Set(names)].sort(compareStrings),
|
|
61
|
+
};
|
|
47
62
|
}
|
|
48
63
|
//# sourceMappingURL=imports.js.map
|
package/dist/imports.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../src/imports.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../src/imports.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,17 +5,18 @@
|
|
|
5
5
|
* whole check; the rest is exported for reports, tools and tests.
|
|
6
6
|
*/
|
|
7
7
|
export { AREA_REVIEW_REQUIRED, areaOf, backendAreaOf, checkAreas, isAreaSchema } from "./areas.ts";
|
|
8
|
-
export { applyBaseline, type BaselineEntry, fingerprint, type Mode, parseBaseline, plainMessage, writeBaseline, } from "./baseline.ts";
|
|
9
|
-
export { type BoundaryResult, checkBoundaries, checkUnclassified, type SliceEdge } from "./boundaries.ts";
|
|
8
|
+
export { applyBaseline, type BaselineComparison, type BaselineEntry, baselineKeys, type BaselineSubject, compareBaselines, describeEntry, FINGERPRINT_V2, fingerprint, type Mode, parseBaseline, plainMessage, STALE_ENTRY_CODE, staleEntryDiagnostics, writeBaseline, } from "./baseline.ts";
|
|
9
|
+
export { type BoundaryResult, checkBoundaries, checkJsx, checkUnclassified, type SliceEdge } from "./boundaries.ts";
|
|
10
10
|
export { type ArchitectureResult, type ArchitectureSummary, type CheckOptions, checkArchitecture, ownershipReport, REVIEW_REQUIRED, } from "./check.ts";
|
|
11
11
|
export { checkClaims } from "./claims.ts";
|
|
12
|
-
export { ARCHITECTURE_CONFIG_PATH, type AreaConfig, type ArchitectureConfig, DEFAULT_ARCHITECTURE_CONFIG, MAX_AREAS, readArchitectureConfig, resolveConfig, } from "./config.ts";
|
|
12
|
+
export { ARCHITECTURE_CONFIG_PATH, type AreaConfig, type ArchitectureConfig, DEFAULT_ARCHITECTURE_CONFIG, MAX_AREAS, readArchitectureConfig, resolveConfig, UI_FRAMEWORKS, } from "./config.ts";
|
|
13
13
|
export { checkDependencies, shortestCycle, stronglyConnected } from "./dependencies.ts";
|
|
14
14
|
export { annotate, applyExceptions, covers, EXCEPTIONS_PATTERNS, type ExceptionRecord, readExceptionRecord, readExceptions, } from "./exceptions.ts";
|
|
15
|
-
export { type Extraction, extractImports, extractSchema, findCalls, type RawImport, SCHEMA_KINDS, type SchemaDeclaration, type SchemaExtraction, type SchemaKind, type SchemaReference, } from "./extract.ts";
|
|
16
|
-
export type { Finding, SubjectEdge } from "./finding.ts";
|
|
17
|
-
export { buildImportGraph, type ImportEdge, type ImportGraph, type UnresolvedImport } from "./imports.ts";
|
|
18
|
-
export {
|
|
15
|
+
export { type Extraction, extractImports, type LocalExports, extractSchema, findCalls, type RawImport, SCHEMA_KINDS, type SchemaDeclaration, type SchemaExtraction, type SchemaKind, type SchemaReference, type TakenName, } from "./extract.ts";
|
|
16
|
+
export type { Finding, SubjectEdge, Taken } from "./finding.ts";
|
|
17
|
+
export { buildImportGraph, type ImportEdge, type ImportGraph, takenBy, type UnresolvedImport } from "./imports.ts";
|
|
18
|
+
export { type Definition, NameIndex, type Origin } from "./names.ts";
|
|
19
|
+
export { fileLayer, inSeam, isPure, layerAllows, layerOf, purePatterns, seamPatterns } from "./layers.ts";
|
|
19
20
|
export { checkOwnership } from "./ownership.ts";
|
|
20
21
|
export { type ArchitectureSubjectSource, type SubjectSourceOptions, subjectSource } from "./subject-source.ts";
|
|
21
22
|
export { expandClaims, matchAny, matchPattern, validatePattern } from "./patterns.ts";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnG,OAAO,EACL,aAAa,EACb,KAAK,aAAa,EAClB,WAAW,EACX,KAAK,IAAI,EACT,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnG,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,YAAY,EACZ,KAAK,eAAe,EACpB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,WAAW,EACX,KAAK,IAAI,EACT,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,cAAc,EAAE,eAAe,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACpH,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,wBAAwB,EACxB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,2BAA2B,EAC3B,SAAS,EACT,sBAAsB,EACtB,aAAa,EACb,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EACL,QAAQ,EACR,eAAe,EACf,MAAM,EACN,mBAAmB,EACnB,KAAK,eAAe,EACpB,mBAAmB,EACnB,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,UAAU,EACf,cAAc,EACd,KAAK,YAAY,EACjB,aAAa,EACb,SAAS,EACT,KAAK,SAAS,EACd,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,SAAS,GACf,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACnH,OAAO,EAAE,KAAK,UAAU,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1G,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,KAAK,yBAAyB,EAAE,KAAK,oBAAoB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC/G,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EACL,YAAY,EACZ,UAAU,EACV,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,UAAU,EACf,WAAW,EACX,KAAK,SAAS,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,UAAU,EAAE,QAAQ,EAAE,KAAK,GAAG,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,KAAK,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,16 +5,17 @@
|
|
|
5
5
|
* whole check; the rest is exported for reports, tools and tests.
|
|
6
6
|
*/
|
|
7
7
|
export { AREA_REVIEW_REQUIRED, areaOf, backendAreaOf, checkAreas, isAreaSchema } from "./areas.js";
|
|
8
|
-
export { applyBaseline, fingerprint, parseBaseline, plainMessage, writeBaseline, } from "./baseline.js";
|
|
9
|
-
export { checkBoundaries, checkUnclassified } from "./boundaries.js";
|
|
8
|
+
export { applyBaseline, baselineKeys, compareBaselines, describeEntry, FINGERPRINT_V2, fingerprint, parseBaseline, plainMessage, STALE_ENTRY_CODE, staleEntryDiagnostics, writeBaseline, } from "./baseline.js";
|
|
9
|
+
export { checkBoundaries, checkJsx, checkUnclassified } from "./boundaries.js";
|
|
10
10
|
export { checkArchitecture, ownershipReport, REVIEW_REQUIRED, } from "./check.js";
|
|
11
11
|
export { checkClaims } from "./claims.js";
|
|
12
|
-
export { ARCHITECTURE_CONFIG_PATH, DEFAULT_ARCHITECTURE_CONFIG, MAX_AREAS, readArchitectureConfig, resolveConfig, } from "./config.js";
|
|
12
|
+
export { ARCHITECTURE_CONFIG_PATH, DEFAULT_ARCHITECTURE_CONFIG, MAX_AREAS, readArchitectureConfig, resolveConfig, UI_FRAMEWORKS, } from "./config.js";
|
|
13
13
|
export { checkDependencies, shortestCycle, stronglyConnected } from "./dependencies.js";
|
|
14
14
|
export { annotate, applyExceptions, covers, EXCEPTIONS_PATTERNS, readExceptionRecord, readExceptions, } from "./exceptions.js";
|
|
15
15
|
export { extractImports, extractSchema, findCalls, SCHEMA_KINDS, } from "./extract.js";
|
|
16
|
-
export { buildImportGraph } from "./imports.js";
|
|
17
|
-
export {
|
|
16
|
+
export { buildImportGraph, takenBy } from "./imports.js";
|
|
17
|
+
export { NameIndex } from "./names.js";
|
|
18
|
+
export { fileLayer, inSeam, isPure, layerAllows, layerOf, purePatterns, seamPatterns } from "./layers.js";
|
|
18
19
|
export { checkOwnership } from "./ownership.js";
|
|
19
20
|
export { subjectSource } from "./subject-source.js";
|
|
20
21
|
export { expandClaims, matchAny, matchPattern, validatePattern } from "./patterns.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnG,OAAO,EACL,aAAa,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnG,OAAO,EACL,aAAa,EAGb,YAAY,EAEZ,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,WAAW,EAEX,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAuB,eAAe,EAAE,QAAQ,EAAE,iBAAiB,EAAkB,MAAM,iBAAiB,CAAC;AACpH,OAAO,EAIL,iBAAiB,EACjB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,wBAAwB,EAGxB,2BAA2B,EAC3B,SAAS,EACT,sBAAsB,EACtB,aAAa,EACb,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EACL,QAAQ,EACR,eAAe,EACf,MAAM,EACN,mBAAmB,EAEnB,mBAAmB,EACnB,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,cAAc,EAEd,aAAa,EACb,SAAS,EAET,YAAY,GAMb,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,gBAAgB,EAAqC,OAAO,EAAyB,MAAM,cAAc,CAAC;AACnH,OAAO,EAAmB,SAAS,EAAe,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1G,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAA6D,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC/G,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EACL,YAAY,EACZ,UAAU,EAIV,WAAW,GAEZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAmB,QAAQ,EAAY,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAiB,SAAS,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/layers.d.ts
CHANGED
|
@@ -26,6 +26,12 @@ export type LayerOf = {
|
|
|
26
26
|
candidates: string[];
|
|
27
27
|
};
|
|
28
28
|
export declare function layerOf(slice: SliceInfo, path: string): LayerOf;
|
|
29
|
+
/**
|
|
30
|
+
* The layer a file is in for the package and JSX rules (TS007, TS008): the one layer it is declared in, or, for a
|
|
31
|
+
* slice that declares no layers, its client/, domain/policies/ or domain/models/ folder under the entrypoint
|
|
32
|
+
* directory above it. Null when it is in none, or in more than one.
|
|
33
|
+
*/
|
|
34
|
+
export declare function fileLayer(slice: SliceInfo, path: string): string | null;
|
|
29
35
|
/** The slice's declared external-access seam; for a slice that declares none, the client/ folder under each entrypoint (or the one above `path`). */
|
|
30
36
|
export declare function seamPatterns(slice: SliceInfo, path?: string): string[];
|
|
31
37
|
/** The slice's pure layers: policies and models, which must stay free of clients and SDKs. */
|
package/dist/layers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layers.d.ts","sourceRoot":"","sources":["../src/layers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,MAAM,OAAO,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE9G,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAM/D;AAQD,qJAAqJ;AACrJ,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAGtE;AAED,8FAA8F;AAC9F,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAGtE;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,sGAAsG;AACtG,wBAAgB,WAAW,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAGzF;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7E"}
|
|
1
|
+
{"version":3,"file":"layers.d.ts","sourceRoot":"","sources":["../src/layers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,MAAM,OAAO,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE9G,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAM/D;AASD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIvE;AAQD,qJAAqJ;AACrJ,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAGtE;AAED,8FAA8F;AAC9F,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAGtE;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,sGAAsG;AACtG,wBAAgB,WAAW,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAGzF;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7E"}
|
package/dist/layers.js
CHANGED
|
@@ -8,6 +8,25 @@ export function layerOf(slice, path) {
|
|
|
8
8
|
return { layer: matches[0] };
|
|
9
9
|
return { layer: null, reason: matches.length === 0 ? "none" : "ambiguous", candidates: matches };
|
|
10
10
|
}
|
|
11
|
+
/** The reference layout's folders for the layers a slice that declares none still has (profile §1). */
|
|
12
|
+
const FALLBACK_LAYERS = [
|
|
13
|
+
["external", "client"],
|
|
14
|
+
["policy", "domain/policies"],
|
|
15
|
+
["model", "domain/models"],
|
|
16
|
+
];
|
|
17
|
+
/**
|
|
18
|
+
* The layer a file is in for the package and JSX rules (TS007, TS008): the one layer it is declared in, or, for a
|
|
19
|
+
* slice that declares no layers, its client/, domain/policies/ or domain/models/ folder under the entrypoint
|
|
20
|
+
* directory above it. Null when it is in none, or in more than one.
|
|
21
|
+
*/
|
|
22
|
+
export function fileLayer(slice, path) {
|
|
23
|
+
if (Object.keys(slice.meta.layers).length > 0)
|
|
24
|
+
return layerOf(slice, path).layer;
|
|
25
|
+
for (const [layer, folder] of FALLBACK_LAYERS)
|
|
26
|
+
if (matchAny(under(slice, [folder], path), path))
|
|
27
|
+
return layer;
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
11
30
|
/** The fallback folders under the root a path belongs to, or under every root when no path is given. */
|
|
12
31
|
function under(slice, folders, path) {
|
|
13
32
|
const roots = path === undefined ? slice.roots : [rootOf(slice, path)].filter((root) => root !== null);
|
package/dist/layers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layers.js","sourceRoot":"","sources":["../src/layers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"layers.js","sourceRoot":"","sources":["../src/layers.ts"],"names":[],"mappings":"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"}
|
package/dist/names.d.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a name an import takes is defined (VSA006, profile §3, TS004). An
|
|
3
|
+
* entrypoint or a barrel passes names on from other files, and the layer
|
|
4
|
+
* matrix is about the file that defines a name, not the one an import happens
|
|
5
|
+
* to name. So each name is followed through `export ... from`, through
|
|
6
|
+
* `export { a }` of an imported binding, and into `export *`, to the file
|
|
7
|
+
* that declares it.
|
|
8
|
+
*
|
|
9
|
+
* A name a file neither re-exports nor declares, where no `export *` of the
|
|
10
|
+
* file provides it either, is taken as defined in that file: TypeScript
|
|
11
|
+
* refuses a name a module does not export, so this only happens where this
|
|
12
|
+
* reader missed a declaration shape, and it leaves the edge judged as before.
|
|
13
|
+
* A name that may come from a package's `export *` or from an export this
|
|
14
|
+
* reader cannot name (`export =`, `module.exports`) is untraced, and the
|
|
15
|
+
* caller lists it as not checked (invariant 6).
|
|
16
|
+
*/
|
|
17
|
+
import type { LocalExports } from "./extract.ts";
|
|
18
|
+
import type { ImportEdge } from "./imports.ts";
|
|
19
|
+
/** Where one name was found: in a file, in a package, or nowhere this reader can say. */
|
|
20
|
+
export type Origin = {
|
|
21
|
+
kind: "file";
|
|
22
|
+
file: string;
|
|
23
|
+
through: string[];
|
|
24
|
+
} | {
|
|
25
|
+
kind: "package";
|
|
26
|
+
specifier: string;
|
|
27
|
+
through: string[];
|
|
28
|
+
} | {
|
|
29
|
+
kind: "untraced";
|
|
30
|
+
why: string;
|
|
31
|
+
through: string[];
|
|
32
|
+
};
|
|
33
|
+
export interface Definition {
|
|
34
|
+
/** The name as the module the edge targets exports it. */
|
|
35
|
+
name: string;
|
|
36
|
+
typeOnly: boolean;
|
|
37
|
+
/** `through` lists the files that passed the name on, the edge's target first; empty when the target declares it. */
|
|
38
|
+
origin: Origin;
|
|
39
|
+
}
|
|
40
|
+
export declare class NameIndex {
|
|
41
|
+
#private;
|
|
42
|
+
constructor(edges: readonly ImportEdge[], exports: ReadonlyMap<string, LocalExports>);
|
|
43
|
+
/** Where each name `edge` takes is defined, sorted by name. A name of `*` is expanded to every name the target exports. */
|
|
44
|
+
definitions(edge: ImportEdge): Definition[];
|
|
45
|
+
/** Follow one name exported by `file` to the file that defines it. */
|
|
46
|
+
trace(file: string, name: string): Origin;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../src/names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,yFAAyF;AACzF,MAAM,MAAM,MAAM,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEzD,MAAM,WAAW,UAAU;IACzB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,qHAAqH;IACrH,MAAM,EAAE,MAAM,CAAC;CAChB;AAcD,qBAAa,SAAS;;IAIpB,YAAY,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,EAyBnF;IAiBD,2HAA2H;IAC3H,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,CAuB1C;IAED,sEAAsE;IACtE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA2CxC;CAoDF"}
|
package/dist/names.js
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { compareStrings } from "./patterns.js";
|
|
2
|
+
/** How many re-exports deep a name is followed before it is called untraced. */
|
|
3
|
+
const MAX_DEPTH = 64;
|
|
4
|
+
export class NameIndex {
|
|
5
|
+
#tables = new Map();
|
|
6
|
+
#all = new Map();
|
|
7
|
+
constructor(edges, exports) {
|
|
8
|
+
const imported = new Map();
|
|
9
|
+
for (const edge of edges) {
|
|
10
|
+
if (edge.dynamic)
|
|
11
|
+
continue;
|
|
12
|
+
const table = this.#table(edge.from, exports);
|
|
13
|
+
for (const taken of edge.names) {
|
|
14
|
+
if (edge.reexport) {
|
|
15
|
+
if (taken.name === "*" && taken.as === "*")
|
|
16
|
+
table.wildcards.push(edge);
|
|
17
|
+
else
|
|
18
|
+
table.reexports.set(taken.as, { edge, name: taken.name });
|
|
19
|
+
}
|
|
20
|
+
else if (taken.as !== "") {
|
|
21
|
+
const bindings = imported.get(edge.from) ?? new Map();
|
|
22
|
+
bindings.set(taken.as, { edge, name: taken.name });
|
|
23
|
+
imported.set(edge.from, bindings);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// `export { a }` and `export default a` of an imported binding pass the import on.
|
|
28
|
+
for (const [path, local] of exports) {
|
|
29
|
+
const table = this.#table(path, exports);
|
|
30
|
+
for (const binding of local.bindings) {
|
|
31
|
+
const source = imported.get(path)?.get(binding.name);
|
|
32
|
+
if (source !== undefined)
|
|
33
|
+
table.reexports.set(binding.as, source);
|
|
34
|
+
else
|
|
35
|
+
table.declared.add(binding.as);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
#table(path, exports) {
|
|
40
|
+
let table = this.#tables.get(path);
|
|
41
|
+
if (table === undefined) {
|
|
42
|
+
const local = exports.get(path);
|
|
43
|
+
table = {
|
|
44
|
+
reexports: new Map(),
|
|
45
|
+
wildcards: [],
|
|
46
|
+
declared: new Set(local?.declared ?? []),
|
|
47
|
+
opaque: local?.opaque ?? false,
|
|
48
|
+
};
|
|
49
|
+
this.#tables.set(path, table);
|
|
50
|
+
}
|
|
51
|
+
return table;
|
|
52
|
+
}
|
|
53
|
+
/** Where each name `edge` takes is defined, sorted by name. A name of `*` is expanded to every name the target exports. */
|
|
54
|
+
definitions(edge) {
|
|
55
|
+
if (edge.to === null || edge.names.length === 0)
|
|
56
|
+
return [];
|
|
57
|
+
const to = edge.to;
|
|
58
|
+
const out = new Map();
|
|
59
|
+
for (const taken of edge.names) {
|
|
60
|
+
const names = taken.name === "*" ? this.#everyName(to, new Set()) : [taken.name];
|
|
61
|
+
if (names === null) {
|
|
62
|
+
out.set("*", {
|
|
63
|
+
name: "*",
|
|
64
|
+
typeOnly: taken.typeOnly,
|
|
65
|
+
origin: { kind: "untraced", why: "it exports names this reader cannot list", through: [to] },
|
|
66
|
+
});
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
for (const name of names) {
|
|
70
|
+
if (taken.name === "*" && taken.as === "*" && name === "default")
|
|
71
|
+
continue;
|
|
72
|
+
const typeOnly = taken.typeOnly || edge.typeOnly;
|
|
73
|
+
const known = out.get(name);
|
|
74
|
+
if (known !== undefined && (!known.typeOnly || typeOnly))
|
|
75
|
+
continue;
|
|
76
|
+
out.set(name, { name, typeOnly, origin: this.trace(to, name) });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return [...out.values()].sort((a, b) => compareStrings(a.name, b.name));
|
|
80
|
+
}
|
|
81
|
+
/** Follow one name exported by `file` to the file that defines it. */
|
|
82
|
+
trace(file, name) {
|
|
83
|
+
const through = [];
|
|
84
|
+
const seen = new Set();
|
|
85
|
+
let at = file;
|
|
86
|
+
let current = name;
|
|
87
|
+
for (let depth = 0; depth < MAX_DEPTH; depth++) {
|
|
88
|
+
const key = `${at}\u0000${current}`;
|
|
89
|
+
if (seen.has(key))
|
|
90
|
+
return { kind: "untraced", why: "its re-exports form a cycle", through };
|
|
91
|
+
seen.add(key);
|
|
92
|
+
const table = this.#tables.get(at);
|
|
93
|
+
if (table === undefined)
|
|
94
|
+
return { kind: "file", file: at, through };
|
|
95
|
+
const next = table.reexports.get(current);
|
|
96
|
+
if (next !== undefined) {
|
|
97
|
+
through.push(at);
|
|
98
|
+
if (next.edge.to === null)
|
|
99
|
+
return { kind: "package", specifier: next.edge.specifier, through };
|
|
100
|
+
if (next.name === "*")
|
|
101
|
+
return { kind: "file", file: next.edge.to, through };
|
|
102
|
+
at = next.edge.to;
|
|
103
|
+
current = next.name;
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (table.declared.has(current))
|
|
107
|
+
return { kind: "file", file: at, through };
|
|
108
|
+
if (current !== "default") {
|
|
109
|
+
const provider = table.wildcards.find((edge) => edge.to !== null && this.#provides(edge.to, current, new Set()));
|
|
110
|
+
if (provider !== undefined) {
|
|
111
|
+
through.push(at);
|
|
112
|
+
at = provider.to;
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
for (const edge of table.wildcards) {
|
|
116
|
+
const hidden = edge.to === null ? { package: edge.specifier } : this.#unlisted(edge.to, new Set());
|
|
117
|
+
if (hidden === null)
|
|
118
|
+
continue;
|
|
119
|
+
through.push(at);
|
|
120
|
+
return "package" in hidden
|
|
121
|
+
? { kind: "package", specifier: hidden.package, through }
|
|
122
|
+
: { kind: "untraced", why: `${hidden.file} exports names this reader cannot list`, through };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (table.opaque)
|
|
126
|
+
return { kind: "untraced", why: `${at} exports names this reader cannot list`, through };
|
|
127
|
+
return { kind: "file", file: at, through };
|
|
128
|
+
}
|
|
129
|
+
return { kind: "untraced", why: `it is re-exported more than ${MAX_DEPTH} times`, through };
|
|
130
|
+
}
|
|
131
|
+
/** Does `file` export `name`, itself or through `export *`? */
|
|
132
|
+
#provides(file, name, seen) {
|
|
133
|
+
if (seen.has(file))
|
|
134
|
+
return false;
|
|
135
|
+
seen.add(file);
|
|
136
|
+
const table = this.#tables.get(file);
|
|
137
|
+
if (table === undefined)
|
|
138
|
+
return false;
|
|
139
|
+
if (table.reexports.has(name) || table.declared.has(name))
|
|
140
|
+
return true;
|
|
141
|
+
return table.wildcards.some((edge) => edge.to !== null && this.#provides(edge.to, name, seen));
|
|
142
|
+
}
|
|
143
|
+
/** The first package or unreadable file `export *` reaches from `file`, which may hold a name no file here declares. */
|
|
144
|
+
#unlisted(file, seen) {
|
|
145
|
+
if (seen.has(file))
|
|
146
|
+
return null;
|
|
147
|
+
seen.add(file);
|
|
148
|
+
const table = this.#tables.get(file);
|
|
149
|
+
if (table === undefined)
|
|
150
|
+
return null;
|
|
151
|
+
if (table.opaque)
|
|
152
|
+
return { file };
|
|
153
|
+
for (const edge of table.wildcards) {
|
|
154
|
+
const hidden = edge.to === null ? { package: edge.specifier } : this.#unlisted(edge.to, seen);
|
|
155
|
+
if (hidden !== null)
|
|
156
|
+
return hidden;
|
|
157
|
+
}
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Every name `file` exports that some file here defines, sorted, or null when an export cannot be listed. A
|
|
162
|
+
* package's `export *` adds nothing: what a package defines is in no slice's layer.
|
|
163
|
+
*/
|
|
164
|
+
#everyName(file, seen) {
|
|
165
|
+
const cached = this.#all.get(file);
|
|
166
|
+
if (cached !== undefined)
|
|
167
|
+
return cached;
|
|
168
|
+
if (seen.has(file))
|
|
169
|
+
return [];
|
|
170
|
+
seen.add(file);
|
|
171
|
+
const table = this.#tables.get(file);
|
|
172
|
+
if (table === undefined)
|
|
173
|
+
return [];
|
|
174
|
+
if (table.opaque)
|
|
175
|
+
return this.#remember(file, null);
|
|
176
|
+
const names = new Set([...table.reexports.keys(), ...table.declared]);
|
|
177
|
+
for (const edge of table.wildcards) {
|
|
178
|
+
if (edge.to === null)
|
|
179
|
+
continue;
|
|
180
|
+
const more = this.#everyName(edge.to, seen);
|
|
181
|
+
if (more === null)
|
|
182
|
+
return this.#remember(file, null);
|
|
183
|
+
for (const name of more)
|
|
184
|
+
if (name !== "default")
|
|
185
|
+
names.add(name);
|
|
186
|
+
}
|
|
187
|
+
return this.#remember(file, [...names].sort(compareStrings));
|
|
188
|
+
}
|
|
189
|
+
#remember(file, names) {
|
|
190
|
+
this.#all.set(file, names);
|
|
191
|
+
return names;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"names.js","sourceRoot":"","sources":["../src/names.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentset/architecture",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Traceable VSA checks: path claims, import graph, layer matrix, resources, exceptions, baseline.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"intentset",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@intentset/core": "^0.
|
|
39
|
+
"@intentset/core": "^0.10.0"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"typescript": "^7.0.2"
|
package/src/areas.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
import type { AreaConfig } from "./config.ts";
|
|
17
17
|
import { extractSchema, findCalls, type SchemaKind } from "./extract.ts";
|
|
18
18
|
import { type Finding, finding, listSome } from "./finding.ts";
|
|
19
|
-
import type
|
|
19
|
+
import { type ImportEdge, takenBy } from "./imports.ts";
|
|
20
20
|
import { isCode } from "./paths.ts";
|
|
21
21
|
import { compareStrings, matchAny } from "./patterns.ts";
|
|
22
22
|
import type { Model } from "./regions.ts";
|
|
@@ -113,6 +113,7 @@ export function checkAreas(model: Model, edges: readonly ImportEdge[]): AreaChec
|
|
|
113
113
|
remediation:
|
|
114
114
|
"Move what both need into the shared backend package, and reach the other area's data through its published resource names (profile §9, AMP008, AMP012).",
|
|
115
115
|
edges: [{ from: edge.from, to: edge.to }],
|
|
116
|
+
taken: takenBy(edge),
|
|
116
117
|
}),
|
|
117
118
|
);
|
|
118
119
|
} else if (from === null && matchAny(sharedBackend, edge.from)) {
|
|
@@ -126,6 +127,7 @@ export function checkAreas(model: Model, edges: readonly ImportEdge[]): AreaChec
|
|
|
126
127
|
remediation:
|
|
127
128
|
"Pass what the shared code needs in as a parameter, or move the code into the area that owns it (profile §9, AMP008).",
|
|
128
129
|
edges: [{ from: edge.from, to: edge.to }],
|
|
130
|
+
taken: takenBy(edge),
|
|
129
131
|
}),
|
|
130
132
|
);
|
|
131
133
|
}
|