41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
|
|
import { writeFile } from "node:fs/promises";
|
||
|
|
import { getTranslationInfo, getAudio, LangCode } from "lingva-scraper";
|
||
|
|
|
||
|
|
const handleError = (obj: object | null) => {
|
||
|
|
if (!obj)
|
||
|
|
throw new Error();
|
||
|
|
return obj;
|
||
|
|
};
|
||
|
|
|
||
|
|
const renew = {
|
||
|
|
fullInfo: () => getTranslationInfo("auto" as LangCode<"source">, "es" as LangCode<"target">, "win").then(handleError),
|
||
|
|
simpleInfo: () => getTranslationInfo("es" as LangCode<"source">, "en" as LangCode<"target">, "hola").then(handleError),
|
||
|
|
pronunciationInfo: () => getTranslationInfo("zh" as LangCode<"source">, "ko" as LangCode<"target">, "早安").then(handleError),
|
||
|
|
audio: () => getAudio("es" as LangCode<"target">, "hola").then(handleError),
|
||
|
|
};
|
||
|
|
|
||
|
|
type DataType = keyof typeof renew;
|
||
|
|
|
||
|
|
const save = (json: object, type: DataType) => {
|
||
|
|
writeFile(
|
||
|
|
`./mocks/data/${type}.json`,
|
||
|
|
JSON.stringify(json, null, 2),
|
||
|
|
"utf-8"
|
||
|
|
).then(() =>
|
||
|
|
console.log(`Successfully renewed '${type}'`)
|
||
|
|
).catch(() =>
|
||
|
|
console.log(`Error renewing '${type}'`)
|
||
|
|
)
|
||
|
|
};
|
||
|
|
|
||
|
|
const isKeyOf = <T extends object>(obj: T, key: keyof any): key is keyof T => key in obj;
|
||
|
|
|
||
|
|
const arg = process.argv[2];
|
||
|
|
|
||
|
|
if (arg && isKeyOf(renew, arg))
|
||
|
|
renew[arg]().then(json => save(json, arg));
|
||
|
|
else
|
||
|
|
Object.entries(renew).forEach(([key, fn]) =>
|
||
|
|
isKeyOf(renew, key) && fn().then(json => save(json, key))
|
||
|
|
);
|