1 // Copyright © 2021-present 650 Industries, Inc. (aka Expo) 2 3 #pragma once 4 5 #include "JSIInteropModuleRegistry.h" 6 7 #include <jsi/jsi.h> 8 9 #include <vector> 10 #import <unordered_map> 11 12 namespace jsi = facebook::jsi; 13 14 namespace expo { 15 16 using UniqueJSIObject = std::unique_ptr<jsi::Object>; 17 18 /** 19 * An entry point to all exported functionalities like modules. 20 * 21 * An instance of this class will be added to the JS global object. 22 */ 23 class ExpoModulesHostObject : public jsi::HostObject { 24 public: 25 ExpoModulesHostObject(JSIInteropModuleRegistry *installer); 26 27 ~ExpoModulesHostObject() override; 28 29 jsi::Value get(jsi::Runtime &, const jsi::PropNameID &name) override; 30 31 void set(jsi::Runtime &, const jsi::PropNameID &name, const jsi::Value &value) override; 32 33 std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime &rt) override; 34 35 private: 36 JSIInteropModuleRegistry *installer; 37 std::unordered_map<std::string, UniqueJSIObject> modulesCache; 38 }; 39 } // namespace expo 40