@flagshark/core 1.3.0 โ†’ 1.4.0

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 (157) hide show
  1. package/README.md +124 -18
  2. package/dist/config/excluder.d.ts.map +1 -1
  3. package/dist/config/excluder.js +1 -0
  4. package/dist/config/excluder.js.map +1 -1
  5. package/dist/config/loader.js +1 -0
  6. package/dist/config/loader.js.map +1 -1
  7. package/dist/config/schema.d.ts +25 -12
  8. package/dist/config/schema.d.ts.map +1 -1
  9. package/dist/config/schema.js +1 -0
  10. package/dist/config/schema.js.map +1 -1
  11. package/dist/detection/detectors/cpp.d.ts.map +1 -1
  12. package/dist/detection/detectors/cpp.js +6 -2
  13. package/dist/detection/detectors/cpp.js.map +1 -1
  14. package/dist/detection/detectors/go.d.ts +2 -2
  15. package/dist/detection/detectors/go.d.ts.map +1 -1
  16. package/dist/detection/detectors/javascript.d.ts +2 -2
  17. package/dist/detection/detectors/javascript.d.ts.map +1 -1
  18. package/dist/detection/detectors/javascript.js +6 -2
  19. package/dist/detection/detectors/javascript.js.map +1 -1
  20. package/dist/detection/detectors/php.d.ts.map +1 -1
  21. package/dist/detection/detectors/php.js +6 -2
  22. package/dist/detection/detectors/php.js.map +1 -1
  23. package/dist/detection/detectors/python.d.ts +2 -2
  24. package/dist/detection/detectors/python.d.ts.map +1 -1
  25. package/dist/detection/detectors/python.js +6 -2
  26. package/dist/detection/detectors/python.js.map +1 -1
  27. package/dist/detection/detectors/ruby.d.ts.map +1 -1
  28. package/dist/detection/detectors/ruby.js +7 -4
  29. package/dist/detection/detectors/ruby.js.map +1 -1
  30. package/dist/detection/detectors/typescript.d.ts +2 -2
  31. package/dist/detection/detectors/typescript.d.ts.map +1 -1
  32. package/dist/detection/detectors/typescript.js +6 -2
  33. package/dist/detection/detectors/typescript.js.map +1 -1
  34. package/dist/detection/feature-flag.d.ts.map +1 -1
  35. package/dist/detection/helpers.d.ts.map +1 -1
  36. package/dist/detection/helpers.js +11 -1
  37. package/dist/detection/helpers.js.map +1 -1
  38. package/dist/detection/index.d.ts +1 -1
  39. package/dist/detection/index.d.ts.map +1 -1
  40. package/dist/detection/interface.d.ts +2 -0
  41. package/dist/detection/interface.d.ts.map +1 -1
  42. package/dist/detection/polyglot-analyzer.d.ts.map +1 -1
  43. package/dist/detection/polyglot-analyzer.js +50 -0
  44. package/dist/detection/polyglot-analyzer.js.map +1 -1
  45. package/dist/detection/tree-sitter/const-resolver.d.ts.map +1 -1
  46. package/dist/detection/tree-sitter/const-resolver.js +2 -2
  47. package/dist/detection/tree-sitter/const-resolver.js.map +1 -1
  48. package/dist/detection/tree-sitter/engine.d.ts.map +1 -1
  49. package/dist/detection/tree-sitter/engine.js +2 -14
  50. package/dist/detection/tree-sitter/engine.js.map +1 -1
  51. package/dist/detection/tree-sitter/module-url.d.ts +25 -0
  52. package/dist/detection/tree-sitter/module-url.d.ts.map +1 -0
  53. package/dist/detection/tree-sitter/module-url.js +38 -0
  54. package/dist/detection/tree-sitter/module-url.js.map +1 -0
  55. package/dist/detection/tree-sitter/parser-cache.d.ts +4 -0
  56. package/dist/detection/tree-sitter/parser-cache.d.ts.map +1 -1
  57. package/dist/detection/tree-sitter/parser-cache.js +30 -6
  58. package/dist/detection/tree-sitter/parser-cache.js.map +1 -1
  59. package/dist/detection/tree-sitter/queries-inline.d.ts +13 -0
  60. package/dist/detection/tree-sitter/queries-inline.d.ts.map +1 -0
  61. package/dist/detection/tree-sitter/queries-inline.js +17 -0
  62. package/dist/detection/tree-sitter/queries-inline.js.map +1 -0
  63. package/dist/detection/tree-sitter/query-runner.d.ts +14 -1
  64. package/dist/detection/tree-sitter/query-runner.d.ts.map +1 -1
  65. package/dist/detection/tree-sitter/query-runner.js +28 -11
  66. package/dist/detection/tree-sitter/query-runner.js.map +1 -1
  67. package/dist/detection/yaml-config.js +2 -2
  68. package/dist/detection/yaml-config.js.map +1 -1
  69. package/dist/index.d.ts +2 -0
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +4 -0
  72. package/dist/index.js.map +1 -1
  73. package/dist/output/csv.d.ts +9 -0
  74. package/dist/output/csv.d.ts.map +1 -0
  75. package/dist/output/csv.js +31 -0
  76. package/dist/output/csv.js.map +1 -0
  77. package/dist/output/index.d.ts +8 -0
  78. package/dist/output/index.d.ts.map +1 -0
  79. package/dist/output/index.js +8 -0
  80. package/dist/output/index.js.map +1 -0
  81. package/dist/output/json.d.ts +13 -0
  82. package/dist/output/json.d.ts.map +1 -0
  83. package/dist/output/json.js +43 -0
  84. package/dist/output/json.js.map +1 -0
  85. package/dist/output/markdown.d.ts +23 -0
  86. package/dist/output/markdown.d.ts.map +1 -0
  87. package/dist/output/markdown.js +94 -0
  88. package/dist/output/markdown.js.map +1 -0
  89. package/dist/output/sarif.d.ts +16 -0
  90. package/dist/output/sarif.d.ts.map +1 -0
  91. package/dist/output/sarif.js +104 -0
  92. package/dist/output/sarif.js.map +1 -0
  93. package/dist/output/select.d.ts +23 -0
  94. package/dist/output/select.d.ts.map +1 -0
  95. package/dist/output/select.js +36 -0
  96. package/dist/output/select.js.map +1 -0
  97. package/dist/output/shared.d.ts +13 -0
  98. package/dist/output/shared.d.ts.map +1 -0
  99. package/dist/output/shared.js +28 -0
  100. package/dist/output/shared.js.map +1 -0
  101. package/dist/output/text.d.ts +11 -0
  102. package/dist/output/text.d.ts.map +1 -0
  103. package/dist/output/text.js +104 -0
  104. package/dist/output/text.js.map +1 -0
  105. package/dist/providers/cache.d.ts +28 -0
  106. package/dist/providers/cache.d.ts.map +1 -0
  107. package/dist/providers/cache.js +84 -0
  108. package/dist/providers/cache.js.map +1 -0
  109. package/dist/providers/cross-reference.d.ts +19 -0
  110. package/dist/providers/cross-reference.d.ts.map +1 -0
  111. package/dist/providers/cross-reference.js +48 -0
  112. package/dist/providers/cross-reference.js.map +1 -0
  113. package/dist/providers/index.d.ts +5 -0
  114. package/dist/providers/index.d.ts.map +1 -0
  115. package/dist/providers/index.js +4 -0
  116. package/dist/providers/index.js.map +1 -0
  117. package/dist/providers/interface.d.ts +37 -0
  118. package/dist/providers/interface.d.ts.map +1 -0
  119. package/dist/providers/interface.js +2 -0
  120. package/dist/providers/interface.js.map +1 -0
  121. package/dist/providers/launchdarkly/client.d.ts +13 -0
  122. package/dist/providers/launchdarkly/client.d.ts.map +1 -0
  123. package/dist/providers/launchdarkly/client.js +44 -0
  124. package/dist/providers/launchdarkly/client.js.map +1 -0
  125. package/dist/providers/launchdarkly/definition.d.ts +22 -0
  126. package/dist/providers/launchdarkly/definition.d.ts.map +1 -0
  127. package/dist/providers/launchdarkly/definition.js +24 -0
  128. package/dist/providers/launchdarkly/definition.js.map +1 -0
  129. package/dist/providers/launchdarkly/errors.d.ts +5 -0
  130. package/dist/providers/launchdarkly/errors.d.ts.map +1 -0
  131. package/dist/providers/launchdarkly/errors.js +9 -0
  132. package/dist/providers/launchdarkly/errors.js.map +1 -0
  133. package/dist/providers/launchdarkly/types.d.ts +154 -0
  134. package/dist/providers/launchdarkly/types.d.ts.map +1 -0
  135. package/dist/providers/launchdarkly/types.js +17 -0
  136. package/dist/providers/launchdarkly/types.js.map +1 -0
  137. package/dist/providers/orchestrate.d.ts +24 -0
  138. package/dist/providers/orchestrate.d.ts.map +1 -0
  139. package/dist/providers/orchestrate.js +44 -0
  140. package/dist/providers/orchestrate.js.map +1 -0
  141. package/dist/providers/registry.d.ts +8 -0
  142. package/dist/providers/registry.d.ts.map +1 -0
  143. package/dist/providers/registry.js +15 -0
  144. package/dist/providers/registry.js.map +1 -0
  145. package/dist/scan-repo.d.ts +2 -0
  146. package/dist/scan-repo.d.ts.map +1 -1
  147. package/dist/scan-repo.js +15 -6
  148. package/dist/scan-repo.js.map +1 -1
  149. package/dist/staleness.d.ts +4 -1
  150. package/dist/staleness.d.ts.map +1 -1
  151. package/dist/staleness.js +15 -11
  152. package/dist/staleness.js.map +1 -1
  153. package/package.json +6 -2
  154. package/dist/detection/tree-sitter/query-builder.d.ts +0 -3
  155. package/dist/detection/tree-sitter/query-builder.d.ts.map +0 -1
  156. package/dist/detection/tree-sitter/query-builder.js +0 -7
  157. package/dist/detection/tree-sitter/query-builder.js.map +0 -1
