@opensip-cli/checks-typescript 0.1.6 → 0.1.8

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 (78) hide show
  1. package/README.md +2 -2
  2. package/dist/__tests__/all-checks-execute.test.js +3 -0
  3. package/dist/__tests__/all-checks-execute.test.js.map +1 -1
  4. package/dist/__tests__/behavior-fixtures-2.test.js +3 -0
  5. package/dist/__tests__/behavior-fixtures-2.test.js.map +1 -1
  6. package/dist/__tests__/behavior-fixtures-3.test.js +3 -0
  7. package/dist/__tests__/behavior-fixtures-3.test.js.map +1 -1
  8. package/dist/__tests__/behavior-fixtures-4.test.js +3 -0
  9. package/dist/__tests__/behavior-fixtures-4.test.js.map +1 -1
  10. package/dist/__tests__/behavior-fixtures-5.test.js +3 -0
  11. package/dist/__tests__/behavior-fixtures-5.test.js.map +1 -1
  12. package/dist/__tests__/behavior-fixtures-6.test.js +3 -0
  13. package/dist/__tests__/behavior-fixtures-6.test.js.map +1 -1
  14. package/dist/__tests__/behavior-fixtures.test.js +4 -0
  15. package/dist/__tests__/behavior-fixtures.test.js.map +1 -1
  16. package/dist/__tests__/branch-fixtures-2.test.js +3 -0
  17. package/dist/__tests__/branch-fixtures-2.test.js.map +1 -1
  18. package/dist/__tests__/branch-fixtures-3.test.js +44 -0
  19. package/dist/__tests__/branch-fixtures-3.test.js.map +1 -1
  20. package/dist/__tests__/branch-fixtures.test.js +4 -3
  21. package/dist/__tests__/branch-fixtures.test.js.map +1 -1
  22. package/dist/__tests__/host-tool-runtime-import-boundary.test.js +1 -1
  23. package/dist/__tests__/host-tool-runtime-import-boundary.test.js.map +1 -1
  24. package/dist/__tests__/null-safety-typed.test.d.ts +2 -0
  25. package/dist/__tests__/null-safety-typed.test.d.ts.map +1 -0
  26. package/dist/__tests__/null-safety-typed.test.js +112 -0
  27. package/dist/__tests__/null-safety-typed.test.js.map +1 -0
  28. package/dist/__tests__/shared-program.test.d.ts +2 -0
  29. package/dist/__tests__/shared-program.test.d.ts.map +1 -0
  30. package/dist/__tests__/shared-program.test.js +41 -0
  31. package/dist/__tests__/shared-program.test.js.map +1 -0
  32. package/dist/__tests__/shipped-allowlists-are-generic.test.d.ts +2 -0
  33. package/dist/__tests__/shipped-allowlists-are-generic.test.d.ts.map +1 -0
  34. package/dist/__tests__/shipped-allowlists-are-generic.test.js +64 -0
  35. package/dist/__tests__/shipped-allowlists-are-generic.test.js.map +1 -0
  36. package/dist/__tests__/subprocess-correlation-required.test.d.ts +2 -0
  37. package/dist/__tests__/subprocess-correlation-required.test.d.ts.map +1 -0
  38. package/dist/__tests__/subprocess-correlation-required.test.js +114 -0
  39. package/dist/__tests__/subprocess-correlation-required.test.js.map +1 -0
  40. package/dist/checks/architecture/host-tool-runtime-import-boundary.d.ts.map +1 -1
  41. package/dist/checks/architecture/host-tool-runtime-import-boundary.js +2 -1
  42. package/dist/checks/architecture/host-tool-runtime-import-boundary.js.map +1 -1
  43. package/dist/checks/architecture/index.d.ts +2 -0
  44. package/dist/checks/architecture/index.d.ts.map +1 -1
  45. package/dist/checks/architecture/index.js +2 -0
  46. package/dist/checks/architecture/index.js.map +1 -1
  47. package/dist/checks/architecture/no-run-done-result.d.ts +27 -0
  48. package/dist/checks/architecture/no-run-done-result.d.ts.map +1 -0
  49. package/dist/checks/architecture/no-run-done-result.js +120 -0
  50. package/dist/checks/architecture/no-run-done-result.js.map +1 -0
  51. package/dist/checks/architecture/subprocess-correlation-required.d.ts +28 -0
  52. package/dist/checks/architecture/subprocess-correlation-required.d.ts.map +1 -0
  53. package/dist/checks/architecture/subprocess-correlation-required.js +159 -0
  54. package/dist/checks/architecture/subprocess-correlation-required.js.map +1 -0
  55. package/dist/checks/quality/code-structure/duplicate-utility-functions.d.ts +13 -1
  56. package/dist/checks/quality/code-structure/duplicate-utility-functions.d.ts.map +1 -1
  57. package/dist/checks/quality/code-structure/duplicate-utility-functions.js +7 -3
  58. package/dist/checks/quality/code-structure/duplicate-utility-functions.js.map +1 -1
  59. package/dist/checks/quality/data-integrity/null-safety.d.ts +63 -2
  60. package/dist/checks/quality/data-integrity/null-safety.d.ts.map +1 -1
  61. package/dist/checks/quality/data-integrity/null-safety.js +191 -102
  62. package/dist/checks/quality/data-integrity/null-safety.js.map +1 -1
  63. package/dist/checks/quality/patterns/result-pattern-consistency.d.ts +21 -0
  64. package/dist/checks/quality/patterns/result-pattern-consistency.d.ts.map +1 -1
  65. package/dist/checks/quality/patterns/result-pattern-consistency.js +16 -15
  66. package/dist/checks/quality/patterns/result-pattern-consistency.js.map +1 -1
  67. package/dist/checks/resilience/no-raw-fetch.d.ts +14 -0
  68. package/dist/checks/resilience/no-raw-fetch.d.ts.map +1 -1
  69. package/dist/checks/resilience/no-raw-fetch.js +7 -7
  70. package/dist/checks/resilience/no-raw-fetch.js.map +1 -1
  71. package/dist/display/architecture.d.ts.map +1 -1
  72. package/dist/display/architecture.js +2 -0
  73. package/dist/display/architecture.js.map +1 -1
  74. package/dist/shared/type-program.d.ts +23 -0
  75. package/dist/shared/type-program.d.ts.map +1 -0
  76. package/dist/shared/type-program.js +35 -0
  77. package/dist/shared/type-program.js.map +1 -0
  78. package/package.json +5 -5
