@nielspeter/eess-ts 0.5.1 → 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.
- package/README.md +1 -1
- package/dist/builders/class-rule-builder.d.ts +6 -3
- package/dist/builders/class-rule-builder.d.ts.map +1 -1
- package/dist/builders/class-rule-builder.js +6 -3
- package/dist/builders/class-rule-builder.js.map +1 -1
- package/dist/builders/function-rule-builder.d.ts +29 -7
- package/dist/builders/function-rule-builder.d.ts.map +1 -1
- package/dist/builders/function-rule-builder.js +34 -8
- package/dist/builders/function-rule-builder.js.map +1 -1
- package/dist/conditions/body-analysis-function.d.ts.map +1 -1
- package/dist/conditions/body-analysis-function.js +19 -1
- package/dist/conditions/body-analysis-function.js.map +1 -1
- package/dist/conditions/body-analysis.d.ts +5 -2
- package/dist/conditions/body-analysis.d.ts.map +1 -1
- package/dist/conditions/body-analysis.js +9 -6
- package/dist/conditions/body-analysis.js.map +1 -1
- package/dist/conditions/call.d.ts +4 -2
- package/dist/conditions/call.d.ts.map +1 -1
- package/dist/conditions/call.js +11 -8
- package/dist/conditions/call.js.map +1 -1
- package/dist/conditions/catch-analysis.d.ts +7 -1
- package/dist/conditions/catch-analysis.d.ts.map +1 -1
- package/dist/conditions/catch-analysis.js +26 -27
- package/dist/conditions/catch-analysis.js.map +1 -1
- package/dist/conditions/class.d.ts +5 -3
- package/dist/conditions/class.d.ts.map +1 -1
- package/dist/conditions/class.js +9 -6
- package/dist/conditions/class.js.map +1 -1
- package/dist/conditions/function.d.ts +4 -4
- package/dist/conditions/function.js +4 -4
- package/dist/core/execute-rule.js +1 -1
- package/dist/graphql/resolver-rule-builder.d.ts.map +1 -1
- package/dist/graphql/resolver-rule-builder.js +16 -2
- package/dist/graphql/resolver-rule-builder.js.map +1 -1
- package/dist/helpers/body-traversal.d.ts +63 -9
- package/dist/helpers/body-traversal.d.ts.map +1 -1
- package/dist/helpers/body-traversal.js +179 -30
- package/dist/helpers/body-traversal.js.map +1 -1
- package/dist/helpers/heritage.d.ts +25 -0
- package/dist/helpers/heritage.d.ts.map +1 -0
- package/dist/helpers/heritage.js +41 -0
- package/dist/helpers/heritage.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/models/arch-function.d.ts +42 -12
- package/dist/models/arch-function.d.ts.map +1 -1
- package/dist/models/arch-function.js +104 -18
- package/dist/models/arch-function.js.map +1 -1
- package/dist/predicates/class.d.ts +9 -9
- package/dist/predicates/class.d.ts.map +1 -1
- package/dist/predicates/class.js +14 -13
- package/dist/predicates/class.js.map +1 -1
- package/dist/predicates/function.d.ts +16 -4
- package/dist/predicates/function.d.ts.map +1 -1
- package/dist/predicates/function.js +56 -3
- package/dist/predicates/function.js.map +1 -1
- package/dist/predicates/type.d.ts +2 -1
- package/dist/predicates/type.d.ts.map +1 -1
- package/dist/predicates/type.js +6 -2
- package/dist/predicates/type.js.map +1 -1
- package/dist/presets/agent-guardrails.js +5 -5
- package/dist/presets/agent-guardrails.js.map +1 -1
- package/dist/rules/code-quality.d.ts +12 -1
- package/dist/rules/code-quality.d.ts.map +1 -1
- package/dist/rules/code-quality.js +106 -12
- package/dist/rules/code-quality.js.map +1 -1
- package/dist/rules/errors.d.ts +4 -2
- package/dist/rules/errors.d.ts.map +1 -1
- package/dist/rules/errors.js +18 -16
- package/dist/rules/errors.js.map +1 -1
- package/dist/rules/hygiene.d.ts +3 -1
- package/dist/rules/hygiene.d.ts.map +1 -1
- package/dist/rules/hygiene.js +3 -1
- package/dist/rules/hygiene.js.map +1 -1
- package/dist/rules/metrics.d.ts +6 -4
- package/dist/rules/metrics.d.ts.map +1 -1
- package/dist/rules/metrics.js +40 -20
- package/dist/rules/metrics.js.map +1 -1
- package/dist/rules/security.d.ts +13 -5
- package/dist/rules/security.d.ts.map +1 -1
- package/dist/rules/security.js +144 -19
- package/dist/rules/security.js.map +1 -1
- package/dist/rules/typescript.d.ts +2 -2
- package/dist/rules/typescript.js +2 -2
- package/dist/smells/duplicate-bodies.js +2 -2
- package/dist/smells/duplicate-bodies.js.map +1 -1
- package/dist/smells/sibling-files.js +2 -2
- package/dist/smells/sibling-files.js.map +1 -1
- package/package.json +1 -1
|
@@ -51,14 +51,14 @@ export function fromFunctionDeclaration(decl) {
|
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
|
-
* Create an ArchFunction from a VariableDeclaration whose initializer
|
|
55
|
-
*
|
|
54
|
+
* Create an ArchFunction from a VariableDeclaration whose initializer is a function — an arrow
|
|
55
|
+
* function or a function expression, directly or behind parentheses, `as`, `<T>`, `satisfies` or `!`
|
|
56
|
+
* (bug 0315).
|
|
56
57
|
*
|
|
57
|
-
* Precondition: caller must verify the initializer is
|
|
58
|
+
* Precondition: caller must verify the initializer is one, with {@link functionValueOf}.
|
|
58
59
|
*/
|
|
59
60
|
export function fromFunctionInitializerDeclaration(decl) {
|
|
60
|
-
const arrow = decl.
|
|
61
|
-
decl.getInitializerIfKind(SyntaxKind.FunctionExpression);
|
|
61
|
+
const arrow = functionValueOf(decl.getInitializer());
|
|
62
62
|
if (!arrow)
|
|
63
63
|
throw new ArchConfigError('fromFunctionInitializerDeclaration', 'Expected an arrow function or function expression initializer');
|
|
64
64
|
return {
|
|
@@ -110,23 +110,106 @@ export function fromMethodDeclaration(method) {
|
|
|
110
110
|
getBody: () => method.getBody(),
|
|
111
111
|
getNode: () => method,
|
|
112
112
|
getStartLineNumber: () => method.getStartLineNumber(),
|
|
113
|
-
getScope: () =>
|
|
114
|
-
const scope = method.getScope();
|
|
115
|
-
if (scope === Scope.Protected)
|
|
116
|
-
return 'protected';
|
|
117
|
-
if (scope === Scope.Private)
|
|
118
|
-
return 'private';
|
|
119
|
-
return 'public';
|
|
120
|
-
},
|
|
113
|
+
getScope: () => accessOf(method.getScope()),
|
|
121
114
|
};
|
|
122
115
|
}
|
|
116
|
+
/** The kind of function an `ArchFunction` is, read off the node it reports at. */
|
|
117
|
+
export function functionKindOf(fn) {
|
|
118
|
+
const node = fn.getNode();
|
|
119
|
+
if (NodeClass.isMethodDeclaration(node))
|
|
120
|
+
return 'method';
|
|
121
|
+
if (NodeClass.isConstructorDeclaration(node))
|
|
122
|
+
return 'constructor';
|
|
123
|
+
if (NodeClass.isGetAccessorDeclaration(node))
|
|
124
|
+
return 'getter';
|
|
125
|
+
if (NodeClass.isSetAccessorDeclaration(node))
|
|
126
|
+
return 'setter';
|
|
127
|
+
if (NodeClass.isPropertyDeclaration(node))
|
|
128
|
+
return 'property';
|
|
129
|
+
return 'function';
|
|
130
|
+
}
|
|
131
|
+
/** A member's access modifier as an `ArchFunction` reports it; no modifier is `'public'`. */
|
|
132
|
+
function accessOf(scope) {
|
|
133
|
+
if (scope === Scope.Protected)
|
|
134
|
+
return 'protected';
|
|
135
|
+
if (scope === Scope.Private)
|
|
136
|
+
return 'private';
|
|
137
|
+
return 'public';
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* The function a node holds, read through the wrappers that leave it unchanged at run time —
|
|
141
|
+
* parentheses, `as`, `<T>`, `satisfies` and `!` — or `undefined` when it holds something else.
|
|
142
|
+
* A variable's initializer and a class property's value are read this way (bugs 0306, 0315).
|
|
143
|
+
*/
|
|
144
|
+
export function functionValueOf(node) {
|
|
145
|
+
let current = node;
|
|
146
|
+
while (NodeClass.isParenthesizedExpression(current) ||
|
|
147
|
+
NodeClass.isAsExpression(current) ||
|
|
148
|
+
NodeClass.isTypeAssertion(current) ||
|
|
149
|
+
NodeClass.isSatisfiesExpression(current) ||
|
|
150
|
+
NodeClass.isNonNullExpression(current)) {
|
|
151
|
+
current = current.getExpression();
|
|
152
|
+
}
|
|
153
|
+
return NodeClass.isArrowFunction(current) || NodeClass.isFunctionExpression(current)
|
|
154
|
+
? current
|
|
155
|
+
: undefined;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* A class member that is a function but not a method, as an `ArchFunction` (bug 0315): the
|
|
159
|
+
* constructor, an accessor, or a property whose value is a function. Named by its class, as a method
|
|
160
|
+
* is; reported at the member, and read through `fn` — the member itself, or the property's function.
|
|
161
|
+
*/
|
|
162
|
+
function fromClassMember(cls, member, name, fn) {
|
|
163
|
+
const className = cls.getName() ?? '<anonymous>';
|
|
164
|
+
return {
|
|
165
|
+
getName: () => `${className}.${name}`,
|
|
166
|
+
getSourceFile: () => member.getSourceFile(),
|
|
167
|
+
isExported: () => cls.isExported(),
|
|
168
|
+
isAsync: () => NodeClass.isArrowFunction(fn) || NodeClass.isFunctionExpression(fn) ? fn.isAsync() : false,
|
|
169
|
+
getParameters: () => fn.getParameters(),
|
|
170
|
+
getReturnType: () => fn.getReturnType(),
|
|
171
|
+
getBody: () => fn.getBody(),
|
|
172
|
+
getNode: () => member,
|
|
173
|
+
getStartLineNumber: () => member.getStartLineNumber(),
|
|
174
|
+
getScope: () => accessOf(member.getScope()),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* The class's function members other than its methods. The constructor with a body, as
|
|
179
|
+
* `Class.constructor` — ts-morph lists an overloaded constructor by its implementation alone, and an
|
|
180
|
+
* ambient class's constructor has no body. Each accessor as `Class.get x` or `Class.set x`: a
|
|
181
|
+
* getter and its setter share a name, and a metric's identity keys on the function's name. Each
|
|
182
|
+
* property whose value is a function, as `Class.handler`.
|
|
183
|
+
*/
|
|
184
|
+
function classMemberFunctions(cls) {
|
|
185
|
+
const members = [];
|
|
186
|
+
for (const ctor of cls.getConstructors()) {
|
|
187
|
+
if (ctor.getBody() !== undefined)
|
|
188
|
+
members.push(fromClassMember(cls, ctor, 'constructor', ctor));
|
|
189
|
+
}
|
|
190
|
+
for (const getter of cls.getGetAccessors()) {
|
|
191
|
+
members.push(fromClassMember(cls, getter, `get ${getter.getName()}`, getter));
|
|
192
|
+
}
|
|
193
|
+
for (const setter of cls.getSetAccessors()) {
|
|
194
|
+
members.push(fromClassMember(cls, setter, `set ${setter.getName()}`, setter));
|
|
195
|
+
}
|
|
196
|
+
for (const property of cls.getProperties()) {
|
|
197
|
+
const value = functionValueOf(property.getInitializer());
|
|
198
|
+
if (value !== undefined)
|
|
199
|
+
members.push(fromClassMember(cls, property, property.getName(), value));
|
|
200
|
+
}
|
|
201
|
+
return members;
|
|
202
|
+
}
|
|
123
203
|
/**
|
|
124
204
|
* Scan a source file for functions.
|
|
125
205
|
*
|
|
126
206
|
* Returns ArchFunction wrappers for these *named* shapes by default:
|
|
127
207
|
* 1. FunctionDeclarations — `function foo() {}`
|
|
128
|
-
* 2. VariableDeclarations
|
|
129
|
-
*
|
|
208
|
+
* 2. VariableDeclarations whose initializer is a function — `const foo = () => {}`, also behind
|
|
209
|
+
* parentheses, `as`, `<T>`, `satisfies` or `!`
|
|
210
|
+
* 3. Class members, when includeMethods is true — methods (`Foo.bar`), the constructor
|
|
211
|
+
* (`Foo.constructor`), accessors (`Foo.get x`, `Foo.set x`) and function-valued properties
|
|
212
|
+
* (`Foo.handler`)
|
|
130
213
|
*
|
|
131
214
|
* Plus, when `includeObjectLiteralFunctions` is set (default off):
|
|
132
215
|
* 4. Object-literal function property values (arrows / function expressions /
|
|
@@ -150,17 +233,20 @@ export function collectFunctions(sourceFile, options) {
|
|
|
150
233
|
// passing the `recommended` floor inside one, because the element never
|
|
151
234
|
// reached the rule at all. (Distinct from the concise-arrow half of that
|
|
152
235
|
// bug, which was a traversal gap, not a collection gap.)
|
|
153
|
-
|
|
154
|
-
|
|
236
|
+
// Read through parentheses, `as`, `<T>`, `satisfies` and `!` too: `const f = ((x) => …) as F` is
|
|
237
|
+
// the same function, and was collected by nothing (bug 0315).
|
|
238
|
+
if (functionValueOf(varDecl.getInitializer()) !== undefined) {
|
|
155
239
|
functions.push(fromFunctionInitializerDeclaration(varDecl));
|
|
156
240
|
}
|
|
157
241
|
}
|
|
158
|
-
// Pattern 3: class methods
|
|
242
|
+
// Pattern 3: class members — each class's methods, then its other function members, which no
|
|
243
|
+
// function rule read before bug 0315.
|
|
159
244
|
if (includeMethods) {
|
|
160
245
|
for (const cls of sourceFile.getClasses()) {
|
|
161
246
|
for (const method of cls.getMethods()) {
|
|
162
247
|
functions.push(fromMethodDeclaration(method));
|
|
163
248
|
}
|
|
249
|
+
functions.push(...classMemberFunctions(cls));
|
|
164
250
|
}
|
|
165
251
|
}
|
|
166
252
|
// Pattern 4: object-literal function property values (opt-in, proposal 016).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arch-function.js","sourceRoot":"","sources":["../../src/models/arch-function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"arch-function.js","sourceRoot":"","sources":["../../src/models/arch-function.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import type { ClassDeclaration } from 'ts-morph';
|
|
2
2
|
import type { Predicate } from '@nielspeter/eess';
|
|
3
3
|
/**
|
|
4
|
-
* Matches classes
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* matches `extend('Bar')`.
|
|
4
|
+
* Matches classes whose direct base is the named class — written as its name, or through an
|
|
5
|
+
* aliased import, a namespace member or a mixin call. `class Foo extends Bar` matches
|
|
6
|
+
* `extend('Bar')`. A class that reaches `Bar` through an intermediate class is not matched.
|
|
8
7
|
*/
|
|
9
8
|
export declare function extend(className: string): Predicate<ClassDeclaration>;
|
|
10
9
|
/**
|
|
11
|
-
* Matches classes
|
|
12
|
-
*
|
|
13
|
-
* Checks `getImplements()` expression texts.
|
|
10
|
+
* Matches classes whose own `implements` clause names the interface — as written, or through
|
|
11
|
+
* an aliased import.
|
|
14
12
|
*/
|
|
15
13
|
export declare function implement(interfaceName: string): Predicate<ClassDeclaration>;
|
|
16
14
|
/**
|
|
17
|
-
* Matches classes that have a decorator with the given name
|
|
15
|
+
* Matches classes that have a decorator with the given name — as written, or imported under
|
|
16
|
+
* an alias.
|
|
18
17
|
*
|
|
19
18
|
* @example haveDecorator('Controller') matches `@Controller class Foo {}`
|
|
20
19
|
*/
|
|
21
20
|
export declare function haveDecorator(name: string): Predicate<ClassDeclaration>;
|
|
22
21
|
/**
|
|
23
|
-
* Matches classes that have a decorator whose name
|
|
22
|
+
* Matches classes that have a decorator whose name — as written, or the name an aliased
|
|
23
|
+
* import stands for — matches the regex.
|
|
24
24
|
*/
|
|
25
25
|
export declare function haveDecoratorMatching(regex: RegExp): Predicate<ClassDeclaration>;
|
|
26
26
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../src/predicates/class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../src/predicates/class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAGjD;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAKrE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAK5E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAKvE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAKhF;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAKzD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAKzE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAS7E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAK3E"}
|
package/dist/predicates/class.js
CHANGED
|
@@ -1,44 +1,45 @@
|
|
|
1
|
+
import { decoratorNames, extendsByName, implementsByName } from '../helpers/heritage.js';
|
|
1
2
|
/**
|
|
2
|
-
* Matches classes
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* matches `extend('Bar')`.
|
|
3
|
+
* Matches classes whose direct base is the named class — written as its name, or through an
|
|
4
|
+
* aliased import, a namespace member or a mixin call. `class Foo extends Bar` matches
|
|
5
|
+
* `extend('Bar')`. A class that reaches `Bar` through an intermediate class is not matched.
|
|
6
6
|
*/
|
|
7
7
|
export function extend(className) {
|
|
8
8
|
return {
|
|
9
9
|
description: `extend "${className}"`,
|
|
10
|
-
test: (cls) => cls
|
|
10
|
+
test: (cls) => extendsByName(cls, className),
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
* Matches classes
|
|
15
|
-
*
|
|
16
|
-
* Checks `getImplements()` expression texts.
|
|
14
|
+
* Matches classes whose own `implements` clause names the interface — as written, or through
|
|
15
|
+
* an aliased import.
|
|
17
16
|
*/
|
|
18
17
|
export function implement(interfaceName) {
|
|
19
18
|
return {
|
|
20
19
|
description: `implement "${interfaceName}"`,
|
|
21
|
-
test: (cls) => cls
|
|
20
|
+
test: (cls) => implementsByName(cls, interfaceName),
|
|
22
21
|
};
|
|
23
22
|
}
|
|
24
23
|
/**
|
|
25
|
-
* Matches classes that have a decorator with the given name
|
|
24
|
+
* Matches classes that have a decorator with the given name — as written, or imported under
|
|
25
|
+
* an alias.
|
|
26
26
|
*
|
|
27
27
|
* @example haveDecorator('Controller') matches `@Controller class Foo {}`
|
|
28
28
|
*/
|
|
29
29
|
export function haveDecorator(name) {
|
|
30
30
|
return {
|
|
31
31
|
description: `have decorator @${name}`,
|
|
32
|
-
test: (cls) => cls.getDecorators().some((d) => d.
|
|
32
|
+
test: (cls) => cls.getDecorators().some((d) => decoratorNames(d).includes(name)),
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
* Matches classes that have a decorator whose name
|
|
36
|
+
* Matches classes that have a decorator whose name — as written, or the name an aliased
|
|
37
|
+
* import stands for — matches the regex.
|
|
37
38
|
*/
|
|
38
39
|
export function haveDecoratorMatching(regex) {
|
|
39
40
|
return {
|
|
40
41
|
description: `have decorator matching ${String(regex)}`,
|
|
41
|
-
test: (cls) => cls.getDecorators().some((d) =>
|
|
42
|
+
test: (cls) => cls.getDecorators().some((d) => decoratorNames(d).some((n) => regex.test(n))),
|
|
42
43
|
};
|
|
43
44
|
}
|
|
44
45
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../src/predicates/class.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../src/predicates/class.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAExF;;;;GAIG;AACH,MAAM,UAAU,MAAM,CAAC,SAAiB;IACtC,OAAO;QACL,WAAW,EAAE,WAAW,SAAS,GAAG;QACpC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC;KAC7C,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,aAAqB;IAC7C,OAAO;QACL,WAAW,EAAE,cAAc,aAAa,GAAG;QAC3C,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,aAAa,CAAC;KACpD,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO;QACL,WAAW,EAAE,mBAAmB,IAAI,EAAE;QACtC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KACjF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,OAAO;QACL,WAAW,EAAE,2BAA2B,MAAM,CAAC,KAAK,CAAC,EAAE;QACvD,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7F,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO;QACL,WAAW,EAAE,cAAc;QAC3B,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE;KAChC,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO;QACL,WAAW,EAAE,sBAAsB,IAAI,GAAG;QAC1C,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,SAAS;KACjD,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO;QACL,WAAW,EAAE,wBAAwB,MAAM,CAAC,KAAK,CAAC,EAAE;QACpD,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CACZ,GAAG,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,CAAA;YACxB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC,CAAC;KACL,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO;QACL,WAAW,EAAE,wBAAwB,IAAI,GAAG;QAC5C,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,SAAS;KACnD,CAAA;AACH,CAAC"}
|
|
@@ -1,25 +1,37 @@
|
|
|
1
1
|
import type { Predicate } from '@nielspeter/eess';
|
|
2
|
-
import type
|
|
2
|
+
import { type ArchFunction, type FunctionKind } from '../models/arch-function.js';
|
|
3
3
|
import type { TypeMatcher } from '../helpers/type-matchers.js';
|
|
4
4
|
/**
|
|
5
5
|
* Matches functions/methods with public visibility.
|
|
6
6
|
*
|
|
7
|
-
* - Class
|
|
7
|
+
* - Class members: matches explicitly `public` or no access modifier (implicitly public).
|
|
8
8
|
* - Standalone functions / arrow functions: always match (module-level, no visibility concept).
|
|
9
9
|
*/
|
|
10
10
|
export declare function arePublic(): Predicate<ArchFunction>;
|
|
11
11
|
/**
|
|
12
|
-
* Matches class
|
|
12
|
+
* Matches class members with `protected` visibility.
|
|
13
13
|
*
|
|
14
14
|
* Standalone functions and arrow functions never match (they have no visibility modifier).
|
|
15
15
|
*/
|
|
16
16
|
export declare function areProtected(): Predicate<ArchFunction>;
|
|
17
17
|
/**
|
|
18
|
-
* Matches class
|
|
18
|
+
* Matches class members with `private` visibility.
|
|
19
19
|
*
|
|
20
20
|
* Standalone functions and arrow functions never match (they have no visibility modifier).
|
|
21
21
|
*/
|
|
22
22
|
export declare function arePrivate(): Predicate<ArchFunction>;
|
|
23
|
+
/**
|
|
24
|
+
* Matches functions of any of the given kinds: `'function'`, `'method'`, `'constructor'`,
|
|
25
|
+
* `'getter'`, `'setter'` or `'property'` (see {@link FunctionKind}).
|
|
26
|
+
*/
|
|
27
|
+
export declare function areOfKind(...kinds: FunctionKind[]): Predicate<ArchFunction>;
|
|
28
|
+
/**
|
|
29
|
+
* Matches functions of none of the given kinds. Since bug 0315 `functions()` collects a class's
|
|
30
|
+
* constructor and accessors beside its methods; a rule that requires something they cannot give —
|
|
31
|
+
* `beAsync()`, `contain(call(...))` — keeps to the functions that can with
|
|
32
|
+
* `areNotOfKind('constructor', 'getter', 'setter')`.
|
|
33
|
+
*/
|
|
34
|
+
export declare function areNotOfKind(...kinds: FunctionKind[]): Predicate<ArchFunction>;
|
|
23
35
|
/**
|
|
24
36
|
* Matches async functions (declared with the `async` keyword).
|
|
25
37
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../src/predicates/function.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../src/predicates/function.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAkB,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACjG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAI9D;;;;;GAKG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAAC,YAAY,CAAC,CAKnD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAAC,YAAY,CAAC,CAKtD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,SAAS,CAAC,YAAY,CAAC,CAKpD;AAuCD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC,YAAY,CAAC,CAM3E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC,YAAY,CAAC,CAM9E;AAID;;GAEG;AACH,wBAAgB,QAAQ,IAAI,SAAS,CAAC,YAAY,CAAC,CAKlD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,SAAS,CAAC,YAAY,CAAC,CAKrD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAKrE;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAKhF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAK7E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAKxE;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAMhF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,SAAS,CAAC,YAAY,CAAC,CAK3D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,SAAS,CAAC,YAAY,CAAC,CAK/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC,YAAY,CAAC,CAUhG;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAKlF"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { ArchConfigError } from '@nielspeter/eess';
|
|
2
|
+
import { functionKindOf } from '../models/arch-function.js';
|
|
1
3
|
// --- Visibility predicates (plan 0032) ---
|
|
2
4
|
/**
|
|
3
5
|
* Matches functions/methods with public visibility.
|
|
4
6
|
*
|
|
5
|
-
* - Class
|
|
7
|
+
* - Class members: matches explicitly `public` or no access modifier (implicitly public).
|
|
6
8
|
* - Standalone functions / arrow functions: always match (module-level, no visibility concept).
|
|
7
9
|
*/
|
|
8
10
|
export function arePublic() {
|
|
@@ -12,7 +14,7 @@ export function arePublic() {
|
|
|
12
14
|
};
|
|
13
15
|
}
|
|
14
16
|
/**
|
|
15
|
-
* Matches class
|
|
17
|
+
* Matches class members with `protected` visibility.
|
|
16
18
|
*
|
|
17
19
|
* Standalone functions and arrow functions never match (they have no visibility modifier).
|
|
18
20
|
*/
|
|
@@ -23,7 +25,7 @@ export function areProtected() {
|
|
|
23
25
|
};
|
|
24
26
|
}
|
|
25
27
|
/**
|
|
26
|
-
* Matches class
|
|
28
|
+
* Matches class members with `private` visibility.
|
|
27
29
|
*
|
|
28
30
|
* Standalone functions and arrow functions never match (they have no visibility modifier).
|
|
29
31
|
*/
|
|
@@ -33,6 +35,57 @@ export function arePrivate() {
|
|
|
33
35
|
test: (fn) => fn.getScope() === 'private',
|
|
34
36
|
};
|
|
35
37
|
}
|
|
38
|
+
// --- Kind predicates (bug 0315) ---
|
|
39
|
+
/** Every kind, checked by the compiler against `FunctionKind` so the two cannot drift apart. */
|
|
40
|
+
const KINDS = {
|
|
41
|
+
function: true,
|
|
42
|
+
method: true,
|
|
43
|
+
constructor: true,
|
|
44
|
+
getter: true,
|
|
45
|
+
setter: true,
|
|
46
|
+
property: true,
|
|
47
|
+
};
|
|
48
|
+
const KNOWN_KINDS = new Set(Object.keys(KINDS));
|
|
49
|
+
/**
|
|
50
|
+
* The kinds a kind predicate names. Naming none is refused, and so is a string that is not a kind: the
|
|
51
|
+
* `FunctionKind` type stops a typo only where the rule file is type-checked, and without this a rule
|
|
52
|
+
* file loaded unchecked would narrow the rule to the kinds it spelled right, and say nothing.
|
|
53
|
+
*/
|
|
54
|
+
function namedKinds(predicate, kinds) {
|
|
55
|
+
if (kinds.length === 0) {
|
|
56
|
+
throw new ArchConfigError(predicate, 'name at least one kind, e.g. constructor, getter or setter');
|
|
57
|
+
}
|
|
58
|
+
for (const kind of kinds) {
|
|
59
|
+
if (!KNOWN_KINDS.has(kind)) {
|
|
60
|
+
throw new ArchConfigError(predicate, `'${kind}' is not a function kind; the kinds are ${[...KNOWN_KINDS].join(', ')}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return new Set(kinds);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Matches functions of any of the given kinds: `'function'`, `'method'`, `'constructor'`,
|
|
67
|
+
* `'getter'`, `'setter'` or `'property'` (see {@link FunctionKind}).
|
|
68
|
+
*/
|
|
69
|
+
export function areOfKind(...kinds) {
|
|
70
|
+
const named = namedKinds('areOfKind', kinds);
|
|
71
|
+
return {
|
|
72
|
+
description: `are of kind ${kinds.join(', ')}`,
|
|
73
|
+
test: (fn) => named.has(functionKindOf(fn)),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Matches functions of none of the given kinds. Since bug 0315 `functions()` collects a class's
|
|
78
|
+
* constructor and accessors beside its methods; a rule that requires something they cannot give —
|
|
79
|
+
* `beAsync()`, `contain(call(...))` — keeps to the functions that can with
|
|
80
|
+
* `areNotOfKind('constructor', 'getter', 'setter')`.
|
|
81
|
+
*/
|
|
82
|
+
export function areNotOfKind(...kinds) {
|
|
83
|
+
const named = namedKinds('areNotOfKind', kinds);
|
|
84
|
+
return {
|
|
85
|
+
description: `are not of kind ${kinds.join(', ')}`,
|
|
86
|
+
test: (fn) => !named.has(functionKindOf(fn)),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
36
89
|
// --- Async predicates ---
|
|
37
90
|
/**
|
|
38
91
|
* Matches async functions (declared with the `async` keyword).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../src/predicates/function.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../src/predicates/function.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,7 +38,8 @@ export declare function haveProperty(name: string): Predicate<TypeDeclaration>;
|
|
|
38
38
|
*/
|
|
39
39
|
export declare function havePropertyOfType(name: string, matcher: TypeMatcher): Predicate<TypeDeclaration>;
|
|
40
40
|
/**
|
|
41
|
-
* Matches interfaces that extend the given type name
|
|
41
|
+
* Matches interfaces that directly extend the given type name — as written, or through an
|
|
42
|
+
* aliased import or a namespace member.
|
|
42
43
|
* For type aliases, checks if the type text references the name.
|
|
43
44
|
*
|
|
44
45
|
* @example
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/predicates/type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAA;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/predicates/type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAA;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAG9D;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,oBAAoB,CAAA;AAEzE;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAAC,eAAe,CAAC,CAK1D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,SAAS,CAAC,eAAe,CAAC,CAK3D;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,CAQrE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC,eAAe,CAAC,CASjG;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,CAkBnE"}
|
package/dist/predicates/type.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Node } from 'ts-morph';
|
|
2
|
+
import { clauseResolvesTo } from '../helpers/heritage.js';
|
|
2
3
|
/**
|
|
3
4
|
* Matches only InterfaceDeclaration elements.
|
|
4
5
|
*
|
|
@@ -59,7 +60,8 @@ export function havePropertyOfType(name, matcher) {
|
|
|
59
60
|
};
|
|
60
61
|
}
|
|
61
62
|
/**
|
|
62
|
-
* Matches interfaces that extend the given type name
|
|
63
|
+
* Matches interfaces that directly extend the given type name — as written, or through an
|
|
64
|
+
* aliased import or a namespace member.
|
|
63
65
|
* For type aliases, checks if the type text references the name.
|
|
64
66
|
*
|
|
65
67
|
* @example
|
|
@@ -72,7 +74,9 @@ export function extendType(name) {
|
|
|
72
74
|
if (Node.isInterfaceDeclaration(element)) {
|
|
73
75
|
const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
74
76
|
const nameRegex = new RegExp(`^${escaped}(\\b|$|<)`);
|
|
75
|
-
return element
|
|
77
|
+
return element
|
|
78
|
+
.getExtends()
|
|
79
|
+
.some((ext) => nameRegex.test(ext.getText()) || clauseResolvesTo(ext, name));
|
|
76
80
|
}
|
|
77
81
|
// For type aliases, check if the type directly references the named type
|
|
78
82
|
// Use word boundary matching to avoid false positives (e.g., "BaseConfig" inside "{ bar: BaseConfig }")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/predicates/type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAwD,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/predicates/type.ts"],"names":[],"mappings":"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"}
|
|
@@ -79,13 +79,13 @@ const EMITTERS = /(^|\.)(finishPreset|reportViolations|throwIfViolations)$/;
|
|
|
79
79
|
* agent an actionable fix.
|
|
80
80
|
*
|
|
81
81
|
* Uses function-variant rules so standalone functions, arrow functions, and
|
|
82
|
-
* class
|
|
82
|
+
* class members are all covered.
|
|
83
83
|
*/
|
|
84
84
|
// Presets collect object-literal functions unconditionally. `functions()`
|
|
85
|
-
// keeps
|
|
86
|
-
//
|
|
87
|
-
// promises "standalone functions, arrow functions, and class
|
|
88
|
-
// covered". A handler map — the shape agents generate most — was none of the
|
|
85
|
+
// keeps these anonymous values opt-in because every inline callback would flood
|
|
86
|
+
// a rule the USER wrote; a preset's subject set is the preset's own, and this one
|
|
87
|
+
// already promises "standalone functions, arrow functions, and class members are
|
|
88
|
+
// all covered". A handler map — the shape agents generate most — was none of the
|
|
89
89
|
// three, so `{ POST: () => {} }` slipped every guardrail (bug 0013).
|
|
90
90
|
const COLLECT_ALL = { includeObjectLiteralFunctions: true };
|
|
91
91
|
export function agentGuardrails(p, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-guardrails.js","sourceRoot":"","sources":["../../src/presets/agent-guardrails.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAA;AAEhE,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAA;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAI3C,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,aAAa,EACb,OAAO,GACR,MAAM,aAAa,CAAA;AAsDpB;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,CAAC,eAAe,EAAE,cAAc,EAAE,cAAc,CAAC,CAAA;AAE5E;;;;;;;;GAQG;AACH,MAAM,aAAa,GAAG;IACpB,kBAAkB;IAClB,qBAAqB;IACrB,oBAAoB;IACpB,uBAAuB;CACxB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,QAAQ,GAAG,0DAA0D,CAAA;AAE3E;;;;;;;;;;;;;GAaG;AACH,0EAA0E;AAC1E,
|
|
1
|
+
{"version":3,"file":"agent-guardrails.js","sourceRoot":"","sources":["../../src/presets/agent-guardrails.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,11 +33,22 @@ export declare function requireJsDocOnPublicMethods(): Condition<ClassDeclaratio
|
|
|
33
33
|
*/
|
|
34
34
|
export declare function noPublicFields(): Condition<ClassDeclaration>;
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
36
|
+
* No member code of a class may contain magic numbers: method, constructor and accessor bodies,
|
|
37
|
+
* parameter defaults, property initializers and static blocks (bug 0306). Decorators, computed member
|
|
38
|
+
* names and `extends` are not read: a number in `@Max(150)` or `@Column({ precision: 12 })` is named by the
|
|
39
|
+
* decorator that takes it, and reading them would report every validation and ORM field.
|
|
37
40
|
*
|
|
38
41
|
* Numbers 0, 1, -1, 2, 10, 100 are allowed by default.
|
|
39
42
|
* Configure with options.allowed to customize.
|
|
40
43
|
*
|
|
44
|
+
* A number that is the whole value of one of the class's own properties or its members' parameter
|
|
45
|
+
* defaults, a default inside a destructured parameter included, is named by it, and is not reported
|
|
46
|
+
* — read through a sign, parentheses, `as`, `<T>`,
|
|
47
|
+
* `satisfies` and `!`, so `static readonly LIMIT = 5000 as const` is named too.
|
|
48
|
+
*
|
|
49
|
+
* A finding names the member the number sits in — `Class.method`, `Class.constructor`,
|
|
50
|
+
* `Class.static` for a static block — so a number in a method keeps the message it always had.
|
|
51
|
+
*
|
|
41
52
|
* @example
|
|
42
53
|
* import { noMagicNumbers } from '@nielspeter/eess-ts/rules/code-quality'
|
|
43
54
|
*
|