@@ -1,15 +1,39 @@
1
1
  import { createRequire } from 'node:module';
2
2
  import { Language as TreeSitterLanguage, Parser } from 'web-tree-sitter';
3
- // Lazily created so that bundled CJS environments (where import.meta.url is
4
- // unavailable) don't crash at module initialisation โ€” we only need require_
5
- // when FLAGSHARK_WASM_DIR is NOT set (i.e. normal npm / dev usage).
3
+ import { getModuleUrl } from './module-url.js';
4
+ // Lazily created so that bundled environments where neither import.meta.url
5
+ // nor __filename is available (edge runtimes, browser bundles) don't crash at
6
+ // module initialisation -- we only call createRequire when FLAGSHARK_WASM_DIR
7
+ // is NOT set (i.e. normal npm / dev usage and standard Node bundles).
6
8
  let require_ = null;
7
9
  function getRequire() {
8
- if (!require_) {
9
- require_ = createRequire(import.meta.url);
10
- }
10
+ if (require_)
11
+ return require_;
12
+ // Native ESM has `import.meta.url`. Native CJS has `__filename` (as a
13
+ // module-scoped local, hence the `typeof` access). esbuild's ESM->CJS
14
+ // output stubs `import.meta` to `{}` but preserves `__filename` -- without
15
+ // that fallback every grammar lookup throws.
16
+ const metaUrl = import.meta.url;
17
+ // The truthy branch of this ternary is unreachable under vitest (always
18
+ // ESM, so `__filename` is undeclared and `typeof` returns 'undefined').
19
+ // End-to-end coverage of the CJS-bundle path lives in
20
+ // parser-cache-cjs-bundle.test.ts, which actually bundles the source
21
+ // ESM->CJS and exercises the result.
22
+ /* c8 ignore next */
23
+ const cjsFilename = typeof __filename !== 'undefined' ? __filename : undefined;
24
+ require_ = createRequire(getModuleUrl(metaUrl, cjsFilename, noResolutionBase));
11
25
  return require_;
12
26
  }
