52 lines
1.6 KiB
JavaScript
52 lines
1.6 KiB
JavaScript
export default class RenderResult {
|
|
constructor(response, { contentType } = {}){
|
|
this._result = response;
|
|
this._contentType = contentType;
|
|
}
|
|
contentType() {
|
|
return this._contentType;
|
|
}
|
|
toUnchunkedString() {
|
|
if (typeof this._result !== "string") {
|
|
throw new Error("invariant: dynamic responses cannot be unchunked. This is a bug in Next.js");
|
|
}
|
|
return this._result;
|
|
}
|
|
pipe(res) {
|
|
if (typeof this._result === "string") {
|
|
throw new Error("invariant: static responses cannot be piped. This is a bug in Next.js");
|
|
}
|
|
const response = this._result;
|
|
const flush = typeof res.flush === "function" ? ()=>res.flush() : ()=>{};
|
|
return (async ()=>{
|
|
const reader = response.getReader();
|
|
let fatalError = false;
|
|
try {
|
|
while(true){
|
|
const { done , value } = await reader.read();
|
|
if (done) {
|
|
res.end();
|
|
return;
|
|
}
|
|
fatalError = true;
|
|
res.write(value);
|
|
flush();
|
|
}
|
|
} catch (err) {
|
|
if (fatalError) {
|
|
res.destroy(err);
|
|
}
|
|
throw err;
|
|
}
|
|
})();
|
|
}
|
|
isDynamic() {
|
|
return typeof this._result !== "string";
|
|
}
|
|
static fromStatic(value) {
|
|
return new RenderResult(value);
|
|
}
|
|
static empty = RenderResult.fromStatic("");
|
|
};
|
|
|
|
//# sourceMappingURL=render-result.js.map
|