mirror of
https://github.com/centau/vide.git
synced 2026-08-20 14:41:37 +00:00
There seemed to be confusion over reactive-scoping (likely due to incomplete docs), so I've added more explicit error messages when deriving in non-reactive scopes to warn the user to use `root()` or `mount()`.
24 lines
582 B
Lua
24 lines
582 B
Lua
if not game then script = require "test/relative-string" end
|
|
|
|
local graph = require(script.Parent.graph)
|
|
local create_node = graph.create_node
|
|
local set_owner = graph.set_owner
|
|
local track = graph.track
|
|
local get_owning_scope = graph.get_owning_scope
|
|
local evaluate_node = graph.evaluate_node
|
|
|
|
local function derive<T>(source: () -> T): () -> T
|
|
local owner = get_owning_scope()
|
|
|
|
local node = create_node(false :: any, source)
|
|
|
|
set_owner(node, owner)
|
|
evaluate_node(node)
|
|
|
|
return function()
|
|
track(node)
|
|
return node.cache
|
|
end
|
|
end
|
|
|
|
return derive
|