27
+ /** @internal Factored out for direct unit testing -- inline `throw` blocks
28
+ * inside `getRequire` are unreachable in any normal vitest context (both
29
+ * `import.meta.url` and `__filename` are always defined). */
30
+ export function noResolutionBase() {
31
+ return new Error('parser-cache: cannot resolve tree-sitter grammars. Neither import.meta.url ' +
32
+ 'nor __filename is available -- this usually means @flagshark/core is being ' +
33
+ 'bundled into a non-Node target. Set the FLAGSHARK_WASM_DIR environment ' +
34
+ 'variable to a directory containing tree-sitter-{typescript,javascript,' +
35
+ 'go,python}.wasm.');
36
+ }
13
37
  const WASM_RESOLUTION = {
14
38
  typescript: 'tree-sitter-typescript/tree-sitter-typescript.wasm',
15
39
  javascript: 'tree-sitter-javascript/tree-sitter-javascript.wasm',
@@ -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;AAIxE,4EAA4E;AAC5E,4EAA4E;AAC5E,oEAAoE;AACpE,IAAI,QAAQ,GAA4C,IAAI,CAAA;AAC5D,SAAS,UAAU;IACjB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC3C,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,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,EAAE,CAAA;IAC7B,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
+ {"version":3,"file":"parser-cache.js","sourceRoot":"","sources":["../../../src/detection/tree-sitter/parser-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * GENERATED FILE -- do not edit by hand.
3
+ *
4
+ * Source: src/detection/tree-sitter/queries/*.scm
5
+ * Regenerate: `bun run generate:queries` (also runs as part of `bun run build`).
6
+ *
7
+ * Inlining queries removes the runtime filesystem dependency that broke under
8
+ * ESM->CJS bundling (see retrospective in parser-cache.ts).
9
+ */
10
+ import type { Language } from '../interface.js';
11
+ export declare const INLINE_QUERIES: Partial<Record<Language, string>>;
12
+ export declare const INLINE_QUERY_LANGUAGES: Language[];
13
+ //# sourceMappingURL=queries-inline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries-inline.d.ts","sourceRoot":"","sources":["../../../src/detection/tree-sitter/queries-inline.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE/C,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAK5D,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,QAAQ,EAA8C,CAAA"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * GENERATED FILE -- do not edit by hand.
3
+ *
4
+ * Source: src/detection/tree-sitter/queries/*.scm
5
+ * Regenerate: `bun run generate:queries` (also runs as part of `bun run build`).
6
+ *
7
+ * Inlining queries removes the runtime filesystem dependency that broke under
8
+ * ESM->CJS bundling (see retrospective in parser-cache.ts).
9
+ */
10
+ export const INLINE_QUERIES = {
11
+ "go": "; Method call on a receiver: client.BoolVariation(...)\n(call_expression\n function: (selector_expression\n operand: (_) @receiver\n field: (field_identifier) @method)\n arguments: (argument_list) @args) @call\n\n; Bare function call: BoolVariation(...)\n(call_expression\n function: (identifier) @method\n arguments: (argument_list) @args) @call\n",
12
+ "javascript": "; tree-sitter-javascript's grammar uses identical node names to typescript\n; for these call shapes โ€” we duplicate the file for clarity even though the\n; content is identical.\n\n(call_expression\n function: (member_expression\n object: (_) @receiver\n property: (property_identifier) @method)\n arguments: (arguments) @args) @call\n\n(call_expression\n function: (identifier) @method\n arguments: (arguments) @args) @call\n",
13
+ "python": "; Method call: client.variation(...)\n(call\n function: (attribute\n object: (_) @receiver\n attribute: (identifier) @method)\n arguments: (argument_list) @args) @call\n\n; Bare function call: variation(...)\n(call\n function: (identifier) @method\n arguments: (argument_list) @args) @call\n",
14
+ "typescript": "; Match method-style calls: <receiver>.<method>(<args>)\n(call_expression\n function: (member_expression\n object: (_) @receiver\n property: (property_identifier) @method)\n arguments: (arguments) @args) @call\n\n; Match free-function calls: <method>(<args>)\n(call_expression\n function: (identifier) @method\n arguments: (arguments) @args) @call\n",
15
+ };
16
+ export const INLINE_QUERY_LANGUAGES = ["go", "javascript", "python", "typescript"];
17
+ //# sourceMappingURL=queries-inline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries-inline.js","sourceRoot":"","sources":["../../../src/detection/tree-sitter/queries-inline.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,CAAC,MAAM,cAAc,GAAsC;IAC/D,IAAI,EAAE,wWAAwW;IAC9W,YAAY,EAAE,qbAAqb;IACnc,QAAQ,EAAE,+SAA+S;IACzT,YAAY,EAAE,yWAAyW;CACxX,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAe,CAAC,IAAI,EAAC,YAAY,EAAC,QAAQ,EAAC,YAAY,CAAC,CAAA"}
@@ -1,7 +1,20 @@
1
1
  import { Query } from 'web-tree-sitter';
2
2
  import type { Node, Tree } from 'web-tree-sitter';
3
3
  import type { Language } from '../interface.js';
4
- /** Loads the .scm query text for a language, relative to this module. */
4
+ /**
5
+ * Loads the .scm query text for a language.
6
+ *
7
+ * Default path returns the inlined query strings shipped with the package.
8
+ * Inlining removes the filesystem dependency that broke under ESM->CJS
9
+ * bundling (the prior implementation called `new URL('./queries/...',
10
+ * import.meta.url)` which silently threw `Invalid URL` once bundlers stubbed
11
+ * `import.meta` to `{}` -- see parser-cache.ts retrospective).
12
+ *
13
+ * `FLAGSHARK_QUERIES_DIR` stays as an escape hatch for consumers who need to
14
+ * override the bundled queries at runtime (custom detection rules, vendored
15
+ * variants). When set, it reads `${dir}/${lang}.scm` and skips the inline
16
+ * lookup entirely.
17
+ */
5
18
  export declare function loadQueryText(lang: Language): string;
6
19
  export declare function getQuery(lang: Language): Promise<Query>;
7
20
  export interface MatchedCall {
@@ -1 +1 @@
1
- {"version":3,"file":"query-runner.d.ts","sourceRoot":"","sources":["../../../src/detection/tree-sitter/query-runner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAG/C,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CASpD;AAKD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAmB7D;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,IAAI,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,IAAI,CAAA;CACf;AAED,0EAA0E;AAC1E,wBAAiB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAS9E;AAED,8DAA8D;AAC9D,wBAAgB,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAGtE;AAED,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAqB9D;AAED,4BAA4B;AAC5B,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
1
+ {"version":3,"file":"query-runner.d.ts","sourceRoot":"","sources":["../../../src/detection/tree-sitter/query-runner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAI/C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAcpD;AAKD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAkB7D;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,IAAI,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,IAAI,CAAA;CACf;AAED,0EAA0E;AAC1E,wBAAiB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAW9E;AAED,8DAA8D;AAC9D,wBAAgB,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAGtE;AAED,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAsB9D;AAED,4BAA4B;AAC5B,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
@@ -1,17 +1,33 @@
1
1
  import { readFileSync } from 'node:fs';
2
- import { fileURLToPath } from 'node:url';
3
2
  import { Query } from 'web-tree-sitter';
4
3
  import { getParser } from './parser-cache.js';
5
- /** Loads the .scm query text for a language, relative to this module. */
4
+ import { INLINE_QUERIES } from './queries-inline.js';
5
+ /**
6
+ * Loads the .scm query text for a language.
7
+ *
8
+ * Default path returns the inlined query strings shipped with the package.
9
+ * Inlining removes the filesystem dependency that broke under ESM->CJS
10
+ * bundling (the prior implementation called `new URL('./queries/...',
11
+ * import.meta.url)` which silently threw `Invalid URL` once bundlers stubbed
12
+ * `import.meta` to `{}` -- see parser-cache.ts retrospective).
13
+ *
14
+ * `FLAGSHARK_QUERIES_DIR` stays as an escape hatch for consumers who need to
15
+ * override the bundled queries at runtime (custom detection rules, vendored
16
+ * variants). When set, it reads `${dir}/${lang}.scm` and skips the inline
17
+ * lookup entirely.
18
+ */
6
19
  export function loadQueryText(lang) {
7
- // In an Action bundle context, queries are vendored alongside the WASM grammars.
8
- // FLAGSHARK_QUERIES_DIR (set by the action entry) points at dist/queries/.
9
20
  const queriesDir = process.env.FLAGSHARK_QUERIES_DIR;
10
21
  if (queriesDir) {
11
22
  return readFileSync(`${queriesDir}/${lang}.scm`, 'utf-8');
12
23
  }
13
- const url = new URL(`./queries/${lang}.scm`, import.meta.url);
14
- return readFileSync(fileURLToPath(url), 'utf-8');
24
+ const inline = INLINE_QUERIES[lang];
25
+ if (inline === undefined) {
26
+ throw new Error(`query-runner: no inlined query for language "${lang}". This language ` +
27
+ `is not registered as a tier-1 tree-sitter detector. Did you mean to use ` +
28
+ `regex-based detection? See createDefaultRegistry().`);
29
+ }
30
+ return inline;
15
31
  }
16
32
  const queryCache = new Map();
17
33
  const inFlightQueries = new Map();
@@ -24,10 +40,8 @@ export async function getQuery(lang) {
24
40
  return pending;
25
41
  const load = (async () => {
26
42
  const parser = await getParser(lang);
27
- const tsLang = parser.language;
28
- if (!tsLang)
29
- throw new Error(`Parser for ${lang} has no language set`);
30
- const query = new Query(tsLang, loadQueryText(lang));
43
+ // parser.language is always set after getParser succeeds (setLanguage called in parser-cache.ts)
44
+ const query = new Query(parser.language, loadQueryText(lang));
31
45
  queryCache.set(lang, query);
32
46
  inFlightQueries.delete(lang);
33
47
  return query;
@@ -42,8 +56,10 @@ export function* iterateCalls(tree, query) {
42
56
  const call = captures.find((c) => c.name === 'call')?.node;
43
57
  const method = captures.find((c) => c.name === 'method')?.node;
44
58
  const args = captures.find((c) => c.name === 'args')?.node;
59
+ // All current .scm queries include @call, @method, @args in every pattern.
60
+ // Defensive: skip matches that are somehow missing a capture.
45
61
  if (!call || !method || !args)
46
- continue;
62
+ continue; // only fires if a query pattern is added without all captures
47
63
  yield { callNode: call, methodName: method.text, argsNode: args };
48
64
  }
49
65
  }
@@ -68,6 +84,7 @@ export function extractStringLiteral(node) {
68
84
  if (first === last && (first === '"' || first === "'" || first === '`')) {
69
85
  return text.slice(1, -1);
70
86
  }
87
+ /* v8 ignore next 2 -- Python triple-quoted flag literals; no fixture today but real engine behavior */
71
88
  if (text.startsWith('"""') && text.endsWith('"""'))
72
89
  return text.slice(3, -3);
73
90
  if (text.startsWith("'''") && text.endsWith("'''"))
@@ -1 +1 @@
1
- {"version":3,"file":"query-runner.js","sourceRoot":"","sources":["../../../src/detection/tree-sitter/query-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-runner.js","sourceRoot":"","sources":["../../../src/detection/tree-sitter/query-runner.ts"],"names":[],"mappings":"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"}
@@ -76,10 +76,10 @@ export function getMethodReturnType(method) {
76
76
  }
77
77
  /** Returns the effective default value index (-1 when unset). */
78
78
  export function getMethodDefaultValueIndex(method) {
79
- if ((method.default_value_index ?? 0) === 0 && !method.return_type) {
79
+ if (method.default_value_index === 0 && !method.return_type) {
80
80
  return -1;
81
81
  }
82
- return method.default_value_index ?? 0;
82
+ return method.default_value_index;
83
83
  }
84
84
  /** Checks if a provider applies to a given language. */
85
85
  export function providerAppliesToLanguage(provider, lang) {
@@ -1 +1 @@
1
- {"version":3,"file":"yaml-config.js","sourceRoot":"","sources":["../../src/detection/yaml-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"yaml-config.js","sourceRoot":"","sources":["../../src/detection/yaml-config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,4 +6,6 @@ export type { ScanOptions } from './scanner.js';
6
6
  export { scanRepo } from './scan-repo.js';
7
7
  export type { ScanRepoOptions, ScanRepoResult, ScanLogger } from './scan-repo.js';
8
8
  export * from './config/index.js';
9
+ export * from './output/index.js';
10
+ export * from './providers/index.js';
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAA;AAGpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGlF,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAG/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAGjF,cAAc,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAA;AAGpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGlF,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAG/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAGjF,cAAc,mBAAmB,CAAA;AAGjC,cAAc,mBAAmB,CAAA;AAGjC,cAAc,sBAAsB,CAAA"}
package/dist/index.js CHANGED
@@ -8,4 +8,8 @@ export { collectFiles } from './scanner.js';
8
8
  export { scanRepo } from './scan-repo.js';
9
9
  // Config module
10
10
  export * from './config/index.js';
11
+ // Output formatters
12
+ export * from './output/index.js';
13
+ // Platform integration providers
14
+ export * from './providers/index.js';
11
15
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,cAAc,sBAAsB,CAAA;AAEpC,+BAA+B;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGjD,gDAAgD;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,kCAAkC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAGzC,gBAAgB;AAChB,cAAc,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,cAAc,sBAAsB,CAAA;AAEpC,+BAA+B;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGjD,gDAAgD;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,kCAAkC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAGzC,gBAAgB;AAChB,cAAc,mBAAmB,CAAA;AAEjC,oBAAoB;AACpB,cAAc,mBAAmB,CAAA;AAEjC,iCAAiC;AACjC,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * RFC 4180-compliant CSV output. One row per stale flag.
3
+ *
4
+ * Header columns: flag, file, line, language, provider, signals, age
5
+ * Multi-value `signals` are joined with `; ` inside a single quoted cell.
6
+ */
7
+ import type { ScanRepoResult } from '../scan-repo.js';
8
+ export declare function formatCsv(result: ScanRepoResult): string;
9
+ //# sourceMappingURL=csv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../src/output/csv.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAUrD,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAqBxD"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * RFC 4180-compliant CSV output. One row per stale flag.
3
+ *
4
+ * Header columns: flag, file, line, language, provider, signals, age
5
+ * Multi-value `signals` are joined with `; ` inside a single quoted cell.
6
+ */
7
+ const HEADER = 'flag,file,line,language,provider,signals,age,severity';
8
+ /** RFC 4180 cell escape: wrap in quotes; double any internal quotes. */
9
+ function csvCell(value) {
10
+ const s = value == null ? '' : String(value);
11
+ return `"${s.replace(/"/g, '""')}"`;
12
+ }
13
+ export function formatCsv(result) {
14
+ const lines = [HEADER];
15
+ for (const flag of result.staleFlags) {
16
+ const signals = flag.signals.map((s) => s.type).join('; ');
17
+ const severity = flag.signals.some((s) => s.severity === 'error') ? 'error' : 'warning';
18
+ lines.push([
19
+ csvCell(flag.name),
20
+ csvCell(flag.filePath),
21
+ String(flag.lineNumber),
22
+ csvCell(flag.language),
23
+ csvCell(flag.provider),
24
+ csvCell(signals),
25
+ csvCell(flag.age),
26
+ csvCell(severity),
27
+ ].join(','));
28
+ }
29
+ return lines.join('\n') + '\n';
30
+ }
31
+ //# sourceMappingURL=csv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.js","sourceRoot":"","sources":["../../src/output/csv.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,GAAG,uDAAuD,CAAA;AAEtE,wEAAwE;AACxE,SAAS,OAAO,CAAC,KAAkC;IACjD,MAAM,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC5C,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAsB;IAC9C,MAAM,KAAK,GAAa,CAAC,MAAM,CAAC,CAAA;IAEhC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1D,MAAM,QAAQ,GAAG,IAAI,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;QACvF,KAAK,CAAC,IAAI,CACR;YACE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YACtB,OAAO,CAAC,OAAO,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YACjB,OAAO,CAAC,QAAQ,CAAC;SAClB,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAA;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAChC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { formatText, type TextFormatOptions } from './text.js';
2
+ export { formatJson, type JsonFormatOptions } from './json.js';
3
+ export { formatMarkdown, type MarkdownFormatOptions } from './markdown.js';
4
+ export { formatCsv } from './csv.js';
5
+ export { formatSarif, type SarifFormatOptions } from './sarif.js';
6
+ export { selectFormatter, type FormatName, type Formatter, type UnifiedFormatOptions } from './select.js';
7
+ export { healthEmoji, uniqueStaleCount, sarifLevel } from './shared.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACzG,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,8 @@
1
+ export { formatText } from './text.js';
2
+ export { formatJson } from './json.js';
3
+ export { formatMarkdown } from './markdown.js';
4
+ export { formatCsv } from './csv.js';
5
+ export { formatSarif } from './sarif.js';
6
+ export { selectFormatter } from './select.js';
7
+ export { healthEmoji, uniqueStaleCount, sarifLevel } from './shared.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA0B,MAAM,WAAW,CAAA;AAC9D,OAAO,EAAE,UAAU,EAA0B,MAAM,WAAW,CAAA;AAC9D,OAAO,EAAE,cAAc,EAA8B,MAAM,eAAe,CAAA;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,WAAW,EAA2B,MAAM,YAAY,CAAA;AACjE,OAAO,EAAE,eAAe,EAA8D,MAAM,aAAa,CAAA;AACzG,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * JSON output for FlagShark scan results.
3
+ *
4
+ * This is the STABLE OUTPUT API โ€” downstream tooling (the Action, custom CI
5
+ * scripts, the hosted SaaS) can rely on the shape produced here.
6
+ */
7
+ import type { ScanRepoResult } from '../scan-repo.js';
8
+ export interface JsonFormatOptions {
9
+ /** Library version to embed in the output (`version` field). */
10
+ version: string;
11
+ }
12
+ export declare function formatJson(result: ScanRepoResult, options: JsonFormatOptions): string;
13
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +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,CAuCrF"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * JSON output for FlagShark scan results.
3
+ *
4
+ * This is the STABLE OUTPUT API โ€” downstream tooling (the Action, custom CI
5
+ * scripts, the hosted SaaS) can rely on the shape produced here.
6
+ */
7
+ export function formatJson(result, options) {
8
+ const languages = { ...result.languageBreakdown };
9
+ const flags = result.staleFlags.map((sf) => {
10
+ const flagSeverity = sf.signals.some((s) => s.severity === 'error') ? 'error' : 'warning';
11
+ return {
12
+ name: sf.name,
13
+ file: sf.filePath,
14
+ line: sf.lineNumber,
15
+ language: sf.language,
16
+ provider: sf.provider,
17
+ stale: true,
18
+ severity: flagSeverity,
19
+ signals: sf.signals.map((s) => ({ type: s.type, severity: s.severity, description: s.description })),
20
+ age: sf.age ?? null,
21
+ };
22
+ });
23
+ const errorCount = result.staleFlags.filter((sf) => sf.signals.some((s) => s.severity === 'error')).length;
24
+ const output = {
25
+ version: options.version,
26
+ totalFlags: result.totalFlags,
27
+ staleFlags: new Set(result.staleFlags.map((f) => f.name)).size,
28
+ errorCount,
29
+ healthScore: result.healthScore,
30
+ detectedProviders: result.detectedProviders,
31
+ languages,
32
+ flags,
33
+ excludedPaths: result.excludedPaths,
34
+ scanDuration: result.scanDuration,
35
+ links: {
36
+ dashboard: 'https://flagshark.com',
37
+ cli: 'https://github.com/FlagShark/flagshark',
38
+ npm: 'https://www.npmjs.com/package/flagshark',
39
+ },
40
+ };
41
+ return JSON.stringify(output, null, 2);
42
+ }
43
+ //# sourceMappingURL=json.js.map
@@ -0,0 +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;SACpB,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAA;IAE1G,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QAC9D,UAAU;QACV,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,SAAS;QACT,KAAK;QACL,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,KAAK,EAAE;YACL,SAAS,EAAE,uBAAuB;YAClC,GAAG,EAAE,wCAAwC;YAC7C,GAAG,EAAE,yCAAyC;SAC/C;KACF,CAAA;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AACxC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Markdown output for FlagShark scan results.
3
+ *
4
+ * Used in two places:
5
+ * 1. CLI: `flagshark scan --format markdown > REPORT.md`
6
+ * 2. GitHub Action: PR comment body
7
+ *
8
+ * The Action passes `linkPrefix` so file paths render as absolute GitHub URLs;
9
+ * the CLI omits the prefix and uses relative paths.
10
+ */
11
+ import type { ScanRepoResult } from '../scan-repo.js';
12
+ export interface MarkdownFormatOptions {
13
+ /** 'full' or 'changed' โ€” drives the "scan mode" label in the stats table. */
14
+ scanMode: 'full' | 'changed';
15
+ /** Prefix for file links (e.g. `https://github.com/owner/repo/blob/<sha>/`). When set, file paths become absolute URLs. */
16
+ linkPrefix?: string;
17
+ /** HTML comment to prepend (used by the Action to find + update its own comment). */
18
+ commentMarker?: string;
19
+ /** Cap on rendered stale flags before "...and N more". Default: 20. */
20
+ maxStaleFlags?: number;
21
+ }
22
+ export declare function formatMarkdown(result: ScanRepoResult, options: MarkdownFormatOptions): string;
23
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +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,CAiF7F"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Markdown output for FlagShark scan results.
3
+ *
4
+ * Used in two places:
5
+ * 1. CLI: `flagshark scan --format markdown > REPORT.md`
6
+ * 2. GitHub Action: PR comment body
7
+ *
8
+ * The Action passes `linkPrefix` so file paths render as absolute GitHub URLs;
9
+ * the CLI omits the prefix and uses relative paths.
10
+ */
11
+ import { uniqueStaleCount, healthEmoji } from './shared.js';
12
+ const DEFAULT_MAX_STALE = 20;
13
+ export function formatMarkdown(result, options) {
14
+ const staleCount = uniqueStaleCount(result.staleFlags);
15
+ const emoji = healthEmoji(result.healthScore);
16
+ const modeLabel = options.scanMode === 'full' ? 'Full repo scan' : 'Changed files only';
17
+ const maxStale = options.maxStaleFlags ?? DEFAULT_MAX_STALE;
18
+ const langList = Object.entries(result.languageBreakdown)
19
+ .map(([l, c]) => `${l} (${c})`)
20
+ .join(', ');
21
+ const providerList = result.detectedProviders.length > 0
22
+ ? result.detectedProviders.slice(0, 5).join(', ') +
23
+ (result.detectedProviders.length > 5 ? ` +${result.detectedProviders.length - 5} more` : '')
24
+ : 'none detected';
25
+ let body = '';
26
+ if (options.commentMarker) {
27
+ body += `${options.commentMarker}\n`;
28
+ }
29
+ // Header
30
+ if (staleCount === 0) {
31
+ body += `## ๐Ÿฆˆ FlagShark โ€” All flags healthy\n\n`;
32
+ }
33
+ else {
34
+ body += `## ๐Ÿฆˆ FlagShark โ€” ${staleCount} stale flag${staleCount !== 1 ? 's' : ''} found\n\n`;
35
+ }
36
+ // Health badge
37
+ body += `${emoji} **Health Score: ${result.healthScore}/100**\n\n`;
38
+ // Compute error / warning split up front (used in both sections below)
39
+ const errorFlags = result.staleFlags.filter((f) => f.signals.some((s) => s.severity === 'error'));
40
+ const warningFlags = result.staleFlags.filter((f) => !f.signals.some((s) => s.severity === 'error'));
41
+ // Production-risk section (before stats table so it appears at a higher position)
42
+ if (errorFlags.length > 0) {
43
+ body += `### ๐Ÿšจ Production-risk: flags missing in platform\n\n`;
44
+ body += '| Flag | File | Age | Why it looks stale |\n';
45
+ body += '|------|------|-----|--------------------|\n';
46
+ for (const flag of errorFlags) {
47
+ body += `| ${formatRow(flag, options.linkPrefix)} |\n`;
48
+ }
49
+ body += '\n';
50
+ }
51
+ // Stats table
52
+ body += `| Metric | Value |\n`;
53
+ body += `|--------|-------|\n`;
54
+ body += `| Flags detected | ${result.totalFlags} |\n`;
55
+ body += `| Stale flags | ${staleCount} |\n`;
56
+ body += `| Languages | ${langList || 'none'} |\n`;
57
+ body += `| Providers | ${providerList} |\n`;
58
+ body += `| Scan mode | ${modeLabel} |\n`;
59
+ body += `| Scan time | ${result.scanDuration}ms |\n\n`;
60
+ // Warning-severity stale flags section
61
+ if (warningFlags.length > 0) {
62
+ const displayFlags = warningFlags.slice(0, maxStale);
63
+ body += `<details${warningFlags.length <= 5 ? ' open' : ''}>\n`;
64
+ body += `<summary><strong>Stale flags (${warningFlags.length})</strong></summary>\n\n`;
65
+ body += '| Flag | File | Age | Why it looks stale |\n';
66
+ body += '|------|------|-----|--------------------|\n';
67
+ for (const flag of displayFlags) {
68
+ body += `| ${formatRow(flag, options.linkPrefix)} |\n`;
69
+ }
70
+ if (warningFlags.length > maxStale) {
71
+ body += `\n*... and ${warningFlags.length - maxStale} more. Run \`npx flagshark scan --verbose\` locally for the full list.*\n`;
72
+ }
73
+ body += '\n</details>\n\n';
74
+ }
75
+ // Footer
76
+ body += '---\n';
77
+ body += `*[FlagShark](https://github.com/FlagShark/flagshark) finds stale feature flags before they cause incidents*\n\n`;
78
+ body += `[Automate flag cleanup](https://flagshark.com) ยท `;
79
+ body += `[Install CLI](https://www.npmjs.com/package/flagshark) ยท `;
80
+ body += `[Open source](https://github.com/FlagShark/flagshark)\n`;
81
+ return body;
82
+ }
83
+ function formatRow(flag, linkPrefix) {
84
+ const signals = flag.signals.map((s) => s.description).join(', ');
85
+ const shortPath = flag.filePath.replace(/^\.\//, '');
86
+ const fileCell = linkPrefix
87
+ ? `[${shortPath}:${flag.lineNumber}](${normalizePrefix(linkPrefix)}${shortPath}#L${flag.lineNumber})`
88
+ : `\`${shortPath}:${flag.lineNumber}\``;
89
+ return `\`${flag.name}\` | ${fileCell} | ${flag.age || 'unknown'} | ${signals}`;
90
+ }
91
+ function normalizePrefix(prefix) {
92
+ return prefix.endsWith('/') ? prefix : prefix + '/';
93
+ }
94
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/output/markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * SARIF v2.1.0 output for FlagShark scan results.
3
+ *
4
+ * Consumable directly by `github/codeql-action/upload-sarif` so stale flags
5
+ * appear in the repo's Security โ†’ Code Scanning tab โ€” same UX as CodeQL,
6
+ * ESLint with SARIF output, etc.
7
+ *
8
+ * Spec: https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html
9
+ */
10
+ import type { ScanRepoResult } from '../scan-repo.js';
11
+ export interface SarifFormatOptions {
12
+ /** Tool driver version (the FlagShark release version). */
13
+ version: string;
14
+ }
15
+ export declare function formatSarif(result: ScanRepoResult, options: SarifFormatOptions): string;
16
+ //# sourceMappingURL=sarif.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sarif.d.ts","sourceRoot":"","sources":["../../src/output/sarif.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGrD,MAAM,WAAW,kBAAkB;IACjC,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAA;CAChB;AAwDD,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,CA4BvF"}