@tolgee/core 4.9.2 → 4.9.3-rc.730f576.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 (276) hide show
  1. package/dist/tolgee.cjs.js +1127 -7028
  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 +1125 -7023
  8. package/dist/tolgee.esm.mjs.map +1 -1
  9. package/dist/tolgee.umd.js +1127 -7028
  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/Tolgee.d.ts +2 -68
  26. package/lib/TranslateParams.d.ts +2 -0
  27. package/lib/{Constants/Global.d.ts → constants.d.ts} +1 -2
  28. package/lib/helpers.d.ts +3 -0
  29. package/lib/index.d.ts +3 -8
  30. package/lib/types.d.ts +244 -84
  31. package/package.json +20 -29
  32. package/src/Controller/Cache/Cache.ts +293 -0
  33. package/src/Controller/Cache/helpers.ts +37 -0
  34. package/src/Controller/Controller.ts +310 -0
  35. package/src/Controller/Events/EventEmitter.ts +30 -0
  36. package/src/Controller/Events/EventEmitterSelective.test.ts +125 -0
  37. package/src/Controller/Events/EventEmitterSelective.ts +188 -0
  38. package/src/Controller/Events/Events.ts +66 -0
  39. package/src/Controller/Plugins/Plugins.ts +315 -0
  40. package/src/Controller/State/State.ts +175 -0
  41. package/src/Controller/State/helpers.ts +41 -0
  42. package/src/Controller/State/initObserverOptions.ts +38 -0
  43. package/src/Controller/State/initState.ts +81 -0
  44. package/src/Controller/ValueObserver.ts +26 -0
  45. package/src/Tolgee.ts +79 -330
  46. package/src/TranslateParams.test.ts +41 -0
  47. package/src/TranslateParams.ts +51 -0
  48. package/src/__test/backend.test.ts +48 -0
  49. package/src/__test/cache.test.ts +148 -0
  50. package/src/__test/client.test.ts +48 -0
  51. package/src/__test/events.test.ts +33 -0
  52. package/src/__test/initialization.test.ts +85 -0
  53. package/src/__test/jest-setup.ts +2 -0
  54. package/src/__test/languageDetection.test.ts +129 -0
  55. package/src/__test/languageStorage.test.ts +145 -0
  56. package/src/__test/languages.test.ts +112 -0
  57. package/src/__test/loading.test.ts +39 -0
  58. package/src/__test/namespaces.test.ts +99 -0
  59. package/src/__test/namespacesFallback.test.ts +74 -0
  60. package/src/__test/plugins.test.ts +136 -0
  61. package/src/__test/testTools.ts +7 -0
  62. package/src/{Constants/Global.ts → constants.ts} +1 -3
  63. package/src/helpers.ts +17 -0
  64. package/src/index.ts +9 -8
  65. package/src/types.ts +338 -90
  66. package/README.md +0 -45
  67. package/dist/Constants/Global.d.ts +0 -6
  68. package/dist/Constants/ModifierKey.d.ts +0 -6
  69. package/dist/Errors/ApiHttpError.d.ts +0 -5
  70. package/dist/Observer.d.ts +0 -14
  71. package/dist/Observer.test.d.ts +0 -2
  72. package/dist/Properties.d.ts +0 -17
  73. package/dist/Properties.test.d.ts +0 -1
  74. package/dist/Tolgee.d.ts +0 -68
  75. package/dist/Tolgee.test.d.ts +0 -1
  76. package/dist/TolgeeConfig.d.ts +0 -69
  77. package/dist/TolgeeConfig.test.d.ts +0 -1
  78. package/dist/__integration/FormatterIcu.test.d.ts +0 -1
  79. package/dist/__integration/FormatterMissing.d.ts +0 -1
  80. package/dist/__integration/Tolgee.test.d.ts +0 -1
  81. package/dist/__integration/TolgeeInvisible.test.d.ts +0 -1
  82. package/dist/__integration/mockTranslations.d.ts +0 -7
  83. package/dist/__integration/testConfig.d.ts +0 -9
  84. package/dist/__testFixtures/classMock.d.ts +0 -3
  85. package/dist/__testFixtures/createElement.d.ts +0 -2
  86. package/dist/__testFixtures/createTestDom.d.ts +0 -9
  87. package/dist/__testFixtures/mocked.d.ts +0 -20
  88. package/dist/__testFixtures/setupAfterEnv.d.ts +0 -8
  89. package/dist/helpers/NodeHelper.d.ts +0 -14
  90. package/dist/helpers/TextHelper.d.ts +0 -5
  91. package/dist/helpers/TextHelper.test.d.ts +0 -1
  92. package/dist/helpers/commonTypes.d.ts +0 -2
  93. package/dist/helpers/encoderPolyfill.d.ts +0 -8
  94. package/dist/helpers/secret.d.ts +0 -6
  95. package/dist/helpers/secret.test.d.ts +0 -1
  96. package/dist/helpers/sleep.d.ts +0 -1
  97. package/dist/highlighter/HighlightFunctionsInitializer.d.ts +0 -10
  98. package/dist/highlighter/HighlightFunctionsInitializer.test.d.ts +0 -1
  99. package/dist/highlighter/MouseEventHandler.d.ts +0 -29
  100. package/dist/highlighter/MouseEventHandler.test.d.ts +0 -1
  101. package/dist/highlighter/TranslationHighlighter.d.ts +0 -14
  102. package/dist/highlighter/TranslationHighlighter.test.d.ts +0 -1
  103. package/dist/index.d.ts +0 -10
  104. package/dist/internal.d.ts +0 -2
  105. package/dist/modules/IcuFormatter.d.ts +0 -2
  106. package/dist/modules/IcuFormatter.test.d.ts +0 -1
  107. package/dist/modules/index.d.ts +0 -1
  108. package/dist/services/ApiHttpService.d.ts +0 -15
  109. package/dist/services/CoreService.d.ts +0 -18
  110. package/dist/services/CoreService.test.d.ts +0 -1
  111. package/dist/services/DependencyService.d.ts +0 -39
  112. package/dist/services/DependencyService.test.d.ts +0 -1
  113. package/dist/services/ElementRegistrar.d.ts +0 -19
  114. package/dist/services/ElementRegistrar.test.d.ts +0 -1
  115. package/dist/services/EventEmitter.d.ts +0 -13
  116. package/dist/services/EventService.d.ts +0 -9
  117. package/dist/services/ModuleService.d.ts +0 -5
  118. package/dist/services/ScreenshotService.d.ts +0 -15
  119. package/dist/services/Subscription.d.ts +0 -5
  120. package/dist/services/TextService.d.ts +0 -14
  121. package/dist/services/TextService.test.d.ts +0 -1
  122. package/dist/services/TranslationService.d.ts +0 -75
  123. package/dist/services/TranslationService.test.d.ts +0 -1
  124. package/dist/services/__mocks__/CoreService.d.ts +0 -2
  125. package/dist/toolsManager/Messages.d.ts +0 -8
  126. package/dist/toolsManager/Messages.test.d.ts +0 -1
  127. package/dist/toolsManager/PluginManager.d.ts +0 -21
  128. package/dist/toolsManager/PluginManager.test.d.ts +0 -1
  129. package/dist/types/DTOs.d.ts +0 -20
  130. package/dist/types/apiSchema.generated.d.ts +0 -6185
  131. package/dist/types.d.ts +0 -123
  132. package/dist/wrappers/AbstractWrapper.d.ts +0 -8
  133. package/dist/wrappers/NodeHandler.d.ts +0 -18
  134. package/dist/wrappers/WrappedHandler.d.ts +0 -8
  135. package/dist/wrappers/invisible/AttributeHandler.d.ts +0 -8
  136. package/dist/wrappers/invisible/Coder.d.ts +0 -7
  137. package/dist/wrappers/invisible/ContentHandler.d.ts +0 -6
  138. package/dist/wrappers/invisible/CoreHandler.d.ts +0 -10
  139. package/dist/wrappers/invisible/InvisibleWrapper.d.ts +0 -18
  140. package/dist/wrappers/invisible/ValueMemory.d.ts +0 -5
  141. package/dist/wrappers/invisible/ValueMemory.test.d.ts +0 -1
  142. package/dist/wrappers/text/AttributeHandler.d.ts +0 -8
  143. package/dist/wrappers/text/AttributeHandler.test.d.ts +0 -1
  144. package/dist/wrappers/text/Coder.d.ts +0 -15
  145. package/dist/wrappers/text/Coder.test.d.ts +0 -1
  146. package/dist/wrappers/text/ContentHandler.d.ts +0 -8
  147. package/dist/wrappers/text/ContentHandler.test.d.ts +0 -1
  148. package/dist/wrappers/text/CoreHandler.d.ts +0 -17
  149. package/dist/wrappers/text/CoreHandler.test.d.ts +0 -1
  150. package/dist/wrappers/text/TextWrapper.d.ts +0 -20
  151. package/index.js +0 -7
  152. package/lib/Constants/ModifierKey.d.ts +0 -6
  153. package/lib/Errors/ApiHttpError.d.ts +0 -5
  154. package/lib/Observer.d.ts +0 -14
  155. package/lib/Properties.d.ts +0 -17
  156. package/lib/TolgeeConfig.d.ts +0 -69
  157. package/lib/helpers/NodeHelper.d.ts +0 -14
  158. package/lib/helpers/TextHelper.d.ts +0 -5
  159. package/lib/helpers/commonTypes.d.ts +0 -2
  160. package/lib/helpers/encoderPolyfill.d.ts +0 -8
  161. package/lib/helpers/secret.d.ts +0 -6
  162. package/lib/helpers/sleep.d.ts +0 -1
  163. package/lib/highlighter/HighlightFunctionsInitializer.d.ts +0 -10
  164. package/lib/highlighter/MouseEventHandler.d.ts +0 -29
  165. package/lib/highlighter/TranslationHighlighter.d.ts +0 -14
  166. package/lib/modules/IcuFormatter.d.ts +0 -2
  167. package/lib/modules/index.d.ts +0 -1
  168. package/lib/services/ApiHttpService.d.ts +0 -15
  169. package/lib/services/CoreService.d.ts +0 -18
  170. package/lib/services/DependencyService.d.ts +0 -39
  171. package/lib/services/ElementRegistrar.d.ts +0 -19
  172. package/lib/services/EventEmitter.d.ts +0 -13
  173. package/lib/services/EventService.d.ts +0 -9
  174. package/lib/services/ModuleService.d.ts +0 -5
  175. package/lib/services/ScreenshotService.d.ts +0 -15
  176. package/lib/services/Subscription.d.ts +0 -5
  177. package/lib/services/TextService.d.ts +0 -14
  178. package/lib/services/TranslationService.d.ts +0 -75
  179. package/lib/toolsManager/Messages.d.ts +0 -8
  180. package/lib/toolsManager/PluginManager.d.ts +0 -21
  181. package/lib/types/DTOs.d.ts +0 -20
  182. package/lib/types/apiSchema.generated.d.ts +0 -6185
  183. package/lib/wrappers/AbstractWrapper.d.ts +0 -8
  184. package/lib/wrappers/NodeHandler.d.ts +0 -18
  185. package/lib/wrappers/WrappedHandler.d.ts +0 -8
  186. package/lib/wrappers/invisible/AttributeHandler.d.ts +0 -8
  187. package/lib/wrappers/invisible/Coder.d.ts +0 -7
  188. package/lib/wrappers/invisible/ContentHandler.d.ts +0 -6
  189. package/lib/wrappers/invisible/CoreHandler.d.ts +0 -10
  190. package/lib/wrappers/invisible/InvisibleWrapper.d.ts +0 -18
  191. package/lib/wrappers/invisible/ValueMemory.d.ts +0 -5
  192. package/lib/wrappers/text/AttributeHandler.d.ts +0 -8
  193. package/lib/wrappers/text/Coder.d.ts +0 -15
  194. package/lib/wrappers/text/ContentHandler.d.ts +0 -8
  195. package/lib/wrappers/text/CoreHandler.d.ts +0 -17
  196. package/lib/wrappers/text/TextWrapper.d.ts +0 -20
  197. package/src/Constants/ModifierKey.ts +0 -6
  198. package/src/Errors/ApiHttpError.ts +0 -8
  199. package/src/Observer.test.ts +0 -119
  200. package/src/Observer.ts +0 -68
  201. package/src/Properties.test.ts +0 -150
  202. package/src/Properties.ts +0 -112
  203. package/src/Tolgee.test.ts +0 -473
  204. package/src/TolgeeConfig.test.ts +0 -21
  205. package/src/TolgeeConfig.ts +0 -134
  206. package/src/__integration/FormatterIcu.test.ts +0 -80
  207. package/src/__integration/FormatterMissing.ts +0 -54
  208. package/src/__integration/Tolgee.test.ts +0 -90
  209. package/src/__integration/TolgeeInvisible.test.ts +0 -145
  210. package/src/__integration/mockTranslations.ts +0 -6
  211. package/src/__integration/testConfig.ts +0 -16
  212. package/src/__testFixtures/classMock.ts +0 -11
  213. package/src/__testFixtures/createElement.ts +0 -43
  214. package/src/__testFixtures/createTestDom.ts +0 -26
  215. package/src/__testFixtures/mocked.ts +0 -25
  216. package/src/__testFixtures/setupAfterEnv.ts +0 -34
  217. package/src/helpers/NodeHelper.ts +0 -90
  218. package/src/helpers/TextHelper.test.ts +0 -62
  219. package/src/helpers/TextHelper.ts +0 -58
  220. package/src/helpers/commonTypes.ts +0 -8
  221. package/src/helpers/encoderPolyfill.ts +0 -96
  222. package/src/helpers/secret.test.ts +0 -61
  223. package/src/helpers/secret.ts +0 -68
  224. package/src/helpers/sleep.ts +0 -2
  225. package/src/highlighter/HighlightFunctionsInitializer.test.ts +0 -40
  226. package/src/highlighter/HighlightFunctionsInitializer.ts +0 -61
  227. package/src/highlighter/MouseEventHandler.test.ts +0 -151
  228. package/src/highlighter/MouseEventHandler.ts +0 -191
  229. package/src/highlighter/TranslationHighlighter.test.ts +0 -177
  230. package/src/highlighter/TranslationHighlighter.ts +0 -113
  231. package/src/internal.ts +0 -2
  232. package/src/modules/IcuFormatter.test.ts +0 -21
  233. package/src/modules/IcuFormatter.ts +0 -39
  234. package/src/modules/index.ts +0 -1
  235. package/src/services/ApiHttpService.ts +0 -85
  236. package/src/services/CoreService.test.ts +0 -141
  237. package/src/services/CoreService.ts +0 -76
  238. package/src/services/DependencyService.test.ts +0 -51
  239. package/src/services/DependencyService.ts +0 -116
  240. package/src/services/ElementRegistrar.test.ts +0 -131
  241. package/src/services/ElementRegistrar.ts +0 -108
  242. package/src/services/EventEmitter.ts +0 -52
  243. package/src/services/EventService.ts +0 -14
  244. package/src/services/ModuleService.ts +0 -14
  245. package/src/services/ScreenshotService.ts +0 -31
  246. package/src/services/Subscription.ts +0 -7
  247. package/src/services/TextService.test.ts +0 -88
  248. package/src/services/TextService.ts +0 -82
  249. package/src/services/TranslationService.test.ts +0 -358
  250. package/src/services/TranslationService.ts +0 -417
  251. package/src/services/__mocks__/CoreService.ts +0 -17
  252. package/src/toolsManager/Messages.test.ts +0 -79
  253. package/src/toolsManager/Messages.ts +0 -60
  254. package/src/toolsManager/PluginManager.test.ts +0 -108
  255. package/src/toolsManager/PluginManager.ts +0 -129
  256. package/src/types/DTOs.ts +0 -25
  257. package/src/types/apiSchema.generated.ts +0 -6208
  258. package/src/wrappers/AbstractWrapper.ts +0 -14
  259. package/src/wrappers/NodeHandler.ts +0 -143
  260. package/src/wrappers/WrappedHandler.ts +0 -28
  261. package/src/wrappers/invisible/AttributeHandler.ts +0 -23
  262. package/src/wrappers/invisible/Coder.ts +0 -65
  263. package/src/wrappers/invisible/ContentHandler.ts +0 -15
  264. package/src/wrappers/invisible/CoreHandler.ts +0 -17
  265. package/src/wrappers/invisible/InvisibleWrapper.ts +0 -59
  266. package/src/wrappers/invisible/ValueMemory.test.ts +0 -25
  267. package/src/wrappers/invisible/ValueMemory.ts +0 -16
  268. package/src/wrappers/text/AttributeHandler.test.ts +0 -118
  269. package/src/wrappers/text/AttributeHandler.ts +0 -25
  270. package/src/wrappers/text/Coder.test.ts +0 -298
  271. package/src/wrappers/text/Coder.ts +0 -202
  272. package/src/wrappers/text/ContentHandler.test.ts +0 -185
  273. package/src/wrappers/text/ContentHandler.ts +0 -21
  274. package/src/wrappers/text/CoreHandler.test.ts +0 -106
  275. package/src/wrappers/text/CoreHandler.ts +0 -45
  276. package/src/wrappers/text/TextWrapper.ts +0 -69
