@opensip-cli/checks-typescript 0.1.7 → 0.1.9
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 +2 -2
- package/dist/__tests__/branch-fixtures-3.test.js +41 -0
- package/dist/__tests__/branch-fixtures-3.test.js.map +1 -1
- package/dist/__tests__/branch-fixtures.test.js +1 -3
- package/dist/__tests__/branch-fixtures.test.js.map +1 -1
- package/dist/__tests__/command-handler-host-owned-output.test.d.ts +2 -0
- package/dist/__tests__/command-handler-host-owned-output.test.d.ts.map +1 -0
- package/dist/__tests__/command-handler-host-owned-output.test.js +85 -0
- package/dist/__tests__/command-handler-host-owned-output.test.js.map +1 -0
- package/dist/__tests__/host-tool-runtime-import-boundary.test.js +69 -12
- package/dist/__tests__/host-tool-runtime-import-boundary.test.js.map +1 -1
- package/dist/__tests__/null-safety-typed.test.d.ts +2 -0
- package/dist/__tests__/null-safety-typed.test.d.ts.map +1 -0
- package/dist/__tests__/null-safety-typed.test.js +112 -0
- package/dist/__tests__/null-safety-typed.test.js.map +1 -0
- package/dist/__tests__/shared-program.test.d.ts +2 -0
- package/dist/__tests__/shared-program.test.d.ts.map +1 -0
- package/dist/__tests__/shared-program.test.js +41 -0
- package/dist/__tests__/shared-program.test.js.map +1 -0
- package/dist/__tests__/shipped-allowlists-are-generic.test.d.ts +2 -0
- package/dist/__tests__/shipped-allowlists-are-generic.test.d.ts.map +1 -0
- package/dist/__tests__/shipped-allowlists-are-generic.test.js +64 -0
- package/dist/__tests__/shipped-allowlists-are-generic.test.js.map +1 -0
- package/dist/checks/architecture/command-handler-host-owned-output.d.ts +25 -0
- package/dist/checks/architecture/command-handler-host-owned-output.d.ts.map +1 -0
- package/dist/checks/architecture/command-handler-host-owned-output.js +165 -0
- package/dist/checks/architecture/command-handler-host-owned-output.js.map +1 -0
- package/dist/checks/architecture/host-tool-runtime-import-boundary.d.ts +24 -7
- package/dist/checks/architecture/host-tool-runtime-import-boundary.d.ts.map +1 -1
- package/dist/checks/architecture/host-tool-runtime-import-boundary.js +114 -33
- package/dist/checks/architecture/host-tool-runtime-import-boundary.js.map +1 -1
- package/dist/checks/architecture/index.d.ts +30 -0
- package/dist/checks/architecture/index.d.ts.map +1 -1
- package/dist/checks/architecture/index.js +30 -0
- package/dist/checks/architecture/index.js.map +1 -1
- package/dist/checks/quality/code-structure/duplicate-utility-functions.d.ts +13 -1
- package/dist/checks/quality/code-structure/duplicate-utility-functions.d.ts.map +1 -1
- package/dist/checks/quality/code-structure/duplicate-utility-functions.js +7 -3
- package/dist/checks/quality/code-structure/duplicate-utility-functions.js.map +1 -1
- package/dist/checks/quality/data-integrity/null-safety.d.ts +63 -2
- package/dist/checks/quality/data-integrity/null-safety.d.ts.map +1 -1
- package/dist/checks/quality/data-integrity/null-safety.js +191 -102
- package/dist/checks/quality/data-integrity/null-safety.js.map +1 -1
- package/dist/checks/quality/patterns/result-pattern-consistency.d.ts +21 -0
- package/dist/checks/quality/patterns/result-pattern-consistency.d.ts.map +1 -1
- package/dist/checks/quality/patterns/result-pattern-consistency.js +16 -15
- package/dist/checks/quality/patterns/result-pattern-consistency.js.map +1 -1
- package/dist/checks/resilience/detached-promises.d.ts.map +1 -1
- package/dist/checks/resilience/detached-promises.js +4 -0
- package/dist/checks/resilience/detached-promises.js.map +1 -1
- package/dist/checks/resilience/no-raw-fetch.d.ts +14 -0
- package/dist/checks/resilience/no-raw-fetch.d.ts.map +1 -1
- package/dist/checks/resilience/no-raw-fetch.js +7 -7
- package/dist/checks/resilience/no-raw-fetch.js.map +1 -1
- package/dist/display/architecture.d.ts.map +1 -1
- package/dist/display/architecture.js +1 -0
- package/dist/display/architecture.js.map +1 -1
- package/dist/shared/type-program.d.ts +23 -0
- package/dist/shared/type-program.d.ts.map +1 -0
- package/dist/shared/type-program.js +35 -0
- package/dist/shared/type-program.js.map +1 -0
- package/package.json +5 -5
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Detects unsafe property and method access without null checks.
|
|
6
6
|
*/
|
|
7
|
-
import { defineCheck, getCheckConfig, isTestFile } from '@opensip-cli/fitness';
|
|
8
|
-
import { getSharedSourceFile } from '@opensip-cli/lang-typescript';
|
|
7
|
+
import { defineCheck, getCheckConfig, isTestFile, } from '@opensip-cli/fitness';
|
|
8
|
+
import { getSharedSourceFile, isTypeNullable, } from '@opensip-cli/lang-typescript';
|
|
9
9
|
import * as ts from 'typescript';
|
|
10
|
+
import { getSharedTypeCheckedProgram } from '../../../shared/type-program.js';
|
|
10
11
|
/**
|
|
11
12
|
* Patterns that indicate the access is already protected
|
|
12
13
|
*/
|
|
@@ -18,98 +19,82 @@ const SAFE_PATTERNS = [
|
|
|
18
19
|
/&&/, // Logical AND guard
|
|
19
20
|
];
|
|
20
21
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
22
|
+
* Call prefixes whose results are non-null by construction, so a property
|
|
23
|
+
* access on them needs no guard. Scope is deliberately limited to facts that
|
|
24
|
+
* hold for ANY codebase:
|
|
25
|
+
*
|
|
26
|
+
* 1. Language / runtime guarantees — `Object.*`, `Array.*`, `JSON.*`,
|
|
27
|
+
* `new URL()`, Node `crypto`/`child_process`, `Intl`, the TS compiler API.
|
|
28
|
+
* 2. Widely-used libraries whose builder/query APIs are documented non-null
|
|
29
|
+
* — Zod, TypeORM, Drizzle, better-sqlite3, neverthrow `Result`, Express.
|
|
30
|
+
* 3. Generic builder-pattern conventions — `builder.`, `*ResultBuilder.`.
|
|
31
|
+
*
|
|
32
|
+
* PROJECT-SPECIFIC safe symbols must NOT be hardcoded here: baking one
|
|
33
|
+
* codebase's invariants into a generic check silently suppresses real null
|
|
34
|
+
* bugs in every other codebase (e.g. an adopter whose own `getThing()` can
|
|
35
|
+
* return null). Adopters extend this set with their own factories via the
|
|
36
|
+
* `additionalSafeBuilders` recipe-config key — see `buildEffectiveSafeBuilders`.
|
|
23
37
|
*/
|
|
24
|
-
const SAFE_BUILDER_PREFIXES = [
|
|
25
|
-
|
|
26
|
-
'
|
|
27
|
-
'
|
|
28
|
-
'
|
|
29
|
-
'
|
|
30
|
-
'
|
|
31
|
-
'
|
|
32
|
-
'
|
|
33
|
-
'
|
|
34
|
-
'
|
|
35
|
-
'
|
|
36
|
-
'
|
|
37
|
-
'
|
|
38
|
-
'
|
|
39
|
-
'
|
|
40
|
-
'Object.assign', // Always returns object
|
|
41
|
-
'Object.freeze', // Always returns object
|
|
42
|
-
'Array.from', // Always returns array
|
|
43
|
-
'Array.isArray', // Returns boolean
|
|
44
|
-
'String(', // String constructor always returns string
|
|
45
|
-
'Number(', // Number constructor always returns number
|
|
46
|
-
'Boolean(', // Boolean constructor always returns boolean
|
|
47
|
-
'Buffer.from', // Always returns Buffer
|
|
48
|
-
'JSON.stringify', // Always returns string
|
|
49
|
-
'JSON.parse', // Always returns value
|
|
50
|
-
'process.memoryUsage', // Always returns MemoryUsage
|
|
51
|
-
'getTypedEventBus', // Singleton factory always returns non-null
|
|
52
|
-
'res.status', // Express/Fastify response chaining
|
|
53
|
-
'response.status', // Express/Fastify response chaining
|
|
54
|
-
// better-sqlite3 (prepare always returns Statement)
|
|
55
|
-
'prepare(', // db.prepare() always returns Statement object
|
|
56
|
-
// Drizzle ORM
|
|
57
|
-
'drizzle(', // Drizzle instance creation
|
|
58
|
-
'db.select', // Drizzle query builder
|
|
59
|
-
'db.insert', // Drizzle query builder
|
|
60
|
-
'db.update', // Drizzle query builder
|
|
61
|
-
'db.delete', // Drizzle query builder
|
|
62
|
-
// TypeScript compiler API (always return valid objects)
|
|
63
|
-
'sourceFile.getLineAndCharacterOfPosition',
|
|
64
|
-
'node.getText',
|
|
65
|
-
'node.getStart',
|
|
66
|
-
'node.getEnd',
|
|
67
|
-
'node.getWidth',
|
|
68
|
-
'node.getFullWidth',
|
|
69
|
-
// Browser APIs with guaranteed non-null returns
|
|
70
|
-
'window.matchMedia',
|
|
71
|
-
'document.createElement',
|
|
72
|
-
'document.createTextNode',
|
|
73
|
-
// Singleton factories that throw on failure (never return null)
|
|
74
|
-
'getContextManager',
|
|
75
|
-
'getCredentialConfig',
|
|
76
|
-
'getLogger',
|
|
77
|
-
// Custom builder patterns
|
|
78
|
-
'ScenarioResultBuilder.',
|
|
79
|
-
'ResultBuilder.',
|
|
80
|
-
'CheckResultBuilder.',
|
|
81
|
-
// Node.js URL helpers (always return a URL/string)
|
|
38
|
+
export const SAFE_BUILDER_PREFIXES = [
|
|
39
|
+
// 1. Language / runtime guarantees
|
|
40
|
+
'Object.entries',
|
|
41
|
+
'Object.values',
|
|
42
|
+
'Object.keys',
|
|
43
|
+
'Object.assign',
|
|
44
|
+
'Object.freeze',
|
|
45
|
+
'Array.from',
|
|
46
|
+
'Array.isArray',
|
|
47
|
+
'String(',
|
|
48
|
+
'Number(',
|
|
49
|
+
'Boolean(',
|
|
50
|
+
'Buffer.from',
|
|
51
|
+
'JSON.stringify',
|
|
52
|
+
'JSON.parse',
|
|
53
|
+
'process.memoryUsage',
|
|
82
54
|
'pathToFileURL(',
|
|
83
55
|
'fileURLToPath(',
|
|
84
|
-
// new URL(...) constructor — returns URL or throws
|
|
85
56
|
'new URL(',
|
|
86
|
-
// Node.js child_process (spawn always returns ChildProcess or throws)
|
|
87
57
|
'spawn(',
|
|
88
58
|
'fork(',
|
|
89
|
-
// Node.js crypto (createHash/createHmac always return Hash/Hmac)
|
|
90
59
|
'createHash(',
|
|
91
60
|
'createHmac(',
|
|
92
61
|
'createCipheriv(',
|
|
93
62
|
'createDecipheriv(',
|
|
94
|
-
// Intl formatters (always return formatter instances)
|
|
95
|
-
'getNumberFormatter',
|
|
96
|
-
'getDateFormatter',
|
|
97
63
|
'new Intl.',
|
|
98
64
|
'Intl.NumberFormat',
|
|
99
65
|
'Intl.DateTimeFormat',
|
|
100
|
-
//
|
|
101
|
-
'
|
|
102
|
-
'
|
|
103
|
-
'
|
|
104
|
-
'
|
|
105
|
-
'
|
|
106
|
-
'
|
|
107
|
-
|
|
108
|
-
'
|
|
109
|
-
'
|
|
110
|
-
'
|
|
111
|
-
|
|
112
|
-
'
|
|
66
|
+
// TypeScript compiler API (always return valid objects)
|
|
67
|
+
'sourceFile.getLineAndCharacterOfPosition',
|
|
68
|
+
'node.getText',
|
|
69
|
+
'node.getStart',
|
|
70
|
+
'node.getEnd',
|
|
71
|
+
'node.getWidth',
|
|
72
|
+
'node.getFullWidth',
|
|
73
|
+
// Browser APIs with guaranteed non-null returns
|
|
74
|
+
'window.matchMedia',
|
|
75
|
+
'document.createElement',
|
|
76
|
+
'document.createTextNode',
|
|
77
|
+
// 2. Common library builder / query APIs
|
|
78
|
+
'z.', // Zod schema builder (z.string(), z.object(), …)
|
|
79
|
+
'createQueryBuilder', // TypeORM QueryBuilder
|
|
80
|
+
'getRepository', // TypeORM Repository
|
|
81
|
+
'EntityManager.', // TypeORM EntityManager
|
|
82
|
+
'queryBuilder.', // TypeORM QueryBuilder variable
|
|
83
|
+
'repository.', // TypeORM Repository variable
|
|
84
|
+
'Result.', // Result pattern builder
|
|
85
|
+
'ResultAsync.', // neverthrow ResultAsync
|
|
86
|
+
'prepare(', // better-sqlite3 db.prepare() → Statement
|
|
87
|
+
'drizzle(', // Drizzle instance creation
|
|
88
|
+
'db.select', // Drizzle query builder
|
|
89
|
+
'db.insert',
|
|
90
|
+
'db.update',
|
|
91
|
+
'db.delete',
|
|
92
|
+
'res.status', // Express/Fastify response chaining
|
|
93
|
+
'response.status',
|
|
94
|
+
// 3. Generic builder-pattern conventions
|
|
95
|
+
'builder.',
|
|
96
|
+
'ResultBuilder.',
|
|
97
|
+
'ScenarioResultBuilder.',
|
|
113
98
|
];
|
|
114
99
|
/**
|
|
115
100
|
* Known safe method names in fluent APIs that always return `this` or non-null values.
|
|
@@ -418,7 +403,7 @@ const SAFE_FLUENT_METHODS = new Set([
|
|
|
418
403
|
* Methods starting with these prefixes are conventionally designed to always
|
|
419
404
|
* return a value or throw, never return null/undefined.
|
|
420
405
|
*/
|
|
421
|
-
const SAFE_METHOD_PREFIXES = [
|
|
406
|
+
export const SAFE_METHOD_PREFIXES = [
|
|
422
407
|
'get',
|
|
423
408
|
'set',
|
|
424
409
|
'is',
|
|
@@ -473,9 +458,9 @@ const SAFE_METHOD_PREFIXES = [
|
|
|
473
458
|
* `readScope`, `currentScenarioRegistry`, etc. whose names convey the same
|
|
474
459
|
* "returns a value or throws" contract.
|
|
475
460
|
*/
|
|
476
|
-
function isSafeBuilderPattern(expression, sourceFile) {
|
|
461
|
+
function isSafeBuilderPattern(expression, sourceFile, safeBuilders) {
|
|
477
462
|
const text = expression.getText(sourceFile);
|
|
478
|
-
if (
|
|
463
|
+
if (safeBuilders.some((prefix) => text.startsWith(prefix)))
|
|
479
464
|
return true;
|
|
480
465
|
if (ts.isIdentifier(expression.expression)) {
|
|
481
466
|
return isSafeFluentMethod(expression.expression.text);
|
|
@@ -631,19 +616,18 @@ function isFluentChain(node) {
|
|
|
631
616
|
* (`.provideValue/.provideClass/...` always return Injector<T>); the chain
|
|
632
617
|
* is split across many lines so the AST chain-depth heuristic does not always
|
|
633
618
|
* apply. The whole-file safe-list captures the convention.
|
|
634
|
-
* - `**\/schema/*.ts`, `**\/*-schema.ts
|
|
635
|
-
*
|
|
636
|
-
*
|
|
619
|
+
* - `**\/schema/*.ts`, `**\/*-schema.ts` — Drizzle/Zod schema declarations are
|
|
620
|
+
* pure column/shape builders. No runtime null-access surface to protect.
|
|
621
|
+
*
|
|
622
|
+
* These are deliberately generic path conventions. Project-specific safe paths
|
|
623
|
+
* (e.g. a bespoke schema/DI folder layout) belong in the
|
|
624
|
+
* `additionalSafeNullPaths` recipe-config key, not in these built-in defaults.
|
|
637
625
|
*/
|
|
638
626
|
const SAFE_NULL_PATHS = [
|
|
639
627
|
/\/di\/fragment\.ts$/,
|
|
640
628
|
/\/di\/fragments\//,
|
|
641
629
|
/\/schema\//,
|
|
642
630
|
/-schema\.ts$/,
|
|
643
|
-
// NOTE: opensip's `/dbos/schema` path is NOT a default. DBOS is a
|
|
644
|
-
// published library, but the path layout is opensip's convention. It
|
|
645
|
-
// lives in opensip's recipe under
|
|
646
|
-
// `checks.config['null-safety'].additionalSafeNullPaths`.
|
|
647
631
|
];
|
|
648
632
|
/** Merge built-in defaults with the recipe-config slice. */
|
|
649
633
|
function buildEffectiveSafePaths() {
|
|
@@ -651,6 +635,14 @@ function buildEffectiveSafePaths() {
|
|
|
651
635
|
const extras = (cfg.additionalSafeNullPaths ?? []).map((src) => new RegExp(src, 'i'));
|
|
652
636
|
return [...SAFE_NULL_PATHS, ...extras];
|
|
653
637
|
}
|
|
638
|
+
/**
|
|
639
|
+
* Merge the built-in (generic) safe-builder prefixes with any project-specific
|
|
640
|
+
* ones supplied via `checks.config['null-safety'].additionalSafeBuilders`.
|
|
641
|
+
*/
|
|
642
|
+
function buildEffectiveSafeBuilders() {
|
|
643
|
+
const cfg = getCheckConfig('null-safety');
|
|
644
|
+
return [...SAFE_BUILDER_PREFIXES, ...(cfg.additionalSafeBuilders ?? [])];
|
|
645
|
+
}
|
|
654
646
|
function isSafeNullPath(filePath, paths) {
|
|
655
647
|
return paths.some((p) => p.test(filePath));
|
|
656
648
|
}
|
|
@@ -668,6 +660,8 @@ export function analyzeNullSafety(content, filePath) {
|
|
|
668
660
|
const safePaths = buildEffectiveSafePaths();
|
|
669
661
|
if (isSafeNullPath(filePath, safePaths))
|
|
670
662
|
return violations;
|
|
663
|
+
// Effective safe-builder prefixes = generic built-ins + project config.
|
|
664
|
+
const safeBuilders = buildEffectiveSafeBuilders();
|
|
671
665
|
try {
|
|
672
666
|
const sourceFile = getSharedSourceFile(filePath, content);
|
|
673
667
|
if (!sourceFile)
|
|
@@ -691,7 +685,8 @@ export function analyzeNullSafety(content, filePath) {
|
|
|
691
685
|
if (isZodBuilderChain(node, sourceFile))
|
|
692
686
|
return;
|
|
693
687
|
// Skip known safe builder patterns
|
|
694
|
-
if (ts.isCallExpression(expression) &&
|
|
688
|
+
if (ts.isCallExpression(expression) &&
|
|
689
|
+
isSafeBuilderPattern(expression, sourceFile, safeBuilders))
|
|
695
690
|
return;
|
|
696
691
|
// Skip fluent API chains (promise.then().catch(), queryBuilder.where().orderBy())
|
|
697
692
|
if (isFluentChain(node))
|
|
@@ -731,6 +726,81 @@ export function analyzeNullSafety(content, filePath) {
|
|
|
731
726
|
}
|
|
732
727
|
return violations;
|
|
733
728
|
}
|
|
729
|
+
/**
|
|
730
|
+
* Type-aware variant (D2): walk the Program's SourceFile and flag a property
|
|
731
|
+
* access on a call/element-access result ONLY when the receiver's actual type
|
|
732
|
+
* includes `null`/`undefined`. The TypeChecker subsumes every heuristic the
|
|
733
|
+
* convention path uses — control-flow narrowing (guards), builder/Zod return
|
|
734
|
+
* types, and chain depth all fall out of real types — so this detector is
|
|
735
|
+
* deliberately minimal. Fail-open: `any`/`unknown`/unresolved types are not
|
|
736
|
+
* nullable per `isTypeNullable`, so "the compiler doesn't know" never flags.
|
|
737
|
+
*
|
|
738
|
+
* Reads the same path skip + escape-hatch config as the convention path
|
|
739
|
+
* (`additionalSafeNullPaths`, `additionalSafeBuilders`). Exported for the
|
|
740
|
+
* type-aware test suite.
|
|
741
|
+
*/
|
|
742
|
+
export function analyzeNullSafetyTyped(sourceFile, checker, filePath) {
|
|
743
|
+
const violations = [];
|
|
744
|
+
const safePaths = buildEffectiveSafePaths();
|
|
745
|
+
if (isSafeNullPath(filePath, safePaths))
|
|
746
|
+
return violations;
|
|
747
|
+
// Manual escape hatch for symbols the checker can't resolve (untyped JS
|
|
748
|
+
// boundaries, ambient factories): a matching receiver call-text is trusted.
|
|
749
|
+
const safeBuilders = buildEffectiveSafeBuilders();
|
|
750
|
+
const visit = (node) => {
|
|
751
|
+
ts.forEachChild(node, visit);
|
|
752
|
+
if (!ts.isPropertyAccessExpression(node) || ts.isOptionalChain(node))
|
|
753
|
+
return;
|
|
754
|
+
const expression = node.expression;
|
|
755
|
+
if (!ts.isCallExpression(expression) && !ts.isElementAccessExpression(expression))
|
|
756
|
+
return;
|
|
757
|
+
// No `isThisAccess` skip here (unlike the convention path): the checker types
|
|
758
|
+
// `this`-rooted chains correctly — `this.prop` isn't a candidate (receiver is
|
|
759
|
+
// not a call), and `this.getThing()` where getThing() returns nullable SHOULD
|
|
760
|
+
// flag — so the heuristic would only cause false negatives.
|
|
761
|
+
const propName = node.name.text;
|
|
762
|
+
if (['length', 'toString', 'valueOf'].includes(propName))
|
|
763
|
+
return;
|
|
764
|
+
const receiverText = expression.getText(sourceFile);
|
|
765
|
+
if (safeBuilders.some((prefix) => receiverText.startsWith(prefix)))
|
|
766
|
+
return;
|
|
767
|
+
// The one decision: does the receiver's ACTUAL type include null/undefined?
|
|
768
|
+
if (!isTypeNullable(checker.getTypeAtLocation(expression)))
|
|
769
|
+
return;
|
|
770
|
+
const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
|
|
771
|
+
violations.push({
|
|
772
|
+
line: line + 1,
|
|
773
|
+
column: character + 1,
|
|
774
|
+
message: `Potentially unsafe property access '.${propName}' without null check`,
|
|
775
|
+
severity: 'warning',
|
|
776
|
+
type: 'unsafe-access',
|
|
777
|
+
suggestion: `Use optional chaining: change '.${propName}' to '?.${propName}', or add an explicit null/undefined check before accessing the property`,
|
|
778
|
+
match: node.getText(sourceFile),
|
|
779
|
+
});
|
|
780
|
+
};
|
|
781
|
+
visit(sourceFile);
|
|
782
|
+
return violations;
|
|
783
|
+
}
|
|
784
|
+
/** Type-aware per-file analysis (D2): flag via the shared Program's checker. */
|
|
785
|
+
function analyzeFileTyped(program, filePath) {
|
|
786
|
+
const sourceFile = program.getSourceFile(filePath);
|
|
787
|
+
if (!sourceFile)
|
|
788
|
+
return []; // not in the Program (e.g. excluded) — skip
|
|
789
|
+
return analyzeNullSafetyTyped(sourceFile, program.checker, filePath);
|
|
790
|
+
}
|
|
791
|
+
/** Convention per-file analysis (default): scan the filtered content (no types). */
|
|
792
|
+
async function analyzeFileConvention(files, filePath) {
|
|
793
|
+
try {
|
|
794
|
+
// FileAccessor.read applies this check's `strip-strings` contentFilter, so
|
|
795
|
+
// `content` matches what the prior per-file `analyze` mode received.
|
|
796
|
+
const content = await files.read(filePath);
|
|
797
|
+
return analyzeNullSafety(content, filePath);
|
|
798
|
+
}
|
|
799
|
+
catch {
|
|
800
|
+
// @fitness-ignore-next-line error-handling-quality -- an unreadable target file is an expected skip (the engine's own analyze mode does the same — see define-check.ts executeAnalyzeMode); a pure check has no actionable error to surface here.
|
|
801
|
+
return []; // unreadable file — skip, matching per-file analyze resilience
|
|
802
|
+
}
|
|
803
|
+
}
|
|
734
804
|
/**
|
|
735
805
|
* Check: quality/null-safety
|
|
736
806
|
*
|
|
@@ -745,22 +815,41 @@ export const nullSafety = defineCheck({
|
|
|
745
815
|
description: 'Detect unsafe property and method access without null checks',
|
|
746
816
|
longDescription: `**Purpose:** Detects property access on potentially nullable expressions (call results, element access) that lack null/undefined guards, preventing runtime \`TypeError\` crashes.
|
|
747
817
|
|
|
748
|
-
**
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
- Skips safe property names: \`length\`, \`toString\`, \`valueOf\`
|
|
752
|
-
- Excludes contracts, schemas, types, CLI/internal tools, and foundation infrastructure files
|
|
818
|
+
**Mode (\`typeAware\`, default \`true\`):** Type-aware — flags a property access on a call/element-access result only when the receiver's ACTUAL type includes \`null\`/\`undefined\`. The checker handles control-flow guards, optional chaining (\`?.\`), builder/Zod/TypeORM return types, and chain depth; \`any\`/\`unknown\`/unresolved types are never flagged (fail-open). \`additionalSafeBuilders\` is a manual escape hatch. Set \`typeAware: false\` for the legacy name/convention heuristic (higher false-negative rate).
|
|
819
|
+
|
|
820
|
+
**Always skipped:** safe property names (\`length\`, \`toString\`, \`valueOf\`) and \`additionalSafeNullPaths\` (schema/DI) files.
|
|
753
821
|
|
|
754
822
|
**Why it matters:** Accessing a property on a \`null\` or \`undefined\` value causes runtime \`TypeError\` exceptions that crash the process if uncaught.
|
|
755
823
|
|
|
756
824
|
**Scope:** General best practice. Analyzes each file individually.`,
|
|
757
825
|
tags: ['quality', 'code-quality', 'type-safety'],
|
|
758
826
|
fileTypes: ['ts', 'tsx'],
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
827
|
+
// D2: runs as analyzeAll so a single type-checked ts.Program can be shared
|
|
828
|
+
// across the run. `typeAware` (recipe config, default off) selects the
|
|
829
|
+
// type-aware detector; otherwise the convention-based detector runs unchanged,
|
|
830
|
+
// so default behavior is byte-identical to the prior per-file `analyze` mode.
|
|
831
|
+
async analyzeAll(files) {
|
|
832
|
+
// Type-aware is the DEFAULT (D2): flag a property access only when the
|
|
833
|
+
// receiver's actual type is nullable. Set `typeAware: false` in recipe config
|
|
834
|
+
// to fall back to the legacy name/convention heuristic.
|
|
835
|
+
const typeAware = getCheckConfig('null-safety').typeAware !== false;
|
|
836
|
+
// Build the shared type-checked Program only in type-aware mode (~1s/~0.6GB,
|
|
837
|
+
// amortized across type-aware checks). The convention fallback needs no Program.
|
|
838
|
+
const program = typeAware ? getSharedTypeCheckedProgram(files.paths) : undefined;
|
|
839
|
+
const violations = [];
|
|
840
|
+
for (const filePath of files.paths) {
|
|
841
|
+
// Skip test files — null safety in tests is low-risk due to controlled inputs.
|
|
842
|
+
if (isTestFile(filePath))
|
|
843
|
+
continue;
|
|
844
|
+
const fileViolations = program
|
|
845
|
+
? analyzeFileTyped(program, filePath)
|
|
846
|
+
: await analyzeFileConvention(files, filePath);
|
|
847
|
+
for (const violation of fileViolations) {
|
|
848
|
+
// analyzeAll injects no default filePath (analyze mode did) — stamp it.
|
|
849
|
+
violations.push(violation.filePath ? violation : { ...violation, filePath });
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
return violations;
|
|
764
853
|
},
|
|
765
854
|
});
|
|
766
855
|
//# sourceMappingURL=null-safety.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"null-safety.js","sourceRoot":"","sources":["../../../../src/checks/quality/data-integrity/null-safety.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"null-safety.js","sourceRoot":"","sources":["../../../../src/checks/quality/data-integrity/null-safety.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,27 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @see CLAUDE.md Error Handling Policy
|
|
9
9
|
*/
|
|
10
|
+
/**
|
|
11
|
+
* Recipe-config shape for result-pattern-consistency. Project-specific boundary
|
|
12
|
+
* directories (where throwing is the intended pattern) belong in a recipe's
|
|
13
|
+
* `checks.config['result-pattern-consistency']` block, not in the check's
|
|
14
|
+
* built-in defaults — hardcoding one codebase's layout into a generic check
|
|
15
|
+
* either leaks that layout or misclassifies another codebase's files.
|
|
16
|
+
*/
|
|
17
|
+
export interface ResultPatternConsistencyConfig extends Record<string, unknown> {
|
|
18
|
+
/**
|
|
19
|
+
* Additional path patterns where `throw` is allowed (treated as an
|
|
20
|
+
* infrastructure/edge boundary). Each entry compiles to a RegExp via
|
|
21
|
+
* `new RegExp(entry)` and is matched against the file path.
|
|
22
|
+
*/
|
|
23
|
+
additionalThrowAllowedPaths?: readonly string[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Paths where throwing is expected (infrastructure boundaries per DEC-015).
|
|
27
|
+
* These are entry points that bridge external systems, CLI, or pipeline layers
|
|
28
|
+
* where callers can't meaningfully recover — throw is the correct pattern.
|
|
29
|
+
*/
|
|
30
|
+
export declare const THROW_ALLOWED_PATHS: RegExp[];
|
|
10
31
|
/**
|
|
11
32
|
* Check: quality/result-pattern-consistency
|
|
12
33
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-pattern-consistency.d.ts","sourceRoot":"","sources":["../../../../src/checks/quality/patterns/result-pattern-consistency.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"result-pattern-consistency.d.ts","sourceRoot":"","sources":["../../../../src/checks/quality/patterns/result-pattern-consistency.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAMH;;;;;;GAMG;AACH,MAAM,WAAW,8BAA+B,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7E;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AA2CD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,UAsB/B,CAAC;AAsOF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,sCAsEnC,CAAC"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @see CLAUDE.md Error Handling Policy
|
|
10
10
|
*/
|
|
11
|
-
import { defineCheck } from '@opensip-cli/fitness';
|
|
11
|
+
import { defineCheck, getCheckConfig } from '@opensip-cli/fitness';
|
|
12
12
|
import { getSharedSourceFile } from '@opensip-cli/lang-typescript';
|
|
13
13
|
import * as ts from 'typescript';
|
|
14
14
|
/**
|
|
@@ -55,7 +55,9 @@ const LEGITIMATE_THROW_FUNCTION_PATTERNS = [
|
|
|
55
55
|
* These are entry points that bridge external systems, CLI, or pipeline layers
|
|
56
56
|
* where callers can't meaningfully recover — throw is the correct pattern.
|
|
57
57
|
*/
|
|
58
|
-
const THROW_ALLOWED_PATHS = [
|
|
58
|
+
export const THROW_ALLOWED_PATHS = [
|
|
59
|
+
// Generic architectural boundaries that bridge external systems, CLI, or
|
|
60
|
+
// entry/edge layers where callers can't meaningfully recover.
|
|
59
61
|
/\/routes\//,
|
|
60
62
|
/\/handlers\//,
|
|
61
63
|
/\/controllers\//,
|
|
@@ -63,25 +65,18 @@ const THROW_ALLOWED_PATHS = [
|
|
|
63
65
|
/\/plugins?\//,
|
|
64
66
|
/\/bootstrap/,
|
|
65
67
|
/\/providers\//,
|
|
66
|
-
// Internal services
|
|
67
|
-
/\/services\/internal\//,
|
|
68
|
-
// Validation utilities
|
|
69
|
-
/\/utils\/validation/,
|
|
70
|
-
// LLM and external API adapters (bridge external services)
|
|
71
|
-
/\/llm\//,
|
|
72
68
|
/\/adapters\//,
|
|
73
|
-
/\/
|
|
69
|
+
/\/utils\/validation/,
|
|
74
70
|
// CLI command entry points (bridge CLI to domain)
|
|
75
71
|
/\/commands\//,
|
|
76
|
-
// Pipeline governance and orchestration boundaries
|
|
77
|
-
/\/governor\//,
|
|
78
|
-
/\/prompt\//,
|
|
79
72
|
// ID parsing/validation (infrastructure boundary for data integrity)
|
|
80
73
|
/\/ids\//,
|
|
81
|
-
// Infrastructure boundary packages and patterns (DEC-015: throw is correct)
|
|
82
|
-
/packages\/infrastructure\//,
|
|
83
74
|
/\/stores\//,
|
|
84
75
|
/\/registry\//,
|
|
76
|
+
// NOTE: project-specific boundary directories (e.g. `/llm/`, `/embeddings/`,
|
|
77
|
+
// a bespoke `/governor/` or `packages/infrastructure/` layout) are NOT
|
|
78
|
+
// hardcoded here — add them via the `additionalThrowAllowedPaths`
|
|
79
|
+
// recipe-config key (see buildEffectiveThrowAllowedPaths).
|
|
85
80
|
];
|
|
86
81
|
/**
|
|
87
82
|
* File name patterns where throwing is legitimate (infrastructure boundary classes)
|
|
@@ -90,8 +85,14 @@ const INFRASTRUCTURE_FILE_PATTERNS = [/registry/i, /-registry/i, /store/i, /-sto
|
|
|
90
85
|
/**
|
|
91
86
|
* Check if a file path is in a throw-allowed context
|
|
92
87
|
*/
|
|
88
|
+
/** Merge built-in (generic) throw-allowed paths with the recipe-config slice. */
|
|
89
|
+
function buildEffectiveThrowAllowedPaths() {
|
|
90
|
+
const cfg = getCheckConfig('result-pattern-consistency');
|
|
91
|
+
const extra = (cfg.additionalThrowAllowedPaths ?? []).map((src) => new RegExp(src));
|
|
92
|
+
return [...THROW_ALLOWED_PATHS, ...extra];
|
|
93
|
+
}
|
|
93
94
|
function isThrowAllowedPath(filePath) {
|
|
94
|
-
if (
|
|
95
|
+
if (buildEffectiveThrowAllowedPaths().some((pattern) => pattern.test(filePath))) {
|
|
95
96
|
return true;
|
|
96
97
|
}
|
|
97
98
|
// Check file name against infrastructure patterns (registries, stores, adapters)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-pattern-consistency.js","sourceRoot":"","sources":["../../../../src/checks/quality/patterns/result-pattern-consistency.ts"],"names":[],"mappings":"AAAA,qIAAqI;AACrI;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAuB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"result-pattern-consistency.js","sourceRoot":"","sources":["../../../../src/checks/quality/patterns/result-pattern-consistency.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detached-promises.d.ts","sourceRoot":"","sources":["../../../src/checks/resilience/detached-promises.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAMH;;;;;GAKG;AACH,MAAM,WAAW,sBAAuB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrE,oEAAoE;IACpE,uBAAuB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,2EAA2E;IAC3E,uBAAuB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,4EAA4E;IAC5E,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;
|
|
1
|
+
{"version":3,"file":"detached-promises.d.ts","sourceRoot":"","sources":["../../../src/checks/resilience/detached-promises.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAMH;;;;;GAKG;AACH,MAAM,WAAW,sBAAuB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrE,oEAAoE;IACpE,uBAAuB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,2EAA2E;IAC3E,uBAAuB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,4EAA4E;IAC5E,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAuoBD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,sCA0B3B,CAAC"}
|
|
@@ -236,6 +236,10 @@ const KNOWN_SYNC_RECEIVER_PATTERNS = [
|
|
|
236
236
|
'timer',
|
|
237
237
|
'counter',
|
|
238
238
|
'gauge',
|
|
239
|
+
// The scope-owned DiagnosticsBus is a synchronous event sink (its `event` /
|
|
240
|
+
// `counter` / `emit` push onto an in-memory array and return void), exactly
|
|
241
|
+
// like a logger/emitter — `diagnostics.event(...)` is never a detached promise.
|
|
242
|
+
'diagnostics',
|
|
239
243
|
];
|
|
240
244
|
/**
|
|
241
245
|
* File path patterns that indicate CLI commands or route registrations.
|