UNPKG

jsondiffpatch

Version:
113 lines (101 loc) 2.73 kB
var Pipe = function Pipe(name) { this.name = name; this.filters = []; }; Pipe.prototype.process = function(input) { if (!this.processor) { throw new Error('add this pipe to a processor before using it'); } var debug = this.debug; var length = this.filters.length; var context = input; for (var index = 0; index < length; index++) { var filter = this.filters[index]; if (debug) { this.log('filter: ' + filter.filterName); } filter(context); if (typeof context === 'object' && context.exiting) { context.exiting = false; break; } } if (!context.next && this.resultCheck) { this.resultCheck(context); } }; Pipe.prototype.log = function(msg) { console.log('[jsondiffpatch] ' + this.name + ' pipe, ' + msg); }; Pipe.prototype.append = function() { this.filters.push.apply(this.filters, arguments); return this; }; Pipe.prototype.prepend = function() { this.filters.unshift.apply(this.filters, arguments); return this; }; Pipe.prototype.indexOf = function(filterName) { if (!filterName) { throw new Error('a filter name is required'); } for (var index = 0; index < this.filters.length; index++) { var filter = this.filters[index]; if (filter.filterName === filterName) { return index; } } throw new Error('filter not found: ' + filterName); }; Pipe.prototype.list = function() { var names = []; for (var index = 0; index < this.filters.length; index++) { var filter = this.filters[index]; names.push(filter.filterName); } return names; }; Pipe.prototype.after = function(filterName) { var index = this.indexOf(filterName); var params = Array.prototype.slice.call(arguments, 1); if (!params.length) { throw new Error('a filter is required'); } params.unshift(index + 1, 0); Array.prototype.splice.apply(this.filters, params); return this; }; Pipe.prototype.before = function(filterName) { var index = this.indexOf(filterName); var params = Array.prototype.slice.call(arguments, 1); if (!params.length) { throw new Error('a filter is required'); } params.unshift(index, 0); Array.prototype.splice.apply(this.filters, params); return this; }; Pipe.prototype.clear = function() { this.filters.length = 0; return this; }; Pipe.prototype.shouldHaveResult = function(should) { if (should === false) { this.resultCheck = null; return; } if (this.resultCheck) { return; } var pipe = this; this.resultCheck = function(context) { if (!context.hasResult) { console.log(context); var error = new Error(pipe.name + ' failed'); error.noResult = true; throw error; } }; return this; }; exports.Pipe = Pipe;