MCPcopy Create free account
hub / github.com/TanStack/db / proxyElectricShape

Function proxyElectricShape

examples/react-native/shopping-list/server/index.ts:121–170  ·  view source on GitHub ↗
(
  req: express.Request,
  res: express.Response,
  table: string,
)

Source from the content-addressed store, hash-verified

119}
120
121async function proxyElectricShape(
122 req: express.Request,
123 res: express.Response,
124 table: string,
125) {
126 const requestUrl = `${req.protocol}://${req.get(`host`)}${req.originalUrl}`
127 const originUrl = buildElectricShapeUrl(requestUrl, table)
128 const forwardHeaders = buildForwardHeaders(req)
129 const body =
130 req.method === `POST` && req.body !== undefined
131 ? JSON.stringify(req.body)
132 : undefined
133
134 if (body && !forwardHeaders.has(`content-type`)) {
135 forwardHeaders.set(`content-type`, `application/json`)
136 }
137
138 const response = await fetch(originUrl, {
139 method: req.method,
140 headers: forwardHeaders,
141 body,
142 })
143
144 response.headers.forEach((value, key) => {
145 const lower = key.toLowerCase()
146 if (
147 lower === `content-encoding` ||
148 lower === `content-length` ||
149 lower === `transfer-encoding`
150 ) {
151 return
152 }
153 res.setHeader(key, value)
154 })
155 const varyHeader = response.headers.get(`vary`)
156 res.setHeader(
157 `Vary`,
158 varyHeader ? `${varyHeader}, Authorization` : `Authorization`,
159 )
160 res.status(response.status)
161
162 if (!response.body) {
163 res.end()
164 return
165 }
166
167 const nodeStream = Readable.fromWeb(response.body as any)
168 res.on(`close`, () => nodeStream.destroy())
169 await pipeline(nodeStream, res)
170}
171
172async function ensureDb() {
173 await sql`

Callers 1

index.tsFile · 0.85

Calls 9

buildElectricShapeUrlFunction · 0.85
buildForwardHeadersFunction · 0.85
fetchFunction · 0.50
getMethod · 0.45
hasMethod · 0.45
setMethod · 0.45
forEachMethod · 0.45
statusMethod · 0.45
onMethod · 0.45

Tested by

no test coverage detected