@blac/react 0.0.22 → 0.0.23

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,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("blac"),a=require("react"),u=(n,s)=>{let e=s(n.state);return{subscribe:l=>{const r=n.addEventListenerStateChange(c=>{const t=s(c);t!==e&&(e=t,l())});return()=>{r()}},getSnapshot:()=>n.state,getServerSnapshot:()=>n.state}};class p{static useBloc(s,e){const l=a.useId();let r=B=>B,c,t={};typeof e=="function"&&(r=e),typeof e=="string"&&(c=e),typeof e=="object"&&(r=e.dependencySelector??r,c=e.id,t=e.props??t),s.isolated&&(c=l);const o=g.Blac.getInstance().getBloc(s,{id:c,props:t,reconnect:!1});if(!o)throw new Error(`useBloc: could not resolve: ${s.name||s}`);const{subscribe:d,getSnapshot:i,getServerSnapshot:S}=a.useMemo(()=>u(o,r),[o.createdAt]),f=a.useSyncExternalStore(d,i,S);return a.useEffect(()=>{o.props=t},[t]),[f,o]}}const y=p.useBloc;exports.externalBlocStore=u;exports.useBloc=y;
2
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/externalBlocStore.ts","../src/useBloc.tsx"],"sourcesContent":["import { BlocBase } from 'blac';\n\nexport interface ExternalStore<B extends BlocBase<S>, S> {\n subscribe: (onStoreChange: () => void) => () => void;\n getSnapshot: () => S;\n getServerSnapshot?: () => S;\n}\n\nconst externalBlocStore = <B extends BlocBase<S>, S>(\n bloc: B,\n dependencySelector: (state: S) => unknown,\n): ExternalStore<B, S> => {\n let lastDependencyCheck = dependencySelector(bloc.state);\n\n return {\n subscribe: (listener: () => void) => {\n const unSub = bloc.addEventListenerStateChange((data) => {\n const newDependencyCheck = dependencySelector(data);\n if (newDependencyCheck !== lastDependencyCheck) {\n lastDependencyCheck = newDependencyCheck;\n listener();\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 BlocInstanceId,\n BlocProps,\n CubitPropsType,\n ValueType,\n} from 'blac';\nimport { useEffect, useId, useMemo, useRef, useSyncExternalStore } from 'react';\nimport externalBlocStore from './externalBlocStore';\n\nexport type BlocHookData<B extends BlocBase<S>, S> = [\n value: ValueType<B>,\n instance: 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 BlocBase<S>, S> {\n id?: string;\n dependencySelector?: (state: ValueType<B>) => unknown;\n props?: CubitPropsType<B>;\n}\n\nexport type BlocHookDependencySelector<B extends BlocBase<S>, S> = (\n state: ValueType<B>,\n) => unknown;\n\nexport class UseBlocClass {\n // constructor, no options\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n ): BlocHookData<InstanceType<B>, S>;\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n options: BlocHookOptions<InstanceType<B>, S>,\n ): BlocHookData<InstanceType<B>, S>;\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n depsSelector: BlocHookDependencySelector<InstanceType<B>, S>,\n ): BlocHookData<InstanceType<B>, S>;\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n instanceId: string,\n ): BlocHookData<InstanceType<B>, S>;\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n options?:\n | BlocHookOptions<InstanceType<B>, S>\n | BlocHookDependencySelector<InstanceType<B>, S>\n | BlocInstanceId,\n ): BlocHookData<InstanceType<B>, S> {\n const rid = useId();\n // default options\n let dependencySelector: BlocHookDependencySelector<InstanceType<B>, S> = (\n state: ValueType<InstanceType<B>>,\n ) => state;\n let blocId: BlocInstanceId | undefined;\n let props: BlocProps = {};\n\n // parse options\n\n // if options is a function, its a dependencySelector\n if (typeof options === 'function') {\n dependencySelector = options;\n }\n\n // if options is a string its an ID\n if (typeof options === 'string') {\n blocId = options;\n }\n\n if (typeof options === 'object') {\n dependencySelector = options.dependencySelector ?? dependencySelector;\n blocId = options.id;\n props = options.props ?? props;\n }\n\n const base = bloc as unknown as BlocBase<S>;\n const isIsolated = base.isolated;\n if (isIsolated) {\n blocId = rid;\n }\n\n // const now = Date.now();\n // const createdAt = useRef(now);\n // const dateChanged = now !== createdAt;\n\n // resolve the bloc, get the existing instance of the bloc or create a new one\n // const resolvedBloc = useMemo(\n // () =>\n\n const resolvedBloc = Blac.getInstance().getBloc(bloc, {\n id: blocId,\n props,\n reconnect: false,\n }) as InstanceType<B>;\n // [renderId.current],\n // );\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, dependencySelector),\n [resolvedBloc.createdAt],\n );\n\n const state = useSyncExternalStore<ValueType<InstanceType<B>>>(\n subscribe,\n getSnapshot,\n getServerSnapshot,\n );\n\n useEffect(() => {\n resolvedBloc.props = props;\n }, [props]);\n\n return [state, resolvedBloc];\n }\n}\n\nconst useBloc = UseBlocClass.useBloc;\n\nexport default useBloc;\n"],"names":["externalBlocStore","bloc","dependencySelector","lastDependencyCheck","listener","unSub","data","newDependencyCheck","UseBlocClass","options","rid","useId","state","blocId","props","resolvedBloc","Blac","subscribe","getSnapshot","getServerSnapshot","useMemo","useSyncExternalStore","useEffect","useBloc"],"mappings":"2HAQMA,EAAoB,CACxBC,EACAC,IACwB,CACpB,IAAAC,EAAsBD,EAAmBD,EAAK,KAAK,EAEhD,MAAA,CACL,UAAYG,GAAyB,CACnC,MAAMC,EAAQJ,EAAK,4BAA6BK,GAAS,CACjD,MAAAC,EAAqBL,EAAmBI,CAAI,EAC9CC,IAAuBJ,IACHA,EAAAI,EACbH,IACX,CACD,EACD,MAAO,IAAM,CACLC,GAAA,CAEV,EACA,YAAa,IAASJ,EAAK,MAC3B,kBAAmB,IAASA,EAAK,KAAA,CAErC,ECAO,MAAMO,CAAa,CAiBxB,OAAO,QACLP,EACAQ,EAIkC,CAClC,MAAMC,EAAMC,EAAAA,QAER,IAAAT,EACFU,GACGA,EACDC,EACAC,EAAmB,CAAA,EAKnB,OAAOL,GAAY,aACAP,EAAAO,GAInB,OAAOA,GAAY,WACZI,EAAAJ,GAGP,OAAOA,GAAY,WACrBP,EAAqBO,EAAQ,oBAAsBP,EACnDW,EAASJ,EAAQ,GACjBK,EAAQL,EAAQ,OAASK,GAGdb,EACW,WAEbY,EAAAH,GAWX,MAAMK,EAAeC,EAAA,KAAK,YAAY,EAAE,QAAQf,EAAM,CACpD,GAAIY,EACJ,MAAAC,EACA,UAAW,EAAA,CACZ,EAID,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,+BAA+Bd,EAAK,MAAQA,CAAI,EAAE,EAGpE,KAAM,CAAE,UAAAgB,EAAW,YAAAC,EAAa,kBAAAC,CAAsB,EAAAC,EAAA,QACpD,IAAMpB,EAAkBe,EAAcb,CAAkB,EACxD,CAACa,EAAa,SAAS,CAAA,EAGnBH,EAAQS,EAAA,qBACZJ,EACAC,EACAC,CAAA,EAGFG,OAAAA,EAAAA,UAAU,IAAM,CACdP,EAAa,MAAQD,CAAA,EACpB,CAACA,CAAK,CAAC,EAEH,CAACF,EAAOG,CAAY,CAC7B,CACF,CAEA,MAAMQ,EAAUf,EAAa"}
@@ -0,0 +1,49 @@
1
+ import { Blac as p } from "blac";
2
+ import { useId as S, useMemo as B, useSyncExternalStore as g, useEffect as h } from "react";
3
+ const y = (c, s) => {
4
+ let e = s(c.state);
5
+ return {
6
+ subscribe: (a) => {
7
+ const r = c.addEventListenerStateChange((n) => {
8
+ const t = s(n);
9
+ t !== e && (e = t, a());
10
+ });
11
+ return () => {
12
+ r();
13
+ };
14
+ },
15
+ getSnapshot: () => c.state,
16
+ getServerSnapshot: () => c.state
17
+ };
18
+ };
19
+ class m {
20
+ static useBloc(s, e) {
21
+ const a = S();
22
+ let r = (i) => i, n, t = {};
23
+ typeof e == "function" && (r = e), typeof e == "string" && (n = e), typeof e == "object" && (r = e.dependencySelector ?? r, n = e.id, t = e.props ?? t), s.isolated && (n = a);
24
+ const o = p.getInstance().getBloc(s, {
25
+ id: n,
26
+ props: t,
27
+ reconnect: !1
28
+ });
29
+ if (!o)
30
+ throw new Error(`useBloc: could not resolve: ${s.name || s}`);
31
+ const { subscribe: l, getSnapshot: d, getServerSnapshot: u } = B(
32
+ () => y(o, r),
33
+ [o.createdAt]
34
+ ), f = g(
35
+ l,
36
+ d,
37
+ u
38
+ );
39
+ return h(() => {
40
+ o.props = t;
41
+ }, [t]), [f, o];
42
+ }
43
+ }
44
+ const b = m.useBloc;
45
+ export {
46
+ y as externalBlocStore,
47
+ b as useBloc
48
+ };
49
+ //# sourceMappingURL=index.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":["../src/externalBlocStore.ts","../src/useBloc.tsx"],"sourcesContent":["import { BlocBase } from 'blac';\n\nexport interface ExternalStore<B extends BlocBase<S>, S> {\n subscribe: (onStoreChange: () => void) => () => void;\n getSnapshot: () => S;\n getServerSnapshot?: () => S;\n}\n\nconst externalBlocStore = <B extends BlocBase<S>, S>(\n bloc: B,\n dependencySelector: (state: S) => unknown,\n): ExternalStore<B, S> => {\n let lastDependencyCheck = dependencySelector(bloc.state);\n\n return {\n subscribe: (listener: () => void) => {\n const unSub = bloc.addEventListenerStateChange((data) => {\n const newDependencyCheck = dependencySelector(data);\n if (newDependencyCheck !== lastDependencyCheck) {\n lastDependencyCheck = newDependencyCheck;\n listener();\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 BlocInstanceId,\n BlocProps,\n CubitPropsType,\n ValueType,\n} from 'blac';\nimport { useEffect, useId, useMemo, useRef, useSyncExternalStore } from 'react';\nimport externalBlocStore from './externalBlocStore';\n\nexport type BlocHookData<B extends BlocBase<S>, S> = [\n value: ValueType<B>,\n instance: 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 BlocBase<S>, S> {\n id?: string;\n dependencySelector?: (state: ValueType<B>) => unknown;\n props?: CubitPropsType<B>;\n}\n\nexport type BlocHookDependencySelector<B extends BlocBase<S>, S> = (\n state: ValueType<B>,\n) => unknown;\n\nexport class UseBlocClass {\n // constructor, no options\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n ): BlocHookData<InstanceType<B>, S>;\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n options: BlocHookOptions<InstanceType<B>, S>,\n ): BlocHookData<InstanceType<B>, S>;\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n depsSelector: BlocHookDependencySelector<InstanceType<B>, S>,\n ): BlocHookData<InstanceType<B>, S>;\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n instanceId: string,\n ): BlocHookData<InstanceType<B>, S>;\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n options?:\n | BlocHookOptions<InstanceType<B>, S>\n | BlocHookDependencySelector<InstanceType<B>, S>\n | BlocInstanceId,\n ): BlocHookData<InstanceType<B>, S> {\n const rid = useId();\n // default options\n let dependencySelector: BlocHookDependencySelector<InstanceType<B>, S> = (\n state: ValueType<InstanceType<B>>,\n ) => state;\n let blocId: BlocInstanceId | undefined;\n let props: BlocProps = {};\n\n // parse options\n\n // if options is a function, its a dependencySelector\n if (typeof options === 'function') {\n dependencySelector = options;\n }\n\n // if options is a string its an ID\n if (typeof options === 'string') {\n blocId = options;\n }\n\n if (typeof options === 'object') {\n dependencySelector = options.dependencySelector ?? dependencySelector;\n blocId = options.id;\n props = options.props ?? props;\n }\n\n const base = bloc as unknown as BlocBase<S>;\n const isIsolated = base.isolated;\n if (isIsolated) {\n blocId = rid;\n }\n\n // const now = Date.now();\n // const createdAt = useRef(now);\n // const dateChanged = now !== createdAt;\n\n // resolve the bloc, get the existing instance of the bloc or create a new one\n // const resolvedBloc = useMemo(\n // () =>\n\n const resolvedBloc = Blac.getInstance().getBloc(bloc, {\n id: blocId,\n props,\n reconnect: false,\n }) as InstanceType<B>;\n // [renderId.current],\n // );\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, dependencySelector),\n [resolvedBloc.createdAt],\n );\n\n const state = useSyncExternalStore<ValueType<InstanceType<B>>>(\n subscribe,\n getSnapshot,\n getServerSnapshot,\n );\n\n useEffect(() => {\n resolvedBloc.props = props;\n }, [props]);\n\n return [state, resolvedBloc];\n }\n}\n\nconst useBloc = UseBlocClass.useBloc;\n\nexport default useBloc;\n"],"names":["externalBlocStore","bloc","dependencySelector","lastDependencyCheck","listener","unSub","data","newDependencyCheck","UseBlocClass","options","rid","useId","state","blocId","props","resolvedBloc","Blac","subscribe","getSnapshot","getServerSnapshot","useMemo","useSyncExternalStore","useEffect","useBloc"],"mappings":";;AAQM,MAAAA,IAAoB,CACxBC,GACAC,MACwB;AACpB,MAAAC,IAAsBD,EAAmBD,EAAK,KAAK;AAEhD,SAAA;AAAA,IACL,WAAW,CAACG,MAAyB;AACnC,YAAMC,IAAQJ,EAAK,4BAA4B,CAACK,MAAS;AACjD,cAAAC,IAAqBL,EAAmBI,CAAI;AAClD,QAAIC,MAAuBJ,MACHA,IAAAI,GACbH;MACX,CACD;AACD,aAAO,MAAM;AACL,QAAAC;MAAA;AAAA,IAEV;AAAA,IACA,aAAa,MAASJ,EAAK;AAAA,IAC3B,mBAAmB,MAASA,EAAK;AAAA,EAAA;AAErC;ACAO,MAAMO,EAAa;AAAA,EAiBxB,OAAO,QACLP,GACAQ,GAIkC;AAClC,UAAMC,IAAMC;AAER,QAAAT,IAAqE,CACvEU,MACGA,GACDC,GACAC,IAAmB,CAAA;AAKnB,IAAA,OAAOL,KAAY,eACAP,IAAAO,IAInB,OAAOA,KAAY,aACZI,IAAAJ,IAGP,OAAOA,KAAY,aACrBP,IAAqBO,EAAQ,sBAAsBP,GACnDW,IAASJ,EAAQ,IACjBK,IAAQL,EAAQ,SAASK,IAGdb,EACW,aAEbY,IAAAH;AAWX,UAAMK,IAAeC,EAAK,YAAY,EAAE,QAAQf,GAAM;AAAA,MACpD,IAAIY;AAAA,MACJ,OAAAC;AAAA,MACA,WAAW;AAAA,IAAA,CACZ;AAID,QAAI,CAACC;AACH,YAAM,IAAI,MAAM,+BAA+Bd,EAAK,QAAQA,CAAI,EAAE;AAGpE,UAAM,EAAE,WAAAgB,GAAW,aAAAC,GAAa,mBAAAC,EAAsB,IAAAC;AAAA,MACpD,MAAMpB,EAAkBe,GAAcb,CAAkB;AAAA,MACxD,CAACa,EAAa,SAAS;AAAA,IAAA,GAGnBH,IAAQS;AAAA,MACZJ;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA;AAGF,WAAAG,EAAU,MAAM;AACd,MAAAP,EAAa,QAAQD;AAAA,IAAA,GACpB,CAACA,CAAK,CAAC,GAEH,CAACF,GAAOG,CAAY;AAAA,EAC7B;AACF;AAEA,MAAMQ,IAAUf,EAAa;"}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vite").UserConfig;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vite").UserConfig;
2
+ export default _default;
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@blac/react",
3
- "version": "0.0.22",
3
+ "version": "0.0.23",
4
4
  "license": "MIT",
5
- "main": "dist/blac-react.js",
6
- "module": "dist/blac-react.esm.js",
7
- "typings": "dist/blac-react.d.ts",
5
+ "main": "dist/index.cjs.js",
6
+ "module": "dist/index.es.js",
7
+ "typings": "dist/src/index.d.ts",
8
8
  "keywords": [
9
9
  "react",
10
10
  "typescript",
@@ -16,20 +16,19 @@
16
16
  "bloc-pattern"
17
17
  ],
18
18
  "scripts": {
19
- "build": "rollup -c rollup.config.lib.js",
19
+ "build": "rm -rf dist && vite build",
20
20
  "dev": "rollup -c rollup.config.lib.js --watch",
21
21
  "prettier": "prettier --write ./src",
22
22
  "test": "vitest run --coverage",
23
23
  "pub": "npm run build && npm publish"
24
24
  },
25
25
  "dependencies": {
26
- "blac": "*"
26
+ "blac": "*",
27
+ "vite-plugin-dts": "^3.6.4"
27
28
  },
28
29
  "devDependencies": {
29
- "@rollup/plugin-typescript": "^11.1.2",
30
30
  "@types/react": "^18.2.20",
31
31
  "react": "^18.2.0",
32
- "rollup-plugin-terser": "^7.0.2",
33
32
  "vitest": "^0.34.1"
34
33
  }
35
34
  }
package/vite.config.ts ADDED
@@ -0,0 +1,30 @@
1
+ import { defineConfig } from 'vite';
2
+ import reactRefresh from '@vitejs/plugin-react';
3
+ import dts from 'vite-plugin-dts';
4
+ import { dependencies, devDependencies } from './package.json';
5
+
6
+ const external = [
7
+ ...Object.keys(dependencies),
8
+ ...Object.keys(devDependencies),
9
+ ].filter((name) => {
10
+ return name;
11
+ });
12
+
13
+ // https://vitejs.dev/config/
14
+ export default defineConfig({
15
+ plugins: [reactRefresh(), dts()],
16
+ publicDir: 'public',
17
+ build: {
18
+ lib: {
19
+ entry: './src/index.ts', // Specifies the entry point for building the library.
20
+ name: 'blac-react', // Sets the name of the generated library.
21
+ fileName: (format) => `index.${format}.js`, // Generates the output file name based on the format.
22
+ formats: ['cjs', 'es'], // Specifies the output formats (CommonJS and ES modules).
23
+ },
24
+ rollupOptions: {
25
+ external: [...external, 'react', 'react-dom', 'react/jsx-runtime'], // Defines external dependencies for Rollup bundling.
26
+ },
27
+ sourcemap: true, // Generates source maps for debugging.
28
+ emptyOutDir: true, // Clears the output directory before building.
29
+ },
30
+ });
@@ -1,28 +0,0 @@
1
- import { BlocBase, BlocConstructor, ValueType, CubitPropsType } from 'blac/src';
2
-
3
- interface ExternalStore<B extends BlocBase<S>, S> {
4
- subscribe: (onStoreChange: () => void) => () => void;
5
- getSnapshot: () => S;
6
- getServerSnapshot?: () => S;
7
- }
8
- declare const externalBlocStore: <B extends BlocBase<S, {}>, S>(bloc: B, dependencySelector: (state: S) => unknown) => ExternalStore<B, S>;
9
-
10
- type BlocHookData<B extends BlocBase<S>, S> = [
11
- value: ValueType<B>,
12
- instance: B
13
- ];
14
- interface BlocHookOptions<B extends BlocBase<S>, S> {
15
- id?: string;
16
- dependencySelector?: (state: ValueType<B>) => unknown;
17
- props?: CubitPropsType<B>;
18
- }
19
- type BlocHookDependencySelector<B extends BlocBase<S>, S> = (state: ValueType<B>) => unknown;
20
- declare class UseBlocClass {
21
- static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(bloc: B): BlocHookData<InstanceType<B>, S>;
22
- static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(bloc: B, options: BlocHookOptions<InstanceType<B>, S>): BlocHookData<InstanceType<B>, S>;
23
- static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(bloc: B, depsSelector: BlocHookDependencySelector<InstanceType<B>, S>): BlocHookData<InstanceType<B>, S>;
24
- static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(bloc: B, instanceId: string): BlocHookData<InstanceType<B>, S>;
25
- }
26
- declare const useBloc: typeof UseBlocClass.useBloc;
27
-
28
- export { externalBlocStore, useBloc };