Binding · TypeScript (Node.js)

TypeScript (Node.js) — in 5 Minuten zum ersten Sample

Full DCPS + WebSocket/gRPC-Bridge-Plumbing für Node.js. Native N-API-Bindings gegen libzerodds. Strict TypeScript, no any. IDL→TS-Codegen via idlc ts.

Node.js: 18 LTS · 20 LTS · 22 LTS Install: Source (RC1) · npm install @zerodds/node ab RC3 Status: ✓ RC3 · Strict TS, kein any

5-Minuten-Quickstart

1 · Node-Binding installieren

@zerodds/node ist auf npmnpm install @zerodds/node. Alternativ aus dem Source: Heute geht nur Source-Build.

Schritt 1a: libzerodds Runtime (pre-built oder Source):

# Ubuntu/Debian
sudo dpkg -i zerodds-dev_1.0.0-rc.3_amd64.deb
# Fedora/RHEL
sudo dnf install zerodds-devel-1.0.0-0.rc1.fc40.x86_64.rpm
# Windows: zerodds-1.0.0-x64.msi
# macOS: brew tap zero-objects/zerodds && brew install zerodds
# Arch:  yay -S zerodds-bin
# Docker: docker pull fishermen21/zerodds-cli

Schritt 1b: N-API-Addon aus Source bauen + im Projekt verlinken (RC3-Plan: npm install @zerodds/node):

git clone https://github.com/zero-objects/zero-dds.git
cd zero-dds/crates/ts-node
npm install            # pull TS-deps
npm run build          # cargo build + cargo-cp-artifact in lib/
# In deinem App-Projekt dann:
#   npm install /path/to/zero-dds/crates/ts-node

npm init -y
npm install file:../zero-dds/crates/ts-node typescript tsx
npx tsc --init

2 · Pub/Sub-Roundtrip (hello.ts)

import { DomainParticipantFactory } from '@zerodds/node';

async function main() {
    const factory = DomainParticipantFactory.instance();
    const participant = factory.createParticipant(0);

    const topic = participant.createBytesTopic('Chatter');
    const publisher = participant.createPublisher();
    const subscriber = participant.createSubscriber();

    const writer = publisher.createBytesWriter(topic);
    const reader = subscriber.createBytesReader(topic);

    await writer.waitForMatchedSubscription(1, 5000);
    await reader.waitForMatchedPublication(1, 5000);

    writer.write(new TextEncoder().encode('hello'));
    await reader.waitForData(3000);

    for (const sample of reader.take()) {
        console.log('got:', new TextDecoder().decode(sample));
    }
}

main().catch(console.error);

▶ Runnable example: typescript-node-quickstart

3 · Laufen

npx tsx hello.ts
# got: hello

Installation

npm

npm install @zerodds/node
# zieht prebuilt native binaries via prebuildify

Aus dem Source

git clone https://github.com/zero-objects/zero-dds.git
cd zero-dds/crates/ts-node
npm install
npm run build      # baut die N-API-Native-Lib
npm test

Voraussetzungen

  • Node.js 18 LTS oder höher.
  • npm 9+ (für Workspace-fähigen Install).
  • Prebuilt-Wheels für linux-x64, linux-arm64, darwin-arm64, darwin-x64, win32-x64.
  • Bei Build-aus-Source: Rust 1.88+ + C/C++-Toolchain (siehe Dev-Install).

Typisierte Topics — idlc ts

# IDL
echo 'struct Temperature { long celsius; string sensor_id; };' > temperature.idl
idlc ts temperature.idl -o gen/
# erzeugt gen/temperature.ts mit interface + TypeSupport
// Nutzen
import { Temperature, TemperatureTypeSupport } from './gen/temperature';

const topic = participant.createTypedTopic('Temp', TemperatureTypeSupport);
const writer = publisher.createTypedWriter(topic);
await writer.write({ celsius: 23, sensor_id: 'A7' });

▶ Runnable example: typescript-node-typed

async/await

Alle blocking Calls (wait_for_*, write_async, take_async) liefern Promise. CommonJS- + ESM-Builds.

