From 027c5bf8f89e1f7b8e22f15f7018052459bcb087 Mon Sep 17 00:00:00 2001 From: littensy <56808540+littensy@users.noreply.github.com> Date: Thu, 2 Oct 2025 19:37:03 -0700 Subject: [PATCH] feat: add flag for inner effect tracking --- .gitignore | 1 + packages/charm/src/core.luau | 2 +- packages/charm/src/flags.luau | 4 ++++ packages/charm/src/index.d.ts | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 815441d..52e0af1 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,6 @@ node_modules *.tsbuildinfo *.rbxm +*.tgz .DS_Store roblox.d.luau diff --git a/packages/charm/src/core.luau b/packages/charm/src/core.luau index dffba9a..f430260 100644 --- a/packages/charm/src/core.luau +++ b/packages/charm/src/core.luau @@ -349,7 +349,7 @@ local function effect(fn: (dispose: () -> ()) -> ...(() -> ())?): () -> () cleanup = nil :: any, } self.cleanup = effectStop(self) - if activeSub then + if activeSub and config.trackInnerEffects then link(self, activeSub) elseif activeScope then link(self, activeScope) diff --git a/packages/charm/src/flags.luau b/packages/charm/src/flags.luau index 3900394..43475be 100644 --- a/packages/charm/src/flags.luau +++ b/packages/charm/src/flags.luau @@ -12,4 +12,8 @@ return { --- Enforces immutability of atoms by deep-freezing table values. Enabled --- if the optimization level is below 2, which is true in studio. frozen = not isO2, + --- Whether inner effects should clean up after themselves when their + --- parent effect re-runs. This is usually desirable, but can be disabled + --- to revert to the old behavior. Defaults to `true`. + trackInnerEffects = true, } diff --git a/packages/charm/src/index.d.ts b/packages/charm/src/index.d.ts index a8cabeb..cfffd62 100644 --- a/packages/charm/src/index.d.ts +++ b/packages/charm/src/index.d.ts @@ -13,6 +13,7 @@ export type Equals = (current: T, incoming: T) => boolean; export const flags: { strict: boolean; frozen: boolean; + trackInnerEffects: boolean; }; export function atom(value: T, equals?: Equals): Atom;