synapse-storage 3.0.11 → 3.0.13

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/dist/reactive.cjs DELETED
@@ -1 +0,0 @@
1
- "use strict";var A=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var j=Object.prototype.hasOwnProperty;var I=(r,e)=>{for(var t in e)A(r,t,{get:e[t],enumerable:!0})},q=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of M(e))!j.call(r,n)&&n!==t&&A(r,n,{get:()=>e[n],enumerable:!(s=k(e,n))||s.enumerable});return r};var B=r=>q(A({},"__esModule",{value:!0}),r);var Q={};I(Q,{Dispatcher:()=>b,EffectsModule:()=>w,combineEffects:()=>H,createDispatcher:()=>K,createEffect:()=>G,createEffectBase:()=>X,loggerDispatcherMiddleware:()=>L,ofType:()=>V,ofTypes:()=>N,ofTypesWaitAll:()=>_,selectorMap:()=>U,selectorObject:()=>z,validateMap:()=>J});module.exports=B(Q);var v=require("rxjs"),b=class{constructor(e){this.options=e;this.storage=e.storage,this.middlewareAPI={getState:()=>this.storage.getState(),dispatch:async t=>(this.actions$.next(t),t.payload),storage:this.storage,actions$:this.actions,actions:this.dispatch,watchers:this.watchers,findActionByType:t=>this.findActionByType(t),findWatcherByType:t=>this.findWatcherByType(t)},e.middlewares&&e.middlewares.length>0&&this.use(...e.middlewares)}actions$=new v.Subject;actions=this.actions$.asObservable();dispatch={};watchers={};storage;middlewareFunctions=[];middlewareAPI;use(...e){for(let t=0;t<e.length;t++)try{let s=e[t](this.middlewareAPI);this.middlewareFunctions.push(s)}catch(s){console.error(`Error initializing middleware [${t}]:`,s)}return this}getActions(){return this.dispatch}getTypedDispatch(){return this.dispatch}getTypedWatchers(){return this.watchers}findActionByType(e){return Object.values(this.dispatch).find(t=>t.actionType.split(`[${this.storage.name}]`)[1]===e)}findWatcherByType(e){return Object.values(this.watchers).find(t=>t.actionType===e)}createAction(e,t){let s=`[${this.storage.name}]${e.type}`,n=null,a=null,i=async o=>{let c=[o];if(t?.memoize&&n&&a&&t.memoize(c,n,a))return a;let u={type:s,meta:e.meta},d;if(this.middlewareFunctions.length>0){let y=async f=>t?.worker?this.executeInWorker(t.worker,s,c,e.action):Promise.resolve(e.action(o));for(let f=this.middlewareFunctions.length-1;f>=0;f--){let h=this.middlewareFunctions[f],g=y;y=async E=>h(async x=>g(x))(E)}d=await y(u)}else t?.worker?d=await this.executeInWorker(t.worker,s,c,e.action):d=await e.action(o);return u.payload=d,n=[...c],a=d,this.actions$.next(u),d};return i._type="dispatch",Object.defineProperty(i,"actionType",{value:s,writable:!1,enumerable:!0}),e.meta&&Object.defineProperty(i,"meta",{value:e.meta,writable:!1,enumerable:!0}),i}createWatcher(e){let t=`[${this.storage.name}]${e.type}`,s=new v.Subject,n,a=this.storage.subscribe(e.selector,o=>{if(!e.shouldTrigger||e.shouldTrigger(n,o)){let c={type:t,payload:o,meta:e.meta};this.actions$.next(c),s.next(c),n=o}}),i=()=>s.asObservable();return i._type="watchers",Object.defineProperty(i,"actionType",{value:t,writable:!1,enumerable:!0}),e.meta&&Object.defineProperty(i,"meta",{value:e.meta,writable:!1,enumerable:!0}),Object.defineProperty(i,"unsubscribe",{value:a,writable:!1,enumerable:!0}),i}async executeInWorker(e,t,s,n){return new Promise((a,i)=>{let o=`${t}_${Date.now()}_${Math.random()}`,c=u=>{u.data.requestId===o&&(e.removeEventListener("message",c),u.data.error?i(new Error(u.data.error)):a(u.data.result))};e.addEventListener("message",c),e.postMessage({type:t,args:s,requestId:o}),setTimeout(()=>{e.removeEventListener("message",c),i(new Error(`Worker execution timeout for action: ${t}`))},3e4)})}};function K(r,e){let t=new b(r),s=e(r.storage,{createAction:(n,a)=>t.createAction(n,a),createWatcher:n=>t.createWatcher(n)});for(let[n,a]of Object.entries(s))if(typeof a=="function"){let i=a._type;t[i][n]=a}return t}function F(r,e){let t={};return[...new Set([...Object.keys(r),...Object.keys(e)])].forEach(n=>{if(n in r&&n in e)if(typeof r[n]=="object"&&r[n]!==null&&typeof e[n]=="object"&&e[n]!==null&&!Array.isArray(r[n])&&!Array.isArray(e[n])){let a=F(r[n],e[n]);Object.keys(a).length>0&&(t[n]=a)}else JSON.stringify(r[n])!==JSON.stringify(e[n])&&(t[n]={PREV:r[n],NEXT:e[n]});else n in r?t[n]={PREV:r[n],NEXT:void 0}:t[n]={PREV:void 0,NEXT:e[n]}}),t}var L=(r={})=>{let e={action:"\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435",prevState:"\u041F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u0435 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435",nextState:"\u0421\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0435 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435",duration:"\u0414\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C",error:"\u041E\u0448\u0438\u0431\u043A\u0430 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438",diff:"\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F",changesCount:"\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439",showFullState:"\u041F\u043E\u043B\u043D\u043E\u0435 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435"},t={collapsed:!1,duration:!0,diff:!1,showFullState:!0,translations:e,colors:{title:"#3498db",prevState:"#9E9E9E",fullState:"#008a15",action:"#03A9F4",nextState:"#4CAF50",error:"#F20404",diff:"#9C27B0"}},s={...t,...r,translations:{...e,...r.translations||{}},colors:{...t.colors,...r.colors||{}}},{collapsed:n,duration:a,colors:i,translations:o}=s;return c=>u=>async d=>{let y=Date.now(),f=await c.getState();try{let h=await u(d),g=await c.getState(),D=Date.now()-y,x=`${d.type}`;if((n?console.groupCollapsed:console.group)(`%c ${x}`,`color: ${i.title}; font-weight: bold`),console.log(`%c ${o.action}:`,`color: ${i.action}; font-weight: bold`,d),s.diff){let P=F(f,g),W=Object.keys(P).length;console.log(`%c ${o.diff} (${o.changesCount}: ${W}):`,`color: ${i.diff}; font-weight: bold`,P)}return s.showFullState&&(console.groupCollapsed(`%c ${o.showFullState}`,`color: ${i.fullState}; font-weight: bold`),console.log(`%c ${o.prevState}:`,`color: ${i.prevState}; font-weight: bold`,f),console.log(`%c ${o.nextState}:`,`color: ${i.nextState}; font-weight: bold`,g),console.groupEnd()),a&&console.log(`%c ${o.duration}: %c ${D}ms`,"font-weight: bold","color: #4CAF50"),console.groupEnd(),h}catch(h){throw console.error(`%c ${o.error}:`,`color: ${i.error}; font-weight: bold`,d.type,h),h}}};var p=require("rxjs"),l=require("rxjs/operators");var S=require("rxjs"),T=require("rxjs/operators");function R(r,e=1){if(e<=0)throw new Error("Size must be greater than 0");if(!r||!r.length)return[];let t=[],s=r.length,n=0;for(;n<s;)t.push(r.slice(n,n+e)),n+=e;return t}var O=(r,e,t,s=0)=>{let n=R(e,t).map(a=>(0,S.of)(a).pipe((0,T.delay)(s),(0,T.mergeMap)(r)));return(0,S.of)(...n).pipe((0,T.concatAll)(),(0,T.toArray)())};var m=require("rxjs"),$=require("rxjs/operators");var C=(r,e,t,s=0)=>(0,m.forkJoin)(R(e,t).map((n,a)=>(0,m.timer)(a*s).pipe((0,$.mergeMap)(()=>r(n)))));function V(r){let{actionType:e}=r;return e?t=>t.pipe((0,l.filter)(s=>s!==void 0&&s.type===e)):(console.warn("ofType: Action function does not have actionType property",r),(0,l.filter)(()=>!1))}function N(r){let e=r.map(t=>t.actionType).filter(Boolean);return e.length===0?(console.warn("ofTypes: No valid action types found in array",r),(0,l.filter)(()=>!1)):t=>t.pipe((0,l.filter)(s=>s!==void 0&&e.includes(s.type)))}function _(r){return e=>{let t=r.map(n=>n.actionType).filter(Boolean);if(t.length===0)return console.warn("ofTypesWaitAll: No valid action types found in array",r),(0,p.of)([]);let s=t.map((n,a)=>e.pipe((0,l.filter)(i=>i.type===n),(0,l.take)(1),(0,l.map)(i=>({index:a,action:i}))));return(0,p.combineLatest)(s).pipe((0,l.map)(n=>(n.sort((a,i)=>a.index-i.index),n.map(a=>a.action))))}}function U(r,...e){return r.pipe((0,l.map)(t=>e.map(s=>s(t))))}function z(r,e){return r.pipe((0,l.map)(t=>{let s={};for(let[n,a]of Object.entries(e))s[n]=a(t);return s}))}function J({validator:r,apiCall:e}){return(0,p.pipe)((0,l.switchMap)(t=>{let s=()=>e(t,{chunkRequest:C,chunkRequestConsistent:O});if(!r)return s();let n=r(t),{conditions:a,skipAction:i}=n;return a.every(Boolean)?s():Array.isArray(i)?(0,p.of)(...i?.filter(Boolean).map(c=>typeof c=="function"?c():c)):(0,p.of)(typeof i=="function"?i():i)}))}var w=class{constructor(e,t={},s,n={},a={}){this.storage=e;this.externalStates=t;this.dispatchers=s;this.services=n;this.config=a;this.subscribeToDispatchers(),this.state$=new p.Observable(i=>{this.storage.getState().then(c=>i.next(c));let o=this.storage.subscribeToAll(()=>{this.storage.getState().then(c=>i.next(c))});return()=>o()}).pipe((0,l.share)())}effects=[];subscriptions=[];running=!1;action$=new p.Subject;state$;subscribeToDispatchers(){for(let[e,t]of Object.entries(this.dispatchers)){let s=t.actions.subscribe(n=>{this.action$.next(n)});this.subscriptions.push(s)}}add(e){return this.effects.push(e),this.running&&this.subscribeToEffect(e),this}addEffects(e){return e.forEach(t=>this.add(t)),this}start(){return this.running?this:(this.effects.forEach(e=>this.subscribeToEffect(e)),this.running=!0,this)}stop(){return this.subscriptions.forEach(e=>e.unsubscribe()),this.subscriptions=[],this.running=!1,this}subscribeToEffect(e){try{let s=e(this.action$.asObservable(),this.state$,this.externalStates,this.dispatchers,this.services,this.config).pipe((0,l.catchError)(n=>(console.error("Error in effect:",n),(0,p.of)(null)))).subscribe(n=>{if(n!=null&&typeof n=="function")try{n()}catch(a){console.error("Error calling effect result function:",a)}});this.subscriptions.push(s)}catch(t){console.error("Error setting up effect:",t)}}};function X(r){return r}function G(r){return r}function H(...r){return(e,t,s,n,a,i)=>{let o=r.map(c=>{try{return c(e,t,s,n,a,i)}catch(u){return console.error("Error in one of combined effects:",u),(0,p.of)(null)}});return(0,p.merge)(...o)}}0&&(module.exports={Dispatcher,EffectsModule,combineEffects,createDispatcher,createEffect,createEffectBase,loggerDispatcherMiddleware,ofType,ofTypes,ofTypesWaitAll,selectorMap,selectorObject,validateMap});
@@ -1,128 +0,0 @@
1
- declare class StorageKey {
2
- private readonly value;
3
- private readonly isRawKey;
4
- constructor(value: string, isRawKey?: boolean);
5
- toString(): string;
6
- toJSON(): string;
7
- valueOf(): string;
8
- isUnparseable(): boolean;
9
- }
10
- type StorageKeyType = string | StorageKey;
11
-
12
- interface IndexedDBConfig {
13
- dbName?: string;
14
- dbVersion?: number;
15
- storeName?: string;
16
- }
17
-
18
- type StorageActionType = 'get' | 'set' | 'delete' | 'clear' | 'init' | 'keys' | 'update';
19
- type StorageAction = {
20
- type: StorageActionType;
21
- key?: StorageKeyType;
22
- value?: any;
23
- metadata?: Record<string, any>;
24
- source?: string;
25
- timestamp?: number;
26
- };
27
- type MiddlewareAPI = {
28
- dispatch: (action: StorageAction) => Promise<any>;
29
- getState: () => Promise<Record<string, any>>;
30
- storage: {
31
- doGet: (key: StorageKeyType) => Promise<any>;
32
- doSet: (key: StorageKeyType, value: any) => Promise<void>;
33
- doUpdate: (updates: Array<{
34
- key: StorageKeyType;
35
- value: any;
36
- }>) => Promise<void>;
37
- doDelete: (key: StorageKeyType) => Promise<boolean>;
38
- doClear: () => Promise<void>;
39
- doKeys: () => Promise<string[]>;
40
- notifySubscribers: (key: StorageKeyType, value: any) => void;
41
- };
42
- };
43
- type NextFunction = (action: StorageAction) => Promise<any>;
44
- type SetupEventsFunction = (api: MiddlewareAPI) => void;
45
- type Middleware = {
46
- name: string;
47
- setup?: SetupEventsFunction;
48
- cleanup?: () => Promise<void> | void;
49
- reducer: (api: MiddlewareAPI) => (next: NextFunction) => (action: StorageAction) => Promise<any>;
50
- };
51
-
52
- interface BatchingMiddlewareOptions {
53
- batchSize?: number;
54
- batchDelay?: number;
55
- }
56
-
57
- interface ShallowCompareMiddlewareOptions {
58
- segments?: string[];
59
- comparator?: <T>(prev: T, next: T) => boolean;
60
- }
61
-
62
- interface IStorage<T extends Record<string, any> = any> {
63
- name: string;
64
- get<R>(key: StorageKeyType): Promise<R | undefined>;
65
- getState(): Promise<T>;
66
- set<R>(key: StorageKeyType, value: R): Promise<void>;
67
- update(updater: (state: T) => void): Promise<void>;
68
- has(key: StorageKeyType): Promise<boolean>;
69
- delete(key: StorageKeyType): Promise<void>;
70
- clear(): Promise<void>;
71
- keys(): Promise<string[]>;
72
- destroy(): Promise<void>;
73
- subscribeToAll(callback: (event: {
74
- type: string;
75
- changedPaths?: string[];
76
- key?: StorageKeyType[] | StorageKeyType;
77
- value?: any;
78
- }) => void): VoidFunction;
79
- initialize(): Promise<this>;
80
- subscribe(key: StorageKeyType, callback: (value: any) => void): VoidFunction;
81
- subscribe<R>(pathSelector: (state: T) => R, callback: (value: R) => void): VoidFunction;
82
- }
83
- declare enum StorageEvents {
84
- STORAGE_UPDATE = "storage:update",
85
- STORAGE_DELETE = "storage:delete",
86
- STORAGE_PATCH = "storage:patch",
87
- STORAGE_SELECT = "storage:select",
88
- STORAGE_CLEAR = "storage:clear",
89
- STORAGE_DESTROY = "storage:destroy"
90
- }
91
- interface StorageEvent<T = any> {
92
- type: string;
93
- payload?: T;
94
- metadata?: Record<string, any>;
95
- }
96
- interface IEventEmitter {
97
- emit(event: StorageEvent): Promise<void>;
98
- }
99
- interface ILogger {
100
- debug(message: string, meta?: Record<string, any>): void;
101
- info(message: string, meta?: Record<string, any>): void;
102
- warn(message: string, meta?: Record<string, any>): void;
103
- error(message: string, meta?: Record<string, any>): void;
104
- }
105
- interface DefaultMiddlewares {
106
- batching: (options?: BatchingMiddlewareOptions) => Middleware;
107
- shallowCompare: (options?: ShallowCompareMiddlewareOptions) => Middleware;
108
- }
109
- type GetDefaultMiddleware = () => DefaultMiddlewares;
110
- type ConfigureMiddlewares = (getDefaultMiddleware: GetDefaultMiddleware) => Middleware[];
111
- interface StorageConfig {
112
- name: string;
113
- initialState?: Record<string, any>;
114
- middlewares?: ConfigureMiddlewares;
115
- }
116
- type StorageType = 'memory' | 'localStorage' | 'indexedDB';
117
- interface MemoryStorageConfig extends StorageConfig {
118
- type: 'memory';
119
- }
120
- interface LocalStorageConfig extends StorageConfig {
121
- type: 'localStorage';
122
- }
123
- interface IndexedDBStorageConfig extends StorageConfig {
124
- type: 'indexedDB';
125
- options: IndexedDBConfig;
126
- }
127
-
128
- export { type BatchingMiddlewareOptions as B, type ConfigureMiddlewares as C, type DefaultMiddlewares as D, type GetDefaultMiddleware as G, type IStorage as I, type LocalStorageConfig as L, type Middleware as M, type NextFunction as N, type ShallowCompareMiddlewareOptions as S, type MiddlewareAPI as a, type StorageAction as b, type StorageKeyType as c, StorageEvents as d, type StorageEvent as e, type IEventEmitter as f, type ILogger as g, type StorageConfig as h, type StorageType as i, type MemoryStorageConfig as j, type IndexedDBStorageConfig as k, StorageKey as l };
package/dist/utils.cjs DELETED
@@ -1 +0,0 @@
1
- "use strict";var v=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var K=Object.prototype.hasOwnProperty;var N=(n,e)=>{for(var t in e)v(n,t,{get:e[t],enumerable:!0})},$=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of B(e))!K.call(n,r)&&r!==t&&v(n,r,{get:()=>e[r],enumerable:!(s=O(e,r))||s.enumerable});return n};var F=n=>$(v({},"__esModule",{value:!0}),n);var G={};N(G,{createSynapse:()=>C});module.exports=F(G);var l=!1,f=new Map;function E(n){let e=0;if(n.length===0)return e.toString(36);for(let t=0;t<n.length;t++){let s=n.charCodeAt(t);e=(e<<5)-e+s,e=e&e}return Math.abs(e).toString(36).substring(0,6)}function g(n,e){if(n===e)return!0;if(n==null||e==null)return!1;if(typeof n!="object"&&typeof n!="function"&&typeof e!="object"&&typeof e!="function")return n===e;if(typeof n!=typeof e)return!1;if(n instanceof Date&&e instanceof Date)return n.getTime()===e.getTime();if(Array.isArray(n)&&Array.isArray(e)){if(n.length!==e.length)return!1;for(let t=0;t<n.length;t++)if(!g(n[t],e[t]))return!1;return!0}if(typeof n=="object"&&typeof e=="object"){let t=Object.keys(n),s=Object.keys(e);return t.length!==s.length?!1:t.every(r=>Object.prototype.hasOwnProperty.call(e,r)?g(n[r],e[r]):!1)}return!1}function R(n,e=g){let t,s,r=!1;return function(o){if(!r||t!==o){let i=n(o);(!r||!e(i,s))&&(s=i),t=o,r=!0}return s}}var S=class{constructor(e,t,s=g,r){this.name=e;this.equals=s;this.logger=r;this.id=e,this.memoizedGetState=this.createMemoizedGetState(t),l&&console.log(`[${this.id}] \u0421\u043E\u0437\u0434\u0430\u043D new SelectorSubscription`)}id;subscribers=new Set;lastValue;memoizedGetState;createMemoizedGetState(e){let t=null,s=!1;return async()=>{if(s&&t)return t;s=!0;try{return t=e(),await t}finally{s=!1}}}async notify(){try{let e=await this.memoizedGetState();if(this.lastValue===void 0||!this.equals(e,this.lastValue)){l&&console.log(`[${this.id}] \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0438\u043B\u043E\u0441\u044C, notify()`,{old:this.lastValue,new:e}),this.lastValue=e;let t=Array.from(this.subscribers).map(async s=>{try{await s.notify(e)}catch(r){this.logger?.error(`[${this.id}] \u041E\u0448\u0438\u0431\u043A\u0430 \u0432 \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0438 \u043F\u043E\u0434\u043F\u0438\u0441\u0447\u0438\u043A\u0430`,{error:r})}});await Promise.all(t)}else l&&console.log(`[${this.id}] \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043D\u0435 \u0438\u0437\u043C\u0435\u043D\u0438\u043B\u043E\u0441\u044C in notify(), \u043F\u0440\u043E\u043F\u0443\u0441\u043A \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F`)}catch(e){throw this.logger?.error(`[${this.id}] \u041E\u0448\u0438\u0431\u043A\u0430 \u0432 notify()`,{error:e}),e}}subscribe(e){return l&&console.log(`[${this.id}] \u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043E \u043D\u043E\u0432\u044B\u0439 \u043F\u043E\u0434\u043F\u0438\u0441\u0447\u0438\u043A, \u0432\u0441\u0435\u0433\u043E: ${this.subscribers.size+1}`),this.subscribers.add(e),this.lastValue!==void 0?Promise.resolve().then(()=>{try{e.notify(this.lastValue)}catch(t){this.logger?.error(`[${this.id}] \u041E\u0448\u0438\u0431\u043A\u0430 \u0432 \u043F\u0435\u0440\u0432\u043E\u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u043C \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0438`,{error:t})}}):this.notify().catch(t=>{this.logger?.error(`[${this.id}] \u041E\u0448\u0438\u0431\u043A\u0430 \u0432 \u043F\u0435\u0440\u0432\u043E\u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u043C \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0438`,{error:t})}),()=>{l&&console.log(`[${this.id}] \u041F\u043E\u0434\u043F\u0438\u0441\u0447\u0438\u043A \u0443\u0434\u0430\u043B\u0435\u043D, \u043E\u0441\u0442\u0430\u043B\u043E\u0441\u044C: ${this.subscribers.size-1}`),this.subscribers.delete(e)}}cleanup(){l&&console.log(`[${this.id}] \u041E\u0447\u0438\u0441\u0442\u043A\u0430 \u043F\u043E\u0434\u043F\u0438\u0441\u043A\u0438, \u0431\u044B\u043B\u043E ${this.subscribers.size} \u043F\u043E\u0434\u043F\u0438\u0441\u0447\u0438\u043A\u043E\u0432`),this.subscribers.clear(),this.lastValue=void 0}getId(){return this.id}},m=class{constructor(e,t){this.source=e;this.logger=t;this.storageName=e.name,l&&console.log(`\u0421\u043E\u0437\u0434\u0430\u043D SelectorModule \u0434\u043B\u044F \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430: ${this.storageName}`),this.source.getState().then(s=>{this.cachedState=s,l&&console.log(`\u041A\u044D\u0448\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0435 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0435 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435 \u0434\u043B\u044F ${this.storageName}`)})}storageName;subscriptions=new Map;cachedState;localSelectorCache=new Map;batchUpdateInProgress=!1;pendingUpdates=new Set;generateName(e,t,s){let r=e?"simple":"combined",a="";if(e){let o=t.toString();a=E(o)}else{let o=t.map(c=>c.getId()).join("_"),i=s.toString();a=E(o+i)}return`${this.storageName}_${r}_${a}`}processPendingUpdates(){this.pendingUpdates.size===0||this.batchUpdateInProgress||(this.batchUpdateInProgress=!0,setTimeout(async()=>{try{let e=Array.from(this.pendingUpdates);this.pendingUpdates.clear(),this.cachedState=await this.source.getState();let t=e.map(async s=>{let r=this.subscriptions.get(s);if(r)try{return await r.notify()}catch(a){this.logger?.error(`\u041E\u0448\u0438\u0431\u043A\u0430 \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F \u043F\u043E\u0434\u043F\u0438\u0441\u0447\u0438\u043A\u0430 ${s}`,{error:a})}return Promise.resolve()});await Promise.all(t)}catch(e){this.logger?.error("\u041E\u0448\u0438\u0431\u043A\u0430 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043E\u0436\u0438\u0434\u0430\u044E\u0449\u0438\u0445 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0439",{error:e})}finally{this.batchUpdateInProgress=!1,this.pendingUpdates.size>0&&this.processPendingUpdates()}},0))}createSelector(e,t,s){let r=!Array.isArray(e),a=r?t||{}:s||{},o=a.name||this.generateName(r,e,r?void 0:t);if(this.localSelectorCache.has(o))return l&&console.log(`[${this.storageName}] Reusing cached selector: ${o}`),this.localSelectorCache.get(o).api;if(f.has(o)){let u=f.get(o);return u.refCount++,l&&console.log(`[${this.storageName}] \u041F\u043E\u0432\u0442\u043E\u0440\u043D\u043E\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435 \u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u043A\u044D\u0448\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u0441\u0435\u043B\u0435\u043A\u0442\u043E\u0440\u0430: ${o}, refCount: ${u.refCount}`),u.api}let i,c,h=[];if(r){let u=R(e,a.equals||g),d=this.createSimpleSelector(u,{...a,name:o,equals:a.equals||g});i=d.api,h=d.unsubscribeFunctions}else{c=e;let u=this.createCombinedSelector(c,t,{...a,name:o,equals:a.equals||g});i=u.api,h=u.unsubscribeFunctions}return this.localSelectorCache.set(o,{api:i,dependencies:c,unsubscribeFunctions:h}),f.set(o,{api:i,refCount:1,unsubscribeFunctions:h}),l&&console.log(`[${this.storageName}] \u0421\u043E\u0437\u0434\u0430\u043D \u043D\u043E\u0432\u044B\u0439 \u0441\u0435\u043B\u0435\u043A\u0442\u043E\u0440: ${o}`),i}createSimpleSelector(e,t){l&&console.log(`[${this.storageName}] \u0421\u043E\u0437\u0434\u0430\u043D \u043F\u0440\u043E\u0441\u0442\u043E\u0439 \u0441\u0435\u043B\u0435\u043A\u0442\u043E\u0440: ${t.name}`);let s=async()=>{if(this.cachedState)return e(this.cachedState);let c=await this.source.getState();return this.cachedState=c,e(c)},r=new S(t.name,s,t.equals||g,this.logger),a=r.getId();this.subscriptions.set(a,r);let i=[this.source.subscribeToAll(async c=>{c?.type==="storage:update"&&(l&&console.log(`[${a}] \u041F\u043E\u043B\u0443\u0447\u0435\u043D\u043E \u0441\u043E\u0431\u044B\u0442\u0438\u0435 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430`),this.pendingUpdates.add(a),this.processPendingUpdates())})];return{api:{select:()=>s(),subscribe:c=>r.subscribe(c),getId:()=>a},unsubscribeFunctions:i}}createCombinedSelector(e,t,s){let r=R(d=>t(...d),s.equals||g),a=async()=>{let d=await Promise.all(e.map(w=>w.select()));return r(d)},o=new S(s.name,a,s.equals||g,this.logger),i=o.getId();this.subscriptions.set(i,o);let c=null,h=()=>{c!==null&&clearTimeout(c),c=setTimeout(()=>{c=null,o.notify().catch(d=>this.logger?.error(`[${i}] \u041E\u0448\u0438\u0431\u043A\u0430 \u0432 \u043E\u0431\u044A\u0435\u0434\u0438\u043D\u0435\u043D\u043D\u043E\u043C \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0438:`,{error:d}))},10)},u=e.map(d=>d.subscribe({notify:()=>{h()}}));return{api:{select:()=>a(),subscribe:d=>o.subscribe(d),getId:()=>i},unsubscribeFunctions:u}}destroy(){l&&console.log(`[${this.storageName}] \u041D\u0430\u0447\u0430\u043B\u043E\u0441\u044C \u0443\u043D\u0438\u0447\u0442\u043E\u0436\u0435\u043D\u0438\u0435 SelectorModule`),this.subscriptions.forEach(t=>t.cleanup()),this.subscriptions.clear(),this.cachedState=void 0,this.pendingUpdates.clear(),this.localSelectorCache.forEach(t=>{t.unsubscribeFunctions.forEach(s=>s())});let e=new Set;this.localSelectorCache.forEach((t,s)=>{e.add(s)}),this.localSelectorCache.clear(),e.forEach(t=>{let s=f.get(t);s&&(s.refCount--,s.refCount<=0&&(s.unsubscribeFunctions.forEach(r=>r()),f.delete(t),l&&console.log(`[${this.storageName}] \u0423\u0434\u0430\u043B\u0435\u043D \u0441\u0435\u043B\u0435\u043A\u0442\u043E\u0440 \u0438\u0437 \u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u043A\u044D\u0448\u0430: ${t}`)))}),l&&console.log(`[${this.storageName}] \u0423\u043D\u0438\u0447\u0442\u043E\u0436\u0435\u043D`)}};var j=require("rxjs");var p=require("rxjs"),y=require("rxjs/operators");var _=require("rxjs"),T=require("rxjs/operators");var M=require("rxjs"),q=require("rxjs/operators");var b=class{constructor(e,t={},s,r={},a={}){this.storage=e;this.externalStates=t;this.dispatchers=s;this.services=r;this.config=a;this.subscribeToDispatchers(),this.state$=new p.Observable(o=>{this.storage.getState().then(c=>o.next(c));let i=this.storage.subscribeToAll(()=>{this.storage.getState().then(c=>o.next(c))});return()=>i()}).pipe((0,y.share)())}effects=[];subscriptions=[];running=!1;action$=new p.Subject;state$;subscribeToDispatchers(){for(let[e,t]of Object.entries(this.dispatchers)){let s=t.actions.subscribe(r=>{this.action$.next(r)});this.subscriptions.push(s)}}add(e){return this.effects.push(e),this.running&&this.subscribeToEffect(e),this}addEffects(e){return e.forEach(t=>this.add(t)),this}start(){return this.running?this:(this.effects.forEach(e=>this.subscribeToEffect(e)),this.running=!0,this)}stop(){return this.subscriptions.forEach(e=>e.unsubscribe()),this.subscriptions=[],this.running=!1,this}subscribeToEffect(e){try{let s=e(this.action$.asObservable(),this.state$,this.externalStates,this.dispatchers,this.services,this.config).pipe((0,y.catchError)(r=>(console.error("Error in effect:",r),(0,p.of)(null)))).subscribe(r=>{if(r!=null&&typeof r=="function")try{r()}catch(a){console.error("Error calling effect result function:",a)}});this.subscriptions.push(s)}catch(t){console.error("Error setting up effect:",t)}}};async function C(n){let e=n.createStorageFn?await n.createStorageFn():n.storage,t=[],s={storage:e,selectors:{},destroy:async()=>{for(let i of t)await i()}};t.push(()=>e.destroy());let r,a,o;if(n.createSelectorsFn)try{a=new m(e);let i=n.externalSelectors||{};s.selectors=n.createSelectorsFn(a,i),typeof a.destroy=="function"&&t.push(()=>a.destroy())}catch(i){console.error("\u041E\u0448\u0438\u0431\u043A\u0430 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F selectors:",i)}if(n.createDispatcherFn&&(r=n.createDispatcherFn(e),s.dispatcher=r,r&&"dispatch"in r&&(s.actions=r.dispatch,typeof r.destroy=="function"&&t.push(()=>r.destroy()))),n.createEffectConfig&&r)try{let{dispatchers:i,api:c,config:h,externalStates:u}=n.createEffectConfig(r),d=u||{};o=new b(e,d,i,c,h),Array.isArray(n.effects)&&n.effects.forEach(w=>{o&&o.add(w)}),o.start(),s.state$=o.state$,t.push(()=>{o&&o.stop()})}catch(i){console.error("\u041E\u0448\u0438\u0431\u043A\u0430 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u043C\u043E\u0434\u0443\u043B\u044F \u044D\u0444\u0444\u0435\u043A\u0442\u043E\u0432:",i)}return s}0&&(module.exports={createSynapse});