Socket
Socket
Sign inDemoInstall

gulp-custom-filter

Package Overview
Dependencies
73
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.1.1 to 0.2.0

lib/assertions.js

19

gulpfile.js

@@ -0,7 +1,22 @@

var coveralls = require('gulp-coveralls');
var gulp = require('gulp');
var jasmine = require('gulp-jasmine');
var istanbul = require('gulp-istanbul');
gulp.task('test', function() {
gulp.task('test', ['test:pre'], function() {
return gulp.src('./test/**/*_spec.js')
.pipe(jasmine());
.pipe(jasmine())
.pipe(istanbul.writeReports())
.pipe(istanbul.enforceThresholds({ thresholds: { global: 90 } }));
});
gulp.task('test:pre', function() {
return gulp.src(['./index.js', './lib/**/*.js'])
.pipe(istanbul())
.pipe(istanbul.hookRequire());
});
gulp.task('coveralls', function() {
return gulp.src('./coverage/**/lcov.info')
.pipe(coveralls());
});

33

lib/basic-filters.js
'use strict';
var assertFunction = require('./assert-function');
var Promise = Promise || require('promise');
var assertIsFunction = require('./assertions').isFunction;
var promisenize = require('./promisenize');
function not(fn) {
assertFunction(fn, 'not');
assertIsFunction(fn, 'not', 'fn');
return function(file, encode) {
return !fn(file, encode);
return promisenize(fn)(file, encode)
.then(function(isTarget) {
return !isTarget;
});
};

@@ -13,7 +18,10 @@ }

function and() {
var filters = arguments;
var filters = Array.prototype.slice.call(arguments);
return function(file, encode) {
return Array.prototype.every.call(filters, function (fn) {
assertFunction(fn, 'and');
return fn(file, encode);
return Promise.all(filters.map(function(filter) {
assertIsFunction(filter, 'and', 'filters');
return promisenize(filter)(file, encode);
}))
.then(function(results) {
return results.every(function(result) { return result; });
});

@@ -24,7 +32,10 @@ };

function or() {
var filters = arguments;
var filters = Array.prototype.slice.call(arguments);
return function(file, encode) {
return Array.prototype.some.call(filters, function (fn) {
assertFunction(fn, 'or');
return fn(file, encode);
return Promise.all(filters.map(function(filter) {
assertIsFunction(filter, 'and', 'filters');
return promisenize(filter)(file, encode);
}))
.then(function(results) {
return results.some(function(result) { return result; });
});

@@ -31,0 +42,0 @@ };

'use strict';
var assertFunction = require('./assert-function');
var assertIsFunction = require('./assertions').isFunction;
var promisenize = require('./promisenize');
var through = require('through2');
function filter(fn) {
assertFunction(fn);
assertIsFunction(fn);
return through.obj(function(file, encode, done) {
if (fn.length < 3) {
if (fn(file, encode)) {
this.push(file);
}
done();
} else {
var self = this;
fn(file, encode, function(err, accepted) {
if (accepted) {
self.push(file);
}
done(err);
});
}
promisenize(fn)(file, encode)
.then(function(isTarget) {
if (isTarget) {
this.push(file);
}
done();
}.bind(this), function(err) {
done(err);
});
});

@@ -24,0 +20,0 @@ }

'use strict';
var Set = require('es6-set');
var assertIsString = require('./assertions').isString;
var assertIsStringOrArray = require('./assertions').isStringOrArray;
var fs = require('fs');
var gutil = require('gulp-util');
var ig = require('ignore');
var minimatch = require('minimatch');
var path = require('path');
function glob(pattern, options) {
if (typeof pattern !== 'string' && typeof pattern !== 'array') {
throw new gutil.PluginError('gulp-custom-filter.glob', '`pattern` should be a string or an array');
}
assertIsStringOrArray(pattern, 'glob', 'pattern');
return function(file, encode) {

@@ -15,4 +19,52 @@ return minimatch(file.relative, pattern, options);

function ignore(filename) {
assertIsString(filename, 'ignore', 'filename');
var ignoreFilter = null;
var error = null;
var queue = [];
fs.readFile(filename, function(err, data) {
if (err) {
gutil.log(gutil.colors.red('gulp-custom-filter.ignore: ' + err));
error = err;
} else {
ignoreFilter = ig().addPattern(
data.toString('utf-8')
.replace(/\r/g, '\n').trim().split('\n')
.filter(function (str) {
return str.length > 0;
})
.map(normalize)
).createFilter();
}
queue.forEach(function(entry) {
if (error) {
entry.callback(error);
} else {
entry.callback(null, ignoreFilter(normalize(entry.filename)));
}
});
});
return function(file, encode, callback) {
if (error) {
callback(error);
} else if (ignoreFilter !== null) {
callback(null, ignoreFilter(normalize(file.relative)));
} else {
queue.push({
callback: callback,
filename: file.relative
});
}
};
}
function normalize(filename) {
return path.normalize(filename).replace(/\\/g, '/');
}
module.exports = {
glob: glob
glob: glob,
ignore: ignore
};
{
"name": "gulp-custom-filter",
"version": "0.1.1",
"version": "0.2.0",
"description": "A gulp plugin to filter files by customized filters",
"main": "index.js",
"scripts": {
"test": "gulp test"
"test": "gulp test",
"coveralls": "gulp coveralls"
},

@@ -27,9 +28,15 @@ "repository": {

"gulp": "~3.9.0",
"gulp-jasmine": "~2.1.0"
"gulp-coveralls": "^0.1.4",
"gulp-istanbul": "^0.10.2",
"gulp-jasmine": "~2.1.0",
"mock-fs": "^3.4.0"
},
"dependencies": {
"es6-set": "^0.1.2",
"gulp-util": "~3.0.7",
"ignore": "^2.2.19",
"minimatch": "^3.0.0",
"promise": "^7.0.4",
"through2": "~2.0.0"
}
}
# gulp-custom-filter
[![Build Status](https://secure.travis-ci.org/a-miyashita/gulp-custom-filter.png?branch=master)](http://travis-ci.org/a-miyashita/gulp-custom-filter)
[![Coverage Status](https://coveralls.io/repos/a-miyashita/gulp-custom-filter/badge.svg?branch=master&service=github)](https://coveralls.io/github/a-miyashita/gulp-custom-filter?branch=master)

@@ -122,2 +123,15 @@ A gulp plugin to filter files by customized filters.

#### filter.ignore(filename)
Ignore list filter.
```javascript
var ignore = filter.ignore;
gulp.src('./**/*.*')
.pipe(filter(ignore('.gitignore')))
```
* `filename`: filename to ignore file.
## License

@@ -124,0 +138,0 @@

'use strict';
var check = require('./util').checkFilter;
var check = require('./test-util').checkFilter;
var filters = require('../lib/basic-filters');

@@ -5,0 +5,0 @@ var fixture = require('./fixture.js');

'use strict';
var check = require('./util').checkFilter;
var check = require('./test-util').checkFilter;
var fixture = require('./fixture.js');
describe('filter()', function() {
it('should filter files', function(done) {
it('should filter files with a sync filter', function(done) {
check(fixture.files, fixture.filters.javascript, function(filenames) {

@@ -13,2 +13,27 @@ expect(filenames).toEqual(['a.js', 'b.js']);

});
it('should filter files with an async filter', function(done) {
check(fixture.files, fixture.filters.asyncJavascript, function(filenames) {
expect(filenames).toEqual(['a.js', 'b.js']);
done();
});
});
it('should fail if an filter throws an error', function(done) {
check(fixture.files, fixture.filters.throwError, function(_) {
fail();
done();
}, function() {
done();
});
});
it('should fail if an async filter returns a rejected promise', function(done) {
check(fixture.files, fixture.filters.asyncThrowError, function(_) {
fail();
done();
}, function() {
done();
});
});
});

@@ -36,4 +36,15 @@ 'use strict';

return filename.length > 3 && filename.indexOf('.js') >= 0;
},
asyncJavascript: function(file, _, done) {
var filename = file.basename;
var result = filename.length > 3 && filename.indexOf('.js') >= 0;
setTimeout(function() { done(null, result); }, 0);
},
throwError: function(file) {
throw Error('error');
},
asyncThrowError: function(file, _, done) {
setTimeout(function() { done('error'); }, 0);
}
}
};
'use strict';
var check = require('./util').checkFilter;
var check = require('./test-util').checkFilter;
var filters = require('../lib/pattern-filters');
var fixture = require('./fixture.js');
var mock = require('mock-fs');

@@ -15,3 +16,41 @@ describe('pattern filters', function() {

});
it('should throw an error if the pattern is invalid', function() {
expect(function() {
filters.glob(null);
}).toThrow();
});
});
describe('ignore()', function() {
beforeEach(function () {
mock({
'.myignore': '*.js\n!b.js'
});
});
it('should pass files which equals to ignore file, if file is succesfully loaded', function (done) {
check(fixture.files, filters.ignore('.myignore'), function (filenames) {
expect(filenames).toEqual(['b.js', 'x.less', 'y.less']);
done();
});
});
it('should result in an error, if file is failed to be loaded', function (done) {
var ignore;
check(fixture.files, ignore = filters.ignore('<<enoent>>'), function (_) {
fail();
done();
}, function() {
ignore('A', undefined, function(err, result) {
expect(err).toBeTruthy();
done();
});
});
});
afterEach(function() {
mock.restore();
});
});
});

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc