lostconf 0.2.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 (201) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/LICENSE +21 -0
  3. package/LICENSE.md +21 -0
  4. package/README.md +445 -0
  5. package/dist/cli.d.ts +6 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +139 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/core/discovery.d.ts +23 -0
  10. package/dist/core/discovery.d.ts.map +1 -0
  11. package/dist/core/discovery.js +75 -0
  12. package/dist/core/discovery.js.map +1 -0
  13. package/dist/core/engine.d.ts +24 -0
  14. package/dist/core/engine.d.ts.map +1 -0
  15. package/dist/core/engine.js +86 -0
  16. package/dist/core/engine.js.map +1 -0
  17. package/dist/core/severity.d.ts +25 -0
  18. package/dist/core/severity.d.ts.map +1 -0
  19. package/dist/core/severity.js +225 -0
  20. package/dist/core/severity.js.map +1 -0
  21. package/dist/core/types.d.ts +77 -0
  22. package/dist/core/types.d.ts.map +1 -0
  23. package/dist/core/types.js +21 -0
  24. package/dist/core/types.js.map +1 -0
  25. package/dist/filetree/scanner.d.ts +26 -0
  26. package/dist/filetree/scanner.d.ts.map +1 -0
  27. package/dist/filetree/scanner.js +71 -0
  28. package/dist/filetree/scanner.js.map +1 -0
  29. package/dist/filetree/tree.d.ts +5 -0
  30. package/dist/filetree/tree.d.ts.map +1 -0
  31. package/dist/filetree/tree.js +5 -0
  32. package/dist/filetree/tree.js.map +1 -0
  33. package/dist/index.d.ts +15 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +18 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/output/formatter.d.ts +12 -0
  38. package/dist/output/formatter.d.ts.map +1 -0
  39. package/dist/output/formatter.js +5 -0
  40. package/dist/output/formatter.js.map +1 -0
  41. package/dist/output/json.d.ts +9 -0
  42. package/dist/output/json.d.ts.map +1 -0
  43. package/dist/output/json.js +14 -0
  44. package/dist/output/json.js.map +1 -0
  45. package/dist/output/sarif.d.ts +9 -0
  46. package/dist/output/sarif.d.ts.map +1 -0
  47. package/dist/output/sarif.js +84 -0
  48. package/dist/output/sarif.js.map +1 -0
  49. package/dist/output/text.d.ts +9 -0
  50. package/dist/output/text.d.ts.map +1 -0
  51. package/dist/output/text.js +87 -0
  52. package/dist/output/text.js.map +1 -0
  53. package/dist/parsers/bandit.d.ts +8 -0
  54. package/dist/parsers/bandit.d.ts.map +1 -0
  55. package/dist/parsers/bandit.js +66 -0
  56. package/dist/parsers/bandit.js.map +1 -0
  57. package/dist/parsers/biome.d.ts +8 -0
  58. package/dist/parsers/biome.d.ts.map +1 -0
  59. package/dist/parsers/biome.js +74 -0
  60. package/dist/parsers/biome.js.map +1 -0
  61. package/dist/parsers/clang.d.ts +9 -0
  62. package/dist/parsers/clang.d.ts.map +1 -0
  63. package/dist/parsers/clang.js +99 -0
  64. package/dist/parsers/clang.js.map +1 -0
  65. package/dist/parsers/deno.d.ts +8 -0
  66. package/dist/parsers/deno.d.ts.map +1 -0
  67. package/dist/parsers/deno.js +73 -0
  68. package/dist/parsers/deno.js.map +1 -0
  69. package/dist/parsers/dotnet.d.ts +9 -0
  70. package/dist/parsers/dotnet.d.ts.map +1 -0
  71. package/dist/parsers/dotnet.js +89 -0
  72. package/dist/parsers/dotnet.js.map +1 -0
  73. package/dist/parsers/elixir.d.ts +7 -0
  74. package/dist/parsers/elixir.d.ts.map +1 -0
  75. package/dist/parsers/elixir.js +59 -0
  76. package/dist/parsers/elixir.js.map +1 -0
  77. package/dist/parsers/eslint.d.ts +7 -0
  78. package/dist/parsers/eslint.d.ts.map +1 -0
  79. package/dist/parsers/eslint.js +43 -0
  80. package/dist/parsers/eslint.js.map +1 -0
  81. package/dist/parsers/flake8.d.ts +10 -0
  82. package/dist/parsers/flake8.d.ts.map +1 -0
  83. package/dist/parsers/flake8.js +89 -0
  84. package/dist/parsers/flake8.js.map +1 -0
  85. package/dist/parsers/gitignore.d.ts +11 -0
  86. package/dist/parsers/gitignore.d.ts.map +1 -0
  87. package/dist/parsers/gitignore.js +72 -0
  88. package/dist/parsers/gitignore.js.map +1 -0
  89. package/dist/parsers/gitleaks.d.ts +8 -0
  90. package/dist/parsers/gitleaks.d.ts.map +1 -0
  91. package/dist/parsers/gitleaks.js +127 -0
  92. package/dist/parsers/gitleaks.js.map +1 -0
  93. package/dist/parsers/golangci.d.ts +7 -0
  94. package/dist/parsers/golangci.d.ts.map +1 -0
  95. package/dist/parsers/golangci.js +73 -0
  96. package/dist/parsers/golangci.js.map +1 -0
  97. package/dist/parsers/hadolint.d.ts +8 -0
  98. package/dist/parsers/hadolint.d.ts.map +1 -0
  99. package/dist/parsers/hadolint.js +95 -0
  100. package/dist/parsers/hadolint.js.map +1 -0
  101. package/dist/parsers/index.d.ts +38 -0
  102. package/dist/parsers/index.d.ts.map +1 -0
  103. package/dist/parsers/index.js +154 -0
  104. package/dist/parsers/index.js.map +1 -0
  105. package/dist/parsers/java.d.ts +11 -0
  106. package/dist/parsers/java.d.ts.map +1 -0
  107. package/dist/parsers/java.js +75 -0
  108. package/dist/parsers/java.js.map +1 -0
  109. package/dist/parsers/jest.d.ts +7 -0
  110. package/dist/parsers/jest.d.ts.map +1 -0
  111. package/dist/parsers/jest.js +118 -0
  112. package/dist/parsers/jest.js.map +1 -0
  113. package/dist/parsers/kotlin.d.ts +7 -0
  114. package/dist/parsers/kotlin.d.ts.map +1 -0
  115. package/dist/parsers/kotlin.js +90 -0
  116. package/dist/parsers/kotlin.js.map +1 -0
  117. package/dist/parsers/markdown.d.ts +7 -0
  118. package/dist/parsers/markdown.d.ts.map +1 -0
  119. package/dist/parsers/markdown.js +40 -0
  120. package/dist/parsers/markdown.js.map +1 -0
  121. package/dist/parsers/php.d.ts +9 -0
  122. package/dist/parsers/php.d.ts.map +1 -0
  123. package/dist/parsers/php.js +92 -0
  124. package/dist/parsers/php.js.map +1 -0
  125. package/dist/parsers/prettier.d.ts +7 -0
  126. package/dist/parsers/prettier.d.ts.map +1 -0
  127. package/dist/parsers/prettier.js +43 -0
  128. package/dist/parsers/prettier.js.map +1 -0
  129. package/dist/parsers/pylint.d.ts +8 -0
  130. package/dist/parsers/pylint.d.ts.map +1 -0
  131. package/dist/parsers/pylint.js +92 -0
  132. package/dist/parsers/pylint.js.map +1 -0
  133. package/dist/parsers/pyproject.d.ts +7 -0
  134. package/dist/parsers/pyproject.d.ts.map +1 -0
  135. package/dist/parsers/pyproject.js +127 -0
  136. package/dist/parsers/pyproject.js.map +1 -0
  137. package/dist/parsers/pyright.d.ts +8 -0
  138. package/dist/parsers/pyright.d.ts.map +1 -0
  139. package/dist/parsers/pyright.js +63 -0
  140. package/dist/parsers/pyright.js.map +1 -0
  141. package/dist/parsers/rubocop.d.ts +7 -0
  142. package/dist/parsers/rubocop.d.ts.map +1 -0
  143. package/dist/parsers/rubocop.js +102 -0
  144. package/dist/parsers/rubocop.js.map +1 -0
  145. package/dist/parsers/rust.d.ts +9 -0
  146. package/dist/parsers/rust.d.ts.map +1 -0
  147. package/dist/parsers/rust.js +68 -0
  148. package/dist/parsers/rust.js.map +1 -0
  149. package/dist/parsers/scala.d.ts +9 -0
  150. package/dist/parsers/scala.d.ts.map +1 -0
  151. package/dist/parsers/scala.js +72 -0
  152. package/dist/parsers/scala.js.map +1 -0
  153. package/dist/parsers/semgrep.d.ts +10 -0
  154. package/dist/parsers/semgrep.d.ts.map +1 -0
  155. package/dist/parsers/semgrep.js +111 -0
  156. package/dist/parsers/semgrep.js.map +1 -0
  157. package/dist/parsers/shellcheck.d.ts +8 -0
  158. package/dist/parsers/shellcheck.d.ts.map +1 -0
  159. package/dist/parsers/shellcheck.js +49 -0
  160. package/dist/parsers/shellcheck.js.map +1 -0
  161. package/dist/parsers/stylelint.d.ts +9 -0
  162. package/dist/parsers/stylelint.d.ts.map +1 -0
  163. package/dist/parsers/stylelint.js +95 -0
  164. package/dist/parsers/stylelint.js.map +1 -0
  165. package/dist/parsers/swift.d.ts +7 -0
  166. package/dist/parsers/swift.d.ts.map +1 -0
  167. package/dist/parsers/swift.js +64 -0
  168. package/dist/parsers/swift.js.map +1 -0
  169. package/dist/parsers/tflint.d.ts +8 -0
  170. package/dist/parsers/tflint.d.ts.map +1 -0
  171. package/dist/parsers/tflint.js +59 -0
  172. package/dist/parsers/tflint.js.map +1 -0
  173. package/dist/parsers/typescript.d.ts +7 -0
  174. package/dist/parsers/typescript.d.ts.map +1 -0
  175. package/dist/parsers/typescript.js +138 -0
  176. package/dist/parsers/typescript.js.map +1 -0
  177. package/dist/parsers/yamllint.d.ts +8 -0
  178. package/dist/parsers/yamllint.d.ts.map +1 -0
  179. package/dist/parsers/yamllint.js +93 -0
  180. package/dist/parsers/yamllint.js.map +1 -0
  181. package/dist/plugin/registry.d.ts +20 -0
  182. package/dist/plugin/registry.d.ts.map +1 -0
  183. package/dist/plugin/registry.js +52 -0
  184. package/dist/plugin/registry.js.map +1 -0
  185. package/dist/plugin/types.d.ts +16 -0
  186. package/dist/plugin/types.d.ts.map +1 -0
  187. package/dist/plugin/types.js +5 -0
  188. package/dist/plugin/types.js.map +1 -0
  189. package/dist/validator/glob.d.ts +16 -0
  190. package/dist/validator/glob.d.ts.map +1 -0
  191. package/dist/validator/glob.js +44 -0
  192. package/dist/validator/glob.js.map +1 -0
  193. package/dist/validator/regex.d.ts +10 -0
  194. package/dist/validator/regex.d.ts.map +1 -0
  195. package/dist/validator/regex.js +45 -0
  196. package/dist/validator/regex.js.map +1 -0
  197. package/dist/validator/validator.d.ts +17 -0
  198. package/dist/validator/validator.d.ts.map +1 -0
  199. package/dist/validator/validator.js +85 -0
  200. package/dist/validator/validator.js.map +1 -0
  201. package/package.json +75 -0
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Parser for Flake8 configuration files
3
+ * Flake8 is a Python linting tool that checks for PEP 8 compliance
4
+ */
5
+ import { PatternType } from '../core/types.js';
6
+ import { isGlobPattern } from '../validator/glob.js';
7
+ /** Parse .flake8 or setup.cfg file */
8
+ function parseFlake8(filename, content) {
9
+ const patterns = [];
10
+ const lines = content.split('\n');
11
+ let inFlake8Section = false;
12
+ let currentKey = '';
13
+ for (let i = 0; i < lines.length; i++) {
14
+ const line = lines[i];
15
+ const lineNum = i + 1;
16
+ const trimmed = line.trim();
17
+ // Check for [flake8] section
18
+ if (trimmed === '[flake8]') {
19
+ inFlake8Section = true;
20
+ continue;
21
+ }
22
+ // Check if we've entered a different section
23
+ if (trimmed.startsWith('[') && trimmed.endsWith(']') && trimmed !== '[flake8]') {
24
+ inFlake8Section = false;
25
+ continue;
26
+ }
27
+ if (!inFlake8Section)
28
+ continue;
29
+ // Skip empty lines and comments
30
+ if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith(';')) {
31
+ continue;
32
+ }
33
+ // Parse key = value
34
+ if (trimmed.includes('=')) {
35
+ const [key, value] = trimmed.split('=').map((s) => s.trim());
36
+ currentKey = key;
37
+ // Check if this is a path-related field
38
+ if (isPathField(key) && value) {
39
+ extractPatterns(value, lineNum, patterns);
40
+ }
41
+ }
42
+ else if (currentKey && isPathField(currentKey)) {
43
+ // Continuation line
44
+ extractPatterns(trimmed, lineNum, patterns);
45
+ }
46
+ }
47
+ return patterns;
48
+ }
49
+ /** Check if a key is a path-related field */
50
+ function isPathField(key) {
51
+ return ['exclude', 'extend-exclude', 'filename', 'per-file-ignores'].includes(key);
52
+ }
53
+ /** Extract patterns from a value string */
54
+ function extractPatterns(value, line, patterns) {
55
+ // Split by comma or newline
56
+ const parts = value
57
+ .split(/[,\n]/)
58
+ .map((s) => s.trim())
59
+ .filter(Boolean);
60
+ for (const part of parts) {
61
+ // For per-file-ignores, extract the file pattern before the colon
62
+ let patternValue = part;
63
+ if (part.includes(':')) {
64
+ patternValue = part.split(':')[0].trim();
65
+ }
66
+ if (!patternValue)
67
+ continue;
68
+ const type = isGlobPattern(patternValue) ? PatternType.GLOB : PatternType.PATH;
69
+ patterns.push({
70
+ value: patternValue,
71
+ type,
72
+ line,
73
+ column: 1
74
+ });
75
+ }
76
+ }
77
+ /** Flake8 .flake8 file parser */
78
+ export const flake8Parser = {
79
+ name: 'flake8',
80
+ filePatterns: ['.flake8', '**/.flake8'],
81
+ parse: parseFlake8
82
+ };
83
+ /** Flake8 setup.cfg parser (only processes [flake8] section) */
84
+ export const flake8SetupCfgParser = {
85
+ name: 'flake8-setup',
86
+ filePatterns: ['setup.cfg', '**/setup.cfg'],
87
+ parse: parseFlake8
88
+ };
89
+ //# sourceMappingURL=flake8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flake8.js","sourceRoot":"","sources":["../../src/parsers/flake8.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Parser for .gitignore, .dockerignore, and similar ignore files
3
+ */
4
+ import type { Parser } from '../plugin/types.js';
5
+ /** Gitignore parser */
6
+ export declare const gitignoreParser: Parser;
7
+ /** Dockerignore parser (same format) */
8
+ export declare const dockerignoreParser: Parser;
9
+ /** Generic ignore file parser factory */
10
+ export declare function createIgnoreParser(name: string, filePatterns: string[]): Parser;
11
+ //# sourceMappingURL=gitignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../../src/parsers/gitignore.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA4DjD,uBAAuB;AACvB,eAAO,MAAM,eAAe,EAAE,MAI7B,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,kBAAkB,EAAE,MAIhC,CAAC;AAEF,yCAAyC;AACzC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,CAM/E"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Parser for .gitignore, .dockerignore, and similar ignore files
3
+ */
4
+ import { PatternType } from '../core/types.js';
5
+ import { isGlobPattern } from '../validator/glob.js';
6
+ /** Parse a gitignore-style file and extract patterns */
7
+ function parseIgnoreFile(filename, content) {
8
+ const patterns = [];
9
+ const lines = content.split('\n');
10
+ for (let i = 0; i < lines.length; i++) {
11
+ const line = lines[i];
12
+ const lineNum = i + 1;
13
+ // Skip empty lines and comments
14
+ const trimmed = line.trim();
15
+ if (!trimmed || trimmed.startsWith('#')) {
16
+ continue;
17
+ }
18
+ // Check for negation
19
+ let patternValue = trimmed;
20
+ let negated = false;
21
+ if (patternValue.startsWith('!')) {
22
+ negated = true;
23
+ patternValue = patternValue.slice(1);
24
+ }
25
+ // Remove trailing spaces (unless escaped)
26
+ patternValue = patternValue.replace(/(?<!\\)\s+$/, '');
27
+ // Skip empty patterns after processing
28
+ if (!patternValue) {
29
+ continue;
30
+ }
31
+ // Determine pattern type
32
+ const type = determinePatternType(patternValue);
33
+ patterns.push({
34
+ value: patternValue,
35
+ type,
36
+ line: lineNum,
37
+ column: 1,
38
+ negated
39
+ });
40
+ }
41
+ return patterns;
42
+ }
43
+ /** Determine if a pattern is a path or glob */
44
+ function determinePatternType(pattern) {
45
+ // Contains glob characters
46
+ if (isGlobPattern(pattern)) {
47
+ return PatternType.GLOB;
48
+ }
49
+ // Treat as path
50
+ return PatternType.PATH;
51
+ }
52
+ /** Gitignore parser */
53
+ export const gitignoreParser = {
54
+ name: 'gitignore',
55
+ filePatterns: ['.gitignore', '**/.gitignore'],
56
+ parse: parseIgnoreFile
57
+ };
58
+ /** Dockerignore parser (same format) */
59
+ export const dockerignoreParser = {
60
+ name: 'dockerignore',
61
+ filePatterns: ['.dockerignore'],
62
+ parse: parseIgnoreFile
63
+ };
64
+ /** Generic ignore file parser factory */
65
+ export function createIgnoreParser(name, filePatterns) {
66
+ return {
67
+ name,
68
+ filePatterns,
69
+ parse: parseIgnoreFile
70
+ };
71
+ }
72
+ //# sourceMappingURL=gitignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../src/parsers/gitignore.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,wDAAwD;AACxD,SAAS,eAAe,CAAC,QAAgB,EAAE,OAAe;IACxD,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAEtB,gCAAgC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,SAAS;QACX,CAAC;QAED,qBAAqB;QACrB,IAAI,YAAY,GAAG,OAAO,CAAC;QAC3B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,0CAA0C;QAC1C,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAEvD,uCAAuC;QACvC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QAED,yBAAyB;QACzB,MAAM,IAAI,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAEhD,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,YAAY;YACnB,IAAI;YACJ,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,CAAC;YACT,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,+CAA+C;AAC/C,SAAS,oBAAoB,CAAC,OAAe;IAC3C,2BAA2B;IAC3B,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,WAAW,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,gBAAgB;IAChB,OAAO,WAAW,CAAC,IAAI,CAAC;AAC1B,CAAC;AAED,uBAAuB;AACvB,MAAM,CAAC,MAAM,eAAe,GAAW;IACrC,IAAI,EAAE,WAAW;IACjB,YAAY,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC;IAC7C,KAAK,EAAE,eAAe;CACvB,CAAC;AAEF,wCAAwC;AACxC,MAAM,CAAC,MAAM,kBAAkB,GAAW;IACxC,IAAI,EAAE,cAAc;IACpB,YAAY,EAAE,CAAC,eAAe,CAAC;IAC/B,KAAK,EAAE,eAAe;CACvB,CAAC;AAEF,yCAAyC;AACzC,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,YAAsB;IACrE,OAAO;QACL,IAAI;QACJ,YAAY;QACZ,KAAK,EAAE,eAAe;KACvB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Parser for Gitleaks configuration files
3
+ * Gitleaks is a SAST tool for detecting and preventing hardcoded secrets
4
+ */
5
+ import type { Parser } from '../plugin/types.js';
6
+ /** Gitleaks configuration parser */
7
+ export declare const gitleaksParser: Parser;
8
+ //# sourceMappingURL=gitleaks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitleaks.d.ts","sourceRoot":"","sources":["../../src/parsers/gitleaks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAgIjD,oCAAoC;AACpC,eAAO,MAAM,cAAc,EAAE,MAI5B,CAAC"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Parser for Gitleaks configuration files
3
+ * Gitleaks is a SAST tool for detecting and preventing hardcoded secrets
4
+ */
5
+ import { parse as parseToml } from 'smol-toml';
6
+ import { PatternType } from '../core/types.js';
7
+ import { isGlobPattern } from '../validator/glob.js';
8
+ import { looksLikeRegex } from '../validator/regex.js';
9
+ /** Parse .gitleaks.toml file */
10
+ function parseGitleaks(_filename, content) {
11
+ const patterns = [];
12
+ let toml;
13
+ try {
14
+ toml = parseToml(content);
15
+ }
16
+ catch {
17
+ return patterns;
18
+ }
19
+ const lineMap = buildLineMap(content);
20
+ // Extract allowlist paths
21
+ const allowlist = toml.allowlist;
22
+ if (allowlist) {
23
+ const paths = allowlist.paths;
24
+ if (paths && Array.isArray(paths)) {
25
+ for (const path of paths) {
26
+ if (typeof path !== 'string')
27
+ continue;
28
+ const lineInfo = lineMap.get(path);
29
+ const line = lineInfo?.line ?? 1;
30
+ const column = lineInfo?.column;
31
+ // Determine type
32
+ let type;
33
+ if (looksLikeRegex(path)) {
34
+ type = PatternType.REGEX;
35
+ }
36
+ else if (isGlobPattern(path)) {
37
+ type = PatternType.GLOB;
38
+ }
39
+ else {
40
+ type = PatternType.PATH;
41
+ }
42
+ patterns.push({
43
+ value: path,
44
+ type,
45
+ line,
46
+ column
47
+ });
48
+ }
49
+ }
50
+ // Extract regex patterns from allowlist
51
+ const regexes = allowlist.regexes;
52
+ if (regexes && Array.isArray(regexes)) {
53
+ for (const regex of regexes) {
54
+ if (typeof regex !== 'string')
55
+ continue;
56
+ const lineInfo = lineMap.get(regex);
57
+ patterns.push({
58
+ value: regex,
59
+ type: PatternType.REGEX,
60
+ line: lineInfo?.line ?? 1,
61
+ column: lineInfo?.column
62
+ });
63
+ }
64
+ }
65
+ }
66
+ // Extract rules with path filters
67
+ const rules = toml.rules;
68
+ if (rules && Array.isArray(rules)) {
69
+ for (const rule of rules) {
70
+ const allowlistRule = rule.allowlist;
71
+ if (!allowlistRule)
72
+ continue;
73
+ const paths = allowlistRule.paths;
74
+ if (paths && Array.isArray(paths)) {
75
+ for (const path of paths) {
76
+ if (typeof path !== 'string')
77
+ continue;
78
+ const lineInfo = lineMap.get(path);
79
+ const line = lineInfo?.line ?? 1;
80
+ const column = lineInfo?.column;
81
+ let type;
82
+ if (looksLikeRegex(path)) {
83
+ type = PatternType.REGEX;
84
+ }
85
+ else if (isGlobPattern(path)) {
86
+ type = PatternType.GLOB;
87
+ }
88
+ else {
89
+ type = PatternType.PATH;
90
+ }
91
+ patterns.push({
92
+ value: path,
93
+ type,
94
+ line,
95
+ column
96
+ });
97
+ }
98
+ }
99
+ }
100
+ }
101
+ return patterns;
102
+ }
103
+ /** Build a map of string values to their line numbers */
104
+ function buildLineMap(content) {
105
+ const map = new Map();
106
+ const lines = content.split('\n');
107
+ for (let i = 0; i < lines.length; i++) {
108
+ const line = lines[i];
109
+ const lineNum = i + 1;
110
+ // Match quoted strings in TOML
111
+ const stringMatches = line.matchAll(/"([^"]+)"|'([^']+)'/g);
112
+ for (const match of stringMatches) {
113
+ const value = match[1] || match[2];
114
+ if (value && !map.has(value)) {
115
+ map.set(value, { line: lineNum, column: (match.index ?? 0) + 1 });
116
+ }
117
+ }
118
+ }
119
+ return map;
120
+ }
121
+ /** Gitleaks configuration parser */
122
+ export const gitleaksParser = {
123
+ name: 'gitleaks',
124
+ filePatterns: ['.gitleaks.toml', 'gitleaks.toml', '**/.gitleaks.toml'],
125
+ parse: parseGitleaks
126
+ };
127
+ //# sourceMappingURL=gitleaks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitleaks.js","sourceRoot":"","sources":["../../src/parsers/gitleaks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Parser for .golangci.yml (Go linter configuration)
3
+ */
4
+ import type { Parser } from '../plugin/types.js';
5
+ /** GolangCI-Lint parser */
6
+ export declare const golangciParser: Parser;
7
+ //# sourceMappingURL=golangci.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"golangci.d.ts","sourceRoot":"","sources":["../../src/parsers/golangci.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAgGjD,2BAA2B;AAC3B,eAAO,MAAM,cAAc,EAAE,MAI5B,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Parser for .golangci.yml (Go linter configuration)
3
+ */
4
+ import { parse as parseYaml } from 'yaml';
5
+ import { PatternType } from '../core/types.js';
6
+ import { isGlobPattern } from '../validator/glob.js';
7
+ /** Parse .golangci.yml and extract patterns */
8
+ function parseGolangci(_filename, content) {
9
+ const patterns = [];
10
+ let config;
11
+ try {
12
+ config = parseYaml(content);
13
+ }
14
+ catch {
15
+ return patterns;
16
+ }
17
+ if (!config || typeof config !== 'object') {
18
+ return patterns;
19
+ }
20
+ const lineMap = buildLineMap(content);
21
+ // Extract from run section
22
+ if (config.run) {
23
+ extractPatterns(config.run.skip, patterns, lineMap);
24
+ extractPatterns(config.run['skip-dirs'], patterns, lineMap);
25
+ extractPatterns(config.run['skip-files'], patterns, lineMap);
26
+ }
27
+ // Extract from issues section
28
+ if (config.issues) {
29
+ extractPatterns(config.issues['exclude-dirs'], patterns, lineMap);
30
+ extractPatterns(config.issues['exclude-files'], patterns, lineMap);
31
+ }
32
+ return patterns;
33
+ }
34
+ function extractPatterns(values, patterns, lineMap) {
35
+ if (!Array.isArray(values))
36
+ return;
37
+ for (const value of values) {
38
+ if (typeof value !== 'string')
39
+ continue;
40
+ const lineInfo = lineMap.get(value);
41
+ const type = isGlobPattern(value) ? PatternType.GLOB : PatternType.PATH;
42
+ patterns.push({
43
+ value,
44
+ type,
45
+ line: lineInfo?.line ?? 1,
46
+ column: lineInfo?.column
47
+ });
48
+ }
49
+ }
50
+ function buildLineMap(content) {
51
+ const map = new Map();
52
+ const lines = content.split('\n');
53
+ for (let i = 0; i < lines.length; i++) {
54
+ const line = lines[i];
55
+ const lineNum = i + 1;
56
+ // Match YAML list items or quoted strings
57
+ const listMatch = line.match(/^\s*-\s+(?:"([^"]+)"|'([^']+)'|([^\s#]+))/);
58
+ if (listMatch) {
59
+ const value = listMatch[1] || listMatch[2] || listMatch[3];
60
+ if (value && !map.has(value)) {
61
+ map.set(value, { line: lineNum, column: line.indexOf(value) + 1 });
62
+ }
63
+ }
64
+ }
65
+ return map;
66
+ }
67
+ /** GolangCI-Lint parser */
68
+ export const golangciParser = {
69
+ name: 'golangci',
70
+ filePatterns: ['.golangci.yml', '.golangci.yaml', '**/.golangci.yml', '**/.golangci.yaml'],
71
+ parse: parseGolangci
72
+ };
73
+ //# sourceMappingURL=golangci.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"golangci.js","sourceRoot":"","sources":["../../src/parsers/golangci.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Parser for Hadolint configuration files
3
+ * Hadolint is a Dockerfile linter that helps you build best practice Docker images
4
+ */
5
+ import type { Parser } from '../plugin/types.js';
6
+ /** Hadolint configuration parser */
7
+ export declare const hadolintParser: Parser;
8
+ //# sourceMappingURL=hadolint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hadolint.d.ts","sourceRoot":"","sources":["../../src/parsers/hadolint.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAiGjD,oCAAoC;AACpC,eAAO,MAAM,cAAc,EAAE,MAW5B,CAAC"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Parser for Hadolint configuration files
3
+ * Hadolint is a Dockerfile linter that helps you build best practice Docker images
4
+ */
5
+ import { parse as parseYaml } from 'yaml';
6
+ import { PatternType } from '../core/types.js';
7
+ import { isGlobPattern } from '../validator/glob.js';
8
+ /** Parse .hadolint.yaml file */
9
+ function parseHadolint(_filename, content) {
10
+ const patterns = [];
11
+ let config;
12
+ try {
13
+ config = parseYaml(content);
14
+ }
15
+ catch {
16
+ return patterns;
17
+ }
18
+ const lineMap = buildLineMap(content);
19
+ // Extract ignored files
20
+ if (config.ignored && Array.isArray(config.ignored)) {
21
+ for (const pattern of config.ignored) {
22
+ if (typeof pattern !== 'string')
23
+ continue;
24
+ const lineInfo = lineMap.get(pattern);
25
+ const line = lineInfo?.line ?? 1;
26
+ const column = lineInfo?.column;
27
+ const type = isGlobPattern(pattern) ? PatternType.GLOB : PatternType.PATH;
28
+ patterns.push({
29
+ value: pattern,
30
+ type,
31
+ line,
32
+ column
33
+ });
34
+ }
35
+ }
36
+ // Extract trusted registries (these are URLs/paths that should exist)
37
+ if (config.trustedRegistries && Array.isArray(config.trustedRegistries)) {
38
+ for (const registry of config.trustedRegistries) {
39
+ if (typeof registry !== 'string')
40
+ continue;
41
+ // Skip if it's a URL (starts with http:// or https://)
42
+ if (registry.startsWith('http://') || registry.startsWith('https://')) {
43
+ continue;
44
+ }
45
+ const lineInfo = lineMap.get(registry);
46
+ const line = lineInfo?.line ?? 1;
47
+ const column = lineInfo?.column;
48
+ patterns.push({
49
+ value: registry,
50
+ type: PatternType.PATH,
51
+ line,
52
+ column
53
+ });
54
+ }
55
+ }
56
+ return patterns;
57
+ }
58
+ /** Build a map of string values to their line numbers */
59
+ function buildLineMap(content) {
60
+ const map = new Map();
61
+ const lines = content.split('\n');
62
+ for (let i = 0; i < lines.length; i++) {
63
+ const line = lines[i];
64
+ const lineNum = i + 1;
65
+ const quotedMatches = line.matchAll(/["']([^"']+)["']/g);
66
+ for (const match of quotedMatches) {
67
+ const value = match[1];
68
+ if (value && !map.has(value)) {
69
+ map.set(value, { line: lineNum, column: (match.index ?? 0) + 1 });
70
+ }
71
+ }
72
+ const unquotedMatch = line.match(/:\s*-\s*([^\s#]+)/);
73
+ if (unquotedMatch && unquotedMatch[1]) {
74
+ const value = unquotedMatch[1].trim();
75
+ if (value && !map.has(value)) {
76
+ map.set(value, { line: lineNum, column: (unquotedMatch.index ?? 0) + 1 });
77
+ }
78
+ }
79
+ }
80
+ return map;
81
+ }
82
+ /** Hadolint configuration parser */
83
+ export const hadolintParser = {
84
+ name: 'hadolint',
85
+ filePatterns: [
86
+ '.hadolint.yaml',
87
+ '.hadolint.yml',
88
+ 'hadolint.yaml',
89
+ 'hadolint.yml',
90
+ '**/.hadolint.yaml',
91
+ '**/.hadolint.yml'
92
+ ],
93
+ parse: parseHadolint
94
+ };
95
+ //# sourceMappingURL=hadolint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hadolint.js","sourceRoot":"","sources":["../../src/parsers/hadolint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Parser exports
3
+ */
4
+ export { gitignoreParser, dockerignoreParser, createIgnoreParser } from './gitignore.js';
5
+ export { eslintIgnoreParser } from './eslint.js';
6
+ export { prettierIgnoreParser } from './prettier.js';
7
+ export { tsconfigParser } from './typescript.js';
8
+ export { jestConfigParser } from './jest.js';
9
+ export { stylelintIgnoreParser, stylelintRcParser } from './stylelint.js';
10
+ export { biomeParser } from './biome.js';
11
+ export { denoParser } from './deno.js';
12
+ export { pyprojectParser } from './pyproject.js';
13
+ export { flake8Parser, flake8SetupCfgParser } from './flake8.js';
14
+ export { pylintrcParser } from './pylint.js';
15
+ export { banditParser } from './bandit.js';
16
+ export { pyrightParser } from './pyright.js';
17
+ export { rubocopParser } from './rubocop.js';
18
+ export { golangciParser } from './golangci.js';
19
+ export { rustfmtParser, clippyParser } from './rust.js';
20
+ export { checkstyleParser, pmdParser, spotbugsParser } from './java.js';
21
+ export { phpcsParser, phpstanParser } from './php.js';
22
+ export { swiftlintParser } from './swift.js';
23
+ export { clangTidyParser, clangFormatParser } from './clang.js';
24
+ export { detektParser } from './kotlin.js';
25
+ export { scalafmtParser, scalafixParser } from './scala.js';
26
+ export { credoParser } from './elixir.js';
27
+ export { editorConfigParser, buildPropsParser } from './dotnet.js';
28
+ export { markdownlintIgnoreParser } from './markdown.js';
29
+ export { shellcheckParser } from './shellcheck.js';
30
+ export { yamllintParser } from './yamllint.js';
31
+ export { tflintParser } from './tflint.js';
32
+ export { semgrepYmlParser, semgrepIgnoreParser } from './semgrep.js';
33
+ export { gitleaksParser } from './gitleaks.js';
34
+ export { hadolintParser } from './hadolint.js';
35
+ import type { Parser } from '../plugin/types.js';
36
+ /** Get all built-in parsers */
37
+ export declare function getBuiltinParsers(): Parser[];
38
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGxD,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGxE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGtD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGhE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAGzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAmCjD,+BAA+B;AAC/B,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAoF5C"}