@lomray/react-mobx-manager 2.0.0-beta.6 → 2.0.0-beta.8
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/lib/context.d.ts +7 -17
- package/lib/context.js +1 -1
- package/lib/index.d.ts +1 -2
- package/lib/index.js +1 -1
- package/lib/manager.d.ts +30 -20
- package/lib/manager.js +1 -1
- package/lib/on-change-listener.d.ts +1 -1
- package/lib/storages/async-storage.d.ts +1 -1
- package/lib/storages/local-storage.d.ts +1 -1
- package/lib/store-status.d.ts +7 -0
- package/lib/store-status.js +1 -0
- package/lib/suspense-query.d.ts +1 -1
- package/lib/{types-abd34741.d.ts → types-0ce7ddf0.d.ts} +12 -3
- package/lib/wakeup.d.ts +3 -3
- package/lib/wakeup.js +1 -1
- package/lib/with-stores.d.ts +1 -1
- package/lib/with-stores.js +1 -1
- package/package.json +5 -5
- package/lib/mobx-suspense.d.ts +0 -8
- package/lib/mobx-suspense.js +0 -1
- package/lib/server/stream-stores.d.ts +0 -71
- package/lib/server/stream-stores.js +0 -1
package/lib/context.d.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
+
import { IConsistentSuspense } from '@lomray/consistent-suspense';
|
|
2
3
|
import React from 'react';
|
|
3
4
|
import { FC, ReactElement } from "react";
|
|
4
5
|
import Manager from "./manager.js";
|
|
6
|
+
import { TStores } from "./types-0ce7ddf0.js";
|
|
5
7
|
interface IStoreManagerProvider {
|
|
6
8
|
storeManager: Manager;
|
|
7
9
|
shouldInit?: boolean;
|
|
8
10
|
fallback?: ReactElement;
|
|
9
11
|
children?: React.ReactNode;
|
|
12
|
+
suspenseProvider?: Partial<IConsistentSuspense>;
|
|
10
13
|
}
|
|
11
14
|
interface IStoreManagerParentProvider {
|
|
12
|
-
children?: React.ReactNode;
|
|
13
15
|
parentId: string;
|
|
14
|
-
}
|
|
15
|
-
interface IStoreManagerSuspenseProvider {
|
|
16
16
|
children?: React.ReactNode;
|
|
17
|
-
|
|
17
|
+
initStores?: TStores;
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
20
|
* Mobx store manager context
|
|
@@ -24,15 +24,6 @@ declare const StoreManagerContext: React.Context<Manager>;
|
|
|
24
24
|
* To spread relationships
|
|
25
25
|
*/
|
|
26
26
|
declare const StoreManagerParentContext: React.Context<string>;
|
|
27
|
-
/**
|
|
28
|
-
* Generate id for suspended component stores
|
|
29
|
-
*/
|
|
30
|
-
declare const StoreManagerSuspenseContext: React.Context<string | null>;
|
|
31
|
-
/**
|
|
32
|
-
* Mobx store manager parent provider
|
|
33
|
-
* @constructor
|
|
34
|
-
*/
|
|
35
|
-
declare const StoreManagerSuspenseProvider: FC<IStoreManagerSuspenseProvider>;
|
|
36
27
|
/**
|
|
37
28
|
* Mobx store manager parent provider
|
|
38
29
|
* @constructor
|
|
@@ -43,7 +34,6 @@ declare const StoreManagerParentProvider: FC<Omit<IStoreManagerParentProvider, '
|
|
|
43
34
|
* @constructor
|
|
44
35
|
*/
|
|
45
36
|
declare const StoreManagerProvider: FC<IStoreManagerProvider>;
|
|
46
|
-
declare const
|
|
47
|
-
declare const
|
|
48
|
-
|
|
49
|
-
export { StoreManagerContext, StoreManagerParentContext, StoreManagerSuspenseContext, StoreManagerProvider, StoreManagerParentProvider, StoreManagerSuspenseProvider, useStoreManagerContext, useStoreManagerParentContext, useStoreManagerSuspenseContext };
|
|
37
|
+
declare const useStoreManager: () => Manager;
|
|
38
|
+
declare const useStoreManagerParent: () => IStoreManagerParentProvider['parentId'];
|
|
39
|
+
export { StoreManagerContext, StoreManagerParentContext, StoreManagerProvider, StoreManagerParentProvider, useStoreManager, useStoreManagerParent };
|
package/lib/context.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@lomray/consistent-suspense"),t=require("react");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=r(t);const o=n.default.createContext({}),a=n.default.createContext("root"),s=({parentId:e,children:t,initStores:r})=>{const o=u();return r&&o.touchedStores(r),n.default.createElement(a.Provider,{value:e,children:t})},u=()=>t.useContext(o);exports.StoreManagerContext=o,exports.StoreManagerParentContext=a,exports.StoreManagerParentProvider=s,exports.StoreManagerProvider=({children:r,storeManager:a,fallback:u,suspenseProvider:i={},shouldInit:l=!1})=>{const[d,c]=t.useState(!l);return t.useEffect((()=>{l&&a.init().then((()=>c(!0))).catch((e=>{console.error("Failed initialized store manager: ",e)}))}),[l,a]),n.default.createElement(e.ConsistentSuspenseProvider,{...i},n.default.createElement(o.Provider,{value:a},n.default.createElement(s,{parentId:"root"},d?r:u||r)))},exports.useStoreManager=u,exports.useStoreManagerParent=()=>t.useContext(a);
|
package/lib/index.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
export * from "./types-
|
|
1
|
+
export * from "./types-0ce7ddf0.js";
|
|
2
2
|
export * from "./context.js";
|
|
3
3
|
export { default as Manager } from "./manager.js";
|
|
4
4
|
export { default as onChangeListener } from "./on-change-listener.js";
|
|
5
5
|
export { default as wakeup } from "./wakeup.js";
|
|
6
6
|
export { default as withStores } from "./with-stores.js";
|
|
7
7
|
export { default as Events } from "./events.js";
|
|
8
|
-
export { default as MobxSuspense } from "./mobx-suspense.js";
|
package/lib/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./context.js"),r=require("./manager.js"),t=require("./on-change-listener.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./context.js"),r=require("./manager.js"),t=require("./on-change-listener.js"),a=require("./wakeup.js"),o=require("./with-stores.js"),n=require("./events.js");exports.StoreManagerContext=e.StoreManagerContext,exports.StoreManagerParentContext=e.StoreManagerParentContext,exports.StoreManagerParentProvider=e.StoreManagerParentProvider,exports.StoreManagerProvider=e.StoreManagerProvider,exports.useStoreManager=e.useStoreManager,exports.useStoreManagerParent=e.useStoreManagerParent,exports.Manager=r,exports.onChangeListener=t,exports.wakeup=a,exports.withStores=o,exports.Events=n;
|
package/lib/manager.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { IConstructableStore, IManagerParams, IStorage, IStore,
|
|
1
|
+
import StoreStatus from "./store-status.js";
|
|
2
|
+
import { IConstructableStore, IManagerOptions, IManagerParams, IStorage, IStore, IStoreParams, TInitStore, TStoreDefinition, TStores } from "./types-0ce7ddf0.js";
|
|
3
3
|
/**
|
|
4
4
|
* Mobx stores manager
|
|
5
5
|
*/
|
|
@@ -50,10 +50,10 @@ declare class Manager {
|
|
|
50
50
|
*/
|
|
51
51
|
readonly options: IManagerOptions;
|
|
52
52
|
/**
|
|
53
|
-
*
|
|
54
|
-
* @see
|
|
53
|
+
* Suspense stores relations
|
|
54
|
+
* @see withStores
|
|
55
55
|
*/
|
|
56
|
-
|
|
56
|
+
protected suspenseRelations: Map<string, Set<string>>;
|
|
57
57
|
/**
|
|
58
58
|
* @constructor
|
|
59
59
|
*/
|
|
@@ -89,6 +89,13 @@ declare class Manager {
|
|
|
89
89
|
* Get stores relations
|
|
90
90
|
*/
|
|
91
91
|
getStoresRelations(): Manager['storesRelations'];
|
|
92
|
+
/**
|
|
93
|
+
* Get suspense relations with stores
|
|
94
|
+
*/
|
|
95
|
+
/**
|
|
96
|
+
* Get suspense relations with stores
|
|
97
|
+
*/
|
|
98
|
+
getSuspenseRelations(): Manager['suspenseRelations'];
|
|
92
99
|
/**
|
|
93
100
|
* Get persisted stores ids
|
|
94
101
|
*/
|
|
@@ -110,13 +117,6 @@ declare class Manager {
|
|
|
110
117
|
* @protected
|
|
111
118
|
*/
|
|
112
119
|
protected getStoreId<T>(store: IConstructableStore<T> | TInitStore, params?: IStoreParams): string;
|
|
113
|
-
/**
|
|
114
|
-
* Generate new context id
|
|
115
|
-
*/
|
|
116
|
-
/**
|
|
117
|
-
* Generate new context id
|
|
118
|
-
*/
|
|
119
|
-
createContextId(id?: string): string;
|
|
120
120
|
/**
|
|
121
121
|
* Get exist store
|
|
122
122
|
*/
|
|
@@ -148,25 +148,21 @@ declare class Manager {
|
|
|
148
148
|
/**
|
|
149
149
|
* Create stores for component
|
|
150
150
|
*/
|
|
151
|
-
createStores(map: [string, TStoreDefinition][], parentId: string, contextId: string, componentName: string, componentProps?: Record<string, any>): TStores;
|
|
151
|
+
createStores(map: [string, TStoreDefinition][], parentId: string, contextId: string, suspenseId: string, componentName: string, componentProps?: Record<string, any>): TStores;
|
|
152
152
|
/**
|
|
153
153
|
* Prepare store before usage
|
|
154
|
-
* @protected
|
|
155
154
|
*/
|
|
156
155
|
/**
|
|
157
156
|
* Prepare store before usage
|
|
158
|
-
* @protected
|
|
159
157
|
*/
|
|
160
158
|
protected prepareStore(store: TStores[string]): void;
|
|
161
159
|
/**
|
|
162
|
-
*
|
|
163
|
-
* @protected
|
|
160
|
+
* Remove store
|
|
164
161
|
*/
|
|
165
162
|
/**
|
|
166
|
-
*
|
|
167
|
-
* @protected
|
|
163
|
+
* Remove store
|
|
168
164
|
*/
|
|
169
|
-
protected
|
|
165
|
+
protected removeStore(store: TStores[string]): void;
|
|
170
166
|
/**
|
|
171
167
|
* Mount stores to component
|
|
172
168
|
*/
|
|
@@ -174,6 +170,20 @@ declare class Manager {
|
|
|
174
170
|
* Mount stores to component
|
|
175
171
|
*/
|
|
176
172
|
mountStores(stores: TStores): () => void;
|
|
173
|
+
/**
|
|
174
|
+
* Change the stores status to touched
|
|
175
|
+
*/
|
|
176
|
+
/**
|
|
177
|
+
* Change the stores status to touched
|
|
178
|
+
*/
|
|
179
|
+
touchedStores(stores: TStores): void;
|
|
180
|
+
/**
|
|
181
|
+
* Change store status
|
|
182
|
+
*/
|
|
183
|
+
/**
|
|
184
|
+
* Change store status
|
|
185
|
+
*/
|
|
186
|
+
protected setStoreStatus(store: TStores[string], status: StoreStatus): void;
|
|
177
187
|
/**
|
|
178
188
|
* Get store's state
|
|
179
189
|
*/
|
package/lib/manager.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("@lomray/event-manager"),t=require("mobx"),s=require("./events.js"),
|
|
1
|
+
"use strict";var e=require("@lomray/event-manager"),t=require("mobx"),s=require("./events.js"),o=require("./on-change-listener.js"),r=require("./store-status.js"),i=require("./wakeup.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=n(e);class l{constructor({initState:e,storesParams:t,storage:s,options:o}={}){Object.defineProperty(this,"stores",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"storesRelations",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"initState",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"storage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"persistData",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"storesParams",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:{shouldDisablePersist:!1,shouldRemoveInitState:!0}}),Object.defineProperty(this,"suspenseRelations",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"pushInitState",{enumerable:!0,configurable:!0,writable:!0,value:(e={})=>{for(const[t,s]of Object.entries(e))this.initState[t]=s}}),this.initState=e||{},this.storesParams=t||{},this.storage=s,Object.assign(this.options,o||{}),l.instance=this,"undefined"==typeof window||window.mobxManager||(window.mobxManager={pushInit:this.pushInitState})}async init(){return this.storage&&(this.persistData=await this.storage.get()||{}),this}static get(){if(!l.instance)throw new Error("Store manager is not initialized.");return l.instance}getStores(){return this.stores}getStoresRelations(){return this.storesRelations}getSuspenseRelations(){return this.suspenseRelations}static getPersistedStoresIds(){return l.persistedStores}getStoreId(e,t={}){const{id:s,contextId:o,key:r}=t;if(s)return s;if(e.libStoreId)return e.libStoreId;let i=e.name||e.constructor.name;return e.isSingleton?i:(i=`${i}--${o}`,r?`${i}--${r}`:i)}getStore(e,t={}){const s=this.getStoreId(e,t);return this.stores.has(s)?this.stores.get(s):e.isSingleton?this.createStore(e,{id:s,contextId:"singleton",parentId:"root",suspenseId:"",componentName:"root-app",componentProps:{}}):this.lookupStore(s,t)}lookupStore(e,t){var s,o;const{contextId:r,parentId:i}=t,n=null===(s=e.split("--"))||void 0===s?void 0:s[0],{ids:a,parentId:l}=null!==(o=this.storesRelations.get(r))&&void 0!==o?o:{ids:new Set,parentId:i},u=[...a].filter((e=>e.startsWith(`${n}--`)));if(1===u.length)return this.stores.get(u[0]);if(u.length>1)console.error("Parent context has multiple stores with the same id, please pass key to getStore function.");else if(l&&"root"!==l)return this.lookupStore(e,{contextId:l})}createStore(e,t){const{id:o,contextId:i,parentId:n,suspenseId:l,componentName:u,componentProps:d}=t;if(this.stores.has(o))return this.stores.get(o);const h=new e({...this.storesParams,storeManager:this,getStore:(e,t={contextId:i,parentId:n})=>this.getStore(e,t),componentProps:d});return h.libStoreId=o,h.isSingleton=e.isSingleton,h.libStoreContextId=e.isSingleton?"singleton":i,h.libStoreParentId=e.isSingleton||!n||n===i?"root":n,h.libStoreSuspenseId=l,h.libStoreComponentName=u,this.setStoreStatus(h,e.isSingleton?r.inUse:r.init),this.prepareStore(h),a.default.publish(s.CREATE_STORE,{store:e}),h}createStores(e,t,s,o,r,i={}){return e.reduce(((e,[n,a])=>{const[l,u]="store"in a?[a.store,a.id]:[a,this.getStoreId(a,{key:n,contextId:s})];return{...e,[n]:this.createStore(l,{id:u,contextId:s,parentId:t,suspenseId:o,componentName:r,componentProps:i})}}),{})}prepareStore(e){var t,o,r;const i=e.libStoreId,n=e.libStoreContextId,u=e.libStoreSuspenseId,d=this.initState[i],h=this.persistData[i];if(this.stores.has(i))return;if(d&&Object.assign(e,d),"wakeup"in e&&l.persistedStores.has(i)&&(null===(t=e.wakeup)||void 0===t||t.call(e,{initState:d,persistedState:h})),l.persistedStores.has(i)&&"addOnChangeListener"in e){const t=null===(o=e.onDestroy)||void 0===o?void 0:o.bind(e),s=e.addOnChangeListener(e,this);e.onDestroy=()=>{null==s||s(),null==t||t()}}null===(r=e.init)||void 0===r||r.call(e),this.storesRelations.has(n)||this.storesRelations.set(n,{ids:new Set,parentId:e.libStoreParentId&&e.libStoreParentId!==n?e.libStoreParentId:"root",componentName:e.libStoreComponentName}),this.suspenseRelations.has(u)||this.suspenseRelations.set(u,new Set);const{ids:c}=this.storesRelations.get(n);this.stores.set(i,e),c.add(i),this.suspenseRelations.get(u).add(i),a.default.publish(s.ADD_STORE,{store:e})}removeStore(e){var t,o,r;const i=e.libStoreId,n=e.libStoreSuspenseId,{ids:l}=null!==(t=this.storesRelations.get(e.libStoreContextId))&&void 0!==t?t:{ids:new Set};this.stores.has(i)&&(this.stores.delete(i),l.delete(i),n&&(null===(o=this.suspenseRelations.get(n))||void 0===o?void 0:o.has(i))&&this.suspenseRelations.get(n).delete(i),l.size||this.storesRelations.delete(e.libStoreContextId),"onDestroy"in e&&(null===(r=e.onDestroy)||void 0===r||r.call(e)),a.default.publish(s.DELETE_STORE,{store:e}))}mountStores(e){const{shouldRemoveInitState:t}=this.options;return Object.values(e).forEach((e=>{const o=e.libStoreId;t&&this.initState[o]&&delete this.initState[o],this.setStoreStatus(e,r.inUse),a.default.publish(s.MOUNT_STORE,{store:e})})),()=>{Object.values(e).forEach((e=>{e.isSingleton||(this.setStoreStatus(e,r.unused),a.default.publish(s.UNMOUNT_STORE,{store:e}))}))}}touchedStores(e){Object.values(e).forEach((e=>{e.libStoreStatus!==r.init||e.isSingleton||this.setStoreStatus(e,r.touched)}))}setStoreStatus(e,t){const{destroyTimers:{init:s=500,touched:o=3e3,unused:i=1e3}={}}=this.options;e.libStoreStatus=t,clearTimeout(e.libDestroyTimer);let n=0;switch(t){case r.init:n=s;break;case r.touched:n=o;break;case r.unused:n=i}n&&(e.libDestroyTimer=setTimeout((()=>this.removeStore(e)),n))}toJSON(e){var t,s,o;const r={},i=null!==(t=null==e?void 0:e.reduce(((e,t)=>(this.stores.has(t)&&e.set(t,this.stores.get(t)),e)),new Map))&&void 0!==t?t:this.stores;for(const[e,t]of i.entries())r[e]=null!==(o=null===(s=t.toJSON)||void 0===s?void 0:s.call(t))&&void 0!==o?o:l.getObservableProps(t);return r}toPersistedJSON(){var e,t;const s={};for(const o of l.persistedStores){const r=this.stores.get(o);r&&(s[o]=null!==(t=null===(e=r.toJSON)||void 0===e?void 0:e.call(r))&&void 0!==t?t:l.getObservableProps(r))}return s}static getObservableProps(e){const s=t.toJS(e);return Object.entries(s).reduce(((s,[o,r])=>({...s,...t.isObservableProp(e,o)?{[o]:r}:{}})),{})}static persistStore(e,t){return l.persistedStores.has(t)?(console.warn(`Duplicate serializable store key: ${t}`),e):(l.persistedStores.add(t),e.libStoreId=t,"wakeup"in e.prototype||(e.prototype.wakeup=i.bind(e)),"addOnChangeListener"in e.prototype||(e.prototype.addOnChangeListener=o),e)}}Object.defineProperty(l,"persistedStores",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),module.exports=l;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var u;!function(u){u.init="init",u.touched="touched",u.inUse="in-use",u.unused="unused"}(u||(u={}));var e=u;module.exports=e;
|
package/lib/suspense-query.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import Manager from "./manager.js";
|
|
3
|
+
import StoreStatus from "./store-status.js";
|
|
2
4
|
interface IWindowManager {
|
|
3
5
|
pushInit: (state: Record<string, any>) => void;
|
|
4
6
|
}
|
|
@@ -14,13 +16,15 @@ interface IConstructorParams<TProps = Record<string, any>> {
|
|
|
14
16
|
}
|
|
15
17
|
interface IStoreLifecycle {
|
|
16
18
|
onDestroy?: () => void;
|
|
17
|
-
onMount?: () => void | (() => void);
|
|
18
19
|
}
|
|
19
20
|
interface IStore extends IStoreLifecycle {
|
|
20
21
|
libStoreId?: string;
|
|
21
22
|
libStoreContextId?: string;
|
|
22
23
|
libStoreParentId?: string;
|
|
24
|
+
libStoreSuspenseId?: string;
|
|
23
25
|
libStoreComponentName?: string;
|
|
26
|
+
libStoreStatus?: StoreStatus;
|
|
27
|
+
libDestroyTimer?: NodeJS.Timeout;
|
|
24
28
|
isSingleton?: boolean;
|
|
25
29
|
init?: () => void;
|
|
26
30
|
toJSON?: () => Record<string, any>;
|
|
@@ -47,7 +51,7 @@ interface IManagerParams {
|
|
|
47
51
|
options?: IManagerOptions;
|
|
48
52
|
initState?: Record<string, any>;
|
|
49
53
|
}
|
|
50
|
-
type TWakeup = (
|
|
54
|
+
type TWakeup = (state: {
|
|
51
55
|
initState?: Record<string, any>;
|
|
52
56
|
persistedState?: Record<string, any>;
|
|
53
57
|
}) => void;
|
|
@@ -59,7 +63,11 @@ interface IStorage {
|
|
|
59
63
|
interface IManagerOptions {
|
|
60
64
|
shouldDisablePersist?: boolean;
|
|
61
65
|
shouldRemoveInitState?: boolean;
|
|
62
|
-
|
|
66
|
+
destroyTimers?: {
|
|
67
|
+
init?: number;
|
|
68
|
+
touched?: number;
|
|
69
|
+
unused?: number;
|
|
70
|
+
};
|
|
63
71
|
}
|
|
64
72
|
type TStores = {
|
|
65
73
|
[storeKey: string]: IStore | IStorePersisted;
|
|
@@ -81,6 +89,7 @@ interface IStoreParams {
|
|
|
81
89
|
key?: string;
|
|
82
90
|
contextId?: string;
|
|
83
91
|
parentId?: string;
|
|
92
|
+
suspenseId?: string;
|
|
84
93
|
componentName?: string;
|
|
85
94
|
componentProps?: Record<string, any>;
|
|
86
95
|
}
|
package/lib/wakeup.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TStores, TWakeup } from "./types-0ce7ddf0.js";
|
|
2
2
|
/**
|
|
3
|
-
* Restore store state
|
|
3
|
+
* Restore persisted store state
|
|
4
4
|
*/
|
|
5
|
-
declare
|
|
5
|
+
declare function wakeup(this: TStores[string], { persistedState }: Parameters<TWakeup>[0]): void;
|
|
6
6
|
export { wakeup as default };
|
package/lib/wakeup.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";module.exports=(
|
|
1
|
+
"use strict";module.exports=function({persistedState:t}){t&&Object.assign(this,t)};
|
package/lib/with-stores.d.ts
CHANGED
package/lib/with-stores.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("hoist-non-react-statics"),
|
|
1
|
+
"use strict";var e=require("@lomray/consistent-suspense"),t=require("hoist-non-react-statics"),r=require("mobx-react-lite"),n=require("react"),s=require("./context.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=o(t),u=o(n);module.exports=(t,o,{customContextId:i}={})=>{const c=r.observer(t),d=i||t.libStoreContextId,l=t.displayName||t.name,m=t=>{const r=s.useStoreManager(),a=s.useStoreManagerParent(),{suspenseId:i}=e.useConsistentSuspense(),m=e.useId(),[{contextId:S,initStores:f,mountStores:p}]=n.useState((()=>{const e=d||m;return{contextId:e,initStores:r.createStores(Object.entries(o),a,e,i,l,t),mountStores:()=>r.mountStores(f)}}));return n.useEffect(p,[p]),u.default.createElement(s.StoreManagerParentProvider,{parentId:S,initStores:f},u.default.createElement(c,{...t,...f}))};return a.default(m,t),m.displayName=`Mobx(${l})`,Object.defineProperty(m,"name",{value:m.displayName,writable:!1,enumerable:!1})};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lomray/react-mobx-manager",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.8",
|
|
4
4
|
"description": "This package provides Mobx stores manager for react.",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -12,8 +12,7 @@
|
|
|
12
12
|
"*": {
|
|
13
13
|
"./*": [
|
|
14
14
|
"lib/*",
|
|
15
|
-
"lib/storages/*"
|
|
16
|
-
"lib/server/*"
|
|
15
|
+
"lib/storages/*"
|
|
17
16
|
]
|
|
18
17
|
}
|
|
19
18
|
},
|
|
@@ -52,11 +51,12 @@
|
|
|
52
51
|
"prepare": "husky install"
|
|
53
52
|
},
|
|
54
53
|
"dependencies": {
|
|
54
|
+
"@lomray/consistent-suspense": "^1.2.0",
|
|
55
55
|
"@lomray/event-manager": "^1.2.2"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
|
-
"@commitlint/cli": "^17.6.
|
|
59
|
-
"@commitlint/config-conventional": "^17.6.
|
|
58
|
+
"@commitlint/cli": "^17.6.6",
|
|
59
|
+
"@commitlint/config-conventional": "^17.6.6",
|
|
60
60
|
"@lomray/eslint-config-react": "^3.0.0",
|
|
61
61
|
"@lomray/prettier-config": "^1.2.0",
|
|
62
62
|
"@rollup/plugin-terser": "^0.4.3",
|
package/lib/mobx-suspense.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { FC, SuspenseProps } from 'react';
|
|
2
|
-
/**
|
|
3
|
-
* Wrapper around react suspense
|
|
4
|
-
* Create unique id for each suspense (used for create/stream stores state)
|
|
5
|
-
* @constructor
|
|
6
|
-
*/
|
|
7
|
-
declare const MobxSuspense: FC<SuspenseProps>;
|
|
8
|
-
export { MobxSuspense as default };
|
package/lib/mobx-suspense.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var e=require("react"),t=require("./context.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=a(e);module.exports=({children:a,fallback:l,...n})=>{var u;const d=e.useId(),c=e.Children.map(a,((e,a)=>r.default.createElement(t.StoreManagerSuspenseProvider,{id:`${d}${a}`},e))),i=r.default.createElement(r.default.Fragment,null,r.default.createElement("script",{"data-context-id":d,"data-count":null!==(u=null==c?void 0:c.length)&&void 0!==u?u:0}),l);return r.default.createElement(e.Suspense,{...n,children:c,fallback:i})};
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import Manager from "../manager.js";
|
|
2
|
-
/**
|
|
3
|
-
* Stream mobx manager stores
|
|
4
|
-
* NOTE: use with renderToPipeableStream
|
|
5
|
-
*/
|
|
6
|
-
declare class StreamStores {
|
|
7
|
-
/**
|
|
8
|
-
* Obtained suspensions from application shell
|
|
9
|
-
* @protected
|
|
10
|
-
*/
|
|
11
|
-
protected suspendIds: Map<string, {
|
|
12
|
-
contextId: string;
|
|
13
|
-
count: number;
|
|
14
|
-
}>;
|
|
15
|
-
/**
|
|
16
|
-
* Mobx store manager instance
|
|
17
|
-
* @protected
|
|
18
|
-
*/
|
|
19
|
-
protected readonly manager: Manager;
|
|
20
|
-
/**
|
|
21
|
-
* @constructor
|
|
22
|
-
* @protected
|
|
23
|
-
*/
|
|
24
|
-
/**
|
|
25
|
-
* @constructor
|
|
26
|
-
* @protected
|
|
27
|
-
*/
|
|
28
|
-
protected constructor(manager: Manager);
|
|
29
|
-
/**
|
|
30
|
-
* Create stream stores service
|
|
31
|
-
*/
|
|
32
|
-
/**
|
|
33
|
-
* Create stream stores service
|
|
34
|
-
*/
|
|
35
|
-
static create(manager: Manager, isAttach?: boolean): StreamStores;
|
|
36
|
-
/**
|
|
37
|
-
* Listen react stream and return suspense stores state to client
|
|
38
|
-
*/
|
|
39
|
-
/**
|
|
40
|
-
* Listen react stream and return suspense stores state to client
|
|
41
|
-
*/
|
|
42
|
-
getStreamState(html: string): string | undefined;
|
|
43
|
-
/**
|
|
44
|
-
* Parse suspensions and related stores context id from application shell
|
|
45
|
-
* @protected
|
|
46
|
-
*/
|
|
47
|
-
/**
|
|
48
|
-
* Parse suspensions and related stores context id from application shell
|
|
49
|
-
* @protected
|
|
50
|
-
*/
|
|
51
|
-
protected obtainSuspensions(html: string): void;
|
|
52
|
-
/**
|
|
53
|
-
* Replace suspend id
|
|
54
|
-
* @protected
|
|
55
|
-
*/
|
|
56
|
-
/**
|
|
57
|
-
* Replace suspend id
|
|
58
|
-
* @protected
|
|
59
|
-
*/
|
|
60
|
-
protected replaceSuspendIds(formId: string, toId: string): string | undefined;
|
|
61
|
-
/**
|
|
62
|
-
* Parse complete suspense chunk
|
|
63
|
-
* @protected
|
|
64
|
-
*/
|
|
65
|
-
/**
|
|
66
|
-
* Parse complete suspense chunk
|
|
67
|
-
* @protected
|
|
68
|
-
*/
|
|
69
|
-
protected obtainCompleteSuspense(html: string): string | undefined;
|
|
70
|
-
}
|
|
71
|
-
export { StreamStores as default };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";class t{constructor(t){Object.defineProperty(this,"suspendIds",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"manager",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.manager=t}static create(e,s=!0){const n=new t(e);return s&&(e.streamStores=n),n}getStreamState(t){return this.obtainSuspensions(t),this.obtainCompleteSuspense(t)}obtainSuspensions(t){if(this.suspendIds)return;const e=[...t.matchAll(/<template id="(?<templateId>[^"]+)".+?<script data-context-id="(?<contextId>[^"]+)".+?data-count="(?<count>[^"]+)">/g)];e.length&&(this.suspendIds=new Map,e.forEach((({groups:t})=>{const{templateId:e,contextId:s,count:n}=null!=t?t:{};e&&this.suspendIds.set(e,{contextId:s,count:Number(n)})})))}replaceSuspendIds(t,e){if(t&&this.suspendIds.has(t))return this.suspendIds.set(e,this.suspendIds.get(t)),this.suspendIds.delete(t),e}obtainCompleteSuspense(t){var e,s,n;if(!t.startsWith("<div hidden id="))return;const{from:r,to:i}=null!==(s=null===(e=t.match(/\$RC\("(?<from>[^"]+)","(?<to>[^"]+)"\)/))||void 0===e?void 0:e.groups)&&void 0!==s?s:{},o=this.replaceSuspendIds(r,i);if(!o)return;const{contextId:a,count:d}=null!==(n=this.suspendIds.get(o))&&void 0!==n?n:{};if(!a||!d)return;const u=this.manager.getStoresRelations(),c=this.manager.createContextId(a),p=[...Array(d)].reduce(((t,e,s)=>{const n=`${c}${s}`;return u.has(n)&&t.push(...u.get(n).ids),t}),[]);if(!p.length)return;return`<script>window.mobxManager.pushInit(${JSON.stringify(this.manager.toJSON(p))});<\/script>`}}module.exports=t;
|