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 = {}
for index, value in state do
local prevSub = setCurrentSub(nil)
local currentSub = setCurrentSub(nil)
local success, valueOut, keyOut = pcall(mapper, value, index)
setCurrentSub(prevSub)
setCurrentSub(currentSub)
if success then
nextState[keyOut] = valueOut

View file

@ -16,9 +16,9 @@ local function listen<T>(selector: () -> T, listener: (state: T, previous: T?, d
current = selector()
if current ~= previous then
local prevSub = setCurrentSub(nil)
local currentSub = setCurrentSub(nil)
local success, result: unknown = pcall(listener, current, previous, dispose)
setCurrentSub(prevSub)
setCurrentSub(currentSub)
if not success then
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 function map(value: VI, key: KI): (VO, KO)
local prevSub = setCurrentSub(nil)
local currentSub = setCurrentSub(nil)
local success, valueOut, keyOut = pcall(mapper, value, key)
setCurrentSub(prevSub)
setCurrentSub(currentSub)
if not success then
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()
if currentItems ~= previousItems then
local prevSub = setCurrentSub(nil)
local currentSub = setCurrentSub(nil)
local success, result: unknown = pcall(updateScopes, currentItems, previousItems)
setCurrentSub(prevSub)
setCurrentSub(currentSub)
if not success then
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
mounted = false
elseif current ~= previous then
local prevSub = setCurrentSub(nil)
local currentSub = setCurrentSub(nil)
local success, result: unknown = pcall(listener, current, previous)
setCurrentSub(prevSub)
setCurrentSub(currentSub)
if not success then
error(`subscribe() encountered an error: {result}`)

View file

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

View file

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

View file

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

View file

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