UNPKG

@fly/cdn

Version:
46 lines 4.57 kB
/** * A library for composing `fetch` generators into a single pipeline. * * @preferred * @module HTTP */ /** * 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` */ export 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 }); } export default pipeline; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGlwZWxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFVSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBRyxNQUF1QjtJQUNqRDs7T0FFRztJQUNILFNBQVMsYUFBYSxDQUFDLEtBQW9CO1FBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDbkIsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUM3QyxNQUFNLElBQUksR0FBRyxDQUFDLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUMzQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtTQUN4QjtRQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtBQUNqRCxDQUFDO0FBRUQsZUFBZSxRQUFRLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgbGlicmFyeSBmb3IgY29tcG9zaW5nIGBmZXRjaGAgZ2VuZXJhdG9ycyBpbnRvIGEgc2luZ2xlIHBpcGVsaW5lLlxuICpcbiAqIEBwcmVmZXJyZWRcbiAqIEBtb2R1bGUgSFRUUFxuICovXG5cbmltcG9ydCB7IEZldGNoR2VuZXJhdG9yLCBGZXRjaEZ1bmN0aW9uIH0gZnJvbSBcIi4vZmV0Y2hcIlxuXG4vKipcbiAqIFBpcGVwbGluZVN0YWdlIGNhbiBlaXRoZXIgYmUgYSBGZXRjaEdlbmVyYXRvciBmdW5jdGlvbiwgb3IgYSB0dXBsZSBvZlxuICogRmV0Y2hHZW5lcmF0b3IgKyBhcmdzLlxuICovXG5leHBvcnQgdHlwZSBQaXBlbGluZVN0YWdlID0gRmV0Y2hHZW5lcmF0b3IgfCBbRmV0Y2hHZW5lcmF0b3IsIGFueVtdXVxuXG4vKipcbiAqIENvbWJpbmUgbXVsdGlwbGUgZmV0Y2hlcyBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uLiBBbGxvd3MgbWlkZGxld2FyZSB0eXBlIGZ1bmN0aW9uYWxpdHlcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IHBpcGVsaW5lIH0gZnJvbSBcIkBmbHkvZmV0Y2gvcGlwZWxpbmVcIlxuICpcbiAqIGNvbnN0IGFkZEhlYWRlciA9IGZ1bmN0aW9uKGZldGNoKXtcbiAqICAgcmV0dXJuIGZ1bmN0aW9uKHJlcSwgaW5pdCl7XG4gKiAgICAgaWYodHlwZW9mIHJlcSA9PT0gXCJzdHJpbmdcIikgcmVxID0gbmV3IFJlcXVlc3QocmVxLCBpbml0KVxuICogICAgIHJlcS5oZWFkZXJzLnNldChcIlN1cGVyZmx5LUhlYWRlclwiLCBcInNoYXphbVwiKVxuICogICAgIHJldHVybiBmZXRjaChyZXEsIGluaXQpXG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBjb25zdCBwID0gcGlwZWxpbmUoZmV0Y2gsIGFkZEhlYWRlcilcbiAqXG4gKiBmbHkuaHR0cC5yZXNwb25kV2l0aChwKVxuICpcbiAqIEBwYXJhbSBzdGFnZXMgZmV0Y2ggZ2VuZXJhdG9yIGZ1bmN0aW9ucyB0aGF0IGFwcGx5IGFkZGl0aW9uYWwgbG9naWNcbiAqIEByZXR1cm5zIGEgY29tYmluZWRmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGFueXdoZXJlIHRoYXQgd2FudHMgYGZldGNoYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGlwZWxpbmUoLi4uc3RhZ2VzOiBQaXBlbGluZVN0YWdlW10pIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBmZXRjaCB0aGUgXCJvcmlnaW5cIiBmZXRjaCBmdW5jdGlvbiB0byBjYWxsIGF0IHRoZSBlbmQgb2YgdGhlIHBpcGVsaW5lXG4gICAqL1xuICBmdW5jdGlvbiBwaXBlbGluZUZldGNoKGZldGNoOiBGZXRjaEZ1bmN0aW9uKSB7XG4gICAgZm9yIChsZXQgaSA9IHN0YWdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgcyA9IHN0YWdlc1tpXVxuICAgICAgY29uc3QgZm4gPSB0eXBlb2YgcyA9PT0gXCJmdW5jdGlvblwiID8gcyA6IHNbMF1cbiAgICAgIGNvbnN0IG9wdHMgPSBzIGluc3RhbmNlb2YgQXJyYXkgPyBzWzFdIDogW11cbiAgICAgIGZldGNoID0gZm4oZmV0Y2gsIG9wdHMpXG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKGZldGNoLCB7IHN0YWdlcyB9KVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocGlwZWxpbmVGZXRjaCwgeyBzdGFnZXMgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGlwZWxpbmVcbiJdfQ==