react-native-compressor 1.7.2 → 1.8.1

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.
Files changed (130) hide show
  1. package/README.md +51 -8
  2. package/android/build.gradle +9 -0
  3. package/android/src/main/java/com/reactnativecompressor/Audio/AudioCompressor.kt +527 -0
  4. package/android/src/main/java/com/reactnativecompressor/Audio/AudioMain.kt +31 -0
  5. package/android/src/main/java/com/reactnativecompressor/CompressorModule.kt +169 -0
  6. package/android/src/main/java/com/reactnativecompressor/CompressorPackage.kt +34 -0
  7. package/android/src/main/java/com/reactnativecompressor/Image/ImageCompressor.kt +199 -0
  8. package/android/src/main/java/com/reactnativecompressor/Image/ImageCompressorOptions.kt +57 -0
  9. package/android/src/main/java/com/reactnativecompressor/Image/ImageMain.kt +31 -0
  10. package/android/src/main/java/com/reactnativecompressor/Image/ImageSize.kt +3 -0
  11. package/android/src/main/java/com/reactnativecompressor/Utils/Downloader.kt +119 -0
  12. package/android/src/main/java/com/reactnativecompressor/Utils/EventEmitterHandler.kt +66 -0
  13. package/android/src/main/java/com/reactnativecompressor/Utils/MediaCache.kt +61 -0
  14. package/android/src/main/java/com/reactnativecompressor/Utils/RealPathUtil.kt +177 -0
  15. package/android/src/main/java/com/reactnativecompressor/Utils/Uploader.kt +117 -0
  16. package/android/src/main/java/com/reactnativecompressor/Utils/Utils.kt +162 -0
  17. package/android/src/main/java/com/reactnativecompressor/Utils/createVideoThumbnail.kt +158 -0
  18. package/android/src/main/java/com/reactnativecompressor/Video/AutoVideoCompression.kt +63 -0
  19. package/android/src/main/java/com/reactnativecompressor/Video/VideoCompressorHelper.kt +125 -0
  20. package/android/src/main/java/com/reactnativecompressor/Video/VideoMain.kt +86 -0
  21. package/android/src/newarch/CompressorSpec.kt +5 -0
  22. package/android/src/oldarch/CompressorSpec.kt +34 -0
  23. package/ios/Audio/AudioMain.swift +115 -0
  24. package/ios/Compressor-Bridging-Header.h +1 -2
  25. package/ios/Compressor.h +0 -8
  26. package/ios/Compressor.mm +37 -389
  27. package/ios/CompressorManager.swift +107 -0
  28. package/ios/Image/ImageCompressor.swift +354 -0
  29. package/ios/Image/ImageCompressorOptions.swift +93 -0
  30. package/ios/Image/ImageMain.swift +27 -0
  31. package/ios/Utils/CreateVideoThumbnail.swift +111 -0
  32. package/ios/Utils/Downloader.swift +157 -0
  33. package/ios/Utils/EventEmitterHandler.swift +54 -0
  34. package/ios/Utils/MediaCache.swift +48 -0
  35. package/ios/Utils/Uploader.swift +99 -0
  36. package/ios/Utils/Utils.swift +110 -0
  37. package/ios/Video/{VideoCompressor.swift → VideoMain.swift} +167 -146
  38. package/lib/commonjs/Image/index.js +1 -1
  39. package/lib/commonjs/Image/index.js.map +1 -1
  40. package/lib/commonjs/Main.js +1 -8
  41. package/lib/commonjs/Main.js.map +1 -1
  42. package/lib/commonjs/Spec/NativeCompressor.js.map +1 -1
  43. package/lib/commonjs/Video/index.js +4 -33
  44. package/lib/commonjs/Video/index.js.map +1 -1
  45. package/lib/commonjs/expo-plugin/compressor.js.map +1 -1
  46. package/lib/commonjs/index.js +25 -6
  47. package/lib/commonjs/index.js.map +1 -1
  48. package/lib/commonjs/utils/Downloader.js +38 -0
  49. package/lib/commonjs/utils/Downloader.js.map +1 -0
  50. package/lib/commonjs/utils/Uploader.js +40 -0
  51. package/lib/commonjs/utils/Uploader.js.map +1 -0
  52. package/lib/commonjs/utils/index.js +47 -1
  53. package/lib/commonjs/utils/index.js.map +1 -1
  54. package/lib/module/Image/index.js +1 -1
  55. package/lib/module/Image/index.js.map +1 -1
  56. package/lib/module/Main.js +1 -7
  57. package/lib/module/Main.js.map +1 -1
  58. package/lib/module/Spec/NativeCompressor.js.map +1 -1
  59. package/lib/module/Video/index.js +5 -33
  60. package/lib/module/Video/index.js.map +1 -1
  61. package/lib/module/expo-plugin/compressor.js.map +1 -1
  62. package/lib/module/index.js +9 -7
  63. package/lib/module/index.js.map +1 -1
  64. package/lib/module/utils/Downloader.js +31 -0
  65. package/lib/module/utils/Downloader.js.map +1 -0
  66. package/lib/module/utils/Uploader.js +33 -0
  67. package/lib/module/utils/Uploader.js.map +1 -0
  68. package/lib/module/utils/index.js +9 -0
  69. package/lib/module/utils/index.js.map +1 -1
  70. package/lib/typescript/Image/index.d.ts +4 -0
  71. package/lib/typescript/Image/index.d.ts.map +1 -1
  72. package/lib/typescript/Main.d.ts +1 -2
  73. package/lib/typescript/Main.d.ts.map +1 -1
  74. package/lib/typescript/Spec/NativeCompressor.d.ts +16 -2
  75. package/lib/typescript/Spec/NativeCompressor.d.ts.map +1 -1
  76. package/lib/typescript/Video/index.d.ts +4 -28
  77. package/lib/typescript/Video/index.d.ts.map +1 -1
  78. package/lib/typescript/index.d.ts +7 -4
  79. package/lib/typescript/index.d.ts.map +1 -1
  80. package/lib/typescript/utils/Downloader.d.ts +2 -0
  81. package/lib/typescript/utils/Downloader.d.ts.map +1 -0
  82. package/lib/typescript/utils/Uploader.d.ts +28 -0
  83. package/lib/typescript/utils/Uploader.d.ts.map +1 -0
  84. package/lib/typescript/utils/index.d.ts +4 -1
  85. package/lib/typescript/utils/index.d.ts.map +1 -1
  86. package/package.json +6 -4
  87. package/src/Image/index.tsx +5 -1
  88. package/src/Main.tsx +1 -15
  89. package/src/Spec/NativeCompressor.ts +25 -2
  90. package/src/Video/index.tsx +11 -84
  91. package/src/expo-plugin/compressor.ts +1 -1
  92. package/src/index.tsx +12 -3
  93. package/src/utils/Downloader.tsx +38 -0
  94. package/src/utils/Uploader.tsx +78 -0
  95. package/src/utils/index.tsx +15 -0
  96. package/android/src/main/java/com/reactnativecompressor/Audio/AudioCompressor.java +0 -605
  97. package/android/src/main/java/com/reactnativecompressor/CompressorModule.java +0 -220
  98. package/android/src/main/java/com/reactnativecompressor/CompressorPackage.java +0 -58
  99. package/android/src/main/java/com/reactnativecompressor/Image/ImageCompressor.java +0 -257
  100. package/android/src/main/java/com/reactnativecompressor/Image/utils/ImageCompressorOptions.java +0 -69
  101. package/android/src/main/java/com/reactnativecompressor/Image/utils/ImageSize.java +0 -13
  102. package/android/src/main/java/com/reactnativecompressor/Utils/FileUplaoder/FileUploadHelper.java +0 -39
  103. package/android/src/main/java/com/reactnativecompressor/Utils/FileUplaoder/FileUploader.java +0 -129
  104. package/android/src/main/java/com/reactnativecompressor/Utils/MediaCache.java +0 -65
  105. package/android/src/main/java/com/reactnativecompressor/Utils/RealPathUtil.java +0 -210
  106. package/android/src/main/java/com/reactnativecompressor/Utils/Utils.java +0 -272
  107. package/android/src/main/java/com/reactnativecompressor/Video/AutoVideoCompression/AutoVideoCompression.java +0 -87
  108. package/android/src/main/java/com/reactnativecompressor/Video/VideoCompressorHelper.java +0 -182
  109. package/android/src/main/java/com/reactnativecompressor/Video/VideoModule.java +0 -112
  110. package/android/src/newarch/CompressorSpec.java +0 -9
  111. package/android/src/newarch/VideoCompressorSpec.java +0 -9
  112. package/android/src/oldarch/CompressorSpec.java +0 -34
  113. package/android/src/oldarch/VideoCompressorSpec.java +0 -26
  114. package/ios/Image/ImageCompressor.h +0 -22
  115. package/ios/Image/ImageCompressor.m +0 -540
  116. package/ios/Image/ImageCompressorOptions.h +0 -28
  117. package/ios/Image/ImageCompressorOptions.m +0 -97
  118. package/ios/Utils/Downloader.h +0 -16
  119. package/ios/Utils/Downloader.m +0 -150
  120. package/ios/Utils/MediaCache.h +0 -11
  121. package/ios/Utils/MediaCache.m +0 -51
  122. package/ios/Video/VideoCompressor.h +0 -5
  123. package/ios/Video/VideoCompressor.m +0 -1
  124. package/lib/commonjs/Spec/NativeVideoCompressor.js +0 -10
  125. package/lib/commonjs/Spec/NativeVideoCompressor.js.map +0 -1
  126. package/lib/module/Spec/NativeVideoCompressor.js +0 -3
  127. package/lib/module/Spec/NativeVideoCompressor.js.map +0 -1
  128. package/lib/typescript/Spec/NativeVideoCompressor.d.ts +0 -13
  129. package/lib/typescript/Spec/NativeVideoCompressor.d.ts.map +0 -1
  130. package/src/Spec/NativeVideoCompressor.ts +0 -14
