UNPKG

@uni-store/core

Version:
108 lines (102 loc) 3.5 kB
/*! * @uni-store/core v0.3.5 * (c) 2022 dolymood (dolymood@gmail.com) * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var reactivity = require('@vue/reactivity'); var runtimeCore = require('@vue/runtime-core'); function addSubscription(subscriptions, callback) { subscriptions.push(callback); const removeSubscription = () => { const idx = subscriptions.indexOf(callback); if (idx > -1) { subscriptions.splice(idx, 1); } }; return removeSubscription; } function createStore(setup) { const scope = reactivity.effectScope(true); const store = reactivity.reactive({ $dispose, $subscribe }); // watcher options for $subscribe const subscribeOptions = { deep: true, flush: 'post' }; let subscriptions = reactivity.markRaw([]); function $subscribe(callback, options = {}) { const _removeSubscription = addSubscription(subscriptions, callback); const stopWatcher = scope.run(() => runtimeCore.watch(() => store, (newStore) => { callback(newStore.$state); }, Object.assign({}, subscribeOptions, options))); const removeSubscription = () => { stopWatcher(); _removeSubscription(); }; return removeSubscription; } function $dispose() { scope.stop(); subscriptions = []; } const setupState = scope.run(() => setup()); Object.defineProperty(store, '$state', { get() { return setupState; } }); Object.assign(store, setupState); return store; } /** * Create a `useStore` function that retrieves the store instance * * @param setup - function that creates the store * @returns `useStore` function with `reset` param that determines whether create a new store instance */ function defineStore(setup) { let store; return function useStore(reset = false) { if (!store || reset) { store && store.$dispose(); store = createStore(setup); } return store; }; } exports.computed = reactivity.computed; exports.customRef = reactivity.customRef; exports.effect = reactivity.effect; exports.effectScope = reactivity.effectScope; exports.getCurrentScope = reactivity.getCurrentScope; exports.isProxy = reactivity.isProxy; exports.isReactive = reactivity.isReactive; exports.isReadonly = reactivity.isReadonly; exports.isRef = reactivity.isRef; exports.isShallow = reactivity.isShallow; exports.markRaw = reactivity.markRaw; exports.onScopeDispose = reactivity.onScopeDispose; exports.proxyRefs = reactivity.proxyRefs; exports.reactive = reactivity.reactive; exports.readonly = reactivity.readonly; exports.ref = reactivity.ref; exports.shallowReactive = reactivity.shallowReactive; exports.shallowReadonly = reactivity.shallowReadonly; exports.shallowRef = reactivity.shallowRef; exports.stop = reactivity.stop; exports.toRaw = reactivity.toRaw; exports.toRef = reactivity.toRef; exports.toRefs = reactivity.toRefs; exports.triggerRef = reactivity.triggerRef; exports.unref = reactivity.unref; exports.nextTick = runtimeCore.nextTick; exports.watch = runtimeCore.watch; exports.watchEffect = runtimeCore.watchEffect; exports.watchPostEffect = runtimeCore.watchPostEffect; exports.watchSyncEffect = runtimeCore.watchSyncEffect; exports.defineStore = defineStore;