(
input: App | VNode,
context: SSRContext | undefined = {},
writable: WritableStream,
)
| 180 | } |
| 181 | |
| 182 | export function pipeToWebWritable( |
| 183 | input: App | VNode, |
| 184 | context: SSRContext | undefined = {}, |
| 185 | writable: WritableStream, |
| 186 | ): void { |
| 187 | const writer = writable.getWriter() |
| 188 | const encoder = new TextEncoder() |
| 189 | |
| 190 | // #4287 CloudFlare workers do not implement `ready` property |
| 191 | let hasReady = false |
| 192 | try { |
| 193 | hasReady = isPromise(writer.ready) |
| 194 | } catch (e: any) {} |
| 195 | |
| 196 | renderToSimpleStream(input, context, { |
| 197 | async push(content) { |
| 198 | if (hasReady) { |
| 199 | await writer.ready |
| 200 | } |
| 201 | if (content != null) { |
| 202 | return writer.write(encoder.encode(content)) |
| 203 | } else { |
| 204 | return writer.close() |
| 205 | } |
| 206 | }, |
| 207 | destroy(err) { |
| 208 | // TODO better error handling? |
| 209 | // eslint-disable-next-line no-console |
| 210 | console.log(err) |
| 211 | writer.close() |
| 212 | }, |
| 213 | }) |
| 214 | } |
no test coverage detected