MCPcopy Create free account
hub / github.com/firebase/firebase-tools / proxyResponse

Function proxyResponse

src/frameworks/utils.ts:76–161  ·  view source on GitHub ↗
(
  req: IncomingMessage,
  res: ServerResponse,
  next: () => void,
)

Source from the content-addressed store, hash-verified

74 * it back to the client.
75 */
76export function proxyResponse(
77 req: IncomingMessage,
78 res: ServerResponse,
79 next: () => void,
80): ServerResponse {
81 const proxiedRes = new ServerResponse(req);
82 // Object to store the original response methods
83 const buffer: [
84 string,
85 Parameters<ServerResponse["write" | "setHeader" | "removeHeader" | "writeHead" | "end"]>,
86 ][] = [];
87
88 // Proxy the response methods
89 // The apply handler is called when the method e.g. write, setHeader, etc. is called
90 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/apply
91 // The target is the original method
92 // The thisArg is the proxied response
93 // The args are the arguments passed to the method
94 proxiedRes.write = new Proxy(proxiedRes.write.bind(proxiedRes), {
95 apply: (
96 target: ServerResponse["write"],
97 thisArg: ServerResponse,
98 args: Parameters<ServerResponse["write"]>,
99 ) => {
100 // call the original write method on the proxied response
101 target.call(thisArg, ...args);
102 // store the method call in the buffer
103 buffer.push(["write", args]);
104 },
105 });
106
107 proxiedRes.setHeader = new Proxy(proxiedRes.setHeader.bind(proxiedRes), {
108 apply: (
109 target: ServerResponse["setHeader"],
110 thisArg: ServerResponse,
111 args: Parameters<ServerResponse["setHeader"]>,
112 ) => {
113 target.call(thisArg, ...args);
114 buffer.push(["setHeader", args]);
115 },
116 });
117 proxiedRes.removeHeader = new Proxy(proxiedRes.removeHeader.bind(proxiedRes), {
118 apply: (
119 target: ServerResponse["removeHeader"],
120 thisArg: ServerResponse,
121 args: Parameters<ServerResponse["removeHeader"]>,
122 ) => {
123 target.call(thisArg, ...args);
124 buffer.push(["removeHeader", args]);
125 },
126 });
127 proxiedRes.writeHead = new Proxy(proxiedRes.writeHead.bind(proxiedRes), {
128 apply: (
129 target: ServerResponse["writeHead"],
130 thisArg: ServerResponse,
131 args: Parameters<ServerResponse["writeHead"]>,
132 ) => {
133 target.call(thisArg, ...args);

Callers 1

simpleProxyFunction · 0.85

Calls 2

callMethod · 0.65
nextFunction · 0.50

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…