refactor: improve imports

This commit is contained in:
littensy 2025-05-05 01:30:35 -07:00
parent 209f9b583b
commit 8df67d6fff
20 changed files with 67 additions and 86 deletions

View file

@ -0,0 +1,2 @@
--!nocheck
return require(script.Parent.charm.src)

View file

@ -1,13 +0,0 @@
local signals = require("./signals")
local computedImpl = signals.computed
local function computed<T>(selector: (previous: T?) -> T): () -> T
local getter = computedImpl(selector)
return function()
return getter()
end
end
return computed

View file

@ -1,4 +1,3 @@
local effectScope = require("./effectScope")
local signals = require("./signals") local signals = require("./signals")
local effectImpl = signals.effect local effectImpl = signals.effect
@ -14,10 +13,8 @@ local function effect(callback: (dispose: () -> ()) -> ...() -> ()?): () -> ()
end end
end end
dispose = effectScope(function() dispose = effectImpl(function()
effectImpl(function() return callback(disposeSafe)
return callback(disposeSafe)
end)
end) end)
if disposed then if disposed then

View file

@ -1,13 +0,0 @@
local signals = require("./signals")
local effectScopeImpl = signals.effectScope
local function effectScope(callback: () -> ...() -> ()?): () -> ()
local dispose = effectScopeImpl(callback)
return function()
dispose()
end
end
return effectScope

View file

@ -1,8 +1,6 @@
local atom = require("./atom") local atom = require("./atom")
local batched = require("./batched") local batched = require("./batched")
local computed = require("./computed")
local effect = require("./effect") local effect = require("./effect")
local effectScope = require("./effectScope")
local listen = require("./listen") local listen = require("./listen")
local mapped = require("./mapped") local mapped = require("./mapped")
local observe = require("./observe") local observe = require("./observe")
@ -15,6 +13,9 @@ export type Atom<T = any> = types.Atom<T>
export type AtomOptions<T = any> = types.AtomOptions<T> export type AtomOptions<T = any> = types.AtomOptions<T>
export type Selector<T = any> = types.Selector<T> export type Selector<T = any> = types.Selector<T>
local computed = signals.computed
local effectScope = signals.effectScope
return { return {
atom = atom, atom = atom,
batched = batched, batched = batched,

View file

@ -1,4 +1,3 @@
local effectScope = require("./effectScope")
local signals = require("./signals") local signals = require("./signals")
local spawn = require("./spawn") local spawn = require("./spawn")
@ -19,23 +18,21 @@ local function listen<T>(selector: () -> T, listener: (state: T, previous: T?, d
end end
end end
dispose = effectScope(function() dispose = effect(function()
effect(function() local value = selector()
local value = selector()
if mounted then if mounted then
mounted = false mounted = false
elseif value == current then elseif value == current then
return return
end end
local previous = current local previous = current
current = value current = value
pauseTracking() pauseTracking()
spawn(listener, value, previous, disposeSafe) spawn(listener, value, previous, disposeSafe)
resumeTracking() resumeTracking()
end)
end) end)
if disposed then if disposed then

View file

@ -1,6 +1,6 @@
local computed = require("./computed")
local signals = require("./signals") local signals = require("./signals")
local computed = signals.computed
local pauseTracking = signals.pauseTracking local pauseTracking = signals.pauseTracking
local resumeTracking = signals.resumeTracking local resumeTracking = signals.resumeTracking

View file

@ -1,4 +1,3 @@
local effectScope = require("./effectScope")
local signals = require("./signals") local signals = require("./signals")
local spawn = require("./spawn") local spawn = require("./spawn")
@ -11,22 +10,20 @@ local function subscribe<T>(selector: () -> T, listener: (T, T) -> ()): () -> ()
local mounted = true local mounted = true
local dispose: () -> () local dispose: () -> ()
dispose = effectScope(function() dispose = effect(function()
effect(function() local value = selector()
local value = selector()
if mounted then if mounted then
current = value current = value
mounted = false mounted = false
elseif value ~= current then elseif value ~= current then
local previous = current local previous = current
current = value current = value
pauseTracking() pauseTracking()
spawn(listener, value, previous) spawn(listener, value, previous)
resumeTracking() resumeTracking()
end end
end)
end) end)
return function() return function()

View file

@ -0,0 +1,2 @@
--!nocheck
return require(script.Parent.charm.src)

View file

@ -0,0 +1,2 @@
--!nocheck
return require(script.Parent.react)

View file

@ -1,7 +1,5 @@
local Charm = require(script.Parent.Charm) local Charm = require(script.Parent.Charm)
local React = if script.Parent:FindFirstChild("react") local React = require(script.Parent.React)
then require((script :: any).Parent.react) :: never
else require(script.Parent.React)
local listen = Charm.listen local listen = Charm.listen
local useEffect = React.useEffect local useEffect = React.useEffect

View file

@ -0,0 +1,2 @@
--!nocheck
return require(script.Parent.charm.src)

View file

@ -0,0 +1,2 @@
--!nocheck
return require(script.Parent.vide.src)

View file

@ -1,7 +1,5 @@
local Charm = require(script.Parent.Charm) local Charm = require(script.Parent.Charm)
local Vide = if script.Parent:FindFirstChild("vide") local Vide = require(script.Parent.Vide)
then require((script :: any).Parent.vide.src) :: never
else require(script.Parent.Vide)
local subscribe = Charm.subscribe local subscribe = Charm.subscribe
local source = Vide.source local source = Vide.source
@ -15,8 +13,7 @@ local cleanup = Vide.cleanup
]=] ]=]
local function useAtom<State>(callback: () -> State): () -> State local function useAtom<State>(callback: () -> State): () -> State
local state = source(callback()) local state = source(callback())
local dispose = subscribe(callback, state) cleanup(subscribe(callback, state))
cleanup(dispose)
return state return state
end end

