@nielspeter/eess-ts 0.5.0 → 0.6.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 (101) hide show
  1. package/README.md +1 -1
  2. package/dist/builders/class-rule-builder.d.ts +6 -3
  3. package/dist/builders/class-rule-builder.d.ts.map +1 -1
  4. package/dist/builders/class-rule-builder.js +6 -3
  5. package/dist/builders/class-rule-builder.js.map +1 -1
  6. package/dist/builders/function-rule-builder.d.ts +29 -7
  7. package/dist/builders/function-rule-builder.d.ts.map +1 -1
  8. package/dist/builders/function-rule-builder.js +34 -8
  9. package/dist/builders/function-rule-builder.js.map +1 -1
  10. package/dist/cli/commands/doctor.d.ts.map +1 -1
  11. package/dist/cli/commands/doctor.js +96 -5
  12. package/dist/cli/commands/doctor.js.map +1 -1
  13. package/dist/cli/commands/explain.d.ts.map +1 -1
  14. package/dist/cli/commands/explain.js +21 -2
  15. package/dist/cli/commands/explain.js.map +1 -1
  16. package/dist/cli/import-rule-module.d.ts +23 -4
  17. package/dist/cli/import-rule-module.d.ts.map +1 -1
  18. package/dist/cli/import-rule-module.js +30 -5
  19. package/dist/cli/import-rule-module.js.map +1 -1
  20. package/dist/conditions/body-analysis-function.d.ts.map +1 -1
  21. package/dist/conditions/body-analysis-function.js +19 -1
  22. package/dist/conditions/body-analysis-function.js.map +1 -1
  23. package/dist/conditions/body-analysis.d.ts +5 -2
  24. package/dist/conditions/body-analysis.d.ts.map +1 -1
  25. package/dist/conditions/body-analysis.js +9 -6
  26. package/dist/conditions/body-analysis.js.map +1 -1
  27. package/dist/conditions/call.d.ts +4 -2
  28. package/dist/conditions/call.d.ts.map +1 -1
  29. package/dist/conditions/call.js +11 -8
  30. package/dist/conditions/call.js.map +1 -1
  31. package/dist/conditions/catch-analysis.d.ts +7 -1
  32. package/dist/conditions/catch-analysis.d.ts.map +1 -1
  33. package/dist/conditions/catch-analysis.js +26 -27
  34. package/dist/conditions/catch-analysis.js.map +1 -1
  35. package/dist/conditions/class.d.ts +5 -3
  36. package/dist/conditions/class.d.ts.map +1 -1
  37. package/dist/conditions/class.js +9 -6
  38. package/dist/conditions/class.js.map +1 -1
  39. package/dist/conditions/function.d.ts +4 -4
  40. package/dist/conditions/function.js +4 -4
  41. package/dist/core/execute-rule.js +1 -1
  42. package/dist/graphql/resolver-rule-builder.d.ts.map +1 -1
  43. package/dist/graphql/resolver-rule-builder.js +16 -2
  44. package/dist/graphql/resolver-rule-builder.js.map +1 -1
  45. package/dist/helpers/body-traversal.d.ts +63 -9
  46. package/dist/helpers/body-traversal.d.ts.map +1 -1
  47. package/dist/helpers/body-traversal.js +179 -30
  48. package/dist/helpers/body-traversal.js.map +1 -1
  49. package/dist/helpers/heritage.d.ts +25 -0
  50. package/dist/helpers/heritage.d.ts.map +1 -0
  51. package/dist/helpers/heritage.js +41 -0
  52. package/dist/helpers/heritage.js.map +1 -0
  53. package/dist/index.d.ts +3 -3
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +13 -2
  56. package/dist/index.js.map +1 -1
  57. package/dist/models/arch-function.d.ts +42 -12
  58. package/dist/models/arch-function.d.ts.map +1 -1
  59. package/dist/models/arch-function.js +104 -18
  60. package/dist/models/arch-function.js.map +1 -1
  61. package/dist/predicates/class.d.ts +9 -9
  62. package/dist/predicates/class.d.ts.map +1 -1
  63. package/dist/predicates/class.js +14 -13
  64. package/dist/predicates/class.js.map +1 -1
  65. package/dist/predicates/function.d.ts +16 -4
  66. package/dist/predicates/function.d.ts.map +1 -1
  67. package/dist/predicates/function.js +56 -3
  68. package/dist/predicates/function.js.map +1 -1
  69. package/dist/predicates/type.d.ts +2 -1
  70. package/dist/predicates/type.d.ts.map +1 -1
  71. package/dist/predicates/type.js +6 -2
  72. package/dist/predicates/type.js.map +1 -1
  73. package/dist/presets/agent-guardrails.js +5 -5
  74. package/dist/presets/agent-guardrails.js.map +1 -1
  75. package/dist/rules/code-quality.d.ts +12 -1
  76. package/dist/rules/code-quality.d.ts.map +1 -1
  77. package/dist/rules/code-quality.js +106 -12
  78. package/dist/rules/code-quality.js.map +1 -1
  79. package/dist/rules/errors.d.ts +4 -2
  80. package/dist/rules/errors.d.ts.map +1 -1
  81. package/dist/rules/errors.js +18 -16
  82. package/dist/rules/errors.js.map +1 -1
  83. package/dist/rules/hygiene.d.ts +3 -1
  84. package/dist/rules/hygiene.d.ts.map +1 -1
  85. package/dist/rules/hygiene.js +3 -1
  86. package/dist/rules/hygiene.js.map +1 -1
  87. package/dist/rules/metrics.d.ts +6 -4
  88. package/dist/rules/metrics.d.ts.map +1 -1
  89. package/dist/rules/metrics.js +40 -20
  90. package/dist/rules/metrics.js.map +1 -1
  91. package/dist/rules/security.d.ts +13 -5
  92. package/dist/rules/security.d.ts.map +1 -1
  93. package/dist/rules/security.js +144 -19
  94. package/dist/rules/security.js.map +1 -1
  95. package/dist/rules/typescript.d.ts +2 -2
  96. package/dist/rules/typescript.js +2 -2
  97. package/dist/smells/duplicate-bodies.js +2 -2
  98. package/dist/smells/duplicate-bodies.js.map +1 -1
  99. package/dist/smells/sibling-files.js +2 -2
  100. package/dist/smells/sibling-files.js.map +1 -1
  101. package/package.json +2 -2
