dotenv-diff 2.2.5 → 2.2.6

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 (69) hide show
  1. package/dist/src/cli/program.d.ts +4 -0
  2. package/dist/src/cli/program.d.ts.map +1 -1
  3. package/dist/src/cli/program.js +4 -0
  4. package/dist/src/cli/program.js.map +1 -1
  5. package/dist/src/commands/compare.d.ts.map +1 -1
  6. package/dist/src/commands/compare.js +2 -2
  7. package/dist/src/commands/compare.js.map +1 -1
  8. package/dist/src/commands/scanUsage.d.ts +1 -57
  9. package/dist/src/commands/scanUsage.d.ts.map +1 -1
  10. package/dist/src/commands/scanUsage.js +7 -216
  11. package/dist/src/commands/scanUsage.js.map +1 -1
  12. package/dist/src/config/types.d.ts +100 -0
  13. package/dist/src/config/types.d.ts.map +1 -1
  14. package/dist/src/config/types.js +1 -0
  15. package/dist/src/config/types.js.map +1 -1
  16. package/dist/src/core/compareScan.d.ts +9 -0
  17. package/dist/src/core/compareScan.d.ts.map +1 -0
  18. package/dist/src/core/compareScan.js +18 -0
  19. package/dist/src/core/compareScan.js.map +1 -0
  20. package/dist/src/core/determineComparisonFile.d.ts +11 -0
  21. package/dist/src/core/determineComparisonFile.d.ts.map +1 -0
  22. package/dist/src/core/determineComparisonFile.js +34 -0
  23. package/dist/src/core/determineComparisonFile.js.map +1 -0
  24. package/dist/src/core/diffEnv.d.ts +19 -0
  25. package/dist/src/core/diffEnv.d.ts.map +1 -0
  26. package/dist/src/core/diffEnv.js +31 -0
  27. package/dist/src/core/diffEnv.js.map +1 -0
  28. package/dist/src/core/helpers/resolveFromCwd.d.ts +8 -0
  29. package/dist/src/core/helpers/resolveFromCwd.d.ts.map +1 -0
  30. package/dist/src/core/helpers/resolveFromCwd.js +9 -0
  31. package/dist/src/core/helpers/resolveFromCwd.js.map +1 -0
  32. package/dist/src/core/parseEnv.d.ts +11 -0
  33. package/dist/src/core/parseEnv.d.ts.map +1 -0
  34. package/dist/src/core/parseEnv.js +26 -0
  35. package/dist/src/core/parseEnv.js.map +1 -0
  36. package/dist/src/core/patterns.d.ts +32 -0
  37. package/dist/src/core/patterns.d.ts.map +1 -0
  38. package/dist/src/core/patterns.js +69 -0
  39. package/dist/src/core/patterns.js.map +1 -0
  40. package/dist/src/core/scanFile.d.ts +10 -0
  41. package/dist/src/core/scanFile.d.ts.map +1 -0
  42. package/dist/src/core/scanFile.js +41 -0
  43. package/dist/src/core/scanFile.js.map +1 -0
  44. package/dist/src/core/scanJsonOutput.d.ts +11 -0
  45. package/dist/src/core/scanJsonOutput.d.ts.map +1 -0
  46. package/dist/src/core/scanJsonOutput.js +56 -0
  47. package/dist/src/core/scanJsonOutput.js.map +1 -0
  48. package/dist/src/core/secretDetectors.d.ts.map +1 -1
  49. package/dist/src/core/secretDetectors.js +21 -15
  50. package/dist/src/core/secretDetectors.js.map +1 -1
  51. package/dist/src/index.d.ts +2 -2
  52. package/dist/src/index.d.ts.map +1 -1
  53. package/dist/src/index.js +2 -3
  54. package/dist/src/index.js.map +1 -1
  55. package/dist/src/services/codeBaseScanner.d.ts +1 -40
  56. package/dist/src/services/codeBaseScanner.d.ts.map +1 -1
  57. package/dist/src/services/codeBaseScanner.js +4 -315
  58. package/dist/src/services/codeBaseScanner.js.map +1 -1
  59. package/dist/src/services/fileWalker.d.ts +62 -0
  60. package/dist/src/services/fileWalker.d.ts.map +1 -0
  61. package/dist/src/services/fileWalker.js +238 -0
  62. package/dist/src/services/fileWalker.js.map +1 -0
  63. package/dist/src/services/scanOutputToConsole.d.ts +12 -0
  64. package/dist/src/services/scanOutputToConsole.d.ts.map +1 -0
  65. package/dist/src/services/scanOutputToConsole.js +134 -0
  66. package/dist/src/services/scanOutputToConsole.js.map +1 -0
  67. package/dist/types/scanUsage.d.ts +43 -0
  68. package/dist/types/scanUsage.d.ts.map +1 -0
  69. package/package.json +1 -1
