archprint 0.15.0 → 0.16.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 (175) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +40 -24
  3. package/dist/cli/adopted-rules.d.ts +2 -0
  4. package/dist/cli/adopted-rules.d.ts.map +1 -1
  5. package/dist/cli/adopted-rules.js +5 -0
  6. package/dist/cli/adopted-rules.js.map +1 -1
  7. package/dist/cli/allow.d.ts.map +1 -1
  8. package/dist/cli/allow.js +5 -23
  9. package/dist/cli/allow.js.map +1 -1
  10. package/dist/cli/check-evaluate.d.ts +2 -1
  11. package/dist/cli/check-evaluate.d.ts.map +1 -1
  12. package/dist/cli/check-evaluate.js +7 -2
  13. package/dist/cli/check-evaluate.js.map +1 -1
  14. package/dist/cli/check-locate.d.ts.map +1 -1
  15. package/dist/cli/check-locate.js +4 -2
  16. package/dist/cli/check-locate.js.map +1 -1
  17. package/dist/cli/check.js +2 -2
  18. package/dist/cli/check.js.map +1 -1
  19. package/dist/cli/eslint-check.d.ts +6 -0
  20. package/dist/cli/eslint-check.d.ts.map +1 -0
  21. package/dist/cli/eslint-check.js +160 -0
  22. package/dist/cli/eslint-check.js.map +1 -0
  23. package/dist/cli/generate.d.ts +3 -6
  24. package/dist/cli/generate.d.ts.map +1 -1
  25. package/dist/cli/generate.js +42 -65
  26. package/dist/cli/generate.js.map +1 -1
  27. package/dist/cli/layout.d.ts +14 -1
  28. package/dist/cli/layout.d.ts.map +1 -1
  29. package/dist/cli/layout.js +48 -14
  30. package/dist/cli/layout.js.map +1 -1
  31. package/dist/cli/program.d.ts +0 -1
  32. package/dist/cli/program.d.ts.map +1 -1
  33. package/dist/cli/program.js +52 -76
  34. package/dist/cli/program.js.map +1 -1
  35. package/dist/cli/ratchet.d.ts +24 -0
  36. package/dist/cli/ratchet.d.ts.map +1 -0
  37. package/dist/cli/ratchet.js +43 -0
  38. package/dist/cli/ratchet.js.map +1 -0
  39. package/dist/cli/report.d.ts +8 -4
  40. package/dist/cli/report.d.ts.map +1 -1
  41. package/dist/cli/report.js +50 -34
  42. package/dist/cli/report.js.map +1 -1
  43. package/dist/cli/rule-ref.d.ts +10 -0
  44. package/dist/cli/rule-ref.d.ts.map +1 -0
  45. package/dist/cli/rule-ref.js +18 -0
  46. package/dist/cli/rule-ref.js.map +1 -0
  47. package/dist/cli/scan.d.ts.map +1 -1
  48. package/dist/cli/scan.js +4 -4
  49. package/dist/cli/scan.js.map +1 -1
  50. package/dist/cli/summary.d.ts +7 -0
  51. package/dist/cli/summary.d.ts.map +1 -1
  52. package/dist/cli/summary.js +60 -2
  53. package/dist/cli/summary.js.map +1 -1
  54. package/dist/detector/orphan-detector.d.ts +8 -6
  55. package/dist/detector/orphan-detector.d.ts.map +1 -1
  56. package/dist/detector/orphan-detector.js +74 -15
  57. package/dist/detector/orphan-detector.js.map +1 -1
  58. package/dist/detector/pattern-detector.d.ts +2 -0
  59. package/dist/detector/pattern-detector.d.ts.map +1 -1
  60. package/dist/detector/pattern-detector.js +5 -0
  61. package/dist/detector/pattern-detector.js.map +1 -1
  62. package/dist/detector/stories-isolation-detector.d.ts +1 -0
  63. package/dist/detector/stories-isolation-detector.d.ts.map +1 -1
  64. package/dist/detector/stories-isolation-detector.js +1 -1
  65. package/dist/detector/stories-isolation-detector.js.map +1 -1
  66. package/dist/generator/app-isolation-emitters.d.ts +3 -1
  67. package/dist/generator/app-isolation-emitters.d.ts.map +1 -1
  68. package/dist/generator/app-isolation-emitters.js +9 -4
  69. package/dist/generator/app-isolation-emitters.js.map +1 -1
  70. package/dist/generator/console-isolation-emitters.d.ts +2 -6
  71. package/dist/generator/console-isolation-emitters.d.ts.map +1 -1
  72. package/dist/generator/console-isolation-emitters.js +3 -2
  73. package/dist/generator/console-isolation-emitters.js.map +1 -1
  74. package/dist/generator/deep-relative-emitters.d.ts +2 -16
  75. package/dist/generator/deep-relative-emitters.d.ts.map +1 -1
  76. package/dist/generator/deep-relative-emitters.js +6 -20
  77. package/dist/generator/deep-relative-emitters.js.map +1 -1
  78. package/dist/generator/depcruise-exempt.d.ts +17 -2
  79. package/dist/generator/depcruise-exempt.d.ts.map +1 -1
  80. package/dist/generator/depcruise-exempt.js +18 -4
  81. package/dist/generator/depcruise-exempt.js.map +1 -1
  82. package/dist/generator/dependency-internals-emitters.d.ts +1 -1
  83. package/dist/generator/dependency-internals-emitters.d.ts.map +1 -1
  84. package/dist/generator/dependency-internals-emitters.js +2 -2
  85. package/dist/generator/dependency-internals-emitters.js.map +1 -1
  86. package/dist/generator/entry-purity-emitters.d.ts +1 -1
  87. package/dist/generator/entry-purity-emitters.d.ts.map +1 -1
  88. package/dist/generator/entry-purity-emitters.js +3 -3
  89. package/dist/generator/entry-purity-emitters.js.map +1 -1
  90. package/dist/generator/env-access-emitters.d.ts +2 -2
  91. package/dist/generator/env-access-emitters.d.ts.map +1 -1
  92. package/dist/generator/env-access-emitters.js +3 -11
  93. package/dist/generator/env-access-emitters.js.map +1 -1
  94. package/dist/generator/eslint-app-emitter.d.ts +1 -0
  95. package/dist/generator/eslint-app-emitter.d.ts.map +1 -1
  96. package/dist/generator/eslint-app-emitter.js +1 -22
  97. package/dist/generator/eslint-app-emitter.js.map +1 -1
  98. package/dist/generator/eslint-family-rules.d.ts +23 -0
  99. package/dist/generator/eslint-family-rules.d.ts.map +1 -0
  100. package/dist/generator/eslint-family-rules.js +35 -0
  101. package/dist/generator/eslint-family-rules.js.map +1 -0
  102. package/dist/generator/eslint-plugin-emitter.d.ts +2 -0
  103. package/dist/generator/eslint-plugin-emitter.d.ts.map +1 -1
  104. package/dist/generator/eslint-plugin-emitter.js +21 -0
  105. package/dist/generator/eslint-plugin-emitter.js.map +1 -1
  106. package/dist/generator/eslint-preset-emitter.d.ts +2 -1
  107. package/dist/generator/eslint-preset-emitter.d.ts.map +1 -1
  108. package/dist/generator/eslint-preset-emitter.js +13 -10
  109. package/dist/generator/eslint-preset-emitter.js.map +1 -1
  110. package/dist/generator/eslint-scope.d.ts +0 -11
  111. package/dist/generator/eslint-scope.d.ts.map +1 -1
  112. package/dist/generator/eslint-scope.js +0 -44
  113. package/dist/generator/eslint-scope.js.map +1 -1
  114. package/dist/generator/feature-slice-emitters.d.ts +3 -1
  115. package/dist/generator/feature-slice-emitters.d.ts.map +1 -1
  116. package/dist/generator/feature-slice-emitters.js +9 -4
  117. package/dist/generator/feature-slice-emitters.js.map +1 -1
  118. package/dist/generator/layer-emitters.d.ts.map +1 -1
  119. package/dist/generator/layer-emitters.js +1 -4
  120. package/dist/generator/layer-emitters.js.map +1 -1
  121. package/dist/generator/phantom-dependency-emitters.d.ts +1 -1
  122. package/dist/generator/phantom-dependency-emitters.d.ts.map +1 -1
  123. package/dist/generator/phantom-dependency-emitters.js +2 -2
  124. package/dist/generator/phantom-dependency-emitters.js.map +1 -1
  125. package/dist/generator/public-api-emitters.d.ts +2 -1
  126. package/dist/generator/public-api-emitters.d.ts.map +1 -1
  127. package/dist/generator/public-api-emitters.js +8 -5
  128. package/dist/generator/public-api-emitters.js.map +1 -1
  129. package/dist/generator/role-layering-emitters.d.ts +3 -1
  130. package/dist/generator/role-layering-emitters.d.ts.map +1 -1
  131. package/dist/generator/role-layering-emitters.js +15 -8
  132. package/dist/generator/role-layering-emitters.js.map +1 -1
  133. package/dist/generator/server-client-emitters.d.ts.map +1 -1
  134. package/dist/generator/server-client-emitters.js +1 -4
  135. package/dist/generator/server-client-emitters.js.map +1 -1
  136. package/dist/generator/stories-isolation-emitters.d.ts +3 -2
  137. package/dist/generator/stories-isolation-emitters.d.ts.map +1 -1
  138. package/dist/generator/stories-isolation-emitters.js +5 -2
  139. package/dist/generator/stories-isolation-emitters.js.map +1 -1
  140. package/dist/generator/test-isolation-emitters.d.ts +4 -3
  141. package/dist/generator/test-isolation-emitters.d.ts.map +1 -1
  142. package/dist/generator/test-isolation-emitters.js +8 -17
  143. package/dist/generator/test-isolation-emitters.js.map +1 -1
  144. package/dist/generator/ui-data-isolation-emitters.d.ts +3 -1
  145. package/dist/generator/ui-data-isolation-emitters.d.ts.map +1 -1
  146. package/dist/generator/ui-data-isolation-emitters.js +6 -2
  147. package/dist/generator/ui-data-isolation-emitters.js.map +1 -1
  148. package/dist/generator/workspace-package-emitters.d.ts +2 -2
  149. package/dist/generator/workspace-package-emitters.d.ts.map +1 -1
  150. package/dist/generator/workspace-package-emitters.js +6 -15
  151. package/dist/generator/workspace-package-emitters.js.map +1 -1
  152. package/dist/index.d.ts +4 -3
  153. package/dist/index.d.ts.map +1 -1
  154. package/dist/index.js +3 -3
  155. package/dist/index.js.map +1 -1
  156. package/dist/mcp/remote/server.d.ts +2 -2
  157. package/dist/mcp/remote/server.d.ts.map +1 -1
  158. package/dist/mcp/remote/server.js +8 -2
  159. package/dist/mcp/remote/server.js.map +1 -1
  160. package/dist/mcp/server.d.ts +2 -2
  161. package/dist/mcp/server.d.ts.map +1 -1
  162. package/dist/mcp/server.js +2 -2
  163. package/dist/mcp/server.js.map +1 -1
  164. package/dist/mcp/tools.d.ts.map +1 -1
  165. package/dist/mcp/tools.js +4 -4
  166. package/dist/mcp/tools.js.map +1 -1
  167. package/dist/scanner/file-walker.d.ts +4 -0
  168. package/dist/scanner/file-walker.d.ts.map +1 -1
  169. package/dist/scanner/file-walker.js +33 -2
  170. package/dist/scanner/file-walker.js.map +1 -1
  171. package/dist/scanner/usage-scanner.d.ts +2 -0
  172. package/dist/scanner/usage-scanner.d.ts.map +1 -1
  173. package/dist/scanner/usage-scanner.js +25 -8
  174. package/dist/scanner/usage-scanner.js.map +1 -1
  175. package/package.json +2 -1
