mirror of
https://github.com/littensy/charm.git
synced 2026-10-20 17:51:37 +00:00
refactor: improve imports
This commit is contained in:
parent
209f9b583b
commit
8df67d6fff
20 changed files with 67 additions and 86 deletions
2
packages/charm-sync/Charm.luau
Normal file
2
packages/charm-sync/Charm.luau
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
--!nocheck
|
||||
return require(script.Parent.charm.src)
|
||||
|
|
@ -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
|
||||
|
|
@ -1,4 +1,3 @@
|
|||
local effectScope = require("./effectScope")
|
||||
local signals = require("./signals")
|
||||
|
||||
local effectImpl = signals.effect
|
||||
|
|
@ -14,10 +13,8 @@ local function effect(callback: (dispose: () -> ()) -> ...() -> ()?): () -> ()
|
|||
end
|
||||
end
|
||||
|
||||
dispose = effectScope(function()
|
||||
effectImpl(function()
|
||||
return callback(disposeSafe)
|
||||
end)
|
||||
dispose = effectImpl(function()
|
||||
return callback(disposeSafe)
|
||||
end)
|
||||
|
||||
if disposed then
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -1,8 +1,6 @@
|
|||
local atom = require("./atom")
|
||||
local batched = require("./batched")
|
||||
local computed = require("./computed")
|
||||
local effect = require("./effect")
|
||||
local effectScope = require("./effectScope")
|
||||
local listen = require("./listen")
|
||||
local mapped = require("./mapped")
|
||||
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 Selector<T = any> = types.Selector<T>
|
||||
|
||||
local computed = signals.computed
|
||||
local effectScope = signals.effectScope
|
||||
|
||||
return {
|
||||
atom = atom,
|
||||
batched = batched,
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
local effectScope = require("./effectScope")
|
||||
local signals = require("./signals")
|
||||
local spawn = require("./spawn")
|
||||
|
||||
|
|
@ -19,23 +18,21 @@ local function listen<T>(selector: () -> T, listener: (state: T, previous: T?, d
|
|||
end
|
||||
end
|
||||
|
||||
dispose = effectScope(function()
|
||||
effect(function()
|
||||
local value = selector()
|
||||
dispose = effect(function()
|
||||
local value = selector()
|
||||
|
||||
if mounted then
|
||||
mounted = false
|
||||
elseif value == current then
|
||||
return
|
||||
end
|
||||
if mounted then
|
||||
mounted = false
|
||||
elseif value == current then
|
||||
return
|
||||
end
|
||||
|
||||
local previous = current
|
||||
current = value
|
||||
local previous = current
|
||||
current = value
|
||||
|
||||
pauseTracking()
|
||||
spawn(listener, value, previous, disposeSafe)
|
||||
resumeTracking()
|
||||
end)
|
||||
pauseTracking()
|
||||
spawn(listener, value, previous, disposeSafe)
|
||||
resumeTracking()
|
||||
end)
|
||||
|
||||
if disposed then
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
local computed = require("./computed")
|
||||
local signals = require("./signals")
|
||||
|
||||
local computed = signals.computed
|
||||
local pauseTracking = signals.pauseTracking
|
||||
local resumeTracking = signals.resumeTracking
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
local effectScope = require("./effectScope")
|
||||
local signals = require("./signals")
|
||||
local spawn = require("./spawn")
|
||||
|
||||
|
|
@ -11,22 +10,20 @@ local function subscribe<T>(selector: () -> T, listener: (T, T) -> ()): () -> ()
|
|||
local mounted = true
|
||||
local dispose: () -> ()
|
||||
|
||||
dispose = effectScope(function()
|
||||
effect(function()
|
||||
local value = selector()
|
||||
dispose = effect(function()
|
||||
local value = selector()
|
||||
|
||||
if mounted then
|
||||
current = value
|
||||
mounted = false
|
||||
elseif value ~= current then
|
||||
local previous = current
|
||||
current = value
|
||||
if mounted then
|
||||
current = value
|
||||
mounted = false
|
||||
elseif value ~= current then
|
||||
local previous = current
|
||||
current = value
|
||||
|
||||
pauseTracking()
|
||||
spawn(listener, value, previous)
|
||||
resumeTracking()
|
||||
end
|
||||
end)
|
||||
pauseTracking()
|
||||
spawn(listener, value, previous)
|
||||
resumeTracking()
|
||||
end
|
||||
end)
|
||||
|
||||
return function()
|
||||
|
|
|
|||
2
packages/react-charm/Charm.luau
Normal file
2
packages/react-charm/Charm.luau
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
--!nocheck
|
||||
return require(script.Parent.charm.src)
|
||||
2
packages/react-charm/React.luau
Normal file
2
packages/react-charm/React.luau
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
--!nocheck
|
||||
return require(script.Parent.react)
|
||||
|
|
@ -1,7 +1,5 @@
|
|||
local Charm = require(script.Parent.Charm)
|
||||
local React = if script.Parent:FindFirstChild("react")
|
||||
then require((script :: any).Parent.react) :: never
|
||||
else require(script.Parent.React)
|
||||
local React = require(script.Parent.React)
|
||||
|
||||
local listen = Charm.listen
|
||||
local useEffect = React.useEffect
|
||||
|
|
|
|||
2
packages/vide-charm/Charm.luau
Normal file
2
packages/vide-charm/Charm.luau
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
--!nocheck
|
||||
return require(script.Parent.charm.src)
|
||||
2
packages/vide-charm/Vide.luau
Normal file
2
packages/vide-charm/Vide.luau
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
--!nocheck
|
||||
return require(script.Parent.vide.src)
|
||||
|
|
@ -1,7 +1,5 @@
|
|||
local Charm = require(script.Parent.Charm)
|
||||
local Vide = if script.Parent:FindFirstChild("vide")
|
||||
then require((script :: any).Parent.vide.src) :: never
|
||||
else require(script.Parent.Vide)
|
||||
local Vide = require(script.Parent.Vide)
|
||||
|
||||
local subscribe = Charm.subscribe
|
||||
local source = Vide.source
|
||||
|
|
@ -15,8 +13,7 @@ local cleanup = Vide.cleanup
|
|||
]=]
|
||||
local function useAtom<State>(callback: () -> State): () -> State
|
||||
local state = source(callback())
|
||||
local dispose = subscribe(callback, state)
|
||||
cleanup(dispose)
|
||||
cleanup(subscribe(callback, state))
|
||||
return state
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
local test = require("../suite").test
|
||||
local signals = require("../charm").signals
|
||||
local charm = require("../charm")
|
||||
local suite = require("../suite")
|
||||
|
||||
local signals = charm.signals
|
||||
local computed = signals.computed
|
||||
local signal = signals.signal
|
||||
local test = suite.test
|
||||
|
||||
test("should correctly propagate changes through computed signals", function()
|
||||
local src = signal(0)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
local test = require("../suite").test
|
||||
local signals = require("../charm").signals
|
||||
local charm = require("../charm")
|
||||
local suite = require("../suite")
|
||||
|
||||
local signals = charm.signals
|
||||
local computed = signals.computed
|
||||
local effect = signals.effect
|
||||
local effectScope = signals.effectScope
|
||||
|
|
@ -9,6 +10,7 @@ local pauseTracking = signals.pauseTracking
|
|||
local resumeTracking = signals.resumeTracking
|
||||
local signal = signals.signal
|
||||
local startBatch = signals.startBatch
|
||||
local test = suite.test
|
||||
|
||||
test("should clear subscriptions when untracked by all subscribers", function()
|
||||
local bRunTimes = 0
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
local test = require("../suite").test
|
||||
local signals = require("../charm").signals
|
||||
local charm = require("../charm")
|
||||
local suite = require("../suite")
|
||||
|
||||
local signals = charm.signals
|
||||
local effect = signals.effect
|
||||
local effectScope = signals.effectScope
|
||||
local signal = signals.signal
|
||||
local test = suite.test
|
||||
|
||||
test("should not trigger after stop", function()
|
||||
local count = signal(1)
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
local test = require("../suite").test
|
||||
local signals = require("../charm").signals
|
||||
local charm = require("../charm")
|
||||
local suite = require("../suite")
|
||||
|
||||
local signals = charm.signals
|
||||
local computed = signals.computed
|
||||
local effect = signals.effect
|
||||
local pauseTracking = signals.pauseTracking
|
||||
local resumeTracking = signals.resumeTracking
|
||||
local signal = signals.signal
|
||||
local test = suite.test
|
||||
|
||||
type ReactionOptions<T = unknown> = {
|
||||
fireImmediately: boolean?,
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
local signals = require("../charm").signals
|
||||
local charm = require("../charm")
|
||||
local suite = require("../suite")
|
||||
|
||||
local test = suite.test
|
||||
local describe = suite.describe
|
||||
|
||||
local signals = charm.signals
|
||||
local computed = signals.computed
|
||||
local effect = signals.effect
|
||||
local signal = signals.signal
|
||||
local describe = suite.describe
|
||||
local test = suite.test
|
||||
|
||||
--[[
|
||||
Tests adopted with thanks from preact-signals implementation at
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
local test = require("../suite").test
|
||||
local signals = require("../charm").signals
|
||||
local charm = require("../charm")
|
||||
local suite = require("../suite")
|
||||
|
||||
local signals = charm.signals
|
||||
local computed = signals.computed
|
||||
local pauseTracking = signals.pauseTracking
|
||||
local resumeTracking = signals.resumeTracking
|
||||
local signal = signals.signal
|
||||
local test = suite.test
|
||||
|
||||
test("should pause tracking", function()
|
||||
local src = signal(0)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue