@fly/edge
Version:
Fly's TypeScript Edge
50 lines • 4.71 kB
JavaScript
;
/**
* A library for composing `fetch` generators into a single pipeline.
*
* @preferred
* @module HTTP
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.pipeline = void 0;
/**
* Combine multiple fetches into a single function. Allows middleware type functionality
*
* Example:
*
* ```javascript
* import { pipeline } from "@fly/fetch/pipeline"
*
* const addHeader = function(fetch){
* return function(req, init){
* if(typeof req === "string") req = new Request(req, init)
* req.headers.set("Superfly-Header", "shazam")
* return fetch(req, init)
* }
* }
*
* const p = pipeline(fetch, addHeader)
*
* fly.http.respondWith(p)
*
* @param stages fetch generator functions that apply additional logic
* @returns a combinedfunction that can be used anywhere that wants `fetch`
*/
function pipeline(...stages) {
/**
* @param fetch the "origin" fetch function to call at the end of the pipeline
*/
function pipelineFetch(fetch) {
for (let i = stages.length - 1; i >= 0; i--) {
const s = stages[i];
const fn = typeof s === "function" ? s : s[0];
const opts = s instanceof Array ? s[1] : [];
fetch = fn(fetch, opts);
}
return Object.assign(fetch, { stages });
}
return Object.assign(pipelineFetch, { stages });
}
exports.pipeline = pipeline;
exports.default = pipeline;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGlwZWxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7OztHQUtHOzs7QUFVSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILFNBQWdCLFFBQVEsQ0FBQyxHQUFHLE1BQXVCO0lBQ2pEOztPQUVHO0lBQ0gsU0FBUyxhQUFhLENBQUMsS0FBb0I7UUFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNuQixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzdDLE1BQU0sSUFBSSxHQUFHLENBQUMsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQzNDLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO1NBQ3hCO1FBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDekMsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO0FBQ2pELENBQUM7QUFmRCw0QkFlQztBQUVELGtCQUFlLFFBQVEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBsaWJyYXJ5IGZvciBjb21wb3NpbmcgYGZldGNoYCBnZW5lcmF0b3JzIGludG8gYSBzaW5nbGUgcGlwZWxpbmUuXG4gKlxuICogQHByZWZlcnJlZFxuICogQG1vZHVsZSBIVFRQXG4gKi9cblxuaW1wb3J0IHsgRmV0Y2hHZW5lcmF0b3IsIEZldGNoRnVuY3Rpb24gfSBmcm9tIFwiLi9mZXRjaFwiXG5cbi8qKlxuICogUGlwZXBsaW5lU3RhZ2UgY2FuIGVpdGhlciBiZSBhIEZldGNoR2VuZXJhdG9yIGZ1bmN0aW9uLCBvciBhIHR1cGxlIG9mXG4gKiBGZXRjaEdlbmVyYXRvciArIGFyZ3MuXG4gKi9cbmV4cG9ydCB0eXBlIFBpcGVsaW5lU3RhZ2UgPSBGZXRjaEdlbmVyYXRvciB8IFtGZXRjaEdlbmVyYXRvciwgYW55W11dXG5cbi8qKlxuICogQ29tYmluZSBtdWx0aXBsZSBmZXRjaGVzIGludG8gYSBzaW5nbGUgZnVuY3Rpb24uIEFsbG93cyBtaWRkbGV3YXJlIHR5cGUgZnVuY3Rpb25hbGl0eVxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgcGlwZWxpbmUgfSBmcm9tIFwiQGZseS9mZXRjaC9waXBlbGluZVwiXG4gKlxuICogY29uc3QgYWRkSGVhZGVyID0gZnVuY3Rpb24oZmV0Y2gpe1xuICogICByZXR1cm4gZnVuY3Rpb24ocmVxLCBpbml0KXtcbiAqICAgICBpZih0eXBlb2YgcmVxID09PSBcInN0cmluZ1wiKSByZXEgPSBuZXcgUmVxdWVzdChyZXEsIGluaXQpXG4gKiAgICAgcmVxLmhlYWRlcnMuc2V0KFwiU3VwZXJmbHktSGVhZGVyXCIsIFwic2hhemFtXCIpXG4gKiAgICAgcmV0dXJuIGZldGNoKHJlcSwgaW5pdClcbiAqICAgfVxuICogfVxuICpcbiAqIGNvbnN0IHAgPSBwaXBlbGluZShmZXRjaCwgYWRkSGVhZGVyKVxuICpcbiAqIGZseS5odHRwLnJlc3BvbmRXaXRoKHApXG4gKlxuICogQHBhcmFtIHN0YWdlcyBmZXRjaCBnZW5lcmF0b3IgZnVuY3Rpb25zIHRoYXQgYXBwbHkgYWRkaXRpb25hbCBsb2dpY1xuICogQHJldHVybnMgYSBjb21iaW5lZGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgYW55d2hlcmUgdGhhdCB3YW50cyBgZmV0Y2hgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaXBlbGluZSguLi5zdGFnZXM6IFBpcGVsaW5lU3RhZ2VbXSkge1xuICAvKipcbiAgICogQHBhcmFtIGZldGNoIHRoZSBcIm9yaWdpblwiIGZldGNoIGZ1bmN0aW9uIHRvIGNhbGwgYXQgdGhlIGVuZCBvZiB0aGUgcGlwZWxpbmVcbiAgICovXG4gIGZ1bmN0aW9uIHBpcGVsaW5lRmV0Y2goZmV0Y2g6IEZldGNoRnVuY3Rpb24pIHtcbiAgICBmb3IgKGxldCBpID0gc3RhZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBzID0gc3RhZ2VzW2ldXG4gICAgICBjb25zdCBmbiA9IHR5cGVvZiBzID09PSBcImZ1bmN0aW9uXCIgPyBzIDogc1swXVxuICAgICAgY29uc3Qgb3B0cyA9IHMgaW5zdGFuY2VvZiBBcnJheSA/IHNbMV0gOiBbXVxuICAgICAgZmV0Y2ggPSBmbihmZXRjaCwgb3B0cylcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZmV0Y2gsIHsgc3RhZ2VzIH0pXG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihwaXBlbGluZUZldGNoLCB7IHN0YWdlcyB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBwaXBlbGluZVxuIl19