Skip to main content
Module

x/enzastdlib/rpc-messageport/client.ts>makeMessagePortClient

enzastdlib is a set of TypeScript modules that follow a common design API philosophy aiming at sane defaults and ease-of-use targeting the Deno TypeScript runtime.
Latest
function makeMessagePortClient
import { makeMessagePortClient } from "https://deno.land/x/enzastdlib@v0.0.4/rpc-messageport/client.ts";

Makes a MessagePort client that can communicate to a server in enzastdlib's RPC protocol.

Examples

add.schema.ts

import type { JSONSchema, typeofschema } from 'https://deno.land/x/enzastdlib/schema/mod.ts';

export const SCHEMA_ADD_PARAMETERS = {
    type: 'object',
    required: ['a', 'b'],

    additionalProperties: false,

    properties: {
        a: {
            type: 'number',
        },

        b: {
            type: 'number',
        },
    },
} as const satisfies JSONSchema;

export type AddParametersType = typeofschema<typeof SCHEMA_ADD_PARAMETERS>;

export const SCHEMA_ADD_RETURN = {
    type: 'object',
    required: ['sum'],

    additionalProperties: false,

    properties: {
        sum: {
            type: 'number',
        },
    },
} as const satisfies JSONSchema;

export type AddReturnType = typeofschema<typeof SCHEMA_ADD_RETURN>;

add.procedure.ts

import type { Procedure } from 'https://deno.land/x/enzastdlib/rpc-protocol/mod.ts';
import { parametersschema, resultschema } from 'https://deno.land/x/enzastdlib/rpc-protocol/mod.ts';

import type { AddParametersType, AddReturnType } from './add.schema.ts';
import { SCHEMA_ADD_PARAMETERS, SCHEMA_ADD_RETURN } from './add.schema.ts';

parametersschema(add, SCHEMA_ADD_PARAMETERS);
resultschema(add, SCHEMA_ADD_RETURN);
export function add(
    _payload: Procedure,
    parameters: AddParametersType,
): AddReturnType {
    const { a, b } = parameters;

    return {
        sum: a + b,
    };
}

mod.ts

import { assertEquals } from 'https://deno.land/std/testing/asserts.ts';
import { makeMessagePortClient } from 'https://deno.land/x/enzastdlib/rpc-messageport/mod.ts';

import type { add } from './add.procedure.ts';

type MyRPCProcedures = { add: typeof add };

const client = makeMessagePortClient<MyRPCProcedures>({
    // NOTE: We are assuming this client is being made in the scope of a
    // running WebWorker.
    port: self
});

const result = await client.procedures.add({ a: 1, b: 2 });

assertEquals(result, { sum: 3 });

Type Parameters

optional
Procedures extends ProcedureRecord = EmptyObject
optional
Notifications extends NotificationRecord = EmptyObject