archprint 0.13.0 → 0.14.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 (93) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +45 -8
  3. package/dist/cli/adopted-rules.d.ts +10 -1
  4. package/dist/cli/adopted-rules.d.ts.map +1 -1
  5. package/dist/cli/adopted-rules.js +63 -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 +11 -3
  9. package/dist/cli/allow.js.map +1 -1
  10. package/dist/cli/allowed-evidence.d.ts.map +1 -1
  11. package/dist/cli/allowed-evidence.js +78 -1
  12. package/dist/cli/allowed-evidence.js.map +1 -1
  13. package/dist/cli/check-evaluate.d.ts.map +1 -1
  14. package/dist/cli/check-evaluate.js +46 -0
  15. package/dist/cli/check-evaluate.js.map +1 -1
  16. package/dist/cli/generate.d.ts +4 -4
  17. package/dist/cli/generate.d.ts.map +1 -1
  18. package/dist/cli/generate.js +70 -23
  19. package/dist/cli/generate.js.map +1 -1
  20. package/dist/cli/recommend.d.ts.map +1 -1
  21. package/dist/cli/recommend.js +12 -7
  22. package/dist/cli/recommend.js.map +1 -1
  23. package/dist/detector/cycle-detector.d.ts +5 -0
  24. package/dist/detector/cycle-detector.d.ts.map +1 -1
  25. package/dist/detector/cycle-detector.js +20 -0
  26. package/dist/detector/cycle-detector.js.map +1 -1
  27. package/dist/detector/dependency-internals-detector.d.ts.map +1 -1
  28. package/dist/detector/dependency-internals-detector.js +6 -20
  29. package/dist/detector/dependency-internals-detector.js.map +1 -1
  30. package/dist/detector/entry-purity-detector.d.ts +7 -0
  31. package/dist/detector/entry-purity-detector.d.ts.map +1 -1
  32. package/dist/detector/entry-purity-detector.js +21 -10
  33. package/dist/detector/entry-purity-detector.js.map +1 -1
  34. package/dist/detector/phantom-dependency-detector.d.ts +7 -0
  35. package/dist/detector/phantom-dependency-detector.d.ts.map +1 -1
  36. package/dist/detector/phantom-dependency-detector.js +18 -39
  37. package/dist/detector/phantom-dependency-detector.js.map +1 -1
  38. package/dist/detector/server-client-detector.d.ts +5 -0
  39. package/dist/detector/server-client-detector.d.ts.map +1 -1
  40. package/dist/detector/server-client-detector.js +8 -3
  41. package/dist/detector/server-client-detector.js.map +1 -1
  42. package/dist/generator/depcruise-exempt.d.ts +4 -0
  43. package/dist/generator/depcruise-exempt.d.ts.map +1 -1
  44. package/dist/generator/depcruise-exempt.js +7 -0
  45. package/dist/generator/depcruise-exempt.js.map +1 -1
  46. package/dist/generator/dependency-internals-emitters.d.ts +2 -1
  47. package/dist/generator/dependency-internals-emitters.d.ts.map +1 -1
  48. package/dist/generator/dependency-internals-emitters.js +7 -3
  49. package/dist/generator/dependency-internals-emitters.js.map +1 -1
  50. package/dist/generator/entry-purity-emitters.d.ts +7 -3
  51. package/dist/generator/entry-purity-emitters.d.ts.map +1 -1
  52. package/dist/generator/entry-purity-emitters.js +19 -5
  53. package/dist/generator/entry-purity-emitters.js.map +1 -1
  54. package/dist/generator/eslint-app-emitter.d.ts +59 -0
  55. package/dist/generator/eslint-app-emitter.d.ts.map +1 -0
  56. package/dist/generator/eslint-app-emitter.js +275 -0
  57. package/dist/generator/eslint-app-emitter.js.map +1 -0
  58. package/dist/generator/eslint-preset-emitter.d.ts +2 -2
  59. package/dist/generator/eslint-preset-emitter.d.ts.map +1 -1
  60. package/dist/generator/eslint-preset-emitter.js +6 -6
  61. package/dist/generator/eslint-preset-emitter.js.map +1 -1
  62. package/dist/generator/layer-emitters.d.ts.map +1 -1
  63. package/dist/generator/layer-emitters.js +2 -6
  64. package/dist/generator/layer-emitters.js.map +1 -1
  65. package/dist/generator/phantom-dependency-emitters.d.ts +2 -1
  66. package/dist/generator/phantom-dependency-emitters.d.ts.map +1 -1
  67. package/dist/generator/phantom-dependency-emitters.js +7 -3
  68. package/dist/generator/phantom-dependency-emitters.js.map +1 -1
  69. package/dist/generator/server-client-emitters.d.ts +10 -3
  70. package/dist/generator/server-client-emitters.d.ts.map +1 -1
  71. package/dist/generator/server-client-emitters.js +23 -4
  72. package/dist/generator/server-client-emitters.js.map +1 -1
  73. package/dist/scanner/directives.d.ts +6 -0
  74. package/dist/scanner/directives.d.ts.map +1 -0
  75. package/dist/scanner/directives.js +35 -0
  76. package/dist/scanner/directives.js.map +1 -0
  77. package/dist/scanner/package-name.d.ts +10 -0
  78. package/dist/scanner/package-name.d.ts.map +1 -0
  79. package/dist/scanner/package-name.js +37 -0
  80. package/dist/scanner/package-name.js.map +1 -0
  81. package/dist/scanner/resolve-import.d.ts +5 -0
  82. package/dist/scanner/resolve-import.d.ts.map +1 -1
  83. package/dist/scanner/resolve-import.js +22 -19
  84. package/dist/scanner/resolve-import.js.map +1 -1
  85. package/dist/scanner/role-classifier.d.ts +11 -2
  86. package/dist/scanner/role-classifier.d.ts.map +1 -1
  87. package/dist/scanner/role-classifier.js +13 -39
  88. package/dist/scanner/role-classifier.js.map +1 -1
  89. package/package.json +1 -1
  90. package/dist/generator/eslint-layer-emitter.d.ts +0 -29
  91. package/dist/generator/eslint-layer-emitter.d.ts.map +0 -1
  92. package/dist/generator/eslint-layer-emitter.js +0 -121
  93. package/dist/generator/eslint-layer-emitter.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # archprint
