@hf-chimera/react 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["CHIMERA_ENTITY_STORE_UPDATE_EVENTS","CHIMERA_COLLECTION_UPDATE_EVENTS","CHIMERA_ITEM_UPDATE_EVENTS"],"sources":["../hooks.ts"],"sourcesContent":["import {\n\ttype AnyChimeraParams,\n\tCHIMERA_COLLECTION_UPDATE_EVENTS,\n\tCHIMERA_ENTITY_STORE_UPDATE_EVENTS,\n\tCHIMERA_ITEM_UPDATE_EVENTS,\n\ttype ChimeraQueryBuilder,\n\tnormalizeParams,\n} from \"@hf-chimera/adapters-shared\";\nimport type {\n\tAnyChimeraEntityStore,\n\tAnyChimeraEventEmitter,\n\tChimeraCollectionQuery,\n\tChimeraEntityId,\n\tChimeraEntityStoreEntity,\n\tChimeraEntityStoreName,\n\tChimeraEntityStoreOperatorsMap,\n\tChimeraEventEmitterEventNames,\n\tChimeraItemQuery,\n} from \"@hf-chimera/store\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\n\ntype ChimeraHooks<\n\tTStore extends AnyChimeraEntityStore,\n\tTQueryBuilder extends ChimeraQueryBuilder<TStore>,\n\tTEntityName extends ChimeraEntityStoreName<TStore> = ChimeraEntityStoreName<TStore>,\n> = {\n\t[K in TEntityName as `useChimera${Capitalize<K>}Store`]: () => TStore;\n} & {\n\t[K in TEntityName as `useChimera${Capitalize<K>}Collection`]: <Meta = any>(\n\t\tparams: AnyChimeraParams<TStore, Meta, Extract<TQueryBuilder, ChimeraQueryBuilder<TStore>>>,\n\t\tdeps?: unknown[],\n\t) => ChimeraCollectionQuery<TEntityName, ChimeraEntityStoreEntity<TStore>, ChimeraEntityStoreOperatorsMap<TStore>>;\n} & {\n\t[K in TEntityName as `useChimera${Capitalize<K>}Item`]: <Meta = any>(\n\t\tid: ChimeraEntityId,\n\t\tmeta?: Meta,\n\t) => ChimeraItemQuery<TEntityName, ChimeraEntityStoreEntity<TStore>>;\n};\n\nconst capitalize = <T extends string>(s: T): Capitalize<T> =>\n\ts !== \"\" ? (((s[0] as string).toUpperCase() + s.slice(1)) as Capitalize<T>) : (\"\" as Capitalize<T>);\n\nconst useSubscribedValue = <TEventEmitter extends AnyChimeraEventEmitter>(\n\tvalue: TEventEmitter,\n\tevents: ChimeraEventEmitterEventNames<TEventEmitter>[],\n): TEventEmitter => {\n\tconst trigger = useState(() => ({}))[1];\n\tuseEffect(() => {\n\t\tconst handler = () => trigger({});\n\t\tevents.forEach((event) => {\n\t\t\tvalue.on(event, handler);\n\t\t});\n\t\treturn () => {\n\t\t\tevents.forEach((event) => {\n\t\t\t\tvalue.off(event, handler);\n\t\t\t});\n\t\t};\n\t}, [value, events, trigger]);\n\treturn value;\n};\n\nexport function createChimeraStoreHooks<TStore extends AnyChimeraEntityStore>(\n\tstore: TStore,\n): ChimeraHooks<TStore, never>;\nexport function createChimeraStoreHooks<\n\tTStore extends AnyChimeraEntityStore,\n\tTQueryBuilder extends ChimeraQueryBuilder<TStore>,\n>(store: TStore, createQueryBuilder: () => TQueryBuilder): ChimeraHooks<TStore, TQueryBuilder>;\nexport function createChimeraStoreHooks<\n\tTStore extends AnyChimeraEntityStore,\n\tTQueryBuilder extends ChimeraQueryBuilder<TStore>,\n>(store: TStore, createQueryBuilder?: () => TQueryBuilder): ChimeraHooks<TStore, TQueryBuilder> {\n\treturn {\n\t\t[`useChimera${capitalize(store.name)}Store`]: () => useSubscribedValue(store, CHIMERA_ENTITY_STORE_UPDATE_EVENTS),\n\t\t[`useChimera${capitalize(store.name)}Collection`]: <TMeta = any>(\n\t\t\tparams: AnyChimeraParams<TStore, TMeta, Extract<TQueryBuilder, ChimeraQueryBuilder<TStore>>>,\n\t\t\tdeps?: unknown[],\n\t\t) => {\n\t\t\tconst oldDeps = useRef(deps);\n\t\t\tif ((oldDeps.current && !deps) || (!oldDeps.current && deps)) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`useChimera${capitalize(store.name)}Collection deps is not a reactive param!\\n` +\n\t\t\t\t\t\t\"Use deps if you want to control dependencies manually.\\n\" +\n\t\t\t\t\t\t\"Omit it if you already have a stable reference to params\",\n\t\t\t\t);\n\t\t\t}\n\t\t\toldDeps.current = deps;\n\n\t\t\tconst stableParams = useMemo(\n\t\t\t\t() => normalizeParams(createQueryBuilder, params),\n\t\t\t\t// biome-ignore lint/correctness/useExhaustiveDependencies: Very unlikely it will be changed over time, anyway warning for this already added.\n\t\t\t\tdeps ? deps : [params],\n\t\t\t);\n\n\t\t\treturn useSubscribedValue(\n\t\t\t\tuseMemo(() => store.getCollection(stableParams), [store, stableParams]),\n\t\t\t\tCHIMERA_COLLECTION_UPDATE_EVENTS,\n\t\t\t);\n\t\t},\n\t\t[`useChimera${capitalize(store.name)}Item`]: <Meta = any>(id: ChimeraEntityId, meta?: Meta) =>\n\t\t\tuseSubscribedValue(\n\t\t\t\tuseMemo(() => store.getItem(id, meta), [store, id, meta]),\n\t\t\t\tCHIMERA_ITEM_UPDATE_EVENTS,\n\t\t\t),\n\t} as ChimeraHooks<TStore, TQueryBuilder>;\n}\n"],"mappings":";;;;AAuCA,MAAM,cAAgC,MACrC,MAAM,KAAQ,EAAE,GAAc,aAAa,GAAG,EAAE,MAAM,EAAE,GAAuB;AAEhF,MAAM,sBACL,OACA,WACmB;CACnB,MAAM,qCAA0B,EAAE,EAAE,CAAC;AACrC,4BAAgB;EACf,MAAM,gBAAgB,QAAQ,EAAE,CAAC;AACjC,SAAO,SAAS,UAAU;AACzB,SAAM,GAAG,OAAO,QAAQ;IACvB;AACF,eAAa;AACZ,UAAO,SAAS,UAAU;AACzB,UAAM,IAAI,OAAO,QAAQ;KACxB;;IAED;EAAC;EAAO;EAAQ;EAAQ,CAAC;AAC5B,QAAO;;AAUR,SAAgB,wBAGd,OAAe,oBAA+E;AAC/F,QAAO;GACL,aAAa,WAAW,MAAM,KAAK,CAAC,eAAe,mBAAmB,OAAOA,+DAAmC;GAChH,aAAa,WAAW,MAAM,KAAK,CAAC,eACpC,QACA,SACI;GACJ,MAAM,4BAAiB,KAAK;AAC5B,OAAK,QAAQ,WAAW,CAAC,QAAU,CAAC,QAAQ,WAAW,KACtD,SAAQ,KACP,aAAa,WAAW,MAAM,KAAK,CAAC;0DAGpC;AAEF,WAAQ,UAAU;GAElB,MAAM,yFACiB,oBAAoB,OAAO,EAEjD,OAAO,OAAO,CAAC,OAAO,CACtB;AAED,UAAO,4CACQ,MAAM,cAAc,aAAa,EAAE,CAAC,OAAO,aAAa,CAAC,EACvEC,6DACA;;GAED,aAAa,WAAW,MAAM,KAAK,CAAC,SAAqB,IAAqB,SAC9E,4CACe,MAAM,QAAQ,IAAI,KAAK,EAAE;GAAC;GAAO;GAAI;GAAK,CAAC,EACzDC,uDACA;EACF"}
1
+ {"version":3,"file":"index.cjs","names":["CHIMERA_ENTITY_STORE_UPDATE_EVENTS","CHIMERA_COLLECTION_UPDATE_EVENTS","CHIMERA_ITEM_UPDATE_EVENTS"],"sources":["../hooks.ts"],"sourcesContent":["import {\n\ttype AnyChimeraParams,\n\tCHIMERA_COLLECTION_UPDATE_EVENTS,\n\tCHIMERA_ENTITY_STORE_UPDATE_EVENTS,\n\tCHIMERA_ITEM_UPDATE_EVENTS,\n\ttype ChimeraQueryBuilder,\n\tnormalizeParams,\n} from \"@hf-chimera/adapters-shared\";\nimport type {\n\tAnyChimeraEntityStore,\n\tAnyChimeraEventEmitter,\n\tChimeraCollectionQuery,\n\tChimeraEntityId,\n\tChimeraEntityStoreEntity,\n\tChimeraEntityStoreName,\n\tChimeraEntityStoreOperatorsMap,\n\tChimeraEventEmitterEventNames,\n\tChimeraItemQuery,\n} from \"@hf-chimera/store\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\n\ntype ChimeraHooks<\n\tTStore extends AnyChimeraEntityStore,\n\tTQueryBuilder extends ChimeraQueryBuilder<TStore>,\n\tTEntityName extends ChimeraEntityStoreName<TStore> = ChimeraEntityStoreName<TStore>,\n> = {\n\t[K in TEntityName as `useChimera${Capitalize<K>}Store`]: () => TStore;\n} & {\n\t[K in TEntityName as `useChimera${Capitalize<K>}Collection`]: <Meta = any>(\n\t\tparams: AnyChimeraParams<TStore, Meta, TQueryBuilder>,\n\t\tdeps?: unknown[],\n\t) => ChimeraCollectionQuery<TEntityName, ChimeraEntityStoreEntity<TStore>, ChimeraEntityStoreOperatorsMap<TStore>>;\n} & {\n\t[K in TEntityName as `useChimera${Capitalize<K>}Item`]: <Meta = any>(\n\t\tid: ChimeraEntityId,\n\t\tmeta?: Meta,\n\t) => ChimeraItemQuery<TEntityName, ChimeraEntityStoreEntity<TStore>>;\n};\n\nconst capitalize = <T extends string>(s: T): Capitalize<T> =>\n\ts !== \"\" ? (((s[0] as string).toUpperCase() + s.slice(1)) as Capitalize<T>) : (\"\" as Capitalize<T>);\n\nconst useSubscribedValue = <TEventEmitter extends AnyChimeraEventEmitter>(\n\tvalue: TEventEmitter,\n\tevents: ChimeraEventEmitterEventNames<TEventEmitter>[],\n): TEventEmitter => {\n\tconst trigger = useState(() => ({}))[1];\n\tuseEffect(() => {\n\t\tconst handler = () => trigger({});\n\t\tevents.forEach((event) => {\n\t\t\tvalue.on(event, handler);\n\t\t});\n\t\treturn () => {\n\t\t\tevents.forEach((event) => {\n\t\t\t\tvalue.off(event, handler);\n\t\t\t});\n\t\t};\n\t}, [value, events, trigger]);\n\treturn value;\n};\n\nexport function createChimeraStoreHooks<TStore extends AnyChimeraEntityStore>(\n\tstore: TStore,\n): ChimeraHooks<TStore, never>;\nexport function createChimeraStoreHooks<\n\tTStore extends AnyChimeraEntityStore,\n\tTQueryBuilder extends ChimeraQueryBuilder<TStore>,\n>(store: TStore, createQueryBuilder: () => TQueryBuilder): ChimeraHooks<TStore, TQueryBuilder>;\nexport function createChimeraStoreHooks<\n\tTStore extends AnyChimeraEntityStore,\n\tTQueryBuilder extends ChimeraQueryBuilder<TStore>,\n>(store: TStore, createQueryBuilder?: () => TQueryBuilder): ChimeraHooks<TStore, TQueryBuilder> {\n\treturn {\n\t\t[`useChimera${capitalize(store.name)}Store`]: () => useSubscribedValue(store, CHIMERA_ENTITY_STORE_UPDATE_EVENTS),\n\t\t[`useChimera${capitalize(store.name)}Collection`]: <TMeta = any>(\n\t\t\tparams: AnyChimeraParams<TStore, TMeta, TQueryBuilder>,\n\t\t\tdeps?: unknown[],\n\t\t) => {\n\t\t\tconst oldDeps = useRef(deps);\n\t\t\tif ((oldDeps.current && !deps) || (!oldDeps.current && deps)) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`useChimera${capitalize(store.name)}Collection deps is not a reactive param!\\n` +\n\t\t\t\t\t\t\"Use deps if you want to control dependencies manually.\\n\" +\n\t\t\t\t\t\t\"Omit it if you already have a stable reference to params\",\n\t\t\t\t);\n\t\t\t}\n\t\t\toldDeps.current = deps;\n\n\t\t\tconst stableParams = useMemo(\n\t\t\t\t() => normalizeParams(createQueryBuilder, params as TQueryBuilder),\n\t\t\t\t// biome-ignore lint/correctness/useExhaustiveDependencies: Very unlikely it will be changed over time, anyway warning for this already added.\n\t\t\t\tdeps ? deps : [params],\n\t\t\t);\n\n\t\t\treturn useSubscribedValue(\n\t\t\t\tuseMemo(() => store.getCollection(stableParams), [store, stableParams]),\n\t\t\t\tCHIMERA_COLLECTION_UPDATE_EVENTS,\n\t\t\t);\n\t\t},\n\t\t[`useChimera${capitalize(store.name)}Item`]: <Meta = any>(id: ChimeraEntityId, meta?: Meta) =>\n\t\t\tuseSubscribedValue(\n\t\t\t\tuseMemo(() => store.getItem(id, meta), [store, id, meta]),\n\t\t\t\tCHIMERA_ITEM_UPDATE_EVENTS,\n\t\t\t),\n\t} as ChimeraHooks<TStore, TQueryBuilder>;\n}\n"],"mappings":";;;;AAuCA,MAAM,cAAgC,MACrC,MAAM,KAAQ,EAAE,GAAc,aAAa,GAAG,EAAE,MAAM,EAAE,GAAuB;AAEhF,MAAM,sBACL,OACA,WACmB;CACnB,MAAM,qCAA0B,EAAE,EAAE,CAAC;AACrC,4BAAgB;EACf,MAAM,gBAAgB,QAAQ,EAAE,CAAC;AACjC,SAAO,SAAS,UAAU;AACzB,SAAM,GAAG,OAAO,QAAQ;IACvB;AACF,eAAa;AACZ,UAAO,SAAS,UAAU;AACzB,UAAM,IAAI,OAAO,QAAQ;KACxB;;IAED;EAAC;EAAO;EAAQ;EAAQ,CAAC;AAC5B,QAAO;;AAUR,SAAgB,wBAGd,OAAe,oBAA+E;AAC/F,QAAO;GACL,aAAa,WAAW,MAAM,KAAK,CAAC,eAAe,mBAAmB,OAAOA,+DAAmC;GAChH,aAAa,WAAW,MAAM,KAAK,CAAC,eACpC,QACA,SACI;GACJ,MAAM,4BAAiB,KAAK;AAC5B,OAAK,QAAQ,WAAW,CAAC,QAAU,CAAC,QAAQ,WAAW,KACtD,SAAQ,KACP,aAAa,WAAW,MAAM,KAAK,CAAC;0DAGpC;AAEF,WAAQ,UAAU;GAElB,MAAM,yFACiB,oBAAoB,OAAwB,EAElE,OAAO,OAAO,CAAC,OAAO,CACtB;AAED,UAAO,4CACQ,MAAM,cAAc,aAAa,EAAE,CAAC,OAAO,aAAa,CAAC,EACvEC,6DACA;;GAED,aAAa,WAAW,MAAM,KAAK,CAAC,SAAqB,IAAqB,SAC9E,4CACe,MAAM,QAAQ,IAAI,KAAK,EAAE;GAAC;GAAO;GAAI;GAAK,CAAC,EACzDC,uDACA;EACF"}
package/dist/index.d.cts CHANGED
@@ -2,7 +2,7 @@ import { AnyChimeraParams, ChimeraQueryBuilder } from "@hf-chimera/adapters-shar
2
2
  import { AnyChimeraEntityStore, ChimeraCollectionQuery, ChimeraEntityId, ChimeraEntityStoreEntity, ChimeraEntityStoreName, ChimeraEntityStoreOperatorsMap, ChimeraItemQuery } from "@hf-chimera/store";
