import { Effects, ExpectedExports } from "../types" import { Utils, utils } from "../util" import { WrapperDataContract } from "../wrapperData/wrapperDataContract" export type UninstallFn = (opts: { effects: Effects utils: Utils }) => Promise export class Uninstall { private constructor( readonly wrapperDataContract: WrapperDataContract, readonly fn: UninstallFn, ) {} static of( wrapperDataContract: WrapperDataContract, fn: UninstallFn, ) { return new Uninstall(wrapperDataContract, fn) } async uninit({ effects, nextVersion, }: Parameters[0]) { if (!nextVersion) await this.fn({ effects, utils: utils(this.wrapperDataContract, effects), }) } } export function setupUninstall( wrapperDataContract: WrapperDataContract, fn: UninstallFn, ) { return Uninstall.of(wrapperDataContract, fn) }