@@ -1,12 +1,14 @@
1
- import { type ImportGraph } from '../scanner/import-graph.js';
2
1
  export interface OrphanAnalysis {
3
2
  appDir: string;
4
3
  fileCount: number;
4
+ /** Production files nothing imports. */
5
5
  orphans: string[];
6
+ /** Production files only tests import: dead code the tests keep alive. */
7
+ testOnly: string[];
6
8
  }
7
- export interface OrphanDetectorOptions {
8
- resolve?: boolean;
9
- graph?: ImportGraph;
10
- }
11
- export declare function detectOrphans(appDir: string, options?: OrphanDetectorOptions): OrphanAnalysis;
9
+ /**
10
+ * Files nothing references, and files only tests reference. A reference is any import, type-only included, an
11
+ * `export ... from` or `import()`, or a tool config naming the file (`setupFiles: ['./vitest.setup.ts']`).
12
+ */
13
+ export declare function detectOrphans(appDir: string): OrphanAnalysis;
12
14
  //# sourceMappingURL=orphan-detector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orphan-detector.d.ts","sourceRoot":"","sources":["../../src/detector/orphan-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAiBhF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAejG"}
1
+ {"version":3,"file":"orphan-detector.d.ts","sourceRoot":"","sources":["../../src/detector/orphan-detector.ts"],"names":[],"mappings":"AA+BA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAaD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CA+C5D"}
@@ -1,24 +1,83 @@
1
- import { buildImportGraph } from '../scanner/import-graph.js';
1
+ import { readdirSync } from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { moduleReferences, stringLiterals, walkRepo, } from '../scanner/file-walker.js';
4
+ import { buildAliasEntries } from '../scanner/import-graph.js';
5
+ import { resolveFirstPartyImport } from '../scanner/resolve-import.js';
2
6
  import { REQUEST_ENTRY_ROLES } from './pattern-detector.js';
7
+ import { STORY } from './stories-isolation-detector.js';
3
8
  const ENTRY_FILENAME = /(^|\/)(page|layout|loading|error|not-found|template|default|route|middleware|instrumentation|global-error|_app|_document|index)\.(ts|tsx)$/;