@@ -0,0 +1,159 @@
1
+ /**
2
+ * @fileoverview Guard that every CLI worker spawn/fork forwards the RunCorrelation bag.
3
+ *
4
+ * The subprocess-correlation-telemetry spec (and ADR-0054 readiness) requires
5
+ * that when the CLI spawns or forks a child CLI *worker* subcommand (e.g.
6
+ * `graph-shard-worker`, `graph-run-worker`, any future `*-run-worker`), the
7
+ * parent forwards its {@link RunCorrelation} bag so a child failure is
8
+ * attributable to the parent run/trace from JSONL logs alone. `runId` travels
9
+ * via `OPENSIP_RUN_ID` env (merged through `correlationToEnv`); the rest travels
10
+ * via env + the worker spec/descriptor's `correlation` field.
11
+ *
12
+ * This check fires on a spawn/fork of a `*-worker` subcommand that forwards env
13
+ * (so it clearly inherits the parent environment) but does NOT reference
14
+ * `correlationToEnv` or write a `correlation` field anywhere in the enclosing
15
+ * function — i.e. the parent forgot to carry correlation. It is bounded to the
16
+ * two host packages that own real worker spawn/fork sites (`packages/graph` and
17
+ * `packages/cli`); the generic fork transport (`packages/core`) is out of scope
18
+ * by design.
19
+ */
20
+ // @fitness-ignore-file shipped-checks-must-be-generic -- dogfood check for this repo's subprocess-correlation-telemetry migration boundary; AST precision keeps the worker-spawn correlation requirement mechanically narrow.
21
+ import { defineCheck, isTestFile } from '@opensip-cli/fitness';
22
+ import { getSharedSourceFile } from '@opensip-cli/lang-typescript';
23
+ import * as ts from 'typescript';
24
+ /** Host packages that own real CLI worker spawn/fork sites. */
25
+ const GATED_PATHS = ['packages/graph/', 'packages/cli/'];
26
+ /** The child-process primitives a worker is launched through. */
27
+ const SPAWN_CALLEES = new Set(['spawn', 'fork']);
28
+ /**
29
+ * A CLI worker subcommand is named `<tool>-...-worker` (`graph-shard-worker`,
30
+ * `graph-run-worker`, future `*-run-worker`). The plain `graph` subcommand
31
+ * spawn (workspace fan-out) and a same-process re-exec (`process.argv.slice(1)`,
32
+ * heap preflight) are deliberately NOT worker subcommands — they carry no
33
+ * literal `*-worker` argv string and so are not matched.
34
+ */
35
+ const WORKER_SUBCOMMAND_SUFFIX = '-worker';
36
+ /** Evidence that correlation is being forwarded into the child. */
37
+ const CORRELATION_TO_ENV = 'correlationToEnv';
38
+ const CORRELATION_PROP = 'correlation';
39
+ function normalized(path) {
40
+ return path.replaceAll('\\', '/');
41
+ }
42
+ function isGatedFile(filePath) {
43
+ const p = normalized(filePath);
44
+ return GATED_PATHS.some((prefix) => p.includes(prefix));
45
+ }
46
+ /** A string literal (`'graph-shard-worker'`) whose text matches `*-worker`. */
47
+ function isWorkerSubcommandLiteral(node) {
48
+ return ((ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) &&
49
+ node.text.endsWith(WORKER_SUBCOMMAND_SUFFIX));
50
+ }
51
+ /** True when any descendant of `node` is a `*-worker` subcommand string. */
52
+ function referencesWorkerSubcommand(node) {
53
+ let found = false;
54
+ const visit = (n) => {
55
+ if (found)
56
+ return;
57
+ if (isWorkerSubcommandLiteral(n)) {
58
+ found = true;
59
+ return;
60
+ }
61
+ ts.forEachChild(n, visit);
62
+ };
63
+ visit(node);
64
+ return found;
65
+ }
66
+ /** True when any descendant references `correlationToEnv` or a `correlation` key/property. */
67
+ function referencesCorrelation(node) {
68
+ let found = false;
69
+ const visit = (n) => {
70
+ if (found)
71
+ return;
72
+ if (ts.isIdentifier(n) && n.text === CORRELATION_TO_ENV) {
73
+ found = true;
74
+ return;
75
+ }
76
+ // A `correlation:` property assignment / shorthand on the spec or descriptor.
77
+ if ((ts.isPropertyAssignment(n) || ts.isShorthandPropertyAssignment(n)) &&
78
+ ts.isIdentifier(n.name) &&
79
+ n.name.text === CORRELATION_PROP) {
80
+ found = true;
81
+ return;
82
+ }
83
+ ts.forEachChild(n, visit);
84
+ };
85
+ visit(node);
86
+ return found;
87
+ }
88
+ /** Walk outward to the nearest enclosing function/method body (the spawn site's scope). */
89
+ function enclosingFunction(node) {
90
+ let current = node.parent;
91
+ while (current) {
92
+ if (ts.isFunctionDeclaration(current) ||
93
+ ts.isFunctionExpression(current) ||
94
+ ts.isArrowFunction(current) ||
95
+ ts.isMethodDeclaration(current) ||
96
+ ts.isConstructorDeclaration(current)) {
97
+ return current;
98
+ }
99
+ current = current.parent;
100
+ }
101
+ return undefined;
102
+ }
103
+ /** Callee identifier text of a call expression, if the callee is a bare identifier. */
104
+ function calleeName(call) {
105
+ return ts.isIdentifier(call.expression) ? call.expression.text : undefined;
106
+ }
107
+ /**
108
+ * Pure analysis over a parsed source file. Exported for unit tests. Returns one
109
+ * error per spawn/fork of a CLI `*-worker` subcommand whose enclosing function
110
+ * shows no correlation forwarding.
111
+ */
112
+ export function analyzeSubprocessCorrelationRequired(content, filePath) {
113
+ const violations = [];
114
+ const sourceFile = getSharedSourceFile(filePath, content);
115
+ if (!sourceFile)
116
+ return violations;
117
+ const visit = (node) => {
118
+ if (ts.isCallExpression(node)) {
119
+ const callee = calleeName(node);
120
+ if (callee !== undefined && SPAWN_CALLEES.has(callee)) {
121
+ // Only worker subcommand spawns/forks carry the correlation requirement;
122
+ // a plain `graph` subcommand spawn or a same-process re-exec is exempt.
123
+ const isWorkerLaunch = node.arguments.some((arg) => referencesWorkerSubcommand(arg));
124
+ if (isWorkerLaunch) {
125
+ const scope = enclosingFunction(node) ?? sourceFile;
126
+ if (!referencesCorrelation(scope)) {
127
+ const line = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1;
128
+ violations.push({
129
+ message: `CLI worker spawn/fork in ${normalized(filePath)} forwards env to a child worker ` +
130
+ `subcommand but does not forward the RunCorrelation bag — a child failure cannot be ` +
131
+ `attributed to the parent run.`,
132
+ severity: 'error',
133
+ line,
134
+ suggestion: 'Merge correlationToEnv(currentScope()?.correlation) into the child env and write ' +
135
+ 'the correlation onto the spec/descriptor (subprocess-correlation-telemetry spec).',
136
+ });
137
+ }
138
+ }
139
+ }
140
+ }
141
+ ts.forEachChild(node, visit);
142
+ };
143
+ visit(sourceFile);
144
+ return violations;
145
+ }
146
+ export const subprocessCorrelationRequired = defineCheck({
147
+ id: '822a0ca0-2c29-467b-9286-b2d3798b3810',
148
+ slug: 'subprocess-correlation-required',
149
+ description: 'CLI subprocess spawn/fork sites must forward the RunCorrelation bag (runId via env, other fields via env+spec) so child failures are attributable',
150
+ scope: { languages: ['typescript'], concerns: ['backend'] },
151
+ tags: ['architecture'],
152
+ fileTypes: ['ts', 'tsx'],
153
+ analyze: (content, filePath) => {
154
+ if (!isGatedFile(filePath) || isTestFile(filePath))
155
+ return [];
156
+ return analyzeSubprocessCorrelationRequired(content, filePath);
157
+ },
158
+ });
159
+ //# sourceMappingURL=subprocess-correlation-required.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subprocess-correlation-required.js","sourceRoot":"","sources":["../../../src/checks/architecture/subprocess-correlation-required.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@
12
12
  * names that are deliberately distinct implementations sharing a name.
