Skip to content

Commit 8648a39

Browse files
committed
feat(api/commit): add support for excluding directories in ls.dirs()
BREAKING CHANGE: `ls.dirs()` from `api/commit` now takes an options object as the second parameter instead of a `prefix`. If you're using a prefix you'll need to make the following change: ```ts // Before ls.dirs('./packages', 'my-prefix'); // After ls.dirs('./packages', { prefix: 'my-prefix' }); ``` BREAKING CHANGE: `ls.dirs()` now excludes `node_modules` directories by default. If for some reason you want to include \`node_modules\`, you'll need to explicitly set \`exclude\` to \`null\`: ```ts // Before ls.dirs('./packages'); // After ls.dirs('./packages', { exclude: null }); ```
1 parent 9997545 commit 8648a39

File tree

4 files changed

+46
-5
lines changed

4 files changed

+46
-5
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
!node_modules

src/api/__tests__/__fixtures__/ls/dirs/node_modules/.gitkeep

Whitespace-only changes.

src/api/__tests__/commit.js

+19-1
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,29 @@ describe('ls', () => {
2626
})
2727

2828
test('with prefix', () => {
29-
const result = ls.dirs(`${fixtures}/ls/dirs`, 'prefix')
29+
const result = ls.dirs(`${fixtures}/ls/dirs`, {prefix: 'prefix'})
3030

3131
const expected = ['prefix/.baz', 'prefix/bar', 'prefix/foo']
3232

3333
expect(result.sort()).toEqual(expected.sort())
3434
})
35+
36+
test('with custom exclude (string)', () => {
37+
const result = ls.dirs(`${fixtures}/ls/dirs`, {exclude: 'foo'})
38+
39+
const expected = ['.baz', 'bar', 'node_modules']
40+
41+
expect(result.sort()).toEqual(expected.sort())
42+
})
43+
44+
test('with custom exclude (RegExp)', () => {
45+
const result = ls.dirs(`${fixtures}/ls/dirs`, {
46+
exclude: /(^node_modules|^bar)/,
47+
})
48+
49+
const expected = ['.baz', 'foo']
50+
51+
expect(result.sort()).toEqual(expected.sort())
52+
})
3553
})
3654
})

src/api/commit.js

+26-4
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,39 @@ const configs = path =>
4444
)}`,
4545
)
4646

47+
/**
48+
* @typedef DirsOptions
49+
* @property {string} [prefix] prefix to prepend to each scope entry (e.g:
50+
* `{ prefix: 'prefix' }` becomes `type(prefix/scope)`)
51+
* @property {RegExp | string | null} [exclude] expression for excluding
52+
* directories, defaults to `^node_modules`
53+
*/
54+
4755
/**
4856
* Enumerate one level of directories
4957
*
5058
* @param {string} path - directory to enumerate
51-
* @param {string} [prefix] - prefix for each scope entry (e.g: `prefix/entry`)
59+
* @param {DirsOptions} options -
5260
*/
53-
const dirs = (path, prefix) =>
54-
readdirSync(path)
55-
.filter(f => statSync(join(path, f)).isDirectory())
61+
const dirs = (path, options) => {
62+
const {exclude, prefix} = {exclude: /^node_modules/, ...options}
63+
64+
/**
65+
* @param {string} f filename
66+
*/
67+
const test = f => {
68+
if (!exclude) return true
69+
70+
return !(typeof exclude === 'string'
71+
? f.includes(exclude)
72+
: exclude.test(f))
73+
}
74+
75+
return readdirSync(path)
76+
.filter(f => statSync(join(path, f)).isDirectory() && test(f))
5677
.map(item => (prefix ? `${prefix}/${item}` : item))
5778
.map(item => item.toLowerCase())
79+
}
5880

5981
const ls = {configs, dirs}
6082

0 commit comments

Comments
 (0)