4
- const CONFIG_FILE = /\.config\.(ts|tsx|js|mjs|cjs)$/;
9
+ /** Next.js metadata and special files, which the framework loads from the app directory by name. */
10
+ const NEXT_APP_FILE = /(^|\/)app\/(.*\/)?(robots|sitemap|manifest|opengraph-image|twitter-image|icon|apple-icon|global-not-found|forbidden|unauthorized)\.(ts|tsx)$/;
11
+ const NEXT_ROOT_FILE = /^(src\/)?(instrumentation-client|proxy)\.(ts|tsx)$/;
12
+ const CONFIG_FILE = /\.config\.(ts|tsx|js|mjs|cjs|mts|cts)$/;
5
13
  function isEntry(file) {
6
14
  return (REQUEST_ENTRY_ROLES.includes(file.role) ||
7
15
  file.role === 'ROUTE_ENTRY' ||
8
- ENTRY_FILENAME.test(file.relativePath) ||
9
- CONFIG_FILE.test(file.relativePath));
16
+ [ENTRY_FILENAME, NEXT_APP_FILE, NEXT_ROOT_FILE, CONFIG_FILE, STORY].some((entry) => entry.test(file.relativePath)));
10
17
  }
11
- export function detectOrphans(appDir, options = {}) {
12
- const { root, files, adjacency } = options.graph ?? buildImportGraph(appDir, { resolve: options.resolve ?? false });
13
- const inDegree = new Map(files.map((file) => [file.relativePath, 0]));
14
- for (const targets of adjacency.values()) {
15
- for (const target of targets)
16
- inDegree.set(target, inDegree.get(target) + 1);
18
+ /** The tool configs at the app root and among its source files, whose string literals name setup files. */
19
+ function configFiles(root, files) {
20
+ const atRoot = readdirSync(root).filter((name) => CONFIG_FILE.test(name));
21
+ return [
22
+ ...new Set([
23
+ ...atRoot.map((name) => path.join(root, name)),
24
+ ...files.filter((file) => CONFIG_FILE.test(file.relativePath)).map((f) => f.absolutePath),
25
+ ]),
26
+ ];
27
+ }
28
+ /**
29
+ * Files nothing references, and files only tests reference. A reference is any import, type-only included, an
30
+ * `export ... from` or `import()`, or a tool config naming the file (`setupFiles: ['./vitest.setup.ts']`).
31
+ */
32
+ export function detectOrphans(appDir) {
33
+ const root = path.resolve(appDir);
34
+ const files = walkRepo(root);
35
+ const relByAbs = new Map(files.map((file) => [file.absolutePath, file.relativePath]));
36
+ const aliases = buildAliasEntries(root);
37
+ const referrers = new Map(files.map((file) => [file.relativePath, new Set()]));
38
+ const refer = (from, specifier, fromAbsPath) => {
39
+ const target = resolveFirstPartyImport(specifier, fromAbsPath, aliases);
40
+ const rel = target === null ? undefined : relByAbs.get(target);
41
+ if (rel !== undefined && rel !== from)
42
+ referrers.get(rel).add(from);
43
+ };
44
+ for (const file of files) {
45
+ let specifiers;
46
+ try {
47
+ specifiers = moduleReferences(file.absolutePath);
48
+ }
49
+ catch {
50
+ /* v8 ignore next -- defensive: an unreadable or malformed file references nothing */
51
+ specifiers = [];
52
+ }
53
+ for (const specifier of specifiers)
54
+ refer(file.relativePath, specifier, file.absolutePath);
55
+ }
56
+ for (const config of configFiles(root, files)) {
57
+ const from = path.relative(root, config).split(path.sep).join('/');
58
+ for (const literal of stringLiterals(config)) {
59
+ const specifier = literal.replace(/^<rootDir>\//, './');
60
+ refer(from, specifier.startsWith('.') ? specifier : `./${specifier}`, config);
61
+ }
62
+ }
63
+ const isTest = new Set(files.filter((file) => file.role === 'TEST').map((f) => f.relativePath));
64
+ const production = files.filter((file) => file.role !== 'TEST');
65
+ const orphans = [];
66
+ const testOnly = [];
67
+ for (const file of production) {
68
+ if (isEntry(file))
69
+ continue;
70
+ const from = [...referrers.get(file.relativePath)];
71
+ if (from.length === 0)
72
+ orphans.push(file.relativePath);
73
+ else if (from.every((referrer) => isTest.has(referrer)))
74
+ testOnly.push(file.relativePath);
17
75
  }
18
- const orphans = files
19
- .filter((file) => (inDegree.get(file.relativePath) ?? 0) === 0 && !isEntry(file))
20
- .map((file) => file.relativePath)
21
- .sort();
22
- return { appDir: root, fileCount: files.length, orphans };
76
+ return {
77
+ appDir: root,
78
+ fileCount: production.length,
79
+ orphans: orphans.sort(),
80
+ testOnly: testOnly.sort(),
81
+ };
23
82
  }
24
83
  //# sourceMappingURL=orphan-detector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orphan-detector.js","sourceRoot":"","sources":["../../src/detector/orphan-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAoB,MAAM,4BAA4B,CAAC;AAEhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,cAAc,GAClB,4IAA4I,CAAC;AAC/I,MAAM,WAAW,GAAG,gCAAgC,CAAC;AAErD,SAAS,OAAO,CAAC,IAAgB;IAC/B,OAAO,CACL,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QACvC,IAAI,CAAC,IAAI,KAAK,aAAa;QAC3B,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QACtC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CACpC,CAAC;AACJ,CAAC;AAaD,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,UAAiC,EAAE;IAC/E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAC9B,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC;IAEnF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAiB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC,KAAK,MAAM,MAAM,IAAI,OAAO;YAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAE,GAAG,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,OAAO,GAAG,KAAK;SAClB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAChF,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;SAChC,IAAI,EAAE,CAAC;IAEV,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"orphan-detector.js","sourceRoot":"","sources":["../../src/detector/orphan-detector.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@ import { REQUEST_ENTRY_ROLES, type Role } from '../scanner/role-classifier.js';
2
2
  import { type GateResult } from './confidence-gate.js';
3
3
  import { type InferredDbMarkers, type InferredMarkers } from './marker-inference.js';
4
4
  export { REQUEST_ENTRY_ROLES };
5
+ /** The forbidden-import rules' names, which ESLint prints as `archprint/<name>`. */
6
+ export declare const FORBIDDEN_IMPORT_RULE_NAMES: Readonly<Record<string, string>>;
5
7
  export declare const DEFAULT_DB_MARKERS: readonly RegExp[];
6
8
  export interface PatternConfig {
7
9
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"pattern-detector.d.ts","sourceRoot":"","sources":["../../src/detector/pattern-detector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,KAAK,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAE/B,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAAuB,CAAC;AAIxE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAkBD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,eAAe,CAyB5F;AAgCD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,aAAa,EAAE,EACjC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,eAAe,EAAE,CAwCnB;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,GACb,eAAe,GAAG;IAAE,UAAU,EAAE,eAAe,CAAA;CAAE,CAenD;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,GACb,eAAe,GAAG;IAAE,UAAU,EAAE,iBAAiB,CAAA;CAAE,CAYrD;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAO,GAC9C,eAAe,CAUjB"}
1
+ {"version":3,"file":"pattern-detector.d.ts","sourceRoot":"","sources":["../../src/detector/pattern-detector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,KAAK,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAE/B,oFAAoF;AACpF,eAAO,MAAM,2BAA2B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGxE,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAAuB,CAAC;AAIxE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAkBD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,eAAe,CAyB5F;AAgCD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,aAAa,EAAE,EACjC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,eAAe,EAAE,CAwCnB;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,GACb,eAAe,GAAG;IAAE,UAAU,EAAE,eAAe,CAAA;CAAE,CAenD;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,GACb,eAAe,GAAG;IAAE,UAAU,EAAE,iBAAiB,CAAA;CAAE,CAYrD;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAO,GAC9C,eAAe,CAUjB"}
@@ -3,6 +3,11 @@ import { REQUEST_ENTRY_ROLES } from '../scanner/role-classifier.js';
3
3
  import { evaluateGate } from './confidence-gate.js';
4
4
  import { inferDbClientMarkers, inferUiLayerMarkers, KNOWN_DB_EXAMPLES, KNOWN_DB_LIBRARIES, } from './marker-inference.js';
5
5
  export { REQUEST_ENTRY_ROLES };
6
+ /** The forbidden-import rules' names, which ESLint prints as `archprint/<name>`. */
7
+ export const FORBIDDEN_IMPORT_RULE_NAMES = {
8
+ 'AP-001': 'no-db-client-in-request-entry',
9
+ 'AP-002': 'no-ui-layer-in-server-entry',
10
+ };
6
11
  export const DEFAULT_DB_MARKERS = KNOWN_DB_LIBRARIES;
7
12
  const INFRA_PATH = /(^|\/)(health|seed|admin|webhook|webhooks|migration|migrations|cron)(\/|\.|$)/;
8
13
  const NODE_MODULES = /[/\\]node_modules[/\\]/;
@@ -1 +1 @@
1
- {"version":3,"file":"pattern-detector.js","sourceRoot":"","sources":["../../src/detector/pattern-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pattern-detector.js","sourceRoot":"","sources":["../../src/detector/pattern-detector.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { type ImportGraph } from '../scanner/import-graph.js';
2
2
  import { type GateResult } from './confidence-gate.js';
3
+ export declare const STORY: RegExp;
3
4
  export interface StoryImportViolation {
4
5
  file: string;
5
6
  importer: string;
@@ -1 +1 @@
1
- {"version":3,"file":"stories-isolation-detector.d.ts","sourceRoot":"","sources":["../../src/detector/stories-isolation-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIrE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,oBAAoB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,uBAA4B,GACpC,wBAAwB,CA8B1B"}
1
+ {"version":3,"file":"stories-isolation-detector.d.ts","sourceRoot":"","sources":["../../src/detector/stories-isolation-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAErE,eAAO,MAAM,KAAK,QAAyB,CAAC;AAE5C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,oBAAoB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,uBAA4B,GACpC,wBAAwB,CA8B1B"}
@@ -1,6 +1,6 @@
1
1
  import { buildImportGraph } from '../scanner/import-graph.js';
2
2
  import { evaluateGate } from './confidence-gate.js';
3
- const STORY = /\.stories\.(ts|tsx)$/;
3
+ export const STORY = /\.stories\.(ts|tsx)$/;
4
4
  export function detectStoriesIsolation(appDir, options = {}) {
5
5
  const { root, files, adjacency } = options.graph ?? buildImportGraph(appDir, { resolve: options.resolve ?? false });
6
6
  const stories = new Set(files.filter((file) => STORY.test(file.relativePath)).map((file) => file.relativePath));
@@ -1 +1 @@
1
- {"version":3,"file":"stories-isolation-detector.js","sourceRoot":"","sources":["../../src/detector/stories-isolation-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAoB,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,YAAY,EAAmB,MAAM,sBAAsB,CAAC;AAErE,MAAM,KAAK,GAAG,sBAAsB,CAAC;AAoBrC,MAAM,UAAU,sBAAsB,CACpC,MAAc,EACd,UAAmC,EAAE;IAErC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAC9B,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC;IAEnF,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CACvF,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,SAAS,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAA2B,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;SACjE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;SAC/C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhD,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,OAAO,CAAC,IAAI;QACxB,aAAa,EAAE,UAAU,CAAC,MAAM;QAChC,IAAI,EAAE,YAAY,CAAC;YACjB,aAAa,EAAE,OAAO,CAAC,IAAI;YAC3B,kBAAkB,EAAE,UAAU,CAAC,MAAM;YACrC,cAAc,EAAE,CAAC;SAClB,CAAC;QACF,UAAU;KACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"stories-isolation-detector.js","sourceRoot":"","sources":["../../src/detector/stories-isolation-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAoB,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,YAAY,EAAmB,MAAM,sBAAsB,CAAC;AAErE,MAAM,CAAC,MAAM,KAAK,GAAG,sBAAsB,CAAC;AAoB5C,MAAM,UAAU,sBAAsB,CACpC,MAAc,EACd,UAAmC,EAAE;IAErC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAC9B,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC;IAEnF,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CACvF,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,SAAS,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAA2B,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;SACjE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;SAC/C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhD,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,OAAO,CAAC,IAAI;QACxB,aAAa,EAAE,UAAU,CAAC,MAAM;QAChC,IAAI,EAAE,YAAY,CAAC;YACjB,aAAa,EAAE,OAAO,CAAC,IAAI;YAC3B,kBAAkB,EAAE,UAAU,CAAC,MAAM;YACrC,cAAc,EAAE,CAAC;SAClB,CAAC;QACF,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { GenerationStatus } from '../detector/confidence-gate.js';
2
+ import { type AllowedFor } from './depcruise-exempt.js';
2
3
  import type { AppIsolationGroup } from '../detector/app-isolation-detector.js';
3
4
  export declare const appIsolationRuleName: (container: string) => string;
4
5
  export interface CrossAppRule {
@@ -7,6 +8,7 @@ export interface CrossAppRule {
7
8
  severity: 'error' | 'warn' | 'info';
8
9
  from: {
9
10
  path: string;
11
+ pathNot?: string | string[];
10
12
  };
11
13
  to: {
12
14
  path: string;
@@ -16,5 +18,5 @@ export interface CrossAppRule {
16
18
  export interface CrossAppConfig {
17
19
  forbidden: CrossAppRule[];
18
20
  }
19
- export declare function toDependencyCruiserAppIsolation(groups: readonly AppIsolationGroup[], include?: readonly GenerationStatus[]): CrossAppConfig;
21
+ export declare function toDependencyCruiserAppIsolation(groups: readonly AppIsolationGroup[], include?: readonly GenerationStatus[], appPath?: string, allowedFor?: AllowedFor): CrossAppConfig;
20
22
  //# sourceMappingURL=app-isolation-emitters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-isolation-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/app-isolation-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAO/E,eAAO,MAAM,oBAAoB,GAAI,WAAW,MAAM,KAAG,MACtB,CAAC;AAKpC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,SAAS,iBAAiB,EAAE,EACpC,OAAO,GAAE,SAAS,gBAAgB,EAAa,GAC9C,cAAc,CAchB"}
1
+ {"version":3,"file":"app-isolation-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/app-isolation-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EACL,KAAK,UAAU,EAKhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAO/E,eAAO,MAAM,oBAAoB,GAAI,WAAW,MAAM,KAAG,MACtB,CAAC;AAKpC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC;IACpD,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,SAAS,iBAAiB,EAAE,EACpC,OAAO,GAAE,SAAS,gBAAgB,EAAa,EAC/C,OAAO,SAAM,EACb,UAAU,GAAE,UAAwB,GACnC,cAAc,CAkBhB"}
@@ -1,17 +1,22 @@
1
+ import { appPathPrefix, exemptingFrom, noneAllowed, toleratedFiles, } from './depcruise-exempt.js';
1
2
  const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
2
3
  const slug = (container) => container.replace(/[^a-zA-Z0-9]+/g, '-').replace(/^-|-$/g, '');
3
4
  export const appIsolationRuleName = (container) => `no-cross-app-${slug(container)}`;
4
5
  const confidencePct = (group) => `${(group.gate.conditions.confidence.value * 100).toFixed(0)}%`;
5
- export function toDependencyCruiserAppIsolation(groups, include = ['AUTO']) {
6
+ export function toDependencyCruiserAppIsolation(groups, include = ['AUTO'], appPath = '.', allowedFor = noneAllowed) {
6
7
  const forbidden = groups
7
8
  .filter((group) => include.includes(group.gate.status))
8
9
  .map((group) => {
9
- const container = escapeRegExp(group.container);
10
+ const name = appIsolationRuleName(group.container);
11
+ const container = appPathPrefix(appPath) + escapeRegExp(group.container);
10
12
  return {
11
- name: appIsolationRuleName(group.container),
13
+ name,
12
14
  comment: `Archprint inferred app isolation: the ${group.appCount} apps under "${group.container}" do not import each other (${group.appFileCount - group.crossImporterCount}/${group.appFileCount} app files conform); cross-app imports are forbidden (confidence ${confidencePct(group)}).`,
13
15
  severity: 'error',
14
- from: { path: `^${container}/([^/]+)/` },
16
+ from: {
17
+ path: `^${container}/([^/]+)/`,
18
+ ...exemptingFrom(toleratedFiles(group.violations, allowedFor(name)), appPath),
19
+ },
15
20
  to: { path: `^${container}/([^/]+)/`, pathNot: `^${container}/$1/` },
16
21
  };
17
22
  });
@@ -1 +1 @@
1
- {"version":3,"file":"app-isolation-emitters.js","sourceRoot":"","sources":["../../src/generator/app-isolation-emitters.ts"],"names":[],"mappings":"AAGA,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAE7F,MAAM,IAAI,GAAG,CAAC,SAAiB,EAAU,EAAE,CACzC,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAEjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAAiB,EAAU,EAAE,CAChE,gBAAgB,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AAEpC,MAAM,aAAa,GAAG,CAAC,KAAwB,EAAU,EAAE,CACzD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAclE,MAAM,UAAU,+BAA+B,CAC7C,MAAoC,EACpC,UAAuC,CAAC,MAAM,CAAC;IAE/C,MAAM,SAAS,GAAG,MAAM;SACrB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACtD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAChD,OAAO;YACL,IAAI,EAAE,oBAAoB,CAAC,KAAK,CAAC,SAAS,CAAC;YAC3C,OAAO,EAAE,yCAAyC,KAAK,CAAC,QAAQ,gBAAgB,KAAK,CAAC,SAAS,+BAA+B,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,YAAY,oEAAoE,aAAa,CAAC,KAAK,CAAC,IAAI;YAC7R,QAAQ,EAAE,OAAgB;YAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,SAAS,WAAW,EAAE;YACxC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,SAAS,WAAW,EAAE,OAAO,EAAE,IAAI,SAAS,MAAM,EAAE;SACrE,CAAC;IACJ,CAAC,CAAC,CAAC;IACL,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"app-isolation-emitters.js","sourceRoot":"","sources":["../../src/generator/app-isolation-emitters.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,aAAa,EACb,aAAa,EACb,WAAW,EACX,cAAc,GACf,MAAM,uBAAuB,CAAC;AAG/B,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAE7F,MAAM,IAAI,GAAG,CAAC,SAAiB,EAAU,EAAE,CACzC,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAEjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAAiB,EAAU,EAAE,CAChE,gBAAgB,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AAEpC,MAAM,aAAa,GAAG,CAAC,KAAwB,EAAU,EAAE,CACzD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAclE,MAAM,UAAU,+BAA+B,CAC7C,MAAoC,EACpC,UAAuC,CAAC,MAAM,CAAC,EAC/C,OAAO,GAAG,GAAG,EACb,aAAyB,WAAW;IAEpC,MAAM,SAAS,GAAG,MAAM;SACrB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACtD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACzE,OAAO;YACL,IAAI;YACJ,OAAO,EAAE,yCAAyC,KAAK,CAAC,QAAQ,gBAAgB,KAAK,CAAC,SAAS,+BAA+B,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,YAAY,oEAAoE,aAAa,CAAC,KAAK,CAAC,IAAI;YAC7R,QAAQ,EAAE,OAAgB;YAC1B,IAAI,EAAE;gBACJ,IAAI,EAAE,IAAI,SAAS,WAAW;gBAC9B,GAAG,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC;aAC9E;YACD,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,SAAS,WAAW,EAAE,OAAO,EAAE,IAAI,SAAS,MAAM,EAAE;SACrE,CAAC;IACJ,CAAC,CAAC,CAAC;IACL,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC"}
@@ -1,11 +1,7 @@
1
1
  import type { ConsoleIsolationAnalysis } from '../detector/console-isolation-detector.js';
2
- export interface EslintFlatConfigBlock {
3
- files: string[];
4
- ignores: string[];
5
- rules: Record<string, unknown>;
6
- }
2
+ import type { EslintFamilyRule } from './eslint-family-rules.js';
7
3
  export declare function withMinedExemptions(baseIgnores: readonly string[], violations: readonly {
8
4
  file: string;
9
5
  }[]): string[];
10
- export declare function toEslintConsoleIsolation(analysis: ConsoleIsolationAnalysis): EslintFlatConfigBlock | null;
6
+ export declare function toEslintConsoleIsolation(analysis: ConsoleIsolationAnalysis): EslintFamilyRule | null;
11
7
  //# sourceMappingURL=console-isolation-emitters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"console-isolation-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/console-isolation-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAG1F,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,UAAU,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GACtC,MAAM,EAAE,CAEV;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,wBAAwB,GACjC,qBAAqB,GAAG,IAAI,CAO9B"}
1
+ {"version":3,"file":"console-isolation-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/console-isolation-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,UAAU,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GACtC,MAAM,EAAE,CAEV;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,wBAAwB,GACjC,gBAAgB,GAAG,IAAI,CAQzB"}
@@ -6,9 +6,10 @@ export function toEslintConsoleIsolation(analysis) {
6
6
  if (analysis.libraryFileCount === 0 || analysis.gate.status !== 'AUTO')
7
7
  return null;
8
8
  return {
9
- files: ['**/*.{ts,tsx}'],
9
+ name: 'console-isolation',
10
+ message: 'Do not use console in library code.',
10
11
  ignores: withMinedExemptions([...TEST_GLOBS, ...CLI_GLOBS], analysis.violations),
11
- rules: { 'no-console': 'error' },
12
+ check: { kind: 'member', object: 'console' },
12
13
  };
13
14
  }
14
15
  //# sourceMappingURL=console-isolation-emitters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"console-isolation-emitters.js","sourceRoot":"","sources":["../../src/generator/console-isolation-emitters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQvE,MAAM,UAAU,mBAAmB,CACjC,WAA8B,EAC9B,UAAuC;IAEvC,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,QAAkC;IAElC,IAAI,QAAQ,CAAC,gBAAgB,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACpF,OAAO;QACL,KAAK,EAAE,CAAC,eAAe,CAAC;QACxB,OAAO,EAAE,mBAAmB,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,SAAS,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC;QAChF,KAAK,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE;KACjC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"console-isolation-emitters.js","sourceRoot":"","sources":["../../src/generator/console-isolation-emitters.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,UAAU,mBAAmB,CACjC,WAA8B,EAC9B,UAAuC;IAEvC,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,QAAkC;IAElC,IAAI,QAAQ,CAAC,gBAAgB,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACpF,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,qCAAqC;QAC9C,OAAO,EAAE,mBAAmB,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,SAAS,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC;QAChF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE;KAC7C,CAAC;AACJ,CAAC"}
@@ -1,18 +1,4 @@
1
1
  import type { DeepRelativeAnalysis } from '../detector/deep-relative-detector.js';
2
- export interface NoRestrictedImportsPattern {
3
- regex: string;
4
- message: string;
5
- }
6
- export interface EslintNoRestrictedImportsConfig {
7
- ignores?: string[];
8
- rules: {
9
- 'no-restricted-imports': ['error', {
10
- patterns: NoRestrictedImportsPattern[];
11
- }];
12
- };
13
- }
14
- export declare function exemptImporters(violations: readonly {
15
- file: string;
16
- }[]): Pick<EslintNoRestrictedImportsConfig, 'ignores'>;
17
- export declare function toEslintDeepRelative(analysis: DeepRelativeAnalysis): EslintNoRestrictedImportsConfig | null;
2
+ import type { EslintFamilyRule } from './eslint-family-rules.js';
3
+ export declare function toEslintDeepRelative(analysis: DeepRelativeAnalysis): EslintFamilyRule | null;
18
4
  //# sourceMappingURL=deep-relative-emitters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deep-relative-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/deep-relative-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAGlF,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,+BAA+B;IAC9C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE;QACL,uBAAuB,EAAE,CAAC,OAAO,EAAE;YAAE,QAAQ,EAAE,0BAA0B,EAAE,CAAA;SAAE,CAAC,CAAC;KAChF,CAAC;CACH;AAED,wBAAgB,eAAe,CAC7B,UAAU,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GACtC,IAAI,CAAC,+BAA+B,EAAE,SAAS,CAAC,CAIlD;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,oBAAoB,GAC7B,+BAA+B,GAAG,IAAI,CAkBxC"}
1
+ {"version":3,"file":"deep-relative-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/deep-relative-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAElF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,gBAAgB,GAAG,IAAI,CAQ5F"}
@@ -1,27 +1,13 @@
1
- import { literalGlob } from './eslint-scope.js';
2
- export function exemptImporters(violations) {
3
- return violations.length > 0
4
- ? { ignores: violations.map((violation) => literalGlob(violation.file)) }
5
- : {};
6
- }
1
+ import { withMinedExemptions } from './console-isolation-emitters.js';
2
+ import { TEST_GLOBS } from './eslint-scope.js';
7
3
  export function toEslintDeepRelative(analysis) {
8
4
  if (analysis.relativeImporterCount === 0 || analysis.gate.status !== 'AUTO')
9
5
  return null;
10
6
  return {
11
- ...exemptImporters(analysis.violations),
12
- rules: {
13
- 'no-restricted-imports': [
14
- 'error',
15
- {
16
- patterns: [
17
- {
18
- regex: '^(\\.\\./){3,}',
19
- message: 'Deep relative import: use a workspace alias instead of ../../../',
20
- },
21
- ],
22
- },
23
- ],
24
- },
7
+ name: 'import-style',
8
+ message: 'Deep relative import: use a workspace alias instead of ../../../',
9
+ ignores: withMinedExemptions([...TEST_GLOBS], analysis.violations),
10
+ check: { kind: 'import', regex: '^(\\.\\./){3,}', typeImports: true },
25
11
  };
26
12
  }
27
13
  //# sourceMappingURL=deep-relative-emitters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deep-relative-emitters.js","sourceRoot":"","sources":["../../src/generator/deep-relative-emitters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAchD,MAAM,UAAU,eAAe,CAC7B,UAAuC;IAEvC,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC;QAC1B,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;QACzE,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,QAA8B;IAE9B,IAAI,QAAQ,CAAC,qBAAqB,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACzF,OAAO;QACL,GAAG,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;QACvC,KAAK,EAAE;YACL,uBAAuB,EAAE;gBACvB,OAAO;gBACP;oBACE,QAAQ,EAAE;wBACR;4BACE,KAAK,EAAE,gBAAgB;4BACvB,OAAO,EAAE,kEAAkE;yBAC5E;qBACF;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"deep-relative-emitters.js","sourceRoot":"","sources":["../../src/generator/deep-relative-emitters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,UAAU,oBAAoB,CAAC,QAA8B;IACjE,IAAI,QAAQ,CAAC,qBAAqB,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACzF,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,kEAAkE;QAC3E,OAAO,EAAE,mBAAmB,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC;QAClE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,IAAI,EAAE;KACtE,CAAC;AACJ,CAAC"}
@@ -3,7 +3,22 @@ export declare const appPathPrefix: (appPath: string) => string;
3
3
  /** A regex matching exactly these app-relative files. */
4
4
  export declare const exactAppFiles: (files: readonly string[], appPath: string) => string;
5
5
  export declare const TEST_ROLE_REGEX = "(\\.(test|spec|e2e-spec|e2e)\\.(ts|tsx)$)|((^|/)(__tests__|__mocks__|e2e|cypress|playwright|test|tests)/)";
6
- export declare function exemptDepcruiseFrom(base: string | readonly string[], violations: readonly {
6
+ export type AllowedFor = (ruleId: string) => readonly string[];
7
+ export declare const noneAllowed: AllowedFor;
8
+ /** The files a rule tolerates: those it was inferred with, and those allowed with a reason. */
9
+ export declare const toleratedFiles: (violations: readonly {
7
10
  file: string;
8
- }[]): string | string[];
11
+ }[], allowed: readonly string[]) => {
12
+ file: string;
13
+ }[];
14
+ /** A `from` exemption for the tolerated files, or none when there are none. */
15
+ export declare const exemptingFrom: (tolerated: readonly {
16
+ file: string;
17
+ }[], appPath: string) => {
18
+ pathNot?: string | string[];
19
+ };
20
+ /** The base patterns, plus one regex for exactly the tolerated app files. */
21
+ export declare function exemptDepcruiseFrom(base: string | readonly string[], tolerated: readonly {
22
+ file: string;
23
+ }[], appPath: string): string | string[];
9
24
  //# sourceMappingURL=depcruise-exempt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"depcruise-exempt.d.ts","sourceRoot":"","sources":["../../src/generator/depcruise-exempt.ts"],"names":[],"mappings":"AAEA,6GAA6G;AAC7G,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,KAAG,MAG/C,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,aAAa,GAAI,OAAO,SAAS,MAAM,EAAE,EAAE,SAAS,MAAM,KAAG,MACH,CAAC;AAExE,eAAO,MAAM,eAAe,8GACiF,CAAC;AAE9G,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAChC,UAAU,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GACtC,MAAM,GAAG,MAAM,EAAE,CAOnB"}
1
+ {"version":3,"file":"depcruise-exempt.d.ts","sourceRoot":"","sources":["../../src/generator/depcruise-exempt.ts"],"names":[],"mappings":"AAEA,6GAA6G;AAC7G,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,KAAG,MAG/C,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,aAAa,GAAI,OAAO,SAAS,MAAM,EAAE,EAAE,SAAS,MAAM,KAAG,MACH,CAAC;AAExE,eAAO,MAAM,eAAe,8GACiF,CAAC;AAE9G,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAC;AAE/D,eAAO,MAAM,WAAW,EAAE,UAAqB,CAAC;AAEhD,+FAA+F;AAC/F,eAAO,MAAM,cAAc,GACzB,YAAY,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EACvC,SAAS,SAAS,MAAM,EAAE,KACzB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAA2D,CAAC;AAE/E,+EAA+E;AAC/E,eAAO,MAAM,aAAa,GACxB,WAAW,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EACtC,SAAS,MAAM,KACd;IAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACwD,CAAC;AAWzF,6EAA6E;AAC7E,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAChC,SAAS,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EACtC,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,MAAM,EAAE,CAOnB"}
@@ -7,11 +7,25 @@ export const appPathPrefix = (appPath) => {
7
7
  /** A regex matching exactly these app-relative files. */
8
8
  export const exactAppFiles = (files, appPath) => `^${appPathPrefix(appPath)}(?:${files.map(escapeRegExp).join('|')})$`;
9
9
  export const TEST_ROLE_REGEX = '(\\.(test|spec|e2e-spec|e2e)\\.(ts|tsx)$)|((^|/)(__tests__|__mocks__|e2e|cypress|playwright|test|tests)/)';
10
- export function exemptDepcruiseFrom(base, violations) {
11
- const bases = typeof base === 'string' ? [base] : [...base];
10
+ export const noneAllowed = () => [];
11
+ /** The files a rule tolerates: those it was inferred with, and those allowed with a reason. */
12
+ export const toleratedFiles = (violations, allowed) => [...violations, ...allowed.map((file) => ({ file }))];
13
+ /** A `from` exemption for the tolerated files, or none when there are none. */
14
+ export const exemptingFrom = (tolerated, appPath) => tolerated.length === 0 ? {} : { pathNot: exemptDepcruiseFrom([], tolerated, appPath) };
15
+ /**
16
+ * Exactly these app files, whether dependency-cruiser runs where archprint ran (`apps/web/src/a.ts`) or inside the
17
+ * app (`src/a.ts`), as the ESLint exemptions allow both; never a sibling app's file or one whose path ends the same.
18
+ */
19
+ const toleratedAppFiles = (files, appPath) => {
20
+ const prefix = appPathPrefix(appPath);
21
+ return `^${prefix === '' ? '' : `(?:${prefix})?`}(?:${files.map(escapeRegExp).join('|')})$`;
22
+ };
23
+ /** The base patterns, plus one regex for exactly the tolerated app files. */
24
+ export function exemptDepcruiseFrom(base, tolerated, appPath) {
25
+ const files = [...new Set(tolerated.map((item) => item.file))].sort();
12
26
  const parts = [
13
- ...bases,
14
- ...violations.map((violation) => `(^|/)${escapeRegExp(violation.file)}$`),
27
+ ...(typeof base === 'string' ? [base] : base),
28
+ ...(files.length === 0 ? [] : [toleratedAppFiles(files, appPath)]),
15
29
  ];
16
30
  return parts.length === 1 ? parts[0] : parts;
17
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"depcruise-exempt.js","sourceRoot":"","sources":["../../src/generator/depcruise-exempt.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAE7F,6GAA6G;AAC7G,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAe,EAAU,EAAE;IACvD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACnE,OAAO,UAAU,KAAK,EAAE,IAAI,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;AACvF,CAAC,CAAC;AAEF,yDAAyD;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAwB,EAAE,OAAe,EAAU,EAAE,CACjF,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAExE,MAAM,CAAC,MAAM,eAAe,GAC1B,2GAA2G,CAAC;AAE9G,MAAM,UAAU,mBAAmB,CACjC,IAAgC,EAChC,UAAuC;IAEvC,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG;QACZ,GAAG,KAAK;QACR,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;KAC1E,CAAC;IACF,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"depcruise-exempt.js","sourceRoot":"","sources":["../../src/generator/depcruise-exempt.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAE7F,6GAA6G;AAC7G,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAe,EAAU,EAAE;IACvD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACnE,OAAO,UAAU,KAAK,EAAE,IAAI,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;AACvF,CAAC,CAAC;AAEF,yDAAyD;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAwB,EAAE,OAAe,EAAU,EAAE,CACjF,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAExE,MAAM,CAAC,MAAM,eAAe,GAC1B,2GAA2G,CAAC;AAI9G,MAAM,CAAC,MAAM,WAAW,GAAe,GAAG,EAAE,CAAC,EAAE,CAAC;AAEhD,+FAA+F;AAC/F,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,UAAuC,EACvC,OAA0B,EACN,EAAE,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAE/E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,SAAsC,EACtC,OAAe,EACkB,EAAE,CACnC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,mBAAmB,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;AAEzF;;;GAGG;AACH,MAAM,iBAAiB,GAAG,CAAC,KAAwB,EAAE,OAAe,EAAU,EAAE;IAC9E,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,MAAM,IAAI,MAAM,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9F,CAAC,CAAC;AAEF,6EAA6E;AAC7E,MAAM,UAAU,mBAAmB,CACjC,IAAgC,EAChC,SAAsC,EACtC,OAAe;IAEf,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtE,MAAM,KAAK,GAAG;QACZ,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7C,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;KACnE,CAAC;IACF,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAChD,CAAC"}
@@ -14,5 +14,5 @@ export interface NoInternalsRule {
14
14
  export interface NoInternalsConfig {
15
15
  forbidden: NoInternalsRule[];
16
16
  }
17
- export declare function toDependencyCruiserDependencyInternals(analysis: DependencyInternalsAnalysis, allowedFor: (ruleId: string) => readonly string[]): NoInternalsConfig;
17
+ export declare function toDependencyCruiserDependencyInternals(analysis: DependencyInternalsAnalysis, allowedFor: (ruleId: string) => readonly string[], appPath?: string): NoInternalsConfig;
18
18
  //# sourceMappingURL=dependency-internals-emitters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dependency-internals-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/dependency-internals-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAGhG,eAAO,MAAM,yBAAyB,4BAA4B,CAAC;AAInE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC;IACrC,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,2BAA2B,EACrC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,GAChD,iBAAiB,CAyBnB"}
1
+ {"version":3,"file":"dependency-internals-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/dependency-internals-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAGhG,eAAO,MAAM,yBAAyB,4BAA4B,CAAC;AAInE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC;IACrC,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,2BAA2B,EACrC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,EACjD,OAAO,SAAM,GACZ,iBAAiB,CA0BnB"}
@@ -1,7 +1,7 @@
1
1
  import { exemptDepcruiseFrom, TEST_ROLE_REGEX } from './depcruise-exempt.js';
2
2
  export const DEPENDENCY_INTERNALS_RULE = 'no-dependency-internals';
3
3
  const INTERNAL_PATH = 'node_modules/(?:@[^/]+/)?[^/]+/(?:src|internal|internals)/';
4
- export function toDependencyCruiserDependencyInternals(analysis, allowedFor) {
4
+ export function toDependencyCruiserDependencyInternals(analysis, allowedFor, appPath = '.') {
5
5
  if (analysis.externalImporterCount === 0 || analysis.gate.status !== 'AUTO') {
6
6
  return { forbidden: [] };
7
7
  }
@@ -17,7 +17,7 @@ export function toDependencyCruiserDependencyInternals(analysis, allowedFor) {
17
17
  pathNot: exemptDepcruiseFrom([TEST_ROLE_REGEX, 'node_modules'], [
18
18
  ...analysis.violations,
19
19
  ...allowedFor(DEPENDENCY_INTERNALS_RULE).map((file) => ({ file })),
20
- ]),
20
+ ], appPath),
21
21
  },
22
22
  to: { path: INTERNAL_PATH },
23
23
  },
@@ -1 +1 @@
1
- {"version":3,"file":"dependency-internals-emitters.js","sourceRoot":"","sources":["../../src/generator/dependency-internals-emitters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7E,MAAM,CAAC,MAAM,yBAAyB,GAAG,yBAAyB,CAAC;AAEnE,MAAM,aAAa,GAAG,4DAA4D,CAAC;AAcnF,MAAM,UAAU,sCAAsC,CACpD,QAAqC,EACrC,UAAiD;IAEjD,IAAI,QAAQ,CAAC,qBAAqB,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5E,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC3B,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,qBAAqB,GAAG,QAAQ,CAAC,aAAa,CAAC;IACxE,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACjF,OAAO;QACL,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,0CAA0C,OAAO,IAAI,QAAQ,CAAC,qBAAqB,0IAA0I,KAAK,IAAI;gBAC/O,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE;oBACJ,OAAO,EAAE,mBAAmB,CAC1B,CAAC,eAAe,EAAE,cAAc,CAAC,EACjC;wBACE,GAAG,QAAQ,CAAC,UAAU;wBACtB,GAAG,UAAU,CAAC,yBAAyB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACnE,CACF;iBACF;gBACD,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;aAC5B;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"dependency-internals-emitters.js","sourceRoot":"","sources":["../../src/generator/dependency-internals-emitters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7E,MAAM,CAAC,MAAM,yBAAyB,GAAG,yBAAyB,CAAC;AAEnE,MAAM,aAAa,GAAG,4DAA4D,CAAC;AAcnF,MAAM,UAAU,sCAAsC,CACpD,QAAqC,EACrC,UAAiD,EACjD,OAAO,GAAG,GAAG;IAEb,IAAI,QAAQ,CAAC,qBAAqB,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5E,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC3B,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,qBAAqB,GAAG,QAAQ,CAAC,aAAa,CAAC;IACxE,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACjF,OAAO;QACL,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,0CAA0C,OAAO,IAAI,QAAQ,CAAC,qBAAqB,0IAA0I,KAAK,IAAI;gBAC/O,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE;oBACJ,OAAO,EAAE,mBAAmB,CAC1B,CAAC,eAAe,EAAE,cAAc,CAAC,EACjC;wBACE,GAAG,QAAQ,CAAC,UAAU;wBACtB,GAAG,UAAU,CAAC,yBAAyB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACnE,EACD,OAAO,CACR;iBACF;gBACD,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;aAC5B;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -17,5 +17,5 @@ export interface EntryPurityConfig {
17
17
  forbidden: EntryPurityRule[];
18
18
  }
19
19
  /** Dependency-cruiser cannot exempt a single import, so an entry already imported is exempt as a target. */
20
- export declare function toDependencyCruiserEntryPurity(analysis: EntryPurityAnalysis, allowedFor: (ruleId: string) => readonly string[]): EntryPurityConfig;
20
+ export declare function toDependencyCruiserEntryPurity(analysis: EntryPurityAnalysis, allowedFor: (ruleId: string) => readonly string[], appPath?: string): EntryPurityConfig;
21
21
  //# sourceMappingURL=entry-purity-emitters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entry-purity-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/entry-purity-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAI7F,eAAO,MAAM,iBAAiB,8BAA8B,CAAC;AAS7D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC;IACrC,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAAC,kBAAkB,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACjF;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,4GAA4G;AAC5G,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,mBAAmB,EAC7B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,GAChD,iBAAiB,CA6BnB"}
1
+ {"version":3,"file":"entry-purity-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/entry-purity-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAI7F,eAAO,MAAM,iBAAiB,8BAA8B,CAAC;AAS7D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC;IACrC,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAAC,kBAAkB,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACjF;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,4GAA4G;AAC5G,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,mBAAmB,EAC7B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,EACjD,OAAO,SAAM,GACZ,iBAAiB,CA8BnB"}
@@ -7,7 +7,7 @@ const entryPath = () => {
7
7
  return `(${sources.join('|')})`;
8
8
  };
9
9
  /** Dependency-cruiser cannot exempt a single import, so an entry already imported is exempt as a target. */
10
- export function toDependencyCruiserEntryPurity(analysis, allowedFor) {
10
+ export function toDependencyCruiserEntryPurity(analysis, allowedFor, appPath = '.') {
11
11
  if (analysis.entryCount === 0 || analysis.gate.status !== 'AUTO')
12
12
  return { forbidden: [] };
13
13
  const conform = analysis.entryCount - analysis.offenderCount;
@@ -22,13 +22,13 @@ export function toDependencyCruiserEntryPurity(analysis, allowedFor) {
22
22
  comment: `Archprint inferred entry purity: ${conform}/${analysis.entryCount} framework entries (pages, routes) are loaded by the framework and imported by nothing; importing a framework entry from other code is forbidden (confidence ${floor}).`,
23
23
  severity: 'error',
24
24
  from: {
25
- pathNot: exemptDepcruiseFrom(['node_modules', TEST_ROLE_REGEX, entryPath()], allowedFor(ENTRY_PURITY_RULE).map((file) => ({ file }))),
25
+ pathNot: exemptDepcruiseFrom(['node_modules', TEST_ROLE_REGEX, entryPath()], allowedFor(ENTRY_PURITY_RULE).map((file) => ({ file })), appPath),
26
26
  },
27
27
  to: {
28
28
  path: entryPath(),
29
29
  ...(importedEntries.length === 0
30
30
  ? {}
31
- : { pathNot: exemptDepcruiseFrom([], importedEntries) }),
31
+ : { pathNot: exemptDepcruiseFrom([], importedEntries, appPath) }),
32
32
  dependencyTypesNot: ['type-only'],
33
33
  },
34
34
  },