From 3b9bfc459f9936ced6b67a32ca02606723876702 Mon Sep 17 00:00:00 2001 From: Wen Yuxiang Date: Tue, 29 Sep 2026 22:46:52 +0800 Subject: [PATCH] fix(js): use FixedArray at the JS FFI boundary --- mocket.js.mbt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/mocket.js.mbt b/mocket.js.mbt index 85d4ae8..4e28f71 100644 --- a/mocket.js.mbt +++ b/mocket.js.mbt @@ -593,12 +593,20 @@ pub fn __ws_get_members_js(channel : String) -> Array[String] { ///| #owned(sub, unsub, get_members) -pub extern "js" fn __ws_state_js_export( +pub extern "js" fn __ws_state_js_export_ffi( sub : (String, String) -> Unit, unsub : (String, String) -> Unit, - get_members : (String) -> Array[String], + get_members : (String) -> FixedArray[String], ) -> Unit = "(sub, unsub, get_members) => { globalThis.__ws_subscribe_js = (id, ch) => { try { sub(id, ch); } catch (_) {} }; globalThis.__ws_unsubscribe_js = (id, ch) => { try { unsub(id, ch); } catch (_) {} }; globalThis.__ws_get_members_js = (ch) => { try { return get_members(ch); } catch (_) { return []; } }; }" +pub fn __ws_state_js_export( + sub : (String, String) -> Unit, + unsub : (String, String) -> Unit, + get_members : (String) -> Array[String], +) -> Unit { + __ws_state_js_export_ffi(sub, unsub, fn(__a1) { FixedArray::from_array(get_members(__a1)) }) +} + ///| pub fn __get_port_by_connection_js(id : String) -> Int { let mut found = 0