@tolgee/core 4.9.2 → 4.9.3-rc.04b22e6.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 (288) hide show
  1. package/dist/tolgee.cjs.js +1277 -7023
  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.js +1407 -0
  6. package/dist/tolgee.esm.js.map +1 -0
  7. package/dist/tolgee.esm.min.mjs +1 -1
  8. package/dist/tolgee.esm.min.mjs.map +1 -1
  9. package/dist/tolgee.umd.js +1277 -7023
  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 +110 -0
  16. package/lib/Controller/Events/EventEmitter.d.ts +6 -0
  17. package/lib/Controller/Events/EventEmitterSelective.d.ts +7 -0
  18. package/lib/Controller/Events/Events.d.ts +14 -0
  19. package/lib/Controller/Plugins/Plugins.d.ts +36 -0
  20. package/lib/Controller/State/State.d.ts +39 -0
  21. package/lib/Controller/State/helpers.d.ts +6 -0
  22. package/lib/Controller/State/initObserverOptions.d.ts +13 -0
  23. package/lib/Controller/State/initState.d.ts +47 -0
  24. package/lib/Controller/ValueObserver.d.ts +5 -0
  25. package/lib/FormatSimple/FormatError.d.ts +7 -0
  26. package/lib/FormatSimple/FormatSimple.d.ts +3 -0
  27. package/lib/FormatSimple/formatParser.d.ts +1 -0
  28. package/lib/FormatSimple/formatter.d.ts +2 -0
  29. package/lib/Tolgee.d.ts +2 -68
  30. package/lib/TranslateParams.d.ts +2 -0
  31. package/lib/{Constants/Global.d.ts → constants.d.ts} +1 -3
  32. package/lib/helpers.d.ts +3 -0
  33. package/lib/index.d.ts +4 -8
  34. package/lib/types.d.ts +244 -84
  35. package/package.json +21 -29
  36. package/src/Controller/Cache/Cache.ts +296 -0
  37. package/src/Controller/Cache/helpers.ts +37 -0
  38. package/src/Controller/Controller.ts +310 -0
  39. package/src/Controller/Events/EventEmitter.ts +30 -0
  40. package/src/Controller/Events/EventEmitterSelective.test.ts +125 -0
  41. package/src/Controller/Events/EventEmitterSelective.ts +188 -0
  42. package/src/Controller/Events/Events.ts +66 -0
  43. package/src/Controller/Plugins/Plugins.ts +315 -0
  44. package/src/Controller/State/State.ts +175 -0
  45. package/src/Controller/State/helpers.ts +41 -0
  46. package/src/Controller/State/initObserverOptions.ts +38 -0
  47. package/src/Controller/State/initState.ts +81 -0
  48. package/src/Controller/ValueObserver.ts +26 -0
  49. package/src/FormatSimple/FormatError.ts +26 -0
  50. package/src/FormatSimple/FormatSimple.ts +13 -0
  51. package/src/FormatSimple/formatParser.ts +133 -0
  52. package/src/FormatSimple/formatter.test.ts +190 -0
  53. package/src/FormatSimple/formatter.ts +19 -0
  54. package/src/Tolgee.ts +79 -330
  55. package/src/TranslateParams.test.ts +41 -0
  56. package/src/TranslateParams.ts +51 -0
  57. package/src/__test/backend.test.ts +48 -0
  58. package/src/__test/cache.test.ts +148 -0
  59. package/src/__test/client.test.ts +48 -0
  60. package/src/__test/events.test.ts +33 -0
  61. package/src/__test/format.simple.test.ts +26 -0
  62. package/src/__test/initialization.test.ts +85 -0
  63. package/src/__test/jest-setup.ts +2 -0
  64. package/src/__test/languageDetection.test.ts +129 -0
  65. package/src/__test/languageStorage.test.ts +145 -0
  66. package/src/__test/languages.test.ts +112 -0
  67. package/src/__test/loading.test.ts +39 -0
  68. package/src/__test/namespaces.test.ts +99 -0
  69. package/src/__test/namespacesFallback.test.ts +74 -0
  70. package/src/__test/plugins.test.ts +136 -0
  71. package/src/__test/testTools.ts +7 -0
  72. package/src/{Constants/Global.ts → constants.ts} +1 -6
  73. package/src/helpers.ts +17 -0
  74. package/src/index.ts +9 -8
  75. package/src/types.ts +338 -90
  76. package/README.md +0 -45
  77. package/dist/Constants/Global.d.ts +0 -6
  78. package/dist/Constants/ModifierKey.d.ts +0 -6
  79. package/dist/Errors/ApiHttpError.d.ts +0 -5
  80. package/dist/Observer.d.ts +0 -14
  81. package/dist/Observer.test.d.ts +0 -2
  82. package/dist/Properties.d.ts +0 -17
  83. package/dist/Properties.test.d.ts +0 -1
  84. package/dist/Tolgee.d.ts +0 -68
  85. package/dist/Tolgee.test.d.ts +0 -1
  86. package/dist/TolgeeConfig.d.ts +0 -69
  87. package/dist/TolgeeConfig.test.d.ts +0 -1
  88. package/dist/__integration/FormatterIcu.test.d.ts +0 -1
  89. package/dist/__integration/FormatterMissing.d.ts +0 -1
  90. package/dist/__integration/Tolgee.test.d.ts +0 -1
  91. package/dist/__integration/TolgeeInvisible.test.d.ts +0 -1
  92. package/dist/__integration/mockTranslations.d.ts +0 -7
  93. package/dist/__integration/testConfig.d.ts +0 -9
  94. package/dist/__testFixtures/classMock.d.ts +0 -3
  95. package/dist/__testFixtures/createElement.d.ts +0 -2
  96. package/dist/__testFixtures/createTestDom.d.ts +0 -9
  97. package/dist/__testFixtures/mocked.d.ts +0 -20
  98. package/dist/__testFixtures/setupAfterEnv.d.ts +0 -8
  99. package/dist/helpers/NodeHelper.d.ts +0 -14
  100. package/dist/helpers/TextHelper.d.ts +0 -5
  101. package/dist/helpers/TextHelper.test.d.ts +0 -1
  102. package/dist/helpers/commonTypes.d.ts +0 -2
  103. package/dist/helpers/encoderPolyfill.d.ts +0 -8
  104. package/dist/helpers/secret.d.ts +0 -6
  105. package/dist/helpers/secret.test.d.ts +0 -1
  106. package/dist/helpers/sleep.d.ts +0 -1
  107. package/dist/highlighter/HighlightFunctionsInitializer.d.ts +0 -10
  108. package/dist/highlighter/HighlightFunctionsInitializer.test.d.ts +0 -1
  109. package/dist/highlighter/MouseEventHandler.d.ts +0 -29
  110. package/dist/highlighter/MouseEventHandler.test.d.ts +0 -1
  111. package/dist/highlighter/TranslationHighlighter.d.ts +0 -14
  112. package/dist/highlighter/TranslationHighlighter.test.d.ts +0 -1
  113. package/dist/index.d.ts +0 -10
  114. package/dist/internal.d.ts +0 -2
  115. package/dist/modules/IcuFormatter.d.ts +0 -2
  116. package/dist/modules/IcuFormatter.test.d.ts +0 -1
  117. package/dist/modules/index.d.ts +0 -1
  118. package/dist/services/ApiHttpService.d.ts +0 -15
  119. package/dist/services/CoreService.d.ts +0 -18
  120. package/dist/services/CoreService.test.d.ts +0 -1
  121. package/dist/services/DependencyService.d.ts +0 -39
  122. package/dist/services/DependencyService.test.d.ts +0 -1
  123. package/dist/services/ElementRegistrar.d.ts +0 -19
  124. package/dist/services/ElementRegistrar.test.d.ts +0 -1
  125. package/dist/services/EventEmitter.d.ts +0 -13
  126. package/dist/services/EventService.d.ts +0 -9
  127. package/dist/services/ModuleService.d.ts +0 -5
  128. package/dist/services/ScreenshotService.d.ts +0 -15
  129. package/dist/services/Subscription.d.ts +0 -5
  130. package/dist/services/TextService.d.ts +0 -14
  131. package/dist/services/TextService.test.d.ts +0 -1
  132. package/dist/services/TranslationService.d.ts +0 -75
  133. package/dist/services/TranslationService.test.d.ts +0 -1
  134. package/dist/services/__mocks__/CoreService.d.ts +0 -2
  135. package/dist/tolgee.esm.mjs +0 -7150
  136. package/dist/tolgee.esm.mjs.map +0 -1
  137. package/dist/toolsManager/Messages.d.ts +0 -8
  138. package/dist/toolsManager/Messages.test.d.ts +0 -1
  139. package/dist/toolsManager/PluginManager.d.ts +0 -21
  140. package/dist/toolsManager/PluginManager.test.d.ts +0 -1
  141. package/dist/types/DTOs.d.ts +0 -20
  142. package/dist/types/apiSchema.generated.d.ts +0 -6185
  143. package/dist/types.d.ts +0 -123
  144. package/dist/wrappers/AbstractWrapper.d.ts +0 -8
  145. package/dist/wrappers/NodeHandler.d.ts +0 -18
  146. package/dist/wrappers/WrappedHandler.d.ts +0 -8
  147. package/dist/wrappers/invisible/AttributeHandler.d.ts +0 -8
  148. package/dist/wrappers/invisible/Coder.d.ts +0 -7
  149. package/dist/wrappers/invisible/ContentHandler.d.ts +0 -6
  150. package/dist/wrappers/invisible/CoreHandler.d.ts +0 -10
  151. package/dist/wrappers/invisible/InvisibleWrapper.d.ts +0 -18
  152. package/dist/wrappers/invisible/ValueMemory.d.ts +0 -5
  153. package/dist/wrappers/invisible/ValueMemory.test.d.ts +0 -1
  154. package/dist/wrappers/text/AttributeHandler.d.ts +0 -8
  155. package/dist/wrappers/text/AttributeHandler.test.d.ts +0 -1
  156. package/dist/wrappers/text/Coder.d.ts +0 -15
  157. package/dist/wrappers/text/Coder.test.d.ts +0 -1
  158. package/dist/wrappers/text/ContentHandler.d.ts +0 -8
  159. package/dist/wrappers/text/ContentHandler.test.d.ts +0 -1
  160. package/dist/wrappers/text/CoreHandler.d.ts +0 -17
  161. package/dist/wrappers/text/CoreHandler.test.d.ts +0 -1
  162. package/dist/wrappers/text/TextWrapper.d.ts +0 -20
  163. package/index.js +0 -7
  164. package/lib/Constants/ModifierKey.d.ts +0 -6
  165. package/lib/Errors/ApiHttpError.d.ts +0 -5
  166. package/lib/Observer.d.ts +0 -14
  167. package/lib/Properties.d.ts +0 -17
  168. package/lib/TolgeeConfig.d.ts +0 -69
  169. package/lib/helpers/NodeHelper.d.ts +0 -14
  170. package/lib/helpers/TextHelper.d.ts +0 -5
  171. package/lib/helpers/commonTypes.d.ts +0 -2
  172. package/lib/helpers/encoderPolyfill.d.ts +0 -8
  173. package/lib/helpers/secret.d.ts +0 -6
  174. package/lib/helpers/sleep.d.ts +0 -1
  175. package/lib/highlighter/HighlightFunctionsInitializer.d.ts +0 -10
  176. package/lib/highlighter/MouseEventHandler.d.ts +0 -29
  177. package/lib/highlighter/TranslationHighlighter.d.ts +0 -14
  178. package/lib/modules/IcuFormatter.d.ts +0 -2
  179. package/lib/modules/index.d.ts +0 -1
  180. package/lib/services/ApiHttpService.d.ts +0 -15
  181. package/lib/services/CoreService.d.ts +0 -18
  182. package/lib/services/DependencyService.d.ts +0 -39
  183. package/lib/services/ElementRegistrar.d.ts +0 -19
  184. package/lib/services/EventEmitter.d.ts +0 -13
  185. package/lib/services/EventService.d.ts +0 -9
  186. package/lib/services/ModuleService.d.ts +0 -5
  187. package/lib/services/ScreenshotService.d.ts +0 -15
  188. package/lib/services/Subscription.d.ts +0 -5
  189. package/lib/services/TextService.d.ts +0 -14
  190. package/lib/services/TranslationService.d.ts +0 -75
  191. package/lib/toolsManager/Messages.d.ts +0 -8
  192. package/lib/toolsManager/PluginManager.d.ts +0 -21
  193. package/lib/types/DTOs.d.ts +0 -20
  194. package/lib/types/apiSchema.generated.d.ts +0 -6185
  195. package/lib/wrappers/AbstractWrapper.d.ts +0 -8
  196. package/lib/wrappers/NodeHandler.d.ts +0 -18
  197. package/lib/wrappers/WrappedHandler.d.ts +0 -8
  198. package/lib/wrappers/invisible/AttributeHandler.d.ts +0 -8
  199. package/lib/wrappers/invisible/Coder.d.ts +0 -7
  200. package/lib/wrappers/invisible/ContentHandler.d.ts +0 -6
  201. package/lib/wrappers/invisible/CoreHandler.d.ts +0 -10
  202. package/lib/wrappers/invisible/InvisibleWrapper.d.ts +0 -18
  203. package/lib/wrappers/invisible/ValueMemory.d.ts +0 -5
  204. package/lib/wrappers/text/AttributeHandler.d.ts +0 -8
  205. package/lib/wrappers/text/Coder.d.ts +0 -15
  206. package/lib/wrappers/text/ContentHandler.d.ts +0 -8
  207. package/lib/wrappers/text/CoreHandler.d.ts +0 -17
  208. package/lib/wrappers/text/TextWrapper.d.ts +0 -20
  209. package/src/Constants/ModifierKey.ts +0 -6
  210. package/src/Errors/ApiHttpError.ts +0 -8
  211. package/src/Observer.test.ts +0 -119
  212. package/src/Observer.ts +0 -68
  213. package/src/Properties.test.ts +0 -150
  214. package/src/Properties.ts +0 -112
  215. package/src/Tolgee.test.ts +0 -473
  216. package/src/TolgeeConfig.test.ts +0 -21
  217. package/src/TolgeeConfig.ts +0 -134
  218. package/src/__integration/FormatterIcu.test.ts +0 -80
  219. package/src/__integration/FormatterMissing.ts +0 -54
  220. package/src/__integration/Tolgee.test.ts +0 -90
  221. package/src/__integration/TolgeeInvisible.test.ts +0 -145
  222. package/src/__integration/mockTranslations.ts +0 -6
  223. package/src/__integration/testConfig.ts +0 -16
  224. package/src/__testFixtures/classMock.ts +0 -11
  225. package/src/__testFixtures/createElement.ts +0 -43
  226. package/src/__testFixtures/createTestDom.ts +0 -26
  227. package/src/__testFixtures/mocked.ts +0 -25
  228. package/src/__testFixtures/setupAfterEnv.ts +0 -34
  229. package/src/helpers/NodeHelper.ts +0 -90
  230. package/src/helpers/TextHelper.test.ts +0 -62
  231. package/src/helpers/TextHelper.ts +0 -58
  232. package/src/helpers/commonTypes.ts +0 -8
  233. package/src/helpers/encoderPolyfill.ts +0 -96
  234. package/src/helpers/secret.test.ts +0 -61
  235. package/src/helpers/secret.ts +0 -68
  236. package/src/helpers/sleep.ts +0 -2
  237. package/src/highlighter/HighlightFunctionsInitializer.test.ts +0 -40
  238. package/src/highlighter/HighlightFunctionsInitializer.ts +0 -61
  239. package/src/highlighter/MouseEventHandler.test.ts +0 -151
  240. package/src/highlighter/MouseEventHandler.ts +0 -191
  241. package/src/highlighter/TranslationHighlighter.test.ts +0 -177
  242. package/src/highlighter/TranslationHighlighter.ts +0 -113
  243. package/src/internal.ts +0 -2
  244. package/src/modules/IcuFormatter.test.ts +0 -21
  245. package/src/modules/IcuFormatter.ts +0 -39
  246. package/src/modules/index.ts +0 -1
  247. package/src/services/ApiHttpService.ts +0 -85
  248. package/src/services/CoreService.test.ts +0 -141
  249. package/src/services/CoreService.ts +0 -76
  250. package/src/services/DependencyService.test.ts +0 -51
  251. package/src/services/DependencyService.ts +0 -116
  252. package/src/services/ElementRegistrar.test.ts +0 -131
  253. package/src/services/ElementRegistrar.ts +0 -108
  254. package/src/services/EventEmitter.ts +0 -52
  255. package/src/services/EventService.ts +0 -14
  256. package/src/services/ModuleService.ts +0 -14
  257. package/src/services/ScreenshotService.ts +0 -31
  258. package/src/services/Subscription.ts +0 -7
  259. package/src/services/TextService.test.ts +0 -88
  260. package/src/services/TextService.ts +0 -82
  261. package/src/services/TranslationService.test.ts +0 -358
  262. package/src/services/TranslationService.ts +0 -417
  263. package/src/services/__mocks__/CoreService.ts +0 -17
  264. package/src/toolsManager/Messages.test.ts +0 -79
  265. package/src/toolsManager/Messages.ts +0 -60
  266. package/src/toolsManager/PluginManager.test.ts +0 -108
  267. package/src/toolsManager/PluginManager.ts +0 -129
  268. package/src/types/DTOs.ts +0 -25
  269. package/src/types/apiSchema.generated.ts +0 -6208
  270. package/src/wrappers/AbstractWrapper.ts +0 -14
  271. package/src/wrappers/NodeHandler.ts +0 -143
  272. package/src/wrappers/WrappedHandler.ts +0 -28
  273. package/src/wrappers/invisible/AttributeHandler.ts +0 -23
  274. package/src/wrappers/invisible/Coder.ts +0 -65
  275. package/src/wrappers/invisible/ContentHandler.ts +0 -15
  276. package/src/wrappers/invisible/CoreHandler.ts +0 -17
  277. package/src/wrappers/invisible/InvisibleWrapper.ts +0 -59
  278. package/src/wrappers/invisible/ValueMemory.test.ts +0 -25
  279. package/src/wrappers/invisible/ValueMemory.ts +0 -16
  280. package/src/wrappers/text/AttributeHandler.test.ts +0 -118
  281. package/src/wrappers/text/AttributeHandler.ts +0 -25
  282. package/src/wrappers/text/Coder.test.ts +0 -298
  283. package/src/wrappers/text/Coder.ts +0 -202
  284. package/src/wrappers/text/ContentHandler.test.ts +0 -185
  285. package/src/wrappers/text/ContentHandler.ts +0 -21
  286. package/src/wrappers/text/CoreHandler.test.ts +0 -106
  287. package/src/wrappers/text/CoreHandler.ts +0 -45
  288. package/src/wrappers/text/TextWrapper.ts +0 -69
