@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.
Files changed (62) hide show
  1. package/README.md +2 -2
  2. package/dist/__tests__/branch-fixtures-3.test.js +41 -0
  3. package/dist/__tests__/branch-fixtures-3.test.js.map +1 -1
  4. package/dist/__tests__/branch-fixtures.test.js +1 -3
  5. package/dist/__tests__/branch-fixtures.test.js.map +1 -1
  6. package/dist/__tests__/command-handler-host-owned-output.test.d.ts +2 -0
  7. package/dist/__tests__/command-handler-host-owned-output.test.d.ts.map +1 -0
  8. package/dist/__tests__/command-handler-host-owned-output.test.js +85 -0
  9. package/dist/__tests__/command-handler-host-owned-output.test.js.map +1 -0
  10. package/dist/__tests__/host-tool-runtime-import-boundary.test.js +69 -12
  11. package/dist/__tests__/host-tool-runtime-import-boundary.test.js.map +1 -1
  12. package/dist/__tests__/null-safety-typed.test.d.ts +2 -0
  13. package/dist/__tests__/null-safety-typed.test.d.ts.map +1 -0
  14. package/dist/__tests__/null-safety-typed.test.js +112 -0
  15. package/dist/__tests__/null-safety-typed.test.js.map +1 -0
  16. package/dist/__tests__/shared-program.test.d.ts +2 -0
  17. package/dist/__tests__/shared-program.test.d.ts.map +1 -0
  18. package/dist/__tests__/shared-program.test.js +41 -0
  19. package/dist/__tests__/shared-program.test.js.map +1 -0
  20. package/dist/__tests__/shipped-allowlists-are-generic.test.d.ts +2 -0
  21. package/dist/__tests__/shipped-allowlists-are-generic.test.d.ts.map +1 -0
  22. package/dist/__tests__/shipped-allowlists-are-generic.test.js +64 -0
  23. package/dist/__tests__/shipped-allowlists-are-generic.test.js.map +1 -0
  24. package/dist/checks/architecture/command-handler-host-owned-output.d.ts +25 -0
  25. package/dist/checks/architecture/command-handler-host-owned-output.d.ts.map +1 -0
  26. package/dist/checks/architecture/command-handler-host-owned-output.js +165 -0
  27. package/dist/checks/architecture/command-handler-host-owned-output.js.map +1 -0
  28. package/dist/checks/architecture/host-tool-runtime-import-boundary.d.ts +24 -7
  29. package/dist/checks/architecture/host-tool-runtime-import-boundary.d.ts.map +1 -1
  30. package/dist/checks/architecture/host-tool-runtime-import-boundary.js +114 -33
  31. package/dist/checks/architecture/host-tool-runtime-import-boundary.js.map +1 -1
  32. package/dist/checks/architecture/index.d.ts +30 -0
  33. package/dist/checks/architecture/index.d.ts.map +1 -1
  34. package/dist/checks/architecture/index.js +30 -0
  35. package/dist/checks/architecture/index.js.map +1 -1
  36. package/dist/checks/quality/code-structure/duplicate-utility-functions.d.ts +13 -1
  37. package/dist/checks/quality/code-structure/duplicate-utility-functions.d.ts.map +1 -1
  38. package/dist/checks/quality/code-structure/duplicate-utility-functions.js +7 -3
  39. package/dist/checks/quality/code-structure/duplicate-utility-functions.js.map +1 -1
  40. package/dist/checks/quality/data-integrity/null-safety.d.ts +63 -2
  41. package/dist/checks/quality/data-integrity/null-safety.d.ts.map +1 -1
  42. package/dist/checks/quality/data-integrity/null-safety.js +191 -102
  43. package/dist/checks/quality/data-integrity/null-safety.js.map +1 -1
  44. package/dist/checks/quality/patterns/result-pattern-consistency.d.ts +21 -0
  45. package/dist/checks/quality/patterns/result-pattern-consistency.d.ts.map +1 -1
  46. package/dist/checks/quality/patterns/result-pattern-consistency.js +16 -15
  47. package/dist/checks/quality/patterns/result-pattern-consistency.js.map +1 -1
  48. package/dist/checks/resilience/detached-promises.d.ts.map +1 -1
  49. package/dist/checks/resilience/detached-promises.js +4 -0
  50. package/dist/checks/resilience/detached-promises.js.map +1 -1
  51. package/dist/checks/resilience/no-raw-fetch.d.ts +14 -0
  52. package/dist/checks/resilience/no-raw-fetch.d.ts.map +1 -1
  53. package/dist/checks/resilience/no-raw-fetch.js +7 -7
  54. package/dist/checks/resilience/no-raw-fetch.js.map +1 -1
  55. package/dist/display/architecture.d.ts.map +1 -1
  56. package/dist/display/architecture.js +1 -0
  57. package/dist/display/architecture.js.map +1 -1
  58. package/dist/shared/type-program.d.ts +23 -0
  59. package/dist/shared/type-program.d.ts.map +1 -0
  60. package/dist/shared/type-program.js +35 -0
  61. package/dist/shared/type-program.js.map +1 -0
  62. package/package.json +5 -5
