Skip to main content Link Search Menu Expand Document (external link)

Worker overview

Added in v1.0.0


Table of contents


constructors

makeManager

Signature

export declare const makeManager: Effect.Effect<PlatformWorker, never, WorkerManager>

Added in v1.0.0

makePool

Signature

export declare const makePool: <W>() => <I, E, O>(
  options: WorkerPool.Options<I, W>
) => Effect.Effect<Scope.Scope | WorkerManager, never, WorkerPool<I, E, O>>

Added in v1.0.0

makePoolLayer

Signature

export declare const makePoolLayer: <W>(
  managerLayer: Layer.Layer<never, never, WorkerManager>
) => <Tag, I, E, O>(
  tag: Context.Tag<Tag, WorkerPool<I, E, O>>,
  options: WorkerPool.Options<I, W>
) => Layer.Layer<never, never, Tag>

Added in v1.0.0

makePoolSerialized

Signature

export declare const makePoolSerialized: <W>() => <I extends Schema.TaggedRequest.Any>(
  options: SerializedWorkerPool.Options<I, W>
) => Effect.Effect<Scope.Scope | WorkerManager, never, SerializedWorkerPool<I>>

Added in v1.0.0

makeSerialized

Signature

export declare const makeSerialized: <I extends Schema.TaggedRequest.Any, W = unknown>(
  options: SerializedWorker.Options<I, W>
) => Effect.Effect<Scope.Scope | WorkerManager, WorkerError, SerializedWorker<I>>

Added in v1.0.0

layers

layerManager

Signature

export declare const layerManager: Layer.Layer<PlatformWorker, never, WorkerManager>

Added in v1.0.0

makePoolSerializedLayer

Signature

export declare const makePoolSerializedLayer: <W>(
  managerLayer: Layer.Layer<never, never, WorkerManager>
) => <Tag, I extends Schema.TaggedRequest.Any>(
  tag: Context.Tag<Tag, SerializedWorkerPool<I>>,
  options: SerializedWorkerPool.Options<I, W>
) => Layer.Layer<never, never, Tag>

Added in v1.0.0

models

BackingWorker (interface)

Signature

export interface BackingWorker<I, O> {
  readonly fiber: Fiber.Fiber<WorkerError, never>
  readonly send: (message: I, transfers?: ReadonlyArray<unknown>) => Effect.Effect<never, WorkerError, void>
  readonly queue: Queue.Dequeue<BackingWorker.Message<O>>
}

Added in v1.0.0

BackingWorker (namespace)

Added in v1.0.0

Message (type alias)

Signature

export type Message<O> = readonly [ready: 0] | readonly [data: 1, O]

Added in v1.0.0

PlatformWorker (interface)

Signature

export interface PlatformWorker {
  readonly [PlatformWorkerTypeId]: PlatformWorkerTypeId
  readonly spawn: <I, O>(worker: unknown) => Effect.Effect<Scope.Scope, WorkerError, BackingWorker<I, O>>
}

Added in v1.0.0

SerializedWorker (interface)

Signature

export interface SerializedWorker<I extends Schema.TaggedRequest.Any> {
  readonly id: number
  readonly execute: <Req extends I>(
    message: Req
  ) => Req extends Serializable.WithResult<infer _IE, infer E, infer _IA, infer A>
    ? Stream.Stream<never, E | WorkerError | ParseResult.ParseError, A>
    : never
  readonly executeEffect: <Req extends I>(
    message: Req
  ) => Req extends Serializable.WithResult<infer _IE, infer E, infer _IA, infer A>
    ? Effect.Effect<never, E | WorkerError | ParseResult.ParseError, A>
    : never
}

Added in v1.0.0

SerializedWorker (namespace)

Added in v1.0.0

Options (interface)

Signature

export interface Options<I, W = unknown> {
  readonly spawn: (id: number) => W
  readonly permits?: number
  readonly queue?: WorkerQueue<I>
  readonly initialMessage?: LazyArg<I>
}

Added in v1.0.0

SerializedWorkerPool (interface)

Signature

export interface SerializedWorkerPool<I extends Schema.TaggedRequest.Any> {
  readonly backing: Pool.Pool<WorkerError, SerializedWorker<I>>
  readonly broadcast: <Req extends I>(
    message: Req
  ) => Req extends Serializable.WithResult<infer _IE, infer E, infer _IA, infer _A>
    ? Effect.Effect<never, E | WorkerError | ParseResult.ParseError, void>
    : never
  readonly execute: <Req extends I>(
    message: Req
  ) => Req extends Serializable.WithResult<infer _IE, infer E, infer _IA, infer A>
    ? Stream.Stream<never, E | WorkerError | ParseResult.ParseError, A>
    : never
  readonly executeEffect: <Req extends I>(
    message: Req
  ) => Req extends Serializable.WithResult<infer _IE, infer E, infer _IA, infer A>
    ? Effect.Effect<never, E | WorkerError | ParseResult.ParseError, A>
    : never
}