View file

@ -1,8 +1,10 @@
local test = require("../suite").test local charm = require("../charm")
local signals = require("../charm").signals local suite = require("../suite")
local signals = charm.signals
local computed = signals.computed local computed = signals.computed
local signal = signals.signal local signal = signals.signal
local test = suite.test
test("should correctly propagate changes through computed signals", function() test("should correctly propagate changes through computed signals", function()
local src = signal(0) local src = signal(0)

View file

@ -1,6 +1,7 @@
local test = require("../suite").test local charm = require("../charm")
local signals = require("../charm").signals local suite = require("../suite")
local signals = charm.signals
local computed = signals.computed local computed = signals.computed
local effect = signals.effect local effect = signals.effect
local effectScope = signals.effectScope local effectScope = signals.effectScope
@ -9,6 +10,7 @@ local pauseTracking = signals.pauseTracking
local resumeTracking = signals.resumeTracking local resumeTracking = signals.resumeTracking
local signal = signals.signal local signal = signals.signal
local startBatch = signals.startBatch local startBatch = signals.startBatch
local test = suite.test
test("should clear subscriptions when untracked by all subscribers", function() test("should clear subscriptions when untracked by all subscribers", function()
local bRunTimes = 0 local bRunTimes = 0

View file

@ -1,9 +1,11 @@
local test = require("../suite").test local charm = require("../charm")
local signals = require("../charm").signals local suite = require("../suite")
local signals = charm.signals
local effect = signals.effect local effect = signals.effect
local effectScope = signals.effectScope local effectScope = signals.effectScope
local signal = signals.signal local signal = signals.signal
local test = suite.test
test("should not trigger after stop", function() test("should not trigger after stop", function()
local count = signal(1) local count = signal(1)

View file

@ -1,11 +1,13 @@
local test = require("../suite").test local charm = require("../charm")
local signals = require("../charm").signals local suite = require("../suite")
local signals = charm.signals
local computed = signals.computed local computed = signals.computed
local effect = signals.effect local effect = signals.effect
local pauseTracking = signals.pauseTracking local pauseTracking = signals.pauseTracking
local resumeTracking = signals.resumeTracking local resumeTracking = signals.resumeTracking
local signal = signals.signal local signal = signals.signal
local test = suite.test
type ReactionOptions<T = unknown> = { type ReactionOptions<T = unknown> = {
fireImmediately: boolean?, fireImmediately: boolean?,

View file

@ -1,12 +1,12 @@
local signals = require("../charm").signals local charm = require("../charm")
local suite = require("../suite") local suite = require("../suite")
local test = suite.test local signals = charm.signals
local describe = suite.describe
local computed = signals.computed local computed = signals.computed
local effect = signals.effect local effect = signals.effect
local signal = signals.signal local signal = signals.signal
local describe = suite.describe
local test = suite.test
--[[ --[[
Tests adopted with thanks from preact-signals implementation at Tests adopted with thanks from preact-signals implementation at

View file

@ -1,10 +1,12 @@
local test = require("../suite").test local charm = require("../charm")
local signals = require("../charm").signals local suite = require("../suite")
local signals = charm.signals
local computed = signals.computed local computed = signals.computed
local pauseTracking = signals.pauseTracking local pauseTracking = signals.pauseTracking
local resumeTracking = signals.resumeTracking local resumeTracking = signals.resumeTracking
local signal = signals.signal local signal = signals.signal
local test = suite.test
test("should pause tracking", function() test("should pause tracking", function()
local src = signal(0) local src = signal(0)