@sendbird/uikit-react-native 3.11.2 → 3.11.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/libs/InternalLocalCacheStorage.js +6 -1
- package/lib/commonjs/libs/InternalLocalCacheStorage.js.map +1 -1
- package/lib/commonjs/platform/createFileService.expo.js +3 -3
- package/lib/commonjs/platform/createFileService.expo.js.map +1 -1
- package/lib/commonjs/platform/createMediaService.expo.js +1 -1
- package/lib/commonjs/platform/createMediaService.expo.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/utils/expoBackwardUtils.js +51 -1
- package/lib/commonjs/utils/expoBackwardUtils.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/libs/InternalLocalCacheStorage.js +6 -1
- package/lib/module/libs/InternalLocalCacheStorage.js.map +1 -1
- package/lib/module/platform/createFileService.expo.js +3 -3
- package/lib/module/platform/createFileService.expo.js.map +1 -1
- package/lib/module/platform/createMediaService.expo.js +1 -1
- package/lib/module/platform/createMediaService.expo.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/expoBackwardUtils.js +52 -1
- package/lib/module/utils/expoBackwardUtils.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
- package/lib/typescript/src/domain/openChannel/component/OpenChannelHeader.d.ts +1 -1
- package/lib/typescript/src/hooks/useChannelInputItems.d.ts +1 -1
- package/lib/typescript/src/types.d.ts +4 -1
- package/lib/typescript/src/utils/expoBackwardUtils.d.ts +36 -0
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +14 -5
- package/src/libs/InternalLocalCacheStorage.ts +6 -1
- package/src/platform/createFileService.expo.ts +5 -3
- package/src/platform/createMediaService.expo.tsx +1 -1
- package/src/types.ts +5 -1
- package/src/utils/expoBackwardUtils.ts +71 -1
- package/src/version.ts +1 -1
|
@@ -40,7 +40,12 @@ class InternalLocalCacheStorage {
|
|
|
40
40
|
}
|
|
41
41
|
async removeItem(key) {
|
|
42
42
|
if (this._mmkv) {
|
|
43
|
-
|
|
43
|
+
// Support both v3.x (delete) and v4.x (remove) APIs for backward compatibility
|
|
44
|
+
if (this._mmkv.delete) {
|
|
45
|
+
this._mmkv.delete(key);
|
|
46
|
+
} else if (this._mmkv.remove) {
|
|
47
|
+
this._mmkv.remove(key);
|
|
48
|
+
}
|
|
44
49
|
} else if (this._async) {
|
|
45
50
|
return this._async.removeItem(key);
|
|
46
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uikitUtils","require","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","InternalLocalCacheStorage","constructor","storage","ASYNC_NOOP","_mmkv","_async","getAllKeys","getItem","key","getString","removeItem","delete","setItem","set","multiGet","keys","Promise","all","map","_this$_async","multiRemove","_this$_async2","multiSet","keyValuePairs","_this$_async3","exports","default"],"sources":["InternalLocalCacheStorage.ts"],"sourcesContent":["import { ASYNC_NOOP } from '@sendbird/uikit-utils';\n\nimport type {\n AsyncLocalCacheStorage,\n KeyValuePairGet,\n KeyValuePairSet,\n LocalCacheStorage,\n MMKVLocalCacheStorage,\n} from '../types';\n\nexport default class InternalLocalCacheStorage implements AsyncLocalCacheStorage {\n private readonly _mmkv?: MMKVLocalCacheStorage;\n private readonly _async?: AsyncLocalCacheStorage;\n\n constructor(storage: LocalCacheStorage) {\n if ('getString' in storage) {\n this._mmkv = storage;\n } else {\n this._async = storage;\n }\n }\n\n async getAllKeys() {\n if (this._mmkv) {\n return this._mmkv.getAllKeys();\n } else if (this._async) {\n return this._async.getAllKeys();\n } else {\n return [];\n }\n }\n\n async getItem(key: string) {\n if (this._mmkv) {\n return this._mmkv.getString(key) ?? null;\n } else if (this._async) {\n return this._async.getItem(key);\n } else {\n return null;\n }\n }\n\n async removeItem(key: string) {\n if (this._mmkv) {\n this._mmkv.delete(key);\n } else if (this._async) {\n return this._async.removeItem(key);\n }\n }\n\n async setItem(key: string, value: string) {\n if (this._mmkv) {\n this._mmkv.set(key, value);\n } else if (this._async) {\n return this._async.setItem(key, value);\n }\n }\n\n async multiGet(keys: string[]) {\n if (this._mmkv) {\n return Promise.all(keys.map(async (key) => [key, await this.getItem(key)] as KeyValuePairGet));\n } else if (this._async) {\n if (this._async?.multiGet) {\n return this._async.multiGet(keys);\n } else {\n return Promise.all(keys.map(async (key) => [key, await this.getItem(key)] as KeyValuePairGet));\n }\n } else {\n return [];\n }\n }\n\n async multiRemove(keys: string[]) {\n if (this._mmkv) {\n await Promise.all(keys.map(async (key) => this.removeItem(key)));\n } else if (this._async) {\n if (this._async?.multiRemove) {\n await this._async.multiRemove(keys);\n } else {\n await Promise.all(keys.map(async (key) => this.removeItem(key)));\n }\n }\n }\n\n async multiSet(keyValuePairs: Array<KeyValuePairSet>) {\n if (this._mmkv) {\n await Promise.all(keyValuePairs.map(([key, value]) => this.setItem(key, value)));\n } else if (this._async) {\n if (this._async?.multiSet) {\n await this._async.multiSet(keyValuePairs);\n } else {\n await Promise.all(keyValuePairs.map(([key, value]) => this.setItem(key, value)));\n }\n }\n }\n\n clear = ASYNC_NOOP;\n flushGetRequests = ASYNC_NOOP;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAAmD,SAAAC,gBAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAD,CAAA,GAAAI,MAAA,CAAAC,cAAA,CAAAL,CAAA,EAAAC,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAT,CAAA,CAAAC,CAAA,IAAAC,CAAA,EAAAF,CAAA;AAAA,SAAAG,eAAAD,CAAA,QAAAQ,CAAA,GAAAC,YAAA,CAAAT,CAAA,uCAAAQ,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAT,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAF,CAAA,GAAAE,CAAA,CAAAU,MAAA,CAAAC,WAAA,kBAAAb,CAAA,QAAAU,CAAA,GAAAV,CAAA,CAAAc,IAAA,CAAAZ,CAAA,EAAAD,CAAA,uCAAAS,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAAd,CAAA,GAAAe,MAAA,GAAAC,MAAA,EAAAf,CAAA;AAUpC,MAAMgB,yBAAyB,CAAmC;EAI/EC,WAAWA,CAACC,OAA0B,EAAE;IAAArB,eAAA;IAAAA,eAAA;IAAAA,eAAA,
|
|
1
|
+
{"version":3,"names":["_uikitUtils","require","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","InternalLocalCacheStorage","constructor","storage","ASYNC_NOOP","_mmkv","_async","getAllKeys","getItem","key","getString","removeItem","delete","remove","setItem","set","multiGet","keys","Promise","all","map","_this$_async","multiRemove","_this$_async2","multiSet","keyValuePairs","_this$_async3","exports","default"],"sources":["InternalLocalCacheStorage.ts"],"sourcesContent":["import { ASYNC_NOOP } from '@sendbird/uikit-utils';\n\nimport type {\n AsyncLocalCacheStorage,\n KeyValuePairGet,\n KeyValuePairSet,\n LocalCacheStorage,\n MMKVLocalCacheStorage,\n} from '../types';\n\nexport default class InternalLocalCacheStorage implements AsyncLocalCacheStorage {\n private readonly _mmkv?: MMKVLocalCacheStorage;\n private readonly _async?: AsyncLocalCacheStorage;\n\n constructor(storage: LocalCacheStorage) {\n if ('getString' in storage) {\n this._mmkv = storage;\n } else {\n this._async = storage;\n }\n }\n\n async getAllKeys() {\n if (this._mmkv) {\n return this._mmkv.getAllKeys();\n } else if (this._async) {\n return this._async.getAllKeys();\n } else {\n return [];\n }\n }\n\n async getItem(key: string) {\n if (this._mmkv) {\n return this._mmkv.getString(key) ?? null;\n } else if (this._async) {\n return this._async.getItem(key);\n } else {\n return null;\n }\n }\n\n async removeItem(key: string) {\n if (this._mmkv) {\n // Support both v3.x (delete) and v4.x (remove) APIs for backward compatibility\n if (this._mmkv.delete) {\n this._mmkv.delete(key);\n } else if (this._mmkv.remove) {\n this._mmkv.remove(key);\n }\n } else if (this._async) {\n return this._async.removeItem(key);\n }\n }\n\n async setItem(key: string, value: string) {\n if (this._mmkv) {\n this._mmkv.set(key, value);\n } else if (this._async) {\n return this._async.setItem(key, value);\n }\n }\n\n async multiGet(keys: string[]) {\n if (this._mmkv) {\n return Promise.all(keys.map(async (key) => [key, await this.getItem(key)] as KeyValuePairGet));\n } else if (this._async) {\n if (this._async?.multiGet) {\n return this._async.multiGet(keys);\n } else {\n return Promise.all(keys.map(async (key) => [key, await this.getItem(key)] as KeyValuePairGet));\n }\n } else {\n return [];\n }\n }\n\n async multiRemove(keys: string[]) {\n if (this._mmkv) {\n await Promise.all(keys.map(async (key) => this.removeItem(key)));\n } else if (this._async) {\n if (this._async?.multiRemove) {\n await this._async.multiRemove(keys);\n } else {\n await Promise.all(keys.map(async (key) => this.removeItem(key)));\n }\n }\n }\n\n async multiSet(keyValuePairs: Array<KeyValuePairSet>) {\n if (this._mmkv) {\n await Promise.all(keyValuePairs.map(([key, value]) => this.setItem(key, value)));\n } else if (this._async) {\n if (this._async?.multiSet) {\n await this._async.multiSet(keyValuePairs);\n } else {\n await Promise.all(keyValuePairs.map(([key, value]) => this.setItem(key, value)));\n }\n }\n }\n\n clear = ASYNC_NOOP;\n flushGetRequests = ASYNC_NOOP;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -117,17 +117,17 @@ const createExpoFileService = ({
|
|
|
117
117
|
const granted = await this.requestMediaLibraryWritePermission();
|
|
118
118
|
if (!granted) throw new Error('Permission not granted');
|
|
119
119
|
}
|
|
120
|
-
const basePath = fsModule
|
|
120
|
+
const basePath = _expoBackwardUtils.default.fileSystem.getDocumentDirectory(fsModule) || _expoBackwardUtils.default.fileSystem.getCacheDirectory(fsModule);
|
|
121
121
|
if (!basePath) throw new Error('Cannot determine directory');
|
|
122
122
|
const downloadPath = `${basePath}/${options.fileName}`;
|
|
123
|
-
const response = await
|
|
123
|
+
const response = await _expoBackwardUtils.default.fileSystem.downloadFile(fsModule, options.fileUrl, downloadPath);
|
|
124
124
|
if ((0, _uikitUtils.getFileType)(options.fileType || '').match(/video|image/)) {
|
|
125
125
|
await mediaLibraryModule.saveToLibraryAsync(response.uri);
|
|
126
126
|
}
|
|
127
127
|
return response.uri;
|
|
128
128
|
}
|
|
129
129
|
createRecordFilePath(customExtension = 'm4a') {
|
|
130
|
-
const basePath = fsModule
|
|
130
|
+
const basePath = _expoBackwardUtils.default.fileSystem.getCacheDirectory(fsModule);
|
|
131
131
|
if (!basePath) throw new Error('Cannot determine directory');
|
|
132
132
|
const filename = `record-${Date.now()}.${customExtension}`;
|
|
133
133
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uikitUtils","require","_SBUError","_interopRequireDefault","_expoBackwardUtils","_expoPermissionGranted","e","__esModule","default","createExpoFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","ExpoFileServiceInterface","hasCameraPermission","res","getCameraPermissionsAsync","expoPermissionGranted","requestCameraPermission","requestCameraPermissionsAsync","hasMediaLibraryReadPermission","perms","getMediaLibraryPermissionsAsync","requestMediaLibraryReadPermission","requestMediaLibraryPermissionsAsync","hasMediaLibraryWritePermission","getPermissionsAsync","requestMediaLibraryWritePermission","requestPermissionsAsync","openCamera","options","hasPermission","granted","_options$onOpenFailur","onOpenFailure","call","SBUError","PERMISSIONS_DENIED","response","launchCameraAsync","mediaTypes","mediaType","MediaTypeOptions","Images","Videos","All","expoBackwardUtils","imagePicker","isCanceled","file","toFilePickerResponses","openMediaLibrary","_options$onOpenFailur2","selectionLimit","launchImageLibraryAsync","openDocument","getDocumentAsync","type","documentPicker","_options$onOpenFailur3","UNKNOWN","save","Error","basePath","documentDirectory","cacheDirectory","downloadPath","fileName","downloadAsync","fileUrl","getFileType","fileType","match","saveToLibraryAsync","uri","createRecordFilePath","customExtension","filename","Date","now","recordFilePath","_default","exports"],"sources":["createFileService.expo.ts"],"sourcesContent":["import type * as ExpoDocumentPicker from 'expo-document-picker';\nimport type * as ExpoFs from 'expo-file-system';\nimport type * as ExpoImagePicker from 'expo-image-picker';\nimport type * as ExpoMediaLibrary from 'expo-media-library';\n\nimport { getFileType } from '@sendbird/uikit-utils';\n\nimport SBUError from '../libs/SBUError';\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoMediaLibraryPermissionResponse, ExpoPermissionResponse } from '../utils/expoPermissionGranted';\nimport expoPermissionGranted from '../utils/expoPermissionGranted';\nimport type {\n FilePickerResponse,\n FileServiceInterface,\n OpenCameraOptions,\n OpenDocumentOptions,\n OpenMediaLibraryOptions,\n SaveOptions,\n} from './types';\n\nconst createExpoFileService = ({\n imagePickerModule,\n documentPickerModule,\n mediaLibraryModule,\n fsModule,\n}: {\n imagePickerModule: typeof ExpoImagePicker;\n documentPickerModule: typeof ExpoDocumentPicker;\n mediaLibraryModule: typeof ExpoMediaLibrary;\n fsModule: typeof ExpoFs;\n}): FileServiceInterface => {\n class ExpoFileServiceInterface implements FileServiceInterface {\n async hasCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.getCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n\n async requestCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.requestCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n\n async hasMediaLibraryReadPermission(): Promise<boolean> {\n const perms = (await imagePickerModule.getMediaLibraryPermissionsAsync(\n false,\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async requestMediaLibraryReadPermission(): Promise<boolean> {\n const perms = (await imagePickerModule.requestMediaLibraryPermissionsAsync(\n false,\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async hasMediaLibraryWritePermission(): Promise<boolean> {\n const perms = (await mediaLibraryModule.getPermissionsAsync(true, [])) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async requestMediaLibraryWritePermission(): Promise<boolean> {\n const perms = (await mediaLibraryModule.requestPermissionsAsync(true, [])) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async openCamera(options?: OpenCameraOptions): Promise<FilePickerResponse> {\n const hasPermission = await this.hasCameraPermission();\n if (!hasPermission) {\n const granted = await this.requestCameraPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const response = await imagePickerModule.launchCameraAsync({\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n\n if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;\n\n const [file] = await expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);\n return file;\n }\n\n async openMediaLibrary(options: OpenMediaLibraryOptions) {\n const hasPermission = await this.hasMediaLibraryReadPermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryReadPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const selectionLimit = options?.selectionLimit || 1;\n const response = await imagePickerModule.launchImageLibraryAsync({\n selectionLimit,\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;\n return expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);\n }\n\n async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n try {\n const response = await documentPickerModule.getDocumentAsync({ type: '*/*' });\n if (expoBackwardUtils.documentPicker.isCanceled(response)) return null;\n\n const [file] = await expoBackwardUtils.documentPicker.toFilePickerResponses(response);\n return file;\n } catch (e) {\n options?.onOpenFailure?.(SBUError.UNKNOWN, e);\n return null;\n }\n }\n\n async save(options: SaveOptions): Promise<string> {\n const hasPermission = await this.hasMediaLibraryWritePermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryWritePermission();\n if (!granted) throw new Error('Permission not granted');\n }\n\n const basePath = fsModule.documentDirectory || fsModule.cacheDirectory;\n if (!basePath) throw new Error('Cannot determine directory');\n\n const downloadPath = `${basePath}/${options.fileName}`;\n\n const response = await fsModule.downloadAsync(options.fileUrl, downloadPath);\n if (getFileType(options.fileType || '').match(/video|image/)) {\n await mediaLibraryModule.saveToLibraryAsync(response.uri);\n }\n return response.uri;\n }\n\n createRecordFilePath(customExtension = 'm4a'): { recordFilePath: string; uri: string } {\n const basePath = fsModule.cacheDirectory;\n if (!basePath) throw new Error('Cannot determine directory');\n\n const filename = `record-${Date.now()}.${customExtension}`;\n return {\n uri: `${basePath}/${filename}`,\n recordFilePath: `${basePath}/${filename}`,\n };\n }\n }\n\n return new ExpoFileServiceInterface();\n};\n\nexport default createExpoFileService;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_uikitUtils","require","_SBUError","_interopRequireDefault","_expoBackwardUtils","_expoPermissionGranted","e","__esModule","default","createExpoFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","ExpoFileServiceInterface","hasCameraPermission","res","getCameraPermissionsAsync","expoPermissionGranted","requestCameraPermission","requestCameraPermissionsAsync","hasMediaLibraryReadPermission","perms","getMediaLibraryPermissionsAsync","requestMediaLibraryReadPermission","requestMediaLibraryPermissionsAsync","hasMediaLibraryWritePermission","getPermissionsAsync","requestMediaLibraryWritePermission","requestPermissionsAsync","openCamera","options","hasPermission","granted","_options$onOpenFailur","onOpenFailure","call","SBUError","PERMISSIONS_DENIED","response","launchCameraAsync","mediaTypes","mediaType","MediaTypeOptions","Images","Videos","All","expoBackwardUtils","imagePicker","isCanceled","file","toFilePickerResponses","openMediaLibrary","_options$onOpenFailur2","selectionLimit","launchImageLibraryAsync","openDocument","getDocumentAsync","type","documentPicker","_options$onOpenFailur3","UNKNOWN","save","Error","basePath","fileSystem","getDocumentDirectory","getCacheDirectory","downloadPath","fileName","downloadFile","fileUrl","getFileType","fileType","match","saveToLibraryAsync","uri","createRecordFilePath","customExtension","filename","Date","now","recordFilePath","_default","exports"],"sources":["createFileService.expo.ts"],"sourcesContent":["import type * as ExpoDocumentPicker from 'expo-document-picker';\nimport type * as ExpoFs from 'expo-file-system';\nimport type * as ExpoImagePicker from 'expo-image-picker';\nimport type * as ExpoMediaLibrary from 'expo-media-library';\n\nimport { getFileType } from '@sendbird/uikit-utils';\n\nimport SBUError from '../libs/SBUError';\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoMediaLibraryPermissionResponse, ExpoPermissionResponse } from '../utils/expoPermissionGranted';\nimport expoPermissionGranted from '../utils/expoPermissionGranted';\nimport type {\n FilePickerResponse,\n FileServiceInterface,\n OpenCameraOptions,\n OpenDocumentOptions,\n OpenMediaLibraryOptions,\n SaveOptions,\n} from './types';\n\nconst createExpoFileService = ({\n imagePickerModule,\n documentPickerModule,\n mediaLibraryModule,\n fsModule,\n}: {\n imagePickerModule: typeof ExpoImagePicker;\n documentPickerModule: typeof ExpoDocumentPicker;\n mediaLibraryModule: typeof ExpoMediaLibrary;\n fsModule: typeof ExpoFs;\n}): FileServiceInterface => {\n class ExpoFileServiceInterface implements FileServiceInterface {\n async hasCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.getCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n\n async requestCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.requestCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n\n async hasMediaLibraryReadPermission(): Promise<boolean> {\n const perms = (await imagePickerModule.getMediaLibraryPermissionsAsync(\n false,\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async requestMediaLibraryReadPermission(): Promise<boolean> {\n const perms = (await imagePickerModule.requestMediaLibraryPermissionsAsync(\n false,\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async hasMediaLibraryWritePermission(): Promise<boolean> {\n const perms = (await mediaLibraryModule.getPermissionsAsync(true, [])) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async requestMediaLibraryWritePermission(): Promise<boolean> {\n const perms = (await mediaLibraryModule.requestPermissionsAsync(true, [])) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async openCamera(options?: OpenCameraOptions): Promise<FilePickerResponse> {\n const hasPermission = await this.hasCameraPermission();\n if (!hasPermission) {\n const granted = await this.requestCameraPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const response = await imagePickerModule.launchCameraAsync({\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n\n if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;\n\n const [file] = await expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);\n return file;\n }\n\n async openMediaLibrary(options: OpenMediaLibraryOptions) {\n const hasPermission = await this.hasMediaLibraryReadPermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryReadPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const selectionLimit = options?.selectionLimit || 1;\n const response = await imagePickerModule.launchImageLibraryAsync({\n selectionLimit,\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;\n return expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);\n }\n\n async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n try {\n const response = await documentPickerModule.getDocumentAsync({ type: '*/*' });\n if (expoBackwardUtils.documentPicker.isCanceled(response)) return null;\n\n const [file] = await expoBackwardUtils.documentPicker.toFilePickerResponses(response);\n return file;\n } catch (e) {\n options?.onOpenFailure?.(SBUError.UNKNOWN, e);\n return null;\n }\n }\n\n async save(options: SaveOptions): Promise<string> {\n const hasPermission = await this.hasMediaLibraryWritePermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryWritePermission();\n if (!granted) throw new Error('Permission not granted');\n }\n\n const basePath =\n expoBackwardUtils.fileSystem.getDocumentDirectory(fsModule) ||\n expoBackwardUtils.fileSystem.getCacheDirectory(fsModule);\n if (!basePath) throw new Error('Cannot determine directory');\n\n const downloadPath = `${basePath}/${options.fileName}`;\n\n const response = await expoBackwardUtils.fileSystem.downloadFile(fsModule, options.fileUrl, downloadPath);\n if (getFileType(options.fileType || '').match(/video|image/)) {\n await mediaLibraryModule.saveToLibraryAsync(response.uri);\n }\n return response.uri;\n }\n\n createRecordFilePath(customExtension = 'm4a'): { recordFilePath: string; uri: string } {\n const basePath = expoBackwardUtils.fileSystem.getCacheDirectory(fsModule);\n if (!basePath) throw new Error('Cannot determine directory');\n\n const filename = `record-${Date.now()}.${customExtension}`;\n return {\n uri: `${basePath}/${filename}`,\n recordFilePath: `${basePath}/${filename}`,\n };\n }\n }\n\n return new ExpoFileServiceInterface();\n};\n\nexport default createExpoFileService;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -140,7 +140,7 @@ const createExpoMediaService = ({
|
|
|
140
140
|
}], {
|
|
141
141
|
compress: Math.min(Math.max(0, compressionRate), 1)
|
|
142
142
|
});
|
|
143
|
-
const fileInfo = await
|
|
143
|
+
const fileInfo = await _expoBackwardUtils.default.fileSystem.getFileInfo(fsModule, uri);
|
|
144
144
|
return {
|
|
145
145
|
uri: compressedURI,
|
|
146
146
|
size: _expoBackwardUtils.default.toFileSize(fileInfo)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_uikitUtils","_SBUUtils","_interopRequireDefault","_expoBackwardUtils","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","LegacyExpoAVVideoAdapter","constructor","avModule","source","resizeMode","onLoad","props","createElement","Video","useNativeControls","ExpoVideoAdapter","_videoModule","player","useVideoPlayer","useEffect","subscription","addListener","eventData","status","error","timeout","setTimeout","clearTimeout","remove","undefined","getContentFit","mode","React","VideoView","contentFit","createExpoMediaService","thumbnailModule","imageManipulator","fsModule","expoBackwardUtils","expoAV","isLegacyAVModule","Logger","warn","videoAdapter","isVideoModule","VideoComponent","getVideoThumbnail","url","quality","timeMills","uri","getThumbnailAsync","time","path","compressImage","maxWidth","maxHeight","compressionRate","originSize","SBUUtils","getImageSize","resizingSize","getDownscaleSize","width","height","compressedURI","manipulateAsync","resize","compress","Math","min","max","fileInfo","getInfoAsync","size","toFileSize","_default","exports"],"sources":["createMediaService.expo.tsx"],"sourcesContent":["import type * as ExpoAV from 'expo-av';\nimport type * as ExpoFS from 'expo-file-system';\nimport type * as ExpoImageManipulator from 'expo-image-manipulator';\nimport type { EventSubscription } from 'expo-modules-core';\nimport type * as ExpoVideo from 'expo-video';\nimport type { StatusChangeEventPayload } from 'expo-video';\nimport type * as ExpoVideoThumbnail from 'expo-video-thumbnails';\nimport React, { useEffect } from 'react';\n\nimport { Logger, getDownscaleSize } from '@sendbird/uikit-utils';\n\nimport SBUUtils from '../libs/SBUUtils';\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoVideoModule } from '../utils/expoBackwardUtils';\nimport type { MediaServiceInterface, VideoProps } from './types';\n\ntype Modules = {\n avModule: ExpoVideoModule;\n thumbnailModule: typeof ExpoVideoThumbnail;\n imageManipulator: typeof ExpoImageManipulator;\n fsModule: typeof ExpoFS;\n};\n\ninterface VideoModuleAdapter {\n VideoComponent: React.ComponentType<VideoProps>;\n}\n\nclass LegacyExpoAVVideoAdapter implements VideoModuleAdapter {\n private readonly avModule: typeof ExpoAV;\n constructor(avModule: typeof ExpoAV) {\n this.avModule = avModule;\n }\n\n VideoComponent = ({ source, resizeMode, onLoad, ...props }: VideoProps) => {\n // FIXME: type error https://github.com/expo/expo/issues/17101\n // @ts-ignore\n return <this.avModule.Video {...props} source={source} resizeMode={resizeMode} onLoad={onLoad} useNativeControls />;\n };\n}\n\nclass ExpoVideoAdapter implements VideoModuleAdapter {\n constructor(private readonly _videoModule: typeof ExpoVideo) {}\n\n VideoComponent = ({ source, resizeMode, onLoad, ...props }: VideoProps) => {\n const player = this._videoModule.useVideoPlayer(source);\n\n useEffect(() => {\n if (onLoad && player) {\n let subscription: EventSubscription | null = null;\n try {\n subscription = player.addListener('statusChange', (eventData: StatusChangeEventPayload) => {\n const { status, error } = eventData;\n if (status === 'readyToPlay' && !error) {\n onLoad();\n }\n });\n } catch (error) {\n const timeout = setTimeout(() => onLoad(), 300);\n return () => clearTimeout(timeout);\n }\n\n return () => {\n if (subscription) {\n subscription.remove();\n }\n };\n }\n return undefined;\n }, [onLoad, player]);\n\n const getContentFit = (mode: typeof resizeMode): 'cover' | 'contain' | 'fill' => {\n switch (mode) {\n case 'cover':\n return 'cover';\n case 'contain':\n return 'contain';\n case 'stretch':\n return 'fill';\n default:\n return 'contain';\n }\n };\n\n return React.createElement(this._videoModule.VideoView, {\n ...props,\n player,\n contentFit: getContentFit(resizeMode),\n });\n };\n}\n\nconst createExpoMediaService = ({\n avModule,\n thumbnailModule,\n imageManipulator,\n fsModule,\n}: Modules): MediaServiceInterface => {\n if (expoBackwardUtils.expoAV.isLegacyAVModule(avModule)) {\n Logger.warn(\n '[MediaService.Expo] expo-av is deprecated and will be removed in Expo 54. Please migrate to expo-video.',\n );\n }\n\n const videoAdapter = expoBackwardUtils.expoAV.isVideoModule(avModule)\n ? new ExpoVideoAdapter(avModule)\n : new LegacyExpoAVVideoAdapter(avModule);\n\n return {\n VideoComponent: videoAdapter.VideoComponent,\n async getVideoThumbnail({ url, quality, timeMills }) {\n try {\n const { uri } = await thumbnailModule.getThumbnailAsync(url, { quality, time: timeMills });\n return { path: uri };\n } catch {\n return null;\n }\n },\n async compressImage({ maxWidth, maxHeight, compressionRate = 1, uri }) {\n const originSize = await SBUUtils.getImageSize(uri);\n const resizingSize = getDownscaleSize(originSize, { width: maxWidth, height: maxHeight });\n\n const { uri: compressedURI } = await imageManipulator.manipulateAsync(uri, [{ resize: resizingSize }], {\n compress: Math.min(Math.max(0, compressionRate), 1),\n });\n const fileInfo = await fsModule.getInfoAsync(uri);\n\n return { uri: compressedURI, size: expoBackwardUtils.toFileSize(fileInfo) };\n },\n };\n};\n\nexport default createExpoMediaService;\n"],"mappings":";;;;;;AAOA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAD,OAAA;AAEA,IAAAE,SAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,kBAAA,GAAAD,sBAAA,CAAAH,OAAA;AAA2D,SAAAG,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,yBAAAH,CAAA,6BAAAI,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAD,wBAAA,YAAAA,CAAAH,CAAA,WAAAA,CAAA,GAAAM,CAAA,GAAAD,CAAA,KAAAL,CAAA;AAAA,SAAAN,wBAAAM,CAAA,EAAAK,CAAA,SAAAA,CAAA,IAAAL,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAE,OAAA,EAAAF,CAAA,QAAAM,CAAA,GAAAH,wBAAA,CAAAE,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAC,GAAA,CAAAP,CAAA,UAAAM,CAAA,CAAAE,GAAA,CAAAR,CAAA,OAAAS,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAf,CAAA,oBAAAe,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAe,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAd,CAAA,EAAAe,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAf,CAAA,CAAAe,CAAA,YAAAN,CAAA,CAAAP,OAAA,GAAAF,CAAA,EAAAM,CAAA,IAAAA,CAAA,CAAAa,GAAA,CAAAnB,CAAA,EAAAS,CAAA,GAAAA,CAAA;AAAA,SAAAW,SAAA,WAAAA,QAAA,GAAAR,MAAA,CAAAS,MAAA,GAAAT,MAAA,CAAAS,MAAA,CAAAC,IAAA,eAAAb,CAAA,aAAAT,CAAA,MAAAA,CAAA,GAAAuB,SAAA,CAAAC,MAAA,EAAAxB,CAAA,UAAAM,CAAA,GAAAiB,SAAA,CAAAvB,CAAA,YAAAK,CAAA,IAAAC,CAAA,OAAAU,cAAA,CAAAC,IAAA,CAAAX,CAAA,EAAAD,CAAA,MAAAI,CAAA,CAAAJ,CAAA,IAAAC,CAAA,CAAAD,CAAA,aAAAI,CAAA,KAAAW,QAAA,CAAAK,KAAA,OAAAF,SAAA;AAAA,SAAAG,gBAAA1B,CAAA,EAAAK,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAsB,cAAA,CAAAtB,CAAA,MAAAL,CAAA,GAAAY,MAAA,CAAAC,cAAA,CAAAb,CAAA,EAAAK,CAAA,IAAAuB,KAAA,EAAAtB,CAAA,EAAAuB,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAA/B,CAAA,CAAAK,CAAA,IAAAC,CAAA,EAAAN,CAAA;AAAA,SAAA2B,eAAArB,CAAA,QAAAY,CAAA,GAAAc,YAAA,CAAA1B,CAAA,uCAAAY,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAc,aAAA1B,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAN,CAAA,GAAAM,CAAA,CAAA2B,MAAA,CAAAC,WAAA,kBAAAlC,CAAA,QAAAkB,CAAA,GAAAlB,CAAA,CAAAiB,IAAA,CAAAX,CAAA,EAAAD,CAAA,uCAAAa,CAAA,SAAAA,CAAA,YAAAiB,SAAA,yEAAA9B,CAAA,GAAA+B,MAAA,GAAAC,MAAA,EAAA/B,CAAA;AAe3D,MAAMgC,wBAAwB,CAA+B;EAE3DC,WAAWA,CAACC,QAAuB,EAAE;IAAAd,eAAA;IAAAA,eAAA,yBAIpB,CAAC;MAAEe,MAAM;MAAEC,UAAU;MAAEC,MAAM;MAAE,GAAGC;IAAkB,CAAC,KAAK;MACzE;MACA;MACA,oBAAOnD,MAAA,CAAAS,OAAA,CAAA2C,aAAA,MAAML,QAAQ,CAACM,KAAK,EAAA1B,QAAA,KAAKwB,KAAK;QAAEH,MAAM,EAAEA,MAAO;QAACC,UAAU,EAAEA,UAAW;QAACC,MAAM,EAAEA,MAAO;QAACI,iBAAiB;MAAA,EAAE,CAAC;IACrH,CAAC;IAPC,IAAI,CAACP,QAAQ,GAAGA,QAAQ;EAC1B;AAOF;AAEA,MAAMQ,gBAAgB,CAA+B;EACnDT,WAAWA,CAAkBU,YAA8B,EAAE;IAAA,KAAhCA,YAA8B,GAA9BA,YAA8B;IAAAvB,eAAA,yBAE1C,CAAC;MAAEe,MAAM;MAAEC,UAAU;MAAEC,MAAM;MAAE,GAAGC;IAAkB,CAAC,KAAK;MACzE,MAAMM,MAAM,GAAG,IAAI,CAACD,YAAY,CAACE,cAAc,CAACV,MAAM,CAAC;MAEvD,IAAAW,gBAAS,EAAC,MAAM;QACd,IAAIT,MAAM,IAAIO,MAAM,EAAE;UACpB,IAAIG,YAAsC,GAAG,IAAI;UACjD,IAAI;YACFA,YAAY,GAAGH,MAAM,CAACI,WAAW,CAAC,cAAc,EAAGC,SAAmC,IAAK;cACzF,MAAM;gBAAEC,MAAM;gBAAEC;cAAM,CAAC,GAAGF,SAAS;cACnC,IAAIC,MAAM,KAAK,aAAa,IAAI,CAACC,KAAK,EAAE;gBACtCd,MAAM,CAAC,CAAC;cACV;YACF,CAAC,CAAC;UACJ,CAAC,CAAC,OAAOc,KAAK,EAAE;YACd,MAAMC,OAAO,GAAGC,UAAU,CAAC,MAAMhB,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC;YAC/C,OAAO,MAAMiB,YAAY,CAACF,OAAO,CAAC;UACpC;UAEA,OAAO,MAAM;YACX,IAAIL,YAAY,EAAE;cAChBA,YAAY,CAACQ,MAAM,CAAC,CAAC;YACvB;UACF,CAAC;QACH;QACA,OAAOC,SAAS;MAClB,CAAC,EAAE,CAACnB,MAAM,EAAEO,MAAM,CAAC,CAAC;MAEpB,MAAMa,aAAa,GAAIC,IAAuB,IAAmC;QAC/E,QAAQA,IAAI;UACV,KAAK,OAAO;YACV,OAAO,OAAO;UAChB,KAAK,SAAS;YACZ,OAAO,SAAS;UAClB,KAAK,SAAS;YACZ,OAAO,MAAM;UACf;YACE,OAAO,SAAS;QACpB;MACF,CAAC;MAED,oBAAOC,cAAK,CAACpB,aAAa,CAAC,IAAI,CAACI,YAAY,CAACiB,SAAS,EAAE;QACtD,GAAGtB,KAAK;QACRM,MAAM;QACNiB,UAAU,EAAEJ,aAAa,CAACrB,UAAU;MACtC,CAAC,CAAC;IACJ,CAAC;EA/C6D;AAgDhE;AAEA,MAAM0B,sBAAsB,GAAGA,CAAC;EAC9B5B,QAAQ;EACR6B,eAAe;EACfC,gBAAgB;EAChBC;AACO,CAAC,KAA4B;EACpC,IAAIC,0BAAiB,CAACC,MAAM,CAACC,gBAAgB,CAAClC,QAAQ,CAAC,EAAE;IACvDmC,kBAAM,CAACC,IAAI,CACT,yGACF,CAAC;EACH;EAEA,MAAMC,YAAY,GAAGL,0BAAiB,CAACC,MAAM,CAACK,aAAa,CAACtC,QAAQ,CAAC,GACjE,IAAIQ,gBAAgB,CAACR,QAAQ,CAAC,GAC9B,IAAIF,wBAAwB,CAACE,QAAQ,CAAC;EAE1C,OAAO;IACLuC,cAAc,EAAEF,YAAY,CAACE,cAAc;IAC3C,MAAMC,iBAAiBA,CAAC;MAAEC,GAAG;MAAEC,OAAO;MAAEC;IAAU,CAAC,EAAE;MACnD,IAAI;QACF,MAAM;UAAEC;QAAI,CAAC,GAAG,MAAMf,eAAe,CAACgB,iBAAiB,CAACJ,GAAG,EAAE;UAAEC,OAAO;UAAEI,IAAI,EAAEH;QAAU,CAAC,CAAC;QAC1F,OAAO;UAAEI,IAAI,EAAEH;QAAI,CAAC;MACtB,CAAC,CAAC,MAAM;QACN,OAAO,IAAI;MACb;IACF,CAAC;IACD,MAAMI,aAAaA,CAAC;MAAEC,QAAQ;MAAEC,SAAS;MAAEC,eAAe,GAAG,CAAC;MAAEP;IAAI,CAAC,EAAE;MACrE,MAAMQ,UAAU,GAAG,MAAMC,iBAAQ,CAACC,YAAY,CAACV,GAAG,CAAC;MACnD,MAAMW,YAAY,GAAG,IAAAC,4BAAgB,EAACJ,UAAU,EAAE;QAAEK,KAAK,EAAER,QAAQ;QAAES,MAAM,EAAER;MAAU,CAAC,CAAC;MAEzF,MAAM;QAAEN,GAAG,EAAEe;MAAc,CAAC,GAAG,MAAM7B,gBAAgB,CAAC8B,eAAe,CAAChB,GAAG,EAAE,CAAC;QAAEiB,MAAM,EAAEN;MAAa,CAAC,CAAC,EAAE;QACrGO,QAAQ,EAAEC,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,GAAG,CAAC,CAAC,EAAEd,eAAe,CAAC,EAAE,CAAC;MACpD,CAAC,CAAC;MACF,MAAMe,QAAQ,GAAG,MAAMnC,QAAQ,CAACoC,YAAY,CAACvB,GAAG,CAAC;MAEjD,OAAO;QAAEA,GAAG,EAAEe,aAAa;QAAES,IAAI,EAAEpC,0BAAiB,CAACqC,UAAU,CAACH,QAAQ;MAAE,CAAC;IAC7E;EACF,CAAC;AACH,CAAC;AAAC,IAAAI,QAAA,GAAAC,OAAA,CAAA7G,OAAA,GAEakE,sBAAsB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_uikitUtils","_SBUUtils","_interopRequireDefault","_expoBackwardUtils","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","LegacyExpoAVVideoAdapter","constructor","avModule","source","resizeMode","onLoad","props","createElement","Video","useNativeControls","ExpoVideoAdapter","_videoModule","player","useVideoPlayer","useEffect","subscription","addListener","eventData","status","error","timeout","setTimeout","clearTimeout","remove","undefined","getContentFit","mode","React","VideoView","contentFit","createExpoMediaService","thumbnailModule","imageManipulator","fsModule","expoBackwardUtils","expoAV","isLegacyAVModule","Logger","warn","videoAdapter","isVideoModule","VideoComponent","getVideoThumbnail","url","quality","timeMills","uri","getThumbnailAsync","time","path","compressImage","maxWidth","maxHeight","compressionRate","originSize","SBUUtils","getImageSize","resizingSize","getDownscaleSize","width","height","compressedURI","manipulateAsync","resize","compress","Math","min","max","fileInfo","fileSystem","getFileInfo","size","toFileSize","_default","exports"],"sources":["createMediaService.expo.tsx"],"sourcesContent":["import type * as ExpoAV from 'expo-av';\nimport type * as ExpoFS from 'expo-file-system';\nimport type * as ExpoImageManipulator from 'expo-image-manipulator';\nimport type { EventSubscription } from 'expo-modules-core';\nimport type * as ExpoVideo from 'expo-video';\nimport type { StatusChangeEventPayload } from 'expo-video';\nimport type * as ExpoVideoThumbnail from 'expo-video-thumbnails';\nimport React, { useEffect } from 'react';\n\nimport { Logger, getDownscaleSize } from '@sendbird/uikit-utils';\n\nimport SBUUtils from '../libs/SBUUtils';\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoVideoModule } from '../utils/expoBackwardUtils';\nimport type { MediaServiceInterface, VideoProps } from './types';\n\ntype Modules = {\n avModule: ExpoVideoModule;\n thumbnailModule: typeof ExpoVideoThumbnail;\n imageManipulator: typeof ExpoImageManipulator;\n fsModule: typeof ExpoFS;\n};\n\ninterface VideoModuleAdapter {\n VideoComponent: React.ComponentType<VideoProps>;\n}\n\nclass LegacyExpoAVVideoAdapter implements VideoModuleAdapter {\n private readonly avModule: typeof ExpoAV;\n constructor(avModule: typeof ExpoAV) {\n this.avModule = avModule;\n }\n\n VideoComponent = ({ source, resizeMode, onLoad, ...props }: VideoProps) => {\n // FIXME: type error https://github.com/expo/expo/issues/17101\n // @ts-ignore\n return <this.avModule.Video {...props} source={source} resizeMode={resizeMode} onLoad={onLoad} useNativeControls />;\n };\n}\n\nclass ExpoVideoAdapter implements VideoModuleAdapter {\n constructor(private readonly _videoModule: typeof ExpoVideo) {}\n\n VideoComponent = ({ source, resizeMode, onLoad, ...props }: VideoProps) => {\n const player = this._videoModule.useVideoPlayer(source);\n\n useEffect(() => {\n if (onLoad && player) {\n let subscription: EventSubscription | null = null;\n try {\n subscription = player.addListener('statusChange', (eventData: StatusChangeEventPayload) => {\n const { status, error } = eventData;\n if (status === 'readyToPlay' && !error) {\n onLoad();\n }\n });\n } catch (error) {\n const timeout = setTimeout(() => onLoad(), 300);\n return () => clearTimeout(timeout);\n }\n\n return () => {\n if (subscription) {\n subscription.remove();\n }\n };\n }\n return undefined;\n }, [onLoad, player]);\n\n const getContentFit = (mode: typeof resizeMode): 'cover' | 'contain' | 'fill' => {\n switch (mode) {\n case 'cover':\n return 'cover';\n case 'contain':\n return 'contain';\n case 'stretch':\n return 'fill';\n default:\n return 'contain';\n }\n };\n\n return React.createElement(this._videoModule.VideoView, {\n ...props,\n player,\n contentFit: getContentFit(resizeMode),\n });\n };\n}\n\nconst createExpoMediaService = ({\n avModule,\n thumbnailModule,\n imageManipulator,\n fsModule,\n}: Modules): MediaServiceInterface => {\n if (expoBackwardUtils.expoAV.isLegacyAVModule(avModule)) {\n Logger.warn(\n '[MediaService.Expo] expo-av is deprecated and will be removed in Expo 54. Please migrate to expo-video.',\n );\n }\n\n const videoAdapter = expoBackwardUtils.expoAV.isVideoModule(avModule)\n ? new ExpoVideoAdapter(avModule)\n : new LegacyExpoAVVideoAdapter(avModule);\n\n return {\n VideoComponent: videoAdapter.VideoComponent,\n async getVideoThumbnail({ url, quality, timeMills }) {\n try {\n const { uri } = await thumbnailModule.getThumbnailAsync(url, { quality, time: timeMills });\n return { path: uri };\n } catch {\n return null;\n }\n },\n async compressImage({ maxWidth, maxHeight, compressionRate = 1, uri }) {\n const originSize = await SBUUtils.getImageSize(uri);\n const resizingSize = getDownscaleSize(originSize, { width: maxWidth, height: maxHeight });\n\n const { uri: compressedURI } = await imageManipulator.manipulateAsync(uri, [{ resize: resizingSize }], {\n compress: Math.min(Math.max(0, compressionRate), 1),\n });\n const fileInfo = await expoBackwardUtils.fileSystem.getFileInfo(fsModule, uri);\n\n return { uri: compressedURI, size: expoBackwardUtils.toFileSize(fileInfo) };\n },\n };\n};\n\nexport default createExpoMediaService;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TypingIndicatorType","exports"],"sources":["types.ts"],"sourcesContent":["import type { ComponentType, ErrorInfo, ReactNode } from 'react';\nimport type { MMKV } from 'react-native-mmkv';\n\nimport type { SendbirdUser } from '@sendbird/uikit-utils';\n\nexport type LocalCacheStorage = AsyncLocalCacheStorage | MMKVLocalCacheStorage;\n\nexport type KeyValuePairGet = [string, string | null];\nexport type KeyValuePairSet = [string, string];\nexport interface AsyncLocalCacheStorage {\n getAllKeys(): Promise<readonly string[] | string[]>;\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n\n multiSet?(keyValuePairs: Array<KeyValuePairSet>): Promise<void>;\n multiGet?(keys: string[]): Promise<readonly KeyValuePairGet[] | KeyValuePairGet[]>;\n multiRemove?(keys: string[]): Promise<void>;\n}\n\nexport type MMKVLocalCacheStorage = Pick<MMKV, 'getString' | 'set' | '
|
|
1
|
+
{"version":3,"names":["TypingIndicatorType","exports"],"sources":["types.ts"],"sourcesContent":["import type { ComponentType, ErrorInfo, ReactNode } from 'react';\nimport type { MMKV } from 'react-native-mmkv';\n\nimport type { SendbirdUser } from '@sendbird/uikit-utils';\n\nexport type LocalCacheStorage = AsyncLocalCacheStorage | MMKVLocalCacheStorage;\n\nexport type KeyValuePairGet = [string, string | null];\nexport type KeyValuePairSet = [string, string];\nexport interface AsyncLocalCacheStorage {\n getAllKeys(): Promise<readonly string[] | string[]>;\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n\n multiSet?(keyValuePairs: Array<KeyValuePairSet>): Promise<void>;\n multiGet?(keys: string[]): Promise<readonly KeyValuePairGet[] | KeyValuePairGet[]>;\n multiRemove?(keys: string[]): Promise<void>;\n}\n\nexport type MMKVLocalCacheStorage = Pick<MMKV, 'getString' | 'set' | 'getAllKeys'> & {\n // Support both v3.x (delete) and v4.x (remove) APIs for backward compatibility\n delete?: (key: string) => void;\n remove?: (key: string) => void;\n};\n\nexport type ErrorBoundaryProps = { error: Error; errorInfo: ErrorInfo; reset: () => void };\n\nexport type CommonComponent<P = {}> = ComponentType<P & { children?: ReactNode | undefined }>;\n\nexport type MentionedUser = {\n range: Range;\n user: SendbirdUser;\n};\n\nexport type Range = {\n start: number;\n end: number;\n};\n\nexport enum TypingIndicatorType {\n Text = 'text',\n Bubble = 'bubble',\n}\n"],"mappings":";;;;;;IAwCYA,mBAAmB,GAAAC,OAAA,CAAAD,mBAAA,0BAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAA,OAAnBA,mBAAmB;AAAA","ignoreList":[]}
|
|
@@ -6,6 +6,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _normalizeFile = _interopRequireDefault(require("./normalizeFile"));
|
|
8
8
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
// Legacy expo-file-system API types (before SDK 54)
|
|
10
|
+
|
|
11
|
+
// New expo-file-system API types (SDK 54+)
|
|
12
|
+
|
|
13
|
+
// Union type for both legacy and new expo-file-system
|
|
14
|
+
|
|
9
15
|
const expoBackwardUtils = {
|
|
10
16
|
imagePicker: {
|
|
11
17
|
isCanceled(result) {
|
|
@@ -103,11 +109,55 @@ const expoBackwardUtils = {
|
|
|
103
109
|
}
|
|
104
110
|
},
|
|
105
111
|
toFileSize(info) {
|
|
106
|
-
if ('size' in info) {
|
|
112
|
+
if ('size' in info && info.size !== undefined) {
|
|
107
113
|
return info.size;
|
|
108
114
|
} else {
|
|
109
115
|
return 0;
|
|
110
116
|
}
|
|
117
|
+
},
|
|
118
|
+
fileSystem: {
|
|
119
|
+
isLegacyModule(fsModule) {
|
|
120
|
+
try {
|
|
121
|
+
return 'documentDirectory' in fsModule || 'cacheDirectory' in fsModule;
|
|
122
|
+
} catch {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
async getFileInfo(fsModule, uri) {
|
|
127
|
+
if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {
|
|
128
|
+
return await fsModule.getInfoAsync(uri);
|
|
129
|
+
} else {
|
|
130
|
+
const file = new fsModule.File(uri);
|
|
131
|
+
return file.info();
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
getDocumentDirectory(fsModule) {
|
|
135
|
+
if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {
|
|
136
|
+
return fsModule.documentDirectory || null;
|
|
137
|
+
} else {
|
|
138
|
+
var _fsModule$Paths;
|
|
139
|
+
return ((_fsModule$Paths = fsModule.Paths) === null || _fsModule$Paths === void 0 || (_fsModule$Paths = _fsModule$Paths.document) === null || _fsModule$Paths === void 0 ? void 0 : _fsModule$Paths.uri) || null;
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
getCacheDirectory(fsModule) {
|
|
143
|
+
if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {
|
|
144
|
+
return fsModule.cacheDirectory || null;
|
|
145
|
+
} else {
|
|
146
|
+
var _fsModule$Paths2;
|
|
147
|
+
return ((_fsModule$Paths2 = fsModule.Paths) === null || _fsModule$Paths2 === void 0 || (_fsModule$Paths2 = _fsModule$Paths2.cache) === null || _fsModule$Paths2 === void 0 ? void 0 : _fsModule$Paths2.uri) || null;
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
async downloadFile(fsModule, url, localUri) {
|
|
151
|
+
if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {
|
|
152
|
+
return await fsModule.downloadAsync(url, localUri);
|
|
153
|
+
} else {
|
|
154
|
+
const destination = new fsModule.File(localUri);
|
|
155
|
+
const result = await fsModule.File.downloadFileAsync(url, destination);
|
|
156
|
+
return {
|
|
157
|
+
uri: result.uri
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
}
|
|
111
161
|
}
|
|
112
162
|
};
|
|
113
163
|
var _default = exports.default = expoBackwardUtils;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_normalizeFile","_interopRequireDefault","require","e","__esModule","default","expoBackwardUtils","imagePicker","isCanceled","result","canceled","cancelled","toFilePickerResponses","fsModule","assets","promises","map","fileName","name","fileSize","size","type","uri","normalizeFile","Promise","all","fileInfo","getInfoAsync","response","toFileSize","documentPicker","mimeType","expoAV","isLegacyAVModule","module","Video","isAudioModule","useAudioRecorder","isVideoModule","useVideoPlayer","info","_default","exports"],"sources":["expoBackwardUtils.ts"],"sourcesContent":["import type * as ExpoAudio from 'expo-audio';\nimport type * as ExpoAV from 'expo-av';\nimport type * as ExpoDocumentPicker from 'expo-document-picker';\nimport type * as ExpoFs from 'expo-file-system';\nimport type * as ExpoImagePicker from 'expo-image-picker';\nimport type * as ExpoVideo from 'expo-video';\n\nimport type { FilePickerResponse } from '../platform/types';\nimport normalizeFile from './normalizeFile';\n\nconst expoBackwardUtils = {\n imagePicker: {\n isCanceled(result: ExpoImagePicker.ImagePickerResult) {\n // @ts-expect-error backward compatibility\n return result.canceled ?? result.cancelled;\n },\n async toFilePickerResponses(\n result: ExpoImagePicker.ImagePickerResult,\n fsModule: typeof ExpoFs,\n ): Promise<FilePickerResponse[]> {\n if (result.assets) {\n const assets = result.assets || [];\n const promises = assets.map(({ fileName: name, fileSize: size, type, uri }) =>\n normalizeFile({ uri, size, name, type }),\n );\n\n return Promise.all(promises);\n } else if ('uri' in result && typeof result.uri === 'string') {\n const fileInfo = await fsModule.getInfoAsync(result.uri);\n const response = await normalizeFile({ uri: result.uri, size: expoBackwardUtils.toFileSize(fileInfo) });\n return [response];\n } else {\n return [];\n }\n },\n },\n documentPicker: {\n isCanceled(result: ExpoDocumentPicker.DocumentPickerResult) {\n // @ts-expect-error backward compatibility\n return result.canceled ?? result.type === 'cancel';\n },\n async toFilePickerResponses(result: ExpoDocumentPicker.DocumentPickerResult): Promise<FilePickerResponse[]> {\n if (result.assets) {\n const assets = result.assets || [];\n const promises = assets.map(({ name, size, mimeType, uri }) =>\n normalizeFile({ uri, size, name, type: mimeType }),\n );\n\n return Promise.all(promises);\n } else if ('uri' in result && typeof result.uri === 'string') {\n // @ts-expect-error backward compatibility\n const { mimeType, uri, size, name } = result;\n const response = await normalizeFile({ uri, size, name, type: mimeType });\n\n return [response];\n } else {\n return [];\n }\n },\n },\n expoAV: {\n isLegacyAVModule(module: ExpoAudioModule | ExpoVideoModule): module is typeof ExpoAV {\n try {\n return 'Video' in module && 'Audio' in module && typeof module.Video === 'function';\n } catch {\n return false;\n }\n },\n isAudioModule(module: ExpoAudioModule): module is typeof ExpoAudio {\n try {\n return 'useAudioRecorder' in module && typeof module.useAudioRecorder === 'function';\n } catch {\n return false;\n }\n },\n isVideoModule(module: ExpoVideoModule): module is typeof ExpoVideo {\n try {\n return 'VideoView' in module && 'useVideoPlayer' in module && typeof module.useVideoPlayer === 'function';\n } catch {\n return false;\n }\n },\n },\n toFileSize(info: ExpoFs.FileInfo) {\n if ('size' in info) {\n return info.size;\n } else {\n return 0;\n }\n },\n};\n\nexport type ExpoAudioModule = typeof ExpoAV | typeof ExpoAudio;\nexport type ExpoVideoModule = typeof ExpoAV | typeof ExpoVideo;\n\nexport default expoBackwardUtils;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_normalizeFile","_interopRequireDefault","require","e","__esModule","default","expoBackwardUtils","imagePicker","isCanceled","result","canceled","cancelled","toFilePickerResponses","fsModule","assets","promises","map","fileName","name","fileSize","size","type","uri","normalizeFile","Promise","all","fileInfo","getInfoAsync","response","toFileSize","documentPicker","mimeType","expoAV","isLegacyAVModule","module","Video","isAudioModule","useAudioRecorder","isVideoModule","useVideoPlayer","info","undefined","fileSystem","isLegacyModule","getFileInfo","file","File","getDocumentDirectory","documentDirectory","_fsModule$Paths","Paths","document","getCacheDirectory","cacheDirectory","_fsModule$Paths2","cache","downloadFile","url","localUri","downloadAsync","destination","downloadFileAsync","_default","exports"],"sources":["expoBackwardUtils.ts"],"sourcesContent":["import type * as ExpoAudio from 'expo-audio';\nimport type * as ExpoAV from 'expo-av';\nimport type * as ExpoDocumentPicker from 'expo-document-picker';\nimport type * as ExpoFs from 'expo-file-system';\nimport type * as ExpoImagePicker from 'expo-image-picker';\nimport type * as ExpoVideo from 'expo-video';\n\nimport type { FilePickerResponse } from '../platform/types';\nimport normalizeFile from './normalizeFile';\n\n// Legacy expo-file-system API types (before SDK 54)\ninterface ExpoFileSystemLegacy {\n documentDirectory: string | null;\n cacheDirectory: string | null;\n getInfoAsync(fileUri: string, options?: unknown): Promise<ExpoFs.FileInfo>;\n downloadAsync(uri: string, fileUri: string, options?: unknown): Promise<{ uri: string }>;\n}\n\n// New expo-file-system API types (SDK 54+)\ninterface ExpoDirectory {\n uri: string;\n}\n\ninterface ExpoFileSystemNew {\n File: {\n new (...uris: (string | unknown)[]): {\n info(options?: unknown): ExpoFs.FileInfo;\n };\n downloadFileAsync(url: string, destination: unknown, options?: unknown): Promise<{ uri: string }>;\n };\n Directory: new (...uris: (string | unknown)[]) => ExpoDirectory;\n Paths: {\n document: ExpoDirectory;\n cache: ExpoDirectory;\n };\n}\n\n// Union type for both legacy and new expo-file-system\ntype ExpoFileSystemModule = ExpoFileSystemLegacy | ExpoFileSystemNew | typeof ExpoFs;\n\nconst expoBackwardUtils = {\n imagePicker: {\n isCanceled(result: ExpoImagePicker.ImagePickerResult) {\n // @ts-expect-error backward compatibility\n return result.canceled ?? result.cancelled;\n },\n async toFilePickerResponses(\n result: ExpoImagePicker.ImagePickerResult,\n fsModule: typeof ExpoFs,\n ): Promise<FilePickerResponse[]> {\n if (result.assets) {\n const assets = result.assets || [];\n const promises = assets.map(({ fileName: name, fileSize: size, type, uri }) =>\n normalizeFile({ uri, size, name, type }),\n );\n\n return Promise.all(promises);\n } else if ('uri' in result && typeof result.uri === 'string') {\n const fileInfo = await fsModule.getInfoAsync(result.uri);\n const response = await normalizeFile({ uri: result.uri, size: expoBackwardUtils.toFileSize(fileInfo) });\n return [response];\n } else {\n return [];\n }\n },\n },\n documentPicker: {\n isCanceled(result: ExpoDocumentPicker.DocumentPickerResult) {\n // @ts-expect-error backward compatibility\n return result.canceled ?? result.type === 'cancel';\n },\n async toFilePickerResponses(result: ExpoDocumentPicker.DocumentPickerResult): Promise<FilePickerResponse[]> {\n if (result.assets) {\n const assets = result.assets || [];\n const promises = assets.map(({ name, size, mimeType, uri }) =>\n normalizeFile({ uri, size, name, type: mimeType }),\n );\n\n return Promise.all(promises);\n } else if ('uri' in result && typeof result.uri === 'string') {\n // @ts-expect-error backward compatibility\n const { mimeType, uri, size, name } = result;\n const response = await normalizeFile({ uri, size, name, type: mimeType });\n\n return [response];\n } else {\n return [];\n }\n },\n },\n expoAV: {\n isLegacyAVModule(module: ExpoAudioModule | ExpoVideoModule): module is typeof ExpoAV {\n try {\n return 'Video' in module && 'Audio' in module && typeof module.Video === 'function';\n } catch {\n return false;\n }\n },\n isAudioModule(module: ExpoAudioModule): module is typeof ExpoAudio {\n try {\n return 'useAudioRecorder' in module && typeof module.useAudioRecorder === 'function';\n } catch {\n return false;\n }\n },\n isVideoModule(module: ExpoVideoModule): module is typeof ExpoVideo {\n try {\n return 'VideoView' in module && 'useVideoPlayer' in module && typeof module.useVideoPlayer === 'function';\n } catch {\n return false;\n }\n },\n },\n toFileSize(info: ExpoFs.FileInfo) {\n if ('size' in info && info.size !== undefined) {\n return info.size;\n } else {\n return 0;\n }\n },\n fileSystem: {\n isLegacyModule(fsModule: ExpoFileSystemModule): fsModule is ExpoFileSystemLegacy {\n try {\n return 'documentDirectory' in fsModule || 'cacheDirectory' in fsModule;\n } catch {\n return false;\n }\n },\n async getFileInfo(fsModule: ExpoFileSystemModule, uri: string): Promise<ExpoFs.FileInfo> {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return await fsModule.getInfoAsync(uri);\n } else {\n const file = new fsModule.File(uri);\n return file.info();\n }\n },\n getDocumentDirectory(fsModule: ExpoFileSystemModule): string | null {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return fsModule.documentDirectory || null;\n } else {\n return fsModule.Paths?.document?.uri || null;\n }\n },\n getCacheDirectory(fsModule: ExpoFileSystemModule): string | null {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return fsModule.cacheDirectory || null;\n } else {\n return fsModule.Paths?.cache?.uri || null;\n }\n },\n async downloadFile(fsModule: ExpoFileSystemModule, url: string, localUri: string): Promise<{ uri: string }> {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return await fsModule.downloadAsync(url, localUri);\n } else {\n const destination = new fsModule.File(localUri);\n const result = await fsModule.File.downloadFileAsync(url, destination as never);\n return { uri: result.uri };\n }\n },\n },\n};\n\nexport type ExpoAudioModule = typeof ExpoAV | typeof ExpoAudio;\nexport type ExpoVideoModule = typeof ExpoAV | typeof ExpoVideo;\n\nexport default expoBackwardUtils;\n"],"mappings":"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","ignoreList":[]}
|
package/lib/commonjs/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["VERSION","_default","exports","default"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.11.
|
|
1
|
+
{"version":3,"names":["VERSION","_default","exports","default"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.11.3';\nexport default VERSION;\n"],"mappings":";;;;;;AAAA,MAAMA,OAAO,GAAG,QAAQ;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GACVH,OAAO","ignoreList":[]}
|
|
@@ -34,7 +34,12 @@ export default class InternalLocalCacheStorage {
|
|
|
34
34
|
}
|
|
35
35
|
async removeItem(key) {
|
|
36
36
|
if (this._mmkv) {
|
|
37
|
-
|
|
37
|
+
// Support both v3.x (delete) and v4.x (remove) APIs for backward compatibility
|
|
38
|
+
if (this._mmkv.delete) {
|
|
39
|
+
this._mmkv.delete(key);
|
|
40
|
+
} else if (this._mmkv.remove) {
|
|
41
|
+
this._mmkv.remove(key);
|
|
42
|
+
}
|
|
38
43
|
} else if (this._async) {
|
|
39
44
|
return this._async.removeItem(key);
|
|
40
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ASYNC_NOOP","InternalLocalCacheStorage","constructor","storage","_defineProperty","_mmkv","_async","getAllKeys","getItem","key","getString","removeItem","delete","setItem","value","set","multiGet","keys","Promise","all","map","_this$_async","multiRemove","_this$_async2","multiSet","keyValuePairs","_this$_async3"],"sources":["InternalLocalCacheStorage.ts"],"sourcesContent":["import { ASYNC_NOOP } from '@sendbird/uikit-utils';\n\nimport type {\n AsyncLocalCacheStorage,\n KeyValuePairGet,\n KeyValuePairSet,\n LocalCacheStorage,\n MMKVLocalCacheStorage,\n} from '../types';\n\nexport default class InternalLocalCacheStorage implements AsyncLocalCacheStorage {\n private readonly _mmkv?: MMKVLocalCacheStorage;\n private readonly _async?: AsyncLocalCacheStorage;\n\n constructor(storage: LocalCacheStorage) {\n if ('getString' in storage) {\n this._mmkv = storage;\n } else {\n this._async = storage;\n }\n }\n\n async getAllKeys() {\n if (this._mmkv) {\n return this._mmkv.getAllKeys();\n } else if (this._async) {\n return this._async.getAllKeys();\n } else {\n return [];\n }\n }\n\n async getItem(key: string) {\n if (this._mmkv) {\n return this._mmkv.getString(key) ?? null;\n } else if (this._async) {\n return this._async.getItem(key);\n } else {\n return null;\n }\n }\n\n async removeItem(key: string) {\n if (this._mmkv) {\n this._mmkv.delete(key);\n } else if (this._async) {\n return this._async.removeItem(key);\n }\n }\n\n async setItem(key: string, value: string) {\n if (this._mmkv) {\n this._mmkv.set(key, value);\n } else if (this._async) {\n return this._async.setItem(key, value);\n }\n }\n\n async multiGet(keys: string[]) {\n if (this._mmkv) {\n return Promise.all(keys.map(async (key) => [key, await this.getItem(key)] as KeyValuePairGet));\n } else if (this._async) {\n if (this._async?.multiGet) {\n return this._async.multiGet(keys);\n } else {\n return Promise.all(keys.map(async (key) => [key, await this.getItem(key)] as KeyValuePairGet));\n }\n } else {\n return [];\n }\n }\n\n async multiRemove(keys: string[]) {\n if (this._mmkv) {\n await Promise.all(keys.map(async (key) => this.removeItem(key)));\n } else if (this._async) {\n if (this._async?.multiRemove) {\n await this._async.multiRemove(keys);\n } else {\n await Promise.all(keys.map(async (key) => this.removeItem(key)));\n }\n }\n }\n\n async multiSet(keyValuePairs: Array<KeyValuePairSet>) {\n if (this._mmkv) {\n await Promise.all(keyValuePairs.map(([key, value]) => this.setItem(key, value)));\n } else if (this._async) {\n if (this._async?.multiSet) {\n await this._async.multiSet(keyValuePairs);\n } else {\n await Promise.all(keyValuePairs.map(([key, value]) => this.setItem(key, value)));\n }\n }\n }\n\n clear = ASYNC_NOOP;\n flushGetRequests = ASYNC_NOOP;\n}\n"],"mappings":";;;AAAA,SAASA,UAAU,QAAQ,uBAAuB;AAUlD,eAAe,MAAMC,yBAAyB,CAAmC;EAI/EC,WAAWA,CAACC,OAA0B,EAAE;IAAAC,eAAA;IAAAA,eAAA;IAAAA,eAAA,
|
|
1
|
+
{"version":3,"names":["ASYNC_NOOP","InternalLocalCacheStorage","constructor","storage","_defineProperty","_mmkv","_async","getAllKeys","getItem","key","getString","removeItem","delete","remove","setItem","value","set","multiGet","keys","Promise","all","map","_this$_async","multiRemove","_this$_async2","multiSet","keyValuePairs","_this$_async3"],"sources":["InternalLocalCacheStorage.ts"],"sourcesContent":["import { ASYNC_NOOP } from '@sendbird/uikit-utils';\n\nimport type {\n AsyncLocalCacheStorage,\n KeyValuePairGet,\n KeyValuePairSet,\n LocalCacheStorage,\n MMKVLocalCacheStorage,\n} from '../types';\n\nexport default class InternalLocalCacheStorage implements AsyncLocalCacheStorage {\n private readonly _mmkv?: MMKVLocalCacheStorage;\n private readonly _async?: AsyncLocalCacheStorage;\n\n constructor(storage: LocalCacheStorage) {\n if ('getString' in storage) {\n this._mmkv = storage;\n } else {\n this._async = storage;\n }\n }\n\n async getAllKeys() {\n if (this._mmkv) {\n return this._mmkv.getAllKeys();\n } else if (this._async) {\n return this._async.getAllKeys();\n } else {\n return [];\n }\n }\n\n async getItem(key: string) {\n if (this._mmkv) {\n return this._mmkv.getString(key) ?? null;\n } else if (this._async) {\n return this._async.getItem(key);\n } else {\n return null;\n }\n }\n\n async removeItem(key: string) {\n if (this._mmkv) {\n // Support both v3.x (delete) and v4.x (remove) APIs for backward compatibility\n if (this._mmkv.delete) {\n this._mmkv.delete(key);\n } else if (this._mmkv.remove) {\n this._mmkv.remove(key);\n }\n } else if (this._async) {\n return this._async.removeItem(key);\n }\n }\n\n async setItem(key: string, value: string) {\n if (this._mmkv) {\n this._mmkv.set(key, value);\n } else if (this._async) {\n return this._async.setItem(key, value);\n }\n }\n\n async multiGet(keys: string[]) {\n if (this._mmkv) {\n return Promise.all(keys.map(async (key) => [key, await this.getItem(key)] as KeyValuePairGet));\n } else if (this._async) {\n if (this._async?.multiGet) {\n return this._async.multiGet(keys);\n } else {\n return Promise.all(keys.map(async (key) => [key, await this.getItem(key)] as KeyValuePairGet));\n }\n } else {\n return [];\n }\n }\n\n async multiRemove(keys: string[]) {\n if (this._mmkv) {\n await Promise.all(keys.map(async (key) => this.removeItem(key)));\n } else if (this._async) {\n if (this._async?.multiRemove) {\n await this._async.multiRemove(keys);\n } else {\n await Promise.all(keys.map(async (key) => this.removeItem(key)));\n }\n }\n }\n\n async multiSet(keyValuePairs: Array<KeyValuePairSet>) {\n if (this._mmkv) {\n await Promise.all(keyValuePairs.map(([key, value]) => this.setItem(key, value)));\n } else if (this._async) {\n if (this._async?.multiSet) {\n await this._async.multiSet(keyValuePairs);\n } else {\n await Promise.all(keyValuePairs.map(([key, value]) => this.setItem(key, value)));\n }\n }\n }\n\n clear = ASYNC_NOOP;\n flushGetRequests = ASYNC_NOOP;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -110,17 +110,17 @@ const createExpoFileService = ({
|
|
|
110
110
|
const granted = await this.requestMediaLibraryWritePermission();
|
|
111
111
|
if (!granted) throw new Error('Permission not granted');
|
|
112
112
|
}
|
|
113
|
-
const basePath = fsModule
|
|
113
|
+
const basePath = expoBackwardUtils.fileSystem.getDocumentDirectory(fsModule) || expoBackwardUtils.fileSystem.getCacheDirectory(fsModule);
|
|
114
114
|
if (!basePath) throw new Error('Cannot determine directory');
|
|
115
115
|
const downloadPath = `${basePath}/${options.fileName}`;
|
|
116
|
-
const response = await
|
|
116
|
+
const response = await expoBackwardUtils.fileSystem.downloadFile(fsModule, options.fileUrl, downloadPath);
|
|
117
117
|
if (getFileType(options.fileType || '').match(/video|image/)) {
|
|
118
118
|
await mediaLibraryModule.saveToLibraryAsync(response.uri);
|
|
119
119
|
}
|
|
120
120
|
return response.uri;
|
|
121
121
|
}
|
|
122
122
|
createRecordFilePath(customExtension = 'm4a') {
|
|
123
|
-
const basePath = fsModule
|
|
123
|
+
const basePath = expoBackwardUtils.fileSystem.getCacheDirectory(fsModule);
|
|
124
124
|
if (!basePath) throw new Error('Cannot determine directory');
|
|
125
125
|
const filename = `record-${Date.now()}.${customExtension}`;
|
|
126
126
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getFileType","SBUError","expoBackwardUtils","expoPermissionGranted","createExpoFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","ExpoFileServiceInterface","hasCameraPermission","res","getCameraPermissionsAsync","requestCameraPermission","requestCameraPermissionsAsync","hasMediaLibraryReadPermission","perms","getMediaLibraryPermissionsAsync","requestMediaLibraryReadPermission","requestMediaLibraryPermissionsAsync","hasMediaLibraryWritePermission","getPermissionsAsync","requestMediaLibraryWritePermission","requestPermissionsAsync","openCamera","options","hasPermission","granted","_options$onOpenFailur","onOpenFailure","call","PERMISSIONS_DENIED","response","launchCameraAsync","mediaTypes","mediaType","MediaTypeOptions","Images","Videos","All","imagePicker","isCanceled","file","toFilePickerResponses","openMediaLibrary","_options$onOpenFailur2","selectionLimit","launchImageLibraryAsync","openDocument","getDocumentAsync","type","documentPicker","e","_options$onOpenFailur3","UNKNOWN","save","Error","basePath","documentDirectory","cacheDirectory","downloadPath","fileName","downloadAsync","fileUrl","fileType","match","saveToLibraryAsync","uri","createRecordFilePath","customExtension","filename","Date","now","recordFilePath"],"sources":["createFileService.expo.ts"],"sourcesContent":["import type * as ExpoDocumentPicker from 'expo-document-picker';\nimport type * as ExpoFs from 'expo-file-system';\nimport type * as ExpoImagePicker from 'expo-image-picker';\nimport type * as ExpoMediaLibrary from 'expo-media-library';\n\nimport { getFileType } from '@sendbird/uikit-utils';\n\nimport SBUError from '../libs/SBUError';\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoMediaLibraryPermissionResponse, ExpoPermissionResponse } from '../utils/expoPermissionGranted';\nimport expoPermissionGranted from '../utils/expoPermissionGranted';\nimport type {\n FilePickerResponse,\n FileServiceInterface,\n OpenCameraOptions,\n OpenDocumentOptions,\n OpenMediaLibraryOptions,\n SaveOptions,\n} from './types';\n\nconst createExpoFileService = ({\n imagePickerModule,\n documentPickerModule,\n mediaLibraryModule,\n fsModule,\n}: {\n imagePickerModule: typeof ExpoImagePicker;\n documentPickerModule: typeof ExpoDocumentPicker;\n mediaLibraryModule: typeof ExpoMediaLibrary;\n fsModule: typeof ExpoFs;\n}): FileServiceInterface => {\n class ExpoFileServiceInterface implements FileServiceInterface {\n async hasCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.getCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n\n async requestCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.requestCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n\n async hasMediaLibraryReadPermission(): Promise<boolean> {\n const perms = (await imagePickerModule.getMediaLibraryPermissionsAsync(\n false,\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async requestMediaLibraryReadPermission(): Promise<boolean> {\n const perms = (await imagePickerModule.requestMediaLibraryPermissionsAsync(\n false,\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async hasMediaLibraryWritePermission(): Promise<boolean> {\n const perms = (await mediaLibraryModule.getPermissionsAsync(true, [])) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async requestMediaLibraryWritePermission(): Promise<boolean> {\n const perms = (await mediaLibraryModule.requestPermissionsAsync(true, [])) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async openCamera(options?: OpenCameraOptions): Promise<FilePickerResponse> {\n const hasPermission = await this.hasCameraPermission();\n if (!hasPermission) {\n const granted = await this.requestCameraPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const response = await imagePickerModule.launchCameraAsync({\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n\n if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;\n\n const [file] = await expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);\n return file;\n }\n\n async openMediaLibrary(options: OpenMediaLibraryOptions) {\n const hasPermission = await this.hasMediaLibraryReadPermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryReadPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const selectionLimit = options?.selectionLimit || 1;\n const response = await imagePickerModule.launchImageLibraryAsync({\n selectionLimit,\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;\n return expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);\n }\n\n async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n try {\n const response = await documentPickerModule.getDocumentAsync({ type: '*/*' });\n if (expoBackwardUtils.documentPicker.isCanceled(response)) return null;\n\n const [file] = await expoBackwardUtils.documentPicker.toFilePickerResponses(response);\n return file;\n } catch (e) {\n options?.onOpenFailure?.(SBUError.UNKNOWN, e);\n return null;\n }\n }\n\n async save(options: SaveOptions): Promise<string> {\n const hasPermission = await this.hasMediaLibraryWritePermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryWritePermission();\n if (!granted) throw new Error('Permission not granted');\n }\n\n const basePath = fsModule.documentDirectory || fsModule.cacheDirectory;\n if (!basePath) throw new Error('Cannot determine directory');\n\n const downloadPath = `${basePath}/${options.fileName}`;\n\n const response = await fsModule.downloadAsync(options.fileUrl, downloadPath);\n if (getFileType(options.fileType || '').match(/video|image/)) {\n await mediaLibraryModule.saveToLibraryAsync(response.uri);\n }\n return response.uri;\n }\n\n createRecordFilePath(customExtension = 'm4a'): { recordFilePath: string; uri: string } {\n const basePath = fsModule.cacheDirectory;\n if (!basePath) throw new Error('Cannot determine directory');\n\n const filename = `record-${Date.now()}.${customExtension}`;\n return {\n uri: `${basePath}/${filename}`,\n recordFilePath: `${basePath}/${filename}`,\n };\n }\n }\n\n return new ExpoFileServiceInterface();\n};\n\nexport default createExpoFileService;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["getFileType","SBUError","expoBackwardUtils","expoPermissionGranted","createExpoFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","ExpoFileServiceInterface","hasCameraPermission","res","getCameraPermissionsAsync","requestCameraPermission","requestCameraPermissionsAsync","hasMediaLibraryReadPermission","perms","getMediaLibraryPermissionsAsync","requestMediaLibraryReadPermission","requestMediaLibraryPermissionsAsync","hasMediaLibraryWritePermission","getPermissionsAsync","requestMediaLibraryWritePermission","requestPermissionsAsync","openCamera","options","hasPermission","granted","_options$onOpenFailur","onOpenFailure","call","PERMISSIONS_DENIED","response","launchCameraAsync","mediaTypes","mediaType","MediaTypeOptions","Images","Videos","All","imagePicker","isCanceled","file","toFilePickerResponses","openMediaLibrary","_options$onOpenFailur2","selectionLimit","launchImageLibraryAsync","openDocument","getDocumentAsync","type","documentPicker","e","_options$onOpenFailur3","UNKNOWN","save","Error","basePath","fileSystem","getDocumentDirectory","getCacheDirectory","downloadPath","fileName","downloadFile","fileUrl","fileType","match","saveToLibraryAsync","uri","createRecordFilePath","customExtension","filename","Date","now","recordFilePath"],"sources":["createFileService.expo.ts"],"sourcesContent":["import type * as ExpoDocumentPicker from 'expo-document-picker';\nimport type * as ExpoFs from 'expo-file-system';\nimport type * as ExpoImagePicker from 'expo-image-picker';\nimport type * as ExpoMediaLibrary from 'expo-media-library';\n\nimport { getFileType } from '@sendbird/uikit-utils';\n\nimport SBUError from '../libs/SBUError';\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoMediaLibraryPermissionResponse, ExpoPermissionResponse } from '../utils/expoPermissionGranted';\nimport expoPermissionGranted from '../utils/expoPermissionGranted';\nimport type {\n FilePickerResponse,\n FileServiceInterface,\n OpenCameraOptions,\n OpenDocumentOptions,\n OpenMediaLibraryOptions,\n SaveOptions,\n} from './types';\n\nconst createExpoFileService = ({\n imagePickerModule,\n documentPickerModule,\n mediaLibraryModule,\n fsModule,\n}: {\n imagePickerModule: typeof ExpoImagePicker;\n documentPickerModule: typeof ExpoDocumentPicker;\n mediaLibraryModule: typeof ExpoMediaLibrary;\n fsModule: typeof ExpoFs;\n}): FileServiceInterface => {\n class ExpoFileServiceInterface implements FileServiceInterface {\n async hasCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.getCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n\n async requestCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.requestCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n\n async hasMediaLibraryReadPermission(): Promise<boolean> {\n const perms = (await imagePickerModule.getMediaLibraryPermissionsAsync(\n false,\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async requestMediaLibraryReadPermission(): Promise<boolean> {\n const perms = (await imagePickerModule.requestMediaLibraryPermissionsAsync(\n false,\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async hasMediaLibraryWritePermission(): Promise<boolean> {\n const perms = (await mediaLibraryModule.getPermissionsAsync(true, [])) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async requestMediaLibraryWritePermission(): Promise<boolean> {\n const perms = (await mediaLibraryModule.requestPermissionsAsync(true, [])) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async openCamera(options?: OpenCameraOptions): Promise<FilePickerResponse> {\n const hasPermission = await this.hasCameraPermission();\n if (!hasPermission) {\n const granted = await this.requestCameraPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const response = await imagePickerModule.launchCameraAsync({\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n\n if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;\n\n const [file] = await expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);\n return file;\n }\n\n async openMediaLibrary(options: OpenMediaLibraryOptions) {\n const hasPermission = await this.hasMediaLibraryReadPermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryReadPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const selectionLimit = options?.selectionLimit || 1;\n const response = await imagePickerModule.launchImageLibraryAsync({\n selectionLimit,\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;\n return expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);\n }\n\n async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n try {\n const response = await documentPickerModule.getDocumentAsync({ type: '*/*' });\n if (expoBackwardUtils.documentPicker.isCanceled(response)) return null;\n\n const [file] = await expoBackwardUtils.documentPicker.toFilePickerResponses(response);\n return file;\n } catch (e) {\n options?.onOpenFailure?.(SBUError.UNKNOWN, e);\n return null;\n }\n }\n\n async save(options: SaveOptions): Promise<string> {\n const hasPermission = await this.hasMediaLibraryWritePermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryWritePermission();\n if (!granted) throw new Error('Permission not granted');\n }\n\n const basePath =\n expoBackwardUtils.fileSystem.getDocumentDirectory(fsModule) ||\n expoBackwardUtils.fileSystem.getCacheDirectory(fsModule);\n if (!basePath) throw new Error('Cannot determine directory');\n\n const downloadPath = `${basePath}/${options.fileName}`;\n\n const response = await expoBackwardUtils.fileSystem.downloadFile(fsModule, options.fileUrl, downloadPath);\n if (getFileType(options.fileType || '').match(/video|image/)) {\n await mediaLibraryModule.saveToLibraryAsync(response.uri);\n }\n return response.uri;\n }\n\n createRecordFilePath(customExtension = 'm4a'): { recordFilePath: string; uri: string } {\n const basePath = expoBackwardUtils.fileSystem.getCacheDirectory(fsModule);\n if (!basePath) throw new Error('Cannot determine directory');\n\n const filename = `record-${Date.now()}.${customExtension}`;\n return {\n uri: `${basePath}/${filename}`,\n recordFilePath: `${basePath}/${filename}`,\n };\n }\n }\n\n return new ExpoFileServiceInterface();\n};\n\nexport default createExpoFileService;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -131,7 +131,7 @@ const createExpoMediaService = ({
|
|
|
131
131
|
}], {
|
|
132
132
|
compress: Math.min(Math.max(0, compressionRate), 1)
|
|
133
133
|
});
|
|
134
|
-
const fileInfo = await
|
|
134
|
+
const fileInfo = await expoBackwardUtils.fileSystem.getFileInfo(fsModule, uri);
|
|
135
135
|
return {
|
|
136
136
|
uri: compressedURI,
|
|
137
137
|
size: expoBackwardUtils.toFileSize(fileInfo)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","Logger","getDownscaleSize","SBUUtils","expoBackwardUtils","LegacyExpoAVVideoAdapter","constructor","avModule","_defineProperty","source","resizeMode","onLoad","props","createElement","Video","_extends","useNativeControls","ExpoVideoAdapter","_videoModule","player","useVideoPlayer","subscription","addListener","eventData","status","error","timeout","setTimeout","clearTimeout","remove","undefined","getContentFit","mode","VideoView","contentFit","createExpoMediaService","thumbnailModule","imageManipulator","fsModule","expoAV","isLegacyAVModule","warn","videoAdapter","isVideoModule","VideoComponent","getVideoThumbnail","url","quality","timeMills","uri","getThumbnailAsync","time","path","compressImage","maxWidth","maxHeight","compressionRate","originSize","getImageSize","resizingSize","width","height","compressedURI","manipulateAsync","resize","compress","Math","min","max","fileInfo","
|
|
1
|
+
{"version":3,"names":["React","useEffect","Logger","getDownscaleSize","SBUUtils","expoBackwardUtils","LegacyExpoAVVideoAdapter","constructor","avModule","_defineProperty","source","resizeMode","onLoad","props","createElement","Video","_extends","useNativeControls","ExpoVideoAdapter","_videoModule","player","useVideoPlayer","subscription","addListener","eventData","status","error","timeout","setTimeout","clearTimeout","remove","undefined","getContentFit","mode","VideoView","contentFit","createExpoMediaService","thumbnailModule","imageManipulator","fsModule","expoAV","isLegacyAVModule","warn","videoAdapter","isVideoModule","VideoComponent","getVideoThumbnail","url","quality","timeMills","uri","getThumbnailAsync","time","path","compressImage","maxWidth","maxHeight","compressionRate","originSize","getImageSize","resizingSize","width","height","compressedURI","manipulateAsync","resize","compress","Math","min","max","fileInfo","fileSystem","getFileInfo","size","toFileSize"],"sources":["createMediaService.expo.tsx"],"sourcesContent":["import type * as ExpoAV from 'expo-av';\nimport type * as ExpoFS from 'expo-file-system';\nimport type * as ExpoImageManipulator from 'expo-image-manipulator';\nimport type { EventSubscription } from 'expo-modules-core';\nimport type * as ExpoVideo from 'expo-video';\nimport type { StatusChangeEventPayload } from 'expo-video';\nimport type * as ExpoVideoThumbnail from 'expo-video-thumbnails';\nimport React, { useEffect } from 'react';\n\nimport { Logger, getDownscaleSize } from '@sendbird/uikit-utils';\n\nimport SBUUtils from '../libs/SBUUtils';\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoVideoModule } from '../utils/expoBackwardUtils';\nimport type { MediaServiceInterface, VideoProps } from './types';\n\ntype Modules = {\n avModule: ExpoVideoModule;\n thumbnailModule: typeof ExpoVideoThumbnail;\n imageManipulator: typeof ExpoImageManipulator;\n fsModule: typeof ExpoFS;\n};\n\ninterface VideoModuleAdapter {\n VideoComponent: React.ComponentType<VideoProps>;\n}\n\nclass LegacyExpoAVVideoAdapter implements VideoModuleAdapter {\n private readonly avModule: typeof ExpoAV;\n constructor(avModule: typeof ExpoAV) {\n this.avModule = avModule;\n }\n\n VideoComponent = ({ source, resizeMode, onLoad, ...props }: VideoProps) => {\n // FIXME: type error https://github.com/expo/expo/issues/17101\n // @ts-ignore\n return <this.avModule.Video {...props} source={source} resizeMode={resizeMode} onLoad={onLoad} useNativeControls />;\n };\n}\n\nclass ExpoVideoAdapter implements VideoModuleAdapter {\n constructor(private readonly _videoModule: typeof ExpoVideo) {}\n\n VideoComponent = ({ source, resizeMode, onLoad, ...props }: VideoProps) => {\n const player = this._videoModule.useVideoPlayer(source);\n\n useEffect(() => {\n if (onLoad && player) {\n let subscription: EventSubscription | null = null;\n try {\n subscription = player.addListener('statusChange', (eventData: StatusChangeEventPayload) => {\n const { status, error } = eventData;\n if (status === 'readyToPlay' && !error) {\n onLoad();\n }\n });\n } catch (error) {\n const timeout = setTimeout(() => onLoad(), 300);\n return () => clearTimeout(timeout);\n }\n\n return () => {\n if (subscription) {\n subscription.remove();\n }\n };\n }\n return undefined;\n }, [onLoad, player]);\n\n const getContentFit = (mode: typeof resizeMode): 'cover' | 'contain' | 'fill' => {\n switch (mode) {\n case 'cover':\n return 'cover';\n case 'contain':\n return 'contain';\n case 'stretch':\n return 'fill';\n default:\n return 'contain';\n }\n };\n\n return React.createElement(this._videoModule.VideoView, {\n ...props,\n player,\n contentFit: getContentFit(resizeMode),\n });\n };\n}\n\nconst createExpoMediaService = ({\n avModule,\n thumbnailModule,\n imageManipulator,\n fsModule,\n}: Modules): MediaServiceInterface => {\n if (expoBackwardUtils.expoAV.isLegacyAVModule(avModule)) {\n Logger.warn(\n '[MediaService.Expo] expo-av is deprecated and will be removed in Expo 54. Please migrate to expo-video.',\n );\n }\n\n const videoAdapter = expoBackwardUtils.expoAV.isVideoModule(avModule)\n ? new ExpoVideoAdapter(avModule)\n : new LegacyExpoAVVideoAdapter(avModule);\n\n return {\n VideoComponent: videoAdapter.VideoComponent,\n async getVideoThumbnail({ url, quality, timeMills }) {\n try {\n const { uri } = await thumbnailModule.getThumbnailAsync(url, { quality, time: timeMills });\n return { path: uri };\n } catch {\n return null;\n }\n },\n async compressImage({ maxWidth, maxHeight, compressionRate = 1, uri }) {\n const originSize = await SBUUtils.getImageSize(uri);\n const resizingSize = getDownscaleSize(originSize, { width: maxWidth, height: maxHeight });\n\n const { uri: compressedURI } = await imageManipulator.manipulateAsync(uri, [{ resize: resizingSize }], {\n compress: Math.min(Math.max(0, compressionRate), 1),\n });\n const fileInfo = await expoBackwardUtils.fileSystem.getFileInfo(fsModule, uri);\n\n return { uri: compressedURI, size: expoBackwardUtils.toFileSize(fileInfo) };\n },\n };\n};\n\nexport default createExpoMediaService;\n"],"mappings":"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","ignoreList":[]}
|
package/lib/module/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TypingIndicatorType"],"sources":["types.ts"],"sourcesContent":["import type { ComponentType, ErrorInfo, ReactNode } from 'react';\nimport type { MMKV } from 'react-native-mmkv';\n\nimport type { SendbirdUser } from '@sendbird/uikit-utils';\n\nexport type LocalCacheStorage = AsyncLocalCacheStorage | MMKVLocalCacheStorage;\n\nexport type KeyValuePairGet = [string, string | null];\nexport type KeyValuePairSet = [string, string];\nexport interface AsyncLocalCacheStorage {\n getAllKeys(): Promise<readonly string[] | string[]>;\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n\n multiSet?(keyValuePairs: Array<KeyValuePairSet>): Promise<void>;\n multiGet?(keys: string[]): Promise<readonly KeyValuePairGet[] | KeyValuePairGet[]>;\n multiRemove?(keys: string[]): Promise<void>;\n}\n\nexport type MMKVLocalCacheStorage = Pick<MMKV, 'getString' | 'set' | '
|
|
1
|
+
{"version":3,"names":["TypingIndicatorType"],"sources":["types.ts"],"sourcesContent":["import type { ComponentType, ErrorInfo, ReactNode } from 'react';\nimport type { MMKV } from 'react-native-mmkv';\n\nimport type { SendbirdUser } from '@sendbird/uikit-utils';\n\nexport type LocalCacheStorage = AsyncLocalCacheStorage | MMKVLocalCacheStorage;\n\nexport type KeyValuePairGet = [string, string | null];\nexport type KeyValuePairSet = [string, string];\nexport interface AsyncLocalCacheStorage {\n getAllKeys(): Promise<readonly string[] | string[]>;\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n\n multiSet?(keyValuePairs: Array<KeyValuePairSet>): Promise<void>;\n multiGet?(keys: string[]): Promise<readonly KeyValuePairGet[] | KeyValuePairGet[]>;\n multiRemove?(keys: string[]): Promise<void>;\n}\n\nexport type MMKVLocalCacheStorage = Pick<MMKV, 'getString' | 'set' | 'getAllKeys'> & {\n // Support both v3.x (delete) and v4.x (remove) APIs for backward compatibility\n delete?: (key: string) => void;\n remove?: (key: string) => void;\n};\n\nexport type ErrorBoundaryProps = { error: Error; errorInfo: ErrorInfo; reset: () => void };\n\nexport type CommonComponent<P = {}> = ComponentType<P & { children?: ReactNode | undefined }>;\n\nexport type MentionedUser = {\n range: Range;\n user: SendbirdUser;\n};\n\nexport type Range = {\n start: number;\n end: number;\n};\n\nexport enum TypingIndicatorType {\n Text = 'text',\n Bubble = 'bubble',\n}\n"],"mappings":"AAwCA,WAAYA,mBAAmB,0BAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAA,OAAnBA,mBAAmB;AAAA","ignoreList":[]}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import normalizeFile from './normalizeFile';
|
|
2
|
+
|
|
3
|
+
// Legacy expo-file-system API types (before SDK 54)
|
|
4
|
+
|
|
5
|
+
// New expo-file-system API types (SDK 54+)
|
|
6
|
+
|
|
7
|
+
// Union type for both legacy and new expo-file-system
|
|
8
|
+
|
|
2
9
|
const expoBackwardUtils = {
|
|
3
10
|
imagePicker: {
|
|
4
11
|
isCanceled(result) {
|
|
@@ -96,11 +103,55 @@ const expoBackwardUtils = {
|
|
|
96
103
|
}
|
|
97
104
|
},
|
|
98
105
|
toFileSize(info) {
|
|
99
|
-
if ('size' in info) {
|
|
106
|
+
if ('size' in info && info.size !== undefined) {
|
|
100
107
|
return info.size;
|
|
101
108
|
} else {
|
|
102
109
|
return 0;
|
|
103
110
|
}
|
|
111
|
+
},
|
|
112
|
+
fileSystem: {
|
|
113
|
+
isLegacyModule(fsModule) {
|
|
114
|
+
try {
|
|
115
|
+
return 'documentDirectory' in fsModule || 'cacheDirectory' in fsModule;
|
|
116
|
+
} catch {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
async getFileInfo(fsModule, uri) {
|
|
121
|
+
if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {
|
|
122
|
+
return await fsModule.getInfoAsync(uri);
|
|
123
|
+
} else {
|
|
124
|
+
const file = new fsModule.File(uri);
|
|
125
|
+
return file.info();
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
getDocumentDirectory(fsModule) {
|
|
129
|
+
if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {
|
|
130
|
+
return fsModule.documentDirectory || null;
|
|
131
|
+
} else {
|
|
132
|
+
var _fsModule$Paths;
|
|
133
|
+
return ((_fsModule$Paths = fsModule.Paths) === null || _fsModule$Paths === void 0 || (_fsModule$Paths = _fsModule$Paths.document) === null || _fsModule$Paths === void 0 ? void 0 : _fsModule$Paths.uri) || null;
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
getCacheDirectory(fsModule) {
|
|
137
|
+
if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {
|
|
138
|
+
return fsModule.cacheDirectory || null;
|
|
139
|
+
} else {
|
|
140
|
+
var _fsModule$Paths2;
|
|
141
|
+
return ((_fsModule$Paths2 = fsModule.Paths) === null || _fsModule$Paths2 === void 0 || (_fsModule$Paths2 = _fsModule$Paths2.cache) === null || _fsModule$Paths2 === void 0 ? void 0 : _fsModule$Paths2.uri) || null;
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
async downloadFile(fsModule, url, localUri) {
|
|
145
|
+
if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {
|
|
146
|
+
return await fsModule.downloadAsync(url, localUri);
|
|
147
|
+
} else {
|
|
148
|
+
const destination = new fsModule.File(localUri);
|
|
149
|
+
const result = await fsModule.File.downloadFileAsync(url, destination);
|
|
150
|
+
return {
|
|
151
|
+
uri: result.uri
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
104
155
|
}
|
|
105
156
|
};
|
|
106
157
|
export default expoBackwardUtils;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["normalizeFile","expoBackwardUtils","imagePicker","isCanceled","result","canceled","cancelled","toFilePickerResponses","fsModule","assets","promises","map","fileName","name","fileSize","size","type","uri","Promise","all","fileInfo","getInfoAsync","response","toFileSize","documentPicker","mimeType","expoAV","isLegacyAVModule","module","Video","isAudioModule","useAudioRecorder","isVideoModule","useVideoPlayer","info"],"sources":["expoBackwardUtils.ts"],"sourcesContent":["import type * as ExpoAudio from 'expo-audio';\nimport type * as ExpoAV from 'expo-av';\nimport type * as ExpoDocumentPicker from 'expo-document-picker';\nimport type * as ExpoFs from 'expo-file-system';\nimport type * as ExpoImagePicker from 'expo-image-picker';\nimport type * as ExpoVideo from 'expo-video';\n\nimport type { FilePickerResponse } from '../platform/types';\nimport normalizeFile from './normalizeFile';\n\nconst expoBackwardUtils = {\n imagePicker: {\n isCanceled(result: ExpoImagePicker.ImagePickerResult) {\n // @ts-expect-error backward compatibility\n return result.canceled ?? result.cancelled;\n },\n async toFilePickerResponses(\n result: ExpoImagePicker.ImagePickerResult,\n fsModule: typeof ExpoFs,\n ): Promise<FilePickerResponse[]> {\n if (result.assets) {\n const assets = result.assets || [];\n const promises = assets.map(({ fileName: name, fileSize: size, type, uri }) =>\n normalizeFile({ uri, size, name, type }),\n );\n\n return Promise.all(promises);\n } else if ('uri' in result && typeof result.uri === 'string') {\n const fileInfo = await fsModule.getInfoAsync(result.uri);\n const response = await normalizeFile({ uri: result.uri, size: expoBackwardUtils.toFileSize(fileInfo) });\n return [response];\n } else {\n return [];\n }\n },\n },\n documentPicker: {\n isCanceled(result: ExpoDocumentPicker.DocumentPickerResult) {\n // @ts-expect-error backward compatibility\n return result.canceled ?? result.type === 'cancel';\n },\n async toFilePickerResponses(result: ExpoDocumentPicker.DocumentPickerResult): Promise<FilePickerResponse[]> {\n if (result.assets) {\n const assets = result.assets || [];\n const promises = assets.map(({ name, size, mimeType, uri }) =>\n normalizeFile({ uri, size, name, type: mimeType }),\n );\n\n return Promise.all(promises);\n } else if ('uri' in result && typeof result.uri === 'string') {\n // @ts-expect-error backward compatibility\n const { mimeType, uri, size, name } = result;\n const response = await normalizeFile({ uri, size, name, type: mimeType });\n\n return [response];\n } else {\n return [];\n }\n },\n },\n expoAV: {\n isLegacyAVModule(module: ExpoAudioModule | ExpoVideoModule): module is typeof ExpoAV {\n try {\n return 'Video' in module && 'Audio' in module && typeof module.Video === 'function';\n } catch {\n return false;\n }\n },\n isAudioModule(module: ExpoAudioModule): module is typeof ExpoAudio {\n try {\n return 'useAudioRecorder' in module && typeof module.useAudioRecorder === 'function';\n } catch {\n return false;\n }\n },\n isVideoModule(module: ExpoVideoModule): module is typeof ExpoVideo {\n try {\n return 'VideoView' in module && 'useVideoPlayer' in module && typeof module.useVideoPlayer === 'function';\n } catch {\n return false;\n }\n },\n },\n toFileSize(info: ExpoFs.FileInfo) {\n if ('size' in info) {\n return info.size;\n } else {\n return 0;\n }\n },\n};\n\nexport type ExpoAudioModule = typeof ExpoAV | typeof ExpoAudio;\nexport type ExpoVideoModule = typeof ExpoAV | typeof ExpoVideo;\n\nexport default expoBackwardUtils;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["normalizeFile","expoBackwardUtils","imagePicker","isCanceled","result","canceled","cancelled","toFilePickerResponses","fsModule","assets","promises","map","fileName","name","fileSize","size","type","uri","Promise","all","fileInfo","getInfoAsync","response","toFileSize","documentPicker","mimeType","expoAV","isLegacyAVModule","module","Video","isAudioModule","useAudioRecorder","isVideoModule","useVideoPlayer","info","undefined","fileSystem","isLegacyModule","getFileInfo","file","File","getDocumentDirectory","documentDirectory","_fsModule$Paths","Paths","document","getCacheDirectory","cacheDirectory","_fsModule$Paths2","cache","downloadFile","url","localUri","downloadAsync","destination","downloadFileAsync"],"sources":["expoBackwardUtils.ts"],"sourcesContent":["import type * as ExpoAudio from 'expo-audio';\nimport type * as ExpoAV from 'expo-av';\nimport type * as ExpoDocumentPicker from 'expo-document-picker';\nimport type * as ExpoFs from 'expo-file-system';\nimport type * as ExpoImagePicker from 'expo-image-picker';\nimport type * as ExpoVideo from 'expo-video';\n\nimport type { FilePickerResponse } from '../platform/types';\nimport normalizeFile from './normalizeFile';\n\n// Legacy expo-file-system API types (before SDK 54)\ninterface ExpoFileSystemLegacy {\n documentDirectory: string | null;\n cacheDirectory: string | null;\n getInfoAsync(fileUri: string, options?: unknown): Promise<ExpoFs.FileInfo>;\n downloadAsync(uri: string, fileUri: string, options?: unknown): Promise<{ uri: string }>;\n}\n\n// New expo-file-system API types (SDK 54+)\ninterface ExpoDirectory {\n uri: string;\n}\n\ninterface ExpoFileSystemNew {\n File: {\n new (...uris: (string | unknown)[]): {\n info(options?: unknown): ExpoFs.FileInfo;\n };\n downloadFileAsync(url: string, destination: unknown, options?: unknown): Promise<{ uri: string }>;\n };\n Directory: new (...uris: (string | unknown)[]) => ExpoDirectory;\n Paths: {\n document: ExpoDirectory;\n cache: ExpoDirectory;\n };\n}\n\n// Union type for both legacy and new expo-file-system\ntype ExpoFileSystemModule = ExpoFileSystemLegacy | ExpoFileSystemNew | typeof ExpoFs;\n\nconst expoBackwardUtils = {\n imagePicker: {\n isCanceled(result: ExpoImagePicker.ImagePickerResult) {\n // @ts-expect-error backward compatibility\n return result.canceled ?? result.cancelled;\n },\n async toFilePickerResponses(\n result: ExpoImagePicker.ImagePickerResult,\n fsModule: typeof ExpoFs,\n ): Promise<FilePickerResponse[]> {\n if (result.assets) {\n const assets = result.assets || [];\n const promises = assets.map(({ fileName: name, fileSize: size, type, uri }) =>\n normalizeFile({ uri, size, name, type }),\n );\n\n return Promise.all(promises);\n } else if ('uri' in result && typeof result.uri === 'string') {\n const fileInfo = await fsModule.getInfoAsync(result.uri);\n const response = await normalizeFile({ uri: result.uri, size: expoBackwardUtils.toFileSize(fileInfo) });\n return [response];\n } else {\n return [];\n }\n },\n },\n documentPicker: {\n isCanceled(result: ExpoDocumentPicker.DocumentPickerResult) {\n // @ts-expect-error backward compatibility\n return result.canceled ?? result.type === 'cancel';\n },\n async toFilePickerResponses(result: ExpoDocumentPicker.DocumentPickerResult): Promise<FilePickerResponse[]> {\n if (result.assets) {\n const assets = result.assets || [];\n const promises = assets.map(({ name, size, mimeType, uri }) =>\n normalizeFile({ uri, size, name, type: mimeType }),\n );\n\n return Promise.all(promises);\n } else if ('uri' in result && typeof result.uri === 'string') {\n // @ts-expect-error backward compatibility\n const { mimeType, uri, size, name } = result;\n const response = await normalizeFile({ uri, size, name, type: mimeType });\n\n return [response];\n } else {\n return [];\n }\n },\n },\n expoAV: {\n isLegacyAVModule(module: ExpoAudioModule | ExpoVideoModule): module is typeof ExpoAV {\n try {\n return 'Video' in module && 'Audio' in module && typeof module.Video === 'function';\n } catch {\n return false;\n }\n },\n isAudioModule(module: ExpoAudioModule): module is typeof ExpoAudio {\n try {\n return 'useAudioRecorder' in module && typeof module.useAudioRecorder === 'function';\n } catch {\n return false;\n }\n },\n isVideoModule(module: ExpoVideoModule): module is typeof ExpoVideo {\n try {\n return 'VideoView' in module && 'useVideoPlayer' in module && typeof module.useVideoPlayer === 'function';\n } catch {\n return false;\n }\n },\n },\n toFileSize(info: ExpoFs.FileInfo) {\n if ('size' in info && info.size !== undefined) {\n return info.size;\n } else {\n return 0;\n }\n },\n fileSystem: {\n isLegacyModule(fsModule: ExpoFileSystemModule): fsModule is ExpoFileSystemLegacy {\n try {\n return 'documentDirectory' in fsModule || 'cacheDirectory' in fsModule;\n } catch {\n return false;\n }\n },\n async getFileInfo(fsModule: ExpoFileSystemModule, uri: string): Promise<ExpoFs.FileInfo> {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return await fsModule.getInfoAsync(uri);\n } else {\n const file = new fsModule.File(uri);\n return file.info();\n }\n },\n getDocumentDirectory(fsModule: ExpoFileSystemModule): string | null {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return fsModule.documentDirectory || null;\n } else {\n return fsModule.Paths?.document?.uri || null;\n }\n },\n getCacheDirectory(fsModule: ExpoFileSystemModule): string | null {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return fsModule.cacheDirectory || null;\n } else {\n return fsModule.Paths?.cache?.uri || null;\n }\n },\n async downloadFile(fsModule: ExpoFileSystemModule, url: string, localUri: string): Promise<{ uri: string }> {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return await fsModule.downloadAsync(url, localUri);\n } else {\n const destination = new fsModule.File(localUri);\n const result = await fsModule.File.downloadFileAsync(url, destination as never);\n return { uri: result.uri };\n }\n },\n },\n};\n\nexport type ExpoAudioModule = typeof ExpoAV | typeof ExpoAudio;\nexport type ExpoVideoModule = typeof ExpoAV | typeof ExpoVideo;\n\nexport default expoBackwardUtils;\n"],"mappings":"AAQA,OAAOA,aAAa,MAAM,iBAAiB;;AAE3C;;AAQA;;AAmBA;;AAGA,MAAMC,iBAAiB,GAAG;EACxBC,WAAW,EAAE;IACXC,UAAUA,CAACC,MAAyC,EAAE;MACpD;MACA,OAAOA,MAAM,CAACC,QAAQ,IAAID,MAAM,CAACE,SAAS;IAC5C,CAAC;IACD,MAAMC,qBAAqBA,CACzBH,MAAyC,EACzCI,QAAuB,EACQ;MAC/B,IAAIJ,MAAM,CAACK,MAAM,EAAE;QACjB,MAAMA,MAAM,GAAGL,MAAM,CAACK,MAAM,IAAI,EAAE;QAClC,MAAMC,QAAQ,GAAGD,MAAM,CAACE,GAAG,CAAC,CAAC;UAAEC,QAAQ,EAAEC,IAAI;UAAEC,QAAQ,EAAEC,IAAI;UAAEC,IAAI;UAAEC;QAAI,CAAC,KACxEjB,aAAa,CAAC;UAAEiB,GAAG;UAAEF,IAAI;UAAEF,IAAI;UAAEG;QAAK,CAAC,CACzC,CAAC;QAED,OAAOE,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MAC9B,CAAC,MAAM,IAAI,KAAK,IAAIN,MAAM,IAAI,OAAOA,MAAM,CAACa,GAAG,KAAK,QAAQ,EAAE;QAC5D,MAAMG,QAAQ,GAAG,MAAMZ,QAAQ,CAACa,YAAY,CAACjB,MAAM,CAACa,GAAG,CAAC;QACxD,MAAMK,QAAQ,GAAG,MAAMtB,aAAa,CAAC;UAAEiB,GAAG,EAAEb,MAAM,CAACa,GAAG;UAAEF,IAAI,EAAEd,iBAAiB,CAACsB,UAAU,CAACH,QAAQ;QAAE,CAAC,CAAC;QACvG,OAAO,CAACE,QAAQ,CAAC;MACnB,CAAC,MAAM;QACL,OAAO,EAAE;MACX;IACF;EACF,CAAC;EACDE,cAAc,EAAE;IACdrB,UAAUA,CAACC,MAA+C,EAAE;MAC1D;MACA,OAAOA,MAAM,CAACC,QAAQ,IAAID,MAAM,CAACY,IAAI,KAAK,QAAQ;IACpD,CAAC;IACD,MAAMT,qBAAqBA,CAACH,MAA+C,EAAiC;MAC1G,IAAIA,MAAM,CAACK,MAAM,EAAE;QACjB,MAAMA,MAAM,GAAGL,MAAM,CAACK,MAAM,IAAI,EAAE;QAClC,MAAMC,QAAQ,GAAGD,MAAM,CAACE,GAAG,CAAC,CAAC;UAAEE,IAAI;UAAEE,IAAI;UAAEU,QAAQ;UAAER;QAAI,CAAC,KACxDjB,aAAa,CAAC;UAAEiB,GAAG;UAAEF,IAAI;UAAEF,IAAI;UAAEG,IAAI,EAAES;QAAS,CAAC,CACnD,CAAC;QAED,OAAOP,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;MAC9B,CAAC,MAAM,IAAI,KAAK,IAAIN,MAAM,IAAI,OAAOA,MAAM,CAACa,GAAG,KAAK,QAAQ,EAAE;QAC5D;QACA,MAAM;UAAEQ,QAAQ;UAAER,GAAG;UAAEF,IAAI;UAAEF;QAAK,CAAC,GAAGT,MAAM;QAC5C,MAAMkB,QAAQ,GAAG,MAAMtB,aAAa,CAAC;UAAEiB,GAAG;UAAEF,IAAI;UAAEF,IAAI;UAAEG,IAAI,EAAES;QAAS,CAAC,CAAC;QAEzE,OAAO,CAACH,QAAQ,CAAC;MACnB,CAAC,MAAM;QACL,OAAO,EAAE;MACX;IACF;EACF,CAAC;EACDI,MAAM,EAAE;IACNC,gBAAgBA,CAACC,MAAyC,EAA2B;MACnF,IAAI;QACF,OAAO,OAAO,IAAIA,MAAM,IAAI,OAAO,IAAIA,MAAM,IAAI,OAAOA,MAAM,CAACC,KAAK,KAAK,UAAU;MACrF,CAAC,CAAC,MAAM;QACN,OAAO,KAAK;MACd;IACF,CAAC;IACDC,aAAaA,CAACF,MAAuB,EAA8B;MACjE,IAAI;QACF,OAAO,kBAAkB,IAAIA,MAAM,IAAI,OAAOA,MAAM,CAACG,gBAAgB,KAAK,UAAU;MACtF,CAAC,CAAC,MAAM;QACN,OAAO,KAAK;MACd;IACF,CAAC;IACDC,aAAaA,CAACJ,MAAuB,EAA8B;MACjE,IAAI;QACF,OAAO,WAAW,IAAIA,MAAM,IAAI,gBAAgB,IAAIA,MAAM,IAAI,OAAOA,MAAM,CAACK,cAAc,KAAK,UAAU;MAC3G,CAAC,CAAC,MAAM;QACN,OAAO,KAAK;MACd;IACF;EACF,CAAC;EACDV,UAAUA,CAACW,IAAqB,EAAE;IAChC,IAAI,MAAM,IAAIA,IAAI,IAAIA,IAAI,CAACnB,IAAI,KAAKoB,SAAS,EAAE;MAC7C,OAAOD,IAAI,CAACnB,IAAI;IAClB,CAAC,MAAM;MACL,OAAO,CAAC;IACV;EACF,CAAC;EACDqB,UAAU,EAAE;IACVC,cAAcA,CAAC7B,QAA8B,EAAoC;MAC/E,IAAI;QACF,OAAO,mBAAmB,IAAIA,QAAQ,IAAI,gBAAgB,IAAIA,QAAQ;MACxE,CAAC,CAAC,MAAM;QACN,OAAO,KAAK;MACd;IACF,CAAC;IACD,MAAM8B,WAAWA,CAAC9B,QAA8B,EAAES,GAAW,EAA4B;MACvF,IAAIhB,iBAAiB,CAACmC,UAAU,CAACC,cAAc,CAAC7B,QAAQ,CAAC,EAAE;QACzD,OAAO,MAAMA,QAAQ,CAACa,YAAY,CAACJ,GAAG,CAAC;MACzC,CAAC,MAAM;QACL,MAAMsB,IAAI,GAAG,IAAI/B,QAAQ,CAACgC,IAAI,CAACvB,GAAG,CAAC;QACnC,OAAOsB,IAAI,CAACL,IAAI,CAAC,CAAC;MACpB;IACF,CAAC;IACDO,oBAAoBA,CAACjC,QAA8B,EAAiB;MAClE,IAAIP,iBAAiB,CAACmC,UAAU,CAACC,cAAc,CAAC7B,QAAQ,CAAC,EAAE;QACzD,OAAOA,QAAQ,CAACkC,iBAAiB,IAAI,IAAI;MAC3C,CAAC,MAAM;QAAA,IAAAC,eAAA;QACL,OAAO,EAAAA,eAAA,GAAAnC,QAAQ,CAACoC,KAAK,cAAAD,eAAA,gBAAAA,eAAA,GAAdA,eAAA,CAAgBE,QAAQ,cAAAF,eAAA,uBAAxBA,eAAA,CAA0B1B,GAAG,KAAI,IAAI;MAC9C;IACF,CAAC;IACD6B,iBAAiBA,CAACtC,QAA8B,EAAiB;MAC/D,IAAIP,iBAAiB,CAACmC,UAAU,CAACC,cAAc,CAAC7B,QAAQ,CAAC,EAAE;QACzD,OAAOA,QAAQ,CAACuC,cAAc,IAAI,IAAI;MACxC,CAAC,MAAM;QAAA,IAAAC,gBAAA;QACL,OAAO,EAAAA,gBAAA,GAAAxC,QAAQ,CAACoC,KAAK,cAAAI,gBAAA,gBAAAA,gBAAA,GAAdA,gBAAA,CAAgBC,KAAK,cAAAD,gBAAA,uBAArBA,gBAAA,CAAuB/B,GAAG,KAAI,IAAI;MAC3C;IACF,CAAC;IACD,MAAMiC,YAAYA,CAAC1C,QAA8B,EAAE2C,GAAW,EAAEC,QAAgB,EAA4B;MAC1G,IAAInD,iBAAiB,CAACmC,UAAU,CAACC,cAAc,CAAC7B,QAAQ,CAAC,EAAE;QACzD,OAAO,MAAMA,QAAQ,CAAC6C,aAAa,CAACF,GAAG,EAAEC,QAAQ,CAAC;MACpD,CAAC,MAAM;QACL,MAAME,WAAW,GAAG,IAAI9C,QAAQ,CAACgC,IAAI,CAACY,QAAQ,CAAC;QAC/C,MAAMhD,MAAM,GAAG,MAAMI,QAAQ,CAACgC,IAAI,CAACe,iBAAiB,CAACJ,GAAG,EAAEG,WAAoB,CAAC;QAC/E,OAAO;UAAErC,GAAG,EAAEb,MAAM,CAACa;QAAI,CAAC;MAC5B;IACF;EACF;AACF,CAAC;AAKD,eAAehB,iBAAiB","ignoreList":[]}
|
package/lib/module/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.11.
|
|
1
|
+
{"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.11.3';\nexport default VERSION;\n"],"mappings":"AAAA,MAAMA,OAAO,GAAG,QAAQ;AACxB,eAAeA,OAAO","ignoreList":[]}
|
|
@@ -14,7 +14,7 @@ import type { StringSet } from '../localization/StringSet.type';
|
|
|
14
14
|
import type { ClipboardServiceInterface, FileServiceInterface, MediaServiceInterface, NotificationServiceInterface, PlayerServiceInterface, RecorderServiceInterface } from '../platform/types';
|
|
15
15
|
import { ErrorBoundaryProps, LocalCacheStorage } from '../types';
|
|
16
16
|
export declare const SendbirdUIKit: Readonly<{
|
|
17
|
-
VERSION: "3.11.
|
|
17
|
+
VERSION: "3.11.3";
|
|
18
18
|
PLATFORM: string;
|
|
19
19
|
DEFAULT: {
|
|
20
20
|
AUTO_PUSH_TOKEN_REGISTRATION: boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
declare const _default: React.MemoExoticComponent<({ onPressHeaderLeft, onPressHeaderRight, rightIconName }: {
|
|
3
|
-
rightIconName: "search" | "stop" | "photo" | "recording" | "delete" | "message" | "done" | "user" | "add" | "chat-hide" | "chat-show" | "archive" | "arrow-left" | "audio-off-filled" | "audio-off" | "audio-on-filled" | "audio-on" | "ban" | "broadcast" | "camera" | "channels" | "chat-filled" | "chat" | "checkbox-off" | "checkbox-on" | "chevron-down" | "chevron-right" | "close" | "copy" | "create" | "document" | "done-all" | "download" | "edit" | "emoji-more" | "error" | "file-audio" | "file-document" | "freeze" | "gif" | "info" | "leave" | "mark-as-unread" | "members" | "moderation" | "more" | "mute" | "notifications-filled" | "notifications-off-filled" | "notifications" | "operator" | "pause" | "play" | "plus" | "question" | "radio-off" | "radio-on" | "refresh" | "
|
|
3
|
+
rightIconName: "search" | "stop" | "photo" | "recording" | "delete" | "remove" | "message" | "done" | "user" | "add" | "chat-hide" | "chat-show" | "archive" | "arrow-left" | "audio-off-filled" | "audio-off" | "audio-on-filled" | "audio-on" | "ban" | "broadcast" | "camera" | "channels" | "chat-filled" | "chat" | "checkbox-off" | "checkbox-on" | "chevron-down" | "chevron-right" | "close" | "copy" | "create" | "document" | "done-all" | "download" | "edit" | "emoji-more" | "error" | "file-audio" | "file-document" | "freeze" | "gif" | "info" | "leave" | "mark-as-unread" | "members" | "moderation" | "more" | "mute" | "notifications-filled" | "notifications-off-filled" | "notifications" | "operator" | "pause" | "play" | "plus" | "question" | "radio-off" | "radio-on" | "refresh" | "reply-filled" | "reply" | "send" | "settings-filled" | "spinner" | "streaming" | "supergroup" | "theme" | "thread" | "thumbnail-none" | "unarchive";
|
|
4
4
|
onPressHeaderLeft: () => void;
|
|
5
5
|
onPressHeaderRight: () => void;
|
|
6
6
|
}) => React.JSX.Element>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SendbirdChannel } from '@sendbird/uikit-utils';
|
|
2
2
|
import { FileType } from '../platform/types';
|
|
3
3
|
export declare const useChannelInputItems: (channel: SendbirdChannel, sendFileMessage: (file: FileType) => void) => {
|
|
4
|
-
icon?: "search" | "stop" | "photo" | "recording" | "delete" | "message" | "done" | "user" | "add" | "chat-hide" | "chat-show" | "archive" | "arrow-left" | "audio-off-filled" | "audio-off" | "audio-on-filled" | "audio-on" | "ban" | "broadcast" | "camera" | "channels" | "chat-filled" | "chat" | "checkbox-off" | "checkbox-on" | "chevron-down" | "chevron-right" | "close" | "copy" | "create" | "document" | "done-all" | "download" | "edit" | "emoji-more" | "error" | "file-audio" | "file-document" | "freeze" | "gif" | "info" | "leave" | "mark-as-unread" | "members" | "moderation" | "more" | "mute" | "notifications-filled" | "notifications-off-filled" | "notifications" | "operator" | "pause" | "play" | "plus" | "question" | "radio-off" | "radio-on" | "refresh" | "
|
|
4
|
+
icon?: "search" | "stop" | "photo" | "recording" | "delete" | "remove" | "message" | "done" | "user" | "add" | "chat-hide" | "chat-show" | "archive" | "arrow-left" | "audio-off-filled" | "audio-off" | "audio-on-filled" | "audio-on" | "ban" | "broadcast" | "camera" | "channels" | "chat-filled" | "chat" | "checkbox-off" | "checkbox-on" | "chevron-down" | "chevron-right" | "close" | "copy" | "create" | "document" | "done-all" | "download" | "edit" | "emoji-more" | "error" | "file-audio" | "file-document" | "freeze" | "gif" | "info" | "leave" | "mark-as-unread" | "members" | "moderation" | "more" | "mute" | "notifications-filled" | "notifications-off-filled" | "notifications" | "operator" | "pause" | "play" | "plus" | "question" | "radio-off" | "radio-on" | "refresh" | "reply-filled" | "reply" | "send" | "settings-filled" | "spinner" | "streaming" | "supergroup" | "theme" | "thread" | "thumbnail-none" | "unarchive" | undefined;
|
|
5
5
|
iconColor?: string | undefined;
|
|
6
6
|
title: string;
|
|
7
7
|
titleColor?: string | undefined;
|
|
@@ -13,7 +13,10 @@ export interface AsyncLocalCacheStorage {
|
|
|
13
13
|
multiGet?(keys: string[]): Promise<readonly KeyValuePairGet[] | KeyValuePairGet[]>;
|
|
14
14
|
multiRemove?(keys: string[]): Promise<void>;
|
|
15
15
|
}
|
|
16
|
-
export type MMKVLocalCacheStorage = Pick<MMKV, 'getString' | 'set' | '
|
|
16
|
+
export type MMKVLocalCacheStorage = Pick<MMKV, 'getString' | 'set' | 'getAllKeys'> & {
|
|
17
|
+
delete?: (key: string) => void;
|
|
18
|
+
remove?: (key: string) => void;
|
|
19
|
+
};
|
|
17
20
|
export type ErrorBoundaryProps = {
|
|
18
21
|
error: Error;
|
|
19
22
|
errorInfo: ErrorInfo;
|
|
@@ -5,6 +5,33 @@ import type * as ExpoFs from 'expo-file-system';
|
|
|
5
5
|
import type * as ExpoImagePicker from 'expo-image-picker';
|
|
6
6
|
import type * as ExpoVideo from 'expo-video';
|
|
7
7
|
import type { FilePickerResponse } from '../platform/types';
|
|
8
|
+
interface ExpoFileSystemLegacy {
|
|
9
|
+
documentDirectory: string | null;
|
|
10
|
+
cacheDirectory: string | null;
|
|
11
|
+
getInfoAsync(fileUri: string, options?: unknown): Promise<ExpoFs.FileInfo>;
|
|
12
|
+
downloadAsync(uri: string, fileUri: string, options?: unknown): Promise<{
|
|
13
|
+
uri: string;
|
|
14
|
+
}>;
|
|
15
|
+
}
|
|
16
|
+
interface ExpoDirectory {
|
|
17
|
+
uri: string;
|
|
18
|
+
}
|
|
19
|
+
interface ExpoFileSystemNew {
|
|
20
|
+
File: {
|
|
21
|
+
new (...uris: (string | unknown)[]): {
|
|
22
|
+
info(options?: unknown): ExpoFs.FileInfo;
|
|
23
|
+
};
|
|
24
|
+
downloadFileAsync(url: string, destination: unknown, options?: unknown): Promise<{
|
|
25
|
+
uri: string;
|
|
26
|
+
}>;
|
|
27
|
+
};
|
|
28
|
+
Directory: new (...uris: (string | unknown)[]) => ExpoDirectory;
|
|
29
|
+
Paths: {
|
|
30
|
+
document: ExpoDirectory;
|
|
31
|
+
cache: ExpoDirectory;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
type ExpoFileSystemModule = ExpoFileSystemLegacy | ExpoFileSystemNew | typeof ExpoFs;
|
|
8
35
|
declare const expoBackwardUtils: {
|
|
9
36
|
imagePicker: {
|
|
10
37
|
isCanceled(result: ExpoImagePicker.ImagePickerResult): boolean;
|
|
@@ -20,6 +47,15 @@ declare const expoBackwardUtils: {
|
|
|
20
47
|
isVideoModule(module: ExpoVideoModule): module is typeof ExpoVideo;
|
|
21
48
|
};
|
|
22
49
|
toFileSize(info: ExpoFs.FileInfo): number;
|
|
50
|
+
fileSystem: {
|
|
51
|
+
isLegacyModule(fsModule: ExpoFileSystemModule): fsModule is ExpoFileSystemLegacy;
|
|
52
|
+
getFileInfo(fsModule: ExpoFileSystemModule, uri: string): Promise<ExpoFs.FileInfo>;
|
|
53
|
+
getDocumentDirectory(fsModule: ExpoFileSystemModule): string | null;
|
|
54
|
+
getCacheDirectory(fsModule: ExpoFileSystemModule): string | null;
|
|
55
|
+
downloadFile(fsModule: ExpoFileSystemModule, url: string, localUri: string): Promise<{
|
|
56
|
+
uri: string;
|
|
57
|
+
}>;
|
|
58
|
+
};
|
|
23
59
|
};
|
|
24
60
|
export type ExpoAudioModule = typeof ExpoAV | typeof ExpoAudio;
|
|
25
61
|
export type ExpoVideoModule = typeof ExpoAV | typeof ExpoVideo;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const VERSION = "3.11.
|
|
1
|
+
declare const VERSION = "3.11.3";
|
|
2
2
|
export default VERSION;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sendbird/uikit-react-native",
|
|
3
|
-
"version": "3.11.
|
|
3
|
+
"version": "3.11.3",
|
|
4
4
|
"description": "Sendbird UIKit for React Native: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sendbird",
|
|
@@ -25,6 +25,15 @@
|
|
|
25
25
|
"types": "lib/typescript/src/index.d.ts",
|
|
26
26
|
"react-native": "src/index",
|
|
27
27
|
"source": "src/index",
|
|
28
|
+
"exports": {
|
|
29
|
+
"./package.json": "./package.json",
|
|
30
|
+
".": {
|
|
31
|
+
"types": "./lib/typescript/src/index.d.ts",
|
|
32
|
+
"react-native": "./src/index.ts",
|
|
33
|
+
"require": "./lib/commonjs/index.js",
|
|
34
|
+
"import": "./lib/module/index.js"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
28
37
|
"files": [
|
|
29
38
|
"src",
|
|
30
39
|
"lib",
|
|
@@ -60,10 +69,10 @@
|
|
|
60
69
|
},
|
|
61
70
|
"dependencies": {
|
|
62
71
|
"@openspacelabs/react-native-zoomable-view": "^2.1.5",
|
|
63
|
-
"@sendbird/uikit-chat-hooks": "3.11.
|
|
64
|
-
"@sendbird/uikit-react-native-foundation": "3.11.
|
|
72
|
+
"@sendbird/uikit-chat-hooks": "3.11.3",
|
|
73
|
+
"@sendbird/uikit-react-native-foundation": "3.11.3",
|
|
65
74
|
"@sendbird/uikit-tools": "0.0.15",
|
|
66
|
-
"@sendbird/uikit-utils": "3.11.
|
|
75
|
+
"@sendbird/uikit-utils": "3.11.3"
|
|
67
76
|
},
|
|
68
77
|
"devDependencies": {
|
|
69
78
|
"@bam.tech/react-native-image-resizer": "^3.0.4",
|
|
@@ -242,5 +251,5 @@
|
|
|
242
251
|
]
|
|
243
252
|
]
|
|
244
253
|
},
|
|
245
|
-
"gitHead": "
|
|
254
|
+
"gitHead": "519b9747203c1137ca88ab0ff5421a2b63b7bed3"
|
|
246
255
|
}
|
|
@@ -42,7 +42,12 @@ export default class InternalLocalCacheStorage implements AsyncLocalCacheStorage
|
|
|
42
42
|
|
|
43
43
|
async removeItem(key: string) {
|
|
44
44
|
if (this._mmkv) {
|
|
45
|
-
|
|
45
|
+
// Support both v3.x (delete) and v4.x (remove) APIs for backward compatibility
|
|
46
|
+
if (this._mmkv.delete) {
|
|
47
|
+
this._mmkv.delete(key);
|
|
48
|
+
} else if (this._mmkv.remove) {
|
|
49
|
+
this._mmkv.remove(key);
|
|
50
|
+
}
|
|
46
51
|
} else if (this._async) {
|
|
47
52
|
return this._async.removeItem(key);
|
|
48
53
|
}
|
|
@@ -145,12 +145,14 @@ const createExpoFileService = ({
|
|
|
145
145
|
if (!granted) throw new Error('Permission not granted');
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
const basePath =
|
|
148
|
+
const basePath =
|
|
149
|
+
expoBackwardUtils.fileSystem.getDocumentDirectory(fsModule) ||
|
|
150
|
+
expoBackwardUtils.fileSystem.getCacheDirectory(fsModule);
|
|
149
151
|
if (!basePath) throw new Error('Cannot determine directory');
|
|
150
152
|
|
|
151
153
|
const downloadPath = `${basePath}/${options.fileName}`;
|
|
152
154
|
|
|
153
|
-
const response = await
|
|
155
|
+
const response = await expoBackwardUtils.fileSystem.downloadFile(fsModule, options.fileUrl, downloadPath);
|
|
154
156
|
if (getFileType(options.fileType || '').match(/video|image/)) {
|
|
155
157
|
await mediaLibraryModule.saveToLibraryAsync(response.uri);
|
|
156
158
|
}
|
|
@@ -158,7 +160,7 @@ const createExpoFileService = ({
|
|
|
158
160
|
}
|
|
159
161
|
|
|
160
162
|
createRecordFilePath(customExtension = 'm4a'): { recordFilePath: string; uri: string } {
|
|
161
|
-
const basePath = fsModule
|
|
163
|
+
const basePath = expoBackwardUtils.fileSystem.getCacheDirectory(fsModule);
|
|
162
164
|
if (!basePath) throw new Error('Cannot determine directory');
|
|
163
165
|
|
|
164
166
|
const filename = `record-${Date.now()}.${customExtension}`;
|
|
@@ -122,7 +122,7 @@ const createExpoMediaService = ({
|
|
|
122
122
|
const { uri: compressedURI } = await imageManipulator.manipulateAsync(uri, [{ resize: resizingSize }], {
|
|
123
123
|
compress: Math.min(Math.max(0, compressionRate), 1),
|
|
124
124
|
});
|
|
125
|
-
const fileInfo = await
|
|
125
|
+
const fileInfo = await expoBackwardUtils.fileSystem.getFileInfo(fsModule, uri);
|
|
126
126
|
|
|
127
127
|
return { uri: compressedURI, size: expoBackwardUtils.toFileSize(fileInfo) };
|
|
128
128
|
},
|
package/src/types.ts
CHANGED
|
@@ -18,7 +18,11 @@ export interface AsyncLocalCacheStorage {
|
|
|
18
18
|
multiRemove?(keys: string[]): Promise<void>;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
export type MMKVLocalCacheStorage = Pick<MMKV, 'getString' | 'set' | '
|
|
21
|
+
export type MMKVLocalCacheStorage = Pick<MMKV, 'getString' | 'set' | 'getAllKeys'> & {
|
|
22
|
+
// Support both v3.x (delete) and v4.x (remove) APIs for backward compatibility
|
|
23
|
+
delete?: (key: string) => void;
|
|
24
|
+
remove?: (key: string) => void;
|
|
25
|
+
};
|
|
22
26
|
|
|
23
27
|
export type ErrorBoundaryProps = { error: Error; errorInfo: ErrorInfo; reset: () => void };
|
|
24
28
|
|
|
@@ -8,6 +8,36 @@ import type * as ExpoVideo from 'expo-video';
|
|
|
8
8
|
import type { FilePickerResponse } from '../platform/types';
|
|
9
9
|
import normalizeFile from './normalizeFile';
|
|
10
10
|
|
|
11
|
+
// Legacy expo-file-system API types (before SDK 54)
|
|
12
|
+
interface ExpoFileSystemLegacy {
|
|
13
|
+
documentDirectory: string | null;
|
|
14
|
+
cacheDirectory: string | null;
|
|
15
|
+
getInfoAsync(fileUri: string, options?: unknown): Promise<ExpoFs.FileInfo>;
|
|
16
|
+
downloadAsync(uri: string, fileUri: string, options?: unknown): Promise<{ uri: string }>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// New expo-file-system API types (SDK 54+)
|
|
20
|
+
interface ExpoDirectory {
|
|
21
|
+
uri: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
interface ExpoFileSystemNew {
|
|
25
|
+
File: {
|
|
26
|
+
new (...uris: (string | unknown)[]): {
|
|
27
|
+
info(options?: unknown): ExpoFs.FileInfo;
|
|
28
|
+
};
|
|
29
|
+
downloadFileAsync(url: string, destination: unknown, options?: unknown): Promise<{ uri: string }>;
|
|
30
|
+
};
|
|
31
|
+
Directory: new (...uris: (string | unknown)[]) => ExpoDirectory;
|
|
32
|
+
Paths: {
|
|
33
|
+
document: ExpoDirectory;
|
|
34
|
+
cache: ExpoDirectory;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Union type for both legacy and new expo-file-system
|
|
39
|
+
type ExpoFileSystemModule = ExpoFileSystemLegacy | ExpoFileSystemNew | typeof ExpoFs;
|
|
40
|
+
|
|
11
41
|
const expoBackwardUtils = {
|
|
12
42
|
imagePicker: {
|
|
13
43
|
isCanceled(result: ExpoImagePicker.ImagePickerResult) {
|
|
@@ -82,12 +112,52 @@ const expoBackwardUtils = {
|
|
|
82
112
|
},
|
|
83
113
|
},
|
|
84
114
|
toFileSize(info: ExpoFs.FileInfo) {
|
|
85
|
-
if ('size' in info) {
|
|
115
|
+
if ('size' in info && info.size !== undefined) {
|
|
86
116
|
return info.size;
|
|
87
117
|
} else {
|
|
88
118
|
return 0;
|
|
89
119
|
}
|
|
90
120
|
},
|
|
121
|
+
fileSystem: {
|
|
122
|
+
isLegacyModule(fsModule: ExpoFileSystemModule): fsModule is ExpoFileSystemLegacy {
|
|
123
|
+
try {
|
|
124
|
+
return 'documentDirectory' in fsModule || 'cacheDirectory' in fsModule;
|
|
125
|
+
} catch {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
async getFileInfo(fsModule: ExpoFileSystemModule, uri: string): Promise<ExpoFs.FileInfo> {
|
|
130
|
+
if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {
|
|
131
|
+
return await fsModule.getInfoAsync(uri);
|
|
132
|
+
} else {
|
|
133
|
+
const file = new fsModule.File(uri);
|
|
134
|
+
return file.info();
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
getDocumentDirectory(fsModule: ExpoFileSystemModule): string | null {
|
|
138
|
+
if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {
|
|
139
|
+
return fsModule.documentDirectory || null;
|
|
140
|
+
} else {
|
|
141
|
+
return fsModule.Paths?.document?.uri || null;
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
getCacheDirectory(fsModule: ExpoFileSystemModule): string | null {
|
|
145
|
+
if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {
|
|
146
|
+
return fsModule.cacheDirectory || null;
|
|
147
|
+
} else {
|
|
148
|
+
return fsModule.Paths?.cache?.uri || null;
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
async downloadFile(fsModule: ExpoFileSystemModule, url: string, localUri: string): Promise<{ uri: string }> {
|
|
152
|
+
if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {
|
|
153
|
+
return await fsModule.downloadAsync(url, localUri);
|
|
154
|
+
} else {
|
|
155
|
+
const destination = new fsModule.File(localUri);
|
|
156
|
+
const result = await fsModule.File.downloadFileAsync(url, destination as never);
|
|
157
|
+
return { uri: result.uri };
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
},
|
|
91
161
|
};
|
|
92
162
|
|
|
93
163
|
export type ExpoAudioModule = typeof ExpoAV | typeof ExpoAudio;
|
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const VERSION = '3.11.
|
|
1
|
+
const VERSION = '3.11.3';
|
|
2
2
|
export default VERSION;
|