import Optional from "./Optional.js"; import Runtype, { type Parsed, type Static } from "./Runtype.js"; type OptionalKeysStatic = { [K in keyof T]: T[K] extends Optional ? K : never; }[keyof T]; type RequiredKeysStatic = { [K in keyof T]: T[K] extends Optional ? never : K; }[keyof T]; type OptionalKeysParsed = { [K in keyof T]: T[K] extends Optional ? ([X] extends [never] ? K : never) : never; }[keyof T]; type RequiredKeysParsed = { [K in keyof T]: T[K] extends Optional ? ([X] extends [never] ? never : K) : K; }[keyof T]; type RequiredValuesStatic = T extends Runtype.Core ? Static : never; type OptionalValuesStatic = T extends Optional ? Static : never; type RequiredValuesParsed = T extends Optional ? [X] extends [never] ? never : Parsed | X : T extends Runtype.Core ? Parsed : never; type OptionalValuesParsed = T extends Optional ? ([X] extends [never] ? Parsed : never) : never; type ObjectStaticReadonly = { [K in RequiredKeysStatic]: RequiredValuesStatic; } & { [K in OptionalKeysStatic]?: OptionalValuesStatic; } extends infer P ? { readonly [K in keyof P]: P[K]; } : never; type ObjectStatic = { [K in RequiredKeysStatic]: RequiredValuesStatic; } & { [K in OptionalKeysStatic]?: OptionalValuesStatic; } extends infer P ? { [K in keyof P]: P[K]; } : never; type ObjectParsedReadonly = { [K in RequiredKeysParsed]: RequiredValuesParsed; } & { [K in OptionalKeysParsed]?: OptionalValuesParsed; } extends infer P ? { readonly [K in keyof P]: P[K]; } : never; type ObjectParsed = { [K in RequiredKeysParsed]: RequiredValuesParsed; } & { [K in OptionalKeysParsed]?: OptionalValuesParsed; } extends infer P ? { [K in keyof P]: P[K]; } : never; type Utilities = { asPartial(): Object<{ [K in keyof O]: O[K] extends Optional ? O[K] : O[K] extends Runtype.Core ? Optional : never; }>; asReadonly(): Object.Readonly; pick(...keys: K[]): Object>; omit(...keys: K[]): Object>; extend

(fields: { [K in keyof P]: K extends keyof O ? O[K] extends Optional ? P[K] extends Optional ? Static extends Static ? P[K] : Runtype.Core> | Optional>> : P[K] extends Runtype.Core ? P[K] extends OK ? P[K] : Runtype.Core> | Optional>> : never : O[K] extends Runtype.Core ? P[K] extends Optional ? Runtype.Core> : P[K] extends Runtype.Core ? Static extends Static ? P[K] : Runtype.Core> : never : never : P[K]; }): Object<{ [K in keyof O | keyof P]: K extends keyof P ? P[K] : K extends keyof O ? O[K] : never; }>; exact(): Object; }; /** * Validates that a value is an object and each property fulfills the given property runtype. * * Possible failures: * * - `TYPE_INCORRECT` for `null`, `undefined`, and non-objects if fields were non-empty * - `CONTENT_INCORRECT` with `details` reporting the failed properties * * For each property, contextual failures can be seen in addition to failures of the property runtype: * * - `PROPERTY_MISSING` for missing required properties * - `PROPERTY_PRESENT` for extraneous properties where `.exact()` flag is enabled */ interface Object extends Runtype, ObjectParsed>, Utilities { tag: "object"; fields: O; isExact: boolean; } declare namespace Object { type Fields = globalThis.Record; interface Readonly extends Runtype, ObjectParsedReadonly>, Utilities { tag: "object"; fields: O; isExact: boolean; } } declare const Object: (fields: O) => Object; export default Object;