@tolgee/core 4.9.2 → 5.0.0-rc.0b3e627.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 (273) hide show
  1. package/dist/tolgee.cjs.js +1069 -7029
  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 +1067 -7024
  8. package/dist/tolgee.esm.mjs.map +1 -1
  9. package/dist/tolgee.umd.js +1069 -7029
  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 +23 -0
  14. package/lib/Controller/Cache/helpers.d.ts +4 -0
  15. package/lib/Controller/Controller.d.ts +93 -0
  16. package/lib/Controller/Plugins/Plugins.d.ts +41 -0
  17. package/lib/Controller/State/State.d.ts +22 -0
  18. package/lib/Controller/State/helpers.d.ts +6 -0
  19. package/lib/Controller/State/initState.d.ts +55 -0
  20. package/lib/Controller/ValueObserver.d.ts +5 -0
  21. package/lib/Events/EventEmitter.d.ts +6 -0
  22. package/lib/Events/EventEmitterSelective.d.ts +15 -0
  23. package/lib/Events/Events.d.ts +50 -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 +295 -0
  32. package/src/Controller/Cache/helpers.ts +39 -0
  33. package/src/Controller/Controller.ts +289 -0
  34. package/src/Controller/Plugins/Plugins.ts +305 -0
  35. package/src/Controller/State/State.ts +165 -0
  36. package/src/Controller/State/helpers.ts +41 -0
  37. package/src/Controller/State/initState.ts +90 -0
  38. package/src/Controller/ValueObserver.ts +23 -0
  39. package/src/Events/EventEmitter.ts +27 -0
  40. package/src/Events/EventEmitterSelective.test.ts +108 -0
  41. package/src/Events/EventEmitterSelective.ts +160 -0
  42. package/src/Events/Events.ts +66 -0
  43. package/src/Tolgee.ts +75 -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/client.test.ts +48 -0
  48. package/src/__test/events.test.ts +33 -0
  49. package/src/__test/initialization.test.ts +73 -0
  50. package/src/__test/jest-setup.ts +2 -0
  51. package/src/__test/languageDetection.test.ts +123 -0
  52. package/src/__test/languageStorage.test.ts +145 -0
  53. package/src/__test/languages.test.ts +106 -0
  54. package/src/__test/loading.test.ts +39 -0
  55. package/src/__test/namespaces.test.ts +99 -0
  56. package/src/__test/namespacesFallback.test.ts +73 -0
  57. package/src/__test/plugins.test.ts +98 -0
  58. package/src/__test/testTools.ts +7 -0
  59. package/src/{Constants/Global.ts → constants.ts} +1 -3
  60. package/src/helpers.ts +17 -0
  61. package/src/index.ts +9 -8
  62. package/src/types.ts +324 -90
  63. package/README.md +0 -45
  64. package/dist/Constants/Global.d.ts +0 -6
  65. package/dist/Constants/ModifierKey.d.ts +0 -6
  66. package/dist/Errors/ApiHttpError.d.ts +0 -5
  67. package/dist/Observer.d.ts +0 -14
  68. package/dist/Observer.test.d.ts +0 -2
  69. package/dist/Properties.d.ts +0 -17
  70. package/dist/Properties.test.d.ts +0 -1
  71. package/dist/Tolgee.d.ts +0 -68
  72. package/dist/Tolgee.test.d.ts +0 -1
  73. package/dist/TolgeeConfig.d.ts +0 -69
  74. package/dist/TolgeeConfig.test.d.ts +0 -1
  75. package/dist/__integration/FormatterIcu.test.d.ts +0 -1
  76. package/dist/__integration/FormatterMissing.d.ts +0 -1
  77. package/dist/__integration/Tolgee.test.d.ts +0 -1
  78. package/dist/__integration/TolgeeInvisible.test.d.ts +0 -1
  79. package/dist/__integration/mockTranslations.d.ts +0 -7
  80. package/dist/__integration/testConfig.d.ts +0 -9
  81. package/dist/__testFixtures/classMock.d.ts +0 -3
  82. package/dist/__testFixtures/createElement.d.ts +0 -2
  83. package/dist/__testFixtures/createTestDom.d.ts +0 -9
  84. package/dist/__testFixtures/mocked.d.ts +0 -20
  85. package/dist/__testFixtures/setupAfterEnv.d.ts +0 -8
  86. package/dist/helpers/NodeHelper.d.ts +0 -14
  87. package/dist/helpers/TextHelper.d.ts +0 -5
  88. package/dist/helpers/TextHelper.test.d.ts +0 -1
  89. package/dist/helpers/commonTypes.d.ts +0 -2
  90. package/dist/helpers/encoderPolyfill.d.ts +0 -8
  91. package/dist/helpers/secret.d.ts +0 -6
  92. package/dist/helpers/secret.test.d.ts +0 -1
  93. package/dist/helpers/sleep.d.ts +0 -1
  94. package/dist/highlighter/HighlightFunctionsInitializer.d.ts +0 -10
  95. package/dist/highlighter/HighlightFunctionsInitializer.test.d.ts +0 -1
  96. package/dist/highlighter/MouseEventHandler.d.ts +0 -29
  97. package/dist/highlighter/MouseEventHandler.test.d.ts +0 -1
  98. package/dist/highlighter/TranslationHighlighter.d.ts +0 -14
  99. package/dist/highlighter/TranslationHighlighter.test.d.ts +0 -1
  100. package/dist/index.d.ts +0 -10
  101. package/dist/internal.d.ts +0 -2
  102. package/dist/modules/IcuFormatter.d.ts +0 -2
  103. package/dist/modules/IcuFormatter.test.d.ts +0 -1
  104. package/dist/modules/index.d.ts +0 -1
  105. package/dist/services/ApiHttpService.d.ts +0 -15
  106. package/dist/services/CoreService.d.ts +0 -18
  107. package/dist/services/CoreService.test.d.ts +0 -1
  108. package/dist/services/DependencyService.d.ts +0 -39
  109. package/dist/services/DependencyService.test.d.ts +0 -1
  110. package/dist/services/ElementRegistrar.d.ts +0 -19
  111. package/dist/services/ElementRegistrar.test.d.ts +0 -1
  112. package/dist/services/EventEmitter.d.ts +0 -13
  113. package/dist/services/EventService.d.ts +0 -9
  114. package/dist/services/ModuleService.d.ts +0 -5
  115. package/dist/services/ScreenshotService.d.ts +0 -15
  116. package/dist/services/Subscription.d.ts +0 -5
  117. package/dist/services/TextService.d.ts +0 -14
  118. package/dist/services/TextService.test.d.ts +0 -1
  119. package/dist/services/TranslationService.d.ts +0 -75
  120. package/dist/services/TranslationService.test.d.ts +0 -1
  121. package/dist/services/__mocks__/CoreService.d.ts +0 -2
  122. package/dist/toolsManager/Messages.d.ts +0 -8
  123. package/dist/toolsManager/Messages.test.d.ts +0 -1
  124. package/dist/toolsManager/PluginManager.d.ts +0 -21
  125. package/dist/toolsManager/PluginManager.test.d.ts +0 -1
  126. package/dist/types/DTOs.d.ts +0 -20
  127. package/dist/types/apiSchema.generated.d.ts +0 -6185
  128. package/dist/types.d.ts +0 -123
  129. package/dist/wrappers/AbstractWrapper.d.ts +0 -8
  130. package/dist/wrappers/NodeHandler.d.ts +0 -18
  131. package/dist/wrappers/WrappedHandler.d.ts +0 -8
  132. package/dist/wrappers/invisible/AttributeHandler.d.ts +0 -8
  133. package/dist/wrappers/invisible/Coder.d.ts +0 -7
  134. package/dist/wrappers/invisible/ContentHandler.d.ts +0 -6
  135. package/dist/wrappers/invisible/CoreHandler.d.ts +0 -10
  136. package/dist/wrappers/invisible/InvisibleWrapper.d.ts +0 -18
  137. package/dist/wrappers/invisible/ValueMemory.d.ts +0 -5
  138. package/dist/wrappers/invisible/ValueMemory.test.d.ts +0 -1
  139. package/dist/wrappers/text/AttributeHandler.d.ts +0 -8
  140. package/dist/wrappers/text/AttributeHandler.test.d.ts +0 -1
  141. package/dist/wrappers/text/Coder.d.ts +0 -15
  142. package/dist/wrappers/text/Coder.test.d.ts +0 -1
  143. package/dist/wrappers/text/ContentHandler.d.ts +0 -8
  144. package/dist/wrappers/text/ContentHandler.test.d.ts +0 -1
  145. package/dist/wrappers/text/CoreHandler.d.ts +0 -17
  146. package/dist/wrappers/text/CoreHandler.test.d.ts +0 -1
  147. package/dist/wrappers/text/TextWrapper.d.ts +0 -20
  148. package/index.js +0 -7
  149. package/lib/Constants/ModifierKey.d.ts +0 -6
  150. package/lib/Errors/ApiHttpError.d.ts +0 -5
  151. package/lib/Observer.d.ts +0 -14
  152. package/lib/Properties.d.ts +0 -17
  153. package/lib/TolgeeConfig.d.ts +0 -69
  154. package/lib/helpers/NodeHelper.d.ts +0 -14
  155. package/lib/helpers/TextHelper.d.ts +0 -5
  156. package/lib/helpers/commonTypes.d.ts +0 -2
  157. package/lib/helpers/encoderPolyfill.d.ts +0 -8
  158. package/lib/helpers/secret.d.ts +0 -6
  159. package/lib/helpers/sleep.d.ts +0 -1
  160. package/lib/highlighter/HighlightFunctionsInitializer.d.ts +0 -10
  161. package/lib/highlighter/MouseEventHandler.d.ts +0 -29
  162. package/lib/highlighter/TranslationHighlighter.d.ts +0 -14
  163. package/lib/modules/IcuFormatter.d.ts +0 -2
  164. package/lib/modules/index.d.ts +0 -1
  165. package/lib/services/ApiHttpService.d.ts +0 -15
  166. package/lib/services/CoreService.d.ts +0 -18
  167. package/lib/services/DependencyService.d.ts +0 -39
  168. package/lib/services/ElementRegistrar.d.ts +0 -19
  169. package/lib/services/EventEmitter.d.ts +0 -13
  170. package/lib/services/EventService.d.ts +0 -9
  171. package/lib/services/ModuleService.d.ts +0 -5
  172. package/lib/services/ScreenshotService.d.ts +0 -15
  173. package/lib/services/Subscription.d.ts +0 -5
  174. package/lib/services/TextService.d.ts +0 -14
  175. package/lib/services/TranslationService.d.ts +0 -75
  176. package/lib/toolsManager/Messages.d.ts +0 -8
  177. package/lib/toolsManager/PluginManager.d.ts +0 -21
  178. package/lib/types/DTOs.d.ts +0 -20
  179. package/lib/types/apiSchema.generated.d.ts +0 -6185
  180. package/lib/wrappers/AbstractWrapper.d.ts +0 -8
  181. package/lib/wrappers/NodeHandler.d.ts +0 -18
  182. package/lib/wrappers/WrappedHandler.d.ts +0 -8
  183. package/lib/wrappers/invisible/AttributeHandler.d.ts +0 -8
  184. package/lib/wrappers/invisible/Coder.d.ts +0 -7
  185. package/lib/wrappers/invisible/ContentHandler.d.ts +0 -6
  186. package/lib/wrappers/invisible/CoreHandler.d.ts +0 -10
  187. package/lib/wrappers/invisible/InvisibleWrapper.d.ts +0 -18
  188. package/lib/wrappers/invisible/ValueMemory.d.ts +0 -5
  189. package/lib/wrappers/text/AttributeHandler.d.ts +0 -8
  190. package/lib/wrappers/text/Coder.d.ts +0 -15
  191. package/lib/wrappers/text/ContentHandler.d.ts +0 -8
  192. package/lib/wrappers/text/CoreHandler.d.ts +0 -17
  193. package/lib/wrappers/text/TextWrapper.d.ts +0 -20
  194. package/src/Constants/ModifierKey.ts +0 -6
  195. package/src/Errors/ApiHttpError.ts +0 -8
  196. package/src/Observer.test.ts +0 -119
  197. package/src/Observer.ts +0 -68
  198. package/src/Properties.test.ts +0 -150
  199. package/src/Properties.ts +0 -112
  200. package/src/Tolgee.test.ts +0 -473
  201. package/src/TolgeeConfig.test.ts +0 -21
  202. package/src/TolgeeConfig.ts +0 -134
  203. package/src/__integration/FormatterIcu.test.ts +0 -80
  204. package/src/__integration/FormatterMissing.ts +0 -54
  205. package/src/__integration/Tolgee.test.ts +0 -90
  206. package/src/__integration/TolgeeInvisible.test.ts +0 -145
  207. package/src/__integration/mockTranslations.ts +0 -6
  208. package/src/__integration/testConfig.ts +0 -16
  209. package/src/__testFixtures/classMock.ts +0 -11
  210. package/src/__testFixtures/createElement.ts +0 -43
  211. package/src/__testFixtures/createTestDom.ts +0 -26
  212. package/src/__testFixtures/mocked.ts +0 -25
  213. package/src/__testFixtures/setupAfterEnv.ts +0 -34
  214. package/src/helpers/NodeHelper.ts +0 -90
  215. package/src/helpers/TextHelper.test.ts +0 -62
  216. package/src/helpers/TextHelper.ts +0 -58
  217. package/src/helpers/commonTypes.ts +0 -8
  218. package/src/helpers/encoderPolyfill.ts +0 -96
  219. package/src/helpers/secret.test.ts +0 -61
  220. package/src/helpers/secret.ts +0 -68
  221. package/src/helpers/sleep.ts +0 -2
  222. package/src/highlighter/HighlightFunctionsInitializer.test.ts +0 -40
  223. package/src/highlighter/HighlightFunctionsInitializer.ts +0 -61
  224. package/src/highlighter/MouseEventHandler.test.ts +0 -151
  225. package/src/highlighter/MouseEventHandler.ts +0 -191
  226. package/src/highlighter/TranslationHighlighter.test.ts +0 -177
  227. package/src/highlighter/TranslationHighlighter.ts +0 -113
  228. package/src/internal.ts +0 -2
  229. package/src/modules/IcuFormatter.test.ts +0 -21
  230. package/src/modules/IcuFormatter.ts +0 -39
  231. package/src/modules/index.ts +0 -1
  232. package/src/services/ApiHttpService.ts +0 -85
  233. package/src/services/CoreService.test.ts +0 -141
  234. package/src/services/CoreService.ts +0 -76
  235. package/src/services/DependencyService.test.ts +0 -51
  236. package/src/services/DependencyService.ts +0 -116
  237. package/src/services/ElementRegistrar.test.ts +0 -131
  238. package/src/services/ElementRegistrar.ts +0 -108
  239. package/src/services/EventEmitter.ts +0 -52
  240. package/src/services/EventService.ts +0 -14
  241. package/src/services/ModuleService.ts +0 -14
  242. package/src/services/ScreenshotService.ts +0 -31
  243. package/src/services/Subscription.ts +0 -7
  244. package/src/services/TextService.test.ts +0 -88
  245. package/src/services/TextService.ts +0 -82
  246. package/src/services/TranslationService.test.ts +0 -358
  247. package/src/services/TranslationService.ts +0 -417
  248. package/src/services/__mocks__/CoreService.ts +0 -17
  249. package/src/toolsManager/Messages.test.ts +0 -79
  250. package/src/toolsManager/Messages.ts +0 -60
  251. package/src/toolsManager/PluginManager.test.ts +0 -108
  252. package/src/toolsManager/PluginManager.ts +0 -129
  253. package/src/types/DTOs.ts +0 -25
  254. package/src/types/apiSchema.generated.ts +0 -6208
  255. package/src/wrappers/AbstractWrapper.ts +0 -14
  256. package/src/wrappers/NodeHandler.ts +0 -143
  257. package/src/wrappers/WrappedHandler.ts +0 -28
  258. package/src/wrappers/invisible/AttributeHandler.ts +0 -23
  259. package/src/wrappers/invisible/Coder.ts +0 -65
  260. package/src/wrappers/invisible/ContentHandler.ts +0 -15
  261. package/src/wrappers/invisible/CoreHandler.ts +0 -17
  262. package/src/wrappers/invisible/InvisibleWrapper.ts +0 -59
  263. package/src/wrappers/invisible/ValueMemory.test.ts +0 -25
  264. package/src/wrappers/invisible/ValueMemory.ts +0 -16
  265. package/src/wrappers/text/AttributeHandler.test.ts +0 -118
  266. package/src/wrappers/text/AttributeHandler.ts +0 -25
  267. package/src/wrappers/text/Coder.test.ts +0 -298
  268. package/src/wrappers/text/Coder.ts +0 -202
  269. package/src/wrappers/text/ContentHandler.test.ts +0 -185
  270. package/src/wrappers/text/ContentHandler.ts +0 -21
  271. package/src/wrappers/text/CoreHandler.test.ts +0 -106
  272. package/src/wrappers/text/CoreHandler.ts +0 -45
  273. package/src/wrappers/text/TextWrapper.ts +0 -69
