react-native-video-trim 4.0.0 → 5.0.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 (95) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +124 -83
  3. package/VideoTrim.podspec +4 -4
  4. package/android/build.gradle +15 -54
  5. package/android/gradle.properties +2 -0
  6. package/android/src/main/AndroidManifest.xml +1 -1
  7. package/android/src/main/java/com/videotrim/VideoTrimModule.kt +660 -0
  8. package/android/src/main/java/com/videotrim/VideoTrimPackage.kt +33 -0
  9. package/android/src/main/java/com/{margelo/nitro/videotrim → videotrim}/enums/ErrorCode.java +1 -1
  10. package/android/src/main/java/com/{margelo/nitro/videotrim → videotrim}/interfaces/IVideoTrimmerView.java +1 -1
  11. package/android/src/main/java/com/{margelo/nitro/videotrim → videotrim}/interfaces/VideoTrimListener.java +5 -4
  12. package/android/src/main/java/com/{margelo/nitro/videotrim → videotrim}/utils/MediaMetadataUtil.java +1 -1
  13. package/android/src/main/java/com/{margelo/nitro/videotrim → videotrim}/utils/StorageUtil.java +1 -1
  14. package/android/src/main/java/com/{margelo/nitro/videotrim → videotrim}/utils/VideoTrimmerUtil.java +49 -39
  15. package/android/src/main/java/com/{margelo/nitro/videotrim → videotrim}/widgets/VideoTrimmerView.java +49 -46
  16. package/ios/AssetLoader.h +19 -0
  17. package/ios/AssetLoader.mm +87 -0
  18. package/ios/ErrorCode.h +9 -0
  19. package/ios/ProgressAlertController.h +15 -0
  20. package/ios/ProgressAlertController.mm +78 -0
  21. package/ios/VideoTrim.h +31 -0
  22. package/ios/VideoTrim.mm +663 -0
  23. package/ios/VideoTrimmer.h +67 -0
  24. package/ios/VideoTrimmer.mm +863 -0
  25. package/ios/VideoTrimmerThumb.h +23 -0
  26. package/ios/VideoTrimmerThumb.mm +175 -0
  27. package/ios/VideoTrimmerViewController.h +52 -0
  28. package/ios/VideoTrimmerViewController.mm +533 -0
  29. package/lib/module/NativeVideoTrim.js +5 -0
  30. package/lib/module/NativeVideoTrim.js.map +1 -0
  31. package/lib/module/index.js +59 -34
  32. package/lib/module/index.js.map +1 -1
  33. package/lib/typescript/src/NativeVideoTrim.d.ts +107 -0
  34. package/lib/typescript/src/NativeVideoTrim.d.ts.map +1 -0
  35. package/lib/typescript/src/index.d.ts +21 -10
  36. package/lib/typescript/src/index.d.ts.map +1 -1
  37. package/package.json +15 -18
  38. package/src/NativeVideoTrim.ts +113 -0
  39. package/src/index.tsx +68 -39
  40. package/android/CMakeLists.txt +0 -24
  41. package/android/src/main/cpp/cpp-adapter.cpp +0 -6
  42. package/android/src/main/java/com/margelo/nitro/videotrim/VideoTrim.kt +0 -629
  43. package/android/src/main/java/com/margelo/nitro/videotrim/VideoTrimPackage.kt +0 -22
  44. package/ios/AssetLoader.swift +0 -99
  45. package/ios/ErrorCode.swift +0 -17
  46. package/ios/ProgressAlertController.swift +0 -100
  47. package/ios/VideoTrim.swift +0 -60
  48. package/ios/VideoTrimImpl.swift +0 -860
  49. package/ios/VideoTrimmer.swift +0 -872
  50. package/ios/VideoTrimmerThumb.swift +0 -175
  51. package/ios/VideoTrimmerViewController.swift +0 -557
  52. package/lib/module/VideoTrim.nitro.js +0 -4
  53. package/lib/module/VideoTrim.nitro.js.map +0 -1
  54. package/lib/typescript/src/VideoTrim.nitro.d.ts +0 -240
  55. package/lib/typescript/src/VideoTrim.nitro.d.ts.map +0 -1
  56. package/nitrogen/generated/android/c++/JEditorConfig.hpp +0 -229
  57. package/nitrogen/generated/android/c++/JFileValidationResult.hpp +0 -61
  58. package/nitrogen/generated/android/c++/JFunc_void.hpp +0 -74
  59. package/nitrogen/generated/android/c++/JFunc_void_std__string_std__unordered_map_std__string__std__string_.hpp +0 -89
  60. package/nitrogen/generated/android/c++/JHybridVideoTrimSpec.cpp +0 -131
  61. package/nitrogen/generated/android/c++/JHybridVideoTrimSpec.hpp +0 -67
  62. package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/EditorConfig.kt +0 -70
  63. package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/FileValidationResult.kt +0 -28
  64. package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/Func_void.kt +0 -80
  65. package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/Func_void_std__string_std__unordered_map_std__string__std__string_.kt +0 -80
  66. package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/HybridVideoTrimSpec.kt +0 -82
  67. package/nitrogen/generated/android/kotlin/com/margelo/nitro/videotrim/videotrimOnLoad.kt +0 -35
  68. package/nitrogen/generated/android/videotrim+autolinking.cmake +0 -78
  69. package/nitrogen/generated/android/videotrim+autolinking.gradle +0 -27
  70. package/nitrogen/generated/android/videotrimOnLoad.cpp +0 -50
  71. package/nitrogen/generated/android/videotrimOnLoad.hpp +0 -25
  72. package/nitrogen/generated/ios/VideoTrim+autolinking.rb +0 -60
  73. package/nitrogen/generated/ios/VideoTrim-Swift-Cxx-Bridge.cpp +0 -88
  74. package/nitrogen/generated/ios/VideoTrim-Swift-Cxx-Bridge.hpp +0 -331
  75. package/nitrogen/generated/ios/VideoTrim-Swift-Cxx-Umbrella.hpp +0 -53
  76. package/nitrogen/generated/ios/VideoTrimAutolinking.mm +0 -33
  77. package/nitrogen/generated/ios/VideoTrimAutolinking.swift +0 -25
  78. package/nitrogen/generated/ios/c++/HybridVideoTrimSpecSwift.cpp +0 -11
  79. package/nitrogen/generated/ios/c++/HybridVideoTrimSpecSwift.hpp +0 -116
  80. package/nitrogen/generated/ios/swift/EditorConfig.swift +0 -519
  81. package/nitrogen/generated/ios/swift/FileValidationResult.swift +0 -57
  82. package/nitrogen/generated/ios/swift/Func_void.swift +0 -46
  83. package/nitrogen/generated/ios/swift/Func_void_FileValidationResult.swift +0 -46
  84. package/nitrogen/generated/ios/swift/Func_void_bool.swift +0 -46
  85. package/nitrogen/generated/ios/swift/Func_void_double.swift +0 -46
  86. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +0 -46
  87. package/nitrogen/generated/ios/swift/Func_void_std__string_std__unordered_map_std__string__std__string_.swift +0 -54
  88. package/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift +0 -46
  89. package/nitrogen/generated/ios/swift/HybridVideoTrimSpec.swift +0 -53
  90. package/nitrogen/generated/ios/swift/HybridVideoTrimSpec_cxx.swift +0 -222
  91. package/nitrogen/generated/shared/c++/EditorConfig.hpp +0 -245
  92. package/nitrogen/generated/shared/c++/FileValidationResult.hpp +0 -77
  93. package/nitrogen/generated/shared/c++/HybridVideoTrimSpec.cpp +0 -26
  94. package/nitrogen/generated/shared/c++/HybridVideoTrimSpec.hpp +0 -76
  95. package/src/VideoTrim.nitro.ts +0 -244