@@ -0,0 +1,175 @@
1
+ import {
2
+ CacheDescriptor,
3
+ CacheDescriptorInternal,
4
+ DevCredentials,
5
+ EventEmitterInstance,
6
+ FallbackNSTranslation,
7
+ } from '../../types';
8
+ import { decodeCacheKey } from '../Cache/helpers';
9
+ import { getFallbackArray, getFallbackFromStruct, unique } from './helpers';
10
+ import { initObserverOptions, ObserverOptions } from './initObserverOptions';
11
+ import { initState, Options } from './initState';
12
+
13
+ export const State = (
14
+ onLanguageChange: EventEmitterInstance<string>,
15
+ onPendingLanguageChange: EventEmitterInstance<string>,
16
+ onRunningChange: EventEmitterInstance<boolean>
17
+ ) => {
18
+ let state = initState();
19
+ let observerOptions = initObserverOptions();
20
+ let devCredentials: DevCredentials = undefined;
21
+
22
+ function init(options?: Partial<Options>) {
23
+ state = initState(options, state);
24
+ }
25
+
26
+ function isRunning() {
27
+ return state.isRunning;
28
+ }
29
+
30
+ function setRunning(value: boolean) {
31
+ if (state.isRunning !== value) {
32
+ state.isRunning = value;
33
+ onRunningChange.emit(value);
34
+ }
35
+ }
36
+
37
+ function isInitialLoading() {
38
+ return state.isInitialLoading;
39
+ }
40
+
41
+ function setInitialLoading(value: boolean) {
42
+ state.isInitialLoading = value;
43
+ }
44
+
45
+ function getLanguage() {
46
+ return state.language || state.initialOptions.language;
47
+ }
48
+
49
+ function setLanguage(language: string) {
50
+ if (state.language !== language) {
51
+ state.language = language;
52
+ onLanguageChange.emit(language);
53
+ }
54
+ }
55
+
56
+ function getPendingLanguage() {
57
+ return state.pendingLanguage || getLanguage();
58
+ }
59
+
60
+ function setPendingLanguage(language: string) {
61
+ if (state.pendingLanguage !== language) {
62
+ state.pendingLanguage = language;
63
+ onPendingLanguageChange.emit(language);
64
+ }
65
+ }
66
+
67
+ function getInitialOptions() {
68
+ return { ...state.initialOptions, ...devCredentials };
69
+ }
70
+
71
+ function addActiveNs(ns: FallbackNSTranslation) {
72
+ const namespaces = getFallbackArray(ns);
73
+ namespaces.forEach((namespace) => {
74
+ const value = state.activeNamespaces.get(namespace);
75
+ if (value !== undefined) {
76
+ state.activeNamespaces.set(namespace, value + 1);
77
+ } else {
78
+ state.activeNamespaces.set(namespace, 1);
79
+ }
80
+ });
81
+ }
82
+
83
+ function removeActiveNs(ns: FallbackNSTranslation) {
84
+ const namespaces = getFallbackArray(ns);
85
+ namespaces.forEach((namespace) => {
86
+ const value = state.activeNamespaces.get(namespace);
87
+ if (value !== undefined && value > 1) {
88
+ state.activeNamespaces.set(namespace, value - 1);
89
+ } else {
90
+ state.activeNamespaces.delete(namespace);
91
+ }
92
+ });
93
+ }
94
+
95
+ function getRequiredNamespaces() {
96
+ return unique([
97
+ ...(state.initialOptions.ns || [state.initialOptions.defaultNs]),
98
+ ...state.activeNamespaces.keys(),
99
+ ]);
100
+ }
101
+
102
+ function getFallbackLangs(lang?: string) {
103
+ const language = lang || getLanguage();
104
+ if (!language) {
105
+ return [];
106
+ }
107
+ return unique([
108
+ language,
109
+ ...getFallbackFromStruct(language, state.initialOptions.fallbackLanguage),
110
+ ]);
111
+ }
112
+
113
+ function getFallbackNamespaces() {
114
+ const defaultNs = state.initialOptions.defaultNs;
115
+ const fallbackNs = state.initialOptions.fallbackNs;
116
+ const fallbackNamespaces = typeof defaultNs === 'string' ? [defaultNs] : [];
117
+ return unique([...fallbackNamespaces, ...getFallbackArray(fallbackNs)]);
118
+ }
119
+
120
+ function getAvailableLanguages() {
121
+ if (state.initialOptions.availableLanguages) {
122
+ return state.initialOptions.availableLanguages;
123
+ } else if (state.initialOptions.staticData) {
124
+ const languagesFromStaticData = Object.keys(
125
+ state.initialOptions.staticData
126
+ ).map((key) => decodeCacheKey(key).language);
127
+ return Array.from(new Set(languagesFromStaticData));
128
+ }
129
+ }
130
+
131
+ function withDefaultNs(descriptor: CacheDescriptor): CacheDescriptorInternal {
132
+ return {
133
+ namespace:
134
+ descriptor.namespace === undefined
135
+ ? getInitialOptions().defaultNs
136
+ : descriptor.namespace,
137
+ language: descriptor.language,
138
+ };
139
+ }
140
+
141
+ function overrideCredentials(credentials: DevCredentials) {
142
+ devCredentials = credentials;
143
+ }
144
+
145
+ function setObserverOptions(options: Partial<ObserverOptions>) {
146
+ observerOptions = initObserverOptions(options);
147
+ }
148
+
149
+ function getObserverOptions() {
150
+ return observerOptions;
151
+ }
152
+
153
+ return Object.freeze({
154
+ init,
155
+ isRunning,
156
+ setRunning,
157
+ isInitialLoading,
158
+ setInitialLoading,
159
+ getLanguage,
160
+ setLanguage,
161
+ getPendingLanguage,
162
+ setPendingLanguage,
163
+ getInitialOptions,
164
+ addActiveNs,
165
+ removeActiveNs,
166
+ getRequiredNamespaces,
167
+ getFallbackLangs,
168
+ getFallbackNamespaces,
169
+ getAvailableLanguages,
170
+ withDefaultNs,
171
+ overrideCredentials,
172
+ setObserverOptions,
173
+ getObserverOptions,
174
+ });
175
+ };
@@ -0,0 +1,41 @@
1
+ import {
2
+ FallbackGeneral,
3
+ FallbackLanguage,
4
+ FallbackLanguageObject,
5
+ FallbackLanguageOption,
6
+ } from '../../types';
7
+
8
+ export function isObject(item: any) {
9
+ return typeof item === 'object' && !Array.isArray(item) && item !== null;
10
+ }
11
+
12
+ export function getFallback(value: FallbackGeneral): string[] | undefined {
13
+ if (typeof value === 'string') {
14
+ return [value];
15
+ }
16
+ if (Array.isArray(value)) {
17
+ return value;
18
+ }
19
+ return undefined;
20
+ }
21
+
22
+ export function getFallbackArray(value: FallbackGeneral): string[] {
23
+ return getFallback(value) || [];
24
+ }
25
+
26
+ export function getFallbackFromStruct(
27
+ language: string,
28
+ fallbackLanguage: FallbackLanguageOption
29
+ ) {
30
+ if (isObject(fallbackLanguage)) {
31
+ return getFallbackArray(
32
+ (fallbackLanguage as FallbackLanguageObject)?.[language]
33
+ );
34
+ } else {
35
+ return getFallbackArray(fallbackLanguage as FallbackLanguage);
36
+ }
37
+ }
38
+
39
+ export function unique<T>(arr: T[]) {
40
+ return Array.from(new Set(arr));
41
+ }
@@ -0,0 +1,38 @@
1
+ export type ObserverOptions = {
2
+ tagAttributes: Record<string, string[]>;
3
+ highlightKeys: ModifierKey[];
4
+ highlightColor: string;
5
+ highlightWidth: number;
6
+ targetElement?: HTMLElement;
7
+ restrictedElements: string[];
8
+ inputPrefix: string;
9
+ inputSuffix: string;
10
+ passToParent: (keyof HTMLElementTagNameMap)[] | ((node: Element) => boolean);
11
+ };
12
+
13
+ export type ModifierKey = 'Alt' | 'Control' | 'Shift' | 'Meta';
14
+
15
+ const defaultValues: ObserverOptions = {
16
+ tagAttributes: {
17
+ textarea: ['placeholder'],
18
+ input: ['value', 'placeholder'],
19
+ img: ['alt'],
20
+ '*': ['aria-label', 'title'],
21
+ },
22
+ restrictedElements: ['script', 'style'],
23
+ highlightKeys: ['Alt'] as ModifierKey[],
24
+ highlightColor: 'rgb(255, 0, 0)',
25
+ highlightWidth: 5,
26
+ inputPrefix: '%-%tolgee:',
27
+ inputSuffix: '%-%',
28
+ passToParent: ['option', 'optgroup'],
29
+ };
30
+
31
+ export const initObserverOptions = (
32
+ options?: Partial<ObserverOptions>
33
+ ): ObserverOptions => {
34
+ return {
35
+ ...defaultValues,
36
+ ...options,
37
+ };
38
+ };
@@ -0,0 +1,81 @@
1
+ import {
2
+ FallbackLanguageOption,
3
+ FallbackNS,
4
+ TreeTranslationsData,
5
+ } from '../../types';
6
+
7
+ export type Options = {
8
+ /**
9
+ * Initial language
10
+ */
11
+ language?: string;
12
+ apiUrl?: string;
13
+ apiKey?: string;
14
+ projectId?: number;
15
+ /**
16
+ * Used when auto detection is not available or is turned off
17
+ */
18
+ defaultLanguage?: string;
19
+ /**
20
+ * Languages which can be used for language detection
21
+ * and also limits which values can be stored
22
+ */
23
+ availableLanguages?: string[];
24
+ /**
25
+ * Language which is used when no translation is available for current one
26
+ */
27
+ fallbackLanguage?: FallbackLanguageOption;
28
+ /**
29
+ * Namespaces which should be always fetched
30
+ */
31
+ ns?: string[];
32
+ /**
33
+ * Namespaces to be used to find translation when no explicit namespace set.
34
+ */
35
+ fallbackNs?: FallbackNS;
36
+ /**
37
+ * Default namespace when no namespace defined (default: '')
38
+ */
39
+ defaultNs: string;
40
+ staticData?: {
41
+ [key: string]: TreeTranslationsData | (() => Promise<TreeTranslationsData>);
42
+ };
43
+ };
44
+
45
+ export type State = {
46
+ initialOptions: Options;
47
+ activeNamespaces: Map<string, number>;
48
+ language: string | undefined;
49
+ pendingLanguage: string | undefined;
50
+ isInitialLoading: boolean;
51
+ isRunning: boolean;
52
+ };
53
+
54
+ const defaultValues: Options = {
55
+ defaultNs: '',
56
+ };
57
+
58
+ export const initState = (
59
+ options?: Partial<Options>,
60
+ previousState?: State
61
+ ): State => {
62
+ const initialOptions = {
63
+ ...defaultValues,
64
+ ...previousState?.initialOptions,
65
+ ...options,
66
+ };
67
+
68
+ // remove extra '/' from url end
69
+ const apiUrl = initialOptions.apiUrl;
70
+ initialOptions.apiUrl = apiUrl ? apiUrl.replace(/\/+$/, '') : apiUrl;
71
+
72
+ return {
73
+ initialOptions,
74
+ activeNamespaces:
75
+ previousState?.activeNamespaces || new Map<string, number>(),
76
+ language: previousState?.language,
77
+ pendingLanguage: previousState?.language,
78
+ isInitialLoading: false,
79
+ isRunning: false,
80
+ };
81
+ };
@@ -0,0 +1,26 @@
1
+ export const ValueObserver = <T = any>(
2
+ initialValue: T,
3
+ valueGetter: () => T,
4
+ handler: (value: T) => void
5
+ ): ValueObserverInstance<T> => {
6
+ let previousValue: T = initialValue;
7
+ function init(value: T) {
8
+ previousValue = value;
9
+ }
10
+ function notify() {
11
+ const value = valueGetter();
12
+ if (previousValue !== value) {
13
+ handler(value);
14
+ }
15
+ previousValue = value;
16
+ }
17
+ return Object.freeze({
18
+ init,
19
+ notify,
20
+ });
21
+ };
22
+
23
+ export type ValueObserverInstance<T> = {
24
+ readonly init: (value: T) => void;
25
+ readonly notify: () => void;
26
+ };