react-native-compressor 1.6.3 → 1.7.0

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 (181) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +15 -11
  3. package/android/build.gradle +95 -42
  4. package/android/gradle.properties +5 -0
  5. package/android/src/main/AndroidManifest.xml +0 -1
  6. package/android/src/main/AndroidManifestNew.xml +2 -0
  7. package/android/src/main/java/com/reactnativecompressor/CompressorModule.java +88 -33
  8. package/android/src/main/java/com/reactnativecompressor/CompressorPackage.java +47 -19
  9. package/android/src/main/java/com/reactnativecompressor/Image/utils/ImageCompressorOptions.java +1 -1
  10. package/android/src/main/java/com/reactnativecompressor/Utils/Utils.java +1 -1
  11. package/android/src/main/java/com/reactnativecompressor/Video/VideoCompressorHelper.java +7 -4
  12. package/android/src/main/java/com/reactnativecompressor/Video/VideoModule.java +8 -6
  13. package/android/src/newarch/CompressorSpec.java +9 -0
  14. package/android/src/newarch/VideoCompressorSpec.java +9 -0
  15. package/android/src/oldarch/CompressorSpec.java +28 -0
  16. package/android/src/oldarch/VideoCompressorSpec.java +26 -0
  17. package/ios/Compressor.h +7 -0
  18. package/ios/Compressor.mm +395 -0
  19. package/ios/Compressor.xcodeproj/project.pbxproj +6 -36
  20. package/ios/Video/VideoCompressor.swift +2 -2
  21. package/lib/commonjs/Audio/index.js +13 -14
  22. package/lib/commonjs/Audio/index.js.map +1 -1
  23. package/lib/commonjs/Image/index.js +2 -5
  24. package/lib/commonjs/Image/index.js.map +1 -1
  25. package/lib/commonjs/Main.js +29 -0
  26. package/lib/commonjs/Main.js.map +1 -0
  27. package/lib/commonjs/Spec/NativeCompressor.js +10 -0
  28. package/lib/commonjs/Spec/NativeCompressor.js.map +1 -0
  29. package/lib/commonjs/Spec/NativeVideoCompressor.js +10 -0
  30. package/lib/commonjs/Spec/NativeVideoCompressor.js.map +1 -0
  31. package/lib/commonjs/Video/index.js +3 -24
  32. package/lib/commonjs/Video/index.js.map +1 -1
  33. package/lib/commonjs/expo-plugin/compressor.js +1 -4
  34. package/lib/commonjs/expo-plugin/compressor.js.map +1 -1
  35. package/lib/commonjs/index.js +21 -28
  36. package/lib/commonjs/index.js.map +1 -1
  37. package/lib/commonjs/utils/index.js +32 -51
  38. package/lib/commonjs/utils/index.js.map +1 -1
  39. package/lib/module/Audio/index.js +13 -11
  40. package/lib/module/Audio/index.js.map +1 -1
  41. package/lib/module/Image/index.js +2 -3
  42. package/lib/module/Image/index.js.map +1 -1
  43. package/lib/module/Main.js +22 -0
  44. package/lib/module/Main.js.map +1 -0
  45. package/lib/module/Spec/NativeCompressor.js +3 -0
  46. package/lib/module/Spec/NativeCompressor.js.map +1 -0
  47. package/lib/module/Spec/NativeVideoCompressor.js +3 -0
  48. package/lib/module/Spec/NativeVideoCompressor.js.map +1 -0
  49. package/lib/module/Video/index.js +4 -18
  50. package/lib/module/Video/index.js.map +1 -1
  51. package/lib/module/expo-plugin/compressor.js +1 -3
  52. package/lib/module/expo-plugin/compressor.js.map +1 -1
  53. package/lib/module/index.js +8 -5
  54. package/lib/module/index.js.map +1 -1
  55. package/lib/module/utils/index.js +26 -34
  56. package/lib/module/utils/index.js.map +1 -1
  57. package/lib/typescript/Audio/index.d.ts +2 -1
  58. package/lib/typescript/Audio/index.d.ts.map +1 -0
  59. package/lib/typescript/Image/index.d.ts +7 -6
  60. package/lib/typescript/Image/index.d.ts.map +1 -0
  61. package/lib/typescript/Main.d.ts +4 -0
  62. package/lib/typescript/Main.d.ts.map +1 -0
  63. package/lib/typescript/Spec/NativeCompressor.d.ts +12 -0
  64. package/lib/typescript/Spec/NativeCompressor.d.ts.map +1 -0
  65. package/lib/typescript/Spec/NativeVideoCompressor.d.ts +13 -0
  66. package/lib/typescript/Spec/NativeVideoCompressor.d.ts.map +1 -0
  67. package/lib/typescript/Video/index.d.ts +4 -3
  68. package/lib/typescript/Video/index.d.ts.map +1 -0
  69. package/lib/typescript/expo-plugin/compressor.d.ts +2 -3
  70. package/lib/typescript/expo-plugin/compressor.d.ts.map +1 -0
  71. package/lib/typescript/index.d.ts +7 -3
  72. package/lib/typescript/index.d.ts.map +1 -0
  73. package/lib/typescript/utils/index.d.ts +6 -4
  74. package/lib/typescript/utils/index.d.ts.map +1 -0
  75. package/package.json +59 -37
  76. package/react-native-compressor.podspec +24 -1
  77. package/src/Audio/index.tsx +6 -4
  78. package/src/Image/index.tsx +2 -2
  79. package/src/Main.tsx +41 -0
  80. package/src/Spec/NativeCompressor.ts +13 -0
  81. package/src/Spec/NativeVideoCompressor.ts +14 -0
  82. package/src/Video/index.tsx +5 -10
  83. package/src/expo-plugin/compressor.ts +2 -1
  84. package/src/index.tsx +7 -2
  85. package/src/utils/index.tsx +11 -5
  86. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  87. package/android/.gradle/6.9/fileChanges/last-build.bin +0 -0
  88. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  89. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  90. package/android/.gradle/6.9/gc.properties +0 -0
  91. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  92. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  93. package/android/.gradle/checksums/checksums.lock +0 -0
  94. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  95. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  96. package/android/.gradle/vcs-1/gc.properties +0 -0
  97. package/android/.idea/caches/build_file_checksums.ser +0 -0
  98. package/android/.idea/compiler.xml +0 -6
  99. package/android/.idea/gradle.xml +0 -20
  100. package/android/.idea/jarRepositories.xml +0 -45
  101. package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_1_0.xml +0 -13
  102. package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_0_2_aar.xml +0 -24
  103. package/android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_0_0.xml +0 -11
  104. package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml +0 -19
  105. package/android/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml +0 -19
  106. package/android/.idea/libraries/Gradle__androidx_autofill_autofill_1_1_0_aar.xml +0 -16
  107. package/android/.idea/libraries/Gradle__androidx_collection_collection_1_0_0.xml +0 -11
  108. package/android/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml +0 -24
  109. package/android/.idea/libraries/Gradle__androidx_core_core_1_1_0_aar.xml +0 -16
  110. package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +0 -19
  111. package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +0 -19
  112. package/android/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml +0 -19
  113. package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +0 -24
  114. package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_0_0_aar.xml +0 -24
  115. package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +0 -19
  116. package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml +0 -19
  117. package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml +0 -19
  118. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_0_0.xml +0 -11
  119. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml +0 -19
  120. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml +0 -19
  121. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_aar.xml +0 -19
  122. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_aar.xml +0 -19
  123. package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +0 -19
  124. package/android/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml +0 -19
  125. package/android/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml +0 -24
  126. package/android/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml +0 -19
  127. package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +0 -24
  128. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_0_1_aar.xml +0 -19
  129. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml +0 -19
  130. package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_0_aar.xml +0 -13
  131. package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +0 -19
  132. package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_2_2.xml +0 -13
  133. package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_5_0_aar.xml +0 -15
  134. package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_5_0_aar.xml +0 -18
  135. package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_5_0_aar.xml +0 -18
  136. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_5_0_aar.xml +0 -18
  137. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_5_0_aar.xml +0 -18
  138. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_native_2_5_0_aar.xml +0 -15
  139. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_5_0_aar.xml +0 -15
  140. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_ashmem_2_5_0_aar.xml +0 -15
  141. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_java_2_5_0_aar.xml +0 -15
  142. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_native_2_5_0_aar.xml +0 -15
  143. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_5_0_aar.xml +0 -15
  144. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_5_0_aar.xml +0 -15
  145. package/android/.idea/libraries/Gradle__com_facebook_fresco_ui_common_2_5_0_aar.xml +0 -15
  146. package/android/.idea/libraries/Gradle__com_facebook_infer_annotation_infer_annotation_0_18_0.xml +0 -13
  147. package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_66_1_aar.xml +0 -14
  148. package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_10_1.xml +0 -13
  149. package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_10_1.xml +0 -13
  150. package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_10_1_aar.xml +0 -15
  151. package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_19_0.xml +0 -13
  152. package/android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml +0 -13
  153. package/android/.idea/libraries/Gradle__com_googlecode_mp4parser_isoparser_1_0_6.xml +0 -13
  154. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_9_1.xml +0 -13
  155. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_4_9_1.xml +0 -13
  156. package/android/.idea/libraries/Gradle__com_squareup_okio_okio_2_9_0.xml +0 -13
  157. package/android/.idea/libraries/Gradle__io_github_lizhangqu_coreprogress_1_0_2_aar.xml +0 -18
  158. package/android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml +0 -13
  159. package/android/.idea/libraries/Gradle__org_aspectj_aspectjrt_1_8_2.xml +0 -13
  160. package/android/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml +0 -13
  161. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_annotations_jvm_1_3_72.xml +0 -13
  162. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_4_10.xml +0 -13
  163. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_4_10.xml +0 -13
  164. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_4_10.xml +0 -13
  165. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_4_10.xml +0 -13
  166. package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_4_0.xml +0 -13
  167. package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_4_0.xml +0 -13
  168. package/android/.idea/misc.xml +0 -9
  169. package/android/.idea/modules/android.iml +0 -138
  170. package/android/.idea/modules.xml +0 -8
  171. package/android/.idea/vcs.xml +0 -6
  172. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  173. package/android/gradle/wrapper/gradle-wrapper.properties +0 -5
  174. package/android/gradlew +0 -183
  175. package/android/gradlew.bat +0 -100
  176. package/android/local.properties +0 -8
  177. package/ios/Compressor.m +0 -351
  178. package/ios/Compressor.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  179. package/ios/Compressor.xcodeproj/project.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  180. package/ios/Compressor.xcodeproj/xcshareddata/xcschemes/Compressor.xcscheme +0 -67
  181. package/ios/Compressor.xcodeproj/xcuserdata/apple.xcuserdatad/xcschemes/xcschememanagement.plist +0 -22