3
3
 
4
4
  //#region hooks.d.ts
5
- type ChimeraHooks<TStore extends AnyChimeraEntityStore, TQueryBuilder extends ChimeraQueryBuilder<TStore>, TEntityName extends ChimeraEntityStoreName<TStore> = ChimeraEntityStoreName<TStore>> = { [K in TEntityName as `useChimera${Capitalize<K>}Store`]: () => TStore } & { [K in TEntityName as `useChimera${Capitalize<K>}Collection`]: <Meta = any>(params: AnyChimeraParams<TStore, Meta, Extract<TQueryBuilder, ChimeraQueryBuilder<TStore>>>, deps?: unknown[]) => ChimeraCollectionQuery<TEntityName, ChimeraEntityStoreEntity<TStore>, ChimeraEntityStoreOperatorsMap<TStore>> } & { [K in TEntityName as `useChimera${Capitalize<K>}Item`]: <Meta = any>(id: ChimeraEntityId, meta?: Meta) => ChimeraItemQuery<TEntityName, ChimeraEntityStoreEntity<TStore>> };
5
+ type ChimeraHooks<TStore extends AnyChimeraEntityStore, TQueryBuilder extends ChimeraQueryBuilder<TStore>, TEntityName extends ChimeraEntityStoreName<TStore> = ChimeraEntityStoreName<TStore>> = { [K in TEntityName as `useChimera${Capitalize<K>}Store`]: () => TStore } & { [K in TEntityName as `useChimera${Capitalize<K>}Collection`]: <Meta = any>(params: AnyChimeraParams<TStore, Meta, TQueryBuilder>, deps?: unknown[]) => ChimeraCollectionQuery<TEntityName, ChimeraEntityStoreEntity<TStore>, ChimeraEntityStoreOperatorsMap<TStore>> } & { [K in TEntityName as `useChimera${Capitalize<K>}Item`]: <Meta = any>(id: ChimeraEntityId, meta?: Meta) => ChimeraItemQuery<TEntityName, ChimeraEntityStoreEntity<TStore>> };
6
6
  declare function createChimeraStoreHooks<TStore extends AnyChimeraEntityStore>(store: TStore): ChimeraHooks<TStore, never>;
