@@ -158,7 +158,8 @@ JSIWorkletsModuleProxy::JSIWorkletsModuleProxy(
158158 const std::shared_ptr<RuntimeManager> &runtimeManager,
159159 const std::weak_ptr<WorkletRuntime> &uiWorkletRuntime,
160160 const std::shared_ptr<RuntimeBindings> &runtimeBindings,
161- const BundleModeConfig &bundleModeConfig)
161+ const BundleModeConfig &bundleModeConfig,
162+ const std::shared_ptr<UnpackerLoader> &unpackerLoader)
162163 : jsi::HostObject(),
163164 isDevBundle_ (isDevBundle),
164165 bundleModeConfig_(bundleModeConfig),
@@ -168,13 +169,16 @@ JSIWorkletsModuleProxy::JSIWorkletsModuleProxy(
168169 memoryManager_(memoryManager),
169170 runtimeManager_(runtimeManager),
170171 uiWorkletRuntime_(uiWorkletRuntime),
171- runtimeBindings_(runtimeBindings) {}
172+ runtimeBindings_(runtimeBindings),
173+ unpackerLoader_(unpackerLoader) {}
172174
173175JSIWorkletsModuleProxy::~JSIWorkletsModuleProxy () = default ;
174176
175177std::vector<jsi::PropNameID> JSIWorkletsModuleProxy::getPropertyNames (jsi::Runtime &rt) {
176178 std::vector<jsi::PropNameID> propertyNames;
177179
180+ propertyNames.emplace_back (jsi::PropNameID::forAscii (rt, " loadUnpackers" ));
181+
178182 propertyNames.emplace_back (jsi::PropNameID::forAscii (rt, " createSerializable" ));
179183 propertyNames.emplace_back (jsi::PropNameID::forAscii (rt, " createSerializableBigInt" ));
180184 propertyNames.emplace_back (jsi::PropNameID::forAscii (rt, " createSerializableBoolean" ));
@@ -221,12 +225,66 @@ std::vector<jsi::PropNameID> JSIWorkletsModuleProxy::getPropertyNames(jsi::Runti
221225 propertyNames.emplace_back (jsi::PropNameID::forAscii (rt, " getUIRuntimeHolder" ));
222226 propertyNames.emplace_back (jsi::PropNameID::forAscii (rt, " getUISchedulerHolder" ));
223227
228+ propertyNames.emplace_back (jsi::PropNameID::forAscii (rt, " getUIRuntimeHolder" ));
229+ propertyNames.emplace_back (jsi::PropNameID::forAscii (rt, " getUISchedulerHolder" ));
230+
224231 return propertyNames;
225232}
226233
227234jsi::Value JSIWorkletsModuleProxy::get (jsi::Runtime &rt, const jsi::PropNameID &propName) {
228235 const auto name = propName.utf8 (rt);
229236
237+ if (name == " loadUnpackers" ) {
238+ return jsi::Function::createFromHostFunction (
239+ rt,
240+ propName,
241+ 9 ,
242+ [unpackerLoader = unpackerLoader_](
243+ jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) {
244+ const auto valueUnpackerCode = args[0 ].asString (rt).utf8 (rt);
245+ const auto valueUnpackerLocation = args[1 ].asString (rt).utf8 (rt);
246+ const auto valueUnpackerSourceMap = args[2 ].asString (rt).utf8 (rt);
247+
248+ const auto synchronizableUnpackerCode = args[3 ].asString (rt).utf8 (rt);
249+ const auto synchronizableUnpackerLocation = args[4 ].asString (rt).utf8 (rt);
250+ const auto synchronizableUnpackerSourceMap = args[5 ].asString (rt).utf8 (rt);
251+
252+ const auto customSerializableUnpackerCode = args[6 ].asString (rt).utf8 (rt);
253+ const auto customSerializableUnpackerLocation = args[7 ].asString (rt).utf8 (rt);
254+ const auto customSerializableUnpackerSourceMap = args[8 ].asString (rt).utf8 (rt);
255+
256+ const auto shareableHostUnpackerCode = args[9 ].asString (rt).utf8 (rt);
257+ const auto shareableHostUnpackerLocation = args[10 ].asString (rt).utf8 (rt);
258+ const auto shareableHostUnpackerSourceMap = args[11 ].asString (rt).utf8 (rt);
259+
260+ const auto shareableGuestUnpackerCode = args[12 ].asString (rt).utf8 (rt);
261+ const auto shareableGuestUnpackerLocation = args[13 ].asString (rt).utf8 (rt);
262+ const auto shareableGuestUnpackerSourceMap = args[14 ].asString (rt).utf8 (rt);
263+
264+ unpackerLoader->loadUnpackers (ShareableUnpackers{
265+ .valueUnpacker =
266+ {.code = valueUnpackerCode, .location = valueUnpackerLocation, .sourceMap = valueUnpackerSourceMap},
267+ .synchronizableUnpacker =
268+ {.code = synchronizableUnpackerCode,
269+ .location = synchronizableUnpackerLocation,
270+ .sourceMap = synchronizableUnpackerSourceMap},
271+ .customSerializableUnpacker =
272+ {.code = customSerializableUnpackerCode,
273+ .location = customSerializableUnpackerLocation,
274+ .sourceMap = customSerializableUnpackerSourceMap},
275+ .shareableHostUnpacker =
276+ {.code = shareableHostUnpackerCode,
277+ .location = shareableHostUnpackerLocation,
278+ .sourceMap = shareableHostUnpackerSourceMap},
279+ .shareableGuestUnpacker =
280+ {.code = shareableGuestUnpackerCode,
281+ .location = shareableGuestUnpackerLocation,
282+ .sourceMap = shareableGuestUnpackerSourceMap},
283+ });
284+ return jsi::Value::undefined ();
285+ });
286+ }
287+
230288 if (name == " createSerializable" ) {
231289 return jsi::Function::createFromHostFunction (
232290 rt, propName, 3 , [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) {
0 commit comments