package/ios/Compressor.h CHANGED
@@ -1,5 +1,12 @@
1
+
2
+ #ifdef RCT_NEW_ARCH_ENABLED
3
+ #import "RNCompressorSpec.h"
4
+
5
+ @interface Compressor : NSObject <NativeCompressorSpec>
6
+ #else
1
7
  #import <React/RCTBridgeModule.h>
2
8
 
3
9
  @interface Compressor : NSObject <RCTBridgeModule>
10
+ #endif
4
11
 
5
12
  @end
@@ -0,0 +1,395 @@
1
+ #import "Compressor.h"
2
+
3
+ //Image
4
+ #import "Image/ImageCompressor.h"
5
+ #import "Image/ImageCompressorOptions.h"
6
+ #import <React/RCTEventEmitter.h>
7
+ #import <AVFoundation/AVFoundation.h>
8
+
9
+ #define AlAsset_Library_Scheme @"assets-library"
10
+ @implementation Compressor
11
+
12
+ AVAssetWriter *assetWriter=nil;
13
+ static NSArray *metadatas;
14
+
15
+ - (NSArray *)metadatas
16
+ {
17
+ if (!metadatas) {
18
+ metadatas = @[
19
+ @"albumName",
20
+ @"artist",
21
+ @"comment",
22
+ @"copyrights",
23
+ @"creationDate",
24
+ @"date",
25
+ @"encodedby",
26
+ @"genre",
27
+ @"language",
28
+ @"location",
29
+ @"lastModifiedDate",
30
+ @"performer",
31
+ @"publisher",
32
+ @"title"
33
+ ];
34
+ }
35
+ return metadatas;
36
+ }
37
+
38
+ RCT_EXPORT_MODULE()
39
+
40
+
41
+ //Image
42
+ RCT_EXPORT_METHOD(
43
+ image_compress: (NSString*) imagePath
44
+ optionsDict: (NSDictionary*) optionsDict
45
+ resolver: (RCTPromiseResolveBlock) resolve
46
+ rejecter: (RCTPromiseRejectBlock) reject) {
47
+ [self image_compress:imagePath optionMap:optionsDict resolve:resolve reject:reject];
48
+ }
49
+
50
+ //Audio
51
+ RCT_EXPORT_METHOD(
52
+ compress_audio: (NSString*) filePath
53
+ optionsDict: (NSDictionary*) optionsDict
54
+ resolver: (RCTPromiseResolveBlock) resolve
55
+ rejecter: (RCTPromiseRejectBlock) reject) {
56
+ [self compress_audio:filePath optionMap:optionsDict resolve:resolve reject:reject];
57
+ }
58
+
59
+ //general
60
+ RCT_EXPORT_METHOD(
61
+ generateFilePath: (NSString*) extension
62
+ resolver: (RCTPromiseResolveBlock) resolve
63
+ rejecter: (RCTPromiseRejectBlock) reject) {
64
+ [self generateFilePath:extension resolve:resolve reject:reject];
65
+ }
66
+
67
+ RCT_EXPORT_METHOD(
68
+ getRealPath: (NSString*) path
69
+ type: (NSString*) type
70
+ resolver: (RCTPromiseResolveBlock) resolve
71
+ rejecter: (RCTPromiseRejectBlock) reject) {
72
+ [self getRealPath:path type:type resolve:resolve reject:reject];
73
+ }
74
+
75
+ //general
76
+ RCT_EXPORT_METHOD(
77
+ getFileSize: (NSString*) filePath
78
+ resolver: (RCTPromiseResolveBlock) resolve
79
+ rejecter: (RCTPromiseRejectBlock) reject) {
80
+ [self getFileSize:filePath resolve:resolve reject:reject];
81
+ }
82
+
83
+
84
+ RCT_EXPORT_METHOD(
85
+ getVideoMetaData: (NSString*) filePath
86
+ resolver: (RCTPromiseResolveBlock) resolve
87
+ rejecter: (RCTPromiseRejectBlock) reject) {
88
+ [self getVideoMetaData:filePath resolve:resolve reject:reject];
89
+ }
90
+
91
+ - (NSString *)getAudioQualityConstant:(NSString *)quality
92
+ {
93
+ NSMutableArray *audioQualityArray = [[NSMutableArray alloc]initWithObjects:@"low", @"medium", @"high", nil];
94
+ int index = [audioQualityArray indexOfObject:quality];
95
+ switch (index) {
96
+ case 0:
97
+ return AVAssetExportPresetLowQuality;
98
+ break;
99
+ case 1:
100
+ return AVAssetExportPresetMediumQuality;
101
+ break;
102
+ case 2:
103
+ return AVAssetExportPresetHighestQuality;
104
+ break;
105
+ }
106
+ return AVAssetExportPresetMediumQuality;
107
+ }
108
+
109
+ - (void)audo_compress_helper:(AVURLAsset *)avAsset qualityConstant:(NSString *)qualityConstant complete:(void (^)(NSString *mp3Path, BOOL finished))completeCallback {
110
+ NSString *path;
111
+ if ([avAsset.URL.scheme isEqualToString:AlAsset_Library_Scheme]) {
112
+ path = avAsset.URL.query;
113
+ if (path.length == 0) {
114
+ completeCallback(nil, NO);
115
+ return;
116
+ }
117
+
118
+ }else {
119
+ path = avAsset.URL.path;
120
+ if (!path || ![[NSFileManager defaultManager] fileExistsAtPath:path]) {
121
+ completeCallback(nil, NO);
122
+ return;
123
+ }
124
+ }
125
+
126
+ NSString *mp3Path = [ImageCompressor generateCacheFilePath:@"m4a"];;
127
+
128
+ if ([[NSFileManager defaultManager] fileExistsAtPath:mp3Path]) {
129
+ if (completeCallback)
130
+ completeCallback(mp3Path, YES);
131
+ return;
132
+ }
133
+
134
+ NSURL *mp3Url;
135
+ NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset];
136
+
137
+ if ([compatiblePresets containsObject:qualityConstant]) {
138
+ AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]
139
+ initWithAsset:avAsset
140
+ presetName:AVAssetExportPresetAppleM4A];
141
+
142
+ mp3Url = [NSURL fileURLWithPath:mp3Path];
143
+ exportSession.outputURL = mp3Url;
144
+ exportSession.shouldOptimizeForNetworkUse = YES;
145
+ exportSession.outputFileType = AVFileTypeAppleM4A;
146
+
147
+
148
+ [exportSession exportAsynchronouslyWithCompletionHandler:^{
149
+ BOOL finished = NO;
150
+ switch ([exportSession status]) {
151
+ case AVAssetExportSessionStatusFailed:
152
+ NSLog(@"AVAssetExportSessionStatusFailed, error:%@.", exportSession.error);
153
+ break;
154
+
155
+ case AVAssetExportSessionStatusCancelled:
156
+ NSLog(@"AVAssetExportSessionStatusCancelled.");
157
+ break;
158
+
159
+ case AVAssetExportSessionStatusCompleted:
160
+ NSLog(@"AVAssetExportSessionStatusCompleted.");
161
+ finished = YES;
162
+ break;
163
+
164
+ case AVAssetExportSessionStatusUnknown:
165
+ NSLog(@"AVAssetExportSessionStatusUnknown");
166
+ break;
167
+
168
+ case AVAssetExportSessionStatusWaiting:
169
+ NSLog(@"AVAssetExportSessionStatusWaiting");
170
+ break;
171
+
172
+ case AVAssetExportSessionStatusExporting:
173
+ NSLog(@"AVAssetExportSessionStatusExporting");
174
+ break;
175
+
176
+ }
177
+
178
+ if (completeCallback)
179
+ completeCallback(mp3Path, finished);
180
+ }];
181
+
182
+ }
183
+ }
184
+
185
+ - (void)compress_audio:(NSString *)fileUrl optionMap:(NSDictionary *)optionMap resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
186
+ @try {
187
+ if([fileUrl containsString:@"file://"])
188
+ {
189
+ fileUrl=[fileUrl stringByReplacingOccurrencesOfString:@"file://"
190
+ withString:@""];
191
+ }
192
+ NSFileManager *fileManager = [NSFileManager defaultManager];
193
+ BOOL isDir;
194
+ if (![fileManager fileExistsAtPath:fileUrl isDirectory:&isDir] || isDir){
195
+ NSError *err = [NSError errorWithDomain:@"file not found" code:-15 userInfo:nil];
196
+ reject([NSString stringWithFormat: @"%lu", (long)err.code], err.localizedDescription, err);
197
+ return;
198
+ }
199
+
200
+ NSDictionary *assetOptions = @{AVURLAssetPreferPreciseDurationAndTimingKey: @YES};
201
+ AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:fileUrl] options:assetOptions];
202
+ NSString *quality=[optionMap objectForKey:@"quality"];
203
+ NSString *qualityConstant=[self getAudioQualityConstant:quality];
204
+ [self audo_compress_helper:asset qualityConstant:qualityConstant complete:^(NSString *mp3Path, BOOL finished) {
205
+ if(finished)
206
+ {
207
+ resolve([NSString stringWithFormat: @"file:/%@", mp3Path]);
208
+ }
209
+ else
210
+ {
211
+ reject(@"Error", @"Something went wrong", nil);
212
+ }
213
+
214
+ }];
215
+
216
+ }
217
+ @catch (NSException *exception) {
218
+ reject(exception.name, exception.reason, nil);
219
+ }
220
+ }
221
+
222
+ - (void)generateFilePath:(NSString *)extension resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
223
+ @try {
224
+ NSString *outputUri =[ImageCompressor generateCacheFilePath:extension];
225
+ resolve(outputUri);
226
+ }
227
+ @catch (NSException *exception) {
228
+ reject(exception.name, exception.reason, nil);
229
+ }
230
+ }
231
+
232
+ - (void)getRealPath:(NSString *)path type:(NSString *)type resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
233
+ @try {
234
+ if([type isEqualToString:@"video"])
235
+ {
236
+ [ImageCompressor getAbsoluteVideoPath:path completionHandler:^(NSString* absoluteImagePath){
237
+ resolve(absoluteImagePath);
238
+ }];
239
+ }
240
+ else
241
+ {
242
+ [ImageCompressor getAbsoluteImagePath:path completionHandler:^(NSString* absoluteImagePath){
243
+ resolve(absoluteImagePath);
244
+ }];
245
+ }
246
+ }
247
+ @catch (NSException *exception) {
248
+ reject(exception.name, exception.reason, nil);
249
+ }
250
+ }
251
+
252
+ - (void)getVideoMetaData:(NSString *)filePath resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
253
+ @try {
254
+ [ImageCompressor getAbsoluteVideoPath:filePath completionHandler:^(NSString *absoluteImagePath) {
255
+ if([absoluteImagePath containsString:@"file://"])
256
+ {
257
+ absoluteImagePath=[absoluteImagePath stringByReplacingOccurrencesOfString:@"file://"
258
+ withString:@""];
259
+ }
260
+ NSFileManager *fileManager = [NSFileManager defaultManager];
261
+
262
+ BOOL isDir;
263
+ if (![fileManager fileExistsAtPath:absoluteImagePath isDirectory:&isDir] || isDir){
264
+ NSError *err = [NSError errorWithDomain:@"file not found" code:-15 userInfo:nil];
265
+ reject([NSString stringWithFormat: @"%lu", (long)err.code], err.localizedDescription, err);
266
+ return;
267
+ }
268
+ NSDictionary *attrs = [fileManager attributesOfItemAtPath: absoluteImagePath error: NULL];
269
+ UInt32 fileSize = [attrs fileSize];
270
+ NSString *fileSizeString = [@(fileSize) stringValue];
271
+
272
+ NSMutableDictionary *result = [NSMutableDictionary new];
273
+ NSDictionary *assetOptions = @{AVURLAssetPreferPreciseDurationAndTimingKey: @YES};
274
+ AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:absoluteImagePath] options:assetOptions];\
275
+ AVAssetTrack *avAsset = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
276
+ CGSize size = [avAsset naturalSize];
277
+ NSString *extension = [[absoluteImagePath lastPathComponent] pathExtension];
278
+ CMTime time = [asset duration];
279
+ int seconds = ceil(time.value/time.timescale);
280
+ [result setObject:[NSString stringWithFormat: @"%.2f", size.width] forKey:@"width"];
281
+ [result setObject:[NSString stringWithFormat: @"%.2f", size.height] forKey:@"height"];
282
+ [result setObject:extension forKey:@"extension"];
283
+ [result setObject:fileSizeString forKey:@"size"];
284
+ [result setObject:[@(seconds) stringValue] forKey:@"duration"];
285
+ NSArray *keys = [NSArray arrayWithObjects:@"commonMetadata", nil];
286
+ [asset loadValuesAsynchronouslyForKeys:keys completionHandler:^{
287
+ // string keys
288
+ for (NSString *key in [self metadatas]) {
289
+ NSArray *items = [AVMetadataItem metadataItemsFromArray:asset.commonMetadata
290
+ withKey:key
291
+ keySpace:AVMetadataKeySpaceCommon];
292
+ for (AVMetadataItem *item in items) {
293
+ [result setObject:item.value forKey:key];
294
+ }
295
+ }
296
+ resolve(result);
297
+ }];
298
+ }];
299
+ }
300
+ @catch (NSException *exception) {
301
+ reject(exception.name, exception.reason, nil);
302
+ }
303
+ }
304
+
305
+ - (void)image_compress:(NSString *)imagePath optionMap:(NSDictionary *)optionMap resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
306
+ @try {
307
+ ImageCompressorOptions *options = [ImageCompressorOptions fromDictionary:optionMap];
308
+ [ImageCompressor getAbsoluteImagePath:imagePath completionHandler:^(NSString* absoluteImagePath){
309
+ if(options.autoCompress)
310
+ {
311
+ NSString *result = [ImageCompressor autoCompressHandler:absoluteImagePath options:options];
312
+ resolve(result);
313
+ }
314
+ else
315
+ {
316
+ NSString *result = [ImageCompressor manualCompressHandler:absoluteImagePath options:options];
317
+ resolve(result);
318
+ }
319
+ }];
320
+
321
+ }
322
+ @catch (NSException *exception) {
323
+ reject(exception.name, exception.reason, nil);
324
+ }
325
+ }
326
+
327
+ - (void)getFileSize:(NSString *)filePath resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
328
+ @try {
329
+ if([filePath containsString:@"file://"])
330
+ {
331
+ filePath=[filePath stringByReplacingOccurrencesOfString:@"file://"
332
+ withString:@""];
333
+ }
334
+ NSFileManager *fileManager = [NSFileManager defaultManager];
335
+ BOOL isDir;
336
+ if (![fileManager fileExistsAtPath:filePath isDirectory:&isDir] || isDir){
337
+ NSError *err = [NSError errorWithDomain:@"file not found" code:-15 userInfo:nil];
338
+ reject([NSString stringWithFormat: @"%lu", (long)err.code], err.localizedDescription, err);
339
+ return;
340
+ }
341
+ NSDictionary *attrs = [fileManager attributesOfItemAtPath: filePath error: NULL];
342
+ UInt32 fileSize = [attrs fileSize];
343
+ NSString *fileSizeString = [@(fileSize) stringValue];
344
+ resolve(fileSizeString);
345
+ }
346
+ @catch (NSException *exception) {
347
+ reject(exception.name, exception.reason, nil);
348
+ }
349
+ }
350
+
351
+ // Don't compile this code when we build for the old architecture.
352
+ #ifdef RCT_NEW_ARCH_ENABLED
353
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
354
+ (const facebook::react::ObjCTurboModule::InitParams &)params
355
+ {
356
+ return std::make_shared<facebook::react::NativeCompressorSpecJSI>(params);
357
+ }
358
+ #endif
359
+
360
+
361
+ @end
362
+
363
+
364
+ @interface RCT_EXTERN_MODULE(VideoCompressor, RCTEventEmitter)
365
+
366
+ RCT_EXTERN_METHOD(compress:(NSString *)fileUrl
367
+ withOptions:(NSDictionary *)options
368
+ withResolver:(RCTPromiseResolveBlock)resolve
369
+ withRejecter:(RCTPromiseRejectBlock)reject)
370
+
371
+ RCT_EXTERN_METHOD(upload:(NSString *)fileUrl
372
+ withOptions:(NSDictionary *)options
373
+ withResolver:(RCTPromiseResolveBlock)resolve
374
+ withRejecter:(RCTPromiseRejectBlock)reject)
375
+
376
+ RCT_EXTERN_METHOD(activateBackgroundTask: (NSDictionary *)options
377
+ withResolver:(RCTPromiseResolveBlock)resolve
378
+ withRejecter:(RCTPromiseRejectBlock)reject)
379
+
380
+ RCT_EXTERN_METHOD(deactivateBackgroundTask: (NSDictionary *)options
381
+ withResolver:(RCTPromiseResolveBlock)resolve
382
+ withRejecter:(RCTPromiseRejectBlock)reject)
383
+
384
+ RCT_EXTERN_METHOD(cancelCompression:(NSString *)uuid)
385
+
386
+ // Don't compile this code when we build for the old architecture.
387
+ #ifdef RCT_NEW_ARCH_ENABLED
388
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
389
+ (const facebook::react::ObjCTurboModule::InitParams &)params
390
+ {
391
+ return std::make_shared<facebook::react::NativeVideoCompressorSpecJSI>(params);
392
+ }
393
+ #endif
394
+
395
+ @end
@@ -7,7 +7,7 @@
7
7
  objects = {
8
8
 
9
9
  /* Begin PBXBuildFile section */
10
- 188666C92668C616006FF392 /* VideoCompressor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 188657BA26612A1D006FF392 /* VideoCompressor.swift */; };
10
+ 5E555C0D2413F4C50049A1A2 /* Compressor.mm in Sources */ = {isa = PBXBuildFile; fileRef = B3E7B5891CC2AC0600A0062D /* Compressor.mm */; };
11
11
  /* End PBXBuildFile section */
