Suite of AT Protocol TypeScript libraries built on web standards
21
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 55 lines 1.7 kB view raw
1import type { Infer, Validator } from "../validation.ts"; 2 3export type LexBody<E extends string = any> = E extends `text/${string}` 4 ? string 5 : E extends "application/json" ? unknown 6 : Uint8Array; 7 8type InferPayloadBodyType<E extends string, B> = E extends `text/${string}` 9 ? string 10 : E extends "application/json" ? unknown 11 : B; 12 13export type InferPayload<P extends Payload, B = Uint8Array> = P extends 14 Payload<infer E, infer S> 15 ? E extends string ? S extends Validator ? { encoding: E; body: Infer<S> } 16 : { encoding: E; body: InferPayloadBodyType<E, B> } 17 : undefined 18 : undefined; 19 20export type InferPayloadEncoding<P extends Payload> = P extends 21 Payload<infer E, any> ? E : undefined; 22 23export type InferPayloadBody<P extends Payload, B = Uint8Array> = P extends 24 Payload<any, infer S> ? S extends Validator ? Infer<S> 25 : P extends Payload<infer E extends string> ? InferPayloadBodyType<E, B> 26 : undefined 27 : undefined; 28 29export type PayloadOutput< 30 E extends string | undefined = any, 31 S extends Validator | undefined = any, 32 B = Uint8Array, 33> = E extends string ? S extends Validator ? { encoding: E; body: Infer<S> } 34 : { encoding: E; body: InferPayloadBodyType<E, B> } 35 : void; 36 37export type PayloadBody<E extends string | undefined> = E extends undefined 38 ? undefined 39 : Validator | undefined; 40 41export class Payload< 42 const Encoding extends string | undefined = string | undefined, 43 const Body extends PayloadBody<Encoding> = PayloadBody<Encoding>, 44> { 45 constructor( 46 readonly encoding: Encoding, 47 readonly schema: Body, 48 ) { 49 if (encoding === undefined && schema !== undefined) { 50 throw new TypeError( 51 "schema cannot be defined when encoding is undefined", 52 ); 53 } 54 } 55}