UNPKG

@alecvision/borg

Version:

Model your data with Borg and get run-time type validation, TypeScript types, (de)serialization, and MongoDB niceties such as BSON type conversion and auto-generated validation schemas - for free.

909 lines (902 loc) 107 kB
import { ObjectId, Double, ObjectIdLike } from 'bson'; declare class BorgError<const T extends BorgError | undefined = undefined> extends Error { #private; constructor(message: string, cause?: T, path?: (string | number)[]); get path(): (string | number)[]; } type Writable<T> = T extends object ? { -readonly [K in keyof T]: T[K]; } : T extends Array<infer U> ? Array<Writable<U>> : T; type AdditionalProperties = "passthrough" | "strict" | "strip" | Borg; type IsNegativeNum<T extends number | string | null> = TrimLeft<`${T}`, " "> extends `-${infer Val extends string}` ? TrimLeft<TrimRight<Val, 0>, 0> extends `` ? false : TrimRight<`${Val}`, " "> extends "Infinity" ? false : true : false; type StringIsLongerThan<TLong extends string, TShort extends string> = TLong extends `${infer _}${infer LTail}` ? TShort extends `${infer _}${infer STail}` ? StringIsLongerThan<LTail, STail> : true : false; type TrimLeft<T extends string, C extends string | number> = T extends `${C}${infer Tail}` ? TrimLeft<Tail, C> : T; type TrimRight<T extends string, C extends string | number> = T extends `${infer Head}${C}` ? TrimRight<Head, C> : T; type StrToNum<T extends string> = T extends `${infer N extends number}` ? N : never; type GreaterThan<A extends number | string | null, B extends number | string | null> = [IsNegativeNum<A>, IsNegativeNum<B>] extends [true, false] ? false : [IsNegativeNum<A>, IsNegativeNum<B>] extends [false, true] ? true : [`${A}`, `${B}`] extends [ `${infer _ extends "-" | ""}0`, `${infer _ extends "-" | ""}0` ] ? false : [`${A}`, `${B}`] extends [`${B}`, `${A}`] ? false : StringIsLongerThan<TrimLeft<`${A}`, 0 | " " | "-">, TrimLeft<`${B}`, 0 | " " | "-">> extends true ? IsNegativeNum<A> extends true ? false : true : StringIsLongerThan<TrimLeft<`${B}`, 0 | " " | "-">, TrimLeft<`${A}`, 0 | " " | "-">> extends true ? IsNegativeNum<A> extends true ? true : false : [ `${A}`, `${B}` ] extends [ `${infer AHead}${infer ATail}`, `${infer BHead}${infer BTail}` ] ? [true] extends [ AHead extends BHead ? GreaterThan<ATail, BTail> : DigitIsGreater<StrToNum<AHead>, StrToNum<BHead>> ] ? IsNegativeNum<A> extends true ? false : true : IsNegativeNum<A> extends true ? true : false : never; type DigitIsGreater<A extends number, B extends number, Count extends 1[] = []> = Count["length"] extends A ? false : Count["length"] extends B ? true : DigitIsGreater<A, B, [...Count, 1]>; type RequiredKeys<TObj extends object> = TObj extends { [_ in infer K]: any; } ? keyof { [k in K as undefined extends TObj[k] ? never : k]: k; } : never; type RequiredKeysArray<TShape extends { [key: string]: Borg; }> = TShape extends infer T extends { [key: string]: Borg; } ? Array<RequiredKeys<{ [k in keyof T]: Type<T[k]>; }>> : never; type PrettyPrint<T> = T extends infer U extends object ? { [K in keyof U]: U[K]; } : T extends object ? never : T; type RequiredFlag = "required" | "optional"; type NullFlag = "notNull" | "nullable"; type PrivateFlag = "public" | "private"; type Flags = [RequiredFlag, NullFlag, PrivateFlag]; type MinMax = [number | null, number | null]; type Parsed<TType, TFlags extends Flags> = [ TFlags[0], TFlags[1] ] extends [infer TOptional extends Flags[0], infer TNullable extends Flags[1]] ? Writable<TType> | (TNullable extends "nullable" ? null : never) | (TOptional extends "optional" ? undefined : never) : never; type SetRequired<TFlags extends Flags> = SetFLags<TFlags, [ "required", "", "" ]>; type SetOptional<TFlags extends Flags> = SetFLags<TFlags, [ "optional", "", "" ]>; type SetNullable<TFlags extends Flags> = SetFLags<TFlags, [ "", "nullable", "" ]>; type SetNotNull<TFlags extends Flags> = SetFLags<TFlags, [ "", "notNull", "" ]>; type SetPublic<TFlags extends Flags> = SetFLags<TFlags, [ "", "", "public" ]>; type SetPrivate<TFlags extends Flags> = SetFLags<TFlags, [ "", "", "private" ]>; type SetNullish<TFlags extends Flags> = SetFLags<TFlags, [ "optional", "nullable", "" ]>; type SetNotNullish<TFlags extends Flags> = SetFLags<TFlags, [ "required", "notNull", "" ]>; type GetFlags<TFlags extends Flags, TFormat extends "enum" | "bool" = "bool"> = TFlags extends [infer TOptional, infer TNullable, infer TPrivate] ? { optional: TOptional extends "optional" ? TFormat extends "enum" ? "optional" : true : TFormat extends "enum" ? "required" : false; nullable: TNullable extends "nullable" ? TFormat extends "enum" ? "nullable" : true : TFormat extends "enum" ? "notNull" : false; private: TPrivate extends "private" ? TFormat extends "enum" ? "private" : true : TFormat extends "enum" ? "public" : false; } : never; type FlagOps = [Flags[0] | "", Flags[1] | "", Flags[2] | ""]; type SetFLags<TFlags extends Flags, TOps extends FlagOps> = [ TOps, TFlags ] extends [ [ infer Op_0 extends Flags[0] | "", infer Op_1 extends Flags[1] | "", infer Op_2 extends Flags[2] | "" ], [ infer TFlag_0 extends Flags[0], infer TFlag_1 extends Flags[1], infer TFlag_2 extends Flags[2] ] ] ? [ Op_0 extends Flags[0] ? Op_0 : TFlag_0, Op_1 extends Flags[1] ? Op_1 : TFlag_1, Op_2 extends Flags[2] ? Op_2 : TFlag_2 ] : never; type Meta = PrettyPrint<{ optional: boolean; nullable: boolean; private: boolean; } & ({ kind: "union"; borgMembers: Borg[]; } | { kind: "object"; keys: (string | undefined)[]; requiredKeys: (string | undefined)[]; borgShape: { [key: string]: Borg; }; additionalProperties: AdditionalProperties; } | { borgItems: Borg; kind: "array"; maxItems: number | null; minItems: number | null; } | ({ kind: "string"; maxLength: number | null; minLength: number | null; } & ({ pattern: null; regex: null; } | { pattern: string; regex: RegExp; })) | { kind: "number"; max: number | null; min: number | null; } | { kind: "boolean"; } | { kind: "id"; format: "string" | "oid"; })>; type UnionMeta<TFlags extends Flags, TBorgMembers extends Borg> = Readonly<PrettyPrint<{ kind: "union"; borgMembers: TBorgMembers[]; } & GetFlags<TFlags>>>; type ObjectMeta<TFlags extends Flags, TOtherProps extends AdditionalProperties, TShape extends { [key: string]: Borg; }> = Readonly<PrettyPrint<{ kind: "object"; keys: Array<Extract<keyof TShape, string>>; requiredKeys: RequiredKeysArray<TShape>; borgShape: TShape; additionalProperties: TOtherProps; } & GetFlags<TFlags>>>; type ArrayMeta<TFlags extends Flags, TLength extends MinMax, TItemBorg extends Borg> = Readonly<PrettyPrint<{ borgItems: TItemBorg; kind: "array"; maxItems: TLength[1]; minItems: TLength[0]; } & GetFlags<TFlags>>>; type StringMeta<TFlags extends Flags, TLength extends MinMax, TPattern extends string> = Readonly<PrettyPrint<{ kind: "string"; maxLength: TLength[1]; minLength: TLength[0]; } & (TPattern extends ".*" ? { pattern: null; regex: null; } : { pattern: TPattern; regex: RegExp; }) & GetFlags<TFlags>>>; type NumberMeta<TFlags extends Flags, TRange extends MinMax> = Readonly<PrettyPrint<{ kind: "number"; max: TRange[1]; min: TRange[0]; } & GetFlags<TFlags>>>; type IdMeta<TFlags extends Flags, TFormat extends string | ObjectId> = Readonly<PrettyPrint<{ kind: "id"; format: TFormat extends ObjectId ? "oid" : "string"; } & GetFlags<TFlags>>>; type BooleanMeta<TFlags extends Flags> = Readonly<PrettyPrint<{ kind: "boolean"; } & GetFlags<TFlags>>>; declare abstract class Borg { constructor(); abstract get meta(): Meta; abstract get bsonSchema(): any; abstract copy(): Borg; abstract parse(input: unknown): unknown; abstract try(input: unknown): TryResult<unknown, Meta>; abstract is(input: unknown): input is Type<this>; abstract toBson(input: any): any; abstract fromBson(input: any): any; abstract private(): Borg; abstract public(): Borg; abstract optional(): Borg; abstract nullable(): Borg; abstract nullish(): Borg; abstract required(): Borg; abstract notNull(): Borg; abstract notNullish(): Borg; } type Type<TBorg extends { parse: (arg0: unknown) => any; }> = ReturnType<TBorg["parse"]>; type BsonType<TBorg extends { toBson: (arg0: any) => any; }> = ReturnType<TBorg["toBson"]>; type TryResult<TValue, TMeta> = { ok: true; value: TValue; meta: TMeta; } | { ok: false; error: BorgError; }; declare class BorgObject<const TFlags extends Flags = ["required", "notNull", "public"], const TOtherProps extends AdditionalProperties = "strip", const TShape extends { [key: string]: Borg; } = { [key: string]: Borg; }> extends Borg { #private; constructor(shape: TShape); get meta(): ObjectMeta<TFlags, TOtherProps, TShape>; get bsonSchema(): Readonly<PrettyPrint<Readonly<PrettyPrint<{ kind: "object"; keys: Extract<keyof TShape, string>[]; requiredKeys: RequiredKeysArray<TShape>; borgShape: TShape; additionalProperties: TOtherProps; } & GetFlags<TFlags, "bool">>> extends infer T ? T extends Readonly<PrettyPrint<{ kind: "object"; keys: Extract<keyof TShape, string>[]; requiredKeys: RequiredKeysArray<TShape>; borgShape: TShape; additionalProperties: TOtherProps; } & GetFlags<TFlags, "bool">>> ? T extends { kind: "string"; nullable: infer TNullable; optional: infer TOptional; private: infer TPrivate; minLength: infer TMinLength extends number | null; maxLength: infer TMaxLength extends number | null; pattern: infer TPattern extends string | null; } ? { bsonType: Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern extends string ? TPattern : ".*") extends infer T_1 ? T_1 extends (TPattern extends string ? TPattern : ".*") ? T_1 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_1; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["nullable"] extends true ? ["string", "null"] : "string"; } & (Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern extends string ? TPattern : ".*") extends infer T_5 ? T_5 extends (TPattern extends string ? TPattern : ".*") ? T_5 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_5; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["minLength"] extends number ? { minLength: Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern extends string ? TPattern : ".*") extends infer T_1 ? T_1 extends (TPattern extends string ? TPattern : ".*") ? T_1 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_1; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["minLength"]; } : {}) & (Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern extends string ? TPattern : ".*") extends infer T_5 ? T_5 extends (TPattern extends string ? TPattern : ".*") ? T_5 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_5; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["maxLength"] extends number ? { maxLength: Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern extends string ? TPattern : ".*") extends infer T_1 ? T_1 extends (TPattern extends string ? TPattern : ".*") ? T_1 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_1; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["maxLength"]; } : {}) & (Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern extends string ? TPattern : ".*") extends infer T_5 ? T_5 extends (TPattern extends string ? TPattern : ".*") ? T_5 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_5; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["pattern"] extends null ? {} : { pattern: Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern extends string ? TPattern : ".*") extends infer T_1 ? T_1 extends (TPattern extends string ? TPattern : ".*") ? T_1 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_1; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["pattern"]; }) : T extends { kind: "number"; nullable: infer TNullable_1; optional: infer TOptional_1; private: infer TPrivate_1; min: infer TMin extends number | null; max: infer TMax extends number | null; } ? { bsonType: ((TNullable_1 extends true ? "nullable" : "notNull") extends infer T_6 ? T_6 extends (TNullable_1 extends true ? "nullable" : "notNull") ? T_6 extends "nullable" ? true : false : never : never) extends true ? ["number", "null"] : "number"; } & (TMin extends number ? { minimum: TMin; } : {}) & (TMax extends number ? { maximum: TMax; } : {}) : T extends { kind: "union"; nullable: infer TNullable_2; optional: infer TOptional_2; private: infer TPrivate_2; borgMembers: infer TBorgMembers extends Borg[]; } ? { oneOf: (TBorgMembers[number]["bsonSchema"] | (((TNullable_2 extends true ? "nullable" : "notNull") extends infer T_7 ? T_7 extends (TNullable_2 extends true ? "nullable" : "notNull") ? T_7 extends "nullable" ? true : false : never : never) extends true ? { bsonType: "null"; } : never))[]; } : T extends { kind: "object"; nullable: infer TNullable_3; optional: infer TOptional_3; private: infer TPrivate_3; additionalProperties: infer TAdditionalProperties extends Borg | "strict" | "strip" | "passthrough"; borgShape: infer TShape_1 extends { [key: string]: Borg; }; } ? { bsonType: ((TNullable_3 extends true ? "nullable" : "notNull") extends infer T_8 ? T_8 extends (TNullable_3 extends true ? "nullable" : "notNull") ? T_8 extends "nullable" ? true : false : never : never) extends true ? ["object", "null"] : "object"; } & (RequiredKeysArray<TShape_1> extends never[] ? {} : { required: RequiredKeysArray<TShape_1>; }) & { properties: { [k in keyof TShape_1]: TShape_1[k]["bsonSchema"]; }; } & (TAdditionalProperties extends "strict" | "strip" ? { additionalProperties: false; } : TAdditionalProperties extends Borg ? { additionalProperties: TAdditionalProperties["bsonSchema"]; } : {}) : T extends { kind: "array"; nullable: infer TNullable_4; optional: infer TOptional_4; private: infer TPrivate_4; borgItems: infer TItems extends Borg; minItems: infer TMin_1 extends number | null; maxItems: infer TMax_1 extends number | null; } ? { bsonType: ((TNullable_4 extends true ? "nullable" : "notNull") extends infer T_9 ? T_9 extends (TNullable_4 extends true ? "nullable" : "notNull") ? T_9 extends "nullable" ? true : false : never : never) extends true ? ["array", "null"] : "array"; items: TItems["bsonSchema"]; } & (TMin_1 extends number ? { minItems: TMin_1; } : {}) & (TMax_1 extends number ? { maxItems: TMax_1; } : {}) : T extends { kind: "id"; nullable: infer TNullable_5; optional: infer TOptional_5; private: infer TPrivate_5; format: infer TFormat extends "string" | "oid"; } ? { bsonType: ((TNullable_5 extends true ? "nullable" : "notNull") extends infer T_10 ? T_10 extends (TNullable_5 extends true ? "nullable" : "notNull") ? T_10 extends "nullable" ? true : false : never : never) extends true ? ["objectId", "null"] : "objectId"; } : T extends { kind: "boolean"; nullable: infer TNullable_6; optional: infer TOptional_6; private: infer TPrivate_6; } ? { bsonType: ((TNullable_6 extends true ? "nullable" : "notNull") extends infer T_11 ? T_11 extends (TNullable_6 extends true ? "nullable" : "notNull") ? T_11 extends "nullable" ? true : false : never : never) extends true ? ["bool", "null"] : "bool"; } : never : never : never>>; is(input: unknown): input is ReturnType<this["parse"]>; copy(): this; parse(input: unknown): Parsed<{ [k in keyof TShape]: Type<TShape[k]>; }, TFlags>; try(input: unknown): TryResult<Type<this>, this["meta"]>; toBson<TInput extends Partial<Parsed<{ [k in keyof TShape]: Type<TShape[k]>; }, TFlags>>>(input: TInput): { [k in keyof TInput]: k extends keyof TShape ? BsonType<TShape[k]> : unknown; }; fromBson(input: BsonType<BorgObject<TFlags, TOtherProps, TShape>> | null | undefined): Parsed<{ [k in keyof TShape]: Type<TShape[k]>; }, TFlags>; optional(): BorgObject<SetOptional<TFlags>, TOtherProps, TShape>; nullable(): BorgObject<SetNullable<TFlags>, TOtherProps, TShape>; nullish(): BorgObject<SetNullish<TFlags>, TOtherProps, TShape>; required(): BorgObject<SetRequired<TFlags>, TOtherProps, TShape>; notNull(): BorgObject<SetNotNull<TFlags>, TOtherProps, TShape>; notNullish(): BorgObject<SetNotNullish<TFlags>, TOtherProps, TShape>; private(): BorgObject<SetPrivate<TFlags>, TOtherProps, TShape>; public(): BorgObject<SetPublic<TFlags>, TOtherProps, TShape>; additionalProperties<T extends AdditionalProperties>(additionalProperties: T): BorgObject<TFlags, T, TShape>; } declare class BorgArray<const TFlags extends Flags = ["required", "notNull", "public"], const TLength extends MinMax = [null, null], const TItemSchema extends Borg = Borg> extends Borg { #private; constructor(itemSchema: TItemSchema); get meta(): ArrayMeta<TFlags, TLength, TItemSchema>; get bsonSchema(): Readonly<PrettyPrint<Readonly<PrettyPrint<{ borgItems: TItemSchema; kind: "array"; maxItems: TLength[1]; minItems: TLength[0]; } & GetFlags<TFlags, "bool">>> extends infer T ? T extends Readonly<PrettyPrint<{ borgItems: TItemSchema; kind: "array"; maxItems: TLength[1]; minItems: TLength[0]; } & GetFlags<TFlags, "bool">>> ? T extends { kind: "string"; nullable: infer TNullable; optional: infer TOptional; private: infer TPrivate; minLength: infer TMinLength extends number | null; maxLength: infer TMaxLength extends number | null; pattern: infer TPattern extends string | null; } ? { bsonType: Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern extends string ? TPattern : ".*") extends infer T_1 ? T_1 extends (TPattern extends string ? TPattern : ".*") ? T_1 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_1; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["nullable"] extends true ? ["string", "null"] : "string"; } & (Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern extends string ? TPattern : ".*") extends infer T_5 ? T_5 extends (TPattern extends string ? TPattern : ".*") ? T_5 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_5; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["minLength"] extends number ? { minLength: Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern extends string ? TPattern : ".*") extends infer T_1 ? T_1 extends (TPattern extends string ? TPattern : ".*") ? T_1 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_1; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["minLength"]; } : {}) & (Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern extends string ? TPattern : ".*") extends infer T_5 ? T_5 extends (TPattern extends string ? TPattern : ".*") ? T_5 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_5; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["maxLength"] extends number ? { maxLength: Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern extends string ? TPattern : ".*") extends infer T_1 ? T_1 extends (TPattern extends string ? TPattern : ".*") ? T_1 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_1; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["maxLength"]; } : {}) & (Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern extends string ? TPattern : ".*") extends infer T_5 ? T_5 extends (TPattern extends string ? TPattern : ".*") ? T_5 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_5; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["pattern"] extends null ? {} : { pattern: Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern extends string ? TPattern : ".*") extends infer T_1 ? T_1 extends (TPattern extends string ? TPattern : ".*") ? T_1 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_1; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["pattern"]; }) : T extends { kind: "number"; nullable: infer TNullable_1; optional: infer TOptional_1; private: infer TPrivate_1; min: infer TMin extends number | null; max: infer TMax extends number | null; } ? { bsonType: ((TNullable_1 extends true ? "nullable" : "notNull") extends infer T_6 ? T_6 extends (TNullable_1 extends true ? "nullable" : "notNull") ? T_6 extends "nullable" ? true : false : never : never) extends true ? ["number", "null"] : "number"; } & (TMin extends number ? { minimum: TMin; } : {}) & (TMax extends number ? { maximum: TMax; } : {}) : T extends { kind: "union"; nullable: infer TNullable_2; optional: infer TOptional_2; private: infer TPrivate_2; borgMembers: infer TBorgMembers extends Borg[]; } ? { oneOf: (TBorgMembers[number]["bsonSchema"] | (((TNullable_2 extends true ? "nullable" : "notNull") extends infer T_7 ? T_7 extends (TNullable_2 extends true ? "nullable" : "notNull") ? T_7 extends "nullable" ? true : false : never : never) extends true ? { bsonType: "null"; } : never))[]; } : T extends { kind: "object"; nullable: infer TNullable_3; optional: infer TOptional_3; private: infer TPrivate_3; additionalProperties: infer TAdditionalProperties extends Borg | "strict" | "strip" | "passthrough"; borgShape: infer TShape extends { [key: string]: Borg; }; } ? { bsonType: ((TNullable_3 extends true ? "nullable" : "notNull") extends infer T_8 ? T_8 extends (TNullable_3 extends true ? "nullable" : "notNull") ? T_8 extends "nullable" ? true : false : never : never) extends true ? ["object", "null"] : "object"; } & (RequiredKeysArray<TShape> extends never[] ? {} : { required: RequiredKeysArray<TShape>; }) & { properties: { [k in keyof TShape]: TShape[k]["bsonSchema"]; }; } & (TAdditionalProperties extends "strict" | "strip" ? { additionalProperties: false; } : TAdditionalProperties extends Borg ? { additionalProperties: TAdditionalProperties["bsonSchema"]; } : {}) : T extends { kind: "array"; nullable: infer TNullable_4; optional: infer TOptional_4; private: infer TPrivate_4; borgItems: infer TItems extends Borg; minItems: infer TMin_1 extends number | null; maxItems: infer TMax_1 extends number | null; } ? { bsonType: ((TNullable_4 extends true ? "nullable" : "notNull") extends infer T_9 ? T_9 extends (TNullable_4 extends true ? "nullable" : "notNull") ? T_9 extends "nullable" ? true : false : never : never) extends true ? ["array", "null"] : "array"; items: TItems["bsonSchema"]; } & (TMin_1 extends number ? { minItems: TMin_1; } : {}) & (TMax_1 extends number ? { maxItems: TMax_1; } : {}) : T extends { kind: "id"; nullable: infer TNullable_5; optional: infer TOptional_5; private: infer TPrivate_5; format: infer TFormat extends "string" | "oid"; } ? { bsonType: ((TNullable_5 extends true ? "nullable" : "notNull") extends infer T_10 ? T_10 extends (TNullable_5 extends true ? "nullable" : "notNull") ? T_10 extends "nullable" ? true : false : never : never) extends true ? ["objectId", "null"] : "objectId"; } : T extends { kind: "boolean"; nullable: infer TNullable_6; optional: infer TOptional_6; private: infer TPrivate_6; } ? { bsonType: ((TNullable_6 extends true ? "nullable" : "notNull") extends infer T_11 ? T_11 extends (TNullable_6 extends true ? "nullable" : "notNull") ? T_11 extends "nullable" ? true : false : never : never) extends true ? ["bool", "null"] : "bool"; } : never : never : never>>; is(input: unknown): input is ReturnType<this["parse"]>; copy(): this; parse(input: unknown): Parsed<Array<Type<TItemSchema>>, TFlags>; try(input: unknown): TryResult<Type<this>, this["meta"]>; toBson(input: Parsed<Array<Type<TItemSchema>>, TFlags>): Array<BsonType<TItemSchema>>; fromBson(input: BsonType<BorgArray<TFlags, TLength, TItemSchema>> | null | undefined): Parsed<Array<Type<TItemSchema>>, TFlags>; optional(): BorgArray<SetOptional<TFlags>, TLength, TItemSchema>; nullable(): BorgArray<SetNullable<TFlags>, TLength, TItemSchema>; nullish(): BorgArray<SetNullish<TFlags>, TLength, TItemSchema>; required(): BorgArray<SetRequired<TFlags>, TLength, TItemSchema>; notNull(): BorgArray<SetNotNull<TFlags>, TLength, TItemSchema>; notNullish(): BorgArray<SetNotNullish<TFlags>, TLength, TItemSchema>; private(): BorgArray<SetPrivate<TFlags>, TLength, TItemSchema>; public(): BorgArray<SetPublic<TFlags>, TLength, TItemSchema>; minItems<const Min extends number | null>(length: Min): [GreaterThan<Min, TLength[1]>, Min extends null ? true : false] extends [ true, false ] ? never : IsNegativeNum<Min> extends false ? BorgArray<TFlags, [Min, TLength[1]], TItemSchema> : never; maxItems<const Max extends number | null>(length: Max): [ GreaterThan<TLength[0], Max>, TLength[0] extends null ? true : false ] extends [true, false] ? never : IsNegativeNum<Max> extends false ? BorgArray<TFlags, [TLength[0], Max], TItemSchema> : never; length<const N extends number | null>(length: N): IsNegativeNum<N> extends false ? BorgArray<TFlags, [N, N], TItemSchema> : never; length<const Min extends number | null, const Max extends number | null>(minLength: Min, maxLength: Max): null extends Min | Max ? BorgArray<TFlags, [Min, Max], TItemSchema> : GreaterThan<Min, Max> extends true ? never : [IsNegativeNum<Min>, IsNegativeNum<Max>] extends [false, false] ? BorgArray<TFlags, [Min, Max], TItemSchema> : never; } declare class BorgString<const TFlags extends Flags = ["required", "notNull", "public"], const TLength extends MinMax = [null, null], const TPattern extends string = ".*"> extends Borg { #private; constructor(); get meta(): StringMeta<TFlags, TLength, TPattern>; get bsonSchema(): Readonly<PrettyPrint<Readonly<PrettyPrint<{ kind: "string"; maxLength: TLength[1]; minLength: TLength[0]; } & (TPattern extends ".*" ? { pattern: null; regex: null; } : { pattern: TPattern; regex: RegExp; }) & GetFlags<TFlags, "bool">>> extends infer T ? T extends Readonly<PrettyPrint<{ kind: "string"; maxLength: TLength[1]; minLength: TLength[0]; } & (TPattern extends ".*" ? { pattern: null; regex: null; } : { pattern: TPattern; regex: RegExp; }) & GetFlags<TFlags, "bool">>> ? T extends { kind: "string"; nullable: infer TNullable; optional: infer TOptional; private: infer TPrivate; minLength: infer TMinLength extends number | null; maxLength: infer TMaxLength extends number | null; pattern: infer TPattern_1 extends string | null; } ? { bsonType: Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern_1 extends string ? TPattern_1 : ".*") extends infer T_1 ? T_1 extends (TPattern_1 extends string ? TPattern_1 : ".*") ? T_1 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_1; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["nullable"] extends true ? ["string", "null"] : "string"; } & (Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern_1 extends string ? TPattern_1 : ".*") extends infer T_5 ? T_5 extends (TPattern_1 extends string ? TPattern_1 : ".*") ? T_5 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_5; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["minLength"] extends number ? { minLength: Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern_1 extends string ? TPattern_1 : ".*") extends infer T_1 ? T_1 extends (TPattern_1 extends string ? TPattern_1 : ".*") ? T_1 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_1; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["minLength"]; } : {}) & (Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern_1 extends string ? TPattern_1 : ".*") extends infer T_5 ? T_5 extends (TPattern_1 extends string ? TPattern_1 : ".*") ? T_5 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_5; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["maxLength"] extends number ? { maxLength: Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern_1 extends string ? TPattern_1 : ".*") extends infer T_1 ? T_1 extends (TPattern_1 extends string ? TPattern_1 : ".*") ? T_1 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_1; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["maxLength"]; } : {}) & (Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern_1 extends string ? TPattern_1 : ".*") extends infer T_5 ? T_5 extends (TPattern_1 extends string ? TPattern_1 : ".*") ? T_5 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_5; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["pattern"] extends null ? {} : { pattern: Readonly<PrettyPrint<{ kind: "string"; maxLength: TMaxLength; minLength: TMinLength; } & ((TPattern_1 extends string ? TPattern_1 : ".*") extends infer T_1 ? T_1 extends (TPattern_1 extends string ? TPattern_1 : ".*") ? T_1 extends ".*" ? { pattern: null; regex: null; } : { pattern: T_1; regex: RegExp; } : never : never) & { optional: (TOptional extends true ? "optional" : "required") extends infer T_2 ? T_2 extends (TOptional extends true ? "optional" : "required") ? T_2 extends "optional" ? true : false : never : never; nullable: (TNullable extends true ? "nullable" : "notNull") extends infer T_3 ? T_3 extends (TNullable extends true ? "nullable" : "notNull") ? T_3 extends "nullable" ? true : false : never : never; private: (TPrivate extends true ? "private" : "public") extends infer T_4 ? T_4 extends (TPrivate extends true ? "private" : "public") ? T_4 extends "private" ? true : false : never : never; }>>["pattern"]; }) : T extends { kind: "number"; nullable: infer TNullable_1; optional: infer TOptional_1; private: infer TPrivate_1; min: infer TMin extends number | null; max: infer TMax extends number | null; } ? { bsonType: ((TNullable_1 extends true ? "nullable" : "notNull") extends infer T_6 ? T_6 extends (TNullable_1 extends true ? "nullable" : "notNull") ? T_6 extends "nullable" ? true : false : never : never) extends true ? ["number", "null"] : "number"; } & (TMin extends number ? { minimum: TMin; } : {}) & (TMax extends number ? { maximum: TMax; } : {}) : T extends { kind: "union"; nullable: infer TNullable_2; optional: infer TOptional_2; private: infer TPrivate_2; borgMembers: infer TBorgMembers extends Borg[]; } ? { oneOf: (TBorgMembers[number]["bsonSchema"] | (((TNullable_2 extends true ? "nullable" : "notNull") extends infer T_7 ? T_7 extends (TNullable_2 extends true ? "nullable" : "notNull") ? T_7 extends "nullable" ? true : false : never : never) extends true ? { bsonType: "null"; } : never))[]; } : T extends { kind: "object"; nullable: infer TNullable_3; optional: infer TOptional_3; private: infer TPrivate_3; additionalProperties: infer TAdditionalProperties extends Borg | "strict" | "strip" | "passthrough"; borgShape: infer TShape extends { [key: string]: Borg; }; } ? { bsonType: ((TNullable_3 extends true ? "nullable" : "notNull") extends infer T_8 ? T_8 extends (TNullable_3 extends true ? "nullable" : "notNull") ? T_8 extends "nullable" ? true : false : never : never) extends true ? ["object", "null"] : "object"; } & (RequiredKeysArray<TShape> extends never[] ? {} : { required: RequiredKeysArray<TShape>; }) & { properties: { [k in keyof TShape]: TShape[k]["bsonSchema"]; }; } & (TAdditionalProperties extends "strict" | "strip" ? { additionalProperties: false; } : TAdditionalProperties extends Borg ? { additionalProperties: TAdditionalProperties["bsonSchema"]; } : {}) : T extends { kind: "array"; nullable: infer TNullable_4; optional: infer TOptional_4; private: infer TPrivate_4; borgItems: infer TItems extends Borg; minItems: infer TMin_1 extends number | null; maxItems: infer TMax_1 extends number | null; } ? { bsonType: ((TNullable_4 extends true ? "nullable" : "notNull") extends infer T_9 ? T_9 extends (TNullable_4 extends true ? "nullable" : "notNull") ? T_9 extends "nullable" ? true : false : never : never) extends true ? ["array", "null"] : "array"; items: TItems["bsonSchema"]; } & (TMin_1 extends number ? { minItems: TMin_1; } : {}) & (TMax_1 extends number ? { maxItems: TMax_1; } : {}) : T extends { kind: "id"; nullable: infer TNullable_5; optional: infer TOptional_5; private: infer TPrivate_5; format: infer TFormat extends "string" | "oid"; } ? { bsonType: ((TNullable_5 extends true ? "nullable" : "notNull") extends infer T_10 ? T_10 extends (TNullable_5 extends true ? "nullable" : "notNull") ? T_10 extends "nullable" ? true : false : never : never) extends true ? ["objectId", "null"] : "objectId"; } : T extends { kind: "boolean"; nullable: infer TNullable_6; optional: infer TOptional_6; private: infer TPrivate_6; } ? { bsonType: ((TNullable_6 extends true ? "nullable" : "notNull") extends infer T_11 ? T_11 extends (TNullable_6 extends true ? "nullable" : "notNull") ? T_11 extends "nullable" ? true : false : never : never) extends true ? ["bool", "null"] : "bool"; } : never : never : never>>; is(input: unknown): input is ReturnType<this["parse"]>; copy()