Commit Graph

5 Commits

Author SHA1 Message Date
Bela Bohlender
c09405d58c Typescript: improve enum types and setMargin type (#1233)
Summary:
Currently, it is impossible to write `node.setPositionType(2)` instead of `node.setPositionType(POSITION_TYPE_ABSOLUTE)`. I understand that the idea is to force explicit usage of the enums. However, declaring `type POSITION_TYPE_ABSOLUTE = 2 & ['POSITION_TYPE']` artificially limits use cases, where, for example, the state should be serialized typesafe.

Additionally, this PR fixes the incorrect typing of `setMargin(edge: Edge, margin: number)` by extending the type to `margin: number | string`

Pull Request resolved: https://github.com/facebook/yoga/pull/1233

Reviewed By: javache

Differential Revision: D43695520

Pulled By: NickGerleman

fbshipit-source-id: aac5f1de71817cc268fb003454ba29d31be10e0b
2023-03-01 07:40:03 -08:00
Bela Bohlender
92e83193c4 Typescript: Fix typo in type defintions (#1231)
Summary:
Extracted the typo fix from https://github.com/facebook/yoga/pull/1228

Pull Request resolved: https://github.com/facebook/yoga/pull/1231

Reviewed By: NickGerleman

Differential Revision: D43495158

Pulled By: cortinico

fbshipit-source-id: a455eb231169d53b8d4ced9a783b94d2ee46ca0c
2023-02-22 13:09:05 -08:00
Dmitry Ivakhnenko
483e399158 fix type for getFlexBasis (#1222)
Summary:
`getFlexBasis` returns `Value` not a `number`

source:
https://github.com/facebook/yoga/blob/main/javascript/src_native/Node.hh#L145

Pull Request resolved: https://github.com/facebook/yoga/pull/1222

Reviewed By: rozele, cipolleschi

Differential Revision: D42818313

Pulled By: NickGerleman

fbshipit-source-id: cbcfe1b5d353ed86303a4de987e66f86b77ced1b
2023-01-30 13:57:23 -08:00
Nick Gerleman
9fe1e77274 Use more specific enums types where previously using number (#1198)
Summary:
Pull Request resolved: https://github.com/facebook/yoga/pull/1198

The Yoga JS bindings converted a previous Flow type directly to TypeScript. The enum types we expose are safer than accepting raw ordinal numbers, and we should replace the places in the typings where an ordinal was accepted instead of the specific type.

Reviewed By: cipolleschi

Differential Revision: D42265824

fbshipit-source-id: 6adcf24a612e79037fdceab0e9f6e4db09fe3ab2
2022-12-30 14:21:08 -08:00
Dmitry Ivakhnenko
1813748eaa Revive JavaScript Bindings (#1177)
Summary:
Yoga's JavaScript bindings do not work past Node 10, or on recent versions of Ubuntu even using it. This is due to a reliance on `nbind`, a library which is no longer maintained. `nbind` itself abstracts over `embind` running Emscripten to generate an asm.js build, along with building Node native modules. In the meantime, [yoga-layout-prebuilt](https://www.npmjs.com/package/yoga-layout-prebuilt) has been used by the community instead of the official package.

https://github.com/facebook/yoga/pull/1177 was contributed as a conversion of bindings created using `nbind` to instead use `embind` directly.

I continued building on this to add more:
1. WebAssembly support (required to be async in browsers)
2. CMake + Ninja Build for the 4 flavors
3. TypeScript typings (partially generated)
4. yarn scripts to build (working on macOS, Ubuntu, Windows)
5. A README with some usage and contribution instructions
6. Updated tests to work with Jest, and updated general infra
7. ESLint and clang-format scripts
8. More GitHub actions (and now testing Windows)
9. Probably more I kinda got carried away here lol

The plan is to eventually publish this to NPM, but there is a little bit of work after this before that happens.

Pull Request resolved: https://github.com/facebook/yoga/pull/1177

Test Plan: The bindings pass Jest tests (both manual and generated). GitHub actions added for the different yarn scripts. Did some manual checks on using the library as TS.

Reviewed By: christophpurrer

Differential Revision: D42207782

Pulled By: NickGerleman

fbshipit-source-id: 1dc5ce440f1c2b9705a005bbdcc86f952785d94e
2022-12-28 01:27:12 -08:00