@@ -3,6 +3,7 @@ import AssetsLibrary
3
3
  import AVFoundation
4
4
  import NextLevelSessionExporter
5
5
  import Photos
6
+ import MobileCoreServices
6
7
 
7
8
  struct CompressionError: Error {
8
9
  private let message: String
@@ -16,39 +17,28 @@ struct CompressionError: Error {
16
17
  }
17
18
  }
18
19
 
19
- struct UploadError: Error {
20
- private let message: String
21
-
22
- var localizedDescription: String {
23
- return message
24
- }
25
-
26
- init(message: String) {
27
- self.message = message
28
- }
29
- }
30
-
31
- @available(iOS 11.0, *)
32
- @objc(VideoCompressor)
33
- class VideoCompressor: RCTEventEmitter, URLSessionTaskDelegate {
20
+ class VideoCompressor {
34
21
  var backgroundTaskId: UIBackgroundTaskIdentifier = .invalid;
35
- var hasListener: Bool=false
36
- var uploadResolvers: [String: RCTPromiseResolveBlock] = [:]
37
- var uploadRejectors: [String: RCTPromiseRejectBlock] = [:]
22
+
38
23
  var compressorExports: [String: NextLevelSessionExporter] = [:]
39
- let videoCompressionThreshold:Int=7
40
-
41
- override init() {
42
- super.init()
43
- ImageCompressor.initVideoCompressorInstance(self)
44
- }
45
-
46
- override static func requiresMainQueueSetup() -> Bool {
47
- return false
48
- }
49
-
24
+
25
+ let metadatas: [String] = [
26
+ "albumName",
27
+ "artist",
28
+ "comment",
29
+ "copyrights",
30
+ "creationDate",
31
+ "date",
32
+ "encodedby",
33
+ "genre",
34
+ "language",
35
+ "location",
36
+ "lastModifiedDate",
37
+ "performer",
38
+ "publisher",
39
+ "title"
40
+ ]
50
41
 
51
- @objc(activateBackgroundTask:withResolver:withRejecter:)
52
42
  func activateBackgroundTask(options: [String: Any], resolve:@escaping RCTPromiseResolveBlock, reject:@escaping RCTPromiseRejectBlock) -> Void {
53
43
  guard backgroundTaskId == .invalid else {
54
44
  reject("failed", "There is a background task already", nil)
@@ -57,14 +47,13 @@ class VideoCompressor: RCTEventEmitter, URLSessionTaskDelegate {
57
47
  backgroundTaskId = UIApplication.shared.beginBackgroundTask(
58
48
  withName: "video-upload",
59
49
  expirationHandler: {
60
- self.sendEvent(withName: "backgroundTaskExpired", body: ["backgroundTaskId": self.backgroundTaskId])
50
+ EventEmitterHandler.emitBackgroundTaskExpired(self.backgroundTaskId)
61
51
  UIApplication.shared.endBackgroundTask(self.backgroundTaskId)
62
52
  self.backgroundTaskId = .invalid
63
53
  })
64
54
  resolve(backgroundTaskId)
65
55
  }
66
56
 
67
- @objc(deactivateBackgroundTask:withResolver:withRejecter:)
68
57
  func deactivateBackgroundTask(options: [String: Any], resolve:@escaping RCTPromiseResolveBlock, reject:@escaping RCTPromiseRejectBlock) -> Void {
69
58
  guard backgroundTaskId != .invalid else {
70
59
  reject("failed", "There is no active background task", nil)
@@ -75,14 +64,11 @@ class VideoCompressor: RCTEventEmitter, URLSessionTaskDelegate {
75
64
  backgroundTaskId = .invalid
76
65
  }
77
66
 
78
- @objc(compress:withOptions:withResolver:withRejecter:)
79
67
  func compress(fileUrl: String, options: [String: Any], resolve:@escaping RCTPromiseResolveBlock, reject:@escaping RCTPromiseRejectBlock) -> Void {
68
+ let progressDivider=options["progressDivider"] as? Int ?? 0
80
69
  compressVideo(url: URL(string: fileUrl)!, options:options,
81
- onProgress: { progress in
82
- print("Progress", progress)
83
- if(self.hasListener){
84
- self.sendEvent(withName: "videoCompressProgress", body: ["uuid": options["uuid"], "data": ["progress": progress]])
85
- }
70
+ onProgress: { progress in
71
+ EventEmitterHandler.emitVideoCompressProgress(progress, uuid: options["uuid"] as! String)
86
72
  }, onCompletion: { newUrl in
87
73
  resolve("\(newUrl)");
88
74
  }, onFailure: { error in
@@ -90,105 +76,10 @@ class VideoCompressor: RCTEventEmitter, URLSessionTaskDelegate {
90
76
  })
91
77
  }
92
78
 
93
- @objc(cancelCompression:)
94
79
  func cancelCompression(uuid: String) -> Void {
95
80
  compressorExports[uuid]?.cancelExport()
96
81
  }
97
82
 
98
- func makeValidUri(filePath: String) -> String {
99
- let fileWithUrl = URL(fileURLWithPath: filePath)
100
- let absoluteUrl = fileWithUrl.deletingLastPathComponent()
101
- let fileUrl = "file://\(absoluteUrl.path)/\(fileWithUrl.lastPathComponent)"
102
- return fileUrl;
103
- }
104
-
105
- @objc(upload:withOptions:withResolver:withRejecter:)
106
- func upload(filePath: String, options: [String: Any], resolve:@escaping RCTPromiseResolveBlock, reject:@escaping RCTPromiseRejectBlock) -> Void {
107
- let fileUrl = makeValidUri(filePath: filePath)
108
-
109
- guard let uuid = options["uuid"] as? String else {
110
- let uploadError = UploadError(message: "UUID is missing")
111
- reject("Upload Failed", "UUID is missing", uploadError)
112
- return
113
- }
114
-
115
- guard let remoteUrl = options["url"] as? String else {
116
- let uploadError = UploadError(message: "url is missing")
117
- reject("Upload Failed", "url is missing", uploadError)
118
- return
119
- }
120
-
121
- guard let method = options["method"] as? String else {
122
- let uploadError = UploadError(message: "method is missing")
123
- reject("Upload Failed", "method is missing", uploadError)
124
- return
125
- }
126
-
127
- guard let file = URL(string: fileUrl) else{
128
- let uploadError = UploadError(message: "invalid file url")
129
- reject("Failed", "Upload Failed", uploadError)
130
- return
131
- }
132
-
133
- let headers = options["headers"] as? [String: String] ?? [:]
134
-
135
- let url = URL(string: remoteUrl)!
136
- var request = URLRequest(url: url)
137
- request.httpMethod=method
138
- for(header, v) in headers{
139
- request.setValue(v, forHTTPHeaderField: header)
140
- }
141
-
142
- uploadResolvers[uuid] = resolve
143
- uploadRejectors[uuid] = reject
144
- // TODO: ADD Headers
145
- let config = URLSessionConfiguration.background(withIdentifier: uuid)
146
- let session = URLSession(configuration: config, delegate: self, delegateQueue: nil)
147
- let task = session.uploadTask(with: request, fromFile: file)
148
- task.resume()
149
- }
150
-
151
- func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
152
- guard let uuid = session.configuration.identifier else {return}
153
- guard let reject = uploadRejectors[uuid] else{return}
154
- guard let resolve = uploadResolvers[uuid] else{return}
155
- guard error == nil else {
156
- reject("failed", "Upload Failed", error)
157
- uploadRejectors[uuid] = nil
158
- return;
159
- }
160
-
161
- guard let response = task.response as? HTTPURLResponse else {
162
- let uploadError = UploadError(message: "Response is not defined")
163
- reject("failed", "Upload Failed", uploadError)
164
- uploadRejectors[uuid] = nil
165
- return;
166
- }
167
-
168
- let result: [String : Any] = ["status": response.statusCode, "headers": response.allHeaderFields, "body": ""]
169
-
170
- resolve(result)
171
- uploadResolvers[uuid] = nil
172
- }
173
-
174
- func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64)
175
- {
176
- guard let uuid = session.configuration.identifier else {return}
177
- self.sendEvent(withName: "VideoCompressorProgress", body: ["uuid": uuid, "data": ["written": totalBytesSent, "total": totalBytesExpectedToSend]])
178
- }
179
-
180
- override func supportedEvents() -> [String]! {
181
- return ["videoCompressProgress", "VideoCompressorProgress", "backgroundTaskExpired","downloadProgress"]
182
- }
183
-
184
- override func stopObserving() -> Void {
185
- hasListener = false
186
- }
187
-
188
- override func startObserving() -> Void {
189
- hasListener = true
190
- }
191
-
192
83
  func getfileSize(forURL url: Any) -> Double {
193
84
  var fileURL: URL?
194
85
  var fileSize: Double = 0.0
@@ -213,12 +104,12 @@ func makeValidUri(filePath: String) -> String {
213
104
  func compressVideo(url: URL, options: [String: Any], onProgress: @escaping (Float) -> Void, onCompletion: @escaping (URL) -> Void, onFailure: @escaping (Error) -> Void){
214
105
  let uuid:String = options["uuid"] as! String
215
106
 
216
- ImageCompressor.getAbsoluteVideoPath(url.absoluteString, uuid: uuid) { absoluteVideoPath in
107
+ VideoCompressor.getAbsoluteVideoPath(url.absoluteString, options: options) { absoluteVideoPath in
217
108
  var minimumFileSizeForCompress:Double=0.0;
218
- let videoURL = URL(string: absoluteVideoPath!)
109
+ let videoURL = URL(string: absoluteVideoPath)
219
110
  let fileSize=self.getfileSize(forURL: videoURL!);
220
111
  if((options["minimumFileSizeForCompress"]) != nil)
221
- {
112
+ {0
222
113
  minimumFileSizeForCompress=options["minimumFileSizeForCompress"] as! Double;
223
114
  }
224
115
  if(fileSize>minimumFileSizeForCompress)
@@ -280,6 +171,7 @@ func makeValidUri(filePath: String) -> String {
280
171
  func autoCompressionHelper(url: URL, options: [String: Any], onProgress: @escaping (Float) -> Void, onCompletion: @escaping (URL) -> Void, onFailure: @escaping (Error) -> Void){
281
172
  let maxSize:Float = options["maxSize"] as! Float;
282
173
  let uuid:String = options["uuid"] as! String
174
+ let progressDivider=options["progressDivider"] as? Int ?? 0
283
175
 
284
176
  let asset = AVAsset(url: url)
285
177
  guard asset.tracks.count >= 1 else {
@@ -304,7 +196,7 @@ func makeValidUri(filePath: String) -> String {
304
196
  height: Int(resultHeight), width: Int(resultWidth)
305
197
  );
306
198
 
307
- exportVideoHelper(url: url, asset: asset, bitRate: videoBitRate, resultWidth: resultWidth, resultHeight: resultHeight,uuid: uuid) { progress in
199
+ exportVideoHelper(url: url, asset: asset, bitRate: videoBitRate, resultWidth: resultWidth, resultHeight: resultHeight,uuid: uuid,progressDivider: progressDivider) { progress in
308
200
  onProgress(progress)
309
201
  } onCompletion: { outputURL in
310
202
  onCompletion(outputURL)
@@ -316,6 +208,7 @@ func makeValidUri(filePath: String) -> String {
316
208
  func manualCompressionHelper(url: URL, options: [String: Any], onProgress: @escaping (Float) -> Void, onCompletion: @escaping (URL) -> Void, onFailure: @escaping (Error) -> Void){
317
209
  let uuid:String = options["uuid"] as! String
318
210
  var bitRate=options["bitrate"] as! Float?;
211
+ let progressDivider=options["progressDivider"] as? Int ?? 0
319
212
  let asset = AVAsset(url: url)
320
213
  guard asset.tracks.count >= 1 else {
321
214
  let error = CompressionError(message: "Invalid video URL, no track found")
@@ -343,7 +236,7 @@ func makeValidUri(filePath: String) -> String {
343
236
 
344
237
  let videoBitRate = bitRate ?? height*width*1.5
345
238
 
346
- exportVideoHelper(url: url, asset: asset, bitRate: Int(videoBitRate), resultWidth: width, resultHeight: height,uuid: uuid) { progress in
239
+ exportVideoHelper(url: url, asset: asset, bitRate: Int(videoBitRate), resultWidth: width, resultHeight: height,uuid: uuid,progressDivider: progressDivider) { progress in
347
240
  onProgress(progress)
348
241
  } onCompletion: { outputURL in
349
242
  onCompletion(outputURL)
@@ -352,12 +245,13 @@ func makeValidUri(filePath: String) -> String {
352
245
  }
353
246
  }
354
247
 
355
- func exportVideoHelper(url: URL,asset: AVAsset, bitRate: Int,resultWidth:Float,resultHeight:Float,uuid:String, onProgress: @escaping (Float) -> Void, onCompletion: @escaping (URL) -> Void, onFailure: @escaping (Error) -> Void){
356
- var videoCompressionCounter:Int=0
248
+ func exportVideoHelper(url: URL,asset: AVAsset, bitRate: Int,resultWidth:Float,resultHeight:Float,uuid:String,progressDivider: Int, onProgress: @escaping (Float) -> Void, onCompletion: @escaping (URL) -> Void, onFailure: @escaping (Error) -> Void){
249
+ var currentVideoCompression:Int=0
250
+
357
251
  var tmpURL = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
358
252
  .appendingPathComponent(ProcessInfo().globallyUniqueString)
359
253
  .appendingPathExtension("mp4")
360
- tmpURL = URL(string:makeValidUri(filePath: tmpURL.absoluteString))!
254
+ tmpURL = URL(string: Utils.makeValidUri(filePath: tmpURL.absoluteString))!
361
255
 
362
256
  let exporter = NextLevelSessionExporter(withAsset: asset)
363
257
  exporter.outputURL = tmpURL
@@ -384,15 +278,14 @@ func makeValidUri(filePath: String) -> String {
384
278
 
385
279
  compressorExports[uuid] = exporter
386
280
  exporter.export(progressHandler: { (progress) in
387
- let _progress:Float=progress*100;
388
- if(Int(_progress)==videoCompressionCounter)
281
+ let roundProgress:Int=Int((progress*100).rounded());
282
+ if(progressDivider==0||(roundProgress%progressDivider==0&&roundProgress>currentVideoCompression))
389
283
  {
390
- videoCompressionCounter=Int(_progress)+self.videoCompressionThreshold
284
+ currentVideoCompression=roundProgress
391
285
  onProgress(progress)
392
286
  }
393
-
394
287
  }, completionHandler: { result in
395
- videoCompressionCounter=0;
288
+ currentVideoCompression=0;
396
289
  switch exporter.status {
397
290
  case .completed:
398
291
  onCompletion(exporter.outputURL!)
@@ -413,4 +306,132 @@ func makeValidUri(filePath: String) -> String {
413
306
  return tracks[0];
414
307
  }
415
308
 
309
+
310
+ func getVideoMetaData(_ filePath: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
311
+ do {
312
+ VideoCompressor.getAbsoluteVideoPath(filePath, options: [:]) { absoluteImagePath in
313
+ if absoluteImagePath.hasPrefix("file://") {
314
+ let absoluteImagePath = absoluteImagePath.replacingOccurrences(of: "file://", with: "")
315
+ let fileManager = FileManager.default
316
+ var isDir: ObjCBool = false
317
+
318
+ if !fileManager.fileExists(atPath: absoluteImagePath, isDirectory: &isDir) || isDir.boolValue {
319
+ let err = NSError(domain: "file not found", code: -15, userInfo: nil)
320
+ reject(String(err.code), err.localizedDescription, err)
321
+ return
322
+ }
323
+
324
+ let attrs = try? fileManager.attributesOfItem(atPath: absoluteImagePath)
325
+ if let fileSize = attrs?[FileAttributeKey.size] as? UInt64 {
326
+ let fileSizeString = String(fileSize)
327
+
328
+ var result: [String: Any] = [:]
329
+ let assetOptions: [String: Any] = [AVURLAssetPreferPreciseDurationAndTimingKey: true]
330
+ let asset = AVURLAsset(url: URL(fileURLWithPath: absoluteImagePath), options: assetOptions)
331
+ if let avAsset = asset.tracks(withMediaType: .video).first {
332
+ let size = avAsset.naturalSize
333
+ let _extension = (absoluteImagePath as NSString).pathExtension
334
+ let time = asset.duration
335
+ let seconds = Int(ceil(Double(time.value / Int64(time.timescale))))
336
+
337
+ result["width"] = String(format: "%.2f", size.width)
338
+ result["height"] = String(format: "%.2f", size.height)
339
+ result["extension"] = _extension
340
+ result["size"] = fileSizeString
341
+ result["duration"] = String(seconds)
342
+
343
+ var commonMetadata: [AVMetadataItem] = []
344
+ for key in self.metadatas {
345
+ let items = AVMetadataItem.metadataItems(from: asset.commonMetadata, withKey: key, keySpace: AVMetadataKeySpace.common)
346
+ commonMetadata.append(contentsOf: items)
347
+ }
348
+
349
+ for item in commonMetadata {
350
+ if let value = item.value {
351
+ result[item.commonKey!.rawValue] = value
352
+ }
353
+ }
354
+
355
+ resolve(result)
356
+ }
357
+ }
358
+ }
359
+ }
360
+ } catch {
361
+ reject(error.localizedDescription, error.localizedDescription, nil)
362
+ }
363
+ }
364
+
365
+ static func getAbsoluteVideoPath(_ videoPath: String, options: [String: Any], completionHandler: @escaping (String) -> Void) {
366
+ if videoPath.hasPrefix("http://") || videoPath.hasPrefix("https://") {
367
+ let uuid=options["uuid"] as? String ?? ""
368
+ let progressDivider=options["progressDivider"] as? Int ?? 0
369
+ Downloader.downloadFileAndSaveToCache(videoPath, uuid: uuid,progressDivider:progressDivider) { downloadedPath in
370
+ completionHandler(downloadedPath)
371
+ }
372
+ return
373
+ } else if !videoPath.contains("ph://") {
374
+ completionHandler(videoPath)
375
+ return
376
+ }
377
+ let assetId = videoPath.replacingOccurrences(of: "ph://", with: "")
378
+ let outputFileType = AVFileType.mp4
379
+ let pressetType = AVAssetExportPresetPassthrough
380
+
381
+ if assetId.isEmpty {
382
+ let error = NSError(domain: "RNGalleryManager", code: -91, userInfo: nil)
383
+ let exception = NSException(name: NSExceptionName(rawValue: "RNGalleryManager"), reason: "Empty asset ID.", userInfo: nil)
384
+ exception.raise()
385
+ return
386
+ }
387
+
388
+ let localIds = [assetId]
389
+ guard let videoAsset = PHAsset.fetchAssets(withLocalIdentifiers: localIds, options: nil).firstObject else {
390
+ return
391
+ }
392
+
393
+ let mimeType = UTTypeCopyPreferredTagWithClass(outputFileType as CFString, kUTTagClassMIMEType)?.takeRetainedValue() as String? ?? ""
394
+ let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mimeType as CFString, nil)?.takeRetainedValue() as String? ?? ""
395
+ let extensionValue = UTTypeCopyPreferredTagWithClass(uti as CFString, kUTTagClassFilenameExtension)?.takeRetainedValue() as String? ?? ""
396
+ let path = Utils.generateCacheFilePath(extensionValue)
397
+ let outputUrl = URL(string: "file://\(path)")!
398
+
399
+ let videoRequestOptions = PHVideoRequestOptions()
400
+ videoRequestOptions.isNetworkAccessAllowed = true
401
+ videoRequestOptions.deliveryMode = .highQualityFormat
402
+
403
+ PHImageManager.default().requestExportSession(forVideo: videoAsset, options: videoRequestOptions, exportPreset: pressetType) { exportSession, _ in
404
+ guard let exportSession = exportSession else {
405
+ let error = NSError(domain: "RNGalleryManager", code: -91, userInfo: nil)
406
+ let exception = NSException(name: NSExceptionName(rawValue: "RNGalleryManager"), reason: "Export session is nil.", userInfo: nil)
407
+ exception.raise()
408
+ return
409
+ }
410
+
411
+ exportSession.shouldOptimizeForNetworkUse = true
412
+ exportSession.outputFileType = outputFileType
413
+ exportSession.outputURL = outputUrl
414
+
415
+ exportSession.exportAsynchronously {
416
+ switch exportSession.status {
417
+ case .failed:
418
+ let error = exportSession.error ?? NSError(domain: "RNGalleryManager", code: -91, userInfo: nil)
419
+ let codeWithDomain = "E\(error.localizedDescription)\(error)"
420
+ let exception = NSException(name: NSExceptionName(rawValue: codeWithDomain), reason: "Video export failed.", userInfo: nil)
421
+ exception.raise()
422
+ case .cancelled:
423
+ let error = NSError(domain: "RNGalleryManager", code: -91, userInfo: nil)
424
+ let exception = NSException(name: NSExceptionName(rawValue: "RNGalleryManager"), reason: "Video export cancelled.", userInfo: nil)
425
+ exception.raise()
426
+ case .completed:
427
+ completionHandler(outputUrl.absoluteString)
428
+ default:
429
+ let error = NSError(domain: "RNGalleryManager", code: -91, userInfo: nil)
430
+ let exception = NSException(name: NSExceptionName(rawValue: "RNGalleryManager"), reason: "Unknown status.", userInfo: nil)
431
+ exception.raise()
432
+ }
433
+ }
434
+ }
435
+ }
436
+
416
437
  }
@@ -16,10 +16,10 @@ const Image = {
16
16
  if (!value) {
17
17
  throw new Error('Compression value is empty, please provide a value for compression.');
18
18
  }
19
- const uuid = (0, _utils.uuidv4)();
20
19
  let subscription;
21
20
  try {
22
21
  if (options !== null && options !== void 0 && options.downloadProgress) {
22
+ const uuid = (0, _utils.uuidv4)();
23
23
  //@ts-ignore
24
24
  options.uuid = uuid;
25
25
  subscription = ImageCompressEventEmitter.addListener('downloadProgress', event => {
@@ -1 +1 @@
1
- {"version":3,"names":["_Main","require","_utils","_reactNative","base64UrlRegex","ImageCompressEventEmitter","NativeEventEmitter","Compressor","NativeImage","Image","compress","value","options","arguments","length","undefined","Error","uuid","uuidv4","subscription","downloadProgress","addListener","event","data","progress","cleanData","replace","image_compress","remove","_default","exports","default"],"sourceRoot":"../../../src","sources":["Image/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAGA,IAAAE,YAAA,GAAAF,OAAA;AAFA,MAAMG,cAAc,GAAG,6CAA6C;AA+CpE,MAAMC,yBAAyB,GAAG,IAAIC,+BAAkB,CAACC,gBAAU,CAAC;AAEpE,MAAMC,WAAW,GAAGD,gBAAU;AAM9B,MAAME,KAAgB,GAAG;EACvBC,QAAQ,EAAE,eAAAA,CAAOC,KAAK,EAAmB;IAAA,IAAjBC,OAAO,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAClC,IAAI,CAACF,KAAK,EAAE;MACV,MAAM,IAAIK,KAAK,CACb,qEACF,CAAC;IACH;IAEA,MAAMC,IAAI,GAAG,IAAAC,aAAM,EAAC,CAAC;IACrB,IAAIC,YAAqC;IACzC,IAAI;MACF,IAAIP,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEQ,gBAAgB,EAAE;QAC7B;QACAR,OAAO,CAACK,IAAI,GAAGA,IAAI;QACnBE,YAAY,GAAGd,yBAAyB,CAACgB,WAAW,CAClD,kBAAkB,EACjBC,KAAU,IAAK;UACd,IAAIA,KAAK,CAACL,IAAI,KAAKA,IAAI,EAAE;YACvBL,OAAO,CAACQ,gBAAgB,IACtBR,OAAO,CAACQ,gBAAgB,CAACE,KAAK,CAACC,IAAI,CAACC,QAAQ,CAAC;UACjD;QACF,CACF,CAAC;MACH;MAEA,MAAMC,SAAS,GAAGd,KAAK,CAACe,OAAO,CAACtB,cAAc,EAAE,EAAE,CAAC;MACnD,OAAO,MAAMI,WAAW,CAACmB,cAAc,CAACF,SAAS,EAAEb,OAAO,CAAC;IAC7D,CAAC,SAAS;MACR;MACA,IAAIO,YAAY,EAAE;QAChBA,YAAY,CAACS,MAAM,CAAC,CAAC;MACvB;IACF;EACF;AACF,CAAC;AAAC,IAAAC,QAAA,GAEapB,KAAK;AAAAqB,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
1
+ {"version":3,"names":["_Main","require","_utils","_reactNative","base64UrlRegex","ImageCompressEventEmitter","NativeEventEmitter","Compressor","NativeImage","Image","compress","value","options","arguments","length","undefined","Error","subscription","downloadProgress","uuid","uuidv4","addListener","event","data","progress","cleanData","replace","image_compress","remove","_default","exports","default"],"sourceRoot":"../../../src","sources":["Image/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAGA,IAAAE,YAAA,GAAAF,OAAA;AAFA,MAAMG,cAAc,GAAG,6CAA6C;AAmDpE,MAAMC,yBAAyB,GAAG,IAAIC,+BAAkB,CAACC,gBAAU,CAAC;AAEpE,MAAMC,WAAW,GAAGD,gBAAU;AAM9B,MAAME,KAAgB,GAAG;EACvBC,QAAQ,EAAE,eAAAA,CAAOC,KAAK,EAAmB;IAAA,IAAjBC,OAAO,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAClC,IAAI,CAACF,KAAK,EAAE;MACV,MAAM,IAAIK,KAAK,CACb,qEACF,CAAC;IACH;IAEA,IAAIC,YAAqC;IACzC,IAAI;MACF,IAAIL,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEM,gBAAgB,EAAE;QAC7B,MAAMC,IAAI,GAAG,IAAAC,aAAM,EAAC,CAAC;QACrB;QACAR,OAAO,CAACO,IAAI,GAAGA,IAAI;QACnBF,YAAY,GAAGZ,yBAAyB,CAACgB,WAAW,CAClD,kBAAkB,EACjBC,KAAU,IAAK;UACd,IAAIA,KAAK,CAACH,IAAI,KAAKA,IAAI,EAAE;YACvBP,OAAO,CAACM,gBAAgB,IACtBN,OAAO,CAACM,gBAAgB,CAACI,KAAK,CAACC,IAAI,CAACC,QAAQ,CAAC;UACjD;QACF,CACF,CAAC;MACH;MAEA,MAAMC,SAAS,GAAGd,KAAK,CAACe,OAAO,CAACtB,cAAc,EAAE,EAAE,CAAC;MACnD,OAAO,MAAMI,WAAW,CAACmB,cAAc,CAACF,SAAS,EAAEb,OAAO,CAAC;IAC7D,CAAC,SAAS;MACR;MACA,IAAIK,YAAY,EAAE;QAChBA,YAAY,CAACW,MAAM,CAAC,CAAC;MACvB;IACF;EACF;AACF,CAAC;AAAC,IAAAC,QAAA,GAEapB,KAAK;AAAAqB,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.VideoCompressor = exports.Compressor = void 0;
6
+ exports.Compressor = void 0;
7
7
  var _reactNative = require("react-native");
8
8
  const LINKING_ERROR = `The package 'react-native-compressor' doesn't seem to be linked. Make sure: \n\n` + _reactNative.Platform.select({
9
9
  ios: "- You have run 'pod install'\n",
@@ -13,17 +13,10 @@ const LINKING_ERROR = `The package 'react-native-compressor' doesn't seem to be
13
13
  // @ts-expect-error
14
14
  const isTurboModuleEnabled = global.__turboModuleProxy != null;
15
15
  const CompressorModule = isTurboModuleEnabled ? require('./Spec/NativeCompressor').default : _reactNative.NativeModules.Compressor;
16
- const VideoCompressorModule = isTurboModuleEnabled ? require('./Spec/NativeVideoCompressor').default : _reactNative.NativeModules.VideoCompressor;
17
16
  const Compressor = CompressorModule ? CompressorModule : new Proxy({}, {
18
17
  get() {
19
18
  throw new Error(LINKING_ERROR);
20
19
  }
21
20
  });
22
21
  exports.Compressor = Compressor;
23
- const VideoCompressor = VideoCompressorModule ? VideoCompressorModule : new Proxy({}, {
24
- get() {
25
- throw new Error(LINKING_ERROR);
26
- }
27
- });
28
- exports.VideoCompressor = VideoCompressor;
29
22
  //# sourceMappingURL=Main.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","isTurboModuleEnabled","global","__turboModuleProxy","CompressorModule","NativeModules","Compressor","VideoCompressorModule","VideoCompressor","Proxy","get","Error","exports"],"sourceRoot":"../../src","sources":["Main.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,MAAMC,aAAa,GAChB,kFAAiF,GAClFC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;;AAEjC;AACA,MAAMC,oBAAoB,GAAGC,MAAM,CAACC,kBAAkB,IAAI,IAAI;AAE9D,MAAMC,gBAAgB,GAAGH,oBAAoB,GACzCN,OAAO,CAAC,yBAAyB,CAAC,CAACK,OAAO,GAC1CK,0BAAa,CAACC,UAAU;AAC5B,MAAMC,qBAAqB,GAAGN,oBAAoB,GAC9CN,OAAO,CAAC,8BAA8B,CAAC,CAACK,OAAO,GAC/CK,0BAAa,CAACG,eAAe;AAEjC,MAAMF,UAAU,GAAGF,gBAAgB,GAC/BA,gBAAgB,GAChB,IAAIK,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACf,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAACgB,OAAA,CAAAN,UAAA,GAAAA,UAAA;AAEN,MAAME,eAAe,GAAGD,qBAAqB,GACzCA,qBAAqB,GACrB,IAAIE,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACf,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAACgB,OAAA,CAAAJ,eAAA,GAAAA,eAAA"}
1
+ {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","isTurboModuleEnabled","global","__turboModuleProxy","CompressorModule","NativeModules","Compressor","Proxy","get","Error","exports"],"sourceRoot":"../../src","sources":["Main.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,MAAMC,aAAa,GAChB,kFAAiF,GAClFC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;;AAEjC;AACA,MAAMC,oBAAoB,GAAGC,MAAM,CAACC,kBAAkB,IAAI,IAAI;AAE9D,MAAMC,gBAAgB,GAAGH,oBAAoB,GACzCN,OAAO,CAAC,yBAAyB,CAAC,CAACK,OAAO,GAC1CK,0BAAa,CAACC,UAAU;AAE5B,MAAMA,UAAU,GAAGF,gBAAgB,GAC/BA,gBAAgB,GAChB,IAAIG,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACb,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAACc,OAAA,CAAAJ,UAAA,GAAAA,UAAA"}
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_default","TurboModuleRegistry","getEnforcing","exports","default"],"sourceRoot":"../../../src","sources":["Spec/NativeCompressor.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAapCC,gCAAmB,CAACC,YAAY,CAAO,YAAY,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAJ,QAAA"}
1
+ {"version":3,"names":["_reactNative","require","_default","TurboModuleRegistry","getEnforcing","exports","default"],"sourceRoot":"../../../src","sources":["Spec/NativeCompressor.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAoCpCC,gCAAmB,CAACC,YAAY,CAAO,YAAY,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAJ,QAAA"}
@@ -3,41 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.cancelCompression = exports.backgroundUpload = void 0;
6
+ exports.default = exports.cancelCompression = void 0;
7
7
  var _reactNative = require("react-native");
8
8
  var _Main = require("../Main");
9
9
  var _utils = require("../utils");
10
- const VideoCompressEventEmitter = new _reactNative.NativeEventEmitter(_Main.VideoCompressor);
11
- const NativeVideoCompressor = _Main.VideoCompressor;
12
- const backgroundUpload = async (url, fileUrl, options, onProgress) => {
13
- const uuid = (0, _utils.uuidv4)();
14
- let subscription;
15
- try {
16
- if (onProgress) {
17
- subscription = VideoCompressEventEmitter.addListener('VideoCompressorProgress', event => {
18
- if (event.uuid === uuid) {
19
- onProgress(event.data.written, event.data.total);
20
- }
21
- });
22
- }
23
- if (_reactNative.Platform.OS === 'android' && fileUrl.includes('file://')) {
24
- fileUrl = fileUrl.replace('file://', '');
25
- }
26
- const result = await NativeVideoCompressor.upload(fileUrl, {
27
- uuid,
28
- method: options.httpMethod,
29
- headers: options.headers,
30
- url
31
- });
32
- return result;
33
- } finally {
34
- // @ts-ignore
35
- if (subscription) {
36
- subscription.remove();
37
- }
38
- }
39
- };
40
- exports.backgroundUpload = backgroundUpload;
10
+ const VideoCompressEventEmitter = new _reactNative.NativeEventEmitter(_Main.Compressor);
11
+ const NativeVideoCompressor = _Main.Compressor;
41
12
  const cancelCompression = cancellationId => {
42
13
  return NativeVideoCompressor.cancelCompression(cancellationId);
43
14
  };
@@ -66,6 +37,7 @@ const Video = {
66
37
  const modifiedOptions = {
67
38
  uuid
68
39
  };
40
+ if (options !== null && options !== void 0 && options.progressDivider) modifiedOptions.progressDivider = options === null || options === void 0 ? void 0 : options.progressDivider;
69
41
  if (options !== null && options !== void 0 && options.bitrate) modifiedOptions.bitrate = options === null || options === void 0 ? void 0 : options.bitrate;
70
42
  if (options !== null && options !== void 0 && options.compressionMethod) {
71
43
  modifiedOptions.compressionMethod = options === null || options === void 0 ? void 0 : options.compressionMethod;
@@ -96,7 +68,6 @@ const Video = {
96
68
  }
97
69
  }
98
70
  },
99
- backgroundUpload,
100
71
  cancelCompression,
101
72
  activateBackgroundTask(onExpired) {
102
73
  if (onExpired) {
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_Main","_utils","VideoCompressEventEmitter","NativeEventEmitter","VideoCompressor","NativeVideoCompressor","backgroundUpload","url","fileUrl","options","onProgress","uuid","uuidv4","subscription","addListener","event","data","written","total","Platform","OS","includes","replace","result","upload","method","httpMethod","headers","remove","exports","cancelCompression","cancellationId","Video","compress","subscription2","progress","downloadProgress","modifiedOptions","bitrate","compressionMethod","maxSize","minimumFileSizeForCompress","undefined","getCancellationId","activateBackgroundTask","onExpired","deactivateBackgroundTask","removeAllListeners","_default","default"],"sourceRoot":"../../../src","sources":["Video/index.tsx"],"mappings":"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"}
1
+ {"version":3,"names":["_reactNative","require","_Main","_utils","VideoCompressEventEmitter","NativeEventEmitter","Compressor","NativeVideoCompressor","cancelCompression","cancellationId","exports","Video","compress","fileUrl","options","onProgress","uuid","uuidv4","subscription","subscription2","addListener","event","data","progress","downloadProgress","modifiedOptions","progressDivider","bitrate","compressionMethod","maxSize","minimumFileSizeForCompress","undefined","getCancellationId","result","remove","activateBackgroundTask","onExpired","deactivateBackgroundTask","removeAllListeners","_default","default"],"sourceRoot":"../../../src","sources":["Video/index.tsx"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["_configPlugins","require","pkg","withCompressor","config","_default","createRunOncePlugin","name","version","exports","default"],"sourceRoot":"../../../src","sources":["expo-plugin/compressor.ts"],"mappings":";;;;;;AACA,IAAAA,cAAA,GAAAC,OAAA;AADA;;AAEA,MAAMC,GAAG,GAAGD,OAAO,CAAC,uBAAuB,CAAC;AAI5C,MAAME,cAAmC,GAAIC,MAAU,IAAKA,MAAM;AAAC,IAAAC,QAAA,GAEpD,IAAAC,kCAAmB,EAACH,cAAc,EAAED,GAAG,CAACK,IAAI,EAAEL,GAAG,CAACM,OAAO,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAL,QAAA"}
1
+ {"version":3,"names":["_configPlugins","require","pkg","withCompressor","config","_default","createRunOncePlugin","name","version","exports","default"],"sourceRoot":"../../../src","sources":["expo-plugin/compressor.ts"],"mappings":";;;;;;AACA,IAAAA,cAAA,GAAAC,OAAA;AADA;;AAEA,MAAMC,GAAG,GAAGD,OAAO,CAAC,uBAAuB,CAAC;AAI5C,MAAME,cAAmC,GAAIC,MAAW,IAAKA,MAAM;AAAC,IAAAC,QAAA,GAErD,IAAAC,kCAAmB,EAACH,cAAc,EAAED,GAAG,CAACK,IAAI,EAAEL,GAAG,CAACM,OAAO,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAL,QAAA"}
@@ -24,10 +24,28 @@ Object.defineProperty(exports, "Video", {
24
24
  Object.defineProperty(exports, "backgroundUpload", {
25
25
  enumerable: true,
26
26
  get: function () {
27
- return _Video.backgroundUpload;
27
+ return _utils.backgroundUpload;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "clearCache", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _utils.clearCache;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "createVideoThumbnail", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _utils.createVideoThumbnail;
28
40
  }
29
41
  });
30
42
  exports.default = void 0;
43
+ Object.defineProperty(exports, "download", {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _utils.download;
47
+ }
48
+ });
31
49
  Object.defineProperty(exports, "generateFilePath", {
32
50
  enumerable: true,
33
51
  get: function () {
@@ -64,24 +82,25 @@ Object.defineProperty(exports, "uuidv4", {
64
82
  return _utils.uuidv4;
65
83
  }
66
84
  });
67
- var _Video = _interopRequireWildcard(require("./Video"));
85
+ var _Video = _interopRequireDefault(require("./Video"));
68
86
  var _Audio = _interopRequireDefault(require("./Audio"));
69
87
  var _Image = _interopRequireDefault(require("./Image"));
70
88
  var _utils = require("./utils");
71
89
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
72
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
73
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
74
90
  var _default = {
75
91
  Video: _Video.default,
76
92
  Audio: _Audio.default,
77
93
  Image: _Image.default,
78
- backgroundUpload: _Video.backgroundUpload,
79
94
  getDetails: _utils.getDetails,
80
95
  uuidv4: _utils.uuidv4,
81
96
  generateFilePath: _utils.generateFilePath,
82
97
  getRealPath: _utils.getRealPath,
83
98
  getVideoMetaData: _utils.getVideoMetaData,
84
- getFileSize: _utils.getFileSize
99
+ getFileSize: _utils.getFileSize,
100
+ backgroundUpload: _utils.backgroundUpload,
101
+ createVideoThumbnail: _utils.createVideoThumbnail,
102
+ clearCache: _utils.clearCache,
103
+ download: _utils.download
85
104
  };
86
105
  exports.default = _default;
87
106
  //# sourceMappingURL=index.js.map