@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.
Files changed (56) hide show
  1. package/dist/areas.d.ts +1 -1
  2. package/dist/areas.d.ts.map +1 -1
  3. package/dist/areas.js +3 -0
  4. package/dist/areas.js.map +1 -1
  5. package/dist/baseline.d.ts +96 -11
  6. package/dist/baseline.d.ts.map +1 -1
  7. package/dist/baseline.js +219 -22
  8. package/dist/baseline.js.map +1 -1
  9. package/dist/boundaries.d.ts +11 -2
  10. package/dist/boundaries.d.ts.map +1 -1
  11. package/dist/boundaries.js +175 -17
  12. package/dist/boundaries.js.map +1 -1
  13. package/dist/check.d.ts +9 -2
  14. package/dist/check.d.ts.map +1 -1
  15. package/dist/check.js +21 -6
  16. package/dist/check.js.map +1 -1
  17. package/dist/config.d.ts +10 -0
  18. package/dist/config.d.ts.map +1 -1
  19. package/dist/config.js +32 -1
  20. package/dist/config.js.map +1 -1
  21. package/dist/extract.d.ts +36 -1
  22. package/dist/extract.d.ts.map +1 -1
  23. package/dist/extract.js +142 -22
  24. package/dist/extract.js.map +1 -1
  25. package/dist/finding.d.ts +12 -0
  26. package/dist/finding.d.ts.map +1 -1
  27. package/dist/finding.js +6 -1
  28. package/dist/finding.js.map +1 -1
  29. package/dist/imports.d.ts +16 -0
  30. package/dist/imports.d.ts.map +1 -1
  31. package/dist/imports.js +17 -2
  32. package/dist/imports.js.map +1 -1
  33. package/dist/index.d.ts +8 -7
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +6 -5
  36. package/dist/index.js.map +1 -1
  37. package/dist/layers.d.ts +6 -0
  38. package/dist/layers.d.ts.map +1 -1
  39. package/dist/layers.js +19 -0
  40. package/dist/layers.js.map +1 -1
  41. package/dist/names.d.ts +48 -0
  42. package/dist/names.d.ts.map +1 -0
  43. package/dist/names.js +194 -0
  44. package/dist/names.js.map +1 -0
  45. package/package.json +2 -2
  46. package/src/areas.ts +3 -1
  47. package/src/baseline.ts +266 -24
  48. package/src/boundaries.ts +191 -22
  49. package/src/check.ts +34 -7
  50. package/src/config.ts +44 -1
  51. package/src/extract.ts +168 -22
  52. package/src/finding.ts +19 -1
  53. package/src/imports.ts +25 -3
  54. package/src/index.ts +16 -4
  55. package/src/layers.ts +18 -0
  56. 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
@@ -1 +1 @@
1
- {"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../src/imports.ts"],"names":[],"mappings":"AASA,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;CACxB;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;CAChC;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAmCpG"}
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
@@ -1 +1 @@
1
- {"version":3,"file":"imports.js","sourceRoot":"","sources":["../src/imports.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAgC/C,2FAA2F;AAC3F,MAAM,UAAU,gBAAgB,CAAC,KAAkC,EAAE,QAAkB;IACrF,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,SAAS;QAC5B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAW,CAAC,CAAC;QAC9E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YACzD,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACrC,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI;oBACJ,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,OAAO,EAAE,kBAAkB,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC,OAAO,EAAE;iBAClE,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YACD,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,IAAI;gBACV,EAAE,EAAE,UAAU,CAAC,EAAE;gBACjB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,cAAc,EAAE,GAAG,CAAC,QAAQ;gBAC5B,GAAG,EAAE,UAAU,CAAC,GAAG;gBACnB,aAAa,EAAE,UAAU,CAAC,QAAQ;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC/B,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 { inSeam, isPure, layerAllows, layerOf, purePatterns, seamPatterns } from "./layers.ts";
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";
@@ -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;AAC1G,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,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,aAAa,EACb,SAAS,EACT,KAAK,SAAS,EACd,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC1G,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/F,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"}
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 { inSeam, isPure, layerAllows, layerOf, purePatterns, seamPatterns } from "./layers.js";
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,EAEb,WAAW,EAEX,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAuB,eAAe,EAAE,iBAAiB,EAAkB,MAAM,iBAAiB,CAAC;AAC1G,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,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,EACd,aAAa,EACb,SAAS,EAET,YAAY,GAKb,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,gBAAgB,EAA4D,MAAM,cAAc,CAAC;AAC1G,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/F,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"}
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. */
@@ -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);
@@ -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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"}
@@ -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.8.1",
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.8.1"
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 { ImportEdge } from "./imports.ts";
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
  }