@@ -1,473 +0,0 @@
1
- jest.dontMock('./Tolgee');
2
- jest.dontMock('./services/DependencyService');
3
-
4
- import '@testing-library/jest-dom/extend-expect';
5
- import { mocked } from 'jest-mock';
6
- import { Tolgee } from './Tolgee';
7
- import {
8
- configMock,
9
- coreServiceMock,
10
- eventServiceMock,
11
- getMockedInstance,
12
- observerMock,
13
- propertiesMock,
14
- textServiceMock,
15
- translationServiceMock,
16
- } from '@testFixtures/mocked';
17
- import { EventEmitterImpl } from './services/EventEmitter';
18
- import { TextService } from './services/TextService';
19
- import { TextWrapper } from './wrappers/text/TextWrapper';
20
- import { ElementRegistrar } from './services/ElementRegistrar';
21
- import { NodeHelper } from './helpers/NodeHelper';
22
- import { TOLGEE_TARGET_ATTRIBUTE } from './Constants/Global';
23
- import { Properties } from './Properties';
24
- import { waitFor } from '@testing-library/dom';
25
- import { Translations } from './types';
26
-
27
- describe('Tolgee', () => {
28
- let tolgee: Tolgee;
29
-
30
- beforeEach(() => {
31
- jest.clearAllMocks();
32
- tolgee = Tolgee.init({});
33
- });
34
-
35
- test('can be created', () => {
36
- expect(tolgee).not.toBeNull();
37
- });
38
-
39
- test('returns proper default language', () => {
40
- configMock.mock.instances[0].defaultLanguage = 'testDefaultLanguage';
41
- expect(configMock).toBeCalledTimes(1);
42
- expect(tolgee.defaultLanguage).toEqual('testDefaultLanguage');
43
- });
44
-
45
- test('returns proper language', () => {
46
- propertiesMock.mock.instances[0].currentLanguage = 'currentLang';
47
- expect(tolgee.lang).toEqual('currentLang');
48
- });
49
-
50
- test('will load api key details', async () => {
51
- propertiesMock.mock.instances[0].mode = 'development';
52
- await tolgee.run();
53
- expect(
54
- coreServiceMock.mock.instances[0].loadApiKeyDetails
55
- ).toHaveBeenCalledTimes(1);
56
- expect(
57
- coreServiceMock.mock.instances[0].loadApiKeyDetails
58
- ).toHaveBeenCalledWith();
59
- });
60
-
61
- test('will not set properties.scopes on run in production mode', async () => {
62
- propertiesMock.mock.instances[0].mode = 'production';
63
- await tolgee.run();
64
- expect(coreServiceMock.mock.instances[0].getApiKeyDetails).toBeCalledTimes(
65
- 0
66
- );
67
- expect(propertiesMock.mock.instances[0].scopes).toBeUndefined();
68
- });
69
-
70
- test('will run the observer when watch is on', async () => {
71
- propertiesMock.mock.instances[0].config.watch = true;
72
- await tolgee.run();
73
- expect(observerMock.mock.instances[0].observe).toBeCalledTimes(1);
74
- });
75
-
76
- test('will not the observer when watch is off', async () => {
77
- propertiesMock.mock.instances[0].config.watch = false;
78
- await tolgee.run();
79
- expect(observerMock.mock.instances[0].observe).toBeCalledTimes(0);
80
- });
81
-
82
- test('will try to get translations with current language from properties', async () => {
83
- propertiesMock.mock.instances[0].currentLanguage = 'dummyLang';
84
- await tolgee.run();
85
- expect(
86
- translationServiceMock.mock.instances[0].loadTranslations
87
- ).toBeCalledWith();
88
- });
89
-
90
- test('will try to get translations with current language from properties', async () => {
91
- propertiesMock.mock.instances[0].currentLanguage = 'dummyLang';
92
- propertiesMock.mock.instances[0].config.preloadFallback = true;
93
- propertiesMock.mock.instances[0].config.fallbackLanguage = 'fallbackLang';
94
- await tolgee.run();
95
- expect(
96
- translationServiceMock.mock.instances[0].loadTranslations
97
- ).toBeCalledWith();
98
- expect(
99
- translationServiceMock.mock.instances[0].loadTranslations
100
- ).toBeCalledWith('fallbackLang');
101
- });
102
-
103
- test('will refresh translations using observer on run', async () => {
104
- const htmlElement = document.createElement('dummyElement');
105
- propertiesMock.mock.instances[0].config.targetElement = htmlElement;
106
- await tolgee.run();
107
- expect(getMockedInstance(TextWrapper).handleSubtree).toBeCalledWith(
108
- htmlElement
109
- );
110
- });
111
-
112
- test('will refresh translations using observer on refresh', async () => {
113
- const htmlElement = document.createElement('dummyElement');
114
- propertiesMock.mock.instances[0].config.targetElement = htmlElement;
115
- await tolgee.run();
116
- await tolgee.refresh();
117
- expect(getMockedInstance(TextWrapper).handleSubtree).toBeCalledWith(
118
- htmlElement
119
- );
120
- });
121
-
122
- test('will get defaultLanguage from config', async () => {
123
- propertiesMock.mock.instances[0].config.defaultLanguage = 'dummyLang';
124
- expect(tolgee.defaultLanguage).toEqual('dummyLang');
125
- });
126
-
127
- describe('translation functions', () => {
128
- const translatedDummyText = 'translatedDummyText';
129
- const wrappedDummyText = 'wrappedDummyText';
130
- const dummyKey = 'dummyText';
131
- let mockedTranslate;
132
- let mockedInstant;
133
- let mockedWrap;
134
- let mockedLoadTranslations;
135
- const dummyParams = {};
136
-
137
- beforeEach(() => {
138
- tolgee.run();
139
- mockedTranslate = mocked(textServiceMock.mock.instances[0].translate);
140
- mockedInstant = mocked(textServiceMock.mock.instances[0].instant);
141
- mockedWrap = getMockedInstance(TextWrapper).wrap;
142
- mockedLoadTranslations = mocked(
143
- translationServiceMock.mock.instances[0].loadTranslations
144
- );
145
- mockedTranslate.mockImplementation(async () => translatedDummyText);
146
- mockedInstant.mockImplementation(() => translatedDummyText);
147
- mockedWrap.mockImplementation(() => wrappedDummyText);
148
- });
149
-
150
- describe('async translate', () => {
151
- test('will return wrapped string from text service in development mode', async () => {
152
- propertiesMock.mock.instances[0].mode = 'development';
153
- const translated = await tolgee.translate(dummyKey, dummyParams);
154
-
155
- expect(mockedWrap).toBeCalledWith(
156
- dummyKey,
157
- dummyParams,
158
- undefined,
159
- 'translatedDummyText'
160
- );
161
- expect(translated).toEqual(wrappedDummyText);
162
- });
163
-
164
- test('will return translated string from text service in production mode', async () => {
165
- propertiesMock.mock.instances[0].mode = 'production';
166
- const translated = await tolgee.translate(dummyKey, dummyParams);
167
-
168
- expect(translated).toEqual(translatedDummyText);
169
- expect(mockedWrap).not.toBeCalled();
170
- expect(mockedTranslate).toBeCalledWith(
171
- dummyKey,
172
- dummyParams,
173
- undefined,
174
- undefined,
175
- undefined
176
- );
177
- });
178
-
179
- test('will not wrap when development is on, but noWrap is true', async () => {
180
- propertiesMock.mock.instances[0].mode = 'development';
181
- const translated = await tolgee.translate(dummyKey, dummyParams, true);
182
-
183
- expect(mockedWrap).not.toBeCalled();
184
- expect(translated).toEqual(translatedDummyText);
185
- });
186
-
187
- test('will wait for translations load before wrapping', async () => {
188
- propertiesMock.mock.instances[0].mode = 'development';
189
- await tolgee.translate(dummyKey, dummyParams);
190
- expect(mockedLoadTranslations).toBeCalled();
191
- });
192
-
193
- test('passes default value to wrap fn', async () => {
194
- propertiesMock.mock.instances[0].mode = 'development';
195
- await tolgee.translate(dummyKey, dummyParams, false, 'Default');
196
- expect(mockedWrap).toBeCalledWith(
197
- 'dummyText',
198
- {},
199
- 'Default',
200
- 'translatedDummyText'
201
- );
202
- });
203
-
204
- test('passes default value to translate fn', async () => {
205
- propertiesMock.mock.instances[0].mode = 'development';
206
- await tolgee.translate(dummyKey, dummyParams, true, 'Default');
207
- expect(mockedTranslate).toBeCalledWith(
208
- 'dummyText',
209
- {},
210
- undefined,
211
- undefined,
212
- 'Default'
213
- );
214
- });
215
-
216
- test('props object works correctly', async () => {
217
- propertiesMock.mock.instances[0].mode = 'development';
218
- await tolgee.translate({
219
- key: dummyKey,
220
- params: dummyParams,
221
- noWrap: true,
222
- defaultValue: 'Default',
223
- });
224
- expect(mockedTranslate).toBeCalledWith(
225
- dummyKey,
226
- dummyParams,
227
- undefined,
228
- undefined,
229
- 'Default'
230
- );
231
- });
232
-
233
- test('passes orEmpty correctly', async () => {
234
- propertiesMock.mock.instances[0].mode = 'development';
235
- await tolgee.translate({
236
- key: dummyKey,
237
- params: dummyParams,
238
- noWrap: true,
239
- orEmpty: true,
240
- });
241
- expect(mockedTranslate).toBeCalledWith(
242
- dummyKey,
243
- dummyParams,
244
- undefined,
245
- true,
246
- undefined
247
- );
248
- });
249
- });
250
-
251
- describe('sync instant', () => {
252
- test('will return wrapped string from text service in development mode', async () => {
253
- propertiesMock.mock.instances[0].mode = 'development';
254
- const dummyParams = {};
255
- const translated = tolgee.instant(dummyKey, dummyParams);
256
-
257
- expect(mockedWrap).toBeCalledWith(
258
- dummyKey,
259
- dummyParams,
260
- undefined,
261
- 'translatedDummyText'
262
- );
263
- expect(translated).toEqual(wrappedDummyText);
264
- });
265
-
266
- test('will return translated string from text service in production mode', async () => {
267
- propertiesMock.mock.instances[0].mode = 'production';
268
- const translated = tolgee.instant(dummyKey, dummyParams);
269
-
270
- expect(translated).toEqual(translatedDummyText);
271
- expect(mockedWrap).not.toBeCalled();
272
- expect(mockedInstant).toBeCalledWith(
273
- dummyKey,
274
- dummyParams,
275
- undefined,
276
- undefined,
277
- undefined
278
- );
279
- });
280
-
281
- test('will pass noEmpty parameter', () => {
282
- tolgee.instant(dummyKey, dummyParams, undefined, true);
283
- expect(mockedInstant).toBeCalledWith(
284
- dummyKey,
285
- dummyParams,
286
- undefined,
287
- true,
288
- undefined
289
- );
290
- });
291
-
292
- test('will not wrap when development is on, but noWrap is true', async () => {
293
- propertiesMock.mock.instances[0].mode = 'development';
294
- const translated = tolgee.instant(dummyKey, dummyParams, true);
295
-
296
- expect(mockedWrap).not.toBeCalled();
297
- expect(translated).toEqual(translatedDummyText);
298
- });
299
-
300
- test('will call instant with orEmpty true', async () => {
301
- tolgee.instant(dummyKey, dummyParams, true, true);
302
- expect(getMockedInstance(TextService).instant).toBeCalledWith(
303
- dummyKey,
304
- dummyParams,
305
- undefined,
306
- true,
307
- undefined
308
- );
309
- });
310
-
311
- test('passes default value to wrap fn', async () => {
312
- propertiesMock.mock.instances[0].mode = 'development';
313
- const dummyParams = {};
314
- tolgee.instant(dummyKey, dummyParams, false, false, 'Default');
315
-
316
- expect(mockedWrap).toBeCalledWith(
317
- dummyKey,
318
- dummyParams,
319
- 'Default',
320
- 'translatedDummyText'
321
- );
322
- });
323
-
324
- test('props object works correctly', async () => {
325
- propertiesMock.mock.instances[0].mode = 'development';
326
- await tolgee.instant({
327
- key: dummyKey,
328
- params: dummyParams,
329
- orEmpty: false,
330
- noWrap: true,
331
- defaultValue: 'Default',
332
- });
333
- expect(mockedInstant).toBeCalledWith(
334
- dummyKey,
335
- dummyParams,
336
- undefined,
337
- false,
338
- 'Default'
339
- );
340
- });
341
- });
342
-
343
- test('passes default value to instant fn', async () => {
344
- propertiesMock.mock.instances[0].mode = 'development';
345
- const dummyParams = {};
346
- tolgee.instant(dummyKey, dummyParams, true, false, 'Default');
347
-
348
- expect(mockedInstant).toBeCalledWith(
349
- dummyKey,
350
- dummyParams,
351
- undefined,
352
- false,
353
- 'Default'
354
- );
355
- });
356
- });
357
-
358
- test('will stop on stop function', () => {
359
- getMockedInstance(Properties).config.targetElement = document.body;
360
- NodeHelper.markElementAsTargetElement(document.body);
361
- tolgee.run();
362
- tolgee.stop();
363
- expect(getMockedInstance(ElementRegistrar).cleanAll).toBeCalledTimes(1);
364
- expect(observerMock.mock.instances[0].stopObserving).toBeCalledTimes(1);
365
- expect(document.body).not.toHaveAttribute(TOLGEE_TARGET_ATTRIBUTE);
366
- });
367
-
368
- test('will return proper onLangChange emitter', () => {
369
- const eventEmitter = new EventEmitterImpl();
370
- (eventServiceMock.mock.instances[0] as any).LANGUAGE_CHANGED = eventEmitter;
371
- expect(tolgee.onLangChange).toEqual(eventEmitter);
372
- });
373
-
374
- test('will return proper initialLoading', () => {
375
- tolgee.properties.mode = 'production';
376
- tolgee.properties.config.preloadFallback = true;
377
- tolgee.properties.currentLanguage = 'cs';
378
- tolgee.properties.config.staticData = {
379
- cs: {},
380
- };
381
- expect(tolgee.initialLoading).toEqual(true);
382
- tolgee.properties.config.fallbackLanguage = 'en';
383
- tolgee.properties.config.preloadFallback = false;
384
- expect(tolgee.initialLoading).toEqual(false);
385
- tolgee.properties.config.preloadFallback = true;
386
- tolgee.properties.config.staticData.en = {};
387
- expect(tolgee.initialLoading).toEqual(false);
388
- tolgee.properties.mode = 'development';
389
- expect(tolgee.initialLoading).toEqual(false);
390
- });
391
-
392
- describe('lang setter', () => {
393
- const dummyLang = 'dummyLang';
394
- let loadTranslationsResolve: (value: Translations) => void;
395
- let languageChangedEmitter;
396
-
397
- beforeEach(() => {
398
- languageChangedEmitter = (
399
- eventServiceMock.mock.instances[0] as any
400
- ).LANGUAGE_CHANGED = {
401
- emit: jest.fn(),
402
- };
403
-
404
- translationServiceMock.mock.instances[0].loadTranslations = jest.fn(
405
- async () =>
406
- new Promise((resolve) => {
407
- loadTranslationsResolve = resolve;
408
- })
409
- );
410
- tolgee.lang = dummyLang;
411
- });
412
-
413
- test('will change the language', () => {
414
- expect(propertiesMock.mock.instances[0].currentLanguage).toEqual(
415
- dummyLang
416
- );
417
- });
418
-
419
- test('emits the changed event', async () => {
420
- expect(languageChangedEmitter.emit).toBeCalledTimes(0);
421
- loadTranslationsResolve({});
422
- await waitFor(() => {
423
- expect(languageChangedEmitter.emit).toBeCalledTimes(1);
424
- expect(languageChangedEmitter.emit).toBeCalledWith(dummyLang);
425
- });
426
- });
427
- });
428
-
429
- describe('changeLanguage method', () => {
430
- const dummyLang = 'dummyLang';
431
- let loadTranslationsResolve: (value: Translations) => void;
432
- let languageChanged;
433
- let changeLanguagePromise: Promise<void>;
434
-
435
- beforeEach(() => {
436
- languageChanged = (
437
- eventServiceMock.mock.instances[0] as any
438
- ).LANGUAGE_CHANGED = {
439
- emit: jest.fn(),
440
- };
441
-
442
- translationServiceMock.mock.instances[0].loadTranslations = jest.fn(
443
- async () =>
444
- new Promise((resolve) => {
445
- loadTranslationsResolve = resolve;
446
- })
447
- );
448
- changeLanguagePromise = tolgee.changeLanguage(dummyLang);
449
- });
450
-
451
- test('will change the language', (done) => {
452
- expect(propertiesMock.mock.instances[0].currentLanguage).not.toEqual(
453
- dummyLang
454
- );
455
- changeLanguagePromise.then(() => {
456
- expect(propertiesMock.mock.instances[0].currentLanguage).toEqual(
457
- dummyLang
458
- );
459
- done();
460
- });
461
- loadTranslationsResolve({});
462
- });
463
-
464
- test('emits the change and loaded event', (done) => {
465
- expect(languageChanged.emit).toBeCalledTimes(0);
466
- changeLanguagePromise.then(() => {
467
- expect(languageChanged.emit).toBeCalledTimes(1);
468
- done();
469
- });
470
- loadTranslationsResolve({});
471
- });
472
- });
473
- });
@@ -1,21 +0,0 @@
1
- jest.dontMock('./TolgeeConfig');
2
-
3
- import { TolgeeConfig } from './TolgeeConfig';
4
-
5
- describe('TolgeeConfig', () => {
6
- test('will be created with default targetElement', () => {
7
- const tolgeeConfig = new TolgeeConfig();
8
- expect(tolgeeConfig.targetElement).toEqual(document.body);
9
- });
10
-
11
- test('will be created with provided targetElement', () => {
12
- const div = document.createElement('div');
13
- const tolgeeConfig = new TolgeeConfig({ targetElement: div });
14
- expect(tolgeeConfig.targetElement).toEqual(div);
15
- });
16
-
17
- test('will be created with default when empty object', () => {
18
- const tolgeeConfig = new TolgeeConfig({});
19
- expect(tolgeeConfig.targetElement).toEqual(document.body);
20
- });
21
- });
@@ -1,134 +0,0 @@
1
- import { TreeTranslationsData } from './types';
2
- import { NodeHelper } from './helpers/NodeHelper';
3
- import { ModifierKey } from './Constants/ModifierKey';
4
- import { Mode } from 'fs';
5
-
6
- const API_KEY_LOCAL_STORAGE = '__tolgee_apiKey';
7
- const API_URL_LOCAL_STORAGE = '__tolgee_apiUrl';
8
-
9
- const DEFAULT_TARGET_ELEMENT_SUPPLIER = () => {
10
- if (typeof document !== 'undefined') {
11
- return document.body;
12
- }
13
- };
14
-
15
- type UiConstructor = new (...args) => any;
16
-
17
- interface UiLibInterface {
18
- UI: UiConstructor;
19
- }
20
-
21
- type UiType =
22
- | UiConstructor
23
- | UiLibInterface
24
- | Promise<UiConstructor>
25
- | Promise<UiLibInterface>;
26
-
27
- export class TolgeeConfig {
28
- /**
29
- * @deprecated This option won't have any effect,
30
- * because mode is now automatically detected when apiKey + apiUrl are set
31
- */
32
- mode?: Mode;
33
- apiUrl?: string;
34
- apiKey?: string;
35
- inputPrefix?: string = '%-%tolgee:';
36
- inputSuffix?: string = '%-%';
37
- /**
38
- * Overrides all language settings
39
- */
40
- forceLanguage?: string;
41
- /**
42
- * Used when auto detection is not available or is turned off
43
- */
44
- defaultLanguage?: string = 'en';
45
- /**
46
- * Languages which can be used for language detection
47
- * and also limits which values can be stored
48
- */
49
- availableLanguages?: string[];
50
- /**
51
- * Language which is used when no translation is available for current one
52
- */
53
- fallbackLanguage?: string;
54
- /**
55
- * Store user language in localStorage (default: true)
56
- */
57
- enableLanguageStore?: boolean = true;
58
- /**
59
- * Use auto language detection by browser locale (default: true)
60
- */
61
- enableLanguageDetection?: boolean = true;
62
- filesUrlPrefix?: string = 'i18n/';
63
- watch?: boolean;
64
- ui?: UiType;
65
- targetElement?: Element;
66
- tagAttributes?: { [key: string]: string[] } = {
67
- textarea: ['placeholder'],
68
- input: ['value', 'placeholder'],
69
- img: ['alt'],
70
- '*': ['aria-label', 'title'],
71
- };
72
- highlightKeys?: ModifierKey[] = [ModifierKey.Alt];
73
- passToParent?:
74
- | (keyof HTMLElementTagNameMap)[]
75
- | ((node: Element) => boolean) = ['option', 'optgroup'];
76
- restrictedElements?: string[] = ['script', 'style'];
77
- highlightColor?: string = 'rgb(255, 0, 0)';
78
- highlightWidth?: number = 5;
79
- /** localization data to use in production mode */
80
- staticData?: {
81
- [key: string]: TreeTranslationsData | (() => Promise<TreeTranslationsData>);
82
- };
83
- wrapperMode?: 'text' | 'invisible' = 'text';
84
-
85
- /**
86
- * When true, fallback language will be preloaded on Tolgee.run
87
- */
88
- preloadFallback?: boolean = false;
89
- private _targetElement?: Element;
90
-
91
- constructor(config?: TolgeeConfig) {
92
- //workaround for: https://stackoverflow.com/questions/48725916/typescript-optional-property-with-a-getter
93
- Object.defineProperty(this, 'targetElement', {
94
- set(targetElement: Element) {
95
- if (this.targetElement !== undefined) {
96
- throw new Error('Target element is already defined!');
97
- }
98
- if (targetElement === undefined) {
99
- this._targetElement = DEFAULT_TARGET_ELEMENT_SUPPLIER();
100
- }
101
- if (NodeHelper.isElementTargetElement(targetElement)) {
102
- // eslint-disable-next-line no-console
103
- console.error('Target element: ', this._targetElement);
104
- throw new Error(
105
- 'An tolgee instance is inited with provided target element'
106
- );
107
- }
108
- this._targetElement = targetElement;
109
- NodeHelper.markElementAsTargetElement(this._targetElement);
110
- },
111
- get() {
112
- return this._targetElement;
113
- },
114
- });
115
-
116
- Object.assign(this, config || {});
117
- if (typeof sessionStorage !== 'undefined') {
118
- this.apiUrl =
119
- sessionStorage.getItem(API_URL_LOCAL_STORAGE) || this.apiUrl;
120
- this.apiKey =
121
- sessionStorage.getItem(API_KEY_LOCAL_STORAGE) || this.apiKey;
122
- }
123
- if (this._targetElement === undefined) {
124
- this._targetElement = DEFAULT_TARGET_ELEMENT_SUPPLIER();
125
- }
126
- this.fallbackLanguage = this.fallbackLanguage || this.defaultLanguage;
127
- if (this.watch === undefined) {
128
- this.watch = Boolean(this.apiKey && this.apiUrl);
129
- }
130
- if (this.availableLanguages === undefined && this.staticData) {
131
- this.availableLanguages = Object.keys(this.staticData);
132
- }
133
- }
134
- }
@@ -1,80 +0,0 @@
1
- jest.autoMockOff();
2
-
3
- import '@testing-library/jest-dom/extend-expect';
4
- import { IcuFormatter, Tolgee } from '../index';
5
- import mockTranslations from './mockTranslations';
6
- import fetchMock from 'jest-fetch-mock';
7
- import { testConfig } from './testConfig';
8
-
9
- const API_URL = 'http://localhost';
10
- const API_KEY = 'dummyApiKey';
11
-
12
- const fetch = fetchMock.mockResponse(async (req) => {
13
- if (req.url.includes('/v2/api-keys/current')) {
14
- return JSON.stringify(testConfig);
15
- } else if (req.url.includes('/v2/projects/translations/en')) {
16
- return JSON.stringify(mockTranslations);
17
- }
18
- throw new Error('Invalid request');
19
- });
20
-
21
- describe('Tolgee with icu formatter', () => {
22
- let tolgee: Tolgee;
23
- beforeEach(async () => {
24
- fetch.enableMocks();
25
- tolgee = Tolgee.use(IcuFormatter).init({
26
- targetElement: document.body,
27
- apiKey: API_KEY,
28
- apiUrl: API_URL,
29
- inputPrefix: '{{',
30
- inputSuffix: '}}',
31
- watch: false,
32
- });
33
- document.body.innerHTML = '';
34
- await tolgee.run();
35
- });
36
-
37
- afterEach(() => {
38
- tolgee.stop();
39
- });
40
-
41
- it('Formats variable', async () => {
42
- const translation = await tolgee.translate(
43
- 'peter_dogs',
44
- { dogsCount: '10' },
45
- true
46
- );
47
- expect(translation).toEqual('Peter has 10 dogs.');
48
-
49
- const instantTranslation = tolgee.instant(
50
- 'peter_dogs',
51
- { dogsCount: '10' },
52
- true
53
- );
54
- expect(instantTranslation).toEqual('Peter has 10 dogs.');
55
- });
56
-
57
- it('Wont format key', async () => {
58
- const translation = await tolgee.translate(
59
- 'weird {key}',
60
- { key: '10' },
61
- true
62
- );
63
- expect(translation).toEqual('weird {key}');
64
-
65
- const instantTranslation = tolgee.instant(
66
- 'weird {key}',
67
- { key: '10' },
68
- true
69
- );
70
- expect(instantTranslation).toEqual('weird {key}');
71
- });
72
-
73
- it('Returns key if missing', async () => {
74
- const translation = await tolgee.translate('nonexistant', undefined, true);
75
- expect(translation).toEqual('nonexistant');
76
-
77
- const instantTranslation = tolgee.instant('nonexistant', undefined, true);
78
- expect(instantTranslation).toEqual('nonexistant');
79
- });
80
- });