@@ -0,0 +1,98 @@
1
+ import { Tolgee } from '../Tolgee';
2
+ import {
3
+ FinalFormatterInterface,
4
+ FormatterInterface,
5
+ FormatterInterfaceFormatParams,
6
+ ObserverInterface,
7
+ TolgeePlugin,
8
+ WrapperWrapFunction,
9
+ } from '../types';
10
+
11
+ const testObserver =
12
+ (outputNotFormattable: boolean): ObserverInterface =>
13
+ () => {
14
+ const wrap: WrapperWrapFunction = ({ key, translation }) => {
15
+ return `${key}|${translation}`;
16
+ };
17
+ const unwrap = (input: string) => {
18
+ const [key, text] = input.split('|');
19
+ return { text, keys: [{ key }] };
20
+ };
21
+
22
+ const stop = () => {};
23
+ const run = () => {};
24
+
25
+ const retranslate = () => {};
26
+
27
+ return Object.freeze({
28
+ wrap,
29
+ unwrap,
30
+ run,
31
+ stop,
32
+ retranslate,
33
+ highlight: () => ({ unhighlight: () => {} }),
34
+ outputNotFormattable,
35
+ });
36
+ };
37
+
38
+ const testFormatter1: FormatterInterface = {
39
+ format: ({ translation }: FormatterInterfaceFormatParams) => {
40
+ return `(1${translation})`;
41
+ },
42
+ };
43
+
44
+ const testFormatter2: FormatterInterface = {
45
+ format: ({ translation }: FormatterInterfaceFormatParams) => {
46
+ return `(2${translation})`;
47
+ },
48
+ };
49
+
50
+ const testFinalFormatter: FinalFormatterInterface = {
51
+ format: ({ translation }: FormatterInterfaceFormatParams) => {
52
+ return { final: translation };
53
+ },
54
+ };
55
+
56
+ const observerPlugin =
57
+ (outputNotFormattable: boolean): TolgeePlugin =>
58
+ (tolgee, tools) => {
59
+ tools.setObserver(testObserver(outputNotFormattable));
60
+ return tolgee;
61
+ };
62
+
63
+ const formattersPlugin: TolgeePlugin = (tolgee, tools) => {
64
+ tools.addFormatter(testFormatter1);
65
+ tools.addFormatter(testFormatter2);
66
+ tools.setFinalFormatter(testFinalFormatter);
67
+ return tolgee;
68
+ };
69
+
70
+ describe('plugins', () => {
71
+ it('wraps and formats translation', () => {
72
+ const tolgee = Tolgee({
73
+ language: 'en',
74
+ staticData: { en: { hello: 'world' } },
75
+ });
76
+ tolgee.use(observerPlugin(false));
77
+ tolgee.run();
78
+ expect(tolgee.t({ key: 'hello' })).toEqual('hello|world');
79
+
80
+ tolgee.use(formattersPlugin);
81
+ expect(tolgee.t({ key: 'hello' })).toEqual({ final: '(2(1hello|world))' });
82
+ tolgee.stop();
83
+ });
84
+
85
+ it("won't format when observer doesn't return formattable text", () => {
86
+ const tolgee = Tolgee({
87
+ language: 'en',
88
+ staticData: { en: { hello: 'world' } },
89
+ });
90
+ tolgee.use(observerPlugin(true));
91
+ tolgee.run();
92
+ expect(tolgee.t({ key: 'hello' })).toEqual('hello|world');
93
+
94
+ tolgee.use(formattersPlugin);
95
+ expect(tolgee.t({ key: 'hello' })).toEqual('hello|world');
96
+ tolgee.stop();
97
+ });
98
+ });
@@ -0,0 +1,7 @@
1
+ export const resolvablePromise = <T = any>() => {
2
+ let resolve: (value: T) => void;
3
+ const promise = new Promise<T>((innerResolve) => {
4
+ resolve = innerResolve;
5
+ });
6
+ return [promise, resolve!] as const;
7
+ };
@@ -1,9 +1,7 @@
1
1
  export const RESTRICTED_ASCENDANT_ATTRIBUTE = 'data-tolgee-restricted';
