@skastr0/pulsar-ts-pack 0.1.0 → 0.1.1

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 (89) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.js +1 -1
  3. package/dist/pack.d.ts.map +1 -1
  4. package/dist/pack.js +8 -0
  5. package/dist/pack.js.map +1 -1
  6. package/dist/signals/ts-ad-04-boundary-parser-coverage.d.ts +47 -0
  7. package/dist/signals/ts-ad-04-boundary-parser-coverage.d.ts.map +1 -0
  8. package/dist/signals/ts-ad-04-boundary-parser-coverage.js +269 -0
  9. package/dist/signals/ts-ad-04-boundary-parser-coverage.js.map +1 -0
  10. package/dist/signals/ts-ad-05-boundary-trust-breach.d.ts +97 -0
  11. package/dist/signals/ts-ad-05-boundary-trust-breach.d.ts.map +1 -0
  12. package/dist/signals/ts-ad-05-boundary-trust-breach.js +413 -0
  13. package/dist/signals/ts-ad-05-boundary-trust-breach.js.map +1 -0
  14. package/dist/signals/ts-ld-02-diagnostics.js +8 -8
  15. package/dist/signals/ts-ld-02-diagnostics.js.map +1 -1
  16. package/dist/signals/ts-ld-02-model.d.ts +19 -1
  17. package/dist/signals/ts-ld-02-model.d.ts.map +1 -1
  18. package/dist/signals/ts-ld-02-model.js.map +1 -1
  19. package/dist/signals/ts-ld-02-size-distribution.d.ts.map +1 -1
  20. package/dist/signals/ts-ld-02-size-distribution.js +1 -1
  21. package/dist/signals/ts-ld-02-size-distribution.js.map +1 -1
  22. package/dist/signals/ts-ld-02-thresholds.d.ts +3 -3
  23. package/dist/signals/ts-ld-02-thresholds.d.ts.map +1 -1
  24. package/dist/signals/ts-ld-02-thresholds.js +144 -21
  25. package/dist/signals/ts-ld-02-thresholds.js.map +1 -1
  26. package/dist/signals/ts-ld-03-nesting-depth.d.ts +4 -0
  27. package/dist/signals/ts-ld-03-nesting-depth.d.ts.map +1 -1
  28. package/dist/signals/ts-ld-03-nesting-depth.js +58 -5
  29. package/dist/signals/ts-ld-03-nesting-depth.js.map +1 -1
  30. package/dist/signals/ts-ld-08-exhaustiveness-erosion.d.ts +29 -0
  31. package/dist/signals/ts-ld-08-exhaustiveness-erosion.d.ts.map +1 -0
  32. package/dist/signals/ts-ld-08-exhaustiveness-erosion.js +100 -0
  33. package/dist/signals/ts-ld-08-exhaustiveness-erosion.js.map +1 -0
  34. package/dist/signals/ts-ld-09-error-channel-opacity.d.ts +67 -0
  35. package/dist/signals/ts-ld-09-error-channel-opacity.d.ts.map +1 -0
  36. package/dist/signals/ts-ld-09-error-channel-opacity.js +786 -0
  37. package/dist/signals/ts-ld-09-error-channel-opacity.js.map +1 -0
  38. package/dist/signals/ts-rp-01-hotspot-model.d.ts +46 -0
  39. package/dist/signals/ts-rp-01-hotspot-model.d.ts.map +1 -1
  40. package/dist/signals/ts-rp-01-hotspot-model.js +326 -12
  41. package/dist/signals/ts-rp-01-hotspot-model.js.map +1 -1
  42. package/dist/signals/ts-rp-01-hotspots.d.ts +1 -1
  43. package/dist/signals/ts-rp-01-hotspots.d.ts.map +1 -1
  44. package/dist/signals/ts-rp-01-hotspots.js +10 -14
  45. package/dist/signals/ts-rp-01-hotspots.js.map +1 -1
  46. package/dist/signals/ts-sl-01-duplication.d.ts.map +1 -1
  47. package/dist/signals/ts-sl-01-duplication.js +53 -5
  48. package/dist/signals/ts-sl-01-duplication.js.map +1 -1
  49. package/dist/signals/ts-sl-01-groups.js +2 -2
  50. package/dist/signals/ts-sl-01-groups.js.map +1 -1
  51. package/dist/signals/ts-sl-01-model.d.ts +3 -0
  52. package/dist/signals/ts-sl-01-model.d.ts.map +1 -1
  53. package/dist/signals/ts-sl-01-model.js.map +1 -1
  54. package/dist/signals/ts-sl-01-policy.d.ts +2 -0
  55. package/dist/signals/ts-sl-01-policy.d.ts.map +1 -1
  56. package/dist/signals/ts-sl-01-policy.js +21 -4
  57. package/dist/signals/ts-sl-01-policy.js.map +1 -1
  58. package/dist/signals/ts-sl-02-inconsistent-clones.d.ts.map +1 -1
  59. package/dist/signals/ts-sl-02-inconsistent-clones.js +13 -2
  60. package/dist/signals/ts-sl-02-inconsistent-clones.js.map +1 -1
  61. package/dist/signals/ts-sl-04-empty-implementations.d.ts +1 -1
  62. package/dist/signals/ts-sl-04-empty-implementations.d.ts.map +1 -1
  63. package/dist/signals/ts-sl-04-empty-implementations.js +476 -6
  64. package/dist/signals/ts-sl-04-empty-implementations.js.map +1 -1
  65. package/dist/signals/ts-sl-04-model.d.ts +1 -14
  66. package/dist/signals/ts-sl-04-model.d.ts.map +1 -1
  67. package/dist/signals/ts-sl-04-model.js +1 -7
  68. package/dist/signals/ts-sl-04-model.js.map +1 -1
  69. package/package.json +3 -3
  70. package/dist/signals/ts-sl-04-candidates.d.ts +0 -37
  71. package/dist/signals/ts-sl-04-candidates.d.ts.map +0 -1
  72. package/dist/signals/ts-sl-04-candidates.js +0 -90
  73. package/dist/signals/ts-sl-04-candidates.js.map +0 -1
  74. package/dist/signals/ts-sl-04-classify.d.ts +0 -7
  75. package/dist/signals/ts-sl-04-classify.d.ts.map +0 -1
  76. package/dist/signals/ts-sl-04-classify.js +0 -119
  77. package/dist/signals/ts-sl-04-classify.js.map +0 -1
  78. package/dist/signals/ts-sl-04-evaluation.d.ts +0 -7
  79. package/dist/signals/ts-sl-04-evaluation.d.ts.map +0 -1
  80. package/dist/signals/ts-sl-04-evaluation.js +0 -90
  81. package/dist/signals/ts-sl-04-evaluation.js.map +0 -1
  82. package/dist/signals/ts-sl-04-output.d.ts +0 -20
  83. package/dist/signals/ts-sl-04-output.d.ts.map +0 -1
  84. package/dist/signals/ts-sl-04-output.js +0 -73
  85. package/dist/signals/ts-sl-04-output.js.map +0 -1
  86. package/dist/signals/ts-sl-04-policy.d.ts +0 -15
  87. package/dist/signals/ts-sl-04-policy.d.ts.map +0 -1
  88. package/dist/signals/ts-sl-04-policy.js +0 -114
  89. package/dist/signals/ts-sl-04-policy.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @skastr0/pulsar-ts-pack — TypeScript signal pack.
