react-native-yoga-jsi 0.0.2

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.
Files changed (69) hide show
  1. package/LICENSE +27 -0
  2. package/README.md +166 -0
  3. package/android/CMakeLists.txt +72 -0
  4. package/android/build.gradle +190 -0
  5. package/android/gradle.properties +6 -0
  6. package/android/src/main/AndroidManifestNew.xml +3 -0
  7. package/android/src/main/cpp/cpp-adapter.cpp +17 -0
  8. package/android/src/main/java/com/yogajsi/YogaJSIModule.java +51 -0
  9. package/android/src/main/java/com/yogajsi/YogaJSIPackage.java +25 -0
  10. package/cpp/configCreation.h +91 -0
  11. package/cpp/macros.h +111 -0
  12. package/cpp/nodeCreation.h +65 -0
  13. package/cpp/nodeProperties.h +609 -0
  14. package/cpp/yogaJSI.h +23 -0
  15. package/ios/YogaJSIModule.h +5 -0
  16. package/ios/YogaJSIModule.mm +40 -0
  17. package/lib/commonjs/coreTypes.js +133 -0
  18. package/lib/commonjs/coreTypes.js.map +1 -0
  19. package/lib/commonjs/derived/index.js +39 -0
  20. package/lib/commonjs/derived/index.js.map +1 -0
  21. package/lib/commonjs/derived/styleHandler.js +326 -0
  22. package/lib/commonjs/derived/styleHandler.js.map +1 -0
  23. package/lib/commonjs/derived/useOnDepsChaneg.js +20 -0
  24. package/lib/commonjs/derived/useOnDepsChaneg.js.map +1 -0
  25. package/lib/commonjs/derived/useStyle.js +52 -0
  26. package/lib/commonjs/derived/useStyle.js.map +1 -0
  27. package/lib/commonjs/derived/utils.js +67 -0
  28. package/lib/commonjs/derived/utils.js.map +1 -0
  29. package/lib/commonjs/index.js +46 -0
  30. package/lib/commonjs/index.js.map +1 -0
  31. package/lib/commonjs/package.json +1 -0
  32. package/lib/module/coreTypes.js +129 -0
  33. package/lib/module/coreTypes.js.map +1 -0
  34. package/lib/module/derived/index.js +6 -0
  35. package/lib/module/derived/index.js.map +1 -0
  36. package/lib/module/derived/styleHandler.js +322 -0
  37. package/lib/module/derived/styleHandler.js.map +1 -0
  38. package/lib/module/derived/useOnDepsChaneg.js +17 -0
  39. package/lib/module/derived/useOnDepsChaneg.js.map +1 -0
  40. package/lib/module/derived/useStyle.js +49 -0
  41. package/lib/module/derived/useStyle.js.map +1 -0
  42. package/lib/module/derived/utils.js +61 -0
  43. package/lib/module/derived/utils.js.map +1 -0
  44. package/lib/module/index.js +21 -0
  45. package/lib/module/index.js.map +1 -0
  46. package/lib/module/package.json +1 -0
  47. package/lib/typescript/src/coreTypes.d.ts +259 -0
  48. package/lib/typescript/src/coreTypes.d.ts.map +1 -0
  49. package/lib/typescript/src/derived/index.d.ts +4 -0
  50. package/lib/typescript/src/derived/index.d.ts.map +1 -0
  51. package/lib/typescript/src/derived/styleHandler.d.ts +69 -0
  52. package/lib/typescript/src/derived/styleHandler.d.ts.map +1 -0
  53. package/lib/typescript/src/derived/useOnDepsChaneg.d.ts +3 -0
  54. package/lib/typescript/src/derived/useOnDepsChaneg.d.ts.map +1 -0
  55. package/lib/typescript/src/derived/useStyle.d.ts +15 -0
  56. package/lib/typescript/src/derived/useStyle.d.ts.map +1 -0
  57. package/lib/typescript/src/derived/utils.d.ts +21 -0
  58. package/lib/typescript/src/derived/utils.d.ts.map +1 -0
  59. package/lib/typescript/src/index.d.ts +6 -0
  60. package/lib/typescript/src/index.d.ts.map +1 -0
  61. package/package.json +147 -0
  62. package/react-native-yoga-jsi.podspec +40 -0
  63. package/src/coreTypes.ts +298 -0
  64. package/src/derived/index.ts +3 -0
  65. package/src/derived/styleHandler.ts +433 -0
  66. package/src/derived/useOnDepsChaneg.ts +20 -0
  67. package/src/derived/useStyle.ts +79 -0
  68. package/src/derived/utils.ts +86 -0
  69. package/src/index.ts +22 -0
