|
9 | 9 |
|
10 | 10 | namespace facebook::react { |
11 | 11 |
|
12 | | -static jsi::Value deepCopyJSIValue(jsi::Runtime& rt, const jsi::Value& value) { |
13 | | - if (value.isNull()) { |
14 | | - return jsi::Value::null(); |
15 | | - } |
16 | | - |
17 | | - if (value.isBool()) { |
18 | | - return jsi::Value(value.getBool()); |
19 | | - } |
20 | | - |
21 | | - if (value.isNumber()) { |
22 | | - return jsi::Value(value.getNumber()); |
23 | | - } |
24 | | - |
25 | | - if (value.isString()) { |
26 | | - return value.getString(rt); |
27 | | - } |
28 | | - |
29 | | - if (value.isObject()) { |
30 | | - jsi::Object o = value.getObject(rt); |
31 | | - if (o.isArray(rt)) { |
32 | | - return deepCopyJSIArray(rt, o.getArray(rt)); |
33 | | - } |
34 | | - if (o.isFunction(rt)) { |
35 | | - return o.getFunction(rt); |
36 | | - } |
37 | | - return deepCopyJSIObject(rt, o); |
38 | | - } |
39 | | - |
40 | | - return jsi::Value::undefined(); |
41 | | -} |
42 | | - |
43 | | -jsi::Object deepCopyJSIObject(jsi::Runtime& rt, const jsi::Object& obj) { |
44 | | - jsi::Object copy(rt); |
45 | | - jsi::Array propertyNames = obj.getPropertyNames(rt); |
46 | | - size_t size = propertyNames.size(rt); |
47 | | - for (size_t i = 0; i < size; i++) { |
48 | | - jsi::String name = propertyNames.getValueAtIndex(rt, i).getString(rt); |
49 | | - jsi::Value value = obj.getProperty(rt, name); |
50 | | - copy.setProperty(rt, name, deepCopyJSIValue(rt, value)); |
51 | | - } |
52 | | - return copy; |
53 | | -} |
54 | | - |
55 | | -jsi::Array deepCopyJSIArray(jsi::Runtime& rt, const jsi::Array& arr) { |
56 | | - size_t size = arr.size(rt); |
57 | | - jsi::Array copy(rt, size); |
58 | | - for (size_t i = 0; i < size; i++) { |
59 | | - copy.setValueAtIndex( |
60 | | - rt, i, deepCopyJSIValue(rt, arr.getValueAtIndex(rt, i))); |
61 | | - } |
62 | | - return copy; |
63 | | -} |
64 | | - |
65 | 12 | Promise::Promise(jsi::Runtime& rt, jsi::Function resolve, jsi::Function reject) |
66 | 13 | : LongLivedObject(rt), |
67 | 14 | resolve_(std::move(resolve)), |
|
0 commit comments