3
3
  */
4
- export declare const TS_PACK_VERSION: "0.1.0";
4
+ export declare const TS_PACK_VERSION: "0.1.1";
5
5
  export { CASING_PATTERNS, inferCasingPattern, isRecognizedCasingPattern, matchesCasingPattern, parseCasingPatternAlternatives, splitIdentifierTokens, } from "./casing.js";
6
6
  export type { IdentifierPattern, RecognizedCasingPattern, } from "./casing.js";
7
7
  export { TsPackageInfoLayer, TsPackageInfoTag, TsProjectLayer, TsProjectTag, makeTsProject, makeTsProjectWithOptions, } from "./ts-project.js";
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @skastr0/pulsar-ts-pack — TypeScript signal pack.
3
3
  */
4
- export const TS_PACK_VERSION = "0.1.0";
4
+ export const TS_PACK_VERSION = "0.1.1";
5
5
  export { CASING_PATTERNS, inferCasingPattern, isRecognizedCasingPattern, matchesCasingPattern, parseCasingPatternAlternatives, splitIdentifierTokens, } from "./casing.js";
6
6
  export { TsPackageInfoLayer, TsPackageInfoTag, TsProjectLayer, TsProjectTag, makeTsProject, makeTsProjectWithOptions, } from "./ts-project.js";
7
7
  export { discoverPackages } from "./discovery.js";