@@ -1,20 +1,38 @@
1
+ import { Node } from 'ts-morph';
1
2
  import { cyclomaticComplexity, linesOfCode } from '../helpers/complexity.js';
2
3
  import { metricViolation } from '../core/metric-violation.js';
3
- function getClassMembers(cls) {
4
- return [
4
+ import { functionValueOf } from '../models/arch-function.js';
5
+ function callableMembers(cls) {
6
+ const clsName = cls.getName() ?? '<anonymous>';
7
+ const members = [];
8
+ for (const member of [
5
9
  ...cls.getMethods(),
6
10
  ...cls.getConstructors(),
7
11
  ...cls.getGetAccessors(),
8
12
  ...cls.getSetAccessors(),
9
- ];
10
- }
11
- function getMemberName(cls, member) {
12
- const clsName = cls.getName() ?? '<anonymous>';
13
- if ('getName' in member && typeof member.getName === 'function') {
14
- const memberName = String(member.getName());
15
- return `${clsName}.${memberName}`;
13
+ ]) {
14
+ members.push({
15
+ node: member,
16
+ name: Node.isConstructorDeclaration(member)
17
+ ? `${clsName}.constructor`
18
+ : `${clsName}.${member.getName()}`,
19
+ body: member.getBody(),
20
+ parameterCount: member.getParameters().length,
21
+ });
22
+ }
23
+ // After the declared members, so a finding the old walk reported keeps its place.
24
+ for (const property of cls.getProperties()) {
25
+ const value = functionValueOf(property.getInitializer());
26
+ if (value === undefined)
27
+ continue;
28
+ members.push({
29
+ node: property,
30
+ name: `${clsName}.${property.getName()}`,
31
+ body: value.getBody(),
32
+ parameterCount: value.getParameters().length,
33
+ });
16
34
  }
17
- return `${clsName}.constructor`;
35
+ return members;
18
36
  }
19
37
  /**
20
38
  * A ceiling on one measurement of every callable member of every class.
@@ -37,12 +55,12 @@ function memberCeiling(threshold, spec) {
37
55
  evaluate(elements, context) {
38
56
  const violations = [];
39
57
  for (const cls of elements) {
40
- for (const member of getClassMembers(cls)) {
58
+ for (const member of callableMembers(cls)) {
41
59
  const value = spec.measure(member);
42
60
  if (value <= threshold)
43
61
  continue;
44
- const name = getMemberName(cls, member);
45
- violations.push(metricViolation(member, {
62
+ const name = member.name;
63
+ violations.push(metricViolation(member.node, {
46
64
  metric: spec.metric,
47
65
  ...(spec.unit === undefined ? {} : { unit: spec.unit }),
48
66
  // Written long-hand deliberately: `measured,` is a
@@ -62,8 +80,8 @@ function memberCeiling(threshold, spec) {
62
80
  };
63
81
  }
64
82
  /**
65
- * No method/constructor/getter/setter in the class may exceed the given
66
- * cyclomatic complexity.
83
+ * No callable member of the class — a method, constructor or accessor, or a property whose
84
+ * value is a function — may exceed the given cyclomatic complexity (bug 0306).
67
85
  *
68
86
  * @example
69
87
  * ```ts
@@ -76,7 +94,7 @@ export function maxCyclomaticComplexity(threshold) {
76
94
  return memberCeiling(threshold, {
77
95
  description: `have no method with cyclomatic complexity > ${String(threshold)}`,
78
96
  metric: 'complexity',
79
- measure: (member) => cyclomaticComplexity(member.getBody()),
97
+ measure: (member) => cyclomaticComplexity(member.body),
80
98
  message: (name, cc) => `${name} has cyclomatic complexity ${String(cc)} (max: ${String(threshold)}) — split into smaller methods`,
81
99
  });
82
100
  }
@@ -114,7 +132,8 @@ export function maxClassLines(threshold) {
114
132
  };
115
133
  }
116
134
  /**
117
- * No method/constructor/getter/setter may exceed the given number of lines.
135
+ * No callable member of the class — a method, constructor or accessor, or a property whose
136
+ * value is a function — may exceed the given number of lines (bug 0306).
118
137
  *
119
138
  * @example
120
139
  * ```ts
@@ -130,7 +149,7 @@ export function maxMethodLines(threshold) {
130
149
  // `code-lines` since bug 0170 — the metric kept its name when it stopped
131
150
  // counting comments, and the baseline must not compare across that.
132
151
  unit: 'code-lines',
133
- measure: (member) => linesOfCode(member),
152
+ measure: (member) => linesOfCode(member.node),
134
153
  message: (name, loc) => `${name} has ${String(loc)} code lines (max: ${String(threshold)})`,
135
154
  });
136
155
  }
@@ -166,7 +185,8 @@ export function maxMethods(threshold) {
166
185
  };
167
186
  }
168
187
  /**
169
- * No method/constructor may have more than the given number of parameters.
188
+ * No callable member of the class — a method, constructor or accessor, or a property whose
189
+ * value is a function — may have more than the given number of parameters (bug 0306).
170
190
  *
171
191
  * @example
172
192
  * ```ts
@@ -181,7 +201,7 @@ export function maxParameters(threshold) {
181
201
  return memberCeiling(threshold, {
182
202
  description: `have no method with more than ${String(threshold)} parameters`,
183
203
  metric: 'parameters',
184
- measure: (member) => member.getParameters().length,
204
+ measure: (member) => member.parameterCount,
185
205
  message: (name, params) => `${name} has ${String(params)} parameters (max: ${String(threshold)}) — use an options object`,
186
206
  });
187
207
  }
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/rules/metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/rules/metrics.ts"],"names":[],"mappings":"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"}
@@ -2,21 +2,27 @@ import type { ClassDeclaration, SourceFile } from 'ts-morph';
2
2
  import type { Condition } from '@nielspeter/eess';
3
3
  import type { ArchFunction } from '../models/arch-function.js';
4
4
  /**
5
- * No eval() calls in class methods.
5
+ * No eval() calls in any code a class runs — `eval(…)`, through a global object
6
+ * (`globalThis`, `window`, `self`, `global`), a string-keyed bracket, or the indirect
7
+ * `(0, eval)(…)`. An `eval` bound to a local name first is not seen (bug 0305).
6
8
  *
7
9
  * @example
8
10
  * classes(p).should().satisfy(noEval()).check()
9
11
  */
10
12
  export declare function noEval(): Condition<ClassDeclaration>;
11
13
  /**
12
- * No new Function() constructor (equivalent to eval).
14
+ * No Function constructor (equivalent to eval) — called with or without `new`, and
15
+ * through a global object.
13
16
  *
14
17
  * @example
15
18
  * classes(p).should().satisfy(noFunctionConstructor()).check()
16
19
  */
17
20
  export declare function noFunctionConstructor(): Condition<ClassDeclaration>;
18
21
  /**
19
- * No direct process.env access in class methods.
22
+ * No process.env read in any code a class runs, as `notContain()` on the class
23
+ * builder defines it, spelled `process.env`, `process['env']`, or through a
24
+ * global object. An `env` destructured from `process` or imported from `node:process` is
25
+ * not seen (bug 0305); `import.meta.env` is not Node's environment and is not reported.
20
26
  *
21
27
  * Use dependency injection for configuration instead.
22
28
  *
@@ -28,7 +34,8 @@ export declare function noFunctionConstructor(): Condition<ClassDeclaration>;
28
34
  */
29
35
  export declare function noProcessEnv(): Condition<ClassDeclaration>;
30
36
  /**
31
- * No console.log calls in class methods.
37
+ * No console.log calls in any code a class runs — including `console['log']` and through a
38
+ * global object.
32
39
  *
33
40
  * Use a logger abstraction instead.
34
41
  *
@@ -39,7 +46,8 @@ export declare function noProcessEnv(): Condition<ClassDeclaration>;
39
46
  */
40
47
  export declare function noConsoleLog(): Condition<ClassDeclaration>;
41
48
  /**
42
- * No direct console access (any method: log, warn, error, debug, info).
49
+ * No direct console access (any method: log, warn, error, debug, info), including
50
+ * bracketed and global-object spellings.
43
51
  * Stricter than noConsoleLog — catches all console methods.
44
52
  */
45
53
  export declare function noConsole(): Condition<ClassDeclaration>;
@@ -1 +1 @@
1
- {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/rules/security.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAM9D;;;;;GAKG;AACH,wBAAgB,MAAM,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAEpD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAEnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAE1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAE1D;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAEvD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAEzD;AAID,wBAAgB,cAAc,IAAI,SAAS,CAAC,YAAY,CAAC,CAExD;AAED,wBAAgB,6BAA6B,IAAI,SAAS,CAAC,YAAY,CAAC,CAEvE;AAED,wBAAgB,oBAAoB,IAAI,SAAS,CAAC,YAAY,CAAC,CAE9D;AAED,wBAAgB,oBAAoB,IAAI,SAAS,CAAC,YAAY,CAAC,CAE9D;AAED,wBAAgB,iBAAiB,IAAI,SAAS,CAAC,YAAY,CAAC,CAE3D;AAED,wBAAgB,mBAAmB,IAAI,SAAS,CAAC,YAAY,CAAC,CAE7D;AAID,wBAAgB,YAAY,IAAI,SAAS,CAAC,UAAU,CAAC,CAEpD;AAED,wBAAgB,kBAAkB,IAAI,SAAS,CAAC,UAAU,CAAC,CAE1D;AAED,wBAAgB,kBAAkB,IAAI,SAAS,CAAC,UAAU,CAAC,CAE1D"}
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/rules/security.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAmI9D;;;;;;;GAOG;AACH,wBAAgB,MAAM,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAEpD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAEnE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAE1D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAEvD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAEzD;AAID,wBAAgB,cAAc,IAAI,SAAS,CAAC,YAAY,CAAC,CAExD;AAED,wBAAgB,6BAA6B,IAAI,SAAS,CAAC,YAAY,CAAC,CAEvE;AAED,wBAAgB,oBAAoB,IAAI,SAAS,CAAC,YAAY,CAAC,CAE9D;AAED,wBAAgB,oBAAoB,IAAI,SAAS,CAAC,YAAY,CAAC,CAE9D;AAED,wBAAgB,iBAAiB,IAAI,SAAS,CAAC,YAAY,CAAC,CAE3D;AAED,wBAAgB,mBAAmB,IAAI,SAAS,CAAC,YAAY,CAAC,CAE7D;AAID,wBAAgB,YAAY,IAAI,SAAS,CAAC,UAAU,CAAC,CAEpD;AAED,wBAAgB,kBAAkB,IAAI,SAAS,CAAC,UAAU,CAAC,CAE1D;AAED,wBAAgB,kBAAkB,IAAI,SAAS,CAAC,UAAU,CAAC,CAE1D"}
@@ -1,27 +1,150 @@
1
- import { call, newExpr, access } from '../helpers/matchers.js';
1
+ import { Node, SyntaxKind } from 'ts-morph';
2
+ import { call } from '../helpers/matchers.js';
2
3
  import { classNotContain } from '../conditions/body-analysis.js';
3
4
  import { functionNotContain } from '../conditions/body-analysis-function.js';
4
5
  import { moduleNotContain } from '../conditions/body-analysis-module.js';
6
+ // ─── Reading a global however its name is spelled (bugs 0301, 0297, 0308) ──────
7
+ //
8
+ // `call('eval')` compared the callee's text, so `globalThis.eval(…)`, `(0, eval)(…)`
9
+ // and `Function(…)` without `new` passed rules — and a `recommended` floor — written
10
+ // to catch exactly those; `access('process.env')` did the same to `process['env']` and
11
+ // `globalThis.process.env`. These matchers read the name structurally instead. They are
12
+ // private to this module on purpose: the public `call()` and `access()` promise a text
13
+ // match, and adopters' own rules depend on that.
14
+ //
15
+ // They read names, not bindings, so a local binding misleads them both ways: a global
16
+ // first bound to a local name (`const ev = eval`, `const { log } = console`,
17
+ // `const { env } = process`, an `env` imported from `node:process`) is missed,
18
+ // and a local declaration that shadows a global (`function Function() {}`,
19
+ // `const console = {…}`) is reported as the global. Both need the binding followed,
20
+ // which is bug 0305. A type assertion, `satisfies` and a non-null assertion are read through,
21
+ // and so is any number of leading global objects (`window.self.eval`) — bug 0308.
22
+ /** The names a global is reachable through: standard, browser, worker and Node. */
23
+ const GLOBAL_OBJECTS = new Set(['globalThis', 'window', 'self', 'global']);
24
+ /** `x['y']` reads as `x.y` when the key is a literal; a computed key reads as nothing. */
25
+ function elementChainOf(node) {
26
+ if (!Node.isElementAccessExpression(node))
27
+ return undefined;
28
+ const key = node.getArgumentExpression();
29
+ const base = chainOf(node.getExpression());
30
+ if (base === undefined)
31
+ return undefined;
32
+ if (Node.isStringLiteral(key) || Node.isNoSubstitutionTemplateLiteral(key)) {
33
+ return `${base}.${key.getLiteralValue()}`;
34
+ }
35
+ return undefined;
36
+ }
37
+ /**
38
+ * The dotted name an expression reads, or `undefined` when it is not a plain name
39
+ * chain. `x?.y` reads as `x.y`, and `(0, x)` — the indirect-call idiom — as `x`.
40
+ * `this.x` reads as nothing, so a member of an instance is never a global. A type assertion
41
+ * (`as`, `<T>`), `satisfies` and a non-null assertion (`!`) read as the expression they wrap:
42
+ * none of them changes the value at run time (bug 0308).
43
+ */
44
+ function chainOf(node) {
45
+ if (Node.isIdentifier(node))
46
+ return node.getText();
47
+ if (Node.isAsExpression(node) ||
48
+ Node.isSatisfiesExpression(node) ||
49
+ Node.isNonNullExpression(node) ||
50
+ Node.isTypeAssertion(node)) {
51
+ return chainOf(node.getExpression());
52
+ }
53
+ if (Node.isParenthesizedExpression(node)) {
54
+ const inner = node.getExpression();
55
+ const isComma = Node.isBinaryExpression(inner) && inner.getOperatorToken().getKind() === SyntaxKind.CommaToken;
56
+ return chainOf(isComma ? inner.getRight() : inner);
57
+ }
58
+ if (Node.isPropertyAccessExpression(node)) {
59
+ const base = chainOf(node.getExpression());
60
+ return base === undefined ? undefined : `${base}.${node.getName()}`;
61
+ }
62
+ return elementChainOf(node);
63
+ }
64
+ /**
65
+ * The chain with its leading global objects removed: `globalThis.eval` and `window.self.eval`
66
+ * both read as `eval` (bug 0308). Only leading names are dropped, so `settings.window.eval` is
67
+ * not the global.
68
+ */
69
+ function globalNameOf(node) {
70
+ let chain = chainOf(node);
71
+ if (chain === undefined)
72
+ return undefined;
73
+ let dot = chain.indexOf('.');
74
+ while (dot > 0 && GLOBAL_OBJECTS.has(chain.slice(0, dot))) {
75
+ chain = chain.slice(dot + 1);
76
+ dot = chain.indexOf('.');
77
+ }
78
+ return chain;
79
+ }
80
+ /**
81
+ * A call to the global `name`. Described as `call()` describes it, so messages are unchanged; a
82
+ * newly reported call earlier in a declaration still renumbers the matches after it.
83
+ */
84
+ function globalCall(name) {
85
+ return {
86
+ description: `call to '${name}'`,
87
+ syntaxKinds: [SyntaxKind.CallExpression],
88
+ matches: (node) => Node.isCallExpression(node) && globalNameOf(node.getExpression()) === name,
89
+ };
90
+ }
91
+ /** The global `Function`, called or constructed — `Function(…)` is `new Function(…)`. */
92
+ function functionConstructor() {
93
+ return {
94
+ description: 'Function constructor',
95
+ syntaxKinds: [SyntaxKind.NewExpression, SyntaxKind.CallExpression],
96
+ matches: (node) => (Node.isNewExpression(node) || Node.isCallExpression(node)) &&
97
+ globalNameOf(node.getExpression()) === 'Function',
98
+ };
99
+ }
100
+ /**
101
+ * Any member of the global `console`. Described as the `access()` it replaces, so messages are
102
+ * unchanged; a newly reported read earlier in a declaration still renumbers the matches after it.
103
+ */
104
+ function consoleAccess() {
105
+ return {
106
+ description: 'access matching /^console\\./',
107
+ syntaxKinds: [SyntaxKind.PropertyAccessExpression, SyntaxKind.ElementAccessExpression],
108
+ matches: (node) => globalNameOf(node)?.startsWith('console.') === true,
109
+ };
110
+ }
111
+ /**
112
+ * A read of the global `process.env`. Described as the `access()` it replaces, so messages are
113
+ * unchanged; a newly reported read earlier in a member still renumbers the matches after it.
114
+ */
115
+ function processEnvAccess() {
116
+ return {
117
+ description: "access to 'process.env'",
118
+ syntaxKinds: [SyntaxKind.PropertyAccessExpression, SyntaxKind.ElementAccessExpression],
119
+ matches: (node) => globalNameOf(node) === 'process.env',
120
+ };
121
+ }
5
122
  /**
6
- * No eval() calls in class methods.
123
+ * No eval() calls in any code a class runs — `eval(…)`, through a global object
124
+ * (`globalThis`, `window`, `self`, `global`), a string-keyed bracket, or the indirect
125
+ * `(0, eval)(…)`. An `eval` bound to a local name first is not seen (bug 0305).
7
126
  *
8
127
  * @example
9
128
  * classes(p).should().satisfy(noEval()).check()
10
129
  */
11
130
  export function noEval() {
12
- return classNotContain(call('eval'));
131
+ return classNotContain(globalCall('eval'));
13
132
  }
14
133
  /**
15
- * No new Function() constructor (equivalent to eval).
134
+ * No Function constructor (equivalent to eval) — called with or without `new`, and
135
+ * through a global object.
16
136
  *
17
137
  * @example
18
138
  * classes(p).should().satisfy(noFunctionConstructor()).check()
19
139
  */
20
140
  export function noFunctionConstructor() {
21
- return classNotContain(newExpr('Function'));
141
+ return classNotContain(functionConstructor());
22
142
  }
23
143
  /**
24
- * No direct process.env access in class methods.
144
+ * No process.env read in any code a class runs, as `notContain()` on the class
145
+ * builder defines it, spelled `process.env`, `process['env']`, or through a
146
+ * global object. An `env` destructured from `process` or imported from `node:process` is
147
+ * not seen (bug 0305); `import.meta.env` is not Node's environment and is not reported.
25
148
  *
26
149
  * Use dependency injection for configuration instead.
27
150
  *
@@ -32,10 +155,11 @@ export function noFunctionConstructor() {
32
155
  * .check()
33
156
  */
34
157
  export function noProcessEnv() {
35
- return classNotContain(access('process.env'));
158
+ return classNotContain(processEnvAccess());
36
159
  }
37
160
  /**
38
- * No console.log calls in class methods.
161
+ * No console.log calls in any code a class runs — including `console['log']` and through a
162
+ * global object.
39
163
  *
40
164
  * Use a logger abstraction instead.
41
165
  *
@@ -45,14 +169,15 @@ export function noProcessEnv() {
45
169
  * .check()
46
170
  */
47
171
  export function noConsoleLog() {
48
- return classNotContain(call('console.log'));
172
+ return classNotContain(globalCall('console.log'));
49
173
  }
50
174
  /**
51
- * No direct console access (any method: log, warn, error, debug, info).
175
+ * No direct console access (any method: log, warn, error, debug, info), including
176
+ * bracketed and global-object spellings.
52
177
  * Stricter than noConsoleLog — catches all console methods.
53
178
  */
54
179
  export function noConsole() {
55
- return classNotContain(access(/^console\./));
180
+ return classNotContain(consoleAccess());
56
181
  }
57
182
  /**
58
183
  * No JSON.parse calls — centralize deserialization.
@@ -62,31 +187,31 @@ export function noJsonParse() {
62
187
  }
63
188
  // ─── Function variants ────────────────────────────────────────────
64
189
  export function functionNoEval() {
65
- return functionNotContain(call('eval'));
190
+ return functionNotContain(globalCall('eval'));
66
191
  }
67
192
  export function functionNoFunctionConstructor() {
68
- return functionNotContain(newExpr('Function'));
193
+ return functionNotContain(functionConstructor());
69
194
  }
70
195
  export function functionNoProcessEnv() {
71
- return functionNotContain(access('process.env'));
196
+ return functionNotContain(processEnvAccess());
72
197
  }
73
198
  export function functionNoConsoleLog() {
74
- return functionNotContain(call('console.log'));
199
+ return functionNotContain(globalCall('console.log'));
75
200
  }
76
201
  export function functionNoConsole() {
77
- return functionNotContain(access(/^console\./));
202
+ return functionNotContain(consoleAccess());
78
203
  }
79
204
  export function functionNoJsonParse() {
80
205
  return functionNotContain(call('JSON.parse'));
81
206
  }
82
207
  // ─── Module variants ──────────────────────────────────────────────
83
208
  export function moduleNoEval() {
84
- return moduleNotContain(call('eval'));
209
+ return moduleNotContain(globalCall('eval'));
85
210
  }
86
211
  export function moduleNoProcessEnv() {
87
- return moduleNotContain(access('process.env'));
212
+ return moduleNotContain(processEnvAccess());
88
213
  }
89
214
  export function moduleNoConsoleLog() {
90
- return moduleNotContain(call('console.log'));
215
+ return moduleNotContain(globalCall('console.log'));
91
216
  }
92
217
  //# sourceMappingURL=security.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/rules/security.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAA;AAExE;;;;;GAKG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AACtC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED,qEAAqE;AAErE,MAAM,UAAU,cAAc;IAC5B,OAAO,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,OAAO,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED,qEAAqE;AAErE,MAAM,UAAU,YAAY;IAC1B,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;AAC9C,CAAC"}
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/rules/security.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@ export declare function noAnyProperties(): Condition<ClassDeclaration>;
21
21
  /**
22
22
  * Class bodies must not contain `as` type assertions.
23
23
  * Allows `as const` (narrows types, doesn't widen).
24
- * Scans methods, constructors, getters, and setters.
24
+ * Scans all the code the class runs, as `notContain()` on the class builder defines it.
25
25
  *
26
26
  * @example
27
27
  * classes(p).that().haveNameEndingWith('Service')
@@ -32,7 +32,7 @@ export declare function noTypeAssertions(): Condition<ClassDeclaration>;
32
32
  /**
33
33
  * Class bodies must not contain non-null assertions (`!`).
34
34
  * Handle null/undefined explicitly instead of asserting it away.
35
- * Scans methods, constructors, getters, and setters.
35
+ * Scans all the code the class runs, as `notContain()` on the class builder defines it.
36
36
  *
37
37
  * @example
38
38
  * classes(p).that().resideInFolder('** /domain/** ')
@@ -39,7 +39,7 @@ export function noAnyProperties() {
39
39
  /**
40
40
  * Class bodies must not contain `as` type assertions.
41
41
  * Allows `as const` (narrows types, doesn't widen).
42
- * Scans methods, constructors, getters, and setters.
42
+ * Scans all the code the class runs, as `notContain()` on the class builder defines it.
43
43
  *
44
44
  * @example
45
45
  * classes(p).that().haveNameEndingWith('Service')
@@ -52,7 +52,7 @@ export function noTypeAssertions() {
52
52
  /**
53
53
  * Class bodies must not contain non-null assertions (`!`).
54
54
  * Handle null/undefined explicitly instead of asserting it away.
55
- * Scans methods, constructors, getters, and setters.
55
+ * Scans all the code the class runs, as `notContain()` on the class builder defines it.
56
56
  *
57
57
  * @example
58
58
  * classes(p).that().resideInFolder('** /domain/** ')
@@ -143,8 +143,8 @@ export class DuplicateBodiesBuilder extends SmellBuilder {
143
143
  }
144
144
  // Detectors scan for a property of the code, not a user-declared subject
145
145
  // set, so they always include object-literal functions. `functions()`
146
- // keeps that opt-in because widening a selector silently changes every
147
- // existing rule; a detector has no such contract to break, and a
146
+ // keeps anonymous values opt-in, because every inline callback would flood a
147
+ // rule a user wrote; a detector has no such contract to break, and a
148
148
  // duplicated arrow under an object key — a resolver, a route handler, a
149
149
  // reducer case — is exactly the copy-paste rot this exists to find.
150
150
  for (const fn of collectFunctions(sf, { includeObjectLiteralFunctions: true })) {
@@ -1 +1 @@
1
- {"version":3,"file":"duplicate-bodies.js","sourceRoot":"","sources":["../../src/smells/duplicate-bodies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"duplicate-bodies.js","sourceRoot":"","sources":["../../src/smells/duplicate-bodies.ts"],"names":[],"mappings":"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"}
@@ -8,8 +8,8 @@ const TEST_PATTERNS = ['**/*.test.ts', '**/*.spec.ts', '**/__tests__/**'];
8
8
  function fileMatchesPattern(sf, pattern, minLines) {
9
9
  // Detectors scan for a property of the code, not a user-declared subject
10
10
  // set, so they always include object-literal functions. `functions()`
11
- // keeps that opt-in because widening a selector silently changes every
12
- // existing rule; a detector has no such contract to break, and a
11
+ // keeps anonymous values opt-in, because every inline callback would flood a
12
+ // rule a user wrote; a detector has no such contract to break, and a
13
13
  // duplicated arrow under an object key — a resolver, a route handler, a
14
14
  // reducer case — is exactly the copy-paste rot this exists to find.
15
15
  for (const fn of collectFunctions(sf, { includeObjectLiteralFunctions: true })) {
@@ -1 +1 @@
1
- {"version":3,"file":"sibling-files.js","sourceRoot":"","sources":["../../src/smells/sibling-files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sibling-files.js","sourceRoot":"","sources":["../../src/smells/sibling-files.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nielspeter/eess-ts",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Architecture testing for TypeScript — the TS dialect of the eess family (formerly ts-archunit)",
5
5
  "type": "module",
6
6
  "exports": {
@@ -115,7 +115,7 @@
115
115
  }
116
116
  },
117
117
  "dependencies": {
118
- "@nielspeter/eess": "^0.5.0",
118
+ "@nielspeter/eess": "^0.5.1",
119
119
  "jiti": "^2.6.1",
120
120
  "picomatch": "^4.0.4",
121
121
  "ts-morph": "^27.0.2"