@tolgee/core 4.9.2 → 4.10.0-rc.14ca700.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.
Files changed (274) hide show
  1. package/dist/tolgee.cjs.js +1075 -7022
  2. package/dist/tolgee.cjs.js.map +1 -1
  3. package/dist/tolgee.cjs.min.js +1 -1
  4. package/dist/tolgee.cjs.min.js.map +1 -1
  5. package/dist/tolgee.esm.min.mjs +1 -1
  6. package/dist/tolgee.esm.min.mjs.map +1 -1
  7. package/dist/tolgee.esm.mjs +1073 -7017
  8. package/dist/tolgee.esm.mjs.map +1 -1
  9. package/dist/tolgee.umd.js +1075 -7022
  10. package/dist/tolgee.umd.js.map +1 -1
  11. package/dist/tolgee.umd.min.js +1 -1
  12. package/dist/tolgee.umd.min.js.map +1 -1
  13. package/lib/Controller/Cache/Cache.d.ts +22 -0
  14. package/lib/Controller/Cache/helpers.d.ts +4 -0
  15. package/lib/Controller/Controller.d.ts +137 -0
  16. package/lib/Controller/Events/EventEmitter.d.ts +6 -0
  17. package/lib/Controller/Events/EventEmitterSelective.d.ts +15 -0
  18. package/lib/Controller/Events/Events.d.ts +50 -0
  19. package/lib/Controller/Plugins/Plugins.d.ts +43 -0
  20. package/lib/Controller/State/State.d.ts +21 -0
  21. package/lib/Controller/State/helpers.d.ts +6 -0
  22. package/lib/Controller/State/initState.d.ts +55 -0
  23. package/lib/Controller/ValueObserver.d.ts +5 -0
  24. package/lib/Tolgee.d.ts +2 -68
  25. package/lib/TranslateParams.d.ts +2 -0
  26. package/lib/{Constants/Global.d.ts → constants.d.ts} +1 -2
  27. package/lib/helpers.d.ts +3 -0
  28. package/lib/index.d.ts +3 -8
  29. package/lib/types.d.ts +235 -84
  30. package/package.json +20 -29
  31. package/src/Controller/Cache/Cache.ts +293 -0
  32. package/src/Controller/Cache/helpers.ts +37 -0
  33. package/src/Controller/Controller.ts +307 -0
  34. package/src/Controller/Events/EventEmitter.ts +27 -0
  35. package/src/Controller/Events/EventEmitterSelective.test.ts +125 -0
  36. package/src/Controller/Events/EventEmitterSelective.ts +179 -0
  37. package/src/Controller/Events/Events.ts +66 -0
  38. package/src/Controller/Plugins/Plugins.ts +305 -0
  39. package/src/Controller/State/State.ts +156 -0
  40. package/src/Controller/State/helpers.ts +41 -0
  41. package/src/Controller/State/initState.ts +90 -0
  42. package/src/Controller/ValueObserver.ts +23 -0
  43. package/src/Tolgee.ts +72 -333
  44. package/src/TranslateParams.test.ts +41 -0
  45. package/src/TranslateParams.ts +51 -0
  46. package/src/__test/backend.test.ts +48 -0
  47. package/src/__test/cache.test.ts +148 -0
  48. package/src/__test/client.test.ts +48 -0
  49. package/src/__test/events.test.ts +33 -0
  50. package/src/__test/initialization.test.ts +73 -0
  51. package/src/__test/jest-setup.ts +2 -0
  52. package/src/__test/languageDetection.test.ts +129 -0
  53. package/src/__test/languageStorage.test.ts +145 -0
  54. package/src/__test/languages.test.ts +112 -0
  55. package/src/__test/loading.test.ts +39 -0
  56. package/src/__test/namespaces.test.ts +99 -0
  57. package/src/__test/namespacesFallback.test.ts +74 -0
  58. package/src/__test/plugins.test.ts +98 -0
  59. package/src/__test/testTools.ts +7 -0
  60. package/src/{Constants/Global.ts → constants.ts} +1 -3
  61. package/src/helpers.ts +17 -0
  62. package/src/index.ts +9 -8
  63. package/src/types.ts +322 -90
  64. package/README.md +0 -45
  65. package/dist/Constants/Global.d.ts +0 -6
  66. package/dist/Constants/ModifierKey.d.ts +0 -6
  67. package/dist/Errors/ApiHttpError.d.ts +0 -5
  68. package/dist/Observer.d.ts +0 -14
  69. package/dist/Observer.test.d.ts +0 -2
  70. package/dist/Properties.d.ts +0 -17
  71. package/dist/Properties.test.d.ts +0 -1
  72. package/dist/Tolgee.d.ts +0 -68
  73. package/dist/Tolgee.test.d.ts +0 -1
  74. package/dist/TolgeeConfig.d.ts +0 -69
  75. package/dist/TolgeeConfig.test.d.ts +0 -1
  76. package/dist/__integration/FormatterIcu.test.d.ts +0 -1
  77. package/dist/__integration/FormatterMissing.d.ts +0 -1
  78. package/dist/__integration/Tolgee.test.d.ts +0 -1
  79. package/dist/__integration/TolgeeInvisible.test.d.ts +0 -1
  80. package/dist/__integration/mockTranslations.d.ts +0 -7
  81. package/dist/__integration/testConfig.d.ts +0 -9
  82. package/dist/__testFixtures/classMock.d.ts +0 -3
  83. package/dist/__testFixtures/createElement.d.ts +0 -2
  84. package/dist/__testFixtures/createTestDom.d.ts +0 -9
  85. package/dist/__testFixtures/mocked.d.ts +0 -20
  86. package/dist/__testFixtures/setupAfterEnv.d.ts +0 -8
  87. package/dist/helpers/NodeHelper.d.ts +0 -14
  88. package/dist/helpers/TextHelper.d.ts +0 -5
  89. package/dist/helpers/TextHelper.test.d.ts +0 -1
  90. package/dist/helpers/commonTypes.d.ts +0 -2
  91. package/dist/helpers/encoderPolyfill.d.ts +0 -8
  92. package/dist/helpers/secret.d.ts +0 -6
  93. package/dist/helpers/secret.test.d.ts +0 -1
  94. package/dist/helpers/sleep.d.ts +0 -1
  95. package/dist/highlighter/HighlightFunctionsInitializer.d.ts +0 -10
  96. package/dist/highlighter/HighlightFunctionsInitializer.test.d.ts +0 -1
  97. package/dist/highlighter/MouseEventHandler.d.ts +0 -29
  98. package/dist/highlighter/MouseEventHandler.test.d.ts +0 -1
  99. package/dist/highlighter/TranslationHighlighter.d.ts +0 -14
  100. package/dist/highlighter/TranslationHighlighter.test.d.ts +0 -1
  101. package/dist/index.d.ts +0 -10
  102. package/dist/internal.d.ts +0 -2
  103. package/dist/modules/IcuFormatter.d.ts +0 -2
  104. package/dist/modules/IcuFormatter.test.d.ts +0 -1
  105. package/dist/modules/index.d.ts +0 -1
  106. package/dist/services/ApiHttpService.d.ts +0 -15
  107. package/dist/services/CoreService.d.ts +0 -18
  108. package/dist/services/CoreService.test.d.ts +0 -1
  109. package/dist/services/DependencyService.d.ts +0 -39
  110. package/dist/services/DependencyService.test.d.ts +0 -1
  111. package/dist/services/ElementRegistrar.d.ts +0 -19
  112. package/dist/services/ElementRegistrar.test.d.ts +0 -1
  113. package/dist/services/EventEmitter.d.ts +0 -13
  114. package/dist/services/EventService.d.ts +0 -9
  115. package/dist/services/ModuleService.d.ts +0 -5
  116. package/dist/services/ScreenshotService.d.ts +0 -15
  117. package/dist/services/Subscription.d.ts +0 -5
  118. package/dist/services/TextService.d.ts +0 -14
  119. package/dist/services/TextService.test.d.ts +0 -1
  120. package/dist/services/TranslationService.d.ts +0 -75
  121. package/dist/services/TranslationService.test.d.ts +0 -1
  122. package/dist/services/__mocks__/CoreService.d.ts +0 -2
  123. package/dist/toolsManager/Messages.d.ts +0 -8
  124. package/dist/toolsManager/Messages.test.d.ts +0 -1
  125. package/dist/toolsManager/PluginManager.d.ts +0 -21
  126. package/dist/toolsManager/PluginManager.test.d.ts +0 -1
  127. package/dist/types/DTOs.d.ts +0 -20
  128. package/dist/types/apiSchema.generated.d.ts +0 -6185
  129. package/dist/types.d.ts +0 -123
  130. package/dist/wrappers/AbstractWrapper.d.ts +0 -8
  131. package/dist/wrappers/NodeHandler.d.ts +0 -18
  132. package/dist/wrappers/WrappedHandler.d.ts +0 -8
  133. package/dist/wrappers/invisible/AttributeHandler.d.ts +0 -8
  134. package/dist/wrappers/invisible/Coder.d.ts +0 -7
  135. package/dist/wrappers/invisible/ContentHandler.d.ts +0 -6
  136. package/dist/wrappers/invisible/CoreHandler.d.ts +0 -10
  137. package/dist/wrappers/invisible/InvisibleWrapper.d.ts +0 -18
  138. package/dist/wrappers/invisible/ValueMemory.d.ts +0 -5
  139. package/dist/wrappers/invisible/ValueMemory.test.d.ts +0 -1
  140. package/dist/wrappers/text/AttributeHandler.d.ts +0 -8
  141. package/dist/wrappers/text/AttributeHandler.test.d.ts +0 -1
  142. package/dist/wrappers/text/Coder.d.ts +0 -15
  143. package/dist/wrappers/text/Coder.test.d.ts +0 -1
  144. package/dist/wrappers/text/ContentHandler.d.ts +0 -8
  145. package/dist/wrappers/text/ContentHandler.test.d.ts +0 -1
  146. package/dist/wrappers/text/CoreHandler.d.ts +0 -17
  147. package/dist/wrappers/text/CoreHandler.test.d.ts +0 -1
  148. package/dist/wrappers/text/TextWrapper.d.ts +0 -20
  149. package/index.js +0 -7
  150. package/lib/Constants/ModifierKey.d.ts +0 -6
  151. package/lib/Errors/ApiHttpError.d.ts +0 -5
  152. package/lib/Observer.d.ts +0 -14
  153. package/lib/Properties.d.ts +0 -17
  154. package/lib/TolgeeConfig.d.ts +0 -69
  155. package/lib/helpers/NodeHelper.d.ts +0 -14
  156. package/lib/helpers/TextHelper.d.ts +0 -5
  157. package/lib/helpers/commonTypes.d.ts +0 -2
  158. package/lib/helpers/encoderPolyfill.d.ts +0 -8
  159. package/lib/helpers/secret.d.ts +0 -6
  160. package/lib/helpers/sleep.d.ts +0 -1
  161. package/lib/highlighter/HighlightFunctionsInitializer.d.ts +0 -10
  162. package/lib/highlighter/MouseEventHandler.d.ts +0 -29
  163. package/lib/highlighter/TranslationHighlighter.d.ts +0 -14
  164. package/lib/modules/IcuFormatter.d.ts +0 -2
  165. package/lib/modules/index.d.ts +0 -1
  166. package/lib/services/ApiHttpService.d.ts +0 -15
  167. package/lib/services/CoreService.d.ts +0 -18
  168. package/lib/services/DependencyService.d.ts +0 -39
  169. package/lib/services/ElementRegistrar.d.ts +0 -19
  170. package/lib/services/EventEmitter.d.ts +0 -13
  171. package/lib/services/EventService.d.ts +0 -9
  172. package/lib/services/ModuleService.d.ts +0 -5
  173. package/lib/services/ScreenshotService.d.ts +0 -15
  174. package/lib/services/Subscription.d.ts +0 -5
  175. package/lib/services/TextService.d.ts +0 -14
  176. package/lib/services/TranslationService.d.ts +0 -75
  177. package/lib/toolsManager/Messages.d.ts +0 -8
  178. package/lib/toolsManager/PluginManager.d.ts +0 -21
  179. package/lib/types/DTOs.d.ts +0 -20
  180. package/lib/types/apiSchema.generated.d.ts +0 -6185
  181. package/lib/wrappers/AbstractWrapper.d.ts +0 -8
  182. package/lib/wrappers/NodeHandler.d.ts +0 -18
  183. package/lib/wrappers/WrappedHandler.d.ts +0 -8
  184. package/lib/wrappers/invisible/AttributeHandler.d.ts +0 -8
  185. package/lib/wrappers/invisible/Coder.d.ts +0 -7
  186. package/lib/wrappers/invisible/ContentHandler.d.ts +0 -6
  187. package/lib/wrappers/invisible/CoreHandler.d.ts +0 -10
  188. package/lib/wrappers/invisible/InvisibleWrapper.d.ts +0 -18
  189. package/lib/wrappers/invisible/ValueMemory.d.ts +0 -5
  190. package/lib/wrappers/text/AttributeHandler.d.ts +0 -8
  191. package/lib/wrappers/text/Coder.d.ts +0 -15
  192. package/lib/wrappers/text/ContentHandler.d.ts +0 -8
  193. package/lib/wrappers/text/CoreHandler.d.ts +0 -17
  194. package/lib/wrappers/text/TextWrapper.d.ts +0 -20
  195. package/src/Constants/ModifierKey.ts +0 -6
  196. package/src/Errors/ApiHttpError.ts +0 -8
  197. package/src/Observer.test.ts +0 -119
  198. package/src/Observer.ts +0 -68
  199. package/src/Properties.test.ts +0 -150
  200. package/src/Properties.ts +0 -112
  201. package/src/Tolgee.test.ts +0 -473
  202. package/src/TolgeeConfig.test.ts +0 -21
  203. package/src/TolgeeConfig.ts +0 -134
  204. package/src/__integration/FormatterIcu.test.ts +0 -80
  205. package/src/__integration/FormatterMissing.ts +0 -54
  206. package/src/__integration/Tolgee.test.ts +0 -90
  207. package/src/__integration/TolgeeInvisible.test.ts +0 -145
  208. package/src/__integration/mockTranslations.ts +0 -6
  209. package/src/__integration/testConfig.ts +0 -16
  210. package/src/__testFixtures/classMock.ts +0 -11
  211. package/src/__testFixtures/createElement.ts +0 -43
  212. package/src/__testFixtures/createTestDom.ts +0 -26
  213. package/src/__testFixtures/mocked.ts +0 -25
  214. package/src/__testFixtures/setupAfterEnv.ts +0 -34
  215. package/src/helpers/NodeHelper.ts +0 -90
  216. package/src/helpers/TextHelper.test.ts +0 -62
  217. package/src/helpers/TextHelper.ts +0 -58
  218. package/src/helpers/commonTypes.ts +0 -8
  219. package/src/helpers/encoderPolyfill.ts +0 -96
  220. package/src/helpers/secret.test.ts +0 -61
  221. package/src/helpers/secret.ts +0 -68
  222. package/src/helpers/sleep.ts +0 -2
  223. package/src/highlighter/HighlightFunctionsInitializer.test.ts +0 -40
  224. package/src/highlighter/HighlightFunctionsInitializer.ts +0 -61
  225. package/src/highlighter/MouseEventHandler.test.ts +0 -151
  226. package/src/highlighter/MouseEventHandler.ts +0 -191
  227. package/src/highlighter/TranslationHighlighter.test.ts +0 -177
  228. package/src/highlighter/TranslationHighlighter.ts +0 -113
  229. package/src/internal.ts +0 -2
  230. package/src/modules/IcuFormatter.test.ts +0 -21
  231. package/src/modules/IcuFormatter.ts +0 -39
  232. package/src/modules/index.ts +0 -1
  233. package/src/services/ApiHttpService.ts +0 -85
  234. package/src/services/CoreService.test.ts +0 -141
  235. package/src/services/CoreService.ts +0 -76
  236. package/src/services/DependencyService.test.ts +0 -51
  237. package/src/services/DependencyService.ts +0 -116
  238. package/src/services/ElementRegistrar.test.ts +0 -131
  239. package/src/services/ElementRegistrar.ts +0 -108
  240. package/src/services/EventEmitter.ts +0 -52
  241. package/src/services/EventService.ts +0 -14
  242. package/src/services/ModuleService.ts +0 -14
  243. package/src/services/ScreenshotService.ts +0 -31
  244. package/src/services/Subscription.ts +0 -7
  245. package/src/services/TextService.test.ts +0 -88
  246. package/src/services/TextService.ts +0 -82
  247. package/src/services/TranslationService.test.ts +0 -358
  248. package/src/services/TranslationService.ts +0 -417
  249. package/src/services/__mocks__/CoreService.ts +0 -17
  250. package/src/toolsManager/Messages.test.ts +0 -79
  251. package/src/toolsManager/Messages.ts +0 -60
  252. package/src/toolsManager/PluginManager.test.ts +0 -108
  253. package/src/toolsManager/PluginManager.ts +0 -129
  254. package/src/types/DTOs.ts +0 -25
  255. package/src/types/apiSchema.generated.ts +0 -6208
  256. package/src/wrappers/AbstractWrapper.ts +0 -14
  257. package/src/wrappers/NodeHandler.ts +0 -143
  258. package/src/wrappers/WrappedHandler.ts +0 -28
  259. package/src/wrappers/invisible/AttributeHandler.ts +0 -23
  260. package/src/wrappers/invisible/Coder.ts +0 -65
  261. package/src/wrappers/invisible/ContentHandler.ts +0 -15
  262. package/src/wrappers/invisible/CoreHandler.ts +0 -17
  263. package/src/wrappers/invisible/InvisibleWrapper.ts +0 -59
  264. package/src/wrappers/invisible/ValueMemory.test.ts +0 -25
  265. package/src/wrappers/invisible/ValueMemory.ts +0 -16
  266. package/src/wrappers/text/AttributeHandler.test.ts +0 -118
  267. package/src/wrappers/text/AttributeHandler.ts +0 -25
  268. package/src/wrappers/text/Coder.test.ts +0 -298
  269. package/src/wrappers/text/Coder.ts +0 -202
  270. package/src/wrappers/text/ContentHandler.test.ts +0 -185
  271. package/src/wrappers/text/ContentHandler.ts +0 -21
  272. package/src/wrappers/text/CoreHandler.test.ts +0 -106
  273. package/src/wrappers/text/CoreHandler.ts +0 -45
  274. package/src/wrappers/text/TextWrapper.ts +0 -69
