@tolgee/core 5.0.0-alpha.1 → 5.0.0-alpha.3
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/README.md +174 -0
- package/README.njk.md +61 -0
- package/dist/tolgee.cjs.js +185 -143
- 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 +185 -143
- package/dist/tolgee.esm.js.map +1 -1
- package/dist/tolgee.esm.min.mjs +1 -1
- package/dist/tolgee.esm.min.mjs.map +1 -1
- package/dist/tolgee.umd.js +185 -143
- 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/Controller.d.ts +8 -4
- 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 +1 -0
- package/lib/Controller/Plugins/Plugins.d.ts +4 -4
- package/lib/Controller/State/State.d.ts +2 -1
- package/lib/Controller/State/initState.d.ts +13 -2
- package/lib/{Tolgee.d.ts → TolgeeCore.d.ts} +13 -4
- package/lib/helpers.d.ts +1 -0
- package/lib/index.d.ts +1 -1
- package/lib/types/events.d.ts +2 -2
- package/lib/types/index.d.ts +1 -1
- package/lib/types/plugin.d.ts +6 -9
- package/package.json +2 -2
- package/src/Controller/Controller.ts +5 -4
- package/src/Controller/Events/EventEmitter.ts +6 -2
- package/src/Controller/Events/EventEmitterSelective.test.ts +23 -0
- package/src/Controller/Events/EventEmitterSelective.ts +8 -5
- package/src/Controller/Events/Events.ts +19 -8
- package/src/Controller/Plugins/Plugins.ts +66 -63
- package/src/Controller/State/initState.ts +16 -1
- package/src/{Tolgee.ts → TolgeeCore.ts} +12 -3
- package/src/__test/backend.test.ts +2 -2
- package/src/__test/cache.test.ts +6 -3
- package/src/__test/client.test.ts +2 -2
- package/src/__test/events.test.ts +30 -5
- package/src/__test/format.simple.test.ts +2 -14
- package/src/__test/formatError.test.ts +61 -0
- package/src/__test/initialization.test.ts +4 -4
- package/src/__test/languageDetection.test.ts +8 -8
- package/src/__test/languageStorage.test.ts +10 -11
- package/src/__test/languages.test.ts +8 -8
- package/src/__test/loading.test.ts +2 -2
- package/src/__test/namespaces.fallback.test.ts +5 -5
- package/src/__test/namespaces.test.ts +4 -4
- package/src/__test/options.test.ts +3 -3
- package/src/__test/plugins.test.ts +4 -4
- package/src/helpers.ts +8 -0
- package/src/index.ts +1 -1
- package/src/types/events.ts +2 -2
- package/src/types/index.ts +1 -1
- package/src/types/plugin.ts +12 -12
|
@@ -31,10 +31,10 @@ export declare const Controller: ({ options }: StateServiceProps) => Readonly<{
|
|
|
31
31
|
language: string;
|
|
32
32
|
namespace: string;
|
|
33
33
|
}[];
|
|
34
|
-
prepare: () => void;
|
|
35
34
|
addPlugin: (tolgeeInstance: Readonly<{
|
|
36
35
|
on: import("../types").TolgeeOn<keyof import("../types").EventType>;
|
|
37
36
|
onNsUpdate: (handler: import("../types").Listener<undefined>) => import("../types").SubscriptionSelective;
|
|
37
|
+
setEmmiterActive: (active: boolean) => void;
|
|
38
38
|
getLanguage: () => string | undefined;
|
|
39
39
|
getPendingLanguage: () => string | undefined;
|
|
40
40
|
changeLanguage: (language: string) => Promise<void>;
|
|
@@ -73,8 +73,9 @@ export declare const Controller: ({ options }: StateServiceProps) => Readonly<{
|
|
|
73
73
|
fallbackNs?: import("../types").FallbackGeneral;
|
|
74
74
|
defaultNs: string;
|
|
75
75
|
staticData?: import("./State/initState").TolgeeStaticData | undefined;
|
|
76
|
-
observerOptions: import("./State/observerOptions").ObserverOptionsInternal;
|
|
77
76
|
observerType: "invisible" | "text";
|
|
77
|
+
observerOptions: import("./State/observerOptions").ObserverOptionsInternal;
|
|
78
|
+
onFormatError: import("../types").OnFormatError;
|
|
78
79
|
};
|
|
79
80
|
isDev: () => boolean;
|
|
80
81
|
wrap: (params: import("../types").WrapperWrapProps) => string | undefined;
|
|
@@ -83,7 +84,7 @@ export declare const Controller: ({ options }: StateServiceProps) => Readonly<{
|
|
|
83
84
|
addPlugin(plugin: import("../types").TolgeePlugin | undefined): void;
|
|
84
85
|
updateOptions(options?: TolgeeOptions | undefined): void;
|
|
85
86
|
}>, plugin: import("../types").TolgeePlugin) => void;
|
|
86
|
-
formatTranslation: ({
|
|
87
|
+
formatTranslation: ({ formatEnabled, ...props }: {
|
|
87
88
|
key: string;
|
|
88
89
|
defaultValue?: string | undefined;
|
|
89
90
|
params?: import("../types").TranslateParams<import("../types").DefaultParamType> | undefined;
|
|
@@ -96,6 +97,7 @@ export declare const Controller: ({ options }: StateServiceProps) => Readonly<{
|
|
|
96
97
|
getBackendRecord: import("../types").BackendGetRecord;
|
|
97
98
|
getBackendDevRecord: import("../types").BackendGetRecord;
|
|
98
99
|
getLanguageDetector: () => import("../types").LanguageDetectorMiddleware | undefined;
|
|
100
|
+
getLanguageStorage: () => import("../types").LanguageStorageMiddleware | undefined;
|
|
99
101
|
getInitialLanguage: () => string | Promise<string | undefined> | Promise<string | Promise<string | undefined> | undefined> | undefined;
|
|
100
102
|
setStoredLanguage: (language: string) => void;
|
|
101
103
|
retranslate: () => void;
|
|
@@ -123,8 +125,9 @@ export declare const Controller: ({ options }: StateServiceProps) => Readonly<{
|
|
|
123
125
|
fallbackNs?: import("../types").FallbackGeneral;
|
|
124
126
|
defaultNs: string;
|
|
125
127
|
staticData?: import("./State/initState").TolgeeStaticData | undefined;
|
|
126
|
-
observerOptions: import("./State/observerOptions").ObserverOptionsInternal;
|
|
127
128
|
observerType: "invisible" | "text";
|
|
129
|
+
observerOptions: import("./State/observerOptions").ObserverOptionsInternal;
|
|
130
|
+
onFormatError: import("../types").OnFormatError;
|
|
128
131
|
};
|
|
129
132
|
removeActiveNs: (ns: NsFallback) => void;
|
|
130
133
|
getRequiredNamespaces: () => string[];
|
|
@@ -142,6 +145,7 @@ export declare const Controller: ({ options }: StateServiceProps) => Readonly<{
|
|
|
142
145
|
onRunningChange: import("./Events/EventEmitter").EventEmitterInstance<boolean>;
|
|
143
146
|
onCacheChange: import("./Events/EventEmitter").EventEmitterInstance<import("../types").CacheDescriptorWithKey>;
|
|
144
147
|
onUpdate: import("./Events/EventEmitterSelective").EventEmitterSelectiveInstance;
|
|
148
|
+
setEmmiterActive: (active: boolean) => void;
|
|
145
149
|
on: import("../types").TolgeeOn<keyof import("../types").EventType>;
|
|
146
150
|
}>;
|
|
147
151
|
export declare type ControllerInstance = ReturnType<typeof Controller>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Subscription, Listener } from '../../types';
|
|
2
|
-
export declare const EventEmitter: <T>() => EventEmitterInstance<T>;
|
|
2
|
+
export declare const EventEmitter: <T>(isActive: () => boolean) => EventEmitterInstance<T>;
|
|
3
3
|
export declare type EventEmitterInstance<T> = {
|
|
4
4
|
readonly listen: (handler: Listener<T>) => Subscription;
|
|
5
5
|
readonly emit: (data: T) => void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Subscription, Listener, SubscriptionSelective } from '../../types';
|
|
2
|
-
export declare const EventEmitterSelective: (getFallbackNs: () => string[], getDefaultNs: () => string) => EventEmitterSelectiveInstance;
|
|
2
|
+
export declare const EventEmitterSelective: (isActive: () => boolean, getFallbackNs: () => string[], getDefaultNs: () => string) => EventEmitterSelectiveInstance;
|
|
3
3
|
export declare type EventEmitterSelectiveInstance = {
|
|
4
4
|
readonly listenSome: (handler: Listener<undefined>) => SubscriptionSelective;
|
|
5
5
|
readonly listen: (handler: Listener<undefined>) => Subscription;
|
|
@@ -8,6 +8,7 @@ export declare const Events: (getFallbackNs: () => string[], getDefaultNs: () =>
|
|
|
8
8
|
onRunningChange: import("./EventEmitter").EventEmitterInstance<boolean>;
|
|
9
9
|
onCacheChange: import("./EventEmitter").EventEmitterInstance<CacheDescriptorWithKey>;
|
|
10
10
|
onUpdate: import("./EventEmitterSelective").EventEmitterSelectiveInstance;
|
|
11
|
+
setEmmiterActive: (active: boolean) => void;
|
|
11
12
|
on: TolgeeOn<keyof import("../../types").EventType>;
|
|
12
13
|
}>;
|
|
13
14
|
export declare type EventsInstance = ReturnType<typeof Events>;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { BackendDevMiddleware, BackendGetRecord, TranslatePropsInternal, HighlightInterface, LanguageDetectorMiddleware, ChangeTranslationInterface, WrapperWrapProps, Unwrapped, KeyAndNamespacesInternal, TolgeePlugin, TolgeeInstance, TolgeeOptionsInternal } from '../../types';
|
|
1
|
+
import { BackendDevMiddleware, BackendGetRecord, TranslatePropsInternal, HighlightInterface, LanguageDetectorMiddleware, LanguageStorageMiddleware, ChangeTranslationInterface, WrapperWrapProps, Unwrapped, KeyAndNamespacesInternal, TolgeePlugin, TolgeeInstance, TolgeeOptionsInternal } from '../../types';
|
|
2
2
|
export declare const Plugins: (getLanguage: () => string | undefined, getInitialOptions: () => TolgeeOptionsInternal, getAvailableLanguages: () => string[] | undefined, getTranslationNs: (props: KeyAndNamespacesInternal) => string[], getTranslation: (props: KeyAndNamespacesInternal) => string | undefined, changeTranslation: ChangeTranslationInterface) => Readonly<{
|
|
3
|
-
prepare: () => void;
|
|
4
3
|
addPlugin: (tolgeeInstance: TolgeeInstance, plugin: TolgeePlugin) => void;
|
|
5
|
-
formatTranslation: ({
|
|
4
|
+
formatTranslation: ({ formatEnabled, ...props }: {
|
|
6
5
|
key: string;
|
|
7
6
|
defaultValue?: string | undefined;
|
|
8
7
|
params?: import("../../types").TranslateParams<import("../../types").DefaultParamType> | undefined;
|
|
@@ -15,9 +14,10 @@ export declare const Plugins: (getLanguage: () => string | undefined, getInitial
|
|
|
15
14
|
getBackendRecord: BackendGetRecord;
|
|
16
15
|
getBackendDevRecord: BackendGetRecord;
|
|
17
16
|
getLanguageDetector: () => LanguageDetectorMiddleware | undefined;
|
|
17
|
+
getLanguageStorage: () => LanguageStorageMiddleware | undefined;
|
|
18
18
|
getInitialLanguage: () => string | Promise<string | undefined> | Promise<string | Promise<string | undefined> | undefined> | undefined;
|
|
19
19
|
setStoredLanguage: (language: string) => void;
|
|
20
|
-
run: (
|
|
20
|
+
run: () => void;
|
|
21
21
|
stop: () => void;
|
|
22
22
|
retranslate: () => void;
|
|
23
23
|
highlight: HighlightInterface;
|
|
@@ -23,8 +23,9 @@ export declare const State: (onLanguageChange: EventEmitterInstance<string>, onP
|
|
|
23
23
|
fallbackNs?: import("../../types").FallbackGeneral;
|
|
24
24
|
defaultNs: string;
|
|
25
25
|
staticData?: import("./initState").TolgeeStaticData | undefined;
|
|
26
|
-
observerOptions: import("./observerOptions").ObserverOptionsInternal;
|
|
27
26
|
observerType: "invisible" | "text";
|
|
27
|
+
observerOptions: import("./observerOptions").ObserverOptionsInternal;
|
|
28
|
+
onFormatError: import("../../types").OnFormatError;
|
|
28
29
|
};
|
|
29
30
|
addActiveNs: (ns: NsFallback) => void;
|
|
30
31
|
removeActiveNs: (ns: NsFallback) => void;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { FallbackGeneral, FallbackLanguageOption, TreeTranslationsData } from '../../types';
|
|
1
|
+
import { FallbackGeneral, FallbackLanguageOption, TreeTranslationsData, OnFormatError } from '../../types';
|
|
2
2
|
import { ObserverOptions, ObserverOptionsInternal } from './observerOptions';
|
|
3
|
+
export declare const DEFAULT_FORMAT_ERROR = "invalid";
|
|
3
4
|
export declare type TolgeeStaticData = {
|
|
4
5
|
[key: string]: TreeTranslationsData | (() => Promise<TreeTranslationsData>);
|
|
5
6
|
};
|
|
@@ -57,8 +58,18 @@ export declare type TolgeeOptionsInternal = {
|
|
|
57
58
|
* ```
|
|
58
59
|
*/
|
|
59
60
|
staticData?: TolgeeStaticData;
|
|
60
|
-
|
|
61
|
+
/**
|
|
62
|
+
* Switches between invisible and text observer. (Default: invisible)
|
|
63
|
+
*/
|
|
61
64
|
observerType: 'invisible' | 'text';
|
|
65
|
+
/**
|
|
66
|
+
* Observer options object.
|
|
67
|
+
*/
|
|
68
|
+
observerOptions: ObserverOptionsInternal;
|
|
69
|
+
/**
|
|
70
|
+
* Define what to display in case of formatting error. (Default: 'invalid')
|
|
71
|
+
*/
|
|
72
|
+
onFormatError: OnFormatError;
|
|
62
73
|
};
|
|
63
74
|
export declare type TolgeeOptions = Partial<Omit<TolgeeOptionsInternal, 'observerOptions'>> & {
|
|
64
75
|
observerOptions?: ObserverOptions;
|
|
@@ -18,6 +18,10 @@ declare const createTolgee: (options: TolgeeOptions) => Readonly<{
|
|
|
18
18
|
* ```
|
|
19
19
|
*/
|
|
20
20
|
onNsUpdate: (handler: import("./types").Listener<undefined>) => import("./types").SubscriptionSelective;
|
|
21
|
+
/**
|
|
22
|
+
* Turn off/on events emitting. Is on by default.
|
|
23
|
+
*/
|
|
24
|
+
setEmmiterActive: (active: boolean) => void;
|
|
21
25
|
/**
|
|
22
26
|
* @return current language if set.
|
|
23
27
|
*/
|
|
@@ -135,8 +139,9 @@ declare const createTolgee: (options: TolgeeOptions) => Readonly<{
|
|
|
135
139
|
fallbackNs?: import("./types").FallbackGeneral;
|
|
136
140
|
defaultNs: string;
|
|
137
141
|
staticData?: import("./types").TolgeeStaticData | undefined;
|
|
138
|
-
observerOptions: import("./types").ObserverOptionsInternal;
|
|
139
142
|
observerType: "invisible" | "text";
|
|
143
|
+
observerOptions: import("./types").ObserverOptionsInternal;
|
|
144
|
+
onFormatError: import("./types").OnFormatError;
|
|
140
145
|
};
|
|
141
146
|
/**
|
|
142
147
|
* Tolgee is in dev mode if `DevTools` plugin is used and `apiKey` + `apiUrl` are specified.
|
|
@@ -152,11 +157,15 @@ declare const createTolgee: (options: TolgeeOptions) => Readonly<{
|
|
|
152
157
|
*/
|
|
153
158
|
unwrap: (text: string) => import("./types").Unwrapped;
|
|
154
159
|
/**
|
|
155
|
-
* Override creadentials passed on initialization
|
|
160
|
+
* Override creadentials passed on initialization.
|
|
161
|
+
*
|
|
162
|
+
* When called in running state, tolgee stops and runs again.
|
|
156
163
|
*/
|
|
157
164
|
overrideCredentials(credentials: DevCredentials): void;
|
|
158
165
|
/**
|
|
159
|
-
* Add tolgee plugin.
|
|
166
|
+
* Add tolgee plugin after initialization.
|
|
167
|
+
*
|
|
168
|
+
* When called in running state, tolgee stops and runs again.
|
|
160
169
|
*/
|
|
161
170
|
addPlugin(plugin: TolgeePlugin | undefined): void;
|
|
162
171
|
/**
|
|
@@ -191,5 +200,5 @@ export declare type TolgeeChainer = {
|
|
|
191
200
|
* const tolgee = Tolgee().use(...).init(...)
|
|
192
201
|
* ```
|
|
193
202
|
*/
|
|
194
|
-
export declare const
|
|
203
|
+
export declare const TolgeeCore: () => TolgeeChainer;
|
|
195
204
|
export {};
|
package/lib/helpers.d.ts
CHANGED
|
@@ -8,3 +8,4 @@ export declare function getFallbackArray(value: FallbackGeneral): string[];
|
|
|
8
8
|
export declare function getFallbackFromStruct(language: string, fallbackLanguage: FallbackLanguageOption): string[];
|
|
9
9
|
export declare function unique<T>(arr: T[]): T[];
|
|
10
10
|
export declare function sanitizeUrl(url: string | undefined): string | undefined;
|
|
11
|
+
export declare function getErrorMessage(error: any): string | undefined;
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { getFallback, getFallbackArray } from './helpers';
|
|
2
|
-
export {
|
|
2
|
+
export { TolgeeCore } from './TolgeeCore';
|
|
3
3
|
export * from './types';
|
|
4
4
|
export { getTranslateProps } from './TranslateParams';
|
|
5
5
|
export { FormatSimple } from './FormatSimple/FormatSimple';
|
package/lib/types/events.d.ts
CHANGED
|
@@ -17,10 +17,10 @@ export declare type ListenerEvent<T> = {
|
|
|
17
17
|
value: T;
|
|
18
18
|
};
|
|
19
19
|
export declare type Listener<T> = (e: ListenerEvent<T>) => void;
|
|
20
|
-
export declare type TolgeeEvent = '
|
|
20
|
+
export declare type TolgeeEvent = 'language' | 'pendingLanguage' | 'loading' | 'fetching' | 'initialLoad' | 'running' | 'cache' | 'update';
|
|
21
21
|
export interface EventType {
|
|
22
|
-
pendingLanguage: string;
|
|
23
22
|
language: string;
|
|
23
|
+
pendingLanguage: string;
|
|
24
24
|
loading: boolean;
|
|
25
25
|
fetching: boolean;
|
|
26
26
|
initialLoad: void;
|
package/lib/types/index.d.ts
CHANGED
|
@@ -4,4 +4,4 @@ export * from './cache';
|
|
|
4
4
|
export * from './plugin';
|
|
5
5
|
export type { State, TolgeeOptions, TolgeeOptionsInternal, TolgeeStaticData, } from '../Controller/State/initState';
|
|
6
6
|
export type { ObserverOptions, ObserverOptionsInternal, ModifierKey, } from '../Controller/State/observerOptions';
|
|
7
|
-
export type { TolgeeChainer, TolgeeInstance } from '../
|
|
7
|
+
export type { TolgeeChainer, TolgeeInstance } from '../TolgeeCore';
|
package/lib/types/plugin.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ChangeTranslationInterface, TreeTranslationsData } from './cache';
|
|
2
2
|
import { NsFallback, NsType, TranslateParams, TranslatePropsInternal } from './general';
|
|
3
3
|
import type { ObserverOptionsInternal } from '../Controller/State/observerOptions';
|
|
4
|
-
import { TolgeeInstance } from '../
|
|
4
|
+
import { TolgeeInstance } from '../TolgeeCore';
|
|
5
5
|
export declare type BackendDevProps = {
|
|
6
6
|
apiUrl?: string;
|
|
7
7
|
apiKey?: string;
|
|
@@ -106,25 +106,22 @@ export declare type UiKeyOption = {
|
|
|
106
106
|
ns: string[];
|
|
107
107
|
translation: string | undefined;
|
|
108
108
|
};
|
|
109
|
-
export
|
|
109
|
+
export declare type UiMiddleware = (props: UiProps) => UiInterface;
|
|
110
|
+
export interface UiInterface {
|
|
110
111
|
handleElementClick(keysAndDefaults: UiKeyOption[], event: any): Promise<void>;
|
|
111
112
|
}
|
|
112
|
-
export declare type UiConstructor = new (props: UiProps) => UiMiddleware;
|
|
113
|
-
export declare type UiLibMiddleware = {
|
|
114
|
-
UI: UiConstructor;
|
|
115
|
-
};
|
|
116
|
-
export declare type UiType = UiConstructor | UiLibMiddleware;
|
|
117
113
|
export declare type PluginTools = Readonly<{
|
|
118
114
|
setFinalFormatter: (formatter: FinalFormatterMiddleware | undefined) => void;
|
|
119
115
|
addFormatter: (formatter: FormatterMiddleware | undefined) => void;
|
|
120
116
|
setObserver: (observer: ObserverMiddleware | undefined) => void;
|
|
121
117
|
hasObserver: () => boolean;
|
|
122
|
-
setUi: (ui:
|
|
118
|
+
setUi: (ui: UiMiddleware | undefined) => void;
|
|
123
119
|
hasUi: () => boolean;
|
|
124
120
|
addBackend: (backend: BackendMiddleware | undefined) => void;
|
|
125
121
|
setDevBackend: (backend: BackendDevMiddleware | undefined) => void;
|
|
126
122
|
setLanguageDetector: (languageDetector: LanguageDetectorMiddleware | undefined) => void;
|
|
127
123
|
setLanguageStorage: (languageStorage: LanguageStorageMiddleware | undefined) => void;
|
|
128
|
-
onPrepare: (callback: () => void) => void;
|
|
129
124
|
}>;
|
|
130
125
|
export declare type TolgeePlugin = (tolgee: TolgeeInstance, tools: PluginTools) => TolgeeInstance;
|
|
126
|
+
export declare type FormatErrorHandler = (error: string, info: TranslatePropsInternal) => string;
|
|
127
|
+
export declare type OnFormatError = string | FormatErrorHandler;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tolgee/core",
|
|
3
|
-
"version": "5.0.0-alpha.
|
|
3
|
+
"version": "5.0.0-alpha.3",
|
|
4
4
|
"description": "Library providing ability to translate messages directly in context of developed application.",
|
|
5
5
|
"main": "./dist/tolgee.cjs.js",
|
|
6
6
|
"module": "./dist/tolgee.esm.js",
|
|
@@ -62,5 +62,5 @@
|
|
|
62
62
|
"publishConfig": {
|
|
63
63
|
"access": "public"
|
|
64
64
|
},
|
|
65
|
-
"gitHead": "
|
|
65
|
+
"gitHead": "8bb0a0873ba83cce1292464649cb999fc7ecea72"
|
|
66
66
|
}
|
|
@@ -248,15 +248,16 @@ export const Controller = ({ options }: StateServiceProps) => {
|
|
|
248
248
|
}
|
|
249
249
|
|
|
250
250
|
const checkCorrectConfiguration = () => {
|
|
251
|
-
const
|
|
252
|
-
|
|
251
|
+
const languageComputable =
|
|
252
|
+
pluginService.getLanguageDetector() || pluginService.getLanguageStorage();
|
|
253
|
+
if (languageComputable) {
|
|
253
254
|
const availableLanguages = state.getAvailableLanguages();
|
|
254
255
|
if (!availableLanguages) {
|
|
255
256
|
throw new Error(missingOptionError('availableLanguages'));
|
|
256
257
|
}
|
|
257
258
|
}
|
|
258
259
|
if (!state.getLanguage() && !state.getInitialOptions().defaultLanguage) {
|
|
259
|
-
if (
|
|
260
|
+
if (languageComputable) {
|
|
260
261
|
throw new Error(missingOptionError('defaultLanguage'));
|
|
261
262
|
} else {
|
|
262
263
|
throw new Error(missingOptionError('language'));
|
|
@@ -272,7 +273,7 @@ export const Controller = ({ options }: StateServiceProps) => {
|
|
|
272
273
|
cache.invalidate();
|
|
273
274
|
}
|
|
274
275
|
state.setRunning(true);
|
|
275
|
-
pluginService.run(
|
|
276
|
+
pluginService.run();
|
|
276
277
|
result = loadInitial();
|
|
277
278
|
}
|
|
278
279
|
return Promise.resolve(result);
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Subscription, Listener } from '../../types';
|
|
2
2
|
|
|
3
|
-
export const EventEmitter = <T>(
|
|
3
|
+
export const EventEmitter = <T>(
|
|
4
|
+
isActive: () => boolean
|
|
5
|
+
): EventEmitterInstance<T> => {
|
|
4
6
|
let handlers: Listener<T>[] = [];
|
|
5
7
|
|
|
6
8
|
const listen = (handler: Listener<T>): Subscription => {
|
|
@@ -18,7 +20,9 @@ export const EventEmitter = <T>(): EventEmitterInstance<T> => {
|
|
|
18
20
|
};
|
|
19
21
|
|
|
20
22
|
const emit = (data: T) => {
|
|
21
|
-
|
|
23
|
+
if (isActive()) {
|
|
24
|
+
handlers.forEach((handler) => handler({ value: data }));
|
|
25
|
+
}
|
|
22
26
|
};
|
|
23
27
|
|
|
24
28
|
return Object.freeze({ listen, emit });
|
|
@@ -3,6 +3,7 @@ import { EventEmitterSelective } from './EventEmitterSelective';
|
|
|
3
3
|
describe('event emitter selective', () => {
|
|
4
4
|
it('handles correctly default namespace', () => {
|
|
5
5
|
const emitter = EventEmitterSelective(
|
|
6
|
+
() => true,
|
|
6
7
|
() => [],
|
|
7
8
|
() => 'default'
|
|
8
9
|
);
|
|
@@ -22,6 +23,7 @@ describe('event emitter selective', () => {
|
|
|
22
23
|
|
|
23
24
|
it('unsubscribes', () => {
|
|
24
25
|
const emitter = EventEmitterSelective(
|
|
26
|
+
() => true,
|
|
25
27
|
() => [],
|
|
26
28
|
() => ''
|
|
27
29
|
);
|
|
@@ -37,6 +39,7 @@ describe('event emitter selective', () => {
|
|
|
37
39
|
|
|
38
40
|
it('groups events correctly', async () => {
|
|
39
41
|
const emitter = EventEmitterSelective(
|
|
42
|
+
() => true,
|
|
40
43
|
() => ['test', 'opqrst'],
|
|
41
44
|
() => ''
|
|
42
45
|
);
|
|
@@ -69,6 +72,7 @@ describe('event emitter selective', () => {
|
|
|
69
72
|
|
|
70
73
|
it('always subscribes to fallback ns', async () => {
|
|
71
74
|
const emitter = EventEmitterSelective(
|
|
75
|
+
() => true,
|
|
72
76
|
() => ['fallback1', 'fallback2'],
|
|
73
77
|
() => ''
|
|
74
78
|
);
|
|
@@ -84,4 +88,23 @@ describe('event emitter selective', () => {
|
|
|
84
88
|
emitter.emit(['test']);
|
|
85
89
|
expect(handler).toBeCalledTimes(2);
|
|
86
90
|
});
|
|
91
|
+
|
|
92
|
+
it('switches off emitting', () => {
|
|
93
|
+
const emitter = EventEmitterSelective(
|
|
94
|
+
() => false,
|
|
95
|
+
() => ['fallback1', 'fallback2'],
|
|
96
|
+
() => ''
|
|
97
|
+
);
|
|
98
|
+
const handler = jest.fn();
|
|
99
|
+
emitter.listenSome(handler);
|
|
100
|
+
|
|
101
|
+
emitter.emit(['fallback1']);
|
|
102
|
+
expect(handler).toBeCalledTimes(0);
|
|
103
|
+
|
|
104
|
+
emitter.emit(['fallback2']);
|
|
105
|
+
expect(handler).toBeCalledTimes(0);
|
|
106
|
+
|
|
107
|
+
emitter.emit(['']);
|
|
108
|
+
expect(handler).toBeCalledTimes(0);
|
|
109
|
+
});
|
|
87
110
|
});
|
|
@@ -16,6 +16,7 @@ type HandlerWrapperType = {
|
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
export const EventEmitterSelective = (
|
|
19
|
+
isActive: () => boolean,
|
|
19
20
|
getFallbackNs: () => string[],
|
|
20
21
|
getDefaultNs: () => string
|
|
21
22
|
): EventEmitterSelectiveInstance => {
|
|
@@ -111,11 +112,13 @@ export const EventEmitterSelective = (
|
|
|
111
112
|
};
|
|
112
113
|
|
|
113
114
|
const emit = (ns?: string[], delayed?: boolean) => {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
115
|
+
if (isActive()) {
|
|
116
|
+
queue.push(ns);
|
|
117
|
+
if (!delayed) {
|
|
118
|
+
solveQueue();
|
|
119
|
+
} else {
|
|
120
|
+
setTimeout(solveQueue, 0);
|
|
121
|
+
}
|
|
119
122
|
}
|
|
120
123
|
};
|
|
121
124
|
|
|
@@ -6,14 +6,20 @@ export const Events = (
|
|
|
6
6
|
getFallbackNs: () => string[],
|
|
7
7
|
getDefaultNs: () => string
|
|
8
8
|
) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
const
|
|
9
|
+
let emitterActive = true;
|
|
10
|
+
|
|
11
|
+
function isActive() {
|
|
12
|
+
return emitterActive;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const onPendingLanguageChange = EventEmitter<string>(isActive);
|
|
16
|
+
const onLanguageChange = EventEmitter<string>(isActive);
|
|
17
|
+
const onLoadingChange = EventEmitter<boolean>(isActive);
|
|
18
|
+
const onFetchingChange = EventEmitter<boolean>(isActive);
|
|
19
|
+
const onInitialLoaded = EventEmitter<void>(isActive);
|
|
20
|
+
const onRunningChange = EventEmitter<boolean>(isActive);
|
|
21
|
+
const onCacheChange = EventEmitter<CacheDescriptorWithKey>(isActive);
|
|
22
|
+
const onUpdate = EventEmitterSelective(isActive, getFallbackNs, getDefaultNs);
|
|
17
23
|
|
|
18
24
|
onInitialLoaded.listen(() => onUpdate.emit());
|
|
19
25
|
onLanguageChange.listen(() => onUpdate.emit());
|
|
@@ -42,6 +48,10 @@ export const Events = (
|
|
|
42
48
|
}
|
|
43
49
|
};
|
|
44
50
|
|
|
51
|
+
function setEmmiterActive(active: boolean) {
|
|
52
|
+
emitterActive = active;
|
|
53
|
+
}
|
|
54
|
+
|
|
45
55
|
return Object.freeze({
|
|
46
56
|
onPendingLanguageChange,
|
|
47
57
|
onLanguageChange,
|
|
@@ -51,6 +61,7 @@ export const Events = (
|
|
|
51
61
|
onRunningChange,
|
|
52
62
|
onCacheChange,
|
|
53
63
|
onUpdate,
|
|
64
|
+
setEmmiterActive,
|
|
54
65
|
on,
|
|
55
66
|
});
|
|
56
67
|
};
|