anylang
Version:
A translator's kit that uses the free APIs of Google Translate, Yandex, Bing, ChatGPT, and other LLMs
62 lines (60 loc) • 7.2 kB
JavaScript
import xpath from 'xpath';
import { DOMParser, MIME_TYPE } from '@xmldom/xmldom';
export const encodeForBatch = (textList) => {
return textList.map((text, i) => `<pre><a i="${i}">${text}</a></pre>`);
};
export const parseXMLResponse = (text) => {
let doc;
try {
doc = new DOMParser().parseFromString(text, MIME_TYPE.XML_APPLICATION);
}
catch (err) {
console.error(err);
return null;
}
const nodesWithTranslation = xpath.select('//pre/*[not(self::i)]', doc);
if (!nodesWithTranslation)
return null;
if (!Array.isArray(nodesWithTranslation))
throw new Error('Unexpected XML parsed result');
return nodesWithTranslation
.map((node) => {
// Select text in child nodes or in self
const textNodes = xpath.select('descendant-or-self::*/text()', node);
if (!Array.isArray(textNodes))
return '';
if (textNodes.length > 1) {
console.debug('More than one text node found');
}
return textNodes.length === 0
? ''
: textNodes.map((node) => node.nodeValue).join(' ');
})
.join(' ');
};
export function deepExploreArray(obj, depth) {
let currentDepth = 0;
let currentObj = obj;
while (depth > currentDepth) {
if (!Array.isArray(currentObj)) {
throw new TypeError('Error while explore array on depth #' + String(currentDepth));
}
currentObj = currentObj[0];
currentDepth++;
}
return currentObj;
}
/**
* Visit each item in array recursively
*/
export const visitArrayItems = (arr, visitor) => {
arr.forEach((obj) => {
if (Array.isArray(obj)) {
visitArrayItems(obj, visitor);
}
else {
visitor(obj);
}
});
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRyYW5zbGF0b3JzL0dvb2dsZVRyYW5zbGF0b3IvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBWSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsUUFBa0IsRUFBRSxFQUFFO0lBQ3BELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDLENBQUM7QUFDeEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtJQUNoRCxJQUFJLEdBQWEsQ0FBQztJQUNsQixJQUFJLENBQUM7UUFDSixHQUFHLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUN4Qyx1QkFBdUIsRUFDdkIsR0FBc0IsQ0FDdEIsQ0FBQztJQUVGLElBQUksQ0FBQyxvQkFBb0I7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV2QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztRQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFFakQsT0FBTyxvQkFBb0I7U0FDekIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDYix3Q0FBd0M7UUFDeEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUV6QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUM1QixDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELENBQUMsQ0FBQztTQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFZLEVBQUUsS0FBYTtJQUMzRCxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDckIsSUFBSSxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ3JCLE9BQU8sS0FBSyxHQUFHLFlBQVksRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLFNBQVMsQ0FDbEIsc0NBQXNDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUM3RCxDQUFDO1FBQ0gsQ0FBQztRQUVELFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsWUFBWSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sVUFBVSxDQUFDO0FBQ25CLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQWMsRUFBRSxPQUErQixFQUFFLEVBQUU7SUFDbEYsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ25CLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLGVBQWUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDUCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZCxDQUFDO0lBQ0YsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJmaWxlIjoidHJhbnNsYXRvcnMvR29vZ2xlVHJhbnNsYXRvci91dGlscy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB4cGF0aCBmcm9tICd4cGF0aCc7XG5pbXBvcnQgeyBEb2N1bWVudCwgRE9NUGFyc2VyLCBNSU1FX1RZUEUgfSBmcm9tICdAeG1sZG9tL3htbGRvbSc7XG5cbmV4cG9ydCBjb25zdCBlbmNvZGVGb3JCYXRjaCA9ICh0ZXh0TGlzdDogc3RyaW5nW10pID0+IHtcblx0cmV0dXJuIHRleHRMaXN0Lm1hcCgodGV4dCwgaSkgPT4gYDxwcmU+PGEgaT1cIiR7aX1cIj4ke3RleHR9PC9hPjwvcHJlPmApO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlWE1MUmVzcG9uc2UgPSAodGV4dDogc3RyaW5nKSA9PiB7XG5cdGxldCBkb2M6IERvY3VtZW50O1xuXHR0cnkge1xuXHRcdGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcodGV4dCwgTUlNRV9UWVBFLlhNTF9BUFBMSUNBVElPTik7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdGNvbnNvbGUuZXJyb3IoZXJyKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGNvbnN0IG5vZGVzV2l0aFRyYW5zbGF0aW9uID0geHBhdGguc2VsZWN0KFxuXHRcdCcvL3ByZS8qW25vdChzZWxmOjppKV0nLFxuXHRcdGRvYyBhcyB1bmtub3duIGFzIE5vZGUsXG5cdCk7XG5cblx0aWYgKCFub2Rlc1dpdGhUcmFuc2xhdGlvbikgcmV0dXJuIG51bGw7XG5cblx0aWYgKCFBcnJheS5pc0FycmF5KG5vZGVzV2l0aFRyYW5zbGF0aW9uKSlcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgWE1MIHBhcnNlZCByZXN1bHQnKTtcblxuXHRyZXR1cm4gbm9kZXNXaXRoVHJhbnNsYXRpb25cblx0XHQubWFwKChub2RlKSA9PiB7XG5cdFx0XHQvLyBTZWxlY3QgdGV4dCBpbiBjaGlsZCBub2RlcyBvciBpbiBzZWxmXG5cdFx0XHRjb25zdCB0ZXh0Tm9kZXMgPSB4cGF0aC5zZWxlY3QoJ2Rlc2NlbmRhbnQtb3Itc2VsZjo6Ki90ZXh0KCknLCBub2RlKTtcblx0XHRcdGlmICghQXJyYXkuaXNBcnJheSh0ZXh0Tm9kZXMpKSByZXR1cm4gJyc7XG5cblx0XHRcdGlmICh0ZXh0Tm9kZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRjb25zb2xlLmRlYnVnKCdNb3JlIHRoYW4gb25lIHRleHQgbm9kZSBmb3VuZCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGV4dE5vZGVzLmxlbmd0aCA9PT0gMFxuXHRcdFx0XHQ/ICcnXG5cdFx0XHRcdDogdGV4dE5vZGVzLm1hcCgobm9kZSkgPT4gbm9kZS5ub2RlVmFsdWUpLmpvaW4oJyAnKTtcblx0XHR9KVxuXHRcdC5qb2luKCcgJyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGVlcEV4cGxvcmVBcnJheShvYmo6IHVua25vd24sIGRlcHRoOiBudW1iZXIpIHtcblx0bGV0IGN1cnJlbnREZXB0aCA9IDA7XG5cdGxldCBjdXJyZW50T2JqID0gb2JqO1xuXHR3aGlsZSAoZGVwdGggPiBjdXJyZW50RGVwdGgpIHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoY3VycmVudE9iaikpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcdCdFcnJvciB3aGlsZSBleHBsb3JlIGFycmF5IG9uIGRlcHRoICMnICsgU3RyaW5nKGN1cnJlbnREZXB0aCksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGN1cnJlbnRPYmogPSBjdXJyZW50T2JqWzBdO1xuXHRcdGN1cnJlbnREZXB0aCsrO1xuXHR9XG5cblx0cmV0dXJuIGN1cnJlbnRPYmo7XG59XG5cbi8qKlxuICogVmlzaXQgZWFjaCBpdGVtIGluIGFycmF5IHJlY3Vyc2l2ZWx5XG4gKi9cbmV4cG9ydCBjb25zdCB2aXNpdEFycmF5SXRlbXMgPSAoYXJyOiB1bmtub3duW10sIHZpc2l0b3I6IChvYmo6IHVua25vd24pID0+IHZvaWQpID0+IHtcblx0YXJyLmZvckVhY2goKG9iaikgPT4ge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcblx0XHRcdHZpc2l0QXJyYXlJdGVtcyhvYmosIHZpc2l0b3IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aXNpdG9yKG9iaik7XG5cdFx0fVxuXHR9KTtcbn07XG4iXX0=