@blac/react 0.0.50 → 0.0.52

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.
@@ -0,0 +1,9 @@
1
+ import { BlocGeneric, BlocHookDependencyArrayFn, BlocState } from 'blac';
2
+
3
+ export interface ExternalStore<B extends BlocGeneric<any, any>, S extends BlocState<B>> {
4
+ subscribe: (onStoreChange: () => void) => () => void;
5
+ getSnapshot: () => S;
6
+ getServerSnapshot?: () => S;
7
+ }
8
+ declare const externalBlocStore: <B extends BlocGeneric<any, any>, S extends BlocState<B>>(bloc: B, dependencyArray: BlocHookDependencyArrayFn<InstanceType<any>>) => ExternalStore<B, S>;
9
+ export default externalBlocStore;
package/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const K=require("blac"),d=require("react"),b=(n,e)=>({subscribe:o=>{const r=n.addSubscriber({fn:()=>{try{o(n.state)}catch(u){console.error({e:u,bloc:n,dependencyArray:e})}},dependencyArray:e});return()=>{r()}},getSnapshot:()=>n.state,getServerSnapshot:()=>n.state}),s=class s{static useBloc(e,o){const r=d.useId(),u=s.getUsedKeys(r);let l=t=>{if(typeof t!="object")return[t];const c=[];for(const h of u)h in t&&c.push(t[h]);return c},y,f;typeof o=="object"&&(l=o.dependencySelector??l,y=o.id,f=o.props??f),e.isolated&&(y=r);const a=K.Blac.getInstance().getBloc(e,{id:y,props:f,reconnect:!1});if(!a)throw new Error(`useBloc: could not resolve: ${e.name||e}`);const{subscribe:B,getSnapshot:p,getServerSnapshot:U}=d.useMemo(()=>b(a,l),[a.createdAt]),i=d.useSyncExternalStore(B,p,U),g=new Set,v=d.useMemo(()=>{try{if(typeof i=="object")return new Proxy(i,{get(t,c){return u.add(c),g.add(c),Reflect.get(t,c)}})}catch(t){K.Blac.instance.log("useBloc Error",t)}return i},[i]);return d.useLayoutEffect(()=>{s.getUsedKeys(r).clear();for(const t of g)s.getUsedKeys(r).add(t)},[g,r]),[v,a]}};s.ridUsedKeys=new Map,s.getUsedKeys=e=>(s.ridUsedKeys.has(e)||s.ridUsedKeys.set(e,new Set),s.ridUsedKeys.get(e));let S=s;const I=S.useBloc;exports.externalBlocStore=b;exports.useBloc=I;
1
+ "use strict";var m=Object.defineProperty;var x=(s,e,t)=>e in s?m(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var S=(s,e,t)=>x(s,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("blac"),d=require("react"),B=(s,e)=>({subscribe:t=>{const n=s.addSubscriber({fn:()=>{try{t(s.state)}catch(u){console.error({e:u,bloc:s,dependencyArray:e})}},dependencyArray:e});return()=>{n()}},getSnapshot:()=>s.state,getServerSnapshot:()=>s.state}),c=class c{static useBloc(e,t){const n=d.useId(),u=c.getUsedKeys(n);let y=t!=null&&t.inferStateUsage?r=>{if(typeof r!="object")return[r];const a=[];for(const b of u)b in r&&a.push(r[b]);return a}:r=>[r],f,g;typeof t=="object"&&(y=t.dependencySelector??y,f=t.id,g=t.props??g),e.isolated&&(f=n);const o=h.Blac.getInstance().getBloc(e,{id:f,props:g,reconnect:!1});if(!o)throw new Error(`useBloc: could not resolve: ${e.name||e}`);const{subscribe:U,getSnapshot:v,getServerSnapshot:I}=d.useMemo(()=>B(o,y),[o.createdAt]),l=d.useSyncExternalStore(U,v,I),i=new Set,j=d.useMemo(()=>{try{if(t!=null&&t.inferStateUsage&&typeof l=="object")return new Proxy(l,{get(r,a){return u.add(a),i.add(a),Reflect.get(r,a)}})}catch(r){h.Blac.instance.log("useBloc Error",r)}return l},[l]);return d.useLayoutEffect(()=>{c.getUsedKeys(n).clear();for(const r of i)c.getUsedKeys(n).add(r)},[i,n]),[j,o]}};S(c,"ridUsedKeys",new Map),S(c,"getUsedKeys",e=>(c.ridUsedKeys.has(e)||c.ridUsedKeys.set(e,new Set),c.ridUsedKeys.get(e)));let K=c;const E=K.useBloc;exports.externalBlocStore=B;exports.useBloc=E;
2
2
  //# sourceMappingURL=index.cjs.js.map
package/index.cjs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/externalBlocStore.ts","../src/useBloc.tsx"],"sourcesContent":["import { BlocGeneric, BlocHookDependencyArrayFn, BlocState } from 'blac';\n\nexport interface ExternalStore<\n B extends BlocGeneric<any, any>,\n S extends BlocState<B>,\n> {\n subscribe: (onStoreChange: () => void) => () => void;\n getSnapshot: () => S;\n getServerSnapshot?: () => S;\n}\n\nconst externalBlocStore = <\n B extends BlocGeneric<any, any>,\n S extends BlocState<B>,\n>(\n bloc: B,\n dependencyArray: BlocHookDependencyArrayFn<InstanceType<any>>,\n): ExternalStore<B, S> => {\n return {\n subscribe: (listener: (state: S) => void) => {\n const unSub = bloc.addSubscriber({\n fn: () => {\n try {\n listener(bloc.state);\n } catch (e) {\n console.error({\n e,\n bloc,\n dependencyArray,\n });\n }\n },\n dependencyArray,\n });\n\n return () => {\n unSub();\n };\n },\n getSnapshot: (): S => bloc.state,\n getServerSnapshot: (): S => bloc.state,\n };\n};\n\nexport default externalBlocStore;\n","import {\n Blac,\n BlocBase,\n BlocConstructor,\n BlocGeneric,\n BlocHookDependencyArrayFn,\n BlocInstanceId,\n BlocState,\n InferPropsFromGeneric,\n} from 'blac';\nimport { useId, useLayoutEffect, useMemo, useSyncExternalStore } from 'react';\nimport externalBlocStore from './externalBlocStore';\n\n// export type BlocHookData<B extends BlocBase<S>, S> = [\n// value: ValueType<B>,\n// instance: B,\n// ];\n\ntype HookTypes<B extends BlocConstructor<BlocGeneric>> = [\n BlocState<InstanceType<B>>,\n InstanceType<B>,\n];\n\n// type BlocHookData<B extends BlocBase<S>, S> = [S, InstanceType<B>]; // B is the bloc class, S is the state of the bloc\n// type UseBlocClassResult<B, S> = BlocHookData<B, S>;\n\nexport interface BlocHookOptions<B extends BlocGeneric<any, any>> {\n id?: string;\n dependencySelector?: BlocHookDependencyArrayFn<B>;\n props?: InferPropsFromGeneric<B>;\n}\n\nexport class UseBlocClass {\n static ridUsedKeys: Map<string, Set<string>> = new Map();\n static getUsedKeys = (rid: string): Set<string> => {\n if (!UseBlocClass.ridUsedKeys.has(rid)) {\n UseBlocClass.ridUsedKeys.set(rid, new Set());\n }\n return UseBlocClass.ridUsedKeys.get(rid) as Set<string>;\n };\n\n static useBloc<\n B extends BlocConstructor<BlocGeneric>,\n O extends BlocHookOptions<InstanceType<B>>,\n >(bloc: B, options?: O): HookTypes<B> {\n const rid = useId();\n const usedKeys = UseBlocClass.getUsedKeys(rid);\n\n // default options\n let dependencyArray: BlocHookDependencyArrayFn<InstanceType<B>> = (\n newState,\n ) => {\n if (typeof newState !== 'object') {\n return [newState] as unknown[];\n }\n\n const used: string[] = [];\n for (const key of usedKeys) {\n if (key in newState) {\n used.push(newState[key as keyof typeof newState]);\n }\n }\n return used;\n };\n let blocId: BlocInstanceId | undefined;\n let props: ConstructorParameters<BlocConstructor<B>> | undefined;\n\n if (typeof options === 'object') {\n dependencyArray = options.dependencySelector ?? dependencyArray;\n blocId = options.id;\n props = options.props ?? props;\n }\n\n const base = bloc as unknown as BlocBase<B, O['props']>;\n const isIsolated = base.isolated;\n if (isIsolated) {\n blocId = rid;\n }\n\n const resolvedBloc = Blac.getInstance().getBloc(bloc, {\n id: blocId,\n props: props as any,\n reconnect: false,\n }) as InstanceType<B>;\n\n if (!resolvedBloc) {\n throw new Error(`useBloc: could not resolve: ${bloc.name || bloc}`);\n }\n\n const { subscribe, getSnapshot, getServerSnapshot } = useMemo(\n () => externalBlocStore(resolvedBloc, dependencyArray),\n [resolvedBloc.createdAt],\n );\n\n const state = useSyncExternalStore<BlocState<InstanceType<B>>>(\n subscribe,\n getSnapshot,\n getServerSnapshot,\n );\n\n const currentRenderUsedKeys = new Set<string>();\n const returnState: BlocState<InstanceType<B>> = useMemo(() => {\n try {\n if (typeof state === 'object') {\n return new Proxy(state as any, {\n get(target, prop) {\n usedKeys.add(prop as string);\n currentRenderUsedKeys.add(prop as string);\n return Reflect.get(target, prop);\n },\n });\n }\n } catch (error) {\n Blac.instance.log('useBloc Error', error);\n }\n return state;\n }, [state]);\n\n useLayoutEffect(() => {\n UseBlocClass.getUsedKeys(rid).clear();\n for (const key of currentRenderUsedKeys) {\n UseBlocClass.getUsedKeys(rid).add(key);\n }\n }, [currentRenderUsedKeys, rid]);\n\n return [returnState, resolvedBloc];\n }\n}\n\nconst useBloc = UseBlocClass.useBloc;\n\nexport default useBloc;\n"],"names":["externalBlocStore","bloc","dependencyArray","listener","unSub","e","_UseBlocClass","options","rid","useId","usedKeys","newState","used","key","blocId","props","resolvedBloc","Blac","subscribe","getSnapshot","getServerSnapshot","useMemo","state","useSyncExternalStore","currentRenderUsedKeys","returnState","target","prop","error","useLayoutEffect","UseBlocClass","useBloc"],"mappings":"2HAWMA,EAAoB,CAIxBC,EACAC,KAEO,CACL,UAAYC,GAAiC,CACrC,MAAAC,EAAQH,EAAK,cAAc,CAC/B,GAAI,IAAM,CACJ,GAAA,CACFE,EAASF,EAAK,KAAK,QACZI,EAAG,CACV,QAAQ,MAAM,CACZ,EAAAA,EACA,KAAAJ,EACA,gBAAAC,CAAA,CACD,CACH,CACF,EACA,gBAAAA,CAAA,CACD,EAED,MAAO,IAAM,CACLE,GAAA,CAEV,EACA,YAAa,IAASH,EAAK,MAC3B,kBAAmB,IAASA,EAAK,KAAA,GCRxBK,EAAN,MAAMA,CAAa,CASxB,OAAO,QAGLL,EAASM,EAA2B,CACpC,MAAMC,EAAMC,EAAAA,QACNC,EAAWJ,EAAa,YAAYE,CAAG,EAGzC,IAAAN,EACFS,GACG,CACC,GAAA,OAAOA,GAAa,SACtB,MAAO,CAACA,CAAQ,EAGlB,MAAMC,EAAiB,CAAA,EACvB,UAAWC,KAAOH,EACZG,KAAOF,GACJC,EAAA,KAAKD,EAASE,CAA4B,CAAC,EAG7C,OAAAD,CAAA,EAELE,EACAC,EAEA,OAAOR,GAAY,WACrBL,EAAkBK,EAAQ,oBAAsBL,EAChDY,EAASP,EAAQ,GACjBQ,EAAQR,EAAQ,OAASQ,GAGdd,EACW,WAEba,EAAAN,GAGX,MAAMQ,EAAeC,EAAA,KAAK,YAAY,EAAE,QAAQhB,EAAM,CACpD,GAAIa,EACJ,MAAAC,EACA,UAAW,EAAA,CACZ,EAED,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,+BAA+Bf,EAAK,MAAQA,CAAI,EAAE,EAGpE,KAAM,CAAE,UAAAiB,EAAW,YAAAC,EAAa,kBAAAC,CAAsB,EAAAC,EAAA,QACpD,IAAMrB,EAAkBgB,EAAcd,CAAe,EACrD,CAACc,EAAa,SAAS,CAAA,EAGnBM,EAAQC,EAAA,qBACZL,EACAC,EACAC,CAAA,EAGII,MAA4B,IAC5BC,EAA0CJ,EAAAA,QAAQ,IAAM,CACxD,GAAA,CACE,GAAA,OAAOC,GAAU,SACZ,OAAA,IAAI,MAAMA,EAAc,CAC7B,IAAII,EAAQC,EAAM,CAChB,OAAAjB,EAAS,IAAIiB,CAAc,EAC3BH,EAAsB,IAAIG,CAAc,EACjC,QAAQ,IAAID,EAAQC,CAAI,CACjC,CAAA,CACD,QAEIC,EAAO,CACTX,EAAAA,KAAA,SAAS,IAAI,gBAAiBW,CAAK,CAC1C,CACO,OAAAN,CAAA,EACN,CAACA,CAAK,CAAC,EAEVO,OAAAA,EAAAA,gBAAgB,IAAM,CACPvB,EAAA,YAAYE,CAAG,EAAE,MAAM,EACpC,UAAWK,KAAOW,EAChBlB,EAAa,YAAYE,CAAG,EAAE,IAAIK,CAAG,CACvC,EACC,CAACW,EAAuBhB,CAAG,CAAC,EAExB,CAACiB,EAAaT,CAAY,CACnC,CACF,EA9FSV,EAAA,gBAA4C,IAC5CA,EAAA,YAAeE,IACfF,EAAa,YAAY,IAAIE,CAAG,GACnCF,EAAa,YAAY,IAAIE,EAAK,IAAI,GAAK,EAEtCF,EAAa,YAAY,IAAIE,CAAG,GANpC,IAAMsB,EAANxB,EAiGP,MAAMyB,EAAUD,EAAa"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/externalBlocStore.ts","../src/useBloc.tsx"],"sourcesContent":["import { BlocGeneric, BlocHookDependencyArrayFn, BlocState } from 'blac';\n\nexport interface ExternalStore<\n B extends BlocGeneric<any, any>,\n S extends BlocState<B>,\n> {\n subscribe: (onStoreChange: () => void) => () => void;\n getSnapshot: () => S;\n getServerSnapshot?: () => S;\n}\n\nconst externalBlocStore = <\n B extends BlocGeneric<any, any>,\n S extends BlocState<B>,\n>(\n bloc: B,\n dependencyArray: BlocHookDependencyArrayFn<InstanceType<any>>,\n): ExternalStore<B, S> => {\n return {\n subscribe: (listener: (state: S) => void) => {\n const unSub = bloc.addSubscriber({\n fn: () => {\n try {\n listener(bloc.state);\n } catch (e) {\n console.error({\n e,\n bloc,\n dependencyArray,\n });\n }\n },\n dependencyArray,\n });\n\n return () => {\n unSub();\n };\n },\n getSnapshot: (): S => bloc.state,\n getServerSnapshot: (): S => bloc.state,\n };\n};\n\nexport default externalBlocStore;\n","import {\n Blac,\n BlocBase,\n BlocConstructor,\n BlocGeneric,\n BlocHookDependencyArrayFn,\n BlocInstanceId,\n BlocState,\n InferPropsFromGeneric,\n} from 'blac';\nimport { useId, useLayoutEffect, useMemo, useSyncExternalStore } from 'react';\nimport externalBlocStore from './externalBlocStore';\n\n// export type BlocHookData<B extends BlocBase<S>, S> = [\n// value: ValueType<B>,\n// instance: B,\n// ];\n\ntype HookTypes<B extends BlocConstructor<BlocGeneric>> = [\n BlocState<InstanceType<B>>,\n InstanceType<B>,\n];\n\n// type BlocHookData<B extends BlocBase<S>, S> = [S, InstanceType<B>]; // B is the bloc class, S is the state of the bloc\n// type UseBlocClassResult<B, S> = BlocHookData<B, S>;\n\nexport interface BlocHookOptions<B extends BlocGeneric<any, any>> {\n id?: string;\n dependencySelector?: BlocHookDependencyArrayFn<B>;\n props?: InferPropsFromGeneric<B>;\n inferStateUsage?: boolean;\n}\n\nexport class UseBlocClass {\n static ridUsedKeys: Map<string, Set<string>> = new Map();\n static getUsedKeys = (rid: string): Set<string> => {\n if (!UseBlocClass.ridUsedKeys.has(rid)) {\n UseBlocClass.ridUsedKeys.set(rid, new Set());\n }\n return UseBlocClass.ridUsedKeys.get(rid) as Set<string>;\n };\n\n static useBloc<\n B extends BlocConstructor<BlocGeneric>,\n O extends BlocHookOptions<InstanceType<B>>,\n >(bloc: B, options?: O): HookTypes<B> {\n const rid = useId();\n const usedKeys = UseBlocClass.getUsedKeys(rid);\n\n // default options\n let dependencyArray: BlocHookDependencyArrayFn<InstanceType<B>> =\n options?.inferStateUsage\n ? (newState) => {\n if (typeof newState !== 'object') {\n return [newState] as unknown[];\n }\n\n const used: string[] = [];\n for (const key of usedKeys) {\n if (key in newState) {\n used.push(newState[key as keyof typeof newState]);\n }\n }\n return used;\n }\n : (s) => [s];\n let blocId: BlocInstanceId | undefined;\n let props: ConstructorParameters<BlocConstructor<B>> | undefined;\n\n if (typeof options === 'object') {\n dependencyArray = options.dependencySelector ?? dependencyArray;\n blocId = options.id;\n props = options.props ?? props;\n }\n\n const base = bloc as unknown as BlocBase<B, O['props']>;\n const isIsolated = base.isolated;\n if (isIsolated) {\n blocId = rid;\n }\n\n const resolvedBloc = Blac.getInstance().getBloc(bloc, {\n id: blocId,\n props: props as any,\n reconnect: false,\n }) as InstanceType<B>;\n\n if (!resolvedBloc) {\n throw new Error(`useBloc: could not resolve: ${bloc.name || bloc}`);\n }\n\n const { subscribe, getSnapshot, getServerSnapshot } = useMemo(\n () => externalBlocStore(resolvedBloc, dependencyArray),\n [resolvedBloc.createdAt],\n );\n\n const state = useSyncExternalStore<BlocState<InstanceType<B>>>(\n subscribe,\n getSnapshot,\n getServerSnapshot,\n );\n\n const currentRenderUsedKeys = new Set<string>();\n const returnState: BlocState<InstanceType<B>> = useMemo(() => {\n try {\n if (options?.inferStateUsage && typeof state === 'object') {\n return new Proxy(state as any, {\n get(target, prop) {\n usedKeys.add(prop as string);\n currentRenderUsedKeys.add(prop as string);\n return Reflect.get(target, prop);\n },\n });\n }\n } catch (error) {\n Blac.instance.log('useBloc Error', error);\n }\n return state;\n }, [state]);\n\n useLayoutEffect(() => {\n UseBlocClass.getUsedKeys(rid).clear();\n for (const key of currentRenderUsedKeys) {\n UseBlocClass.getUsedKeys(rid).add(key);\n }\n }, [currentRenderUsedKeys, rid]);\n\n return [returnState, resolvedBloc];\n }\n}\n\nconst useBloc = UseBlocClass.useBloc;\n\nexport default useBloc;\n"],"names":["externalBlocStore","bloc","dependencyArray","listener","unSub","e","_UseBlocClass","options","rid","useId","usedKeys","newState","used","key","s","blocId","props","resolvedBloc","Blac","subscribe","getSnapshot","getServerSnapshot","useMemo","state","useSyncExternalStore","currentRenderUsedKeys","returnState","target","prop","error","useLayoutEffect","__publicField","UseBlocClass","useBloc"],"mappings":"+RAWMA,EAAoB,CAIxBC,EACAC,KAEO,CACL,UAAYC,GAAiC,CACrC,MAAAC,EAAQH,EAAK,cAAc,CAC/B,GAAI,IAAM,CACJ,GAAA,CACFE,EAASF,EAAK,KAAK,QACZI,EAAG,CACV,QAAQ,MAAM,CACZ,EAAAA,EACA,KAAAJ,EACA,gBAAAC,CAAA,CACD,CACH,CACF,EACA,gBAAAA,CAAA,CACD,EAED,MAAO,IAAM,CACLE,GAAA,CAEV,EACA,YAAa,IAASH,EAAK,MAC3B,kBAAmB,IAASA,EAAK,KAAA,GCPxBK,EAAN,MAAMA,CAAa,CASxB,OAAO,QAGLL,EAASM,EAA2B,CACpC,MAAMC,EAAMC,EAAAA,QACNC,EAAWJ,EAAa,YAAYE,CAAG,EAG7C,IAAIN,EACFK,GAAA,MAAAA,EAAS,gBACJI,GAAa,CACR,GAAA,OAAOA,GAAa,SACtB,MAAO,CAACA,CAAQ,EAGlB,MAAMC,EAAiB,CAAA,EACvB,UAAWC,KAAOH,EACZG,KAAOF,GACJC,EAAA,KAAKD,EAASE,CAA4B,CAAC,EAG7C,OAAAD,CAAA,EAERE,GAAM,CAACA,CAAC,EACXC,EACAC,EAEA,OAAOT,GAAY,WACrBL,EAAkBK,EAAQ,oBAAsBL,EAChDa,EAASR,EAAQ,GACjBS,EAAQT,EAAQ,OAASS,GAGdf,EACW,WAEbc,EAAAP,GAGX,MAAMS,EAAeC,EAAA,KAAK,YAAY,EAAE,QAAQjB,EAAM,CACpD,GAAIc,EACJ,MAAAC,EACA,UAAW,EAAA,CACZ,EAED,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,+BAA+BhB,EAAK,MAAQA,CAAI,EAAE,EAGpE,KAAM,CAAE,UAAAkB,EAAW,YAAAC,EAAa,kBAAAC,CAAsB,EAAAC,EAAA,QACpD,IAAMtB,EAAkBiB,EAAcf,CAAe,EACrD,CAACe,EAAa,SAAS,CAAA,EAGnBM,EAAQC,EAAA,qBACZL,EACAC,EACAC,CAAA,EAGII,MAA4B,IAC5BC,EAA0CJ,EAAAA,QAAQ,IAAM,CACxD,GAAA,CACF,GAAIf,GAAA,MAAAA,EAAS,iBAAmB,OAAOgB,GAAU,SACxC,OAAA,IAAI,MAAMA,EAAc,CAC7B,IAAII,EAAQC,EAAM,CAChB,OAAAlB,EAAS,IAAIkB,CAAc,EAC3BH,EAAsB,IAAIG,CAAc,EACjC,QAAQ,IAAID,EAAQC,CAAI,CACjC,CAAA,CACD,QAEIC,EAAO,CACTX,EAAAA,KAAA,SAAS,IAAI,gBAAiBW,CAAK,CAC1C,CACO,OAAAN,CAAA,EACN,CAACA,CAAK,CAAC,EAEVO,OAAAA,EAAAA,gBAAgB,IAAM,CACPxB,EAAA,YAAYE,CAAG,EAAE,MAAM,EACpC,UAAWK,KAAOY,EAChBnB,EAAa,YAAYE,CAAG,EAAE,IAAIK,CAAG,CACvC,EACC,CAACY,EAAuBjB,CAAG,CAAC,EAExB,CAACkB,EAAaT,CAAY,CACnC,CACF,EA/FEc,EADWzB,EACJ,cAAwC,IAAI,KACnDyB,EAFWzB,EAEJ,cAAeE,IACfF,EAAa,YAAY,IAAIE,CAAG,GACnCF,EAAa,YAAY,IAAIE,EAAK,IAAI,GAAK,EAEtCF,EAAa,YAAY,IAAIE,CAAG,IANpC,IAAMwB,EAAN1B,EAkGP,MAAM2B,EAAUD,EAAa"}
package/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import { default as externalBlocStore } from './externalBlocStore';
2
+ import { default as useBloc } from './useBloc';
3
+
4
+ export { externalBlocStore, useBloc };
package/index.es.js CHANGED
@@ -1,15 +1,18 @@
1
+ var v = Object.defineProperty;
2
+ var x = (s, e, t) => e in s ? v(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t;
3
+ var i = (s, e, t) => x(s, typeof e != "symbol" ? e + "" : e, t);
1
4
  import { Blac as h } from "blac";
2
- import { useId as U, useMemo as p, useSyncExternalStore as I, useLayoutEffect as v } from "react";
3
- const x = (c, e) => ({
4
- subscribe: (o) => {
5
- const r = c.addSubscriber({
5
+ import { useId as E, useMemo as U, useSyncExternalStore as j, useLayoutEffect as w } from "react";
6
+ const k = (s, e) => ({
7
+ subscribe: (t) => {
8
+ const n = s.addSubscriber({
6
9
  fn: () => {
7
10
  try {
8
- o(c.state);
9
- } catch (d) {
11
+ t(s.state);
12
+ } catch (a) {
10
13
  console.error({
11
- e: d,
12
- bloc: c,
14
+ e: a,
15
+ bloc: s,
13
16
  dependencyArray: e
14
17
  });
15
18
  }
@@ -17,62 +20,62 @@ const x = (c, e) => ({
17
20
  dependencyArray: e
18
21
  });
19
22
  return () => {
20
- r();
23
+ n();
21
24
  };
22
25
  },
23
- getSnapshot: () => c.state,
24
- getServerSnapshot: () => c.state
25
- }), s = class s {
26
- static useBloc(e, o) {
27
- const r = U(), d = s.getUsedKeys(r);
28
- let i = (t) => {
29
- if (typeof t != "object")
30
- return [t];
31
- const n = [];
32
- for (const S of d)
33
- S in t && n.push(t[S]);
34
- return n;
35
- }, f, y;
36
- typeof o == "object" && (i = o.dependencySelector ?? i, f = o.id, y = o.props ?? y), e.isolated && (f = r);
37
- const a = h.getInstance().getBloc(e, {
38
- id: f,
39
- props: y,
26
+ getSnapshot: () => s.state,
27
+ getServerSnapshot: () => s.state
28
+ }), c = class c {
29
+ static useBloc(e, t) {
30
+ const n = E(), a = c.getUsedKeys(n);
31
+ let f = t != null && t.inferStateUsage ? (r) => {
32
+ if (typeof r != "object")
33
+ return [r];
34
+ const d = [];
35
+ for (const K of a)
36
+ K in r && d.push(r[K]);
37
+ return d;
38
+ } : (r) => [r], y, g;
39
+ typeof t == "object" && (f = t.dependencySelector ?? f, y = t.id, g = t.props ?? g), e.isolated && (y = n);
40
+ const u = h.getInstance().getBloc(e, {
41
+ id: y,
42
+ props: g,
40
43
  reconnect: !1
41
44
  });
42
- if (!a)
45
+ if (!u)
43
46
  throw new Error(`useBloc: could not resolve: ${e.name || e}`);
44
- const { subscribe: K, getSnapshot: b, getServerSnapshot: m } = p(
45
- () => x(a, i),
46
- [a.createdAt]
47
- ), u = I(
48
- K,
47
+ const { subscribe: b, getSnapshot: m, getServerSnapshot: B } = U(
48
+ () => k(u, f),
49
+ [u.createdAt]
50
+ ), o = j(
49
51
  b,
50
- m
51
- ), l = /* @__PURE__ */ new Set(), B = p(() => {
52
+ m,
53
+ B
54
+ ), l = /* @__PURE__ */ new Set(), I = U(() => {
52
55
  try {
53
- if (typeof u == "object")
54
- return new Proxy(u, {
55
- get(t, n) {
56
- return d.add(n), l.add(n), Reflect.get(t, n);
56
+ if (t != null && t.inferStateUsage && typeof o == "object")
57
+ return new Proxy(o, {
58
+ get(r, d) {
59
+ return a.add(d), l.add(d), Reflect.get(r, d);
57
60
  }
58
61
  });
59
- } catch (t) {
60
- h.instance.log("useBloc Error", t);
62
+ } catch (r) {
63
+ h.instance.log("useBloc Error", r);
61
64
  }
62
- return u;
63
- }, [u]);
64
- return v(() => {
65
- s.getUsedKeys(r).clear();
66
- for (const t of l)
67
- s.getUsedKeys(r).add(t);
68
- }, [l, r]), [B, a];
65
+ return o;
66
+ }, [o]);
67
+ return w(() => {
68
+ c.getUsedKeys(n).clear();
69
+ for (const r of l)
70
+ c.getUsedKeys(n).add(r);
71
+ }, [l, n]), [I, u];
69
72
  }
70
73
  };
71
- s.ridUsedKeys = /* @__PURE__ */ new Map(), s.getUsedKeys = (e) => (s.ridUsedKeys.has(e) || s.ridUsedKeys.set(e, /* @__PURE__ */ new Set()), s.ridUsedKeys.get(e));
72
- let g = s;
73
- const M = g.useBloc;
74
+ i(c, "ridUsedKeys", /* @__PURE__ */ new Map()), i(c, "getUsedKeys", (e) => (c.ridUsedKeys.has(e) || c.ridUsedKeys.set(e, /* @__PURE__ */ new Set()), c.ridUsedKeys.get(e)));
75
+ let S = c;
76
+ const $ = S.useBloc;
74
77
  export {
75
- x as externalBlocStore,
76
- M as useBloc
78
+ k as externalBlocStore,
79
+ $ as useBloc
77
80
  };
78
81
  //# sourceMappingURL=index.es.js.map
package/index.es.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/externalBlocStore.ts","../src/useBloc.tsx"],"sourcesContent":["import { BlocGeneric, BlocHookDependencyArrayFn, BlocState } from 'blac';\n\nexport interface ExternalStore<\n B extends BlocGeneric<any, any>,\n S extends BlocState<B>,\n> {\n subscribe: (onStoreChange: () => void) => () => void;\n getSnapshot: () => S;\n getServerSnapshot?: () => S;\n}\n\nconst externalBlocStore = <\n B extends BlocGeneric<any, any>,\n S extends BlocState<B>,\n>(\n bloc: B,\n dependencyArray: BlocHookDependencyArrayFn<InstanceType<any>>,\n): ExternalStore<B, S> => {\n return {\n subscribe: (listener: (state: S) => void) => {\n const unSub = bloc.addSubscriber({\n fn: () => {\n try {\n listener(bloc.state);\n } catch (e) {\n console.error({\n e,\n bloc,\n dependencyArray,\n });\n }\n },\n dependencyArray,\n });\n\n return () => {\n unSub();\n };\n },\n getSnapshot: (): S => bloc.state,\n getServerSnapshot: (): S => bloc.state,\n };\n};\n\nexport default externalBlocStore;\n","import {\n Blac,\n BlocBase,\n BlocConstructor,\n BlocGeneric,\n BlocHookDependencyArrayFn,\n BlocInstanceId,\n BlocState,\n InferPropsFromGeneric,\n} from 'blac';\nimport { useId, useLayoutEffect, useMemo, useSyncExternalStore } from 'react';\nimport externalBlocStore from './externalBlocStore';\n\n// export type BlocHookData<B extends BlocBase<S>, S> = [\n// value: ValueType<B>,\n// instance: B,\n// ];\n\ntype HookTypes<B extends BlocConstructor<BlocGeneric>> = [\n BlocState<InstanceType<B>>,\n InstanceType<B>,\n];\n\n// type BlocHookData<B extends BlocBase<S>, S> = [S, InstanceType<B>]; // B is the bloc class, S is the state of the bloc\n// type UseBlocClassResult<B, S> = BlocHookData<B, S>;\n\nexport interface BlocHookOptions<B extends BlocGeneric<any, any>> {\n id?: string;\n dependencySelector?: BlocHookDependencyArrayFn<B>;\n props?: InferPropsFromGeneric<B>;\n}\n\nexport class UseBlocClass {\n static ridUsedKeys: Map<string, Set<string>> = new Map();\n static getUsedKeys = (rid: string): Set<string> => {\n if (!UseBlocClass.ridUsedKeys.has(rid)) {\n UseBlocClass.ridUsedKeys.set(rid, new Set());\n }\n return UseBlocClass.ridUsedKeys.get(rid) as Set<string>;\n };\n\n static useBloc<\n B extends BlocConstructor<BlocGeneric>,\n O extends BlocHookOptions<InstanceType<B>>,\n >(bloc: B, options?: O): HookTypes<B> {\n const rid = useId();\n const usedKeys = UseBlocClass.getUsedKeys(rid);\n\n // default options\n let dependencyArray: BlocHookDependencyArrayFn<InstanceType<B>> = (\n newState,\n ) => {\n if (typeof newState !== 'object') {\n return [newState] as unknown[];\n }\n\n const used: string[] = [];\n for (const key of usedKeys) {\n if (key in newState) {\n used.push(newState[key as keyof typeof newState]);\n }\n }\n return used;\n };\n let blocId: BlocInstanceId | undefined;\n let props: ConstructorParameters<BlocConstructor<B>> | undefined;\n\n if (typeof options === 'object') {\n dependencyArray = options.dependencySelector ?? dependencyArray;\n blocId = options.id;\n props = options.props ?? props;\n }\n\n const base = bloc as unknown as BlocBase<B, O['props']>;\n const isIsolated = base.isolated;\n if (isIsolated) {\n blocId = rid;\n }\n\n const resolvedBloc = Blac.getInstance().getBloc(bloc, {\n id: blocId,\n props: props as any,\n reconnect: false,\n }) as InstanceType<B>;\n\n if (!resolvedBloc) {\n throw new Error(`useBloc: could not resolve: ${bloc.name || bloc}`);\n }\n\n const { subscribe, getSnapshot, getServerSnapshot } = useMemo(\n () => externalBlocStore(resolvedBloc, dependencyArray),\n [resolvedBloc.createdAt],\n );\n\n const state = useSyncExternalStore<BlocState<InstanceType<B>>>(\n subscribe,\n getSnapshot,\n getServerSnapshot,\n );\n\n const currentRenderUsedKeys = new Set<string>();\n const returnState: BlocState<InstanceType<B>> = useMemo(() => {\n try {\n if (typeof state === 'object') {\n return new Proxy(state as any, {\n get(target, prop) {\n usedKeys.add(prop as string);\n currentRenderUsedKeys.add(prop as string);\n return Reflect.get(target, prop);\n },\n });\n }\n } catch (error) {\n Blac.instance.log('useBloc Error', error);\n }\n return state;\n }, [state]);\n\n useLayoutEffect(() => {\n UseBlocClass.getUsedKeys(rid).clear();\n for (const key of currentRenderUsedKeys) {\n UseBlocClass.getUsedKeys(rid).add(key);\n }\n }, [currentRenderUsedKeys, rid]);\n\n return [returnState, resolvedBloc];\n }\n}\n\nconst useBloc = UseBlocClass.useBloc;\n\nexport default useBloc;\n"],"names":["externalBlocStore","bloc","dependencyArray","listener","unSub","e","_UseBlocClass","options","rid","useId","usedKeys","newState","used","key","blocId","props","resolvedBloc","Blac","subscribe","getSnapshot","getServerSnapshot","useMemo","state","useSyncExternalStore","currentRenderUsedKeys","returnState","target","prop","error","useLayoutEffect","UseBlocClass","useBloc"],"mappings":";;AAWM,MAAAA,IAAoB,CAIxBC,GACAC,OAEO;AAAA,EACL,WAAW,CAACC,MAAiC;AACrC,UAAAC,IAAQH,EAAK,cAAc;AAAA,MAC/B,IAAI,MAAM;AACJ,YAAA;AACF,UAAAE,EAASF,EAAK,KAAK;AAAA,iBACZI,GAAG;AACV,kBAAQ,MAAM;AAAA,YACZ,GAAAA;AAAA,YACA,MAAAJ;AAAA,YACA,iBAAAC;AAAA,UAAA,CACD;AAAA,QACH;AAAA,MACF;AAAA,MACA,iBAAAA;AAAA,IAAA,CACD;AAED,WAAO,MAAM;AACL,MAAAE;IAAA;AAAA,EAEV;AAAA,EACA,aAAa,MAASH,EAAK;AAAA,EAC3B,mBAAmB,MAASA,EAAK;AAAA,ICRxBK,IAAN,MAAMA,EAAa;AAAA,EASxB,OAAO,QAGLL,GAASM,GAA2B;AACpC,UAAMC,IAAMC,KACNC,IAAWJ,EAAa,YAAYE,CAAG;AAGzC,QAAAN,IAA8D,CAChES,MACG;AACC,UAAA,OAAOA,KAAa;AACtB,eAAO,CAACA,CAAQ;AAGlB,YAAMC,IAAiB,CAAA;AACvB,iBAAWC,KAAOH;AAChB,QAAIG,KAAOF,KACJC,EAAA,KAAKD,EAASE,CAA4B,CAAC;AAG7C,aAAAD;AAAA,IAAA,GAELE,GACAC;AAEA,IAAA,OAAOR,KAAY,aACrBL,IAAkBK,EAAQ,sBAAsBL,GAChDY,IAASP,EAAQ,IACjBQ,IAAQR,EAAQ,SAASQ,IAGdd,EACW,aAEba,IAAAN;AAGX,UAAMQ,IAAeC,EAAK,YAAY,EAAE,QAAQhB,GAAM;AAAA,MACpD,IAAIa;AAAA,MACJ,OAAAC;AAAA,MACA,WAAW;AAAA,IAAA,CACZ;AAED,QAAI,CAACC;AACH,YAAM,IAAI,MAAM,+BAA+Bf,EAAK,QAAQA,CAAI,EAAE;AAGpE,UAAM,EAAE,WAAAiB,GAAW,aAAAC,GAAa,mBAAAC,EAAsB,IAAAC;AAAA,MACpD,MAAMrB,EAAkBgB,GAAcd,CAAe;AAAA,MACrD,CAACc,EAAa,SAAS;AAAA,IAAA,GAGnBM,IAAQC;AAAA,MACZL;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA,GAGII,wBAA4B,OAC5BC,IAA0CJ,EAAQ,MAAM;AACxD,UAAA;AACE,YAAA,OAAOC,KAAU;AACZ,iBAAA,IAAI,MAAMA,GAAc;AAAA,YAC7B,IAAII,GAAQC,GAAM;AAChB,qBAAAjB,EAAS,IAAIiB,CAAc,GAC3BH,EAAsB,IAAIG,CAAc,GACjC,QAAQ,IAAID,GAAQC,CAAI;AAAA,YACjC;AAAA,UAAA,CACD;AAAA,eAEIC,GAAO;AACT,QAAAX,EAAA,SAAS,IAAI,iBAAiBW,CAAK;AAAA,MAC1C;AACO,aAAAN;AAAA,IAAA,GACN,CAACA,CAAK,CAAC;AAEV,WAAAO,EAAgB,MAAM;AACP,MAAAvB,EAAA,YAAYE,CAAG,EAAE,MAAM;AACpC,iBAAWK,KAAOW;AAChB,QAAAlB,EAAa,YAAYE,CAAG,EAAE,IAAIK,CAAG;AAAA,IACvC,GACC,CAACW,GAAuBhB,CAAG,CAAC,GAExB,CAACiB,GAAaT,CAAY;AAAA,EACnC;AACF;AA9FSV,EAAA,kCAA4C,OAC5CA,EAAA,cAAc,CAACE,OACfF,EAAa,YAAY,IAAIE,CAAG,KACnCF,EAAa,YAAY,IAAIE,GAAK,oBAAI,IAAK,CAAA,GAEtCF,EAAa,YAAY,IAAIE,CAAG;AANpC,IAAMsB,IAANxB;AAiGP,MAAMyB,IAAUD,EAAa;"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/externalBlocStore.ts","../src/useBloc.tsx"],"sourcesContent":["import { BlocGeneric, BlocHookDependencyArrayFn, BlocState } from 'blac';\n\nexport interface ExternalStore<\n B extends BlocGeneric<any, any>,\n S extends BlocState<B>,\n> {\n subscribe: (onStoreChange: () => void) => () => void;\n getSnapshot: () => S;\n getServerSnapshot?: () => S;\n}\n\nconst externalBlocStore = <\n B extends BlocGeneric<any, any>,\n S extends BlocState<B>,\n>(\n bloc: B,\n dependencyArray: BlocHookDependencyArrayFn<InstanceType<any>>,\n): ExternalStore<B, S> => {\n return {\n subscribe: (listener: (state: S) => void) => {\n const unSub = bloc.addSubscriber({\n fn: () => {\n try {\n listener(bloc.state);\n } catch (e) {\n console.error({\n e,\n bloc,\n dependencyArray,\n });\n }\n },\n dependencyArray,\n });\n\n return () => {\n unSub();\n };\n },\n getSnapshot: (): S => bloc.state,\n getServerSnapshot: (): S => bloc.state,\n };\n};\n\nexport default externalBlocStore;\n","import {\n Blac,\n BlocBase,\n BlocConstructor,\n BlocGeneric,\n BlocHookDependencyArrayFn,\n BlocInstanceId,\n BlocState,\n InferPropsFromGeneric,\n} from 'blac';\nimport { useId, useLayoutEffect, useMemo, useSyncExternalStore } from 'react';\nimport externalBlocStore from './externalBlocStore';\n\n// export type BlocHookData<B extends BlocBase<S>, S> = [\n// value: ValueType<B>,\n// instance: B,\n// ];\n\ntype HookTypes<B extends BlocConstructor<BlocGeneric>> = [\n BlocState<InstanceType<B>>,\n InstanceType<B>,\n];\n\n// type BlocHookData<B extends BlocBase<S>, S> = [S, InstanceType<B>]; // B is the bloc class, S is the state of the bloc\n// type UseBlocClassResult<B, S> = BlocHookData<B, S>;\n\nexport interface BlocHookOptions<B extends BlocGeneric<any, any>> {\n id?: string;\n dependencySelector?: BlocHookDependencyArrayFn<B>;\n props?: InferPropsFromGeneric<B>;\n inferStateUsage?: boolean;\n}\n\nexport class UseBlocClass {\n static ridUsedKeys: Map<string, Set<string>> = new Map();\n static getUsedKeys = (rid: string): Set<string> => {\n if (!UseBlocClass.ridUsedKeys.has(rid)) {\n UseBlocClass.ridUsedKeys.set(rid, new Set());\n }\n return UseBlocClass.ridUsedKeys.get(rid) as Set<string>;\n };\n\n static useBloc<\n B extends BlocConstructor<BlocGeneric>,\n O extends BlocHookOptions<InstanceType<B>>,\n >(bloc: B, options?: O): HookTypes<B> {\n const rid = useId();\n const usedKeys = UseBlocClass.getUsedKeys(rid);\n\n // default options\n let dependencyArray: BlocHookDependencyArrayFn<InstanceType<B>> =\n options?.inferStateUsage\n ? (newState) => {\n if (typeof newState !== 'object') {\n return [newState] as unknown[];\n }\n\n const used: string[] = [];\n for (const key of usedKeys) {\n if (key in newState) {\n used.push(newState[key as keyof typeof newState]);\n }\n }\n return used;\n }\n : (s) => [s];\n let blocId: BlocInstanceId | undefined;\n let props: ConstructorParameters<BlocConstructor<B>> | undefined;\n\n if (typeof options === 'object') {\n dependencyArray = options.dependencySelector ?? dependencyArray;\n blocId = options.id;\n props = options.props ?? props;\n }\n\n const base = bloc as unknown as BlocBase<B, O['props']>;\n const isIsolated = base.isolated;\n if (isIsolated) {\n blocId = rid;\n }\n\n const resolvedBloc = Blac.getInstance().getBloc(bloc, {\n id: blocId,\n props: props as any,\n reconnect: false,\n }) as InstanceType<B>;\n\n if (!resolvedBloc) {\n throw new Error(`useBloc: could not resolve: ${bloc.name || bloc}`);\n }\n\n const { subscribe, getSnapshot, getServerSnapshot } = useMemo(\n () => externalBlocStore(resolvedBloc, dependencyArray),\n [resolvedBloc.createdAt],\n );\n\n const state = useSyncExternalStore<BlocState<InstanceType<B>>>(\n subscribe,\n getSnapshot,\n getServerSnapshot,\n );\n\n const currentRenderUsedKeys = new Set<string>();\n const returnState: BlocState<InstanceType<B>> = useMemo(() => {\n try {\n if (options?.inferStateUsage && typeof state === 'object') {\n return new Proxy(state as any, {\n get(target, prop) {\n usedKeys.add(prop as string);\n currentRenderUsedKeys.add(prop as string);\n return Reflect.get(target, prop);\n },\n });\n }\n } catch (error) {\n Blac.instance.log('useBloc Error', error);\n }\n return state;\n }, [state]);\n\n useLayoutEffect(() => {\n UseBlocClass.getUsedKeys(rid).clear();\n for (const key of currentRenderUsedKeys) {\n UseBlocClass.getUsedKeys(rid).add(key);\n }\n }, [currentRenderUsedKeys, rid]);\n\n return [returnState, resolvedBloc];\n }\n}\n\nconst useBloc = UseBlocClass.useBloc;\n\nexport default useBloc;\n"],"names":["externalBlocStore","bloc","dependencyArray","listener","unSub","e","_UseBlocClass","options","rid","useId","usedKeys","newState","used","key","s","blocId","props","resolvedBloc","Blac","subscribe","getSnapshot","getServerSnapshot","useMemo","state","useSyncExternalStore","currentRenderUsedKeys","returnState","target","prop","error","useLayoutEffect","__publicField","UseBlocClass","useBloc"],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@blac/react",
3
- "version": "0.0.50",
3
+ "version": "0.0.52",
4
4
  "license": "MIT",
5
5
  "main": "index.cjs.js",
6
6
  "module": "index.es.js",
7
- "typings": "src/index.d.ts",
8
- "types": "src/index.d.ts",
7
+ "typings": "index.d.ts",
8
+ "types": "index.d.ts",
9
9
  "keywords": [
10
10
  "react",
11
11
  "typescript",
@@ -36,8 +36,15 @@
36
36
  "@types/react": "^18.3.3",
37
37
  "@types/react-dom": "^18.3.0",
38
38
  "@vitest/browser": "^1.6.0",
39
- "jsdom": "^24.1.0",
40
39
  "react": "^18.3.1",
40
+ "@typescript-eslint/eslint-plugin": "^7.13.1",
41
+ "@typescript-eslint/parser": "^7.13.1",
42
+ "@vitejs/plugin-react-refresh": "^1.3.6",
43
+ "@vitest/coverage-v8": "^1.6.0",
44
+ "eslint": "^9.5.0",
45
+ "jsdom": "^24.1.0",
46
+ "prettier": "^3.3.2",
47
+ "typescript": "^5.4.5",
41
48
  "vite-plugin-dts": "^3.9.1",
42
49
  "vitest": "^1.6.0"
43
50
  }
package/useBloc.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import { BlocConstructor, BlocGeneric, BlocHookDependencyArrayFn, BlocState, InferPropsFromGeneric } from 'blac';
2
+
3
+ type HookTypes<B extends BlocConstructor<BlocGeneric>> = [
4
+ BlocState<InstanceType<B>>,
5
+ InstanceType<B>
6
+ ];
7
+ export interface BlocHookOptions<B extends BlocGeneric<any, any>> {
8
+ id?: string;
9
+ dependencySelector?: BlocHookDependencyArrayFn<B>;
10
+ props?: InferPropsFromGeneric<B>;
11
+ inferStateUsage?: boolean;
12
+ }
13
+ export declare class UseBlocClass {
14
+ static ridUsedKeys: Map<string, Set<string>>;
15
+ static getUsedKeys: (rid: string) => Set<string>;
16
+ static useBloc<B extends BlocConstructor<BlocGeneric>, O extends BlocHookOptions<InstanceType<B>>>(bloc: B, options?: O): HookTypes<B>;
17
+ }
18
+ declare const useBloc: typeof UseBlocClass.useBloc;
19
+ export default useBloc;