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.
5-Minuten-Quickstart
1 · Node-Binding installieren
@zerodds/node ist auf npm — npm 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' });
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);
}
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.
5-minute quickstart
1 · Install the Node binding
@zerodds/node is on npm — npm 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' });
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);
}