@@ -1,64 +1,128 @@
1
1
  /**
2
- * @fileoverview Keep ADR-0054's host-process runtime import exception narrow.
2
+ * @fileoverview Mechanize the ADR-0054 M4-G CAPSTONE invariant: no
3
+ * `importToolRuntime(...)` for external-provenance tools in the HOST process.
3
4
  *
4
- * External Tool runtimes still execute in the host process during the
5
- * ADR-0054 migration because the current manifest only carries command
6
- * metadata, not executable CommandSpec/RPC descriptors. That exception must
7
- * remain explicit: every importToolRuntime call needs a source policy, and no
8
- * new production call sites should appear outside the admission/discovery
9
- * boundary.
5
+ * After the capstone, external tool runtime code NEVER loads in the host. The
6
+ * host registers a manifest-derived synthetic Tool (command shells from the
7
+ * static manifest) and mounts its commands without importing the runtime; the
8
+ * forked dispatch WORKER imports the untrusted runtime when a command actually
9
+ * dispatches. This is no longer a transition guardrail — it is the enforced
10
+ * boundary. The check asserts three things across the CLI host package:
11
+ *
12
+ * 1. `importToolRuntime` may be called only from the admission/discovery
13
+ * boundary or the worker-owned dispatch plane (the allowlisted files).
14
+ * Any other host-process call site is a violation.
15
+ * 2. A HOST import must pass a BUNDLED policy — `hostRuntimeImportPolicyFor(...)`
16
+ * (type-narrowed to `'bundled'`) or a literal `{ source: 'bundled' }`. A
17
+ * non-bundled host policy is a violation (the type already forbids it; this
18
+ * catches a hand-rolled literal that bypasses the constructor).
19
+ * 3. `workerRuntimeImportPolicyFor(...)` — the policy that authorizes loading an
20
+ * EXTERNAL runtime — is permitted only on the worker-owned plane (the
21
+ * discovery leg gated behind `isHostRuntimeImportForbidden`, the worker entry,
22
+ * and the admission module that defines it). Using it elsewhere would import
23
+ * an external runtime in the host.
24
+ *
25
+ * The `adr0054Transition` exception is gone: the worker is now the only path for
26
+ * external runtime import, and the host import policy is bundled-only.
10
27
  */
11
- // @fitness-ignore-file shipped-checks-must-be-generic -- dogfood check for this repo's ADR-0054 migration boundary; AST precision keeps the temporary import exception mechanically narrow.
28
+ // @fitness-ignore-file shipped-checks-must-be-generic -- dogfood check for this repo's ADR-0054 capstone boundary; AST precision keeps the host/worker import distinction mechanically exact.
12
29
  import { defineCheck, isTestFile } from '@opensip-cli/fitness';
13
30
  import { getSharedSourceFile } from '@opensip-cli/lang-typescript';
14
31
  import * as ts from 'typescript';
15
32
  const CLI_HOST_PATH = 'packages/cli/src/';
16
33
  const IMPORT_RUNTIME = 'importToolRuntime';