await writer.writeAsync(payload);
const samples = await reader.takeAsync();
for await (const sample of reader.streamSamples()) {
    handle(sample);
}

▶ Runnable example: typescript-node-async

Binding · TypeScript (Node.js)

TypeScript (Node.js) — first sample in 5 minutes

Full DCPS + WebSocket/gRPC bridge plumbing for Node.js. Native N-API bindings against libzerodds. Strict TypeScript, no any. IDL→TS codegen via idlc ts.

Node.js: 18 LTS · 20 LTS · 22 LTS Install: source (RC1) · npm install @zerodds/node from RC3 Status: ✓ RC3 · strict TS, no any

5-minute quickstart

1 · Install the Node binding

@zerodds/node is on npmnpm install @zerodds/node. Or build from source: Today only the source build works.

Step 1a: the libzerodds runtime (pre-built or source):

# Ubuntu/Debian
sudo dpkg -i zerodds-dev_1.0.0-rc.3_amd64.deb
# Fedora/RHEL
sudo dnf install zerodds-devel-1.0.0-0.rc1.fc40.x86_64.rpm
# Windows: zerodds-1.0.0-x64.msi
# macOS: brew tap zero-objects/zerodds && brew install zerodds
# Arch:  yay -S zerodds-bin
# Docker: docker pull fishermen21/zerodds-cli

Step 1b: build the N-API addon from source + link it in the project (RC3 plan: npm install @zerodds/node):

git clone https://github.com/zero-objects/zero-dds.git
cd zero-dds/crates/ts-node
npm install            # pull TS deps
npm run build          # cargo build + cargo-cp-artifact into lib/
# then in your app project:
#   npm install /path/to/zero-dds/crates/ts-node

npm init -y
npm install file:../zero-dds/crates/ts-node typescript tsx
npx tsc --init

2 · Pub/sub roundtrip (hello.ts)

import { DomainParticipantFactory } from '@zerodds/node';

async function main() {
    const factory = DomainParticipantFactory.instance();
    const participant = factory.createParticipant(0);

    const topic = participant.createBytesTopic('Chatter');
    const publisher = participant.createPublisher();
    const subscriber = participant.createSubscriber();

    const writer = publisher.createBytesWriter(topic);
    const reader = subscriber.createBytesReader(topic);

    await writer.waitForMatchedSubscription(1, 5000);
    await reader.waitForMatchedPublication(1, 5000);

    writer.write(new TextEncoder().encode('hello'));
    await reader.waitForData(3000);

    for (const sample of reader.take()) {
        console.log('got:', new TextDecoder().decode(sample));
    }
}

main().catch(console.error);

▶ Runnable example: typescript-node-quickstart

3 · Run

npx tsx hello.ts
# got: hello

Installation

npm

npm install @zerodds/node
# pulls prebuilt native binaries via prebuildify

From source

git clone https://github.com/zero-objects/zero-dds.git
cd zero-dds/crates/ts-node
npm install
npm run build      # builds the N-API native lib
npm test

Prerequisites

  • Node.js 18 LTS or higher.
  • npm 9+ (for a workspace-capable install).
  • Prebuilt wheels for linux-x64, linux-arm64, darwin-arm64, darwin-x64, win32-x64.
  • For a build from source: Rust 1.88+ + a C/C++ toolchain (see Dev Install).

Typed topics — idlc ts

# IDL
echo 'struct Temperature { long celsius; string sensor_id; };' > temperature.idl
idlc ts temperature.idl -o gen/
# produces gen/temperature.ts with an interface + TypeSupport
// use it
import { Temperature, TemperatureTypeSupport } from './gen/temperature';

const topic = participant.createTypedTopic('Temp', TemperatureTypeSupport);
const writer = publisher.createTypedWriter(topic);
await writer.write({ celsius: 23, sensor_id: 'A7' });

▶ Runnable example: typescript-node-typed

async/await

All blocking calls (wait_for_*, write_async, take_async) return a Promise. CommonJS + ESM builds.

await writer.writeAsync(payload);
const samples = await reader.takeAsync();
for await (const sample of reader.streamSamples()) {
    handle(sample);
}

▶ Runnable example: typescript-node-async