### Basic alien-signals API Usage (TypeScript) Source: https://github.com/stackblitz/alien-signals/blob/master/README.md Demonstrates the basic usage of alien-signals for creating reactive state. It shows how to define a signal, a computed signal derived from it, and an effect that reacts to signal changes. The example illustrates updating the signal and observing the cascading effects on the computed signal and the effect. ```typescript import { signal, computed, effect } from 'alien-signals'; const count = signal(1); const doubleCount = computed(() => count() * 2); effect(() => { console.log(`Count is: ${count()}`); }); // Console: Count is: 1 console.log(doubleCount()); // 2 count(2); // Console: Count is: 2 console.log(doubleCount()); // 4 ``` -------------------------------- ### Manage Effects with Effect Scope in Alien Signals Source: https://github.com/stackblitz/alien-signals/blob/master/README.md Demonstrates how to create, run, and stop an effect scope using `effectScope` and `effect` from the alien-signals library. It shows how effects within a scope are automatically cleaned up when the scope is stopped. ```ts import { signal, effect, effectScope } from 'alien-signals'; const count = signal(1); const stopScope = effectScope(() => { effect(() => { console.log(`Count in scope: ${count()}`); }); // Console: Count in scope: 1 }); count(2); // Console: Count in scope: 2 stopScope(); count(3); // No console output ``` -------------------------------- ### CheckDirty Function for Dependency Validation Source: https://github.com/stackblitz/alien-signals/blob/master/README.md The `checkDirty` function recursively checks dependencies for changes. It determines if updates are needed by examining flags like `Dirty` and `Pending`, and triggers re-evaluation or propagation if necessary. ```ts function checkDirty(link: Link, sub: ReactiveNode): boolean { do { const dep = link.dep; const depFlags = dep.flags; if (sub.flags & ReactiveFlags.Dirty) { return true; } else if ((depFlags & (ReactiveFlags.Mutable | ReactiveFlags.Dirty)) === (ReactiveFlags.Mutable | ReactiveFlags.Dirty)) { if (update(dep)) { const subs = dep.subs!; if (subs.nextSub !== undefined) { shallowPropagate(subs); } return true; } } else if ((depFlags & (ReactiveFlags.Mutable | ReactiveFlags.Pending)) === (ReactiveFlags.Mutable | ReactiveFlags.Pending)) { if (checkDirty(dep.deps!, dep)) { if (update(dep)) { const subs = dep.subs!; if (subs.nextSub !== undefined) { shallowPropagate(subs); } return true; } } else { dep.flags = depFlags & ~ReactiveFlags.Pending; } } link = link.nextDep!; } while (link !== undefined); return false; } ``` -------------------------------- ### Propagate Function for Reactive Updates Source: https://github.com/stackblitz/alien-signals/blob/master/README.md The `propagate` function is part of the core reactive system. It iterates through linked dependencies, updating flags and notifying subscribers to ensure reactive changes are processed efficiently, avoiding recursive calls. ```ts function propagate(link: Link): void { do { const sub = link.sub; let flags = sub.flags; if (!(flags & (ReactiveFlags.RecursedCheck | ReactiveFlags.Recursed | ReactiveFlags.Dirty | ReactiveFlags.Pending))) { sub.flags = flags | ReactiveFlags.Pending; } else if (!(flags & (ReactiveFlags.RecursedCheck | ReactiveFlags.Recursed))) { flags = ReactiveFlags.None; } else if (!(flags & ReactiveFlags.RecursedCheck)) { sub.flags = (flags & ~ReactiveFlags.Recursed) | ReactiveFlags.Pending; } else if (!(flags & (ReactiveFlags.Dirty | ReactiveFlags.Pending)) && isValidLink(link, sub)) { sub.flags = flags | ReactiveFlags.Recursed | ReactiveFlags.Pending; flags &= ReactiveFlags.Mutable; } else { flags = ReactiveFlags.None; } if (flags & ReactiveFlags.Watching) { notify(sub); } if (flags & ReactiveFlags.Mutable) { const subSubs = sub.subs; if (subSubs !== undefined) { propagate(subSubs); } } link = link.nextSub!; } while (link !== undefined); } ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.