String datastar_data_lines(String field, String value) { String out = ""; for(String line : split(value, "\n")) out += "data: " + field + " " + line + "\n"; return(out); } void datastar_sse_headers(Request& context) { context.call["app"]["page_type"] = "blank"; context.header["Content-Type"] = "text/event-stream; charset=utf-8"; context.header["Cache-Control"] = "no-cache, no-store, must-revalidate"; context.header["X-Accel-Buffering"] = "no"; } String datastar_event(String event_name, StringMap fields) { String out = "event: " + event_name + "\n"; for(const auto& field : fields) out += datastar_data_lines(field.first, field.second); out += "\n"; return(out); } String datastar_patch_elements(String html) { StringMap fields; fields["elements"] = html; return(datastar_event("datastar-patch-elements", fields)); } String datastar_patch_signals(String signals_json) { StringMap fields; fields["signals"] = signals_json; return(datastar_event("datastar-patch-signals", fields)); }