🚀 Big News:Socket Has Acquired Secure Annex.Learn More
Socket
Book a DemoSign in
Socket

stook

Package Overview
Dependencies
Maintainers
1
Versions
36
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

stook - npm Package Compare versions

Comparing version
1.5.0
to
1.5.1
+3
-1
dist/stook.cjs.development.js

@@ -118,2 +118,4 @@ 'use strict';

var isBrowser = typeof window === 'object' && typeof document === 'object' && document.nodeType === 9;
var useSafeLayoutEffect = isBrowser ? react.useLayoutEffect : react.useEffect;
/**

@@ -146,3 +148,3 @@ * Returns a stateful value, similar to useState, but need a key;

react.useLayoutEffect(function () {
useSafeLayoutEffect(function () {
setters.push(set);

@@ -149,0 +151,0 @@ emitStoreInit(key);

@@ -1,1 +0,1 @@

{"version":3,"file":"stook.cjs.development.js","sources":["../src/Storage.ts","../src/emitter.ts","../src/Store.ts","../src/useStore.ts","../src/getState.ts","../src/mutate.ts"],"sourcesContent":["import { Store } from './Store'\n\ninterface Stores {\n [key: string]: Store\n}\n\n/**\n * Storage for anything\n */\nexport class Storage {\n static stores: Stores = {}\n static set(key: any, value: Store) {\n const store = Storage.stores[key]\n if (!store || !store.setState) {\n Storage.stores[key] = value\n }\n }\n\n static get<S = any>(key: any): Store<S> {\n return Storage.stores[key]\n }\n}\n","import mitt from 'mitt'\n\ninterface Data {\n key: any\n nextState: any\n}\n\ntype Events = {\n STORE_INITED: string\n STORE_UPDATED: Data\n}\n\nenum EventKey {\n STORE_INITED = 'STORE_INITED',\n STORE_UPDATED = 'STORE_UPDATED',\n}\n\nexport const emitter = mitt<Events>()\n\nexport function emitStoreInit(key: any) {\n emitter.emit(EventKey.STORE_INITED, key)\n}\n\nexport function emitStoreUpdate(data: Data) {\n emitter.emit(EventKey.STORE_UPDATED, data)\n}\n\nexport function onStoreInit(cb: (data: string) => void) {\n emitter.on(EventKey.STORE_INITED, key => {\n cb(key)\n })\n}\n\nexport function onStoreUpdate(cb: (data: Data) => void) {\n emitter.on(EventKey.STORE_UPDATED, data => {\n cb(data)\n })\n}\n","import { produce } from 'immer'\nimport { Dispatch, SetStateAction } from './types'\nimport { emitStoreUpdate } from './emitter'\n\n/**\n * store for one key\n */\nexport class Store<S = any> {\n state: S\n setters: Dispatch<SetStateAction<S>>[] = []\n constructor(value: any) {\n this.state = value\n }\n\n private getNextState(state: S, value: any): any {\n let nextState: any\n\n // not function\n if (typeof value !== 'function') return value\n\n // can not use immer\n if (typeof state !== 'object') return value(state)\n\n let useImmer = true\n\n const immerState = produce(state, draft => {\n const fnValue = value(draft)\n if (fnValue === draft) return // do nothing\n\n // use function return value\n if (fnValue && typeof fnValue === 'object') {\n nextState = fnValue\n useImmer = false\n }\n })\n\n if (useImmer) {\n nextState = immerState\n }\n\n return nextState\n }\n\n setState = (key: any, state: any, value: any): any => {\n const nextState = this.getNextState(state, value)\n\n this.state = nextState\n\n emitStoreUpdate({ key, nextState })\n\n this.state = nextState\n this.setters.forEach(set => set(nextState))\n return nextState\n }\n}\n","import { useState, useEffect, useLayoutEffect } from 'react'\nimport { Storage } from './Storage'\nimport { Store } from './Store'\nimport { Dispatch, Action, keyType } from './types'\nimport { emitStoreInit } from './emitter'\n\n/**\n * Returns a stateful value, similar to useState, but need a key;\n *\n * 用法和 useState 几乎一模一样,只是第一个参数是唯一key;\n *\n * @param key unique store key (唯一key)\n * @param initialValue initial value, can not override, use first useStore to init\n * @see https://stook.vercel.app/docs/stook/use-store\n *\n * 需要注意的是,如果调用多个相同key的 useStore, 第一个被调用的 useStore 的 initialValue 才是有效的 initialValue\n */\nexport function useStore<S = any, K = string>(\n key: K | keyType,\n initialValue?: S,\n): [S, Dispatch<Action<S>>] {\n const storageStore = Storage.get(key)\n const initialState = storageStore ? storageStore.state : initialValue\n\n Storage.set(key, new Store<S>(initialState))\n\n const newStore = Storage.get(key)\n const [state, set] = useState(initialState)\n const { setters } = newStore\n\n /**\n * push setState sync\n */\n useLayoutEffect(() => {\n setters.push(set)\n emitStoreInit(key)\n }, [])\n\n useEffect(() => {\n return () => {\n setters.splice(setters.indexOf(set), 1)\n }\n }, [])\n\n function act(key: any): Dispatch<Action<S>> {\n return (value: any) => {\n return newStore.setState(key, state, value)\n }\n }\n\n return [state, act(key)]\n}\n","import { Storage } from './Storage'\nimport { keyType } from './types'\n\nconst undefined_as_any: any = undefined\n\n/**\n * Get store by Key\n * @param key\n */\nexport function getState<S = any, K = string>(key: K | keyType): S {\n const store = Storage.get<S>(key)\n return store ? store.state : undefined_as_any\n}\n","import { Storage } from './Storage'\nimport { keyType } from './types'\n\n/**\n * update store by key\n *\n * @param key unique store key (唯一key)\n * @param nextValue next value\n */\nexport function mutate<S, K = string>(key: K | keyType, nextValue?: S) {\n const store = Storage.get(key)\n\n if (store && store.setState) {\n store.setState(key, store.state, nextValue)\n } else {\n // init state, if no store exist\n Storage.set(key, { state: nextValue } as any)\n }\n}\n"],"names":["Storage","set","key","value","store","stores","setState","get","EventKey","emitter","mitt","emitStoreInit","emit","STORE_INITED","emitStoreUpdate","data","STORE_UPDATED","onStoreInit","cb","on","onStoreUpdate","Store","state","nextState","getNextState","setters","forEach","useImmer","immerState","produce","draft","fnValue","useStore","initialValue","storageStore","initialState","newStore","useState","useLayoutEffect","push","useEffect","splice","indexOf","act","undefined_as_any","undefined","getState","mutate","nextValue"],"mappings":"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"}
{"version":3,"file":"stook.cjs.development.js","sources":["../src/Storage.ts","../src/emitter.ts","../src/Store.ts","../src/useStore.ts","../src/getState.ts","../src/mutate.ts"],"sourcesContent":["import { Store } from './Store'\n\ninterface Stores {\n [key: string]: Store\n}\n\n/**\n * Storage for anything\n */\nexport class Storage {\n static stores: Stores = {}\n static set(key: any, value: Store) {\n const store = Storage.stores[key]\n if (!store || !store.setState) {\n Storage.stores[key] = value\n }\n }\n\n static get<S = any>(key: any): Store<S> {\n return Storage.stores[key]\n }\n}\n","import mitt from 'mitt'\n\ninterface Data {\n key: any\n nextState: any\n}\n\ntype Events = {\n STORE_INITED: string\n STORE_UPDATED: Data\n}\n\nenum EventKey {\n STORE_INITED = 'STORE_INITED',\n STORE_UPDATED = 'STORE_UPDATED',\n}\n\nexport const emitter = mitt<Events>()\n\nexport function emitStoreInit(key: any) {\n emitter.emit(EventKey.STORE_INITED, key)\n}\n\nexport function emitStoreUpdate(data: Data) {\n emitter.emit(EventKey.STORE_UPDATED, data)\n}\n\nexport function onStoreInit(cb: (data: string) => void) {\n emitter.on(EventKey.STORE_INITED, key => {\n cb(key)\n })\n}\n\nexport function onStoreUpdate(cb: (data: Data) => void) {\n emitter.on(EventKey.STORE_UPDATED, data => {\n cb(data)\n })\n}\n","import { produce } from 'immer'\nimport { Dispatch, SetStateAction } from './types'\nimport { emitStoreUpdate } from './emitter'\n\n/**\n * store for one key\n */\nexport class Store<S = any> {\n state: S\n setters: Dispatch<SetStateAction<S>>[] = []\n constructor(value: any) {\n this.state = value\n }\n\n private getNextState(state: S, value: any): any {\n let nextState: any\n\n // not function\n if (typeof value !== 'function') return value\n\n // can not use immer\n if (typeof state !== 'object') return value(state)\n\n let useImmer = true\n\n const immerState = produce(state, draft => {\n const fnValue = value(draft)\n if (fnValue === draft) return // do nothing\n\n // use function return value\n if (fnValue && typeof fnValue === 'object') {\n nextState = fnValue\n useImmer = false\n }\n })\n\n if (useImmer) {\n nextState = immerState\n }\n\n return nextState\n }\n\n setState = (key: any, state: any, value: any): any => {\n const nextState = this.getNextState(state, value)\n\n this.state = nextState\n\n emitStoreUpdate({ key, nextState })\n\n this.state = nextState\n this.setters.forEach(set => set(nextState))\n return nextState\n }\n}\n","import { useState, useEffect, useLayoutEffect } from 'react'\nimport { Storage } from './Storage'\nimport { Store } from './Store'\nimport { Dispatch, Action, keyType } from './types'\nimport { emitStoreInit } from './emitter'\n\nconst isBrowser =\n typeof window === 'object' && typeof document === 'object' && document.nodeType === 9\n\nconst useSafeLayoutEffect = isBrowser ? useLayoutEffect : useEffect\n\n/**\n * Returns a stateful value, similar to useState, but need a key;\n *\n * 用法和 useState 几乎一模一样,只是第一个参数是唯一key;\n *\n * @param key unique store key (唯一key)\n * @param initialValue initial value, can not override, use first useStore to init\n * @see https://stook.vercel.app/docs/stook/use-store\n *\n * 需要注意的是,如果调用多个相同key的 useStore, 第一个被调用的 useStore 的 initialValue 才是有效的 initialValue\n */\nexport function useStore<S = any, K = string>(\n key: K | keyType,\n initialValue?: S,\n): [S, Dispatch<Action<S>>] {\n const storageStore = Storage.get(key)\n const initialState = storageStore ? storageStore.state : initialValue\n\n Storage.set(key, new Store<S>(initialState))\n\n const newStore = Storage.get(key)\n const [state, set] = useState(initialState)\n const { setters } = newStore\n\n /**\n * push setState sync\n */\n useSafeLayoutEffect(() => {\n setters.push(set)\n emitStoreInit(key)\n }, [])\n\n useEffect(() => {\n return () => {\n setters.splice(setters.indexOf(set), 1)\n }\n }, [])\n\n function act(key: any): Dispatch<Action<S>> {\n return (value: any) => {\n return newStore.setState(key, state, value)\n }\n }\n\n return [state, act(key)]\n}\n","import { Storage } from './Storage'\nimport { keyType } from './types'\n\nconst undefined_as_any: any = undefined\n\n/**\n * Get store by Key\n * @param key\n */\nexport function getState<S = any, K = string>(key: K | keyType): S {\n const store = Storage.get<S>(key)\n return store ? store.state : undefined_as_any\n}\n","import { Storage } from './Storage'\nimport { keyType } from './types'\n\n/**\n * update store by key\n *\n * @param key unique store key (唯一key)\n * @param nextValue next value\n */\nexport function mutate<S, K = string>(key: K | keyType, nextValue?: S) {\n const store = Storage.get(key)\n\n if (store && store.setState) {\n store.setState(key, store.state, nextValue)\n } else {\n // init state, if no store exist\n Storage.set(key, { state: nextValue } as any)\n }\n}\n"],"names":["Storage","set","key","value","store","stores","setState","get","EventKey","emitter","mitt","emitStoreInit","emit","STORE_INITED","emitStoreUpdate","data","STORE_UPDATED","onStoreInit","cb","on","onStoreUpdate","Store","state","nextState","getNextState","setters","forEach","useImmer","immerState","produce","draft","fnValue","isBrowser","window","document","nodeType","useSafeLayoutEffect","useLayoutEffect","useEffect","useStore","initialValue","storageStore","initialState","newStore","useState","push","splice","indexOf","act","undefined_as_any","undefined","getState","mutate","nextValue"],"mappings":"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"}

@@ -1,2 +0,2 @@

"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t,e,n=require("react"),r=require("immer"),o=(t=require("mitt"))&&"object"==typeof t&&"default"in t?t.default:t,u=function(){function t(){}return t.set=function(e,n){var r=t.stores[e];r&&r.setState||(t.stores[e]=n)},t.get=function(e){return t.stores[e]},t}();u.stores={},function(t){t.STORE_INITED="STORE_INITED",t.STORE_UPDATED="STORE_UPDATED"}(e||(e={}));var s=o(),i=function(){function t(t){var n=this;this.setters=[],this.setState=function(t,r,o){var u=n.getNextState(r,o);return n.state=u,s.emit(e.STORE_UPDATED,{key:t,nextState:u}),n.state=u,n.setters.forEach((function(t){return t(u)})),u},this.state=t}return t.prototype.getNextState=function(t,e){var n;if("function"!=typeof e)return e;if("object"!=typeof t)return e(t);var o=!0,u=r.produce(t,(function(t){var r=e(t);r!==t&&r&&"object"==typeof r&&(n=r,o=!1)}));return o&&(n=u),n},t}();exports.Storage=u,exports.getState=function(t){var e=u.get(t);return e?e.state:void 0},exports.mutate=function(t,e){var n=u.get(t);n&&n.setState?n.setState(t,n.state,e):u.set(t,{state:e})},exports.onStoreInit=function(t){s.on(e.STORE_INITED,(function(e){t(e)}))},exports.onStoreUpdate=function(t){s.on(e.STORE_UPDATED,(function(e){t(e)}))},exports.useStore=function(t,r){var o=u.get(t),f=o?o.state:r;u.set(t,new i(f));var a=u.get(t),c=n.useState(f),S=c[0],E=c[1],p=a.setters;return n.useLayoutEffect((function(){p.push(E),function(t){s.emit(e.STORE_INITED,t)}(t)}),[]),n.useEffect((function(){return function(){p.splice(p.indexOf(E),1)}}),[]),[S,function(t){return function(e){return a.setState(t,S,e)}}(t)]};
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t,e,n=require("react"),r=require("immer"),o=(t=require("mitt"))&&"object"==typeof t&&"default"in t?t.default:t,u=function(){function t(){}return t.set=function(e,n){var r=t.stores[e];r&&r.setState||(t.stores[e]=n)},t.get=function(e){return t.stores[e]},t}();u.stores={},function(t){t.STORE_INITED="STORE_INITED",t.STORE_UPDATED="STORE_UPDATED"}(e||(e={}));var s=o(),i=function(){function t(t){var n=this;this.setters=[],this.setState=function(t,r,o){var u=n.getNextState(r,o);return n.state=u,s.emit(e.STORE_UPDATED,{key:t,nextState:u}),n.state=u,n.setters.forEach((function(t){return t(u)})),u},this.state=t}return t.prototype.getNextState=function(t,e){var n;if("function"!=typeof e)return e;if("object"!=typeof t)return e(t);var o=!0,u=r.produce(t,(function(t){var r=e(t);r!==t&&r&&"object"==typeof r&&(n=r,o=!1)}));return o&&(n=u),n},t}(),f="object"==typeof window&&"object"==typeof document&&9===document.nodeType?n.useLayoutEffect:n.useEffect;exports.Storage=u,exports.getState=function(t){var e=u.get(t);return e?e.state:void 0},exports.mutate=function(t,e){var n=u.get(t);n&&n.setState?n.setState(t,n.state,e):u.set(t,{state:e})},exports.onStoreInit=function(t){s.on(e.STORE_INITED,(function(e){t(e)}))},exports.onStoreUpdate=function(t){s.on(e.STORE_UPDATED,(function(e){t(e)}))},exports.useStore=function(t,r){var o=u.get(t),c=o?o.state:r;u.set(t,new i(c));var a=u.get(t),S=n.useState(c),p=S[0],E=S[1],T=a.setters;return f((function(){T.push(E),function(t){s.emit(e.STORE_INITED,t)}(t)}),[]),n.useEffect((function(){return function(){T.splice(T.indexOf(E),1)}}),[]),[p,function(t){return function(e){return a.setState(t,p,e)}}(t)]};
//# sourceMappingURL=stook.cjs.production.min.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"stook.cjs.production.min.js","sources":["../src/emitter.ts","../src/Storage.ts","../src/Store.ts","../src/getState.ts","../src/mutate.ts","../src/useStore.ts"],"sourcesContent":["import mitt from 'mitt'\n\ninterface Data {\n key: any\n nextState: any\n}\n\ntype Events = {\n STORE_INITED: string\n STORE_UPDATED: Data\n}\n\nenum EventKey {\n STORE_INITED = 'STORE_INITED',\n STORE_UPDATED = 'STORE_UPDATED',\n}\n\nexport const emitter = mitt<Events>()\n\nexport function emitStoreInit(key: any) {\n emitter.emit(EventKey.STORE_INITED, key)\n}\n\nexport function emitStoreUpdate(data: Data) {\n emitter.emit(EventKey.STORE_UPDATED, data)\n}\n\nexport function onStoreInit(cb: (data: string) => void) {\n emitter.on(EventKey.STORE_INITED, key => {\n cb(key)\n })\n}\n\nexport function onStoreUpdate(cb: (data: Data) => void) {\n emitter.on(EventKey.STORE_UPDATED, data => {\n cb(data)\n })\n}\n","import { Store } from './Store'\n\ninterface Stores {\n [key: string]: Store\n}\n\n/**\n * Storage for anything\n */\nexport class Storage {\n static stores: Stores = {}\n static set(key: any, value: Store) {\n const store = Storage.stores[key]\n if (!store || !store.setState) {\n Storage.stores[key] = value\n }\n }\n\n static get<S = any>(key: any): Store<S> {\n return Storage.stores[key]\n }\n}\n","import { produce } from 'immer'\nimport { Dispatch, SetStateAction } from './types'\nimport { emitStoreUpdate } from './emitter'\n\n/**\n * store for one key\n */\nexport class Store<S = any> {\n state: S\n setters: Dispatch<SetStateAction<S>>[] = []\n constructor(value: any) {\n this.state = value\n }\n\n private getNextState(state: S, value: any): any {\n let nextState: any\n\n // not function\n if (typeof value !== 'function') return value\n\n // can not use immer\n if (typeof state !== 'object') return value(state)\n\n let useImmer = true\n\n const immerState = produce(state, draft => {\n const fnValue = value(draft)\n if (fnValue === draft) return // do nothing\n\n // use function return value\n if (fnValue && typeof fnValue === 'object') {\n nextState = fnValue\n useImmer = false\n }\n })\n\n if (useImmer) {\n nextState = immerState\n }\n\n return nextState\n }\n\n setState = (key: any, state: any, value: any): any => {\n const nextState = this.getNextState(state, value)\n\n this.state = nextState\n\n emitStoreUpdate({ key, nextState })\n\n this.state = nextState\n this.setters.forEach(set => set(nextState))\n return nextState\n }\n}\n","import { Storage } from './Storage'\nimport { keyType } from './types'\n\nconst undefined_as_any: any = undefined\n\n/**\n * Get store by Key\n * @param key\n */\nexport function getState<S = any, K = string>(key: K | keyType): S {\n const store = Storage.get<S>(key)\n return store ? store.state : undefined_as_any\n}\n","import { Storage } from './Storage'\nimport { keyType } from './types'\n\n/**\n * update store by key\n *\n * @param key unique store key (唯一key)\n * @param nextValue next value\n */\nexport function mutate<S, K = string>(key: K | keyType, nextValue?: S) {\n const store = Storage.get(key)\n\n if (store && store.setState) {\n store.setState(key, store.state, nextValue)\n } else {\n // init state, if no store exist\n Storage.set(key, { state: nextValue } as any)\n }\n}\n","import { useState, useEffect, useLayoutEffect } from 'react'\nimport { Storage } from './Storage'\nimport { Store } from './Store'\nimport { Dispatch, Action, keyType } from './types'\nimport { emitStoreInit } from './emitter'\n\n/**\n * Returns a stateful value, similar to useState, but need a key;\n *\n * 用法和 useState 几乎一模一样,只是第一个参数是唯一key;\n *\n * @param key unique store key (唯一key)\n * @param initialValue initial value, can not override, use first useStore to init\n * @see https://stook.vercel.app/docs/stook/use-store\n *\n * 需要注意的是,如果调用多个相同key的 useStore, 第一个被调用的 useStore 的 initialValue 才是有效的 initialValue\n */\nexport function useStore<S = any, K = string>(\n key: K | keyType,\n initialValue?: S,\n): [S, Dispatch<Action<S>>] {\n const storageStore = Storage.get(key)\n const initialState = storageStore ? storageStore.state : initialValue\n\n Storage.set(key, new Store<S>(initialState))\n\n const newStore = Storage.get(key)\n const [state, set] = useState(initialState)\n const { setters } = newStore\n\n /**\n * push setState sync\n */\n useLayoutEffect(() => {\n setters.push(set)\n emitStoreInit(key)\n }, [])\n\n useEffect(() => {\n return () => {\n setters.splice(setters.indexOf(set), 1)\n }\n }, [])\n\n function act(key: any): Dispatch<Action<S>> {\n return (value: any) => {\n return newStore.setState(key, state, value)\n }\n }\n\n return [state, act(key)]\n}\n"],"names":["EventKey","Storage","set","key","value","store","stores","setState","get","emitter","mitt","Store","state","nextState","_this","getNextState","emit","STORE_UPDATED","setters","forEach","useImmer","immerState","produce","draft","fnValue","undefined","nextValue","cb","on","STORE_INITED","data","initialValue","storageStore","initialState","newStore","useState","useLayoutEffect","push","emitStoreInit","useEffect","splice","indexOf","act"],"mappings":"0EAYKA,6GCHQC,oCAEJC,IAAP,SAAWC,EAAUC,OACbC,EAAQJ,EAAQK,OAAOH,GACxBE,GAAUA,EAAME,WACnBN,EAAQK,OAAOH,GAAOC,MAInBI,IAAP,SAAoBL,UACXF,EAAQK,OAAOH,SATjBF,SAAiB,GDE1B,SAAKD,GACHA,8BACAA,gCAFF,CAAKA,IAAAA,OAKE,IAAMS,EAAUC,IEVVC,wBAGCP,2BAD6B,iBAkC9B,SAACD,EAAUS,EAAYR,OAC1BS,EAAYC,EAAKC,aAAaH,EAAOR,UAE3CU,EAAKF,MAAQC,EFtBfJ,EAAQO,KAAKhB,EAASiB,cEwBJ,CAAEd,IAAAA,EAAKU,UAAAA,IAEvBC,EAAKF,MAAQC,EACbC,EAAKI,QAAQC,SAAQ,SAAAjB,UAAOA,EAAIW,MACzBA,QAzCFD,MAAQR,qBAGPW,aAAA,SAAaH,EAAUR,OACzBS,KAGiB,mBAAVT,EAAsB,OAAOA,KAGnB,iBAAVQ,EAAoB,OAAOR,EAAMQ,OAExCQ,GAAW,EAETC,EAAaC,UAAQV,GAAO,SAAAW,OAC1BC,EAAUpB,EAAMmB,GAClBC,IAAYD,GAGZC,GAA8B,iBAAZA,IACpBX,EAAYW,EACZJ,GAAW,aAIXA,IACFP,EAAYQ,GAGPR,oDC/BmCV,OACtCE,EAAQJ,EAAQO,IAAOL,UACtBE,EAAQA,EAAMO,WAROa,2BCMQtB,EAAkBuB,OAChDrB,EAAQJ,EAAQO,IAAIL,GAEtBE,GAASA,EAAME,SACjBF,EAAME,SAASJ,EAAKE,EAAMO,MAAOc,GAGjCzB,EAAQC,IAAIC,EAAK,CAAES,MAAOc,kCJWFC,GAC1BlB,EAAQmB,GAAG5B,EAAS6B,cAAc,SAAA1B,GAChCwB,EAAGxB,sCAIuBwB,GAC5BlB,EAAQmB,GAAG5B,EAASiB,eAAe,SAAAa,GACjCH,EAAGG,iCKjBL3B,EACA4B,OAEMC,EAAe/B,EAAQO,IAAIL,GAC3B8B,EAAeD,EAAeA,EAAapB,MAAQmB,EAEzD9B,EAAQC,IAAIC,EAAK,IAAIQ,EAASsB,QAExBC,EAAWjC,EAAQO,IAAIL,KACRgC,WAASF,GAAvBrB,OAAOV,OACNgB,EAAYgB,EAAZhB,eAKRkB,mBAAgB,WACdlB,EAAQmB,KAAKnC,YLfaC,GAC5BM,EAAQO,KAAKhB,EAAS6B,aAAc1B,GKelCmC,CAAcnC,KACb,IAEHoC,aAAU,kBACD,WACLrB,EAAQsB,OAAOtB,EAAQuB,QAAQvC,GAAM,MAEtC,IAQI,CAACU,WANKT,UACJ,SAACC,UACC8B,EAAS3B,SAASJ,EAAKS,EAAOR,IAI1BsC,CAAIvC"}
{"version":3,"file":"stook.cjs.production.min.js","sources":["../src/emitter.ts","../src/Storage.ts","../src/Store.ts","../src/useStore.ts","../src/getState.ts","../src/mutate.ts"],"sourcesContent":["import mitt from 'mitt'\n\ninterface Data {\n key: any\n nextState: any\n}\n\ntype Events = {\n STORE_INITED: string\n STORE_UPDATED: Data\n}\n\nenum EventKey {\n STORE_INITED = 'STORE_INITED',\n STORE_UPDATED = 'STORE_UPDATED',\n}\n\nexport const emitter = mitt<Events>()\n\nexport function emitStoreInit(key: any) {\n emitter.emit(EventKey.STORE_INITED, key)\n}\n\nexport function emitStoreUpdate(data: Data) {\n emitter.emit(EventKey.STORE_UPDATED, data)\n}\n\nexport function onStoreInit(cb: (data: string) => void) {\n emitter.on(EventKey.STORE_INITED, key => {\n cb(key)\n })\n}\n\nexport function onStoreUpdate(cb: (data: Data) => void) {\n emitter.on(EventKey.STORE_UPDATED, data => {\n cb(data)\n })\n}\n","import { Store } from './Store'\n\ninterface Stores {\n [key: string]: Store\n}\n\n/**\n * Storage for anything\n */\nexport class Storage {\n static stores: Stores = {}\n static set(key: any, value: Store) {\n const store = Storage.stores[key]\n if (!store || !store.setState) {\n Storage.stores[key] = value\n }\n }\n\n static get<S = any>(key: any): Store<S> {\n return Storage.stores[key]\n }\n}\n","import { produce } from 'immer'\nimport { Dispatch, SetStateAction } from './types'\nimport { emitStoreUpdate } from './emitter'\n\n/**\n * store for one key\n */\nexport class Store<S = any> {\n state: S\n setters: Dispatch<SetStateAction<S>>[] = []\n constructor(value: any) {\n this.state = value\n }\n\n private getNextState(state: S, value: any): any {\n let nextState: any\n\n // not function\n if (typeof value !== 'function') return value\n\n // can not use immer\n if (typeof state !== 'object') return value(state)\n\n let useImmer = true\n\n const immerState = produce(state, draft => {\n const fnValue = value(draft)\n if (fnValue === draft) return // do nothing\n\n // use function return value\n if (fnValue && typeof fnValue === 'object') {\n nextState = fnValue\n useImmer = false\n }\n })\n\n if (useImmer) {\n nextState = immerState\n }\n\n return nextState\n }\n\n setState = (key: any, state: any, value: any): any => {\n const nextState = this.getNextState(state, value)\n\n this.state = nextState\n\n emitStoreUpdate({ key, nextState })\n\n this.state = nextState\n this.setters.forEach(set => set(nextState))\n return nextState\n }\n}\n","import { useState, useEffect, useLayoutEffect } from 'react'\nimport { Storage } from './Storage'\nimport { Store } from './Store'\nimport { Dispatch, Action, keyType } from './types'\nimport { emitStoreInit } from './emitter'\n\nconst isBrowser =\n typeof window === 'object' && typeof document === 'object' && document.nodeType === 9\n\nconst useSafeLayoutEffect = isBrowser ? useLayoutEffect : useEffect\n\n/**\n * Returns a stateful value, similar to useState, but need a key;\n *\n * 用法和 useState 几乎一模一样,只是第一个参数是唯一key;\n *\n * @param key unique store key (唯一key)\n * @param initialValue initial value, can not override, use first useStore to init\n * @see https://stook.vercel.app/docs/stook/use-store\n *\n * 需要注意的是,如果调用多个相同key的 useStore, 第一个被调用的 useStore 的 initialValue 才是有效的 initialValue\n */\nexport function useStore<S = any, K = string>(\n key: K | keyType,\n initialValue?: S,\n): [S, Dispatch<Action<S>>] {\n const storageStore = Storage.get(key)\n const initialState = storageStore ? storageStore.state : initialValue\n\n Storage.set(key, new Store<S>(initialState))\n\n const newStore = Storage.get(key)\n const [state, set] = useState(initialState)\n const { setters } = newStore\n\n /**\n * push setState sync\n */\n useSafeLayoutEffect(() => {\n setters.push(set)\n emitStoreInit(key)\n }, [])\n\n useEffect(() => {\n return () => {\n setters.splice(setters.indexOf(set), 1)\n }\n }, [])\n\n function act(key: any): Dispatch<Action<S>> {\n return (value: any) => {\n return newStore.setState(key, state, value)\n }\n }\n\n return [state, act(key)]\n}\n","import { Storage } from './Storage'\nimport { keyType } from './types'\n\nconst undefined_as_any: any = undefined\n\n/**\n * Get store by Key\n * @param key\n */\nexport function getState<S = any, K = string>(key: K | keyType): S {\n const store = Storage.get<S>(key)\n return store ? store.state : undefined_as_any\n}\n","import { Storage } from './Storage'\nimport { keyType } from './types'\n\n/**\n * update store by key\n *\n * @param key unique store key (唯一key)\n * @param nextValue next value\n */\nexport function mutate<S, K = string>(key: K | keyType, nextValue?: S) {\n const store = Storage.get(key)\n\n if (store && store.setState) {\n store.setState(key, store.state, nextValue)\n } else {\n // init state, if no store exist\n Storage.set(key, { state: nextValue } as any)\n }\n}\n"],"names":["EventKey","Storage","set","key","value","store","stores","setState","get","emitter","mitt","Store","state","nextState","_this","getNextState","emit","STORE_UPDATED","setters","forEach","useImmer","immerState","produce","draft","fnValue","useSafeLayoutEffect","window","document","nodeType","useLayoutEffect","useEffect","undefined","nextValue","cb","on","STORE_INITED","data","initialValue","storageStore","initialState","newStore","useState","push","emitStoreInit","splice","indexOf","act"],"mappings":"0EAYKA,6GCHQC,oCAEJC,IAAP,SAAWC,EAAUC,OACbC,EAAQJ,EAAQK,OAAOH,GACxBE,GAAUA,EAAME,WACnBN,EAAQK,OAAOH,GAAOC,MAInBI,IAAP,SAAoBL,UACXF,EAAQK,OAAOH,SATjBF,SAAiB,GDE1B,SAAKD,GACHA,8BACAA,gCAFF,CAAKA,IAAAA,OAKE,IAAMS,EAAUC,IEVVC,wBAGCP,2BAD6B,iBAkC9B,SAACD,EAAUS,EAAYR,OAC1BS,EAAYC,EAAKC,aAAaH,EAAOR,UAE3CU,EAAKF,MAAQC,EFtBfJ,EAAQO,KAAKhB,EAASiB,cEwBJ,CAAEd,IAAAA,EAAKU,UAAAA,IAEvBC,EAAKF,MAAQC,EACbC,EAAKI,QAAQC,SAAQ,SAAAjB,UAAOA,EAAIW,MACzBA,QAzCFD,MAAQR,qBAGPW,aAAA,SAAaH,EAAUR,OACzBS,KAGiB,mBAAVT,EAAsB,OAAOA,KAGnB,iBAAVQ,EAAoB,OAAOR,EAAMQ,OAExCQ,GAAW,EAETC,EAAaC,UAAQV,GAAO,SAAAW,OAC1BC,EAAUpB,EAAMmB,GAClBC,IAAYD,GAGZC,GAA8B,iBAAZA,IACpBX,EAAYW,EACZJ,GAAW,aAIXA,IACFP,EAAYQ,GAGPR,QC/BLY,EAFc,iBAAXC,QAA2C,iBAAbC,UAA+C,IAAtBA,SAASC,SAEjCC,kBAAkBC,wDCAZ3B,OACtCE,EAAQJ,EAAQO,IAAOL,UACtBE,EAAQA,EAAMO,WAROmB,2BCMQ5B,EAAkB6B,OAChD3B,EAAQJ,EAAQO,IAAIL,GAEtBE,GAASA,EAAME,SACjBF,EAAME,SAASJ,EAAKE,EAAMO,MAAOoB,GAGjC/B,EAAQC,IAAIC,EAAK,CAAES,MAAOoB,kCLWFC,GAC1BxB,EAAQyB,GAAGlC,EAASmC,cAAc,SAAAhC,GAChC8B,EAAG9B,sCAIuB8B,GAC5BxB,EAAQyB,GAAGlC,EAASiB,eAAe,SAAAmB,GACjCH,EAAGG,iCGZLjC,EACAkC,OAEMC,EAAerC,EAAQO,IAAIL,GAC3BoC,EAAeD,EAAeA,EAAa1B,MAAQyB,EAEzDpC,EAAQC,IAAIC,EAAK,IAAIQ,EAAS4B,QAExBC,EAAWvC,EAAQO,IAAIL,KACRsC,WAASF,GAAvB3B,OAAOV,OACNgB,EAAYsB,EAAZtB,eAKRO,GAAoB,WAClBP,EAAQwB,KAAKxC,YHpBaC,GAC5BM,EAAQO,KAAKhB,EAASmC,aAAchC,GGoBlCwC,CAAcxC,KACb,IAEH2B,aAAU,kBACD,WACLZ,EAAQ0B,OAAO1B,EAAQ2B,QAAQ3C,GAAM,MAEtC,IAQI,CAACU,WANKT,UACJ,SAACC,UACCoC,EAASjC,SAASJ,EAAKS,EAAOR,IAI1B0C,CAAI3C"}

@@ -1,2 +0,2 @@

import { useState, useLayoutEffect, useEffect } from 'react';
import { useState, useEffect, useLayoutEffect } from 'react';
import { produce } from 'immer';

@@ -112,2 +112,4 @@ import mitt from 'mitt';

var isBrowser = typeof window === 'object' && typeof document === 'object' && document.nodeType === 9;
var useSafeLayoutEffect = isBrowser ? useLayoutEffect : useEffect;
/**

@@ -140,3 +142,3 @@ * Returns a stateful value, similar to useState, but need a key;

useLayoutEffect(function () {
useSafeLayoutEffect(function () {
setters.push(set);

@@ -143,0 +145,0 @@ emitStoreInit(key);

@@ -1,1 +0,1 @@

{"version":3,"file":"stook.esm.js","sources":["../src/Storage.ts","../src/emitter.ts","../src/Store.ts","../src/useStore.ts","../src/getState.ts","../src/mutate.ts"],"sourcesContent":["import { Store } from './Store'\n\ninterface Stores {\n [key: string]: Store\n}\n\n/**\n * Storage for anything\n */\nexport class Storage {\n static stores: Stores = {}\n static set(key: any, value: Store) {\n const store = Storage.stores[key]\n if (!store || !store.setState) {\n Storage.stores[key] = value\n }\n }\n\n static get<S = any>(key: any): Store<S> {\n return Storage.stores[key]\n }\n}\n","import mitt from 'mitt'\n\ninterface Data {\n key: any\n nextState: any\n}\n\ntype Events = {\n STORE_INITED: string\n STORE_UPDATED: Data\n}\n\nenum EventKey {\n STORE_INITED = 'STORE_INITED',\n STORE_UPDATED = 'STORE_UPDATED',\n}\n\nexport const emitter = mitt<Events>()\n\nexport function emitStoreInit(key: any) {\n emitter.emit(EventKey.STORE_INITED, key)\n}\n\nexport function emitStoreUpdate(data: Data) {\n emitter.emit(EventKey.STORE_UPDATED, data)\n}\n\nexport function onStoreInit(cb: (data: string) => void) {\n emitter.on(EventKey.STORE_INITED, key => {\n cb(key)\n })\n}\n\nexport function onStoreUpdate(cb: (data: Data) => void) {\n emitter.on(EventKey.STORE_UPDATED, data => {\n cb(data)\n })\n}\n","import { produce } from 'immer'\nimport { Dispatch, SetStateAction } from './types'\nimport { emitStoreUpdate } from './emitter'\n\n/**\n * store for one key\n */\nexport class Store<S = any> {\n state: S\n setters: Dispatch<SetStateAction<S>>[] = []\n constructor(value: any) {\n this.state = value\n }\n\n private getNextState(state: S, value: any): any {\n let nextState: any\n\n // not function\n if (typeof value !== 'function') return value\n\n // can not use immer\n if (typeof state !== 'object') return value(state)\n\n let useImmer = true\n\n const immerState = produce(state, draft => {\n const fnValue = value(draft)\n if (fnValue === draft) return // do nothing\n\n // use function return value\n if (fnValue && typeof fnValue === 'object') {\n nextState = fnValue\n useImmer = false\n }\n })\n\n if (useImmer) {\n nextState = immerState\n }\n\n return nextState\n }\n\n setState = (key: any, state: any, value: any): any => {\n const nextState = this.getNextState(state, value)\n\n this.state = nextState\n\n emitStoreUpdate({ key, nextState })\n\n this.state = nextState\n this.setters.forEach(set => set(nextState))\n return nextState\n }\n}\n","import { useState, useEffect, useLayoutEffect } from 'react'\nimport { Storage } from './Storage'\nimport { Store } from './Store'\nimport { Dispatch, Action, keyType } from './types'\nimport { emitStoreInit } from './emitter'\n\n/**\n * Returns a stateful value, similar to useState, but need a key;\n *\n * 用法和 useState 几乎一模一样,只是第一个参数是唯一key;\n *\n * @param key unique store key (唯一key)\n * @param initialValue initial value, can not override, use first useStore to init\n * @see https://stook.vercel.app/docs/stook/use-store\n *\n * 需要注意的是,如果调用多个相同key的 useStore, 第一个被调用的 useStore 的 initialValue 才是有效的 initialValue\n */\nexport function useStore<S = any, K = string>(\n key: K | keyType,\n initialValue?: S,\n): [S, Dispatch<Action<S>>] {\n const storageStore = Storage.get(key)\n const initialState = storageStore ? storageStore.state : initialValue\n\n Storage.set(key, new Store<S>(initialState))\n\n const newStore = Storage.get(key)\n const [state, set] = useState(initialState)\n const { setters } = newStore\n\n /**\n * push setState sync\n */\n useLayoutEffect(() => {\n setters.push(set)\n emitStoreInit(key)\n }, [])\n\n useEffect(() => {\n return () => {\n setters.splice(setters.indexOf(set), 1)\n }\n }, [])\n\n function act(key: any): Dispatch<Action<S>> {\n return (value: any) => {\n return newStore.setState(key, state, value)\n }\n }\n\n return [state, act(key)]\n}\n","import { Storage } from './Storage'\nimport { keyType } from './types'\n\nconst undefined_as_any: any = undefined\n\n/**\n * Get store by Key\n * @param key\n */\nexport function getState<S = any, K = string>(key: K | keyType): S {\n const store = Storage.get<S>(key)\n return store ? store.state : undefined_as_any\n}\n","import { Storage } from './Storage'\nimport { keyType } from './types'\n\n/**\n * update store by key\n *\n * @param key unique store key (唯一key)\n * @param nextValue next value\n */\nexport function mutate<S, K = string>(key: K | keyType, nextValue?: S) {\n const store = Storage.get(key)\n\n if (store && store.setState) {\n store.setState(key, store.state, nextValue)\n } else {\n // init state, if no store exist\n Storage.set(key, { state: nextValue } as any)\n }\n}\n"],"names":["Storage","set","key","value","store","stores","setState","get","EventKey","emitter","mitt","emitStoreInit","emit","STORE_INITED","emitStoreUpdate","data","STORE_UPDATED","onStoreInit","cb","on","onStoreUpdate","Store","state","nextState","getNextState","setters","forEach","useImmer","immerState","produce","draft","fnValue","useStore","initialValue","storageStore","initialState","newStore","useState","useLayoutEffect","push","useEffect","splice","indexOf","act","undefined_as_any","undefined","getState","mutate","nextValue"],"mappings":";;;;AAMA;;;IAGaA,OAAb;AAAA;;AAAA,UAESC,GAFT,GAEE,aAAWC,GAAX,EAAqBC,KAArB;AACE,QAAMC,KAAK,GAAGJ,OAAO,CAACK,MAAR,CAAeH,GAAf,CAAd;;AACA,QAAI,CAACE,KAAD,IAAU,CAACA,KAAK,CAACE,QAArB,EAA+B;AAC7BN,MAAAA,OAAO,CAACK,MAAR,CAAeH,GAAf,IAAsBC,KAAtB;AACD;AACF,GAPH;;AAAA,UASSI,GATT,GASE,aAAoBL,GAApB;AACE,WAAOF,OAAO,CAACK,MAAR,CAAeH,GAAf,CAAP;AACD,GAXH;;AAAA;AAAA;AACSF,cAAA,GAAiB,EAAjB;;ACET,IAAKQ,QAAL;;AAAA,WAAKA;AACHA,EAAAA,wBAAA,iBAAA;AACAA,EAAAA,yBAAA,kBAAA;AACD,CAHD,EAAKA,QAAQ,KAARA,QAAQ,KAAA,CAAb;;AAKA,AAAO,IAAMC,OAAO,gBAAGC,IAAI,EAApB;AAEP,SAAgBC,cAAcT;AAC5BO,EAAAA,OAAO,CAACG,IAAR,CAAaJ,QAAQ,CAACK,YAAtB,EAAoCX,GAApC;AACD;AAED,SAAgBY,gBAAgBC;AAC9BN,EAAAA,OAAO,CAACG,IAAR,CAAaJ,QAAQ,CAACQ,aAAtB,EAAqCD,IAArC;AACD;AAED,SAAgBE,YAAYC;AAC1BT,EAAAA,OAAO,CAACU,EAAR,CAAWX,QAAQ,CAACK,YAApB,EAAkC,UAAAX,GAAG;AACnCgB,IAAAA,EAAE,CAAChB,GAAD,CAAF;AACD,GAFD;AAGD;AAED,SAAgBkB,cAAcF;AAC5BT,EAAAA,OAAO,CAACU,EAAR,CAAWX,QAAQ,CAACQ,aAApB,EAAmC,UAAAD,IAAI;AACrCG,IAAAA,EAAE,CAACH,IAAD,CAAF;AACD,GAFD;AAGD;;ACjCD;;;;AAGA,IAAaM,KAAb;AAGE,iBAAYlB,KAAZ;;;AADA,gBAAA,GAAyC,EAAzC;;AAkCA,iBAAA,GAAW,UAACD,GAAD,EAAWoB,KAAX,EAAuBnB,KAAvB;AACT,UAAMoB,SAAS,GAAG,KAAI,CAACC,YAAL,CAAkBF,KAAlB,EAAyBnB,KAAzB,CAAlB;;AAEA,MAAA,KAAI,CAACmB,KAAL,GAAaC,SAAb;AAEAT,MAAAA,eAAe,CAAC;AAAEZ,QAAAA,GAAG,EAAHA,GAAF;AAAOqB,QAAAA,SAAS,EAATA;AAAP,OAAD,CAAf;AAEA,MAAA,KAAI,CAACD,KAAL,GAAaC,SAAb;;AACA,MAAA,KAAI,CAACE,OAAL,CAAaC,OAAb,CAAqB,UAAAzB,GAAG;AAAA,eAAIA,GAAG,CAACsB,SAAD,CAAP;AAAA,OAAxB;;AACA,aAAOA,SAAP;AACD,KAVD;;AAhCE,SAAKD,KAAL,GAAanB,KAAb;AACD;;AALH;;AAAA,SAOUqB,YAPV,GAOU,sBAAaF,KAAb,EAAuBnB,KAAvB;AACN,QAAIoB,SAAJ;;AAGA,QAAI,OAAOpB,KAAP,KAAiB,UAArB,EAAiC,OAAOA,KAAP;;AAGjC,QAAI,OAAOmB,KAAP,KAAiB,QAArB,EAA+B,OAAOnB,KAAK,CAACmB,KAAD,CAAZ;AAE/B,QAAIK,QAAQ,GAAG,IAAf;AAEA,QAAMC,UAAU,GAAGC,OAAO,CAACP,KAAD,EAAQ,UAAAQ,KAAK;AACrC,UAAMC,OAAO,GAAG5B,KAAK,CAAC2B,KAAD,CAArB;AACA,UAAIC,OAAO,KAAKD,KAAhB,EAAuB;AAEvB;;AACA,UAAIC,OAAO,IAAI,OAAOA,OAAP,KAAmB,QAAlC,EAA4C;AAC1CR,QAAAA,SAAS,GAAGQ,OAAZ;AACAJ,QAAAA,QAAQ,GAAG,KAAX;AACD;AACF,KATyB,CAA1B;;AAWA,QAAIA,QAAJ,EAAc;AACZJ,MAAAA,SAAS,GAAGK,UAAZ;AACD;;AAED,WAAOL,SAAP;AACD,GAlCH;;AAAA;AAAA;;ACDA;;;;;;;;;;;;AAWA,SAAgBS,SACd9B,KACA+B;AAEA,MAAMC,YAAY,GAAGlC,OAAO,CAACO,GAAR,CAAYL,GAAZ,CAArB;AACA,MAAMiC,YAAY,GAAGD,YAAY,GAAGA,YAAY,CAACZ,KAAhB,GAAwBW,YAAzD;AAEAjC,EAAAA,OAAO,CAACC,GAAR,CAAYC,GAAZ,EAAiB,IAAImB,KAAJ,CAAac,YAAb,CAAjB;AAEA,MAAMC,QAAQ,GAAGpC,OAAO,CAACO,GAAR,CAAYL,GAAZ,CAAjB;;AACA,kBAAqBmC,QAAQ,CAACF,YAAD,CAA7B;AAAA,MAAOb,KAAP;AAAA,MAAcrB,GAAd;;AACA,MAAQwB,OAAR,GAAoBW,QAApB,CAAQX,OAAR;AAEA;;;;AAGAa,EAAAA,eAAe,CAAC;AACdb,IAAAA,OAAO,CAACc,IAAR,CAAatC,GAAb;AACAU,IAAAA,aAAa,CAACT,GAAD,CAAb;AACD,GAHc,EAGZ,EAHY,CAAf;AAKAsC,EAAAA,SAAS,CAAC;AACR,WAAO;AACLf,MAAAA,OAAO,CAACgB,MAAR,CAAehB,OAAO,CAACiB,OAAR,CAAgBzC,GAAhB,CAAf,EAAqC,CAArC;AACD,KAFD;AAGD,GAJQ,EAIN,EAJM,CAAT;;AAMA,WAAS0C,GAAT,CAAazC,GAAb;AACE,WAAO,UAACC,KAAD;AACL,aAAOiC,QAAQ,CAAC9B,QAAT,CAAkBJ,GAAlB,EAAuBoB,KAAvB,EAA8BnB,KAA9B,CAAP;AACD,KAFD;AAGD;;AAED,SAAO,CAACmB,KAAD,EAAQqB,GAAG,CAACzC,GAAD,CAAX,CAAP;AACD;;AChDD,IAAM0C,gBAAgB,GAAQC,SAA9B;AAEA;;;;;AAIA,SAAgBC,SAA8B5C;AAC5C,MAAME,KAAK,GAAGJ,OAAO,CAACO,GAAR,CAAeL,GAAf,CAAd;AACA,SAAOE,KAAK,GAAGA,KAAK,CAACkB,KAAT,GAAiBsB,gBAA7B;AACD;;ACTD;;;;;;;AAMA,SAAgBG,OAAsB7C,KAAkB8C;AACtD,MAAM5C,KAAK,GAAGJ,OAAO,CAACO,GAAR,CAAYL,GAAZ,CAAd;;AAEA,MAAIE,KAAK,IAAIA,KAAK,CAACE,QAAnB,EAA6B;AAC3BF,IAAAA,KAAK,CAACE,QAAN,CAAeJ,GAAf,EAAoBE,KAAK,CAACkB,KAA1B,EAAiC0B,SAAjC;AACD,GAFD,MAEO;AACL;AACAhD,IAAAA,OAAO,CAACC,GAAR,CAAYC,GAAZ,EAAiB;AAAEoB,MAAAA,KAAK,EAAE0B;AAAT,KAAjB;AACD;AACF;;;;"}
{"version":3,"file":"stook.esm.js","sources":["../src/Storage.ts","../src/emitter.ts","../src/Store.ts","../src/useStore.ts","../src/getState.ts","../src/mutate.ts"],"sourcesContent":["import { Store } from './Store'\n\ninterface Stores {\n [key: string]: Store\n}\n\n/**\n * Storage for anything\n */\nexport class Storage {\n static stores: Stores = {}\n static set(key: any, value: Store) {\n const store = Storage.stores[key]\n if (!store || !store.setState) {\n Storage.stores[key] = value\n }\n }\n\n static get<S = any>(key: any): Store<S> {\n return Storage.stores[key]\n }\n}\n","import mitt from 'mitt'\n\ninterface Data {\n key: any\n nextState: any\n}\n\ntype Events = {\n STORE_INITED: string\n STORE_UPDATED: Data\n}\n\nenum EventKey {\n STORE_INITED = 'STORE_INITED',\n STORE_UPDATED = 'STORE_UPDATED',\n}\n\nexport const emitter = mitt<Events>()\n\nexport function emitStoreInit(key: any) {\n emitter.emit(EventKey.STORE_INITED, key)\n}\n\nexport function emitStoreUpdate(data: Data) {\n emitter.emit(EventKey.STORE_UPDATED, data)\n}\n\nexport function onStoreInit(cb: (data: string) => void) {\n emitter.on(EventKey.STORE_INITED, key => {\n cb(key)\n })\n}\n\nexport function onStoreUpdate(cb: (data: Data) => void) {\n emitter.on(EventKey.STORE_UPDATED, data => {\n cb(data)\n })\n}\n","import { produce } from 'immer'\nimport { Dispatch, SetStateAction } from './types'\nimport { emitStoreUpdate } from './emitter'\n\n/**\n * store for one key\n */\nexport class Store<S = any> {\n state: S\n setters: Dispatch<SetStateAction<S>>[] = []\n constructor(value: any) {\n this.state = value\n }\n\n private getNextState(state: S, value: any): any {\n let nextState: any\n\n // not function\n if (typeof value !== 'function') return value\n\n // can not use immer\n if (typeof state !== 'object') return value(state)\n\n let useImmer = true\n\n const immerState = produce(state, draft => {\n const fnValue = value(draft)\n if (fnValue === draft) return // do nothing\n\n // use function return value\n if (fnValue && typeof fnValue === 'object') {\n nextState = fnValue\n useImmer = false\n }\n })\n\n if (useImmer) {\n nextState = immerState\n }\n\n return nextState\n }\n\n setState = (key: any, state: any, value: any): any => {\n const nextState = this.getNextState(state, value)\n\n this.state = nextState\n\n emitStoreUpdate({ key, nextState })\n\n this.state = nextState\n this.setters.forEach(set => set(nextState))\n return nextState\n }\n}\n","import { useState, useEffect, useLayoutEffect } from 'react'\nimport { Storage } from './Storage'\nimport { Store } from './Store'\nimport { Dispatch, Action, keyType } from './types'\nimport { emitStoreInit } from './emitter'\n\nconst isBrowser =\n typeof window === 'object' && typeof document === 'object' && document.nodeType === 9\n\nconst useSafeLayoutEffect = isBrowser ? useLayoutEffect : useEffect\n\n/**\n * Returns a stateful value, similar to useState, but need a key;\n *\n * 用法和 useState 几乎一模一样,只是第一个参数是唯一key;\n *\n * @param key unique store key (唯一key)\n * @param initialValue initial value, can not override, use first useStore to init\n * @see https://stook.vercel.app/docs/stook/use-store\n *\n * 需要注意的是,如果调用多个相同key的 useStore, 第一个被调用的 useStore 的 initialValue 才是有效的 initialValue\n */\nexport function useStore<S = any, K = string>(\n key: K | keyType,\n initialValue?: S,\n): [S, Dispatch<Action<S>>] {\n const storageStore = Storage.get(key)\n const initialState = storageStore ? storageStore.state : initialValue\n\n Storage.set(key, new Store<S>(initialState))\n\n const newStore = Storage.get(key)\n const [state, set] = useState(initialState)\n const { setters } = newStore\n\n /**\n * push setState sync\n */\n useSafeLayoutEffect(() => {\n setters.push(set)\n emitStoreInit(key)\n }, [])\n\n useEffect(() => {\n return () => {\n setters.splice(setters.indexOf(set), 1)\n }\n }, [])\n\n function act(key: any): Dispatch<Action<S>> {\n return (value: any) => {\n return newStore.setState(key, state, value)\n }\n }\n\n return [state, act(key)]\n}\n","import { Storage } from './Storage'\nimport { keyType } from './types'\n\nconst undefined_as_any: any = undefined\n\n/**\n * Get store by Key\n * @param key\n */\nexport function getState<S = any, K = string>(key: K | keyType): S {\n const store = Storage.get<S>(key)\n return store ? store.state : undefined_as_any\n}\n","import { Storage } from './Storage'\nimport { keyType } from './types'\n\n/**\n * update store by key\n *\n * @param key unique store key (唯一key)\n * @param nextValue next value\n */\nexport function mutate<S, K = string>(key: K | keyType, nextValue?: S) {\n const store = Storage.get(key)\n\n if (store && store.setState) {\n store.setState(key, store.state, nextValue)\n } else {\n // init state, if no store exist\n Storage.set(key, { state: nextValue } as any)\n }\n}\n"],"names":["Storage","set","key","value","store","stores","setState","get","EventKey","emitter","mitt","emitStoreInit","emit","STORE_INITED","emitStoreUpdate","data","STORE_UPDATED","onStoreInit","cb","on","onStoreUpdate","Store","state","nextState","getNextState","setters","forEach","useImmer","immerState","produce","draft","fnValue","isBrowser","window","document","nodeType","useSafeLayoutEffect","useLayoutEffect","useEffect","useStore","initialValue","storageStore","initialState","newStore","useState","push","splice","indexOf","act","undefined_as_any","undefined","getState","mutate","nextValue"],"mappings":"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"}
{
"name": "stook",
"version": "1.5.0",
"version": "1.5.1",
"description": "A minimalist design state management library for React",

@@ -29,3 +29,3 @@ "license": "MIT",

},
"gitHead": "9d16041aaab2c22dd68f955595353d49360fee2b"
"gitHead": "889786c6b2ec6de9c041495e70b770aab50c577d"
}