2
-
3
2
  export const TOLGEE_ATTRIBUTE_NAME = '_tolgee';
4
- export const TOLGEE_TARGET_ATTRIBUTE = '_tolgee-target';
5
- export const TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE = 'data-tolgee-key-only';
6
3
  export const TOLGEE_HIGHLIGHTER_CLASS = '_tolgee-highlighter';
4
+ export const TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE = 'data-tolgee-key-only';
7
5
 
8
6
  // needs to be same as in @tolgee/ui package
9
7
  export const DEVTOOLS_ID = '__tolgee_dev_tools';
package/src/helpers.ts ADDED
@@ -0,0 +1,17 @@
1
+ export function isPromise(value: any) {
2
+ return Boolean(value && typeof value.then === 'function');
3
+ }
4
+
5
+ export const valueOrPromise = <T, R>(
6
+ value: T | Promise<T>,
7
+ callback: (value: T) => R
8
+ ) => {
9
+ if (isPromise(value)) {
10
+ return Promise.resolve(value).then(callback);
11
+ } else {
12
+ return callback(value as T);
13
+ }
14
+ };
15
+
16
+ export const missingOptionError = (option: string) =>
17
+ `Tolgee: You need to specify '${option}' option`;
package/src/index.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  export { Tolgee } from './Tolgee';
2
- export { TolgeeConfig } from './TolgeeConfig';
3
- export { ModifierKey } from './Constants/ModifierKey';
4
- export { TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE } from './Constants/Global';
5
- export * from './modules';
6
- export * from './types/DTOs';
2
+ export {
3
+ RESTRICTED_ASCENDANT_ATTRIBUTE,
4
+ DEVTOOLS_ID,
5
+ TOLGEE_ATTRIBUTE_NAME,
6
+ TOLGEE_HIGHLIGHTER_CLASS,
7
+ TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE,
8
+ } from './constants';
7
9
  export * from './types';
