refactor: use setCurrentSub instead of pauseTracking

This commit is contained in:
littensy 2025-05-08 00:12:51 -07:00
parent 571d2c0d91
commit a53683d59e
9 changed files with 21 additions and 24 deletions

View file

@ -25,9 +25,9 @@ local function simpleMapped(source: () -> { Entry }, mapper: (Entry, number) ->
local nextState = {} local nextState = {}
for index, value in state do for index, value in state do
local prevSub = setCurrentSub(nil) local currentSub = setCurrentSub(nil)
local success, valueOut, keyOut = pcall(mapper, value, index) local success, valueOut, keyOut = pcall(mapper, value, index)
setCurrentSub(prevSub) setCurrentSub(currentSub)
if success then if success then
nextState[keyOut] = valueOut nextState[keyOut] = valueOut

View file

@ -16,9 +16,9 @@ local function listen<T>(selector: () -> T, listener: (state: T, previous: T?, d
current = selector() current = selector()
if current ~= previous then if current ~= previous then
local prevSub = setCurrentSub(nil) local currentSub = setCurrentSub(nil)
local success, result: unknown = pcall(listener, current, previous, dispose) local success, result: unknown = pcall(listener, current, previous, dispose)
setCurrentSub(prevSub) setCurrentSub(currentSub)
if not success then if not success then
error(`listen() encountered an error: {result}`) error(`listen() encountered an error: {result}`)

View file

@ -16,9 +16,9 @@ local function mapped<KI, VI, KO, VO>(selector: () -> { [KI]: VI }, mapper: (ite
local keyCache: { [KI]: KO } = {} local keyCache: { [KI]: KO } = {}
local function map(value: VI, key: KI): (VO, KO) local function map(value: VI, key: KI): (VO, KO)
local prevSub = setCurrentSub(nil) local currentSub = setCurrentSub(nil)
local success, valueOut, keyOut = pcall(mapper, value, key) local success, valueOut, keyOut = pcall(mapper, value, key)
setCurrentSub(prevSub) setCurrentSub(currentSub)
if not success then if not success then
error(`mapped() transform function failed: {valueOut}`) error(`mapped() transform function failed: {valueOut}`)

View file

@ -46,9 +46,9 @@ local function observe<K, V>(selector: () -> { [K]: V }, observer: (item: V, key
currentItems = selector() currentItems = selector()
if currentItems ~= previousItems then if currentItems ~= previousItems then
local prevSub = setCurrentSub(nil) local currentSub = setCurrentSub(nil)
local success, result: unknown = pcall(updateScopes, currentItems, previousItems) local success, result: unknown = pcall(updateScopes, currentItems, previousItems)
setCurrentSub(prevSub) setCurrentSub(currentSub)
if not success then if not success then
error(`observe() encountered an error: {result}`, 2) error(`observe() encountered an error: {result}`, 2)

View file

@ -14,9 +14,9 @@ local function subscribe<T>(selector: () -> T, listener: (state: T, lastState: T
if mounted then if mounted then
mounted = false mounted = false
elseif current ~= previous then elseif current ~= previous then
local prevSub = setCurrentSub(nil) local currentSub = setCurrentSub(nil)
local success, result: unknown = pcall(listener, current, previous) local success, result: unknown = pcall(listener, current, previous)
setCurrentSub(prevSub) setCurrentSub(currentSub)
if not success then if not success then
error(`subscribe() encountered an error: {result}`) error(`subscribe() encountered an error: {result}`)

View file

@ -3,9 +3,9 @@ local signals = require("./signals")
local setCurrentSub = signals.setCurrentSub local setCurrentSub = signals.setCurrentSub
local function untracked<T, Args...>(callback: ((Args...) -> T) | (Args...) -> (), ...: Args...): T local function untracked<T, Args...>(callback: ((Args...) -> T) | (Args...) -> (), ...: Args...): T
local prevSub = setCurrentSub(nil) local currentSub = setCurrentSub(nil)
local success, result = pcall(callback, ...) local success, result = pcall(callback, ...)
setCurrentSub(prevSub) setCurrentSub(currentSub)
if not success then if not success then
error(result) error(result)

View file

@ -5,8 +5,7 @@ local computed = signals.computed
local effect = signals.effect local effect = signals.effect
local effectScope = signals.effectScope local effectScope = signals.effectScope
local endBatch = signals.endBatch local endBatch = signals.endBatch
local pauseTracking = signals.pauseTracking local setCurrentSub = signals.setCurrentSub
local resumeTracking = signals.resumeTracking
local onEffectCleanup = signals.onEffectCleanup local onEffectCleanup = signals.onEffectCleanup
local signal = signals.signal local signal = signals.signal
local startBatch = signals.startBatch local startBatch = signals.startBatch
@ -203,9 +202,9 @@ test("should duplicate subscribers do not affect the notify order", function()
effect(function() effect(function()
table.insert(order, "a") table.insert(order, "a")
pauseTracking() local currentSub = setCurrentSub(nil)
local isOne = src2() == 1 local isOne = src2() == 1
resumeTracking() setCurrentSub(currentSub)
if isOne then if isOne then
src1() src1()
end end

View file

@ -3,8 +3,7 @@ local suite = require("@tests/suite")
local computed = signals.computed local computed = signals.computed
local effect = signals.effect local effect = signals.effect
local pauseTracking = signals.pauseTracking local setCurrentSub = signals.setCurrentSub
local resumeTracking = signals.resumeTracking
local signal = signals.signal local signal = signals.signal
local test = suite.test local test = suite.test
@ -17,9 +16,9 @@ type ReactionOptions<T = unknown> = {
} }
local function untracked<T>(callback: () -> T): T local function untracked<T>(callback: () -> T): T
pauseTracking() local currentSub = setCurrentSub(nil)
local success, result = pcall(callback) local success, result = pcall(callback)
resumeTracking() setCurrentSub(currentSub)
if not success then if not success then
error(result) error(result)
end end

View file

@ -2,17 +2,16 @@ local signals = require("../../src/signals")
local suite = require("@tests/suite") local suite = require("@tests/suite")
local computed = signals.computed local computed = signals.computed
local pauseTracking = signals.pauseTracking local setCurrentSub = signals.setCurrentSub
local resumeTracking = signals.resumeTracking
local signal = signals.signal local signal = signals.signal
local test = suite.test local test = suite.test
test("should pause tracking", function() test("should pause tracking", function()
local src, setSrc = signal(0) local src, setSrc = signal(0)
local c = computed(function() local c = computed(function()
pauseTracking() local currentSub = setCurrentSub(nil)
local value = src() local value = src()
resumeTracking() setCurrentSub(currentSub)
return value return value
end) end)
assert(c() == 0, "should not track src") assert(c() == 0, "should not track src")