diff --git a/package.json b/package.json index 9b37d361..b307d504 100644 --- a/package.json +++ b/package.json @@ -21,10 +21,11 @@ "bluebird": "^2.10.2", "fs-extra": "^0.26.4", "glob": "^6.0.4", + "is-glob": "^3.1.0", + "loader-utils": "^0.2.15", "lodash": "^4.3.0", "minimatch": "^3.0.0", - "node-dir": "^0.1.10", - "loader-utils": "^0.2.15" + "node-dir": "^0.1.10" }, "scripts": { "lint": "eslint src/ tests/", diff --git a/src/preProcessPattern.js b/src/preProcessPattern.js index 5ca4e4ac..d1474cc9 100644 --- a/src/preProcessPattern.js +++ b/src/preProcessPattern.js @@ -1,10 +1,10 @@ import Promise from 'bluebird'; import path from 'path'; import _ from 'lodash'; +import isGlob from 'is-glob'; const fs = Promise.promisifyAll(require('fs')); // eslint-disable-line import/no-commonjs -var isGlobLike = /\*/; // https://www.debuggex.com/r/VH2yS2mvJOitiyr3 var isTemplateLike = /(\[ext\])|(\[name\])|(\[path\])|(\[folder\])|(\[emoji(:\d+)?\])|(\[(\w+:)?hash(:\w+)?(:\d+)?\])|(\[\d+\])/; @@ -57,7 +57,7 @@ export default function preProcessPattern(globalRef, pattern) { .statAsync(pattern.absoluteFrom) .catch(() => { // If from doesn't appear to be a glob, then log a warning - if (isGlobLike.test(pattern.from)) { + if (isGlob(pattern.from)) { pattern.fromType = 'glob'; } else { const msg = `unable to locate '${pattern.from}' at '${pattern.absoluteFrom}'`; diff --git a/tests/index.js b/tests/index.js index 1467e4d2..835ca170 100644 --- a/tests/index.js +++ b/tests/index.js @@ -209,6 +209,22 @@ describe('apply function', () => { .catch(done); }); + it('can use a bracketed glob to move a file to the root directory', (done) => { + runEmit({ + expectedAssetKeys: [ + 'directory/directoryfile.txt', + 'directory/nested/nestedfile.txt', + 'file.txt', + 'noextension' + ], + patterns: [{ + from: '{file.txt,noextension,directory/**/*}' + }] + }) + .then(done) + .catch(done); + }); + it('can use a glob object to move a file to the root directory', (done) => { runEmit({ expectedAssetKeys: [