1{"version":3,"file":"FileSystem.js","sourceRoot":"","sources":["../src/FileSystem.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventEmitter, Subscription, UnavailabilityError } from 'expo-modules-core';\nimport { Platform } from 'react-native';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport ExponentFileSystem from './ExponentFileSystem';\nimport {\n  DownloadOptions,\n  DownloadPauseState,\n  DownloadProgressCallback,\n  FileSystemNetworkTaskProgressCallback,\n  DownloadProgressData,\n  UploadProgressData,\n  DownloadResult,\n  EncodingType,\n  FileInfo,\n  FileSystemAcceptedUploadHttpMethod,\n  FileSystemDownloadResult,\n  FileSystemRequestDirectoryPermissionsResult,\n  FileSystemSessionType,\n  FileSystemUploadOptions,\n  FileSystemUploadResult,\n  FileSystemUploadType,\n  ProgressEvent,\n  ReadingOptions,\n  WritingOptions,\n} from './FileSystem.types';\n\nif (!ExponentFileSystem) {\n  console.warn(\n    \"No native ExponentFileSystem module found, are you sure the expo-file-system's module is linked properly?\"\n  );\n}\n// Prevent webpack from pruning this.\nconst _unused = new EventEmitter(ExponentFileSystem); // eslint-disable-line\n\nexport {\n  DownloadOptions,\n  DownloadPauseState,\n  DownloadProgressCallback,\n  DownloadProgressData,\n  DownloadResult,\n  EncodingType,\n  FileInfo,\n  FileSystemDownloadResult,\n  FileSystemRequestDirectoryPermissionsResult,\n  FileSystemAcceptedUploadHttpMethod,\n  FileSystemSessionType,\n  FileSystemUploadOptions,\n  FileSystemUploadResult,\n  FileSystemUploadType,\n  FileSystemNetworkTaskProgressCallback,\n  ReadingOptions,\n  WritingOptions,\n};\n\nfunction normalizeEndingSlash(p: string | null): string | null {\n  if (p != null) {\n    return p.replace(/\\/*$/, '') + '/';\n  }\n  return null;\n}\n\nexport const documentDirectory = normalizeEndingSlash(ExponentFileSystem.documentDirectory);\nexport const cacheDirectory = normalizeEndingSlash(ExponentFileSystem.cacheDirectory);\n\nexport const { bundledAssets, bundleDirectory } = ExponentFileSystem;\n\nexport async function getInfoAsync(\n  fileUri: string,\n  options: { md5?: boolean; size?: boolean } = {}\n): Promise<FileInfo> {\n  if (!ExponentFileSystem.getInfoAsync) {\n    throw new UnavailabilityError('expo-file-system', 'getInfoAsync');\n  }\n  return await ExponentFileSystem.getInfoAsync(fileUri, options);\n}\n\nexport async function readAsStringAsync(\n  fileUri: string,\n  options?: ReadingOptions\n): Promise<string> {\n  if (!ExponentFileSystem.readAsStringAsync) {\n    throw new UnavailabilityError('expo-file-system', 'readAsStringAsync');\n  }\n  return await ExponentFileSystem.readAsStringAsync(fileUri, options || {});\n}\n\nexport async function getContentUriAsync(fileUri: string): Promise<string> {\n  if (Platform.OS === 'android') {\n    if (!ExponentFileSystem.getContentUriAsync) {\n      throw new UnavailabilityError('expo-file-system', 'getContentUriAsync');\n    }\n    return await ExponentFileSystem.getContentUriAsync(fileUri);\n  } else {\n    return new Promise(function (resolve, reject) {\n      resolve(fileUri);\n    });\n  }\n}\n\nexport async function writeAsStringAsync(\n  fileUri: string,\n  contents: string,\n  options: WritingOptions = {}\n): Promise<void> {\n  if (!ExponentFileSystem.writeAsStringAsync) {\n    throw new UnavailabilityError('expo-file-system', 'writeAsStringAsync');\n  }\n  return await ExponentFileSystem.writeAsStringAsync(fileUri, contents, options);\n}\n\nexport async function deleteAsync(\n  fileUri: string,\n  options: { idempotent?: boolean } = {}\n): Promise<void> {\n  if (!ExponentFileSystem.deleteAsync) {\n    throw new UnavailabilityError('expo-file-system', 'deleteAsync');\n  }\n  return await ExponentFileSystem.deleteAsync(fileUri, options);\n}\n\nexport async function deleteLegacyDocumentDirectoryAndroid(): Promise<void> {\n  if (Platform.OS !== 'android' || documentDirectory == null) {\n    return;\n  }\n  const legacyDocumentDirectory = `${documentDirectory}ExperienceData/`;\n  return await deleteAsync(legacyDocumentDirectory, { idempotent: true });\n}\n\nexport async function moveAsync(options: { from: string; to: string }): Promise<void> {\n  if (!ExponentFileSystem.moveAsync) {\n    throw new UnavailabilityError('expo-file-system', 'moveAsync');\n  }\n  return await ExponentFileSystem.moveAsync(options);\n}\n\nexport async function copyAsync(options: { from: string; to: string }): Promise<void> {\n  if (!ExponentFileSystem.copyAsync) {\n    throw new UnavailabilityError('expo-file-system', 'copyAsync');\n  }\n  return await ExponentFileSystem.copyAsync(options);\n}\n\nexport async function makeDirectoryAsync(\n  fileUri: string,\n  options: { intermediates?: boolean } = {}\n): Promise<void> {\n  if (!ExponentFileSystem.makeDirectoryAsync) {\n    throw new UnavailabilityError('expo-file-system', 'makeDirectoryAsync');\n  }\n  return await ExponentFileSystem.makeDirectoryAsync(fileUri, options);\n}\n\nexport async function readDirectoryAsync(fileUri: string): Promise<string[]> {\n  if (!ExponentFileSystem.readDirectoryAsync) {\n    throw new UnavailabilityError('expo-file-system', 'readDirectoryAsync');\n  }\n  return await ExponentFileSystem.readDirectoryAsync(fileUri, {});\n}\n\nexport async function getFreeDiskStorageAsync(): Promise<number> {\n  if (!ExponentFileSystem.getFreeDiskStorageAsync) {\n    throw new UnavailabilityError('expo-file-system', 'getFreeDiskStorageAsync');\n  }\n  return await ExponentFileSystem.getFreeDiskStorageAsync();\n}\n\nexport async function getTotalDiskCapacityAsync(): Promise<number> {\n  if (!ExponentFileSystem.getTotalDiskCapacityAsync) {\n    throw new UnavailabilityError('expo-file-system', 'getTotalDiskCapacityAsync');\n  }\n  return await ExponentFileSystem.getTotalDiskCapacityAsync();\n}\n\nexport async function downloadAsync(\n  uri: string,\n  fileUri: string,\n  options: DownloadOptions = {}\n): Promise<FileSystemDownloadResult> {\n  if (!ExponentFileSystem.downloadAsync) {\n    throw new UnavailabilityError('expo-file-system', 'downloadAsync');\n  }\n\n  return await ExponentFileSystem.downloadAsync(uri, fileUri, {\n    sessionType: FileSystemSessionType.BACKGROUND,\n    ...options,\n  });\n}\n\nexport async function uploadAsync(\n  url: string,\n  fileUri: string,\n  options: FileSystemUploadOptions = {}\n): Promise<FileSystemUploadResult> {\n  if (!ExponentFileSystem.uploadAsync) {\n    throw new UnavailabilityError('expo-file-system', 'uploadAsync');\n  }\n\n  return await ExponentFileSystem.uploadAsync(url, fileUri, {\n    sessionType: FileSystemSessionType.BACKGROUND,\n    uploadType: FileSystemUploadType.BINARY_CONTENT,\n    ...options,\n    httpMethod: (options.httpMethod || 'POST').toUpperCase(),\n  });\n}\n\nexport function createDownloadResumable(\n  uri: string,\n  fileUri: string,\n  options?: DownloadOptions,\n  callback?: FileSystemNetworkTaskProgressCallback<DownloadProgressData>,\n  resumeData?: string\n): DownloadResumable {\n  return new DownloadResumable(uri, fileUri, options, callback, resumeData);\n}\n\nexport function createUploadTask(\n  url: string,\n  fileUri: string,\n  options?: FileSystemUploadOptions,\n  callback?: FileSystemNetworkTaskProgressCallback<UploadProgressData>\n): UploadTask {\n  return new UploadTask(url, fileUri, options, callback);\n}\n\nexport abstract class FileSystemCancellableNetworkTask<\n  T extends DownloadProgressData | UploadProgressData\n> {\n  private _uuid = uuidv4();\n  protected taskWasCanceled = false;\n  private emitter = new EventEmitter(ExponentFileSystem);\n  private subscription?: Subscription | null;\n\n  public async cancelAsync(): Promise<void> {\n    if (!ExponentFileSystem.networkTaskCancelAsync) {\n      throw new UnavailabilityError('expo-file-system', 'networkTaskCancelAsync');\n    }\n\n    this.removeSubscription();\n    this.taskWasCanceled = true;\n    return await ExponentFileSystem.networkTaskCancelAsync(this.uuid);\n  }\n\n  protected isTaskCancelled(): boolean {\n    if (this.taskWasCanceled) {\n      console.warn('This task was already canceled.');\n      return true;\n    }\n\n    return false;\n  }\n\n  protected get uuid(): string {\n    return this._uuid;\n  }\n\n  protected abstract getEventName(): string;\n\n  protected abstract getCallback(): FileSystemNetworkTaskProgressCallback<T> | undefined;\n\n  protected addSubscription() {\n    if (this.subscription) {\n      return;\n    }\n\n    this.subscription = this.emitter.addListener(this.getEventName(), (event: ProgressEvent<T>) => {\n      if (event.uuid === this.uuid) {\n        const callback = this.getCallback();\n        if (callback) {\n          callback(event.data);\n        }\n      }\n    });\n  }\n\n  protected removeSubscription() {\n    if (!this.subscription) {\n      return;\n    }\n    this.emitter.removeSubscription(this.subscription);\n    this.subscription = null;\n  }\n}\n\nexport class UploadTask extends FileSystemCancellableNetworkTask<UploadProgressData> {\n  private options: FileSystemUploadOptions;\n\n  constructor(\n    private url: string,\n    private fileUri: string,\n    options?: FileSystemUploadOptions,\n    private callback?: FileSystemNetworkTaskProgressCallback<UploadProgressData>\n  ) {\n    super();\n\n    const httpMethod = (options?.httpMethod?.toUpperCase() ||\n      'POST') as FileSystemAcceptedUploadHttpMethod;\n\n    this.options = {\n      sessionType: FileSystemSessionType.BACKGROUND,\n      uploadType: FileSystemUploadType.BINARY_CONTENT,\n      ...options,\n      httpMethod,\n    };\n  }\n\n  protected getEventName(): string {\n    return 'expo-file-system.uploadProgress';\n  }\n  protected getCallback(): FileSystemNetworkTaskProgressCallback<UploadProgressData> | undefined {\n    return this.callback;\n  }\n\n  public async uploadAsync(): Promise<FileSystemUploadResult | undefined> {\n    if (!ExponentFileSystem.uploadTaskStartAsync) {\n      throw new UnavailabilityError('expo-file-system', 'uploadTaskStartAsync');\n    }\n\n    if (this.isTaskCancelled()) {\n      return;\n    }\n\n    this.addSubscription();\n    const result = await ExponentFileSystem.uploadTaskStartAsync(\n      this.url,\n      this.fileUri,\n      this.uuid,\n      this.options\n    );\n    this.removeSubscription();\n\n    return result;\n  }\n}\n\nexport class DownloadResumable extends FileSystemCancellableNetworkTask<DownloadProgressData> {\n  constructor(\n    private url: string,\n    private _fileUri: string,\n    private options: DownloadOptions = {},\n    private callback?: FileSystemNetworkTaskProgressCallback<DownloadProgressData>,\n    private resumeData?: string\n  ) {\n    super();\n  }\n\n  public get fileUri(): string {\n    return this._fileUri;\n  }\n\n  protected getEventName(): string {\n    return 'expo-file-system.downloadProgress';\n  }\n\n  protected getCallback(): FileSystemNetworkTaskProgressCallback<DownloadProgressData> | undefined {\n    return this.callback;\n  }\n\n  async downloadAsync(): Promise<FileSystemDownloadResult | undefined> {\n    if (!ExponentFileSystem.downloadResumableStartAsync) {\n      throw new UnavailabilityError('expo-file-system', 'downloadResumableStartAsync');\n    }\n\n    if (this.isTaskCancelled()) {\n      return;\n    }\n\n    this.addSubscription();\n    return await ExponentFileSystem.downloadResumableStartAsync(\n      this.url,\n      this._fileUri,\n      this.uuid,\n      this.options,\n      this.resumeData\n    );\n  }\n\n  async pauseAsync(): Promise<DownloadPauseState> {\n    if (!ExponentFileSystem.downloadResumablePauseAsync) {\n      throw new UnavailabilityError('expo-file-system', 'downloadResumablePauseAsync');\n    }\n\n    if (this.isTaskCancelled()) {\n      return {\n        fileUri: this._fileUri,\n        options: this.options,\n        url: this.url,\n      };\n    }\n\n    const pauseResult = await ExponentFileSystem.downloadResumablePauseAsync(this.uuid);\n    this.removeSubscription();\n    if (pauseResult) {\n      this.resumeData = pauseResult.resumeData;\n      return this.savable();\n    } else {\n      throw new Error('Unable to generate a savable pause state');\n    }\n  }\n\n  async resumeAsync(): Promise<FileSystemDownloadResult | undefined> {\n    if (!ExponentFileSystem.downloadResumableStartAsync) {\n      throw new UnavailabilityError('expo-file-system', 'downloadResumableStartAsync');\n    }\n\n    if (this.isTaskCancelled()) {\n      return;\n    }\n\n    this.addSubscription();\n    return await ExponentFileSystem.downloadResumableStartAsync(\n      this.url,\n      this.fileUri,\n      this.uuid,\n      this.options,\n      this.resumeData\n    );\n  }\n\n  savable(): DownloadPauseState {\n    return {\n      url: this.url,\n      fileUri: this.fileUri,\n      options: this.options,\n      resumeData: this.resumeData,\n    };\n  }\n}\n\nconst baseReadAsStringAsync = readAsStringAsync;\nconst baseWriteAsStringAsync = writeAsStringAsync;\nconst baseDeleteAsync = deleteAsync;\nconst baseMoveAsync = moveAsync;\nconst baseCopyAsync = copyAsync;\n/**\n * Android only\n */\nexport namespace StorageAccessFramework {\n  export function getUriForDirectoryInRoot(folderName: string) {\n    return `content://com.android.externalstorage.documents/tree/primary:${folderName}/document/primary:${folderName}`;\n  }\n\n  export async function requestDirectoryPermissionsAsync(\n    initialFileUrl: string | null = null\n  ): Promise<FileSystemRequestDirectoryPermissionsResult> {\n    if (!ExponentFileSystem.requestDirectoryPermissionsAsync) {\n      throw new UnavailabilityError(\n        'expo-file-system',\n        'StorageAccessFramework.requestDirectoryPermissionsAsync'\n      );\n    }\n\n    return await ExponentFileSystem.requestDirectoryPermissionsAsync(initialFileUrl);\n  }\n\n  export async function readDirectoryAsync(dirUri: string): Promise<string[]> {\n    if (!ExponentFileSystem.readSAFDirectoryAsync) {\n      throw new UnavailabilityError(\n        'expo-file-system',\n        'StorageAccessFramework.readDirectoryAsync'\n      );\n    }\n    return await ExponentFileSystem.readSAFDirectoryAsync(dirUri, {});\n  }\n\n  export async function makeDirectoryAsync(parentUri: string, dirName: string): Promise<string> {\n    if (!ExponentFileSystem.makeSAFDirectoryAsync) {\n      throw new UnavailabilityError(\n        'expo-file-system',\n        'StorageAccessFramework.makeDirectoryAsync'\n      );\n    }\n    return await ExponentFileSystem.makeSAFDirectoryAsync(parentUri, dirName);\n  }\n\n  export async function createFileAsync(\n    parentUri: string,\n    fileName: string,\n    mimeType: string\n  ): Promise<string> {\n    if (!ExponentFileSystem.createSAFFileAsync) {\n      throw new UnavailabilityError('expo-file-system', 'StorageAccessFramework.createFileAsync');\n    }\n    return await ExponentFileSystem.createSAFFileAsync(parentUri, fileName, mimeType);\n  }\n\n  export const writeAsStringAsync = baseWriteAsStringAsync;\n  export const readAsStringAsync = baseReadAsStringAsync;\n  export const deleteAsync = baseDeleteAsync;\n  export const moveAsync = baseMoveAsync;\n  export const copyAsync = baseCopyAsync;\n}\n"]}