UNPKG

jsondiffpatch

Version:

JSON diff & patch (object and array diff, text diff, multiple output formats)

101 lines (100 loc) 2.96 kB
// eslint-disable-next-line @typescript-eslint/no-explicit-any class Pipe { constructor(name) { this.name = name; this.filters = []; } process(input) { if (!this.processor) { throw new Error("add this pipe to a processor before using it"); } const debug = this.debug; const length = this.filters.length; const context = input; for (let index = 0; index < length; index++) { const filter = this.filters[index]; if (!filter) continue; 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); } } log(msg) { console.log(`[jsondiffpatch] ${this.name} pipe, ${msg}`); } append(...args) { this.filters.push(...args); return this; } prepend(...args) { this.filters.unshift(...args); return this; } indexOf(filterName) { if (!filterName) { throw new Error("a filter name is required"); } for (let index = 0; index < this.filters.length; index++) { const filter = this.filters[index]; if ((filter === null || filter === void 0 ? void 0 : filter.filterName) === filterName) { return index; } } throw new Error(`filter not found: ${filterName}`); } list() { return this.filters.map((f) => f.filterName); } after(filterName, ...params) { const index = this.indexOf(filterName); this.filters.splice(index + 1, 0, ...params); return this; } before(filterName, ...params) { const index = this.indexOf(filterName); this.filters.splice(index, 0, ...params); return this; } replace(filterName, ...params) { const index = this.indexOf(filterName); this.filters.splice(index, 1, ...params); return this; } remove(filterName) { const index = this.indexOf(filterName); this.filters.splice(index, 1); return this; } clear() { this.filters.length = 0; return this; } shouldHaveResult(should) { if (should === false) { this.resultCheck = null; return this; } if (this.resultCheck) { return this; } this.resultCheck = (context) => { if (!context.hasResult) { console.log(context); const error = new Error(`${this.name} failed`); error.noResult = true; throw error; } }; return this; } } export default Pipe;