From 8df67d6fff45eaa8de5ad7f463f22f8f80868256 Mon Sep 17 00:00:00 2001 From: littensy <56808540+littensy@users.noreply.github.com> Date: Mon, 5 May 2025 01:30:35 -0700 Subject: [PATCH] refactor: improve imports --- packages/charm-sync/Charm.luau | 2 ++ packages/charm/src/computed.luau | 13 ------------- packages/charm/src/effect.luau | 7 ++----- packages/charm/src/effectScope.luau | 13 ------------- packages/charm/src/lib.luau | 5 +++-- packages/charm/src/listen.luau | 27 ++++++++++++--------------- packages/charm/src/mapped.luau | 2 +- packages/charm/src/subscribe.luau | 27 ++++++++++++--------------- packages/react-charm/Charm.luau | 2 ++ packages/react-charm/React.luau | 2 ++ packages/react-charm/src/init.luau | 4 +--- packages/vide-charm/Charm.luau | 2 ++ packages/vide-charm/Vide.luau | 2 ++ packages/vide-charm/src/init.luau | 7 ++----- tests/signals/computed.spec.luau | 6 ++++-- tests/signals/effect.spec.luau | 6 ++++-- tests/signals/effectScope.spec.luau | 6 ++++-- tests/signals/issue_48.spec.luau | 6 ++++-- tests/signals/topology.spec.luau | 8 ++++---- tests/signals/untrack.spec.luau | 6 ++++-- 20 files changed, 67 insertions(+), 86 deletions(-) create mode 100644 packages/charm-sync/Charm.luau delete mode 100644 packages/charm/src/computed.luau delete mode 100644 packages/charm/src/effectScope.luau create mode 100644 packages/react-charm/Charm.luau create mode 100644 packages/react-charm/React.luau create mode 100644 packages/vide-charm/Charm.luau create mode 100644 packages/vide-charm/Vide.luau diff --git a/packages/charm-sync/Charm.luau b/packages/charm-sync/Charm.luau new file mode 100644 index 0000000..9954123 --- /dev/null +++ b/packages/charm-sync/Charm.luau @@ -0,0 +1,2 @@ +--!nocheck +return require(script.Parent.charm.src) diff --git a/packages/charm/src/computed.luau b/packages/charm/src/computed.luau deleted file mode 100644 index 70b9536..0000000 --- a/packages/charm/src/computed.luau +++ /dev/null @@ -1,13 +0,0 @@ -local signals = require("./signals") - -local computedImpl = signals.computed - -local function computed(selector: (previous: T?) -> T): () -> T - local getter = computedImpl(selector) - - return function() - return getter() - end -end - -return computed diff --git a/packages/charm/src/effect.luau b/packages/charm/src/effect.luau index 274edb4..fc4f9bf 100644 --- a/packages/charm/src/effect.luau +++ b/packages/charm/src/effect.luau @@ -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 diff --git a/packages/charm/src/effectScope.luau b/packages/charm/src/effectScope.luau deleted file mode 100644 index 92147a1..0000000 --- a/packages/charm/src/effectScope.luau +++ /dev/null @@ -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 diff --git a/packages/charm/src/lib.luau b/packages/charm/src/lib.luau index 96e1746..8741d13 100644 --- a/packages/charm/src/lib.luau +++ b/packages/charm/src/lib.luau @@ -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 = types.Atom export type AtomOptions = types.AtomOptions export type Selector = types.Selector +local computed = signals.computed +local effectScope = signals.effectScope + return { atom = atom, batched = batched, diff --git a/packages/charm/src/listen.luau b/packages/charm/src/listen.luau index 9de1d9c..e16e623 100644 --- a/packages/charm/src/listen.luau +++ b/packages/charm/src/listen.luau @@ -1,4 +1,3 @@ -local effectScope = require("./effectScope") local signals = require("./signals") local spawn = require("./spawn") @@ -19,23 +18,21 @@ local function listen(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 diff --git a/packages/charm/src/mapped.luau b/packages/charm/src/mapped.luau index 641615a..a842b95 100644 --- a/packages/charm/src/mapped.luau +++ b/packages/charm/src/mapped.luau @@ -1,6 +1,6 @@ -local computed = require("./computed") local signals = require("./signals") +local computed = signals.computed local pauseTracking = signals.pauseTracking local resumeTracking = signals.resumeTracking diff --git a/packages/charm/src/subscribe.luau b/packages/charm/src/subscribe.luau index 9d9e1e6..745b03a 100644 --- a/packages/charm/src/subscribe.luau +++ b/packages/charm/src/subscribe.luau @@ -1,4 +1,3 @@ -local effectScope = require("./effectScope") local signals = require("./signals") local spawn = require("./spawn") @@ -11,22 +10,20 @@ local function subscribe(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() diff --git a/packages/react-charm/Charm.luau b/packages/react-charm/Charm.luau new file mode 100644 index 0000000..9954123 --- /dev/null +++ b/packages/react-charm/Charm.luau @@ -0,0 +1,2 @@ +--!nocheck +return require(script.Parent.charm.src) diff --git a/packages/react-charm/React.luau b/packages/react-charm/React.luau new file mode 100644 index 0000000..3e8acbd --- /dev/null +++ b/packages/react-charm/React.luau @@ -0,0 +1,2 @@ +--!nocheck +return require(script.Parent.react) diff --git a/packages/react-charm/src/init.luau b/packages/react-charm/src/init.luau index 13159bf..9d13132 100644 --- a/packages/react-charm/src/init.luau +++ b/packages/react-charm/src/init.luau @@ -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 diff --git a/packages/vide-charm/Charm.luau b/packages/vide-charm/Charm.luau new file mode 100644 index 0000000..9954123 --- /dev/null +++ b/packages/vide-charm/Charm.luau @@ -0,0 +1,2 @@ +--!nocheck +return require(script.Parent.charm.src) diff --git a/packages/vide-charm/Vide.luau b/packages/vide-charm/Vide.luau new file mode 100644 index 0000000..0dc1c09 --- /dev/null +++ b/packages/vide-charm/Vide.luau @@ -0,0 +1,2 @@ +--!nocheck +return require(script.Parent.vide.src) diff --git a/packages/vide-charm/src/init.luau b/packages/vide-charm/src/init.luau index 6590ef7..ef7bb25 100644 --- a/packages/vide-charm/src/init.luau +++ b/packages/vide-charm/src/init.luau @@ -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(callback: () -> State): () -> State local state = source(callback()) - local dispose = subscribe(callback, state) - cleanup(dispose) + cleanup(subscribe(callback, state)) return state end diff --git a/tests/signals/computed.spec.luau b/tests/signals/computed.spec.luau index a1e435b..828d9c3 100644 --- a/tests/signals/computed.spec.luau +++ b/tests/signals/computed.spec.luau @@ -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) diff --git a/tests/signals/effect.spec.luau b/tests/signals/effect.spec.luau index 87aeda5..a279e47 100644 --- a/tests/signals/effect.spec.luau +++ b/tests/signals/effect.spec.luau @@ -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 diff --git a/tests/signals/effectScope.spec.luau b/tests/signals/effectScope.spec.luau index 1ac0317..5f5ebd3 100644 --- a/tests/signals/effectScope.spec.luau +++ b/tests/signals/effectScope.spec.luau @@ -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) diff --git a/tests/signals/issue_48.spec.luau b/tests/signals/issue_48.spec.luau index 3ecf720..bfb2d86 100644 --- a/tests/signals/issue_48.spec.luau +++ b/tests/signals/issue_48.spec.luau @@ -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 = { fireImmediately: boolean?, diff --git a/tests/signals/topology.spec.luau b/tests/signals/topology.spec.luau index 227ff47..e111576 100644 --- a/tests/signals/topology.spec.luau +++ b/tests/signals/topology.spec.luau @@ -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 diff --git a/tests/signals/untrack.spec.luau b/tests/signals/untrack.spec.luau index 8ff46ba..860ea0b 100644 --- a/tests/signals/untrack.spec.luau +++ b/tests/signals/untrack.spec.luau @@ -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)