Skip to content

Commit c3d354e

Browse files
committed
fix(glob): add dot:true to micromatch for dot directory matching
Adds { dot: true } option to micromatch.some() calls in filterBySupportedScanFiles() and isReportSupportedFile() to ensure patterns like **/poetry.lock match files in dot directories such as .mcp-servers/neo4j/poetry.lock.
1 parent ef7fb1f commit c3d354e

File tree

2 files changed

+85
-2
lines changed

2 files changed

+85
-2
lines changed

src/utils/glob.mts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ export function filterBySupportedScanFiles(
161161
supportedFiles: SocketSdkSuccessResult<'getReportSupportedFiles'>['data'],
162162
): string[] {
163163
const patterns = getSupportedFilePatterns(supportedFiles)
164-
return filepaths.filter(p => micromatch.some(p, patterns))
164+
return filepaths.filter(p => micromatch.some(p, patterns, { dot: true }))
165165
}
166166

167167
export function getSupportedFilePatterns(
@@ -286,7 +286,7 @@ export function isReportSupportedFile(
286286
supportedFiles: SocketSdkSuccessResult<'getReportSupportedFiles'>['data'],
287287
) {
288288
const patterns = getSupportedFilePatterns(supportedFiles)
289-
return micromatch.some(filepath, patterns)
289+
return micromatch.some(filepath, patterns, { dot: true })
290290
}
291291

292292
export function pathsToGlobPatterns(

test/glob.test.mts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import { describe, expect, it } from 'vitest'
2+
3+
import {
4+
filterBySupportedScanFiles,
5+
isReportSupportedFile,
6+
} from '../src/utils/glob.mts'
7+
8+
import type { SocketSdkSuccessResult } from '@socketsecurity/sdk'
9+
10+
describe('glob', () => {
11+
const mockSupportedFiles: SocketSdkSuccessResult<'getReportSupportedFiles'>['data'] =
12+
{
13+
npm: {
14+
'package.json': { pattern: 'package.json' },
15+
'poetry.lock': { pattern: 'poetry.lock' },
16+
},
17+
}
18+
19+
describe('filterBySupportedScanFiles', () => {
20+
it('should match files in dot directories', () => {
21+
const filepaths = [
22+
'.mcp-servers/neo4j/poetry.lock',
23+
'.hidden/package.json',
24+
'regular/poetry.lock',
25+
'node_modules/package.json',
26+
]
27+
28+
const result = filterBySupportedScanFiles(filepaths, mockSupportedFiles)
29+
30+
expect(result).toEqual([
31+
'.mcp-servers/neo4j/poetry.lock',
32+
'.hidden/package.json',
33+
'regular/poetry.lock',
34+
'node_modules/package.json',
35+
])
36+
})
37+
38+
it('should filter out non-matching files', () => {
39+
const filepaths = [
40+
'.mcp-servers/neo4j/poetry.lock',
41+
'.hidden/random.txt',
42+
'package.json',
43+
'src/index.ts',
44+
]
45+
46+
const result = filterBySupportedScanFiles(filepaths, mockSupportedFiles)
47+
48+
expect(result).toEqual(['.mcp-servers/neo4j/poetry.lock', 'package.json'])
49+
})
50+
})
51+
52+
describe('isReportSupportedFile', () => {
53+
it('should return true for files in dot directories', () => {
54+
expect(
55+
isReportSupportedFile(
56+
'.mcp-servers/neo4j/poetry.lock',
57+
mockSupportedFiles,
58+
),
59+
).toBe(true)
60+
expect(
61+
isReportSupportedFile('.hidden/package.json', mockSupportedFiles),
62+
).toBe(true)
63+
})
64+
65+
it('should return true for regular files', () => {
66+
expect(
67+
isReportSupportedFile('regular/poetry.lock', mockSupportedFiles),
68+
).toBe(true)
69+
expect(isReportSupportedFile('package.json', mockSupportedFiles)).toBe(
70+
true,
71+
)
72+
})
73+
74+
it('should return false for non-matching files', () => {
75+
expect(
76+
isReportSupportedFile('.hidden/random.txt', mockSupportedFiles),
77+
).toBe(false)
78+
expect(isReportSupportedFile('src/index.ts', mockSupportedFiles)).toBe(
79+
false,
80+
)
81+
})
82+
})
83+
})

0 commit comments

Comments
 (0)