An open API service indexing awesome lists of open source software.

https://github.com/delight-rpc/browser

🌲
https://github.com/delight-rpc/browser

browser esm library npm-package typescript

Last synced: 4 months ago
JSON representation

🌲

Awesome Lists containing this project

README

          

# @delight-rpc/browser
## Install
```sh
npm install --save @delight-rpc/browser
# or
yarn add @delight-rpc/browser
```

## Usage
### Web Worker
#### Main as Client, Web Worker as Server
```ts
// api.d.ts
interface IAPI {
echo(message: string): string
}

// main.ts
import { createClient } from '@delight-rpc/browser'

const worker = new Worker('./worker.js')
const [client] = createClient(worker)
await client.echo('hello world')

// worker.ts
import { createServer } from '@delight-rpc/browser'

const api: IAPI = {
echo(message) {
return message
}
}

createServer(api, self)
```

#### Web Worker as Client, Main as Server
```ts
// api.d.ts
interface IAPI {
echo(message: string): string
}

// main.ts
import { createServer } from '@delight-rpc/browser'

const api: IAPI = {
echo(message) {
return message
}
}

const worker = new Worker('./worker.js')
createServer(api, worker)

// worker.ts
import { createClient } from '@delight-rpc/browser'

const [client] = createClient(self)
await client.echo('hello world')
```

### MessageChannel
```ts
interface IAPI {
echo(message: string): string
}

const api: IAPI = {
echo(message) {
return message
}
}

const channel = new MessageChannel()
channel.port1.start()
channel.port2.start()

createServer(api, channel.port1)

const [client] = createClient(channel.port2)
await client.echo('hello world')
```

## API
### createClient
```ts
function createClient(
port: Window | MessagePort | Worker
, options?: {
parameterValidators?: DelightRPC.ParameterValidators
expectedVersion?: string
channel?: string
}
): [client: DelightRPC.ClientProxy, close: () => void]
```

### createBatchClient
```ts
function createBatchClient(
port: Window | MessagePort | Worker
, options?: {
expectedVersion?: string
channel?: string
}
): [client: DelightRPC.BatchClient, close: () => void]
```

### createServer
```ts
function createServer(
api: DelightRPC.ImplementationOf
, port: Window | MessagePort | Worker
, options?: {
parameterValidators?: DelightRPC.ParameterValidators
version?: `${number}.${number}.${number}`
channel?: string | RegExp | AnyChannel
ownPropsOnly?: boolean
}
): () => void
```

### createHTTPHandler
```ts
function createHTTPHandler(
api: DelightRPC.ImplementationOf
, options?: {
basicAuth?: (username: string, password: string) => Awaitable
parameterValidators?: DelightRPC.ParameterValidators
version?: `${number}.${number}.${number}`
ownPropsOnly?: boolean
channel?: string | RegExp | typeof DelightRPC.AnyChannel
}
): (req: Request) => Promise
```