javascript/response.ss
#lang scheme/base

(require "../base.ss")

(require (unlib-in bytes)
         "../plain/util.ss"
         "render.ss"
         "struct.ss")

;  [#:code      integer]
;  [#:message   (U bytes string)]
;  [#:seconds   integer]
;  [#:mime-type (U bytes string)]
;  [#:headers   (listof header)]
;  javascript
; ->
;  response
(define (make-js-response
         #:code      [code      200]
         #:message   [message   #"OK"]
         #:seconds   [seconds   (current-seconds)]
         #:mime-type [mime-type #"text/javascript; charset=utf-8"]
         #:headers   [headers   no-cache-http-headers]
         content)
  (make-response/full code 
                      (ensure-bytes message)
                      seconds
                      (ensure-bytes mime-type)
                      headers
                      (list (string->bytes/utf-8 (javascript->string content)))))

; Provide statements -----------------------------

(provide/contract
 [make-js-response  (->* (javascript?)
                         (#:code integer? 
                                 #:message   (or/c bytes? string?)
                                 #:seconds   integer?
                                 #:mime-type (or/c bytes? string?)
                                 #:headers   (listof header?))
                         response/full?)])