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 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
|
||||||
|
|
|
||||||
|
|
@ -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 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,
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
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 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
|
||||||
|
|
|
||||||
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 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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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?,
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue