UNPKG

use-s-react

Version:

useS is a minimal yet powerful React hook for managing both local and global state — with zero boilerplate

77 lines (76 loc) 2.38 kB
import { TypeCheck } from "full-copy"; const store = new Map(); export function createState(key, initial) { store.set(key, { value: initial, listeners: new Set(), }); } export function setGlobalState(key, newValue) { const entry = store.get(key); if (entry) { entry.value = newValue; entry.listeners.forEach((fn) => fn()); } } export function subscribeToGlobalState(key, listener) { const entry = store.get(key); if (!entry) return () => { }; entry.listeners.add(listener); return () => entry.listeners.delete(listener); } export function getGlobalSnapshot(key) { const entry = store.get(key); return entry?.value; } export function debugGlobalStore(options = {}) { const { filterKey, withConsoleTable = true } = options; const hasTable = withConsoleTable && typeof console.table === "function"; console.group("[🗄️ useS] Global Store Debug"); for (const [key, entry] of store.entries()) { if (filterKey && key !== filterKey) continue; const value = entry.value; const type = TypeCheck(value)[0]; console.groupCollapsed(`🔑 ${key} (${type})`); if (type === "map" && value instanceof Map) { if (hasTable) console.table(Object.fromEntries(value)); else console.log(Object.fromEntries(value)); } else if (type === "set" && value instanceof Set) { if (hasTable) console.table(Array.from(value)); else console.log(Array.from(value)); } else if (type === "regexp") { if (hasTable) console.table(value); else console.log(value); } else if (type === "array") { if (hasTable) console.table(value); else console.log(value); } else if (type === "object") { if (hasTable) console.table(value); else console.log(value); } else { console.log(value); // "number", "string", "boolean", "undefined", "null" & "date" } console.groupEnd(); } console.groupEnd(); } export function isKeyInitialized(key) { return !!key && store.has(key); }