import type Artplayer from 'artplayer' import type { JassubInstance, JassubOption } from 'artplayer-plugin-jassub' import jassub from 'artplayer-plugin-jassub' import legacy from 'artplayer-plugin-jassub/legacy' type Equal = (() => T extends A ? 1 : 2) extends (() => T extends B ? 1 : 2) ? true : false type Assert = T interface OldResult { name: 'artplayerPluginJassub', instance: JassubInstance } type OldFactory = (option: JassubOption) => (art: Artplayer) => OldResult type FactoryCheck = Assert> type ArgumentCheck = Assert, [option: JassubOption]>> type ReturnCheck = Assert>, OldResult>> type ResizeCheck = Assert, [force?: boolean, width?: number, height?: number, top?: number, left?: number]>> declare const art: Artplayer declare const instance: JassubInstance const option: JassubOption = { workerUrl: '/worker.js', wasmUrl: '/worker.wasm', modernWasmUrl: '/modern.wasm', futureOption: true } const replacement: typeof jassub = (_option: JassubOption) => (_art: Artplayer) => ({ name: 'artplayerPluginJassub', instance }) const reverse: OldFactory = jassub const legacyReplacement: typeof legacy = replacement const result: OldResult = jassub(option)(art) legacy(option)(art) const resize: Promise = result.instance.resize(true, 640, 360, 0, 0) const video: Promise = result.instance.setVideo(art.video) const destroy: Promise = result.instance.destroy() const extension: string = result.instance.futureMethod(option.futureOption) export type { ArgumentCheck, FactoryCheck, ResizeCheck, ReturnCheck } export { destroy, extension, legacyReplacement, replacement, resize, reverse, video }