UNPKG

@kpi4me/golden-layout

Version:

A multi-screen javascript Layout manager https://golden-layout.com

65 lines (47 loc) 1.86 kB
var util = require('util'), minimatch = require('minimatch'), Glob = require('glob').Glob, EventEmitter = require('events').EventEmitter; module.exports = fileset; function fileset(include, exclude, options, cb) { if (typeof exclude === 'function') cb = exclude, exclude = ''; else if (typeof options === 'function') cb = options, options = {}; var includes = (typeof include === 'string') ? include.split(' ') : include; var excludes = (typeof exclude === 'string') ? exclude.split(' ') : exclude; var em = new EventEmitter, remaining = includes.length, results = []; if(!includes.length) return cb(new Error('Must provide an include pattern')); em.includes = includes.map(function(pattern) { return new fileset.Fileset(pattern, options) .on('error', cb ? cb : em.emit.bind(em, 'error')) .on('match', em.emit.bind(em, 'match')) .on('match', em.emit.bind(em, 'include')) .on('end', next.bind({}, pattern)) }); function next(pattern, matches) { results = results.concat(matches); if(!(--remaining)) { results = results.filter(function(file) { return !excludes.filter(function(glob) { var match = minimatch(file, glob, { matchBase: true }); if(match) em.emit('exclude', file); return match; }).length; }); if(cb) cb(null, results); em.emit('end', results); } } return em; } fileset.Fileset = function Fileset(pattern, options, cb) { if (typeof options === 'function') cb = options, options = {}; if (!options) options = {}; Glob.call(this, pattern, options); if(typeof cb === 'function') { this.on('error', cb); this.on('end', function(matches) { cb(null, matches); }); } }; util.inherits(fileset.Fileset, Glob);