expo-brownfield 58.0.5 → 58.0.7

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.
package/CHANGELOG.md CHANGED
@@ -10,6 +10,16 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 58.0.7 — 2026-09-25
14
+
15
+ _This version does not introduce any user-facing changes._
16
+
17
+ ## 58.0.6 — 2026-09-23
18
+
19
+ ### 🐛 Bug fixes
20
+
21
+ - [iOS] Fix a data race on reload that could crash the app or stop the delivery of `onKeyRecreated` events and messages. ([#49560](https://github.com/expo/expo/pull/49560) by [@vonovak](https://github.com/vonovak))
22
+
13
23
  ## 58.0.5 — 2026-09-22
14
24
 
15
25
  _This version does not introduce any user-facing changes._
@@ -4,7 +4,7 @@ plugins {
4
4
  }
5
5
 
6
6
  group = 'expo.modules.brownfield'
7
- version = '58.0.5'
7
+ version = '58.0.7'
8
8
 
9
9
  expoModule {
10
10
  canBePublished false
@@ -14,7 +14,7 @@ android {
14
14
  namespace "expo.modules.brownfield"
15
15
  defaultConfig {
16
16
  versionCode 1
17
- versionName '58.0.5'
17
+ versionName '58.0.7'
18
18
  }
19
19
  }
20
20
 
@@ -15,7 +15,7 @@ public class ExpoBrownfieldModule: Module {
15
15
  }
16
16
 
17
17
  OnStopObserving {
18
- BrownfieldMessagingInternal.shared.setExpoModule(nil)
18
+ BrownfieldMessagingInternal.shared.clearExpoModule(self)
19
19
  }
20
20
 
21
21
  Function("popToNative") { (animated: Bool) in
@@ -29,7 +29,7 @@ public class ExpoBrownfieldStateModule: Module {
29
29
  }
30
30
 
31
31
  OnDestroy {
32
- BrownfieldStateInternal.shared.setExpoModule(nil)
32
+ BrownfieldStateInternal.shared.clearExpoModule(self)
33
33
  }
34
34
 
35
35
  Function("getSharedState") { (key: String) -> SharedState in
@@ -8,6 +8,7 @@ public typealias BrownfieldCallback = (BrownfieldMessage) -> Void
8
8
  public class BrownfieldMessagingInternal {
9
9
  public static let shared = BrownfieldMessagingInternal()
10
10
 
11
+ private let lock = NSLock()
11
12
  private var listeners: [String: BrownfieldCallback] = [:]
12
13
  private var expoModule: ExpoBrownfieldModule?
13
14
 
@@ -27,7 +28,11 @@ public class BrownfieldMessagingInternal {
27
28
  }
28
29
 
29
30
  public func sendMessage(_ message: BrownfieldMessage) {
30
- expoModule?.sendMessage(message)
31
+ lock.lock()
32
+ let module = expoModule
33
+ lock.unlock()
34
+
35
+ module?.sendMessage(message)
31
36
  }
32
37
 
33
38
  func emit(_ message: BrownfieldMessage) {
@@ -36,7 +41,17 @@ public class BrownfieldMessagingInternal {
36
41
  }
37
42
  }
38
43
 
39
- func setExpoModule(_ expoModule: ExpoBrownfieldModule?) {
44
+ func setExpoModule(_ expoModule: ExpoBrownfieldModule) {
45
+ lock.lock()
40
46
  self.expoModule = expoModule
47
+ lock.unlock()
48
+ }
49
+
50
+ func clearExpoModule(_ expoModule: ExpoBrownfieldModule) {
51
+ lock.lock()
52
+ if self.expoModule === expoModule {
53
+ self.expoModule = nil
54
+ }
55
+ lock.unlock()
41
56
  }
42
57
  }
package/ios/State.swift CHANGED
@@ -78,19 +78,32 @@ public final class BrownfieldStateInternal {
78
78
  }
79
79
 
80
80
  public func maybeNotifyKeyRecreated(_ key: String) {
81
- lock.lock()
82
- if !deletedKeys.contains(key) {
83
- lock.unlock()
84
- return
81
+ let module: ExpoBrownfieldStateModule?
82
+ do {
83
+ lock.lock()
84
+ defer { lock.unlock() }
85
+ if !deletedKeys.contains(key) {
86
+ return
87
+ }
88
+ deletedKeys.remove(key)
89
+ module = expoModule
85
90
  }
86
- deletedKeys.remove(key)
87
- lock.unlock()
88
91
 
89
- expoModule?.notifyKeyRecreated(key)
92
+ module?.notifyKeyRecreated(key)
90
93
  }
91
94
 
92
- public func setExpoModule(_ expoModule: ExpoBrownfieldStateModule?) {
95
+ public func setExpoModule(_ expoModule: ExpoBrownfieldStateModule) {
96
+ lock.lock()
93
97
  self.expoModule = expoModule
98
+ lock.unlock()
99
+ }
100
+
101
+ public func clearExpoModule(_ expoModule: ExpoBrownfieldStateModule) {
102
+ lock.lock()
103
+ if self.expoModule === expoModule {
104
+ self.expoModule = nil
105
+ }
106
+ lock.unlock()
94
107
  }
95
108
 
96
109
  public func notifySubscribers(_ key: String, _ value: Any?) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-brownfield",
3
- "version": "58.0.5",
3
+ "version": "58.0.7",
4
4
  "description": "Toolkit and APIs for adding brownfield setup to Expo projects",
5
5
  "keywords": [
6
6
  "brownfield",
@@ -43,7 +43,7 @@
43
43
  "chalk": "^4.1.2",
44
44
  "commander": "^14.0.3",
45
45
  "diff": "^5.2.0",
46
- "expo-build-properties": "~58.0.5",
46
+ "expo-build-properties": "~58.0.7",
47
47
  "expo-manifests": "~58.0.0",
48
48
  "ora": "^5.4.1",
49
49
  "prompts": "^2.4.2"
@@ -55,8 +55,8 @@
55
55
  "@types/node": "^22.14.0",
56
56
  "@types/prompts": "^2.0.6",
57
57
  "@types/react": "~19.3.0",
58
- "create-expo": "5.1.2",
59
- "expo": "58.0.0-preview.5",
58
+ "create-expo": "5.1.3",
59
+ "expo": "58.0.0-preview.7",
60
60
  "expo-module-scripts": "56.0.3",
61
61
  "glob": "^13.0.6"
62
62
  },
@@ -65,7 +65,7 @@
65
65
  "react": "*",
66
66
  "react-native": "*"
67
67
  },
68
- "gitHead": "add8cbf49f477cfd2283ae05af35b4713a773c55",
68
+ "gitHead": "ad41d067bd3df6dd12f1788acc6b54a68e7a650d",
69
69
  "scripts": {
70
70
  "precompile-ios": "et prebuild-package-for-publish",
71
71
  "build": "pnpm run build:lib && pnpm run build:plugin && pnpm run build:cli",