17
- const POLICY_HELPER = 'hostRuntimeImportPolicyFor';
34
+ const HOST_POLICY_HELPER = 'hostRuntimeImportPolicyFor';
35
+ const WORKER_POLICY_HELPER = 'workerRuntimeImportPolicyFor';
36
+ /**
37
+ * The files permitted to call `importToolRuntime` at all (admission/discovery +
38
+ * the worker-owned dispatch plane). Any other host file is a hard violation.
39
+ */
18
40
  const ALLOWED_CALLSITE_SUFFIXES = new Set([
19
41
  'packages/cli/src/bootstrap/admit-tool-package.ts',
20
42
  'packages/cli/src/bootstrap/register-tools.ts',
21
43
  'packages/cli/src/bootstrap/register-tools-discovery.ts',
44
+ // Authored (project-local / user-global) tool registration: same host-vs-worker
45
+ // discovery split as register-tools-discovery (the import runs only in the
46
+ // worker, gated by isHostRuntimeImportForbidden).
47
+ 'packages/cli/src/bootstrap/register-authored-tools.ts',
48
+ // ADR-0054 worker-owned dispatch plane: this entry runs in the FORKED worker
49
+ // process (not the host), so importing the external runtime here is the
50
+ // isolation goal. It uses the worker policy.
51
+ 'packages/cli/src/bootstrap/tool-command-worker-entry.ts',
52
+ ]);
53
+ /**
54
+ * The files permitted to construct/pass the WORKER policy
55
+ * (`workerRuntimeImportPolicyFor`) — the policy that authorizes loading an
56
+ * EXTERNAL runtime. This is the worker-owned plane: the discovery leg (which
57
+ * gates the import behind `isHostRuntimeImportForbidden`, so it runs only inside
58
+ * the worker), the worker entry, and the admission module that defines the
59
+ * constructor + runs the bundled/probe runtime-load section. Using the worker
60
+ * policy anywhere else would import an external runtime in the host.
61
+ */
62
+ const ALLOWED_WORKER_POLICY_SUFFIXES = new Set([
63
+ 'packages/cli/src/bootstrap/admit-tool-package.ts',
64
+ 'packages/cli/src/bootstrap/register-tools-discovery.ts',
65
+ 'packages/cli/src/bootstrap/register-authored-tools.ts',
66
+ 'packages/cli/src/bootstrap/tool-command-worker-entry.ts',
22
67
  ]);
23
68
  function normalized(path) {
24
69
  return path.replaceAll('\\', '/');
25
70
  }
26
- function isAllowedCallsite(filePath) {
71
+ function endsWithAny(filePath, suffixes) {
27
72
  const p = normalized(filePath);
28
- for (const suffix of ALLOWED_CALLSITE_SUFFIXES) {
73
+ for (const suffix of suffixes) {
29
74
  if (p.endsWith(suffix))
30
75
  return true;
31
76
  }
32
77
  return false;
33
78
  }
79
+ function isAllowedCallsite(filePath) {
80
+ return endsWithAny(filePath, ALLOWED_CALLSITE_SUFFIXES);
81
+ }
82
+ function isWorkerPolicyAllowed(filePath) {
83
+ return endsWithAny(filePath, ALLOWED_WORKER_POLICY_SUFFIXES);
84
+ }
34
85
  function propertyNameText(name) {
35
86
  if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name)) {
36
87
  return name.text;
37
88
  }
38
89
  return undefined;
39
90
  }
