Skip to content

Commit 09589b0

Browse files
fix: errors after rebase
1 parent f3e17e2 commit 09589b0

5 files changed

Lines changed: 104 additions & 102 deletions

File tree

packages/react-native-executorch/common/rnexecutorch/host_objects/JsiConversions.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -360,16 +360,6 @@ inline jsi::Value getJsiValue(uint64_t val, jsi::Runtime &runtime) {
360360
return {runtime, bigInt};
361361
}
362362

363-
inline jsi::Value getJsiValue(const std::vector<uint64_t> &vec,
364-
jsi::Runtime &runtime) {
365-
jsi::Array array(runtime, vec.size());
366-
for (size_t i = 0; i < vec.size(); i++) {
367-
// JS numbers are doubles. Large uint64s > 2^53 will lose precision.
368-
array.setValueAtIndex(runtime, i, jsi::Value(static_cast<double>(vec[i])));
369-
}
370-
return {runtime, array};
371-
}
372-
373363
inline jsi::Value getJsiValue(const std::vector<int64_t> &vec,
374364
jsi::Runtime &runtime) {
375365
jsi::Array array(runtime, vec.size());

packages/react-native-executorch/common/rnexecutorch/host_objects/ModelHostObject.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <rnexecutorch/metaprogramming/FunctionHelpers.h>
1818
#include <rnexecutorch/metaprogramming/TypeConcepts.h>
1919
#include <rnexecutorch/models/BaseModel.h>
20+
#include <rnexecutorch/models/VisionModel.h>
2021
#include <rnexecutorch/models/llm/LLM.h>
2122
#include <rnexecutorch/models/ocr/OCR.h>
2223
#include <rnexecutorch/models/speech_to_text/SpeechToText.h>
@@ -158,10 +159,10 @@ template <typename Model> class ModelHostObject : public JsiHostObject {
158159
"stream"));
159160
}
160161

161-
if constexpr (meta::DerivedFromOrSameAs<Model, models::VisionModel>) {
162+
if constexpr (meta::HasGenerateFromFrame<Model>) {
162163
addFunctions(JSI_EXPORT_FUNCTION(
163-
ModelHostObject<Model>, synchronousHostFunction<&Model::streamStop>,
164-
"streamStop"));
164+
ModelHostObject<Model>, visionHostFunction<&Model::generateFromFrame>,
165+
"generateFromFrame"));
165166
}
166167