@@ -1,47 +1,8 @@
1
- import { type SecretFinding } from '../core/secretDetectors.js';
2
- export interface EnvUsage {
3
- variable: string;
4
- file: string;
5
- line: number;
6
- column: number;
7
- pattern: 'process.env' | 'import.meta.env' | 'sveltekit' | 'deno' | 'next' | 'nuxt' | 'php';
8
- context: string;
9
- }
10
- export interface ScanOptions {
11
- cwd: string;
12
- include: string[];
13
- exclude: string[];
14
- ignore: string[];
15
- ignoreRegex: RegExp[];
16
- files?: string[];
17
- secrets?: boolean;
18
- }
19
- export interface ScanResult {
20
- used: EnvUsage[];
21
- missing: string[];
22
- unused: string[];
23
- stats: {
24
- filesScanned: number;
25
- totalUsages: number;
26
- uniqueVariables: number;
27
- };
28
- secrets: SecretFinding[];
29
- duplicates: {
30
- env?: Array<{
31
- key: string;
32
- count: number;
33
- }>;
34
- example?: Array<{
35
- key: string;
36
- count: number;
37
- }>;
38
- };
39
- }
1
+ import type { ScanOptions, ScanResult } from '../config/types.js';
40
2
  /**
41
3
  * Scans the codebase for environment variable usage based on the provided options.
42
4
  * @param opts - Options for scanning the codebase.
43
5
  * @returns A promise that resolves to the scan result containing used, missing, and unused variables.
44
6
  */
45
7
  export declare function scanCodebase(opts: ScanOptions): Promise<ScanResult>;
46
- export declare function compareWithEnvFiles(scanResult: ScanResult, envVariables: Record<string, string | undefined>): ScanResult;
47
8
  //# sourceMappingURL=codeBaseScanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codeBaseScanner.d.ts","sourceRoot":"","sources":["../../../src/services/codeBaseScanner.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EACH,aAAa,GACb,iBAAiB,GACjB,WAAW,GACX,MAAM,GACN,MAAM,GACN,MAAM,GACN,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,UAAU,EAAE;QACV,GAAG,CAAC,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACjD,CAAC;CACH;AAwED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAyDzE;AA2RD,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC/C,UAAU,CAYZ"}
