retort-js
Version:
Intuitive, production-ready prompt chaining in Javascript
66 lines (65 loc) • 2.59 kB
TypeScript
export interface JsonSchema {
type: string | string[];
properties?: {
[key: string]: JsonSchema;
};
items?: JsonSchema;
required?: string[];
enum?: string[];
description?: string;
minLength?: number;
maxLength?: number;
pattern?: string;
format?: string;
minimum?: number;
maximum?: number;
exclusiveMinimum?: number;
exclusiveMaximum?: number;
multipleOf?: number;
const?: any;
}
export type RetortPrimitiveSchema = StringConstructor | NumberConstructor | BooleanConstructor | ObjectConstructor | ArrayConstructor;
export type RetortSchema = RetortPrimitiveSchema | RetortObjectSchema | [RetortSchema];
export interface RetortObjectSchema {
[key: string]: {
type: RetortSchema;
optional?: boolean;
enum?: string[];
description?: string;
nullable?: boolean;
minLength?: number;
maxLength?: number;
pattern?: string;
format?: string;
minimum?: number;
maximum?: number;
exclusiveMinimum?: number;
exclusiveMaximum?: number;
multipleOf?: number;
const?: any;
value?: any;
} | RetortSchema;
}
export declare function retortSchemaToJsonSchemaTypeString(type: RetortSchema): string;
export declare function retortSchemaToJsonSchema(retortSchema: RetortObjectSchema): JsonSchema;
type PrimitiveTypeMapping<T> = T extends StringConstructor ? string : T extends NumberConstructor ? number : T extends BooleanConstructor ? boolean : T extends ObjectConstructor ? object : T extends ArrayConstructor ? any[] : never;
type ExtractType<T> = T extends {
type: infer U;
} ? U extends RetortPrimitiveSchema ? PrimitiveTypeMapping<U> : U extends [infer V] ? RetortSchemaToType<V>[] : U extends RetortObjectSchema ? {
[K in keyof U]: RetortSchemaToType<U[K]>;
} : never : never;
type IncludeNullability<T, U> = T extends {
nullable: true;
} ? U | null : U;
type IncludeOptional<T, U> = T extends {
optional: true;
} ? U | undefined : U;
type IncludeEnum<T, U> = T extends {
type: StringConstructor;
enum: infer V;
} ? V extends string[] ? V[number] : never : U;
type CombinedIncludes<T, U> = IncludeEnum<T, IncludeOptional<T, IncludeNullability<T, U>>>;
export type RetortSchemaToType<T> = ExtractType<T> extends never ? T extends RetortPrimitiveSchema ? PrimitiveTypeMapping<T> : T extends [infer U] ? RetortSchemaToType<U>[] : T extends RetortObjectSchema ? {
[K in keyof T]: RetortSchemaToType<T[K]>;
} : never : CombinedIncludes<T, ExtractType<T>>;
export {};