167168
if constexpr (meta::HasGenerateFromPixels<Model>) {

packages/react-native-executorch/common/rnexecutorch/metaprogramming/FunctionHelpers.h

Lines changed: 65 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,39 @@
33
#include <cstddef>
44
#include <jsi/jsi.h>
55
#include <tuple>
6+
#include <type_traits>
67

78
#include <rnexecutorch/host_objects/JsiConversions.h>
89

910
namespace rnexecutorch::meta {
1011
using namespace facebook;
1112

13+
// =========================================================================
14+
// 1. Function Traits (Extracts Arity, Return Type, Args)
15+
// =========================================================================
16+
17+
template <typename T> struct FunctionTraits;
18+
19+
// Specialization for Member Functions
20+
template <typename R, typename C, typename... Args>
21+
struct FunctionTraits<R (C::*)(Args...)> {
22+
static constexpr std::size_t arity = sizeof...(Args);
23+
using return_type = R;
24+
using args_tuple = std::tuple<Args...>;
25+
};
26+
27+
// Specialization for const Member Functions
28+
template <typename R, typename C, typename... Args>
29+
struct FunctionTraits<R (C::*)(Args...) const> {
30+
static constexpr std::size_t arity = sizeof...(Args);
31+
using return_type = R;
32+
using args_tuple = std::tuple<Args...>;
33+
};
34+
35+
// =========================================================================
36+
// 2. Argument Counting Helpers
37+
// =========================================================================
38+
1239
template <typename Model, typename R, typename... Types>
1340
constexpr std::size_t getArgumentCount(R (Model::*f)(Types...)) {
1441
return sizeof...(Types);
@@ -19,6 +46,10 @@ constexpr std::size_t getArgumentCount(R (Model::*f)(Types...) const) {
1946
return sizeof...(Types);
2047
}
2148

49+
// =========================================================================
50+
// 3. JSI -> Tuple Conversion Logic
51+
// =========================================================================
52+
2253
template <typename... Types, std::size_t... I>
2354
std::tuple<Types...> fillTupleFromArgs(std::index_sequence<I...>,
2455
const jsi::Value *args,
@@ -31,7 +62,6 @@ std::tuple<Types...> fillTupleFromArgs(std::index_sequence<I...>,
3162
* arguments for method supplied with a pointer. The types in the tuple are
3263
* inferred from the method pointer.
3364
*/
34-
3565
template <typename Model, typename R, typename... Types>
3666
std::tuple<Types...> createArgsTupleFromJsi(R (Model::*f)(Types...),
3767
const jsi::Value *args,
@@ -47,4 +77,37 @@ std::tuple<Types...> createArgsTupleFromJsi(R (Model::*f)(Types...) const,
4777
return fillTupleFromArgs<Types...>(std::index_sequence_for<Types...>{}, args,
4878
runtime);
4979
}
50-
} // namespace rnexecutorch::meta
80+
81+
// Overload for free functions (used by TailSignature dummy)
82+
template <typename... Types>
83+
std::tuple<Types...> createArgsTupleFromJsi(void (*f)(Types...),
84+
const jsi::Value *args,
85+
jsi::Runtime &runtime) {
86+
return fillTupleFromArgs<Types...>(std::index_sequence_for<Types...>{}, args,
87+
runtime);
88+
}
89+
90+
// =========================================================================
91+
// 4. Tail Signature Helper (Crucial for Vision Functions)
92+
// =========================================================================
93+
94+
// Extracts the "Tail" arguments of a function signature, skipping the first
95+
// two arguments (Runtime and FrameValue).
96+
template <typename T> struct TailSignature;
97+
98+
// Non-const member function specialization
99+
template <typename R, typename C, typename Arg1, typename Arg2,
100+
typename... Rest>
101+
struct TailSignature<R (C::*)(Arg1, Arg2, Rest...)> {
102+
// A dummy function that has the signature of just the "Rest" arguments.
103+
static void dummy(Rest...) {}
104+
};
105+
106+
// Const member function specialization
107+
template <typename R, typename C, typename Arg1, typename Arg2,
108+
typename... Rest>
109+
struct TailSignature<R (C::*)(Arg1, Arg2, Rest...) const> {
110+
static void dummy(Rest...) {}
111+
};
112+
113+
} // namespace rnexecutorch::meta

packages/react-native-executorch/common/rnexecutorch/metaprogramming/TypeConcepts.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ concept HasGenerateFromPixels = requires(T t) {
2121
{ &T::generateFromPixels };
2222
};
2323

24+
template <typename T>
25+
concept HasGenerateFromFrame = requires(T t) {
26+
{ &T::generateFromFrame };
27+
};
28+
2429
template <typename T>
2530
concept HasEncode = requires(T t) {
2631
{ &T::encode };

yarn.lock

Lines changed: 30 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -4325,9 +4325,9 @@ __metadata:
43254325
languageName: node
43264326
linkType: hard
43274327

4328-
"@shopify/react-native-skia@npm:2.4.14":
4329-
version: 2.4.14
4330-
resolution: "@shopify/react-native-skia@npm:2.4.14"
4328+
"@shopify/react-native-skia@npm:2.2.12":
4329+
version: 2.2.12
4330+
resolution: "@shopify/react-native-skia@npm:2.2.12"
43314331
dependencies:
43324332
canvaskit-wasm: "npm:0.40.0"
43334333
react-reconciler: "npm:0.31.0"
@@ -4342,7 +4342,7 @@ __metadata:
43424342
optional: true
43434343
bin:
43444344
setup-skia-web: scripts/setup-canvaskit.js
4345-
checksum: 10/cb0274dadb89046b357fb9cf071349f2e6c348ca3ea18360a791e084a1456c729de862d2cda3c0b81b306faebbbf2b63a91380ca2de3298266f0aa248f12d434
4345+
checksum: 10/2543664085470267a9a6491ee90760f01d258cdd97cda5955d0c9f980ad57d647dffa5670f9d5d5f8cd6180ff46fe1df6f4281ae2e0b5c3632c703479b6a7608
43464346
languageName: node
43474347
linkType: hard
43484348

@@ -4692,7 +4692,7 @@ __metadata:
46924692
languageName: node
46934693
linkType: hard
46944694

4695-
"@types/react@npm:~19.1.0, @types/react@npm:~19.1.10":
4695+
"@types/react@npm:~19.1.10":
46964696
version: 19.1.17
46974697
resolution: "@types/react@npm:19.1.17"
46984698
dependencies:
@@ -4701,6 +4701,15 @@ __metadata:
47014701
languageName: node
47024702
linkType: hard
47034703

4704+
"@types/react@npm:~19.2.0":
4705+
version: 19.2.14
4706+
resolution: "@types/react@npm:19.2.14"
4707+
dependencies:
4708+
csstype: "npm:^3.2.2"
4709+
checksum: 10/fbff239089ee64b6bd9b00543594db498278b06de527ef1b0f71bb0eb09cc4445a71b5dd3c0d3d0257255c4eed94406be40a74ad4a987ade8a8d5dd65c82bc5f
4710+
languageName: node
4711+
linkType: hard
4712+
47044713
"@types/semver@npm:^7.3.12":
47054714
version: 7.7.1
47064715
resolution: "@types/semver@npm:7.7.1"
@@ -6286,15 +6295,14 @@ __metadata:
62866295
resolution: "computer-vision@workspace:apps/computer-vision"
62876296
dependencies:
62886297
"@babel/core": "npm:^7.25.2"
6289-
"@expo/config-plugins": "npm:~54.0.4"
62906298
"@react-native-executorch/expo-resource-fetcher": "workspace:*"
62916299
"@react-native/metro-config": "npm:^0.81.5"
62926300
"@react-navigation/drawer": "npm:^7.3.9"
62936301
"@react-navigation/native": "npm:^7.1.6"
6294-
"@shopify/react-native-skia": "npm:2.4.14"
6302+
"@shopify/react-native-skia": "npm:2.2.12"
62956303
"@types/pngjs": "npm:^6.0.5"
6296-
"@types/react": "npm:~19.1.0"
6297-
expo: "npm:~54.0.33"
6304+
"@types/react": "npm:~19.2.0"
6305+
expo: "npm:^54.0.27"
62986306
expo-build-properties: "npm:~1.0.10"
62996307
expo-constants: "npm:~18.0.11"
63006308
expo-font: "npm:~14.0.10"
@@ -6303,21 +6311,19 @@ __metadata:
63036311
expo-status-bar: "npm:~3.0.9"
63046312
metro-config: "npm:^0.81.5"
63056313
react: "npm:19.1.0"
6306-
react-dom: "npm:19.1.0"
63076314
react-native: "npm:0.81.5"
63086315
react-native-device-info: "npm:^14.0.4"
63096316
react-native-executorch: "workspace:*"
6310-
react-native-gesture-handler: "npm:~2.30.0"
6317+
react-native-gesture-handler: "npm:~2.28.0"
63116318
react-native-image-picker: "npm:^7.2.2"
63126319
react-native-loading-spinner-overlay: "npm:^3.0.1"
63136320
react-native-nitro-image: "npm:0.10.2"
63146321
react-native-nitro-modules: "npm:0.33.4"
63156322
react-native-reanimated: "npm:~4.2.1"
63166323
react-native-safe-area-context: "npm:~5.6.0"
6317-
react-native-screens: "npm:~4.22.0"
6318-
react-native-svg: "npm:15.15.1"
6324+
react-native-screens: "npm:~4.16.0"
6325+
react-native-svg: "npm:15.12.1"
63196326
react-native-svg-transformer: "npm:^1.5.0"
6320-
react-native-vision-camera: "portal:../../../react-native-vision-camera-v5/packages/react-native-vision-camera"
63216327
react-native-worklets: "npm:^0.7.2"
63226328
languageName: unknown
63236329
linkType: soft
@@ -6661,7 +6667,7 @@ __metadata:
66616667
languageName: node
66626668
linkType: hard
66636669

6664-
"csstype@npm:^3.0.2":
6670+
"csstype@npm:^3.0.2, csstype@npm:^3.2.2":
66656671
version: 3.2.3
66666672
resolution: "csstype@npm:3.2.3"
66676673
checksum: 10/ad41baf7e2ffac65ab544d79107bf7cd1a4bb9bab9ac3302f59ab4ba655d5e30942a8ae46e10ba160c6f4ecea464cc95b975ca2fefbdeeacd6ac63f12f99fe1f
@@ -7935,7 +7941,7 @@ __metadata:
79357941
languageName: node
79367942
linkType: hard
79377943

7938-
"expo@npm:^54.0.0, expo@npm:^54.0.27, expo@npm:~54.0.33":
7944+
"expo@npm:^54.0.0, expo@npm:^54.0.27":
79397945
version: 54.0.33
79407946
resolution: "expo@npm:54.0.33"
79417947
dependencies:
@@ -12454,17 +12460,6 @@ __metadata:
1245412460
languageName: node
1245512461
linkType: hard
1245612462

12457-
"react-dom@npm:19.1.0":
12458-
version: 19.1.0
12459-
resolution: "react-dom@npm:19.1.0"
12460-
dependencies:
12461-
scheduler: "npm:^0.26.0"
12462-
peerDependencies:
12463-
react: ^19.1.0
12464-
checksum: 10/c5b58605862c7b0bb044416b01c73647bb8e89717fb5d7a2c279b11815fb7b49b619fe685c404e59f55eb52c66831236cc565c25ee1c2d042739f4a2cc538aa2
12465-
languageName: node
12466-
linkType: hard
12467-
1246812463
"react-fast-compare@npm:^3.2.2":
1246912464
version: 3.2.2
1247012465
resolution: "react-fast-compare@npm:3.2.2"
@@ -12502,9 +12497,11 @@ __metadata:
1250212497
languageName: node
1250312498
linkType: hard
1250412499

12505-
"react-native-audio-api@npm:0.6.5":
12506-
version: 0.6.5
12507-
resolution: "react-native-audio-api@npm:0.6.5"
12500+
"react-native-audio-api@npm:0.11.3":
12501+
version: 0.11.3
12502+
resolution: "react-native-audio-api@npm:0.11.3"
12503+
dependencies:
12504+
semver: "npm:^7.7.3"
1250812505
peerDependencies:
1250912506
react: "*"
1251012507
react-native: "*"
@@ -12586,7 +12583,6 @@ __metadata:
1258612583
version: 0.0.0-use.local
1258712584
resolution: "react-native-executorch-monorepo@workspace:."
1258812585
dependencies:
12589-
"@babel/plugin-transform-export-namespace-from": "npm:^7.27.1"
1259012586
"@cspell/eslint-plugin": "npm:^8.19.0"
1259112587
"@evilmartians/lefthook": "npm:^1.5.0"
1259212588
"@react-native/eslint-config": "npm:^0.79.0"
@@ -12646,20 +12642,6 @@ __metadata:
1264612642
languageName: node
1264712643
linkType: hard
1264812644

12649-
"react-native-gesture-handler@npm:~2.30.0":
12650-
version: 2.30.0
12651-
resolution: "react-native-gesture-handler@npm:2.30.0"
12652-
dependencies:
12653-
"@egjs/hammerjs": "npm:^2.0.17"
12654-
hoist-non-react-statics: "npm:^3.3.0"
12655-
invariant: "npm:^2.2.4"
12656-
peerDependencies:
12657-
react: "*"
12658-
react-native: "*"
12659-
checksum: 10/242b1eb29202bc9fc7bf0271c3da102559adc9f2810441465b6d78c1a8ed8f65bdd91335957c841a4716f796be3e7b87d1d55629d6803ea12e1be832d89c946c
12660-
languageName: node
12661-
linkType: hard
12662-
1266312645
"react-native-image-picker@npm:^7.2.2":
1266412646
version: 7.2.3
1266512647
resolution: "react-native-image-picker@npm:7.2.3"
@@ -12789,19 +12771,6 @@ __metadata:
1278912771
languageName: node
1279012772
linkType: hard
1279112773

12792-
"react-native-screens@npm:~4.22.0":
12793-
version: 4.22.0
12794-
resolution: "react-native-screens@npm:4.22.0"
12795-
dependencies:
12796-
react-freeze: "npm:^1.0.0"
12797-
warn-once: "npm:^0.1.0"
12798-
peerDependencies:
12799-
react: "*"
12800-
react-native: "*"
12801-
checksum: 10/42be14f2de0bfe7b76e3e8fccffa8843fc558cda70aa182c8cb7ed2697826a684cd83abb0a8647dbd1e01a0710960a120b706f01502a4206819d6f54ef3d3fce
12802-
languageName: node
12803-
linkType: hard
12804-
1280512774
"react-native-svg-transformer@npm:^1.5.0":
1280612775
version: 1.5.3
1280712776
resolution: "react-native-svg-transformer@npm:1.5.3"
@@ -12831,32 +12800,6 @@ __metadata:
1283112800
languageName: node
1283212801
linkType: hard
1283312802

12834-
"react-native-svg@npm:15.15.1":
12835-
version: 15.15.1
12836-
resolution: "react-native-svg@npm:15.15.1"
12837-
dependencies:
12838-
css-select: "npm:^5.1.0"
12839-
css-tree: "npm:^1.1.3"
12840-
warn-once: "npm:0.1.1"
12841-
peerDependencies:
12842-
react: "*"
12843-
react-native: "*"
12844-
checksum: 10/3a5dbbee0c6a81b3feb2b91a5a617a1a25e01c908686af479fab4fe6661376253ba0e0e1d3eda36f27eab9b2cd2c4c17b68423cfca465df255f20cacc1ba384d
12845-
languageName: node
12846-
linkType: hard
12847-
12848-
"react-native-vision-camera@portal:../../../react-native-vision-camera-v5/packages/react-native-vision-camera::locator=computer-vision%40workspace%3Aapps%2Fcomputer-vision":
12849-
version: 0.0.0-use.local
12850-
resolution: "react-native-vision-camera@portal:../../../react-native-vision-camera-v5/packages/react-native-vision-camera::locator=computer-vision%40workspace%3Aapps%2Fcomputer-vision"
12851-
peerDependencies:
12852-
react: "*"
12853-
react-native: "*"
12854-
react-native-nitro-image: "*"
12855-
react-native-nitro-modules: "*"
12856-
react-native-worklets: "*"
12857-
languageName: node
12858-
linkType: soft
12859-
1286012803
"react-native-worklets@npm:0.5.1":
1286112804
version: 0.5.1
1286212805
resolution: "react-native-worklets@npm:0.5.1"
@@ -13387,7 +13330,7 @@ __metadata:
1338713330
languageName: node
1338813331
linkType: hard
1338913332

13390-
"scheduler@npm:0.26.0, scheduler@npm:^0.26.0":
13333+
"scheduler@npm:0.26.0":
1339113334
version: 0.26.0
1339213335
resolution: "scheduler@npm:0.26.0"
1339313336
checksum: 10/1ecf2e5d7de1a7a132796834afe14a2d589ba7e437615bd8c06f3e0786a3ac3434655e67aac8755d9b14e05754c177e49c064261de2673aaa3c926bc98caa002
@@ -13428,7 +13371,7 @@ __metadata:
1342813371
languageName: node
1342913372
linkType: hard
1343013373

13431-
"semver@npm:^7.1.3, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.7.1":
13374+
"semver@npm:^7.1.3, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.7.1, semver@npm:^7.7.3":
1343213375
version: 7.7.4
1343313376
resolution: "semver@npm:7.7.4"
1343413377
bin:
@@ -15148,4 +15091,4 @@ __metadata:
1514815091
resolution: "zod@npm:3.25.76"
1514915092
checksum: 10/f0c963ec40cd96858451d1690404d603d36507c1fc9682f2dae59ab38b578687d542708a7fdbf645f77926f78c9ed558f57c3d3aa226c285f798df0c4da16995
1515015093
languageName: node
15151-
linkType: hard
15094+
linkType: hard

0 commit comments

Comments
 (0)