react-native-nitro-unzip 0.2.1 → 0.2.2

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.
@@ -49,14 +49,11 @@ class HybridUnzipTask(
49
49
  }
50
50
 
51
51
  override fun await(): Promise<UnzipResult> {
52
- return Promise.async { resolve, reject ->
52
+ return Promise.async {
53
53
  try {
54
- val result = if (password != null) extractWithPassword() else extract()
55
- resolve(result)
54
+ if (password != null) extractWithPassword() else extract()
56
55
  } catch (e: CancellationException) {
57
- reject(Exception("Extraction cancelled"))
58
- } catch (e: Exception) {
59
- reject(e)
56
+ throw Exception("Extraction cancelled")
60
57
  }
61
58
  }
62
59
  }
@@ -46,14 +46,11 @@ class HybridZipTask(
46
46
  }
47
47
 
48
48
  override fun await(): Promise<ZipResult> {
49
- return Promise.async { resolve, reject ->
49
+ return Promise.async {
50
50
  try {
51
- val result = compress()
52
- resolve(result)
51
+ compress()
53
52
  } catch (e: CancellationException) {
54
- reject(Exception("Zip creation cancelled"))
55
- } catch (e: Exception) {
56
- reject(e)
53
+ throw Exception("Zip creation cancelled")
57
54
  }
58
55
  }
59
56
  }
@@ -30,10 +30,6 @@ class HybridUnzipTask: HybridUnzipTaskSpec {
30
30
  private var backgroundTaskId: UIBackgroundTaskIdentifier = .invalid
31
31
  private let lock = NSLock()
32
32
  private let progressThrottle: TimeInterval = 1.0
33
-
34
- // Promise resolution — held until extraction completes or fails
35
- private var resolvePromise: ((UnzipResult) -> Void)?
36
- private var rejectPromise: ((Error) -> Void)?
37
33
  private var hasStarted = false
38
34
 
39
35
  init(zipPath: String, destinationPath: String, password: String? = nil) {
@@ -59,45 +55,38 @@ class HybridUnzipTask: HybridUnzipTaskSpec {
59
55
  }
60
56
 
61
57
  func await() throws -> Promise<UnzipResult> {
62
- return Promise.async { [self] resolve, reject in
63
- self.lock.lock()
64
- self.resolvePromise = resolve
65
- self.rejectPromise = reject
58
+ lock.lock()
59
+ guard !hasStarted else {
60
+ lock.unlock()
61
+ return Promise.rejected(withError: NSError(
62
+ domain: "NitroUnzip",
63
+ code: 4,
64
+ userInfo: [NSLocalizedDescriptionKey: "Task already started"]
65
+ ))
66
+ }
67
+ hasStarted = true
68
+ lock.unlock()
66
69
 
67
- guard !self.hasStarted else {
68
- self.lock.unlock()
69
- return
70
+ return Promise.async {
71
+ try await withCheckedThrowingContinuation { continuation in
72
+ self.beginBackgroundTask()
73
+
74
+ DispatchQueue.global(qos: .userInitiated).async {
75
+ do {
76
+ let result = try self.extract()
77
+ self.endBackgroundTask()
78
+ continuation.resume(returning: result)
79
+ } catch {
80
+ self.endBackgroundTask()
81
+ continuation.resume(throwing: error)
82
+ }
83
+ }
70
84
  }
71
- self.hasStarted = true
72
- self.lock.unlock()
73
-
74
- self.startExtraction()
75
85
  }
76
86
  }
77
87
 
78
88
  // MARK: - Extraction
79
89
 
80
- private func startExtraction() {
81
- beginBackgroundTask()
82
-
83
- DispatchQueue.global(qos: .userInitiated).async { [self] in
84
- do {
85
- let result = try self.extract()
86
- self.endBackgroundTask()
87
- self.lock.lock()
88
- let resolve = self.resolvePromise
89
- self.lock.unlock()
90
- resolve?(result)
91
- } catch {
92
- self.endBackgroundTask()
93
- self.lock.lock()
94
- let reject = self.rejectPromise
95
- self.lock.unlock()
96
- reject?(error)
97
- }
98
- }
99
- }
100
-
101
90
  private func extract() throws -> UnzipResult {
102
91
  let startTime = Date()
103
92
  let fileManager = FileManager.default
@@ -199,7 +188,7 @@ class HybridUnzipTask: HybridUnzipTaskSpec {
199
188
  let finalCount = extractedFiles
200
189
  let averageSpeed = duration > 0 ? Double(finalCount) / (duration / 1000) : 0
201
190
 
202
- // Calculate total bytes from extracted files
191
+ // Calculate total bytes from zip file size
203
192
  let totalBytes: Double
204
193
  if let attrs = try? fileManager.attributesOfItem(atPath: cleanZip),
205
194
  let fileSize = attrs[.size] as? UInt64 {
@@ -24,9 +24,6 @@ class HybridZipTask: HybridZipTaskSpec {
24
24
  private var backgroundTaskId: UIBackgroundTaskIdentifier = .invalid
25
25
  private let lock = NSLock()
26
26
  private let progressThrottle: TimeInterval = 1.0
27
-
28
- private var resolvePromise: ((ZipResult) -> Void)?
29
- private var rejectPromise: ((Error) -> Void)?
30
27
  private var hasStarted = false
31
28
 
32
29
  init(sourcePath: String, destinationZipPath: String, password: String? = nil) {
@@ -52,45 +49,38 @@ class HybridZipTask: HybridZipTaskSpec {
52
49
  }
53
50
 
54
51
  func await() throws -> Promise<ZipResult> {
55
- return Promise.async { [self] resolve, reject in
56
- self.lock.lock()
57
- self.resolvePromise = resolve
58
- self.rejectPromise = reject
59
-
60
- guard !self.hasStarted else {
61
- self.lock.unlock()
62
- return
63
- }
64
- self.hasStarted = true
65
- self.lock.unlock()
66
-
67
- self.startCompression()
52
+ lock.lock()
53
+ guard !hasStarted else {
54
+ lock.unlock()
55
+ return Promise.rejected(withError: NSError(
56
+ domain: "NitroUnzip",
57
+ code: 4,
58
+ userInfo: [NSLocalizedDescriptionKey: "Task already started"]
59
+ ))
68
60
  }
69
- }
70
-
71
- // MARK: - Compression
61
+ hasStarted = true
62
+ lock.unlock()
72
63
 
73
- private func startCompression() {
74
- beginBackgroundTask()
75
-
76
- DispatchQueue.global(qos: .userInitiated).async { [self] in
77
- do {
78
- let result = try self.compress()
79
- self.endBackgroundTask()
80
- self.lock.lock()
81
- let resolve = self.resolvePromise
82
- self.lock.unlock()
83
- resolve?(result)
84
- } catch {
85
- self.endBackgroundTask()
86
- self.lock.lock()
87
- let reject = self.rejectPromise
88
- self.lock.unlock()
89
- reject?(error)
64
+ return Promise.async {
65
+ try await withCheckedThrowingContinuation { continuation in
66
+ self.beginBackgroundTask()
67
+
68
+ DispatchQueue.global(qos: .userInitiated).async {
69
+ do {
70
+ let result = try self.compress()
71
+ self.endBackgroundTask()
72
+ continuation.resume(returning: result)
73
+ } catch {
74
+ self.endBackgroundTask()
75
+ continuation.resume(throwing: error)
76
+ }
77
+ }
90
78
  }
91
79
  }
92
80
  }
93
81
 
82
+ // MARK: - Compression
83
+
94
84
  private func compress() throws -> ZipResult {
95
85
  let startTime = Date()
96
86
  let fileManager = FileManager.default
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-nitro-unzip",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "High-performance ZIP extraction for React Native, powered by Nitro Modules",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",