react-native-compressor 1.19.2 → 2.0.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 (132) hide show
  1. package/android/CMakeLists.txt +27 -0
  2. package/android/build.gradle +56 -58
  3. package/android/gradle.properties +5 -5
  4. package/android/src/main/AndroidManifestNew.xml +3 -0
  5. package/android/src/main/cpp/cpp-adapter.cpp +8 -0
  6. package/android/src/main/java/com/margelo/nitro/compressor/HybridCompressor.kt +213 -0
  7. package/android/src/main/java/com/reactnativecompressor/NitroCompressorPackage.kt +30 -0
  8. package/android/src/main/java/com/reactnativecompressor/NitroPromiseAdapter.java +105 -0
  9. package/android/src/main/java/com/reactnativecompressor/Utils/EventEmitterHandler.kt +49 -45
  10. package/android/src/main/java/com/reactnativecompressor/Utils/Utils.kt +1 -1
  11. package/android/src/main/java/com/reactnativecompressor/Video/VideoCompressor/compressor/Compressor.kt +2 -0
  12. package/android/src/main/java/com/reactnativecompressor/Video/VideoCompressor/utils/CompressorUtils.kt +72 -0
  13. package/android/src/main/java/com/reactnativecompressor/Video/VideoCompressorHelper.kt +4 -1
  14. package/ios/Audio/FormatConverter/FormatConverter+Compressed.swift +1 -1
  15. package/ios/Audio/FormatConverter/FormatConverter+Utilities.swift +1 -1
  16. package/ios/Audio/FormatConverter/FormatConverter.swift +5 -3
  17. package/ios/HybridCompressor.swift +247 -0
  18. package/ios/Image/ImageCompressor.swift +8 -2
  19. package/ios/Utils/EventEmitterHandler.swift +56 -34
  20. package/ios/Video/VideoMain.swift +17 -3
  21. package/lib/commonjs/Audio/index.js +1 -1
  22. package/lib/commonjs/Audio/index.js.map +1 -1
  23. package/lib/commonjs/Image/index.js +2 -22
  24. package/lib/commonjs/Image/index.js.map +1 -1
  25. package/lib/commonjs/Main.js +8 -8
  26. package/lib/commonjs/Main.js.map +1 -1
  27. package/lib/commonjs/Video/index.js +25 -65
  28. package/lib/commonjs/Video/index.js.map +1 -1
  29. package/lib/commonjs/specs/Compressor.nitro.js +6 -0
  30. package/lib/commonjs/specs/Compressor.nitro.js.map +1 -0
  31. package/lib/commonjs/utils/Downloader.js +8 -24
  32. package/lib/commonjs/utils/Downloader.js.map +1 -1
  33. package/lib/commonjs/utils/Uploader.js +3 -18
  34. package/lib/commonjs/utils/Uploader.js.map +1 -1
  35. package/lib/commonjs/utils/helpers.js +18 -1
  36. package/lib/commonjs/utils/helpers.js.map +1 -1
  37. package/lib/commonjs/utils/index.js +13 -13
  38. package/lib/commonjs/utils/index.js.map +1 -1
  39. package/lib/module/Audio/index.js +2 -2
  40. package/lib/module/Audio/index.js.map +1 -1
  41. package/lib/module/Image/index.js +3 -23
  42. package/lib/module/Image/index.js.map +1 -1
  43. package/lib/module/Main.js +9 -9
  44. package/lib/module/Main.js.map +1 -1
  45. package/lib/module/Video/index.js +26 -66
  46. package/lib/module/Video/index.js.map +1 -1
  47. package/lib/module/specs/Compressor.nitro.js +4 -0
  48. package/lib/module/specs/Compressor.nitro.js.map +1 -0
  49. package/lib/module/utils/Downloader.js +10 -26
  50. package/lib/module/utils/Downloader.js.map +1 -1
  51. package/lib/module/utils/Uploader.js +5 -20
  52. package/lib/module/utils/Uploader.js.map +1 -1
  53. package/lib/module/utils/helpers.js +16 -0
  54. package/lib/module/utils/helpers.js.map +1 -1
  55. package/lib/module/utils/index.js +2 -1
  56. package/lib/module/utils/index.js.map +1 -1
  57. package/lib/typescript/src/Image/index.d.ts.map +1 -1
  58. package/lib/typescript/src/Main.d.ts +2 -1
  59. package/lib/typescript/src/Main.d.ts.map +1 -1
  60. package/lib/typescript/src/Video/index.d.ts +1 -1
  61. package/lib/typescript/src/Video/index.d.ts.map +1 -1
  62. package/lib/typescript/src/index.d.ts.map +1 -1
  63. package/lib/typescript/src/specs/Compressor.nitro.d.ts +44 -0
  64. package/lib/typescript/src/specs/Compressor.nitro.d.ts.map +1 -0
  65. package/lib/typescript/src/utils/Downloader.d.ts.map +1 -1
  66. package/lib/typescript/src/utils/Uploader.d.ts.map +1 -1
  67. package/lib/typescript/src/utils/helpers.d.ts +7 -0
  68. package/lib/typescript/src/utils/helpers.d.ts.map +1 -1
  69. package/lib/typescript/src/utils/index.d.ts.map +1 -1
  70. package/nitrogen/generated/android/NitroCompressor+autolinking.cmake +81 -0
  71. package/nitrogen/generated/android/NitroCompressor+autolinking.gradle +27 -0
  72. package/nitrogen/generated/android/NitroCompressorOnLoad.cpp +60 -0
  73. package/nitrogen/generated/android/NitroCompressorOnLoad.hpp +34 -0
  74. package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
  75. package/nitrogen/generated/android/c++/JFunc_void_double.hpp +75 -0
  76. package/nitrogen/generated/android/c++/JFunc_void_double_double.hpp +75 -0
  77. package/nitrogen/generated/android/c++/JHybridCompressorSpec.cpp +293 -0
  78. package/nitrogen/generated/android/c++/JHybridCompressorSpec.hpp +78 -0
  79. package/nitrogen/generated/android/c++/JVideoThumbnailResult.hpp +73 -0
  80. package/nitrogen/generated/android/kotlin/com/margelo/nitro/compressor/Func_void.kt +80 -0
  81. package/nitrogen/generated/android/kotlin/com/margelo/nitro/compressor/Func_void_double.kt +80 -0
  82. package/nitrogen/generated/android/kotlin/com/margelo/nitro/compressor/Func_void_double_double.kt +80 -0
  83. package/nitrogen/generated/android/kotlin/com/margelo/nitro/compressor/HybridCompressorSpec.kt +141 -0
  84. package/nitrogen/generated/android/kotlin/com/margelo/nitro/compressor/NitroCompressorOnLoad.kt +35 -0
  85. package/nitrogen/generated/android/kotlin/com/margelo/nitro/compressor/VideoThumbnailResult.kt +71 -0
  86. package/nitrogen/generated/ios/c++/HybridCompressorSpecSwift.cpp +11 -0
  87. package/nitrogen/generated/ios/c++/HybridCompressorSpecSwift.hpp +204 -0
  88. package/nitrogen/generated/ios/react_native_compressor+autolinking.rb +62 -0
  89. package/nitrogen/generated/ios/react_native_compressor-Swift-Cxx-Bridge.cpp +89 -0
  90. package/nitrogen/generated/ios/react_native_compressor-Swift-Cxx-Bridge.hpp +337 -0
  91. package/nitrogen/generated/ios/react_native_compressor-Swift-Cxx-Umbrella.hpp +51 -0
  92. package/nitrogen/generated/ios/react_native_compressorAutolinking.mm +33 -0
  93. package/nitrogen/generated/ios/react_native_compressorAutolinking.swift +26 -0
  94. package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
  95. package/nitrogen/generated/ios/swift/Func_void_VideoThumbnailResult.swift +46 -0
  96. package/nitrogen/generated/ios/swift/Func_void_double.swift +46 -0
  97. package/nitrogen/generated/ios/swift/Func_void_double_double.swift +46 -0
  98. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
  99. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_AnyMap_.swift +46 -0
  100. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +46 -0
  101. package/nitrogen/generated/ios/swift/HybridCompressorSpec.swift +70 -0
  102. package/nitrogen/generated/ios/swift/HybridCompressorSpec_cxx.swift +493 -0
  103. package/nitrogen/generated/ios/swift/VideoThumbnailResult.swift +49 -0
  104. package/nitrogen/generated/shared/c++/HybridCompressorSpec.cpp +36 -0
  105. package/nitrogen/generated/shared/c++/HybridCompressorSpec.hpp +83 -0
  106. package/nitrogen/generated/shared/c++/VideoThumbnailResult.hpp +99 -0
  107. package/package.json +8 -12
  108. package/react-native-compressor.podspec +6 -24
  109. package/src/Audio/index.tsx +2 -2
  110. package/src/Image/index.tsx +3 -26
  111. package/src/Main.tsx +14 -16
  112. package/src/Video/index.tsx +25 -77
  113. package/src/specs/Compressor.nitro.ts +56 -0
  114. package/src/utils/Downloader.tsx +8 -27
  115. package/src/utils/Uploader.tsx +12 -24
  116. package/src/utils/helpers.ts +18 -0
  117. package/src/utils/index.tsx +3 -2
  118. package/android/src/main/java/com/reactnativecompressor/CompressorModule.kt +0 -180
  119. package/android/src/main/java/com/reactnativecompressor/CompressorPackage.kt +0 -34
  120. package/android/src/newarch/CompressorSpec.kt +0 -5
  121. package/android/src/oldarch/CompressorSpec.kt +0 -36
  122. package/ios/Compressor-Bridging-Header.h +0 -6
  123. package/ios/Compressor.h +0 -5
  124. package/ios/Compressor.mm +0 -82
  125. package/ios/CompressorManager.swift +0 -117
  126. package/lib/commonjs/Spec/NativeCompressor.js +0 -9
  127. package/lib/commonjs/Spec/NativeCompressor.js.map +0 -1
  128. package/lib/module/Spec/NativeCompressor.js +0 -5
  129. package/lib/module/Spec/NativeCompressor.js.map +0 -1
  130. package/lib/typescript/src/Spec/NativeCompressor.d.ts +0 -30
  131. package/lib/typescript/src/Spec/NativeCompressor.d.ts.map +0 -1
  132. package/src/Spec/NativeCompressor.ts +0 -41
