archprint 0.12.3 → 0.13.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 (87) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +43 -31
  3. package/dist/cli/adopted-rules.d.ts +8 -1
  4. package/dist/cli/adopted-rules.d.ts.map +1 -1
  5. package/dist/cli/adopted-rules.js +19 -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 +3 -2
  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 +23 -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 +17 -0
  15. package/dist/cli/check-evaluate.js.map +1 -1
  16. package/dist/cli/generate.d.ts +6 -0
  17. package/dist/cli/generate.d.ts.map +1 -1
  18. package/dist/cli/generate.js +93 -43
  19. package/dist/cli/generate.js.map +1 -1
  20. package/dist/cli/layout.d.ts +3 -0
  21. package/dist/cli/layout.d.ts.map +1 -1
  22. package/dist/cli/layout.js +21 -4
  23. package/dist/cli/layout.js.map +1 -1
  24. package/dist/cli/migrate.d.ts.map +1 -1
  25. package/dist/cli/migrate.js +2 -2
  26. package/dist/cli/migrate.js.map +1 -1
  27. package/dist/cli/program.d.ts.map +1 -1
  28. package/dist/cli/program.js +10 -7
  29. package/dist/cli/program.js.map +1 -1
  30. package/dist/cli/recommend.d.ts.map +1 -1
  31. package/dist/cli/recommend.js +3 -1
  32. package/dist/cli/recommend.js.map +1 -1
  33. package/dist/cli/report.d.ts.map +1 -1
  34. package/dist/cli/report.js +4 -2
  35. package/dist/cli/report.js.map +1 -1
  36. package/dist/cli/scan.d.ts +3 -0
  37. package/dist/cli/scan.d.ts.map +1 -1
  38. package/dist/cli/scan.js +7 -6
  39. package/dist/cli/scan.js.map +1 -1
  40. package/dist/detector/cycle-detector.d.ts +3 -0
  41. package/dist/detector/cycle-detector.d.ts.map +1 -1
  42. package/dist/detector/cycle-detector.js +25 -2
  43. package/dist/detector/cycle-detector.js.map +1 -1
  44. package/dist/detector/layer-detector.d.ts +11 -0
  45. package/dist/detector/layer-detector.d.ts.map +1 -1
  46. package/dist/detector/layer-detector.js +44 -56
  47. package/dist/detector/layer-detector.js.map +1 -1
  48. package/dist/detector/layer-paths.d.ts +17 -0
  49. package/dist/detector/layer-paths.d.ts.map +1 -0
  50. package/dist/detector/layer-paths.js +41 -0
  51. package/dist/detector/layer-paths.js.map +1 -0
  52. package/dist/detector/marker-inference.d.ts.map +1 -1
  53. package/dist/detector/marker-inference.js +46 -4
  54. package/dist/detector/marker-inference.js.map +1 -1
  55. package/dist/generator/depcruise-exempt.d.ts.map +1 -1
  56. package/dist/generator/depcruise-exempt.js +4 -1
  57. package/dist/generator/depcruise-exempt.js.map +1 -1
  58. package/dist/generator/eslint-layer-emitter.d.ts +29 -0
  59. package/dist/generator/eslint-layer-emitter.d.ts.map +1 -0
  60. package/dist/generator/eslint-layer-emitter.js +121 -0
  61. package/dist/generator/eslint-layer-emitter.js.map +1 -0
  62. package/dist/generator/eslint-plugin-emitter.d.ts +1 -0
  63. package/dist/generator/eslint-plugin-emitter.d.ts.map +1 -1
  64. package/dist/generator/eslint-plugin-emitter.js +2 -1
  65. package/dist/generator/eslint-plugin-emitter.js.map +1 -1
  66. package/dist/generator/eslint-preset-emitter.d.ts +2 -0
  67. package/dist/generator/eslint-preset-emitter.d.ts.map +1 -1
  68. package/dist/generator/eslint-preset-emitter.js +14 -5
  69. package/dist/generator/eslint-preset-emitter.js.map +1 -1
  70. package/dist/generator/layer-emitters.d.ts +7 -1
  71. package/dist/generator/layer-emitters.d.ts.map +1 -1
  72. package/dist/generator/layer-emitters.js +20 -5
  73. package/dist/generator/layer-emitters.js.map +1 -1
  74. package/dist/generator/ui-data-isolation-emitters.js +1 -1
  75. package/dist/generator/ui-data-isolation-emitters.js.map +1 -1
  76. package/dist/scanner/file-walker.d.ts +15 -0
  77. package/dist/scanner/file-walker.d.ts.map +1 -1
  78. package/dist/scanner/file-walker.js +50 -11
  79. package/dist/scanner/file-walker.js.map +1 -1
  80. package/dist/scanner/source-paths.d.ts +9 -0
  81. package/dist/scanner/source-paths.d.ts.map +1 -0
  82. package/dist/scanner/source-paths.js +13 -0
  83. package/dist/scanner/source-paths.js.map +1 -0
  84. package/dist/scanner/workspace-resolver.d.ts.map +1 -1
  85. package/dist/scanner/workspace-resolver.js +2 -1
  86. package/dist/scanner/workspace-resolver.js.map +1 -1
  87. package/package.json +3 -3
