@magmamath/students-features 1.3.23-rc.5 → 1.3.23-rc.7

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 (134) hide show
  1. package/dist/commonjs/features/translation/constants.js +11 -0
  2. package/dist/commonjs/features/translation/constants.js.map +1 -0
  3. package/dist/commonjs/features/translation/helpers.js +60 -0
  4. package/dist/commonjs/features/translation/helpers.js.map +1 -0
  5. package/dist/commonjs/features/translation/index.js +105 -0
  6. package/dist/commonjs/features/translation/index.js.map +1 -0
  7. package/dist/commonjs/features/translation/model/TranslationModel.js +122 -0
  8. package/dist/commonjs/features/translation/model/TranslationModel.js.map +1 -0
  9. package/dist/commonjs/features/translation/model/TranslationPreprocessor.js +142 -0
  10. package/dist/commonjs/features/translation/model/TranslationPreprocessor.js.map +1 -0
  11. package/dist/commonjs/features/translation/model/TranslationService.js +112 -0
  12. package/dist/commonjs/features/translation/model/TranslationService.js.map +1 -0
  13. package/dist/commonjs/features/translation/preserve/wordsToPreserve.js +314 -0
  14. package/dist/commonjs/features/translation/preserve/wordsToPreserve.js.map +1 -0
  15. package/dist/commonjs/features/translation/providers/google/GoogleTranslationProvider.js +43 -0
  16. package/dist/commonjs/features/translation/providers/google/GoogleTranslationProvider.js.map +1 -0
  17. package/dist/commonjs/features/translation/providers/google/supportedLanguages.js +203 -0
  18. package/dist/commonjs/features/translation/providers/google/supportedLanguages.js.map +1 -0
  19. package/dist/commonjs/features/translation/providers/google.types.js +2 -0
  20. package/dist/commonjs/features/translation/providers/google.types.js.map +1 -0
  21. package/dist/commonjs/features/translation/providers/translation.interface.js +35 -0
  22. package/dist/commonjs/features/translation/providers/translation.interface.js.map +1 -0
  23. package/dist/commonjs/features/translation/types.js +2 -0
  24. package/dist/commonjs/features/translation/types.js.map +1 -0
  25. package/dist/commonjs/features/voice/playing/model/VoiceTranscriptionTranslation.model.js +20 -6
  26. package/dist/commonjs/features/voice/playing/model/VoiceTranscriptionTranslation.model.js.map +1 -1
  27. package/dist/commonjs/features/voice/types.js.map +1 -1
  28. package/dist/commonjs/index.js +12 -0
  29. package/dist/commonjs/index.js.map +1 -1
  30. package/dist/module/features/translation/constants.js +7 -0
  31. package/dist/module/features/translation/constants.js.map +1 -0
  32. package/dist/module/features/translation/helpers.js +53 -0
  33. package/dist/module/features/translation/helpers.js.map +1 -0
  34. package/dist/module/features/translation/index.js +12 -0
  35. package/dist/module/features/translation/index.js.map +1 -0
  36. package/dist/module/features/translation/model/TranslationModel.js +117 -0
  37. package/dist/module/features/translation/model/TranslationModel.js.map +1 -0
  38. package/dist/module/features/translation/model/TranslationPreprocessor.js +137 -0
  39. package/dist/module/features/translation/model/TranslationPreprocessor.js.map +1 -0
  40. package/dist/module/features/translation/model/TranslationService.js +107 -0
  41. package/dist/module/features/translation/model/TranslationService.js.map +1 -0
  42. package/dist/module/features/translation/preserve/wordsToPreserve.js +310 -0
  43. package/dist/module/features/translation/preserve/wordsToPreserve.js.map +1 -0
  44. package/dist/module/features/translation/providers/google/GoogleTranslationProvider.js +38 -0
  45. package/dist/module/features/translation/providers/google/GoogleTranslationProvider.js.map +1 -0
  46. package/dist/module/features/translation/providers/google/supportedLanguages.js +199 -0
  47. package/dist/module/features/translation/providers/google/supportedLanguages.js.map +1 -0
  48. package/dist/module/features/translation/providers/google.types.js +2 -0
  49. package/dist/module/features/translation/providers/google.types.js.map +1 -0
  50. package/dist/module/features/translation/providers/translation.interface.js +30 -0
  51. package/dist/module/features/translation/providers/translation.interface.js.map +1 -0
  52. package/dist/module/features/translation/types.js +2 -0
  53. package/dist/module/features/translation/types.js.map +1 -0
  54. package/dist/module/features/voice/playing/model/VoiceTranscriptionTranslation.model.js +20 -6
  55. package/dist/module/features/voice/playing/model/VoiceTranscriptionTranslation.model.js.map +1 -1
  56. package/dist/module/features/voice/types.js.map +1 -1
  57. package/dist/module/index.js +1 -0
  58. package/dist/module/index.js.map +1 -1
  59. package/dist/typescript/commonjs/features/translation/constants.d.ts +5 -0
  60. package/dist/typescript/commonjs/features/translation/constants.d.ts.map +1 -0
  61. package/dist/typescript/commonjs/features/translation/helpers.d.ts +9 -0
  62. package/dist/typescript/commonjs/features/translation/helpers.d.ts.map +1 -0
  63. package/dist/typescript/commonjs/features/translation/index.d.ts +12 -0
  64. package/dist/typescript/commonjs/features/translation/index.d.ts.map +1 -0
  65. package/dist/typescript/commonjs/features/translation/model/TranslationModel.d.ts +33 -0
  66. package/dist/typescript/commonjs/features/translation/model/TranslationModel.d.ts.map +1 -0
  67. package/dist/typescript/commonjs/features/translation/model/TranslationPreprocessor.d.ts +34 -0
  68. package/dist/typescript/commonjs/features/translation/model/TranslationPreprocessor.d.ts.map +1 -0
  69. package/dist/typescript/commonjs/features/translation/model/TranslationService.d.ts +40 -0
  70. package/dist/typescript/commonjs/features/translation/model/TranslationService.d.ts.map +1 -0
  71. package/dist/typescript/commonjs/features/translation/preserve/wordsToPreserve.d.ts +3 -0
  72. package/dist/typescript/commonjs/features/translation/preserve/wordsToPreserve.d.ts.map +1 -0
  73. package/dist/typescript/commonjs/features/translation/providers/google/GoogleTranslationProvider.d.ts +16 -0
  74. package/dist/typescript/commonjs/features/translation/providers/google/GoogleTranslationProvider.d.ts.map +1 -0
  75. package/dist/typescript/commonjs/features/translation/providers/google/supportedLanguages.d.ts +197 -0
  76. package/dist/typescript/commonjs/features/translation/providers/google/supportedLanguages.d.ts.map +1 -0
  77. package/dist/typescript/commonjs/features/translation/providers/google.types.d.ts +15 -0
  78. package/dist/typescript/commonjs/features/translation/providers/google.types.d.ts.map +1 -0
  79. package/dist/typescript/commonjs/features/translation/providers/translation.interface.d.ts +23 -0
  80. package/dist/typescript/commonjs/features/translation/providers/translation.interface.d.ts.map +1 -0
  81. package/dist/typescript/commonjs/features/translation/types.d.ts +27 -0
  82. package/dist/typescript/commonjs/features/translation/types.d.ts.map +1 -0
  83. package/dist/typescript/commonjs/features/voice/playing/model/VoiceTranscriptionTranslation.model.d.ts +1 -1
  84. package/dist/typescript/commonjs/features/voice/playing/model/VoiceTranscriptionTranslation.model.d.ts.map +1 -1
  85. package/dist/typescript/commonjs/features/voice/types.d.ts +2 -15
  86. package/dist/typescript/commonjs/features/voice/types.d.ts.map +1 -1
  87. package/dist/typescript/commonjs/index.d.ts +1 -0
  88. package/dist/typescript/commonjs/index.d.ts.map +1 -1
  89. package/dist/typescript/module/features/translation/constants.d.ts +5 -0
  90. package/dist/typescript/module/features/translation/constants.d.ts.map +1 -0
  91. package/dist/typescript/module/features/translation/helpers.d.ts +9 -0
  92. package/dist/typescript/module/features/translation/helpers.d.ts.map +1 -0
  93. package/dist/typescript/module/features/translation/index.d.ts +12 -0
  94. package/dist/typescript/module/features/translation/index.d.ts.map +1 -0
  95. package/dist/typescript/module/features/translation/model/TranslationModel.d.ts +33 -0
  96. package/dist/typescript/module/features/translation/model/TranslationModel.d.ts.map +1 -0
  97. package/dist/typescript/module/features/translation/model/TranslationPreprocessor.d.ts +34 -0
  98. package/dist/typescript/module/features/translation/model/TranslationPreprocessor.d.ts.map +1 -0
  99. package/dist/typescript/module/features/translation/model/TranslationService.d.ts +40 -0
  100. package/dist/typescript/module/features/translation/model/TranslationService.d.ts.map +1 -0
  101. package/dist/typescript/module/features/translation/preserve/wordsToPreserve.d.ts +3 -0
  102. package/dist/typescript/module/features/translation/preserve/wordsToPreserve.d.ts.map +1 -0
  103. package/dist/typescript/module/features/translation/providers/google/GoogleTranslationProvider.d.ts +16 -0
  104. package/dist/typescript/module/features/translation/providers/google/GoogleTranslationProvider.d.ts.map +1 -0
  105. package/dist/typescript/module/features/translation/providers/google/supportedLanguages.d.ts +197 -0
  106. package/dist/typescript/module/features/translation/providers/google/supportedLanguages.d.ts.map +1 -0
  107. package/dist/typescript/module/features/translation/providers/google.types.d.ts +15 -0
  108. package/dist/typescript/module/features/translation/providers/google.types.d.ts.map +1 -0
  109. package/dist/typescript/module/features/translation/providers/translation.interface.d.ts +23 -0
  110. package/dist/typescript/module/features/translation/providers/translation.interface.d.ts.map +1 -0
  111. package/dist/typescript/module/features/translation/types.d.ts +27 -0
  112. package/dist/typescript/module/features/translation/types.d.ts.map +1 -0
  113. package/dist/typescript/module/features/voice/playing/model/VoiceTranscriptionTranslation.model.d.ts +1 -1
  114. package/dist/typescript/module/features/voice/playing/model/VoiceTranscriptionTranslation.model.d.ts.map +1 -1
  115. package/dist/typescript/module/features/voice/types.d.ts +2 -15
  116. package/dist/typescript/module/features/voice/types.d.ts.map +1 -1
  117. package/dist/typescript/module/index.d.ts +1 -0
  118. package/dist/typescript/module/index.d.ts.map +1 -1
  119. package/package.json +1 -1
  120. package/src/features/translation/constants.ts +4 -0
  121. package/src/features/translation/helpers.ts +63 -0
  122. package/src/features/translation/index.ts +30 -0
  123. package/src/features/translation/model/TranslationModel.ts +174 -0
  124. package/src/features/translation/model/TranslationPreprocessor.ts +171 -0
  125. package/src/features/translation/model/TranslationService.ts +148 -0
  126. package/src/features/translation/preserve/wordsToPreserve.ts +87 -0
  127. package/src/features/translation/providers/google/GoogleTranslationProvider.ts +34 -0
  128. package/src/features/translation/providers/google/supportedLanguages.ts +196 -0
  129. package/src/features/translation/providers/google.types.ts +16 -0
  130. package/src/features/translation/providers/translation.interface.ts +49 -0
  131. package/src/features/translation/types.ts +30 -0
  132. package/src/features/voice/playing/model/VoiceTranscriptionTranslation.model.ts +21 -7
  133. package/src/features/voice/types.ts +6 -14
  134. package/src/index.ts +1 -0
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PRACTICE_THEORY_CACHE_KEY_SUFFIX = exports.GBD_TEXT_CACHE_SUFFIX = exports.DESCRIPTION_CACHE_KEY_SUFFIX = exports.CHOICES_CACHE_KEY_SUFFIX = void 0;
7
+ const GBD_TEXT_CACHE_SUFFIX = exports.GBD_TEXT_CACHE_SUFFIX = '::gbd';
8
+ const DESCRIPTION_CACHE_KEY_SUFFIX = exports.DESCRIPTION_CACHE_KEY_SUFFIX = '::description';
9
+ const CHOICES_CACHE_KEY_SUFFIX = exports.CHOICES_CACHE_KEY_SUFFIX = '::choices';
10
+ const PRACTICE_THEORY_CACHE_KEY_SUFFIX = exports.PRACTICE_THEORY_CACHE_KEY_SUFFIX = '::practice-theory';
11
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GBD_TEXT_CACHE_SUFFIX","exports","DESCRIPTION_CACHE_KEY_SUFFIX","CHOICES_CACHE_KEY_SUFFIX","PRACTICE_THEORY_CACHE_KEY_SUFFIX"],"sourceRoot":"../../../../src","sources":["features/translation/constants.ts"],"mappings":";;;;;;AAAO,MAAMA,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAG,OAAO;AACrC,MAAME,4BAA4B,GAAAD,OAAA,CAAAC,4BAAA,GAAG,eAAe;AACpD,MAAMC,wBAAwB,GAAAF,OAAA,CAAAE,wBAAA,GAAG,WAAW;AAC5C,MAAMC,gCAAgC,GAAAH,OAAA,CAAAG,gCAAA,GAAG,mBAAmB","ignoreList":[]}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.maskSegment = exports.decodeHtmlEntities = void 0;
7
+ exports.replaceMappedTokens = replaceMappedTokens;
8
+ function replaceMappedTokens(input, map) {
9
+ let result = input;
10
+ for (const [original, override] of Object.entries(map)) {
11
+ const escaped = original.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
12
+ const regex = new RegExp(`\\b${escaped}\\b`, 'gi');
13
+ result = result.replace(regex, override);
14
+ }
15
+ return result;
16
+ }
17
+
18
+ /**
19
+ * Masks text segments matched by `regex` with a placeholder,
20
+ * while preserving spaces around the original match.
21
+ */
22
+ const maskSegment = ({
23
+ text,
24
+ regex,
25
+ placeholder,
26
+ replacements,
27
+ shouldSkip
28
+ }) => {
29
+ return text.replace(regex, (match, ...args) => {
30
+ if (shouldSkip?.(match)) return match;
31
+ const offset = args[args.length - 2];
32
+ const input = args[args.length - 1];
33
+ const before = offset > 0 ? input[offset - 1] : '';
34
+ const afterIdx = offset + match.length;
35
+ const after = afterIdx < input.length ? input[afterIdx] : '';
36
+ const leftPad = /\s/.test(before);
37
+ const rightPad = /\s/.test(after);
38
+ replacements.push({
39
+ placeholder,
40
+ original: match,
41
+ leftPad,
42
+ rightPad
43
+ });
44
+ return placeholder;
45
+ });
46
+ };
47
+ exports.maskSegment = maskSegment;
48
+ const HTML_NAMED_ENTITIES = {
49
+ '&amp;': '&',
50
+ '&lt;': '<',
51
+ '&gt;': '>',
52
+ '&quot;': '"',
53
+ '&apos;': "'",
54
+ '&nbsp;': ' '
55
+ };
56
+ const decodeHtmlEntities = text => {
57
+ return text.replace(/&#(\d+);/g, (_, code) => String.fromCharCode(parseInt(code, 10))).replace(/&#x([0-9a-f]+);/gi, (_, code) => String.fromCharCode(parseInt(code, 16))).replace(/&(amp|lt|gt|quot|apos|nbsp);/g, match => HTML_NAMED_ENTITIES[match] ?? match);
58
+ };
59
+ exports.decodeHtmlEntities = decodeHtmlEntities;
60
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["replaceMappedTokens","input","map","result","original","override","Object","entries","escaped","replace","regex","RegExp","maskSegment","text","placeholder","replacements","shouldSkip","match","args","offset","length","before","afterIdx","after","leftPad","test","rightPad","push","exports","HTML_NAMED_ENTITIES","decodeHtmlEntities","_","code","String","fromCharCode","parseInt"],"sourceRoot":"../../../../src","sources":["features/translation/helpers.ts"],"mappings":";;;;;;;AAEO,SAASA,mBAAmBA,CAACC,KAAa,EAAEC,GAA2B,EAAU;EACtF,IAAIC,MAAM,GAAGF,KAAK;EAElB,KAAK,MAAM,CAACG,QAAQ,EAAEC,QAAQ,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,GAAG,CAAC,EAAE;IACtD,MAAMM,OAAO,GAAGJ,QAAQ,CAACK,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;IAC/D,MAAMC,KAAK,GAAG,IAAIC,MAAM,CAAC,MAAMH,OAAO,KAAK,EAAE,IAAI,CAAC;IAElDL,MAAM,GAAGA,MAAM,CAACM,OAAO,CAACC,KAAK,EAAEL,QAAQ,CAAC;EAC1C;EAEA,OAAOF,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACO,MAAMS,WAAW,GAAGA,CAAC;EAC1BC,IAAI;EACJH,KAAK;EACLI,WAAW;EACXC,YAAY;EACZC;AACiB,CAAC,KAAa;EAC/B,OAAOH,IAAI,CAACJ,OAAO,CAACC,KAAK,EAAE,CAACO,KAAK,EAAE,GAAGC,IAAI,KAAK;IAC7C,IAAIF,UAAU,GAAGC,KAAK,CAAC,EAAE,OAAOA,KAAK;IAErC,MAAME,MAAM,GAAGD,IAAI,CAACA,IAAI,CAACE,MAAM,GAAG,CAAC,CAAW;IAC9C,MAAMnB,KAAK,GAAGiB,IAAI,CAACA,IAAI,CAACE,MAAM,GAAG,CAAC,CAAW;IAE7C,MAAMC,MAAM,GAAGF,MAAM,GAAG,CAAC,GAAGlB,KAAK,CAACkB,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE;IAClD,MAAMG,QAAQ,GAAGH,MAAM,GAAGF,KAAK,CAACG,MAAM;IACtC,MAAMG,KAAK,GAAGD,QAAQ,GAAGrB,KAAK,CAACmB,MAAM,GAAGnB,KAAK,CAACqB,QAAQ,CAAC,GAAG,EAAE;IAE5D,MAAME,OAAO,GAAG,IAAI,CAACC,IAAI,CAACJ,MAAM,CAAC;IACjC,MAAMK,QAAQ,GAAG,IAAI,CAACD,IAAI,CAACF,KAAK,CAAC;IAEjCR,YAAY,CAACY,IAAI,CAAC;MAAEb,WAAW;MAAEV,QAAQ,EAAEa,KAAK;MAAEO,OAAO;MAAEE;IAAS,CAAC,CAAC;IAEtE,OAAOZ,WAAW;EACpB,CAAC,CAAC;AACJ,CAAC;AAAAc,OAAA,CAAAhB,WAAA,GAAAA,WAAA;AAED,MAAMiB,mBAA2C,GAAG;EAClD,OAAO,EAAE,GAAG;EACZ,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,QAAQ,EAAE,GAAG;EACb,QAAQ,EAAE,GAAG;EACb,QAAQ,EAAE;AACZ,CAAC;AAEM,MAAMC,kBAAkB,GAAIjB,IAAY,IAAa;EAC1D,OAAOA,IAAI,CACRJ,OAAO,CAAC,WAAW,EAAE,CAACsB,CAAC,EAAEC,IAAY,KAAKC,MAAM,CAACC,YAAY,CAACC,QAAQ,CAACH,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAClFvB,OAAO,CAAC,mBAAmB,EAAE,CAACsB,CAAC,EAAEC,IAAY,KAAKC,MAAM,CAACC,YAAY,CAACC,QAAQ,CAACH,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAC1FvB,OAAO,CACN,+BAA+B,EAC9BQ,KAAK,IAAKY,mBAAmB,CAACZ,KAAK,CAAC,IAAIA,KAC3C,CAAC;AACL,CAAC;AAAAW,OAAA,CAAAE,kBAAA,GAAAA,kBAAA","ignoreList":[]}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "CHOICES_CACHE_KEY_SUFFIX", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _constants.CHOICES_CACHE_KEY_SUFFIX;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "DESCRIPTION_CACHE_KEY_SUFFIX", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _constants.DESCRIPTION_CACHE_KEY_SUFFIX;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "GBD_TEXT_CACHE_SUFFIX", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _constants.GBD_TEXT_CACHE_SUFFIX;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "GoogleTranslateLanguage", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _supportedLanguages.GoogleTranslateLanguage;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "GoogleTranslationProvider", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _GoogleTranslationProvider.GoogleTranslationProvider;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "PRACTICE_THEORY_CACHE_KEY_SUFFIX", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _constants.PRACTICE_THEORY_CACHE_KEY_SUFFIX;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "TranslationKatexPreprocessor", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _TranslationPreprocessor.TranslationKatexPreprocessor;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "TranslationModel", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _TranslationModel.TranslationModel;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "TranslationProvider", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _translationInterface.TranslationProvider;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "TranslationService", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _TranslationService.TranslationService;
64
+ }
65
+ });
66
+ Object.defineProperty(exports, "decodeHtmlEntities", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _helpers.decodeHtmlEntities;
70
+ }
71
+ });
72
+ Object.defineProperty(exports, "maskSegment", {
73
+ enumerable: true,
74
+ get: function () {
75
+ return _helpers.maskSegment;
76
+ }
77
+ });
78
+ Object.defineProperty(exports, "preservedWordsReplacers", {
79
+ enumerable: true,
80
+ get: function () {
81
+ return _wordsToPreserve.preservedWordsReplacers;
82
+ }
83
+ });
84
+ Object.defineProperty(exports, "replaceMappedTokens", {
85
+ enumerable: true,
86
+ get: function () {
87
+ return _helpers.replaceMappedTokens;
88
+ }
89
+ });
90
+ Object.defineProperty(exports, "wordsToPreserve", {
91
+ enumerable: true,
92
+ get: function () {
93
+ return _wordsToPreserve.wordsToPreserve;
94
+ }
95
+ });
96
+ var _TranslationModel = require("./model/TranslationModel.js");
97
+ var _TranslationService = require("./model/TranslationService.js");
98
+ var _TranslationPreprocessor = require("./model/TranslationPreprocessor.js");
99
+ var _translationInterface = require("./providers/translation.interface.js");
100
+ var _GoogleTranslationProvider = require("./providers/google/GoogleTranslationProvider.js");
101
+ var _supportedLanguages = require("./providers/google/supportedLanguages.js");
102
+ var _wordsToPreserve = require("./preserve/wordsToPreserve.js");
103
+ var _constants = require("./constants.js");
104
+ var _helpers = require("./helpers.js");
105
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_TranslationModel","require","_TranslationService","_TranslationPreprocessor","_translationInterface","_GoogleTranslationProvider","_supportedLanguages","_wordsToPreserve","_constants","_helpers"],"sourceRoot":"../../../../src","sources":["features/translation/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,wBAAA,GAAAF,OAAA;AACA,IAAAG,qBAAA,GAAAH,OAAA;AACA,IAAAI,0BAAA,GAAAJ,OAAA;AACA,IAAAK,mBAAA,GAAAL,OAAA;AAMA,IAAAM,gBAAA,GAAAN,OAAA;AACA,IAAAO,UAAA,GAAAP,OAAA;AAMA,IAAAQ,QAAA,GAAAR,OAAA","ignoreList":[]}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TranslationModel = void 0;
7
+ var _effector = require("effector");
8
+ var _GoogleTranslationProvider = require("../providers/google/GoogleTranslationProvider.js");
9
+ var _TranslationService = require("./TranslationService.js");
10
+ var _wordsToPreserve = require("../preserve/wordsToPreserve.js");
11
+ var _constants = require("../constants.js");
12
+ class TranslationModel {
13
+ toggle = (0, _effector.createEvent)();
14
+ setTranslated = (0, _effector.createEvent)();
15
+ reset = (0, _effector.createEvent)();
16
+ $isTranslationActive = (0, _effector.restore)(this.setTranslated, false).reset(this.reset);
17
+ $isTranslated = this.$isTranslationActive;
18
+ constructor({
19
+ $problem,
20
+ $problemId,
21
+ $assignmentId,
22
+ $currentProblemIndex,
23
+ $translationLanguageCode,
24
+ $contentLanguageCode,
25
+ $isTranslationLocked,
26
+ languageChanged,
27
+ api,
28
+ getGreatWorkFeedbackText
29
+ }) {
30
+ this.service = new _TranslationService.TranslationService({
31
+ preserve: {
32
+ map: _wordsToPreserve.wordsToPreserve,
33
+ replacers: _wordsToPreserve.preservedWordsReplacers
34
+ },
35
+ providers: [new _GoogleTranslationProvider.GoogleTranslationProvider({
36
+ api
37
+ })],
38
+ onError: () => this.reset()
39
+ });
40
+ this.service.bindCustomCacheKey($problemId, (problemId, {
41
+ target
42
+ }) => `${problemId}::${target}`);
43
+ this.service.bindTargetLanguage($translationLanguageCode);
44
+ if ($contentLanguageCode) {
45
+ this.service.bindSourceLanguage($contentLanguageCode);
46
+ }
47
+ this.translateAllFx = (0, _effector.attach)({
48
+ source: {
49
+ problem: $problem,
50
+ translationLanguageCode: $translationLanguageCode
51
+ },
52
+ mapParams: (_, source) => source,
53
+ effect: (0, _effector.createEffect)(({
54
+ problem,
55
+ translationLanguageCode
56
+ }) => {
57
+ if (!problem) return;
58
+ const promises = [this.service.translate(problem.richDescription || problem.description, {
59
+ cacheKeySuffix: _constants.DESCRIPTION_CACHE_KEY_SUFFIX
60
+ }), this.service.translate(problem.answerVariants, {
61
+ cacheKeySuffix: _constants.CHOICES_CACHE_KEY_SUFFIX
62
+ })];
63
+ if (getGreatWorkFeedbackText) {
64
+ promises.push(this.service.translate(getGreatWorkFeedbackText(), {
65
+ cacheKey: `${translationLanguageCode}${_constants.GBD_TEXT_CACHE_SUFFIX}`
66
+ }));
67
+ }
68
+ return Promise.all(promises);
69
+ })
70
+ });
71
+ this.translateFx = (0, _effector.createEffect)(({
72
+ cacheKey,
73
+ text
74
+ }) => {
75
+ return this.service.translate(text, {
76
+ cacheKey
77
+ });
78
+ });
79
+ this.$isTranslationActive.on(this.translateAllFx.doneData, () => true);
80
+ this.$isTranslationActive.on(this.translateAllFx.fail, () => false);
81
+ (0, _effector.split)({
82
+ source: (0, _effector.sample)({
83
+ clock: this.toggle,
84
+ source: this.$isTranslationActive
85
+ }),
86
+ match: {
87
+ on: isTranslated => !isTranslated,
88
+ off: isTranslated => isTranslated
89
+ },
90
+ cases: {
91
+ on: this.translateAllFx,
92
+ off: this.reset
93
+ }
94
+ });
95
+ (0, _effector.sample)({
96
+ clock: languageChanged,
97
+ fn: () => false,
98
+ target: this.setTranslated
99
+ });
100
+ (0, _effector.sample)({
101
+ clock: [$currentProblemIndex, $assignmentId, this.$isTranslationActive],
102
+ source: {
103
+ isTranslated: this.$isTranslationActive,
104
+ isLocked: $isTranslationLocked
105
+ },
106
+ filter: ({
107
+ isTranslated,
108
+ isLocked
109
+ }) => isLocked || isTranslated,
110
+ target: this.translateAllFx
111
+ });
112
+ this.$isTranslationPending = (0, _effector.combine)(this.translateAllFx.pending, this.translateFx.pending, (isAllPending, isOnePending) => isAllPending || isOnePending);
113
+ }
114
+ getTranslated(key) {
115
+ return this.service.getCached(key);
116
+ }
117
+ clearCache() {
118
+ this.service.reset();
119
+ }
120
+ }
121
+ exports.TranslationModel = TranslationModel;
122
+ //# sourceMappingURL=TranslationModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_effector","require","_GoogleTranslationProvider","_TranslationService","_wordsToPreserve","_constants","TranslationModel","toggle","createEvent","setTranslated","reset","$isTranslationActive","restore","$isTranslated","constructor","$problem","$problemId","$assignmentId","$currentProblemIndex","$translationLanguageCode","$contentLanguageCode","$isTranslationLocked","languageChanged","api","getGreatWorkFeedbackText","service","TranslationService","preserve","map","wordsToPreserve","replacers","preservedWordsReplacers","providers","GoogleTranslationProvider","onError","bindCustomCacheKey","problemId","target","bindTargetLanguage","bindSourceLanguage","translateAllFx","attach","source","problem","translationLanguageCode","mapParams","_","effect","createEffect","promises","translate","richDescription","description","cacheKeySuffix","DESCRIPTION_CACHE_KEY_SUFFIX","answerVariants","CHOICES_CACHE_KEY_SUFFIX","push","cacheKey","GBD_TEXT_CACHE_SUFFIX","Promise","all","translateFx","text","on","doneData","fail","split","sample","clock","match","isTranslated","off","cases","fn","isLocked","filter","$isTranslationPending","combine","pending","isAllPending","isOnePending","getTranslated","key","getCached","clearCache","exports"],"sourceRoot":"../../../../../src","sources":["features/translation/model/TranslationModel.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TranslationKatexPreprocessor = void 0;
7
+ var _helpers = require("../helpers.js");
8
+ const KATEX_REGEX = /\$(.+?)\$/g;
9
+ const NEWLINE_REGEX = /\n/g;
10
+ const QUOTE_REGEX = /\\(['"])/g;
11
+ const DOLLAR_REGEX = /\\\$/gm;
12
+ const COMMA_REGEX = /,/gm;
13
+ const DOT_REGEX = /\./gm;
14
+ const wrapNoTranslate = content => `<span translate="no">${content}</span>`;
15
+ const KATEX_PLACEHOLDER = wrapNoTranslate('{{@}}');
16
+ const NEWLINE__PLACEHOLDER = wrapNoTranslate('{{#}}');
17
+ const QUOTE_PLACEHOLDER = wrapNoTranslate('{{""}}');
18
+ const DOLLAR_PLACEHOLDER = wrapNoTranslate('{{!}}');
19
+ const COMMA_PLACEHOLDER = wrapNoTranslate('{{,}}');
20
+ const DOT_PLACEHOLDER = wrapNoTranslate('{{.}}');
21
+ const defaultOrderedReplacersMap = [[DOLLAR_REGEX, DOLLAR_PLACEHOLDER], [KATEX_REGEX, KATEX_PLACEHOLDER], [NEWLINE_REGEX, NEWLINE__PLACEHOLDER], [QUOTE_REGEX, QUOTE_PLACEHOLDER], [COMMA_REGEX, COMMA_PLACEHOLDER], [DOT_REGEX, DOT_PLACEHOLDER]];
22
+ class TranslationKatexPreprocessor {
23
+ static plaintextConverter = text => text;
24
+ static setPlaintextConverter(converter) {
25
+ this.plaintextConverter = converter;
26
+ }
27
+ static shouldSkipTranslation(text = '') {
28
+ if (Array.isArray(text)) {
29
+ return text.every(t => this.isMathExpressionOnly(t) || this.isSingleLetter(t) || this.isMathSymbolsOnly(t));
30
+ }
31
+ return this.isMathExpressionOnly(text) || this.isSingleLetter(text) || this.isMathSymbolsOnly(text);
32
+ }
33
+ static isMathExpressionOnly(text) {
34
+ return /^[\d\s+\-*/^=().\\><%!|]+$/.test(text.trim());
35
+ }
36
+ static isSingleLetter(text) {
37
+ return /^[a-zA-Z]$/.test(text);
38
+ }
39
+ static isMathSymbolsOnly(text) {
40
+ const plainText = this.plaintextConverter(text);
41
+ const cleanedUp = plainText.replace(/(\\\\|\\|\$|\−|\+|\=|\*|kr|pln|€|£|x|y|\{|\}|\÷)/gi, '');
42
+ const mathOnlyRegex = /^(?=.*\d)[0-9+\-×÷*/^().\s]+$/u;
43
+ return cleanedUp.length > 0 && mathOnlyRegex.test(cleanedUp);
44
+ }
45
+ globalTargetLanguage = null;
46
+ preserveWordsMap = {};
47
+ preserveWordsReplacers = [];
48
+ normalizePlaceholderSpacing(text) {
49
+ return text.replace(/\s+(<span[^>]*translate="no"[^>]*>)/g, '$1').replace(/(<\/span>)\s+/g, '$1');
50
+ }
51
+ sanitize(text) {
52
+ const language = this.globalTargetLanguage ?? '';
53
+ const replacements = [];
54
+ let sanitizedText = text;
55
+ defaultOrderedReplacersMap.forEach(([regex, placeholder]) => {
56
+ sanitizedText = (0, _helpers.maskSegment)({
57
+ text: sanitizedText,
58
+ regex,
59
+ placeholder,
60
+ replacements
61
+ });
62
+ });
63
+ this.preserveWordsReplacers.forEach(([regex, placeholder]) => {
64
+ const preserveWordsMapTarget = this.preserveWordsMap[language];
65
+ sanitizedText = (0, _helpers.maskSegment)({
66
+ text: sanitizedText,
67
+ regex,
68
+ placeholder,
69
+ replacements,
70
+ shouldSkip: match => this.skipCustomReplacerSanitizeWithoutGlossary(match, preserveWordsMapTarget)
71
+ });
72
+ });
73
+ return {
74
+ sanitized: sanitizedText,
75
+ replacements
76
+ };
77
+ }
78
+ restore(text, replacements) {
79
+ let restored = this.normalizePlaceholderSpacing(text);
80
+ replacements.forEach(({
81
+ placeholder,
82
+ original,
83
+ leftPad,
84
+ rightPad
85
+ }) => {
86
+ const wrapped = `${leftPad ? ' ' : ''}${original}${rightPad ? ' ' : ''}`;
87
+ restored = restored.replace(placeholder, wrapped);
88
+ });
89
+ return this.applyPreserved(restored);
90
+ }
91
+ sanitizeBatch(texts) {
92
+ const sanitized = [];
93
+ const replacements = [];
94
+ texts.forEach(t => {
95
+ const {
96
+ sanitized: s,
97
+ replacements: r
98
+ } = this.sanitize(t);
99
+ sanitized.push(s);
100
+ replacements.push(r);
101
+ });
102
+ return {
103
+ sanitized,
104
+ replacements
105
+ };
106
+ }
107
+ restoreBatch(texts, replacementsArray) {
108
+ return texts.map((t, i) => {
109
+ const restored = this.restore(t, replacementsArray[i]);
110
+ return this.applyPreserved(restored);
111
+ });
112
+ }
113
+
114
+ // Glossaries apply after translation response and do not remove words from payload.
115
+ // This replaces words from the string before sending request to API to completely avoid
116
+ // translating it. We use it to avoid "context localization" e.g. Google API changes numbers
117
+ // when units are passed and target language is from a different region. We must preserve
118
+ // words like "miles" and the exact number in this case.
119
+ setupPreservable({
120
+ glossaryToPreserve,
121
+ preserveWordsReplacers
122
+ }) {
123
+ this.preserveWordsMap = glossaryToPreserve;
124
+ this.preserveWordsReplacers = preserveWordsReplacers;
125
+ }
126
+ setupTarget(language) {
127
+ this.globalTargetLanguage = language;
128
+ }
129
+ skipCustomReplacerSanitizeWithoutGlossary(match, preserveWordsMapTarget) {
130
+ if (!preserveWordsMapTarget) return true;
131
+ const normalized = match.toLowerCase();
132
+ const glossaryKeys = Object.keys(preserveWordsMapTarget).map(key => key.toLowerCase());
133
+ return !glossaryKeys.includes(normalized);
134
+ }
135
+ applyPreserved(restored) {
136
+ const language = this.globalTargetLanguage ?? '';
137
+ const preservedMap = this.preserveWordsMap[language];
138
+ return preservedMap ? (0, _helpers.replaceMappedTokens)(restored, preservedMap) : restored;
139
+ }
140
+ }
141
+ exports.TranslationKatexPreprocessor = TranslationKatexPreprocessor;
142
+ //# sourceMappingURL=TranslationPreprocessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_helpers","require","KATEX_REGEX","NEWLINE_REGEX","QUOTE_REGEX","DOLLAR_REGEX","COMMA_REGEX","DOT_REGEX","wrapNoTranslate","content","KATEX_PLACEHOLDER","NEWLINE__PLACEHOLDER","QUOTE_PLACEHOLDER","DOLLAR_PLACEHOLDER","COMMA_PLACEHOLDER","DOT_PLACEHOLDER","defaultOrderedReplacersMap","TranslationKatexPreprocessor","plaintextConverter","text","setPlaintextConverter","converter","shouldSkipTranslation","Array","isArray","every","t","isMathExpressionOnly","isSingleLetter","isMathSymbolsOnly","test","trim","plainText","cleanedUp","replace","mathOnlyRegex","length","globalTargetLanguage","preserveWordsMap","preserveWordsReplacers","normalizePlaceholderSpacing","sanitize","language","replacements","sanitizedText","forEach","regex","placeholder","maskSegment","preserveWordsMapTarget","shouldSkip","match","skipCustomReplacerSanitizeWithoutGlossary","sanitized","restore","restored","original","leftPad","rightPad","wrapped","applyPreserved","sanitizeBatch","texts","s","r","push","restoreBatch","replacementsArray","map","i","setupPreservable","glossaryToPreserve","setupTarget","normalized","toLowerCase","glossaryKeys","Object","keys","key","includes","preservedMap","replaceMappedTokens","exports"],"sourceRoot":"../../../../../src","sources":["features/translation/model/TranslationPreprocessor.ts"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AAGA,MAAMC,WAAW,GAAG,YAAY;AAChC,MAAMC,aAAa,GAAG,KAAK;AAC3B,MAAMC,WAAW,GAAG,WAAW;AAC/B,MAAMC,YAAY,GAAG,QAAQ;AAC7B,MAAMC,WAAW,GAAG,KAAK;AACzB,MAAMC,SAAS,GAAG,MAAM;AAExB,MAAMC,eAAe,GAAIC,OAAe,IAAK,wBAAwBA,OAAO,SAAS;AAErF,MAAMC,iBAAiB,GAAGF,eAAe,CAAC,OAAO,CAAC;AAClD,MAAMG,oBAAoB,GAAGH,eAAe,CAAC,OAAO,CAAC;AACrD,MAAMI,iBAAiB,GAAGJ,eAAe,CAAC,QAAQ,CAAC;AACnD,MAAMK,kBAAkB,GAAGL,eAAe,CAAC,OAAO,CAAC;AACnD,MAAMM,iBAAiB,GAAGN,eAAe,CAAC,OAAO,CAAC;AAClD,MAAMO,eAAe,GAAGP,eAAe,CAAC,OAAO,CAAC;AAEhD,MAAMQ,0BAA0B,GAAG,CACjC,CAACX,YAAY,EAAEQ,kBAAkB,CAAC,EAClC,CAACX,WAAW,EAAEQ,iBAAiB,CAAC,EAChC,CAACP,aAAa,EAAEQ,oBAAoB,CAAC,EACrC,CAACP,WAAW,EAAEQ,iBAAiB,CAAC,EAChC,CAACN,WAAW,EAAEQ,iBAAiB,CAAC,EAChC,CAACP,SAAS,EAAEQ,eAAe,CAAC,CACpB;AAOH,MAAME,4BAA4B,CAAC;EACxC,OAAeC,kBAAkB,GAA8BC,IAAI,IAAKA,IAAI;EAE5E,OAAcC,qBAAqBA,CAACC,SAAmC,EAAE;IACvE,IAAI,CAACH,kBAAkB,GAAGG,SAAS;EACrC;EAEA,OAAcC,qBAAqBA,CAACH,IAAuB,GAAG,EAAE,EAAE;IAChE,IAAII,KAAK,CAACC,OAAO,CAACL,IAAI,CAAC,EAAE;MACvB,OAAOA,IAAI,CAACM,KAAK,CACdC,CAAC,IAAK,IAAI,CAACC,oBAAoB,CAACD,CAAC,CAAC,IAAI,IAAI,CAACE,cAAc,CAACF,CAAC,CAAC,IAAI,IAAI,CAACG,iBAAiB,CAACH,CAAC,CAC3F,CAAC;IACH;IAEA,OACE,IAAI,CAACC,oBAAoB,CAACR,IAAI,CAAC,IAAI,IAAI,CAACS,cAAc,CAACT,IAAI,CAAC,IAAI,IAAI,CAACU,iBAAiB,CAACV,IAAI,CAAC;EAEhG;EAEA,OAAcQ,oBAAoBA,CAACR,IAAY,EAAE;IAC/C,OAAO,4BAA4B,CAACW,IAAI,CAACX,IAAI,CAACY,IAAI,CAAC,CAAC,CAAC;EACvD;EAEA,OAAcH,cAAcA,CAACT,IAAY,EAAE;IACzC,OAAO,YAAY,CAACW,IAAI,CAACX,IAAI,CAAC;EAChC;EAEA,OAAcU,iBAAiBA,CAACV,IAAY,EAAE;IAC5C,MAAMa,SAAS,GAAG,IAAI,CAACd,kBAAkB,CAACC,IAAI,CAAC;IAC/C,MAAMc,SAAS,GAAGD,SAAS,CAACE,OAAO,CAAC,oDAAoD,EAAE,EAAE,CAAC;IAC7F,MAAMC,aAAa,GAAG,gCAAgC;IACtD,OAAOF,SAAS,CAACG,MAAM,GAAG,CAAC,IAAID,aAAa,CAACL,IAAI,CAACG,SAAS,CAAC;EAC9D;EAEQI,oBAAoB,GAAkB,IAAI;EAC1CC,gBAAgB,GAAqB,CAAC,CAAC;EACvCC,sBAAsB,GAAuB,EAAE;EAE/CC,2BAA2BA,CAACrB,IAAY,EAAE;IAChD,OAAOA,IAAI,CACRe,OAAO,CAAC,sCAAsC,EAAE,IAAI,CAAC,CACrDA,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;EACpC;EAEOO,QAAQA,CAACtB,IAAY,EAAsD;IAChF,MAAMuB,QAAQ,GAAG,IAAI,CAACL,oBAAoB,IAAI,EAAE;IAChD,MAAMM,YAA2B,GAAG,EAAE;IACtC,IAAIC,aAAa,GAAGzB,IAAI;IAExBH,0BAA0B,CAAC6B,OAAO,CAAC,CAAC,CAACC,KAAK,EAAEC,WAAW,CAAC,KAAK;MAC3DH,aAAa,GAAG,IAAAI,oBAAW,EAAC;QAC1B7B,IAAI,EAAEyB,aAAa;QACnBE,KAAK;QACLC,WAAW;QACXJ;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,CAACJ,sBAAsB,CAACM,OAAO,CAAC,CAAC,CAACC,KAAK,EAAEC,WAAW,CAAC,KAAK;MAC5D,MAAME,sBAAsB,GAAG,IAAI,CAACX,gBAAgB,CAACI,QAAQ,CAAC;MAE9DE,aAAa,GAAG,IAAAI,oBAAW,EAAC;QAC1B7B,IAAI,EAAEyB,aAAa;QACnBE,KAAK;QACLC,WAAW;QACXJ,YAAY;QACZO,UAAU,EAAGC,KAAK,IAChB,IAAI,CAACC,yCAAyC,CAACD,KAAK,EAAEF,sBAAsB;MAChF,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO;MAAEI,SAAS,EAAET,aAAa;MAAED;IAAa,CAAC;EACnD;EAEOW,OAAOA,CAACnC,IAAY,EAAEwB,YAA2B,EAAE;IACxD,IAAIY,QAAQ,GAAG,IAAI,CAACf,2BAA2B,CAACrB,IAAI,CAAC;IACrDwB,YAAY,CAACE,OAAO,CAAC,CAAC;MAAEE,WAAW;MAAES,QAAQ;MAAEC,OAAO;MAAEC;IAAS,CAAC,KAAK;MACrE,MAAMC,OAAO,GAAG,GAAGF,OAAO,GAAG,GAAG,GAAG,EAAE,GAAGD,QAAQ,GAAGE,QAAQ,GAAG,GAAG,GAAG,EAAE,EAAE;MACxEH,QAAQ,GAAGA,QAAQ,CAACrB,OAAO,CAACa,WAAW,EAAEY,OAAO,CAAC;IACnD,CAAC,CAAC;IAEF,OAAO,IAAI,CAACC,cAAc,CAACL,QAAQ,CAAC;EACtC;EAEOM,aAAaA,CAACC,KAAe,EAA0D;IAC5F,MAAMT,SAAmB,GAAG,EAAE;IAC9B,MAAMV,YAA6B,GAAG,EAAE;IAExCmB,KAAK,CAACjB,OAAO,CAAEnB,CAAC,IAAK;MACnB,MAAM;QAAE2B,SAAS,EAAEU,CAAC;QAAEpB,YAAY,EAAEqB;MAAE,CAAC,GAAG,IAAI,CAACvB,QAAQ,CAACf,CAAC,CAAC;MAC1D2B,SAAS,CAACY,IAAI,CAACF,CAAC,CAAC;MACjBpB,YAAY,CAACsB,IAAI,CAACD,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,OAAO;MAAEX,SAAS;MAAEV;IAAa,CAAC;EACpC;EAEOuB,YAAYA,CAACJ,KAAe,EAAEK,iBAAkC,EAAE;IACvE,OAAOL,KAAK,CAACM,GAAG,CAAC,CAAC1C,CAAC,EAAE2C,CAAC,KAAK;MACzB,MAAMd,QAAQ,GAAG,IAAI,CAACD,OAAO,CAAC5B,CAAC,EAAEyC,iBAAiB,CAACE,CAAC,CAAC,CAAC;MACtD,OAAO,IAAI,CAACT,cAAc,CAACL,QAAQ,CAAC;IACtC,CAAC,CAAC;EACJ;;EAEA;EACA;EACA;EACA;EACA;EACOe,gBAAgBA,CAAC;IAAEC,kBAAkB;IAAEhC;EAA8C,CAAC,EAAE;IAC7F,IAAI,CAACD,gBAAgB,GAAGiC,kBAAkB;IAC1C,IAAI,CAAChC,sBAAsB,GAAGA,sBAAsB;EACtD;EAEOiC,WAAWA,CAAC9B,QAAgB,EAAE;IACnC,IAAI,CAACL,oBAAoB,GAAGK,QAAQ;EACtC;EAEQU,yCAAyCA,CAC/CD,KAAa,EACbF,sBAA+C,EAC/C;IACA,IAAI,CAACA,sBAAsB,EAAE,OAAO,IAAI;IAExC,MAAMwB,UAAU,GAAGtB,KAAK,CAACuB,WAAW,CAAC,CAAC;IACtC,MAAMC,YAAY,GAAGC,MAAM,CAACC,IAAI,CAAC5B,sBAAsB,CAAC,CAACmB,GAAG,CAAEU,GAAG,IAAKA,GAAG,CAACJ,WAAW,CAAC,CAAC,CAAC;IAExF,OAAO,CAACC,YAAY,CAACI,QAAQ,CAACN,UAAU,CAAC;EAC3C;EAEQb,cAAcA,CAACL,QAAgB,EAAE;IACvC,MAAMb,QAAQ,GAAG,IAAI,CAACL,oBAAoB,IAAI,EAAE;IAChD,MAAM2C,YAAY,GAAG,IAAI,CAAC1C,gBAAgB,CAACI,QAAQ,CAAC;IAEpD,OAAOsC,YAAY,GAAG,IAAAC,4BAAmB,EAAC1B,QAAQ,EAAEyB,YAAY,CAAC,GAAGzB,QAAQ;EAC9E;AACF;AAAC2B,OAAA,CAAAjE,4BAAA,GAAAA,4BAAA","ignoreList":[]}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TranslationService = void 0;
7
+ var _TranslationPreprocessor = require("./TranslationPreprocessor.js");
8
+ class TranslationService {
9
+ preprocessor = new _TranslationPreprocessor.TranslationKatexPreprocessor();
10
+ cache = new Map();
11
+ providers = [];
12
+ globalTargetLanguage = null;
13
+ sourceLanguage = null;
14
+ customCacheKeyFn = null;
15
+ constructor({
16
+ providers,
17
+ preserve,
18
+ onError
19
+ }) {
20
+ this.providers = providers;
21
+ this.onError = onError;
22
+ if (preserve) {
23
+ this.preprocessor.setupPreservable({
24
+ glossaryToPreserve: preserve.map,
25
+ preserveWordsReplacers: preserve.replacers
26
+ });
27
+ }
28
+ }
29
+ getTargetLanguage(targetLang) {
30
+ const target = targetLang || this.globalTargetLanguage;
31
+ if (!target) {
32
+ throw new Error('Target language is missing, either provide in arguments or use .bindTargetLanguage()');
33
+ }
34
+ return target;
35
+ }
36
+ getProvider(target) {
37
+ const provider = this.providers.find(svc => svc.isTargetSupported(target));
38
+ if (!provider) throw new Error(`This target language: "${target}" is not supported.`);
39
+ return provider;
40
+ }
41
+ createCacheKey(text, target, suffix) {
42
+ let baseKey;
43
+ if (this.customCacheKeyFn) {
44
+ baseKey = this.customCacheKeyFn(text, target);
45
+ } else {
46
+ baseKey = Array.isArray(text) ? `${JSON.stringify(text)}::${target}` : `${text}::${target}`;
47
+ }
48
+ return suffix ? `${baseKey}${suffix}` : baseKey;
49
+ }
50
+ translate = async (text = '', config) => {
51
+ const isArrayInput = Array.isArray(text);
52
+ const target = this.getTargetLanguage(config?.targetLang) ?? '';
53
+ if (!text.length || _TranslationPreprocessor.TranslationKatexPreprocessor.shouldSkipTranslation(text)) {
54
+ const key = config?.cacheKey ?? this.createCacheKey(text, target, config?.cacheKeySuffix);
55
+ if (this.cache.has(key)) return this.cache.get(key);
56
+ return text;
57
+ }
58
+ const source = config?.sourceLang ?? this.sourceLanguage ?? undefined;
59
+ const provider = this.getProvider(target);
60
+ const key = config?.cacheKey ?? this.createCacheKey(text, target, config?.cacheKeySuffix);
61
+ if (this.cache.has(key)) return this.cache.get(key);
62
+ let translated;
63
+ if (isArrayInput) {
64
+ const {
65
+ sanitized,
66
+ replacements
67
+ } = this.preprocessor.sanitizeBatch(text);
68
+ const response = await provider.requestBatch(sanitized, target, source);
69
+ translated = this.preprocessor.restoreBatch(response, replacements);
70
+ } else {
71
+ const {
72
+ sanitized,
73
+ replacements
74
+ } = this.preprocessor.sanitize(text);
75
+ const response = await provider.request(sanitized, target, source);
76
+ translated = this.preprocessor.restore(response, replacements);
77
+ }
78
+ this.cache.set(key, translated);
79
+ return translated;
80
+ };
81
+ bindTargetLanguage(store, callback) {
82
+ store.watch(t => {
83
+ const value = callback ? callback(t) : t;
84
+ this.globalTargetLanguage = value;
85
+ this.preprocessor.setupTarget(value);
86
+ });
87
+ return this;
88
+ }
89
+ bindSourceLanguage(store) {
90
+ store.watch(value => {
91
+ this.sourceLanguage = value;
92
+ });
93
+ return this;
94
+ }
95
+ bindCustomCacheKey(store, callback) {
96
+ store.watch(t => {
97
+ this.customCacheKeyFn = (text, target) => callback(t, {
98
+ text,
99
+ target
100
+ });
101
+ });
102
+ return this;
103
+ }
104
+ getCached(key) {
105
+ return this.cache.get(key);
106
+ }
107
+ reset() {
108
+ this.cache.clear();
109
+ }
110
+ }
111
+ exports.TranslationService = TranslationService;
112
+ //# sourceMappingURL=TranslationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_TranslationPreprocessor","require","TranslationService","preprocessor","TranslationKatexPreprocessor","cache","Map","providers","globalTargetLanguage","sourceLanguage","customCacheKeyFn","constructor","preserve","onError","setupPreservable","glossaryToPreserve","map","preserveWordsReplacers","replacers","getTargetLanguage","targetLang","target","Error","getProvider","provider","find","svc","isTargetSupported","createCacheKey","text","suffix","baseKey","Array","isArray","JSON","stringify","translate","config","isArrayInput","length","shouldSkipTranslation","key","cacheKey","cacheKeySuffix","has","get","source","sourceLang","undefined","translated","sanitized","replacements","sanitizeBatch","response","requestBatch","restoreBatch","sanitize","request","restore","set","bindTargetLanguage","store","callback","watch","t","value","setupTarget","bindSourceLanguage","bindCustomCacheKey","getCached","reset","clear","exports"],"sourceRoot":"../../../../../src","sources":["features/translation/model/TranslationService.ts"],"mappings":"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","ignoreList":[]}