12
12
 
13
13
  /* Begin PBXCopyFilesBuildPhase section */
@@ -24,11 +24,8 @@
24
24
 
25
25
  /* Begin PBXFileReference section */
26
26
  134814201AA4EA6300B7C361 /* libCompressor.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libCompressor.a; sourceTree = BUILT_PRODUCTS_DIR; };
27
- 188657B826612A1C006FF392 /* Compressor-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Compressor-Bridging-Header.h"; sourceTree = "<group>"; };
28
- 188657BA26612A1D006FF392 /* VideoCompressor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoCompressor.swift; sourceTree = "<group>"; };
29
- 18866CD1266E224C006FF392 /* Image */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Image; sourceTree = "<group>"; };
30
27
  B3E7B5881CC2AC0600A0062D /* Compressor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Compressor.h; sourceTree = "<group>"; };
31
- B3E7B5891CC2AC0600A0062D /* Compressor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Compressor.m; sourceTree = "<group>"; };
28
+ B3E7B5891CC2AC0600A0062D /* Compressor.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Compressor.mm; sourceTree = "<group>"; };
32
29
  /* End PBXFileReference section */
33
30
 
34
31
  /* Begin PBXFrameworksBuildPhase section */
@@ -50,30 +47,11 @@
50
47
  name = Products;