@@ -6,49 +6,71 @@
6
6
  //
7
7
 
8
8
  import Foundation
9
+ import UIKit
9
10
 
11
+ /// Routes native progress emissions to the per-call JS callbacks that
12
+ /// `HybridCompressor` registers. This replaces the old `RCTEventEmitter` bridge:
13
+ /// Nitro delivers progress through callback parameters, so the domain layer's
14
+ /// `emit*` calls (unchanged) are dispatched to the callback registered under the
15
+ /// same `uuid` that the JS layer threads through the options map.
10
16
  class EventEmitterHandler {
11
- static var sharedCompressorObject: Any!
12
- static var hasListener: Bool=false
13
-
14
- static func initCompressorInstance(_ object: Any) {
15
- sharedCompressorObject = object
17
+ private static let lock = NSLock()
18
+ private static var videoCompressProgressCallbacks = [String: (Double) -> Void]()
19
+ private static var downloadProgressCallbacks = [String: (Double) -> Void]()
20
+ private static var uploadProgressCallbacks = [String: (Double, Double) -> Void]()
21
+ private static var backgroundTaskExpiredCallback: (() -> Void)?
22
+
23
+ // MARK: - Registration (called by HybridCompressor)
24
+
25
+ static func registerVideoCompressProgress(uuid: String, _ callback: ((Double) -> Void)?) {
26
+ guard let callback = callback else { return }
27
+ lock.lock(); defer { lock.unlock() }
28
+ videoCompressProgressCallbacks[uuid] = callback
29
+ }
30
+
31
+ static func registerDownloadProgress(uuid: String, _ callback: ((Double) -> Void)?) {
32
+ guard let callback = callback else { return }
33
+ lock.lock(); defer { lock.unlock() }
34
+ downloadProgressCallbacks[uuid] = callback
16
35
  }
17
-
18
-
19
- static func stopObserving() -> Void {
20
- hasListener = false
36
+
37
+ static func registerUploadProgress(uuid: String, _ callback: ((Double, Double) -> Void)?) {
38
+ guard let callback = callback else { return }
39
+ lock.lock(); defer { lock.unlock() }
40
+ uploadProgressCallbacks[uuid] = callback
41
+ }
42
+
43
+ static func unregister(uuid: String) {
44
+ lock.lock(); defer { lock.unlock() }
45
+ videoCompressProgressCallbacks[uuid] = nil
46
+ downloadProgressCallbacks[uuid] = nil
47
+ uploadProgressCallbacks[uuid] = nil
21
48
  }
22
49
 
23
- static func startObserving() -> Void {
24
- hasListener = true
50
+ static func setBackgroundTaskExpiredCallback(_ callback: (() -> Void)?) {
51
+ lock.lock(); defer { lock.unlock() }
52
+ backgroundTaskExpiredCallback = callback
25
53
  }
26
-
54
+
55
+ // MARK: - Emission (called by the domain layer — method names preserved)
56
+
27
57
  static func emitDownloadProgress(_ progress: NSNumber, uuid: String) {
28
- var params = [String: Any]()
29
- var data = [String: Any]()
30
- params["uuid"] = uuid
31
- data["progress"] = progress
32
- params["data"] = data
33
-
34
- (sharedCompressorObject as AnyObject).sendEvent(withName: "downloadProgress", body: params)
35
- }
36
-
58
+ lock.lock(); let callback = downloadProgressCallbacks[uuid]; lock.unlock()
59
+ callback?(progress.doubleValue)
60
+ }
61
+
37
62
  static func emitVideoCompressProgress(_ progress: Float, uuid: String) {
38
- if(self.hasListener){
39
- (sharedCompressorObject as AnyObject).sendEvent(withName: "videoCompressProgress", body: ["uuid": uuid, "data": ["progress": progress]])
40
- }
63
+ lock.lock(); let callback = videoCompressProgressCallbacks[uuid]; lock.unlock()
64
+ callback?(Double(progress))
41
65
  }
42
-
66
+
43
67
  static func emituploadProgress(_ uuid: String, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) {
44
- if(self.hasListener){
45
- (sharedCompressorObject as AnyObject).sendEvent(withName: "uploadProgress", body: ["uuid": uuid, "data": ["written": totalBytesSent, "total": totalBytesExpectedToSend]])
46
- }
47
- }
48
-
49
- static func emitBackgroundTaskExpired(_ backgroundTaskId:UIBackgroundTaskIdentifier) {
50
- if(self.hasListener){
51
- (sharedCompressorObject as AnyObject).sendEvent(withName: "backgroundTaskExpired", body: ["backgroundTaskId": backgroundTaskId])
52
- }
68
+ lock.lock(); let callback = uploadProgressCallbacks[uuid]; lock.unlock()
69
+ callback?(Double(totalBytesSent), Double(totalBytesExpectedToSend))
70
+ }
71
+
72
+ static func emitBackgroundTaskExpired(_ backgroundTaskId: UIBackgroundTaskIdentifier) {
73
+ lock.lock(); let callback = backgroundTaskExpiredCallback; lock.unlock()
74
+ callback?()
53
75
  }
54
76
  }
@@ -2,6 +2,7 @@ import Foundation
2
2
  import AVFoundation
3
3
  import Photos
4
4
  import MobileCoreServices
5
+ import UIKit
5
6
 
6
7
  struct CompressionError: Error {
7
8
  private let message: String
@@ -320,11 +321,15 @@ class VideoCompressor {
320
321
  exporter.outputURL = tmpURL
321
322
  exporter.outputFileType = AVFileType.mp4
322
323
 
324
+ // NOTE: Do not add AVVideoExpectedSourceFrameRateKey or
325
+ // AVVideoAverageNonDroppableFrameRateKey here. They are not documented
326
+ // H.264 (avc1) compression properties on iOS and, while AVFoundation's
327
+ // `canApply(...)` check still returns true, the iOS encoder silently
328
+ // drops the video track, producing an audio-only MP4 that still reports
329
+ // success. See issue #400.
323
330
  let compressionDict: [String: Any] = [
324
331
  AVVideoAverageBitRateKey: bitRate,
325
332
  AVVideoProfileLevelKey: AVVideoProfileLevelH264HighAutoLevel,
326
- AVVideoExpectedSourceFrameRateKey: frameRate,
327
- AVVideoAverageNonDroppableFrameRateKey: frameRate,
328
333
  ]
329
334
  exporter.optimizeForNetworkUse = true;
330
335
  exporter.videoOutputConfiguration = [
@@ -366,7 +371,16 @@ class VideoCompressor {
366
371
  switch result {
367
372
  case .success:
368
373
  if let outputURL = exporter.outputURL {
369
- onCompletion(outputURL)
374
+ // Guard against the iOS encoder silently dropping the video track
375
+ // and producing an audio-only file that still reports success.
376
+ // See issue #400.
377
+ let outputAsset = AVAsset(url: outputURL)
378
+ if outputAsset.tracks(withMediaType: AVMediaType.video).isEmpty {
379
+ try? FileManager.default.removeItem(at: outputURL)
380
+ onFailure(CompressionError(message: "Compression produced a file with no video track"))
381
+ } else {
382
+ onCompletion(outputURL)
383
+ }
370
384
  } else {
371
385
  onFailure(CompressionError(message: "Compression succeeded but output URL is unavailable"))
372
386
  }
@@ -10,7 +10,7 @@ const NativeAudio = _Main.Compressor;
10
10
  const Audio = {
11
11
  compress: async (url, options = _utils.DEFAULT_COMPRESS_AUDIO_OPTIONS) => {
12
12
  try {
13
- return NativeAudio.compress_audio(url, options);
13
+ return NativeAudio.compress_audio(url, (0, _utils.toNativeOptions)(options));
14
14
  } catch (error) {
15
15
  throw error.message;
16
16
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_Main","require","_utils","NativeAudio","Compressor","Audio","compress","url","options","DEFAULT_COMPRESS_AUDIO_OPTIONS","compress_audio","error","message","_default","exports","default"],"sourceRoot":"../../../src","sources":["Audio/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAEA,MAAME,WAAW,GAAGC,gBAAU;AAE9B,MAAMC,KAAgB,GAAG;EACvBC,QAAQ,EAAE,MAAAA,CAAOC,GAAG,EAAEC,OAAO,GAAGC,qCAA8B,KAAK;IACjE,IAAI;MACF,OAAON,WAAW,CAACO,cAAc,CAACH,GAAG,EAAEC,OAAO,CAAC;IACjD,CAAC,CAAC,OAAOG,KAAU,EAAE;MACnB,MAAMA,KAAK,CAACC,OAAO;IACrB;EACF;AACF,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEaV,KAAK","ignoreList":[]}
1
+ {"version":3,"names":["_Main","require","_utils","NativeAudio","Compressor","Audio","compress","url","options","DEFAULT_COMPRESS_AUDIO_OPTIONS","compress_audio","toNativeOptions","error","message","_default","exports","default"],"sourceRoot":"../../../src","sources":["Audio/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAEA,MAAME,WAAW,GAAGC,gBAAU;AAE9B,MAAMC,KAAgB,GAAG;EACvBC,QAAQ,EAAE,MAAAA,CAAOC,GAAG,EAAEC,OAAO,GAAGC,qCAA8B,KAAK;IACjE,IAAI;MACF,OAAON,WAAW,CAACO,cAAc,CAACH,GAAG,EAAE,IAAAI,sBAAe,EAACH,OAAO,CAAC,CAAC;IAClE,CAAC,CAAC,OAAOI,KAAU,EAAE;MACnB,MAAMA,KAAK,CAACC,OAAO;IACrB;EACF;AACF,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEaX,KAAK","ignoreList":[]}
@@ -6,35 +6,15 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _Main = require("../Main");
8
8
  var _utils = require("../utils");
9
- var _reactNative = require("react-native");
10
9
  const base64UrlRegex = /^data:image\/.*;(?:charset=.{3,5};)?base64,/;
11
- const ImageCompressEventEmitter = new _reactNative.NativeEventEmitter(_Main.Compressor);
12
10
  const NativeImage = _Main.Compressor;
13
11
  const Image = {
14
12
  compress: async (value, options = {}) => {
15
13
  if (!value) {
16
14
  throw new Error('Compression value is empty, please provide a value for compression.');
17
15
  }
18
- let subscription;
19
- try {
20
- if (options?.downloadProgress) {
21
- const uuid = (0, _utils.uuidv4)();
22
- //@ts-ignore
23
- options.uuid = uuid;
24
- subscription = ImageCompressEventEmitter.addListener('downloadProgress', event => {
25
- if (event.uuid === uuid) {
26
- options.downloadProgress && options.downloadProgress(event.data.progress);
27
- }
28
- });
29
- }
30
- const cleanData = value.replace(base64UrlRegex, '');
31
- return await NativeImage.image_compress(cleanData, options);
32
- } finally {
33
- // @ts-ignore
34
- if (subscription) {
35
- subscription.remove();
36
- }
37
- }
16
+ const cleanData = value.replace(base64UrlRegex, '');
17
+ return await NativeImage.image_compress(cleanData, (0, _utils.toNativeOptions)(options), options.downloadProgress);
38
18
  }
39
19
  };
40
20
  var _default = exports.default = Image;
@@ -1 +1 @@
1
- {"version":3,"names":["_Main","require","_utils","_reactNative","base64UrlRegex","ImageCompressEventEmitter","NativeEventEmitter","Compressor","NativeImage","Image","compress","value","options","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;AAuDpE,MAAMC,yBAAyB,GAAG,IAAIC,+BAAkB,CAACC,gBAAU,CAAC;AAEpE,MAAMC,WAAW,GAAGD,gBAAU;AAM9B,MAAME,KAAgB,GAAG;EACvBC,QAAQ,EAAE,MAAAA,CAAOC,KAAK,EAAEC,OAAO,GAAG,CAAC,CAAC,KAAK;IACvC,IAAI,CAACD,KAAK,EAAE;MACV,MAAM,IAAIE,KAAK,CAAC,qEAAqE,CAAC;IACxF;IAEA,IAAIC,YAAqC;IACzC,IAAI;MACF,IAAIF,OAAO,EAAEG,gBAAgB,EAAE;QAC7B,MAAMC,IAAI,GAAG,IAAAC,aAAM,EAAC,CAAC;QACrB;QACAL,OAAO,CAACI,IAAI,GAAGA,IAAI;QACnBF,YAAY,GAAGT,yBAAyB,CAACa,WAAW,CAAC,kBAAkB,EAAGC,KAAU,IAAK;UACvF,IAAIA,KAAK,CAACH,IAAI,KAAKA,IAAI,EAAE;YACvBJ,OAAO,CAACG,gBAAgB,IAAIH,OAAO,CAACG,gBAAgB,CAACI,KAAK,CAACC,IAAI,CAACC,QAAQ,CAAC;UAC3E;QACF,CAAC,CAAC;MACJ;MAEA,MAAMC,SAAS,GAAGX,KAAK,CAACY,OAAO,CAACnB,cAAc,EAAE,EAAE,CAAC;MACnD,OAAO,MAAMI,WAAW,CAACgB,cAAc,CAACF,SAAS,EAAEV,OAAO,CAAC;IAC7D,CAAC,SAAS;MACR;MACA,IAAIE,YAAY,EAAE;QAChBA,YAAY,CAACW,MAAM,CAAC,CAAC;MACvB;IACF;EACF;AACF,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEanB,KAAK","ignoreList":[]}
1
+ {"version":3,"names":["_Main","require","_utils","base64UrlRegex","NativeImage","Compressor","Image","compress","value","options","Error","cleanData","replace","image_compress","toNativeOptions","downloadProgress","_default","exports","default"],"sourceRoot":"../../../src","sources":["Image/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,MAAME,cAAc,GAAG,6CAA6C;AAqDpE,MAAMC,WAAW,GAAGC,gBAAU;AAM9B,MAAMC,KAAgB,GAAG;EACvBC,QAAQ,EAAE,MAAAA,CAAOC,KAAK,EAAEC,OAAO,GAAG,CAAC,CAAC,KAAK;IACvC,IAAI,CAACD,KAAK,EAAE;MACV,MAAM,IAAIE,KAAK,CAAC,qEAAqE,CAAC;IACxF;IAEA,MAAMC,SAAS,GAAGH,KAAK,CAACI,OAAO,CAACT,cAAc,EAAE,EAAE,CAAC;IACnD,OAAO,MAAMC,WAAW,CAACS,cAAc,CAACF,SAAS,EAAE,IAAAG,sBAAe,EAACL,OAAO,CAAC,EAAEA,OAAO,CAACM,gBAAgB,CAAC;EACxG;AACF,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEaZ,KAAK","ignoreList":[]}
@@ -5,17 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.Compressor = void 0;
7
7
  var _reactNative = require("react-native");
8
+ var _reactNativeNitroModules = require("react-native-nitro-modules");
8
9
  const LINKING_ERROR = `The package 'react-native-compressor' doesn't seem to be linked. Make sure: \n\n` + _reactNative.Platform.select({
9
10
  ios: "- You have run 'pod install'\n",
10
11
  default: ''
11
- }) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n';
12
-
13
- // @ts-expect-error
14
- const isTurboModuleEnabled = global.__turboModuleProxy != null;
15
- const CompressorModule = isTurboModuleEnabled ? require('./Spec/NativeCompressor').default : _reactNative.NativeModules.Compressor;
16
- const Compressor = exports.Compressor = CompressorModule ? CompressorModule : new Proxy({}, {
17
- get() {
12
+ }) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n' + '- You have installed `react-native-nitro-modules`\n';
13
+ const createCompressor = () => {
14
+ try {
15
+ return _reactNativeNitroModules.NitroModules.createHybridObject('Compressor');
16
+ } catch {
18
17
  throw new Error(LINKING_ERROR);
19
18
  }
20
- });
19
+ };
20
+ const Compressor = exports.Compressor = createCompressor();
21
21
  //# sourceMappingURL=Main.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","isTurboModuleEnabled","global","__turboModuleProxy","CompressorModule","NativeModules","Compressor","exports","Proxy","get","Error"],"sourceRoot":"../../src","sources":["Main.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,MAAMC,aAAa,GACjB,kFAAkF,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,GAAGN,OAAO,CAAC,yBAAyB,CAAC,CAACK,OAAO,GAAGK,0BAAa,CAACC,UAAU;AAErH,MAAMA,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAGF,gBAAgB,GAC/BA,gBAAgB,GAChB,IAAII,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACd,aAAa,CAAC;EAChC;AACF,CACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_reactNativeNitroModules","LINKING_ERROR","Platform","select","ios","default","createCompressor","NitroModules","createHybridObject","Error","Compressor","exports"],"sourceRoot":"../../src","sources":["Main.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,wBAAA,GAAAD,OAAA;AAIA,MAAME,aAAa,GACjB,kFAAkF,GAClFC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B,GAC/B,qDAAqD;AAEvD,MAAMC,gBAAgB,GAAGA,CAAA,KAAsB;EAC7C,IAAI;IACF,OAAOC,qCAAY,CAACC,kBAAkB,CAAiB,YAAY,CAAC;EACtE,CAAC,CAAC,MAAM;IACN,MAAM,IAAIC,KAAK,CAACR,aAAa,CAAC;EAChC;AACF,CAAC;AAED,MAAMS,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAGJ,gBAAgB,CAAC,CAAC","ignoreList":[]}
@@ -4,10 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.cancelCompression = void 0;
7
- var _reactNative = require("react-native");
8
7
  var _Main = require("../Main");
9
8
  var _utils = require("../utils");
10
- const VideoCompressEventEmitter = new _reactNative.NativeEventEmitter(_Main.Compressor);
11
9
  const NativeVideoCompressor = _Main.Compressor;
12
10
  const cancelCompression = cancellationId => {
13
11
  return NativeVideoCompressor.cancelCompression(cancellationId);
@@ -16,75 +14,37 @@ exports.cancelCompression = cancelCompression;
16
14
  const Video = {
17
15
  compress: async (fileUrl, options, onProgress) => {
18
16
  const uuid = (0, _utils.uuidv4)();
19
- let subscription;
20
- let subscription2;
21
- try {
22
- if (onProgress) {
23
- subscription = VideoCompressEventEmitter.addListener('videoCompressProgress', event => {
24
- if (event.uuid === uuid) {
25
- onProgress(event.data.progress);
26
- }
27
- });
28
- }
29
- if (options?.downloadProgress) {
30
- //@ts-ignore
31
- subscription2 = VideoCompressEventEmitter.addListener('downloadProgress', event => {
32
- if (event.uuid === uuid) {
33
- options.downloadProgress && options.downloadProgress(event.data.progress);
34
- }
35
- });
36
- }
37
- const modifiedOptions = {
38
- uuid
39
- };
40
- if (options?.progressDivider) modifiedOptions.progressDivider = options?.progressDivider;
41
- if (options?.bitrate) modifiedOptions.bitrate = options?.bitrate;
42
- if (options?.compressionMethod) {
43
- modifiedOptions.compressionMethod = options?.compressionMethod;
44
- } else {
45
- modifiedOptions.compressionMethod = 'auto';
46
- }
47
- if (options?.maxSize) {
48
- modifiedOptions.maxSize = options?.maxSize;
49
- } else {
50
- modifiedOptions.maxSize = 640;
51
- }
52
- if (options?.minimumFileSizeForCompress !== undefined) {
53
- modifiedOptions.minimumFileSizeForCompress = options?.minimumFileSizeForCompress;
54
- }
55
- if (options?.stripAudio) {
56
- modifiedOptions.stripAudio = options.stripAudio;
57
- }
58
- if (options?.getCancellationId) {
59
- options?.getCancellationId(uuid);
60
- }
61
- const result = await NativeVideoCompressor.compress(fileUrl, modifiedOptions);
62
- return result;
63
- } finally {
64
- // @ts-ignore
65
- if (subscription) {
66
- subscription.remove();
67
- }
68
- //@ts-ignore
69
- if (subscription2) {
70
- subscription2.remove();
71
- }
17
+ const modifiedOptions = {
18
+ uuid
19
+ };
20
+ if (options?.progressDivider) modifiedOptions.progressDivider = options?.progressDivider;
21
+ if (options?.bitrate) modifiedOptions.bitrate = options?.bitrate;
22
+ if (options?.compressionMethod) {
23
+ modifiedOptions.compressionMethod = options?.compressionMethod;
24
+ } else {
25
+ modifiedOptions.compressionMethod = 'auto';
72
26
  }
27
+ if (options?.maxSize) {
28
+ modifiedOptions.maxSize = options?.maxSize;
29
+ } else {
30
+ modifiedOptions.maxSize = 640;
31
+ }
32
+ if (options?.minimumFileSizeForCompress !== undefined) {
33
+ modifiedOptions.minimumFileSizeForCompress = options?.minimumFileSizeForCompress;
34
+ }
35
+ if (options?.stripAudio) {
36
+ modifiedOptions.stripAudio = options.stripAudio;
37
+ }
38
+ if (options?.getCancellationId) {
39
+ options?.getCancellationId(uuid);
40
+ }
41
+ return NativeVideoCompressor.compress(fileUrl, (0, _utils.toNativeOptions)(modifiedOptions), onProgress, options?.downloadProgress);
73
42
  },
74
43
  cancelCompression,
75
44
  activateBackgroundTask(onExpired) {
76
- if (onExpired) {
77
- const subscription = VideoCompressEventEmitter.addListener('backgroundTaskExpired', event => {
78
- onExpired(event);
79
- if (subscription) {
80
- subscription.remove();
81
- }
82
- });
83
- }
84
- return NativeVideoCompressor.activateBackgroundTask({});
45
+ return NativeVideoCompressor.activateBackgroundTask({}, onExpired ? () => onExpired(undefined) : undefined);
85
46
  },
86
47
  deactivateBackgroundTask() {
87
- VideoCompressEventEmitter.removeAllListeners('backgroundTaskExpired');
88
48
  return NativeVideoCompressor.deactivateBackgroundTask({});
89
49
  }
90
50
  };
@@ -1 +1 @@
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","stripAudio","getCancellationId","result","remove","activateBackgroundTask","onExpired","deactivateBackgroundTask","removeAllListeners","_default","default"],"sourceRoot":"../../../src","sources":["Video/index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_Main","require","_utils","NativeVideoCompressor","Compressor","cancelCompression","cancellationId","exports","Video","compress","fileUrl","options","onProgress","uuid","uuidv4","modifiedOptions","progressDivider","bitrate","compressionMethod","maxSize","minimumFileSizeForCompress","undefined","stripAudio","getCancellationId","toNativeOptions","downloadProgress","activateBackgroundTask","onExpired","deactivateBackgroundTask","_default","default"],"sourceRoot":"../../../src","sources":["Video/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AA4BA,MAAME,qBAAqB,GAAGC,gBAAU;AAEjC,MAAMC,iBAAiB,GAAIC,cAAsB,IAAK;EAC3D,OAAOH,qBAAqB,CAACE,iBAAiB,CAACC,cAAc,CAAC;AAChE,CAAC;AAACC,OAAA,CAAAF,iBAAA,GAAAA,iBAAA;AAEF,MAAMG,KAA0B,GAAG;EACjCC,QAAQ,EAAE,MAAAA,CAAOC,OAAe,EAAEC,OAA+B,EAAEC,UAAuC,KAAK;IAC7G,MAAMC,IAAI,GAAG,IAAAC,aAAM,EAAC,CAAC;IAErB,MAAMC,eAAwC,GAAG;MAAEF;IAAK,CAAC;IACzD,IAAIF,OAAO,EAAEK,eAAe,EAAED,eAAe,CAACC,eAAe,GAAGL,OAAO,EAAEK,eAAe;IACxF,IAAIL,OAAO,EAAEM,OAAO,EAAEF,eAAe,CAACE,OAAO,GAAGN,OAAO,EAAEM,OAAO;IAChE,IAAIN,OAAO,EAAEO,iBAAiB,EAAE;MAC9BH,eAAe,CAACG,iBAAiB,GAAGP,OAAO,EAAEO,iBAAiB;IAChE,CAAC,MAAM;MACLH,eAAe,CAACG,iBAAiB,GAAG,MAAM;IAC5C;IACA,IAAIP,OAAO,EAAEQ,OAAO,EAAE;MACpBJ,eAAe,CAACI,OAAO,GAAGR,OAAO,EAAEQ,OAAO;IAC5C,CAAC,MAAM;MACLJ,eAAe,CAACI,OAAO,GAAG,GAAG;IAC/B;IACA,IAAIR,OAAO,EAAES,0BAA0B,KAAKC,SAAS,EAAE;MACrDN,eAAe,CAACK,0BAA0B,GAAGT,OAAO,EAAES,0BAA0B;IAClF;IACA,IAAIT,OAAO,EAAEW,UAAU,EAAE;MACvBP,eAAe,CAACO,UAAU,GAAGX,OAAO,CAACW,UAAU;IACjD;IACA,IAAIX,OAAO,EAAEY,iBAAiB,EAAE;MAC9BZ,OAAO,EAAEY,iBAAiB,CAACV,IAAI,CAAC;IAClC;IAEA,OAAOV,qBAAqB,CAACM,QAAQ,CAACC,OAAO,EAAE,IAAAc,sBAAe,EAACT,eAAe,CAAC,EAAEH,UAAU,EAAED,OAAO,EAAEc,gBAAgB,CAAC;EACzH,CAAC;EACDpB,iBAAiB;EACjBqB,sBAAsBA,CAACC,SAAU,EAAE;IACjC,OAAOxB,qBAAqB,CAACuB,sBAAsB,CAAC,CAAC,CAAC,EAAEC,SAAS,GAAG,MAAMA,SAAS,CAACN,SAAS,CAAC,GAAGA,SAAS,CAAC;EAC7G,CAAC;EACDO,wBAAwBA,CAAA,EAAG;IACzB,OAAOzB,qBAAqB,CAACyB,wBAAwB,CAAC,CAAC,CAAC,CAAC;EAC3D;AACF,CAAwB;AAAC,IAAAC,QAAA,GAAAtB,OAAA,CAAAuB,OAAA,GAEVtB,KAAK","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=Compressor.nitro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/Compressor.nitro.ts"],"mappings":"","ignoreList":[]}
@@ -7,32 +7,16 @@ exports.download = void 0;
7
7
  var _reactNative = require("react-native");
8
8
  var _Main = require("../Main");
9
9
  var _helpers = require("./helpers");
10
- const CompressEventEmitter = new _reactNative.NativeEventEmitter(_Main.Compressor);
11
10
  const download = async (fileUrl, downloadProgress, progressDivider) => {
12
- let subscription;
13
- try {
14
- const uuid = (0, _helpers.uuidv4)();
15
- if (downloadProgress) {
16
- subscription = CompressEventEmitter.addListener('downloadProgress', event => {
17
- if (event.uuid === uuid) {
18
- downloadProgress(event.data.progress);
19
- }
20
- });
21
- }
22
- if (_reactNative.Platform.OS === 'android' && fileUrl.includes('file://')) {
23
- fileUrl = fileUrl.replace('file://', '');
24
- }
25
- const result = await _Main.Compressor.download(fileUrl, {
26
- uuid,
27
- progressDivider
28
- });
29
- return result;
30
- } finally {
31
- // @ts-ignore
32
- if (subscription) {
33
- subscription.remove();
34
- }
11
+ const uuid = (0, _helpers.uuidv4)();
12
+ if (_reactNative.Platform.OS === 'android' && fileUrl.includes('file://')) {
13
+ fileUrl = fileUrl.replace('file://', '');
35
14
  }
15
+ const result = await _Main.Compressor.download(fileUrl, (0, _helpers.toNativeOptions)({
16
+ uuid,
17
+ progressDivider
18
+ }), downloadProgress);
19
+ return result;
36
20
  };
37
21
  exports.download = download;
38
22
  //# sourceMappingURL=Downloader.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_Main","_helpers","CompressEventEmitter","NativeEventEmitter","Compressor","download","fileUrl","downloadProgress","progressDivider","subscription","uuid","uuidv4","addListener","event","data","progress","Platform","OS","includes","replace","result","remove","exports"],"sourceRoot":"../../../src","sources":["utils/Downloader.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,KAAA,GAAAD,OAAA;AAEA,IAAAE,QAAA,GAAAF,OAAA;AADA,MAAMG,oBAAoB,GAAG,IAAIC,+BAAkB,CAACC,gBAAU,CAAC;AAExD,MAAMC,QAAQ,GAAG,MAAAA,CAAOC,OAAe,EAAEC,gBAA6C,EAAEC,eAAwB,KAAmB;EACxI,IAAIC,YAAqC;EACzC,IAAI;IACF,MAAMC,IAAI,GAAG,IAAAC,eAAM,EAAC,CAAC;IACrB,IAAIJ,gBAAgB,EAAE;MACpBE,YAAY,GAAGP,oBAAoB,CAACU,WAAW,CAAC,kBAAkB,EAAGC,KAAU,IAAK;QAClF,IAAIA,KAAK,CAACH,IAAI,KAAKA,IAAI,EAAE;UACvBH,gBAAgB,CAACM,KAAK,CAACC,IAAI,CAACC,QAAQ,CAAC;QACvC;MACF,CAAC,CAAC;IACJ;IACA,IAAIC,qBAAQ,CAACC,EAAE,KAAK,SAAS,IAAIX,OAAO,CAACY,QAAQ,CAAC,SAAS,CAAC,EAAE;MAC5DZ,OAAO,GAAGA,OAAO,CAACa,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAC1C;IACA,MAAMC,MAAM,GAAG,MAAMhB,gBAAU,CAACC,QAAQ,CAACC,OAAO,EAAE;MAChDI,IAAI;MACJF;IACF,CAAC,CAAC;IACF,OAAOY,MAAM;EACf,CAAC,SAAS;IACR;IACA,IAAIX,YAAY,EAAE;MAChBA,YAAY,CAACY,MAAM,CAAC,CAAC;IACvB;EACF;AACF,CAAC;AAACC,OAAA,CAAAjB,QAAA,GAAAA,QAAA","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_Main","_helpers","download","fileUrl","downloadProgress","progressDivider","uuid","uuidv4","Platform","OS","includes","replace","result","Compressor","toNativeOptions","exports"],"sourceRoot":"../../../src","sources":["utils/Downloader.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAEO,MAAMG,QAAQ,GAAG,MAAAA,CAAOC,OAAe,EAAEC,gBAA6C,EAAEC,eAAwB,KAAmB;EACxI,MAAMC,IAAI,GAAG,IAAAC,eAAM,EAAC,CAAC;EACrB,IAAIC,qBAAQ,CAACC,EAAE,KAAK,SAAS,IAAIN,OAAO,CAACO,QAAQ,CAAC,SAAS,CAAC,EAAE;IAC5DP,OAAO,GAAGA,OAAO,CAACQ,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;EAC1C;EACA,MAAMC,MAAM,GAAG,MAAMC,gBAAU,CAACX,QAAQ,CAACC,OAAO,EAAE,IAAAW,wBAAe,EAAC;IAAER,IAAI;IAAED;EAAgB,CAAC,CAAC,EAAED,gBAAgB,CAAC;EAC/G,OAAOQ,MAAM;AACf,CAAC;AAACG,OAAA,CAAAb,QAAA,GAAAA,QAAA","ignoreList":[]}
@@ -7,7 +7,6 @@ exports.cancelUpload = exports.backgroundUpload = exports.UploaderHttpMethod = e
7
7
  var _reactNative = require("react-native");
8
8
  var _Main = require("../Main");
9
9
  var _helpers = require("./helpers");
10
- const CompressEventEmitter = new _reactNative.NativeEventEmitter(_Main.Compressor);
11
10
  let UploadType = exports.UploadType = /*#__PURE__*/function (UploadType) {
12
11
  UploadType[UploadType["BINARY_CONTENT"] = 0] = "BINARY_CONTENT";
13
12
  UploadType[UploadType["MULTIPART"] = 1] = "MULTIPART";
@@ -25,15 +24,7 @@ const cancelUpload = (uuid = '', shouldCancelAll = false) => {
25
24
  exports.cancelUpload = cancelUpload;
26
25
  const backgroundUpload = async (url, fileUrl, options, onProgress, abortSignal) => {
27
26
  const uuid = (0, _helpers.uuidv4)();
28
- let subscription;
29
27
  try {
30
- if (onProgress) {
31
- subscription = CompressEventEmitter.addListener('uploadProgress', event => {
32
- if (event.uuid === uuid) {
33
- onProgress(event.data.written, event.data.total);
34
- }
35
- });
36
- }
37
28
  if (_reactNative.Platform.OS === 'android' && fileUrl.includes('file://')) {
38
29
  fileUrl = fileUrl.replace('file://', '');
39
30
  }
@@ -41,20 +32,14 @@ const backgroundUpload = async (url, fileUrl, options, onProgress, abortSignal)
41
32
  options?.getCancellationId(uuid);
42
33
  }
43
34
  abortSignal?.addEventListener('abort', () => cancelUpload(uuid));
44
- const result = await _Main.Compressor.upload(fileUrl, {
35
+ const result = await _Main.Compressor.upload(fileUrl, (0, _helpers.toNativeOptions)({
36
+ ...options,
45
37
  uuid,
46
38
  method: options.httpMethod,
47
- headers: options.headers,
48
- uploadType: options.uploadType,
49
- ...options,
50
39
  url
51
- });
40
+ }), onProgress);
52
41
  return result;
53
42
  } finally {
54
- // @ts-ignore
55
- if (subscription) {
56
- subscription.remove();
57
- }
58
43
  abortSignal?.removeEventListener('abort', () => cancelUpload(uuid));
59
44
  }
60
45
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_Main","_helpers","CompressEventEmitter","NativeEventEmitter","Compressor","UploadType","exports","UploaderHttpMethod","cancelUpload","uuid","shouldCancelAll","backgroundUpload","url","fileUrl","options","onProgress","abortSignal","uuidv4","subscription","addListener","event","data","written","total","Platform","OS","includes","replace","getCancellationId","addEventListener","result","upload","method","httpMethod","headers","uploadType","remove","removeEventListener"],"sourceRoot":"../../../src","sources":["utils/Uploader.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,KAAA,GAAAD,OAAA;AAEA,IAAAE,QAAA,GAAAF,OAAA;AADA,MAAMG,oBAAoB,GAAG,IAAIC,+BAAkB,CAACC,gBAAU,CAAC;AAAC,IAEpDC,UAAU,GAAAC,OAAA,CAAAD,UAAA,0BAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAAA,IAKVE,kBAAkB,GAAAD,OAAA,CAAAC,kBAAA,0BAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAA,OAAlBA,kBAAkB;AAAA;AA+BvB,MAAMC,YAAgE,GAAGA,CAACC,IAAI,GAAG,EAAE,EAAEC,eAAe,GAAG,KAAK,KAAK;EACtH,OAAON,gBAAU,CAACI,YAAY,CAACC,IAAI,EAAEC,eAAe,CAAC;AACvD,CAAC;AAACJ,OAAA,CAAAE,YAAA,GAAAA,YAAA;AAEK,MAAMG,gBAAgB,GAAG,MAAAA,CAC9BC,GAAW,EACXC,OAAe,EACfC,OAAwB,EACxBC,UAAqD,EACrDC,WAAyB,KACR;EACjB,MAAMP,IAAI,GAAG,IAAAQ,eAAM,EAAC,CAAC;EACrB,IAAIC,YAAqC;EACzC,IAAI;IACF,IAAIH,UAAU,EAAE;MACdG,YAAY,GAAGhB,oBAAoB,CAACiB,WAAW,CAAC,gBAAgB,EAAGC,KAAU,IAAK;QAChF,IAAIA,KAAK,CAACX,IAAI,KAAKA,IAAI,EAAE;UACvBM,UAAU,CAACK,KAAK,CAACC,IAAI,CAACC,OAAO,EAAEF,KAAK,CAACC,IAAI,CAACE,KAAK,CAAC;QAClD;MACF,CAAC,CAAC;IACJ;IACA,IAAIC,qBAAQ,CAACC,EAAE,KAAK,SAAS,IAAIZ,OAAO,CAACa,QAAQ,CAAC,SAAS,CAAC,EAAE;MAC5Db,OAAO,GAAGA,OAAO,CAACc,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAC1C;IAEA,IAAIb,OAAO,EAAEc,iBAAiB,EAAE;MAC9Bd,OAAO,EAAEc,iBAAiB,CAACnB,IAAI,CAAC;IAClC;IAEAO,WAAW,EAAEa,gBAAgB,CAAC,OAAO,EAAE,MAAMrB,YAAY,CAACC,IAAI,CAAC,CAAC;IAEhE,MAAMqB,MAAM,GAAG,MAAM1B,gBAAU,CAAC2B,MAAM,CAAClB,OAAO,EAAE;MAC9CJ,IAAI;MACJuB,MAAM,EAAElB,OAAO,CAACmB,UAAU;MAC1BC,OAAO,EAAEpB,OAAO,CAACoB,OAAO;MACxBC,UAAU,EAAErB,OAAO,CAACqB,UAAU;MAC9B,GAAGrB,OAAO;MACVF;IACF,CAAC,CAAC;IACF,OAAOkB,MAAM;EACf,CAAC,SAAS;IACR;IACA,IAAIZ,YAAY,EAAE;MAChBA,YAAY,CAACkB,MAAM,CAAC,CAAC;IACvB;IACApB,WAAW,EAAEqB,mBAAmB,CAAC,OAAO,EAAE,MAAM7B,YAAY,CAACC,IAAI,CAAC,CAAC;EACrE;AACF,CAAC;AAACH,OAAA,CAAAK,gBAAA,GAAAA,gBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_Main","_helpers","UploadType","exports","UploaderHttpMethod","cancelUpload","uuid","shouldCancelAll","Compressor","backgroundUpload","url","fileUrl","options","onProgress","abortSignal","uuidv4","Platform","OS","includes","replace","getCancellationId","addEventListener","result","upload","toNativeOptions","method","httpMethod","removeEventListener"],"sourceRoot":"../../../src","sources":["utils/Uploader.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAAoD,IACxCG,UAAU,GAAAC,OAAA,CAAAD,UAAA,0BAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAAA,IAKVE,kBAAkB,GAAAD,OAAA,CAAAC,kBAAA,0BAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAA,OAAlBA,kBAAkB;AAAA;AA+BvB,MAAMC,YAAgE,GAAGA,CAACC,IAAI,GAAG,EAAE,EAAEC,eAAe,GAAG,KAAK,KAAK;EACtH,OAAOC,gBAAU,CAACH,YAAY,CAACC,IAAI,EAAEC,eAAe,CAAC;AACvD,CAAC;AAACJ,OAAA,CAAAE,YAAA,GAAAA,YAAA;AAEK,MAAMI,gBAAgB,GAAG,MAAAA,CAC9BC,GAAW,EACXC,OAAe,EACfC,OAAwB,EACxBC,UAAqD,EACrDC,WAAyB,KACR;EACjB,MAAMR,IAAI,GAAG,IAAAS,eAAM,EAAC,CAAC;EACrB,IAAI;IACF,IAAIC,qBAAQ,CAACC,EAAE,KAAK,SAAS,IAAIN,OAAO,CAACO,QAAQ,CAAC,SAAS,CAAC,EAAE;MAC5DP,OAAO,GAAGA,OAAO,CAACQ,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAC1C;IAEA,IAAIP,OAAO,EAAEQ,iBAAiB,EAAE;MAC9BR,OAAO,EAAEQ,iBAAiB,CAACd,IAAI,CAAC;IAClC;IAEAQ,WAAW,EAAEO,gBAAgB,CAAC,OAAO,EAAE,MAAMhB,YAAY,CAACC,IAAI,CAAC,CAAC;IAEhE,MAAMgB,MAAM,GAAG,MAAMd,gBAAU,CAACe,MAAM,CACpCZ,OAAO,EACP,IAAAa,wBAAe,EAAC;MACd,GAAGZ,OAAO;MACVN,IAAI;MACJmB,MAAM,EAAEb,OAAO,CAACc,UAAU;MAC1BhB;IACF,CAAC,CAAC,EACFG,UACF,CAAC;IACD,OAAOS,MAAM;EACf,CAAC,SAAS;IACRR,WAAW,EAAEa,mBAAmB,CAAC,OAAO,EAAE,MAAMtB,YAAY,CAACC,IAAI,CAAC,CAAC;EACrE;AACF,CAAC;AAACH,OAAA,CAAAM,gBAAA,GAAAA,gBAAA","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.uuidv4 = void 0;
6
+ exports.uuidv4 = exports.toNativeOptions = void 0;
7
7
  const uuidv4 = () => {
8
8
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
9
9
  const r = parseFloat('0.' + Math.random().toString().replace('0.', '') + new Date().getTime()) * 16 | 0,
@@ -12,5 +12,22 @@ const uuidv4 = () => {
12
12
  return v.toString(16);
13
13
  });
14
14
  };
15
+
16
+ /**
17
+ * Build a Nitro-safe options map. Nitro's `AnyMap` converter throws when it
18
+ * encounters a `undefined` or function-valued property, so we drop both —
19
+ * progress callbacks are passed as separate native method parameters now.
20
+ */
15
21
  exports.uuidv4 = uuidv4;
22
+ const toNativeOptions = options => {
23
+ const result = {};
24
+ for (const key of Object.keys(options)) {
25
+ const value = options[key];
26
+ if (value !== undefined && typeof value !== 'function') {
27
+ result[key] = value;
28
+ }
29
+ }
30
+ return result;
31
+ };
32
+ exports.toNativeOptions = toNativeOptions;
16
33
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["uuidv4","replace","c","r","parseFloat","Math","random","toString","Date","getTime","v","exports"],"sourceRoot":"../../../src","sources":["utils/helpers.ts"],"mappings":";;;;;;AAAO,MAAMA,MAAM,GAAGA,CAAA,KAAM;EAC1B,OAAO,sCAAsC,CAACC,OAAO,CAAC,OAAO,EAAE,UAAUC,CAAC,EAAE;IAC1E,MAAMC,CAAC,GAAIC,UAAU,CAAC,IAAI,GAAGC,IAAI,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACN,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAIO,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAI,CAAC;MACvG;MACAC,CAAC,GAAGR,CAAC,IAAI,GAAG,GAAGC,CAAC,GAAIA,CAAC,GAAG,GAAG,GAAI,GAAG;IACpC,OAAOO,CAAC,CAACH,QAAQ,CAAC,EAAE,CAAC;EACvB,CAAC,CAAC;AACJ,CAAC;AAACI,OAAA,CAAAX,MAAA,GAAAA,MAAA","ignoreList":[]}
1
+ {"version":3,"names":["uuidv4","replace","c","r","parseFloat","Math","random","toString","Date","getTime","v","exports","toNativeOptions","options","result","key","Object","keys","value","undefined"],"sourceRoot":"../../../src","sources":["utils/helpers.ts"],"mappings":";;;;;;AAEO,MAAMA,MAAM,GAAGA,CAAA,KAAM;EAC1B,OAAO,sCAAsC,CAACC,OAAO,CAAC,OAAO,EAAE,UAAUC,CAAC,EAAE;IAC1E,MAAMC,CAAC,GAAIC,UAAU,CAAC,IAAI,GAAGC,IAAI,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACN,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAIO,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAI,CAAC;MACvG;MACAC,CAAC,GAAGR,CAAC,IAAI,GAAG,GAAGC,CAAC,GAAIA,CAAC,GAAG,GAAG,GAAI,GAAG;IACpC,OAAOO,CAAC,CAACH,QAAQ,CAAC,EAAE,CAAC;EACvB,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AAJAI,OAAA,CAAAX,MAAA,GAAAA,MAAA;AAKO,MAAMY,eAAe,GAAIC,OAAgC,IAAa;EAC3E,MAAMC,MAA+B,GAAG,CAAC,CAAC;EAC1C,KAAK,MAAMC,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACJ,OAAO,CAAC,EAAE;IACtC,MAAMK,KAAK,GAAGL,OAAO,CAACE,GAAG,CAAC;IAC1B,IAAIG,KAAK,KAAKC,SAAS,IAAI,OAAOD,KAAK,KAAK,UAAU,EAAE;MACtDJ,MAAM,CAACC,GAAG,CAAC,GAAGG,KAAK;IACrB;EACF;EACA,OAAOJ,MAAM;AACf,CAAC;AAACH,OAAA,CAAAC,eAAA,GAAAA,eAAA","ignoreList":[]}
@@ -17,39 +17,39 @@ var _exportNames = {
17
17
  exports.getVideoMetaData = exports.getRealPath = exports.getImageMetaData = exports.getFileSize = exports.getDetails = exports.generateFilePath = exports.createVideoThumbnail = exports.clearCache = exports.DEFAULT_COMPRESS_AUDIO_OPTIONS = void 0;
18
18
  var _Main = require("../Main");
19
19
  var _reactNative = require("react-native");
20
- var _Downloader = require("./Downloader");
21
- Object.keys(_Downloader).forEach(function (key) {
20
+ var _helpers = require("./helpers");
21
+ Object.keys(_helpers).forEach(function (key) {
22
22
  if (key === "default" || key === "__esModule") return;
23
23
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
24
- if (key in exports && exports[key] === _Downloader[key]) return;
24
+ if (key in exports && exports[key] === _helpers[key]) return;
25
25
  Object.defineProperty(exports, key, {
26
26
  enumerable: true,
27
27
  get: function () {
28
- return _Downloader[key];
28
+ return _helpers[key];
29
29
  }
30
30
  });
31
31
  });
32
- var _Uploader = require("./Uploader");
33
- Object.keys(_Uploader).forEach(function (key) {
32
+ var _Downloader = require("./Downloader");
33
+ Object.keys(_Downloader).forEach(function (key) {
34
34
  if (key === "default" || key === "__esModule") return;
35
35
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
36
- if (key in exports && exports[key] === _Uploader[key]) return;
36
+ if (key in exports && exports[key] === _Downloader[key]) return;
37
37
  Object.defineProperty(exports, key, {
38
38
  enumerable: true,
39
39
  get: function () {
40
- return _Uploader[key];
40
+ return _Downloader[key];
41
41
  }
42
42
  });
43
43
  });
44
- var _helpers = require("./helpers");
45
- Object.keys(_helpers).forEach(function (key) {
44
+ var _Uploader = require("./Uploader");
45
+ Object.keys(_Uploader).forEach(function (key) {
46
46
  if (key === "default" || key === "__esModule") return;
47
47
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
48
- if (key in exports && exports[key] === _helpers[key]) return;
48
+ if (key in exports && exports[key] === _Uploader[key]) return;
49
49
  Object.defineProperty(exports, key, {
50
50
  enumerable: true,
51
51
  get: function () {
52
- return _helpers[key];
52
+ return _Uploader[key];
53
53
  }
54
54
  });
55
55
  });
@@ -89,7 +89,7 @@ const getImageMetaData = async path => {
89
89
  };
90
90
  exports.getImageMetaData = getImageMetaData;
91
91
  const createVideoThumbnail = (fileUrl, options = {}) => {
92
- return _Main.Compressor.createVideoThumbnail(fileUrl, options);
92
+ return _Main.Compressor.createVideoThumbnail(fileUrl, (0, _helpers.toNativeOptions)(options));
93
93
  };
94
94
  exports.createVideoThumbnail = createVideoThumbnail;
95
95
  const clearCache = cacheDir => {