40
- function isTrueLiteral(node) {
41
- return node.kind === ts.SyntaxKind.TrueKeyword;
91
+ /** A call to a named policy helper, e.g. `hostRuntimeImportPolicyFor(source)`. */
92
+ function helperCallName(arg) {
93
+ if (ts.isCallExpression(arg) && ts.isIdentifier(arg.expression))
94
+ return arg.expression.text;
95
+ return undefined;
42
96
  }
43
- function isPolicyArg(arg) {
44
- if (ts.isCallExpression(arg) && ts.isIdentifier(arg.expression)) {
45
- return arg.expression.text === POLICY_HELPER;
46
- }
97
+ /** Whether an object literal is exactly `{ source: 'bundled' }` (the host policy). */
98
+ function isBundledLiteral(arg) {
47
99
  if (!ts.isObjectLiteralExpression(arg))
48
100
  return false;
49
- let hasSource = false;
50
- let hasTransition = false;
101
+ let bundled = false;
51
102
  for (const prop of arg.properties) {
52
103
  if (!ts.isPropertyAssignment(prop))
53
- continue;
104
+ return false;
54
105
  const name = propertyNameText(prop.name);
55
- if (name === 'source')
56
- hasSource = true;
57
- if (name === 'adr0054Transition' && isTrueLiteral(prop.initializer)) {
58
- hasTransition = true;
59
- }
106
+ if (name !== 'source')
107
+ return false;
108
+ if (!ts.isStringLiteral(prop.initializer) || prop.initializer.text !== 'bundled')
109
+ return false;
110
+ bundled = true;
60
111
  }
61
- return hasSource && (hasTransition || arg.getText().includes("'bundled'"));
112
+ return bundled;
113
+ }
114
+ /** Classify the policy argument of an `importToolRuntime(dir, policy)` call. */
115
+ function classifyPolicyArg(arg) {
116
+ if (arg === undefined)
117
+ return 'other';
118
+ const helper = helperCallName(arg);
119
+ if (helper === HOST_POLICY_HELPER)
120
+ return 'host-bundled';
121
+ if (helper === WORKER_POLICY_HELPER)
122
+ return 'worker';
123
+ if (isBundledLiteral(arg))
124
+ return 'host-bundled';
125
+ return 'other';
62
126
  }
63
127
  function localRuntimeImportNames(sourceFile) {
64
128
  const names = new Set();
@@ -93,27 +157,44 @@ export function analyzeHostToolRuntimeImportBoundary(content, filePath) {
93
157
  if (runtimeNames.size === 0)
94
158
  return violations;
95
159
  const allowedFile = isAllowedCallsite(filePath);
160
+ const workerPolicyAllowed = isWorkerPolicyAllowed(filePath);
96
161
  const visit = (node) => {
97
162
  if (ts.isCallExpression(node) && ts.isIdentifier(node.expression)) {
98
163
  const callee = node.expression.text;
99
164
  if (runtimeNames.has(callee)) {
100
165
  const line = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1;
166
+ const kind = classifyPolicyArg(node.arguments[1]);
101
167
  if (!allowedFile) {
102
168
  violations.push({
103
169
  message: `importToolRuntime may only be called from the tool admission/discovery boundary ` +
104
- `(ADR-0054 transition). Found host-process runtime import in ${normalized(filePath)}.`,
170
+ `or the worker-owned dispatch plane (ADR-0054 M4-G capstone). Found host-process ` +
171
+ `runtime import in ${normalized(filePath)}.`,
172
+ severity: 'error',
173
+ line,
174
+ suggestion: 'External tool runtimes load ONLY behind the worker boundary. Register a ' +
175
+ 'manifest-derived synthetic Tool in the host; import the runtime in the worker.',
176
+ });
177
+ }
178
+ else if (kind === 'other') {
179
+ violations.push({
180
+ message: 'importToolRuntime must pass an explicit policy — a bundled HOST policy ' +
181
+ "(hostRuntimeImportPolicyFor or { source: 'bundled' }) or workerRuntimeImportPolicyFor " +
182
+ 'on the worker-owned plane (ADR-0054 M4-G).',
105
183
  severity: 'error',
106
184
  line,
107
- suggestion: 'Route tool runtime loading through admit-tool-package/register-tools, or the ADR-0054 worker boundary.',
185
+ suggestion: 'Pass hostRuntimeImportPolicyFor(...) for a bundled host import, or ' +
186
+ 'workerRuntimeImportPolicyFor(source) on the worker plane.',
108
187
  });
109
188
  }
110
- else if (node.arguments.length < 2 || !isPolicyArg(node.arguments[1])) {
189
+ else if (kind === 'worker' && !workerPolicyAllowed) {
111
190
  violations.push({
112
- message: 'importToolRuntime host-process imports must pass an explicit source policy ' +
113
- '(bundled or adr0054Transition) so external runtime execution remains visible.',
191
+ message: `workerRuntimeImportPolicyFor authorizes loading an EXTERNAL tool runtime; it is ` +
192
+ `permitted only on the worker-owned dispatch plane, not in ${normalized(filePath)} ` +
193
+ `(ADR-0054 M4-G capstone: external runtimes never import in the host).`,
114
194
  severity: 'error',
115
195
  line,
116
- suggestion: 'Pass hostRuntimeImportPolicyFor(source), or an explicit policy object for bundled/ADR-0054 transition imports.',
196
+ suggestion: 'In the host, register a manifest-derived synthetic Tool instead. Import the ' +
197
+ 'external runtime only in the dispatch worker.',
117
198
  });
118
199
  }
119
200
  }
@@ -126,7 +207,7 @@ export function analyzeHostToolRuntimeImportBoundary(content, filePath) {
126
207
  export const hostToolRuntimeImportBoundary = defineCheck({
127
208
  id: 'b7554963-e24e-4d80-b3e0-edbb97bbdba3',
128
209
  slug: 'host-tool-runtime-import-boundary',
129
- description: 'Host-process tool runtime imports must stay in the admission boundary and carry an explicit ADR-0054 transition policy',
210
+ description: 'External tool runtimes never import in the host: importToolRuntime stays in the admission/discovery boundary, host imports are bundled-only, and the external worker policy is confined to the worker plane (ADR-0054 M4-G capstone)',
130
211
  scope: { languages: ['typescript'], concerns: ['backend'] },
131
212
  tags: ['architecture'],
132
213
  fileTypes: ['ts', 'tsx'],
@@ -1 +1 @@
1
- {"version":3,"file":"host-tool-runtime-import-boundary.js","sourceRoot":"","sources":["../../../src/checks/architecture/host-tool-runtime-import-boundary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"host-tool-runtime-import-boundary.js","sourceRoot":"","sources":["../../../src/checks/architecture/host-tool-runtime-import-boundary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,8LAA8L;AAC9L,OAAO,EAAE,WAAW,EAAE,UAAU,EAAuB,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAC1C,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAC3C,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AACxD,MAAM,oBAAoB,GAAG,8BAA8B,CAAC;AAE5D;;;GAGG;AACH,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACxC,kDAAkD;IAClD,8CAA8C;IAC9C,wDAAwD;IACxD,gFAAgF;IAChF,2EAA2E;IAC3E,kDAAkD;IAClD,uDAAuD;IACvD,6EAA6E;IAC7E,wEAAwE;IACxE,6CAA6C;IAC7C,yDAAyD;CAC1D,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC;IAC7C,kDAAkD;IAClD,wDAAwD;IACxD,uDAAuD;IACvD,yDAAyD;CAC1D,CAAC,CAAC;AAEH,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB,EAAE,QAA6B;IAClE,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,OAAO,WAAW,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,OAAO,WAAW,CAAC,QAAQ,EAAE,8BAA8B,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAqB;IAC7C,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QACnF,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAKD,kFAAkF;AAClF,SAAS,cAAc,CAAC,GAAkB;IACxC,IAAI,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;IAC5F,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,sFAAsF;AACtF,SAAS,gBAAgB,CAAC,GAAkB;IAC1C,IAAI,CAAC,EAAE,CAAC,yBAAyB,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACjD,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC/F,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAChF,SAAS,iBAAiB,CAAC,GAA8B;IACvD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACtC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,kBAAkB;QAAE,OAAO,cAAc,CAAC;IACzD,IAAI,MAAM,KAAK,oBAAoB;QAAE,OAAO,QAAQ,CAAC;IACrD,IAAI,gBAAgB,CAAC,GAAG,CAAC;QAAE,OAAO,cAAc,CAAC;IACjD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,uBAAuB,CAAC,UAAyB;IACxD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QACzC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC;YAAE,SAAS;QACzF,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,MAAM,KAAK,yBAAyB,EAAE,CAAC;YACvF,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC;QAC/C,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC;YAAE,SAAS;QAC/D,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YAC7D,IAAI,QAAQ,KAAK,cAAc;gBAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,+DAA+D;IAC/D,IAAI,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACtE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,oCAAoC,CAClD,OAAe,EACf,QAAgB;IAEhB,MAAM,UAAU,GAAqB,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1D,IAAI,CAAC,UAAU;QAAE,OAAO,UAAU,CAAC;IAEnC,MAAM,YAAY,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC;IAE/C,MAAM,WAAW,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QACpC,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAClE,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACpC,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;gBAC1F,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,UAAU,CAAC,IAAI,CAAC;wBACd,OAAO,EACL,kFAAkF;4BAClF,kFAAkF;4BAClF,qBAAqB,UAAU,CAAC,QAAQ,CAAC,GAAG;wBAC9C,QAAQ,EAAE,OAAO;wBACjB,IAAI;wBACJ,UAAU,EACR,0EAA0E;4BAC1E,gFAAgF;qBACnF,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC5B,UAAU,CAAC,IAAI,CAAC;wBACd,OAAO,EACL,yEAAyE;4BACzE,wFAAwF;4BACxF,4CAA4C;wBAC9C,QAAQ,EAAE,OAAO;wBACjB,IAAI;wBACJ,UAAU,EACR,qEAAqE;4BACrE,2DAA2D;qBAC9D,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,IAAI,KAAK,QAAQ,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBACrD,UAAU,CAAC,IAAI,CAAC;wBACd,OAAO,EACL,kFAAkF;4BAClF,6DAA6D,UAAU,CAAC,QAAQ,CAAC,GAAG;4BACpF,uEAAuE;wBACzE,QAAQ,EAAE,OAAO;wBACjB,IAAI;wBACJ,UAAU,EACR,8EAA8E;4BAC9E,+CAA+C;qBAClD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IACF,KAAK,CAAC,UAAU,CAAC,CAAC;IAClB,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAG,WAAW,CAAC;IACvD,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,mCAAmC;IACzC,WAAW,EACT,sOAAsO;IACxO,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE;IAC3D,IAAI,EAAE,CAAC,cAAc,CAAC;IACtB,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;IACxB,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;QAC7B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QACrF,OAAO,oCAAoC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;CACF,CAAC,CAAC"}
@@ -1,4 +1,34 @@
1
+ /**
2
+ * @fileoverview Architecture checks barrel.
3
+ *
4
+ * Tool/host SEAM-DISCIPLINE — shipped vs project-local (audit M5):
5
+ *
6
+ * SHIPPED here (generic; fire on any adopter authoring a Tool plugin, keyed on
7
+ * the public command-authoring contract, no host path gating):
8
+ * - host-tool-runtime-import-boundary — the host loads tool runtimes only
9
+ * through the admission boundary with an explicit source policy.
10
+ * - command-handler-host-owned-output — a tool command handler lets the host
11
+ * own rendering / --json / exit; no direct stdout/console/process.exit inside
12
+ * a non-raw-stream defineCommand handler (the declared escape hatch is
13
+ * output:'raw-stream' + rawStreamReason).
14
+ *
15
+ * KEPT PROJECT-LOCAL (opensip-cli/fit/checks/*.mjs) — opensip-internal facts that
16
+ * are inert/meaningless for an adopter, so they would just clutter their `fit
17
+ * list`. Each is path-gated to opensip's own monorepo layout
18
+ * (packages/{fitness,graph,simulation}/engine/src/, packages/cli/src/...) and/or
19
+ * cites an internal decision/spec section:
20
+ * - only-documented-toolcli-seams, no-direct-stdout-in-tool-engine,
21
+ * no-local-exit-or-stdout (the *principles* are shipped above in their
22
+ * contract-keyed, path-independent form; these dogfood the opensip tree).
23
+ * - restrict-raw-db-access, capability-by-manifest, no-tool-owned-session-timing,
24
+ * no-module-singleton, etc. — coupled to opensip's own DataStore/registry/
25
+ * manifest internals.
26
+ * The shipped-checks-must-be-generic project-local gate enforces this split: a
27
+ * check carrying opensip paths / ADR refs / §-sections / internal-engine imports
28
+ * cannot live in a shipped pack.
29
+ */
1
30
  export * from './circular-import-detection.js';
31
+ export * from './command-handler-host-owned-output.js';
2
32
  export * from './contracts-schema-consistency.js';
3
33
  export * from './drizzle-orm-migration-guardrails.js';
4
34
  export * from './host-tool-runtime-import-boundary.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/checks/architecture/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,wCAAwC,CAAC;AACvD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/checks/architecture/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wCAAwC,CAAC;AACvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,wCAAwC,CAAC;AACvD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC"}
@@ -1,4 +1,34 @@
1
+ /**
2
+ * @fileoverview Architecture checks barrel.
3
+ *
4
+ * Tool/host SEAM-DISCIPLINE — shipped vs project-local (audit M5):
5
+ *
6
+ * SHIPPED here (generic; fire on any adopter authoring a Tool plugin, keyed on
7
+ * the public command-authoring contract, no host path gating):
8
+ * - host-tool-runtime-import-boundary — the host loads tool runtimes only
9
+ * through the admission boundary with an explicit source policy.
10
+ * - command-handler-host-owned-output — a tool command handler lets the host
11
+ * own rendering / --json / exit; no direct stdout/console/process.exit inside
12
+ * a non-raw-stream defineCommand handler (the declared escape hatch is
13
+ * output:'raw-stream' + rawStreamReason).
14
+ *
15
+ * KEPT PROJECT-LOCAL (opensip-cli/fit/checks/*.mjs) — opensip-internal facts that
16
+ * are inert/meaningless for an adopter, so they would just clutter their `fit
17
+ * list`. Each is path-gated to opensip's own monorepo layout
18
+ * (packages/{fitness,graph,simulation}/engine/src/, packages/cli/src/...) and/or
19
+ * cites an internal decision/spec section:
20
+ * - only-documented-toolcli-seams, no-direct-stdout-in-tool-engine,
21
+ * no-local-exit-or-stdout (the *principles* are shipped above in their
22
+ * contract-keyed, path-independent form; these dogfood the opensip tree).
23
+ * - restrict-raw-db-access, capability-by-manifest, no-tool-owned-session-timing,
24
+ * no-module-singleton, etc. — coupled to opensip's own DataStore/registry/
25
+ * manifest internals.
26
+ * The shipped-checks-must-be-generic project-local gate enforces this split: a
27
+ * check carrying opensip paths / ADR refs / §-sections / internal-engine imports
28
+ * cannot live in a shipped pack.
29
+ */
1
30
  export * from './circular-import-detection.js';
31
+ export * from './command-handler-host-owned-output.js';
2
32
  export * from './contracts-schema-consistency.js';
3
33
  export * from './drizzle-orm-migration-guardrails.js';
4
34
  export * from './host-tool-runtime-import-boundary.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/architecture/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,wCAAwC,CAAC;AACvD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/architecture/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wCAAwC,CAAC;AACvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,wCAAwC,CAAC;AACvD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC"}
@@ -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":"AAAA,6FAA6F;AAC7F,iGAAiG;AACjG,8KAA8K;AAC9K;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EACL,WAAW,EACX,cAAc,GAGf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAiBjC;;GAEG;AACH,MAAM,gBAAgB,GAAG;IACvB,cAAc,EAAE,6BAA6B;IAC7C,aAAa,EAAE,uBAAuB;IACtC,UAAU,EAAE,mBAAmB;IAC/B,WAAW,EAAE,mBAAmB;IAChC,UAAU,EAAE,qBAAqB;IACjC,WAAW,EAAE,uBAAuB;IACpC,gBAAgB,EAAE,+BAA+B;IACjD,gBAAgB,EAAE,8BAA8B;IAChD,iBAAiB,EAAE,8BAA8B;IACjD,WAAW;IACX,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,UAAU;CACX,CAAC;AAEF;;;GAGG;AACH,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAEpC;;;;;;;;;;GAUG;AACH,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACxC,mEAAmE;IACnE,WAAW;IACX,kBAAkB;IAClB,cAAc;IACd,YAAY;IACZ,6BAA6B;IAC7B,WAAW;IACX,8DAA8D;IAC9D,eAAe;IACf,eAAe;IACf,eAAe;IACf,YAAY;IACZ,cAAc;IACd,2DAA2D;IAC3D,YAAY;IACZ,iBAAiB;IACjB,WAAW;IACX,iCAAiC;IACjC,gBAAgB;IAChB,gBAAgB;IAChB,8BAA8B;IAC9B,iBAAiB;IACjB,6EAA6E;IAC7E,0EAA0E;IAC1E,kEAAkE;IAClE,kBAAkB;IAClB,gBAAgB;IAChB,qBAAqB;IACrB,eAAe;IACf,wBAAwB;IACxB,kFAAkF;IAClF,gBAAgB;IAChB,sEAAsE;IACtE,wEAAwE;IACxE,8EAA8E;IAC9E,qBAAqB;IACrB,cAAc;IACd,4EAA4E;IAC5E,aAAa;IACb,yEAAyE;IACzE,oBAAoB;CACrB,CAAC,CAAC;AAEH;;;GAGG;AACH,SAAS,+BAA+B;IACtC,MAAM,GAAG,GAAG,cAAc,CAAkC,6BAA6B,CAAC,CAAC;IAC3F,IACE,CAAC,GAAG,CAAC,iCAAiC;QACtC,GAAG,CAAC,iCAAiC,CAAC,MAAM,KAAK,CAAC,EAClD,CAAC;QACD,OAAO,yBAAyB,CAAC;IACnC,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAClD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,iCAAiC;QAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC;AAChB,CAAC;AAaD;;GAEG;AACH,SAAS,oBAAoB,CAAC,SAAyB;IACrD,uCAAuC;IACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,UAAuC;IAChE,MAAM,YAAY,GAAmB,EAAE,CAAC;IACxC,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,UAAuC;IACxE,MAAM,WAAW,GAAmB,EAAE,CAAC;IACvC,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5C,uCAAuC;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxD,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,KAAK,EAAE,CAAC;YACV,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,SAAyB;IACjD,MAAM,UAAU,GAAG,SAAS;SACzB,KAAK,CAAC,CAAC,CAAC;SACR,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC5B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACf,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,eAAgC,EAAE,EAAgB;IACjF,IAAI,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,EAAE,CAAC;QACf,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,8BAA8B,CAAC,SAAyB;IAC/D,uCAAuC;IACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,YAAY,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACrD,OAAO,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAAC,IAAY;IAC5C,OAAO,IAAI;SACR,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAAC,IAAY;IAC3C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3C,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;gBACpB,MAAM;YACR,CAAC;YACD,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,UAAU,GAAG,IAAI,CAAC;IACtB,UAAU,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;IAClD,UAAU,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;IACjD,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChD,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAC/B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,IAAY,EAAE,cAAmC;IAC1E,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,SAAS,+BAA+B,CACtC,QAAgB,EAChB,OAAe,EACf,cAAmC;IAEnC,MAAM,SAAS,GAAmB,EAAE,CAAC;IAErC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1D,uCAAuC;QACvC,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAE3B,MAAM,KAAK,GAAG,CAAC,IAAa,EAAE,EAAE;YAC9B,8BAA8B;YAC9B,IAAI,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5B,IAAI,iBAAiB,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;oBAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBAC3C,SAAS,CAAC,IAAI,CAAC;wBACb,IAAI;wBACJ,IAAI,EAAE,IAAI,GAAG,CAAC;wBACd,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;wBACxB,UAAU,EAAE,IAAI,CAAC,MAAM;qBACxB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,8CAA8C;YAC9C,IACE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;gBAC9B,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC1B,IAAI,CAAC,WAAW;gBAChB,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,EACpC,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5B,IAAI,iBAAiB,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;oBAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBACvD,SAAS,CAAC,IAAI,CAAC;wBACb,IAAI;wBACJ,IAAI,EAAE,IAAI,GAAG,CAAC;wBACd,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;wBACxB,UAAU,EAAE,IAAI,CAAC,MAAM;qBACxB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC;QAEF,KAAK,CAAC,UAAU,CAAC,CAAC;QAClB,yEAAyE;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAAC,IAAY,EAAE,SAAyB;IACvE,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,mEAAmE,IAAI,GAAG,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,aAAa,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAElD,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,qBAAqB,IAAI,qCAAqC,SAAS,CAAC,MAAM,YAAY;QACnG,QAAQ,EAAE,SAAS;QACnB,UAAU,EAAE,SAAS,IAAI,8FAA8F,aAAa,EAAE;QACtI,IAAI,EAAE,6BAA6B;QACnC,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,KAAK,CAAC,IAAI;KACrB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,IAAY,EAAE,WAA2B;IACvE,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,mEAAmE,IAAI,GAAG,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,aAAa,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAAC;IAE9C,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,qBAAqB,IAAI,SAAS,kBAAkB,kEAAkE;QAC/H,QAAQ,EAAE,SAAS;QACnB,UAAU,EAAE,qBAAqB,IAAI,0HAA0H,aAAa,EAAE;QAC9K,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,KAAK,CAAC,IAAI;KACrB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,KAAmB,EACnB,cAAmC;IAEnC,MAAM,eAAe,GAAoB,IAAI,GAAG,EAAE,CAAC;IAEnD,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,yHAAyH;YACzH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,+BAA+B,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;YACrF,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,IAAI,wBAAwB,CAAC,CAAC;YAE3F,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC;gBAChC,KAAK,uBAAuB,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YACpD,CAAC;YACD,yEAAyE;QAC3E,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,uBAAuB,CAC9B,IAAY,EACZ,UAAuC;IAEvC,MAAM,UAAU,GAAqB,EAAE,CAAC;IAExC,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5C,IAAI,8BAA8B,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9C,UAAU,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAAY,EACZ,UAAuC;IAEvC,IAAI,UAAU,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IAC1D,uCAAuC;IACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,QAAQ,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,sBAAsB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAAY,EACZ,UAAuC;IAEvC,MAAM,YAAY,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAEhD,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAqB,CAAC,GAAG,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAEpF,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAChE,IAAI,gBAAgB,EAAE,CAAC;QACrB,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,WAAW,CAAC;IACnD,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,6BAA6B;IACnC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE;IAC9E,aAAa,EAAE,eAAe;IAE9B,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,gDAAgD;IAC7D,eAAe,EAAE;;;;;;;;;;iCAUc;IAC/B,IAAI,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,CAAC;IACpD,SAAS,EAAE,CAAC,IAAI,CAAC;IAEjB,KAAK,CAAC,UAAU,CAAC,KAAmB;QAClC,MAAM,cAAc,GAAG,+BAA+B,EAAE,CAAC;QACzD,MAAM,eAAe,GAAG,MAAM,yBAAyB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC/E,MAAM,UAAU,GAAqB,EAAE,CAAC;QAExC,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,eAAe,EAAE,CAAC;YACjD,qHAAqH;YACrH,UAAU,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAC,CAAC"}
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"}