Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 61 additions & 1 deletion .github/workflows/node.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,22 @@ jobs:
yarn build --target aarch64-unknown-linux-musl
/aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip *.node

- host: ubuntu-latest
target: 'wasm32-wasip1-threads'
setup: |
wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-27/wasi-sdk-27.0-x86_64-linux.tar.gz
tar -xvf wasi-sdk-27.0-x86_64-linux.tar.gz
build: |
set -e
rustup install 1.88.0
rustup default 1.88.0
rustup target add wasm32-wasip1-threads
export WASI_SDK_PATH="$(pwd)/wasi-sdk-27.0-x86_64-linux"
export CMAKE_BUILD_PARALLEL_LEVEL=2
export TARGET_CXXFLAGS="--target=wasm32-wasi-threads --sysroot=$(pwd)/wasi-sdk-27.0-x86_64-linux/share/wasi-sysroot -pthread -mllvm -wasm-enable-sjlj -lsetjmp"
export TARGET_CFLAGS="$TARGET_CXXFLAGS"
yarn build --target wasm32-wasip1-threads

name: stable - ${{ matrix.settings.target }} - node@22
runs-on: ${{ matrix.settings.host }}
defaults:
Expand Down Expand Up @@ -167,13 +183,29 @@ jobs:
if: ${{ !matrix.settings.docker }}
shell: bash

- name: Upload artifact
- name: 'Check'
if: ${{ matrix.settings.target != 'x86_64-pc-windows-msvc' }}
run: ls -la

- name: Upload artifact ${{ matrix.settings.target }}
if: ${{ matrix.settings.target != 'wasm32-wasip1-threads' }}
uses: actions/upload-artifact@v4
with:
name: bindings-${{ matrix.settings.target }}
path: bindings/nodejs/*.node
if-no-files-found: error

- name: Upload artifact ${{ matrix.settings.target }}
if: ${{ matrix.settings.target == 'wasm32-wasip1-threads' }}
uses: actions/upload-artifact@v4
with:
name: bindings-wasm32-wasi
if-no-files-found: error
path: |
bindings/nodejs/*.wasm
bindings/nodejs/zen-engine.wasi*
bindings/nodejs/wasi-worker*

test-macOS-windows-binding:
name: Test bindings on ${{ matrix.settings.target }} - node@${{ matrix.node }}
needs:
Expand Down Expand Up @@ -216,6 +248,10 @@ jobs:
name: bindings-${{ matrix.settings.target }}
path: artifacts

- name: Create dirs
run: yarn createNpmDirs
shell: bash

- name: Move artifacts
run: yarn artifacts
shell: bash
Expand Down Expand Up @@ -258,6 +294,15 @@ jobs:
name: bindings-x86_64-unknown-linux-gnu
path: artifacts

- name: List artifacts
run: |
ls -la ../../artifacts
shell: bash

- name: Create dirs
run: yarn createNpmDirs
shell: bash

- name: Move artifacts
run: yarn artifacts
shell: bash
Expand Down Expand Up @@ -309,6 +354,10 @@ jobs:
name: bindings-x86_64-unknown-linux-musl
path: artifacts

- name: Create dirs
run: yarn createNpmDirs
shell: bash

- name: Move artifacts
run: yarn artifacts
shell: bash
Expand Down Expand Up @@ -367,6 +416,10 @@ jobs:
name: bindings-aarch64-unknown-linux-musl
path: artifacts

- name: Create dirs
run: yarn createNpmDirs
shell: bash

- name: Move artifacts
run: yarn artifacts
shell: bash
Expand Down Expand Up @@ -473,9 +526,16 @@ jobs:
with:
path: artifacts

- name: List all artifacts
run: ls -la ../../artifacts

- name: Copy LICENSE
run: cp ../../LICENSE .

- name: Create dirs
run: yarn createNpmDirs
shell: bash

- name: Move artifacts
run: yarn artifacts

Expand Down
5 changes: 4 additions & 1 deletion bindings/nodejs/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
*.node
*.internal.js
temp.d.ts
*.tgz
temp.d.ts
*.wasm
npm/
6 changes: 5 additions & 1 deletion bindings/nodejs/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ publish = false
crate-type = ["cdylib"]

[dependencies]
ahash = { workspace = true }
napi = { version = "3", features = ["serde-json", "error_anyhow", "tokio_rt"] }
napi-derive = "3"
tokio-util = { workspace = true, features = ["rt"] }
Expand All @@ -19,5 +20,8 @@ zen-tmpl = { path = "../../core/template" }
serde = { workspace = true, features = ["derive"] }
json_dotpath = { workspace = true }

[target.'cfg(target_family = "wasm")'.dependencies]
iana-time-zone = { version = "0.1", features = ["fallback"] }

[build-dependencies]
napi-build = "2.1"
napi-build = "2.3"
4 changes: 4 additions & 0 deletions bindings/nodejs/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
wasm:
yarn exec napi build --target wasm32-wasip1-threads --output-dir npm/wasm32-wasi --release
mv npm/wasm32-wasi/browser.js .
mv npm/wasm32-wasi/zen-engine.wasm npm/wasm32-wasi/zen-engine.wasm32-wasi.wasm
1 change: 1 addition & 0 deletions bindings/nodejs/browser.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from '@gorules/zen-engine-wasm32-wasi'
16 changes: 16 additions & 0 deletions bindings/nodejs/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ export declare function renderTemplateSync(template: string, context: any): any
export interface ZenConfig {
nodesInContext?: boolean
functionTimeoutMillis?: number
httpAuth?: boolean
}

export interface ZenEngineHandlerResponse {
Expand All @@ -63,6 +64,7 @@ export interface ZenEngineHandlerResponse {
export interface ZenEngineOptions {
loader?: (key: string) => Promise<Buffer | ZenDecisionContent>
customHandler?: (request: ZenEngineHandlerRequest) => Promise<ZenEngineHandlerResponse>
httpHandler?: (request: ZenHttpHandlerRequest) => Promise<ZenHttpHandlerResponse>
}

export interface ZenEngineResponse {
Expand All @@ -85,3 +87,17 @@ export interface ZenEvaluateOptions {
maxDepth?: number
trace?: boolean | 'string' | 'reference' | 'referenceString'
}

export interface ZenHttpHandlerRequest {
method: string
url: string
body?: any
headers: Record<string, string>
params: Record<string, string>
}

export interface ZenHttpHandlerResponse {
status: number
headers: any
data: any
}
Loading
Loading