UNPKG

@temporalio/common

Version:

Common library for code that's used across the Client, Worker, and/or Workflow

37 lines (30 loc) 1.22 kB
import type { Payload } from '../interfaces'; import type { ProtoFailure } from '../failure'; export interface EncodedPayload extends Payload { encoded: true; } export interface DecodedPayload extends Payload { decoded: true; } /** Replace `Payload`s with `EncodedPayload`s */ export type Encoded<T> = ReplaceNested<T, Payload, EncodedPayload>; /** Replace `Payload`s with `DecodedPayload`s */ export type Decoded<T> = ReplaceNested<T, Payload, DecodedPayload>; export type EncodedProtoFailure = Encoded<ProtoFailure>; export type DecodedProtoFailure = Decoded<ProtoFailure>; /** An object T with any nested values of type ToReplace replaced with ReplaceWith */ export type ReplaceNested<T, ToReplace, ReplaceWith> = T extends (...args: any[]) => any ? T : [keyof T] extends [never] ? T : T extends Record<string, string> // Special exception for Nexus Headers. ? T : T extends { [k: string]: ToReplace } ? { [P in keyof T]: ReplaceNested<T[P], ToReplace, ReplaceWith>; } : T extends ToReplace ? ReplaceWith | Exclude<T, ToReplace> : { [P in keyof T]: ReplaceNested<T[P], ToReplace, ReplaceWith>; };