diff --git a/lib/parse.js b/lib/parse.js index a71a238..3c93bc8 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -791,7 +791,7 @@ const parse = (input, options) => { prior.output = '(?:' + prior.output; prev.type = 'globstar'; - prev.output = globstar(opts) + '|$)'; + prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)'); prev.value += value; state.output += prior.output + prev.output; diff --git a/test/options.format.js b/test/options.format.js index a97a9cd..95a647c 100644 --- a/test/options.format.js +++ b/test/options.format.js @@ -44,13 +44,13 @@ describe('options.format', () => { assert(isMatch('.\\foo\\bar.js', '**/foo/**', { ...opts, windows: false })); assert(isMatch('.\\foo\\bar.js', './**/foo/**', opts)); equal(match(fixtures, '*', opts), ['a', 'b']); - equal(match(fixtures, '**/a/**', opts), ['a', 'a/a', 'a/c', 'a/b', 'a/x', 'a/a/a', 'a/a/b', 'a/a/a/a', 'a/a/a/a/a']); + equal(match(fixtures, '**/a/**', opts), ['a/a', 'a/c', 'a/b', 'a/x', 'a/a/a', 'a/a/b', 'a/a/a/a', 'a/a/a/a/a']); equal(match(fixtures, '*/*', opts), ['a/a', 'a/b', 'a/c', 'a/x', 'x/y', 'z/z']); equal(match(fixtures, '*/*/*', opts), ['a/a/a', 'a/a/b']); equal(match(fixtures, '*/*/*/*', opts), ['a/a/a/a']); equal(match(fixtures, '*/*/*/*/*', opts), ['a/a/a/a/a']); equal(match(fixtures, '*', opts), ['a', 'b']); - equal(match(fixtures, '**/a/**', opts), ['a', 'a/a', 'a/c', 'a/b', 'a/x', 'a/a/a', 'a/a/b', 'a/a/a/a', 'a/a/a/a/a']); + equal(match(fixtures, '**/a/**', opts), ['a/a', 'a/c', 'a/b', 'a/x', 'a/a/a', 'a/a/b', 'a/a/a/a', 'a/a/a/a/a']); equal(match(fixtures, 'a/*/a', opts), ['a/a/a']); equal(match(fixtures, 'a/*', opts), ['a/a', 'a/b', 'a/c', 'a/x']); equal(match(fixtures, 'a/*/*', opts), ['a/a/a', 'a/a/b']); diff --git a/test/options.ignore.js b/test/options.ignore.js index e511fdb..21a4650 100644 --- a/test/options.ignore.js +++ b/test/options.ignore.js @@ -20,7 +20,8 @@ describe('options.ignore', () => { const opts = { ignore: ['a/**'], strictSlashes: true }; const dotOpts = { ...opts, dot: true }; - assert.deepEqual(match(globs, '*', opts), ['b']); + assert.deepEqual(match(globs, '*', opts), ['a', 'b']); + assert.deepEqual(match(globs, '*', { ...opts, strictSlashes: false }), ['b']); assert.deepEqual(match(globs, '*', { ignore: '**/a' }), ['b']); assert.deepEqual(match(globs, '*/*', opts), ['x/y', 'z/z']); assert.deepEqual(match(globs, '*/*/*', opts), ['b/b/b', 'b/b/c', 'c/c/c', 'e/f/g', 'h/i/a', 'x/x/x', 'z/z/z']); @@ -31,7 +32,7 @@ describe('options.ignore', () => { assert.deepEqual(match(globs, '**/*/[b-z]', opts), ['b/b/b', 'b/b/c', 'c/c/c', 'e/f/g', 'x/x/x', 'x/y', 'z/z', 'z/z/z']); assert.deepEqual(match(globs, '*', { ignore: '**/a', dot: true }), ['.a', 'b']); - assert.deepEqual(match(globs, '*', dotOpts), ['.a', 'b']); + assert.deepEqual(match(globs, '*', dotOpts), ['.a', 'a', 'b']); assert.deepEqual(match(globs, '*/*', dotOpts), ['.a/a', 'x/y', 'z/z'].sort()); assert.deepEqual(match(globs, '*/*/*', dotOpts), ['.a/a/a', 'b/b/b', 'b/b/c', 'c/c/c', 'e/f/g', 'h/i/a', 'x/x/x', 'z/z/z'].sort()); assert.deepEqual(match(globs, '*/*/*/*', dotOpts), ['.a/a/a/a']);