@@ -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
+ });
@@ -0,0 +1,73 @@
1
+ import { Tolgee } from '../index';
2
+
3
+ describe('initialization behavior', () => {
4
+ it("change in state before running won't trigger fetch", 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
+ const onInitialLoad = jest.fn();
25
+ const onRunningChange = jest.fn();
26
+ tolgee.on('initialLoad', onInitialLoad);
27
+ tolgee.on('running', onRunningChange);
28
+
29
+ await tolgee.changeLanguage('es');
30
+ await tolgee.addActiveNs('test');
31
+ expect(promiseEsCommon).not.toBeCalled();
32
+ expect(promiseEnCommon).not.toBeCalled();
33
+ expect(promiseEsTest).not.toBeCalled();
34
+ expect(promiseEnTest).not.toBeCalled();
35
+ expect(tolgee.isLoaded()).toBeFalsy();
36
+
37
+ await tolgee.run();
38
+ expect(promiseEsCommon).toBeCalled();
39
+ expect(promiseEnCommon).not.toBeCalled();
40
+ expect(promiseEsTest).toBeCalled();
41
+ expect(promiseEnTest).not.toBeCalled();
42
+ expect(tolgee.isLoaded()).toBeTruthy();
43
+
44
+ tolgee.stop();
45
+
46
+ expect(onInitialLoad).toBeCalledTimes(1);
47
+ expect(onRunningChange).toBeCalledTimes(2);
48
+ });
49
+
50
+ it("won't start loading when nothing to load", async () => {
51
+ const tolgee = Tolgee({
52
+ language: 'en',
53
+ staticData: {
54
+ en: { test: 'Test' },
55
+ },
56
+ });
57
+ const onFetchingHandler = jest.fn(() => {});
58
+ const onLoadingHandler = jest.fn(() => {});
59
+
60
+ tolgee.on('fetching', onFetchingHandler);
61
+ tolgee.on('loading', onLoadingHandler);
62
+
63
+ const runPromise = tolgee.run();
64
+ expect(tolgee.isLoading()).toBeFalsy();
65
+ expect(tolgee.isFetching()).toBeFalsy();
66
+
67
+ await runPromise;
68
+ expect(tolgee.isLoading()).toBeFalsy();
69
+ expect(tolgee.isFetching()).toBeFalsy();
70
+ expect(onFetchingHandler).not.toBeCalled();
71
+ expect(onLoadingHandler).not.toBeCalled();
72
+ });
73
+ });
@@ -0,0 +1,2 @@
1
+ // In your own jest-setup.js (or any other name)
2
+ import '@testing-library/jest-dom';
@@ -0,0 +1,129 @@
1
+ import { Tolgee, TolgeePlugin, TolgeeInstance } from '../index';
2
+
3
+ const DetectionPlugin =
4
+ (value: any): TolgeePlugin =>
5
+ (tolgee, tools) => {
6
+ tools.setLanguageDetector({
7
+ getLanguage() {
8
+ return value;
9
+ },
10
+ });
11
+ return tolgee;
12
+ };
13
+
14
+ describe('language detection plugin', () => {
15
+ let tolgee: TolgeeInstance;
16
+
17
+ afterEach(() => {
18
+ tolgee.stop();
19
+ });
20
+
21
+ it('will detect language without loading', async () => {
22
+ tolgee = Tolgee()
23
+ .use(DetectionPlugin('en'))
24
+ .init({
25
+ defaultLanguage: 'es',
26
+ staticData: {
27
+ en: { test: 'Test' },
28
+ },
29
+ });
30
+ const onFetchingHandler = jest.fn(() => {});
31
+ const onLoadingHandler = jest.fn(() => {});
32
+
33
+ tolgee.on('fetching', onFetchingHandler);
34
+ tolgee.on('loading', onLoadingHandler);
35
+
36
+ tolgee.run();
37
+ expect(tolgee.getLanguage()).toEqual('en');
38
+ expect(tolgee.isLoading()).toBeFalsy();
39
+ expect(tolgee.isFetching()).toBeFalsy();
40
+
41
+ expect(onFetchingHandler).not.toBeCalled();
42
+ expect(onLoadingHandler).not.toBeCalled();
43
+ });
44
+
45
+ it('will detect language async', async () => {
46
+ tolgee = Tolgee()
47
+ .use(DetectionPlugin(Promise.resolve('en')))
48
+ .init({
49
+ defaultLanguage: 'es',
50
+ staticData: {
51
+ en: { test: 'Test' },
52
+ },
53
+ });
54
+ const onFetchingHandler = jest.fn(() => {});
55
+ const onLoadingHandler = jest.fn(() => {});
56
+
57
+ tolgee.on('fetching', onFetchingHandler);
58
+ tolgee.on('loading', onLoadingHandler);
59
+
60
+ const runPromise = tolgee.run();
61
+ expect(tolgee.isLoading()).toBeTruthy();
62
+ expect(tolgee.isFetching()).toBeTruthy();
63
+
64
+ await runPromise;
65
+ expect(tolgee.isLoading()).toBeFalsy();
66
+ expect(tolgee.isFetching()).toBeFalsy();
67
+ expect(onFetchingHandler).toBeCalledTimes(2);
68
+ expect(onLoadingHandler).toBeCalledTimes(2);
69
+ });
70
+
71
+ it('will fallback correctly', async () => {
72
+ tolgee = Tolgee()
73
+ .use(DetectionPlugin(Promise.resolve(undefined)))
74
+ .init({
75
+ defaultLanguage: 'es',
76
+ staticData: {
77
+ en: { test: 'Test' },
78
+ },
79
+ });
80
+ const runPromise = tolgee.run();
81
+ expect(tolgee.getLanguage()).toEqual(undefined);
82
+
83
+ await runPromise;
84
+ expect(tolgee.getLanguage()).toEqual('es');
85
+ });
86
+
87
+ it('will return key before language is loaded', async () => {
88
+ tolgee = Tolgee()
89
+ .use(DetectionPlugin(Promise.resolve('en')))
90
+ .init({
91
+ defaultLanguage: 'es',
92
+ staticData: {
93
+ en: { test: 'Test' },
94
+ },
95
+ });
96
+
97
+ const runPromise = tolgee.run();
98
+ expect(tolgee.t({ key: 'test' })).toEqual('test');
99
+
100
+ await runPromise;
101
+ expect(tolgee.t({ key: 'test' })).toEqual('Test');
102
+ });
103
+
104
+ it('will throw error when no avaliableLanguages are set', () => {
105
+ tolgee = Tolgee().use(DetectionPlugin('en')).init({
106
+ defaultLanguage: 'es',
107
+ });
108
+
109
+ expect(() => tolgee.run()).toThrow();
110
+ });
111
+
112
+ it('will throw error when no defaultLanguage specified', () => {
113
+ tolgee = Tolgee()
114
+ .use(DetectionPlugin('en'))
115
+ .init({
116
+ staticData: {
117
+ en: { test: 'Test' },
118
+ },
119
+ });
120
+
121
+ expect(() => tolgee.run()).toThrow(/'defaultLanguage'/);
122
+ });
123
+
124
+ it('will throw error when no available languages specified', () => {
125
+ tolgee = Tolgee().use(DetectionPlugin('en')).init({});
126
+
127
+ expect(() => tolgee.run()).toThrow(/'availableLanguages'/);
128
+ });
129
+ });
@@ -0,0 +1,145 @@
1
+ import { Tolgee, TolgeePlugin, TolgeeInstance } from '../index';
2
+
3
+ describe('language storage plugin', () => {
4
+ let tolgee: TolgeeInstance;
5
+ let storedValue: string | undefined;
6
+ const StoragePlugin =
7
+ (value: any): TolgeePlugin =>
8
+ (tolgee, tools) => {
9
+ tools.setLanguageStorage({
10
+ getLanguage() {
11
+ return value;
12
+ },
13
+ setLanguage(language: string) {
14
+ storedValue = language;
15
+ },
16
+ });
17
+ return tolgee;
18
+ };
19
+
20
+ afterEach(() => {
21
+ tolgee.stop();
22
+ });
23
+
24
+ it('will restore language without loading', async () => {
25
+ tolgee = Tolgee()
26
+ .use(StoragePlugin('en'))
27
+ .init({
28
+ defaultLanguage: 'es',
29
+ staticData: {
30
+ en: { test: 'Test' },
31
+ },
32
+ });
33
+ const onFetchingHandler = jest.fn(() => {});
34
+ const onLoadingHandler = jest.fn(() => {});
35
+
36
+ tolgee.on('fetching', onFetchingHandler);
37
+ tolgee.on('loading', onLoadingHandler);
38
+
39
+ tolgee.run();
40
+ expect(tolgee.getLanguage()).toEqual('en');
41
+ expect(tolgee.isLoading()).toBeFalsy();
42
+ expect(tolgee.isFetching()).toBeFalsy();
43
+
44
+ expect(onFetchingHandler).not.toBeCalled();
45
+ expect(onLoadingHandler).not.toBeCalled();
46
+ });
47
+
48
+ it('will restore language async', async () => {
49
+ tolgee = Tolgee()
50
+ .use(StoragePlugin(Promise.resolve('en')))
51
+ .init({
52
+ defaultLanguage: 'es',
53
+ staticData: {
54
+ en: { test: 'Test' },
55
+ },
56
+ });
57
+ const onFetchingHandler = jest.fn(() => {});
58
+ const onLoadingHandler = jest.fn(() => {});
59
+
60
+ tolgee.on('fetching', onFetchingHandler);
61
+ tolgee.on('loading', onLoadingHandler);
62
+
63
+ const runPromise = tolgee.run();
64
+ expect(tolgee.isLoading()).toBeTruthy();
65
+ expect(tolgee.isFetching()).toBeTruthy();
66
+
67
+ await runPromise;
68
+ expect(tolgee.isLoading()).toBeFalsy();
69
+ expect(tolgee.isFetching()).toBeFalsy();
70
+ expect(onFetchingHandler).toBeCalledTimes(2);
71
+ expect(onLoadingHandler).toBeCalledTimes(2);
72
+ });
73
+
74
+ it('will fallback correctly', async () => {
75
+ tolgee = Tolgee()
76
+ .use(StoragePlugin(Promise.resolve(undefined)))
77
+ .init({
78
+ defaultLanguage: 'es',
79
+ staticData: {
80
+ en: { test: 'Test' },
81
+ },
82
+ });
83
+ const runPromise = tolgee.run();
84
+ expect(tolgee.getLanguage()).toEqual(undefined);
85
+
86
+ await runPromise;
87
+ expect(tolgee.getLanguage()).toEqual('es');
88
+ });
89
+
90
+ it('will return key before language is loaded', async () => {
91
+ tolgee = Tolgee()
92
+ .use(StoragePlugin(Promise.resolve('en')))
93
+ .init({
94
+ defaultLanguage: 'es',
95
+ staticData: {
96
+ en: { test: 'Test' },
97
+ },
98
+ });
99
+
100
+ const runPromise = tolgee.run();
101
+ expect(tolgee.t({ key: 'test' })).toEqual('test');
102
+
103
+ await runPromise;
104
+ expect(tolgee.t({ key: 'test' })).toEqual('Test');
105
+ });
106
+
107
+ it('will store language value on language change', async () => {
108
+ tolgee = Tolgee()
109
+ .use(StoragePlugin(Promise.resolve('en')))
110
+ .init({
111
+ defaultLanguage: 'es',
112
+ staticData: {
113
+ en: { test: 'Test' },
114
+ es: { test: 'Testa' },
115
+ },
116
+ });
117
+
118
+ tolgee.run();
119
+
120
+ await tolgee.changeLanguage('es');
121
+ expect(storedValue).toEqual('es');
122
+ });
123
+
124
+ it('will ignore invalid values', () => {
125
+ tolgee = Tolgee()
126
+ .use(StoragePlugin('eq'))
127
+ .init({
128
+ defaultLanguage: 'es',
129
+ staticData: {
130
+ en: { test: 'Test' },
131
+ es: { test: 'Testa' },
132
+ },
133
+ });
134
+ tolgee.run();
135
+ expect(tolgee.getLanguage()).toEqual('es');
136
+ });
137
+
138
+ it('will return invalid value if no available languages', () => {
139
+ tolgee = Tolgee().use(StoragePlugin('eq')).init({
140
+ defaultLanguage: 'es',
141
+ });
142
+ tolgee.run();
143
+ expect(tolgee.getLanguage()).toEqual('eq');
144
+ });
145
+ });
@@ -0,0 +1,112 @@
1
+ import { Tolgee, TreeTranslationsData } from '../index';
2
+ import { resolvablePromise } from './testTools';
3
+
4
+ describe('language changes', () => {
5
+ it('changes language', async () => {
6
+ const tolgee = Tolgee({ language: 'en' });
7
+ expect(tolgee.getLanguage()).toEqual('en');
8
+ await tolgee.changeLanguage('es');
9
+ expect(tolgee.getLanguage()).toEqual('es');
10
+ });
11
+
12
+ it('returns correct translation', async () => {
13
+ const tolgee = Tolgee({
14
+ language: 'en',
15
+ staticData: { en: { hello: 'World' }, es: { hello: 'Mundo' } },
16
+ });
17
+ expect(tolgee.t({ key: 'hello' })).toEqual('World');
18
+ await tolgee.changeLanguage('es');
19
+ expect(tolgee.t({ key: 'hello' })).toEqual('Mundo');
20
+ await tolgee.changeLanguage('cs');
21
+ expect(tolgee.t({ key: 'hello' })).toEqual('hello');
22
+ });
23
+
24
+ it('fetches language data correctly', async () => {
25
+ const [promiseEn, resolveEn] = resolvablePromise<TreeTranslationsData>();
26
+ const [promiseEs, resolveEs] = resolvablePromise<TreeTranslationsData>();
27
+ const tolgee = Tolgee({
28
+ language: 'en',
29
+ staticData: {
30
+ en: () => promiseEn,
31
+ es: () => promiseEs,
32
+ },
33
+ });
34
+ const runPromise = tolgee.run();
35
+ expect(tolgee.t({ key: 'test' })).toEqual('test');
36
+ expect(tolgee.getPendingLanguage()).toEqual('en');
37
+ resolveEn({ test: 'Test' });
38
+ await runPromise;
39
+ expect(tolgee.t({ key: 'test' })).toEqual('Test');
40
+
41
+ const langChangeEsPromise = tolgee.changeLanguage('es');
42
+ expect(tolgee.getPendingLanguage()).toEqual('es');
43
+ resolveEs({ test: 'Testa' });
44
+ await langChangeEsPromise;
45
+ expect(tolgee.t({ key: 'test' })).toEqual('Testa');
46
+ });
47
+
48
+ it('fetches fallback', async () => {
49
+ const [promiseEn, resolveEn] = resolvablePromise<TreeTranslationsData>();
50
+ const [promiseEs, resolveEs] = resolvablePromise<TreeTranslationsData>();
51
+ const [promiseEnGb, resolveEnGb] =
52
+ resolvablePromise<TreeTranslationsData>();
53
+ const [promiseEnIn, resolveEnIn] =
54
+ resolvablePromise<TreeTranslationsData>();
55
+
56
+ const tolgee = Tolgee({
57
+ language: 'es',
58
+ staticData: {
59
+ en: () => promiseEn,
60
+ es: () => promiseEs,
61
+ 'en-GB': () => promiseEnGb,
62
+ 'en-IN': () => promiseEnIn,
63
+ },
64
+ fallbackLanguage: {
65
+ es: 'en',
66
+ 'en-GB': 'en',
67
+ 'en-IN': ['en-GB', 'en'],
68
+ },
69
+ });
70
+
71
+ resolveEn({ color: 'Color', egg: 'Egg' });
72
+ resolveEs({ color: 'Pintar' });
73
+ await tolgee.run();
74
+
75
+ expect(tolgee.t({ key: 'color' })).toEqual('Pintar');
76
+ expect(tolgee.t({ key: 'egg' })).toEqual('Egg');
77
+
78
+ resolveEnGb({ color: 'Colour', india: 'India' });
79
+ resolveEnIn({ india: 'Blabla' });
80
+
81
+ await tolgee.changeLanguage('en-IN');
82
+ expect(tolgee.t({ key: 'color' })).toEqual('Colour');
83
+ expect(tolgee.t({ key: 'egg' })).toEqual('Egg');
84
+ expect(tolgee.t({ key: 'india' })).toEqual('Blabla');
85
+
86
+ await tolgee.changeLanguage('en-GB');
87
+ expect(tolgee.t({ key: 'color' })).toEqual('Colour');
88
+ expect(tolgee.t({ key: 'egg' })).toEqual('Egg');
89
+ expect(tolgee.t({ key: 'india' })).toEqual('India');
90
+
91
+ await tolgee.changeLanguage('en');
92
+ expect(tolgee.t({ key: 'color' })).toEqual('Color');
93
+ expect(tolgee.t({ key: 'egg' })).toEqual('Egg');
94
+ expect(tolgee.t({ key: 'india' })).toEqual('india');
95
+ });
96
+
97
+ it('will fallback to default value', () => {
98
+ const tolgee = Tolgee({
99
+ defaultLanguage: 'en',
100
+ });
101
+
102
+ expect(tolgee.getLanguage()).toEqual(undefined);
103
+ tolgee.run();
104
+ expect(tolgee.getLanguage()).toEqual('en');
105
+ });
106
+
107
+ it('will throw error when no language specified', () => {
108
+ const tolgee = Tolgee({});
109
+
110
+ expect(() => tolgee.run()).toThrow(/'language'/);
111
+ });
112
+ });
@@ -0,0 +1,39 @@
1
+ import { Tolgee, TreeTranslationsData } from '../index';
2
+ import { resolvablePromise } from './testTools';
3
+
4
+ describe('loading', () => {
5
+ it('isLoading & isFetching', async () => {
6
+ const [promiseEn, resolveEn] = resolvablePromise<TreeTranslationsData>();
7
+ const [promiseEs, resolveEs] = resolvablePromise<TreeTranslationsData>();
8
+ const onLoadHandler = jest.fn(() => {});
9
+ const onFetchingHandler = jest.fn(() => {});
10
+ const tolgee = Tolgee({
11
+ language: 'en',
12
+ staticData: {
13
+ en: () => promiseEn,
14
+ es: () => promiseEs,
15
+ },
16
+ });
17
+ tolgee.on('initialLoad', onLoadHandler);
18
+ tolgee.on('fetching', onFetchingHandler);
19
+
20
+ const runPromise = tolgee.run();
21
+ expect(tolgee.isLoading()).toBeTruthy();
22
+ expect(tolgee.isFetching()).toBeTruthy();
23
+ resolveEn({});
24
+ await runPromise;
25
+ expect(tolgee.isLoading()).toBeFalsy();
26
+ expect(tolgee.isFetching()).toBeFalsy();
27
+ expect(onLoadHandler).toBeCalledTimes(1);
28
+ expect(onFetchingHandler).toBeCalledTimes(2);
29
+
30
+ const changeLanguagePromise = tolgee.changeLanguage('es');
31
+ expect(tolgee.isLoading()).toBeFalsy();
32
+ expect(tolgee.isFetching()).toBeTruthy();
33
+ resolveEs({});
34
+ await changeLanguagePromise;
35
+ expect(onLoadHandler).toBeCalledTimes(1);
36
+ expect(onFetchingHandler).toBeCalledTimes(4);
37
+ expect(tolgee.isFetching()).toBeFalsy();
38
+ });
39
+ });
@@ -0,0 +1,99 @@
1
+ import { Tolgee } from '../index';
2
+
3
+ const tolgeeWithNamespaces = () => {
4
+ const promiseEnTest = jest.fn(() => Promise.resolve({ test: 'Test' }));
5
+ const promiseEnCommon = jest.fn(() => Promise.resolve({ cancel: 'Cancel' }));
6
+ const promiseEsTest = jest.fn(() => Promise.resolve({ test: 'Testa' }));
7
+ const promiseEsCommon = jest.fn(() =>
8
+ Promise.resolve({ cancel: 'Cancellar' })
9
+ );
10
+
11
+ return Tolgee({
12
+ language: 'en',
13
+ ns: ['common'],
14
+ staticData: {
15
+ 'en:common': promiseEnCommon,
16
+ 'en:test': promiseEnTest,
17
+ 'es:common': promiseEsCommon,
18
+ 'es:test': promiseEsTest,
19
+ },
20
+ });
21
+ };
22
+
23
+ describe('language changes', () => {
24
+ it('returns correct translation from namespace', () => {
25
+ const tolgee = Tolgee({
26
+ language: 'en',
27
+ staticData: {
28
+ en: { hello: 'World' },
29
+ 'en:common': { test: 'Test' },
30
+ },
31
+ });
32
+ expect(tolgee.t({ key: 'hello' })).toEqual('World');
33
+ expect(tolgee.t({ key: 'test' })).toEqual('test');
34
+ expect(tolgee.t({ key: 'test', ns: 'common' })).toEqual('Test');
35
+ });
36
+
37
+ it('uses defaultNs', async () => {
38
+ const tolgee = Tolgee({
39
+ language: 'en',
40
+ defaultNs: 'common',
41
+ staticData: {
42
+ 'en:common': { test: 'Test' },
43
+ 'es:common': { test: 'Testa' },
44
+ },
45
+ });
46
+ await tolgee.run();
47
+
48
+ expect(tolgee.t({ key: 'test' })).toEqual('Test');
49
+ await tolgee.changeLanguage('es');
50
+ expect(tolgee.t({ key: 'test' })).toEqual('Testa');
51
+ });
52
+
53
+ it('active namespaces', async () => {
54
+ const tolgee = tolgeeWithNamespaces();
55
+ await tolgee.run();
56
+
57
+ expect(tolgee.t({ key: 'cancel', ns: 'common' })).toEqual('Cancel');
58
+ expect(tolgee.t({ key: 'test', ns: 'test' })).toEqual('test');
59
+
60
+ await tolgee.changeLanguage('es');
61
+
62
+ expect(tolgee.t({ key: 'cancel', ns: 'common' })).toEqual('Cancellar');
63
+ expect(tolgee.t({ key: 'test', ns: 'test' })).toEqual('test');
64
+
65
+ await tolgee.changeLanguage('en');
66
+ await tolgee.addActiveNs('test');
67
+
68
+ expect(tolgee.t({ key: 'cancel', ns: 'common' })).toEqual('Cancel');
69
+ expect(tolgee.t({ key: 'test', ns: 'test' })).toEqual('Test');
70
+
71
+ await tolgee.changeLanguage('es');
72
+
73
+ expect(tolgee.t({ key: 'cancel', ns: 'common' })).toEqual('Cancellar');
74
+ expect(tolgee.t({ key: 'test', ns: 'test' })).toEqual('Testa');
75
+ });
76
+
77
+ it('removing active namespaces', async () => {
78
+ const tolgee = tolgeeWithNamespaces();
79
+ await tolgee.run();
80
+ const handler = jest.fn();
81
+ tolgee.on('cache', handler);
82
+
83
+ expect(tolgee.t({ key: 'cancel', ns: 'common' })).toEqual('Cancel');
84
+ expect(tolgee.t({ key: 'test', ns: 'test' })).toEqual('test');
85
+
86
+ await tolgee.addActiveNs('test');
87
+ expect(handler).toBeCalledTimes(1);
88
+
89
+ expect(tolgee.t({ key: 'cancel', ns: 'common' })).toEqual('Cancel');
90
+ expect(tolgee.t({ key: 'test', ns: 'test' })).toEqual('Test');
91
+
92
+ tolgee.removeActiveNs('test');
93
+ await tolgee.changeLanguage('es');
94
+ expect(handler).toBeCalledTimes(2);
95
+
96
+ expect(tolgee.t({ key: 'cancel', ns: 'common' })).toEqual('Cancellar');
97
+ expect(tolgee.t({ key: 'test', ns: 'test' })).toEqual('test');
98
+ });
99
+ });