51
48
  sourceTree = "<group>";
52
49
  };
53
- 188657B5266127EC006FF392 /* Video */ = {
54
- isa = PBXGroup;
55
- children = (
56
- 188657BA26612A1D006FF392 /* VideoCompressor.swift */,
57
- );
58
- path = Video;
59
- sourceTree = "<group>";
60
- };
61
- 188657B7266127FF006FF392 /* Audio */ = {
62
- isa = PBXGroup;
63
- children = (
64
- );
65
- path = Audio;
66
- sourceTree = "<group>";
67
- };
68
50
  58B511D21A9E6C8500147676 = {
69
51
  isa = PBXGroup;
70
52
  children = (
71
- 188657B826612A1C006FF392 /* Compressor-Bridging-Header.h */,
72
- 18866CD1266E224C006FF392 /* Image */,
73
- 188657B7266127FF006FF392 /* Audio */,
74
- 188657B5266127EC006FF392 /* Video */,
75
53
  B3E7B5881CC2AC0600A0062D /* Compressor.h */,
76
- B3E7B5891CC2AC0600A0062D /* Compressor.m */,
54
+ B3E7B5891CC2AC0600A0062D /* Compressor.mm */,
77
55
  134814211AA4EA7D00B7C361 /* Products */,
78
56
  );
79
57
  sourceTree = "<group>";
@@ -109,7 +87,6 @@
109
87
  TargetAttributes = {
110
88
  58B511DA1A9E6C8500147676 = {
111
89
  CreatedOnToolsVersion = 6.1.1;
112
- LastSwiftMigration = 1240;
113
90
  };
114
91
  };
115
92
  };
