anylang
Version:
A translator's kit that uses the free APIs of Google Translate, Yandex, Bing, ChatGPT, and other LLMs
81 lines (79 loc) • 9.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Multiplexor = void 0;
var _strings = require("./strings");
const tokens = ['tokenStart', 'tokenEnd', 'tokenClose'];
/**
* Util for pack multiple requests to one
*
* It's just encode/decode all texts with custom separation options
*/
class Multiplexor {
// private readonly token: Array<Array<string>> = [];
constructor(options) {
this.options = {
tokenStart: '<',
tokenEnd: '>',
tokenClose: '/'
};
if (options !== undefined) {
['tokenStart', 'tokenEnd', 'tokenClose'].forEach(key => {
const item = options[key];
if (item !== undefined && item.search(/&|:/) !== -1) {
throw new Error(`Option ${key} has disallow characters (& or :)`);
}
});
for (const key in options) {
this.options[key] = options[key];
}
}
}
encode(data) {
const {
tokenStart: start = '',
tokenEnd: end = '',
tokenClose: close = ''
} = this.options;
return data.map(({
id,
text
}) => start + id + end + this.escape(text) + start + close + id + end).join(' ');
}
decode(text) {
const {
tokenStart: start = '',
tokenEnd: end = '',
tokenClose: close = ''
} = this.options;
const pattern = `${start}\\s*(\\d+)\\s*${end}([\\w\\W]+?)${start}\\s*${close}\\s*\\1\\s*${end}`;
const matchSet = text.matchAll(new RegExp(pattern, 'gm'));
const result = [];
let match = matchSet.next();
while (!match.done) {
result.push({
id: match.value[1],
text: this.unescape(match.value[2])
});
match = matchSet.next();
}
return result;
}
escape(text) {
return tokens.reduce((text, tokenName, index) => {
const token = this.options[tokenName];
if (!token) return text;
return text.replace(new RegExp((0, _strings.escapeRegExp)(token), 'g'), `&${index + 1}:`);
}, text);
}
unescape(text) {
return tokens.reduce((text, tokenName, index) => {
const token = this.options[tokenName];
if (!token) return text;
return text.replace(new RegExp(`&${index + 1}:`, 'g'), token);
}, text);
}
}
exports.Multiplexor = Multiplexor;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMvTXVsdGlwbGV4b3IuanMiLCJuYW1lcyI6WyJfc3RyaW5ncyIsInJlcXVpcmUiLCJ0b2tlbnMiLCJNdWx0aXBsZXhvciIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsInRva2VuU3RhcnQiLCJ0b2tlbkVuZCIsInRva2VuQ2xvc2UiLCJ1bmRlZmluZWQiLCJmb3JFYWNoIiwia2V5IiwiaXRlbSIsInNlYXJjaCIsIkVycm9yIiwiZW5jb2RlIiwiZGF0YSIsInN0YXJ0IiwiZW5kIiwiY2xvc2UiLCJtYXAiLCJpZCIsInRleHQiLCJlc2NhcGUiLCJqb2luIiwiZGVjb2RlIiwicGF0dGVybiIsIm1hdGNoU2V0IiwibWF0Y2hBbGwiLCJSZWdFeHAiLCJyZXN1bHQiLCJtYXRjaCIsIm5leHQiLCJkb25lIiwicHVzaCIsInZhbHVlIiwidW5lc2NhcGUiLCJyZWR1Y2UiLCJ0b2tlbk5hbWUiLCJpbmRleCIsInRva2VuIiwicmVwbGFjZSIsImVzY2FwZVJlZ0V4cCIsImV4cG9ydHMiXSwic291cmNlcyI6WyJ1dGlscy9NdWx0aXBsZXhvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlc2NhcGVSZWdFeHAgfSBmcm9tICcuL3N0cmluZ3MnO1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG5cdHRva2VuU3RhcnQ/OiBzdHJpbmc7XG5cdHRva2VuRW5kPzogc3RyaW5nO1xuXHR0b2tlbkNsb3NlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVGV4dENvbnRhaW5lciB7XG5cdGlkOiBzdHJpbmc7XG5cdHRleHQ6IHN0cmluZztcbn1cblxuY29uc3QgdG9rZW5zID0gWyd0b2tlblN0YXJ0JywgJ3Rva2VuRW5kJywgJ3Rva2VuQ2xvc2UnXSBhcyBjb25zdDtcblxuLyoqXG4gKiBVdGlsIGZvciBwYWNrIG11bHRpcGxlIHJlcXVlc3RzIHRvIG9uZVxuICpcbiAqIEl0J3MganVzdCBlbmNvZGUvZGVjb2RlIGFsbCB0ZXh0cyB3aXRoIGN1c3RvbSBzZXBhcmF0aW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIE11bHRpcGxleG9yIHtcblx0cHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBPcHRpb25zID0ge1xuXHRcdHRva2VuU3RhcnQ6ICc8Jyxcblx0XHR0b2tlbkVuZDogJz4nLFxuXHRcdHRva2VuQ2xvc2U6ICcvJyxcblx0fTtcblxuXHQvLyBwcml2YXRlIHJlYWRvbmx5IHRva2VuOiBBcnJheTxBcnJheTxzdHJpbmc+PiA9IFtdO1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zPzogT3B0aW9ucykge1xuXHRcdGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFsndG9rZW5TdGFydCcsICd0b2tlbkVuZCcsICd0b2tlbkNsb3NlJ10uZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGl0ZW0gPSBvcHRpb25zW2tleSBhcyBrZXlvZiBPcHRpb25zXTtcblx0XHRcdFx0aWYgKGl0ZW0gIT09IHVuZGVmaW5lZCAmJiBpdGVtLnNlYXJjaCgvJnw6LykgIT09IC0xKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBPcHRpb24gJHtrZXl9IGhhcyBkaXNhbGxvdyBjaGFyYWN0ZXJzICgmIG9yIDopYCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zKSB7XG5cdFx0XHRcdHRoaXMub3B0aW9uc1trZXkgYXMga2V5b2YgT3B0aW9uc10gPSBvcHRpb25zW2tleSBhcyBrZXlvZiBPcHRpb25zXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZW5jb2RlKGRhdGE6IFRleHRDb250YWluZXJbXSkge1xuXHRcdGNvbnN0IHtcblx0XHRcdHRva2VuU3RhcnQ6IHN0YXJ0ID0gJycsXG5cdFx0XHR0b2tlbkVuZDogZW5kID0gJycsXG5cdFx0XHR0b2tlbkNsb3NlOiBjbG9zZSA9ICcnLFxuXHRcdH0gPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRyZXR1cm4gZGF0YVxuXHRcdFx0Lm1hcChcblx0XHRcdFx0KHsgaWQsIHRleHQgfSkgPT5cblx0XHRcdFx0XHRzdGFydCArIGlkICsgZW5kICsgdGhpcy5lc2NhcGUodGV4dCkgKyBzdGFydCArIGNsb3NlICsgaWQgKyBlbmQsXG5cdFx0XHQpXG5cdFx0XHQuam9pbignICcpO1xuXHR9XG5cblx0cHVibGljIGRlY29kZSh0ZXh0OiBzdHJpbmcpIHtcblx0XHRjb25zdCB7XG5cdFx0XHR0b2tlblN0YXJ0OiBzdGFydCA9ICcnLFxuXHRcdFx0dG9rZW5FbmQ6IGVuZCA9ICcnLFxuXHRcdFx0dG9rZW5DbG9zZTogY2xvc2UgPSAnJyxcblx0XHR9ID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0Y29uc3QgcGF0dGVybiA9IGAke3N0YXJ0fVxcXFxzKihcXFxcZCspXFxcXHMqJHtlbmR9KFtcXFxcd1xcXFxXXSs/KSR7c3RhcnR9XFxcXHMqJHtjbG9zZX1cXFxccypcXFxcMVxcXFxzKiR7ZW5kfWA7XG5cdFx0Y29uc3QgbWF0Y2hTZXQgPSB0ZXh0Lm1hdGNoQWxsKG5ldyBSZWdFeHAocGF0dGVybiwgJ2dtJykpO1xuXG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cdFx0bGV0IG1hdGNoID0gbWF0Y2hTZXQubmV4dCgpO1xuXHRcdHdoaWxlICghbWF0Y2guZG9uZSkge1xuXHRcdFx0cmVzdWx0LnB1c2goe1xuXHRcdFx0XHRpZDogbWF0Y2gudmFsdWVbMV0sXG5cdFx0XHRcdHRleHQ6IHRoaXMudW5lc2NhcGUobWF0Y2gudmFsdWVbMl0pLFxuXHRcdFx0fSk7XG5cdFx0XHRtYXRjaCA9IG1hdGNoU2V0Lm5leHQoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBlc2NhcGUodGV4dDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHRva2Vucy5yZWR1Y2UoKHRleHQsIHRva2VuTmFtZSwgaW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5vcHRpb25zW3Rva2VuTmFtZV07XG5cblx0XHRcdGlmICghdG9rZW4pIHJldHVybiB0ZXh0O1xuXG5cdFx0XHRyZXR1cm4gdGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoZXNjYXBlUmVnRXhwKHRva2VuKSwgJ2cnKSwgYCYke2luZGV4ICsgMX06YCk7XG5cdFx0fSwgdGV4dCk7XG5cdH1cblxuXHRwcml2YXRlIHVuZXNjYXBlKHRleHQ6IHN0cmluZykge1xuXHRcdHJldHVybiB0b2tlbnMucmVkdWNlKCh0ZXh0LCB0b2tlbk5hbWUsIGluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMub3B0aW9uc1t0b2tlbk5hbWVdO1xuXG5cdFx0XHRpZiAoIXRva2VuKSByZXR1cm4gdGV4dDtcblxuXHRcdFx0cmV0dXJuIHRleHQucmVwbGFjZShuZXcgUmVnRXhwKGAmJHtpbmRleCArIDF9OmAsICdnJyksIHRva2VuKTtcblx0XHR9LCB0ZXh0KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFhQSxNQUFNQyxNQUFNLEdBQUcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBVTtBQUVoRTs7Ozs7QUFLTSxNQUFPQyxXQUFXO0VBT3ZCO0VBQ0FDLFlBQVlDLE9BQWlCO0lBUFosS0FBQUEsT0FBTyxHQUFZO01BQ25DQyxVQUFVLEVBQUUsR0FBRztNQUNmQyxRQUFRLEVBQUUsR0FBRztNQUNiQyxVQUFVLEVBQUU7S0FDWjtJQUlBLElBQUlILE9BQU8sS0FBS0ksU0FBUyxFQUFFO01BQzFCLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQ0MsT0FBTyxDQUFFQyxHQUFHLElBQUk7UUFDeEQsTUFBTUMsSUFBSSxHQUFHUCxPQUFPLENBQUNNLEdBQW9CLENBQUM7UUFDMUMsSUFBSUMsSUFBSSxLQUFLSCxTQUFTLElBQUlHLElBQUksQ0FBQ0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1VBQ3BELE1BQU0sSUFBSUMsS0FBSyxDQUFDLFVBQVVILEdBQUcs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