diff options
-rw-r--r-- | src/server/response.nim | 16 | ||||
-rw-r--r-- | src/types/blob.nim | 3 |
2 files changed, 16 insertions, 3 deletions
diff --git a/src/server/response.nim b/src/server/response.nim index 579abe49..a6a2c235 100644 --- a/src/server/response.nim +++ b/src/server/response.nim @@ -55,12 +55,19 @@ proc newResponse*(res: int; request: Request; stream: SocketStream; outputId: int; status: uint16): Response = return Response( res: res, - url: request.url, + url: if request != nil: request.url else: nil, body: stream, outputId: outputId, status: status ) +proc newResponse*(body = JS_UNDEFINED; init = JS_UNDEFINED): JSResult[Response] + {.jsctor.} = + if not JS_IsUndefined(body) or not JS_IsUndefined(init): + #TODO + return errInternalError("Response constructor with body or init") + return ok(newResponse(0, nil, nil, -1, 200)) + func makeNetworkError*(): Response {.jsstfunc: "Response.error".} = #TODO use "create" function return Response( @@ -74,7 +81,7 @@ func makeNetworkError*(): Response {.jsstfunc: "Response.error".} = proc newFetchTypeError*(): JSError = return newTypeError("NetworkError when attempting to fetch resource") -func sok(response: Response): bool {.jsfget: "ok".} = +func jsOk(response: Response): bool {.jsfget: "ok".} = return response.status in 200u16 .. 299u16 func surl*(response: Response): string {.jsfget: "url".} = @@ -162,7 +169,7 @@ proc onFinishBlob(response: Response; success: bool) = let p = opaque.p opaque.p = nil let blob = if p == nil: - newBlob(nil, 0, opaque.contentType, nil) + newEmptyBlob(opaque.contentType) else: newBlob(p, opaque.len, opaque.contentType, deallocBlob) bodyRead.resolve(JSResult[Blob].ok(blob)) @@ -177,6 +184,9 @@ proc blob*(response: Response): Promise[JSResult[Blob]] {.jsfunc.} = if response.bodyUsed: let err = JSResult[Blob].err(newTypeError("Body has already been consumed")) return newResolvedPromise(err) + if response.body == nil: + response.bodyUsed = true + return newResolvedPromise(JSResult[Blob].ok(newEmptyBlob())) let opaque = BlobOpaque( bodyRead: Promise[JSResult[Blob]](), contentType: response.getContentType(), diff --git a/src/types/blob.nim b/src/types/blob.nim index 689883a8..f34082d1 100644 --- a/src/types/blob.nim +++ b/src/types/blob.nim @@ -73,6 +73,9 @@ proc newBlob*(buffer: pointer; size: int; ctype: string; opaque: opaque ) +proc newEmptyBlob*(contentType = ""): Blob = + return newBlob(nil, 0, contentType, nil) + proc deallocBlob*(opaque, p: pointer) = if p != nil: dealloc(p) |