Add untrack()

This commit is contained in:
Aaron Smith 2023-08-22 12:12:03 +01:00
parent 0105e33fac
commit 6700e1b1f6
6 changed files with 107 additions and 2 deletions

View file

@ -159,4 +159,5 @@ return table.freeze {
capture = capture,
capture_and_link = capture_and_link,
create = create :: (<T>(value: T) -> (Node<T>, () -> T)) & (<T>() -> (Node<T>, () -> T)),
refs = refs
}

View file

@ -9,6 +9,7 @@ local create = require(script.create)
local source = require(script.source)
local watch = require(script.watch)
local cleanup, clean_garbage = require(script.cleanup)()
local untrack = require(script.untrack)
local derive = require(script.derive)
local indexes, values = require(script.maps)()
local spring, update_springs = require(script.spring)()
@ -23,11 +24,14 @@ local vide = {
create = create,
source = source,
watch = watch,
cleanup = cleanup,
derive = derive,
indexes = indexes,
values = values,
-- util
cleanup = cleanup,
untrack = untrack,
-- animations
spring = spring,

16
src/untrack.luau Normal file
View file

@ -0,0 +1,16 @@
if not game then script = require "test/relative-string" end
local graph = require(script.Parent.graph)
type Node<T> = graph.Node<T>
local refs = graph.refs
local function untrack<T>(source: () -> T): T
local initial = #refs
local value = source()
for i = initial, #refs do
refs[i] = nil
end
return value
end
return untrack