UNPKG

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
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=