Datastar Racket SDK
(require datastar) | package: datastar |
This package provides a Racket SDK for working with Datastar.
1 Usage
Example usage (adapted from the Datastar Go SDK docs)
#lang racket (require web-server/dispatch web-server/servlet-dispatch web-server/http datastar json) (struct store (message count) #:transparent) (define (handler req) ; Read signals from the request (define signals-data (read-signals req)) (define current-store (store (hash-ref signals-data 'message "") (hash-ref signals-data 'count 0))) ; Create a Server-Sent Event response (datastar-response (list ; Patch elements in the DOM (patch-elements "<div id=\"output\">Hello from Datastar!</div>") ; Remove elements from the DOM (remove-elements "#temporary-element") ; Patch signals (update client-side state) (patch-signals (hash 'message "Updated message" 'count (+ (store-count current-store) 1))) ; Execute JavaScript in the browser (execute-script "console.log(\"Hello from server!\")") ; Redirect the browser (redirect "/new-page"))))
For more advanced usage with streaming updates, you can use generators:
(define (streaming-handler req) (datastar-response (in-generator (let loop ([i 0]) (when (< i 10) (yield (patch-signals (hash 'counter i))) (yield (patch-elements (format "<div id=\"counter\">Count: ~a</div>" i))) (sleep 1) (loop (+ i 1)))))))
For more examples, see the examples directory on GitHub.
2 Methods
procedure
(datastar-response events) → response?
events : (or/c string? (sequence/c string?))
procedure
(patch-elements elements [ #:selector selector #:mode mode #:use-view-transitions use-view-transitions #:event-id event-id #:retry-duration retry-duration]) → string? elements : (or/c string? #f) selector : (or/c string? #f) = #f mode : (or/c string? #f) = #f use-view-transitions : (or/c boolean? #f) = #f event-id : (or/c string? #f) = #f retry-duration : (or/c exact-positive-integer? #f) = #f
procedure
(remove-elements selector [ #:event-id event-id #:retry-duration retry-duration]) → string? selector : string? event-id : (or/c string? #f) = #f retry-duration : (or/c exact-positive-integer? #f) = #f
procedure
(read-signals request) → jsexpr?
request : request?
procedure
(patch-signals signals [ #:event-id event-id #:only-if-missing only-if-missing #:retry-duration retry-duration]) → string? signals : (or/c string? jsexpr?) event-id : (or/c string? #f) = #f only-if-missing : (or/c boolean? #f) = #f retry-duration : (or/c exact-positive-integer? #f) = #f
procedure
(execute-script script [ #:auto-remove auto-remove #:attributes attributes #:event-id event-id #:retry-duration retry-duration]) → string? script : string? auto-remove : boolean? = #t
attributes : (or/c (hash/c symbol? any/c) (listof string?) #f) = #f event-id : (or/c string? #f) = #f retry-duration : (or/c exact-positive-integer? #f) = #f
3 Constants
3.1 Element Patch Modes
An element patch mode is the mode in which an element is patched into the DOM.
value
ELEMENT-PATCH-MODE-OUTER : string? = "outer"
value
ELEMENT-PATCH-MODE-INNER : string? = "inner"
value
ELEMENT-PATCH-MODE-REMOVE : string? = "remove"
value
ELEMENT-PATCH-MODE-REPLACE : string? = "replace"
value
ELEMENT-PATCH-MODE-PREPEND : string? = "prepend"
value
ELEMENT-PATCH-MODE-APPEND : string? = "append"
value
ELEMENT-PATCH-MODE-BEFORE : string? = "before"
value
ELEMENT-PATCH-MODE-AFTER : string? = "after"
3.2 Event Types
value
EVENT-TYPE-PATCH-ELEMENTS : string? = "datastar-patch-elements"
value
EVENT-TYPE-PATCH-SIGNALS : string? = "datastar-patch-signals"