From 8339f5d0c88e6a0d36e9c8567ca3b00b7e578901 Mon Sep 17 00:00:00 2001 From: djalmajr Date: Fri, 4 Aug 2023 09:36:19 -0300 Subject: [PATCH] Rename createStore to createState --- src/{createStore.ts => createState.ts} | 25 ++++++++++++++++--------- src/index.ts | 2 +- 2 files changed, 17 insertions(+), 10 deletions(-) rename src/{createStore.ts => createState.ts} (77%) diff --git a/src/createStore.ts b/src/createState.ts similarity index 77% rename from src/createStore.ts rename to src/createState.ts index fefeccb..1f6dcff 100644 --- a/src/createStore.ts +++ b/src/createState.ts @@ -6,7 +6,10 @@ import { omit } from './omit'; import { guid } from './random'; import { Obj } from './types'; -type Store = T & { subscribe(fn: (s: T) => void): () => never }; +type Store = T & { + dispose(fn: (s: T) => void): void; + observe(fn: (s: T) => void): () => void; +}; const { emit, on } = createEmitter(); const { defineProperty, getOwnPropertyDescriptor } = Object; @@ -36,26 +39,30 @@ type Options = { immediate?: boolean; }; -export function createStore(data: T, opts?: Options): Store { +export function createState(data?: T, opts?: Options): Store { const { immediate } = opts || {}; const fns = []; - const init = clone(data); + const init = clone(data || {}) as Obj; const uid = guid(); - defineProperty(init, 'subscribe', { + defineProperty(init, 'dispose', { + value(fn: Function) { + const idx = fns.findIndex((f) => f === fn); + idx !== -1 && fns.splice(idx, 1); + }, + }); + + defineProperty(init, 'observe', { value(fn: Function) { if (!fns.includes(fn)) fns.push(fn); - return () => { - const idx = fns.findIndex((l) => l === fn); - idx !== -1 && fns.splice(idx, 1); - }; + return () => init.dispose(fn); }, }); let nextTickId = 0; const store = new Proxy(init, handler(uid)); on(`update:${uid}`, () => { - const data = omit('subscribe', store); + const data = omit(['dispose', 'observe'], store); if (immediate) return fns.forEach((fn) => fn(data)); if (nextTickId) cancelAnimationFrame(nextTickId); nextTickId = requestAnimationFrame(() => fns.forEach((fn) => fn(data))); diff --git a/src/index.ts b/src/index.ts index a9789ed..46302b0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,7 +12,7 @@ export * from './copy'; export * from './createAjax'; export * from './createCache'; export * from './createEmitter'; -export * from './createStore'; +export * from './createState'; export * from './curry'; export * from './debounce'; export * from './diff';