Refactor entrypoints
This commit is contained in:
2
.github/actions/setup-js/action.yml
vendored
2
.github/actions/setup-js/action.yml
vendored
@@ -17,5 +17,5 @@ runs:
|
|||||||
|
|
||||||
- name: yarn install
|
- name: yarn install
|
||||||
shell: bash
|
shell: bash
|
||||||
run: yarn install --frozen-lockfile --ignore-scripts
|
run: yarn install --frozen-lockfile
|
||||||
working-directory: javascript
|
working-directory: javascript
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
# yoga-layout
|
# yoga-layout
|
||||||
|
|
||||||
This package provides JavaScript bindings for the Yoga layout engine as either WebAssembly (for browsers, Node) or asm.js (other clients or clients unable to read package export maps).
|
This package provides prebuilt JavaScript bindings for the Yoga layout engine. Both WebAssembly and asm.js variants are packaged, with the optimal loaded based on platform.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
@@ -23,3 +23,30 @@ import Yoga, { ALIGN_CENTER } from "yoga-layout/sync";
|
|||||||
const node = Yoga.Node.create();
|
const node = Yoga.Node.create();
|
||||||
node.setAlignContent(ALIGN_CENTER);
|
node.setAlignContent(ALIGN_CENTER);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Selecting WebAssembly or asm.js
|
||||||
|
|
||||||
|
For better performance and smaller packages, WebAssembly is preferred to asm.js where available. `yoga-layout` tries to provide the right default using [export maps](https://webpack.js.org/guides/package-exports/#conditional-syntax) so that platforms which can take advantage of WebAssembly use it by default.
|
||||||
|
|
||||||
|
A specific entrypoint may be specified on platforms which do not understand export conditions.
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import { loadYoga } from "yoga-layout/entrypoint/wasm-async";
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
`yoga-layout` may be locally built by running the following set of commands. The build requires that some dependencies be installed first.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/facebook/yoga.git
|
||||||
|
cd yoga/javascript
|
||||||
|
yarn install
|
||||||
|
yarn build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
1. CMake >= 3.13
|
||||||
|
1. (Optional) ninja, for faster builds
|
||||||
|
@@ -9,12 +9,12 @@
|
|||||||
|
|
||||||
module.exports = async () => {
|
module.exports = async () => {
|
||||||
if (process.env['SYNC'] == true && process.env['WASM'] == true) {
|
if (process.env['SYNC'] == true && process.env['WASM'] == true) {
|
||||||
global.Yoga = require("./dist/variants/wasm-sync");
|
global.Yoga = require("./dist/entrypoint/wasm-sync");
|
||||||
} else if (process.env['SYNC'] == true) {
|
} else if (process.env['SYNC'] == true) {
|
||||||
global.Yoga = require("./dist/variants/asmjs-sync");
|
global.Yoga = require("./dist/entrypoint/asmjs-sync");
|
||||||
} else if (process.env['WASM'] == true) {
|
} else if (process.env['WASM'] == true) {
|
||||||
global.Yoga = await require("./dist/variants/wasm-async").loadYoga();
|
global.Yoga = await require("./dist/entrypoint/wasm-async").loadYoga();
|
||||||
} else {
|
} else {
|
||||||
global.Yoga = await require("./dist/variants/asmjs-async").loadYoga();
|
global.Yoga = await require("./dist/entrypoint/asmjs-async").loadYoga();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "yoga-layout",
|
"name": "yoga-layout",
|
||||||
"version": "1.9.3",
|
"version": "2.0.0-beta.1",
|
||||||
"description": "Yoga is a cross-platform layout engine enabling maximum collaboration within your team by implementing an API many designers are familiar with, and opening it up to developers across different platforms.",
|
"description": "JavaScript bindings for the Yoga layout engine",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@@ -11,14 +11,14 @@
|
|||||||
"types": "./dist/index.d.ts",
|
"types": "./dist/index.d.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": {
|
".": {
|
||||||
"browser": "./dist/variants/wasm-async.js",
|
"browser": "./dist/entrypoint/wasm-async.js",
|
||||||
"node": "./dist/variants/wasm-async.js",
|
"node": "./dist/entrypoint/wasm-async.js",
|
||||||
"default": "./dist/variants/asmjs-async.js"
|
"default": "./dist/entrypoint/asmjs-async.js"
|
||||||
},
|
},
|
||||||
"./sync": {
|
"./sync": {
|
||||||
"browser": "./dist/variants/asmjs-sync.js",
|
"browser": "./dist/entrypoint/asmjs-sync.js",
|
||||||
"node": "./dist/variants/wasm-sync.js",
|
"node": "./dist/entrypoint/wasm-sync.js",
|
||||||
"default": "./dist/variants/asmjs-sync.js"
|
"default": "./dist/entrypoint/asmjs-sync.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
@@ -32,7 +32,6 @@
|
|||||||
"build:copy-dts": "cd src_js && find . -name '*.d.ts' | cpio -pdm ../dist",
|
"build:copy-dts": "cd src_js && find . -name '*.d.ts' | cpio -pdm ../dist",
|
||||||
"build:js": "babel src_js --source-maps --out-dir dist && yarn build:copy-dts",
|
"build:js": "babel src_js --source-maps --out-dir dist && yarn build:copy-dts",
|
||||||
"build:native": "yarn build:configure && cmake --build build",
|
"build:native": "yarn build:configure && cmake --build build",
|
||||||
"postinstall": "yarn build",
|
|
||||||
"test": "yarn test:asmjs && yarn test:asmjs-sync && yarn test:wasm && yarn test:wasm-sync",
|
"test": "yarn test:asmjs && yarn test:asmjs-sync && yarn test:wasm && yarn test:wasm-sync",
|
||||||
"test:asmjs": "WASM=0 SYNC=0 jest",
|
"test:asmjs": "WASM=0 SYNC=0 jest",
|
||||||
"test:asmjs-sync": "WASM=0 SYNC=1 jest",
|
"test:asmjs-sync": "WASM=0 SYNC=1 jest",
|
||||||
|
@@ -8,4 +8,4 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
const asm = require('../build/asmjs-async');
|
const asm = require('../build/asmjs-async');
|
||||||
module.exports = require("../entryAsync")(asm);
|
module.exports = require("./entryAsync")(asm);
|
@@ -8,4 +8,4 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
const asm = require('../build/asmjs-sync');
|
const asm = require('../build/asmjs-sync');
|
||||||
module.exports = require("../entrySync")(asm);
|
module.exports = require("./entrySync")(asm);
|
@@ -8,4 +8,4 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
const asm = require('../build/wasm-async');
|
const asm = require('../build/wasm-async');
|
||||||
module.exports = require("../entryAsync")(asm);
|
module.exports = require("./entryAsync")(asm);
|
@@ -8,4 +8,4 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
const asm = require('../build/wasm-sync');
|
const asm = require('../build/wasm-sync');
|
||||||
module.exports = require("../entrySync")(asm);
|
module.exports = require("./entrySync")(asm);
|
@@ -8,4 +8,4 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Fallback for when the export map is not followed
|
// Fallback for when the export map is not followed
|
||||||
module.exports = require('./variants/asmjs-async');
|
module.exports = require('./entrypoint/asmjs-async');
|
||||||
|
@@ -8,4 +8,4 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Fallback for when the export map is not followed
|
// Fallback for when the export map is not followed
|
||||||
module.exports = require('./variants/asmjs-sync');
|
module.exports = require('./entrypoint/asmjs-sync');
|
||||||
|
@@ -27,7 +27,7 @@ for (let type of ['asmjs', 'wasm']) {
|
|||||||
vm.runInNewContext(
|
vm.runInNewContext(
|
||||||
file,
|
file,
|
||||||
Object.assign(Object.create(global), {
|
Object.assign(Object.create(global), {
|
||||||
Yoga: require(type === 'asmjs' ? '../dist/variants/asmjs-sync' : '../dist/variants/wasm-sync'),
|
Yoga: require(type === 'asmjs' ? '../dist/entrypoint/asmjs-sync' : '../dist/entrypoint/wasm-sync'),
|
||||||
YGBENCHMARK: function(name, fn) {
|
YGBENCHMARK: function(name, fn) {
|
||||||
let testEntry = testResults.get(name);
|
let testEntry = testResults.get(name);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user