replay
Version:
When API testing slows you down: record and replay HTTP responses like a boss
59 lines (49 loc) • 1.62 kB
JavaScript
"use strict";
// Processing chain: pass each request through a list of handlers
//
// Each handler called with ClientRequest object and must pass control to
// callback with either error, ServerResponse object, or no arguments to pass
// control to the next handler.
module.exports = class Chain {
constructor() {
// Linked list of handlers; each handler has a reference to the next one
this.first = null;
this.last = null;
}
// Appends a handler to the chain (invoked before all other handlers)
append(handler) {
const layer = this._wrap(handler);
this.first = this.first || layer;
if (this.last) this.last.next = layer;
this.last = layer;
return this;
}
// Prepends a handler to the chain (invoked after all other handlers)
prepend(handler) {
const layer = this._wrap(handler);
layer.next = this.first;
this.first = layer;
this.last = this.last || layer;
return this;
}
// Clears the chain of all its handlers
clear() {
this.first = this.last = null;
}
// Returns the first handler in the chain
get start() {
return this.first;
}
// Wraps a handler and returns a function that will invoke this handler, and
// if the handler does not return a response, pass control to the next handler
// in the chain
_wrap(handler) {
function layer(request, callback) {
handler(request, function (error, response) {
if (error || response) callback(error, response);else if (layer.next) layer.next(request, callback);else callback();
});
}
return layer;
}
};
//# sourceMappingURL=chain.js.map