13
13
  *
14
14
  * Project-specific functions like `getCurrentCorrelationId`, `formatDuration`,
15
- * `getRemoteUrl`, `sanitizeForPrompt`, etc. belong in a recipe's
15
+ * `getRemoteUrl`, `sanitizeFilename`, etc. belong in a recipe's
16
16
  * `checks.config['duplicate-utility-functions'].additionalDomainSpecificFunctions`
17
17
  * block, NOT in built-in defaults.
18
18
  */
@@ -20,6 +20,18 @@ export interface DuplicateUtilityFunctionsConfig extends Record<string, unknown>
20
20
  /** Function names that should be skipped (treated as domain-specific by design). */
21
21
  additionalDomainSpecificFunctions?: readonly string[];
22
22
  }
23
+ /**
24
+ * Functions that are intentionally domain-specific and should NOT be flagged
25
+ * as duplicates. Limited to genuinely generic identifiers — config / factory
26
+ * / logger / common type-guard names — that almost any TS codebase will hit.
27
+ *
28
+ * Project-specific names (e.g. opensip's `getCurrentCorrelationId`,
29
+ * `formatDuration`, `getRemoteUrl`, `sanitizeFilename`) belong in a recipe's
30
+ * `checks.config['duplicate-utility-functions'].additionalDomainSpecificFunctions`
31
+ * block. The check reads that list via {@link getCheckConfig} and merges it
32
+ * with these defaults.
33
+ */
34
+ export declare const DOMAIN_SPECIFIC_FUNCTION_NAMES: readonly string[];
23
35
  /**
24
36
  * Check: quality/duplicate-utility-functions
25
37
  *
@@ -1 +1 @@
1
- {"version":3,"file":"duplicate-utility-functions.d.ts","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/duplicate-utility-functions.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAcH;;;;;;;;;GASG;AACH,MAAM,WAAW,+BAAgC,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9E,oFAAoF;IACpF,iCAAiC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvD;AAmdD;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,sCAkCpC,CAAC"}
1
+ {"version":3,"file":"duplicate-utility-functions.d.ts","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/duplicate-utility-functions.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAcH;;;;;;;;;GASG;AACH,MAAM,WAAW,+BAAgC,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9E,oFAAoF;IACpF,iCAAiC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvD;AAiCD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,8BAA8B,EAAE,SAAS,MAAM,EA0C3D,CAAC;AAkYF;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,sCAkCpC,CAAC"}
@@ -49,12 +49,12 @@ const MIN_FUNCTION_BODY_LENGTH = 50;
49
49
  * / logger / common type-guard names — that almost any TS codebase will hit.
50
50
  *
51
51
  * Project-specific names (e.g. opensip's `getCurrentCorrelationId`,
52
- * `formatDuration`, `getRemoteUrl`, `sanitizeForPrompt`) belong in a recipe's
52
+ * `formatDuration`, `getRemoteUrl`, `sanitizeFilename`) belong in a recipe's
53
53
  * `checks.config['duplicate-utility-functions'].additionalDomainSpecificFunctions`
54
54
  * block. The check reads that list via {@link getCheckConfig} and merges it
55
55
  * with these defaults.
56
56
  */