@@ -136,7 +113,7 @@
136
113
  isa = PBXSourcesBuildPhase;
137
114
  buildActionMask = 2147483647;
138
115
  files = (
139
- 188666C92668C616006FF392 /* VideoCompressor.swift in Sources */,
116
+ B3E7B58A1CC2AC0600A0062D /* Compressor.mm in Sources */,
140
117
  );
141
118
  runOnlyForDeploymentPostprocessing = 0;
142
119
  };
@@ -171,6 +148,7 @@
171
148
  COPY_PHASE_STRIP = NO;
172
149
  ENABLE_STRICT_OBJC_MSGSEND = YES;
173
150
  ENABLE_TESTABILITY = YES;
151
+ "EXCLUDED_ARCHS[sdk=*]" = arm64;
174
152
  GCC_C_LANGUAGE_STANDARD = gnu99;
175
153
  GCC_DYNAMIC_NO_PIC = NO;
176
154
  GCC_NO_COMMON_BLOCKS = YES;
@@ -221,6 +199,7 @@
221
199
  COPY_PHASE_STRIP = YES;
222
200
  ENABLE_NS_ASSERTIONS = NO;
223
201
  ENABLE_STRICT_OBJC_MSGSEND = YES;
202
+ "EXCLUDED_ARCHS[sdk=*]" = arm64;
224
203
  GCC_C_LANGUAGE_STANDARD = gnu99;