@@ -1,58 +1,23 @@
1
1
  import * as path from 'node:path';
2
2
  import { createImportAnalyzer, walkRepo, } from '../scanner/file-walker.js';
3
3
  import { buildWorkspaceMap } from '../scanner/workspace-resolver.js';
4
+ import { layerRootOf, resolveImportPath } from './layer-paths.js';
4
5
  import { evaluateGate, wilsonLowerBound, } from './confidence-gate.js';
5
- const STRUCTURAL_SEGMENTS = new Set([
6
- 'src',
7
- 'dist',
8
- 'build',
9
- 'public',
10
- 'test',
11
- 'tests',
12
- '__tests__',
13
- 'node_modules',
14
- '.next',
15
- ]);
16
- const ROUTER_ROOTS = new Set(['app', 'pages']);
17
- const isStructural = (segment) => STRUCTURAL_SEGMENTS.has(segment) ||
18
- segment.includes('.') ||
19
- /^\(.*\)$/.test(segment) ||
20
- /^\[.*\]$/.test(segment) ||
21
- segment.startsWith('@');
22
6
  export function layerOfPath(relativePath) {
23
- for (const segment of relativePath.split('/')) {
24
- if (ROUTER_ROOTS.has(segment))
25
- return segment;
26
- if (!isStructural(segment))
27
- return segment;
28
- }
29
- return null;
7
+ return layerRootOf(relativePath)?.layer ?? null;
30
8
  }
