UNPKG

@hf-chimera/store

Version:

Cross-end reactivity API

92 lines (90 loc) 2.74 kB
const require_params = require('../params-C5dnCvJr.cjs'); require('../defaults-C48gY1ow.cjs'); require('../src-YxpDmKvq.cjs'); require('../qb-D6vPK6P0.cjs'); let vue = require("vue"); vue = require_params.__toESM(vue); //#region packages/adapters/vue/composables.ts const isFunction = (value) => typeof value === "function"; const toValue = (value) => isFunction(value) ? value() : (0, vue.isRef)(value) ? value.value : value; const CHIMERA_COLLECTION_UPDATE_EVENTS = [ "ready", "updated", "selfUpdated", "selfItemCreated", "itemAdded", "itemUpdated", "selfItemUpdated", "itemDeleted", "selfItemDeleted", "error" ]; const CHIMERA_ITEM_UPDATE_EVENTS = [ "initialized", "selfCreated", "ready", "updated", "selfUpdated", "deleted", "selfDeleted", "error" ]; const createChimeraComposables = (store) => { const useChimeraRepository = (entityName) => (0, vue.computed)(() => store.from(toValue(entityName))); return { useChimeraStore: () => store, useChimeraRepository, useChimeraCollection: (entityName, params) => { const repository = useChimeraRepository(entityName); const normalizedParams = (0, vue.computed)(() => require_params.normalizeParams(toValue(params))); const collection = (0, vue.computed)(() => repository.value.getCollection(normalizedParams.value)); return (0, vue.customRef)((track, trigger) => { (0, vue.watch)(collection, (collection$1, _, onCleanup) => { const handler = () => trigger(); CHIMERA_COLLECTION_UPDATE_EVENTS.forEach((event) => { collection$1.on(event, handler); }); onCleanup(() => CHIMERA_COLLECTION_UPDATE_EVENTS.forEach((event) => { collection$1.off(event, handler); })); }, { immediate: true }); return { get() { track(); return collection.value; }, set() { console.warn("ChimeraCollectionRef is readonly"); } }; }); }, useChimeraItem: (entityName, id, meta) => { const repository = useChimeraRepository(entityName); const item = (0, vue.computed)(() => repository.value.getItem(toValue(id), toValue(meta))); return (0, vue.customRef)((track, trigger) => { (0, vue.watch)(item, (item$1, _, onCleanup) => { const handler = () => trigger(); CHIMERA_ITEM_UPDATE_EVENTS.forEach((event) => { item$1.on(event, handler); }); onCleanup(() => CHIMERA_ITEM_UPDATE_EVENTS.forEach((event) => { item$1.off(event, handler); })); }, { immediate: true }); return { get() { track(); return item.value; }, set() { console.warn("ChimeraItemRef is readonly"); } }; }); } }; }; //#endregion exports.createChimeraComposables = createChimeraComposables; //# sourceMappingURL=vue.cjs.map