UNPKG

@7pound/westore

Version:
46 lines (39 loc) 1.01 kB
type IInstance = { data: AnyObject setData: (data) => void } const parseData = (store: WeStore) => { const data: AnyObject = {} if (Array.isArray(store.data)) return store.data if (typeof store.data !== 'object') return store.data Object.keys(store.data).forEach(key => { const v = store.data[key] data[key] = typeof v === 'function' ? v.apply(store) : v }) return data } class WeStore { data: AnyObject pages: Map<IInstance, string> constructor() { this.data = {} this.pages = new Map() } bind(instance: IInstance, name: string) { if (!name) throw new Error('name is undefined') if (this.pages.has(instance) === false) { this.pages.set(instance, name) instance.setData({[name]: parseData(this)}) } } unBind(instance: IInstance) { this.pages.delete(instance) } update() { const data = parseData(this) this.pages.forEach((value, instance) => { instance.setData({[value]: data}) }) } } export default WeStore