diff --git a/src/init.luau b/src/init.luau index 840f7f9..13d8274 100644 --- a/src/init.luau +++ b/src/init.luau @@ -16,6 +16,7 @@ local cleanup = require(script.cleanup) local untrack = require(script.untrack) local read = require(script.read) local batch = require(script.batch) +local mutate = require(script.mutate) local switch = require(script.switch) local show = require(script.show) local indexes, values = require(script.maps)() @@ -63,6 +64,7 @@ local vide = { untrack = untrack, read = read, batch = batch, + mutate = mutate, -- animations spring = spring, diff --git a/src/mutate.luau b/src/mutate.luau new file mode 100644 index 0000000..0ab3b95 --- /dev/null +++ b/src/mutate.luau @@ -0,0 +1,15 @@ +if not game then script = require "test/relative-string" end + +local untrack = require(script.Parent.untrack) + +local function mutate(source: () -> T, mutate: (T) -> any?) + local value = untrack(source) + local packed = table.pack(mutate(value)) + if packed.n > 0 then + return source(unpack(packed, 1, packed.n)) + end + + source(value) +end + +return mutate \ No newline at end of file