@shopify/react-native-skia 1.11.4 → 1.11.6
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/android/CMakeLists.txt +0 -1
- package/cpp/api/JsiSkParagraph.h +1 -3
- package/cpp/api/recorder/Convertor.h +57 -9
- package/cpp/api/recorder/Drawings.h +11 -36
- package/cpp/jsi/ViewProperty.h +1 -3
- package/lib/commonjs/animation/functions/interpolateColors.d.ts +1 -1
- package/lib/commonjs/dom/nodes/datatypes/Gradient.d.ts +2 -2
- package/lib/commonjs/dom/types/NodeType.js +8 -0
- package/lib/commonjs/dom/types/NodeType.js.map +1 -1
- package/lib/commonjs/external/reanimated/buffers.d.ts +1 -1
- package/lib/commonjs/renderer/__tests__/setup.d.ts +1 -1
- package/lib/commonjs/skia/types/Image/ColorType.js +20 -2
- package/lib/commonjs/skia/types/Image/ColorType.js.map +1 -1
- package/lib/commonjs/skia/types/Image/ColorType.web.js +18 -2
- package/lib/commonjs/skia/types/Image/ColorType.web.js.map +1 -1
- package/lib/commonjs/skia/types/ImageFilter/ImageFilter.js +14 -0
- package/lib/commonjs/skia/types/ImageFilter/ImageFilter.js.map +1 -1
- package/lib/commonjs/skia/types/MaskFilter.js +5 -2
- package/lib/commonjs/skia/types/MaskFilter.js.map +1 -1
- package/lib/commonjs/skia/types/Paint/BlendMode.js +31 -2
- package/lib/commonjs/skia/types/Paint/BlendMode.js.map +1 -1
- package/lib/commonjs/skia/types/Paragraph/ParagraphBuilder.js +14 -0
- package/lib/commonjs/skia/types/Paragraph/ParagraphBuilder.js.map +1 -1
- package/lib/commonjs/skia/types/Path/Path.js +4 -0
- package/lib/commonjs/skia/types/Path/Path.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkCanvas.d.ts +1 -1
- package/lib/commonjs/skia/web/JsiSkImage.d.ts +2 -2
- package/lib/commonjs/skia/web/JsiSkPaint.d.ts +1 -1
- package/lib/commonjs/skia/web/JsiSkPicture.d.ts +1 -1
- package/lib/commonjs/skia/web/JsiSkPoint.d.ts +1 -1
- package/lib/commonjs/skia/web/JsiSkRRect.d.ts +1 -1
- package/lib/commonjs/skia/web/JsiSkRSXform.d.ts +1 -1
- package/lib/commonjs/skia/web/JsiSkRect.d.ts +1 -1
- package/lib/commonjs/sksg/Container.d.ts +1 -0
- package/lib/commonjs/sksg/Container.js +8 -9
- package/lib/commonjs/sksg/Container.js.map +1 -1
- package/lib/commonjs/sksg/Recorder/Core.js +2 -0
- package/lib/commonjs/sksg/Recorder/Core.js.map +1 -1
- package/lib/commonjs/specs/NativeSkiaModule.web.d.ts +6 -0
- package/lib/commonjs/specs/NativeSkiaModule.web.js +33 -0
- package/lib/commonjs/specs/NativeSkiaModule.web.js.map +1 -1
- package/lib/commonjs/specs/SkiaPictureViewNativeComponent.web.d.ts +9 -0
- package/lib/commonjs/specs/SkiaPictureViewNativeComponent.web.js +32 -0
- package/lib/commonjs/specs/SkiaPictureViewNativeComponent.web.js.map +1 -0
- package/lib/commonjs/views/types.d.ts +1 -0
- package/lib/commonjs/views/types.js.map +1 -1
- package/lib/commonjs/web/LoadSkiaWeb.js +1 -2
- package/lib/commonjs/web/LoadSkiaWeb.js.map +1 -1
- package/lib/module/animation/functions/interpolateColors.d.ts +1 -1
- package/lib/module/dom/nodes/datatypes/Gradient.d.ts +2 -2
- package/lib/module/dom/types/NodeType.js +8 -0
- package/lib/module/dom/types/NodeType.js.map +1 -1
- package/lib/module/external/reanimated/buffers.d.ts +1 -1
- package/lib/module/renderer/__tests__/setup.d.ts +1 -1
- package/lib/module/skia/types/Image/ColorType.js +20 -2
- package/lib/module/skia/types/Image/ColorType.js.map +1 -1
- package/lib/module/skia/types/Image/ColorType.web.js +18 -2
- package/lib/module/skia/types/Image/ColorType.web.js.map +1 -1
- package/lib/module/skia/types/ImageFilter/ImageFilter.js +14 -0
- package/lib/module/skia/types/ImageFilter/ImageFilter.js.map +1 -1
- package/lib/module/skia/types/MaskFilter.js +5 -2
- package/lib/module/skia/types/MaskFilter.js.map +1 -1
- package/lib/module/skia/types/Paint/BlendMode.js +31 -2
- package/lib/module/skia/types/Paint/BlendMode.js.map +1 -1
- package/lib/module/skia/types/Paragraph/ParagraphBuilder.js +14 -0
- package/lib/module/skia/types/Paragraph/ParagraphBuilder.js.map +1 -1
- package/lib/module/skia/types/Path/Path.js +4 -0
- package/lib/module/skia/types/Path/Path.js.map +1 -1
- package/lib/module/skia/web/JsiSkCanvas.d.ts +1 -1
- package/lib/module/skia/web/JsiSkImage.d.ts +2 -2
- package/lib/module/skia/web/JsiSkPaint.d.ts +1 -1
- package/lib/module/skia/web/JsiSkPicture.d.ts +1 -1
- package/lib/module/skia/web/JsiSkPoint.d.ts +1 -1
- package/lib/module/skia/web/JsiSkRRect.d.ts +1 -1
- package/lib/module/skia/web/JsiSkRSXform.d.ts +1 -1
- package/lib/module/skia/web/JsiSkRect.d.ts +1 -1
- package/lib/module/sksg/Container.d.ts +1 -0
- package/lib/module/sksg/Container.js +8 -9
- package/lib/module/sksg/Container.js.map +1 -1
- package/lib/module/sksg/Recorder/Core.js +2 -0
- package/lib/module/sksg/Recorder/Core.js.map +1 -1
- package/lib/module/specs/NativeSkiaModule.web.d.ts +6 -0
- package/lib/module/specs/NativeSkiaModule.web.js +30 -1
- package/lib/module/specs/NativeSkiaModule.web.js.map +1 -1
- package/lib/module/specs/SkiaPictureViewNativeComponent.web.d.ts +9 -0
- package/lib/module/specs/SkiaPictureViewNativeComponent.web.js +26 -0
- package/lib/module/specs/SkiaPictureViewNativeComponent.web.js.map +1 -0
- package/lib/module/views/types.d.ts +1 -0
- package/lib/module/views/types.js.map +1 -1
- package/lib/typescript/lib/commonjs/animation/functions/interpolateColors.d.ts +1 -1
- package/lib/typescript/lib/commonjs/renderer/components/image/ImageShader.d.ts +1 -1
- package/lib/typescript/lib/commonjs/skia/web/JsiSkColor.d.ts +1 -1
- package/lib/typescript/lib/commonjs/skia/web/JsiSkia.d.ts +1 -1
- package/lib/typescript/lib/commonjs/specs/NativeSkiaModule.web.d.ts +1 -0
- package/lib/typescript/lib/commonjs/specs/SkiaPictureViewNativeComponent.web.d.ts +10 -0
- package/lib/typescript/lib/module/animation/functions/interpolateColors.d.ts +1 -1
- package/lib/typescript/lib/module/mock/index.d.ts +2 -2
- package/lib/typescript/lib/module/renderer/components/image/ImageShader.d.ts +1 -1
- package/lib/typescript/lib/module/skia/Skia.web.d.ts +1 -1
- package/lib/typescript/lib/module/skia/web/JsiSkColor.d.ts +1 -1
- package/lib/typescript/lib/module/skia/web/JsiSkia.d.ts +1 -1
- package/lib/typescript/lib/module/specs/NativeSkiaModule.web.d.ts +1 -0
- package/lib/typescript/lib/module/specs/SkiaPictureViewNativeComponent.web.d.ts +9 -0
- package/lib/typescript/src/animation/functions/interpolateColors.d.ts +1 -1
- package/lib/typescript/src/dom/nodes/datatypes/Gradient.d.ts +2 -2
- package/lib/typescript/src/external/reanimated/buffers.d.ts +1 -1
- package/lib/typescript/src/renderer/__tests__/setup.d.ts +1 -1
- package/lib/typescript/src/skia/web/JsiSkCanvas.d.ts +1 -1
- package/lib/typescript/src/skia/web/JsiSkImage.d.ts +2 -2
- package/lib/typescript/src/skia/web/JsiSkPaint.d.ts +1 -1
- package/lib/typescript/src/skia/web/JsiSkPicture.d.ts +1 -1
- package/lib/typescript/src/skia/web/JsiSkPoint.d.ts +1 -1
- package/lib/typescript/src/skia/web/JsiSkRRect.d.ts +1 -1
- package/lib/typescript/src/skia/web/JsiSkRSXform.d.ts +1 -1
- package/lib/typescript/src/skia/web/JsiSkRect.d.ts +1 -1
- package/lib/typescript/src/sksg/Container.d.ts +1 -0
- package/lib/typescript/src/specs/NativeSkiaModule.web.d.ts +6 -0
- package/lib/typescript/src/specs/SkiaPictureViewNativeComponent.web.d.ts +9 -0
- package/lib/typescript/src/views/types.d.ts +1 -0
- package/package.json +1 -1
- package/src/sksg/Container.ts +8 -8
- package/src/specs/NativeSkiaModule.web.ts +38 -0
- package/src/specs/SkiaPictureViewNativeComponent.web.ts +39 -0
- package/src/views/types.ts +1 -0
- package/cpp/jsi/JsiValue.cpp +0 -345
- package/cpp/jsi/JsiValue.h +0 -222
- package/lib/commonjs/renderer/Canvas.web.d.ts +0 -10
- package/lib/commonjs/renderer/Canvas.web.js +0 -110
- package/lib/commonjs/renderer/Canvas.web.js.map +0 -1
- package/lib/module/renderer/Canvas.web.d.ts +0 -10
- package/lib/module/renderer/Canvas.web.js +0 -105
- package/lib/module/renderer/Canvas.web.js.map +0 -1
- package/lib/typescript/lib/commonjs/renderer/Canvas.web.d.ts +0 -3
- package/lib/typescript/lib/module/renderer/Canvas.web.d.ts +0 -1
- package/lib/typescript/src/renderer/Canvas.web.d.ts +0 -10
- package/src/renderer/Canvas.web.tsx +0 -134
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { SkRect } from "../skia/types";
|
|
2
|
+
import type { ISkiaViewApi } from "../views/types";
|
|
3
|
+
import type { SkiaPictureView } from "../views/SkiaPictureView.web";
|
|
4
|
+
|
|
5
|
+
export type ISkiaViewApiWeb = ISkiaViewApi & {
|
|
6
|
+
views: Record<string, SkiaPictureView>;
|
|
7
|
+
registerView(nativeId: string, view: SkiaPictureView): void;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
global.SkiaViewApi = {
|
|
11
|
+
views: {},
|
|
12
|
+
web: true,
|
|
13
|
+
registerView(nativeId: string, view: SkiaPictureView) {
|
|
14
|
+
this.views[nativeId] = view;
|
|
15
|
+
},
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
|
+
setJsiProperty(nativeId: number, name: string, value: any) {
|
|
18
|
+
if (name === "picture") {
|
|
19
|
+
this.views[`${nativeId}`].setPicture(value);
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
requestRedraw(nativeId: number) {
|
|
23
|
+
this.views[`${nativeId}`].redraw();
|
|
24
|
+
},
|
|
25
|
+
makeImageSnapshot(nativeId: number, rect?: SkRect) {
|
|
26
|
+
return this.views[`${nativeId}`].makeImageSnapshot(rect);
|
|
27
|
+
},
|
|
28
|
+
makeImageSnapshotAsync(nativeId: number, rect?: SkRect) {
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
const result = this.views[`${nativeId}`].makeImageSnapshot(rect);
|
|
31
|
+
if (result) {
|
|
32
|
+
resolve(result);
|
|
33
|
+
} else {
|
|
34
|
+
reject(new Error("Failed to make image snapshot"));
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
} as ISkiaViewApiWeb;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ViewProps } from "react-native";
|
|
2
|
+
import { createElement, useEffect, useRef } from "react";
|
|
3
|
+
|
|
4
|
+
import { SkiaPictureView } from "../views/SkiaPictureView.web";
|
|
5
|
+
|
|
6
|
+
import type { ISkiaViewApiWeb } from "./NativeSkiaModule.web";
|
|
7
|
+
|
|
8
|
+
export interface NativeProps extends ViewProps {
|
|
9
|
+
debug?: boolean;
|
|
10
|
+
opaque?: boolean;
|
|
11
|
+
nativeID: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const SkiaPictureViewNativeComponent = ({
|
|
15
|
+
nativeID,
|
|
16
|
+
debug,
|
|
17
|
+
opaque,
|
|
18
|
+
onLayout,
|
|
19
|
+
...viewProps
|
|
20
|
+
}: NativeProps) => {
|
|
21
|
+
const ref = useRef(null);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
if (ref.current) {
|
|
24
|
+
(global.SkiaViewApi as ISkiaViewApiWeb).registerView(
|
|
25
|
+
nativeID,
|
|
26
|
+
ref.current
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
}, [nativeID]);
|
|
30
|
+
return createElement(SkiaPictureView, {
|
|
31
|
+
ref,
|
|
32
|
+
debug,
|
|
33
|
+
opaque,
|
|
34
|
+
onLayout,
|
|
35
|
+
...viewProps,
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
// eslint-disable-next-line import/no-default-export
|
|
39
|
+
export default SkiaPictureViewNativeComponent;
|
package/src/views/types.ts
CHANGED
|
@@ -10,6 +10,7 @@ export type NativeSkiaViewProps = ViewProps & {
|
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
export interface ISkiaViewApi {
|
|
13
|
+
web?: boolean;
|
|
13
14
|
setJsiProperty: <T>(nativeId: number, name: string, value: T) => void;
|
|
14
15
|
requestRedraw: (nativeId: number) => void;
|
|
15
16
|
makeImageSnapshot: (nativeId: number, rect?: SkRect) => SkImage;
|
package/cpp/jsi/JsiValue.cpp
DELETED
|
@@ -1,345 +0,0 @@
|
|
|
1
|
-
#include "JsiValue.h"
|
|
2
|
-
|
|
3
|
-
namespace RNJsi {
|
|
4
|
-
|
|
5
|
-
JsiValue::JsiValue() : _type(PropType::Undefined) {}
|
|
6
|
-
|
|
7
|
-
JsiValue::JsiValue(jsi::Runtime &runtime, const jsi::Value &value)
|
|
8
|
-
: JsiValue() {
|
|
9
|
-
setCurrent(runtime, value);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
void JsiValue::setCurrent(jsi::Runtime &runtime, const jsi::Value &value) {
|
|
13
|
-
_stringValue = "";
|
|
14
|
-
_hostObject = nullptr;
|
|
15
|
-
_hostFunction = nullptr;
|
|
16
|
-
_props.clear();
|
|
17
|
-
_array.clear();
|
|
18
|
-
_keysCache.clear();
|
|
19
|
-
|
|
20
|
-
if (value.isNumber()) {
|
|
21
|
-
_type = PropType::Number;
|
|
22
|
-
_numberValue = value.asNumber();
|
|
23
|
-
} else if (value.isBool()) {
|
|
24
|
-
_type = PropType::Bool;
|
|
25
|
-
_boolValue = value.getBool();
|
|
26
|
-
} else if (value.isString()) {
|
|
27
|
-
_type = PropType::String;
|
|
28
|
-
_stringValue = value.asString(runtime).utf8(runtime);
|
|
29
|
-
} else if (value.isUndefined()) {
|
|
30
|
-
_type = PropType::Undefined;
|
|
31
|
-
} else if (value.isNull()) {
|
|
32
|
-
_type = PropType::Null;
|
|
33
|
-
} else if (value.isObject()) {
|
|
34
|
-
setObject(runtime, value);
|
|
35
|
-
} else {
|
|
36
|
-
throw std::runtime_error("Could not store jsi::Value of provided type");
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
bool JsiValue::getAsBool() const {
|
|
41
|
-
if (_type != PropType::Bool) {
|
|
42
|
-
throw std::runtime_error("Expected type bool, got " +
|
|
43
|
-
getTypeAsString(_type));
|
|
44
|
-
}
|
|
45
|
-
return _boolValue;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
double JsiValue::getAsNumber() const {
|
|
49
|
-
if (_type != PropType::Number) {
|
|
50
|
-
throw std::runtime_error("Expected type number, got " +
|
|
51
|
-
getTypeAsString(_type));
|
|
52
|
-
}
|
|
53
|
-
return _numberValue;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const std::string &JsiValue::getAsString() const {
|
|
57
|
-
if (_type == PropType::Number) {
|
|
58
|
-
return std::to_string(_numberValue);
|
|
59
|
-
}
|
|
60
|
-
if (_type != PropType::String) {
|
|
61
|
-
throw std::runtime_error("Expected type string, got " +
|
|
62
|
-
getTypeAsString(_type));
|
|
63
|
-
}
|
|
64
|
-
return _stringValue;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const std::vector<JsiValue> &JsiValue::getAsArray() const {
|
|
68
|
-
if (_type != PropType::Array) {
|
|
69
|
-
throw std::runtime_error("Expected type array, got " +
|
|
70
|
-
getTypeAsString(_type));
|
|
71
|
-
}
|
|
72
|
-
return _array;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const JsiValue &JsiValue::getValue(PropId name) const {
|
|
76
|
-
if (_type != PropType::Object) {
|
|
77
|
-
throw std::runtime_error("Expected type object, got " +
|
|
78
|
-
getTypeAsString(_type));
|
|
79
|
-
}
|
|
80
|
-
return _props.at(name);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
bool JsiValue::hasValue(PropId name) const {
|
|
84
|
-
if (_type != PropType::Object) {
|
|
85
|
-
throw std::runtime_error("Expected type object, got " +
|
|
86
|
-
getTypeAsString(_type));
|
|
87
|
-
}
|
|
88
|
-
return _props.count(name) > 0;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
std::vector<PropId> JsiValue::getKeys() const {
|
|
92
|
-
if (_type != PropType::Object) {
|
|
93
|
-
throw std::runtime_error("Expected type object, got " +
|
|
94
|
-
getTypeAsString(_type));
|
|
95
|
-
}
|
|
96
|
-
return _keysCache;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
std::shared_ptr<jsi::HostObject> JsiValue::getAsHostObject() const {
|
|
100
|
-
if (_type != PropType::HostObject) {
|
|
101
|
-
throw std::runtime_error("Expected type host object, got " +
|
|
102
|
-
getTypeAsString(_type));
|
|
103
|
-
}
|
|
104
|
-
return _hostObject;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
jsi::HostFunctionType JsiValue::getAsHostFunction() const {
|
|
108
|
-
if (_type != PropType::HostFunction) {
|
|
109
|
-
throw std::runtime_error("Expected type host function, got " +
|
|
110
|
-
getTypeAsString(_type));
|
|
111
|
-
}
|
|
112
|
-
return _hostFunction;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const jsi::HostFunctionType JsiValue::getAsFunction() const {
|
|
116
|
-
return getAsHostFunction();
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
std::string JsiValue::asString() const {
|
|
120
|
-
switch (_type) {
|
|
121
|
-
case PropType::Null:
|
|
122
|
-
return "(null)";
|
|
123
|
-
case PropType::Undefined:
|
|
124
|
-
return "(undefined)";
|
|
125
|
-
case PropType::Number:
|
|
126
|
-
return std::to_string(_numberValue);
|
|
127
|
-
case PropType::Bool:
|
|
128
|
-
return std::to_string(_boolValue);
|
|
129
|
-
case PropType::String:
|
|
130
|
-
return _stringValue;
|
|
131
|
-
case PropType::Object:
|
|
132
|
-
return "[Object]";
|
|
133
|
-
case PropType::Array:
|
|
134
|
-
return "[Array]";
|
|
135
|
-
case PropType::HostObject:
|
|
136
|
-
return "[HostObject]";
|
|
137
|
-
case PropType::HostFunction:
|
|
138
|
-
return "[HostFunction]";
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
jsi::Value JsiValue::getAsJsiValue(jsi::Runtime &runtime) const {
|
|
143
|
-
switch (_type) {
|
|
144
|
-
case PropType::Undefined:
|
|
145
|
-
return jsi::Value::undefined();
|
|
146
|
-
case PropType::Null:
|
|
147
|
-
return jsi::Value::null();
|
|
148
|
-
case PropType::Number:
|
|
149
|
-
return _numberValue;
|
|
150
|
-
case PropType::Bool:
|
|
151
|
-
return _boolValue;
|
|
152
|
-
case PropType::String:
|
|
153
|
-
return jsi::String::createFromUtf8(runtime, _stringValue);
|
|
154
|
-
case PropType::Object:
|
|
155
|
-
return getObject(runtime);
|
|
156
|
-
case PropType::Array:
|
|
157
|
-
return getArray(runtime);
|
|
158
|
-
case PropType::HostObject:
|
|
159
|
-
return getHostObject(runtime);
|
|
160
|
-
case PropType::HostFunction:
|
|
161
|
-
return getHostFunction(runtime);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
std::string JsiValue::getTypeAsString(PropType type) {
|
|
166
|
-
switch (type) {
|
|
167
|
-
case PropType::Undefined:
|
|
168
|
-
return "undefined";
|
|
169
|
-
case PropType::Null:
|
|
170
|
-
return "null";
|
|
171
|
-
case PropType::Number:
|
|
172
|
-
return "number";
|
|
173
|
-
case PropType::Bool:
|
|
174
|
-
return "boolean";
|
|
175
|
-
case PropType::String:
|
|
176
|
-
return "string";
|
|
177
|
-
case PropType::Object:
|
|
178
|
-
return "object";
|
|
179
|
-
case PropType::Array:
|
|
180
|
-
return "array";
|
|
181
|
-
case PropType::HostObject:
|
|
182
|
-
return "hostobject";
|
|
183
|
-
case PropType::HostFunction:
|
|
184
|
-
return "hostfunction";
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
void JsiValue::setObject(jsi::Runtime &runtime, const jsi::Value &value) {
|
|
189
|
-
auto obj = value.asObject(runtime);
|
|
190
|
-
if (obj.isFunction(runtime)) {
|
|
191
|
-
setFunction(runtime, value);
|
|
192
|
-
} else if (obj.isArray(runtime)) {
|
|
193
|
-
setArray(runtime, obj);
|
|
194
|
-
} else if (obj.isHostObject(runtime)) {
|
|
195
|
-
setHostObject(runtime, obj);
|
|
196
|
-
} else {
|
|
197
|
-
_type = PropType::Object;
|
|
198
|
-
// Read object keys
|
|
199
|
-
auto keys = obj.getPropertyNames(runtime);
|
|
200
|
-
size_t size = keys.size(runtime);
|
|
201
|
-
_keysCache.clear();
|
|
202
|
-
_keysCache.reserve(size);
|
|
203
|
-
_props.clear();
|
|
204
|
-
_props.reserve(size);
|
|
205
|
-
|
|
206
|
-
for (size_t i = 0; i < size; ++i) {
|
|
207
|
-
auto key = JsiPropId::get(
|
|
208
|
-
keys.getValueAtIndex(runtime, i).asString(runtime).utf8(runtime));
|
|
209
|
-
try {
|
|
210
|
-
_props.try_emplace(key, runtime, obj.getProperty(runtime, key));
|
|
211
|
-
_keysCache.push_back(key);
|
|
212
|
-
} catch (jsi::JSError e) {
|
|
213
|
-
throw jsi::JSError(runtime,
|
|
214
|
-
"Could not set property for key " +
|
|
215
|
-
std::string(key) + ":\n" + e.getMessage(),
|
|
216
|
-
e.getStack());
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
jsi::Object JsiValue::getObject(jsi::Runtime &runtime) const {
|
|
223
|
-
assert(_type == PropType::Object);
|
|
224
|
-
auto obj = jsi::Object(runtime);
|
|
225
|
-
for (auto &p : _props) {
|
|
226
|
-
obj.setProperty(runtime, p.first, p.second.getAsJsiValue(runtime));
|
|
227
|
-
}
|
|
228
|
-
return obj;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
bool JsiValue::operator!=(const JsiValue &other) const {
|
|
232
|
-
return !(this->operator==(other));
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
bool JsiValue::operator==(const JsiValue &other) const {
|
|
236
|
-
|
|
237
|
-
if (other.getType() != getType()) {
|
|
238
|
-
return false;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
switch (_type) {
|
|
242
|
-
case PropType::Null:
|
|
243
|
-
case PropType::Undefined:
|
|
244
|
-
return true;
|
|
245
|
-
case PropType::Number:
|
|
246
|
-
return _numberValue == other.getAsNumber();
|
|
247
|
-
case PropType::Bool:
|
|
248
|
-
return _boolValue == other.getAsBool();
|
|
249
|
-
case PropType::String:
|
|
250
|
-
return _stringValue == other.getAsString();
|
|
251
|
-
case PropType::Object: {
|
|
252
|
-
if (_props.size() != other.getProps().size()) {
|
|
253
|
-
return false;
|
|
254
|
-
}
|
|
255
|
-
for (auto &p : _props) {
|
|
256
|
-
auto t = p.second.operator==(other.getValue(p.first));
|
|
257
|
-
if (!t) {
|
|
258
|
-
return false;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
return true;
|
|
262
|
-
}
|
|
263
|
-
case PropType::Array: {
|
|
264
|
-
auto otherArr = other.getAsArray();
|
|
265
|
-
if (_array.size() != otherArr.size()) {
|
|
266
|
-
return false;
|
|
267
|
-
}
|
|
268
|
-
for (size_t i = 0; i < _array.size(); ++i) {
|
|
269
|
-
if (!_array[i].operator==(otherArr[i])) {
|
|
270
|
-
return false;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
return true;
|
|
274
|
-
}
|
|
275
|
-
case PropType::HostObject:
|
|
276
|
-
return getAsHostObject() == other.getAsHostObject();
|
|
277
|
-
case PropType::HostFunction:
|
|
278
|
-
// Unable to compare host functions
|
|
279
|
-
return false;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
throw std::runtime_error(
|
|
283
|
-
"Wrong type in equals call. Should not happen. File a bug.");
|
|
284
|
-
|
|
285
|
-
return false;
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
void JsiValue::setFunction(jsi::Runtime &runtime, const jsi::Value &value) {
|
|
289
|
-
auto func = value.asObject(runtime).asFunction(runtime);
|
|
290
|
-
if (func.isHostFunction(runtime)) {
|
|
291
|
-
_type = PropType::HostFunction;
|
|
292
|
-
_hostFunction = func.getHostFunction(runtime);
|
|
293
|
-
} else {
|
|
294
|
-
_type = PropType::HostFunction;
|
|
295
|
-
auto obj = std::make_shared<jsi::Object>(value.asObject(runtime));
|
|
296
|
-
_hostFunction = [obj](jsi::Runtime &runtime, const jsi::Value &thisValue,
|
|
297
|
-
const jsi::Value *arguments,
|
|
298
|
-
size_t count) -> jsi::Value {
|
|
299
|
-
auto func = obj->asFunction(runtime);
|
|
300
|
-
if (thisValue.isNull() || thisValue.isUndefined()) {
|
|
301
|
-
return func.call(runtime, arguments, count);
|
|
302
|
-
} else {
|
|
303
|
-
return func.callWithThis(runtime, thisValue.asObject(runtime),
|
|
304
|
-
arguments, count);
|
|
305
|
-
}
|
|
306
|
-
};
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
jsi::Object JsiValue::getHostFunction(jsi::Runtime &runtime) const {
|
|
311
|
-
assert(_type == PropType::HostFunction);
|
|
312
|
-
return jsi::Function::createFromHostFunction(
|
|
313
|
-
runtime, jsi::PropNameID::forUtf8(runtime, "fn"), 0, _hostFunction);
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
void JsiValue::setArray(jsi::Runtime &runtime, const jsi::Object &obj) {
|
|
317
|
-
_type = PropType::Array;
|
|
318
|
-
auto arr = obj.asArray(runtime);
|
|
319
|
-
size_t size = arr.size(runtime);
|
|
320
|
-
_array.reserve(size);
|
|
321
|
-
for (size_t i = 0; i < size; ++i) {
|
|
322
|
-
_array.emplace_back(runtime, arr.getValueAtIndex(runtime, i));
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
jsi::Array JsiValue::getArray(jsi::Runtime &runtime) const {
|
|
327
|
-
assert(_type == PropType::Array);
|
|
328
|
-
jsi::Array arr = jsi::Array(runtime, _array.size());
|
|
329
|
-
for (size_t i = 0; i < _array.size(); ++i) {
|
|
330
|
-
arr.setValueAtIndex(runtime, i, _array[i].getAsJsiValue(runtime));
|
|
331
|
-
}
|
|
332
|
-
return arr;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
void JsiValue::setHostObject(jsi::Runtime &runtime, const jsi::Object &obj) {
|
|
336
|
-
_type = PropType::HostObject;
|
|
337
|
-
_hostObject = obj.asHostObject(runtime);
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
jsi::Object JsiValue::getHostObject(jsi::Runtime &runtime) const {
|
|
341
|
-
assert(_type == PropType::HostObject);
|
|
342
|
-
return jsi::Object::createFromHostObject(runtime, _hostObject);
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
} // namespace RNJsi
|
package/cpp/jsi/JsiValue.h
DELETED
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <jsi/jsi.h>
|
|
4
|
-
|
|
5
|
-
#include <memory>
|
|
6
|
-
#include <string>
|
|
7
|
-
#include <unordered_map>
|
|
8
|
-
#include <utility>
|
|
9
|
-
#include <vector>
|
|
10
|
-
|
|
11
|
-
namespace RNJsi {
|
|
12
|
-
|
|
13
|
-
namespace jsi = facebook::jsi;
|
|
14
|
-
|
|
15
|
-
enum struct PropType {
|
|
16
|
-
Undefined = 0,
|
|
17
|
-
Null = 1, // Keep undefined / null constant so that we can do checks faster
|
|
18
|
-
Bool = 2,
|
|
19
|
-
Number = 3,
|
|
20
|
-
String = 4,
|
|
21
|
-
Object = 5,
|
|
22
|
-
HostObject = 6,
|
|
23
|
-
HostFunction = 7,
|
|
24
|
-
Array = 8
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
using PropId = const char *;
|
|
28
|
-
|
|
29
|
-
class JsiPropId {
|
|
30
|
-
public:
|
|
31
|
-
static const char *get(const std::string &name) { return _get(name); }
|
|
32
|
-
|
|
33
|
-
static const char *get(const std::string &&name) {
|
|
34
|
-
return _get(std::move(name));
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
private:
|
|
38
|
-
static const char *_get(const std::string &name) {
|
|
39
|
-
if (_impls().count(name) == 0) {
|
|
40
|
-
// Alloc string
|
|
41
|
-
char *impl = new char[name.size() + 1];
|
|
42
|
-
strncpy(impl, name.c_str(), name.size() + 1);
|
|
43
|
-
_impls().emplace(name, impl);
|
|
44
|
-
}
|
|
45
|
-
return _impls().at(name);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
static std::unordered_map<std::string, PropId> &_impls() {
|
|
49
|
-
static std::unordered_map<std::string, PropId> impls;
|
|
50
|
-
return impls;
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
This is a class that deep copies values from JS to C++.
|
|
56
|
-
*/
|
|
57
|
-
class JsiValue {
|
|
58
|
-
public:
|
|
59
|
-
/**
|
|
60
|
-
Default constructor for an empty JsiValue
|
|
61
|
-
*/
|
|
62
|
-
JsiValue();
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
Constructs an instance of the JsiValue object with a current value
|
|
66
|
-
*/
|
|
67
|
-
JsiValue(jsi::Runtime &runtime, const jsi::Value &value);
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
Updates the current value from the Javascript value. This function will
|
|
71
|
-
perform a deep copy of the javascript value.
|
|
72
|
-
*/
|
|
73
|
-
void setCurrent(jsi::Runtime &runtime, const jsi::Value &value);
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
Returns the type of value contained in this JsiValue
|
|
77
|
-
*/
|
|
78
|
-
PropType getType() const { return _type; }
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
Returns true if the value is undefined or null.
|
|
82
|
-
*/
|
|
83
|
-
bool isUndefinedOrNull() const { return _type <= PropType::Null; }
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
Returns true if the value is undefined.
|
|
87
|
-
*/
|
|
88
|
-
bool isUndefined() const { return _type == PropType::Undefined; }
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
Returns true if the value is null.
|
|
92
|
-
*/
|
|
93
|
-
bool isNull() const { return _type == PropType::Null; }
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
Returns the bool value. Requires that the underlying type is bool
|
|
97
|
-
*/
|
|
98
|
-
bool getAsBool() const;
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
Returns the numeric value. Requires that the underlying type is number
|
|
102
|
-
*/
|
|
103
|
-
double getAsNumber() const;
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
Returns the string value. Requires that the underlying type is string
|
|
107
|
-
*/
|
|
108
|
-
const std::string &getAsString() const;
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
Returns the array value. Requires that the underlying type is array
|
|
112
|
-
*/
|
|
113
|
-
const std::vector<JsiValue> &getAsArray() const;
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
Returns an inner value by name. Requires that the underlying type is Object
|
|
117
|
-
*/
|
|
118
|
-
const JsiValue &getValue(PropId name) const;
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
Returns true if the underlying type is Object and the property name exists.
|
|
122
|
-
*/
|
|
123
|
-
bool hasValue(PropId name) const;
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
Returns the names of the properties stored in this value
|
|
127
|
-
*/
|
|
128
|
-
std::vector<PropId> getKeys() const;
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
Returns the host object value. Requires that the underlying type is Host
|
|
132
|
-
Object
|
|
133
|
-
*/
|
|
134
|
-
std::shared_ptr<jsi::HostObject> getAsHostObject() const;
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
Returns a dynamic cast of the host object value. Requires that the underlying
|
|
138
|
-
type is Host Object
|
|
139
|
-
*/
|
|
140
|
-
template <typename T> std::shared_ptr<T> getAs() const {
|
|
141
|
-
if (_type != PropType::HostObject) {
|
|
142
|
-
throw std::runtime_error("Expected type host object, got " +
|
|
143
|
-
getTypeAsString(_type));
|
|
144
|
-
}
|
|
145
|
-
return std::dynamic_pointer_cast<T>(_hostObject);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
Returns the host function. Requires that the type is HostFunction
|
|
150
|
-
*/
|
|
151
|
-
jsi::HostFunctionType getAsHostFunction() const;
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
Returns a callable HostFunction representing the undderlying js function.
|
|
155
|
-
Requires that the type is Function
|
|
156
|
-
*/
|
|
157
|
-
const jsi::HostFunctionType getAsFunction() const;
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
Returns a string representation of the value
|
|
161
|
-
*/
|
|
162
|
-
std::string asString() const;
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
Converts the underlying value back to a JS value
|
|
166
|
-
*/
|
|
167
|
-
jsi::Value getAsJsiValue(jsi::Runtime &runtime) const;
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
Returns a string representing the type.
|
|
171
|
-
*/
|
|
172
|
-
static std::string getTypeAsString(PropType type);
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
Implements the equals operator
|
|
176
|
-
*/
|
|
177
|
-
bool operator==(const JsiValue &other) const;
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
Implements the inequals operator
|
|
181
|
-
*/
|
|
182
|
-
bool operator!=(const JsiValue &other) const;
|
|
183
|
-
|
|
184
|
-
protected:
|
|
185
|
-
const std::unordered_map<PropId, JsiValue> &getProps() const {
|
|
186
|
-
return _props;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
bool boolValue() const { return _boolValue; }
|
|
190
|
-
double numberValue() const { return _numberValue; }
|
|
191
|
-
std::string stringValue() const { return _stringValue; }
|
|
192
|
-
std::shared_ptr<jsi::HostObject> hostObject() const { return _hostObject; }
|
|
193
|
-
jsi::HostFunctionType hostFunction() const { return _hostFunction; }
|
|
194
|
-
std::vector<JsiValue> array() const { return _array; }
|
|
195
|
-
std::unordered_map<PropId, JsiValue> props() const { return _props; }
|
|
196
|
-
const std::vector<PropId> &keysCache() const { return _keysCache; }
|
|
197
|
-
|
|
198
|
-
private:
|
|
199
|
-
void setObject(jsi::Runtime &runtime, const jsi::Value &value);
|
|
200
|
-
jsi::Object getObject(jsi::Runtime &runtime) const;
|
|
201
|
-
|
|
202
|
-
void setFunction(jsi::Runtime &runtime, const jsi::Value &value);
|
|
203
|
-
jsi::Object getHostFunction(jsi::Runtime &runtime) const;
|
|
204
|
-
|
|
205
|
-
void setArray(jsi::Runtime &runtime, const jsi::Object &obj);
|
|
206
|
-
jsi::Array getArray(jsi::Runtime &runtime) const;
|
|
207
|
-
|
|
208
|
-
void setHostObject(jsi::Runtime &runtime, const jsi::Object &obj);
|
|
209
|
-
jsi::Object getHostObject(jsi::Runtime &runtime) const;
|
|
210
|
-
|
|
211
|
-
PropType _type = PropType::Undefined;
|
|
212
|
-
bool _boolValue;
|
|
213
|
-
double _numberValue;
|
|
214
|
-
std::string _stringValue = "";
|
|
215
|
-
std::shared_ptr<jsi::HostObject> _hostObject;
|
|
216
|
-
jsi::HostFunctionType _hostFunction;
|
|
217
|
-
std::vector<JsiValue> _array;
|
|
218
|
-
std::unordered_map<PropId, JsiValue> _props;
|
|
219
|
-
std::vector<PropId> _keysCache;
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
} // namespace RNJsi
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { ViewProps } from "react-native";
|
|
2
|
-
import type { SharedValue } from "react-native-reanimated";
|
|
3
|
-
import type { SkSize } from "../skia/types";
|
|
4
|
-
export interface CanvasProps extends ViewProps {
|
|
5
|
-
debug?: boolean;
|
|
6
|
-
opaque?: boolean;
|
|
7
|
-
onSize?: SharedValue<SkSize>;
|
|
8
|
-
mode?: "continuous" | "default";
|
|
9
|
-
}
|
|
10
|
-
export declare const Canvas: import("react").ForwardRefExoticComponent<CanvasProps & import("react").RefAttributes<unknown>>;
|