import { Languages , TranslatorEnv , TranslatorInit , TranslateResult , TranslateQueryResult } from "./type" ; import { Language } from "@opentranslate/languages" ; import Axios , { AxiosInstance , AxiosRequestConfig , AxiosPromise } from "axios" ; import { detectLang } from "./detect-lang" ; export abstract class Translator < Config extends { } = { } > { axios : AxiosInstance ; protected readonly env : TranslatorEnv ; /**
     * 自定义选项
     */ config : Config ; /**
     * 翻译源标识符
     */ abstract readonly name : string ; /**
     * 可选的axios实例
     */ constructor ( init = { } ) { this . env = init . env || "node" ; this . axios = init . axios || Axios ; this . config = init . config || ( { } as Config ) ; } /**
     * 获取翻译器所支持的语言列表： 语言标识符数组
     */ abstract getSupportLanguages ( ) ; /**
     * 下游应用调用的接口
     */ async translate ( text , from , to , config = { } as Config ) { const queryResult = await this . query ( text , from , to , { ... this . config , ... config } ) ; return { ... queryResult , engine : this . name } ; } /**
     * 更新 token 的方法
     */ updateToken ? ( ) ; /**
     * 翻译源需要实现的方法
     */ protected abstract query ( text , from , to , config ) ; protected request < R = { } > ( url , config ? ) { return this . axios ( url , config ) ; } /**
     * 如果翻译源提供了单独的检测语言的功能，请实现此接口
     */ async detect ( text ) { return detectLang ( text ) ; } returns { Promise < string | null > } textToSpeech ( text , lang , meta ? ) { return Promise . resolve ( null ) ; } }