@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.
- package/dist/commonjs/features/translation/constants.js +11 -0
- package/dist/commonjs/features/translation/constants.js.map +1 -0
- package/dist/commonjs/features/translation/helpers.js +60 -0
- package/dist/commonjs/features/translation/helpers.js.map +1 -0
- package/dist/commonjs/features/translation/index.js +105 -0
- package/dist/commonjs/features/translation/index.js.map +1 -0
- package/dist/commonjs/features/translation/model/TranslationModel.js +122 -0
- package/dist/commonjs/features/translation/model/TranslationModel.js.map +1 -0
- package/dist/commonjs/features/translation/model/TranslationPreprocessor.js +142 -0
- package/dist/commonjs/features/translation/model/TranslationPreprocessor.js.map +1 -0
- package/dist/commonjs/features/translation/model/TranslationService.js +112 -0
- package/dist/commonjs/features/translation/model/TranslationService.js.map +1 -0
- package/dist/commonjs/features/translation/preserve/wordsToPreserve.js +314 -0
- package/dist/commonjs/features/translation/preserve/wordsToPreserve.js.map +1 -0
- package/dist/commonjs/features/translation/providers/google/GoogleTranslationProvider.js +43 -0
- package/dist/commonjs/features/translation/providers/google/GoogleTranslationProvider.js.map +1 -0
- package/dist/commonjs/features/translation/providers/google/supportedLanguages.js +203 -0
- package/dist/commonjs/features/translation/providers/google/supportedLanguages.js.map +1 -0
- package/dist/commonjs/features/translation/providers/google.types.js +2 -0
- package/dist/commonjs/features/translation/providers/google.types.js.map +1 -0
- package/dist/commonjs/features/translation/providers/translation.interface.js +35 -0
- package/dist/commonjs/features/translation/providers/translation.interface.js.map +1 -0
- package/dist/commonjs/features/translation/types.js +2 -0
- package/dist/commonjs/features/translation/types.js.map +1 -0
- package/dist/commonjs/features/voice/playing/model/VoiceTranscriptionTranslation.model.js +20 -6
- package/dist/commonjs/features/voice/playing/model/VoiceTranscriptionTranslation.model.js.map +1 -1
- package/dist/commonjs/features/voice/types.js.map +1 -1
- package/dist/commonjs/index.js +12 -0
- package/dist/commonjs/index.js.map +1 -1
- package/dist/module/features/translation/constants.js +7 -0
- package/dist/module/features/translation/constants.js.map +1 -0
- package/dist/module/features/translation/helpers.js +53 -0
- package/dist/module/features/translation/helpers.js.map +1 -0
- package/dist/module/features/translation/index.js +12 -0
- package/dist/module/features/translation/index.js.map +1 -0
- package/dist/module/features/translation/model/TranslationModel.js +117 -0
- package/dist/module/features/translation/model/TranslationModel.js.map +1 -0
- package/dist/module/features/translation/model/TranslationPreprocessor.js +137 -0
- package/dist/module/features/translation/model/TranslationPreprocessor.js.map +1 -0
- package/dist/module/features/translation/model/TranslationService.js +107 -0
- package/dist/module/features/translation/model/TranslationService.js.map +1 -0
- package/dist/module/features/translation/preserve/wordsToPreserve.js +310 -0
- package/dist/module/features/translation/preserve/wordsToPreserve.js.map +1 -0
- package/dist/module/features/translation/providers/google/GoogleTranslationProvider.js +38 -0
- package/dist/module/features/translation/providers/google/GoogleTranslationProvider.js.map +1 -0
- package/dist/module/features/translation/providers/google/supportedLanguages.js +199 -0
- package/dist/module/features/translation/providers/google/supportedLanguages.js.map +1 -0
- package/dist/module/features/translation/providers/google.types.js +2 -0
- package/dist/module/features/translation/providers/google.types.js.map +1 -0
- package/dist/module/features/translation/providers/translation.interface.js +30 -0
- package/dist/module/features/translation/providers/translation.interface.js.map +1 -0
- package/dist/module/features/translation/types.js +2 -0
- package/dist/module/features/translation/types.js.map +1 -0
- package/dist/module/features/voice/playing/model/VoiceTranscriptionTranslation.model.js +20 -6
- package/dist/module/features/voice/playing/model/VoiceTranscriptionTranslation.model.js.map +1 -1
- package/dist/module/features/voice/types.js.map +1 -1
- package/dist/module/index.js +1 -0
- package/dist/module/index.js.map +1 -1
- package/dist/typescript/commonjs/features/translation/constants.d.ts +5 -0
- package/dist/typescript/commonjs/features/translation/constants.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/helpers.d.ts +9 -0
- package/dist/typescript/commonjs/features/translation/helpers.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/index.d.ts +12 -0
- package/dist/typescript/commonjs/features/translation/index.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/model/TranslationModel.d.ts +33 -0
- package/dist/typescript/commonjs/features/translation/model/TranslationModel.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/model/TranslationPreprocessor.d.ts +34 -0
- package/dist/typescript/commonjs/features/translation/model/TranslationPreprocessor.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/model/TranslationService.d.ts +40 -0
- package/dist/typescript/commonjs/features/translation/model/TranslationService.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/preserve/wordsToPreserve.d.ts +3 -0
- package/dist/typescript/commonjs/features/translation/preserve/wordsToPreserve.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/providers/google/GoogleTranslationProvider.d.ts +16 -0
- package/dist/typescript/commonjs/features/translation/providers/google/GoogleTranslationProvider.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/providers/google/supportedLanguages.d.ts +197 -0
- package/dist/typescript/commonjs/features/translation/providers/google/supportedLanguages.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/providers/google.types.d.ts +15 -0
- package/dist/typescript/commonjs/features/translation/providers/google.types.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/providers/translation.interface.d.ts +23 -0
- package/dist/typescript/commonjs/features/translation/providers/translation.interface.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/types.d.ts +27 -0
- package/dist/typescript/commonjs/features/translation/types.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/voice/playing/model/VoiceTranscriptionTranslation.model.d.ts +1 -1
- package/dist/typescript/commonjs/features/voice/playing/model/VoiceTranscriptionTranslation.model.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/voice/types.d.ts +2 -15
- package/dist/typescript/commonjs/features/voice/types.d.ts.map +1 -1
- package/dist/typescript/commonjs/index.d.ts +1 -0
- package/dist/typescript/commonjs/index.d.ts.map +1 -1
- package/dist/typescript/module/features/translation/constants.d.ts +5 -0
- package/dist/typescript/module/features/translation/constants.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/helpers.d.ts +9 -0
- package/dist/typescript/module/features/translation/helpers.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/index.d.ts +12 -0
- package/dist/typescript/module/features/translation/index.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/model/TranslationModel.d.ts +33 -0
- package/dist/typescript/module/features/translation/model/TranslationModel.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/model/TranslationPreprocessor.d.ts +34 -0
- package/dist/typescript/module/features/translation/model/TranslationPreprocessor.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/model/TranslationService.d.ts +40 -0
- package/dist/typescript/module/features/translation/model/TranslationService.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/preserve/wordsToPreserve.d.ts +3 -0
- package/dist/typescript/module/features/translation/preserve/wordsToPreserve.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/providers/google/GoogleTranslationProvider.d.ts +16 -0
- package/dist/typescript/module/features/translation/providers/google/GoogleTranslationProvider.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/providers/google/supportedLanguages.d.ts +197 -0
- package/dist/typescript/module/features/translation/providers/google/supportedLanguages.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/providers/google.types.d.ts +15 -0
- package/dist/typescript/module/features/translation/providers/google.types.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/providers/translation.interface.d.ts +23 -0
- package/dist/typescript/module/features/translation/providers/translation.interface.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/types.d.ts +27 -0
- package/dist/typescript/module/features/translation/types.d.ts.map +1 -0
- package/dist/typescript/module/features/voice/playing/model/VoiceTranscriptionTranslation.model.d.ts +1 -1
- package/dist/typescript/module/features/voice/playing/model/VoiceTranscriptionTranslation.model.d.ts.map +1 -1
- package/dist/typescript/module/features/voice/types.d.ts +2 -15
- package/dist/typescript/module/features/voice/types.d.ts.map +1 -1
- package/dist/typescript/module/index.d.ts +1 -0
- package/dist/typescript/module/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/features/translation/constants.ts +4 -0
- package/src/features/translation/helpers.ts +63 -0
- package/src/features/translation/index.ts +30 -0
- package/src/features/translation/model/TranslationModel.ts +174 -0
- package/src/features/translation/model/TranslationPreprocessor.ts +171 -0
- package/src/features/translation/model/TranslationService.ts +148 -0
- package/src/features/translation/preserve/wordsToPreserve.ts +87 -0
- package/src/features/translation/providers/google/GoogleTranslationProvider.ts +34 -0
- package/src/features/translation/providers/google/supportedLanguages.ts +196 -0
- package/src/features/translation/providers/google.types.ts +16 -0
- package/src/features/translation/providers/translation.interface.ts +49 -0
- package/src/features/translation/types.ts +30 -0
- package/src/features/voice/playing/model/VoiceTranscriptionTranslation.model.ts +21 -7
- package/src/features/voice/types.ts +6 -14
- 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
|
+
'&': '&',
|
|
50
|
+
'<': '<',
|
|
51
|
+
'>': '>',
|
|
52
|
+
'"': '"',
|
|
53
|
+
''': "'",
|
|
54
|
+
' ': ' '
|
|
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":"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","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":[]}
|