31
- const buildAliasEntries = (appDir) => Object.entries(buildWorkspaceMap(appDir)).map(([key, value]) => ({
9
+ /** The tsconfig path aliases and baseUrl folders, each as an app-relative directory. */
10
+ export const layerAliases = (appDir) => Object.entries(buildWorkspaceMap(appDir)).map(([key, value]) => ({
32
11
  prefix: key.replace(/\/?\*$/, ''),
33
- dir: path.resolve(appDir, String(value).replace(/\/?\*$/, '')),
12
+ dir: path
13
+ .relative(appDir, path.resolve(appDir, String(value).replace(/\/?\*$/, '')))
14
+ .split(path.sep)
15
+ .join('/'),
34
16
  }));
35
- function specifierToLayer(specifier, fileAbsPath, appDir, aliases) {
36
- let abs = null;
37
- if (specifier.startsWith('.')) {
38
- abs = path.resolve(path.dirname(fileAbsPath), specifier);
39
- }
40
- else {
41
- for (const { prefix, dir } of aliases) {
42
- if (specifier === prefix || specifier.startsWith(`${prefix}/`)) {
43
- abs = path.resolve(dir, specifier.slice(prefix.length).replace(/^\//, ''));
44
- break;
45
- }
46
- }
47
- }
48
- if (abs === null)
49
- return null;
50
- const rel = path.relative(appDir, abs).split(path.sep).join('/');
51
- return rel.startsWith('..') ? null : layerOfPath(rel);
52
- }
53
- function targetLayers(imp, fileAbsPath, appDir, aliases, resolve) {
17
+ function targetLayers(imp, file, appDir, aliases, resolve) {
54
18
  if (!resolve) {
55
- const layer = specifierToLayer(imp.specifier, fileAbsPath, appDir, aliases);
19
+ const target = resolveImportPath(file.relativePath, imp.specifier, aliases);
20
+ const layer = target === null ? null : layerOfPath(target);
56
21
  return layer === null ? [] : [layer];
57
22
  }
58
23
  const layers = [];
@@ -68,22 +33,25 @@ function targetLayers(imp, fileAbsPath, appDir, aliases, resolve) {
68
33
  }
69
34
  return layers;
70
35
  }
71
- const STATUS_RANK = { AUTO: 0, SUGGEST: 1, REJECT: 2 };
72
- export function detectLayerBoundaries(appDir, options = {}) {
73
- const resolve = options.resolve ?? false;
74
- const minLayerFiles = options.minLayerFiles ?? 5;
75
- const root = path.resolve(appDir);
36
+ function placeFiles(root) {
76
37
  const files = walkRepo(root).filter((file) => file.role !== 'TEST');
77
38
  const fileLayer = new Map();
78
39
  const layerFileCount = new Map();
40
+ const layerDirs = new Map();
79
41
  for (const file of files) {
80
- const layer = layerOfPath(file.relativePath);
81
- if (layer === null)
42
+ const placement = layerRootOf(file.relativePath);
43
+ if (placement === null)
82
44
  continue;
45
+ const { layer, dir } = placement;
83
46
  fileLayer.set(file.relativePath, layer);
84
47
  layerFileCount.set(layer, (layerFileCount.get(layer) ?? 0) + 1);
48
+ layerDirs.set(layer, (layerDirs.get(layer) ?? new Set()).add(dir));
85
49
  }
86
- const aliases = buildAliasEntries(root);
50
+ return { files, fileLayer, layerFileCount, layerDirs };
51
+ }
52
+ /** For each `from>to` layer pair, the files importing across it and the first specifier that does. */
53
+ function collectEdges(root, { files, fileLayer }, resolve) {
54
+ const aliases = layerAliases(root);
87
55
  const analyze = createImportAnalyzer(root, { resolve });
88
56
  const edges = new Map();
89
57
  for (const file of files) {
@@ -101,7 +69,7 @@ export function detectLayerBoundaries(appDir, options = {}) {
101
69
  for (const imp of imports) {
102
70
  if (!imp.hasValueBinding)
103
71
  continue;
104
- for (const to of targetLayers(imp, file.absolutePath, root, aliases, resolve)) {
72
+ for (const to of targetLayers(imp, file, root, aliases, resolve)) {
105
73
  if (to === from)
106
74
  continue;
107
75
  const key = `${from}>${to}`;
@@ -115,6 +83,24 @@ export function detectLayerBoundaries(appDir, options = {}) {
115
83
  }
116
84
  }
117
85
  }
86
+ return edges;
87
+ }
88
+ const edgeList = (sources) => [...(sources?.entries() ?? [])].map(([file, specifier]) => ({ file, specifier }));
89
+ /** Which files in one layer import another, read as written (the way the layer rules enforce). */
90
+ export function layerImports(appDir) {
91
+ const root = path.resolve(appDir);
92
+ const edges = collectEdges(root, placeFiles(root), false);
93
+ return (from, to) => edgeList(edges.get(`${from}>${to}`));
94
+ }
95
+ const STATUS_RANK = { AUTO: 0, SUGGEST: 1, REJECT: 2 };
96
+ export function detectLayerBoundaries(appDir, options = {}) {
97
+ const resolve = options.resolve ?? false;
98
+ const minLayerFiles = options.minLayerFiles ?? 5;
99
+ const root = path.resolve(appDir);
100
+ const placement = placeFiles(root);
101
+ const { layerFileCount, layerDirs } = placement;
102
+ const dirsOf = (layer) => [...layerDirs.get(layer)].sort();
103
+ const edges = collectEdges(root, placement, resolve);
118
104
  const edgeSize = (from, to) => edges.get(`${from}>${to}`)?.size ?? 0;
119
105
  const layers = [...layerFileCount.entries()]
120
106
  .filter(([, count]) => count >= minLayerFiles)
@@ -137,12 +123,14 @@ export function detectLayerBoundaries(appDir, options = {}) {
137
123
  violatingFileCount: violating,
138
124
  roleConfidence: directionalConfidence,
139
125
  });
140
- const violations = [...(edges.get(`${from}>${to}`)?.entries() ?? [])].map(([file, specifier]) => ({ file, specifier }));
126
+ const violations = edgeList(edges.get(`${from}>${to}`));
141
127
  boundaries.push({
142
128
  id: 'AP-LAYER',
143
129
  name: `no-import:${from}->${to}`,
144
130
  from,
145
131
  to,
132
+ fromDirs: dirsOf(from),
133
+ toDirs: dirsOf(to),
146
134
  description: `Files in the "${from}" layer must not import the "${to}" layer (observed: "${to}" depends on "${from}" across ${reverseFlow} file(s), not the reverse).`,
147
135
  stats: {
148
136
  roleFileCount,
@@ -1 +1 @@
1
- {"version":3,"file":"layer-detector.js","sourceRoot":"","sources":["../../src/detector/layer-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layer-detector.js","sourceRoot":"","sources":["../../src/detector/layer-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Layer placement and import resolution shared by the layer detector and the generated ESLint rule. Each function
3
+ * is self-contained (no imports, no outer references) because the generator emits its source verbatim.
4
+ */
5
+ export interface LayerAlias {
6
+ prefix: string;
7
+ dir: string;
8
+ }
9
+ export interface LayerRoot {
10
+ layer: string;
11
+ dir: string;
12
+ }
13
+ /** The layer a file belongs to: its first directory that is a router root or not structural, and that folder. */
14
+ export declare function layerRootOf(relativePath: string): LayerRoot | null;
15
+ /** The app-relative path an import points at, or null for a package or a path outside the app. */
16
+ export declare function resolveImportPath(fileRelativePath: string, specifier: string, aliases: readonly LayerAlias[]): string | null;
17
+ //# sourceMappingURL=layer-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer-paths.d.ts","sourceRoot":"","sources":["../../src/detector/layer-paths.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,iHAAiH;AACjH,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAWlE;AAED,kGAAkG;AAClG,wBAAgB,iBAAiB,CAC/B,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,UAAU,EAAE,GAC7B,MAAM,GAAG,IAAI,CAqBf"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Layer placement and import resolution shared by the layer detector and the generated ESLint rule. Each function
3
+ * is self-contained (no imports, no outer references) because the generator emits its source verbatim.
4
+ */
5
+ /** The layer a file belongs to: its first directory that is a router root or not structural, and that folder. */
6
+ export function layerRootOf(relativePath) {
7
+ const routerRoots = ['app', 'pages'];
8
+ const structural = /^(?:src|dist|build|public|test|tests|__tests__|node_modules|.*\..*|\(.*\)|\[.*\]|@.*)$/;
9
+ const segments = relativePath.split('/');
10
+ const index = segments.findIndex((segment) => routerRoots.includes(segment) || !structural.test(segment));
11
+ return index === -1
12
+ ? null
13
+ : { layer: segments[index], dir: segments.slice(0, index + 1).join('/') };
14
+ }
15
+ /** The app-relative path an import points at, or null for a package or a path outside the app. */
16
+ export function resolveImportPath(fileRelativePath, specifier, aliases) {
17
+ let base;
18
+ let rest;
19
+ if (specifier.startsWith('.')) {
20
+ base = fileRelativePath.split('/').slice(0, -1).join('/');
21
+ rest = specifier;
22
+ }
23
+ else {
24
+ const alias = aliases.find(({ prefix }) => specifier === prefix || specifier.startsWith(`${prefix}/`));
25
+ if (alias === undefined)
26
+ return null;
27
+ base = alias.dir;
28
+ rest = specifier.slice(alias.prefix.length);
29
+ }
30
+ const segments = [];
31
+ for (const segment of `${base}/${rest}`.split('/')) {
32
+ if (segment === '' || segment === '.')
33
+ continue;
34
+ if (segment !== '..')
35
+ segments.push(segment);
36
+ else if (segments.pop() === undefined)
37
+ return null;
38
+ }
39
+ return segments.join('/');
40
+ }
41
+ //# sourceMappingURL=layer-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer-paths.js","sourceRoot":"","sources":["../../src/detector/layer-paths.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,iHAAiH;AACjH,MAAM,UAAU,WAAW,CAAC,YAAoB;IAC9C,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,UAAU,GACd,wFAAwF,CAAC;IAC3F,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAC9B,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CACxE,CAAC;IACF,OAAO,KAAK,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/E,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,iBAAiB,CAC/B,gBAAwB,EACxB,SAAiB,EACjB,OAA8B;IAE9B,IAAI,IAAY,CAAC;IACjB,IAAI,IAAY,CAAC;IACjB,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1D,IAAI,GAAG,SAAS,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CACxB,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,SAAS,KAAK,MAAM,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAC3E,CAAC;QACF,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACrC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC;QACjB,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,OAAO,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG;YAAE,SAAS;QAChD,IAAI,OAAO,KAAK,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACxC,IAAI,QAAQ,CAAC,GAAG,EAAE,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;IACrD,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"marker-inference.d.ts","sourceRoot":"","sources":["../../src/detector/marker-inference.ts"],"names":[],"mappings":"AAIA,OAAO,EAAuB,KAAK,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAyB/E,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAuDD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAqDnE;AAmBD,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAAmD,CAAC;AACpG,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAAmD,CAAC;AAyBnG,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA8BD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,YAAY,GAAE,SAAS,IAAI,EAAwB,GAClD,iBAAiB,CAsEnB"}
1
+ {"version":3,"file":"marker-inference.d.ts","sourceRoot":"","sources":["../../src/detector/marker-inference.ts"],"names":[],"mappings":"AAIA,OAAO,EAAuB,KAAK,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAyB/E,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAuDD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAqDnE;AAsBD,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAAmD,CAAC;AACpG,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAAmD,CAAC;AA+DnG,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA8BD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,YAAY,GAAE,SAAS,IAAI,EAAwB,GAClD,iBAAiB,CAuEnB"}
@@ -1,7 +1,7 @@
1
1
  import { readFileSync } from 'node:fs';
2
2
  import * as path from 'node:path';
3
3
  import { ts } from 'ts-morph';
4
- import { walkRepo } from '../scanner/file-walker.js';
4
+ import { valueImportBindings, walkRepo } from '../scanner/file-walker.js';
5
5
  import { REQUEST_ENTRY_ROLES } from '../scanner/role-classifier.js';
6
6
  import { buildWorkspaceMap } from '../scanner/workspace-resolver.js';
7
7
  import { buildWorkspacePackageMap, findWorkspaceRoot } from '../scanner/workspace-packages.js';
@@ -119,6 +119,7 @@ export function inferUiLayerMarkers(appDir) {
119
119
  evidence: candidates.slice(0, 8),
120
120
  };
121
121
  }
122
+ const SUPABASE_LIBRARY = /@supabase\/(supabase-js|ssr|postgrest-js|auth-helpers-[a-z-]+)(\/|$)/;
122
123
  const DB_LIBRARIES = [
123
124
  { pattern: /@prisma\/(client|adapter-)/, example: '@prisma/client' },
124
125
  { pattern: /drizzle-orm/, example: 'drizzle-orm' },
@@ -134,11 +135,47 @@ const DB_LIBRARIES = [
134
135
  { pattern: /@planetscale\/database/, example: '@planetscale/database' },
135
136
  { pattern: /@neondatabase\/serverless/, example: '@neondatabase/serverless' },
136
137
  { pattern: /better-sqlite3/, example: 'better-sqlite3' },
138
+ { pattern: SUPABASE_LIBRARY, example: '@supabase/supabase-js' },
137
139
  ];
138
140
  export const KNOWN_DB_LIBRARIES = DB_LIBRARIES.map((library) => library.pattern);
139
141
  export const KNOWN_DB_EXAMPLES = DB_LIBRARIES.map((library) => library.example);
140
- const DB_CLIENT_CONSTRUCTOR = /new PrismaClient\s*\(|\bdrizzle\s*\(|new DataSource\s*\(|new Sequelize\s*\(|new Kysely\s*\(|MikroORM\.init\s*\(|mongoose\.(connect|createConnection)\s*\(/;
141
- const DB_CLIENT_CONSTRUCTOR_GENERIC = /new Pool\s*\(|new Client\s*\(|\bpostgres\s*\(|create(Pool|Connection)\s*\(|new Database\s*\(/;
142
+ /** Matches a call to any of `callees`, allowing TypeScript type arguments: `new Kysely<DB>(` as well as `new Kysely(`. */
143
+ const callTo = (callees) => new RegExp(callees.map((callee) => String.raw `${callee}\s*(?:<[^()]*>)?\s*\(`).join('|'));
144
+ const DB_CLIENT_CONSTRUCTOR = callTo([
145
+ 'new PrismaClient',
146
+ String.raw `\bdrizzle`,
147
+ 'new DataSource',
148
+ 'new Sequelize',
149
+ 'new Kysely',
150
+ String.raw `MikroORM\.init`,
151
+ String.raw `mongoose\.(?:connect|createConnection)`,
152
+ ]);
153
+ const DB_CLIENT_CONSTRUCTOR_GENERIC = callTo([
154
+ 'new Pool',
155
+ 'new Client',
156
+ String.raw `\bpostgres`,
157
+ 'create(?:Pool|Connection)',
158
+ 'new Database',
159
+ ]);
160
+ const SUPABASE_FACTORY = String.raw `create(?:Server|Browser)?Client|create(?:RouteHandler|ServerComponent|ServerAction|ClientComponent|Middleware|PagesServer|PagesBrowser)Client`;
161
+ const IS_SUPABASE_FACTORY = new RegExp(`^(?:${SUPABASE_FACTORY})$`);
162
+ /**
163
+ * Whether the file calls a client factory it imported from a Supabase package, under whatever local name. Checking
164
+ * the binding, not the call's name, keeps another SDK's `createClient` out.
165
+ */
166
+ function callsSupabaseFactory(absoluteFile, text) {
167
+ const callees = valueImportBindings(absoluteFile)
168
+ .filter((binding) => SUPABASE_LIBRARY.test(binding.specifier))
169
+ .flatMap((binding) => {
170
+ if (binding.imported === '*') {
171
+ return [String.raw `\b${escapeRegExp(binding.local)}\.(?:${SUPABASE_FACTORY})`];
172
+ }
173
+ return IS_SUPABASE_FACTORY.test(binding.imported)
174
+ ? [String.raw `\b${escapeRegExp(binding.local)}`]
175
+ : [];
176
+ });
177
+ return callees.length > 0 && callTo(callees).test(text);
178
+ }
142
179
  const DB_TOKENS = [
143
180
  'prisma',
144
181
  'drizzle',
@@ -154,6 +191,7 @@ const DB_TOKENS = [
154
191
  'new Pool',
155
192
  'postgres',
156
193
  'mysql2',
194
+ 'supabase',
157
195
  ];
158
196
  function importableSpecifier(absFile, aliases, packages, appRoot) {
159
197
  const file = normalize(absFile);
@@ -218,11 +256,15 @@ export function inferDbClientMarkers(appDir, subjectRoles = REQUEST_ENTRY_ROLES)
218
256
  }
219
257
  if (!DB_TOKENS.some((token) => text.includes(token)))
220
258
  continue;
259
+ const imports = importSpecifiers(text);
221
260
  if (DB_CLIENT_CONSTRUCTOR.test(text)) {
222
261
  wrapperFiles.push(file);
223
262
  }
224
263
  else if (DB_CLIENT_CONSTRUCTOR_GENERIC.test(text) &&
225
- importSpecifiers(text).some((specifier) => KNOWN_DB_LIBRARIES.some((lib) => lib.test(specifier)))) {
264
+ imports.some((specifier) => KNOWN_DB_LIBRARIES.some((lib) => lib.test(specifier)))) {
265
+ wrapperFiles.push(file);
266
+ }
267
+ else if (callsSupabaseFactory(file, text)) {
226
268
  wrapperFiles.push(file);
227
269
  }
228
270
  else if (reexportSpecifiers(text).some((specifier) => KNOWN_DB_LIBRARIES.some((lib) => lib.test(specifier)))) {
@@ -1 +1 @@
1
- {"version":3,"file":"marker-inference.js","sourceRoot":"","sources":["../../src/detector/marker-inference.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"marker-inference.js","sourceRoot":"","sources":["../../src/detector/marker-inference.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"depcruise-exempt.d.ts","sourceRoot":"","sources":["../../src/generator/depcruise-exempt.ts"],"names":[],"mappings":"AAEA,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,CAInB"}
1
+ {"version":3,"file":"depcruise-exempt.d.ts","sourceRoot":"","sources":["../../src/generator/depcruise-exempt.ts"],"names":[],"mappings":"AAEA,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"}
@@ -2,7 +2,10 @@ const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
2
2
  export const TEST_ROLE_REGEX = '(\\.(test|spec|e2e-spec|e2e)\\.(ts|tsx)$)|((^|/)(__tests__|__mocks__|e2e|cypress|playwright|test|tests)/)';
3
3
  export function exemptDepcruiseFrom(base, violations) {
4
4
  const bases = typeof base === 'string' ? [base] : [...base];
5
- const parts = [...bases, ...violations.map((violation) => `${escapeRegExp(violation.file)}$`)];
5
+ const parts = [
6
+ ...bases,
7
+ ...violations.map((violation) => `(^|/)${escapeRegExp(violation.file)}$`),
8
+ ];
6
9
  return parts.length === 1 ? parts[0] : parts;
7
10
  }
8
11
  //# sourceMappingURL=depcruise-exempt.js.map
@@ -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,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,CAAC,GAAG,KAAK,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/F,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,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"}
@@ -0,0 +1,29 @@
1
+ import type { LayerBoundary } from '../detector/layer-detector.js';
2
+ import { type LayerAlias } from '../detector/layer-paths.js';
3
+ export interface EslintLayerRule {
4
+ name: string;
5
+ from: string;
6
+ to: string;
7
+ message: string;
8
+ ignore: string[];
9
+ }
10
+ /** The app the rules enforce: where it is, its import aliases, and the gitignored paths the scan left out. */
11
+ export interface LayerApp {
12
+ appDir: string;
13
+ aliases: LayerAlias[];
14
+ ignored: string[];
15
+ }
16
+ export interface EslintLayers extends LayerApp {
17
+ rules: EslintLayerRule[];
18
+ }
19
+ /** The given layer boundaries as ESLint rules, each exempting its known and allowed exceptions. */
20
+ export declare function buildEslintLayers(boundaries: readonly LayerBoundary[], app: LayerApp, allowedFor: (ruleId: string) => readonly string[]): EslintLayers | null;
21
+ export interface RenderedEslintLayers {
22
+ imports: string;
23
+ source: string;
24
+ rules: string;
25
+ config: string;
26
+ }
27
+ /** The pieces of the generated ESLint file that enforce layer boundaries, located relative to that file. */
28
+ export declare function renderEslintLayers(layers: EslintLayers, outDir: string): RenderedEslintLayers;
29
+ //# sourceMappingURL=eslint-layer-emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eslint-layer-emitter.d.ts","sourceRoot":"","sources":["../../src/generator/eslint-layer-emitter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,KAAK,UAAU,EAAkC,MAAM,4BAA4B,CAAC;AAM7F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,8GAA8G;AAC9G,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED,mGAAmG;AACnG,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,SAAS,aAAa,EAAE,EACpC,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,GAChD,YAAY,GAAG,IAAI,CAgBrB;AAkED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,4GAA4G;AAC5G,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,oBAAoB,CA+B7F"}
@@ -0,0 +1,121 @@
1
+ import * as path from 'node:path';
2
+ import { layerRootOf, resolveImportPath } from '../detector/layer-paths.js';
3
+ import { ROLE_PATTERNS } from '../scanner/role-classifier.js';
4
+ import { isSkippedFolder, isSourceFileName } from '../scanner/source-paths.js';
5
+ import { LINTED_FILES } from './eslint-plugin-emitter.js';
6
+ import { layerRuleName } from './layer-emitters.js';
7
+ /** The given layer boundaries as ESLint rules, each exempting its known and allowed exceptions. */
8
+ export function buildEslintLayers(boundaries, app, allowedFor) {
9
+ const rules = boundaries.map((boundary) => {
10
+ const name = layerRuleName(boundary);
11
+ const exceptions = [
12
+ ...boundary.violations.map((violation) => violation.file),
13
+ ...allowedFor(name),
14
+ ];
15
+ return {
16
+ name,
17
+ from: boundary.from,
18
+ to: boundary.to,
19
+ message: boundary.description,
20
+ ignore: [...new Set(exceptions)].sort(),
21
+ };
22
+ });
23
+ return rules.length === 0 ? null : { ...app, rules };
24
+ }
25
+ const LAYER_RULE_FUNCTIONS = `function isValueImport(node) {
26
+ return (
27
+ node.importKind !== 'type' &&
28
+ (node.specifiers.length === 0 ||
29
+ node.specifiers.some((specifier) => specifier.type !== 'ImportSpecifier' || specifier.importKind !== 'type'))
30
+ );
31
+ }
32
+
33
+ function realPathOf(filename) {
34
+ try {
35
+ return realpathSync(filename);
36
+ } catch {
37
+ try {
38
+ return join(realpathSync(dirname(filename)), basename(filename));
39
+ } catch {
40
+ return filename;
41
+ }
42
+ }
43
+ }
44
+
45
+ function isScanned(file) {
46
+ const segments = file.split('/');
47
+ return (
48
+ isSourceFileName(segments.pop()) &&
49
+ !segments.some(isSkippedFolder) &&
50
+ !LAYERS.ignored.some((path) => file === path || file.startsWith(path + '/'))
51
+ );
52
+ }
53
+
54
+ function appRelativePath(filename) {
55
+ const relativePath = relative(LAYER_APP_DIR, realPathOf(filename));
56
+ return relativePath.startsWith('..') || isAbsolute(relativePath)
57
+ ? null
58
+ : relativePath.split(sep).join('/');
59
+ }
60
+
61
+ function makeLayerRule(spec) {
62
+ return {
63
+ meta: { type: 'problem', schema: [], messages: { forbidden: spec.message } },
64
+ create(context) {
65
+ const file = appRelativePath(context.physicalFilename);
66
+ if (file === null || !isScanned(file)) return {};
67
+ if (LAYER_TESTS.some((test) => test.test(file)) || spec.ignore.includes(file)) return {};
68
+ if (layerRootOf(file)?.layer !== spec.from) return {};
69
+ const check = (node, specifier) => {
70
+ const target = resolveImportPath(file, specifier, LAYERS.aliases);
71
+ if (target !== null && layerRootOf(target)?.layer === spec.to) {
72
+ context.report({ node, messageId: 'forbidden' });
73
+ }
74
+ };
75
+ return {
76
+ ImportDeclaration(node) {
77
+ if (node.parent.type === 'Program' && isValueImport(node)) check(node, node.source.value);
78
+ },
79
+ ImportExpression(node) {
80
+ if (node.source.type === 'Literal' && typeof node.source.value === 'string') {
81
+ check(node, node.source.value);
82
+ }
83
+ },
84
+ };
85
+ },
86
+ };
87
+ }`;
88
+ /** The pieces of the generated ESLint file that enforce layer boundaries, located relative to that file. */
89
+ export function renderEslintLayers(layers, outDir) {
90
+ const data = {
91
+ app: path.relative(outDir, layers.appDir).split(path.sep).join('/') || '.',
92
+ aliases: layers.aliases,
93
+ ignored: layers.ignored,
94
+ tests: (ROLE_PATTERNS.get('TEST') ?? []).map((pattern) => pattern.source),
95
+ rules: layers.rules,
96
+ };
97
+ return {
98
+ imports: [
99
+ "import { realpathSync } from 'node:fs';",
100
+ "import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';",
101
+ "import { fileURLToPath } from 'node:url';",
102
+ ].join('\n'),
103
+ source: [
104
+ `const LAYERS = ${JSON.stringify(data, null, 2)};`,
105
+ 'const LAYER_APP_DIR = realPathOf(resolve(dirname(fileURLToPath(import.meta.url)), LAYERS.app));',
106
+ 'const LAYER_TESTS = LAYERS.tests.map((source) => new RegExp(source));',
107
+ layerRootOf.toString(),
108
+ resolveImportPath.toString(),
109
+ isSkippedFolder.toString(),
110
+ isSourceFileName.toString(),
111
+ LAYER_RULE_FUNCTIONS,
112
+ ].join('\n\n'),
113
+ rules: 'LAYERS.rules.map((spec) => [spec.name, makeLayerRule(spec)])',
114
+ config: `{
115
+ files: ${LINTED_FILES},
116
+ plugins: { archprint: plugin },
117
+ rules: Object.fromEntries(LAYERS.rules.map((spec) => ['archprint/' + spec.name, 'error'])),
118
+ }`,
119
+ };
120
+ }
121
+ //# sourceMappingURL=eslint-layer-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eslint-layer-emitter.js","sourceRoot":"","sources":["../../src/generator/eslint-layer-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAmB,WAAW,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAqBpD,mGAAmG;AACnG,MAAM,UAAU,iBAAiB,CAC/B,UAAoC,EACpC,GAAa,EACb,UAAiD;IAEjD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG;YACjB,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;YACzD,GAAG,UAAU,CAAC,IAAI,CAAC;SACpB,CAAC;QACF,OAAO;YACL,IAAI;YACJ,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,OAAO,EAAE,QAAQ,CAAC,WAAW;YAC7B,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE;SACxC,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8D3B,CAAC;AASH,4GAA4G;AAC5G,MAAM,UAAU,kBAAkB,CAAC,MAAoB,EAAE,MAAc;IACrE,MAAM,IAAI,GAAG;QACX,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG;QAC1E,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QACzE,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;IACF,OAAO;QACL,OAAO,EAAE;YACP,yCAAyC;YACzC,0FAA0F;YAC1F,2CAA2C;SAC5C,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,MAAM,EAAE;YACN,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG;YAClD,iGAAiG;YACjG,uEAAuE;YACvE,WAAW,CAAC,QAAQ,EAAE;YACtB,iBAAiB,CAAC,QAAQ,EAAE;YAC5B,eAAe,CAAC,QAAQ,EAAE;YAC1B,gBAAgB,CAAC,QAAQ,EAAE;YAC3B,oBAAoB;SACrB,CAAC,IAAI,CAAC,MAAM,CAAC;QACd,KAAK,EAAE,8DAA8D;QACrE,MAAM,EAAE;WACD,YAAY;;;EAGrB;KACC,CAAC;AACJ,CAAC"}
@@ -11,6 +11,7 @@ export declare function buildForbiddenImportSpecs(patterns: readonly {
11
11
  result: DetectedPattern;
12
12
  }[]): ForbiddenImportSpec[];
13
13
  export declare const MAKE_RULE_FUNCTION = "function makeRule(spec) {\n const roles = spec.roles.map((source) => new RegExp(source));\n const markers = spec.markers.map((source) => new RegExp(source));\n return {\n meta: { type: 'problem', schema: [], messages: { forbidden: spec.message } },\n create(context) {\n const file = context.filename.replace(/\\\\/g, '/');\n if (!roles.some((role) => role.test(file))) return {};\n if (spec.ignore.some((path) => file.endsWith('/' + path))) return {};\n return {\n ImportDeclaration(node) {\n if (node.importKind === 'type') return;\n if (markers.some((marker) => marker.test(node.source.value))) {\n context.report({ node, messageId: 'forbidden' });\n }\n },\n };\n },\n };\n}";
14
+ export declare const LINTED_FILES = "['**/*.{ts,tsx}']";
14
15
  export declare const PLUGIN_CONFIGS = "SPECS.map((spec) => ({\n files: ['**/*.{ts,tsx}'],\n plugins: { archprint: plugin },\n rules: { ['archprint/' + spec.name]: 'error' },\n}))";
15
16
  export declare function renderEslintPluginSource(specs: readonly ForbiddenImportSpec[]): string;
16
17
  //# sourceMappingURL=eslint-plugin-emitter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"eslint-plugin-emitter.d.ts","sourceRoot":"","sources":["../../src/generator/eslint-plugin-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGtF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,SAAS;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,EAAE,GACtE,mBAAmB,EAAE,CAkBvB;AAED,eAAO,MAAM,kBAAkB,qwBAmB7B,CAAC;AAEH,eAAO,MAAM,cAAc,mJAIvB,CAAC;AAEL,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,GAAG,MAAM,CAUtF"}
1
+ {"version":3,"file":"eslint-plugin-emitter.d.ts","sourceRoot":"","sources":["../../src/generator/eslint-plugin-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGtF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,SAAS;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,EAAE,GACtE,mBAAmB,EAAE,CAkBvB;AAED,eAAO,MAAM,kBAAkB,qwBAmB7B,CAAC;AAEH,eAAO,MAAM,YAAY,sBAAsB,CAAC;AAEhD,eAAO,MAAM,cAAc,mJAIvB,CAAC;AAEL,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,GAAG,MAAM,CAUtF"}