react-native-nitro-unzip 0.2.0 → 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
  }
@@ -12,8 +12,6 @@ import NitroModules
12
12
  * ```
13
13
  */
14
14
  class HybridUnzip: HybridUnzipSpec {
15
- var hybridContext = margelo.nitro.HybridContext()
16
- var memorySize: Int { return getSizeOf(self) }
17
15
 
18
16
  func extract(zipPath: String, destinationPath: String) throws -> any HybridUnzipTaskSpec {
19
17
  return HybridUnzipTask(zipPath: zipPath, destinationPath: destinationPath)
@@ -16,11 +16,6 @@ import UIKit
16
16
  * - Background task support for continued extraction when app is backgrounded
17
17
  */
18
18
  class HybridUnzipTask: HybridUnzipTaskSpec {
19
- // MARK: - HybridObject requirements
20
-
21
- var hybridContext = margelo.nitro.HybridContext()
22
- var memorySize: Int { return getSizeOf(self) }
23
-
24
19
  // MARK: - Spec properties
25
20
 
26
21
  let taskId: String
@@ -35,10 +30,6 @@ class HybridUnzipTask: HybridUnzipTaskSpec {
35
30
  private var backgroundTaskId: UIBackgroundTaskIdentifier = .invalid
36
31
  private let lock = NSLock()
37
32
  private let progressThrottle: TimeInterval = 1.0
38
-
39
- // Promise resolution — held until extraction completes or fails
40
- private var resolvePromise: ((UnzipResult) -> Void)?
41
- private var rejectPromise: ((Error) -> Void)?
42
33
  private var hasStarted = false
43
34
 
44
35
  init(zipPath: String, destinationPath: String, password: String? = nil) {
@@ -64,45 +55,38 @@ class HybridUnzipTask: HybridUnzipTaskSpec {
64
55
  }
65
56
 
66
57
  func await() throws -> Promise<UnzipResult> {
67
- return Promise.async { [self] resolve, reject in
68
- self.lock.lock()
69
- self.resolvePromise = resolve
70
- 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()
71
69
 
72
- guard !self.hasStarted else {
73
- self.lock.unlock()
74
- 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
+ }
75
84
  }
76
- self.hasStarted = true
77
- self.lock.unlock()
78
-
79
- self.startExtraction()
80
85
  }
81
86
  }
82
87
 
83
88
  // MARK: - Extraction
84
89
 
85
- private func startExtraction() {
86
- beginBackgroundTask()
87
-
88
- DispatchQueue.global(qos: .userInitiated).async { [self] in
89
- do {
90
- let result = try self.extract()
91
- self.endBackgroundTask()
92
- self.lock.lock()
93
- let resolve = self.resolvePromise
94
- self.lock.unlock()
95
- resolve?(result)
96
- } catch {
97
- self.endBackgroundTask()
98
- self.lock.lock()
99
- let reject = self.rejectPromise
100
- self.lock.unlock()
101
- reject?(error)
102
- }
103
- }
104
- }
105
-
106
90
  private func extract() throws -> UnzipResult {
107
91
  let startTime = Date()
108
92
  let fileManager = FileManager.default
@@ -204,7 +188,7 @@ class HybridUnzipTask: HybridUnzipTaskSpec {
204
188
  let finalCount = extractedFiles
205
189
  let averageSpeed = duration > 0 ? Double(finalCount) / (duration / 1000) : 0
206
190
 
207
- // Calculate total bytes from extracted files
191
+ // Calculate total bytes from zip file size
208
192
  let totalBytes: Double
209
193
  if let attrs = try? fileManager.attributesOfItem(atPath: cleanZip),
210
194
  let fileSize = attrs[.size] as? UInt64 {
@@ -10,11 +10,6 @@ import UIKit
10
10
  * The caller can observe progress, cancel, or await the result.
11
11
  */
12
12
  class HybridZipTask: HybridZipTaskSpec {
13
- // MARK: - HybridObject requirements
14
-
15
- var hybridContext = margelo.nitro.HybridContext()
16
- var memorySize: Int { return getSizeOf(self) }
17
-
18
13
  // MARK: - Spec properties
19
14
 
20
15
  let taskId: String
@@ -29,9 +24,6 @@ class HybridZipTask: HybridZipTaskSpec {
29
24
  private var backgroundTaskId: UIBackgroundTaskIdentifier = .invalid
30
25
  private let lock = NSLock()
31
26
  private let progressThrottle: TimeInterval = 1.0
32
-
33
- private var resolvePromise: ((ZipResult) -> Void)?
34
- private var rejectPromise: ((Error) -> Void)?
35
27
  private var hasStarted = false
36
28
 
37
29
  init(sourcePath: String, destinationZipPath: String, password: String? = nil) {
@@ -57,45 +49,38 @@ class HybridZipTask: HybridZipTaskSpec {
57
49
  }
58
50
 
59
51
  func await() throws -> Promise<ZipResult> {
60
- return Promise.async { [self] resolve, reject in
61
- self.lock.lock()
62
- self.resolvePromise = resolve
63
- self.rejectPromise = reject
64
-
65
- guard !self.hasStarted else {
66
- self.lock.unlock()
67
- return
68
- }
69
- self.hasStarted = true
70
- self.lock.unlock()
71
-
72
- 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
+ ))
73
60
  }
74
- }
75
-
76
- // MARK: - Compression
61
+ hasStarted = true
62
+ lock.unlock()
77
63
 
78
- private func startCompression() {
79
- beginBackgroundTask()
80
-
81
- DispatchQueue.global(qos: .userInitiated).async { [self] in
82
- do {
83
- let result = try self.compress()
84
- self.endBackgroundTask()
85
- self.lock.lock()
86
- let resolve = self.resolvePromise
87
- self.lock.unlock()
88
- resolve?(result)
89
- } catch {
90
- self.endBackgroundTask()
91
- self.lock.lock()
92
- let reject = self.rejectPromise
93
- self.lock.unlock()
94
- 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
+ }
95
78
  }
96
79
  }
97
80
  }
98
81
 
82
+ // MARK: - Compression
83
+
99
84
  private func compress() throws -> ZipResult {
100
85
  let startTime = Date()
101
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.0",
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",
@@ -94,10 +94,7 @@
94
94
  "extends": [
95
95
  "@react-native",
96
96
  "prettier"
97
- ],
98
- "rules": {
99
- "prettier/prettier": "warn"
100
- }
97
+ ]
101
98
  },
102
99
  "prettier": {
103
100
  "semi": true,