From 8c9f5e8bfb0734cd99d48bdfe23fa09f8a206165 Mon Sep 17 00:00:00 2001 From: enzotar Date: Wed, 25 Feb 2026 21:47:50 -0800 Subject: [PATCH] fix: add _streamDiff to push/pop/reverse built-ins Array-mutating built-in functions now emit DS._streamDiff() for streaming sync. Previously only signal assignments emitted diffs. --- compiler/ds-codegen/src/js_emitter.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler/ds-codegen/src/js_emitter.rs b/compiler/ds-codegen/src/js_emitter.rs index 2151f4c..b0c9b89 100644 --- a/compiler/ds-codegen/src/js_emitter.rs +++ b/compiler/ds-codegen/src/js_emitter.rs @@ -719,12 +719,12 @@ impl JsEmitter { "push" if args.len() == 2 => { // push mutates array, need to get signal root name let root = self.get_signal_root_name(&args[0]); - format!("(() => {{ {}.push({}); {root}.value = [...{root}.value]; return {root}.value; }})()", + format!("(() => {{ {}.push({}); {root}.value = [...{root}.value]; DS._streamDiff(\"{root}\", {root}.value); return {root}.value; }})()", args_js[0], args_js[1], ) } "pop" if args.len() == 1 => { let root = self.get_signal_root_name(&args[0]); - format!("(() => {{ const _v = {}.pop(); {root}.value = [...{root}.value]; return _v; }})()", + format!("(() => {{ const _v = {}.pop(); {root}.value = [...{root}.value]; DS._streamDiff(\"{root}\", {root}.value); return _v; }})()", args_js[0]) } "filter" if args.len() == 2 => format!("{}.filter({})", args_js[0], args_js[1]), @@ -733,7 +733,7 @@ impl JsEmitter { "contains" if args.len() == 2 => format!("{}.includes({})", args_js[0], args_js[1]), "reverse" if args.len() == 1 => { let root = self.get_signal_root_name(&args[0]); - format!("(() => {{ {}.reverse(); {root}.value = [...{root}.value]; return {root}.value; }})()", + format!("(() => {{ {}.reverse(); {root}.value = [...{root}.value]; DS._streamDiff(\"{root}\", {root}.value); return {root}.value; }})()", args_js[0]) } "slice" if args.len() >= 2 => format!("{}.slice({})", args_js[0], args_js[1..].join(", ")),