archprint 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +69 -0
- package/README.md +48 -28
- package/dist/cli/generate.d.ts +15 -4
- package/dist/cli/generate.d.ts.map +1 -1
- package/dist/cli/generate.js +93 -44
- package/dist/cli/generate.js.map +1 -1
- package/dist/cli/program.d.ts +1 -0
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +124 -8
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/recommend.d.ts +5 -1
- package/dist/cli/recommend.d.ts.map +1 -1
- package/dist/cli/recommend.js +42 -2
- package/dist/cli/recommend.js.map +1 -1
- package/dist/cli/report.d.ts +1 -0
- package/dist/cli/report.d.ts.map +1 -1
- package/dist/cli/report.js +21 -3
- package/dist/cli/report.js.map +1 -1
- package/dist/cli/wiring.d.ts.map +1 -1
- package/dist/cli/wiring.js +46 -22
- package/dist/cli/wiring.js.map +1 -1
- package/dist/detector/family-maturity.d.ts.map +1 -1
- package/dist/detector/family-maturity.js +0 -2
- package/dist/detector/family-maturity.js.map +1 -1
- package/dist/generator/console-isolation-emitters.d.ts +3 -0
- package/dist/generator/console-isolation-emitters.d.ts.map +1 -1
- package/dist/generator/console-isolation-emitters.js +5 -1
- package/dist/generator/console-isolation-emitters.js.map +1 -1
- package/dist/generator/deep-relative-emitters.d.ts +4 -0
- package/dist/generator/deep-relative-emitters.d.ts.map +1 -1
- package/dist/generator/deep-relative-emitters.js +4 -0
- package/dist/generator/deep-relative-emitters.js.map +1 -1
- package/dist/generator/depcruise-exempt.d.ts +5 -0
- package/dist/generator/depcruise-exempt.d.ts.map +1 -0
- package/dist/generator/depcruise-exempt.js +8 -0
- package/dist/generator/depcruise-exempt.js.map +1 -0
- package/dist/generator/dependency-internals-emitters.d.ts +1 -1
- package/dist/generator/dependency-internals-emitters.d.ts.map +1 -1
- package/dist/generator/dependency-internals-emitters.js +5 -2
- package/dist/generator/dependency-internals-emitters.js.map +1 -1
- package/dist/generator/env-access-emitters.d.ts +1 -1
- package/dist/generator/env-access-emitters.d.ts.map +1 -1
- package/dist/generator/env-access-emitters.js +3 -1
- package/dist/generator/env-access-emitters.js.map +1 -1
- package/dist/generator/eslint-preset-emitter.js +1 -1
- package/dist/generator/eslint-scope.d.ts +10 -0
- package/dist/generator/eslint-scope.d.ts.map +1 -0
- package/dist/generator/eslint-scope.js +37 -0
- package/dist/generator/eslint-scope.js.map +1 -0
- package/dist/generator/phantom-dependency-emitters.d.ts +1 -1
- package/dist/generator/phantom-dependency-emitters.d.ts.map +1 -1
- package/dist/generator/phantom-dependency-emitters.js +4 -1
- package/dist/generator/phantom-dependency-emitters.js.map +1 -1
- package/dist/generator/public-api-emitters.d.ts +1 -1
- package/dist/generator/public-api-emitters.d.ts.map +1 -1
- package/dist/generator/public-api-emitters.js +2 -1
- package/dist/generator/public-api-emitters.js.map +1 -1
- package/dist/generator/test-isolation-emitters.d.ts +3 -1
- package/dist/generator/test-isolation-emitters.d.ts.map +1 -1
- package/dist/generator/test-isolation-emitters.js +26 -2
- package/dist/generator/test-isolation-emitters.js.map +1 -1
- package/dist/generator/workspace-package-emitters.d.ts +1 -1
- package/dist/generator/workspace-package-emitters.d.ts.map +1 -1
- package/dist/generator/workspace-package-emitters.js +2 -0
- package/dist/generator/workspace-package-emitters.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/scanner/app-dirs.d.ts.map +1 -1
- package/dist/scanner/app-dirs.js +5 -2
- package/dist/scanner/app-dirs.js.map +1 -1
- package/dist/scanner/enforcers.d.ts +8 -0
- package/dist/scanner/enforcers.d.ts.map +1 -0
- package/dist/scanner/enforcers.js +74 -0
- package/dist/scanner/enforcers.js.map +1 -0
- package/package.json +4 -4
package/dist/cli/wiring.js
CHANGED
|
@@ -1,31 +1,55 @@
|
|
|
1
1
|
import { existsSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
|
+
import { Node, Project, SyntaxKind } from 'ts-morph';
|
|
3
4
|
export const AGGREGATOR_FILE = 'eslint.archprint.mjs';
|
|
4
5
|
export const MANAGED_START = '// archprint:start (managed by archprint; run `archprint eject` to remove)';
|
|
5
6
|
export const MANAGED_END = '// archprint:end';
|
|
6
7
|
const SPREAD_MARK = '// archprint:managed';
|
|
7
|
-
const ESLINT_CONFIG_NAMES = [
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
const ESLINT_CONFIG_NAMES = [
|
|
9
|
+
'eslint.config.js',
|
|
10
|
+
'eslint.config.mjs',
|
|
11
|
+
'eslint.config.cjs',
|
|
12
|
+
'eslint.config.ts',
|
|
13
|
+
];
|
|
14
|
+
function arrayInsertionOffset(node, allowCallArg) {
|
|
15
|
+
if (Node.isArrayLiteralExpression(node))
|
|
16
|
+
return node.getStart() + 1;
|
|
17
|
+
if (Node.isCallExpression(node)) {
|
|
18
|
+
const callee = node.getExpression().getText().split('.').pop();
|
|
19
|
+
if (callee !== 'config' && callee !== 'defineConfig')
|
|
20
|
+
return null;
|
|
21
|
+
const arrayArg = node
|
|
22
|
+
.getArguments()
|
|
23
|
+
.find((argument) => Node.isArrayLiteralExpression(argument));
|
|
24
|
+
if (arrayArg)
|
|
25
|
+
return arrayArg.getStart() + 1;
|
|
26
|
+
if (!allowCallArg)
|
|
27
|
+
return null;
|
|
28
|
+
const openParen = node.getFirstChildByKind(SyntaxKind.OpenParenToken);
|
|
29
|
+
return openParen ? openParen.getEnd() : null;
|
|
30
|
+
}
|
|
31
|
+
if (Node.isIdentifier(node)) {
|
|
32
|
+
const initializer = node
|
|
33
|
+
.getSourceFile()
|
|
34
|
+
.getVariableDeclaration(node.getText())
|
|
35
|
+
?.getInitializer();
|
|
36
|
+
return initializer ? arrayInsertionOffset(initializer, false) : null;
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
10
40
|
function findInsertionPoint(content) {
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if (call === null)
|
|
24
|
-
return null;
|
|
25
|
-
index += call[0].length;
|
|
26
|
-
const afterParen = index;
|
|
27
|
-
skipWhitespace();
|
|
28
|
-
return content[index] === '[' ? index + 1 : afterParen;
|
|
41
|
+
const sourceFile = new Project({
|
|
42
|
+
useInMemoryFileSystem: true,
|
|
43
|
+
skipAddingFilesFromTsConfig: true,
|
|
44
|
+
}).createSourceFile('eslint.config.mjs', content);
|
|
45
|
+
const exportAssignment = sourceFile.getFirstDescendantByKind(SyntaxKind.ExportAssignment);
|
|
46
|
+
if (exportAssignment && !exportAssignment.isExportEquals()) {
|
|
47
|
+
return arrayInsertionOffset(exportAssignment.getExpression(), true);
|
|
48
|
+
}
|
|
49
|
+
const moduleExports = sourceFile
|
|
50
|
+
.getDescendantsOfKind(SyntaxKind.BinaryExpression)
|
|
51
|
+
.find((expression) => expression.getLeft().getText() === 'module.exports');
|
|
52
|
+
return moduleExports ? arrayInsertionOffset(moduleExports.getRight(), true) : null;
|
|
29
53
|
}
|
|
30
54
|
const AGGREGATOR_SOURCE = `${MANAGED_START.replace('run `archprint eject` to remove', 'regenerate with `archprint generate`')}
|
|
31
55
|
import { readdirSync, readFileSync } from 'node:fs';
|
|
@@ -46,7 +70,7 @@ try {
|
|
|
46
70
|
pluginConfigs = [];
|
|
47
71
|
}
|
|
48
72
|
|
|
49
|
-
export default [...blocks, ...pluginConfigs];
|
|
73
|
+
export default [{ ignores: ['**/*.archprint.mjs'] }, ...blocks, ...pluginConfigs];
|
|
50
74
|
${MANAGED_END}
|
|
51
75
|
`;
|
|
52
76
|
export function hasEslintBlocks(paths) {
|
package/dist/cli/wiring.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiring.js","sourceRoot":"","sources":["../../src/cli/wiring.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"wiring.js","sourceRoot":"","sources":["../../src/cli/wiring.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"family-maturity.d.ts","sourceRoot":"","sources":["../../src/detector/family-maturity.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,mBAAmB,GACnB,OAAO,GACP,eAAe,GACf,QAAQ,GACR,YAAY,GACZ,eAAe,GACf,eAAe,GACf,uBAAuB,GACvB,gBAAgB,GAChB,oBAAoB,GACpB,cAAc,GACd,cAAc,GACd,cAAc,GACd,mBAAmB,GACnB,YAAY,GACZ,mBAAmB,GACnB,SAAS,GACT,eAAe,GACf,SAAS,GACT,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"family-maturity.d.ts","sourceRoot":"","sources":["../../src/detector/family-maturity.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,mBAAmB,GACnB,OAAO,GACP,eAAe,GACf,QAAQ,GACR,YAAY,GACZ,eAAe,GACf,eAAe,GACf,uBAAuB,GACvB,gBAAgB,GAChB,oBAAoB,GACpB,cAAc,GACd,cAAc,GACd,cAAc,GACd,mBAAmB,GACnB,YAAY,GACZ,mBAAmB,GACnB,SAAS,GACT,eAAe,GACf,SAAS,GACT,cAAc,CAAC;AAWnB,eAAO,MAAM,cAAc,GAAI,QAAQ,SAAS,KAAG,OAAsC,CAAC"}
|
|
@@ -4,9 +4,7 @@ const STABLE_FAMILIES = new Set([
|
|
|
4
4
|
'test-isolation',
|
|
5
5
|
'console-isolation',
|
|
6
6
|
'import-style',
|
|
7
|
-
'phantom-deps',
|
|
8
7
|
'public-api',
|
|
9
|
-
'dependency-hygiene',
|
|
10
8
|
]);
|
|
11
9
|
export const isStableFamily = (family) => STABLE_FAMILIES.has(family);
|
|
12
10
|
//# sourceMappingURL=family-maturity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"family-maturity.js","sourceRoot":"","sources":["../../src/detector/family-maturity.ts"],"names":[],"mappings":"AAsBA,MAAM,eAAe,GAA2B,IAAI,GAAG,CAAY;IACjE,mBAAmB;IACnB,QAAQ;IACR,gBAAgB;IAChB,mBAAmB;IACnB,cAAc;IACd,
|
|
1
|
+
{"version":3,"file":"family-maturity.js","sourceRoot":"","sources":["../../src/detector/family-maturity.ts"],"names":[],"mappings":"AAsBA,MAAM,eAAe,GAA2B,IAAI,GAAG,CAAY;IACjE,mBAAmB;IACnB,QAAQ;IACR,gBAAgB;IAChB,mBAAmB;IACnB,cAAc;IACd,YAAY;CACb,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAiB,EAAW,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -4,5 +4,8 @@ export interface EslintFlatConfigBlock {
|
|
|
4
4
|
ignores: string[];
|
|
5
5
|
rules: Record<string, unknown>;
|
|
6
6
|
}
|
|
7
|
+
export declare function withMinedExemptions(baseIgnores: readonly string[], violations: readonly {
|
|
8
|
+
file: string;
|
|
9
|
+
}[]): string[];
|
|
7
10
|
export declare function toEslintConsoleIsolation(analysis: ConsoleIsolationAnalysis): EslintFlatConfigBlock | null;
|
|
8
11
|
//# 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;
|
|
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,9 +1,13 @@
|
|
|
1
|
+
import { CLI_GLOBS, TEST_GLOBS } from './eslint-scope.js';
|
|
2
|
+
export function withMinedExemptions(baseIgnores, violations) {
|
|
3
|
+
return [...baseIgnores, ...violations.map((violation) => violation.file)];
|
|
4
|
+
}
|
|
1
5
|
export function toEslintConsoleIsolation(analysis) {
|
|
2
6
|
if (analysis.libraryFileCount === 0 || analysis.gate.status !== 'AUTO')
|
|
3
7
|
return null;
|
|
4
8
|
return {
|
|
5
9
|
files: ['**/*.{ts,tsx}'],
|
|
6
|
-
ignores: [
|
|
10
|
+
ignores: withMinedExemptions([...TEST_GLOBS, ...CLI_GLOBS], analysis.violations),
|
|
7
11
|
rules: { 'no-console': 'error' },
|
|
8
12
|
};
|
|
9
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console-isolation-emitters.js","sourceRoot":"","sources":["../../src/generator/console-isolation-emitters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"console-isolation-emitters.js","sourceRoot":"","sources":["../../src/generator/console-isolation-emitters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQ1D,MAAM,UAAU,mBAAmB,CACjC,WAA8B,EAC9B,UAAuC;IAEvC,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5E,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"}
|
|
@@ -4,11 +4,15 @@ export interface NoRestrictedImportsPattern {
|
|
|
4
4
|
message: string;
|
|
5
5
|
}
|
|
6
6
|
export interface EslintNoRestrictedImportsConfig {
|
|
7
|
+
ignores?: string[];
|
|
7
8
|
rules: {
|
|
8
9
|
'no-restricted-imports': ['error', {
|
|
9
10
|
patterns: NoRestrictedImportsPattern[];
|
|
10
11
|
}];
|
|
11
12
|
};
|
|
12
13
|
}
|
|
14
|
+
export declare function exemptImporters(violations: readonly {
|
|
15
|
+
file: string;
|
|
16
|
+
}[]): Pick<EslintNoRestrictedImportsConfig, 'ignores'>;
|
|
13
17
|
export declare function toEslintDeepRelative(analysis: DeepRelativeAnalysis): EslintNoRestrictedImportsConfig | null;
|
|
14
18
|
//# 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;AAElF,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE;QACL,uBAAuB,EAAE,CAAC,OAAO,EAAE;YAAE,QAAQ,EAAE,0BAA0B,EAAE,CAAA;SAAE,CAAC,CAAC;KAChF,CAAC;CACH;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,oBAAoB,GAC7B,+BAA+B,GAAG,IAAI,
|
|
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,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,CAElD;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,oBAAoB,GAC7B,+BAA+B,GAAG,IAAI,CAkBxC"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
export function exemptImporters(violations) {
|
|
2
|
+
return violations.length > 0 ? { ignores: violations.map((violation) => violation.file) } : {};
|
|
3
|
+
}
|
|
1
4
|
export function toEslintDeepRelative(analysis) {
|
|
2
5
|
if (analysis.relativeImporterCount === 0 || analysis.gate.status !== 'AUTO')
|
|
3
6
|
return null;
|
|
4
7
|
return {
|
|
8
|
+
...exemptImporters(analysis.violations),
|
|
5
9
|
rules: {
|
|
6
10
|
'no-restricted-imports': [
|
|
7
11
|
'error',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-relative-emitters.js","sourceRoot":"","sources":["../../src/generator/deep-relative-emitters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deep-relative-emitters.js","sourceRoot":"","sources":["../../src/generator/deep-relative-emitters.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,eAAe,CAC7B,UAAuC;IAEvC,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACjG,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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const TEST_ROLE_REGEX = "(\\.(test|spec|e2e-spec|e2e)\\.(ts|tsx)$)|((^|/)(__tests__|__mocks__|e2e|cypress|playwright|test|tests)/)";
|
|
2
|
+
export declare function exemptDepcruiseFrom(base: string | readonly string[], violations: readonly {
|
|
3
|
+
file: string;
|
|
4
|
+
}[]): string | string[];
|
|
5
|
+
//# sourceMappingURL=depcruise-exempt.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
2
|
+
export const TEST_ROLE_REGEX = '(\\.(test|spec|e2e-spec|e2e)\\.(ts|tsx)$)|((^|/)(__tests__|__mocks__|e2e|cypress|playwright|test|tests)/)';
|
|
3
|
+
export function exemptDepcruiseFrom(base, violations) {
|
|
4
|
+
const bases = typeof base === 'string' ? [base] : [...base];
|
|
5
|
+
const parts = [...bases, ...violations.map((violation) => `${escapeRegExp(violation.file)}$`)];
|
|
6
|
+
return parts.length === 1 ? parts[0] : parts;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=depcruise-exempt.js.map
|
|
@@ -0,0 +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 +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;AAKhG,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,CAAA;KAAE,CAAC;
|
|
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;AAKhG,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,GACpC,iBAAiB,CAmBnB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { exemptDepcruiseFrom, TEST_ROLE_REGEX } from './depcruise-exempt.js';
|
|
2
|
+
const INTERNAL_PATH = 'node_modules/(?:@[^/]+/)?[^/]+/(?:src|internal|internals)/';
|
|
2
3
|
export function toDependencyCruiserDependencyInternals(analysis) {
|
|
3
4
|
if (analysis.externalImporterCount === 0 || analysis.gate.status !== 'AUTO') {
|
|
4
5
|
return { forbidden: [] };
|
|
@@ -11,7 +12,9 @@ export function toDependencyCruiserDependencyInternals(analysis) {
|
|
|
11
12
|
name: 'no-dependency-internals',
|
|
12
13
|
comment: `Archprint inferred dependency hygiene: ${conform}/${analysis.externalImporterCount} files import third-party packages only by their public entry; reaching into a package's build/impl directory is forbidden (confidence ${floor}).`,
|
|
13
14
|
severity: 'error',
|
|
14
|
-
from: {
|
|
15
|
+
from: {
|
|
16
|
+
pathNot: exemptDepcruiseFrom([TEST_ROLE_REGEX, 'node_modules'], analysis.violations),
|
|
17
|
+
},
|
|
15
18
|
to: { path: INTERNAL_PATH },
|
|
16
19
|
},
|
|
17
20
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-internals-emitters.js","sourceRoot":"","sources":["../../src/generator/dependency-internals-emitters.ts"],"names":[],"mappings":"
|
|
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,aAAa,GAAG,4DAA4D,CAAC;AAcnF,MAAM,UAAU,sCAAsC,CACpD,QAAqC;IAErC,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,CAAC,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC;iBACrF;gBACD,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;aAC5B;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { EnvAccessAnalysis } from '../detector/env-access-detector.js';
|
|
2
|
-
import type
|
|
2
|
+
import { type EslintFlatConfigBlock } from './console-isolation-emitters.js';
|
|
3
3
|
export declare function toEslintEnvAccess(analysis: EnvAccessAnalysis): EslintFlatConfigBlock | null;
|
|
4
4
|
//# sourceMappingURL=env-access-emitters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-access-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/env-access-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"env-access-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/env-access-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAuB,KAAK,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAGlG,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,qBAAqB,GAAG,IAAI,CAgB3F"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { withMinedExemptions } from './console-isolation-emitters.js';
|
|
2
|
+
import { CONFIG_GLOBS, TEST_GLOBS } from './eslint-scope.js';
|
|
1
3
|
export function toEslintEnvAccess(analysis) {
|
|
2
4
|
if (analysis.subjectFileCount === 0 || analysis.gate.status !== 'AUTO')
|
|
3
5
|
return null;
|
|
4
6
|
return {
|
|
5
7
|
files: ['**/*.{ts,tsx}'],
|
|
6
|
-
ignores: [
|
|
8
|
+
ignores: withMinedExemptions([...TEST_GLOBS, ...CONFIG_GLOBS], analysis.violations),
|
|
7
9
|
rules: {
|
|
8
10
|
'no-restricted-properties': [
|
|
9
11
|
'error',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-access-emitters.js","sourceRoot":"","sources":["../../src/generator/env-access-emitters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"env-access-emitters.js","sourceRoot":"","sources":["../../src/generator/env-access-emitters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAA8B,MAAM,iCAAiC,CAAC;AAClG,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE7D,MAAM,UAAU,iBAAiB,CAAC,QAA2B;IAC3D,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,YAAY,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC;QACnF,KAAK,EAAE;YACL,0BAA0B,EAAE;gBAC1B,OAAO;gBACP;oBACE,MAAM,EAAE,SAAS;oBACjB,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,0DAA0D;iBACpE;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -11,7 +11,7 @@ const rules = Object.fromEntries(SPECS.map((spec) => [spec.name, makeRule(spec)]
|
|
|
11
11
|
const plugin = { rules };
|
|
12
12
|
const pluginConfigs = ${PLUGIN_CONFIGS};
|
|
13
13
|
|
|
14
|
-
export default [...BLOCKS, ...pluginConfigs];
|
|
14
|
+
export default [{ ignores: ['**/*.archprint.mjs'] }, ...BLOCKS, ...pluginConfigs];
|
|
15
15
|
`;
|
|
16
16
|
}
|
|
17
17
|
//# sourceMappingURL=eslint-preset-emitter.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { EslintFlatConfigBlock } from './console-isolation-emitters.js';
|
|
2
|
+
export declare const TEST_GLOBS: readonly string[];
|
|
3
|
+
export declare const CLI_GLOBS: readonly string[];
|
|
4
|
+
export declare const CONFIG_GLOBS: readonly string[];
|
|
5
|
+
export type NoRestrictedImportsBlock = {
|
|
6
|
+
ignores?: string[];
|
|
7
|
+
rules: Record<string, unknown>;
|
|
8
|
+
};
|
|
9
|
+
export declare function mergeNoRestrictedImports(blocks: readonly (NoRestrictedImportsBlock | null)[]): EslintFlatConfigBlock | null;
|
|
10
|
+
//# sourceMappingURL=eslint-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eslint-scope.d.ts","sourceRoot":"","sources":["../../src/generator/eslint-scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAK7E,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EASvC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,SAAS,MAAM,EAAmD,CAAC;AAE3F,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAGzC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAE9F,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,CAAC,wBAAwB,GAAG,IAAI,CAAC,EAAE,GACnD,qBAAqB,GAAG,IAAI,CAgB9B"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const dirAndFile = (names) => names.flatMap((name) => [`**/${name}/**`, `**/${name}.{ts,tsx}`]);
|
|
2
|
+
export const TEST_GLOBS = [
|
|
3
|
+
'**/*.{test,spec,e2e-spec,e2e}.{ts,tsx}',
|
|
4
|
+
'**/__tests__/**',
|
|
5
|
+
'**/__mocks__/**',
|
|
6
|
+
'**/e2e/**',
|
|
7
|
+
'**/cypress/**',
|
|
8
|
+
'**/playwright/**',
|
|
9
|
+
'**/test/**',
|
|
10
|
+
'**/tests/**',
|
|
11
|
+
];
|
|
12
|
+
export const CLI_GLOBS = dirAndFile(['cli', 'scripts', 'bin', 'tools']);
|
|
13
|
+
export const CONFIG_GLOBS = [
|
|
14
|
+
...dirAndFile(['config', 'env', 'environment']),
|
|
15
|
+
'**/*.config.{ts,tsx}',
|
|
16
|
+
];
|
|
17
|
+
export function mergeNoRestrictedImports(blocks) {
|
|
18
|
+
const patterns = [];
|
|
19
|
+
const ignores = new Set(TEST_GLOBS);
|
|
20
|
+
for (const block of blocks) {
|
|
21
|
+
if (block === null)
|
|
22
|
+
continue;
|
|
23
|
+
const rule = block.rules['no-restricted-imports'];
|
|
24
|
+
if (rule)
|
|
25
|
+
patterns.push(...rule[1].patterns);
|
|
26
|
+
for (const glob of block.ignores ?? [])
|
|
27
|
+
ignores.add(glob);
|
|
28
|
+
}
|
|
29
|
+
if (patterns.length === 0)
|
|
30
|
+
return null;
|
|
31
|
+
return {
|
|
32
|
+
files: ['**/*.{ts,tsx}'],
|
|
33
|
+
ignores: [...ignores],
|
|
34
|
+
rules: { 'no-restricted-imports': ['error', { patterns }] },
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=eslint-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eslint-scope.js","sourceRoot":"","sources":["../../src/generator/eslint-scope.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,CAAC,KAAwB,EAAY,EAAE,CACxD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,KAAK,EAAE,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,UAAU,GAAsB;IAC3C,wCAAwC;IACxC,iBAAiB;IACjB,iBAAiB;IACjB,WAAW;IACX,eAAe;IACf,kBAAkB;IAClB,YAAY;IACZ,aAAa;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAsB,UAAU,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,YAAY,GAAsB;IAC7C,GAAG,UAAU,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IAC/C,sBAAsB;CACvB,CAAC;AAIF,MAAM,UAAU,wBAAwB,CACtC,MAAoD;IAEpD,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,UAAU,CAAC,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,uBAAuB,CACD,CAAC;QAChD,IAAI,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO;QACL,KAAK,EAAE,CAAC,eAAe,CAAC;QACxB,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;QACrB,KAAK,EAAE,EAAE,uBAAuB,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;KAC5D,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phantom-dependency-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/phantom-dependency-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"phantom-dependency-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/phantom-dependency-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AAG5F,MAAM,WAAW,qBAAqB;IACpC,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,eAAe,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,qBAAqB,EAAE,CAAC;CACpC;AAED,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,yBAAyB,GAClC,uBAAuB,CAmBzB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { exemptDepcruiseFrom, TEST_ROLE_REGEX } from './depcruise-exempt.js';
|
|
1
2
|
export function toDependencyCruiserPhantomDependencies(analysis) {
|
|
2
3
|
if (analysis.externalImporterCount === 0 || analysis.gate.status !== 'AUTO') {
|
|
3
4
|
return { forbidden: [] };
|
|
@@ -10,7 +11,9 @@ export function toDependencyCruiserPhantomDependencies(analysis) {
|
|
|
10
11
|
name: 'no-phantom-dependencies',
|
|
11
12
|
comment: `Archprint inferred dependency declaration: ${conform}/${analysis.externalImporterCount} files import only packages declared in package.json; importing an undeclared (phantom/transitive) dependency is forbidden (confidence ${floor}).`,
|
|
12
13
|
severity: 'error',
|
|
13
|
-
from: {
|
|
14
|
+
from: {
|
|
15
|
+
pathNot: exemptDepcruiseFrom([TEST_ROLE_REGEX, 'node_modules'], analysis.violations),
|
|
16
|
+
},
|
|
14
17
|
to: { dependencyTypes: ['npm-no-pkg', 'npm-unknown'] },
|
|
15
18
|
},
|
|
16
19
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phantom-dependency-emitters.js","sourceRoot":"","sources":["../../src/generator/phantom-dependency-emitters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"phantom-dependency-emitters.js","sourceRoot":"","sources":["../../src/generator/phantom-dependency-emitters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAc7E,MAAM,UAAU,sCAAsC,CACpD,QAAmC;IAEnC,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,8CAA8C,OAAO,IAAI,QAAQ,CAAC,qBAAqB,0IAA0I,KAAK,IAAI;gBACnP,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE;oBACJ,OAAO,EAAE,mBAAmB,CAAC,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC;iBACrF;gBACD,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE;aACvD;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-api-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/public-api-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"public-api-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/public-api-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAUzE,MAAM,WAAW,cAAc;IAC7B,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,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,SAAS,cAAc,EAAE,EACjC,OAAO,GAAE,SAAS,gBAAgB,EAAa,GAC9C,gBAAgB,CAclB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { exemptDepcruiseFrom, TEST_ROLE_REGEX } from './depcruise-exempt.js';
|
|
1
2
|
const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
2
3
|
const slug = (dir) => dir.replace(/[^a-zA-Z0-9]+/g, '-').replace(/^-|-$/g, '');
|
|
3
4
|
const confidencePct = (group) => `${(group.gate.conditions.confidence.value * 100).toFixed(0)}%`;
|
|
@@ -10,7 +11,7 @@ export function toDependencyCruiserPublicApi(groups, include = ['AUTO']) {
|
|
|
10
11
|
name: `no-deep-import-${slug(group.dir)}`,
|
|
11
12
|
comment: `Archprint inferred public API: files outside "${group.dir}" import it through its barrel (${group.consumerCount - group.deepImporterCount}/${group.consumerCount} consumers); deep imports into its internals are forbidden (confidence ${confidencePct(group)}).`,
|
|
12
13
|
severity: 'error',
|
|
13
|
-
from: { pathNot: `^${dir}/` },
|
|
14
|
+
from: { pathNot: exemptDepcruiseFrom([TEST_ROLE_REGEX, `^${dir}/`], group.violations) },
|
|
14
15
|
to: { path: `^${dir}/`, pathNot: `^${dir}/index\\.(ts|tsx)$` },
|
|
15
16
|
};
|
|
16
17
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-api-emitters.js","sourceRoot":"","sources":["../../src/generator/public-api-emitters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"public-api-emitters.js","sourceRoot":"","sources":["../../src/generator/public-api-emitters.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7E,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAE7F,MAAM,IAAI,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAE/F,MAAM,aAAa,GAAG,CAAC,KAAqB,EAAU,EAAE,CACtD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAclE,MAAM,UAAU,4BAA4B,CAC1C,MAAiC,EACjC,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,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO;YACL,IAAI,EAAE,kBAAkB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACzC,OAAO,EAAE,iDAAiD,KAAK,CAAC,GAAG,mCAAmC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,aAAa,0EAA0E,aAAa,CAAC,KAAK,CAAC,IAAI;YAC5Q,QAAQ,EAAE,OAAgB;YAC1B,IAAI,EAAE,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC,eAAe,EAAE,IAAI,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE;YACvF,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,OAAO,EAAE,IAAI,GAAG,oBAAoB,EAAE;SAC/D,CAAC;IACJ,CAAC,CAAC,CAAC;IACL,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { TestIsolationAnalysis } from '../detector/test-isolation-detector.js';
|
|
2
|
+
import { type EslintFlatConfigBlock } from './console-isolation-emitters.js';
|
|
2
3
|
export interface NotToTestRule {
|
|
3
4
|
name: string;
|
|
4
5
|
comment: string;
|
|
5
6
|
severity: 'error' | 'warn' | 'info';
|
|
6
7
|
from: {
|
|
7
|
-
pathNot: string;
|
|
8
|
+
pathNot: string | string[];
|
|
8
9
|
};
|
|
9
10
|
to: {
|
|
10
11
|
path: string;
|
|
@@ -14,4 +15,5 @@ export interface NotToTestConfig {
|
|
|
14
15
|
forbidden: NotToTestRule[];
|
|
15
16
|
}
|
|
16
17
|
export declare function toDependencyCruiserTestIsolation(analysis: TestIsolationAnalysis): NotToTestConfig;
|
|
18
|
+
export declare function toEslintTestIsolation(analysis: TestIsolationAnalysis): EslintFlatConfigBlock | null;
|
|
17
19
|
//# sourceMappingURL=test-isolation-emitters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-isolation-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/test-isolation-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"test-isolation-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/test-isolation-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAuB,KAAK,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAMlG,MAAM,WAAW,aAAa;IAC5B,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,eAAe;IAC9B,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,qBAAqB,GAAG,eAAe,CAejG;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,qBAAqB,GAC9B,qBAAqB,GAAG,IAAI,CAmB9B"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
import { withMinedExemptions } from './console-isolation-emitters.js';
|
|
2
|
+
import { TEST_GLOBS } from './eslint-scope.js';
|
|
3
|
+
import { exemptDepcruiseFrom, TEST_ROLE_REGEX } from './depcruise-exempt.js';
|
|
4
|
+
const TEST_PATH = TEST_ROLE_REGEX;
|
|
2
5
|
export function toDependencyCruiserTestIsolation(analysis) {
|
|
3
6
|
if (analysis.testFileCount === 0 || analysis.gate.status !== 'AUTO')
|
|
4
7
|
return { forbidden: [] };
|
|
@@ -10,10 +13,31 @@ export function toDependencyCruiserTestIsolation(analysis) {
|
|
|
10
13
|
name: 'not-to-test',
|
|
11
14
|
comment: `Archprint inferred test isolation: ${conform}/${analysis.productionFileCount} production files do not import a test file; importing tests from production code is forbidden (confidence ${floor}).`,
|
|
12
15
|
severity: 'error',
|
|
13
|
-
from: { pathNot: TEST_PATH },
|
|
16
|
+
from: { pathNot: exemptDepcruiseFrom(TEST_PATH, analysis.violations) },
|
|
14
17
|
to: { path: TEST_PATH },
|
|
15
18
|
},
|
|
16
19
|
],
|
|
17
20
|
};
|
|
18
21
|
}
|
|
22
|
+
export function toEslintTestIsolation(analysis) {
|
|
23
|
+
if (analysis.testFileCount === 0 || analysis.gate.status !== 'AUTO')
|
|
24
|
+
return null;
|
|
25
|
+
return {
|
|
26
|
+
files: ['**/*.{ts,tsx}'],
|
|
27
|
+
ignores: withMinedExemptions([...TEST_GLOBS], analysis.violations),
|
|
28
|
+
rules: {
|
|
29
|
+
'no-restricted-imports': [
|
|
30
|
+
'error',
|
|
31
|
+
{
|
|
32
|
+
patterns: [
|
|
33
|
+
{
|
|
34
|
+
regex: '\\.(test|spec)(\\.|$)',
|
|
35
|
+
message: 'Do not import a test file from production code.',
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
19
43
|
//# sourceMappingURL=test-isolation-emitters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-isolation-emitters.js","sourceRoot":"","sources":["../../src/generator/test-isolation-emitters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"test-isolation-emitters.js","sourceRoot":"","sources":["../../src/generator/test-isolation-emitters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAA8B,MAAM,iCAAiC,CAAC;AAClG,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7E,MAAM,SAAS,GAAG,eAAe,CAAC;AAclC,MAAM,UAAU,gCAAgC,CAAC,QAA+B;IAC9E,IAAI,QAAQ,CAAC,aAAa,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC9F,MAAM,OAAO,GAAG,QAAQ,CAAC,mBAAmB,GAAG,QAAQ,CAAC,aAAa,CAAC;IACtE,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,aAAa;gBACnB,OAAO,EAAE,sCAAsC,OAAO,IAAI,QAAQ,CAAC,mBAAmB,8GAA8G,KAAK,IAAI;gBAC7M,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,EAAE,OAAO,EAAE,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE;gBACtE,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;aACxB;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAA+B;IAE/B,IAAI,QAAQ,CAAC,aAAa,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACjF,OAAO;QACL,KAAK,EAAE,CAAC,eAAe,CAAC;QACxB,OAAO,EAAE,mBAAmB,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC;QAClE,KAAK,EAAE;YACL,uBAAuB,EAAE;gBACvB,OAAO;gBACP;oBACE,QAAQ,EAAE;wBACR;4BACE,KAAK,EAAE,uBAAuB;4BAC9B,OAAO,EAAE,iDAAiD;yBAC3D;qBACF;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { WorkspacePackageAnalysis } from '../detector/workspace-package-detector.js';
|
|
2
|
-
import type
|
|
2
|
+
import { type EslintNoRestrictedImportsConfig } from './deep-relative-emitters.js';
|
|
3
3
|
export declare function toEslintWorkspacePackageApi(analysis: WorkspacePackageAnalysis): EslintNoRestrictedImportsConfig | null;
|
|
4
4
|
//# sourceMappingURL=workspace-package-emitters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-package-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/workspace-package-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,KAAK
|
|
1
|
+
{"version":3,"file":"workspace-package-emitters.d.ts","sourceRoot":"","sources":["../../src/generator/workspace-package-emitters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAmB,KAAK,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAIpG,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,wBAAwB,GACjC,+BAA+B,GAAG,IAAI,CAoBxC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { exemptImporters } from './deep-relative-emitters.js';
|
|
1
2
|
const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
2
3
|
export function toEslintWorkspacePackageApi(analysis) {
|
|
3
4
|
if (analysis.consumerCount === 0 || analysis.packages.length === 0)
|
|
@@ -6,6 +7,7 @@ export function toEslintWorkspacePackageApi(analysis) {
|
|
|
6
7
|
return null;
|
|
7
8
|
const group = analysis.packages.map(escapeRegExp).join('|');
|
|
8
9
|
return {
|
|
10
|
+
...exemptImporters(analysis.violations),
|
|
9
11
|
rules: {
|
|
10
12
|
'no-restricted-imports': [
|
|
11
13
|
'error',
|