Added in v1.0.0

SerializedWorkerPool (namespace)

Added in v1.0.0

Options (type alias)

Signature

export type Options<I, W = unknown> = SerializedWorker.Options<I, W> &
  (
    | {
        readonly onCreate?: (worker: Worker<I, unknown, unknown>) => Effect.Effect<never, WorkerError, void>
        readonly size: number
      }
    | {
        readonly onCreate?: (worker: Worker<I, unknown, unknown>) => Effect.Effect<never, WorkerError, void>
        readonly minSize: number
        readonly maxSize: number
        readonly timeToLive: Duration.DurationInput
      }
  )

Added in v1.0.0

Worker (interface)

Signature

export interface Worker<I, E, O> {
  readonly id: number
  readonly execute: (message: I) => Stream.Stream<never, E | WorkerError, O>
  readonly executeEffect: (message: I) => Effect.Effect<never, E | WorkerError, O>
}

Added in v1.0.0

Worker (namespace)

Added in v1.0.0

Options (interface)

Signature

export interface Options<I, W = unknown> {
  readonly spawn: (id: number) => W
  readonly encode?: (message: I) => Effect.Effect<never, WorkerError, unknown>
  readonly transfers?: (message: I) => ReadonlyArray<unknown>
  readonly permits?: number
  readonly queue?: WorkerQueue<I>
  readonly initialMessage?: LazyArg<I>
}

Added in v1.0.0

Request (type alias)

Signature

export type Request<I = unknown> = readonly [id: number, data: 0, I] | readonly [id: number, interrupt: 1]

Added in v1.0.0

Response (type alias)

Signature

export type Response<E, O = unknown> =
  | readonly [id: number, data: 0, ReadonlyArray<O>]
  | readonly [id: number, end: 1]
  | readonly [id: number, end: 1, ReadonlyArray<O>]
  | readonly [id: number, error: 2, E]
  | readonly [id: number, defect: 3, unknown]

Added in v1.0.0

WorkerManager (interface)

Signature

export interface WorkerManager {
  readonly [WorkerManagerTypeId]: WorkerManagerTypeId
  readonly spawn: <I, E, O>(options: Worker.Options<I>) => Effect.Effect<Scope.Scope, WorkerError, Worker<I, E, O>>
}

Added in v1.0.0

WorkerPool (interface)

Signature

export interface WorkerPool<I, E, O> {
  readonly backing: Pool.Pool<WorkerError, Worker<I, E, O>>
  readonly broadcast: (message: I) => Effect.Effect<never, E | WorkerError, void>
  readonly execute: (message: I) => Stream.Stream<never, E | WorkerError, O>
  readonly executeEffect: (message: I) => Effect.Effect<never, E | WorkerError, O>
}

Added in v1.0.0

WorkerPool (namespace)

Added in v1.0.0

Options (type alias)

Signature

export type Options<I, W = unknown> = Worker.Options<I, W> &
  (
    | {
        readonly onCreate?: (worker: Worker<I, unknown, unknown>) => Effect.Effect<never, WorkerError, void>
        readonly size: number
      }
    | {
        readonly onCreate?: (worker: Worker<I, unknown, unknown>) => Effect.Effect<never, WorkerError, void>
        readonly minSize: number
        readonly maxSize: number
        readonly timeToLive: Duration.DurationInput
      }
  )

Added in v1.0.0

WorkerQueue (interface)

Signature

export interface WorkerQueue<I> {
  readonly offer: (id: number, item: I) => Effect.Effect<never, never, void>
  readonly take: Effect.Effect<never, never, readonly [id: number, item: I]>
  readonly shutdown: Effect.Effect<never, never, void>
}

Added in v1.0.0

tags

PlatformWorker

Signature

export declare const PlatformWorker: Context.Tag<PlatformWorker, PlatformWorker>

Added in v1.0.0

WorkerManager

Signature

export declare const WorkerManager: Context.Tag<WorkerManager, WorkerManager>

Added in v1.0.0

type ids

PlatformWorkerTypeId

Signature

export declare const PlatformWorkerTypeId: typeof PlatformWorkerTypeId

Added in v1.0.0

PlatformWorkerTypeId (type alias)

Signature

export type PlatformWorkerTypeId = typeof PlatformWorkerTypeId

Added in v1.0.0

WorkerManagerTypeId

Signature

export declare const WorkerManagerTypeId: typeof WorkerManagerTypeId

Added in v1.0.0

WorkerManagerTypeId (type alias)

Signature

export type WorkerManagerTypeId = typeof WorkerManagerTypeId

Added in v1.0.0