@callstack/brownie 0.0.1 → 0.0.3
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 +19 -0
- package/README.md +63 -0
- package/cpp/BrownieHostObject.cpp +52 -0
- package/cpp/BrownieHostObject.h +26 -0
- package/cpp/BrownieInstaller.cpp +31 -0
- package/cpp/BrownieInstaller.h +12 -0
- package/cpp/BrownieStore.cpp +53 -0
- package/cpp/BrownieStore.h +30 -0
- package/cpp/BrownieStoreManager.cpp +31 -0
- package/cpp/BrownieStoreManager.h +26 -0
- package/lib/commonjs/index.js +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/package.json +9 -4
- package/src/index.ts +10 -2
- package/ios/Generated/BrownfieldStore.swift +0 -42
- package/ios/Generated/SettingsStore.swift +0 -33
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# @callstack/brownie
|
|
2
|
+
|
|
3
|
+
## 0.0.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [[`2a8563f`](https://github.com/callstack/react-native-brownfield/commit/2a8563f65ed152054ad1290caf963791a368ee9a)]:
|
|
8
|
+
- @callstack/brownfield-cli@1.0.2
|
|
9
|
+
|
|
10
|
+
## 0.0.2
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- [#197](https://github.com/callstack/react-native-brownfield/pull/197) [`af95d9c`](https://github.com/callstack/react-native-brownfield/commit/af95d9ce3b380f4bd4cc554de31fa4acff030515) Thanks [@okwasniewski](https://github.com/okwasniewski)! - fix: add cpp dir to published files
|
|
15
|
+
|
|
16
|
+
- [#198](https://github.com/callstack/react-native-brownfield/pull/198) [`c8c903d`](https://github.com/callstack/react-native-brownfield/commit/c8c903d0d2b78a8c06a41213dfbe781a2daf3d25) Thanks [@artus9033](https://github.com/artus9033)! - docs: added README files to all packages
|
|
17
|
+
|
|
18
|
+
- Updated dependencies [[`c8c903d`](https://github.com/callstack/react-native-brownfield/commit/c8c903d0d2b78a8c06a41213dfbe781a2daf3d25)]:
|
|
19
|
+
- @callstack/brownfield-cli@1.0.1
|
package/README.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
<a href="https://www.callstack.com/open-source?utm_campaign=generic&utm_source=github&utm_medium=referral&utm_content=brownie" align="center">
|
|
2
|
+
<img alt="Brownie" src="https://github.com/callstack/react-native-brownfield/raw/refs/heads/main/img/brownie-banner.jpg">
|
|
3
|
+
</a>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
A shared state management library for React Native brownfield apps that enables seamless state synchronization between your React Native code and native code.
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
[![Build Status][build-badge]][build]
|
|
12
|
+
[![Version][version-badge]][package]
|
|
13
|
+
[![MIT License][license-badge]][license]
|
|
14
|
+
|
|
15
|
+
[![PRs Welcome][prs-welcome-badge]][prs-welcome]
|
|
16
|
+
[![Chat][chat-badge]][chat]
|
|
17
|
+
[![Code of Conduct][coc-badge]][coc]
|
|
18
|
+
[![Sponsored by Callstack][callstack-badge]][callstack]
|
|
19
|
+
|
|
20
|
+
[![tweet][tweet-badge]][tweet]
|
|
21
|
+
|
|
22
|
+
## Features
|
|
23
|
+
|
|
24
|
+
- **Shared State** - Single source of truth accessible from both TypeScript and Swift
|
|
25
|
+
- **Type Safety** - Full type inference from TypeScript schema to generated Swift types
|
|
26
|
+
- **React Integration** - `useStore` hook with selector support for optimal re-renders
|
|
27
|
+
- **SwiftUI Integration** - `@UseStore` property wrapper for reactive UI updates
|
|
28
|
+
- **UIKit Support** - Subscribe-based API for imperative UI updates
|
|
29
|
+
|
|
30
|
+
## Documentation
|
|
31
|
+
|
|
32
|
+
For full documentation, visit [our documentation](https://oss.callstack.com/react-native-brownfield/brownie/overview).
|
|
33
|
+
|
|
34
|
+
<a href="https://www.callstack.com/ebooks/incremental-react-native-adoption-in-native-apps?utm_campaign=brownfield&utm_source=github&utm_medium=referral&utm_content=react-native-brownfield" align="center">
|
|
35
|
+
<img alt="Download a free copy of Incremental React Native adoption in native apps ebook" src="https://github.com/user-attachments/assets/ba42bb29-1e7a-4683-80c5-2602afb1a7e6">
|
|
36
|
+
</a>
|
|
37
|
+
|
|
38
|
+
## Made with ❤️ at Callstack
|
|
39
|
+
|
|
40
|
+
React Native Brownfield is an open source project and will always remain free to use. If you think it's cool, please star it 🌟. [Callstack](https://callstack.com) is a group of React and React Native geeks, contact us at [hello@callstack.com](mailto:hello@callstack.com) if you need any help with these or just want to say hi!
|
|
41
|
+
|
|
42
|
+
Like the project? ⚛️ [Join the team](https://callstack.com/careers/?utm_campaign=Senior_RN&utm_source=github&utm_medium=readme) who does amazing stuff for clients and drives React Native Open Source! 🔥
|
|
43
|
+
|
|
44
|
+
<!-- badges -->
|
|
45
|
+
|
|
46
|
+
[build-badge]: https://img.shields.io/circleci/build/github/callstack/react-native-brownfield/master.svg?style=flat-square
|
|
47
|
+
[build]: https://circleci.com/gh/callstack/react-native-brownfield
|
|
48
|
+
[ci]: https://github.com/callstack/react-native-brownfield/actions/workflows/ci.yml/badge.svg
|
|
49
|
+
[version-badge]: https://img.shields.io/npm/v/@callstack/react-native-brownfield.svg?style=flat-square
|
|
50
|
+
[package]: https://www.npmjs.com/package/@callstack/react-native-brownfield
|
|
51
|
+
[license-badge]: https://img.shields.io/npm/l/@callstack/react-native-brownfield.svg?style=flat-square
|
|
52
|
+
[license]: https://opensource.org/licenses/MIT
|
|
53
|
+
[prs-welcome-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square
|
|
54
|
+
[prs-welcome]: http://makeapullrequest.com
|
|
55
|
+
[coc-badge]: https://img.shields.io/badge/code%20of-conduct-ff69b4.svg?style=flat-square
|
|
56
|
+
[coc]: https://github.com/callstack/react-native-brownfield/blob/master/CODE_OF_CONDUCT.md
|
|
57
|
+
[all-contributors-badge]: https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square
|
|
58
|
+
[chat-badge]: https://img.shields.io/discord/613446453762719798.svg?style=flat-square&colorB=758ED3
|
|
59
|
+
[chat]: https://discord.gg/2SR9Mua
|
|
60
|
+
[tweet-badge]: https://img.shields.io/badge/tweet-%23reactnativebrownfield-blue.svg?style=flat-square&colorB=1DA1F2&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAUCAYAAACXtf2DAAAAAXNSR0IArs4c6QAAAaRJREFUOBGtlM8rBGEYx3cWtRHJRaKcuMtBSitxkCQ3LtzkP9iUUu5ODspRHLhRLtq0FxeicEBC2cOivcge%2FMgan3fNM8bbzL4zm6c%2BPT%2Fe7%2FO8887svrFYBWbbtgWzsAt3sAcpqJFxxF1QV8oJFqFPFst5dLWQAT87oTgPB7DtziFRT1EA4yZolsFkhwjGYFRO8Op0KD8HVe7unoB6PRTBZG8IctAmG1xrHcfkQ2B55sfI%2ByGMXSBqV71xZ8CWdxBxN6ThFuECDEAL%2Bc9HIzDYumVZ966GZnX0SzCZvEqTbkaGywkyFE6hKAsBPhFQ18uPUqh2ggJ%2BUor%2F4M%2F%2FzOC8g6YzR1i%2F8g4vvSI%2ByD7FFNjexQrjHd8%2BnjABI3AU4Wl16TuF1qANGll81jsi5qu%2Bw6XIsCn4ijhU5FmCJpkV6BGNw410hfSf6JKBQ%2FUFxHGYBnWnmOwDwYQ%2BwzdHqO75HtiAMJfaC7ph32FSRJCENUhDHsLaJkL%2FX4wMF4%2BwA5bgAcrZE4sr0Cu9Jq9fxyrvBHWbNkMD5CEHWTjjT2m6r5D92jfmbbKJEWuMMAAAAABJRU5ErkJggg%3D%3D
|
|
61
|
+
[tweet]: https://twitter.com/intent/tweet?text=Check%20out%20react-native-brownfield!%20https://github.com/callstack/react-native-brownfield%20%F0%9F%91%8D
|
|
62
|
+
[callstack-badge]: https://callstack.com/images/callstack-badge.svg
|
|
63
|
+
[callstack]: https://callstack.com/open-source/?utm_source=github.com&utm_medium=referral&utm_campaign=rnbrownfield&utm_term=readme
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#include "BrownieHostObject.h"
|
|
2
|
+
#include <jsi/JSIDynamic.h>
|
|
3
|
+
|
|
4
|
+
namespace brownie {
|
|
5
|
+
|
|
6
|
+
BrownieHostObject::BrownieHostObject(std::shared_ptr<BrownieStore> store)
|
|
7
|
+
: store_(std::move(store)) {}
|
|
8
|
+
|
|
9
|
+
facebook::jsi::Value BrownieHostObject::get(facebook::jsi::Runtime &rt,
|
|
10
|
+
const facebook::jsi::PropNameID &name) {
|
|
11
|
+
std::string propName = name.utf8(rt);
|
|
12
|
+
|
|
13
|
+
if (propName == "unbox") {
|
|
14
|
+
return facebook::jsi::Function::createFromHostFunction(
|
|
15
|
+
rt, facebook::jsi::PropNameID::forAscii(rt, "unbox"), 0,
|
|
16
|
+
[this](facebook::jsi::Runtime &rt, const facebook::jsi::Value &,
|
|
17
|
+
const facebook::jsi::Value *, size_t) -> facebook::jsi::Value {
|
|
18
|
+
auto snapshot = store_->getSnapshot();
|
|
19
|
+
return facebook::jsi::valueFromDynamic(rt, snapshot);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
auto value = store_->get(propName);
|
|
24
|
+
return facebook::jsi::valueFromDynamic(rt, value);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
void BrownieHostObject::set(facebook::jsi::Runtime &rt,
|
|
28
|
+
const facebook::jsi::PropNameID &name,
|
|
29
|
+
const facebook::jsi::Value &value) {
|
|
30
|
+
std::string propName = name.utf8(rt);
|
|
31
|
+
auto dynamicValue = facebook::jsi::dynamicFromValue(rt, value);
|
|
32
|
+
store_->set(propName, std::move(dynamicValue));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
std::vector<facebook::jsi::PropNameID>
|
|
36
|
+
BrownieHostObject::getPropertyNames(facebook::jsi::Runtime &rt) {
|
|
37
|
+
std::vector<facebook::jsi::PropNameID> names;
|
|
38
|
+
names.push_back(facebook::jsi::PropNameID::forAscii(rt, "unbox"));
|
|
39
|
+
|
|
40
|
+
auto snapshot = store_->getSnapshot();
|
|
41
|
+
if (snapshot.isObject()) {
|
|
42
|
+
for (const auto &pair : snapshot.items()) {
|
|
43
|
+
if (pair.first.isString()) {
|
|
44
|
+
names.push_back(facebook::jsi::PropNameID::forUtf8(rt, pair.first.getString()));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return names;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
} // namespace brownie
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "BrownieStore.h"
|
|
4
|
+
#include <jsi/jsi.h>
|
|
5
|
+
#include <memory>
|
|
6
|
+
|
|
7
|
+
namespace brownie {
|
|
8
|
+
|
|
9
|
+
class BrownieHostObject : public facebook::jsi::HostObject {
|
|
10
|
+
public:
|
|
11
|
+
explicit BrownieHostObject(std::shared_ptr<BrownieStore> store);
|
|
12
|
+
|
|
13
|
+
facebook::jsi::Value get(facebook::jsi::Runtime &rt,
|
|
14
|
+
const facebook::jsi::PropNameID &name) override;
|
|
15
|
+
|
|
16
|
+
void set(facebook::jsi::Runtime &rt, const facebook::jsi::PropNameID &name,
|
|
17
|
+
const facebook::jsi::Value &value) override;
|
|
18
|
+
|
|
19
|
+
std::vector<facebook::jsi::PropNameID>
|
|
20
|
+
getPropertyNames(facebook::jsi::Runtime &rt) override;
|
|
21
|
+
|
|
22
|
+
private:
|
|
23
|
+
std::shared_ptr<BrownieStore> store_;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
} // namespace brownie
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#include "BrownieInstaller.h"
|
|
2
|
+
#include "BrownieHostObject.h"
|
|
3
|
+
#include "BrownieStoreManager.h"
|
|
4
|
+
|
|
5
|
+
namespace brownie {
|
|
6
|
+
|
|
7
|
+
void BrownieInstaller::install(facebook::jsi::Runtime &runtime) {
|
|
8
|
+
auto getStore = facebook::jsi::Function::createFromHostFunction(
|
|
9
|
+
runtime, facebook::jsi::PropNameID::forAscii(runtime, "__brownieGetStore"), 1,
|
|
10
|
+
[](facebook::jsi::Runtime &rt, const facebook::jsi::Value &,
|
|
11
|
+
const facebook::jsi::Value *args, size_t count) -> facebook::jsi::Value {
|
|
12
|
+
if (count < 1 || !args[0].isString()) {
|
|
13
|
+
throw facebook::jsi::JSError(rt,
|
|
14
|
+
"getStore requires a string key argument");
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
std::string key = args[0].asString(rt).utf8(rt);
|
|
18
|
+
auto store = BrownieStoreManager::shared().getStore(key);
|
|
19
|
+
|
|
20
|
+
if (!store) {
|
|
21
|
+
return facebook::jsi::Value::undefined();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
auto hostObject = std::make_shared<BrownieHostObject>(store);
|
|
25
|
+
return facebook::jsi::Object::createFromHostObject(rt, hostObject);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
runtime.global().setProperty(runtime, "__brownieGetStore", getStore);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
} // namespace brownie
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#include "BrownieStore.h"
|
|
2
|
+
|
|
3
|
+
namespace brownie {
|
|
4
|
+
|
|
5
|
+
BrownieStore::BrownieStore() : state_(folly::dynamic::object()) {}
|
|
6
|
+
|
|
7
|
+
BrownieStore::BrownieStore(folly::dynamic initialState)
|
|
8
|
+
: state_(std::move(initialState)) {}
|
|
9
|
+
|
|
10
|
+
folly::dynamic BrownieStore::get(const std::string &key) const {
|
|
11
|
+
std::lock_guard<std::mutex> lock(mutex_);
|
|
12
|
+
if (state_.isObject() && state_.count(key)) {
|
|
13
|
+
return state_[key];
|
|
14
|
+
}
|
|
15
|
+
return nullptr;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
void BrownieStore::set(const std::string &key, folly::dynamic value) {
|
|
19
|
+
{
|
|
20
|
+
std::lock_guard<std::mutex> lock(mutex_);
|
|
21
|
+
if (!state_.isObject()) {
|
|
22
|
+
state_ = folly::dynamic::object();
|
|
23
|
+
}
|
|
24
|
+
state_[key] = std::move(value);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (changeCallback_) {
|
|
28
|
+
changeCallback_();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
folly::dynamic BrownieStore::getSnapshot() const {
|
|
33
|
+
std::lock_guard<std::mutex> lock(mutex_);
|
|
34
|
+
return state_;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
void BrownieStore::setState(folly::dynamic state) {
|
|
38
|
+
{
|
|
39
|
+
std::lock_guard<std::mutex> lock(mutex_);
|
|
40
|
+
state_ = std::move(state);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (changeCallback_) {
|
|
44
|
+
changeCallback_();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
void BrownieStore::setChangeCallback(ChangeCallback callback) {
|
|
49
|
+
std::lock_guard<std::mutex> lock(mutex_);
|
|
50
|
+
changeCallback_ = std::move(callback);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
} // namespace brownie
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <folly/dynamic.h>
|
|
4
|
+
#include <functional>
|
|
5
|
+
#include <mutex>
|
|
6
|
+
#include <string>
|
|
7
|
+
|
|
8
|
+
namespace brownie {
|
|
9
|
+
|
|
10
|
+
class BrownieStore {
|
|
11
|
+
public:
|
|
12
|
+
using ChangeCallback = std::function<void()>;
|
|
13
|
+
|
|
14
|
+
BrownieStore();
|
|
15
|
+
explicit BrownieStore(folly::dynamic initialState);
|
|
16
|
+
|
|
17
|
+
folly::dynamic get(const std::string &key) const;
|
|
18
|
+
void set(const std::string &key, folly::dynamic value);
|
|
19
|
+
folly::dynamic getSnapshot() const;
|
|
20
|
+
void setState(folly::dynamic state);
|
|
21
|
+
|
|
22
|
+
void setChangeCallback(ChangeCallback callback);
|
|
23
|
+
|
|
24
|
+
private:
|
|
25
|
+
mutable std::mutex mutex_;
|
|
26
|
+
folly::dynamic state_;
|
|
27
|
+
ChangeCallback changeCallback_;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
} // namespace brownie
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#include "BrownieStoreManager.h"
|
|
2
|
+
|
|
3
|
+
namespace brownie {
|
|
4
|
+
|
|
5
|
+
BrownieStoreManager &BrownieStoreManager::shared() {
|
|
6
|
+
static BrownieStoreManager instance;
|
|
7
|
+
return instance;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
void BrownieStoreManager::registerStore(const std::string &key,
|
|
11
|
+
std::shared_ptr<BrownieStore> store) {
|
|
12
|
+
std::lock_guard<std::mutex> lock(mutex_);
|
|
13
|
+
stores_[key] = std::move(store);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
std::shared_ptr<BrownieStore>
|
|
17
|
+
BrownieStoreManager::getStore(const std::string &key) const {
|
|
18
|
+
std::lock_guard<std::mutex> lock(mutex_);
|
|
19
|
+
auto it = stores_.find(key);
|
|
20
|
+
if (it != stores_.end()) {
|
|
21
|
+
return it->second;
|
|
22
|
+
}
|
|
23
|
+
return nullptr;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
void BrownieStoreManager::removeStore(const std::string &key) {
|
|
27
|
+
std::lock_guard<std::mutex> lock(mutex_);
|
|
28
|
+
stores_.erase(key);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
} // namespace brownie
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "BrownieStore.h"
|
|
4
|
+
#include <memory>
|
|
5
|
+
#include <mutex>
|
|
6
|
+
#include <string>
|
|
7
|
+
#include <unordered_map>
|
|
8
|
+
|
|
9
|
+
namespace brownie {
|
|
10
|
+
|
|
11
|
+
class BrownieStoreManager {
|
|
12
|
+
public:
|
|
13
|
+
static BrownieStoreManager &shared();
|
|
14
|
+
|
|
15
|
+
void registerStore(const std::string &key,
|
|
16
|
+
std::shared_ptr<BrownieStore> store);
|
|
17
|
+
std::shared_ptr<BrownieStore> getStore(const std::string &key) const;
|
|
18
|
+
void removeStore(const std::string &key);
|
|
19
|
+
|
|
20
|
+
private:
|
|
21
|
+
BrownieStoreManager() = default;
|
|
22
|
+
mutable std::mutex mutex_;
|
|
23
|
+
std::unordered_map<std::string, std::shared_ptr<BrownieStore>> stores_;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
} // namespace brownie
|
package/lib/commonjs/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.getSnapshot=getSnapshot;exports.setState=setState;exports.subscribe=subscribe;exports.useStore=useStore;var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _react=require("react");var _NativeBrownieModule=_interopRequireDefault(require("./NativeBrownieModule"));var stores=new Map();function getHostObject(key){return global.__brownieGetStore==null?void 0:global.__brownieGetStore(key);}function getOrCreateStore(key){var store=stores.get(key);if(!store){var _hostObject$unbox;var hostObject=getHostObject(key);store={hostObject:hostObject,snapshot:(_hostObject$unbox=hostObject
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.getSnapshot=getSnapshot;exports.setState=setState;exports.subscribe=subscribe;exports.useStore=useStore;var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _react=require("react");var _NativeBrownieModule=_interopRequireDefault(require("./NativeBrownieModule"));var stores=new Map();function getHostObject(key){return global.__brownieGetStore==null?void 0:global.__brownieGetStore(key);}function getOrCreateStore(key){var store=stores.get(key);if(!store){var _hostObject$unbox;var hostObject=getHostObject(key);if(!hostObject){throw new Error(`[Brownie] Store "${key}" not found. `+`Make sure to register it on the native side before accessing it from JS.\n\n`+`Swift example:\n`+` ${key}.register(${key}(...))\n\n`+`This should be called before React Native starts.`);}store={hostObject:hostObject,snapshot:(_hostObject$unbox=hostObject.unbox==null?void 0:hostObject.unbox())!=null?_hostObject$unbox:{},listeners:new Set()};stores.set(key,store);}return store;}function refreshSnapshot(key){var store=stores.get(key);if(store){var _store$hostObject$unb,_store$hostObject;store.snapshot=(_store$hostObject$unb=(_store$hostObject=store.hostObject)==null||_store$hostObject.unbox==null?void 0:_store$hostObject.unbox())!=null?_store$hostObject$unb:{};store.listeners.forEach(function(listener){return listener();});}}_NativeBrownieModule.default.nativeStoreDidChange(function(){stores.forEach(function(_,key){return refreshSnapshot(key);});});function subscribe(key,listener){var store=getOrCreateStore(key);store.listeners.add(listener);return function(){return store.listeners.delete(listener);};}function getSnapshot(key){var store=getOrCreateStore(key);return store.snapshot;}function setState(key,action){var store=getOrCreateStore(key);var partial=typeof action==='function'?action(store.snapshot):action;for(var _ref of Object.entries(partial)){var _ref2=(0,_slicedToArray2.default)(_ref,2);var prop=_ref2[0];var value=_ref2[1];store.hostObject[prop]=value;}}function useStore(key,selector){var sub=(0,_react.useCallback)(function(listener){return subscribe(key,listener);},[key]);var snap=(0,_react.useCallback)(function(){return selector(getSnapshot(key));},[key,selector]);var slice=(0,_react.useSyncExternalStore)(sub,snap,snap);(0,_react.useDebugValue)(slice);var boundSetState=(0,_react.useCallback)(function(action){return setState(key,action);},[key]);return[slice,boundSetState];}
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_NativeBrownieModule","_interopRequireDefault","stores","Map","getHostObject","key","global","__brownieGetStore","getOrCreateStore","store","get","_hostObject$unbox","hostObject","snapshot","unbox","listeners","Set","set","refreshSnapshot","_store$hostObject$unb","_store$hostObject","forEach","listener","BrownieModule","nativeStoreDidChange","_","subscribe","add","delete","getSnapshot","setState","action","partial","_ref","Object","entries","_ref2","_slicedToArray2","default","prop","value","useStore","selector","sub","useCallback","snap","slice","useSyncExternalStore","useDebugValue","boundSetState"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"wVAAA,IAAAA,MAAA,CAAAC,OAAA,UACA,IAAAC,oBAAA,CAAAC,sBAAA,CAAAF,OAAA,2BAoBA,GAAM,CAAAG,MAAM,CAAG,GAAI,CAAAC,GAAG,CAAqB,CAAC,CAE5C,QAAS,CAAAC,aAAaA,CAACC,GAAW,CAAc,CAE9C,MAAO,CAAAC,MAAM,CAACC,iBAAiB,cAAxBD,MAAM,CAACC,iBAAiB,CAAGF,GAAG,CAAC,CACxC,CAEA,QAAS,CAAAG,gBAAgBA,CAACH,GAAW,CAAc,CACjD,GAAI,CAAAI,KAAK,CAAGP,MAAM,CAACQ,GAAG,CAACL,GAAG,CAAC,CAC3B,GAAI,CAACI,KAAK,CAAE,KAAAE,iBAAA,CACV,GAAM,CAAAC,UAAU,CAAGR,aAAa,CAACC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"names":["_react","require","_NativeBrownieModule","_interopRequireDefault","stores","Map","getHostObject","key","global","__brownieGetStore","getOrCreateStore","store","get","_hostObject$unbox","hostObject","Error","snapshot","unbox","listeners","Set","set","refreshSnapshot","_store$hostObject$unb","_store$hostObject","forEach","listener","BrownieModule","nativeStoreDidChange","_","subscribe","add","delete","getSnapshot","setState","action","partial","_ref","Object","entries","_ref2","_slicedToArray2","default","prop","value","useStore","selector","sub","useCallback","snap","slice","useSyncExternalStore","useDebugValue","boundSetState"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"wVAAA,IAAAA,MAAA,CAAAC,OAAA,UACA,IAAAC,oBAAA,CAAAC,sBAAA,CAAAF,OAAA,2BAoBA,GAAM,CAAAG,MAAM,CAAG,GAAI,CAAAC,GAAG,CAAqB,CAAC,CAE5C,QAAS,CAAAC,aAAaA,CAACC,GAAW,CAAc,CAE9C,MAAO,CAAAC,MAAM,CAACC,iBAAiB,cAAxBD,MAAM,CAACC,iBAAiB,CAAGF,GAAG,CAAC,CACxC,CAEA,QAAS,CAAAG,gBAAgBA,CAACH,GAAW,CAAc,CACjD,GAAI,CAAAI,KAAK,CAAGP,MAAM,CAACQ,GAAG,CAACL,GAAG,CAAC,CAC3B,GAAI,CAACI,KAAK,CAAE,KAAAE,iBAAA,CACV,GAAM,CAAAC,UAAU,CAAGR,aAAa,CAACC,GAAG,CAAC,CACrC,GAAI,CAACO,UAAU,CAAE,CACf,KAAM,IAAI,CAAAC,KAAK,CACb,oBAAoBR,GAAG,eAAe,CACpC,8EAA8E,CAC9E,kBAAkB,CAClB,KAAKA,GAAG,aAAaA,GAAG,YAAY,CACpC,mDACJ,CAAC,CACH,CACAI,KAAK,CAAG,CACNG,UAAU,CAAVA,UAAU,CACVE,QAAQ,EAAAH,iBAAA,CAAEC,UAAU,CAACG,KAAK,cAAhBH,UAAU,CAACG,KAAK,CAAG,CAAC,QAAAJ,iBAAA,CAAI,CAAC,CAAC,CACpCK,SAAS,CAAE,GAAI,CAAAC,GAAG,CAAC,CACrB,CAAC,CACDf,MAAM,CAACgB,GAAG,CAACb,GAAG,CAAEI,KAAK,CAAC,CACxB,CACA,MAAO,CAAAA,KAAK,CACd,CAEA,QAAS,CAAAU,eAAeA,CAACd,GAAW,CAAQ,CAC1C,GAAM,CAAAI,KAAK,CAAGP,MAAM,CAACQ,GAAG,CAACL,GAAG,CAAC,CAC7B,GAAII,KAAK,CAAE,KAAAW,qBAAA,CAAAC,iBAAA,CACTZ,KAAK,CAACK,QAAQ,EAAAM,qBAAA,EAAAC,iBAAA,CAAGZ,KAAK,CAACG,UAAU,SAAhBS,iBAAA,CAAkBN,KAAK,cAAvBM,iBAAA,CAAkBN,KAAK,CAAG,CAAC,QAAAK,qBAAA,CAAI,CAAC,CAAC,CAClDX,KAAK,CAACO,SAAS,CAACM,OAAO,CAAC,SAACC,QAAQ,QAAK,CAAAA,QAAQ,CAAC,CAAC,GAAC,CACnD,CACF,CAEAC,4BAAa,CAACC,oBAAoB,CAAC,UAAM,CACvCvB,MAAM,CAACoB,OAAO,CAAC,SAACI,CAAC,CAAErB,GAAG,QAAK,CAAAc,eAAe,CAACd,GAAG,CAAC,GAAC,CAClD,CAAC,CAAC,CAMK,QAAS,CAAAsB,SAASA,CACvBtB,GAAM,CACNkB,QAAuB,CACX,CACZ,GAAM,CAAAd,KAAK,CAAGD,gBAAgB,CAACH,GAAa,CAAC,CAC7CI,KAAK,CAACO,SAAS,CAACY,GAAG,CAACL,QAAQ,CAAC,CAC7B,MAAO,kBAAM,CAAAd,KAAK,CAACO,SAAS,CAACa,MAAM,CAACN,QAAQ,CAAC,GAC/C,CAKO,QAAS,CAAAO,WAAWA,CACzBzB,GAAM,CACY,CAClB,GAAM,CAAAI,KAAK,CAAGD,gBAAgB,CAACH,GAAa,CAAC,CAC7C,MAAO,CAAAI,KAAK,CAACK,QAAQ,CACvB,CAOO,QAAS,CAAAiB,QAAQA,CACtB1B,GAAM,CACN2B,MAAwC,CAClC,CACN,GAAM,CAAAvB,KAAK,CAAGD,gBAAgB,CAACH,GAAa,CAAC,CAE7C,GAAM,CAAA4B,OAAO,CACX,MAAO,CAAAD,MAAM,GAAK,UAAU,CACxBA,MAAM,CAACvB,KAAK,CAACK,QAA4B,CAAC,CAC1CkB,MAAM,CAEZ,QAAAE,IAAA,GAA4B,CAAAC,MAAM,CAACC,OAAO,CAACH,OAAO,CAAC,CAAE,KAAAI,KAAA,IAAAC,eAAA,CAAAC,OAAA,EAAAL,IAAA,OAAzC,CAAAM,IAAI,CAAAH,KAAA,OAAE,CAAAI,KAAK,CAAAJ,KAAA,IACrB5B,KAAK,CAACG,UAAU,CAAC4B,IAAI,CAAC,CAAGC,KAAK,CAChC,CACF,CASO,QAAS,CAAAC,QAAQA,CACtBrC,GAAM,CACNsC,QAAwC,CACiB,CACzD,GAAM,CAAAC,GAAG,CAAG,GAAAC,kBAAW,EACrB,SAACtB,QAAoB,QAAK,CAAAI,SAAS,CAACtB,GAAG,CAAEkB,QAAQ,CAAC,GAClD,CAAClB,GAAG,CACN,CAAC,CACD,GAAM,CAAAyC,IAAI,CAAG,GAAAD,kBAAW,EAAC,iBAAM,CAAAF,QAAQ,CAACb,WAAW,CAACzB,GAAG,CAAC,CAAC,GAAE,CAACA,GAAG,CAAEsC,QAAQ,CAAC,CAAC,CAE3E,GAAM,CAAAI,KAAK,CAAG,GAAAC,2BAAoB,EAACJ,GAAG,CAAEE,IAAI,CAAEA,IAAI,CAAC,CAEnD,GAAAG,oBAAa,EAACF,KAAK,CAAC,CAEpB,GAAM,CAAAG,aAAa,CAAG,GAAAL,kBAAW,EAC/B,SAACb,MAAwC,QAAK,CAAAD,QAAQ,CAAC1B,GAAG,CAAE2B,MAAM,CAAC,GACnE,CAAC3B,GAAG,CACN,CAAC,CAED,MAAO,CAAC0C,KAAK,CAAEG,aAAa,CAAC,CAC/B","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.getSnapshot=getSnapshot;exports.setState=setState;exports.subscribe=subscribe;exports.useStore=useStore;var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _react=require("react");var _NativeBrownieModule=_interopRequireDefault(require("./NativeBrownieModule"));var stores=new Map();function getHostObject(key){return global.__brownieGetStore==null?void 0:global.__brownieGetStore(key);}function getOrCreateStore(key){var store=stores.get(key);if(!store){var _hostObject$unbox;var hostObject=getHostObject(key);store={hostObject:hostObject,snapshot:(_hostObject$unbox=hostObject
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.getSnapshot=getSnapshot;exports.setState=setState;exports.subscribe=subscribe;exports.useStore=useStore;var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _react=require("react");var _NativeBrownieModule=_interopRequireDefault(require("./NativeBrownieModule"));var stores=new Map();function getHostObject(key){return global.__brownieGetStore==null?void 0:global.__brownieGetStore(key);}function getOrCreateStore(key){var store=stores.get(key);if(!store){var _hostObject$unbox;var hostObject=getHostObject(key);if(!hostObject){throw new Error(`[Brownie] Store "${key}" not found. `+`Make sure to register it on the native side before accessing it from JS.\n\n`+`Swift example:\n`+` ${key}.register(${key}(...))\n\n`+`This should be called before React Native starts.`);}store={hostObject:hostObject,snapshot:(_hostObject$unbox=hostObject.unbox==null?void 0:hostObject.unbox())!=null?_hostObject$unbox:{},listeners:new Set()};stores.set(key,store);}return store;}function refreshSnapshot(key){var store=stores.get(key);if(store){var _store$hostObject$unb,_store$hostObject;store.snapshot=(_store$hostObject$unb=(_store$hostObject=store.hostObject)==null||_store$hostObject.unbox==null?void 0:_store$hostObject.unbox())!=null?_store$hostObject$unb:{};store.listeners.forEach(function(listener){return listener();});}}_NativeBrownieModule.default.nativeStoreDidChange(function(){stores.forEach(function(_,key){return refreshSnapshot(key);});});function subscribe(key,listener){var store=getOrCreateStore(key);store.listeners.add(listener);return function(){return store.listeners.delete(listener);};}function getSnapshot(key){var store=getOrCreateStore(key);return store.snapshot;}function setState(key,action){var store=getOrCreateStore(key);var partial=typeof action==='function'?action(store.snapshot):action;for(var _ref of Object.entries(partial)){var _ref2=(0,_slicedToArray2.default)(_ref,2);var prop=_ref2[0];var value=_ref2[1];store.hostObject[prop]=value;}}function useStore(key,selector){var sub=(0,_react.useCallback)(function(listener){return subscribe(key,listener);},[key]);var snap=(0,_react.useCallback)(function(){return selector(getSnapshot(key));},[key,selector]);var slice=(0,_react.useSyncExternalStore)(sub,snap,snap);(0,_react.useDebugValue)(slice);var boundSetState=(0,_react.useCallback)(function(action){return setState(key,action);},[key]);return[slice,boundSetState];}
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_NativeBrownieModule","_interopRequireDefault","stores","Map","getHostObject","key","global","__brownieGetStore","getOrCreateStore","store","get","_hostObject$unbox","hostObject","snapshot","unbox","listeners","Set","set","refreshSnapshot","_store$hostObject$unb","_store$hostObject","forEach","listener","BrownieModule","nativeStoreDidChange","_","subscribe","add","delete","getSnapshot","setState","action","partial","_ref","Object","entries","_ref2","_slicedToArray2","default","prop","value","useStore","selector","sub","useCallback","snap","slice","useSyncExternalStore","useDebugValue","boundSetState"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"wVAAA,IAAAA,MAAA,CAAAC,OAAA,UACA,IAAAC,oBAAA,CAAAC,sBAAA,CAAAF,OAAA,2BAoBA,GAAM,CAAAG,MAAM,CAAG,GAAI,CAAAC,GAAG,CAAqB,CAAC,CAE5C,QAAS,CAAAC,aAAaA,CAACC,GAAW,CAAc,CAE9C,MAAO,CAAAC,MAAM,CAACC,iBAAiB,cAAxBD,MAAM,CAACC,iBAAiB,CAAGF,GAAG,CAAC,CACxC,CAEA,QAAS,CAAAG,gBAAgBA,CAACH,GAAW,CAAc,CACjD,GAAI,CAAAI,KAAK,CAAGP,MAAM,CAACQ,GAAG,CAACL,GAAG,CAAC,CAC3B,GAAI,CAACI,KAAK,CAAE,KAAAE,iBAAA,CACV,GAAM,CAAAC,UAAU,CAAGR,aAAa,CAACC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"names":["_react","require","_NativeBrownieModule","_interopRequireDefault","stores","Map","getHostObject","key","global","__brownieGetStore","getOrCreateStore","store","get","_hostObject$unbox","hostObject","Error","snapshot","unbox","listeners","Set","set","refreshSnapshot","_store$hostObject$unb","_store$hostObject","forEach","listener","BrownieModule","nativeStoreDidChange","_","subscribe","add","delete","getSnapshot","setState","action","partial","_ref","Object","entries","_ref2","_slicedToArray2","default","prop","value","useStore","selector","sub","useCallback","snap","slice","useSyncExternalStore","useDebugValue","boundSetState"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,WAAW,aAAa;CAAG;AAEjC,MAAM,WAAW,YAAY;CAAG;AAEhC,KAAK,aAAa,GAAG,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,WAAW,aAAa;CAAG;AAEjC,MAAM,WAAW,YAAY;CAAG;AAEhC,KAAK,aAAa,GAAG,MAAM,IAAI,CAAC;AAoDhC;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,aAAa,EACrD,GAAG,EAAE,CAAC,EACN,QAAQ,EAAE,aAAa,GACtB,MAAM,IAAI,CAIZ;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,aAAa,EACvD,GAAG,EAAE,CAAC,GACL,aAAa,CAAC,CAAC,CAAC,CAGlB;AAED,KAAK,cAAc,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAErE;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,aAAa,EACpD,GAAG,EAAE,CAAC,EACN,MAAM,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GACvC,IAAI,CAWN;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,aAAa,EAAE,CAAC,EACvD,GAAG,EAAE,CAAC,EACN,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,GACvC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAiBzD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,WAAW,aAAa;CAAG;AAEjC,MAAM,WAAW,YAAY;CAAG;AAEhC,KAAK,aAAa,GAAG,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,WAAW,aAAa;CAAG;AAEjC,MAAM,WAAW,YAAY;CAAG;AAEhC,KAAK,aAAa,GAAG,MAAM,IAAI,CAAC;AAoDhC;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,aAAa,EACrD,GAAG,EAAE,CAAC,EACN,QAAQ,EAAE,aAAa,GACtB,MAAM,IAAI,CAIZ;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,aAAa,EACvD,GAAG,EAAE,CAAC,GACL,aAAa,CAAC,CAAC,CAAC,CAGlB;AAED,KAAK,cAAc,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAErE;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,aAAa,EACpD,GAAG,EAAE,CAAC,EACN,MAAM,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GACvC,IAAI,CAWN;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,aAAa,EAAE,CAAC,EACvD,GAAG,EAAE,CAAC,EACN,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,GACvC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAiBzD"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@callstack/brownie",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Oskar Kwaśniewski <oskarkwasniewski@icloud.com>",
|
|
6
6
|
"bin": {
|
|
7
|
-
"brownfield": "
|
|
7
|
+
"brownfield": "lib/commonjs/scripts/brownfield.js"
|
|
8
8
|
},
|
|
9
9
|
"contributors": [
|
|
10
10
|
"Artur Morys-Magiera <artus9033@gmail.com>",
|
|
11
11
|
"Oskar Kwasniewski <oskarkwasniewski@icloud.com>"
|
|
12
12
|
],
|
|
13
13
|
"homepage": "https://github.com/callstack/react-native-brownfield",
|
|
14
|
+
"repository": {
|
|
15
|
+
"url": "https://github.com/callstack/react-native-brownfield"
|
|
16
|
+
},
|
|
14
17
|
"description": "Shared state management between React Native and Native apps",
|
|
15
18
|
"main": "lib/commonjs/index",
|
|
16
19
|
"module": "lib/module/index",
|
|
@@ -48,12 +51,14 @@
|
|
|
48
51
|
"src",
|
|
49
52
|
"lib",
|
|
50
53
|
"ios",
|
|
54
|
+
"cpp",
|
|
51
55
|
"*.podspec",
|
|
52
56
|
"!ios/build",
|
|
53
57
|
"!**/__tests__",
|
|
54
58
|
"!**/__fixtures__",
|
|
55
59
|
"!**/__mocks__",
|
|
56
|
-
"!**/.*"
|
|
60
|
+
"!**/.*",
|
|
61
|
+
"README.md"
|
|
57
62
|
],
|
|
58
63
|
"publishConfig": {
|
|
59
64
|
"access": "public",
|
|
@@ -64,7 +69,7 @@
|
|
|
64
69
|
"react-native": "*"
|
|
65
70
|
},
|
|
66
71
|
"dependencies": {
|
|
67
|
-
"@callstack/brownfield-cli": "^1.0.
|
|
72
|
+
"@callstack/brownfield-cli": "^1.0.2",
|
|
68
73
|
"quicktype-core": "^23.2.6",
|
|
69
74
|
"quicktype-typescript-input": "^23.2.6",
|
|
70
75
|
"ts-morph": "^27.0.2"
|
package/src/index.ts
CHANGED
|
@@ -30,9 +30,18 @@ function getOrCreateStore(key: string): StoreCache {
|
|
|
30
30
|
let store = stores.get(key);
|
|
31
31
|
if (!store) {
|
|
32
32
|
const hostObject = getHostObject(key);
|
|
33
|
+
if (!hostObject) {
|
|
34
|
+
throw new Error(
|
|
35
|
+
`[Brownie] Store "${key}" not found. ` +
|
|
36
|
+
`Make sure to register it on the native side before accessing it from JS.\n\n` +
|
|
37
|
+
`Swift example:\n` +
|
|
38
|
+
` ${key}.register(${key}(...))\n\n` +
|
|
39
|
+
`This should be called before React Native starts.`
|
|
40
|
+
);
|
|
41
|
+
}
|
|
33
42
|
store = {
|
|
34
43
|
hostObject,
|
|
35
|
-
snapshot: hostObject
|
|
44
|
+
snapshot: hostObject.unbox?.() ?? {},
|
|
36
45
|
listeners: new Set(),
|
|
37
46
|
};
|
|
38
47
|
stores.set(key, store);
|
|
@@ -85,7 +94,6 @@ export function setState<K extends keyof BrownieStores>(
|
|
|
85
94
|
action: SetStateAction<BrownieStores[K]>
|
|
86
95
|
): void {
|
|
87
96
|
const store = getOrCreateStore(key as string);
|
|
88
|
-
if (!store.hostObject) return;
|
|
89
97
|
|
|
90
98
|
const partial =
|
|
91
99
|
typeof action === 'function'
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
// This file was generated from JSON Schema using quicktype, do not modify it directly.
|
|
2
|
-
// To parse the JSON, add this file to your project and do:
|
|
3
|
-
//
|
|
4
|
-
// let brownfieldStore = try? JSONDecoder().decode(BrownfieldStore.self, from: jsonData)
|
|
5
|
-
|
|
6
|
-
//
|
|
7
|
-
// Hashable or Equatable:
|
|
8
|
-
// The compiler will not be able to synthesize the implementation of Hashable or Equatable
|
|
9
|
-
// for types that require the use of JSONAny, nor will the implementation of Hashable be
|
|
10
|
-
// synthesized for types that have collections (such as arrays or dictionaries).
|
|
11
|
-
|
|
12
|
-
import Foundation
|
|
13
|
-
|
|
14
|
-
// MARK: - BrownfieldStore
|
|
15
|
-
public struct BrownfieldStore: Codable, Equatable {
|
|
16
|
-
public var counter: Double
|
|
17
|
-
public var user: User
|
|
18
|
-
|
|
19
|
-
public init(counter: Double, user: User) {
|
|
20
|
-
self.counter = counter
|
|
21
|
-
self.user = user
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
//
|
|
26
|
-
// Hashable or Equatable:
|
|
27
|
-
// The compiler will not be able to synthesize the implementation of Hashable or Equatable
|
|
28
|
-
// for types that require the use of JSONAny, nor will the implementation of Hashable be
|
|
29
|
-
// synthesized for types that have collections (such as arrays or dictionaries).
|
|
30
|
-
|
|
31
|
-
// MARK: - User
|
|
32
|
-
public struct User: Codable, Equatable {
|
|
33
|
-
public var name: String
|
|
34
|
-
|
|
35
|
-
public init(name: String) {
|
|
36
|
-
self.name = name
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
extension BrownfieldStore: BrownieStoreProtocol {
|
|
41
|
-
public static let storeName = "BrownfieldStore"
|
|
42
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
// This file was generated from JSON Schema using quicktype, do not modify it directly.
|
|
2
|
-
// To parse the JSON, add this file to your project and do:
|
|
3
|
-
//
|
|
4
|
-
// let settingsStore = try? JSONDecoder().decode(SettingsStore.self, from: jsonData)
|
|
5
|
-
|
|
6
|
-
//
|
|
7
|
-
// Hashable or Equatable:
|
|
8
|
-
// The compiler will not be able to synthesize the implementation of Hashable or Equatable
|
|
9
|
-
// for types that require the use of JSONAny, nor will the implementation of Hashable be
|
|
10
|
-
// synthesized for types that have collections (such as arrays or dictionaries).
|
|
11
|
-
|
|
12
|
-
import Foundation
|
|
13
|
-
|
|
14
|
-
// MARK: - SettingsStore
|
|
15
|
-
public struct SettingsStore: Codable, Equatable {
|
|
16
|
-
public var notificationsEnabled, privacyMode: Bool
|
|
17
|
-
public var theme: Theme
|
|
18
|
-
|
|
19
|
-
public init(notificationsEnabled: Bool, privacyMode: Bool, theme: Theme) {
|
|
20
|
-
self.notificationsEnabled = notificationsEnabled
|
|
21
|
-
self.privacyMode = privacyMode
|
|
22
|
-
self.theme = theme
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
public enum Theme: String, Codable, Equatable {
|
|
27
|
-
case dark = "dark"
|
|
28
|
-
case light = "light"
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
extension SettingsStore: BrownieStoreProtocol {
|
|
32
|
-
public static let storeName = "SettingsStore"
|
|
33
|
-
}
|