7
7
  declare function createChimeraStoreHooks<TStore extends AnyChimeraEntityStore, TQueryBuilder extends ChimeraQueryBuilder<TStore>>(store: TStore, createQueryBuilder: () => TQueryBuilder): ChimeraHooks<TStore, TQueryBuilder>;
8
8
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../hooks.ts"],"sourcesContent":[],"mappings":";;;;KAqBK,4BACW,6CACO,oBAAoB,6BACtB,uBAAuB,UAAU,uBAAuB,mBAEtE,4BAA4B,WAAW,kBAAkB,QARrC,GAGtB,QAOE,WANS,IAAA,aAMmB,UANnB,CAM8B,CAN9B,CAAA,YAAA,GAAA,CAAA,OAAA,GAAA,CAAA,CAAA,MAAA,EAON,gBAPM,CAOW,MAPX,EAOmB,IAPnB,EAOyB,OAPzB,CAOiC,aAPjC,EAOgD,mBAPhD,CAOoE,MAPpE,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,EAAA,OAAA,EAAA,EAAA,GASV,sBATU,CASa,WATb,EAS0B,wBAT1B,CASmD,MATnD,CAAA,EAS4D,8BAT5D,CAS2F,MAT3F,CAAA,CAAA,EAC2B,GAAA,QAUpC,WAVgB,IAAA,aAUY,UAVZ,CAUuB,CAVvB,CAAA,MAAA,GAAA,CAAA,OAAA,GAAA,CAAA,CAAA,EAAA,EAWjB,eAXiB,EAAA,IAAA,CAAA,EAYd,IAZc,EAAA,GAajB,gBAbiB,CAaA,WAbA,EAaa,wBAbb,CAasC,MAbtC,CAAA,CAAA,EACqB;AAAvB,iBAqCL,uBArCK,CAAA,eAqCkC,qBArClC,CAAA,CAAA,KAAA,EAsCb,MAtCa,CAAA,EAuClB,YAvCkB,CAuCL,MAvCK,EAAA,KAAA,CAAA;AAAwD,iBAwC7D,uBAxC6D,CAAA,eAyC7D,qBAzC6D,EAAA,sBA0CtD,mBA1CsD,CA0ClC,MA1CkC,CAAA,CAAA,CAAA,KAAA,EA2CpE,MA3CoE,EAAA,kBAAA,EAAA,GAAA,GA2ClC,aA3CkC,CAAA,EA2ClB,YA3CkB,CA2CL,MA3CK,EA2CG,aA3CH,CAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../hooks.ts"],"sourcesContent":[],"mappings":";;;;KAqBK,4BACW,6CACO,oBAAoB,6BACtB,uBAAuB,UAAU,uBAAuB,mBAEtE,4BAA4B,WAAW,kBAAkB,QARrC,GAGtB,QAOE,WANS,IAAA,aAMmB,UANnB,CAM8B,CAN9B,CAAA,YAAA,GAAA,CAAA,OAAA,GAAA,CAAA,CAAA,MAAA,EAON,gBAPM,CAOW,MAPX,EAOmB,IAPnB,EAOyB,aAPzB,CAAA,EAAA,IAAA,CAAA,EAAA,OAAA,EAAA,EAAA,GASV,sBATU,CASa,WATb,EAS0B,wBAT1B,CASmD,MATnD,CAAA,EAS4D,8BAT5D,CAS2F,MAT3F,CAAA,CAAA,EAC2B,GAAA,QAUpC,WAVgB,IAAA,aAUY,UAVZ,CAUuB,CAVvB,CAAA,MAAA,GAAA,CAAA,OAAA,GAAA,CAAA,CAAA,EAAA,EAWjB,eAXiB,EAAA,IAAA,CAAA,EAYd,IAZc,EAAA,GAajB,gBAbiB,CAaA,WAbA,EAaa,wBAbb,CAasC,MAbtC,CAAA,CAAA,EACqB;AAAvB,iBAqCL,uBArCK,CAAA,eAqCkC,qBArClC,CAAA,CAAA,KAAA,EAsCb,MAtCa,CAAA,EAuClB,YAvCkB,CAuCL,MAvCK,EAAA,KAAA,CAAA;AAAwD,iBAwC7D,uBAxC6D,CAAA,eAyC7D,qBAzC6D,EAAA,sBA0CtD,mBA1CsD,CA0ClC,MA1CkC,CAAA,CAAA,CAAA,KAAA,EA2CpE,MA3CoE,EAAA,kBAAA,EAAA,GAAA,GA2ClC,aA3CkC,CAAA,EA2ClB,YA3CkB,CA2CL,MA3CK,EA2CG,aA3CH,CAAA"}
package/dist/index.d.mts CHANGED
@@ -2,7 +2,7 @@ import { AnyChimeraParams, ChimeraQueryBuilder } from "@hf-chimera/adapters-shar
2
2
  import { AnyChimeraEntityStore, ChimeraCollectionQuery, ChimeraEntityId, ChimeraEntityStoreEntity, ChimeraEntityStoreName, ChimeraEntityStoreOperatorsMap, ChimeraItemQuery } from "@hf-chimera/store";
