From 4826e56c9c034113eadd86b46a97ed1254bf3252 Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Mon, 9 Dec 2019 14:07:22 +0300 Subject: [PATCH] fix: better to determine when glob is used --- README.md | 16 ++++++++++++++-- src/preProcessPattern.js | 22 +++++++++++++++------- test/from-option.test.js | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 1b7bc7ae..1008ea4f 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,12 @@ module.exports = { '/absolute/path/to/dir', '**/*', { glob: '**/*', dot: false }, + { + from: '**/*', + globOptions: { + dot: false, + }, + }, ]), ], }; @@ -122,8 +128,14 @@ Output path. module.exports = { plugins: [ new CopyPlugin([ - { from: '**/*', to: 'relative/path/to/dest/' }, - { from: '**/*', to: '/absolute/path/to/dest/' }, + { + from: '**/*', + to: 'relative/path/to/dest/', + }, + { + from: '**/*', + to: '/absolute/path/to/dest/', + }, ]), ], }; diff --git a/src/preProcessPattern.js b/src/preProcessPattern.js index 37140c83..c7319188 100644 --- a/src/preProcessPattern.js +++ b/src/preProcessPattern.js @@ -22,9 +22,7 @@ export default function preProcessPattern(globalRef, pattern) { pattern = typeof pattern === 'string' - ? { - from: pattern, - } + ? { from: pattern } : Object.assign({}, pattern); if (pattern.from === '') { @@ -42,7 +40,8 @@ export default function preProcessPattern(globalRef, pattern) { pattern.context = path.join(context, pattern.context); } - const isFromGlobPatten = isObject(pattern.from) && pattern.from.glob; + const isFromGlobPatten = + (isObject(pattern.from) && pattern.from.glob) || pattern.globOptions; // Todo remove this in next major const isToDirectory = path.extname(pattern.to) === '' || pattern.to.slice(-1) === path.sep; @@ -76,12 +75,21 @@ export default function preProcessPattern(globalRef, pattern) { pattern.fromType = 'glob'; - const globOptions = Object.assign({}, pattern.from); + const globOptions = Object.assign( + {}, + pattern.globOptions ? pattern.globOptions : pattern.from + ); delete globOptions.glob; - pattern.glob = normalize(pattern.context, pattern.from.glob); + pattern.absoluteFrom = path.resolve( + pattern.context, + pattern.globOptions ? pattern.from : pattern.from.glob + ); + pattern.glob = normalize( + pattern.context, + pattern.globOptions ? pattern.from : pattern.from.glob + ); pattern.globOptions = globOptions; - pattern.absoluteFrom = path.resolve(pattern.context, pattern.from.glob); return Promise.resolve(pattern); } diff --git a/test/from-option.test.js b/test/from-option.test.js index 8a9662dd..804ab42d 100644 --- a/test/from-option.test.js +++ b/test/from-option.test.js @@ -518,5 +518,37 @@ describe('from option', () => { .then(done) .catch(done); }); + + it('should move files with the "globOptions" option', (done) => { + runEmit({ + expectedAssetKeys: ['.file.txt', 'file.txt'], + patterns: [ + { + from: '*.txt', + globOptions: { + dot: true, + }, + }, + ], + }) + .then(done) + .catch(done); + }); + + it('should move files with the "globOptions" option #2', (done) => { + runEmit({ + expectedAssetKeys: ['file.txt'], + patterns: [ + { + from: '*.txt', + globOptions: { + dot: false, + }, + }, + ], + }) + .then(done) + .catch(done); + }); }); });