negrel / rpc

A lightweight, type-safe RPC facade and implementation for TypeScript.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

rpc - A lightweight, type-safe RPC facade and implementation for TypeScript.

A lightweight, type-safe RPC facade for typescript and a WebWorker and HTTP based implementations.

Usage

WebWorker

In main.js:

import { WorkerRpcClient } from "jsr:@negrel/rpc";

// Create a worker based RpcClient.
const client = new WorkerRpcClient(
  new URL("./worker_script.js", import.meta.url),
  { type: "module" },
);

// Remote Procedure Call.
const result = await client.remoteProcedureCall({
  name: "doWork",
  args: { i: Math.random() },
});

console.log(result);

// Stop worker.
client.terminate();

In worker_script.js:

import { workerMessageHandler } from "jsr:@negrel/rpc";

self.onmessage = workerMessageHandler({
  doWork({ i }) {
    console.log("doWork", i);
    return i * 2;
  },
});

HTTP

In main.js:

import { HttpRpcClient } from "jsr:@negrel/rpc";

// Create a worker based RpcClient.
const client = new HttpRpcClient("http://localhost:8000");

// Remote Procedure Call.
const result = await client.remoteProcedureCall({
  name: "doWork",
  args: { i: Math.random() },
});

console.log(result);

In server.js:

import { httpServerHandler } from "jsr:@negrel/rpc";

Deno.serve(httpServerHandler({
  doWork({ i }) {
    console.log("doWork", i);
    return i * 2;
  },
}));

Contributing

If you want to contribute to rpc to add a feature or improve the code contact me at alexandre@negrel.dev, open an issue or make a pull request.

🌠 Show your support

Please give a ⭐ if this project helped you!

buy me a coffee

📜 License

MIT © Alexandre Negrel

About

A lightweight, type-safe RPC facade and implementation for TypeScript.

License:MIT License


Languages

Language:TypeScript 95.2%Language:Nix 3.5%Language:Makefile 1.3%