3
3
 
4
4
  //#region hooks.d.ts
5
- type ChimeraHooks<TStore extends AnyChimeraEntityStore, TQueryBuilder extends ChimeraQueryBuilder<TStore>, TEntityName extends ChimeraEntityStoreName<TStore> = ChimeraEntityStoreName<TStore>> = { [K in TEntityName as `useChimera${Capitalize<K>}Store`]: () => TStore } & { [K in TEntityName as `useChimera${Capitalize<K>}Collection`]: <Meta = any>(params: AnyChimeraParams<TStore, Meta, Extract<TQueryBuilder, ChimeraQueryBuilder<TStore>>>, deps?: unknown[]) => ChimeraCollectionQuery<TEntityName, ChimeraEntityStoreEntity<TStore>, ChimeraEntityStoreOperatorsMap<TStore>> } & { [K in TEntityName as `useChimera${Capitalize<K>}Item`]: <Meta = any>(id: ChimeraEntityId, meta?: Meta) => ChimeraItemQuery<TEntityName, ChimeraEntityStoreEntity<TStore>> };
5
+ type ChimeraHooks<TStore extends AnyChimeraEntityStore, TQueryBuilder extends ChimeraQueryBuilder<TStore>, TEntityName extends ChimeraEntityStoreName<TStore> = ChimeraEntityStoreName<TStore>> = { [K in TEntityName as `useChimera${Capitalize<K>}Store`]: () => TStore } & { [K in TEntityName as `useChimera${Capitalize<K>}Collection`]: <Meta = any>(params: AnyChimeraParams<TStore, Meta, TQueryBuilder>, deps?: unknown[]) => ChimeraCollectionQuery<TEntityName, ChimeraEntityStoreEntity<TStore>, ChimeraEntityStoreOperatorsMap<TStore>> } & { [K in TEntityName as `useChimera${Capitalize<K>}Item`]: <Meta = any>(id: ChimeraEntityId, meta?: Meta) => ChimeraItemQuery<TEntityName, ChimeraEntityStoreEntity<TStore>> };
6
6
  declare function createChimeraStoreHooks<TStore extends AnyChimeraEntityStore>(store: TStore): ChimeraHooks<TStore, never>;
