@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
TypeScript
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()