export type DocumentPickerAsset = { uri: string name: string size?: number mimeType?: string } type DocumentPickerSuccessResult = { canceled: false assets: DocumentPickerAsset[] } type DocumentPickerCanceledResult = { canceled: true assets: null } export type DocumentPickerResult = DocumentPickerSuccessResult | DocumentPickerCanceledResult export interface DocumentPickerOpenOptions { // MIME types the picker should restrict to. Hosts forward to the // underlying picker's `type` argument. Omitted/empty means no // restriction (the picker behaves as before). mimeTypes?: string[] } interface DocumentPicker { openAsync: (options?: DocumentPickerOpenOptions) => Promise } export class DocumentPickerAdapter { openAsync: (options?: DocumentPickerOpenOptions) => Promise configured: boolean constructor(methods?: DocumentPicker) { this.openAsync = methods?.openAsync ?? (async () => ({ canceled: true, assets: null })) this.configured = !!methods } }