57
- const DOMAIN_SPECIFIC_FUNCTIONS = new Set([
57
+ export const DOMAIN_SPECIFIC_FUNCTION_NAMES = [
58
58
  // Config / factory pattern - each domain has its own configuration
59
59
  'getConfig',
60
60
  'getDefaultConfig',
@@ -96,7 +96,11 @@ const DOMAIN_SPECIFIC_FUNCTIONS = new Set([
96
96
  'isIdentChar',
97
97
  // Assertion validation — fitness engine + simulation engine each own one
98
98
  'validateAssertions',
99
- ]);
99
+ ];
100
+ // Built once at module load from the immutable name list above. Kept private (a
101
+ // module-level `new Set()` is mutable shared state); the de-leak guard test
102
+ // imports the readonly DOMAIN_SPECIFIC_FUNCTION_NAMES instead.
103
+ const DOMAIN_SPECIFIC_FUNCTIONS = new Set(DOMAIN_SPECIFIC_FUNCTION_NAMES);
100
104
  /**
101
105
  * Build the effective domain-specific set by merging built-in defaults with
102
106
  * the recipe-provided augmentation for `duplicate-utility-functions`.
@@ -1 +1 @@
1
- {"version":3,"file":"duplicate-utility-functions.js","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/duplicate-utility-functions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"duplicate-utility-functions.js","sourceRoot":"","sources":["../../../../src/checks/quality/code-structure/duplicate-utility-functions.ts"],"names":[],"mappings":"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"}
@@ -4,10 +4,11 @@
4
4
  * Detects unsafe property and method access without null checks.
5
5
  */
6
6
  import { type CheckViolation } from '@opensip-cli/fitness';
7
+ import * as ts from 'typescript';
7
8
  /**
8
9
  * Recipe-config shape for null-safety. Project-specific safe-by-construction
9
- * paths (e.g. opensip's `/dbos/schema`) belong in a recipe's
10
- * `checks.config['null-safety']` block, not in built-in defaults.
10
+ * paths and factory/builder symbols belong in a recipe's
11
+ * `checks.config['null-safety']` block, not in the check's built-in defaults.
11
12
  */
12
13
  export interface NullSafetyConfig extends Record<string, unknown> {
13
14
  /**
@@ -15,7 +16,53 @@ export interface NullSafetyConfig extends Record<string, unknown> {
15
16
  * is compiled to a case-insensitive RegExp via `new RegExp(entry, 'i')`.
16
17
  */
17
18
  additionalSafeNullPaths?: readonly string[];
19
+ /**
20
+ * Additional call-text prefixes treated as non-null by construction (a
21
+ * property access on a matching call result is not flagged). Use this for
22
+ * PROJECT-SPECIFIC factory/builder functions whose non-null contract is
23
+ * local to your codebase — do not hardcode them into the shipped check.
24
+ * Matched via `String.prototype.startsWith` against the full call text.
25
+ */
26
+ additionalSafeBuilders?: readonly string[];
27
+ /**
28
+ * Use TYPE-AWARE analysis (a real `ts.Program` + `TypeChecker`): a property
29
+ * access on a call/element-access result is flagged only when the receiver's
30
+ * ACTUAL static type includes `null`/`undefined` (`any`/`unknown`/unresolved →
31
+ * not flagged; the checker also handles control-flow narrowing, builder/Zod
32
+ * return types, and chain depth, so the verb-prefix convention does not apply).
33
+ * `additionalSafeBuilders` remains a manual escape hatch for symbols the checker
34
+ * cannot resolve.
35
+ *
36
+ * **Default `true`** (D2). Set `false` to fall back to the legacy
37
+ * name/convention heuristic (faster, no Program build, but higher
38
+ * false-negative rate — it trusts any `get*`/`find*`/… call as non-null).
39
+ */
40
+ typeAware?: boolean;
18
41
  }
42
+ /**
43
+ * Call prefixes whose results are non-null by construction, so a property
44
+ * access on them needs no guard. Scope is deliberately limited to facts that
45
+ * hold for ANY codebase:
46
+ *
47
+ * 1. Language / runtime guarantees — `Object.*`, `Array.*`, `JSON.*`,
48
+ * `new URL()`, Node `crypto`/`child_process`, `Intl`, the TS compiler API.
49
+ * 2. Widely-used libraries whose builder/query APIs are documented non-null
50
+ * — Zod, TypeORM, Drizzle, better-sqlite3, neverthrow `Result`, Express.
51
+ * 3. Generic builder-pattern conventions — `builder.`, `*ResultBuilder.`.
52
+ *
53
+ * PROJECT-SPECIFIC safe symbols must NOT be hardcoded here: baking one
54
+ * codebase's invariants into a generic check silently suppresses real null
55
+ * bugs in every other codebase (e.g. an adopter whose own `getThing()` can
56
+ * return null). Adopters extend this set with their own factories via the
57
+ * `additionalSafeBuilders` recipe-config key — see `buildEffectiveSafeBuilders`.
58
+ */
59
+ export declare const SAFE_BUILDER_PREFIXES: string[];
60
+ /**
61
+ * Common method name prefixes that indicate safe (non-null) return values.
62
+ * Methods starting with these prefixes are conventionally designed to always
63
+ * return a value or throw, never return null/undefined.
64
+ */
65
+ export declare const SAFE_METHOD_PREFIXES: string[];
19
66
  /**
20
67
  * @param {*} content
21
68
  * @param {*} filePath
@@ -24,6 +71,20 @@ export interface NullSafetyConfig extends Record<string, unknown> {
24
71
  * suite (see `__tests__/null-safety-fp.test.ts`).
25
72
  */
26
73
  export declare function analyzeNullSafety(content: string, filePath: string): CheckViolation[];
74
+ /**
75
+ * Type-aware variant (D2): walk the Program's SourceFile and flag a property
76
+ * access on a call/element-access result ONLY when the receiver's actual type
77
+ * includes `null`/`undefined`. The TypeChecker subsumes every heuristic the
78
+ * convention path uses — control-flow narrowing (guards), builder/Zod return
79
+ * types, and chain depth all fall out of real types — so this detector is
80
+ * deliberately minimal. Fail-open: `any`/`unknown`/unresolved types are not
81
+ * nullable per `isTypeNullable`, so "the compiler doesn't know" never flags.
82
+ *
83
+ * Reads the same path skip + escape-hatch config as the convention path
84
+ * (`additionalSafeNullPaths`, `additionalSafeBuilders`). Exported for the
85
+ * type-aware test suite.
86
+ */
87
+ export declare function analyzeNullSafetyTyped(sourceFile: ts.SourceFile, checker: ts.TypeChecker, filePath: string): CheckViolation[];
27
88
  /**
28
89
  * Check: quality/null-safety
29
90
  *
@@ -1 +1 @@
1
- {"version":3,"file":"null-safety.d.ts","sourceRoot":"","sources":["../../../../src/checks/quality/data-integrity/null-safety.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAEH,OAAO,EAA2C,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAIpG;;;;GAIG;AACH,MAAM,WAAW,gBAAiB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/D;;;OAGG;IACH,uBAAuB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAgqBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CA4ErF;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,sCA2BrB,CAAC"}
1
+ {"version":3,"file":"null-safety.d.ts","sourceRoot":"","sources":["../../../../src/checks/quality/data-integrity/null-safety.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAEH,OAAO,EAIL,KAAK,cAAc,EAEpB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAIjC;;;;GAIG;AACH,MAAM,WAAW,gBAAiB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/D;;;OAGG;IACH,uBAAuB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAaD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,qBAAqB,UA4DjC,CAAC;AAiTF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,UAwChC,CAAC;AAoOF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CAmFrF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,QAAQ,EAAE,MAAM,GACf,cAAc,EAAE,CA4ClB;AAyBD;;;;GAIG;AACH,eAAO,MAAM,UAAU,sCA+CrB,CAAC"}