@blac/react 0.0.44 → 0.0.46

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.
package/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("blac"),d=require("react"),h=(c,s)=>{let r=s(c.state);return{subscribe:f=>{const i=c.addSubscriber(l=>{try{const t=s(l)??[];let e=!0;for(let u=0;u<t.length;u++)if(t[u]!==r[u]){e=!1;break}e||(r=t,f())}catch(t){console.error({e:t,bloc:c,dependencyArray:s,lastDependencyCheck:r})}});return()=>{i()}},getSnapshot:()=>c.state,getServerSnapshot:()=>c.state}};class I{static useBloc(s,r){const f=d.useId(),i=[];let l=n=>{if(typeof n!="object")return[n];const a=[];for(const g in n)i.includes(g)&&a.push(n[g]);return a},t,e;typeof r=="object"&&(l=r.dependencySelector??l,t=r.id,e=r.props??e),s.isolated&&(t=f);const o=v.Blac.getInstance().getBloc(s,{id:t,props:e,reconnect:!1});if(!o)throw new Error(`useBloc: could not resolve: ${s.name||s}`);const{subscribe:y,getSnapshot:B,getServerSnapshot:b}=d.useMemo(()=>h(o,l),[o.createdAt]),S=d.useSyncExternalStore(y,B,b);d.useEffect(()=>{(o.isolated&&e||e&&!o.props)&&(o.props=e)},[e]);let p=S;return typeof S=="object"&&(p=new Proxy(S,{get(n,a){return i.push(a),Reflect.get(n,a)}})),[p,o]}}const j=I.useBloc;exports.externalBlocStore=h;exports.useBloc=j;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("blac"),S=require("react"),y=(c,t)=>{let r=t(c.state);return{subscribe:d=>{const u=c.addSubscriber(n=>{try{const e=t(n)??[];let o=!0;for(let l=0;l<e.length;l++)if(e[l]!==r[l]){o=!1;break}o||(r=e,d())}catch(e){console.error({e,bloc:c,dependencyArray:t,lastDependencyCheck:r})}});return()=>{u()}},getSnapshot:()=>c.state,getServerSnapshot:()=>c.state}};class I{static useBloc(t,r){const d=S.useId(),u=[];let n=s=>{if(typeof s!="object")return[s];const a=[];for(const g in s)u.includes(g)&&a.push(s[g]);return a},e,o;typeof r=="object"&&(n=r.dependencySelector??n,e=r.id,o=r.props??o),t.isolated&&(e=d);const i=h.Blac.getInstance().getBloc(t,{id:e,props:o,reconnect:!1});if(!i)throw new Error(`useBloc: could not resolve: ${t.name||t}`);const{subscribe:p,getSnapshot:b,getServerSnapshot:v}=S.useMemo(()=>y(i,n),[i.createdAt]),f=S.useSyncExternalStore(p,b,v);let B=f;try{typeof f=="object"&&(B=new Proxy(f,{get(s,a){return u.push(a),Reflect.get(s,a)}}))}catch(s){h.Blac.instance.log("useBloc Error",s)}return[B,i]}}const j=I.useBloc;exports.externalBlocStore=y;exports.useBloc=j;
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 { BlocBase, BlocGeneric, InferStateFromGeneric } from 'blac';\n\nexport interface ExternalStore<\n B extends BlocGeneric<any, any>,\n S extends InferStateFromGeneric<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 InferStateFromGeneric<B>,\n>(\n bloc: B,\n dependencyArray: (state: S) => unknown[],\n): ExternalStore<B, S> => {\n let lastDependencyCheck = dependencyArray(bloc.state);\n\n return {\n subscribe: (listener: () => void) => {\n const unSub = bloc.addSubscriber((data) => {\n try {\n const newDependencyCheck = dependencyArray(data) ?? [];\n\n let allEqual = true;\n for (let i = 0; i < newDependencyCheck.length; i++) {\n if (newDependencyCheck[i] !== lastDependencyCheck[i]) {\n allEqual = false;\n break;\n }\n }\n\n if (!allEqual) {\n lastDependencyCheck = newDependencyCheck;\n listener();\n }\n } catch (e) {\n console.error({\n e,\n bloc,\n dependencyArray,\n lastDependencyCheck,\n });\n }\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 BlocInstanceId,\n InferPropsFromGeneric,\n InferStateFromGeneric,\n} from 'blac';\nimport { useEffect, useId, 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 InferStateFromGeneric<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 type BlocHookDependencyArrayFn<B extends BlocGeneric<any, any>> = (\n state: InferStateFromGeneric<B>,\n) => unknown[];\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 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: string[] = [];\n // default options\n let dependencyArray: BlocHookDependencyArrayFn<InstanceType<B>> = (\n state,\n ) => {\n if (typeof state !== 'object') {\n return [state] as unknown[];\n }\n\n const used: unknown[] = [];\n for (const key in state) {\n if (usedKeys.includes(key)) {\n used.push(state[key]);\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,\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<InferStateFromGeneric<S>>(\n subscribe,\n getSnapshot,\n getServerSnapshot,\n );\n\n useEffect(() => {\n if ((resolvedBloc.isolated && props) || (props && !resolvedBloc.props)) {\n resolvedBloc.props = props;\n }\n }, [props]);\n\n let returnState = state;\n if (typeof state === 'object') {\n returnState = new Proxy(state, {\n get(target, prop) {\n usedKeys.push(prop as string);\n return Reflect.get(target, prop);\n },\n });\n }\n\n return [returnState, resolvedBloc];\n }\n}\n\nconst useBloc = UseBlocClass.useBloc;\n\nexport default useBloc;\n"],"names":["externalBlocStore","bloc","dependencyArray","lastDependencyCheck","listener","unSub","data","newDependencyCheck","allEqual","i","e","UseBlocClass","options","rid","useId","usedKeys","state","used","key","blocId","props","resolvedBloc","Blac","subscribe","getSnapshot","getServerSnapshot","useMemo","useSyncExternalStore","useEffect","returnState","target","prop","useBloc"],"mappings":"2HAWMA,EAAoB,CAIxBC,EACAC,IACwB,CACpB,IAAAC,EAAsBD,EAAgBD,EAAK,KAAK,EAE7C,MAAA,CACL,UAAYG,GAAyB,CACnC,MAAMC,EAAQJ,EAAK,cAAeK,GAAS,CACrC,GAAA,CACF,MAAMC,EAAqBL,EAAgBI,CAAI,GAAK,CAAA,EAEpD,IAAIE,EAAW,GACf,QAASC,EAAI,EAAGA,EAAIF,EAAmB,OAAQE,IAC7C,GAAIF,EAAmBE,CAAC,IAAMN,EAAoBM,CAAC,EAAG,CACzCD,EAAA,GACX,KACF,CAGGA,IACmBL,EAAAI,EACbH,WAEJM,EAAG,CACV,QAAQ,MAAM,CACZ,EAAAA,EACA,KAAAT,EACA,gBAAAC,EACA,oBAAAC,CAAA,CACD,CACH,CAAA,CACD,EAED,MAAO,IAAM,CACLE,GAAA,CAEV,EACA,YAAa,IAASJ,EAAK,MAC3B,kBAAmB,IAASA,EAAK,KAAA,CAErC,ECpBO,MAAMU,CAAa,CACxB,OAAO,QAGLV,EAASW,EAA2B,CACpC,MAAMC,EAAMC,EAAAA,QACNC,EAAqB,CAAA,EAEvB,IAAAb,EACFc,GACG,CACC,GAAA,OAAOA,GAAU,SACnB,MAAO,CAACA,CAAK,EAGf,MAAMC,EAAkB,CAAA,EACxB,UAAWC,KAAOF,EACZD,EAAS,SAASG,CAAG,GAClBD,EAAA,KAAKD,EAAME,CAAG,CAAC,EAGjB,OAAAD,CAAA,EAELE,EACAC,EAEA,OAAOR,GAAY,WACrBV,EAAkBU,EAAQ,oBAAsBV,EAChDiB,EAASP,EAAQ,GACjBQ,EAAQR,EAAQ,OAASQ,GAGdnB,EACW,WAEbkB,EAAAN,GAGX,MAAMQ,EAAeC,EAAA,KAAK,YAAY,EAAE,QAAQrB,EAAM,CACpD,GAAIkB,EACJ,MAAAC,EACA,UAAW,EAAA,CACZ,EAED,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,+BAA+BpB,EAAK,MAAQA,CAAI,EAAE,EAGpE,KAAM,CAAE,UAAAsB,EAAW,YAAAC,EAAa,kBAAAC,CAAsB,EAAAC,EAAA,QACpD,IAAM1B,EAAkBqB,EAAcnB,CAAe,EACrD,CAACmB,EAAa,SAAS,CAAA,EAGnBL,EAAQW,EAAA,qBACZJ,EACAC,EACAC,CAAA,EAGFG,EAAAA,UAAU,IAAM,EACTP,EAAa,UAAYD,GAAWA,GAAS,CAACC,EAAa,SAC9DA,EAAa,MAAQD,EACvB,EACC,CAACA,CAAK,CAAC,EAEV,IAAIS,EAAcb,EACd,OAAA,OAAOA,GAAU,WACLa,EAAA,IAAI,MAAMb,EAAO,CAC7B,IAAIc,EAAQC,EAAM,CAChB,OAAAhB,EAAS,KAAKgB,CAAc,EACrB,QAAQ,IAAID,EAAQC,CAAI,CACjC,CAAA,CACD,GAGI,CAACF,EAAaR,CAAY,CACnC,CACF,CAEA,MAAMW,EAAUrB,EAAa"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/externalBlocStore.ts","../src/useBloc.tsx"],"sourcesContent":["import { BlocBase, BlocGeneric, InferStateFromGeneric } from 'blac';\n\nexport interface ExternalStore<\n B extends BlocGeneric<any, any>,\n S extends InferStateFromGeneric<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 InferStateFromGeneric<B>,\n>(\n bloc: B,\n dependencyArray: (state: S) => unknown[],\n): ExternalStore<B, S> => {\n let lastDependencyCheck = dependencyArray(bloc.state);\n\n return {\n subscribe: (listener: () => void) => {\n const unSub = bloc.addSubscriber((data) => {\n try {\n const newDependencyCheck = dependencyArray(data) ?? [];\n\n let allEqual = true;\n for (let i = 0; i < newDependencyCheck.length; i++) {\n if (newDependencyCheck[i] !== lastDependencyCheck[i]) {\n allEqual = false;\n break;\n }\n }\n\n if (!allEqual) {\n lastDependencyCheck = newDependencyCheck;\n listener();\n }\n } catch (e) {\n console.error({\n e,\n bloc,\n dependencyArray,\n lastDependencyCheck,\n });\n }\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 BlocInstanceId,\n InferPropsFromGeneric,\n InferStateFromGeneric,\n} from 'blac';\nimport { useEffect, useId, 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 InferStateFromGeneric<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 type BlocHookDependencyArrayFn<B extends BlocGeneric<any, any>> = (\n state: InferStateFromGeneric<B>,\n) => unknown[];\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 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: string[] = [];\n // default options\n let dependencyArray: BlocHookDependencyArrayFn<InstanceType<B>> = (\n state,\n ) => {\n if (typeof state !== 'object') {\n return [state] as unknown[];\n }\n\n const used: unknown[] = [];\n for (const key in state) {\n if (usedKeys.includes(key)) {\n used.push(state[key]);\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,\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<InferStateFromGeneric<S>>(\n subscribe,\n getSnapshot,\n getServerSnapshot,\n );\n\n let returnState = state;\n try {\n if (typeof state === 'object') {\n returnState = new Proxy(state, {\n get(target, prop) {\n usedKeys.push(prop as string);\n return Reflect.get(target, prop);\n },\n });\n }\n } catch (error) {\n Blac.instance.log('useBloc Error', error);\n }\n\n return [returnState, resolvedBloc];\n }\n}\n\nconst useBloc = UseBlocClass.useBloc;\n\nexport default useBloc;\n"],"names":["externalBlocStore","bloc","dependencyArray","lastDependencyCheck","listener","unSub","data","newDependencyCheck","allEqual","i","UseBlocClass","options","rid","useId","usedKeys","state","used","key","blocId","props","resolvedBloc","Blac","subscribe","getSnapshot","getServerSnapshot","useMemo","useSyncExternalStore","returnState","target","prop","error","useBloc"],"mappings":"2HAWMA,EAAoB,CAIxBC,EACAC,IACwB,CACpB,IAAAC,EAAsBD,EAAgBD,EAAK,KAAK,EAE7C,MAAA,CACL,UAAYG,GAAyB,CACnC,MAAMC,EAAQJ,EAAK,cAAeK,GAAS,CACrC,GAAA,CACF,MAAMC,EAAqBL,EAAgBI,CAAI,GAAK,CAAA,EAEpD,IAAIE,EAAW,GACf,QAASC,EAAI,EAAGA,EAAIF,EAAmB,OAAQE,IAC7C,GAAIF,EAAmBE,CAAC,IAAMN,EAAoBM,CAAC,EAAG,CACzCD,EAAA,GACX,KACF,CAGGA,IACmBL,EAAAI,EACbH,WAEJ,EAAG,CACV,QAAQ,MAAM,CACZ,EACA,KAAAH,EACA,gBAAAC,EACA,oBAAAC,CAAA,CACD,CACH,CAAA,CACD,EAED,MAAO,IAAM,CACLE,GAAA,CAEV,EACA,YAAa,IAASJ,EAAK,MAC3B,kBAAmB,IAASA,EAAK,KAAA,CAErC,ECpBO,MAAMS,CAAa,CACxB,OAAO,QAGLT,EAASU,EAA2B,CACpC,MAAMC,EAAMC,EAAAA,QACNC,EAAqB,CAAA,EAEvB,IAAAZ,EACFa,GACG,CACC,GAAA,OAAOA,GAAU,SACnB,MAAO,CAACA,CAAK,EAGf,MAAMC,EAAkB,CAAA,EACxB,UAAWC,KAAOF,EACZD,EAAS,SAASG,CAAG,GAClBD,EAAA,KAAKD,EAAME,CAAG,CAAC,EAGjB,OAAAD,CAAA,EAELE,EACAC,EAEA,OAAOR,GAAY,WACrBT,EAAkBS,EAAQ,oBAAsBT,EAChDgB,EAASP,EAAQ,GACjBQ,EAAQR,EAAQ,OAASQ,GAGdlB,EACW,WAEbiB,EAAAN,GAGX,MAAMQ,EAAeC,EAAA,KAAK,YAAY,EAAE,QAAQpB,EAAM,CACpD,GAAIiB,EACJ,MAAAC,EACA,UAAW,EAAA,CACZ,EAED,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,+BAA+BnB,EAAK,MAAQA,CAAI,EAAE,EAGpE,KAAM,CAAE,UAAAqB,EAAW,YAAAC,EAAa,kBAAAC,CAAsB,EAAAC,EAAA,QACpD,IAAMzB,EAAkBoB,EAAclB,CAAe,EACrD,CAACkB,EAAa,SAAS,CAAA,EAGnBL,EAAQW,EAAA,qBACZJ,EACAC,EACAC,CAAA,EAGF,IAAIG,EAAcZ,EACd,GAAA,CACE,OAAOA,GAAU,WACLY,EAAA,IAAI,MAAMZ,EAAO,CAC7B,IAAIa,EAAQC,EAAM,CAChB,OAAAf,EAAS,KAAKe,CAAc,EACrB,QAAQ,IAAID,EAAQC,CAAI,CACjC,CAAA,CACD,SAEIC,EAAO,CACTT,EAAAA,KAAA,SAAS,IAAI,gBAAiBS,CAAK,CAC1C,CAEO,MAAA,CAACH,EAAaP,CAAY,CACnC,CACF,CAEA,MAAMW,EAAUrB,EAAa"}
package/index.es.js CHANGED
@@ -1,77 +1,79 @@
1
- import { Blac as B } from "blac";
2
- import { useId as b, useMemo as m, useSyncExternalStore as I, useEffect as k } from "react";
3
- const v = (n, s) => {
4
- let r = s(n.state);
1
+ import { Blac as h } from "blac";
2
+ import { useId as b, useMemo as m, useSyncExternalStore as I } from "react";
3
+ const k = (o, t) => {
4
+ let s = t(o.state);
5
5
  return {
6
- subscribe: (f) => {
7
- const i = n.addSubscriber((l) => {
6
+ subscribe: (d) => {
7
+ const u = o.addSubscriber((n) => {
8
8
  try {
9
- const t = s(l) ?? [];
10
- let e = !0;
11
- for (let a = 0; a < t.length; a++)
12
- if (t[a] !== r[a]) {
13
- e = !1;
9
+ const e = t(n) ?? [];
10
+ let c = !0;
11
+ for (let l = 0; l < e.length; l++)
12
+ if (e[l] !== s[l]) {
13
+ c = !1;
14
14
  break;
15
15
  }
16
- e || (r = t, f());
17
- } catch (t) {
16
+ c || (s = e, d());
17
+ } catch (e) {
18
18
  console.error({
19
- e: t,
20
- bloc: n,
21
- dependencyArray: s,
22
- lastDependencyCheck: r
19
+ e,
20
+ bloc: o,
21
+ dependencyArray: t,
22
+ lastDependencyCheck: s
23
23
  });
24
24
  }
25
25
  });
26
26
  return () => {
27
- i();
27
+ u();
28
28
  };
29
29
  },
30
- getSnapshot: () => n.state,
31
- getServerSnapshot: () => n.state
30
+ getSnapshot: () => o.state,
31
+ getServerSnapshot: () => o.state
32
32
  };
33
33
  };
34
- class w {
35
- static useBloc(s, r) {
36
- const f = b(), i = [];
37
- let l = (c) => {
38
- if (typeof c != "object")
39
- return [c];
40
- const u = [];
41
- for (const S in c)
42
- i.includes(S) && u.push(c[S]);
43
- return u;
44
- }, t, e;
45
- typeof r == "object" && (l = r.dependencySelector ?? l, t = r.id, e = r.props ?? e), s.isolated && (t = f);
46
- const o = B.getInstance().getBloc(s, {
47
- id: t,
48
- props: e,
34
+ class v {
35
+ static useBloc(t, s) {
36
+ const d = b(), u = [];
37
+ let n = (r) => {
38
+ if (typeof r != "object")
39
+ return [r];
40
+ const a = [];
41
+ for (const S in r)
42
+ u.includes(S) && a.push(r[S]);
43
+ return a;
44
+ }, e, c;
45
+ typeof s == "object" && (n = s.dependencySelector ?? n, e = s.id, c = s.props ?? c), t.isolated && (e = d);
46
+ const i = h.getInstance().getBloc(t, {
47
+ id: e,
48
+ props: c,
49
49
  reconnect: !1
50
50
  });
51
- if (!o)
52
- throw new Error(`useBloc: could not resolve: ${s.name || s}`);
53
- const { subscribe: h, getSnapshot: g, getServerSnapshot: y } = m(
54
- () => v(o, l),
55
- [o.createdAt]
56
- ), d = I(
57
- h,
51
+ if (!i)
52
+ throw new Error(`useBloc: could not resolve: ${t.name || t}`);
53
+ const { subscribe: g, getSnapshot: y, getServerSnapshot: B } = m(
54
+ () => k(i, n),
55
+ [i.createdAt]
56
+ ), f = I(
58
57
  g,
59
- y
58
+ y,
59
+ B
60
60
  );
61
- k(() => {
62
- (o.isolated && e || e && !o.props) && (o.props = e);
63
- }, [e]);
64
- let p = d;
65
- return typeof d == "object" && (p = new Proxy(d, {
66
- get(c, u) {
67
- return i.push(u), Reflect.get(c, u);
68
- }
69
- })), [p, o];
61
+ let p = f;
62
+ try {
63
+ typeof f == "object" && (p = new Proxy(f, {
64
+ get(r, a) {
65
+ return u.push(a), Reflect.get(r, a);
66
+ }
67
+ }));
68
+ } catch (r) {
69
+ h.instance.log("useBloc Error", r);
70
+ }
71
+ return [p, i];
70
72
  }
71
73
  }
72
- const C = w.useBloc;
74
+ const j = v.useBloc;
73
75
  export {
74
- v as externalBlocStore,
75
- C as useBloc
76
+ k as externalBlocStore,
77
+ j as useBloc
76
78
  };
77
79
  //# 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 { BlocBase, BlocGeneric, InferStateFromGeneric } from 'blac';\n\nexport interface ExternalStore<\n B extends BlocGeneric<any, any>,\n S extends InferStateFromGeneric<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 InferStateFromGeneric<B>,\n>(\n bloc: B,\n dependencyArray: (state: S) => unknown[],\n): ExternalStore<B, S> => {\n let lastDependencyCheck = dependencyArray(bloc.state);\n\n return {\n subscribe: (listener: () => void) => {\n const unSub = bloc.addSubscriber((data) => {\n try {\n const newDependencyCheck = dependencyArray(data) ?? [];\n\n let allEqual = true;\n for (let i = 0; i < newDependencyCheck.length; i++) {\n if (newDependencyCheck[i] !== lastDependencyCheck[i]) {\n allEqual = false;\n break;\n }\n }\n\n if (!allEqual) {\n lastDependencyCheck = newDependencyCheck;\n listener();\n }\n } catch (e) {\n console.error({\n e,\n bloc,\n dependencyArray,\n lastDependencyCheck,\n });\n }\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 BlocInstanceId,\n InferPropsFromGeneric,\n InferStateFromGeneric,\n} from 'blac';\nimport { useEffect, useId, 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 InferStateFromGeneric<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 type BlocHookDependencyArrayFn<B extends BlocGeneric<any, any>> = (\n state: InferStateFromGeneric<B>,\n) => unknown[];\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 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: string[] = [];\n // default options\n let dependencyArray: BlocHookDependencyArrayFn<InstanceType<B>> = (\n state,\n ) => {\n if (typeof state !== 'object') {\n return [state] as unknown[];\n }\n\n const used: unknown[] = [];\n for (const key in state) {\n if (usedKeys.includes(key)) {\n used.push(state[key]);\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,\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<InferStateFromGeneric<S>>(\n subscribe,\n getSnapshot,\n getServerSnapshot,\n );\n\n useEffect(() => {\n if ((resolvedBloc.isolated && props) || (props && !resolvedBloc.props)) {\n resolvedBloc.props = props;\n }\n }, [props]);\n\n let returnState = state;\n if (typeof state === 'object') {\n returnState = new Proxy(state, {\n get(target, prop) {\n usedKeys.push(prop as string);\n return Reflect.get(target, prop);\n },\n });\n }\n\n return [returnState, resolvedBloc];\n }\n}\n\nconst useBloc = UseBlocClass.useBloc;\n\nexport default useBloc;\n"],"names":["externalBlocStore","bloc","dependencyArray","lastDependencyCheck","listener","unSub","data","newDependencyCheck","allEqual","i","e","UseBlocClass","options","rid","useId","usedKeys","state","used","key","blocId","props","resolvedBloc","Blac","subscribe","getSnapshot","getServerSnapshot","useMemo","useSyncExternalStore","useEffect","returnState","target","prop","useBloc"],"mappings":";;AAWM,MAAAA,IAAoB,CAIxBC,GACAC,MACwB;AACpB,MAAAC,IAAsBD,EAAgBD,EAAK,KAAK;AAE7C,SAAA;AAAA,IACL,WAAW,CAACG,MAAyB;AACnC,YAAMC,IAAQJ,EAAK,cAAc,CAACK,MAAS;AACrC,YAAA;AACF,gBAAMC,IAAqBL,EAAgBI,CAAI,KAAK,CAAA;AAEpD,cAAIE,IAAW;AACf,mBAASC,IAAI,GAAGA,IAAIF,EAAmB,QAAQE;AAC7C,gBAAIF,EAAmBE,CAAC,MAAMN,EAAoBM,CAAC,GAAG;AACzC,cAAAD,IAAA;AACX;AAAA,YACF;AAGF,UAAKA,MACmBL,IAAAI,GACbH;iBAEJM,GAAG;AACV,kBAAQ,MAAM;AAAA,YACZ,GAAAA;AAAA,YACA,MAAAT;AAAA,YACA,iBAAAC;AAAA,YACA,qBAAAC;AAAA,UAAA,CACD;AAAA,QACH;AAAA,MAAA,CACD;AAED,aAAO,MAAM;AACL,QAAAE;MAAA;AAAA,IAEV;AAAA,IACA,aAAa,MAASJ,EAAK;AAAA,IAC3B,mBAAmB,MAASA,EAAK;AAAA,EAAA;AAErC;ACpBO,MAAMU,EAAa;AAAA,EACxB,OAAO,QAGLV,GAASW,GAA2B;AACpC,UAAMC,IAAMC,KACNC,IAAqB,CAAA;AAEvB,QAAAb,IAA8D,CAChEc,MACG;AACC,UAAA,OAAOA,KAAU;AACnB,eAAO,CAACA,CAAK;AAGf,YAAMC,IAAkB,CAAA;AACxB,iBAAWC,KAAOF;AACZ,QAAAD,EAAS,SAASG,CAAG,KAClBD,EAAA,KAAKD,EAAME,CAAG,CAAC;AAGjB,aAAAD;AAAA,IAAA,GAELE,GACAC;AAEA,IAAA,OAAOR,KAAY,aACrBV,IAAkBU,EAAQ,sBAAsBV,GAChDiB,IAASP,EAAQ,IACjBQ,IAAQR,EAAQ,SAASQ,IAGdnB,EACW,aAEbkB,IAAAN;AAGX,UAAMQ,IAAeC,EAAK,YAAY,EAAE,QAAQrB,GAAM;AAAA,MACpD,IAAIkB;AAAA,MACJ,OAAAC;AAAA,MACA,WAAW;AAAA,IAAA,CACZ;AAED,QAAI,CAACC;AACH,YAAM,IAAI,MAAM,+BAA+BpB,EAAK,QAAQA,CAAI,EAAE;AAGpE,UAAM,EAAE,WAAAsB,GAAW,aAAAC,GAAa,mBAAAC,EAAsB,IAAAC;AAAA,MACpD,MAAM1B,EAAkBqB,GAAcnB,CAAe;AAAA,MACrD,CAACmB,EAAa,SAAS;AAAA,IAAA,GAGnBL,IAAQW;AAAA,MACZJ;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA;AAGF,IAAAG,EAAU,MAAM;AACd,OAAKP,EAAa,YAAYD,KAAWA,KAAS,CAACC,EAAa,WAC9DA,EAAa,QAAQD;AAAA,IACvB,GACC,CAACA,CAAK,CAAC;AAEV,QAAIS,IAAcb;AACd,WAAA,OAAOA,KAAU,aACLa,IAAA,IAAI,MAAMb,GAAO;AAAA,MAC7B,IAAIc,GAAQC,GAAM;AAChB,eAAAhB,EAAS,KAAKgB,CAAc,GACrB,QAAQ,IAAID,GAAQC,CAAI;AAAA,MACjC;AAAA,IAAA,CACD,IAGI,CAACF,GAAaR,CAAY;AAAA,EACnC;AACF;AAEA,MAAMW,IAAUrB,EAAa;"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/externalBlocStore.ts","../src/useBloc.tsx"],"sourcesContent":["import { BlocBase, BlocGeneric, InferStateFromGeneric } from 'blac';\n\nexport interface ExternalStore<\n B extends BlocGeneric<any, any>,\n S extends InferStateFromGeneric<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 InferStateFromGeneric<B>,\n>(\n bloc: B,\n dependencyArray: (state: S) => unknown[],\n): ExternalStore<B, S> => {\n let lastDependencyCheck = dependencyArray(bloc.state);\n\n return {\n subscribe: (listener: () => void) => {\n const unSub = bloc.addSubscriber((data) => {\n try {\n const newDependencyCheck = dependencyArray(data) ?? [];\n\n let allEqual = true;\n for (let i = 0; i < newDependencyCheck.length; i++) {\n if (newDependencyCheck[i] !== lastDependencyCheck[i]) {\n allEqual = false;\n break;\n }\n }\n\n if (!allEqual) {\n lastDependencyCheck = newDependencyCheck;\n listener();\n }\n } catch (e) {\n console.error({\n e,\n bloc,\n dependencyArray,\n lastDependencyCheck,\n });\n }\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 BlocInstanceId,\n InferPropsFromGeneric,\n InferStateFromGeneric,\n} from 'blac';\nimport { useEffect, useId, 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 InferStateFromGeneric<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 type BlocHookDependencyArrayFn<B extends BlocGeneric<any, any>> = (\n state: InferStateFromGeneric<B>,\n) => unknown[];\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 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: string[] = [];\n // default options\n let dependencyArray: BlocHookDependencyArrayFn<InstanceType<B>> = (\n state,\n ) => {\n if (typeof state !== 'object') {\n return [state] as unknown[];\n }\n\n const used: unknown[] = [];\n for (const key in state) {\n if (usedKeys.includes(key)) {\n used.push(state[key]);\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,\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<InferStateFromGeneric<S>>(\n subscribe,\n getSnapshot,\n getServerSnapshot,\n );\n\n let returnState = state;\n try {\n if (typeof state === 'object') {\n returnState = new Proxy(state, {\n get(target, prop) {\n usedKeys.push(prop as string);\n return Reflect.get(target, prop);\n },\n });\n }\n } catch (error) {\n Blac.instance.log('useBloc Error', error);\n }\n\n return [returnState, resolvedBloc];\n }\n}\n\nconst useBloc = UseBlocClass.useBloc;\n\nexport default useBloc;\n"],"names":["externalBlocStore","bloc","dependencyArray","lastDependencyCheck","listener","unSub","data","newDependencyCheck","allEqual","i","UseBlocClass","options","rid","useId","usedKeys","state","used","key","blocId","props","resolvedBloc","Blac","subscribe","getSnapshot","getServerSnapshot","useMemo","useSyncExternalStore","returnState","target","prop","error","useBloc"],"mappings":";;AAWM,MAAAA,IAAoB,CAIxBC,GACAC,MACwB;AACpB,MAAAC,IAAsBD,EAAgBD,EAAK,KAAK;AAE7C,SAAA;AAAA,IACL,WAAW,CAACG,MAAyB;AACnC,YAAMC,IAAQJ,EAAK,cAAc,CAACK,MAAS;AACrC,YAAA;AACF,gBAAMC,IAAqBL,EAAgBI,CAAI,KAAK,CAAA;AAEpD,cAAIE,IAAW;AACf,mBAASC,IAAI,GAAGA,IAAIF,EAAmB,QAAQE;AAC7C,gBAAIF,EAAmBE,CAAC,MAAMN,EAAoBM,CAAC,GAAG;AACzC,cAAAD,IAAA;AACX;AAAA,YACF;AAGF,UAAKA,MACmBL,IAAAI,GACbH;iBAEJ,GAAG;AACV,kBAAQ,MAAM;AAAA,YACZ;AAAA,YACA,MAAAH;AAAA,YACA,iBAAAC;AAAA,YACA,qBAAAC;AAAA,UAAA,CACD;AAAA,QACH;AAAA,MAAA,CACD;AAED,aAAO,MAAM;AACL,QAAAE;MAAA;AAAA,IAEV;AAAA,IACA,aAAa,MAASJ,EAAK;AAAA,IAC3B,mBAAmB,MAASA,EAAK;AAAA,EAAA;AAErC;ACpBO,MAAMS,EAAa;AAAA,EACxB,OAAO,QAGLT,GAASU,GAA2B;AACpC,UAAMC,IAAMC,KACNC,IAAqB,CAAA;AAEvB,QAAAZ,IAA8D,CAChEa,MACG;AACC,UAAA,OAAOA,KAAU;AACnB,eAAO,CAACA,CAAK;AAGf,YAAMC,IAAkB,CAAA;AACxB,iBAAWC,KAAOF;AACZ,QAAAD,EAAS,SAASG,CAAG,KAClBD,EAAA,KAAKD,EAAME,CAAG,CAAC;AAGjB,aAAAD;AAAA,IAAA,GAELE,GACAC;AAEA,IAAA,OAAOR,KAAY,aACrBT,IAAkBS,EAAQ,sBAAsBT,GAChDgB,IAASP,EAAQ,IACjBQ,IAAQR,EAAQ,SAASQ,IAGdlB,EACW,aAEbiB,IAAAN;AAGX,UAAMQ,IAAeC,EAAK,YAAY,EAAE,QAAQpB,GAAM;AAAA,MACpD,IAAIiB;AAAA,MACJ,OAAAC;AAAA,MACA,WAAW;AAAA,IAAA,CACZ;AAED,QAAI,CAACC;AACH,YAAM,IAAI,MAAM,+BAA+BnB,EAAK,QAAQA,CAAI,EAAE;AAGpE,UAAM,EAAE,WAAAqB,GAAW,aAAAC,GAAa,mBAAAC,EAAsB,IAAAC;AAAA,MACpD,MAAMzB,EAAkBoB,GAAclB,CAAe;AAAA,MACrD,CAACkB,EAAa,SAAS;AAAA,IAAA,GAGnBL,IAAQW;AAAA,MACZJ;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA;AAGF,QAAIG,IAAcZ;AACd,QAAA;AACE,MAAA,OAAOA,KAAU,aACLY,IAAA,IAAI,MAAMZ,GAAO;AAAA,QAC7B,IAAIa,GAAQC,GAAM;AAChB,iBAAAf,EAAS,KAAKe,CAAc,GACrB,QAAQ,IAAID,GAAQC,CAAI;AAAA,QACjC;AAAA,MAAA,CACD;AAAA,aAEIC,GAAO;AACT,MAAAT,EAAA,SAAS,IAAI,iBAAiBS,CAAK;AAAA,IAC1C;AAEO,WAAA,CAACH,GAAaP,CAAY;AAAA,EACnC;AACF;AAEA,MAAMW,IAAUrB,EAAa;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blac/react",
3
- "version": "0.0.44",
3
+ "version": "0.0.46",
4
4
  "license": "MIT",
5
5
  "main": "index.cjs.js",
6
6
  "module": "index.es.js",