225
204
  GCC_NO_COMMON_BLOCKS = YES;
226
205
  GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -239,41 +218,32 @@
239
218
  58B511F01A9E6C8500147676 /* Debug */ = {
240
219
  isa = XCBuildConfiguration;
241
220
  buildSettings = {
242
- CLANG_ENABLE_MODULES = YES;
243
221
  HEADER_SEARCH_PATHS = (
244
222
  "$(inherited)",
245
223
  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
246
224
  "$(SRCROOT)/../../../React/**",
247
225
  "$(SRCROOT)/../../react-native/React/**",
248
226
  );
249
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
250
227
  LIBRARY_SEARCH_PATHS = "$(inherited)";
251
228
  OTHER_LDFLAGS = "-ObjC";
252
229
  PRODUCT_NAME = Compressor;
253
230
  SKIP_INSTALL = YES;
254
- SWIFT_OBJC_BRIDGING_HEADER = "Video/Compressor-Bridging-Header.h";
255
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
256
- SWIFT_VERSION = 5.0;
257
231
  };
258
232
  name = Debug;
259
233
  };
260
234
  58B511F11A9E6C8500147676 /* Release */ = {
261
235
  isa = XCBuildConfiguration;
262
236
  buildSettings = {
263
- CLANG_ENABLE_MODULES = YES;
264
237
  HEADER_SEARCH_PATHS = (
265
238
  "$(inherited)",
266
239
  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
267
240
  "$(SRCROOT)/../../../React/**",
268
241
  "$(SRCROOT)/../../react-native/React/**",
269
242
  );
270
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
271
243
  LIBRARY_SEARCH_PATHS = "$(inherited)";
272
244
  OTHER_LDFLAGS = "-ObjC";
273
245
  PRODUCT_NAME = Compressor;
274
246
  SKIP_INSTALL = YES;
275
- SWIFT_OBJC_BRIDGING_HEADER = "Video/Compressor-Bridging-Header.h";
276
- SWIFT_VERSION = 5.0;
277
247
  };
278
248
  name = Release;
279
249
  };
