UNPKG

@hf-chimera/store

Version:

Cross-end reactivity API

1 lines 6.11 kB
{"version":3,"file":"vue.cjs","names":["normalizeParams"],"sources":["../../packages/adapters/vue/composables.ts"],"sourcesContent":["import { computed, customRef, isRef, type Ref, watch } from \"vue\";\nimport type {\n\tAnyChimeraStore,\n\tChimeraCollectionQuery,\n\tChimeraEntityId,\n\tChimeraItemQuery,\n\tChimeraStoreEntities,\n\tChimeraStoreEntityType,\n\tChimeraStoreOperatorMap,\n} from \"../../../src\";\nimport type { ChimeraEntityRepository } from \"../../../src/store/ChimeraEntityRepository\";\nimport { type AnyChimeraParams, normalizeParams } from \"../shared/params\";\n\ntype MaybeRef<T> = T | Ref<T>;\ntype MaybeRefOrGetter<T> = MaybeRef<T> | (() => T);\n\nconst isFunction = (value: any): value is () => any => typeof value === \"function\";\nconst toValue = <T>(value: MaybeRefOrGetter<T>): T =>\n\tisFunction(value) ? value() : isRef(value) ? value.value : value;\n\nconst CHIMERA_COLLECTION_UPDATE_EVENTS = [\n\t\"ready\",\n\t\"updated\",\n\t\"selfUpdated\",\n\t\"selfItemCreated\",\n\t\"itemAdded\",\n\t\"itemUpdated\",\n\t\"selfItemUpdated\",\n\t\"itemDeleted\",\n\t\"selfItemDeleted\",\n\t\"error\",\n] as const;\n\nconst CHIMERA_ITEM_UPDATE_EVENTS = [\n\t\"initialized\",\n\t\"selfCreated\",\n\t\"ready\",\n\t\"updated\",\n\t\"selfUpdated\",\n\t\"deleted\",\n\t\"selfDeleted\",\n\t\"error\",\n] as const;\n\nexport type ChimeraCollectionRef<T extends AnyChimeraStore, EntityName extends ChimeraStoreEntities<T>> = Ref<\n\tChimeraCollectionQuery<ChimeraStoreEntityType<T, EntityName>, ChimeraStoreOperatorMap<T>>\n>;\n\nexport type ChimeraItemRef<T extends AnyChimeraStore, EntityName extends ChimeraStoreEntities<T>> = Ref<\n\tChimeraItemQuery<ChimeraStoreEntityType<T, EntityName>>\n>;\n\nexport const createChimeraComposables = <T extends AnyChimeraStore>(\n\tstore: T,\n): {\n\tuseChimeraStore: () => T;\n\tuseChimeraRepository: <EntityName extends ChimeraStoreEntities<T>>(\n\t\tentityName: MaybeRefOrGetter<EntityName>,\n\t) => Ref<ChimeraEntityRepository<ChimeraStoreEntityType<T, EntityName>, ChimeraStoreOperatorMap<T>>>;\n\tuseChimeraCollection: <EntityName extends ChimeraStoreEntities<T>, Meta = any>(\n\t\tentityName: MaybeRefOrGetter<EntityName>,\n\t\tparams: MaybeRefOrGetter<AnyChimeraParams<T, EntityName, Meta>>,\n\t) => ChimeraCollectionRef<T, EntityName>;\n\tuseChimeraItem: <EntityName extends ChimeraStoreEntities<T>, Meta = any>(\n\t\tentityName: MaybeRefOrGetter<EntityName>,\n\t\tid: MaybeRefOrGetter<ChimeraEntityId>,\n\t\tmeta?: MaybeRefOrGetter<Meta>,\n\t) => ChimeraItemRef<T, EntityName>;\n} => {\n\tconst useChimeraRepository = <EntityName extends ChimeraStoreEntities<T>>(entityName: MaybeRefOrGetter<EntityName>) =>\n\t\tcomputed(() => store.from(toValue(entityName)));\n\n\treturn {\n\t\tuseChimeraStore: () => store,\n\t\tuseChimeraRepository,\n\t\tuseChimeraCollection: (entityName, params) => {\n\t\t\tconst repository = useChimeraRepository(entityName);\n\t\t\tconst normalizedParams = computed(() => normalizeParams(toValue(params)));\n\t\t\tconst collection = computed(() => repository.value.getCollection(normalizedParams.value));\n\n\t\t\treturn customRef((track, trigger) => {\n\t\t\t\twatch(\n\t\t\t\t\tcollection,\n\t\t\t\t\t(collection, _, onCleanup) => {\n\t\t\t\t\t\tconst handler = () => trigger();\n\t\t\t\t\t\tCHIMERA_COLLECTION_UPDATE_EVENTS.forEach((event) => {\n\t\t\t\t\t\t\tcollection.on(event, handler);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tonCleanup(() =>\n\t\t\t\t\t\t\tCHIMERA_COLLECTION_UPDATE_EVENTS.forEach((event) => {\n\t\t\t\t\t\t\t\tcollection.off(event, handler);\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t\t{ immediate: true },\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\tget() {\n\t\t\t\t\t\ttrack();\n\t\t\t\t\t\treturn collection.value;\n\t\t\t\t\t},\n\t\t\t\t\tset() {\n\t\t\t\t\t\tconsole.warn(\"ChimeraCollectionRef is readonly\");\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tuseChimeraItem: (entityName, id, meta) => {\n\t\t\tconst repository = useChimeraRepository(entityName);\n\t\t\tconst item = computed(() => repository.value.getItem(toValue(id), toValue(meta)));\n\n\t\t\treturn customRef((track, trigger) => {\n\t\t\t\twatch(\n\t\t\t\t\titem,\n\t\t\t\t\t(item, _, onCleanup) => {\n\t\t\t\t\t\tconst handler = () => trigger();\n\t\t\t\t\t\tCHIMERA_ITEM_UPDATE_EVENTS.forEach((event) => {\n\t\t\t\t\t\t\titem.on(event, handler);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tonCleanup(() =>\n\t\t\t\t\t\t\tCHIMERA_ITEM_UPDATE_EVENTS.forEach((event) => {\n\t\t\t\t\t\t\t\titem.off(event, handler);\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t\t{ immediate: true },\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\tget() {\n\t\t\t\t\t\ttrack();\n\t\t\t\t\t\treturn item.value;\n\t\t\t\t\t},\n\t\t\t\t\tset() {\n\t\t\t\t\t\tconsole.warn(\"ChimeraItemRef is readonly\");\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t};\n};\n"],"mappings":";;;;;;;;AAgBA,MAAM,cAAc,UAAmC,OAAO,UAAU;AACxE,MAAM,WAAc,UACnB,WAAW,MAAM,GAAG,OAAO,kBAAS,MAAM,GAAG,MAAM,QAAQ;AAE5D,MAAM,mCAAmC;CACxC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAED,MAAM,6BAA6B;CAClC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAUD,MAAa,4BACZ,UAeI;CACJ,MAAM,wBAAoE,uCAC1D,MAAM,KAAK,QAAQ,WAAW,CAAC,CAAC;AAEhD,QAAO;EACN,uBAAuB;EACvB;EACA,uBAAuB,YAAY,WAAW;GAC7C,MAAM,aAAa,qBAAqB,WAAW;GACnD,MAAM,2CAAkCA,+BAAgB,QAAQ,OAAO,CAAC,CAAC;GACzE,MAAM,qCAA4B,WAAW,MAAM,cAAc,iBAAiB,MAAM,CAAC;AAEzF,8BAAkB,OAAO,YAAY;AACpC,mBACC,aACC,cAAY,GAAG,cAAc;KAC7B,MAAM,gBAAgB,SAAS;AAC/B,sCAAiC,SAAS,UAAU;AACnD,mBAAW,GAAG,OAAO,QAAQ;OAC5B;AACF,qBACC,iCAAiC,SAAS,UAAU;AACnD,mBAAW,IAAI,OAAO,QAAQ;OAC7B,CACF;OAEF,EAAE,WAAW,MAAM,CACnB;AAED,WAAO;KACN,MAAM;AACL,aAAO;AACP,aAAO,WAAW;;KAEnB,MAAM;AACL,cAAQ,KAAK,mCAAmC;;KAEjD;KACA;;EAEH,iBAAiB,YAAY,IAAI,SAAS;GACzC,MAAM,aAAa,qBAAqB,WAAW;GACnD,MAAM,+BAAsB,WAAW,MAAM,QAAQ,QAAQ,GAAG,EAAE,QAAQ,KAAK,CAAC,CAAC;AAEjF,8BAAkB,OAAO,YAAY;AACpC,mBACC,OACC,QAAM,GAAG,cAAc;KACvB,MAAM,gBAAgB,SAAS;AAC/B,gCAA2B,SAAS,UAAU;AAC7C,aAAK,GAAG,OAAO,QAAQ;OACtB;AACF,qBACC,2BAA2B,SAAS,UAAU;AAC7C,aAAK,IAAI,OAAO,QAAQ;OACvB,CACF;OAEF,EAAE,WAAW,MAAM,CACnB;AAED,WAAO;KACN,MAAM;AACL,aAAO;AACP,aAAO,KAAK;;KAEb,MAAM;AACL,cAAQ,KAAK,6BAA6B;;KAE3C;KACA;;EAEH"}