@flagshark/core 2.0.0 → 2.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.
- package/README.md +2 -0
- package/dist/config/schema.d.ts +112 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +63 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/detection/detectors/typescript.d.ts.map +1 -1
- package/dist/detection/detectors/typescript.js +41 -0
- package/dist/detection/detectors/typescript.js.map +1 -1
- package/dist/detection/feature-flag.d.ts +28 -0
- package/dist/detection/feature-flag.d.ts.map +1 -1
- package/dist/detection/helpers.d.ts +16 -0
- package/dist/detection/helpers.d.ts.map +1 -1
- package/dist/detection/helpers.js +117 -6
- package/dist/detection/helpers.js.map +1 -1
- package/dist/detection/import-graph.d.ts +234 -0
- package/dist/detection/import-graph.d.ts.map +1 -0
- package/dist/detection/import-graph.js +641 -0
- package/dist/detection/import-graph.js.map +1 -0
- package/dist/detection/interface.d.ts +57 -0
- package/dist/detection/interface.d.ts.map +1 -1
- package/dist/detection/interface.js.map +1 -1
- package/dist/detection/polyglot-analyzer.d.ts +8 -0
- package/dist/detection/polyglot-analyzer.d.ts.map +1 -1
- package/dist/detection/polyglot-analyzer.js +2 -0
- package/dist/detection/polyglot-analyzer.js.map +1 -1
- package/dist/detection/tree-sitter/engine.d.ts.map +1 -1
- package/dist/detection/tree-sitter/engine.js +62 -15
- package/dist/detection/tree-sitter/engine.js.map +1 -1
- package/dist/detection/tree-sitter/parser-cache.d.ts +20 -0
- package/dist/detection/tree-sitter/parser-cache.d.ts.map +1 -1
- package/dist/detection/tree-sitter/parser-cache.js +32 -1
- package/dist/detection/tree-sitter/parser-cache.js.map +1 -1
- package/dist/output/json.d.ts.map +1 -1
- package/dist/output/json.js +28 -0
- package/dist/output/json.js.map +1 -1
- package/dist/output/markdown.d.ts.map +1 -1
- package/dist/output/markdown.js +47 -1
- package/dist/output/markdown.js.map +1 -1
- package/dist/output/text.d.ts.map +1 -1
- package/dist/output/text.js +89 -0
- package/dist/output/text.js.map +1 -1
- package/dist/providers/cross-reference.d.ts +36 -2
- package/dist/providers/cross-reference.d.ts.map +1 -1
- package/dist/providers/cross-reference.js +102 -7
- package/dist/providers/cross-reference.js.map +1 -1
- package/dist/providers/interface.d.ts +116 -2
- package/dist/providers/interface.d.ts.map +1 -1
- package/dist/providers/launchdarkly/client.d.ts +12 -0
- package/dist/providers/launchdarkly/client.d.ts.map +1 -1
- package/dist/providers/launchdarkly/client.js +243 -24
- package/dist/providers/launchdarkly/client.js.map +1 -1
- package/dist/providers/launchdarkly/types.d.ts +318 -0
- package/dist/providers/launchdarkly/types.d.ts.map +1 -1
- package/dist/providers/launchdarkly/types.js +82 -0
- package/dist/providers/launchdarkly/types.js.map +1 -1
- package/dist/providers/orchestrate.d.ts +34 -2
- package/dist/providers/orchestrate.d.ts.map +1 -1
- package/dist/providers/orchestrate.js +59 -7
- package/dist/providers/orchestrate.js.map +1 -1
- package/dist/scan-repo.d.ts +28 -0
- package/dist/scan-repo.d.ts.map +1 -1
- package/dist/scan-repo.js +290 -4
- package/dist/scan-repo.js.map +1 -1
- package/dist/staleness.d.ts +31 -1
- package/dist/staleness.d.ts.map +1 -1
- package/dist/staleness.js +66 -10
- package/dist/staleness.js.map +1 -1
- package/package.json +2 -1
|
@@ -42,12 +42,69 @@ export interface FeatureFlagProvider {
|
|
|
42
42
|
packagePath?: string;
|
|
43
43
|
/** Import pattern to match in source code */
|
|
44
44
|
importPattern?: string;
|
|
45
|
+
/**
|
|
46
|
+
* Optional alternative import patterns. Either the primary
|
|
47
|
+
* `importPattern` OR any entry here is enough to pass the import gate.
|
|
48
|
+
* Useful for SDKs published under both a legacy unscoped name and a
|
|
49
|
+
* new scoped name (e.g. `launchdarkly-react-client-sdk` vs.
|
|
50
|
+
* `@launchdarkly/react-client-sdk`).
|
|
51
|
+
*/
|
|
52
|
+
importAliases?: string[];
|
|
45
53
|
/** Methods to detect */
|
|
46
54
|
methods: MethodConfig[];
|
|
47
55
|
/** Human-readable description */
|
|
48
56
|
description?: string;
|
|
49
57
|
/** Whether detection is enabled for this provider */
|
|
50
58
|
enabled: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Optional list of runtime-global symbol patterns that, when present
|
|
61
|
+
* anywhere in a file's content, count as evidence that the file uses
|
|
62
|
+
* this provider's SDK — even when the SDK is never statically imported.
|
|
63
|
+
*
|
|
64
|
+
* This is the B2 gate-bypass mechanism: codebases that load the SDK via
|
|
65
|
+
* `<script>` snippet or tag manager (PostHog's canonical setup,
|
|
66
|
+
* LaunchDarkly's client snippet) have NO `import 'posthog-js'` to
|
|
67
|
+
* trigger the standard import gate. Without runtimeSymbols those
|
|
68
|
+
* codebases get 0 detections despite hundreds of real callsites. The
|
|
69
|
+
* n8n editor-ui shakedown case is the motivating reproduction.
|
|
70
|
+
*
|
|
71
|
+
* Patterns are matched as substrings (cheap and good enough for the
|
|
72
|
+
* canonical shapes we care about — `window.posthog`, `posthog.isFeatureEnabled(`,
|
|
73
|
+
* `useFeatureFlag(`). False-positive risk is bounded because:
|
|
74
|
+
* 1. The patterns are chosen to be uniquely SDK-shaped (a `(` at the
|
|
75
|
+
* end means we're inside a call, not a string literal).
|
|
76
|
+
* 2. Detected flags from a runtime-symbol gate carry `confidence:
|
|
77
|
+
* 'medium'` so downstream tooling can route them through review
|
|
78
|
+
* rather than auto-merging cleanup PRs.
|
|
79
|
+
*
|
|
80
|
+
* Empty / unset = behave exactly as before (import gate only).
|
|
81
|
+
*/
|
|
82
|
+
runtimeSymbols?: string[];
|
|
83
|
+
/**
|
|
84
|
+
* Optional bulk-flags hook name (e.g. `useFlags` for the LaunchDarkly
|
|
85
|
+
* React SDK). When set, the detector additionally extracts flag keys
|
|
86
|
+
* from destructured property names on the hook's return value:
|
|
87
|
+
*
|
|
88
|
+
* const { showNewCheckout, oneClickPurchase } = useFlags()
|
|
89
|
+
* ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
|
|
90
|
+
* each one becomes a detected flag
|
|
91
|
+
*
|
|
92
|
+
* Required because the React SDK does not pass flag keys as call-site
|
|
93
|
+
* arguments — `useFlags()` takes no parameters and returns an object
|
|
94
|
+
* keyed by every flag. Without this hook the entire React-SDK call
|
|
95
|
+
* pattern produces zero detections, even though every site reads a
|
|
96
|
+
* flag. See "React SDK gap" in the changelog for the motivating user
|
|
97
|
+
* report.
|
|
98
|
+
*
|
|
99
|
+
* Note: LaunchDarkly camelCases flag keys by default; detected names
|
|
100
|
+
* arrive in that form unless the consumer opted out via
|
|
101
|
+
* `reactOptions: { useCamelCaseFlagKeys: false }`. Users should turn
|
|
102
|
+
* camelCase off for the cleanest FlagShark experience, or apply a
|
|
103
|
+
* convention mapping in `.flagshark.yml`.
|
|
104
|
+
*
|
|
105
|
+
* Empty / unset = no destructure-based detection.
|
|
106
|
+
*/
|
|
107
|
+
useFlagsHook?: string;
|
|
51
108
|
}
|
|
52
109
|
/** Returns the effective import pattern, supporting backward compatibility. */
|
|
53
110
|
export declare function getImportPattern(provider: FeatureFlagProvider): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/detection/interface.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,kDAAkD;AAClD,MAAM,MAAM,QAAQ,GAChB,IAAI,GACJ,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,OAAO,GACP,MAAM,GACN,QAAQ,GACR,KAAK,GACL,MAAM,GACN,KAAK,GACL,MAAM,CAAA;AAEV,wDAAwD;AACxD,eAAO,MAAM,SAAS;iBACR,QAAQ;yBACQ,QAAQ;yBACR,QAAQ;qBAChB,QAAQ;mBACZ,QAAQ;qBACJ,QAAQ;oBACV,QAAQ;mBACV,QAAQ;qBACJ,QAAQ;kBACd,QAAQ;mBACN,QAAQ;kBACV,QAAQ;yBACA,QAAQ;CACtB,CAAA;AAEV,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAA;IACZ,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAA;IACpB,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,wBAAwB;IACxB,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/detection/interface.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,kDAAkD;AAClD,MAAM,MAAM,QAAQ,GAChB,IAAI,GACJ,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,OAAO,GACP,MAAM,GACN,QAAQ,GACR,KAAK,GACL,MAAM,GACN,KAAK,GACL,MAAM,CAAA;AAEV,wDAAwD;AACxD,eAAO,MAAM,SAAS;iBACR,QAAQ;yBACQ,QAAQ;yBACR,QAAQ;qBAChB,QAAQ;mBACZ,QAAQ;qBACJ,QAAQ;oBACV,QAAQ;mBACV,QAAQ;qBACJ,QAAQ;kBACd,QAAQ;mBACN,QAAQ;kBACV,QAAQ;yBACA,QAAQ;CACtB,CAAA;AAEV,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAA;IACZ,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAA;IACpB,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,wBAAwB;IACxB,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAA;IAChB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IAEzB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,CAEtE;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,QAAQ,IAAI,QAAQ,CAAA;IAEpB,gFAAgF;IAChF,cAAc,IAAI,MAAM,EAAE,CAAA;IAE1B,sDAAsD;IACtD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IAEtF,yDAAyD;IACzD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;IAEvC,qEAAqE;IACrE,YAAY,IAAI,mBAAmB,EAAE,CAAA;CACtC;AAED,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,WAAW,EAAE,CAAA;IACpB,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED,mEAAmE;AACnE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,aAAa,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/detection/interface.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH,wDAAwD;AACxD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,EAAE,EAAE,IAAgB;IACpB,UAAU,EAAE,YAAwB;IACpC,UAAU,EAAE,YAAwB;IACpC,MAAM,EAAE,QAAoB;IAC5B,IAAI,EAAE,MAAkB;IACxB,MAAM,EAAE,QAAoB;IAC5B,KAAK,EAAE,OAAmB;IAC1B,IAAI,EAAE,MAAkB;IACxB,MAAM,EAAE,QAAoB;IAC5B,GAAG,EAAE,KAAiB;IACtB,IAAI,EAAE,MAAkB;IACxB,GAAG,EAAE,KAAiB;IACtB,UAAU,EAAE,MAAkB;CACtB,CAAA;
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/detection/interface.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH,wDAAwD;AACxD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,EAAE,EAAE,IAAgB;IACpB,UAAU,EAAE,YAAwB;IACpC,UAAU,EAAE,YAAwB;IACpC,MAAM,EAAE,QAAoB;IAC5B,IAAI,EAAE,MAAkB;IACxB,MAAM,EAAE,QAAoB;IAC5B,KAAK,EAAE,OAAmB;IAC1B,IAAI,EAAE,MAAkB;IACxB,MAAM,EAAE,QAAoB;IAC5B,GAAG,EAAE,KAAiB;IACtB,IAAI,EAAE,MAAkB;IACxB,GAAG,EAAE,KAAiB;IACtB,UAAU,EAAE,MAAkB;CACtB,CAAA;AA0FV,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,QAA6B;IAC5D,OAAO,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAA;AAC7D,CAAC"}
|
|
@@ -40,6 +40,14 @@ export interface RepositoryAnalysisResult {
|
|
|
40
40
|
languages: Map<Language, number>;
|
|
41
41
|
skippedFiles: string[];
|
|
42
42
|
partialFiles: string[];
|
|
43
|
+
/**
|
|
44
|
+
* Count of files whose detector raised at least one parse error
|
|
45
|
+
* (`file.parseErrors.length > 0`). Includes both `skipped` (couldn't extract
|
|
46
|
+
* any flags) and `partial` (extracted some flags but the parser bailed mid-file)
|
|
47
|
+
* outcomes. Surfaced to the user via the text-output summary so a silent
|
|
48
|
+
* `4568 / 17170 files skipped` cannot masquerade as a clean scan.
|
|
49
|
+
*/
|
|
50
|
+
parseErrorCount: number;
|
|
43
51
|
}
|
|
44
52
|
export type AnalysisProgressCallback = (analyzed: number, total: number) => void;
|
|
45
53
|
export declare class PolyglotAnalyzer {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polyglot-analyzer.d.ts","sourceRoot":"","sources":["../../src/detection/polyglot-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAIpD,UAAU,MAAM;IACd,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC9B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC9B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;CAChC;AAID,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAA;AAI7B,MAAM,WAAW,YAAY;IAC3B,QAAQ,IAAI,QAAQ,CAAA;IACpB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,WAAW,EAAE,CAAA;CACvF;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAA;IAC9D,sBAAsB,IAAI,MAAM,EAAE,CAAA;IAClC,qBAAqB,IAAI,QAAQ,EAAE,CAAA;CACpC;AAID,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAA;AAE7E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,EAAE,WAAW,EAAE,CAAA;IACpB,WAAW,EAAE,KAAK,EAAE,CAAA;IACpB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IACtC,2CAA2C;IAC3C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;IACtC,mCAAmC;IACnC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAChC,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,YAAY,EAAE,MAAM,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"polyglot-analyzer.d.ts","sourceRoot":"","sources":["../../src/detection/polyglot-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAIpD,UAAU,MAAM;IACd,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC9B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC9B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;CAChC;AAID,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAA;AAI7B,MAAM,WAAW,YAAY;IAC3B,QAAQ,IAAI,QAAQ,CAAA;IACpB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,WAAW,EAAE,CAAA;CACvF;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAA;IAC9D,sBAAsB,IAAI,MAAM,EAAE,CAAA;IAClC,qBAAqB,IAAI,QAAQ,EAAE,CAAA;CACpC;AAID,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAA;AAE7E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,EAAE,WAAW,EAAE,CAAA;IACpB,WAAW,EAAE,KAAK,EAAE,CAAA;IACpB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IACtC,2CAA2C;IAC3C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;IACtC,mCAAmC;IACnC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAChC,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB;;;;;;OAMG;IACH,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,wBAAwB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;AAOhF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAQ;gBAEV,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM;IAKtD,oEAAoE;IAC9D,YAAY,CAChB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,wBAAwB,CAAC;IAIpC,uDAAuD;IACjD,wBAAwB,CAC5B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,gBAAgB,CAAC,EAAE,wBAAwB,EAC3C,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,wBAAwB,CAAC;IA+GpC,sEAAsE;IAChE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIvF,yEAAyE;IACzE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAe5D,6CAA6C;IAC7C,sBAAsB,IAAI,MAAM,EAAE;YAIpB,WAAW;CAoD1B;AA8CD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,WAAW,EAAE,cAAc,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;IACpC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;IACtC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;CACjD;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAC5B,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,wBAAwB,GAC9B,gBAAgB,CAmClB"}
|
|
@@ -29,6 +29,7 @@ export class PolyglotAnalyzer {
|
|
|
29
29
|
languages: new Map(),
|
|
30
30
|
skippedFiles: [],
|
|
31
31
|
partialFiles: [],
|
|
32
|
+
parseErrorCount: 0,
|
|
32
33
|
};
|
|
33
34
|
const workerPoolSize = Number(process.env.ANALYZER_WORKER_POOL_SIZE) || DEFAULT_WORKER_POOL_SIZE;
|
|
34
35
|
const limit = pLimit(workerPoolSize);
|
|
@@ -91,6 +92,7 @@ export class PolyglotAnalyzer {
|
|
|
91
92
|
}));
|
|
92
93
|
}
|
|
93
94
|
await Promise.allSettled(tasks);
|
|
95
|
+
result.parseErrorCount = errorCount;
|
|
94
96
|
if (totalFlagsFound > 0 || errorCount > 0) {
|
|
95
97
|
this.logger.info('Polyglot analysis completed', {
|
|
96
98
|
totalFiles: filesAnalyzed,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polyglot-analyzer.js","sourceRoot":"","sources":["../../src/detection/polyglot-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,MAAM,MAAM,SAAS,CAAA;AAI5B,MAAM,wBAAwB,GAAG,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"polyglot-analyzer.js","sourceRoot":"","sources":["../../src/detection/polyglot-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/detection/tree-sitter/engine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAgB,MAAM,iBAAiB,CAAA;AAMlF;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,mBAAmB,EAAE,GAC/B,OAAO,CAAC,WAAW,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/detection/tree-sitter/engine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAgB,MAAM,iBAAiB,CAAA;AAMlF;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,mBAAmB,EAAE,GAC/B,OAAO,CAAC,WAAW,EAAE,CAAC,CAkJxB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { deduplicateFlags, isValidFlagKey } from '../helpers.js';
|
|
1
|
+
import { deduplicateFlags, detectDestructuredHookFlags, isValidFlagKey } from '../helpers.js';
|
|
2
2
|
import { getImportPattern } from '../interface.js';
|
|
3
3
|
import { getParser } from './parser-cache.js';
|
|
4
4
|
import { getQuery, iterateCalls, getArgument, extractStringLiteral } from './query-runner.js';
|
|
@@ -11,40 +11,69 @@ import { resolveConstStringGo, resolveConstStringTS } from './const-resolver.js'
|
|
|
11
11
|
* Custom providers (no importPattern) always scan.
|
|
12
12
|
*/
|
|
13
13
|
export async function detectFlagsWithTreeSitter(filename, content, language, providers) {
|
|
14
|
-
const activeProviders =
|
|
14
|
+
const activeProviders = [];
|
|
15
|
+
for (const p of providers) {
|
|
15
16
|
if (!p.enabled)
|
|
16
|
-
|
|
17
|
+
continue;
|
|
17
18
|
if (p.methods.length === 0)
|
|
18
|
-
|
|
19
|
+
continue;
|
|
19
20
|
const importPat = getImportPattern(p);
|
|
20
|
-
if (!importPat)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
if (!importPat) {
|
|
22
|
+
activeProviders.push({ provider: p, confidence: 'high' });
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
// Import gate: primary pattern OR any declared alias passes the
|
|
26
|
+
// import check (e.g. legacy `launchdarkly-react-client-sdk` aliases
|
|
27
|
+
// the scoped `@launchdarkly/react-client-sdk`).
|
|
28
|
+
const importPatterns = [importPat, ...(p.importAliases ?? [])];
|
|
29
|
+
if (importPatterns.some((pat) => content.includes(pat))) {
|
|
30
|
+
activeProviders.push({ provider: p, confidence: 'high' });
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const runtimeHit = (p.runtimeSymbols ?? []).some((sym) => content.includes(sym));
|
|
34
|
+
if (runtimeHit) {
|
|
35
|
+
activeProviders.push({ provider: p, confidence: 'medium' });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
24
38
|
if (activeProviders.length === 0)
|
|
25
39
|
return [];
|
|
26
40
|
const methodLookup = new Map();
|
|
27
|
-
for (const provider of activeProviders) {
|
|
41
|
+
for (const { provider, confidence } of activeProviders) {
|
|
28
42
|
for (const method of provider.methods) {
|
|
29
43
|
if (method.flagKeyIndex < 0)
|
|
30
44
|
continue;
|
|
31
45
|
const list = methodLookup.get(method.name) ?? [];
|
|
32
|
-
list.push({ provider, method });
|
|
46
|
+
list.push({ provider, method, confidence });
|
|
33
47
|
methodLookup.set(method.name, list);
|
|
34
48
|
}
|
|
35
49
|
}
|
|
36
|
-
|
|
50
|
+
// useFlagsHook providers (LaunchDarkly React SDK) may carry only
|
|
51
|
+
// negative-index methods documenting non-positional surfaces; for them
|
|
52
|
+
// the positional pipeline contributes nothing and methodLookup is empty.
|
|
53
|
+
// Defer the early return until AFTER the destructure pass so those
|
|
54
|
+
// providers still emit their hook-based flags.
|
|
55
|
+
const hookOnlyProviders = activeProviders.filter(({ provider }) => provider.useFlagsHook && methodLookup.size === 0);
|
|
56
|
+
if (methodLookup.size === 0 && hookOnlyProviders.length === 0)
|
|
37
57
|
return [];
|
|
58
|
+
const flags = [];
|
|
59
|
+
if (methodLookup.size === 0) {
|
|
60
|
+
// Skip the parser/query setup — there's nothing for tree-sitter to do,
|
|
61
|
+
// but we still need to run the hook-only destructure pass.
|
|
62
|
+
for (const { provider, confidence } of hookOnlyProviders) {
|
|
63
|
+
const hookFlags = detectDestructuredHookFlags(filename, content, language, getImportPattern(provider) || provider.name, provider.useFlagsHook, confidence);
|
|
64
|
+
flags.push(...hookFlags);
|
|
65
|
+
}
|
|
66
|
+
return deduplicateFlags(flags);
|
|
67
|
+
}
|
|
38
68
|
const parser = await getParser(language);
|
|
39
69
|
// parser.parse() always returns a tree for valid content; non-null assert is safe.
|
|
40
70
|
const tree = parser.parse(content);
|
|
41
71
|
const query = await getQuery(language);
|
|
42
|
-
const flags = [];
|
|
43
72
|
for (const { callNode, methodName, argsNode } of iterateCalls(tree, query)) {
|
|
44
73
|
const matches = methodLookup.get(methodName);
|
|
45
74
|
if (!matches)
|
|
46
75
|
continue;
|
|
47
|
-
for (const { provider, method } of matches) {
|
|
76
|
+
for (const { provider, method, confidence } of matches) {
|
|
48
77
|
const arg = getArgument(argsNode, method.flagKeyIndex);
|
|
49
78
|
if (!arg)
|
|
50
79
|
continue;
|
|
@@ -65,15 +94,33 @@ export async function detectFlagsWithTreeSitter(filename, content, language, pro
|
|
|
65
94
|
}
|
|
66
95
|
if (!flagKey || !isValidFlagKey(flagKey))
|
|
67
96
|
continue;
|
|
68
|
-
|
|
97
|
+
const flag = {
|
|
69
98
|
name: flagKey,
|
|
70
99
|
filePath: filename,
|
|
71
100
|
lineNumber: callNode.startPosition.row + 1,
|
|
72
101
|
language,
|
|
73
102
|
provider: getImportPattern(provider) || provider.name,
|
|
74
|
-
}
|
|
103
|
+
};
|
|
104
|
+
if (confidence !== 'high')
|
|
105
|
+
flag.confidence = confidence;
|
|
106
|
+
flags.push(flag);
|
|
75
107
|
}
|
|
76
108
|
}
|
|
109
|
+
// useFlagsHook: tree-sitter's positional-arg query can't reach the
|
|
110
|
+
// destructure-from-call shape that the React SDK uses. Fall through to
|
|
111
|
+
// the same regex-based destructure helper as the non-tree-sitter path
|
|
112
|
+
// so both engines emit the same flag set for `const { x, y } = useFlags()`.
|
|
113
|
+
for (const { provider, confidence } of activeProviders) {
|
|
114
|
+
if (!provider.useFlagsHook)
|
|
115
|
+
continue;
|
|
116
|
+
const hookFlags = detectDestructuredHookFlags(filename, content, language,
|
|
117
|
+
// Same provider-label fallback as the early-out path above; tested
|
|
118
|
+
// there. Marking only this duplicate ignored to satisfy the 100%
|
|
119
|
+
// branch gate without losing real coverage signal.
|
|
120
|
+
/* v8 ignore next */
|
|
121
|
+
getImportPattern(provider) || provider.name, provider.useFlagsHook, confidence);
|
|
122
|
+
flags.push(...hookFlags);
|
|
123
|
+
}
|
|
77
124
|
return deduplicateFlags(flags);
|
|
78
125
|
}
|
|
79
126
|
//# sourceMappingURL=engine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/detection/tree-sitter/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/detection/tree-sitter/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAKlD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAC7F,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAEhF;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,QAAgB,EAChB,OAAe,EACf,QAAkB,EAClB,SAAgC;IAchC,MAAM,eAAe,GAAqB,EAAE,CAAA;IAC5C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,SAAQ;QACxB,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,SAAQ;QACpC,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;QACrC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,eAAe,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;YACzD,SAAQ;QACV,CAAC;QACD,gEAAgE;QAChE,oEAAoE;QACpE,gDAAgD;QAChD,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAA;QAC9D,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACxD,eAAe,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;YACzD,SAAQ;QACV,CAAC;QACD,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;QAChF,IAAI,UAAU,EAAE,CAAC;YACf,eAAe,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC7D,CAAC;IACH,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAE3C,MAAM,YAAY,GAAG,IAAI,GAAG,EAGzB,CAAA;IACH,KAAK,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,eAAe,EAAE,CAAC;QACvD,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC;gBAAE,SAAQ;YACrC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;YAChD,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;YAC3C,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,uEAAuE;IACvE,yEAAyE;IACzE,mEAAmE;IACnE,+CAA+C;IAC/C,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAC9C,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,CACnE,CAAA;IACD,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAExE,MAAM,KAAK,GAAkB,EAAE,CAAA;IAE/B,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC5B,uEAAuE;QACvE,2DAA2D;QAC3D,KAAK,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,iBAAiB,EAAE,CAAC;YACzD,MAAM,SAAS,GAAG,2BAA2B,CAC3C,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,gBAAgB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,IAAI,EAC3C,QAAQ,CAAC,YAAa,EACtB,UAAU,CACX,CAAA;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;QAC1B,CAAC;QACD,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAA;IACxC,mFAAmF;IACnF,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAE,CAAA;IAEnC,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAEtC,KAAK,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QAC3E,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAC5C,IAAI,CAAC,OAAO;YAAE,SAAQ;QAEtB,KAAK,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,OAAO,EAAE,CAAC;YACvD,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;YACtD,IAAI,CAAC,GAAG;gBAAE,SAAQ;YAElB,IAAI,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAA;YAEvC,wEAAwE;YACxE,wEAAwE;YACxE,wEAAwE;YACxE,kEAAkE;YAClE,mFAAmF;YACnF,mDAAmD;YACnD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;oBAC3D,OAAO,GAAG,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACpD,CAAC;qBAAM,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;oBAC7B,OAAO,GAAG,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACpD,CAAC;YACH,CAAC;YAED,IAAI,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;gBAAE,SAAQ;YAElD,MAAM,IAAI,GAAgB;gBACxB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;gBAC1C,QAAQ;gBACR,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,IAAI;aACtD,CAAA;YACD,IAAI,UAAU,KAAK,MAAM;gBAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;YACvD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,uEAAuE;IACvE,sEAAsE;IACtE,4EAA4E;IAC5E,KAAK,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,eAAe,EAAE,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,YAAY;YAAE,SAAQ;QACpC,MAAM,SAAS,GAAG,2BAA2B,CAC3C,QAAQ,EACR,OAAO,EACP,QAAQ;QACR,mEAAmE;QACnE,iEAAiE;QACjE,mDAAmD;QACnD,oBAAoB;QACpB,gBAAgB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,IAAI,EAC3C,QAAQ,CAAC,YAAY,EACrB,UAAU,CACX,CAAA;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;IAC1B,CAAC;IAED,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAA;AAChC,CAAC"}
|
|
@@ -4,6 +4,26 @@ import type { Language } from '../interface.js';
|
|
|
4
4
|
* inside `getRequire` are unreachable in any normal vitest context (both
|
|
5
5
|
* `import.meta.url` and `__filename` are always defined). */
|
|
6
6
|
export declare function noResolutionBase(): Error;
|
|
7
|
+
/**
|
|
8
|
+
* @internal — exported for unit testing.
|
|
9
|
+
*
|
|
10
|
+
* Override emscripten's default `printErr` (which is `console.error`) so the
|
|
11
|
+
* WASM abort path doesn't dump `Aborted(<reason>)` straight to the user's
|
|
12
|
+
* terminal. When tree-sitter hits a pathological file (e.g. a 187 KB Python
|
|
13
|
+
* file blowing the grammar's recursion budget), emscripten BOTH calls
|
|
14
|
+
* `printErr(...)` AND throws a `WebAssembly.RuntimeError` synchronously
|
|
15
|
+
* (see web-tree-sitter's `tree-sitter.cjs` `abort()`). The throw is caught
|
|
16
|
+
* by `PolyglotAnalyzer.analyzeFile`'s per-file try/catch and surfaced via
|
|
17
|
+
* `logParseErrorSample`, so the `printErr` call is purely duplicative — but
|
|
18
|
+
* on a large polyglot scan it can emit thousands of `Aborted()` lines,
|
|
19
|
+
* indistinguishable to the user from a hard crash.
|
|
20
|
+
*
|
|
21
|
+
* Set `FLAGSHARK_WASM_STDERR=1` to restore the default (useful for
|
|
22
|
+
* debugging a packaging regression where the WASM fails to load).
|
|
23
|
+
*/
|
|
24
|
+
export declare function getEmscriptenInitOptions(): {
|
|
25
|
+
printErr: (text: string) => void;
|
|
26
|
+
} | undefined;
|
|
7
27
|
export declare function getParser(lang: Language): Promise<Parser>;
|
|
8
28
|
/** @internal — for tests only */
|
|
9
29
|
export declare function _resetParserCacheForTests(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser-cache.d.ts","sourceRoot":"","sources":["../../../src/detection/tree-sitter/parser-cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkC,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAIxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAgC/C;;6DAE6D;AAC7D,wBAAgB,gBAAgB,IAAI,KAAK,CAQxC;
|
|
1
|
+
{"version":3,"file":"parser-cache.d.ts","sourceRoot":"","sources":["../../../src/detection/tree-sitter/parser-cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkC,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAIxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAgC/C;;6DAE6D;AAC7D,wBAAgB,gBAAgB,IAAI,KAAK,CAQxC;AAaD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,IAAI;IAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAAG,SAAS,CAQ3F;AAwBD,wBAAsB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CA0B/D;AAED,iCAAiC;AACjC,wBAAgB,yBAAyB,IAAI,IAAI,CAIhD"}
|
|
@@ -43,9 +43,40 @@ const WASM_RESOLUTION = {
|
|
|
43
43
|
const parsers = new Map();
|
|
44
44
|
const inFlight = new Map();
|
|
45
45
|
let initPromise = null;
|
|
46
|
+
/**
|
|
47
|
+
* @internal — exported for unit testing.
|
|
48
|
+
*
|
|
49
|
+
* Override emscripten's default `printErr` (which is `console.error`) so the
|
|
50
|
+
* WASM abort path doesn't dump `Aborted(<reason>)` straight to the user's
|
|
51
|
+
* terminal. When tree-sitter hits a pathological file (e.g. a 187 KB Python
|
|
52
|
+
* file blowing the grammar's recursion budget), emscripten BOTH calls
|
|
53
|
+
* `printErr(...)` AND throws a `WebAssembly.RuntimeError` synchronously
|
|
54
|
+
* (see web-tree-sitter's `tree-sitter.cjs` `abort()`). The throw is caught
|
|
55
|
+
* by `PolyglotAnalyzer.analyzeFile`'s per-file try/catch and surfaced via
|
|
56
|
+
* `logParseErrorSample`, so the `printErr` call is purely duplicative — but
|
|
57
|
+
* on a large polyglot scan it can emit thousands of `Aborted()` lines,
|
|
58
|
+
* indistinguishable to the user from a hard crash.
|
|
59
|
+
*
|
|
60
|
+
* Set `FLAGSHARK_WASM_STDERR=1` to restore the default (useful for
|
|
61
|
+
* debugging a packaging regression where the WASM fails to load).
|
|
62
|
+
*/
|
|
63
|
+
export function getEmscriptenInitOptions() {
|
|
64
|
+
if (process.env.FLAGSHARK_WASM_STDERR === '1')
|
|
65
|
+
return undefined;
|
|
66
|
+
return {
|
|
67
|
+
printErr: () => {
|
|
68
|
+
/* swallowed; the same payload is preserved on the thrown
|
|
69
|
+
WebAssembly.RuntimeError and captured in parseErrors. */
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
46
73
|
async function ensureInit() {
|
|
47
74
|
if (!initPromise) {
|
|
48
|
-
|
|
75
|
+
const opts = getEmscriptenInitOptions();
|
|
76
|
+
// Parser.init's signature wants a full EmscriptenModule, but every field
|
|
77
|
+
// bar `printErr` is populated by web-tree-sitter itself. Cast through
|
|
78
|
+
// unknown so we can pass just the override.
|
|
79
|
+
initPromise = Parser.init(opts);
|
|
49
80
|
}
|
|
50
81
|
await initPromise;
|
|
51
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser-cache.js","sourceRoot":"","sources":["../../../src/detection/tree-sitter/parser-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAW9C,4EAA4E;AAC5E,8EAA8E;AAC9E,8EAA8E;AAC9E,sEAAsE;AACtE,IAAI,QAAQ,GAA4C,IAAI,CAAA;AAC5D,SAAS,UAAU;IACjB,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC7B,sEAAsE;IACtE,sEAAsE;IACtE,2EAA2E;IAC3E,6CAA6C;IAC7C,MAAM,OAAO,GAAI,MAAM,CAAC,IAA2C,CAAC,GAAG,CAAA;IACvE,wEAAwE;IACxE,wEAAwE;IACxE,sDAAsD;IACtD,qEAAqE;IACrE,qCAAqC;IACrC,oBAAoB;IACpB,MAAM,WAAW,GAAG,OAAO,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9E,QAAQ,GAAG,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAC9E,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;6DAE6D;AAC7D,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,KAAK,CACd,6EAA6E;QAC3E,6EAA6E;QAC7E,yEAAyE;QACzE,wEAAwE;QACxE,kBAAkB,CACrB,CAAA;AACH,CAAC;AAED,MAAM,eAAe,GAAsC;IACzD,UAAU,EAAE,oDAAoD;IAChE,UAAU,EAAE,oDAAoD;IAChE,EAAE,EAAE,oCAAoC;IACxC,MAAM,EAAE,4CAA4C;CACrD,CAAA;AAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAA;AAC3C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAA;AACrD,IAAI,WAAW,GAAyB,IAAI,CAAA;AAE5C,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,MAAM,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"parser-cache.js","sourceRoot":"","sources":["../../../src/detection/tree-sitter/parser-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAW9C,4EAA4E;AAC5E,8EAA8E;AAC9E,8EAA8E;AAC9E,sEAAsE;AACtE,IAAI,QAAQ,GAA4C,IAAI,CAAA;AAC5D,SAAS,UAAU;IACjB,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC7B,sEAAsE;IACtE,sEAAsE;IACtE,2EAA2E;IAC3E,6CAA6C;IAC7C,MAAM,OAAO,GAAI,MAAM,CAAC,IAA2C,CAAC,GAAG,CAAA;IACvE,wEAAwE;IACxE,wEAAwE;IACxE,sDAAsD;IACtD,qEAAqE;IACrE,qCAAqC;IACrC,oBAAoB;IACpB,MAAM,WAAW,GAAG,OAAO,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9E,QAAQ,GAAG,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAC9E,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;6DAE6D;AAC7D,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,KAAK,CACd,6EAA6E;QAC3E,6EAA6E;QAC7E,yEAAyE;QACzE,wEAAwE;QACxE,kBAAkB,CACrB,CAAA;AACH,CAAC;AAED,MAAM,eAAe,GAAsC;IACzD,UAAU,EAAE,oDAAoD;IAChE,UAAU,EAAE,oDAAoD;IAChE,EAAE,EAAE,oCAAoC;IACxC,MAAM,EAAE,4CAA4C;CACrD,CAAA;AAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAA;AAC3C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAA;AACrD,IAAI,WAAW,GAAyB,IAAI,CAAA;AAE5C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,wBAAwB;IACtC,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG;QAAE,OAAO,SAAS,CAAA;IAC/D,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE;YACb;uEAC2D;QAC7D,CAAC;KACF,CAAA;AACH,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,wBAAwB,EAAE,CAAA;QACvC,yEAAyE;QACzE,sEAAsE;QACtE,4CAA4C;QAC5C,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAoD,CAAC,CAAA;IACjF,CAAC;IACD,MAAM,WAAW,CAAA;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,6EAA6E;IAC7E,gEAAgE;IAChE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAA;IAChD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAA;QACnC,OAAO,GAAG,SAAS,IAAI,IAAI,EAAE,CAAA;IAC/B,CAAC;IACD,OAAO,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc;IAC5C,MAAM,UAAU,EAAE,CAAA;IAElB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAChC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAClC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAA;IAE3B,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,mDAAmD,IAAI,EAAE,CAAC,CAAA;IAC5E,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE;QACvB,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtD,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAA;QAC3B,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACzB,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACrB,OAAO,MAAM,CAAA;IACf,CAAC,CAAC,EAAE,CAAA;IAEJ,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACxB,OAAO,IAAI,CAAA;AACb,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,yBAAyB;IACvC,OAAO,CAAC,KAAK,EAAE,CAAA;IACf,QAAQ,CAAC,KAAK,EAAE,CAAA;IAChB,WAAW,GAAG,IAAI,CAAA;AACpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/output/json.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/output/json.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAmErF"}
|
package/dist/output/json.js
CHANGED
|
@@ -16,8 +16,24 @@ export function formatJson(result, options) {
|
|
|
16
16
|
provider: sf.provider,
|
|
17
17
|
stale: true,
|
|
18
18
|
severity: flagSeverity,
|
|
19
|
+
// `confidence` is a detection-tier hint (high | medium | low). The
|
|
20
|
+
// legacy `severity` field above is about staleness signal severity
|
|
21
|
+
// — different axis entirely. Routing logic: an auto-merge cleanup
|
|
22
|
+
// PR pipeline should gate on (severity === 'error' OR confidence
|
|
23
|
+
// !== 'high') to surface anything that isn't a rock-solid match.
|
|
24
|
+
// Emitted as 'high' explicitly here (vs the detection-side omission)
|
|
25
|
+
// so downstream JSON consumers can branch on the field without
|
|
26
|
+
// needing to know about the "absent = high" convention.
|
|
27
|
+
confidence: sf.confidence ?? 'high',
|
|
19
28
|
signals: sf.signals.map((s) => ({ type: s.type, severity: s.severity, description: s.description })),
|
|
20
29
|
age: sf.age ?? null,
|
|
30
|
+
// Platform-side metadata when present. Omitted entirely when
|
|
31
|
+
// absent so JSON consumers can detect "no platform integration
|
|
32
|
+
// configured" vs "platform configured but flag had no metadata"
|
|
33
|
+
// by whether the field is missing (former) or null/empty (latter).
|
|
34
|
+
...(sf.tags && sf.tags.length > 0 ? { tags: sf.tags } : {}),
|
|
35
|
+
...(sf.maintainer ? { maintainer: sf.maintainer } : {}),
|
|
36
|
+
...(sf.platformStatus ? { platformStatus: sf.platformStatus } : {}),
|
|
21
37
|
};
|
|
22
38
|
});
|
|
23
39
|
const errorCount = result.staleFlags.filter((sf) => sf.signals.some((s) => s.severity === 'error')).length;
|
|
@@ -25,7 +41,19 @@ export function formatJson(result, options) {
|
|
|
25
41
|
version: options.version,
|
|
26
42
|
totalFlags: result.totalFlags,
|
|
27
43
|
staleFlags: new Set(result.staleFlags.map((f) => f.name)).size,
|
|
44
|
+
// NB: `errorCount` here counts stale flags carrying an error-severity
|
|
45
|
+
// signal (e.g. missing-in-platform). It is NOT the parse-error count.
|
|
46
|
+
// The new `parseErrorCount` field below is the per-file parse failure
|
|
47
|
+
// count. Don't conflate them.
|
|
28
48
|
errorCount,
|
|
49
|
+
parseErrorCount: result.parseErrorCount ?? 0,
|
|
50
|
+
// Per-platform record of flag names that were detected in code AND
|
|
51
|
+
// exist in the platform but were marked permanent (LD's
|
|
52
|
+
// `temporary: false`). Excluded from staleFlags above; surfaced here
|
|
53
|
+
// so machine consumers (CI scripts, dashboards) can show "we know
|
|
54
|
+
// about these, we just don't think they're stale".
|
|
55
|
+
excludedPermanent: result.excludedPermanent ?? [],
|
|
56
|
+
permanentByPlatform: result.permanentByPlatform ?? {},
|
|
29
57
|
healthScore: result.healthScore,
|
|
30
58
|
detectedProviders: result.detectedProviders,
|
|
31
59
|
languages,
|
package/dist/output/json.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/output/json.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,UAAU,UAAU,CAAC,MAAsB,EAAE,OAA0B;IAC3E,MAAM,SAAS,GAA2B,EAAE,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAA;IAEzE,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACzC,MAAM,YAAY,GAAwB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;QAC9G,OAAO;YACL,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,IAAI,EAAE,EAAE,CAAC,QAAQ;YACjB,IAAI,EAAE,EAAE,CAAC,UAAU;YACnB,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACpG,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/output/json.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/output/markdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAKrD,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,2HAA2H;IAC3H,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAID,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,qBAAqB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/output/markdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAKrD,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,2HAA2H;IAC3H,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAID,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAgH7F"}
|
package/dist/output/markdown.js
CHANGED
|
@@ -35,6 +35,25 @@ export function formatMarkdown(result, options) {
|
|
|
35
35
|
}
|
|
36
36
|
// Health badge
|
|
37
37
|
body += `${emoji} **Health Score: ${result.healthScore}/100**\n\n`;
|
|
38
|
+
// Parse-error surfacing — mirrors text output. When a non-trivial slice of
|
|
39
|
+
// files failed to parse, the totals at the top of this comment are
|
|
40
|
+
// computed over an incomplete sample, and the cleanup PR reviewer needs
|
|
41
|
+
// to know. Pre-fix this was text-only, so the GitHub Action's PR comment
|
|
42
|
+
// — the most visible FlagShark surface — silently hid the "27% of files
|
|
43
|
+
// skipped" case the feature was originally designed to expose. See
|
|
44
|
+
// REPORT.md (PostHog 1.3.x repro) for the motivating scenario.
|
|
45
|
+
const parseErrorCount = result.parseErrorCount ?? 0;
|
|
46
|
+
if (parseErrorCount > 0 && result.filesScanned > 0) {
|
|
47
|
+
const pct = (parseErrorCount / result.filesScanned) * 100;
|
|
48
|
+
const rounded = Math.round(pct);
|
|
49
|
+
const pctStr = pct >= 1 ? ` (${rounded}%)` : '';
|
|
50
|
+
if (rounded > 5) {
|
|
51
|
+
body += `> ⚠️ **${parseErrorCount} of ${result.filesScanned} files${pctStr} couldn't be parsed** — results may be incomplete. The totals below are computed over the parseable subset only.\n\n`;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
body += `> _${parseErrorCount} file${parseErrorCount === 1 ? '' : 's'} couldn't be parsed — totals exclude them._\n\n`;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
38
57
|
// Compute error / warning split up front (used in both sections below)
|
|
39
58
|
const errorFlags = result.staleFlags.filter((f) => f.signals.some((s) => s.severity === 'error'));
|
|
40
59
|
const warningFlags = result.staleFlags.filter((f) => !f.signals.some((s) => s.severity === 'error'));
|
|
@@ -57,6 +76,18 @@ export function formatMarkdown(result, options) {
|
|
|
57
76
|
body += `| Providers | ${providerList} |\n`;
|
|
58
77
|
body += `| Scan mode | ${modeLabel} |\n`;
|
|
59
78
|
body += `| Scan time | ${result.scanDuration}ms |\n\n`;
|
|
79
|
+
// Surface permanent-flag exclusions before the stale-flag tables so a
|
|
80
|
+
// PR reviewer immediately sees which flags FlagShark consciously
|
|
81
|
+
// skipped (rather than wondering why a known-stale flag isn't here).
|
|
82
|
+
if (result.permanentByPlatform && Object.keys(result.permanentByPlatform).length > 0) {
|
|
83
|
+
for (const [platform, names] of Object.entries(result.permanentByPlatform)) {
|
|
84
|
+
if (names.length === 0)
|
|
85
|
+
continue;
|
|
86
|
+
const flagWord = names.length === 1 ? 'flag' : 'flags';
|
|
87
|
+
const inlineList = names.map((n) => `\`${n}\``).join(', ');
|
|
88
|
+
body += `> _${names.length} ${flagWord} excluded as permanent in ${platform}: ${inlineList}_\n\n`;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
60
91
|
// Warning-severity stale flags section
|
|
61
92
|
if (warningFlags.length > 0) {
|
|
62
93
|
const displayFlags = warningFlags.slice(0, maxStale);
|
|
@@ -86,7 +117,22 @@ function formatRow(flag, linkPrefix) {
|
|
|
86
117
|
const fileCell = linkPrefix
|
|
87
118
|
? `[${shortPath}:${flag.lineNumber}](${normalizePrefix(linkPrefix)}${shortPath}#L${flag.lineNumber})`
|
|
88
119
|
: `\`${shortPath}:${flag.lineNumber}\``;
|
|
89
|
-
|
|
120
|
+
// Platform-side metadata appended after the signal list (kept in the
|
|
121
|
+
// same cell so the table stays 4-column). Tags inline as backticks;
|
|
122
|
+
// maintainer prefixed with @ for natural-language flow. Status only
|
|
123
|
+
// surfaces non-default verdicts (not 'active' — already the norm).
|
|
124
|
+
const metaParts = [];
|
|
125
|
+
if (flag.tags && flag.tags.length > 0) {
|
|
126
|
+
metaParts.push(flag.tags.map((t) => `\`${t}\``).join(' '));
|
|
127
|
+
}
|
|
128
|
+
if (flag.maintainer) {
|
|
129
|
+
metaParts.push(`@${flag.maintainer}`);
|
|
130
|
+
}
|
|
131
|
+
if (flag.platformStatus && flag.platformStatus !== 'active') {
|
|
132
|
+
metaParts.push(`_status: ${flag.platformStatus}_`);
|
|
133
|
+
}
|
|
134
|
+
const meta = metaParts.length > 0 ? ` <br/> ${metaParts.join(' • ')}` : '';
|
|
135
|
+
return `\`${flag.name}\` | ${fileCell} | ${flag.age || 'unknown'} | ${signals}${meta}`;
|
|
90
136
|
}
|
|
91
137
|
function normalizePrefix(prefix) {
|
|
92
138
|
return prefix.endsWith('/') ? prefix : prefix + '/';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/output/markdown.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/output/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/output/text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGrD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,kFAAkF;IAClF,UAAU,EAAE,MAAM,CAAA;CACnB;
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/output/text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGrD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,kFAAkF;IAClF,UAAU,EAAE,MAAM,CAAA;CACnB;AA2ED,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAwIrF"}
|