1
+ {"version":3,"file":"codeBaseScanner.d.ts","sourceRoot":"","sources":["../../../src/services/codeBaseScanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAY,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAS5E;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAwDzE"}
@@ -1,73 +1,9 @@
1
1
  import fs from 'fs/promises';
2
2
  import path from 'path';
3
- import fsSync from 'fs';
4
3
  import { detectSecretsInSource, } from '../core/secretDetectors.js';
5
- // Framework-specific patterns for finding environment variable usage
6
- const ENV_PATTERNS = [
7
- {
8
- name: 'process.env',
9
- regex: /process\.env\.([A-Z_][A-Z0-9_]*)/g,
10
- frameworks: ['node', 'next', 'general'],
11
- },
12
- {
13
- name: 'import.meta.env',
14
- regex: /import\.meta\.env\.([A-Z_][A-Z0-9_]*)/g,
15
- frameworks: ['vite', 'svelte', 'vue'],
16
- },
17
- {
18
- name: 'sveltekit',
19
- regex: /\$env\/(?:static|dynamic)\/(?:private|public)\/([A-Z_][A-Z0-9_]*)/g,
20
- frameworks: ['sveltekit'],
21
- },
22
- {
23
- name: 'deno',
24
- regex: /Deno\.env\.get\(['"`]([A-Z_][A-Z0-9_]*)['"`]\)/g,
25
- frameworks: ['deno'],
26
- },
27
- {
28
- name: 'next',
29
- regex: /process\.env\.(NEXT_PUBLIC_[A-Z_][A-Z0-9_]*)/g,
30
- frameworks: ['next'],
31
- },
32
- {
33
- name: 'nuxt',
34
- regex: /(?:\$config|useRuntimeConfig\(\))\.([A-Z_][A-Z0-9_]*)/g,
35
- frameworks: ['nuxt'],
36
- },
37
- {
38
- name: 'php',
39
- regex: /(getenv\(['"`]([A-Z_][A-Z0-9_]*)['"`]\)|\$_ENV\[['"`]([A-Z_][A-Z0-9_]*)['"`]\])/g,
40
- frameworks: ['php'],
41
- }
42
- ];
43
- const DEFAULT_INCLUDE_EXTENSIONS = [
44
- '.js',
45
- '.ts',
46
- '.jsx',
47
- '.tsx',
48
- '.vue',
49
- '.svelte',
50
- '.mjs',
51
- '.cjs',
52
- ];
53
- const DEFAULT_EXCLUDE_PATTERNS = [
54
- 'node_modules',
55
- '.sveltekit',
56
- '.svelte-kit',
57
- '_actions',
58
- 'dist',
59
- 'build',
60
- '.next',
61
- '.nuxt',
62
- 'coverage',
63
- '.git',
64
- '.vscode',
65
- '.idea',
66
- '.test.',
67
- '.spec.',
68
- '__tests__',
69
- '__mocks__',
70
- ];
4
+ import { DEFAULT_EXCLUDE_PATTERNS } from '../core/patterns.js';
5
+ import { scanFile } from '../core/scanFile.js';
6
+ import { findFiles } from './fileWalker.js';
71
7
  /**
72
8
  * Scans the codebase for environment variable usage based on the provided options.
73
9
  * @param opts - Options for scanning the codebase.
@@ -89,14 +25,13 @@ export async function scanCodebase(opts) {
89
25
  allUsages.push(...fileUsages);
90
26
  if (opts.secrets) {
91
27
  try {
92
- // Brug relativ path i findings, så output matcher dine øvrige prints
93
28
  const relativePath = path.relative(opts.cwd, filePath);
94
29
  const sec = detectSecretsInSource(relativePath, content);
95
30
  if (sec.length)
96
31
  allSecrets.push(...sec);
97
32
  }
98
33
  catch {
99
- // aldrig fail scannet pga. detector; bare fortsæt
34
+ // Ignore secret detection errors
100
35
  }
101
36
  }
102
37
  filesScanned++;
@@ -126,250 +61,4 @@ export async function scanCodebase(opts) {
126
61
  },
127
62
  };
128
63
  }
129
- function expandBraceSets(pattern) {
130
- // Single-level brace expansion: **/*.{js,ts,svelte} -> [**/*.js, **/*.ts, **/*.svelte]
131
- const m = pattern.match(/\{([^}]+)\}/);
132
- if (!m || m[1] === undefined)
133
- return [pattern];
134
- const variants = m[1]
135
- .split(',')
136
- .map((p) => p.trim())
137
- .filter(Boolean);
138
- const prefix = pattern.slice(0, m.index);
139
- const suffix = pattern.slice(m.index + m[0].length);
140
- return variants.flatMap((v) => expandBraceSets(`${prefix}${v}${suffix}`));
141
- }
142
- /**
143
- * Recursively finds all files in the given directory matching the include patterns,
144
- * while excluding files and directories that match the exclude patterns.
145
- * @param rootDir The root directory to start searching from.
146
- * @param opts Options for include, exclude patterns and files override.
147
- * @returns A promise that resolves to an array of file paths.
148
- */
149
- async function findFiles(rootDir, opts) {
150
- // If --files provided, keep existing replacement behavior
151
- if (opts.files && opts.files.length > 0) {
152
- return findFilesByPatterns(rootDir, opts.files);
153
- }
154
- const defaultPatterns = getDefaultPatterns();
155
- const rawInclude = opts.include.length > 0
156
- ? [...defaultPatterns, ...opts.include]
157
- : defaultPatterns;
158
- const includePatterns = rawInclude.flatMap(expandBraceSets);
159
- const files = [];
160
- const walked = new Set();
161
- // Compute additional roots for include patterns that point outside cwd or are absolute
162
- const extraRoots = new Set();
163
- for (const p of includePatterns) {
164
- const hasParentEscape = p.includes('..') || path.isAbsolute(p);
165
- if (!hasParentEscape)
166
- continue;
167
- const dir = getPatternBaseDir(rootDir, p);
168
- if (dir && !dir.startsWith(rootDir)) {
169
- extraRoots.add(dir);
170
- }
171
- }
172
- async function walk(startDir) {
173
- // prevent duplicate subtree walks
174
- const key = path.resolve(startDir);
175
- if (walked.has(key))
176
- return;
177
- walked.add(key);
178
- let entries;
179
- try {
180
- entries = await fs.readdir(startDir, { withFileTypes: true });
181
- }
182
- catch {
183
- return;
184
- }
185
- for (const entry of entries) {
186
- const fullPath = path.join(startDir, entry.name);
187
- const relativeToRoot = path.relative(rootDir, fullPath);
188
- // Exclude checks should use path relative to *rootDir* (keeps existing semantics)
189
- if (shouldExclude(entry.name, relativeToRoot, [
190
- ...DEFAULT_EXCLUDE_PATTERNS,
191
- ...opts.exclude,
192
- ])) {
193
- continue;
194
- }
195
- if (entry.isDirectory()) {
196
- await walk(fullPath);
197
- }
198
- else if (entry.isFile() &&
199
- shouldInclude(entry.name, relativeToRoot, includePatterns)) {
200
- files.push(fullPath);
201
- }
202
- }
203
- }
204
- // Walk root first (current behavior)
205
- await walk(rootDir);
206
- // Walk any extra roots (e.g., ../../packages/…)
207
- for (const r of extraRoots) {
208
- await walk(r);
209
- }
210
- return files;
211
- }
212
- function getPatternBaseDir(rootDir, pattern) {
213
- // Stop at first glob char — DO NOT include '/' here
214
- const idx = pattern.search(/[*?\[\]{}]/); // <— removed '/'
215
- const raw = idx === -1 ? pattern : pattern.slice(0, idx);
216
- const base = path.isAbsolute(raw) ? raw : path.resolve(rootDir, raw);
217
- try {
218
- const st = fsSync.statSync(base);
219
- if (st.isDirectory())
220
- return base;
221
- if (st.isFile())
222
- return path.dirname(base);
223
- }
224
- catch {
225
- const dir = path.dirname(base);
226
- try {
227
- const st2 = fsSync.statSync(dir);
228
- if (st2.isDirectory())
229
- return dir;
230
- }
231
- catch { }
232
- }
233
- return null;
234
- }
235
- /**
236
- * Find files using the --files patterns (complete replacement mode)
237
- */
238
- async function findFilesByPatterns(rootDir, patterns) {
239
- const expanded = patterns.flatMap(expandBraceSets);
240
- const files = [];
241
- async function walk(currentDir) {
242
- let entries;
243
- try {
244
- entries = await fs.readdir(currentDir, { withFileTypes: true });
245
- }
246
- catch {
247
- return;
248
- }
249
- for (const entry of entries) {
250
- const fullPath = path.join(currentDir, entry.name);
251
- const relativePath = path.relative(rootDir, fullPath);
252
- if (entry.isDirectory()) {
253
- await walk(fullPath);
254
- }
255
- else if (entry.isFile() &&
256
- shouldInclude(entry.name, relativePath, expanded)) {
257
- files.push(fullPath);
258
- }
259
- }
260
- }
261
- await walk(rootDir);
262
- return files;
263
- }
264
- /**
265
- * Generate default patterns from extensions
266
- */
267
- function getDefaultPatterns() {
268
- return DEFAULT_INCLUDE_EXTENSIONS.map((ext) => `**/*${ext}`);
269
- }
270
- /**
271
- * Check if a file should be included based on its name, path, and include patterns.
272
- * @param fileName The name of the file.
273
- * @param relativePath The relative path of the file.
274
- * @param patterns The include patterns to match against.
275
- * @returns True if the file should be included, false otherwise.
276
- */
277
- function shouldInclude(fileName, relativePath, patterns) {
278
- // If no include patterns specified, use default extensions
279
- if (!patterns.length) {
280
- return DEFAULT_INCLUDE_EXTENSIONS.some((ext) => fileName.endsWith(ext));
281
- }
282
- return patterns.some((pattern) => {
283
- if (pattern.startsWith('**')) {
284
- // Handle **/*.ext patterns
285
- const ext = pattern.substring(pattern.lastIndexOf('.'));
286
- return fileName.endsWith(ext);
287
- }
288
- else if (pattern.includes('*')) {
289
- // Simple glob pattern matching
290
- return matchesGlobPattern(relativePath, pattern);
291
- }
292
- else {
293
- // Exact match or extension
294
- return relativePath.endsWith(pattern) || fileName.endsWith(pattern);
295
- }
296
- });
297
- }
298
- function shouldExclude(fileName, relativePath, patterns) {
299
- // Check if filename or any part of the path should be excluded
300
- return patterns.some((pattern) => {
301
- // Direct name match (like 'node_modules')
302
- if (fileName === pattern)
303
- return true;
304
- // Path contains pattern
305
- if (relativePath.includes(pattern))
306
- return true;
307
- // Pattern matching for extensions and wildcards
308
- if (pattern.includes('*')) {
309
- return matchesGlobPattern(relativePath, pattern);
310
- }
311
- // Special case for test files
312
- if (pattern.includes('.test.') && fileName.includes('.test.'))
313
- return true;
314
- if (pattern.includes('.spec.') && fileName.includes('.spec.'))
315
- return true;
316
- return false;
317
- });
318
- }
319
- function matchesGlobPattern(filePath, pattern) {
320
- const hasSep = /[\/\\]/.test(pattern);
321
- const subject = hasSep ? filePath : path.basename(filePath);
322
- const normalized = subject.replace(/\\/g, '/');
323
- let normalizedPattern = pattern.replace(/\\/g, '/');
324
- let regexPattern = normalizedPattern
325
- .replace(/[.+^${}()|[\]\\]/g, '\\$&')
326
- .replace(/\*\*/g, '___DOUBLESTAR___')
327
- .replace(/\*/g, '[^/]*')
328
- .replace(/___DOUBLESTAR___/g, '.*')
329
- .replace(/\?/g, '[^/]');
330
- const re = new RegExp(`^${regexPattern}$`, 'i');
331
- return re.test(normalized);
332
- }
333
- async function scanFile(filePath, content, opts) {
334
- const usages = [];
335
- const lines = content.split('\n');
336
- const relativePath = path.relative(opts.cwd, filePath);
337
- for (const pattern of ENV_PATTERNS) {
338
- let match;
339
- const regex = new RegExp(pattern.regex.source, pattern.regex.flags);
340
- while ((match = regex.exec(content)) !== null) {
341
- const variable = match[1];
342
- if (!variable)
343
- continue;
344
- const matchIndex = match.index;
345
- // Find line and column
346
- const beforeMatch = content.substring(0, matchIndex);
347
- const lineNumber = beforeMatch.split('\n').length;
348
- const lastNewlineIndex = beforeMatch.lastIndexOf('\n');
349
- const column = matchIndex - lastNewlineIndex;
350
- // Get the context (the actual line)
351
- const contextLine = lines[lineNumber - 1]?.trim() || '';
352
- usages.push({
353
- variable,
354
- file: relativePath,
355
- line: lineNumber,
356
- column,
357
- pattern: pattern.name,
358
- context: contextLine,
359
- });
360
- }
361
- }
362
- return usages;
363
- }
364
- export function compareWithEnvFiles(scanResult, envVariables) {
365
- const usedVariables = new Set(scanResult.used.map((u) => u.variable));
366
- const envKeys = new Set(Object.keys(envVariables));
367
- const missing = [...usedVariables].filter((v) => !envKeys.has(v));
368
- const unused = [...envKeys].filter((v) => !usedVariables.has(v));
369
- return {
370
- ...scanResult,
371
- missing,
372
- unused,
373
- };
374
- }
375
64
  //# sourceMappingURL=codeBaseScanner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codeBaseScanner.js","sourceRoot":"","sources":["../../../src/services/codeBaseScanner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codeBaseScanner.js","sourceRoot":"","sources":["../../../src/services/codeBaseScanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EACL,qBAAqB,GAEtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAiB;IAClD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE;QACtC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,CAAC,GAAG,wBAAwB,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACvD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,oBAAoB;KACnE,CAAC,CAAC;IAEH,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,UAAU,GAAoB,EAAE,CAAC;IAEvC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAC3D,SAAS,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;oBACvD,MAAM,GAAG,GAAG,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;oBACzD,IAAI,GAAG,CAAC,MAAM;wBAAE,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;gBAC1C,CAAC;gBAAC,MAAM,CAAC;oBACP,iCAAiC;gBACnC,CAAC;YACH,CAAC;YACD,YAAY,EAAE,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;YACvD,SAAS;QACX,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CACrC,CAAC,KAAK,EAAE,EAAE,CACR,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QACrC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAChE,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5E,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE;YACL,YAAY;YACZ,WAAW,EAAE,cAAc,CAAC,MAAM;YAClC,eAAe,EAAE,eAAe,CAAC,MAAM;SACxC;QACD,UAAU,EAAE;YACV,GAAG,EAAE,EAAE;YACP,OAAO,EAAE,EAAE;SACZ;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Recursively finds all files in the given directory matching the include patterns,
3
+ * while excluding files and directories that match the exclude patterns.
4
+ * @param rootDir The root directory to start searching from.
5
+ * @param opts Options for include, exclude patterns and files override.
6
+ * @returns A promise that resolves to an array of file paths.
7
+ */
8
+ export declare function findFiles(rootDir: string, opts: {
9
+ include: string[];
10
+ exclude: string[];
11
+ files?: string[];
12
+ }): Promise<string[]>;
13
+ /**
14
+ * Expands brace sets in a glob pattern.
15
+ * @param pattern - The glob pattern to expand.
16
+ * @returns An array of expanded glob patterns.
17
+ */
18
+ export declare function expandBraceSets(pattern: string): string[];
19
+ /**
20
+ * Gets the base directory for a glob pattern.
21
+ * @param rootDir The root directory to resolve against.
22
+ * @param pattern The glob pattern to analyze.
23
+ * @returns The base directory for the pattern, or null if not found.
24
+ */
25
+ export declare function getPatternBaseDir(rootDir: string, pattern: string): string | null;
26
+ /**
27
+ * Find files using the --files patterns (complete replacement mode)
28
+ * @param rootDir The root directory to search within.
29
+ * @param patterns The glob patterns to match files against.
30
+ * @returns A promise that resolves to an array of matching file paths.
31
+ */
32
+ export declare function findFilesByPatterns(rootDir: string, patterns: string[]): Promise<string[]>;
33
+ /**
34
+ * Generate default patterns from extensions
35
+ * @returns An array of default glob patterns.
36
+ */
37
+ export declare function getDefaultPatterns(): string[];
38
+ /**
39
+ * Check if a file should be included based on its name, path, and include patterns.
40
+ * @param fileName The name of the file.
41
+ * @param relativePath The relative path of the file.
42
+ * @param patterns The include patterns to match against.
43
+ * @returns True if the file should be included, false otherwise.
44
+ */
45
+ export declare function shouldInclude(fileName: string, relativePath: string, patterns: string[]): boolean;
46
+ /**
47
+ * Checks if a file should be excluded based on its name, path, and exclude patterns.
48
+ * @param fileName The name of the file.
49
+ * @param relativePath The relative path of the file.
50
+ * @param patterns The exclude patterns to match against.
51
+ * @returns True if the file should be excluded, false otherwise.
52
+ */
53
+ export declare function shouldExclude(fileName: string, relativePath: string, patterns: string[]): boolean;
54
+ /**
55
+ * Checks if a file path matches a glob pattern.
56
+ * A glob pattern is a string that may contain special characters like '*', '**', and '?' to represent wildcards and variable parts of the path.
57
+ * @param filePath The path of the file to check.
58
+ * @param pattern The glob pattern to match against.
59
+ * @returns True if the file path matches the pattern, false otherwise.
60
+ */
61
+ export declare function matchesGlobPattern(filePath: string, pattern: string): boolean;
62
+ //# sourceMappingURL=fileWalker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileWalker.d.ts","sourceRoot":"","sources":["../../../src/services/fileWalker.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/D,OAAO,CAAC,MAAM,EAAE,CAAC,CA0EnB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAWzD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,CAkBf;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CA6BnB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAmBT;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAoBT;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAgB7E"}