@@ -1 +1 @@
1
- {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAwC5D;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,SAAS,CA4BvB,CAAA"}
1
+ {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AA4C5D;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,SAAS,CAgCvB,CAAA"}
package/dist/pack.js CHANGED
@@ -7,6 +7,8 @@ import { TsAb05 } from "./signals/ts-ab-05-generic-proliferation.js";
7
7
  import { TsAd01 } from "./signals/ts-ad-01-boundary-violations.js";
8
8
  import { TsAd02 } from "./signals/ts-ad-02-circular-deps.js";
9
9
  import { TsAd03 } from "./signals/ts-ad-03-reexport-depth.js";
10
+ import { TsAd04 } from "./signals/ts-ad-04-boundary-parser-coverage.js";
11
+ import { TsAd05 } from "./signals/ts-ad-05-boundary-trust-breach.js";
10
12
  import { TsDe01 } from "./signals/ts-de-01-type-level-coupling.js";
11
13
  import { TsDe02 } from "./signals/ts-de-02-fan-in-out.js";
12
14
  import { TsDe03 } from "./signals/ts-de-03-propagation-cost.js";
@@ -19,6 +21,8 @@ import { TsLd04 } from "./signals/ts-ld-04-naming-conventions.js";
19
21
  import { TsLd05 } from "./signals/ts-ld-05-domain-term-consistency.js";
20
22
  import { TsLd06 } from "./signals/ts-ld-06-annotation-coverage.js";
21
23
  import { TsLd07 } from "./signals/ts-ld-07-unsafe-type-erosion.js";
24
+ import { TsLd08 } from "./signals/ts-ld-08-exhaustiveness-erosion.js";
25
+ import { TsLd09 } from "./signals/ts-ld-09-error-channel-opacity.js";
22
26
  import { TsRp01 } from "./signals/ts-rp-01-hotspots.js";
23
27
  import { TsSl01 } from "./signals/ts-sl-01-duplication.js";
24
28
  import { TsSl02 } from "./signals/ts-sl-02-inconsistent-clones.js";
@@ -46,6 +50,8 @@ export const TS_PACK_SIGNALS = [
46
50
  TsAd01,
47
51
  TsAd02,
48
52
  TsAd03,
53
+ TsAd04,
54
+ TsAd05,
49
55
  TsDe01,
50
56
  TsDe02,
51
57
  TsDe03,
@@ -58,6 +64,8 @@ export const TS_PACK_SIGNALS = [
58
64
  TsAb05,
59
65
  TsLd06,
60
66
  TsLd07,
67
+ TsLd08,
68
+ TsLd09,
61
69
  TsRp01,
62
70
  TsSl01,
63
71
  TsSl03,
package/dist/pack.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pack.js","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,mDAAmD,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,8CAA8C,CAAA;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,4CAA4C,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAA;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAA;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,iDAAiD,CAAA;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,0CAA0C,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,0CAA0C,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,+CAA+C,CAAA;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAA;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAEtD,MAAM,qBAAqB,GACzB,qCAAqC,CAAA;AAEvC,MAAM,sBAAsB,GAAG,CAAsB,MAAS,EAAK,EAAE,CAAC,CAAC;IACrE,GAAG,MAAM;IACT,YAAY,EACV,MAAM,CAAC,YAAY,KAAK,SAAS;QAC/B,CAAC,CAAC,qBAAqB;QACvB,CAAC,CAAC,GAAG,qBAAqB,IAAI,MAAM,CAAC,YAAY,EAAE;CACxD,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC,GAAG,CAAC,sBAAsB,CAAC;KAC1B,GAAG,CAAC,sBAAsB,CAAC,CAAA"}
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,mDAAmD,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,8CAA8C,CAAA;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,4CAA4C,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAA;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,gDAAgD,CAAA;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAA;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,iDAAiD,CAAA;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,0CAA0C,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,0CAA0C,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,+CAA+C,CAAA;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,8CAA8C,CAAA;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAA;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAEtD,MAAM,qBAAqB,GACzB,qCAAqC,CAAA;AAEvC,MAAM,sBAAsB,GAAG,CAAsB,MAAS,EAAK,EAAE,CAAC,CAAC;IACrE,GAAG,MAAM;IACT,YAAY,EACV,MAAM,CAAC,YAAY,KAAK,SAAS;QAC/B,CAAC,CAAC,qBAAqB;QACvB,CAAC,CAAC,GAAG,qBAAqB,IAAI,MAAM,CAAC,YAAY,EAAE;CACxD,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC,GAAG,CAAC,sBAAsB,CAAC;KAC1B,GAAG,CAAC,sBAAsB,CAAC,CAAA"}
@@ -0,0 +1,47 @@
1
+ import { type Signal } from "@skastr0/pulsar-core/signal";
2
+ import { Schema } from "effect";
3
+ import { TsProjectTag } from "../ts-project.js";
4
+ declare const TsAd04Config: Schema.Struct<{
5
+ boundary_globs: Schema.Array$<typeof Schema.String>;
6
+ parser_call_patterns: Schema.Array$<typeof Schema.String>;
7
+ exclude_globs: Schema.Array$<typeof Schema.String>;
8
+ top_n_diagnostics: typeof Schema.Number;
9
+ }>;
10
+ export type TsAd04Config = typeof TsAd04Config.Type;
11
+ export type BoundaryParserCoverageState = "present" | "zero" | "absent" | "not_configured" | "not_applicable";
12
+ export interface WeakBoundaryParameter {
13
+ readonly name: string;
14
+ readonly typeText: string;
15
+ readonly reason: "any" | "unknown" | "untyped" | "request-like";
16
+ }
17
+ export interface BoundaryParserFinding {
18
+ readonly file: string;
19
+ readonly line: number;
20
+ readonly symbol: string;
21
+ readonly weakParameters: ReadonlyArray<WeakBoundaryParameter>;
22
+ readonly missingEvidence: string;
23
+ }
24
+ export interface BoundaryParserCoveredFunction {
25
+ readonly file: string;
26
+ readonly line: number;
27
+ readonly symbol: string;
28
+ readonly parserEvidence: ReadonlyArray<string>;
29
+ readonly weakParameters: ReadonlyArray<WeakBoundaryParameter>;
30
+ }
31
+ export interface TsAd04Output {
32
+ readonly state: BoundaryParserCoverageState;
33
+ readonly boundaryFilesMatched: number;
34
+ readonly boundaryFunctionsAnalyzed: number;
35
+ readonly weakBoundaryFunctions: number;
36
+ readonly coveredWeakBoundaryFunctions: number;
37
+ readonly findings: ReadonlyArray<BoundaryParserFinding>;
38
+ readonly covered: ReadonlyArray<BoundaryParserCoveredFunction>;
39
+ readonly diagnosticLimit: number;
40
+ readonly compositeConsumers: ReadonlyArray<string>;
41
+ readonly cacheContributors: ReadonlyArray<string>;
42
+ readonly calibrationSurface: string;
43
+ readonly enforcementCeiling: ReadonlyArray<string>;
44
+ }
45
+ export declare const TsAd04: Signal<TsAd04Config, TsAd04Output, TsProjectTag>;
46
+ export {};
47
+ //# sourceMappingURL=ts-ad-04-boundary-parser-coverage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ts-ad-04-boundary-parser-coverage.d.ts","sourceRoot":"","sources":["../../src/signals/ts-ad-04-boundary-parser-coverage.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,MAAM,EACZ,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAA;AAWvC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAG/C,QAAA,MAAM,YAAY;;;;;EAKhB,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAEnD,MAAM,MAAM,2BAA2B,GACnC,SAAS,GACT,MAAM,GACN,QAAQ,GACR,gBAAgB,GAChB,gBAAgB,CAAA;AAEpB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,CAAA;CAChE;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAA;IAC7D,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;CACjC;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC9C,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAA;CAC9D;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,2BAA2B,CAAA;IAC3C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAA;IAC1C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAA;IACtC,QAAQ,CAAC,4BAA4B,EAAE,MAAM,CAAA;IAC7C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAA;IACvD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,6BAA6B,CAAC,CAAA;IAC9D,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,kBAAkB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAClD,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACjD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,kBAAkB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CACnD;AA2BD,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CA2GnE,CAAA"}
@@ -0,0 +1,269 @@
1
+ import { SignalComputeError, } from "@skastr0/pulsar-core/signal";
2
+ import { Effect, Schema } from "effect";
3
+ import { Node, SyntaxKind, } from "ts-morph";
4
+ import { TsProjectTag } from "../ts-project.js";
5
+ import { isExcluded } from "./shared-globs.js";
6
+ const TsAd04Config = Schema.Struct({
7
+ boundary_globs: Schema.Array(Schema.String),
8
+ parser_call_patterns: Schema.Array(Schema.String),
9
+ exclude_globs: Schema.Array(Schema.String),
10
+ top_n_diagnostics: Schema.Number,
11
+ });
12
+ const REQUEST_LIKE_TYPE_NAMES = [
13
+ "Request",
14
+ "NextRequest",
15
+ "IncomingMessage",
16
+ "APIGatewayProxyEvent",
17
+ "APIGatewayEvent",
18
+ "MessageEvent",
19
+ "Event",
20
+ "FormData",
21
+ "URLSearchParams",
22
+ ];
23
+ export const TsAd04 = {
24
+ id: "TS-AD-04-boundary-parser-coverage",
25
+ title: "Boundary parser coverage",
26
+ aliases: ["TS-AD-04"],
27
+ tier: 1,
28
+ category: "architectural-drift",
29
+ kind: "structural",
30
+ cacheVersion: "ts-boundary-parser-evidence-v1",
31
+ configSchema: TsAd04Config,
32
+ defaultConfig: {
33
+ boundary_globs: [
34
+ "**/api/*.ts",
35
+ "**/api/**/*.ts",
36
+ "**/routes/*.ts",
37
+ "**/routes/**/*.ts",
38
+ "**/handlers/*.ts",
39
+ "**/handlers/**/*.ts",
40
+ "**/controllers/*.ts",
41
+ "**/controllers/**/*.ts",
42
+ "**/adapters/*.ts",
43
+ "**/adapters/**/*.ts",
44
+ "**/cli/*.ts",
45
+ "**/cli/**/*.ts",
46
+ "**/*route.ts",
47
+ "**/*handler.ts",
48
+ "**/*controller.ts",
49
+ "**/*adapter.ts",
50
+ ],
51
+ parser_call_patterns: [
52
+ "parse",
53
+ "safeparse",
54
+ "decode",
55
+ "decodeunknown",
56
+ "validate",
57
+ "assert",
58
+ "schema",
59
+ "json.parse",
60
+ ],
61
+ exclude_globs: [
62
+ "**/*.test.ts",
63
+ "**/*.test.tsx",
64
+ "**/*.spec.ts",
65
+ "**/*.spec.tsx",
66
+ "**/*.d.ts",
67
+ "**/node_modules/**",
68
+ "**/dist/**",
69
+ "**/coverage/**",
70
+ "**/.turbo/**",
71
+ "**/generated/**",
72
+ "**/*.generated.ts",
73
+ "**/*.gen.ts",
74
+ ],
75
+ top_n_diagnostics: 10,
76
+ },
77
+ inputs: [],
78
+ compute: (config) => Effect.gen(function* () {
79
+ const project = yield* TsProjectTag;
80
+ return yield* Effect.try({
81
+ try: () => computeBoundaryParserCoverage(project.getSourceFiles(), config),
82
+ catch: (cause) => new SignalComputeError({
83
+ signalId: "TS-AD-04-boundary-parser-coverage",
84
+ message: String(cause),
85
+ cause,
86
+ }),
87
+ });
88
+ }),
89
+ score: (out) => {
90
+ if (out.state !== "present" && out.state !== "zero")
91
+ return 1;
92
+ if (out.weakBoundaryFunctions === 0)
93
+ return 1;
94
+ return Math.max(0, 1 - out.findings.length / out.weakBoundaryFunctions);
95
+ },
96
+ diagnose: (out) => {
97
+ if (out.state === "not_configured") {
98
+ return [{
99
+ severity: "warn",
100
+ message: "Boundary parser coverage is not configured: boundary_globs is empty",
101
+ data: { state: out.state },
102
+ }];
103
+ }
104
+ if (out.state === "absent") {
105
+ return [{
106
+ severity: "info",
107
+ message: "Boundary parser coverage found no files matching configured boundary_globs",
108
+ data: { state: out.state },
109
+ }];
110
+ }
111
+ return out.findings.slice(0, out.diagnosticLimit).map((finding) => ({
112
+ severity: "warn",
113
+ message: `Boundary function \`${finding.symbol}\` accepts weak external input ` +
114
+ "without parse/decode evidence",
115
+ location: { file: finding.file, line: finding.line },
116
+ data: { ...finding },
117
+ }));
118
+ },
119
+ outputMetadata: (out) => {
120
+ if (out.state === "not_configured" || out.state === "absent") {
121
+ return { applicability: "insufficient_evidence" };
122
+ }
123
+ if (out.state === "not_applicable") {
124
+ return { applicability: "not_applicable" };
125
+ }
126
+ return undefined;
127
+ },
128
+ };
129
+ const computeBoundaryParserCoverage = (sourceFiles, config) => {
130
+ const diagnosticLimit = Math.max(0, Math.floor(config.top_n_diagnostics));
131
+ if (config.boundary_globs.length === 0) {
132
+ return baseOutput("not_configured", 0, 0, [], [], diagnosticLimit);
133
+ }
134
+ const boundaryFiles = sourceFiles.filter((sourceFile) => isBoundarySourceFile(sourceFile, config));
135
+ if (boundaryFiles.length === 0) {
136
+ return baseOutput("absent", 0, 0, [], [], diagnosticLimit);
137
+ }
138
+ const candidates = boundaryFiles.flatMap((sourceFile) => collectBoundaryFunctionCandidates(sourceFile, config.parser_call_patterns));
139
+ const weakCandidates = candidates.filter((candidate) => candidate.weakParameters.length > 0);
140
+ if (weakCandidates.length === 0) {
141
+ return baseOutput("not_applicable", boundaryFiles.length, candidates.length, [], [], diagnosticLimit);
142
+ }
143
+ const covered = weakCandidates
144
+ .filter((candidate) => candidate.parserEvidence.length > 0)
145
+ .map((candidate) => ({
146
+ file: candidate.file,
147
+ line: candidate.line,
148
+ symbol: candidate.symbol,
149
+ parserEvidence: candidate.parserEvidence,
150
+ weakParameters: candidate.weakParameters,
151
+ }));
152
+ const findings = weakCandidates
153
+ .filter((candidate) => candidate.parserEvidence.length === 0)
154
+ .map((candidate) => ({
155
+ file: candidate.file,
156
+ line: candidate.line,
157
+ symbol: candidate.symbol,
158
+ weakParameters: candidate.weakParameters,
159
+ missingEvidence: "No parse/decode/schema/assertion call matched parser_call_patterns.",
160
+ }))
161
+ .sort(compareBoundaryParserFindings);
162
+ const state = findings.length === 0 ? "zero" : "present";
163
+ return baseOutput(state, boundaryFiles.length, candidates.length, findings, covered.sort(compareCoveredBoundaryFunctions), diagnosticLimit);
164
+ };
165
+ const baseOutput = (state, boundaryFilesMatched, boundaryFunctionsAnalyzed, findings, covered, diagnosticLimit) => ({
166
+ state,
167
+ boundaryFilesMatched,
168
+ boundaryFunctionsAnalyzed,
169
+ weakBoundaryFunctions: findings.length + covered.length,
170
+ coveredWeakBoundaryFunctions: covered.length,
171
+ findings,
172
+ covered,
173
+ diagnosticLimit,
174
+ compositeConsumers: [
175
+ "boundary trust breach",
176
+ "contract safety gap",
177
+ "AI quicksand risk",
178
+ ],
179
+ cacheContributors: [
180
+ "source tree",
181
+ "config.boundary_globs",
182
+ "config.parser_call_patterns",
183
+ "config.exclude_globs",
184
+ "config.top_n_diagnostics",
185
+ ],
186
+ calibrationSurface: "config.boundary_globs and config.parser_call_patterns; future reference-data boundary role conventions can replace path heuristics",
187
+ enforcementCeiling: ["soft-warning", "trend", "review-routing"],
188
+ });
189
+ const isBoundarySourceFile = (sourceFile, config) => {
190
+ const file = sourceFile.getFilePath();
191
+ return (!sourceFile.isDeclarationFile() &&
192
+ !isExcluded(file, config.exclude_globs) &&
193
+ isExcluded(file, config.boundary_globs));
194
+ };
195
+ const collectBoundaryFunctionCandidates = (sourceFile, parserPatterns) => [
196
+ ...sourceFile.getFunctions().flatMap((fn) => isBoundaryFunctionDeclaration(fn) ? [candidateFromFunction(sourceFile, fn, fn.getName() ?? "default", parserPatterns)] : []),
197
+ ...sourceFile.getVariableDeclarations().flatMap((declaration) => boundaryVariableFunction(declaration).map((fn) => candidateFromFunction(sourceFile, fn, declaration.getName(), parserPatterns))),
198
+ ];
199
+ const isBoundaryFunctionDeclaration = (fn) => fn.isExported() || fn.isDefaultExport() || isHandlerName(fn.getName() ?? "");
200
+ const boundaryVariableFunction = (declaration) => {
201
+ const initializer = declaration.getInitializer();
202
+ if (initializer === undefined)
203
+ return [];
204
+ const variableStatement = declaration.getVariableStatement();
205
+ const boundaryLike = variableStatement?.isExported() === true ||
206
+ isHandlerName(declaration.getName());
207
+ if (!boundaryLike)
208
+ return [];
209
+ if (Node.isArrowFunction(initializer) || Node.isFunctionExpression(initializer)) {
210
+ return [initializer];
211
+ }
212
+ return [];
213
+ };
214
+ const isHandlerName = (name) => /^(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS|handler|handle|loader|action|fetch|main|run)$/u.test(name);
215
+ const candidateFromFunction = (sourceFile, fn, symbol, parserPatterns) => ({
216
+ file: sourceFile.getFilePath(),
217
+ line: fn.getStartLineNumber(),
218
+ symbol,
219
+ weakParameters: fn.getParameters().flatMap(classifyWeakParameter),
220
+ parserEvidence: collectParserEvidence(fn, parserPatterns),
221
+ });
222
+ const classifyWeakParameter = (parameter) => {
223
+ const name = parameter.getName();
224
+ const typeNode = parameter.getTypeNode();
225
+ const typeText = typeNode?.getText() ?? "<untyped>";
226
+ const normalized = typeText.toLowerCase();
227
+ if (typeNode === undefined) {
228
+ return [{ name, typeText, reason: "untyped" }];
229
+ }
230
+ if (/\bany\b/u.test(normalized)) {
231
+ return [{ name, typeText, reason: "any" }];
232
+ }
233
+ if (/\bunknown\b/u.test(normalized)) {
234
+ return [{ name, typeText, reason: "unknown" }];
235
+ }
236
+ if (REQUEST_LIKE_TYPE_NAMES.some((requestType) => typeText.includes(requestType))) {
237
+ return [{ name, typeText, reason: "request-like" }];
238
+ }
239
+ return [];
240
+ };
241
+ const collectParserEvidence = (fn, parserPatterns) => {
242
+ const patterns = parserPatterns.map((pattern) => normalizeCallText(pattern));
243
+ if (patterns.length === 0)
244
+ return [];
245
+ const calls = fn.getDescendantsOfKind(SyntaxKind.CallExpression);
246
+ const evidence = new Set();
247
+ for (const call of calls) {
248
+ const expression = call.getExpression();
249
+ const expressionText = expression.getText();
250
+ const normalizedCallee = normalizeCallText(calleeText(expression));
251
+ if (patterns.some((pattern) => normalizedCallee.includes(pattern))) {
252
+ evidence.add(expressionText);
253
+ }
254
+ }
255
+ return [...evidence].sort();
256
+ };
257
+ const calleeText = (node) => {
258
+ if (Node.isCallExpression(node))
259
+ return calleeText(node.getExpression());
260
+ return node.getText();
261
+ };
262
+ const normalizeCallText = (text) => text.toLowerCase().replace(/\s+/gu, "");
263
+ const compareBoundaryParserFindings = (left, right) => left.file.localeCompare(right.file) ||
264
+ left.line - right.line ||
265
+ left.symbol.localeCompare(right.symbol);
266
+ const compareCoveredBoundaryFunctions = (left, right) => left.file.localeCompare(right.file) ||
267
+ left.line - right.line ||
268
+ left.symbol.localeCompare(right.symbol);
269
+ //# sourceMappingURL=ts-ad-04-boundary-parser-coverage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ts-ad-04-boundary-parser-coverage.js","sourceRoot":"","sources":["../../src/signals/ts-ad-04-boundary-parser-coverage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import { type CompositeExplanation, type Signal } from "@skastr0/pulsar-core/signal";
2
+ import { Schema } from "effect";
3
+ declare const TsAd05Config: Schema.Struct<{
4
+ top_n_diagnostics: typeof Schema.Number;
5
+ warn_threshold: typeof Schema.Number;
6
+ }>;
7
+ type TsAd05Config = typeof TsAd05Config.Type;
8
+ export type BoundaryTrustBreachState = "present" | "zero" | "insufficient_evidence";
9
+ export type BoundaryTrustInputFactState = "present" | "zero" | "absent" | "unknown" | "not_configured" | "not_applicable" | "missing_required" | "missing_optional";
10
+ export interface BoundaryTrustBreachFactors {
11
+ readonly parserCoverage?: number;
12
+ readonly unsafeBoundaryTypes?: number;
13
+ readonly boundaryViolations?: number;
14
+ readonly domainLanguageDrift?: number;
15
+ }
16
+ export interface BoundaryTrustBreachCandidate {
17
+ readonly file: string;
18
+ readonly score: number;
19
+ readonly rank: number;
20
+ readonly factors: BoundaryTrustBreachFactors;
21
+ readonly evidence: {
22
+ readonly parserFindings?: number;
23
+ readonly weakBoundaryParameters?: number;
24
+ readonly unsafeBoundaryOccurrences?: number;
25
+ readonly unsafeBoundaryWeight?: number;
26
+ readonly boundaryViolations?: number;
27
+ readonly domainTermDrift?: number;
28
+ };
29
+ }
30
+ export interface BoundaryTrustBreachOutput {
31
+ readonly state: BoundaryTrustBreachState;
32
+ readonly breaches: ReadonlyArray<BoundaryTrustBreachCandidate>;
33
+ readonly explanation: CompositeExplanation;
34
+ readonly diagnosticLimit: number;
35
+ readonly inputFactStates: {
36
+ readonly boundaryParserCoverage: BoundaryTrustInputFactState;
37
+ readonly unsafeTypeErosion: BoundaryTrustInputFactState;
38
+ readonly boundaryViolations: BoundaryTrustInputFactState;
39
+ readonly domainTermConsistency: BoundaryTrustInputFactState;
40
+ };
41
+ readonly availableFactorWeight: number;
42
+ readonly riskPressure: number;
43
+ readonly breachPressure: number;
44
+ readonly totalFilesConsidered: number;
45
+ readonly evidenceCompleteness: number;
46
+ readonly riskModel: "boundary-trust-breach-v1";
47
+ readonly warnThreshold: number;
48
+ readonly compositeConsumers: ReadonlyArray<string>;
49
+ readonly cacheContributors: ReadonlyArray<string>;
50
+ readonly calibrationSurface: string;
51
+ readonly evidenceClass: ReadonlyArray<string>;
52
+ readonly claimLimit: string;
53
+ readonly nonClaimLimit: string;
54
+ readonly knownFailureMode: string;
55
+ readonly enforcementCeiling: ReadonlyArray<string>;
56
+ }
57
+ export declare const TS_AD_05_COMPOSITE_INPUTS: ({
58
+ id: string;
59
+ aliases: string[];
60
+ factorPath: string;
61
+ weight: 0.35;
62
+ cacheFingerprint: string;
63
+ rawValue: (value: unknown) => unknown;
64
+ normalize: (value: unknown) => number | undefined;
65
+ optional?: never;
66
+ } | {
67
+ id: string;
68
+ aliases: string[];
69
+ optional: true;
70
+ factorPath: string;
71
+ weight: 0.3;
72
+ cacheFingerprint: string;
73
+ rawValue: (value: unknown) => unknown;
74
+ normalize: (value: unknown) => number;
75
+ } | {
76
+ id: string;
77
+ aliases: string[];
78
+ optional: true;
79
+ factorPath: string;
80
+ weight: 0.25;
81
+ cacheFingerprint: string;
82
+ rawValue: (value: unknown) => unknown;
83
+ normalize: (value: unknown) => number | undefined;
84
+ } | {
85
+ id: string;
86
+ aliases: string[];
87
+ optional: true;
88
+ factorPath: string;
89
+ weight: 0.1;
90
+ cacheFingerprint: string;
91
+ rawValue: (value: unknown) => unknown;
92
+ normalize: (value: unknown) => number | undefined;
93
+ })[];
94
+ export declare const TsAd05: Signal<TsAd05Config, BoundaryTrustBreachOutput, never>;
95
+ export declare const computeBoundaryTrustBreachOutput: (config: TsAd05Config, inputs: ReadonlyMap<string, unknown>) => BoundaryTrustBreachOutput;
96
+ export {};
97
+ //# sourceMappingURL=ts-ad-05-boundary-trust-breach.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ts-ad-05-boundary-trust-breach.d.ts","sourceRoot":"","sources":["../../src/signals/ts-ad-05-boundary-trust-breach.ts"],"names":[],"mappings":"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"}