@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,14 +0,0 @@
1
- import { TranslationTags, TranslationParamsTags, Unwrapped } from '../types';
2
-
3
- export interface AbstractWrapper {
4
- handleText(node: Element): Promise<void>;
5
- handleSubtree(node: Element): Promise<void>;
6
- handleAttribute(node: Element): Promise<void>;
7
- wrap: (
8
- key: string,
9
- params?: TranslationParamsTags<any>,
10
- defaultValue?: string | undefined,
11
- translation?: TranslationTags<any>
12
- ) => TranslationTags<any>;
13
- unwrap(text: string): Unwrapped;
14
- }
@@ -1,143 +0,0 @@
1
- import { NodeHelper } from '../helpers/NodeHelper';
2
- import { Properties } from '../Properties';
3
- import {
4
- ElementMeta,
5
- ElementWithMeta,
6
- KeyAndParamsTags,
7
- NodeLock,
8
- NodeMeta,
9
- NodeWithLock,
10
- NodeWithMeta,
11
- } from '../types';
12
- import { ElementRegistrar } from '../services/ElementRegistrar';
13
- import {
14
- RESTRICTED_ASCENDANT_ATTRIBUTE,
15
- TOLGEE_ATTRIBUTE_NAME,
16
- } from '../Constants/Global';
17
- import { AbstractWrapper } from './AbstractWrapper';
18
-
19
- export class NodeHandler {
20
- constructor(
21
- private properties: Properties,
22
- private elementRegistrar: ElementRegistrar,
23
- private wrapper: AbstractWrapper
24
- ) {}
25
-
26
- static initParentElement(element: Element): ElementWithMeta {
27
- if (element[TOLGEE_ATTRIBUTE_NAME] === undefined) {
28
- element[TOLGEE_ATTRIBUTE_NAME] = {
29
- nodes: new Set(),
30
- } as ElementMeta;
31
- element.setAttribute(TOLGEE_ATTRIBUTE_NAME, '');
32
- }
33
-
34
- return element as ElementWithMeta;
35
- }
36
-
37
- filterRestricted<T extends Element | Text>(nodes: T[]) {
38
- const restrictedElements = this.properties.config.restrictedElements;
39
- return nodes.filter((n) => {
40
- const e = NodeHelper.closestElement(n);
41
- if (!e) {
42
- return false;
43
- }
44
- return (
45
- restrictedElements.indexOf(e.tagName.toLowerCase()) === -1 &&
46
- e.closest(`[${RESTRICTED_ASCENDANT_ATTRIBUTE}="true"]`) === null
47
- );
48
- });
49
- }
50
-
51
- async handleNodes(nodes: Array<Text | Attr>) {
52
- for (const textNode of nodes) {
53
- if (textNode[TOLGEE_ATTRIBUTE_NAME] === undefined) {
54
- textNode[TOLGEE_ATTRIBUTE_NAME] = {} as NodeLock;
55
- }
56
- const tolgeeData = textNode[TOLGEE_ATTRIBUTE_NAME] as
57
- | NodeMeta
58
- | NodeLock
59
- | undefined;
60
- if (tolgeeData?.locked !== true) {
61
- this.lockNode(textNode);
62
- const result = await this.wrapper.unwrap(
63
- NodeHelper.getNodeText(textNode)
64
- );
65
- if (result) {
66
- const { text, keys } = result;
67
- const translatedNode = this.translateChildNode(textNode, text, keys);
68
- const parentElement = this.getParentElement(translatedNode);
69
- parentElement._tolgee.nodes.add(translatedNode);
70
- this.elementRegistrar.register(parentElement);
71
- }
72
- this.unlockNode(textNode);
73
- }
74
- }
75
- }
76
-
77
- translateChildNode(
78
- node: Text | Attr,
79
- newValue,
80
- keys: KeyAndParamsTags<any>[]
81
- ) {
82
- node[TOLGEE_ATTRIBUTE_NAME] = {
83
- oldTextContent: NodeHelper.getNodeText(node),
84
- keys,
85
- };
86
- NodeHelper.setNodeText(node, newValue);
87
- return node as Node as NodeWithMeta;
88
- }
89
-
90
- private lockNode(node: Node | Attr): NodeWithLock {
91
- if (node[TOLGEE_ATTRIBUTE_NAME] === undefined) {
92
- node[TOLGEE_ATTRIBUTE_NAME] = {} as NodeLock;
93
- }
94
-
95
- const tolgeeData = node[TOLGEE_ATTRIBUTE_NAME] as NodeMeta | NodeLock;
96
- if (tolgeeData?.locked !== true) {
97
- tolgeeData.locked = true;
98
- }
99
-
100
- return node as NodeWithLock;
101
- }
102
-
103
- private unlockNode(node: Node | Attr) {
104
- if (node[TOLGEE_ATTRIBUTE_NAME]) {
105
- node[TOLGEE_ATTRIBUTE_NAME].locked = false;
106
- }
107
- }
108
-
109
- private getParentElement(node: Node) {
110
- const parent = this.getSuitableParent(node);
111
- return NodeHandler.initParentElement(parent);
112
- }
113
-
114
- private getSuitableParent(node: Node): Element {
115
- const domParent = NodeHelper.getParentElement(node);
116
-
117
- if (domParent === undefined) {
118
- // eslint-disable-next-line no-console
119
- console.error(node);
120
- throw new Error('No suitable parent found for node above.');
121
- }
122
-
123
- if (!this.properties.config.passToParent) {
124
- return domParent;
125
- }
126
-
127
- if (Array.isArray(this.properties.config.passToParent)) {
128
- const tagNameEquals = (elementTagName: string) =>
129
- domParent.tagName.toLowerCase() === elementTagName.toLowerCase();
130
- if (this.properties.config.passToParent.findIndex(tagNameEquals) === -1) {
131
- return domParent;
132
- }
133
- }
134
-
135
- if (typeof this.properties.config.passToParent === 'function') {
136
- if (!this.properties.config.passToParent(domParent)) {
137
- return domParent;
138
- }
139
- }
140
-
141
- return this.getSuitableParent(domParent);
142
- }
143
- }
@@ -1,28 +0,0 @@
1
- import { NodeHelper } from '../helpers/NodeHelper';
2
- import { NodeHandler } from './NodeHandler';
3
- import { ElementRegistrar } from '../services/ElementRegistrar';
4
- import { TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE } from '../Constants/Global';
5
-
6
- export class WrappedHandler {
7
- constructor(
8
- private elementRegistrar: ElementRegistrar,
9
- private nodeHandler: NodeHandler
10
- ) {}
11
-
12
- async handle(node: Node): Promise<void> {
13
- const xPath = `./descendant-or-self::*[@${TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE}]`;
14
- const nodes = NodeHelper.evaluate(xPath, node);
15
- const filtered: Element[] = this.nodeHandler.filterRestricted(
16
- nodes as Element[]
17
- );
18
- filtered.forEach((element) => {
19
- const elementWithMeta = NodeHandler.initParentElement(element);
20
- elementWithMeta._tolgee.wrappedWithElementOnlyKey = element.getAttribute(
21
- TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE
22
- );
23
- elementWithMeta._tolgee.wrappedWithElementOnlyDefaultHtml =
24
- element.innerHTML;
25
- this.elementRegistrar.register(elementWithMeta);
26
- });
27
- }
28
- }
@@ -1,23 +0,0 @@
1
- import { NodeHandler } from '../NodeHandler';
2
- import { Properties } from '../../Properties';
3
- import { NodeHelper } from '../../helpers/NodeHelper';
4
- import { INVISIBLE_CHARACTERS } from '../../helpers/secret';
5
-
6
- export class AttributeHandler {
7
- constructor(
8
- private properties: Properties,
9
- private nodeHandler: NodeHandler
10
- ) {}
11
-
12
- async handle(node: Element) {
13
- for (const [tag, attributes] of Object.entries(
14
- this.properties.config.tagAttributes
15
- )) {
16
- for (const attribute of attributes) {
17
- const expression = `descendant-or-self::${tag}/@${attribute}[contains(., '${INVISIBLE_CHARACTERS[0]}')]`;
18
- const nodes: Array<Attr | Text> = NodeHelper.evaluate(expression, node);
19
- await this.nodeHandler.handleNodes(nodes);
20
- }
21
- }
22
- }
23
- }
@@ -1,65 +0,0 @@
1
- import {
2
- decodeFromText,
3
- encodeMessage,
4
- removeSecrets,
5
- stringToCodePoints,
6
- } from '../../helpers/secret';
7
- import {
8
- KeyAndParams,
9
- TranslationTags,
10
- TranslationParamsTags,
11
- Unwrapped,
12
- } from '../../types';
13
- import { ValueMemory } from './ValueMemory';
14
-
15
- export class Coder {
16
- private keyMemory = new ValueMemory();
17
- private defaultMemory = new ValueMemory();
18
-
19
- unwrap(text: string): Unwrapped {
20
- const keysAndParams = [] as KeyAndParams[];
21
- const messages = decodeFromText(text);
22
-
23
- messages.forEach((msg) => {
24
- const [keyCode, defaultCode] = stringToCodePoints(msg);
25
- const key = this.keyMemory.numberToValue(keyCode);
26
- const defaultValue =
27
- defaultCode !== undefined
28
- ? this.defaultMemory.numberToValue(defaultCode)
29
- : undefined;
30
- keysAndParams.push({
31
- key: key,
32
- params: undefined,
33
- defaultValue,
34
- });
35
- });
36
-
37
- const result = removeSecrets(text);
38
-
39
- if (keysAndParams.length) {
40
- return { text: result, keys: keysAndParams };
41
- }
42
- return undefined;
43
- }
44
-
45
- public wrap(
46
- key: string,
47
- _params: TranslationParamsTags<any> = {},
48
- defaultValue: string | undefined = undefined,
49
- translation: string | any[] | undefined = undefined
50
- ): TranslationTags<any> {
51
- const codes = [this.keyMemory.valueToNumber(key)];
52
- if (defaultValue) {
53
- codes.push(this.defaultMemory.valueToNumber(defaultValue));
54
- }
55
-
56
- const value = translation || '';
57
- const invisibleMark = encodeMessage(String.fromCodePoint(...codes));
58
-
59
- return typeof value === 'string'
60
- ? value + invisibleMark
61
- : Array.isArray(value)
62
- ? [...value, invisibleMark]
63
- : [value, invisibleMark];
64
- }
65
- }
@@ -1,15 +0,0 @@
1
- import { NodeHelper } from '../../helpers/NodeHelper';
2
- import { INVISIBLE_CHARACTERS } from '../../helpers/secret';
3
- import { NodeHandler } from '../NodeHandler';
4
-
5
- export class ContentHandler {
6
- constructor(private nodeHandler: NodeHandler) {}
7
-
8
- async handle(node: Node): Promise<void> {
9
- const xPath = `./descendant-or-self::text()[contains(., '${INVISIBLE_CHARACTERS[0]}')]`;
10
- const nodes = NodeHelper.evaluate(xPath, node);
11
- const filtered: Text[] = this.nodeHandler.filterRestricted(nodes as Text[]);
12
-
13
- await this.nodeHandler.handleNodes(filtered);
14
- }
15
- }
@@ -1,17 +0,0 @@
1
- import { ContentHandler } from './ContentHandler';
2
- import { AttributeHandler } from './AttributeHandler';
3
- import { WrappedHandler } from '../WrappedHandler';
4
-
5
- export class CoreHandler {
6
- constructor(
7
- private textHandler: ContentHandler,
8
- private attributeHandler: AttributeHandler,
9
- private wrappedHandler: WrappedHandler
10
- ) {}
11
-
12
- public async handleSubtree(target: Element) {
13
- await this.attributeHandler.handle(target);
14
- await this.textHandler.handle(target);
15
- await this.wrappedHandler.handle(target);
16
- }
17
- }
@@ -1,59 +0,0 @@
1
- import { Properties } from '../../Properties';
2
- import { ElementRegistrar } from '../../services/ElementRegistrar';
3
- import { TranslationParams } from '../../types';
4
- import { NodeHandler } from '../NodeHandler';
5
- import { AttributeHandler } from './AttributeHandler';
6
- import { Coder } from './Coder';
7
- import { CoreHandler } from './CoreHandler';
8
- import { ContentHandler } from './ContentHandler';
9
- import { WrappedHandler } from '../WrappedHandler';
10
- import { AbstractWrapper } from '../AbstractWrapper';
11
-
12
- export class InvisibleWrapper implements AbstractWrapper {
13
- private coder: Coder;
14
- private coreHandler: CoreHandler;
15
- private attributeHandler: AttributeHandler;
16
- private wrappedHandler: WrappedHandler;
17
- private textHandler: ContentHandler;
18
- private nodeHandler: any;
19
- constructor(properties: Properties, elementRegistrar: ElementRegistrar) {
20
- this.coder = new Coder();
21
- this.nodeHandler = new NodeHandler(properties, elementRegistrar, this);
22
- this.textHandler = new ContentHandler(this.nodeHandler);
23
- this.attributeHandler = new AttributeHandler(properties, this.nodeHandler);
24
- this.wrappedHandler = new WrappedHandler(
25
- elementRegistrar,
26
- this.nodeHandler
27
- );
28
- this.coreHandler = new CoreHandler(
29
- this.textHandler,
30
- this.attributeHandler,
31
- this.wrappedHandler
32
- );
33
- }
34
-
35
- public handleText(node: Element) {
36
- return this.textHandler.handle(node);
37
- }
38
-
39
- public handleSubtree(node: Element) {
40
- return this.coreHandler.handleSubtree(node);
41
- }
42
-
43
- public handleAttribute(node: Element) {
44
- return this.attributeHandler.handle(node);
45
- }
46
-
47
- public wrap(
48
- key: string,
49
- params: TranslationParams = {},
50
- defaultValue: string | undefined = undefined,
51
- translation = ''
52
- ) {
53
- return this.coder.wrap(key, params, defaultValue, translation);
54
- }
55
-
56
- public unwrap(text: string) {
57
- return this.coder.unwrap(text);
58
- }
59
- }
@@ -1,25 +0,0 @@
1
- jest.dontMock('./ValueMemory');
2
- import { ValueMemory } from './ValueMemory';
3
-
4
- describe('Value memory', () => {
5
- let valueMemory: ValueMemory;
6
-
7
- beforeEach(() => {
8
- valueMemory = new ValueMemory();
9
- });
10
-
11
- it('stores key correctly', () => {
12
- const num = valueMemory.valueToNumber('abcd');
13
- expect(num).toEqual(0);
14
- expect(valueMemory.valueToNumber('abcd')).toEqual(0);
15
- });
16
-
17
- it('retrieves key correctly', () => {
18
- const num = valueMemory.valueToNumber('abcd');
19
- expect(valueMemory.numberToValue(num)).toEqual('abcd');
20
- });
21
-
22
- it('retrieves missing key correctly', () => {
23
- expect(valueMemory.numberToValue(100)).toEqual(undefined);
24
- });
25
- });
@@ -1,16 +0,0 @@
1
- export class ValueMemory {
2
- private values: string[] = [];
3
-
4
- public valueToNumber(key: string) {
5
- let index = this.values.indexOf(key);
6
- if (index === -1) {
7
- index = this.values.length;
8
- this.values.push(key);
9
- }
10
- return index;
11
- }
12
-
13
- public numberToValue(num: number) {
14
- return this.values[num];
15
- }
16
- }
@@ -1,118 +0,0 @@
1
- jest.dontMock('./AttributeHandler');
2
- jest.dontMock('./TextWrapper');
3
- jest.dontMock('../NodeHandler');
4
- jest.dontMock('../../services/EventService');
5
- jest.dontMock('../../helpers/NodeHelper.ts');
6
- jest.dontMock('../../services/DependencyService');
7
- jest.dontMock('../../TolgeeConfig');
8
-
9
- import { Properties } from '../../Properties';
10
- import { AttributeHandler } from './AttributeHandler';
11
- import { ElementWithMeta, NodeWithMeta, Unwrapped } from '../../types';
12
- import { NodeHelper } from '../../helpers/NodeHelper';
13
- import { createTestDom } from '@testFixtures/createTestDom';
14
- import { getMockedInstance } from '@testFixtures/mocked';
15
- import { ElementRegistrar } from '../../services/ElementRegistrar';
16
- import { DependencyService } from '../../services/DependencyService';
17
- import { Coder } from './Coder';
18
-
19
- describe('AttributeHandler', () => {
20
- let attributeHandler: AttributeHandler;
21
-
22
- const mockedKeys = [
23
- {
24
- key: 'dummyKey',
25
- params: { dummyParam: 'dummyValue' },
26
- },
27
- ];
28
-
29
- const mockedTranslateInner = (text) => {
30
- return {
31
- text: text.replace(/{{(.*?)}}/gs, '$1'),
32
- keys: mockedKeys,
33
- } as Unwrapped;
34
- };
35
-
36
- const gv = (key) => mockedTranslateInner(key).text;
37
- const mockedTranslate = jest.fn(mockedTranslateInner);
38
- let c: ReturnType<typeof createTestDom>;
39
-
40
- beforeEach(() => {
41
- c = createTestDom(document);
42
- const dependencyService = new DependencyService();
43
- dependencyService.init({});
44
- // @ts-ignore
45
- attributeHandler = dependencyService.wrapper.attributeHandler;
46
- getMockedInstance(Properties).config = {
47
- inputPrefix: '{{',
48
- inputSuffix: '}}',
49
- restrictedElements: [],
50
- tagAttributes: {
51
- '*': ['aria-label'],
52
- },
53
- passToParent: ['option'],
54
- wrapperMode: 'text',
55
- };
56
-
57
- getMockedInstance(Coder).unwrap = (...args) => mockedTranslate(...args);
58
- });
59
-
60
- afterEach(async () => {
61
- jest.clearAllMocks();
62
- });
63
-
64
- describe('in production mode', () => {
65
- let xPath: string;
66
-
67
- beforeEach(async () => {
68
- await attributeHandler.handle(document.body);
69
- xPath = `./div/div/@aria-label[contains(., '${gv(c.ariaLabelKey)}')]`;
70
- });
71
-
72
- test('Can be created', () => {
73
- expect(attributeHandler).not.toBeUndefined();
74
- });
75
-
76
- test('will handle text in aria-label attribute of div', async () => {
77
- expect(xPath).toBeFoundIn(document.body);
78
- });
79
-
80
- describe("Node's _tolgee property", () => {
81
- let node: NodeWithMeta;
82
-
83
- beforeEach(() => {
84
- node = NodeHelper.evaluateToSingle(
85
- xPath,
86
- document.body
87
- ) as NodeWithMeta;
88
- });
89
-
90
- test('will be defined', () => {
91
- expect(node._tolgee).toBeDefined();
92
- });
93
- });
94
-
95
- describe("Parent element's _tolgee property", () => {
96
- let element: ElementWithMeta;
97
- let node: NodeWithMeta;
98
-
99
- beforeEach(() => {
100
- node = NodeHelper.evaluateToSingle(xPath, document.body);
101
- element = (node as any as Attr).ownerElement as any as ElementWithMeta;
102
- });
103
-
104
- test('will be defined', () => {
105
- expect(element._tolgee).toBeDefined();
106
- });
107
- });
108
- });
109
-
110
- test('will register the node', async () => {
111
- await attributeHandler.handle(document.body);
112
- const xPath = `./div/div/@aria-label[contains(., '${gv(c.ariaLabelKey)}')]`;
113
- const node = NodeHelper.evaluateToSingle(xPath, document.body) as Attr;
114
- expect(getMockedInstance(ElementRegistrar).register).toBeCalledWith(
115
- node.ownerElement
116
- );
117
- });
118
- });
@@ -1,25 +0,0 @@
1
- import { NodeHandler } from '../NodeHandler';
2
- import { Properties } from '../../Properties';
3
- import { NodeHelper } from '../../helpers/NodeHelper';
4
-
5
- export class AttributeHandler {
6
- constructor(
7
- private properties: Properties,
8
- private nodeHandler: NodeHandler
9
- ) {}
10
-
11
- async handle(node: Element) {
12
- const inputPrefix = this.properties.config.inputPrefix;
13
- const inputSuffix = this.properties.config.inputSuffix;
14
-
15
- for (const [tag, attributes] of Object.entries(
16
- this.properties.config.tagAttributes
17
- )) {
18
- for (const attribute of attributes) {
19
- const expression = `descendant-or-self::${tag}/@${attribute}[contains(., '${inputPrefix}') and contains(., '${inputSuffix}')]`;
20
- const nodes: Array<Attr | Text> = NodeHelper.evaluate(expression, node);
21
- await this.nodeHandler.handleNodes(nodes);
22
- }
23
- }
24
- }
25
- }