2
2
 
3
+ ## 0.14.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Undeclared (phantom) dependencies and the server/client boundary can now be enforced with plain ESLint, like layer boundaries. When your repo does not use dependency-cruiser, `generate --include-structural` writes them into `.archprint/eslint.mjs` as `archprint/no-phantom-dependencies` and `archprint/no-server-only-in-client`, with no extra plugin, and they pass on the code they were generated from. The phantom-dependency rule reads your `package.json` each time ESLint starts, so declaring a package is enough; no regenerate. Both rules are now adopted, whichever tool enforces them: `archprint check` reports a new break and `archprint allow` accepts one.
8
+
9
+ Circular dependencies are now enforced. When your code has no cycle (and enough files to say so), `generate` and `init` adopt the rule `no-cycles`, without `--include-structural`, and `archprint check` reports each import that closes a new cycle in a pull request; to accept a cycle, allow every file in it. There is no lint rule for cycles, because finding one needs the whole import graph. The phantom-dependency and server/client rules still need `--include-structural`. Older archprint versions do not recognize these adopted rules, so update archprint in CI (for example the GitHub Action's `archprint-version`) before you regenerate.
10
+
11
+ Fixes: the server/client rule written for dependency-cruiser flagged every server module that correctly imports `server-only`, and missed the client component importing it; it now covers exactly the client components and server-only modules the scan found. A module that only mentions "server-only" in a comment or a string is no longer treated as server-only. A "use client" directive after a byte-order mark or a shebang line is recognized. `#` subpath imports and `scheme:` specifiers (such as `bun:test`) are no longer reported as undeclared packages.
12
+
13
+ - Package internals and entry purity can now be enforced with plain ESLint too. When your repo does not use dependency-cruiser, `generate --include-structural` writes `archprint/no-dependency-internals` (importing a package's `src` or `internal` folders) and `archprint/no-import-framework-entry` (importing a page, layout or route handler from other code) into `.archprint/eslint.mjs`. Both pass on the code they were generated from and are adopted, so `archprint check` reports a new break and `archprint allow` accepts one. The entry rule recognizes pages and routes by their path, so new routes are covered without regenerating.
14
+
15
+ Fixes: the entry-purity rule written for dependency-cruiser flagged a page importing another page, test files, and the imports that already existed when it was generated; it now exempts all three. Package-internals evidence no longer counts `#` subpath imports or `scheme:` specifiers as packages.
16
+
17
+ ## 0.13.1
18
+
19
+ ### Patch Changes
20
+
21
+ - The README now walks through adopting the layer boundaries you agree with: read them with `scan`, write the ones you chose with `generate --include-structural --rules`, and reference them with `wire`.
22
+
3
23
  ## 0.13.0
4
24
 
5
25
  ### Minor Changes
package/README.md CHANGED
@@ -159,6 +159,9 @@ archprint generate apps/web --check
159
159
  # Generate a single rule by id after reviewing it (including a SUGGEST rule)
160
160
  archprint generate apps/web --rule AP-001
161
161
 
162
+ # Adopt only the rules you choose, including reviewed layer boundaries
163
+ archprint generate apps/web --include-structural --rules AP-002,no-utils-to-app
164
+
162
165
  # Recommend a rule set from the evidence and the detected stack (fresh repos too)
163
166
  archprint recommend apps/web
164
167
 
@@ -197,7 +200,9 @@ folder's purpose incorrectly. So only the **mechanical** families, which rest on
197
200
  without review: forbidden imports (AP-001, AP-002), circular dependencies, test isolation, import style, console
198
201
  isolation, and public-API barrels. An adversarial correctness audit (three rounds over four real repositories)
199
202
  found zero false positives in these every round. All of them except circular dependencies are written as lint
200
- rules; for cycles, Archprint reports the result but does not write a rule yet.
203
+ rules; a cycle-free codebase with enough files for the gate adopts "no circular dependencies", which
204
+ `archprint check` enforces on each pull request (cycles need the whole import graph, so there is no lint rule for
205
+ them).
201
206
 
202
207
  The **structural** families infer a "layer" or "role" from paths, which can be wrong (layer and role boundaries,
203
208
  UI/data separation, entry purity, server/client, feature-slice and app isolation, env access, workspace package
@@ -214,7 +219,8 @@ connecting them, use `archprint generate --check`.
214
219
  ## What it can detect
215
220
 
216
221
  **Ships as:** **Auto** = turned on as enforcement (mechanical families). **Review** = held for your review by
217
- default; emit with `--include-structural`. **Report** = shown only, never enforced.
222
+ default; emit with `--include-structural`. **Check** = enforced by `archprint check` on each pull request. **Report** =
223
+ shown only, never enforced.
218
224
 
219
225
  Archprint recognizes the stack (Next.js, Nest, SvelteKit, Nuxt, Remix) and classifies UI components across React
220
226
  (`.tsx`), Angular (`.component.ts`, `.directive.ts`), and Vue and Svelte single-file components (it reads the
@@ -223,7 +229,7 @@ Archprint recognizes the stack (Next.js, Nest, SvelteKit, Nuxt, Remix) and class
223
229
  | Detector | Rule it can infer | Ships as |
224
230
  | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------- |
225
231
  | Forbidden imports (AP-001, AP-002) | AP-001: a request entry (route handler) must not import the DB client. AP-002: a server entry must not import the UI layer | Auto |
226
- | Circular dependencies | The module graph should stay acyclic (gated on how cycle free it already is); reported, no lint rule written yet | Report |
232
+ | Circular dependencies | The module graph should stay acyclic; adopted when there are no cycles, and `archprint check` reports a new one | Check |
227
233
  | Test isolation | Production (non-test) code must not import test or spec files | Auto |
228
234
  | Dependency hygiene | Import third-party packages by their public entry, not a dependency's `src`/`internal` internals | Review |
229
235
  | Dependency declaration | Every imported third-party package must be declared in `package.json` (no phantom/transitive deps) | Review |
@@ -244,7 +250,7 @@ Archprint recognizes the stack (Next.js, Nest, SvelteKit, Nuxt, Remix) and class
244
250
  | Transitive reachability | A layer boundary that a plain import rule passes but that leaks through an intermediary layer | Report |
245
251
 
246
252
  `recommend` (and `init`) sort every rule family into tiers: rules your code already follows (enforce now), rules
247
- your code follows that Archprint reports but does not write yet (circular dependencies today), rules with thin
253
+ your code follows that Archprint reports but does not write, rules with thin
248
254
  evidence (review and adopt), and rules that comparable repos commonly follow but yours does not yet (adopt from day
249
255
  one). Each recommendation carries the share of comparable repos (your detected stack, else
250
256
  overall) that already enforce that rule, mined from a census of tens of thousands of public TypeScript
@@ -265,16 +271,17 @@ format.
265
271
  held for review, and worth adopting, and the list of managed outputs `eject` removes.
266
272
  - **`.archprint/eslint.mjs`** (when ESLint is present): one self-contained ESLint flat-config file that inlines
267
273
  every inferred ESLint rule (marker-based forbidden imports, `no-restricted-imports` import-style boundaries,
268
- console isolation, and layer boundaries when you include structural rules and do not use dependency-cruiser)
274
+ console isolation, and, when you include structural rules and do not use dependency-cruiser, layer boundaries,
275
+ undeclared (phantom) dependencies, the server/client boundary, package internals and entry purity)
269
276
  and needs no extra plugins: it adds rules to your existing ESLint setup, which already parses your TypeScript.
270
277
  So you can commit it, publish it, or hand it to another repo and adopt it in one line
271
278
  (`import archprint from './.archprint/eslint.mjs'`). Layer boundaries are the exception: they find your app
272
279
  relative to the file, so they only apply where it was generated. It self-ignores `**/.archprint/**`. The
273
- forbidden-import (AP-) and layer rules ship as a generated local eslint plugin inside it, so wiring the eslint
274
- config enforces them too, no extra install.
280
+ forbidden-import (AP-) rules and those structural rules ship as a generated local eslint plugin inside it, so
281
+ wiring the eslint config enforces them too, no extra install.
275
282
  - **`.archprint/dependency-cruiser.json`** (when dependency-cruiser is present): one `forbidden` ruleset with the
276
283
  mechanical boundaries (public-API deep-import, test-isolation); the review-held ones (layer, role-layering,
277
- feature-slice, app-isolation, entry-purity, dependency-internals, phantom deps) are added only with
284
+ feature-slice, app-isolation, entry-purity, dependency-internals, phantom deps, server/client) are added only with
278
285
  `--include-structural`, after you review them.
279
286
  - **A managed section in your `README.md`** summarizing what is enforced now, followed but only reported, held for
280
287
  review, and worth adopting (written by `init`, or `generate --readme`), plus a managed `.prettierignore` entry so
@@ -347,6 +354,11 @@ jobs:
347
354
  `generate`, and checks only the rules recorded there: the mechanical rules, plus layer boundaries once you adopt
348
355
  them with `--include-structural`. Rules adopted in the same
349
356
  pull request are listed but never counted against it.
357
+ - **Imports that resolve to nothing are TypeScript's job.** Run `tsc --noEmit` in CI, or rely on the type check
358
+ `next build` runs by default: it reports a missing module (TS2307) with your project's own module resolution.
359
+ Archprint does not generate this rule, and on a TypeScript app `import/no-unresolved` or dependency-cruiser's
360
+ `not-to-unresolvable` tend to report false errors on `paths` aliases, package `exports` and bundler suffixes such
361
+ as `?raw`.
350
362
  - **A justified exception needs a reason.** When a file has a real reason to break a rule, record it:
351
363
  `npx archprint allow AP-001 app/api/health/route.ts --reason "Health check queries the database directly"`.
352
364
  It goes in the `allowed` list of `.archprint/config.json`, `check` stops counting it and lists it with its reason
@@ -532,6 +544,31 @@ LAYER BOUNDARIES (review before enforcing)
532
544
  are shown for review, not written as enforcement unless you pass `--include-structural`. Every number is measured
533
545
  from the import graph, not estimated.
534
546
 
547
+ ### Adopt the layer boundaries you agree with
548
+
549
+ A layer boundary is held for review because a folder name can be misread as a layer. Once you have read the
550
+ evidence, adopt the boundaries you agree with by id: `utils !-> app` becomes the rule `no-utils-to-app`.
551
+
552
+ ```bash
553
+ # 1. Read the boundaries and their evidence
554
+ archprint scan apps/web
555
+
556
+ # 2. Write the rules you chose: AP-002 plus two of the boundaries above
557
+ archprint generate apps/web --include-structural --rules AP-002,no-utils-to-app,no-hooks-to-app
558
+
559
+ # 3. Reference the generated rules from your ESLint config (once)
560
+ archprint wire
561
+ ```
562
+
563
+ Without dependency-cruiser, each boundary becomes an ESLint rule in `.archprint/eslint.mjs`, such as
564
+ `archprint/no-utils-to-app`, with no extra plugin; with dependency-cruiser, it goes there instead. The rule
565
+ exempts the files that already break the boundary, so your lint stays green, and it catches a new import across
566
+ the boundary, by relative path or alias. `archprint check` reports a new break in a pull request, and
567
+ `archprint allow` records a justified exception. `--rules` keeps only the rules it names, so list every rule you
568
+ want in the same run. If your CI pins archprint (for example the GitHub Action's `archprint-version`), use 0.13.0
569
+ or later there first. The [rules reference](https://tommkruix.github.io/archprint/rules#layer-boundaries-review)
570
+ says exactly which imports and files the rule reads.
571
+
535
572
  ## Technical notes
536
573
 
537
574
  **Fast and deep modes.** `scan` defaults to a **fast** specifier-level pass (no type checker). `generate` defaults
@@ -28,7 +28,7 @@ export interface PublicApiRule extends RuleBase {
28
28
  dir: string;
29
29
  }
30
30
  export interface SingleFamilyRule extends RuleBase {
31
- family: 'test-isolation' | 'console-isolation' | 'import-style';
31
+ family: 'test-isolation' | 'console-isolation' | 'import-style' | 'phantom-deps' | 'server-client' | 'dependency-hygiene' | 'entry-purity' | 'cycles';
32
32
  }
33
33
  export interface LayerRule extends RuleBase {
34
34
  family: 'layer';
@@ -40,6 +40,15 @@ export declare function forbiddenImportRule(pattern: ScannedPattern, mode: Resol
40
40
  export declare function testIsolationRule(scan: ScanResult): AdoptedRule;
41
41
  export declare function consoleIsolationRule(scan: ScanResult): AdoptedRule;
42
42
  export declare function importStyleRule(scan: ScanResult): AdoptedRule;
43
+ export declare function phantomDependencyRule(scan: ScanResult): AdoptedRule;
44
+ export declare function serverClientRule(scan: ScanResult): AdoptedRule;
45
+ export declare function dependencyInternalsRule(scan: ScanResult): AdoptedRule;
46
+ export declare function entryPurityRule(scan: ScanResult): AdoptedRule;
47
+ export declare const NO_CYCLES_RULE = "no-cycles";
48
+ /** Whether the code has no cycle and enough files to say so: only then is no-cycles a rule it follows. */
49
+ export declare const isCycleFree: (scan: ScanResult) => boolean;
50
+ /** Adopted only while the code has no cycle: then it is a rule the code already follows. */
51
+ export declare function cycleRule(scan: ScanResult): AdoptedRule;
43
52
  export declare function publicApiRules(scan: ScanResult): AdoptedRule[];
44
53
  export declare function layerRule(boundary: LayerBoundary): LayerRule;
45
54
  export declare const byRuleId: (a: AdoptedRule, b: AdoptedRule) => number;
@@ -1 +1 @@
1
- {"version":3,"file":"adopted-rules.d.ts","sourceRoot":"","sources":["../../src/cli/adopted-rules.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAKnE,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5D,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAG9C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAoB,SAAQ,QAAQ;IACnD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChD;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD,MAAM,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,cAAc,CAAC;CACjE;AAED,MAAM,WAAW,SAAU,SAAQ,QAAQ;IACzC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,WAAW,GAAG,mBAAmB,GAAG,aAAa,GAAG,SAAS,GAAG,gBAAgB,CAAC;AAQ7F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,GAAG,WAAW,CAW9F;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAS/D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CASlE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAS7D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,EAAE,CAW9D;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,SAAS,CAc5D;AAED,eAAO,MAAM,QAAQ,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,KAAG,MAAkC,CAAC;AAE7F,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AA2E/C,wCAAwC;AACxC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAQ1E;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,GAAG,IAAI,CAGjF;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,GAAG,IAAI,CAKrE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAgB3D"}
1
+ {"version":3,"file":"adopted-rules.d.ts","sourceRoot":"","sources":["../../src/cli/adopted-rules.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,11 @@
1
1
  import { existsSync, readFileSync } from 'node:fs';
2
2
  import * as path from 'node:path';
3
3
  import { layerRuleName } from '../generator/layer-emitters.js';
4
+ import { DEPENDENCY_INTERNALS_RULE } from '../generator/dependency-internals-emitters.js';
5
+ import { ENTRY_PURITY_RULE } from '../generator/entry-purity-emitters.js';
6
+ import { PHANTOM_DEPENDENCY_RULE } from '../generator/phantom-dependency-emitters.js';
4
7
  import { publicApiRuleName } from '../generator/public-api-emitters.js';
8
+ import { SERVER_CLIENT_RULE } from '../generator/server-client-emitters.js';
5
9
  import { configPath, configSection, readConfigSection } from './archprint-config.js';
6
10
  import { FAMILY_STATEMENTS } from './rule-statements.js';
7
11
  /** Where 0.9.0 to 0.11.x kept the adopted rules, before they moved into config.json. */
@@ -54,6 +58,60 @@ export function importStyleRule(scan) {
54
58
  evidence: evidenceOf(analysis.gate, analysis.relativeImporterCount, analysis.offenderCount),
55
59
  };
56
60
  }
61
+ export function phantomDependencyRule(scan) {
62
+ const analysis = scan.phantomDependencies;
63
+ return {
64
+ id: PHANTOM_DEPENDENCY_RULE,
65
+ family: 'phantom-deps',
66
+ statement: FAMILY_STATEMENTS['phantom-deps'],
67
+ mode: 'fast',
68
+ evidence: evidenceOf(analysis.gate, analysis.externalImporterCount, analysis.offenderCount),
69
+ };
70
+ }
71
+ export function serverClientRule(scan) {
72
+ const analysis = scan.serverClient;
73
+ return {
74
+ id: SERVER_CLIENT_RULE,
75
+ family: 'server-client',
76
+ statement: FAMILY_STATEMENTS['server-client'],
77
+ mode: 'fast',
78
+ evidence: evidenceOf(analysis.gate, analysis.clientCount, analysis.offenderCount),
79
+ };
80
+ }
81
+ export function dependencyInternalsRule(scan) {
82
+ const analysis = scan.dependencyInternals;
83
+ return {
84
+ id: DEPENDENCY_INTERNALS_RULE,
85
+ family: 'dependency-hygiene',
86
+ statement: FAMILY_STATEMENTS['dependency-hygiene'],
87
+ mode: 'fast',
88
+ evidence: evidenceOf(analysis.gate, analysis.externalImporterCount, analysis.offenderCount),
89
+ };
90
+ }
91
+ export function entryPurityRule(scan) {
92
+ const analysis = scan.entryPurity;
93
+ return {
94
+ id: ENTRY_PURITY_RULE,
95
+ family: 'entry-purity',
96
+ statement: FAMILY_STATEMENTS['entry-purity'],
97
+ mode: 'fast',
98
+ evidence: evidenceOf(analysis.gate, analysis.entryCount, analysis.offenderCount),
99
+ };
100
+ }
101
+ export const NO_CYCLES_RULE = 'no-cycles';
102
+ /** Whether the code has no cycle and enough files to say so: only then is no-cycles a rule it follows. */
103
+ export const isCycleFree = (scan) => scan.cycles.cycles.length === 0 && scan.cycles.gate.status === 'AUTO';
104
+ /** Adopted only while the code has no cycle: then it is a rule the code already follows. */
105
+ export function cycleRule(scan) {
106
+ const analysis = scan.cycles;
107
+ return {
108
+ id: NO_CYCLES_RULE,
109
+ family: 'cycles',
110
+ statement: FAMILY_STATEMENTS.cycles,
111
+ mode: 'fast',
112
+ evidence: evidenceOf(analysis.gate, analysis.fileCount, analysis.filesInCycles),
113
+ };
114
+ }
57
115
  export function publicApiRules(scan) {
58
116
  return scan.publicApi.groups
59
117
  .filter((group) => group.gate.status === 'AUTO')
@@ -84,6 +142,11 @@ const FAMILIES = new Set([
84
142
  'forbidden-imports',
85
143
  'public-api',
86
144
  'layer',
145
+ 'phantom-deps',
146
+ 'server-client',
147
+ 'dependency-hygiene',
148
+ 'entry-purity',
149
+ 'cycles',
87
150
  'test-isolation',
88
151
  'console-isolation',
89
152
  'import-style',
@@ -1 +1 @@
1
- {"version":3,"file":"adopted-rules.js","sourceRoot":"","sources":["../../src/cli/adopted-rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adopted-rules.js","sourceRoot":"","sources":["../../src/cli/adopted-rules.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"allow.d.ts","sourceRoot":"","sources":["../../src/cli/allow.ts"],"names":[],"mappings":"AAaA,qBAAa,UAAW,SAAQ,KAAK;CAAG;AAExC,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAOD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAiDtD"}
1
+ {"version":3,"file":"allow.d.ts","sourceRoot":"","sources":["../../src/cli/allow.ts"],"names":[],"mappings":"AAaA,qBAAa,UAAW,SAAQ,KAAK;CAAG;AAExC,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAgBD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAiDtD"}
package/dist/cli/allow.js CHANGED
@@ -7,7 +7,15 @@ import { readConfig } from './archprint-config.js';
7
7
  import { evaluateRules } from './check-evaluate.js';
8
8
  export class AllowError extends Error {
9
9
  }
10
- const regenerateHint = (rule) => `Run archprint generate to update the ${rule.family === 'layer' ? 'generated' : 'ESLint'} rules.`;
10
+ const GENERATED_FOR_EITHER_ENFORCER = new Set([
11
+ 'layer',
12
+ 'phantom-deps',
13
+ 'server-client',
14
+ ]);
15
+ /** What to run so the generated rules follow the change; nothing when only archprint check enforces the rule. */
16
+ const regenerateHint = (rule) => rule.family === 'cycles'
17
+ ? ''
18
+ : ` Run archprint generate to update the ${GENERATED_FOR_EITHER_ENFORCER.has(rule.family) ? 'generated' : 'ESLint'} rules.`;
11
19
  const toPosix = (value) => value.split(path.sep).join('/');
12
20
  export function runAllow(options) {
13
21
  const outDir = path.resolve(options.cwd, options.out);
@@ -39,7 +47,7 @@ export function runAllow(options) {
39
47
  throw new AllowError(`There is no allowed exception for ${rule.id} in ${file}.`);
40
48
  }
41
49
  writeAllowed(outDir, others);
42
- return `Removed the exception for ${rule.id} in ${file}. ${regenerateHint(rule)}`;
50
+ return `Removed the exception for ${rule.id} in ${file}.${regenerateHint(rule)}`;
43
51
  }
44
52
  const reason = options.reason?.trim() ?? '';
45
53
  if (reason === '') {
@@ -53,7 +61,7 @@ export function runAllow(options) {
53
61
  writeAllowed(outDir, [...others, entry]);
54
62
  const lint = rule.family === 'public-api'
55
63
  ? ' dependency-cruiser does not read this list, so add the exception there too if you use it.'
56
- : ` ${regenerateHint(rule)}`;
64
+ : regenerateHint(rule);
57
65
  return `Allowed ${rule.id} in ${file}. archprint check accepts it now.${lint}`;
58
66
  }
59
67
  //# sourceMappingURL=allow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"allow.js","sourceRoot":"","sources":["../../src/cli/allow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"allow.js","sourceRoot":"","sources":["../../src/cli/allow.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"allowed-evidence.d.ts","sourceRoot":"","sources":["../../src/cli/allowed-evidence.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,KAAK,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;AA0B5D,gHAAgH;AAChH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAU/D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,GAAG,UAAU,CAuHnF"}
1
+ {"version":3,"file":"allowed-evidence.d.ts","sourceRoot":"","sources":["../../src/cli/allowed-evidence.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,KAAK,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;AA6F5D,gHAAgH;AAChH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAU/D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,GAAG,UAAU,CA4HnF"}
@@ -1,7 +1,12 @@
1
1
  import { evaluateGate, wilsonLowerBound } from '../detector/confidence-gate.js';
2
+ import { importedEntries } from '../detector/entry-purity-detector.js';
2
3
  import { layerRuleName } from '../generator/layer-emitters.js';
4
+ import { DEPENDENCY_INTERNALS_RULE } from '../generator/dependency-internals-emitters.js';
5
+ import { ENTRY_PURITY_RULE } from '../generator/entry-purity-emitters.js';
6
+ import { PHANTOM_DEPENDENCY_RULE } from '../generator/phantom-dependency-emitters.js';
7
+ import { SERVER_CLIENT_RULE } from '../generator/server-client-emitters.js';
3
8
  import { publicApiRuleName } from '../generator/public-api-emitters.js';
4
- import { readAdoptedRules } from './adopted-rules.js';
9
+ import { NO_CYCLES_RULE, readAdoptedRules } from './adopted-rules.js';
5
10
  import { allowedFilesByRule, readAllowed } from './allowed-exceptions.js';
6
11
  function exclude(violations, allowedFiles) {
7
12
  const allowed = new Set(allowedFiles);
@@ -15,6 +20,73 @@ const regate = (population, violating, roleConfidence = 1, applicable = true) =>
15
20
  roleConfidence,
16
21
  applicable,
17
22
  });
23
+ function regatedCycles(scan, allowedFiles) {
24
+ const analysis = scan.cycles;
25
+ const allowed = new Set(allowedFiles);
26
+ const cycles = analysis.cycles.filter((cycle) => !cycle.files.every((file) => allowed.has(file)));
27
+ if (cycles.length === analysis.cycles.length)
28
+ return analysis;
29
+ const filesInCycles = new Set(cycles.flatMap((cycle) => cycle.files)).size;
30
+ return { ...analysis, cycles, filesInCycles, gate: regate(analysis.fileCount, filesInCycles) };
31
+ }
32
+ function regatedInternals(scan, allowedFiles) {
33
+ const analysis = scan.dependencyInternals;
34
+ const internals = exclude(analysis.violations, allowedFiles);
35
+ if (internals.removedFiles === 0)
36
+ return analysis;
37
+ const externalImporterCount = analysis.externalImporterCount - internals.removedFiles;
38
+ return {
39
+ ...analysis,
40
+ externalImporterCount,
41
+ offenderCount: internals.keptFiles,
42
+ violations: internals.kept,
43
+ gate: regate(externalImporterCount, internals.keptFiles),
44
+ };
45
+ }
46
+ /** Allowed importers leave the evidence; an entry still counts while another file imports it. */
47
+ function regatedEntryPurity(scan, allowedImporters) {
48
+ const analysis = scan.entryPurity;
49
+ const allowed = new Set(allowedImporters);
50
+ const imports = analysis.imports.filter((entry) => !allowed.has(entry.importer));
51
+ if (imports.length === analysis.imports.length)
52
+ return analysis;
53
+ const violations = importedEntries(imports);
54
+ return {
55
+ ...analysis,
56
+ imports,
57
+ violations,
58
+ offenderCount: violations.length,
59
+ gate: regate(analysis.entryCount, violations.length),
60
+ };
61
+ }
62
+ function regatedPhantom(scan, allowedFiles) {
63
+ const analysis = scan.phantomDependencies;
64
+ const phantom = exclude(analysis.violations, allowedFiles);
65
+ if (phantom.removedFiles === 0)
66
+ return analysis;
67
+ const externalImporterCount = analysis.externalImporterCount - phantom.removedFiles;
68
+ return {
69
+ ...analysis,
70
+ externalImporterCount,
71
+ offenderCount: phantom.keptFiles,
72
+ violations: phantom.kept,
73
+ gate: regate(externalImporterCount, phantom.keptFiles),
74
+ };
75
+ }
76
+ function regatedServerClient(scan, allowedFiles) {
77
+ const analysis = scan.serverClient;
78
+ const boundary = exclude(analysis.violations, allowedFiles);
79
+ if (boundary.removedFiles === 0)
80
+ return analysis;
81
+ const clientCount = analysis.clientCount - boundary.removedFiles;
82
+ return {
83
+ ...analysis,
84
+ clientCount,
85
+ offenderCount: boundary.keptFiles,
86
+ violations: boundary.kept,
87
+ gate: regate(clientCount, boundary.keptFiles, 1, analysis.serverModules.length > 0),
88
+ };
89
+ }
18
90
  /** Allowed files of the rules already adopted: an allowance can keep an adopted rule, never promote another. */
19
91
  export function adoptedAllowances(outDir) {
20
92
  let adopted;
@@ -112,6 +184,11 @@ export function excludeAllowed(scan, allowed) {
112
184
  };
113
185
  }),
114
186
  },
187
+ cycles: regatedCycles(scan, allowedFor(NO_CYCLES_RULE)),
188
+ phantomDependencies: regatedPhantom(scan, allowedFor(PHANTOM_DEPENDENCY_RULE)),
189
+ dependencyInternals: regatedInternals(scan, allowedFor(DEPENDENCY_INTERNALS_RULE)),
190
+ entryPurity: regatedEntryPurity(scan, allowedFor(ENTRY_PURITY_RULE)),
191
+ serverClient: regatedServerClient(scan, allowedFor(SERVER_CLIENT_RULE)),
115
192
  layerBoundaries: scan.layerBoundaries.map((boundary) => {
116
193
  const layer = exclude(boundary.violations, allowedFor(layerRuleName(boundary)));
117
194
  if (layer.removedFiles === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"allowed-evidence.js","sourceRoot":"","sources":["../../src/cli/allowed-evidence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"allowed-evidence.js","sourceRoot":"","sources":["../../src/cli/allowed-evidence.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"check-evaluate.d.ts","sourceRoot":"","sources":["../../src/cli/check-evaluate.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAuC,MAAM,oBAAoB,CAAC;AAE3F,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;CACnB;AAiCD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,EAAE,CAiEtF"}
1
+ {"version":3,"file":"check-evaluate.d.ts","sourceRoot":"","sources":["../../src/cli/check-evaluate.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAuC,MAAM,oBAAoB,CAAC;AAE3F,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;CACnB;AAiCD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,EAAE,CAyGtF"}
@@ -1,8 +1,14 @@
1
1
  import { detectConsoleIsolation } from '../detector/console-isolation-detector.js';
2
+ import { cycleEdges } from '../detector/cycle-detector.js';
3
+ import { detectDependencyInternals } from '../detector/dependency-internals-detector.js';
4
+ import { detectEntryPurity } from '../detector/entry-purity-detector.js';
5
+ import { buildImportGraph } from '../scanner/import-graph.js';
2
6
  import { detectDeepRelativeImports } from '../detector/deep-relative-detector.js';
3
7
  import { layerImports } from '../detector/layer-detector.js';
4
8
  import { detectForbiddenImports } from '../detector/pattern-detector.js';
9
+ import { detectPhantomDependencies } from '../detector/phantom-dependency-detector.js';
5
10
  import { detectPublicApiBoundaries } from '../detector/public-api-detector.js';
11
+ import { detectServerClientBoundary } from '../detector/server-client-detector.js';
6
12
  import { detectTestIsolation } from '../detector/test-isolation-detector.js';
7
13
  const toPatternConfig = (rule) => ({
8
14
  id: rule.id,
@@ -52,6 +58,46 @@ export function evaluateRules(appDir, rules) {
52
58
  findings.push({ ruleId: rule.id, file: violation.file, subject: '', kind: 'file' });
53
59
  }
54
60
  }
61
+ for (const rule of byFamily('cycles')) {
62
+ for (const edge of cycleEdges(buildImportGraph(appDir, { resolve: false }))) {
63
+ findings.push({ ruleId: rule.id, file: edge.file, subject: edge.target, kind: 'target' });
64
+ }
65
+ }
66
+ for (const rule of byFamily('dependency-hygiene')) {
67
+ for (const violation of detectDependencyInternals(appDir).violations) {
68
+ findings.push({
69
+ ruleId: rule.id,
70
+ file: violation.file,
71
+ subject: violation.specifier,
72
+ kind: 'specifier',
73
+ });
74
+ }
75
+ }
76
+ for (const rule of byFamily('entry-purity')) {
77
+ for (const edge of detectEntryPurity(appDir).imports) {
78
+ findings.push({ ruleId: rule.id, file: edge.importer, subject: edge.file, kind: 'target' });
79
+ }
80
+ }
81
+ for (const rule of byFamily('phantom-deps')) {
82
+ for (const violation of detectPhantomDependencies(appDir).violations) {
83
+ findings.push({
84
+ ruleId: rule.id,
85
+ file: violation.file,
86
+ subject: violation.specifier,
87
+ kind: 'specifier',
88
+ });
89
+ }
90
+ }
91
+ for (const rule of byFamily('server-client')) {
92
+ for (const violation of detectServerClientBoundary(appDir).violations) {
93
+ findings.push({
94
+ ruleId: rule.id,
95
+ file: violation.file,
96
+ subject: violation.target,
97
+ kind: 'target',
98
+ });
99
+ }
100
+ }
55
101
  for (const rule of byFamily('import-style')) {
56
102
  for (const violation of detectDeepRelativeImports(appDir).violations) {
57
103
  findings.push({
@@ -1 +1 @@
1
- {"version":3,"file":"check-evaluate.js","sourceRoot":"","sources":["../../src/cli/check-evaluate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check-evaluate.js","sourceRoot":"","sources":["../../src/cli/check-evaluate.ts"],"names":[],"mappings":"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"}