@@ -1,15 +1,31 @@
1
1
  "use strict";
2
2
 
3
- import { NitroModules } from 'react-native-nitro-modules';
3
+ import VideoTrim from "./NativeVideoTrim.js";
4
4
  import { processColor } from 'react-native';
5
- const VideoTrimHybridObject = NitroModules.createHybridObject('VideoTrim');
5
+ export * from "./NativeVideoTrim.js";
6
+ function createBaseOptions(overrides = {}) {
7
+ return {
8
+ saveToPhoto: false,
9
+ type: 'video',
10
+ outputExt: 'mp4',
11
+ openDocumentsOnFinish: false,
12
+ openShareSheetOnFinish: false,
13
+ removeAfterSavedToPhoto: false,
14
+ removeAfterFailedToSavePhoto: false,
15
+ removeAfterSavedToDocuments: false,
16
+ removeAfterFailedToSaveDocuments: false,
17
+ removeAfterShared: false,
18
+ removeAfterFailedToShare: false,
19
+ enableRotation: false,
20
+ rotationAngle: 0,
21
+ ...overrides
22
+ };
23
+ }
6
24
  function createEditorConfig(overrides = {}) {
7
25
  return {
8
26
  enableHapticFeedback: true,
9
- saveToPhoto: false,
10
27
  maxDuration: -1,
11
- // Adjust default as needed
12
- minDuration: 1000,
28
+ minDuration: -1,
13
29
  cancelButtonText: 'Cancel',
14
30
  saveButtonText: 'Save',
15
31
  enableCancelDialog: true,
@@ -24,18 +40,7 @@ function createEditorConfig(overrides = {}) {
24
40
  saveDialogConfirmText: 'Proceed',
25
41
  trimmingText: 'Trimming video...',
26
42
  fullScreenModalIOS: false,
27
- type: 'video',
28
- outputExt: 'mp4',
29
- openDocumentsOnFinish: false,
30
- openShareSheetOnFinish: false,
31
- removeAfterSavedToPhoto: false,
32
- removeAfterFailedToSavePhoto: false,
33
- removeAfterSavedToDocuments: false,
34
- removeAfterFailedToSaveDocuments: false,
35
- removeAfterShared: false,
36
- removeAfterFailedToShare: false,
37
43
  autoplay: false,
38
- // Adjust default as needed
39
44
  jumpToPositionOnLoad: -1,
40
45
  closeWhenFinish: true,
41
46
  enableCancelTrimming: true,
@@ -46,80 +51,100 @@ function createEditorConfig(overrides = {}) {
46
51
  cancelTrimmingDialogCancelText: 'Close',
47
52
  cancelTrimmingDialogConfirmText: 'Proceed',
48
53
  headerText: '',
49
- // Adjust default as needed
50
54
  headerTextSize: 16,
51
55
  headerTextColor: processColor('white'),
52
56
  alertOnFailToLoad: true,
53
57
  alertOnFailTitle: 'Error',
54
58
  alertOnFailMessage: 'Fail to load media. Possibly invalid file or no network connection',
55
59
  alertOnFailCloseText: 'Close',
60
+ ...createBaseOptions(overrides),
61
+ ...overrides
62
+ };
63
+ }
64
+ function createTrimOptions(overrides = {}) {
65
+ return {
66
+ startTime: 0,
67
+ endTime: 1000,
68
+ ...createBaseOptions(overrides),
56
69
  ...overrides
57
70
  };
58
71
  }
59
- function noop() {}
60
72
 
61
73
  /**
62
- * Delete a file
74
+ * Show video editor
63
75
  *
64
- * @param {string} videoPath: absolute non-empty file path to edit
76
+ * @param {string} filePath: absolute non-empty file path to edit
65
77
  * @param {EditorConfig} config: editor configuration
66
- * @returns {void} A **Promise** which resolves `void`
78
+ * @param {Function} onEvent: event callback
79
+ * @returns {void}
67
80
  */
68
- export function showEditor(filePath, config, onEvent) {
81
+ export function showEditor(filePath, config) {
69
82
  const {
70
83
  headerTextColor
71
84
  } = config;
72
85
  const color = processColor(headerTextColor || 'white');
73
- VideoTrimHybridObject.showEditor(filePath, createEditorConfig({
86
+ VideoTrim.showEditor(filePath, createEditorConfig({
74
87
  ...config,
75
88
  headerTextColor: color
76
- }), onEvent || noop);
89
+ }));
77
90
  }
78
91
 
79
92
  /**
80
- * Clean output files generated at all time
93
+ * List output files generated at all time
81
94
  *
82
95
  * @returns {Promise<string[]>} A **Promise** which resolves to array of files
83
96
  */
84
97
  export function listFiles() {
85
- return VideoTrimHybridObject.listFiles();
98
+ return VideoTrim.listFiles();
86
99
  }
87
100
 
88
101
  /**
89
102
  * Clean output files generated at all time
90
103
  *
91
- * @returns {Promise} A **Promise** which resolves to number of deleted files
104
+ * @returns {Promise<number>} A **Promise** which resolves to number of deleted files
92
105
  */
93
106
  export function cleanFiles() {
94
- return VideoTrimHybridObject.cleanFiles();
107
+ return VideoTrim.cleanFiles();
95
108
  }
96
109
 
97
110
  /**
98
111
  * Delete a file
99
112
  *
100
113
  * @param {string} filePath: absolute non-empty file path to delete
101
- * @returns {Promise} A **Promise** which resolves `true` if successful
114
+ * @returns {Promise<boolean>} A **Promise** which resolves `true` if successful
102
115
  */
103
116
  export function deleteFile(filePath) {
104
117
  if (!filePath?.trim().length) {
105
118
  throw new Error('File path cannot be empty!');
106
119
  }
107
- return VideoTrimHybridObject.deleteFile(filePath);
120
+ return VideoTrim.deleteFile(filePath);
108
121
  }
109
122
 
110
123
  /**
111
124
  * Close editor
112
125
  */
113
- export function closeEditor(onComplete) {
114
- return VideoTrimHybridObject.closeEditor(onComplete || noop);
126
+ export function closeEditor() {
127
+ return VideoTrim.closeEditor();
115
128
  }
116
129
 
117
130
  /**
118
131
  * Check if a file is valid audio or video file
119
132
  *
120
- * @returns {Promise} A **Promise** which resolves file info if successful
133
+ * @param {string} url: file path to validate
134
+ * @returns {Promise<FileValidationResult>} A **Promise** which resolves file info if successful
121
135
  */
122
136
  export function isValidFile(url) {
123
- return VideoTrimHybridObject.isValidFile(url);
137
+ return VideoTrim.isValidFile(url);
138
+ }
139
+
140
+ /**
141
+ * Trim a video file
142
+ *
143
+ * @param {string} url: absolute non-empty file path to edit
144
+ * @param {TrimOptions} options: trim options
145
+ * @returns {Promise<string>} A **Promise** which resolves to the trimmed file path
146
+ */
147
+ export function trim(url, options) {
148
+ return VideoTrim.trim(url, createTrimOptions(options));
124
149
  }
125
150
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["NitroModules","processColor","VideoTrimHybridObject","createHybridObject","createEditorConfig","overrides","enableHapticFeedback","saveToPhoto","maxDuration","minDuration","cancelButtonText","saveButtonText","enableCancelDialog","cancelDialogTitle","cancelDialogMessage","cancelDialogCancelText","cancelDialogConfirmText","enableSaveDialog","saveDialogTitle","saveDialogMessage","saveDialogCancelText","saveDialogConfirmText","trimmingText","fullScreenModalIOS","type","outputExt","openDocumentsOnFinish","openShareSheetOnFinish","removeAfterSavedToPhoto","removeAfterFailedToSavePhoto","removeAfterSavedToDocuments","removeAfterFailedToSaveDocuments","removeAfterShared","removeAfterFailedToShare","autoplay","jumpToPositionOnLoad","closeWhenFinish","enableCancelTrimming","cancelTrimmingButtonText","enableCancelTrimmingDialog","cancelTrimmingDialogTitle","cancelTrimmingDialogMessage","cancelTrimmingDialogCancelText","cancelTrimmingDialogConfirmText","headerText","headerTextSize","headerTextColor","alertOnFailToLoad","alertOnFailTitle","alertOnFailMessage","alertOnFailCloseText","noop","showEditor","filePath","config","onEvent","color","listFiles","cleanFiles","deleteFile","trim","length","Error","closeEditor","onComplete","isValidFile","url"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["VideoTrim","processColor","createBaseOptions","overrides","saveToPhoto","type","outputExt","openDocumentsOnFinish","openShareSheetOnFinish","removeAfterSavedToPhoto","removeAfterFailedToSavePhoto","removeAfterSavedToDocuments","removeAfterFailedToSaveDocuments","removeAfterShared","removeAfterFailedToShare","enableRotation","rotationAngle","createEditorConfig","enableHapticFeedback","maxDuration","minDuration","cancelButtonText","saveButtonText","enableCancelDialog","cancelDialogTitle","cancelDialogMessage","cancelDialogCancelText","cancelDialogConfirmText","enableSaveDialog","saveDialogTitle","saveDialogMessage","saveDialogCancelText","saveDialogConfirmText","trimmingText","fullScreenModalIOS","autoplay","jumpToPositionOnLoad","closeWhenFinish","enableCancelTrimming","cancelTrimmingButtonText","enableCancelTrimmingDialog","cancelTrimmingDialogTitle","cancelTrimmingDialogMessage","cancelTrimmingDialogCancelText","cancelTrimmingDialogConfirmText","headerText","headerTextSize","headerTextColor","alertOnFailToLoad","alertOnFailTitle","alertOnFailMessage","alertOnFailCloseText","createTrimOptions","startTime","endTime","showEditor","filePath","config","color","listFiles","cleanFiles","deleteFile","trim","length","Error","closeEditor","isValidFile","url","options"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,107 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import type { EventEmitter } from 'react-native/Libraries/Types/CodegenTypes';
3
+ export interface BaseOptions {
4
+ saveToPhoto: boolean;
5
+ type: string;
6
+ outputExt: string;
7
+ openDocumentsOnFinish: boolean;
8
+ openShareSheetOnFinish: boolean;
9
+ removeAfterSavedToPhoto: boolean;
10
+ removeAfterFailedToSavePhoto: boolean;
11
+ removeAfterSavedToDocuments: boolean;
12
+ removeAfterFailedToSaveDocuments: boolean;
13
+ removeAfterShared: boolean;
14
+ removeAfterFailedToShare: boolean;
15
+ enableRotation: boolean;
16
+ rotationAngle: number;
17
+ }
18
+ export interface EditorConfig extends BaseOptions {
19
+ enableHapticFeedback: boolean;
20
+ maxDuration: number;
21
+ minDuration: number;
22
+ cancelButtonText: string;
23
+ saveButtonText: string;
24
+ enableCancelDialog: boolean;
25
+ cancelDialogTitle: string;
26
+ cancelDialogMessage: string;
27
+ cancelDialogCancelText: string;
28
+ cancelDialogConfirmText: string;
29
+ enableSaveDialog: boolean;
30
+ saveDialogTitle: string;
31
+ saveDialogMessage: string;
32
+ saveDialogCancelText: string;
33
+ saveDialogConfirmText: string;
34
+ trimmingText: string;
35
+ fullScreenModalIOS: boolean;
36
+ autoplay: boolean;
37
+ jumpToPositionOnLoad: number;
38
+ closeWhenFinish: boolean;
39
+ enableCancelTrimming: boolean;
40
+ cancelTrimmingButtonText: string;
41
+ enableCancelTrimmingDialog: boolean;
42
+ cancelTrimmingDialogTitle: string;
43
+ cancelTrimmingDialogMessage: string;
44
+ cancelTrimmingDialogCancelText: string;
45
+ cancelTrimmingDialogConfirmText: string;
46
+ headerText: string;
47
+ headerTextSize: number;
48
+ headerTextColor: number;
49
+ alertOnFailToLoad: boolean;
50
+ alertOnFailTitle: string;
51
+ alertOnFailMessage: string;
52
+ alertOnFailCloseText: string;
53
+ }
54
+ export interface TrimOptions extends BaseOptions {
55
+ startTime: number;
56
+ endTime: number;
57
+ }
58
+ export interface FileValidationResult {
59
+ isValid: boolean;
60
+ fileType: string;
61
+ duration: number;
62
+ }
63
+ export interface Spec extends TurboModule {
64
+ showEditor(filePath: string, config: EditorConfig): void;
65
+ listFiles(): Promise<string[]>;
66
+ cleanFiles(): Promise<number>;
67
+ deleteFile(filePath: string): Promise<boolean>;
68
+ closeEditor(): void;
69
+ isValidFile(url: string): Promise<FileValidationResult>;
70
+ trim(url: string, options: TrimOptions): Promise<string>;
71
+ readonly onStartTrimming: EventEmitter<void>;
72
+ readonly onCancelTrimming: EventEmitter<void>;
73
+ readonly onCancel: EventEmitter<void>;
74
+ readonly onHide: EventEmitter<void>;
75
+ readonly onShow: EventEmitter<void>;
76
+ readonly onFinishTrimming: EventEmitter<{
77
+ outputPath: string;
78
+ startTime: number;
79
+ endTime: number;
80
+ duration: number;
81
+ }>;
82
+ readonly onLog: EventEmitter<{
83
+ level: string;
84
+ message: string;
85
+ sessionId: number;
86
+ }>;
87
+ readonly onStatistics: EventEmitter<{
88
+ sessionId: number;
89
+ videoFrameNumber: number;
90
+ videoFps: number;
91
+ videoQuality: number;
92
+ size: number;
93
+ time: number;
94
+ bitrate: number;
95
+ speed: number;
96
+ }>;
97
+ readonly onError: EventEmitter<{
98
+ message: string;
99
+ errorCode: string;
100
+ }>;
101
+ readonly onLoad: EventEmitter<{
102
+ duration: number;
103
+ }>;
104
+ }
105
+ declare const _default: Spec;
106
+ export default _default;
107
+ //# sourceMappingURL=NativeVideoTrim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeVideoTrim.d.ts","sourceRoot":"","sources":["../../../src/NativeVideoTrim.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,18 @@
1
- import type { EditorConfig, FileValidationResult } from './VideoTrim.nitro';
1
+ import type { EditorConfig, FileValidationResult, TrimOptions } from './NativeVideoTrim';
2
+ export * from './NativeVideoTrim';
2
3
  /**
3
- * Delete a file
4
+ * Show video editor
4
5
  *
5
- * @param {string} videoPath: absolute non-empty file path to edit
6
+ * @param {string} filePath: absolute non-empty file path to edit
6
7
  * @param {EditorConfig} config: editor configuration
7
- * @returns {void} A **Promise** which resolves `void`
8
+ * @param {Function} onEvent: event callback
9
+ * @returns {void}
8
10
  */
9
11
  export declare function showEditor(filePath: string, config: Partial<Omit<EditorConfig, 'headerTextColor'>> & {
10
12
  headerTextColor?: string;
11
- }, onEvent?: (eventName: string, payload: Record<string, string>) => void): void;
13
+ }): void;
12
14
  /**
13
- * Clean output files generated at all time
15
+ * List output files generated at all time
14
16
  *
15
17
  * @returns {Promise<string[]>} A **Promise** which resolves to array of files
16
18
  */
@@ -18,24 +20,33 @@ export declare function listFiles(): Promise<string[]>;
18
20
  /**
19
21
  * Clean output files generated at all time
20
22
  *
21
- * @returns {Promise} A **Promise** which resolves to number of deleted files
23
+ * @returns {Promise<number>} A **Promise** which resolves to number of deleted files
22
24
  */
23
25
  export declare function cleanFiles(): Promise<number>;
24
26
  /**
25
27
  * Delete a file
26
28
  *
27
29
  * @param {string} filePath: absolute non-empty file path to delete
28
- * @returns {Promise} A **Promise** which resolves `true` if successful
30
+ * @returns {Promise<boolean>} A **Promise** which resolves `true` if successful
29
31
  */
30
32
  export declare function deleteFile(filePath: string): Promise<boolean>;
31
33
  /**
32
34
  * Close editor
33
35
  */
34
- export declare function closeEditor(onComplete?: () => void): void;
36
+ export declare function closeEditor(): void;
35
37
  /**
36
38
  * Check if a file is valid audio or video file
37
39
  *
38
- * @returns {Promise} A **Promise** which resolves file info if successful
40
+ * @param {string} url: file path to validate
41
+ * @returns {Promise<FileValidationResult>} A **Promise** which resolves file info if successful
39
42
  */
40
43
  export declare function isValidFile(url: string): Promise<FileValidationResult>;
44
+ /**
45
+ * Trim a video file
46
+ *
47
+ * @param {string} url: absolute non-empty file path to edit
48
+ * @param {TrimOptions} options: trim options
49
+ * @returns {Promise<string>} A **Promise** which resolves to the trimmed file path
50
+ */
51
+ export declare function trim(url: string, options: Partial<TrimOptions>): Promise<string>;
41
52
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EAErB,MAAM,mBAAmB,CAAC;AA8D3B;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,GAAG;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,EACD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,GACrE,IAAI,CAYN;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAE7C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAE5C;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK7D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAEtE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,YAAY,EACZ,oBAAoB,EACpB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAE3B,cAAc,mBAAmB,CAAC;AA0ElC;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,GAAG;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,IAAI,CAWN;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAE7C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAE5C;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK7D;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAEtE;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAClB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CAEjB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-video-trim",
3
- "version": "4.0.0",
3
+ "version": "5.0.0",
4
4
  "description": "Video trimmer for your React Native app",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -18,7 +18,6 @@
18
18
  "android",
19
19
  "ios",
20
20
  "cpp",
21
- "nitrogen",
22
21
  "*.podspec",
23
22
  "react-native.config.js",
24
23
  "!ios/build",
@@ -39,7 +38,6 @@
39
38
  "lint": "eslint \"**/*.{js,ts,tsx}\"",
40
39
  "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
41
40
  "prepare": "bob build",
42
- "nitrogen": "nitro-codegen",
43
41
  "release": "release-it --only-version"
44
42
  },
45
43
  "keywords": [
@@ -66,6 +64,7 @@
66
64
  "@eslint/eslintrc": "^3.3.0",
67
65
  "@eslint/js": "^9.22.0",
68
66
  "@evilmartians/lefthook": "^1.5.0",
67
+ "@react-native-community/cli": "15.0.0-alpha.2",
69
68
  "@react-native/babel-preset": "0.79.2",
70
69
  "@react-native/eslint-config": "^0.78.0",
71
70
  "@release-it/conventional-changelog": "^9.0.2",
@@ -77,20 +76,17 @@
77
76
  "eslint-config-prettier": "^10.1.1",
78
77
  "eslint-plugin-prettier": "^5.2.3",
79
78
  "jest": "^29.7.0",
80
- "nitro-codegen": "^0.25.2",
81
79
  "prettier": "^3.0.3",
82
80
  "react": "19.0.0",
83
81
  "react-native": "0.79.2",
84
- "react-native-builder-bob": "^0.40.11",
85
- "react-native-nitro-modules": "^0.25.2",
82
+ "react-native-builder-bob": "^0.40.8",
86
83
  "release-it": "^17.10.0",
87
84
  "turbo": "^1.10.7",
88
85
  "typescript": "^5.8.3"
89
86
  },
90
87
  "peerDependencies": {
91
88
  "react": "*",
92
- "react-native": "*",
93
- "react-native-nitro-modules": "^0.25.2"
89
+ "react-native": "*"
94
90
  },
95
91
  "workspaces": [
96
92
  "example"
@@ -138,13 +134,6 @@
138
134
  "source": "src",
139
135
  "output": "lib",
140
136
  "targets": [
141
- [
142
- "custom",
143
- {
144
- "script": "nitrogen",
145
- "clean": "nitrogen/"
146
- }
147
- ],
148
137
  [
149
138
  "module",
150
139
  {
@@ -159,9 +148,17 @@
159
148
  ]
160
149
  ]
161
150
  },
151
+ "codegenConfig": {
152
+ "name": "VideoTrimSpec",
153
+ "type": "modules",
154
+ "jsSrcsDir": "src",
155
+ "android": {
156
+ "javaPackageName": "com.videotrim"
157
+ }
158
+ },
162
159
  "create-react-native-library": {
163
- "languages": "kotlin-swift",
164
- "type": "nitro-module",
165
- "version": "0.50.3"
160
+ "languages": "kotlin-objc",
161
+ "type": "turbo-module",
162
+ "version": "0.51.0"
166
163
  }
167
164
  }
@@ -0,0 +1,113 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import { TurboModuleRegistry } from 'react-native';
3
+ import type { EventEmitter } from 'react-native/Libraries/Types/CodegenTypes';
4
+
5
+ export interface BaseOptions {
6
+ saveToPhoto: boolean;
7
+ type: string;
8
+ outputExt: string;
9
+ openDocumentsOnFinish: boolean;
10
+ openShareSheetOnFinish: boolean;
11
+ removeAfterSavedToPhoto: boolean;
12
+ removeAfterFailedToSavePhoto: boolean;
13
+ removeAfterSavedToDocuments: boolean;
14
+ removeAfterFailedToSaveDocuments: boolean;
15
+ removeAfterShared: boolean;
16
+ removeAfterFailedToShare: boolean;
17
+ enableRotation: boolean;
18
+ rotationAngle: number;
19
+ }
20
+
21
+ export interface EditorConfig extends BaseOptions {
22
+ enableHapticFeedback: boolean;
23
+ maxDuration: number;
24
+ minDuration: number;
25
+ cancelButtonText: string;
26
+ saveButtonText: string;
27
+ enableCancelDialog: boolean;
28
+ cancelDialogTitle: string;
29
+ cancelDialogMessage: string;
30
+ cancelDialogCancelText: string;
31
+ cancelDialogConfirmText: string;
32
+ enableSaveDialog: boolean;
33
+ saveDialogTitle: string;
34
+ saveDialogMessage: string;
35
+ saveDialogCancelText: string;
36
+ saveDialogConfirmText: string;
37
+ trimmingText: string;
38
+ fullScreenModalIOS: boolean;
39
+ autoplay: boolean;
40
+ jumpToPositionOnLoad: number;
41
+ closeWhenFinish: boolean;
42
+ enableCancelTrimming: boolean;
43
+ cancelTrimmingButtonText: string;
44
+ enableCancelTrimmingDialog: boolean;
45
+ cancelTrimmingDialogTitle: string;
46
+ cancelTrimmingDialogMessage: string;
47
+ cancelTrimmingDialogCancelText: string;
48
+ cancelTrimmingDialogConfirmText: string;
49
+ headerText: string;
50
+ headerTextSize: number;
51
+ headerTextColor: number;
52
+ alertOnFailToLoad: boolean;
53
+ alertOnFailTitle: string;
54
+ alertOnFailMessage: string;
55
+ alertOnFailCloseText: string;
56
+ }
57
+
58
+ export interface TrimOptions extends BaseOptions {
59
+ startTime: number;
60
+ endTime: number;
61
+ }
62
+
63
+ export interface FileValidationResult {
64
+ isValid: boolean;
65
+ fileType: string;
66
+ duration: number;
67
+ }
68
+
69
+ export interface Spec extends TurboModule {
70
+ showEditor(filePath: string, config: EditorConfig): void;
71
+ listFiles(): Promise<string[]>;
72
+ cleanFiles(): Promise<number>;
73
+ deleteFile(filePath: string): Promise<boolean>;
74
+ closeEditor(): void;
75
+ isValidFile(url: string): Promise<FileValidationResult>;
76
+ trim(url: string, options: TrimOptions): Promise<string>;
77
+
78
+ readonly onStartTrimming: EventEmitter<void>;
79
+ readonly onCancelTrimming: EventEmitter<void>;
80
+ readonly onCancel: EventEmitter<void>;
81
+ readonly onHide: EventEmitter<void>;
82
+ readonly onShow: EventEmitter<void>;
83
+ readonly onFinishTrimming: EventEmitter<{
84
+ outputPath: string;
85
+ startTime: number;
86
+ endTime: number;
87
+ duration: number;
88
+ }>;
89
+ readonly onLog: EventEmitter<{
90
+ level: string;
91
+ message: string;
92
+ sessionId: number;
93
+ }>;
94
+ readonly onStatistics: EventEmitter<{
95
+ sessionId: number;
96
+ videoFrameNumber: number;
97
+ videoFps: number;
98
+ videoQuality: number;
99
+ size: number;
100
+ time: number;
101
+ bitrate: number;
102
+ speed: number;
103
+ }>;
104
+ readonly onError: EventEmitter<{
105
+ message: string;
106
+ errorCode: string;
107
+ }>;
108
+ readonly onLoad: EventEmitter<{
109
+ duration: number;
110
+ }>;
111
+ }
112
+
113
+ export default TurboModuleRegistry.getEnforcing<Spec>('VideoTrim');