@tolgee/core 5.8.0 → 5.8.2
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/tolgee.cjs.js +650 -716
- package/dist/tolgee.cjs.js.map +1 -1
- package/dist/tolgee.cjs.min.js +1 -1
- package/dist/tolgee.cjs.min.js.map +1 -1
- package/dist/tolgee.esm.js +650 -716
- package/dist/tolgee.esm.js.map +1 -1
- package/dist/tolgee.esm.min.js +1 -1
- package/dist/tolgee.esm.min.js.map +1 -1
- package/dist/tolgee.esm.min.mjs +1 -1
- package/dist/tolgee.esm.min.mjs.map +1 -1
- package/dist/tolgee.esm.mjs +650 -716
- package/dist/tolgee.esm.mjs.map +1 -1
- package/dist/tolgee.umd.js +650 -716
- package/dist/tolgee.umd.js.map +1 -1
- package/dist/tolgee.umd.min.js +1 -1
- package/dist/tolgee.umd.min.js.map +1 -1
- package/lib/Controller/Cache/Cache.d.ts +14 -14
- package/lib/Controller/Controller.d.ts +23 -23
- package/lib/Controller/Events/EventEmitter.d.ts +1 -1
- package/lib/Controller/Events/EventEmitterSelective.d.ts +1 -1
- package/lib/Controller/Events/Events.d.ts +2 -2
- package/lib/Controller/Plugins/Plugins.d.ts +17 -17
- package/lib/Controller/State/State.d.ts +20 -20
- package/lib/Controller/State/initState.d.ts +1 -1
- package/lib/TolgeeCore.d.ts +2 -2
- package/lib/helpers.d.ts +2 -2
- package/package.json +2 -2
- package/src/Controller/Cache/Cache.ts +175 -193
- package/src/Controller/Controller.ts +105 -114
- package/src/Controller/Events/EventEmitter.ts +21 -22
- package/src/Controller/Events/EventEmitterSelective.ts +59 -58
- package/src/Controller/Events/Events.ts +41 -52
- package/src/Controller/Plugins/Plugins.ts +206 -219
- package/src/Controller/State/State.ts +135 -152
- package/src/Controller/State/initState.ts +3 -3
- package/src/Controller/ValueObserver.ts +11 -12
- package/src/TolgeeCore.ts +7 -7
- package/src/__test/cache.test.ts +3 -2
- package/src/helpers.ts +6 -5
|
@@ -1,32 +1,31 @@
|
|
|
1
1
|
import { Subscription, Listener } from '../../types';
|
|
2
2
|
|
|
3
|
-
export
|
|
3
|
+
export function EventEmitter<T>(
|
|
4
4
|
isActive: () => boolean
|
|
5
|
-
): EventEmitterInstance<T>
|
|
5
|
+
): EventEmitterInstance<T> {
|
|
6
6
|
let handlers: Listener<T>[] = [];
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
return Object.freeze({
|
|
9
|
+
listen(handler: Listener<T>): Subscription {
|
|
10
|
+
const handlerWrapper: Listener<T> = (e) => {
|
|
11
|
+
handler(e);
|
|
12
|
+
};
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
handlers.push(handlerWrapper);
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
return Object.freeze({ listen, emit });
|
|
29
|
-
};
|
|
16
|
+
return {
|
|
17
|
+
unsubscribe() {
|
|
18
|
+
handlers = handlers.filter((i) => handlerWrapper !== i);
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
},
|
|
22
|
+
emit(data: T) {
|
|
23
|
+
if (isActive()) {
|
|
24
|
+
handlers.forEach((handler) => handler({ value: data }));
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
}
|
|
30
29
|
|
|
31
30
|
export type EventEmitterInstance<T> = {
|
|
32
31
|
readonly listen: (handler: Listener<T>) => Subscription;
|
|
@@ -15,54 +15,15 @@ type HandlerWrapperType = {
|
|
|
15
15
|
namespaces: Set<string>;
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
-
export
|
|
18
|
+
export function EventEmitterSelective(
|
|
19
19
|
isActive: () => boolean,
|
|
20
20
|
getFallbackNs: () => string[],
|
|
21
21
|
getDefaultNs: () => string
|
|
22
|
-
): EventEmitterSelectiveInstance
|
|
22
|
+
): EventEmitterSelectiveInstance {
|
|
23
23
|
const listeners: Set<Listener<undefined>> = new Set();
|
|
24
24
|
const partialListeners: Set<HandlerWrapperType> = new Set();
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
listeners.add(handler);
|
|
28
|
-
const result = {
|
|
29
|
-
unsubscribe: () => {
|
|
30
|
-
listeners.delete(handler);
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
return result;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const listenSome = (handler: Listener<undefined>) => {
|
|
37
|
-
const handlerWrapper = {
|
|
38
|
-
fn: (e: ListenerEvent<undefined>) => {
|
|
39
|
-
handler(e);
|
|
40
|
-
},
|
|
41
|
-
namespaces: new Set<NsListType>(),
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
partialListeners.add(handlerWrapper);
|
|
45
|
-
|
|
46
|
-
const result = {
|
|
47
|
-
unsubscribe: () => {
|
|
48
|
-
partialListeners.delete(handlerWrapper);
|
|
49
|
-
},
|
|
50
|
-
subscribeNs: (ns: NsFallback) => {
|
|
51
|
-
getFallbackArray(ns).forEach((val) =>
|
|
52
|
-
handlerWrapper.namespaces.add(val)
|
|
53
|
-
);
|
|
54
|
-
if (ns === undefined) {
|
|
55
|
-
// subscribing to default ns
|
|
56
|
-
handlerWrapper.namespaces.add(getDefaultNs());
|
|
57
|
-
}
|
|
58
|
-
return result;
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
return result;
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
const callHandlers = (ns: Array<string> | undefined) => {
|
|
26
|
+
function callHandlers(ns: Array<string> | undefined) {
|
|
66
27
|
// everything is implicitly subscribed to fallbacks
|
|
67
28
|
// as it can always fall through to it
|
|
68
29
|
const fallbackNamespaces = new Set(getFallbackNs());
|
|
@@ -78,11 +39,12 @@ export const EventEmitterSelective = (
|
|
|
78
39
|
handler.fn({ value: undefined as any });
|
|
79
40
|
}
|
|
80
41
|
});
|
|
81
|
-
}
|
|
42
|
+
}
|
|
82
43
|
|
|
83
44
|
let queue: (string[] | undefined)[] = [];
|
|
45
|
+
|
|
84
46
|
// merge events in queue into one event
|
|
85
|
-
|
|
47
|
+
function solveQueue() {
|
|
86
48
|
if (queue.length === 0) {
|
|
87
49
|
return;
|
|
88
50
|
}
|
|
@@ -109,21 +71,60 @@ export const EventEmitterSelective = (
|
|
|
109
71
|
: undefined;
|
|
110
72
|
|
|
111
73
|
callHandlers(namespacesArray);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return Object.freeze({
|
|
77
|
+
emit(ns?: string[], delayed?: boolean) {
|
|
78
|
+
if (isActive()) {
|
|
79
|
+
queue.push(ns);
|
|
80
|
+
if (!delayed) {
|
|
81
|
+
solveQueue();
|
|
82
|
+
} else {
|
|
83
|
+
setTimeout(solveQueue, 0);
|
|
84
|
+
}
|
|
121
85
|
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
listen(handler: Listener<undefined>) {
|
|
89
|
+
listeners.add(handler);
|
|
90
|
+
const result = {
|
|
91
|
+
unsubscribe: () => {
|
|
92
|
+
listeners.delete(handler);
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
return result;
|
|
96
|
+
},
|
|
97
|
+
|
|
98
|
+
listenSome(handler: Listener<undefined>) {
|
|
99
|
+
const handlerWrapper = {
|
|
100
|
+
fn: (e: ListenerEvent<undefined>) => {
|
|
101
|
+
handler(e);
|
|
102
|
+
},
|
|
103
|
+
namespaces: new Set<NsListType>(),
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
partialListeners.add(handlerWrapper);
|
|
107
|
+
|
|
108
|
+
const result = {
|
|
109
|
+
unsubscribe: () => {
|
|
110
|
+
partialListeners.delete(handlerWrapper);
|
|
111
|
+
},
|
|
112
|
+
subscribeNs: (ns: NsFallback) => {
|
|
113
|
+
getFallbackArray(ns).forEach((val) =>
|
|
114
|
+
handlerWrapper.namespaces.add(val)
|
|
115
|
+
);
|
|
116
|
+
if (ns === undefined) {
|
|
117
|
+
// subscribing to default ns
|
|
118
|
+
handlerWrapper.namespaces.add(getDefaultNs());
|
|
119
|
+
}
|
|
120
|
+
return result;
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
return result;
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
}
|
|
127
128
|
|
|
128
129
|
export type EventEmitterSelectiveInstance = {
|
|
129
130
|
readonly listenSome: (handler: Listener<undefined>) => SubscriptionSelective;
|
|
@@ -2,68 +2,57 @@ import { EventEmitter } from './EventEmitter';
|
|
|
2
2
|
import { EventEmitterSelective } from './EventEmitterSelective';
|
|
3
3
|
import { CacheDescriptorWithKey, TolgeeOn } from '../../types';
|
|
4
4
|
|
|
5
|
-
export
|
|
5
|
+
export function Events(
|
|
6
6
|
getFallbackNs: () => string[],
|
|
7
7
|
getDefaultNs: () => string
|
|
8
|
-
)
|
|
8
|
+
) {
|
|
9
9
|
let emitterActive = true;
|
|
10
10
|
|
|
11
11
|
function isActive() {
|
|
12
12
|
return emitterActive;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
15
|
+
const self = Object.freeze({
|
|
16
|
+
onPendingLanguageChange: EventEmitter<string>(isActive),
|
|
17
|
+
onLanguageChange: EventEmitter<string>(isActive),
|
|
18
|
+
onLoadingChange: EventEmitter<boolean>(isActive),
|
|
19
|
+
onFetchingChange: EventEmitter<boolean>(isActive),
|
|
20
|
+
onInitialLoaded: EventEmitter<void>(isActive),
|
|
21
|
+
onRunningChange: EventEmitter<boolean>(isActive),
|
|
22
|
+
onCacheChange: EventEmitter<CacheDescriptorWithKey>(isActive),
|
|
23
|
+
onUpdate: EventEmitterSelective(isActive, getFallbackNs, getDefaultNs),
|
|
24
|
+
setEmitterActive(active: boolean) {
|
|
25
|
+
emitterActive = active;
|
|
26
|
+
},
|
|
27
|
+
on: ((event, handler): any => {
|
|
28
|
+
switch (event) {
|
|
29
|
+
case 'pendingLanguage':
|
|
30
|
+
return self.onPendingLanguageChange.listen(handler as any);
|
|
31
|
+
case 'language':
|
|
32
|
+
return self.onLanguageChange.listen(handler as any);
|
|
33
|
+
case 'loading':
|
|
34
|
+
return self.onLoadingChange.listen(handler as any);
|
|
35
|
+
case 'fetching':
|
|
36
|
+
return self.onFetchingChange.listen(handler as any);
|
|
37
|
+
case 'initialLoad':
|
|
38
|
+
return self.onInitialLoaded.listen(handler as any);
|
|
39
|
+
case 'running':
|
|
40
|
+
return self.onRunningChange.listen(handler as any);
|
|
41
|
+
case 'cache':
|
|
42
|
+
return self.onCacheChange.listen(handler as any);
|
|
43
|
+
case 'update':
|
|
44
|
+
return self.onUpdate.listen(handler as any);
|
|
45
|
+
}
|
|
46
|
+
}) as TolgeeOn,
|
|
28
47
|
});
|
|
29
48
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
return onLanguageChange.listen(handler as any);
|
|
36
|
-
case 'loading':
|
|
37
|
-
return onLoadingChange.listen(handler as any);
|
|
38
|
-
case 'fetching':
|
|
39
|
-
return onFetchingChange.listen(handler as any);
|
|
40
|
-
case 'initialLoad':
|
|
41
|
-
return onInitialLoaded.listen(handler as any);
|
|
42
|
-
case 'running':
|
|
43
|
-
return onRunningChange.listen(handler as any);
|
|
44
|
-
case 'cache':
|
|
45
|
-
return onCacheChange.listen(handler as any);
|
|
46
|
-
case 'update':
|
|
47
|
-
return onUpdate.listen(handler as any);
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
function setEmitterActive(active: boolean) {
|
|
52
|
-
emitterActive = active;
|
|
53
|
-
}
|
|
49
|
+
self.onInitialLoaded.listen(() => self.onUpdate.emit());
|
|
50
|
+
self.onLanguageChange.listen(() => self.onUpdate.emit());
|
|
51
|
+
self.onCacheChange.listen(({ value }) =>
|
|
52
|
+
self.onUpdate.emit([value.namespace], true)
|
|
53
|
+
);
|
|
54
54
|
|
|
55
|
-
return
|
|
56
|
-
|
|
57
|
-
onLanguageChange,
|
|
58
|
-
onLoadingChange,
|
|
59
|
-
onFetchingChange,
|
|
60
|
-
onInitialLoaded,
|
|
61
|
-
onRunningChange,
|
|
62
|
-
onCacheChange,
|
|
63
|
-
onUpdate,
|
|
64
|
-
setEmitterActive,
|
|
65
|
-
on,
|
|
66
|
-
});
|
|
67
|
-
};
|
|
55
|
+
return self;
|
|
56
|
+
}
|
|
68
57
|
|
|
69
58
|
export type EventsInstance = ReturnType<typeof Events>;
|