@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,156 @@
1
+ import {
2
+ CacheDescriptor,
3
+ CacheDescriptorInternal,
4
+ EventEmitterType,
5
+ FallbackNSTranslation,
6
+ } from '../../types';
7
+ import { decodeCacheKey } from '../Cache/helpers';
8
+ import { getFallbackArray, getFallbackFromStruct, unique } from './helpers';
9
+ import { initState, Options } from './initState';
10
+
11
+ export const State = (
12
+ onLanguageChange: EventEmitterType<string>,
13
+ onPendingLanguageChange: EventEmitterType<string>,
14
+ onRunningChange: EventEmitterType<boolean>
15
+ ) => {
16
+ let state = initState();
17
+
18
+ function init(options?: Partial<Options>) {
19
+ state = initState(options, state);
20
+ }
21
+
22
+ function isRunning() {
23
+ return state.isRunning;
24
+ }
25
+
26
+ function setRunning(value: boolean) {
27
+ if (state.isRunning !== value) {
28
+ state.isRunning = value;
29
+ onRunningChange.emit(value);
30
+ }
31
+ }
32
+
33
+ function isInitialLoading() {
34
+ return state.isInitialLoading;
35
+ }
36
+
37
+ function setInitialLoading(value: boolean) {
38
+ state.isInitialLoading = value;
39
+ }
40
+
41
+ function getLanguage() {
42
+ return state.language || state.initialOptions.language;
43
+ }
44
+
45
+ function setLanguage(language: string) {
46
+ if (state.language !== language) {
47
+ state.language = language;
48
+ onLanguageChange.emit(language);
49
+ }
50
+ }
51
+
52
+ function getPendingLanguage() {
53
+ return state.pendingLanguage || getLanguage();
54
+ }
55
+
56
+ function setPendingLanguage(language: string) {
57
+ if (state.pendingLanguage !== language) {
58
+ state.pendingLanguage = language;
59
+ onPendingLanguageChange.emit(language);
60
+ }
61
+ }
62
+
63
+ function getInitialOptions() {
64
+ return state.initialOptions;
65
+ }
66
+
67
+ function addActiveNs(ns: FallbackNSTranslation) {
68
+ const namespaces = getFallbackArray(ns);
69
+ namespaces.forEach((namespace) => {
70
+ const value = state.activeNamespaces.get(namespace);
71
+ if (value !== undefined) {
72
+ state.activeNamespaces.set(namespace, value + 1);
73
+ } else {
74
+ state.activeNamespaces.set(namespace, 1);
75
+ }
76
+ });
77
+ }
78
+
79
+ function removeActiveNs(ns: FallbackNSTranslation) {
80
+ const namespaces = getFallbackArray(ns);
81
+ namespaces.forEach((namespace) => {
82
+ const value = state.activeNamespaces.get(namespace);
83
+ if (value !== undefined && value > 1) {
84
+ state.activeNamespaces.set(namespace, value - 1);
85
+ } else {
86
+ state.activeNamespaces.delete(namespace);
87
+ }
88
+ });
89
+ }
90
+
91
+ function getRequiredNamespaces() {
92
+ return unique([
93
+ ...(state.initialOptions.ns || [state.initialOptions.defaultNs]),
94
+ ...state.activeNamespaces.keys(),
95
+ ]);
96
+ }
97
+
98
+ function getFallbackLangs(lang?: string) {
99
+ const language = lang || getLanguage();
100
+ if (!language) {
101
+ return [];
102
+ }
103
+ return unique([
104
+ language,
105
+ ...getFallbackFromStruct(language, state.initialOptions.fallbackLanguage),
106
+ ]);
107
+ }
108
+
109
+ function getFallbackNamespaces() {
110
+ const defaultNs = state.initialOptions.defaultNs;
111
+ const fallbackNs = state.initialOptions.fallbackNs;
112
+ const fallbackNamespaces = typeof defaultNs === 'string' ? [defaultNs] : [];
113
+ return unique([...fallbackNamespaces, ...getFallbackArray(fallbackNs)]);
114
+ }
115
+
116
+ function getAvailableLanguages() {
117
+ if (state.initialOptions.availableLanguages) {
118
+ return state.initialOptions.availableLanguages;
119
+ } else if (state.initialOptions.staticData) {
120
+ const languagesFromStaticData = Object.keys(
121
+ state.initialOptions.staticData
122
+ ).map((key) => decodeCacheKey(key).language);
123
+ return Array.from(new Set(languagesFromStaticData));
124
+ }
125
+ }
126
+
127
+ function withDefaultNs(descriptor: CacheDescriptor): CacheDescriptorInternal {
128
+ return {
129
+ namespace:
130
+ descriptor.namespace === undefined
131
+ ? getInitialOptions().defaultNs
132
+ : descriptor.namespace,
133
+ language: descriptor.language,
134
+ };
135
+ }
136
+
137
+ return Object.freeze({
138
+ init,
139
+ isRunning,
140
+ setRunning,
141
+ isInitialLoading,
142
+ setInitialLoading,
143
+ getLanguage,
144
+ setLanguage,
145
+ getPendingLanguage,
146
+ setPendingLanguage,
147
+ getInitialOptions,
148
+ addActiveNs,
149
+ removeActiveNs,
150
+ getRequiredNamespaces,
151
+ getFallbackLangs,
152
+ getFallbackNamespaces,
153
+ getAvailableLanguages,
154
+ withDefaultNs,
155
+ });
156
+ };
@@ -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,90 @@
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
+ * Store user language in localStorage (default: true)
30
+ */
31
+ enableLanguageStore?: boolean;
32
+ /**
33
+ * Namespaces which should be always fetched
34
+ */
35
+ ns?: string[];
36
+ /**
37
+ * Namespaces to be used to find translation when no explicit namespace set.
38
+ */
39
+ fallbackNs?: FallbackNS;
40
+ /**
41
+ * Default namespace when no namespace defined (default: '')
42
+ */
43
+ defaultNs: string;
44
+ /**
45
+ * Prefix used for fetching languages (default: 'i18n/')
46
+ */
47
+ filesUrlPrefix: string;
48
+ staticData?: {
49
+ [key: string]: TreeTranslationsData | (() => Promise<TreeTranslationsData>);
50
+ };
51
+ };
52
+
53
+ export type State = {
54
+ initialOptions: Options;
55
+ activeNamespaces: Map<string, number>;
56
+ language: string | undefined;
57
+ pendingLanguage: string | undefined;
58
+ isInitialLoading: boolean;
59
+ isRunning: boolean;
60
+ };
61
+
62
+ const defaultValues: Options = {
63
+ enableLanguageStore: true,
64
+ defaultNs: '',
65
+ filesUrlPrefix: 'i18n/',
66
+ };
67
+
68
+ export const initState = (
69
+ options?: Partial<Options>,
70
+ previousState?: State
71
+ ): State => {
72
+ const initialOptions = {
73
+ ...defaultValues,
74
+ ...previousState?.initialOptions,
75
+ ...options,
76
+ };
77
+ // remove extra '/' from url end
78
+ const apiUrl = initialOptions.apiUrl;
79
+ initialOptions.apiUrl = apiUrl ? apiUrl.replace(/\/+$/, '') : apiUrl;
80
+
81
+ return {
82
+ initialOptions,
83
+ activeNamespaces:
84
+ previousState?.activeNamespaces || new Map<string, number>(),
85
+ language: previousState?.language,
86
+ pendingLanguage: previousState?.language,
87
+ isInitialLoading: false,
88
+ isRunning: false,
89
+ };
90
+ };
@@ -0,0 +1,23 @@
1
+ export const ValueObserver = <T = any>(
2
+ initialValue: T,
3
+ valueGetter: () => T,
4
+ handler: (value: T) => void
5
+ ) => {
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> = ReturnType<typeof ValueObserver<T>>;