7
7
  declare function createChimeraStoreHooks<TStore extends AnyChimeraEntityStore, TQueryBuilder extends ChimeraQueryBuilder<TStore>>(store: TStore, createQueryBuilder: () => TQueryBuilder): ChimeraHooks<TStore, TQueryBuilder>;
8
8
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../hooks.ts"],"sourcesContent":[],"mappings":";;;;KAqBK,4BACW,6CACO,oBAAoB,6BACtB,uBAAuB,UAAU,uBAAuB,mBAEtE,4BAA4B,WAAW,kBAAkB,QARrC,GAGtB,QAOE,WANS,IAAA,aAMmB,UANnB,CAM8B,CAN9B,CAAA,YAAA,GAAA,CAAA,OAAA,GAAA,CAAA,CAAA,MAAA,EAON,gBAPM,CAOW,MAPX,EAOmB,IAPnB,EAOyB,OAPzB,CAOiC,aAPjC,EAOgD,mBAPhD,CAOoE,MAPpE,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,EAAA,OAAA,EAAA,EAAA,GASV,sBATU,CASa,WATb,EAS0B,wBAT1B,CASmD,MATnD,CAAA,EAS4D,8BAT5D,CAS2F,MAT3F,CAAA,CAAA,EAC2B,GAAA,QAUpC,WAVgB,IAAA,aAUY,UAVZ,CAUuB,CAVvB,CAAA,MAAA,GAAA,CAAA,OAAA,GAAA,CAAA,CAAA,EAAA,EAWjB,eAXiB,EAAA,IAAA,CAAA,EAYd,IAZc,EAAA,GAajB,gBAbiB,CAaA,WAbA,EAaa,wBAbb,CAasC,MAbtC,CAAA,CAAA,EACqB;AAAvB,iBAqCL,uBArCK,CAAA,eAqCkC,qBArClC,CAAA,CAAA,KAAA,EAsCb,MAtCa,CAAA,EAuClB,YAvCkB,CAuCL,MAvCK,EAAA,KAAA,CAAA;AAAwD,iBAwC7D,uBAxC6D,CAAA,eAyC7D,qBAzC6D,EAAA,sBA0CtD,mBA1CsD,CA0ClC,MA1CkC,CAAA,CAAA,CAAA,KAAA,EA2CpE,MA3CoE,EAAA,kBAAA,EAAA,GAAA,GA2ClC,aA3CkC,CAAA,EA2ClB,YA3CkB,CA2CL,MA3CK,EA2CG,aA3CH,CAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../hooks.ts"],"sourcesContent":[],"mappings":";;;;KAqBK,4BACW,6CACO,oBAAoB,6BACtB,uBAAuB,UAAU,uBAAuB,mBAEtE,4BAA4B,WAAW,kBAAkB,QARrC,GAGtB,QAOE,WANS,IAAA,aAMmB,UANnB,CAM8B,CAN9B,CAAA,YAAA,GAAA,CAAA,OAAA,GAAA,CAAA,CAAA,MAAA,EAON,gBAPM,CAOW,MAPX,EAOmB,IAPnB,EAOyB,aAPzB,CAAA,EAAA,IAAA,CAAA,EAAA,OAAA,EAAA,EAAA,GASV,sBATU,CASa,WATb,EAS0B,wBAT1B,CASmD,MATnD,CAAA,EAS4D,8BAT5D,CAS2F,MAT3F,CAAA,CAAA,EAC2B,GAAA,QAUpC,WAVgB,IAAA,aAUY,UAVZ,CAUuB,CAVvB,CAAA,MAAA,GAAA,CAAA,OAAA,GAAA,CAAA,CAAA,EAAA,EAWjB,eAXiB,EAAA,IAAA,CAAA,EAYd,IAZc,EAAA,GAajB,gBAbiB,CAaA,WAbA,EAaa,wBAbb,CAasC,MAbtC,CAAA,CAAA,EACqB;AAAvB,iBAqCL,uBArCK,CAAA,eAqCkC,qBArClC,CAAA,CAAA,KAAA,EAsCb,MAtCa,CAAA,EAuClB,YAvCkB,CAuCL,MAvCK,EAAA,KAAA,CAAA;AAAwD,iBAwC7D,uBAxC6D,CAAA,eAyC7D,qBAzC6D,EAAA,sBA0CtD,mBA1CsD,CA0ClC,MA1CkC,CAAA,CAAA,CAAA,KAAA,EA2CpE,MA3CoE,EAAA,kBAAA,EAAA,GAAA,GA2ClC,aA3CkC,CAAA,EA2ClB,YA3CkB,CA2CL,MA3CK,EA2CG,aA3CH,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../hooks.ts"],"sourcesContent":["import {\n\ttype AnyChimeraParams,\n\tCHIMERA_COLLECTION_UPDATE_EVENTS,\n\tCHIMERA_ENTITY_STORE_UPDATE_EVENTS,\n\tCHIMERA_ITEM_UPDATE_EVENTS,\n\ttype ChimeraQueryBuilder,\n\tnormalizeParams,\n} from \"@hf-chimera/adapters-shared\";\nimport type {\n\tAnyChimeraEntityStore,\n\tAnyChimeraEventEmitter,\n\tChimeraCollectionQuery,\n\tChimeraEntityId,\n\tChimeraEntityStoreEntity,\n\tChimeraEntityStoreName,\n\tChimeraEntityStoreOperatorsMap,\n\tChimeraEventEmitterEventNames,\n\tChimeraItemQuery,\n} from \"@hf-chimera/store\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\n\ntype ChimeraHooks<\n\tTStore extends AnyChimeraEntityStore,\n\tTQueryBuilder extends ChimeraQueryBuilder<TStore>,\n\tTEntityName extends ChimeraEntityStoreName<TStore> = ChimeraEntityStoreName<TStore>,\n> = {\n\t[K in TEntityName as `useChimera${Capitalize<K>}Store`]: () => TStore;\n} & {\n\t[K in TEntityName as `useChimera${Capitalize<K>}Collection`]: <Meta = any>(\n\t\tparams: AnyChimeraParams<TStore, Meta, Extract<TQueryBuilder, ChimeraQueryBuilder<TStore>>>,\n\t\tdeps?: unknown[],\n\t) => ChimeraCollectionQuery<TEntityName, ChimeraEntityStoreEntity<TStore>, ChimeraEntityStoreOperatorsMap<TStore>>;\n} & {\n\t[K in TEntityName as `useChimera${Capitalize<K>}Item`]: <Meta = any>(\n\t\tid: ChimeraEntityId,\n\t\tmeta?: Meta,\n\t) => ChimeraItemQuery<TEntityName, ChimeraEntityStoreEntity<TStore>>;\n};\n\nconst capitalize = <T extends string>(s: T): Capitalize<T> =>\n\ts !== \"\" ? (((s[0] as string).toUpperCase() + s.slice(1)) as Capitalize<T>) : (\"\" as Capitalize<T>);\n\nconst useSubscribedValue = <TEventEmitter extends AnyChimeraEventEmitter>(\n\tvalue: TEventEmitter,\n\tevents: ChimeraEventEmitterEventNames<TEventEmitter>[],\n): TEventEmitter => {\n\tconst trigger = useState(() => ({}))[1];\n\tuseEffect(() => {\n\t\tconst handler = () => trigger({});\n\t\tevents.forEach((event) => {\n\t\t\tvalue.on(event, handler);\n\t\t});\n\t\treturn () => {\n\t\t\tevents.forEach((event) => {\n\t\t\t\tvalue.off(event, handler);\n\t\t\t});\n\t\t};\n\t}, [value, events, trigger]);\n\treturn value;\n};\n\nexport function createChimeraStoreHooks<TStore extends AnyChimeraEntityStore>(\n\tstore: TStore,\n): ChimeraHooks<TStore, never>;\nexport function createChimeraStoreHooks<\n\tTStore extends AnyChimeraEntityStore,\n\tTQueryBuilder extends ChimeraQueryBuilder<TStore>,\n>(store: TStore, createQueryBuilder: () => TQueryBuilder): ChimeraHooks<TStore, TQueryBuilder>;\nexport function createChimeraStoreHooks<\n\tTStore extends AnyChimeraEntityStore,\n\tTQueryBuilder extends ChimeraQueryBuilder<TStore>,\n>(store: TStore, createQueryBuilder?: () => TQueryBuilder): ChimeraHooks<TStore, TQueryBuilder> {\n\treturn {\n\t\t[`useChimera${capitalize(store.name)}Store`]: () => useSubscribedValue(store, CHIMERA_ENTITY_STORE_UPDATE_EVENTS),\n\t\t[`useChimera${capitalize(store.name)}Collection`]: <TMeta = any>(\n\t\t\tparams: AnyChimeraParams<TStore, TMeta, Extract<TQueryBuilder, ChimeraQueryBuilder<TStore>>>,\n\t\t\tdeps?: unknown[],\n\t\t) => {\n\t\t\tconst oldDeps = useRef(deps);\n\t\t\tif ((oldDeps.current && !deps) || (!oldDeps.current && deps)) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`useChimera${capitalize(store.name)}Collection deps is not a reactive param!\\n` +\n\t\t\t\t\t\t\"Use deps if you want to control dependencies manually.\\n\" +\n\t\t\t\t\t\t\"Omit it if you already have a stable reference to params\",\n\t\t\t\t);\n\t\t\t}\n\t\t\toldDeps.current = deps;\n\n\t\t\tconst stableParams = useMemo(\n\t\t\t\t() => normalizeParams(createQueryBuilder, params),\n\t\t\t\t// biome-ignore lint/correctness/useExhaustiveDependencies: Very unlikely it will be changed over time, anyway warning for this already added.\n\t\t\t\tdeps ? deps : [params],\n\t\t\t);\n\n\t\t\treturn useSubscribedValue(\n\t\t\t\tuseMemo(() => store.getCollection(stableParams), [store, stableParams]),\n\t\t\t\tCHIMERA_COLLECTION_UPDATE_EVENTS,\n\t\t\t);\n\t\t},\n\t\t[`useChimera${capitalize(store.name)}Item`]: <Meta = any>(id: ChimeraEntityId, meta?: Meta) =>\n\t\t\tuseSubscribedValue(\n\t\t\t\tuseMemo(() => store.getItem(id, meta), [store, id, meta]),\n\t\t\t\tCHIMERA_ITEM_UPDATE_EVENTS,\n\t\t\t),\n\t} as ChimeraHooks<TStore, TQueryBuilder>;\n}\n"],"mappings":";;;;AAuCA,MAAM,cAAgC,MACrC,MAAM,KAAQ,EAAE,GAAc,aAAa,GAAG,EAAE,MAAM,EAAE,GAAuB;AAEhF,MAAM,sBACL,OACA,WACmB;CACnB,MAAM,UAAU,gBAAgB,EAAE,EAAE,CAAC;AACrC,iBAAgB;EACf,MAAM,gBAAgB,QAAQ,EAAE,CAAC;AACjC,SAAO,SAAS,UAAU;AACzB,SAAM,GAAG,OAAO,QAAQ;IACvB;AACF,eAAa;AACZ,UAAO,SAAS,UAAU;AACzB,UAAM,IAAI,OAAO,QAAQ;KACxB;;IAED;EAAC;EAAO;EAAQ;EAAQ,CAAC;AAC5B,QAAO;;AAUR,SAAgB,wBAGd,OAAe,oBAA+E;AAC/F,QAAO;GACL,aAAa,WAAW,MAAM,KAAK,CAAC,eAAe,mBAAmB,OAAO,mCAAmC;GAChH,aAAa,WAAW,MAAM,KAAK,CAAC,eACpC,QACA,SACI;GACJ,MAAM,UAAU,OAAO,KAAK;AAC5B,OAAK,QAAQ,WAAW,CAAC,QAAU,CAAC,QAAQ,WAAW,KACtD,SAAQ,KACP,aAAa,WAAW,MAAM,KAAK,CAAC;0DAGpC;AAEF,WAAQ,UAAU;GAElB,MAAM,eAAe,cACd,gBAAgB,oBAAoB,OAAO,EAEjD,OAAO,OAAO,CAAC,OAAO,CACtB;AAED,UAAO,mBACN,cAAc,MAAM,cAAc,aAAa,EAAE,CAAC,OAAO,aAAa,CAAC,EACvE,iCACA;;GAED,aAAa,WAAW,MAAM,KAAK,CAAC,SAAqB,IAAqB,SAC9E,mBACC,cAAc,MAAM,QAAQ,IAAI,KAAK,EAAE;GAAC;GAAO;GAAI;GAAK,CAAC,EACzD,2BACA;EACF"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../hooks.ts"],"sourcesContent":["import {\n\ttype AnyChimeraParams,\n\tCHIMERA_COLLECTION_UPDATE_EVENTS,\n\tCHIMERA_ENTITY_STORE_UPDATE_EVENTS,\n\tCHIMERA_ITEM_UPDATE_EVENTS,\n\ttype ChimeraQueryBuilder,\n\tnormalizeParams,\n} from \"@hf-chimera/adapters-shared\";\nimport type {\n\tAnyChimeraEntityStore,\n\tAnyChimeraEventEmitter,\n\tChimeraCollectionQuery,\n\tChimeraEntityId,\n\tChimeraEntityStoreEntity,\n\tChimeraEntityStoreName,\n\tChimeraEntityStoreOperatorsMap,\n\tChimeraEventEmitterEventNames,\n\tChimeraItemQuery,\n} from \"@hf-chimera/store\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\n\ntype ChimeraHooks<\n\tTStore extends AnyChimeraEntityStore,\n\tTQueryBuilder extends ChimeraQueryBuilder<TStore>,\n\tTEntityName extends ChimeraEntityStoreName<TStore> = ChimeraEntityStoreName<TStore>,\n> = {\n\t[K in TEntityName as `useChimera${Capitalize<K>}Store`]: () => TStore;\n} & {\n\t[K in TEntityName as `useChimera${Capitalize<K>}Collection`]: <Meta = any>(\n\t\tparams: AnyChimeraParams<TStore, Meta, TQueryBuilder>,\n\t\tdeps?: unknown[],\n\t) => ChimeraCollectionQuery<TEntityName, ChimeraEntityStoreEntity<TStore>, ChimeraEntityStoreOperatorsMap<TStore>>;\n} & {\n\t[K in TEntityName as `useChimera${Capitalize<K>}Item`]: <Meta = any>(\n\t\tid: ChimeraEntityId,\n\t\tmeta?: Meta,\n\t) => ChimeraItemQuery<TEntityName, ChimeraEntityStoreEntity<TStore>>;\n};\n\nconst capitalize = <T extends string>(s: T): Capitalize<T> =>\n\ts !== \"\" ? (((s[0] as string).toUpperCase() + s.slice(1)) as Capitalize<T>) : (\"\" as Capitalize<T>);\n\nconst useSubscribedValue = <TEventEmitter extends AnyChimeraEventEmitter>(\n\tvalue: TEventEmitter,\n\tevents: ChimeraEventEmitterEventNames<TEventEmitter>[],\n): TEventEmitter => {\n\tconst trigger = useState(() => ({}))[1];\n\tuseEffect(() => {\n\t\tconst handler = () => trigger({});\n\t\tevents.forEach((event) => {\n\t\t\tvalue.on(event, handler);\n\t\t});\n\t\treturn () => {\n\t\t\tevents.forEach((event) => {\n\t\t\t\tvalue.off(event, handler);\n\t\t\t});\n\t\t};\n\t}, [value, events, trigger]);\n\treturn value;\n};\n\nexport function createChimeraStoreHooks<TStore extends AnyChimeraEntityStore>(\n\tstore: TStore,\n): ChimeraHooks<TStore, never>;\nexport function createChimeraStoreHooks<\n\tTStore extends AnyChimeraEntityStore,\n\tTQueryBuilder extends ChimeraQueryBuilder<TStore>,\n>(store: TStore, createQueryBuilder: () => TQueryBuilder): ChimeraHooks<TStore, TQueryBuilder>;\nexport function createChimeraStoreHooks<\n\tTStore extends AnyChimeraEntityStore,\n\tTQueryBuilder extends ChimeraQueryBuilder<TStore>,\n>(store: TStore, createQueryBuilder?: () => TQueryBuilder): ChimeraHooks<TStore, TQueryBuilder> {\n\treturn {\n\t\t[`useChimera${capitalize(store.name)}Store`]: () => useSubscribedValue(store, CHIMERA_ENTITY_STORE_UPDATE_EVENTS),\n\t\t[`useChimera${capitalize(store.name)}Collection`]: <TMeta = any>(\n\t\t\tparams: AnyChimeraParams<TStore, TMeta, TQueryBuilder>,\n\t\t\tdeps?: unknown[],\n\t\t) => {\n\t\t\tconst oldDeps = useRef(deps);\n\t\t\tif ((oldDeps.current && !deps) || (!oldDeps.current && deps)) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`useChimera${capitalize(store.name)}Collection deps is not a reactive param!\\n` +\n\t\t\t\t\t\t\"Use deps if you want to control dependencies manually.\\n\" +\n\t\t\t\t\t\t\"Omit it if you already have a stable reference to params\",\n\t\t\t\t);\n\t\t\t}\n\t\t\toldDeps.current = deps;\n\n\t\t\tconst stableParams = useMemo(\n\t\t\t\t() => normalizeParams(createQueryBuilder, params as TQueryBuilder),\n\t\t\t\t// biome-ignore lint/correctness/useExhaustiveDependencies: Very unlikely it will be changed over time, anyway warning for this already added.\n\t\t\t\tdeps ? deps : [params],\n\t\t\t);\n\n\t\t\treturn useSubscribedValue(\n\t\t\t\tuseMemo(() => store.getCollection(stableParams), [store, stableParams]),\n\t\t\t\tCHIMERA_COLLECTION_UPDATE_EVENTS,\n\t\t\t);\n\t\t},\n\t\t[`useChimera${capitalize(store.name)}Item`]: <Meta = any>(id: ChimeraEntityId, meta?: Meta) =>\n\t\t\tuseSubscribedValue(\n\t\t\t\tuseMemo(() => store.getItem(id, meta), [store, id, meta]),\n\t\t\t\tCHIMERA_ITEM_UPDATE_EVENTS,\n\t\t\t),\n\t} as ChimeraHooks<TStore, TQueryBuilder>;\n}\n"],"mappings":";;;;AAuCA,MAAM,cAAgC,MACrC,MAAM,KAAQ,EAAE,GAAc,aAAa,GAAG,EAAE,MAAM,EAAE,GAAuB;AAEhF,MAAM,sBACL,OACA,WACmB;CACnB,MAAM,UAAU,gBAAgB,EAAE,EAAE,CAAC;AACrC,iBAAgB;EACf,MAAM,gBAAgB,QAAQ,EAAE,CAAC;AACjC,SAAO,SAAS,UAAU;AACzB,SAAM,GAAG,OAAO,QAAQ;IACvB;AACF,eAAa;AACZ,UAAO,SAAS,UAAU;AACzB,UAAM,IAAI,OAAO,QAAQ;KACxB;;IAED;EAAC;EAAO;EAAQ;EAAQ,CAAC;AAC5B,QAAO;;AAUR,SAAgB,wBAGd,OAAe,oBAA+E;AAC/F,QAAO;GACL,aAAa,WAAW,MAAM,KAAK,CAAC,eAAe,mBAAmB,OAAO,mCAAmC;GAChH,aAAa,WAAW,MAAM,KAAK,CAAC,eACpC,QACA,SACI;GACJ,MAAM,UAAU,OAAO,KAAK;AAC5B,OAAK,QAAQ,WAAW,CAAC,QAAU,CAAC,QAAQ,WAAW,KACtD,SAAQ,KACP,aAAa,WAAW,MAAM,KAAK,CAAC;0DAGpC;AAEF,WAAQ,UAAU;GAElB,MAAM,eAAe,cACd,gBAAgB,oBAAoB,OAAwB,EAElE,OAAO,OAAO,CAAC,OAAO,CACtB;AAED,UAAO,mBACN,cAAc,MAAM,cAAc,aAAa,EAAE,CAAC,OAAO,aAAa,CAAC,EACvE,iCACA;;GAED,aAAa,WAAW,MAAM,KAAK,CAAC,SAAqB,IAAqB,SAC9E,mBACC,cAAc,MAAM,QAAQ,IAAI,KAAK,EAAE;GAAC;GAAO;GAAI;GAAK,CAAC,EACzD,2BACA;EACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hf-chimera/react",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Cross-end reactivity API - React adapter",
5
5
  "license": "MIT",
6
6
  "author": "hewston",
@@ -13,14 +13,14 @@
13
13
  "state-management"
14
14
  ],
15
15
  "type": "module",
16
- "types": "./dist/index.d.ts",
16
+ "types": "./dist/index.d.mts",
17
17
  "main": "./dist/index.cjs",
18
- "module": "./dist/index.js",
18
+ "module": "./dist/index.mjs",
19
19
  "exports": {
20
20
  ".": {
21
- "types": "./dist/index.d.ts",
21
+ "types": "./dist/index.d.mts",
22
22
  "require": "./dist/index.cjs",
23
- "import": "./dist/index.js"
23
+ "import": "./dist/index.mjs"
24
24
  }
25
25
  },
26
26
  "files": [
@@ -34,10 +34,10 @@
34
34
  },
35
35
  "peerDependencies": {
36
36
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
37
- "@hf-chimera/store": "~0.2.0"
37
+ "@hf-chimera/store": "~0.2.2"
38
38
  },
39
39
  "dependencies": {
40
- "@hf-chimera/adapters-shared": "~0.2.2"
40
+ "@hf-chimera/adapters-shared": "~0.2.4"
41
41
  },
42
42
  "publishConfig": {
43
43
  "access": "public",