8
- export * from './Constants/Global';
9
- export * from './helpers/NodeHelper';
10
- export * from './helpers/TextHelper';
10
+ export { getTranslateParams } from './TranslateParams';
11
+ export { getFallback, getFallbackArray } from './Controller/State/helpers';
package/src/types.ts CHANGED
@@ -1,96 +1,281 @@
1
- export interface TextInputElementData {
2
- oldValue: string;
3
- valueInputs: string[];
4
- touched: boolean;
5
- oldPlaceholder: string;
6
- placeholderInputs: string[];
7
- }
1
+ import type { Options } from './Controller/State/initState';
8
2
 
9
- export type TreeTranslationsData = {
10
- [key: string]: string | TreeTranslationsData;
11
- };
3
+ export type { State, Options } from './Controller/State/initState';
4
+ export type { EventEmitterType } from './Events/EventEmitter';
5
+ export type { EventEmitterSelectiveType } from './Events/EventEmitterSelective';
12
6
 
13
- export type Translations = Record<string, string>;
14
- export type TranslationParams = {
15
- [key: string]: string | number | bigint;
16
- };
17
- export type TranslationParamsTags<T> = {
18
- [key: string]: string | number | bigint | ((value: T | T[]) => T);
19
- };
7
+ export type FallbackGeneral = undefined | false | string | string[];
20
8
 