@@ -207,7 +207,7 @@ func makeValidUri(filePath: String) -> String {
207
207
 
208
208
  func compressVideo(url: URL, options: [String: Any], onProgress: @escaping (Float) -> Void, onCompletion: @escaping (URL) -> Void, onFailure: @escaping (Error) -> Void){
209
209
  ImageCompressor.getAbsoluteVideoPath(url.absoluteString) { absoluteVideoPath in
210
- var minimumFileSizeForCompress:Double=16.0;
210
+ var minimumFileSizeForCompress:Double=0.0;
211
211
  let videoURL = URL(string: absoluteVideoPath!)
212
212
  let fileSize=self.getfileSize(forURL: videoURL!);
213
213
  if((options["minimumFileSizeForCompress"]) != nil)
@@ -216,7 +216,7 @@ func makeValidUri(filePath: String) -> String {
216
216
  }
217
217
  if(fileSize>minimumFileSizeForCompress)
218
218
  {
219
- if(options["compressionMethod"] as! String=="auto")
219
+ if(options["compressionMethod"] as! String=="manual")
220
220
  {
221
221
  self.autoCompressionHelper(url: videoURL!, options:options) { progress in
222
222
  onProgress(progress)
@@ -4,51 +4,50 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
- var _reactNative = require("react-native");
9
-
7
+ var _Main = require("../Main");
10
8
  var _utils = require("../utils");
11
-
12
- const NativeAudio = _reactNative.NativeModules.Compressor;
9
+ const NativeAudio = _Main.Compressor;
13
10
  const Audio = {
14
- compress: async (url, options = _utils.DEFAULT_COMPRESS_AUDIO_OPTIONS) => {
11
+ compress: async function (url) {
12
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _utils.DEFAULT_COMPRESS_AUDIO_OPTIONS;
15
13
  try {
16
14
  const checkUrlAndOptionsResult = await (0, _utils.checkUrlAndOptions)(url, options);
17
-
18
15
  if (!checkUrlAndOptionsResult.isCorrect) {
19
16
  throw checkUrlAndOptionsResult.message;
20
17
  } else {
21
18
  // Get resulting output file path
19
+
22
20
  // Get media details
23
21
  // const mediaDetails: any = await getDetails(url).catch(() => null);
24
22
  const mediaDetails = {
25
23
  bitrate: 0
26
- }; // Initialize bitrate
24
+ };
27
25
 
26
+ // Initialize bitrate
28
27
  let bitrate = _utils.DEFAULT_COMPRESS_AUDIO_OPTIONS.bitrate;
29
-
30
28
  if (mediaDetails && mediaDetails.bitrate) {
31
29
  // Check and return the appropriate bitrate according to quality expected
32
30
  for (let i = 0; i < _utils.AUDIO_BITRATE.length; i++) {
33
31
  // Check a particular bitrate to return its nearest lower according to quality
32
+ //@ts-ignore
34
33
  if (mediaDetails.bitrate > _utils.AUDIO_BITRATE[i]) {
35
34
  if (i + 2 < _utils.AUDIO_BITRATE.length) {
36
35
  if (options.quality === 'low') bitrate = _utils.AUDIO_BITRATE[i + 2];else if (options.quality === 'medium') bitrate = _utils.AUDIO_BITRATE[i + 1];else bitrate = _utils.AUDIO_BITRATE[i];
37
36
  } else if (i + 1 < _utils.AUDIO_BITRATE.length) {
38
37
  if (options.quality === 'low') bitrate = _utils.AUDIO_BITRATE[i + 1];else bitrate = _utils.AUDIO_BITRATE[i];
39
38
  } else bitrate = _utils.AUDIO_BITRATE[i];
40
-
41
39
  break;
42
- } // Check if the matching bitrate is the last in the array
43
-
40
+ }
44
41
 
45
- if (mediaDetails.bitrate <= _utils.AUDIO_BITRATE[_utils.AUDIO_BITRATE.length - 1]) {
42
+ // Check if the matching bitrate is the last in the array
43
+ if (
44
+ //@ts-ignore
45
+ mediaDetails.bitrate <= _utils.AUDIO_BITRATE[_utils.AUDIO_BITRATE.length - 1]) {
46
46
  bitrate = _utils.AUDIO_BITRATE[_utils.AUDIO_BITRATE.length - 1];
47
47
  break;
48
48
  }
49
49
  }
50
50
  }
51
-
52
51
  return NativeAudio.compress_audio(url, {
53
52
  bitrate,
54
53
  quality: options.quality
@@ -1 +1 @@
1
- {"version":3,"sources":["index.tsx"],"names":["NativeAudio","NativeModules","Compressor","Audio","compress","url","options","DEFAULT_COMPRESS_AUDIO_OPTIONS","checkUrlAndOptionsResult","isCorrect","message","mediaDetails","bitrate","i","AUDIO_BITRATE","length","quality","compress_audio","error"],"mappings":";;;;;;;AAAA;;AACA;;AAOA,MAAMA,WAAW,GAAGC,2BAAcC,UAAlC;AAEA,MAAMC,KAAgB,GAAG;AACvBC,EAAAA,QAAQ,EAAE,OAAOC,GAAP,EAAYC,OAAO,GAAGC,qCAAtB,KAAyD;AACjE,QAAI;AACF,YAAMC,wBAA2C,GAC/C,MAAM,+BAAmBH,GAAnB,EAAwBC,OAAxB,CADR;;AAEA,UAAI,CAACE,wBAAwB,CAACC,SAA9B,EAAyC;AACvC,cAAMD,wBAAwB,CAACE,OAA/B;AACD,OAFD,MAEO;AACL;AAEA;AACA;AACA,cAAMC,YAAiB,GAAG;AACxBC,UAAAA,OAAO,EAAE;AADe,SAA1B,CALK,CASL;;AACA,YAAIA,OAAY,GAAGL,sCAA+BK,OAAlD;;AAEA,YAAID,YAAY,IAAIA,YAAY,CAACC,OAAjC,EAA0C;AACxC;AACA,eAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGC,qBAAcC,MAAlC,EAA0CF,CAAC,EAA3C,EAA+C;AAC7C;AACA,gBAAIF,YAAY,CAACC,OAAb,GAAuBE,qBAAcD,CAAd,CAA3B,EAA6C;AAC3C,kBAAIA,CAAC,GAAG,CAAJ,GAAQC,qBAAcC,MAA1B,EAAkC;AAChC,oBAAIT,OAAO,CAACU,OAAR,KAAoB,KAAxB,EAA+BJ,OAAO,GAAGE,qBAAcD,CAAC,GAAG,CAAlB,CAAV,CAA/B,KACK,IAAIP,OAAO,CAACU,OAAR,KAAoB,QAAxB,EACHJ,OAAO,GAAGE,qBAAcD,CAAC,GAAG,CAAlB,CAAV,CADG,KAEAD,OAAO,GAAGE,qBAAcD,CAAd,CAAV;AACN,eALD,MAKO,IAAIA,CAAC,GAAG,CAAJ,GAAQC,qBAAcC,MAA1B,EAAkC;AACvC,oBAAIT,OAAO,CAACU,OAAR,KAAoB,KAAxB,EAA+BJ,OAAO,GAAGE,qBAAcD,CAAC,GAAG,CAAlB,CAAV,CAA/B,KACKD,OAAO,GAAGE,qBAAcD,CAAd,CAAV;AACN,eAHM,MAGAD,OAAO,GAAGE,qBAAcD,CAAd,CAAV;;AACP;AACD,aAb4C,CAe7C;;;AACA,gBACEF,YAAY,CAACC,OAAb,IAAwBE,qBAAcA,qBAAcC,MAAd,GAAuB,CAArC,CAD1B,EAEE;AACAH,cAAAA,OAAO,GAAGE,qBAAcA,qBAAcC,MAAd,GAAuB,CAArC,CAAV;AACA;AACD;AACF;AACF;;AAED,eAAOf,WAAW,CAACiB,cAAZ,CAA2BZ,GAA3B,EAAgC;AACrCO,UAAAA,OADqC;AAErCI,UAAAA,OAAO,EAAEV,OAAO,CAACU;AAFoB,SAAhC,CAAP;AAID;AACF,KAjDD,CAiDE,OAAOE,KAAP,EAAmB;AACnB,YAAMA,KAAK,CAACR,OAAZ;AACD;AACF;AAtDsB,CAAzB;eAyDeP,K","sourcesContent":["import { NativeModules } from 'react-native';\nimport {\n AUDIO_BITRATE,\n AudioType,\n DEFAULT_COMPRESS_AUDIO_OPTIONS,\n defaultResultType,\n checkUrlAndOptions,\n} from '../utils';\nconst NativeAudio = NativeModules.Compressor;\n\nconst Audio: AudioType = {\n compress: async (url, options = DEFAULT_COMPRESS_AUDIO_OPTIONS) => {\n try {\n const checkUrlAndOptionsResult: defaultResultType =\n await checkUrlAndOptions(url, options);\n if (!checkUrlAndOptionsResult.isCorrect) {\n throw checkUrlAndOptionsResult.message;\n } else {\n // Get resulting output file path\n\n // Get media details\n // const mediaDetails: any = await getDetails(url).catch(() => null);\n const mediaDetails: any = {\n bitrate: 0,\n };\n\n // Initialize bitrate\n let bitrate: any = DEFAULT_COMPRESS_AUDIO_OPTIONS.bitrate;\n\n if (mediaDetails && mediaDetails.bitrate) {\n // Check and return the appropriate bitrate according to quality expected\n for (let i = 0; i < AUDIO_BITRATE.length; i++) {\n // Check a particular bitrate to return its nearest lower according to quality\n if (mediaDetails.bitrate > AUDIO_BITRATE[i]) {\n if (i + 2 < AUDIO_BITRATE.length) {\n if (options.quality === 'low') bitrate = AUDIO_BITRATE[i + 2];\n else if (options.quality === 'medium')\n bitrate = AUDIO_BITRATE[i + 1];\n else bitrate = AUDIO_BITRATE[i];\n } else if (i + 1 < AUDIO_BITRATE.length) {\n if (options.quality === 'low') bitrate = AUDIO_BITRATE[i + 1];\n else bitrate = AUDIO_BITRATE[i];\n } else bitrate = AUDIO_BITRATE[i];\n break;\n }\n\n // Check if the matching bitrate is the last in the array\n if (\n mediaDetails.bitrate <= AUDIO_BITRATE[AUDIO_BITRATE.length - 1]\n ) {\n bitrate = AUDIO_BITRATE[AUDIO_BITRATE.length - 1];\n break;\n }\n }\n }\n\n return NativeAudio.compress_audio(url, {\n bitrate,\n quality: options.quality,\n });\n }\n } catch (error: any) {\n throw error.message;\n }\n },\n};\n\nexport default Audio;\n"]}
1
+ {"version":3,"names":["_Main","require","_utils","NativeAudio","Compressor","Audio","compress","url","options","arguments","length","undefined","DEFAULT_COMPRESS_AUDIO_OPTIONS","checkUrlAndOptionsResult","checkUrlAndOptions","isCorrect","message","mediaDetails","bitrate","i","AUDIO_BITRATE","quality","compress_audio","error","_default","exports","default"],"sourceRoot":"../../../src","sources":["Audio/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAMA,MAAME,WAAW,GAAGC,gBAAU;AAE9B,MAAMC,KAAgB,GAAG;EACvBC,QAAQ,EAAE,eAAAA,CAAOC,GAAG,EAA+C;IAAA,IAA7CC,OAAO,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGG,qCAA8B;IAC5D,IAAI;MACF,MAAMC,wBAA2C,GAC/C,MAAM,IAAAC,yBAAkB,EAACP,GAAG,EAAEC,OAAO,CAAC;MACxC,IAAI,CAACK,wBAAwB,CAACE,SAAS,EAAE;QACvC,MAAMF,wBAAwB,CAACG,OAAO;MACxC,CAAC,MAAM;QACL;;QAEA;QACA;QACA,MAAMC,YAAiB,GAAG;UACxBC,OAAO,EAAE;QACX,CAAC;;QAED;QACA,IAAIA,OAAY,GAAGN,qCAA8B,CAACM,OAAO;QAEzD,IAAID,YAAY,IAAIA,YAAY,CAACC,OAAO,EAAE;UACxC;UACA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGC,oBAAa,CAACV,MAAM,EAAES,CAAC,EAAE,EAAE;YAC7C;YACA;YACA,IAAIF,YAAY,CAACC,OAAO,GAAGE,oBAAa,CAACD,CAAC,CAAC,EAAE;cAC3C,IAAIA,CAAC,GAAG,CAAC,GAAGC,oBAAa,CAACV,MAAM,EAAE;gBAChC,IAAIF,OAAO,CAACa,OAAO,KAAK,KAAK,EAAEH,OAAO,GAAGE,oBAAa,CAACD,CAAC,GAAG,CAAC,CAAC,CAAC,KACzD,IAAIX,OAAO,CAACa,OAAO,KAAK,QAAQ,EACnCH,OAAO,GAAGE,oBAAa,CAACD,CAAC,GAAG,CAAC,CAAC,CAAC,KAC5BD,OAAO,GAAGE,oBAAa,CAACD,CAAC,CAAC;cACjC,CAAC,MAAM,IAAIA,CAAC,GAAG,CAAC,GAAGC,oBAAa,CAACV,MAAM,EAAE;gBACvC,IAAIF,OAAO,CAACa,OAAO,KAAK,KAAK,EAAEH,OAAO,GAAGE,oBAAa,CAACD,CAAC,GAAG,CAAC,CAAC,CAAC,KACzDD,OAAO,GAAGE,oBAAa,CAACD,CAAC,CAAC;cACjC,CAAC,MAAMD,OAAO,GAAGE,oBAAa,CAACD,CAAC,CAAC;cACjC;YACF;;YAEA;YACA;YACE;YACAF,YAAY,CAACC,OAAO,IAAIE,oBAAa,CAACA,oBAAa,CAACV,MAAM,GAAG,CAAC,CAAC,EAC/D;cACAQ,OAAO,GAAGE,oBAAa,CAACA,oBAAa,CAACV,MAAM,GAAG,CAAC,CAAC;cACjD;YACF;UACF;QACF;QAEA,OAAOP,WAAW,CAACmB,cAAc,CAACf,GAAG,EAAE;UACrCW,OAAO;UACPG,OAAO,EAAEb,OAAO,CAACa;QACnB,CAAC,CAAC;MACJ;IACF,CAAC,CAAC,OAAOE,KAAU,EAAE;MACnB,MAAMA,KAAK,CAACP,OAAO;IACrB;EACF;AACF,CAAC;AAAC,IAAAQ,QAAA,GAEanB,KAAK;AAAAoB,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
@@ -4,17 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
- var _reactNative = require("react-native");
9
-
7
+ var _Main = require("../Main");
10
8
  const base64UrlRegex = /^data:image\/.*;(?:charset=.{3,5};)?base64,/;
11
- const NativeImage = _reactNative.NativeModules.Compressor;
9
+ const NativeImage = _Main.Compressor;
12
10
  const Image = {
13
11
  compress: (value, options) => {
14
12
  if (!value) {
15
13
  throw new Error('Compression value is empty, please provide a value for compression.');
16
14
  }
17
-
18
15
  const cleanData = value.replace(base64UrlRegex, '');
19
16
  return NativeImage.image_compress(cleanData, options);
20
17
  }