UNPKG

@fly/edge

Version:
50 lines 4.71 kB
"use strict"; /** * 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