21
- export type TranslateProps = {
22
- key: string;
23
- defaultValue?: string;
24
- params?: TranslationParams;
9
+ export type FallbackNS = FallbackGeneral;
10
+
11
+ export type NsType = string;
12
+
13
+ export type KeyType = string;
14
+
15
+ export type FallbackNSTranslation = undefined | NsType | NsType[];
16
+
17
+ export type FallbackLanguage = FallbackGeneral;
18
+
19
+ export type FallbackLanguageObject = Record<string, FallbackLanguage>;
20
+
21
+ export type FallbackLanguageOption = FallbackLanguage | FallbackLanguageObject;
22
+
23
+ export type TranslateOptions<T> = {
24
+ ns?: FallbackNSTranslation;
25
25
  noWrap?: boolean;
26
26
  orEmpty?: boolean;
27
+ params?: TranslateParams<T>;
27
28
  };
28
- export type TranslatePropsTags<T> = {
29
- key: string;
29
+
30
+ export type TranslateProps<T = DefaultParamType> = {
31
+ key: KeyType;
30
32
  defaultValue?: string;
31
- params?: TranslationParamsTags<T>;
32
- noWrap?: boolean;
33
- orEmpty?: boolean;
33
+ } & TranslateOptions<T>;
34
+
35
+ export type TranslatePropsInternal = TranslateProps & {
36
+ translation?: string;
34
37
  };
35
38
 
36
- export type InstantProps = {
37
- key: string;
38
- defaultValue?: string;
39
- params?: TranslationParams;
40
- noWrap?: boolean;
41
- orEmpty?: boolean;
39
+ export type TranslationValue = string | undefined | null;
40
+
41
+ export type TranslationsFlat = Map<string, TranslationValue>;
42
+
43
+ export type TreeTranslationsData = {
44
+ [key: string]: TranslationValue | TreeTranslationsData;
42
45
  };
43
- export type InstantPropsTags<T> = {
44
- key: string;
45
- defaultValue?: string;
46
- params?: TranslationParamsTags<T>;
47
- noWrap?: boolean;
48
- orEmpty?: boolean;
46
+
47
+ export type CacheAsyncRequests = Map<
48
+ string,
49
+ Promise<TreeTranslationsData | undefined> | undefined
50
+ >;
51
+
52
+ export type CacheDescriptor = {
53
+ language: string;
54
+ namespace?: string;
55
+ };
56
+
57
+ export type CacheDescriptorInternal = {
58
+ language: string;
59
+ namespace: string;
60
+ };
61
+
62
+ export type CacheDescriptorWithKey = CacheDescriptorInternal & {
63
+ key?: string;
49
64
  };
50
65
 
51
66
  export type KeyAndParams = {
52
67
  key: string;
53
- params: TranslationParams;
68
+ params?: TranslateParams;
54
69
  defaultValue?: string;
70
+ ns?: FallbackNSTranslation;
55
71
  };
56
- export type KeyAndParamsTags<T> = {
57
- key: string;
58
- params: TranslationParamsTags<T>;
59
- defaultValue?: string;
72
+
73
+ export type Unwrapped = { text: string; keys: KeyAndParams[] };
74
+
75
+ type PropType<TObj> = TObj[keyof TObj];
76
+
77
+ export type DefaultParamType = string | number | bigint;
78
+
79
+ export type TranslateParams<T = DefaultParamType> = {
80
+ [key: string]: T;
60
81
  };
61
82
 
62
- export type TranslatedWithMetadata = {
63
- translated: string;
64
- key: string;
65
- params: TranslationParams;
66
- defaultValue: string | undefined;
83
+ export type CombinedOptions<T> = TranslateOptions<T> & {
84
+ [key: string]: T | PropType<TranslateOptions<T>>;
67
85
  };
68
- export type TranslatedWithMetadataTags<T> = {
69
- translated: TranslationTags<T>;
70
- key: string;
71
- params: TranslationParamsTags<T>;
72
- defaultValue: string | undefined;
86
+
87
+ export type TFnType<T = DefaultParamType, R = string> = {
88
+ (key: string, defaultValue?: string, options?: CombinedOptions<T>): R;
89
+ (key: string, options?: CombinedOptions<T>): R;
90
+ (props: TranslateProps<T>): R;
91
+ };
92
+
93
+ export type WrapperWrapProps = Pick<
94
+ TranslatePropsInternal,
95
+ 'key' | 'params' | 'defaultValue' | 'ns' | 'translation'
96
+ >;
97
+ export type WrapperWrapFunction = (props: WrapperWrapProps) => string;
98
+ export type WrapperUnwrapFunction = (text: string) => Unwrapped;
99
+
100
+ export type WrapperAttributeXPathGetter = (props: {
101
+ tag: string;
102
+ attribute: string;
103
+ }) => string;
104
+
105
+ export type WrapperInterface = {
106
+ unwrap: WrapperUnwrapFunction;
107
+ wrap: WrapperWrapFunction;
108
+ getTextXPath: () => string;
109
+ getAttributeXPath: WrapperAttributeXPathGetter;
110
+ };
111
+
112
+ export type FormatterInterfaceFormatParams = {
113
+ translation: string;
114
+ language: string;
115
+ params: Record<string, any> | undefined;
116
+ };
117
+
118
+ export type FormatterInterface = {
119
+ format: (props: FormatterInterfaceFormatParams) => string;
120
+ };
121
+
122
+ export type FinalFormatterInterface = {
123
+ format: (props: FormatterInterfaceFormatParams) => any;
124
+ };
125
+
126
+ export type ObserverProps = {
127
+ translate: (params: TranslatePropsInternal) => string;
128
+ onClick: TranslationOnClick;
129
+ };
130
+
131
+ export type HighlightInterface = (
132
+ key?: string,
133
+ ns?: FallbackNSTranslation
134
+ ) => {
135
+ unhighlight(): void;
136
+ };
137
+
138
+ export type ObserverRunProps = {
139
+ mouseHighlight: boolean;
73
140
  };
74
141
 
75
- export type TranslationTags<T> = string | T[];
142
+ export type ObserverInterface = (props: ObserverProps) => {
143
+ unwrap: (text: string) => Unwrapped;
144
+ wrap: WrapperWrapFunction;
145
+ retranslate: () => void;
146
+ stop: () => void;
147
+ run: (props: ObserverRunProps) => void;
148
+ highlight: HighlightInterface;
149
+ outputNotFormattable: boolean;
150
+ };
76
151
 
77
- export type NodeWithMeta = Node & {
78
- _tolgee: NodeMeta;
152
+ export type LanguageDetectorProps = {
153
+ availableLanguages: string[];
79
154
  };
80
155
 
81
- export type NodeWithLock = Node & {
82
- _tolgee: NodeLock;
156
+ export type LanguageDetectorInterface = {
157
+ getLanguage: (
158
+ props: LanguageDetectorProps
159
+ ) => string | undefined | Promise<string | undefined>;
160
+ };
161
+
162
+ export type LanguageStorageInterface = {
163
+ getLanguage: () => string | undefined | Promise<string | undefined>;
164
+ setLanguage: (language: string) => void | Promise<void>;
165
+ };
166
+
167
+ export type BackendDevProps = {
168
+ apiUrl?: string;
169
+ apiKey?: string;
170
+ projectId?: number;
171
+ };
172
+
173
+ export type BackendGetRecordProps = {
174
+ language: string;
175
+ namespace?: string;
83
176
  };
84
177
 
85
- export type ElementWithMeta = Element &
86
- ElementCSSInlineStyle & {
87
- _tolgee: ElementMeta;
88
- };
178
+ export type BackendGetRecord = (
179
+ data: BackendGetRecordProps
180
+ ) => Promise<TreeTranslationsData | undefined> | undefined;
181
+
182
+ export interface BackendInterface {
183
+ getRecord: BackendGetRecord;
184
+ }
185
+
186
+ export type BackendGetDevRecord = (
187
+ data: BackendGetRecordProps & BackendDevProps
188
+ ) => Promise<TreeTranslationsData | undefined> | undefined;
189
+
190
+ export type BackendDevInterface = {
191
+ getRecord: BackendGetDevRecord;
192
+ };
193
+
194
+ export type TolgeeEvent =
195
+ | 'pendingLanguage'
196
+ | 'language'
197
+ | 'key'
198
+ | 'loading'
199
+ | 'fetching'
200
+ | 'initialLoad'
201
+ | 'running'
202
+ | 'cache'
203
+ | 'keyUpdate';
204
+
205
+ export type TolgeeOn = {
206
+ (event: 'pendingLanguage', handler: ListenerHandler<string>): Listener;
207
+ (event: 'language', handler: ListenerHandler<string>): Listener;
208
+ (event: 'key', handler: ListenerHandler<string>): Listener;
209
+ (event: 'loading', handler: ListenerHandler<boolean>): Listener;
210
+ (event: 'fetching', handler: ListenerHandler<boolean>): Listener;
211
+ (event: 'initialLoad', handler: ListenerHandler<void>): Listener;
212
+ (event: 'running', handler: ListenerHandler<boolean>): Listener;
213
+ (event: 'keyUpdate', handler: ListenerHandler<void>): Listener;
214
+ (event: TolgeeEvent, handler: ListenerHandler<any>): Listener;
215
+ };
216
+
217
+ export type TolgeeInstance = Readonly<{
218
+ on: TolgeeOn;
219
+ onKeyUpdate: (handler: ListenerHandler<void>) => ListenerSelective;
220
+
221
+ use: (plugin: TolgeePlugin | undefined) => TolgeeInstance;
222
+
223
+ getLanguage: () => string | undefined;
224
+ getPendingLanguage: () => string | undefined;
225
+ changeLanguage: (language: string) => Promise<void>;
226
+ changeTranslation: ChangeTranslationInterface;
227
+ addActiveNs: (ns: FallbackNSTranslation, forget?: boolean) => Promise<void>;
228
+ removeActiveNs: (ns: FallbackNSTranslation) => void;
229
+ loadRecords: (descriptors: CacheDescriptor[]) => Promise<TranslationsFlat[]>;
230
+ loadRecord: (descriptors: CacheDescriptor) => Promise<TranslationsFlat>;
231
+ addStaticData: (data: Options['staticData']) => void;
232
+ getRecord: (
233
+ descriptor: CacheDescriptorInternal
234
+ ) => TranslationsFlat | undefined;
235
+ getAllRecords: () => CachePublicRecord[];
236
+ isInitialLoading: () => boolean;
237
+ isLoading: (ns?: FallbackNSTranslation) => boolean;
238
+ isLoaded: (ns?: FallbackNSTranslation) => boolean;
239
+ isFetching: (ns?: FallbackNSTranslation) => boolean;
240
+ isRunning: () => boolean;
241
+ highlight: HighlightInterface;
242
+ getInitialOptions: () => Options;
243
+ isDev: () => boolean;
244
+ init: (options: Partial<Options>) => TolgeeInstance;
245
+ run: () => Promise<void>;
246
+ stop: () => void;
247
+ t: (props: TranslatePropsInternal) => string;
248
+ wrap: (params: TranslatePropsInternal) => string | undefined;
249
+ unwrap: (text: string) => Unwrapped;
250
+ }>;
251
+
252
+ export type PluginServicePublic = Readonly<{
253
+ setFinalFormatter: (formatter: FinalFormatterInterface | undefined) => void;
254
+ addFormatter: (formatter: FormatterInterface | undefined) => void;
255
+ setObserver: (observer: ObserverInterface | undefined) => void;
256
+ getObserver: () => ReturnType<ObserverInterface> | undefined;
257
+ setUi: (ui: UiLibInterface | undefined) => void;
258
+ getUi: () => UiConstructor | undefined;
259
+ addBackend: (backend: BackendInterface | undefined) => void;
260
+ setDevBackend: (backend: BackendInterface | undefined) => void;
261
+ setLanguageDetector: (
262
+ languageDetector: LanguageDetectorInterface | undefined
263
+ ) => void;
264
+ setLanguageStorage: (
265
+ languageStorage: LanguageStorageInterface | undefined
266
+ ) => void;
267
+ }>;
268
+
269
+ export type NodeMeta = {
270
+ oldTextContent: string;
271
+ keys: KeyAndParams[];
272
+ keyAttributeOnly?: boolean;
273
+ };
89
274
 
90
275
  export type ElementMeta = {
91
276
  wrappedWithElementOnlyKey?: string;
92
277
  wrappedWithElementOnlyDefaultHtml?: string;
93
- nodes: Set<NodeWithMeta>;
278
+ nodes: Map<Node, NodeMeta>;
94
279
  highlightEl?: HTMLDivElement;
95
280
  highlight?: () => void;
96
281
  unhighlight?: () => void;
@@ -104,43 +289,92 @@ export type ElementMeta = {
104
289
  * Triggering highlight needs the metadata stored on element, so
105
290
  * we need the ability to prevent clean.
106
291
  */
292
+
107
293
  preventClean?: boolean;
108
294
  };
109
295
 
110
- export type NodeMeta = {
111
- oldTextContent: string;
112
- keys: KeyAndParamsTags<any>[];
113
- } & NodeLock;
296
+ export type ChangeTranslationInterface = (
297
+ descriptor: CacheDescriptor,
298
+ key: string,
299
+ value: string
300
+ ) => { revert: () => void };
114
301
 
115
- export type NodeLock = {
116
- locked?: boolean;
302
+ export type UiProps = {
303
+ apiUrl: string;
304
+ apiKey: string;
305
+ highlight: HighlightInterface;
306
+ changeTranslation: ChangeTranslationInterface;
117
307
  };
118
308
 
119
- export type Scope =
120
- | 'translations.edit'
121
- | 'translations.view'
122
- | 'keys.edit'
123
- | 'screenshots.upload'
124
- | 'screenshots.view'
125
- | 'screenshots.delete';
309
+ export interface UiInterface {
310
+ handleElementClick(
311
+ event: MouseEvent,
312
+ keysAndDefaults: UiKeyOption[]
313
+ ): Promise<void>;
314
+ }
126
315
 
127
- export type Mode = 'development' | 'production';
316
+ export type UiConstructor = new (props: UiProps) => UiInterface;
128
317
 
129
- export type Unwrapped = { text: string; keys: KeyAndParamsTags<any>[] };
318
+ export type UiLibInterface = {
319
+ UI: UiConstructor;
320
+ };
130
321
 
131
- export interface Formatter {
132
- format: FormatFunction;
133
- }
322
+ export type UiType = UiConstructor | UiLibInterface;
134
323
 
135
- interface FormatterStatic {
136
- type: 'formatter';
137
- new (): Formatter;
138
- }
324
+ export type UiKeyOption = {
325
+ key: string;
326
+ defaultValue?: string;
327
+ ns: string[];
328
+ translation: string | undefined;
329
+ };
139
330
 
140
- export type TolgeeModule = FormatterStatic;
331
+ export type KeyWithDefault = {
332
+ key: string;
333
+ defaultValue?: string;
334
+ ns: FallbackNSTranslation;
335
+ };
141
336
 
142
- export type FormatFunction = (props: {
143
- translation: string;
144
- params: Record<string, any>;
337
+ export type TranslationOnClick = (
338
+ event: MouseEvent,
339
+ data: {
340
+ keysAndDefaults: KeyWithDefault[];
341
+ el: Element;
342
+ meta: ElementMeta;
343
+ }
344
+ ) => void;
345
+
346
+ export type Listener = {
347
+ unsubscribe: () => void;
348
+ };
349
+
350
+ export type KeyDescriptorInternal = {
351
+ key?: string;
352
+ ns?: string[] | undefined;
353
+ };
354
+
355
+ export type KeyDescriptor = {
356
+ key: string;
357
+ ns?: string | string[];
358
+ };
359
+
360
+ export type ListenerSelective = {
361
+ unsubscribe: () => void;
362
+ subscribeNs: (ns: FallbackNSTranslation) => ListenerSelective;
363
+ unsubscribeNs: (ns: FallbackNSTranslation) => ListenerSelective;
364
+ subscribeKey: (descriptor: KeyDescriptor) => ListenerSelective;
365
+ unsubscribeKey: (descriptor: KeyDescriptor) => ListenerSelective;
366
+ };
367
+
368
+ export type ListenerHandlerEvent<T> = { value: T };
369
+ export type ListenerHandler<T> = (e: ListenerHandlerEvent<T>) => void;
370
+
371
+ export type TolgeePlugin = (
372
+ tolgee: TolgeeInstance,
373
+ tools: PluginServicePublic
374
+ ) => TolgeeInstance;
375
+
376
+ export type CachePublicRecord = {
377
+ data: TranslationsFlat;
145
378
  language: string;
146
- }) => string | any[];
379
+ namespace: string;
380
+ };
package/README.md DELETED
@@ -1,45 +0,0 @@
1
- # Tolgee core library
2
-
3
- ![test workflow](https://github.com/tolgee/tolgee-js/actions/workflows/test.yml/badge.svg)
4
- ![@tolgee/core version](https://img.shields.io/npm/v/@tolgee/core?label=%40tolgee%2Fcore)
5
- ![types typescript](https://img.shields.io/badge/Types-Typescript-blue)
6
- [![twitter](https://img.shields.io/twitter/follow/Tolgee_i18n?style=social)](https://twitter.com/Tolgee_i18n)
7
- [![github stars](https://img.shields.io/github/stars/tolgee/tolgee-js?style=social)](https://github.com/tolgee/tolgee-js)
8
-
9
- [<img src="https://raw.githubusercontent.com/tolgee/documentation/main/tolgee_logo_text.svg" alt="Tolgee" width="200" />](https://tolgee.io)
10
-
11
- Core library of Tolgee localization toolkit. For more information about Tolgee Toolkit, visit our documentation website
12
- [toolkit.tolgee.io](https://toolkit.tolgee.io).
13
-
14
- ## Installation
15
-
16
- npm install @tolgee/core --save
17
-
18
- ## Usage
19
-
20
- First, create a Tolgee instance and run it.
21
-
22
- import {Tolgee} from "@tolgee/core";
23
-
24
- const tg = Tolgee.init({
25
- apiKey: "your_api_key",
26
- apiUrl: "https://app.tolgee.io",
27
- })
28
-
29
- tg.run();
30
-
31
- Then, use it to translate your strings.
32
-
33
- tg.onLangLoaded.subscribe(() => {
34
- document.title = tg.translate("hello_world");
35
- });
36
-
37
- ## Features
38
-
39
- - All in One localization solution for your JS application 🙌
40
- - Out of box in-context localization 🎉
41
- - Automated screenshot generation 📷
42
- - Translation management platform 🎈
43
- - Open-source 🔥
44
-
45
- To learn more, check [Hello World example](https://toolkit.tolgee.io/docs/web/get_started/hello_world).
@@ -1,6 +0,0 @@
1
- export declare const RESTRICTED_ASCENDANT_ATTRIBUTE = "data-tolgee-restricted";
2
- export declare const TOLGEE_ATTRIBUTE_NAME = "_tolgee";
3
- export declare const TOLGEE_TARGET_ATTRIBUTE = "_tolgee-target";
4
- export declare const TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE = "data-tolgee-key-only";
5
- export declare const TOLGEE_HIGHLIGHTER_CLASS = "_tolgee-highlighter";
6
- export declare const DEVTOOLS_ID = "__tolgee_dev_tools";
@@ -1,6 +0,0 @@
1
- export declare enum ModifierKey {
2
- Alt = 0,
3
- Control = 1,
4
- Shift = 2,
5
- Meta = 3
6
- }
@@ -1,5 +0,0 @@
1
- export declare class ApiHttpError extends Error {
2
- response: Response;
3
- code?: string;
4
- constructor(response: Response, code?: string);
5
- }