use super::context::ResumePayload;
pub fn encode_payload(payload: &ResumePayload) -> String {
let raw = match serde_json::to_string(payload) {
Ok(s) => s,
Err(e) => {
tracing::error!(error = %e, "failed to serialize resumability payload");
if crate::server::security::config().production {
tracing::error!(
"serialization failed in production — page interactivity may be broken"
);
}
return sanitize_json_for_script(
r#"{"signals":[],"handlers":{},"effects":[],"serialization_error":true}"#,
);
}
};
sanitize_json_for_script(&raw)
}
pub fn sanitize_json_for_script(json: &str) -> String {
json.replace('<', "\\u003c")
.replace('>', "\\u003e")
.replace('&', "\\u0026")
.replace('\u{2028}', "\\u2028")
.replace('\u{2029}', "\\u2029")
}