UNPKG

lingva-scraper-update

Version:
78 lines (77 loc) 3.44 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTranslationInfo = void 0; const language_1 = require("./utils/language"); const request_1 = __importStar(require("./utils/request")); const parse = __importStar(require("./utils/parse")); /** * Retrieves the full translation information given a pair of languages and a query * @param source - The code of the language to translate from * @param target - The code of the language to translate to * @param query - The text to be translated * @returns An element with all the information, as defined in {@link TranslationInfo} */ const getTranslationInfo = async (source, target, query) => { const parsedSource = (0, language_1.mapGoogleCode)(source); const parsedTarget = (0, language_1.mapGoogleCode)(target); const reqData = JSON.stringify([ [query, parsedSource, parsedTarget, true], [null], ]); const reqBoilerplate = JSON.stringify([ [["MkEWBc", reqData, null, "generic"]], ]); const body = "f.req=" + encodeURIComponent(reqBoilerplate); return (0, request_1.default)(request_1.Endpoint.INFO) .with({ body }) .doing(({ data }) => { if (typeof data === "string") { const resBoilerplate = JSON.parse(data.split("\n")?.[3] || ""); const resData = JSON.parse(resBoilerplate?.[0]?.[2]); if (!resData) return null; // Add extraTranslations field here (with a fallback if necessary) return parse.undefinedFields({ detectedSource: source === "auto" ? parse.detected(resData) : undefined, typo: parse.typo(resData), pronunciation: { query: parse.pronunciation.query(resData), translation: parse.pronunciation.translation(resData), }, definitions: parse.list.definitions(resData), examples: parse.list.examples(resData), similar: parse.list.similar(resData), extraTranslations: parse.list.extraTranslations?.(resData) || [], }); } return null; // Handle the case when `data` isn't a string. }) .catch((error) => { console.error("Error fetching translation info:", error); return null; }); }; exports.getTranslationInfo = getTranslationInfo;