package/package.json ADDED
@@ -0,0 +1,147 @@
1
+ {
2
+ "name": "react-native-yoga-jsi",
3
+ "version": "0.0.2",
4
+ "description": "A fast implementation of Node's `crypto` module written in C/C++ JSI",
5
+ "packageManager": "bun@1.1.26",
6
+ "main": "lib/commonjs/index",
7
+ "module": "lib/module/index",
8
+ "types": "lib/typescript/src/index.d.ts",
9
+ "react-native": "lib/module/index",
10
+ "source": "src/index",
11
+ "files": [
12
+ "src",
13
+ "lib",
14
+ "android/src",
15
+ "android/build.gradle",
16
+ "android/gradle.properties",
17
+ "android/CMakeLists.txt",
18
+ "ios",
19
+ "cpp",
20
+ "react-native-yoga-jsi.podspec",
21
+ "!lib/typescript/example",
22
+ "!android/build",
23
+ "!ios/build",
24
+ "!**/__tests__",
25
+ "!**/__fixtures__",
26
+ "!**/__mocks__"
27
+ ],
28
+ "scripts": {
29
+ "tsc": "tsc --noEmit",
30
+ "typescript": "tsc --noEmit",
31
+ "lint": "eslint \"**/*.{js,ts,tsx}\"",
32
+ "lint-fix": "eslint \"**/*.{js,ts,tsx}\" --fix",
33
+ "format": "prettier --check \"**/*.{js,ts,tsx}\"",
34
+ "format-fix": "prettier --write \"**/*.{js,ts,tsx}\"",
35
+ "prepare": "bob build",
36
+ "release": "release-it",
37
+ "example": "cd example && bun start",
38
+ "pods": "cd example && bun install && bun pods",
39
+ "bootstrap": "bun install && bun pods && bun example",
40
+ "test": "jest"
41
+ },
42
+ "keywords": [
43
+ "react-native",
44
+ "ios",
45
+ "android",
46
+ "jsi",
47
+ "crypto",
48
+ "c++",
49
+ "fast",
50
+ "web3"
51
+ ],
52
+ "repository": {
53
+ "type": "git",
54
+ "url": "git+https://github.com/margelo/react-native-yoga-jsi.git"
55
+ },
56
+ "authors": "Szymon Kapała (szymon20000@gmail.com) & Marc Rousavy <me@mrousavy.com> (https://github.com/mrousavy)",
57
+ "license": "MIT",
58
+ "bugs": {
59
+ "url": "https://github.com/margelo/react-native-yoga-jsi/issues"
60
+ },
61
+ "homepage": "https://github.com/margelo/react-native-yoga-jsi#readme",
62
+ "publishConfig": {
63
+ "registry": "https://registry.npmjs.org/"
64
+ },
65
+ "dependencies": {},
66
+ "devDependencies": {
67
+ "@eslint/compat": "^1.1.1",
68
+ "@eslint/js": "10.0.0",
69
+ "@react-native/babel-preset": "^0.75.0-main",
70
+ "@react-native/eslint-config": "^0.75.0-main",
71
+ "@react-native/eslint-plugin": "^0.75.0-main",
72
+ "@release-it/conventional-changelog": "^8.0.1",
73
+ "@types/jest": "^29.5.11",
74
+ "@types/node": "^22.0.0",
75
+ "@types/react": "^18.0.33",
76
+ "eslint": "9.12.0",
77
+ "eslint-plugin-react-native": "^4.1.0",
78
+ "jest": "^29.7.0",
79
+ "prettier": "3.3.3",
80
+ "react": "^18.2.0",
81
+ "react-native": "^0.72.7",
82
+ "react-native-builder-bob": "0.30.2",
83
+ "release-it": "^17.2.0",
84
+ "sscrypto": "^1.1.1",
85
+ "typescript": "5.6.3",
86
+ "typescript-eslint": "8.9.0"
87
+ },
88
+ "peerDependencies": {
89
+ "react": "*",
90
+ "react-native": "*"
91
+ },
92
+ "release-it": {
93
+ "git": {
94
+ "commitMessage": "chore: release ${version}",
95
+ "tagName": "v${version}"
96
+ },
97
+ "npm": {
98
+ "publish": true
99
+ },
100
+ "github": {
101
+ "release": true
102
+ },
103
+ "plugins": {
104
+ "@release-it/conventional-changelog": {
105
+ "preset": {
106
+ "name": "conventionalcommits",
107
+ "types": [
108
+ {
109
+ "type": "feat",
110
+ "section": "✨ Features"
111
+ },
112
+ {
113
+ "type": "fix",
114
+ "section": "🐛 Bug Fixes"
115
+ },
116
+ {
117
+ "type": "perf",
118
+ "section": "💨 Performance Improvements"
119
+ },
120
+ {
121
+ "type": "chore(deps)",
122
+ "section": "🛠️ Dependency Upgrades"
123
+ },
124
+ {
125
+ "type": "docs",
126
+ "section": "📚 Documentation"
127
+ }
128
+ ]
129
+ }
130
+ }
131
+ }
132
+ },
133
+ "react-native-builder-bob": {
134
+ "source": "src",
135
+ "output": "lib",
136
+ "targets": [
137
+ "commonjs",
138
+ "module",
139
+ [
140
+ "typescript",
141
+ {
142
+ "project": "tsconfig.json"
143
+ }
144
+ ]
145
+ ]
146
+ }
147
+ }
@@ -0,0 +1,40 @@
1
+ require "json"
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
+
5
+ Pod::Spec.new do |s|
6
+ s.name = "react-native-yoga-jsi"
7
+ s.version = package["version"]
8
+ s.summary = package["description"]
9
+ s.homepage = package["homepage"]
10
+ s.license = package["license"]
11
+ s.authors = package["authors"]
12
+
13
+ s.platforms = { :ios => "12.4", :tvos => "12.0", :osx => "10.14" }
14
+ s.source = { :git => "https://github.com/mrousavy/react-native-yoga-jsi.git", :tag => "#{s.version}" }
15
+
16
+ s.source_files = [
17
+ "ios/**/*.{h,m,mm}",
18
+ "cpp/**/*.{h,c,cpp}",
19
+ ]
20
+
21
+ s.dependency "OpenSSL-Universal"
22
+
23
+ # Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
24
+ # See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79
25
+ if defined?(install_modules_dependencies()) != nil
26
+ install_modules_dependencies(s)
27
+ s.dependency "React" # remove after migrating breaking changes to remove explicit dep on React
28
+ else
29
+ # Old React Native versions
30
+ s.pod_target_xcconfig = {
31
+ "USE_HEADERMAP" => "YES",
32
+ "CLANG_CXX_LANGUAGE_STANDARD" => "c++20",
33
+ "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"$(PODS_TARGET_SRCROOT)\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/boost-for-react-native\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/Headers/Private/React-Core\" "
34
+ }
35
+ s.dependency "React"
36
+ s.dependency "React-Core"
37
+ s.dependency "React-callinvoker"
38
+ s.dependency "ReactCommon"
39
+ end
40
+ end
@@ -0,0 +1,298 @@
1
+ export enum Align {
2
+ Auto = 0,
3
+ FlexStart = 1,
4
+ Center = 2,
5
+ FlexEnd = 3,
6
+ Stretch = 4,
7
+ Baseline = 5,
8
+ SpaceBetween = 6,
9
+ SpaceAround = 7,
10
+ SpaceEvenly = 8,
11
+ }
12
+
13
+ export enum BoxSizing {
14
+ BorderBox = 0,
15
+ ContentBox = 1,
16
+ }
17
+
18
+ export enum Dimension {
19
+ Width = 0,
20
+ Height = 1,
21
+ }
22
+
23
+ export enum Direction {
24
+ Inherit = 0,
25
+ LTR = 1,
26
+ RTL = 2,
27
+ }
28
+
29
+ export enum Display {
30
+ Flex = 0,
31
+ None = 1,
32
+ Contents = 2,
33
+ }
34
+
35
+ export enum Edge {
36
+ Left = 0,
37
+ Top = 1,
38
+ Right = 2,
39
+ Bottom = 3,
40
+ Start = 4,
41
+ End = 5,
42
+ Horizontal = 6,
43
+ Vertical = 7,
44
+ All = 8,
45
+ }
46
+
47
+ export enum Errata {
48
+ None = 0,
49
+ StretchFlexBasis = 1,
50
+ AbsolutePositionWithoutInsetsExcludesPadding = 2,
51
+ AbsolutePercentAgainstInnerSize = 4,
52
+ All = 2147483647,
53
+ Classic = 2147483646,
54
+ }
55
+
56
+ export enum ExperimentalFeature {
57
+ WebFlexBasis = 0,
58
+ }
59
+
60
+ export enum FlexDirection {
61
+ Column = 0,
62
+ ColumnReverse = 1,
63
+ Row = 2,
64
+ RowReverse = 3,
65
+ }
66
+
67
+ export enum Gutter {
68
+ Column = 0,
69
+ Row = 1,
70
+ All = 2,
71
+ }
72
+
73
+ export enum Justify {
74
+ FlexStart = 0,
75
+ Center = 1,
76
+ FlexEnd = 2,
77
+ SpaceBetween = 3,
78
+ SpaceAround = 4,
79
+ SpaceEvenly = 5,
80
+ }
81
+
82
+ export enum LogLevel {
83
+ Error = 0,
84
+ Warn = 1,
85
+ Info = 2,
86
+ Debug = 3,
87
+ Verbose = 4,
88
+ Fatal = 5,
89
+ }
90
+
91
+ export enum MeasureMode {
92
+ Undefined = 0,
93
+ Exactly = 1,
94
+ AtMost = 2,
95
+ }
96
+
97
+ export enum NodeType {
98
+ Default = 0,
99
+ Text = 1,
100
+ }
101
+
102
+ export enum Overflow {
103
+ Visible = 0,
104
+ Hidden = 1,
105
+ Scroll = 2,
106
+ }
107
+
108
+ export enum PositionType {
109
+ Static = 0,
110
+ Relative = 1,
111
+ Absolute = 2,
112
+ }
113
+
114
+ export enum Unit {
115
+ Undefined = 0,
116
+ Point = 1,
117
+ Percent = 2,
118
+ Auto = 3,
119
+ }
120
+
121
+ export enum Wrap {
122
+ NoWrap = 0,
123
+ Wrap = 1,
124
+ WrapReverse = 2,
125
+ }
126
+
127
+ type Layout = {
128
+ left: number;
129
+ right: number;
130
+ top: number;
131
+ bottom: number;
132
+ width: number;
133
+ height: number;
134
+ };
135
+
136
+ type AbsoluteLayout = {
137
+ left: number;
138
+ top: number;
139
+ width: number;
140
+ height: number;
141
+ };
142
+
143
+ type Size = {
144
+ width: number;
145
+ height: number;
146
+ };
147
+
148
+ type Value = {
149
+ unit: Unit;
150
+ value: number;
151
+ };
152
+
153
+ export type Config = {
154
+ free(): void;
155
+ isExperimentalFeatureEnabled(feature: ExperimentalFeature): boolean;
156
+ setExperimentalFeatureEnabled(
157
+ feature: ExperimentalFeature,
158
+ enabled: boolean,
159
+ ): void;
160
+ setPointScaleFactor(factor: number): void;
161
+ getErrata(): Errata;
162
+ setErrata(errata: Errata): void;
163
+ useWebDefaults(): boolean;
164
+ setUseWebDefaults(useWebDefaults: boolean): void;
165
+ };
166
+
167
+ export type DirtiedFunction = (node: Node) => void;
168
+
169
+ export type MeasureFunction = (
170
+ width: number,
171
+ widthMode: MeasureMode,
172
+ height: number,
173
+ heightMode: MeasureMode,
174
+ ) => Size;
175
+
176
+ export type Node = {
177
+ calculateLayout(
178
+ width: number | 'auto' | undefined,
179
+ height: number | 'auto' | undefined,
180
+ direction?: Direction,
181
+ ): void;
182
+ copyStyle(node: Node): void;
183
+ free(): void;
184
+ freeRecursive(): void;
185
+ getAlignContent(): Align;
186
+ getAlignItems(): Align;
187
+ getAlignSelf(): Align;
188
+ getAspectRatio(): number;
189
+ getBorder(edge: Edge): number;
190
+ getChild(index: number): Node;
191
+ getChildCount(): number;
192
+ getComputedBorder(edge: Edge): number;
193
+ getComputedBottom(): number;
194
+ getComputedHeight(): number;
195
+ getComputedLayout(): Layout;
196
+ getLayoutInRoot(): AbsoluteLayout;
197
+ getComputedLeft(): number;
198
+ getComputedMargin(edge: Edge): number;
199
+ getComputedPadding(edge: Edge): number;
200
+ getComputedRight(): number;
201
+ getComputedTop(): number;
202
+ getComputedWidth(): number;
203
+ getDirection(): Direction;
204
+ getDisplay(): Display;
205
+ getFlexBasis(): Value;
206
+ getFlexDirection(): FlexDirection;
207
+ getFlexGrow(): number;
208
+ getFlexShrink(): number;
209
+ getFlexWrap(): Wrap;
210
+ getHeight(): Value;
211
+ getJustifyContent(): Justify;
212
+ getGap(gutter: Gutter): Value;
213
+ getMargin(edge: Edge): Value;
214
+ getMaxHeight(): Value;
215
+ getMaxWidth(): Value;
216
+ getMinHeight(): Value;
217
+ getMinWidth(): Value;
218
+ getOverflow(): Overflow;
219
+ getPadding(edge: Edge): Value;
220
+ getParent(): Node | null;
221
+ getPosition(edge: Edge): Value;
222
+ getPositionType(): PositionType;
223
+ getBoxSizing(): BoxSizing;
224
+ getWidth(): Value;
225
+ insertChild(child: Node, index: number): void;
226
+ isDirty(): boolean;
227
+ isReferenceBaseline(): boolean;
228
+ markDirty(): void;
229
+ hasNewLayout(): boolean;
230
+ markLayoutSeen(): void;
231
+ removeChild(child: Node): void;
232
+ reset(): void;
233
+ setAlignContent(alignContent: Align): void;
234
+ setAlignItems(alignItems: Align): void;
235
+ setAlignSelf(alignSelf: Align): void;
236
+ setAspectRatio(aspectRatio: number | undefined): void;
237
+ setBorder(edge: Edge, borderWidth: number | undefined): void;
238
+ setDirection(direction: Direction): void;
239
+ setDisplay(display: Display): void;
240
+ setFlex(flex: number | undefined): void;
241
+ setFlexBasis(flexBasis: number | 'auto' | `${number}%` | undefined): void;
242
+ setFlexBasisPercent(flexBasis: number | undefined): void;
243
+ setFlexBasisAuto(): void;
244
+ setFlexDirection(flexDirection: FlexDirection): void;
245
+ setFlexGrow(flexGrow: number | undefined): void;
246
+ setFlexShrink(flexShrink: number | undefined): void;
247
+ setFlexWrap(flexWrap: Wrap): void;
248
+ setHeight(height: number | 'auto' | `${number}%` | undefined): void;
249
+ setIsReferenceBaseline(isReferenceBaseline: boolean): void;
250
+ setHeightAuto(): void;
251
+ setHeightPercent(height: number | undefined): void;
252
+ setJustifyContent(justifyContent: Justify): void;
253
+ setGap(gutter: Gutter, gapLength: number | `${number}%` | undefined): Value;
254
+ setGapPercent(gutter: Gutter, gapLength: number | undefined): Value;
255
+ setMargin(
256
+ edge: Edge,
257
+ margin: number | 'auto' | `${number}%` | undefined,
258
+ ): void;
259
+ setMarginAuto(edge: Edge): void;
260
+ setMarginPercent(edge: Edge, margin: number | undefined): void;
261
+ setMaxHeight(maxHeight: number | `${number}%` | undefined): void;
262
+ setMaxHeightPercent(maxHeight: number | undefined): void;
263
+ setMaxWidth(maxWidth: number | `${number}%` | undefined): void;
264
+ setMaxWidthPercent(maxWidth: number | undefined): void;
265
+ setDirtiedFunc(dirtiedFunc: DirtiedFunction | null): void;
266
+ setMeasureFunc(measureFunc: MeasureFunction | null): void;
267
+ setMinHeight(minHeight: number | `${number}%` | undefined): void;
268
+ setMinHeightPercent(minHeight: number | undefined): void;
269
+ setMinWidth(minWidth: number | `${number}%` | undefined): void;
270
+ setMinWidthPercent(minWidth: number | undefined): void;
271
+ setOverflow(overflow: Overflow): void;
272
+ setPadding(edge: Edge, padding: number | `${number}%` | undefined): void;
273
+ setPaddingPercent(edge: Edge, padding: number | undefined): void;
274
+ setPosition(edge: Edge, position: number | `${number}%` | undefined): void;
275
+ setPositionPercent(edge: Edge, position: number | undefined): void;
276
+ setPositionType(positionType: PositionType): void;
277
+ setPositionAuto(edge: Edge): void;
278
+ setBoxSizing(boxSizing: BoxSizing): void;
279
+ setWidth(width: number | 'auto' | `${number}%` | undefined): void;
280
+ setWidthAuto(): void;
281
+ setWidthPercent(width: number | undefined): void;
282
+ unsetDirtiedFunc(): void;
283
+ unsetMeasureFunc(): void;
284
+ setAlwaysFormsContainingBlock(alwaysFormsContainingBlock: boolean): void;
285
+ };
286
+
287
+ export type Yoga = {
288
+ Config: {
289
+ create(): Config;
290
+ destroy(config: Config): void;
291
+ };
292
+ Node: {
293
+ create(config?: Config): Node;
294
+ createDefault(): Node;
295
+ createWithConfig(config: Config): Node;
296
+ destroy(node: Node): void;
297
+ };
298
+ };
@@ -0,0 +1,3 @@
1
+ export * from './useStyle';
2
+ export * from './styleHandler';
3
+ export * from './utils';