@tolgee/core 4.9.2 → 5.0.0-rc.4aa3be8.0
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 +1069 -7029
- 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.min.mjs +1 -1
- package/dist/tolgee.esm.min.mjs.map +1 -1
- package/dist/tolgee.esm.mjs +1067 -7024
- package/dist/tolgee.esm.mjs.map +1 -1
- package/dist/tolgee.umd.js +1069 -7029
- 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 +23 -0
- package/lib/Controller/Cache/helpers.d.ts +4 -0
- package/lib/Controller/Controller.d.ts +93 -0
- package/lib/Controller/Plugins/Plugins.d.ts +41 -0
- package/lib/Controller/State/State.d.ts +22 -0
- package/lib/Controller/State/helpers.d.ts +6 -0
- package/lib/Controller/State/initState.d.ts +55 -0
- package/lib/Controller/ValueObserver.d.ts +5 -0
- package/lib/Events/EventEmitter.d.ts +6 -0
- package/lib/Events/EventEmitterSelective.d.ts +15 -0
- package/lib/Events/Events.d.ts +50 -0
- package/lib/Tolgee.d.ts +2 -68
- package/lib/TranslateParams.d.ts +2 -0
- package/lib/{Constants/Global.d.ts → constants.d.ts} +1 -2
- package/lib/helpers.d.ts +3 -0
- package/lib/index.d.ts +3 -8
- package/lib/types.d.ts +235 -84
- package/package.json +19 -31
- package/src/Controller/Cache/Cache.ts +295 -0
- package/src/Controller/Cache/helpers.ts +39 -0
- package/src/Controller/Controller.ts +289 -0
- package/src/Controller/Plugins/Plugins.ts +305 -0
- package/src/Controller/State/State.ts +165 -0
- package/src/Controller/State/helpers.ts +41 -0
- package/src/Controller/State/initState.ts +90 -0
- package/src/Controller/ValueObserver.ts +23 -0
- package/src/Events/EventEmitter.ts +27 -0
- package/src/Events/EventEmitterSelective.test.ts +108 -0
- package/src/Events/EventEmitterSelective.ts +160 -0
- package/src/Events/Events.ts +66 -0
- package/src/Tolgee.ts +75 -333
- package/src/TranslateParams.test.ts +41 -0
- package/src/TranslateParams.ts +51 -0
- package/src/__test/backend.test.ts +48 -0
- package/src/__test/client.test.ts +48 -0
- package/src/__test/events.test.ts +33 -0
- package/src/__test/initialization.test.ts +73 -0
- package/src/__test/jest-setup.ts +2 -0
- package/src/__test/languageDetection.test.ts +123 -0
- package/src/__test/languageStorage.test.ts +145 -0
- package/src/__test/languages.test.ts +106 -0
- package/src/__test/loading.test.ts +39 -0
- package/src/__test/namespaces.test.ts +99 -0
- package/src/__test/namespacesFallback.test.ts +73 -0
- package/src/__test/plugins.test.ts +98 -0
- package/src/__test/testTools.ts +7 -0
- package/src/{Constants/Global.ts → constants.ts} +1 -3
- package/src/helpers.ts +17 -0
- package/src/index.ts +9 -8
- package/src/types.ts +324 -90
- package/README.md +0 -45
- package/dist/Constants/Global.d.ts +0 -6
- package/dist/Constants/ModifierKey.d.ts +0 -6
- package/dist/Errors/ApiHttpError.d.ts +0 -5
- package/dist/Observer.d.ts +0 -14
- package/dist/Observer.test.d.ts +0 -2
- package/dist/Properties.d.ts +0 -17
- package/dist/Properties.test.d.ts +0 -1
- package/dist/Tolgee.d.ts +0 -68
- package/dist/Tolgee.test.d.ts +0 -1
- package/dist/TolgeeConfig.d.ts +0 -69
- package/dist/TolgeeConfig.test.d.ts +0 -1
- package/dist/__integration/FormatterIcu.test.d.ts +0 -1
- package/dist/__integration/FormatterMissing.d.ts +0 -1
- package/dist/__integration/Tolgee.test.d.ts +0 -1
- package/dist/__integration/TolgeeInvisible.test.d.ts +0 -1
- package/dist/__integration/mockTranslations.d.ts +0 -7
- package/dist/__integration/testConfig.d.ts +0 -9
- package/dist/__testFixtures/classMock.d.ts +0 -3
- package/dist/__testFixtures/createElement.d.ts +0 -2
- package/dist/__testFixtures/createTestDom.d.ts +0 -9
- package/dist/__testFixtures/mocked.d.ts +0 -20
- package/dist/__testFixtures/setupAfterEnv.d.ts +0 -8
- package/dist/helpers/NodeHelper.d.ts +0 -14
- package/dist/helpers/TextHelper.d.ts +0 -5
- package/dist/helpers/TextHelper.test.d.ts +0 -1
- package/dist/helpers/commonTypes.d.ts +0 -2
- package/dist/helpers/encoderPolyfill.d.ts +0 -8
- package/dist/helpers/secret.d.ts +0 -6
- package/dist/helpers/secret.test.d.ts +0 -1
- package/dist/helpers/sleep.d.ts +0 -1
- package/dist/highlighter/HighlightFunctionsInitializer.d.ts +0 -10
- package/dist/highlighter/HighlightFunctionsInitializer.test.d.ts +0 -1
- package/dist/highlighter/MouseEventHandler.d.ts +0 -29
- package/dist/highlighter/MouseEventHandler.test.d.ts +0 -1
- package/dist/highlighter/TranslationHighlighter.d.ts +0 -14
- package/dist/highlighter/TranslationHighlighter.test.d.ts +0 -1
- package/dist/index.d.ts +0 -10
- package/dist/internal.d.ts +0 -2
- package/dist/modules/IcuFormatter.d.ts +0 -2
- package/dist/modules/IcuFormatter.test.d.ts +0 -1
- package/dist/modules/index.d.ts +0 -1
- package/dist/services/ApiHttpService.d.ts +0 -15
- package/dist/services/CoreService.d.ts +0 -18
- package/dist/services/CoreService.test.d.ts +0 -1
- package/dist/services/DependencyService.d.ts +0 -39
- package/dist/services/DependencyService.test.d.ts +0 -1
- package/dist/services/ElementRegistrar.d.ts +0 -19
- package/dist/services/ElementRegistrar.test.d.ts +0 -1
- package/dist/services/EventEmitter.d.ts +0 -13
- package/dist/services/EventService.d.ts +0 -9
- package/dist/services/ModuleService.d.ts +0 -5
- package/dist/services/ScreenshotService.d.ts +0 -15
- package/dist/services/Subscription.d.ts +0 -5
- package/dist/services/TextService.d.ts +0 -14
- package/dist/services/TextService.test.d.ts +0 -1
- package/dist/services/TranslationService.d.ts +0 -75
- package/dist/services/TranslationService.test.d.ts +0 -1
- package/dist/services/__mocks__/CoreService.d.ts +0 -2
- package/dist/toolsManager/Messages.d.ts +0 -8
- package/dist/toolsManager/Messages.test.d.ts +0 -1
- package/dist/toolsManager/PluginManager.d.ts +0 -21
- package/dist/toolsManager/PluginManager.test.d.ts +0 -1
- package/dist/types/DTOs.d.ts +0 -20
- package/dist/types/apiSchema.generated.d.ts +0 -6185
- package/dist/types.d.ts +0 -123
- package/dist/wrappers/AbstractWrapper.d.ts +0 -8
- package/dist/wrappers/NodeHandler.d.ts +0 -18
- package/dist/wrappers/WrappedHandler.d.ts +0 -8
- package/dist/wrappers/invisible/AttributeHandler.d.ts +0 -8
- package/dist/wrappers/invisible/Coder.d.ts +0 -7
- package/dist/wrappers/invisible/ContentHandler.d.ts +0 -6
- package/dist/wrappers/invisible/CoreHandler.d.ts +0 -10
- package/dist/wrappers/invisible/InvisibleWrapper.d.ts +0 -18
- package/dist/wrappers/invisible/ValueMemory.d.ts +0 -5
- package/dist/wrappers/invisible/ValueMemory.test.d.ts +0 -1
- package/dist/wrappers/text/AttributeHandler.d.ts +0 -8
- package/dist/wrappers/text/AttributeHandler.test.d.ts +0 -1
- package/dist/wrappers/text/Coder.d.ts +0 -15
- package/dist/wrappers/text/Coder.test.d.ts +0 -1
- package/dist/wrappers/text/ContentHandler.d.ts +0 -8
- package/dist/wrappers/text/ContentHandler.test.d.ts +0 -1
- package/dist/wrappers/text/CoreHandler.d.ts +0 -17
- package/dist/wrappers/text/CoreHandler.test.d.ts +0 -1
- package/dist/wrappers/text/TextWrapper.d.ts +0 -20
- package/index.js +0 -7
- package/lib/Constants/ModifierKey.d.ts +0 -6
- package/lib/Errors/ApiHttpError.d.ts +0 -5
- package/lib/Observer.d.ts +0 -14
- package/lib/Properties.d.ts +0 -17
- package/lib/TolgeeConfig.d.ts +0 -69
- package/lib/helpers/NodeHelper.d.ts +0 -14
- package/lib/helpers/TextHelper.d.ts +0 -5
- package/lib/helpers/commonTypes.d.ts +0 -2
- package/lib/helpers/encoderPolyfill.d.ts +0 -8
- package/lib/helpers/secret.d.ts +0 -6
- package/lib/helpers/sleep.d.ts +0 -1
- package/lib/highlighter/HighlightFunctionsInitializer.d.ts +0 -10
- package/lib/highlighter/MouseEventHandler.d.ts +0 -29
- package/lib/highlighter/TranslationHighlighter.d.ts +0 -14
- package/lib/modules/IcuFormatter.d.ts +0 -2
- package/lib/modules/index.d.ts +0 -1
- package/lib/services/ApiHttpService.d.ts +0 -15
- package/lib/services/CoreService.d.ts +0 -18
- package/lib/services/DependencyService.d.ts +0 -39
- package/lib/services/ElementRegistrar.d.ts +0 -19
- package/lib/services/EventEmitter.d.ts +0 -13
- package/lib/services/EventService.d.ts +0 -9
- package/lib/services/ModuleService.d.ts +0 -5
- package/lib/services/ScreenshotService.d.ts +0 -15
- package/lib/services/Subscription.d.ts +0 -5
- package/lib/services/TextService.d.ts +0 -14
- package/lib/services/TranslationService.d.ts +0 -75
- package/lib/toolsManager/Messages.d.ts +0 -8
- package/lib/toolsManager/PluginManager.d.ts +0 -21
- package/lib/types/DTOs.d.ts +0 -20
- package/lib/types/apiSchema.generated.d.ts +0 -6185
- package/lib/wrappers/AbstractWrapper.d.ts +0 -8
- package/lib/wrappers/NodeHandler.d.ts +0 -18
- package/lib/wrappers/WrappedHandler.d.ts +0 -8
- package/lib/wrappers/invisible/AttributeHandler.d.ts +0 -8
- package/lib/wrappers/invisible/Coder.d.ts +0 -7
- package/lib/wrappers/invisible/ContentHandler.d.ts +0 -6
- package/lib/wrappers/invisible/CoreHandler.d.ts +0 -10
- package/lib/wrappers/invisible/InvisibleWrapper.d.ts +0 -18
- package/lib/wrappers/invisible/ValueMemory.d.ts +0 -5
- package/lib/wrappers/text/AttributeHandler.d.ts +0 -8
- package/lib/wrappers/text/Coder.d.ts +0 -15
- package/lib/wrappers/text/ContentHandler.d.ts +0 -8
- package/lib/wrappers/text/CoreHandler.d.ts +0 -17
- package/lib/wrappers/text/TextWrapper.d.ts +0 -20
- package/src/Constants/ModifierKey.ts +0 -6
- package/src/Errors/ApiHttpError.ts +0 -8
- package/src/Observer.test.ts +0 -119
- package/src/Observer.ts +0 -68
- package/src/Properties.test.ts +0 -150
- package/src/Properties.ts +0 -112
- package/src/Tolgee.test.ts +0 -473
- package/src/TolgeeConfig.test.ts +0 -21
- package/src/TolgeeConfig.ts +0 -134
- package/src/__integration/FormatterIcu.test.ts +0 -80
- package/src/__integration/FormatterMissing.ts +0 -54
- package/src/__integration/Tolgee.test.ts +0 -90
- package/src/__integration/TolgeeInvisible.test.ts +0 -145
- package/src/__integration/mockTranslations.ts +0 -6
- package/src/__integration/testConfig.ts +0 -16
- package/src/__testFixtures/classMock.ts +0 -11
- package/src/__testFixtures/createElement.ts +0 -43
- package/src/__testFixtures/createTestDom.ts +0 -26
- package/src/__testFixtures/mocked.ts +0 -25
- package/src/__testFixtures/setupAfterEnv.ts +0 -34
- package/src/helpers/NodeHelper.ts +0 -90
- package/src/helpers/TextHelper.test.ts +0 -62
- package/src/helpers/TextHelper.ts +0 -58
- package/src/helpers/commonTypes.ts +0 -8
- package/src/helpers/encoderPolyfill.ts +0 -96
- package/src/helpers/secret.test.ts +0 -61
- package/src/helpers/secret.ts +0 -68
- package/src/helpers/sleep.ts +0 -2
- package/src/highlighter/HighlightFunctionsInitializer.test.ts +0 -40
- package/src/highlighter/HighlightFunctionsInitializer.ts +0 -61
- package/src/highlighter/MouseEventHandler.test.ts +0 -151
- package/src/highlighter/MouseEventHandler.ts +0 -191
- package/src/highlighter/TranslationHighlighter.test.ts +0 -177
- package/src/highlighter/TranslationHighlighter.ts +0 -113
- package/src/internal.ts +0 -2
- package/src/modules/IcuFormatter.test.ts +0 -21
- package/src/modules/IcuFormatter.ts +0 -39
- package/src/modules/index.ts +0 -1
- package/src/services/ApiHttpService.ts +0 -85
- package/src/services/CoreService.test.ts +0 -141
- package/src/services/CoreService.ts +0 -76
- package/src/services/DependencyService.test.ts +0 -51
- package/src/services/DependencyService.ts +0 -116
- package/src/services/ElementRegistrar.test.ts +0 -131
- package/src/services/ElementRegistrar.ts +0 -108
- package/src/services/EventEmitter.ts +0 -52
- package/src/services/EventService.ts +0 -14
- package/src/services/ModuleService.ts +0 -14
- package/src/services/ScreenshotService.ts +0 -31
- package/src/services/Subscription.ts +0 -7
- package/src/services/TextService.test.ts +0 -88
- package/src/services/TextService.ts +0 -82
- package/src/services/TranslationService.test.ts +0 -358
- package/src/services/TranslationService.ts +0 -417
- package/src/services/__mocks__/CoreService.ts +0 -17
- package/src/toolsManager/Messages.test.ts +0 -79
- package/src/toolsManager/Messages.ts +0 -60
- package/src/toolsManager/PluginManager.test.ts +0 -108
- package/src/toolsManager/PluginManager.ts +0 -129
- package/src/types/DTOs.ts +0 -25
- package/src/types/apiSchema.generated.ts +0 -6208
- package/src/wrappers/AbstractWrapper.ts +0 -14
- package/src/wrappers/NodeHandler.ts +0 -143
- package/src/wrappers/WrappedHandler.ts +0 -28
- package/src/wrappers/invisible/AttributeHandler.ts +0 -23
- package/src/wrappers/invisible/Coder.ts +0 -65
- package/src/wrappers/invisible/ContentHandler.ts +0 -15
- package/src/wrappers/invisible/CoreHandler.ts +0 -17
- package/src/wrappers/invisible/InvisibleWrapper.ts +0 -59
- package/src/wrappers/invisible/ValueMemory.test.ts +0 -25
- package/src/wrappers/invisible/ValueMemory.ts +0 -16
- package/src/wrappers/text/AttributeHandler.test.ts +0 -118
- package/src/wrappers/text/AttributeHandler.ts +0 -25
- package/src/wrappers/text/Coder.test.ts +0 -298
- package/src/wrappers/text/Coder.ts +0 -202
- package/src/wrappers/text/ContentHandler.test.ts +0 -185
- package/src/wrappers/text/ContentHandler.ts +0 -21
- package/src/wrappers/text/CoreHandler.test.ts +0 -106
- package/src/wrappers/text/CoreHandler.ts +0 -45
- package/src/wrappers/text/TextWrapper.ts +0 -69
package/src/Tolgee.ts
CHANGED
|
@@ -1,335 +1,77 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* This sets a new language.
|
|
33
|
-
*
|
|
34
|
-
* Using this setter can behave buggy when you change languages
|
|
35
|
-
* too fast, since it changes the language property before
|
|
36
|
-
* translations are actually loaded.
|
|
37
|
-
* @deprecated use asynchronous changeLanguage method.
|
|
38
|
-
*/
|
|
39
|
-
public set lang(newLanguage) {
|
|
40
|
-
this.properties.currentLanguage = newLanguage;
|
|
41
|
-
|
|
42
|
-
this.dependencyService.translationService
|
|
43
|
-
.loadTranslations(newLanguage)
|
|
44
|
-
.then(() => {
|
|
45
|
-
this.emitLangChangeEvent(newLanguage);
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
public get defaultLanguage() {
|
|
50
|
-
return this.properties.config.defaultLanguage;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
public get onLangChange() {
|
|
54
|
-
return this.dependencyService.eventService.LANGUAGE_CHANGED;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
public get onTranslationChange() {
|
|
58
|
-
return this.dependencyService.eventService.TRANSLATION_CHANGED;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Is emitted when language is loaded for the first time
|
|
63
|
-
*/
|
|
64
|
-
public get onLangLoaded() {
|
|
65
|
-
return this.dependencyService.eventService.LANGUAGE_LOADED;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* True if loading is needed to wait for Tolgee init.
|
|
70
|
-
* When translation data are provided statically (using import
|
|
71
|
-
* as staticData config property) then there is no need for translation
|
|
72
|
-
* fetching so initial loading is not needed at all.
|
|
73
|
-
*/
|
|
74
|
-
get initialLoading(): boolean {
|
|
75
|
-
const currentLang = this.properties.currentLanguage;
|
|
76
|
-
const fallbackLang = this.properties.config.fallbackLanguage;
|
|
77
|
-
const fallbackPreloading = this.properties.config.preloadFallback;
|
|
78
|
-
const isStaticDataProvided = (data?: any) => {
|
|
79
|
-
return data !== undefined && typeof data !== 'function';
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
return (
|
|
83
|
-
!isStaticDataProvided(this.properties.config.staticData?.[currentLang]) ||
|
|
84
|
-
(!!fallbackPreloading &&
|
|
85
|
-
!isStaticDataProvided(
|
|
86
|
-
this.properties.config.staticData?.[fallbackLang]
|
|
87
|
-
))
|
|
88
|
-
);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
private get coreService() {
|
|
92
|
-
return this.dependencyService.coreService;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
static use(module: TolgeeModule) {
|
|
96
|
-
return new Tolgee().use(module);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
static init(config: TolgeeConfig) {
|
|
100
|
-
return new Tolgee().init(config);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Sets the new language.
|
|
105
|
-
*
|
|
106
|
-
* Emits the onLangChange and onLangChangeAndLoad events after
|
|
107
|
-
* the translations are loaded.
|
|
108
|
-
*
|
|
109
|
-
* @return Promise<void> Resolves when translations are loaded
|
|
110
|
-
*/
|
|
111
|
-
public async changeLanguage(newLanguage: string): Promise<void> {
|
|
112
|
-
await this.dependencyService.translationService.loadTranslations(
|
|
113
|
-
newLanguage
|
|
114
|
-
);
|
|
115
|
-
this.properties.currentLanguage = newLanguage;
|
|
116
|
-
this.emitLangChangeEvent(newLanguage);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
use(module: TolgeeModule) {
|
|
120
|
-
this.dependencyService.moduleService.addModule(module);
|
|
121
|
-
return this;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
init(config: TolgeeConfig) {
|
|
125
|
-
this.dependencyService.init(config);
|
|
126
|
-
const { apiKey, apiUrl } = this.dependencyService.properties.config;
|
|
127
|
-
this.dependencyService.properties.mode =
|
|
128
|
-
apiKey && apiUrl ? 'development' : 'production';
|
|
129
|
-
|
|
130
|
-
return this;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
public async run(): Promise<void> {
|
|
134
|
-
this.dependencyService.run();
|
|
135
|
-
if (this.properties.mode === 'development') {
|
|
136
|
-
try {
|
|
137
|
-
await this.coreService.loadApiKeyDetails();
|
|
138
|
-
} catch (e) {
|
|
139
|
-
// eslint-disable-next-line no-console
|
|
140
|
-
console.error("Couldn't connect to Tolgee");
|
|
141
|
-
// eslint-disable-next-line no-console
|
|
142
|
-
console.error(e);
|
|
143
|
-
this.properties.mode = 'production';
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
await this.dependencyService.translationService.loadTranslations();
|
|
148
|
-
await this.dependencyService.pluginManager.run();
|
|
149
|
-
|
|
150
|
-
if (this.properties.config.preloadFallback) {
|
|
151
|
-
await this.dependencyService.translationService.loadTranslations(
|
|
152
|
-
this.properties.config.fallbackLanguage
|
|
153
|
-
);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
await this.refresh();
|
|
157
|
-
|
|
158
|
-
if (this.properties.config.watch) {
|
|
159
|
-
this.dependencyService.observer.observe();
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
public async refresh() {
|
|
164
|
-
return this.dependencyService.wrapper.handleSubtree(
|
|
165
|
-
this.properties.config.targetElement
|
|
166
|
-
);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
async translate(props: TranslateProps): Promise<string>;
|
|
170
|
-
async translate<T>(props: TranslatePropsTags<T>): Promise<TranslationTags<T>>;
|
|
171
|
-
|
|
172
|
-
async translate(
|
|
173
|
-
key: string,
|
|
174
|
-
params?: TranslationParams,
|
|
175
|
-
noWrap?: boolean,
|
|
176
|
-
defaultValue?: string
|
|
177
|
-
): Promise<string>;
|
|
178
|
-
async translate<T>(
|
|
179
|
-
key: string,
|
|
180
|
-
params?: TranslationParamsTags<T>,
|
|
181
|
-
noWrap?: boolean,
|
|
182
|
-
defaultValue?: string
|
|
183
|
-
): Promise<TranslationTags<T>>;
|
|
184
|
-
|
|
185
|
-
async translate(
|
|
186
|
-
keyOrProps: string | TranslatePropsTags<any>,
|
|
187
|
-
params: TranslationParamsTags<any> = {},
|
|
188
|
-
noWrap = false,
|
|
189
|
-
defaultValue: string | undefined = undefined
|
|
190
|
-
): Promise<TranslationTags<any>> {
|
|
191
|
-
const key = typeof keyOrProps === 'string' ? keyOrProps : keyOrProps.key;
|
|
192
|
-
let orEmpty = undefined;
|
|
193
|
-
if (typeof keyOrProps === 'object') {
|
|
194
|
-
const props = keyOrProps as TranslateProps;
|
|
195
|
-
// if values are not provided in props object, get them from function
|
|
196
|
-
// params defaults
|
|
197
|
-
params = props.params !== undefined ? props.params : params;
|
|
198
|
-
noWrap = props.noWrap !== undefined ? props.noWrap : noWrap;
|
|
199
|
-
defaultValue =
|
|
200
|
-
props.defaultValue !== undefined ? props.defaultValue : defaultValue;
|
|
201
|
-
orEmpty = props.orEmpty;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
const translation = await this.dependencyService.textService.translate(
|
|
205
|
-
key,
|
|
206
|
-
params,
|
|
207
|
-
undefined,
|
|
208
|
-
orEmpty,
|
|
209
|
-
defaultValue
|
|
210
|
-
);
|
|
211
|
-
|
|
212
|
-
if (this.properties.mode === 'development' && !noWrap) {
|
|
213
|
-
await this.coreService.loadApiKeyDetails();
|
|
214
|
-
return this.dependencyService.wrapper.wrap(
|
|
215
|
-
key,
|
|
216
|
-
params,
|
|
217
|
-
defaultValue,
|
|
218
|
-
translation
|
|
219
|
-
);
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
return translation;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
wrap(
|
|
226
|
-
key: string,
|
|
227
|
-
params?: TranslationParams,
|
|
228
|
-
defaultValue?: string | undefined,
|
|
229
|
-
translation?: string
|
|
230
|
-
): string;
|
|
231
|
-
wrap<T>(
|
|
232
|
-
key: string,
|
|
233
|
-
params?: TranslationTags<T>,
|
|
234
|
-
defaultValue?: string | undefined,
|
|
235
|
-
translation?: TranslationTags<T>
|
|
236
|
-
): TranslationTags<T>;
|
|
237
|
-
|
|
238
|
-
wrap(
|
|
239
|
-
key: string,
|
|
240
|
-
params?: any,
|
|
241
|
-
defaultValue?: string | undefined,
|
|
242
|
-
translation?: TranslationTags<any>
|
|
243
|
-
): TranslationTags<any> {
|
|
244
|
-
if (this.properties.mode === 'development') {
|
|
245
|
-
return this.dependencyService.wrapper.wrap(
|
|
246
|
-
key,
|
|
247
|
-
params,
|
|
248
|
-
defaultValue,
|
|
249
|
-
translation
|
|
250
|
-
);
|
|
251
|
-
} else {
|
|
252
|
-
return translation || defaultValue;
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
instant(
|
|
257
|
-
key: string,
|
|
258
|
-
params?: TranslationParams,
|
|
259
|
-
noWrap?: boolean,
|
|
260
|
-
orEmpty?: boolean,
|
|
261
|
-
defaultValue?: string
|
|
262
|
-
): string;
|
|
263
|
-
instant<T>(
|
|
264
|
-
key: string,
|
|
265
|
-
params?: TranslationParamsTags<T>,
|
|
266
|
-
noWrap?: boolean,
|
|
267
|
-
orEmpty?: boolean,
|
|
268
|
-
defaultValue?: string
|
|
269
|
-
): TranslationTags<T>;
|
|
270
|
-
|
|
271
|
-
instant(props: InstantProps): string;
|
|
272
|
-
instant<T>(props: InstantPropsTags<T>): TranslationTags<T>;
|
|
273
|
-
|
|
274
|
-
instant(
|
|
275
|
-
keyOrProps: string | InstantPropsTags<any>,
|
|
276
|
-
params: TranslationParams = {},
|
|
277
|
-
noWrap = false,
|
|
278
|
-
orEmpty?: boolean,
|
|
279
|
-
defaultValue?: string
|
|
280
|
-
) {
|
|
281
|
-
const key = typeof keyOrProps === 'string' ? keyOrProps : keyOrProps.key;
|
|
282
|
-
if (typeof keyOrProps === 'object') {
|
|
283
|
-
const props = keyOrProps as InstantProps;
|
|
284
|
-
// if values are not provided in props object, get them from function
|
|
285
|
-
// params defaults
|
|
286
|
-
params = props.params !== undefined ? props.params : params;
|
|
287
|
-
noWrap = props.noWrap !== undefined ? props.noWrap : noWrap;
|
|
288
|
-
defaultValue =
|
|
289
|
-
props.defaultValue !== undefined ? props.defaultValue : defaultValue;
|
|
290
|
-
orEmpty = props.orEmpty !== undefined ? props.orEmpty : orEmpty;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
const translation = this.dependencyService.textService.instant(
|
|
294
|
-
key,
|
|
295
|
-
params,
|
|
296
|
-
undefined,
|
|
297
|
-
orEmpty,
|
|
298
|
-
defaultValue
|
|
299
|
-
);
|
|
300
|
-
|
|
301
|
-
if (this.properties.mode === 'development' && !noWrap) {
|
|
302
|
-
return this.dependencyService.wrapper.wrap(
|
|
303
|
-
key,
|
|
304
|
-
params,
|
|
305
|
-
defaultValue,
|
|
306
|
-
translation
|
|
307
|
-
);
|
|
308
|
-
}
|
|
309
|
-
return translation;
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
/**
|
|
313
|
-
* Get currently cached translations for all languages
|
|
314
|
-
*/
|
|
315
|
-
public getCachedTranslations() {
|
|
316
|
-
return this.dependencyService.translationService.getCachedTranslations();
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
/**
|
|
320
|
-
* Loads translations for given language or returns them from cache
|
|
321
|
-
* @returns Loaded translations
|
|
322
|
-
*/
|
|
323
|
-
public loadTranslations(lang: string) {
|
|
324
|
-
return this.dependencyService.translationService.loadTranslations(lang);
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
public stop = () => {
|
|
328
|
-
this.dependencyService.stop();
|
|
1
|
+
import { Events } from './Events/Events';
|
|
2
|
+
import { Controller } from './Controller/Controller';
|
|
3
|
+
import { Options, TolgeeInstance, TolgeePlugin } from './types';
|
|
4
|
+
|
|
5
|
+
export const Tolgee = (options?: Partial<Options>): TolgeeInstance => {
|
|
6
|
+
const events = Events();
|
|
7
|
+
const controller = Controller({
|
|
8
|
+
events,
|
|
9
|
+
options,
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
const pluginTools = Object.freeze({
|
|
13
|
+
setFinalFormatter: controller.setFinalFormatter,
|
|
14
|
+
addFormatter: controller.addFormatter,
|
|
15
|
+
setObserver: controller.setObserver,
|
|
16
|
+
getObserver: controller.getObserver,
|
|
17
|
+
setUi: controller.setUi,
|
|
18
|
+
getUi: controller.getUi,
|
|
19
|
+
setDevBackend: controller.setDevBackend,
|
|
20
|
+
addBackend: controller.addBackend,
|
|
21
|
+
setLanguageDetector: controller.setLanguageDetector,
|
|
22
|
+
setLanguageStorage: controller.setLanguageStorage,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
const withRestart = (callback: () => void) => {
|
|
26
|
+
const wasRunning = controller.isRunning();
|
|
27
|
+
wasRunning && controller.stop();
|
|
28
|
+
callback();
|
|
29
|
+
wasRunning && controller.run();
|
|
329
30
|
};
|
|
330
31
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
32
|
+
const tolgee: TolgeeInstance = Object.freeze({
|
|
33
|
+
// event listeners
|
|
34
|
+
on: events.on,
|
|
35
|
+
onKeyUpdate: events.onKeyUpdate.listenSome,
|
|
36
|
+
|
|
37
|
+
// state
|
|
38
|
+
getLanguage: controller.getLanguage,
|
|
39
|
+
getPendingLanguage: controller.getPendingLanguage,
|
|
40
|
+
changeLanguage: controller.changeLanguage,
|
|
41
|
+
changeTranslation: controller.changeTranslation,
|
|
42
|
+
addActiveNs: controller.addActiveNs,
|
|
43
|
+
removeActiveNs: controller.removeActiveNs,
|
|
44
|
+
loadRecords: controller.loadRecords,
|
|
45
|
+
loadRecord: controller.loadRecord,
|
|
46
|
+
addStaticData: controller.addStaticData,
|
|
47
|
+
getRecord: controller.getRecord,
|
|
48
|
+
getAllRecords: controller.getAllRecords,
|
|
49
|
+
isLoaded: controller.isLoaded,
|
|
50
|
+
isInitialLoading: controller.isInitialLoading,
|
|
51
|
+
isLoading: controller.isLoading,
|
|
52
|
+
isFetching: controller.isFetching,
|
|
53
|
+
isRunning: controller.isRunning,
|
|
54
|
+
run: controller.run,
|
|
55
|
+
stop: controller.stop,
|
|
56
|
+
t: controller.t,
|
|
57
|
+
highlight: controller.highlight,
|
|
58
|
+
getInitialOptions: controller.getInitialOptions,
|
|
59
|
+
isDev: controller.isDev,
|
|
60
|
+
wrap: controller.wrap,
|
|
61
|
+
unwrap: controller.unwrap,
|
|
62
|
+
|
|
63
|
+
// plugins
|
|
64
|
+
use: (plugin: TolgeePlugin | undefined) => {
|
|
65
|
+
if (plugin) {
|
|
66
|
+
withRestart(() => plugin(tolgee, pluginTools));
|
|
67
|
+
}
|
|
68
|
+
return tolgee;
|
|
69
|
+
},
|
|
70
|
+
init: (options: Partial<Options>) => {
|
|
71
|
+
withRestart(() => controller.init(options));
|
|
72
|
+
return tolgee;
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
return tolgee;
|
|
77
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { getTranslateParams } from './TranslateParams';
|
|
2
|
+
import { TranslateProps } from './types';
|
|
3
|
+
|
|
4
|
+
const testParams: TranslateProps = {
|
|
5
|
+
key: 'test',
|
|
6
|
+
defaultValue: 'Test',
|
|
7
|
+
noWrap: true,
|
|
8
|
+
ns: [],
|
|
9
|
+
orEmpty: true,
|
|
10
|
+
params: { yo: 'yo', ns: '(this is param not namespace)' },
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
describe('getTranslateParams', () => {
|
|
14
|
+
it('manages regular params', () => {
|
|
15
|
+
const result = getTranslateParams(testParams);
|
|
16
|
+
expect(result).toEqual(testParams);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('manages key with default value', () => {
|
|
20
|
+
const result = getTranslateParams('test', 'Test');
|
|
21
|
+
expect(result).toEqual({ key: 'test', defaultValue: 'Test' });
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('manages key with options', () => {
|
|
25
|
+
const result = getTranslateParams('test', { noWrap: true, yo: 'yo' });
|
|
26
|
+
expect(result).toEqual({ key: 'test', noWrap: true, params: { yo: 'yo' } });
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('manages key default and options', () => {
|
|
30
|
+
const result = getTranslateParams('test', 'Test', {
|
|
31
|
+
noWrap: true,
|
|
32
|
+
ns: [],
|
|
33
|
+
orEmpty: true,
|
|
34
|
+
yo: 'yo',
|
|
35
|
+
params: {
|
|
36
|
+
ns: '(this is param not namespace)',
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
expect(result).toEqual(testParams);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CombinedOptions,
|
|
3
|
+
TFnType,
|
|
4
|
+
TranslateOptions,
|
|
5
|
+
TranslateProps,
|
|
6
|
+
} from './types';
|
|
7
|
+
|
|
8
|
+
function parseCombinedOptions({
|
|
9
|
+
ns,
|
|
10
|
+
noWrap,
|
|
11
|
+
orEmpty,
|
|
12
|
+
params,
|
|
13
|
+
...rest
|
|
14
|
+
}: CombinedOptions<any>): Partial<TranslateProps> {
|
|
15
|
+
const options: Required<TranslateOptions<any>> = {
|
|
16
|
+
ns: ns!,
|
|
17
|
+
noWrap: noWrap!,
|
|
18
|
+
orEmpty: orEmpty!,
|
|
19
|
+
params: {
|
|
20
|
+
...rest,
|
|
21
|
+
...params,
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
return options;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export const getTranslateParams: TFnType<any, TranslateProps<any>> = (
|
|
28
|
+
keyOrProps,
|
|
29
|
+
...params
|
|
30
|
+
) => {
|
|
31
|
+
let result = {} as TranslateProps<any>;
|
|
32
|
+
let options: CombinedOptions<any> | undefined;
|
|
33
|
+
if (typeof keyOrProps === 'object') {
|
|
34
|
+
result = keyOrProps;
|
|
35
|
+
} else {
|
|
36
|
+
result.key = keyOrProps;
|
|
37
|
+
if (typeof params[0] === 'string') {
|
|
38
|
+
result.defaultValue = params[0];
|
|
39
|
+
options = params[1] as CombinedOptions<any>;
|
|
40
|
+
} else if (typeof params[0] === 'object') {
|
|
41
|
+
options = params[0] as CombinedOptions<any>;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (options) {
|
|
45
|
+
result = {
|
|
46
|
+
...parseCombinedOptions(options),
|
|
47
|
+
...result,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Tolgee } from '../Tolgee';
|
|
2
|
+
import { BackendInterface, TolgeePlugin } from '../types';
|
|
3
|
+
|
|
4
|
+
const data = {
|
|
5
|
+
en: {
|
|
6
|
+
common: { cancel: 'Cancel' },
|
|
7
|
+
test: { test: 'Test' },
|
|
8
|
+
},
|
|
9
|
+
es: {
|
|
10
|
+
common: { cancel: 'Cancellar' },
|
|
11
|
+
test: { test: 'Testar' },
|
|
12
|
+
},
|
|
13
|
+
} as any;
|
|
14
|
+
|
|
15
|
+
const backendNormal: BackendInterface = {
|
|
16
|
+
getRecord({ language, namespace = '' }) {
|
|
17
|
+
return data[language]?.[namespace];
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const backendDev: BackendInterface = {
|
|
22
|
+
getRecord() {
|
|
23
|
+
return Promise.resolve({ cancel: 'Dev' });
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const backendPlugin: TolgeePlugin = (tolgee, tools) => {
|
|
28
|
+
tools.addBackend(backendNormal);
|
|
29
|
+
tools.setDevBackend(backendDev);
|
|
30
|
+
return tolgee;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
describe('backend plugins', () => {
|
|
34
|
+
it('uses plugin to fetch', async () => {
|
|
35
|
+
const tolgee = Tolgee()
|
|
36
|
+
.use(backendPlugin)
|
|
37
|
+
.init({
|
|
38
|
+
ns: ['common', 'test'],
|
|
39
|
+
language: 'en',
|
|
40
|
+
});
|
|
41
|
+
await tolgee.run();
|
|
42
|
+
expect(tolgee.t({ key: 'cancel', ns: 'common' })).toEqual('Cancel');
|
|
43
|
+
tolgee.stop();
|
|
44
|
+
tolgee.init({ apiUrl: 'asdfasdf', apiKey: 'test' });
|
|
45
|
+
await tolgee.run();
|
|
46
|
+
expect(tolgee.t({ key: 'cancel', ns: 'common' })).toEqual('Dev');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Tolgee } from '../index';
|
|
2
|
+
|
|
3
|
+
describe('using tolgee as client', () => {
|
|
4
|
+
it('fetch data without running', async () => {
|
|
5
|
+
const promiseEnTest = jest.fn(() => Promise.resolve({ test: 'Test' }));
|
|
6
|
+
const promiseEnCommon = jest.fn(() =>
|
|
7
|
+
Promise.resolve({ cancel: 'Cancel' })
|
|
8
|
+
);
|
|
9
|
+
const promiseEsTest = jest.fn(() => Promise.resolve({ test: 'Testa' }));
|
|
10
|
+
const promiseEsCommon = jest.fn(() =>
|
|
11
|
+
Promise.resolve({ cancel: 'Cancellar' })
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
const tolgee = Tolgee({
|
|
15
|
+
language: 'en',
|
|
16
|
+
ns: ['common'],
|
|
17
|
+
staticData: {
|
|
18
|
+
'en:common': promiseEnCommon,
|
|
19
|
+
'en:test': promiseEnTest,
|
|
20
|
+
'es:common': promiseEsCommon,
|
|
21
|
+
'es:test': promiseEsTest,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
const enTest = await tolgee.loadRecord({
|
|
26
|
+
language: 'en',
|
|
27
|
+
namespace: 'test',
|
|
28
|
+
});
|
|
29
|
+
expect(promiseEnTest).toBeCalledTimes(1);
|
|
30
|
+
expect(promiseEnCommon).not.toBeCalled();
|
|
31
|
+
expect(enTest).toEqual(new Map([['test', 'Test']]));
|
|
32
|
+
|
|
33
|
+
const enCommon = await tolgee.loadRecord({
|
|
34
|
+
language: 'en',
|
|
35
|
+
namespace: 'common',
|
|
36
|
+
});
|
|
37
|
+
expect(promiseEnCommon).toBeCalledTimes(1);
|
|
38
|
+
expect(enCommon).toEqual(new Map([['cancel', 'Cancel']]));
|
|
39
|
+
|
|
40
|
+
const esTest = await tolgee.loadRecord({
|
|
41
|
+
language: 'es',
|
|
42
|
+
namespace: 'test',
|
|
43
|
+
});
|
|
44
|
+
expect(promiseEsTest).toBeCalledTimes(1);
|
|
45
|
+
expect(promiseEsCommon).not.toBeCalled();
|
|
46
|
+
expect(esTest).toEqual(new Map([['test', 'Testa']]));
|
|
47
|
+
});
|
|
48
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Tolgee } from '../index';
|
|
2
|
+
|
|
3
|
+
describe('events', () => {
|
|
4
|
+
it('emits language change event', async () => {
|
|
5
|
+
const tolgee = Tolgee({ language: 'en' });
|
|
6
|
+
const handler = jest.fn((lang) => {});
|
|
7
|
+
tolgee.on('language', handler);
|
|
8
|
+
await tolgee.changeLanguage('es');
|
|
9
|
+
expect(handler).toHaveBeenCalledWith({ value: 'es' });
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it('correctly emits translation change listeners', async () => {
|
|
13
|
+
const tolgee = Tolgee({
|
|
14
|
+
language: 'en',
|
|
15
|
+
staticData: {
|
|
16
|
+
en: { hello: 'World', language: 'English' },
|
|
17
|
+
es: { hello: 'Mundo', language: 'Spanish' },
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
const helloHandler = jest.fn((data) => {});
|
|
21
|
+
const languageHandler = jest.fn((data) => {});
|
|
22
|
+
|
|
23
|
+
tolgee.onKeyUpdate(helloHandler).subscribeKey({ key: 'hello' });
|
|
24
|
+
tolgee.onKeyUpdate(languageHandler).subscribeKey({ key: 'language' });
|
|
25
|
+
|
|
26
|
+
tolgee.changeTranslation({ language: 'es' }, 'hello', 'Světe');
|
|
27
|
+
tolgee.changeLanguage('es');
|
|
28
|
+
|
|
29
|
+
await Promise.resolve();
|
|
30
|
+
expect(helloHandler).toHaveBeenCalledTimes(1);
|
|
31
|
+
expect(languageHandler).toHaveBeenCalledTimes(1);
|
|
32
|
+
});
|
|
33
|
+
});
|