import type { M } from "ts-algebra"; import type { JSONSchema } from "../definitions"; import type { ParseSchema, ParseSchemaOptions } from "./index"; export type ObjectSchema = JSONSchema & Readonly<{ type: "object"; }>; export type ParseObjectSchema = OBJECT_SCHEMA extends Readonly<{ properties: Readonly>; }> ? M.$Object<{ [KEY in keyof OBJECT_SCHEMA["properties"]]: ParseSchema; }, GetRequired, GetOpenProps, GetClosedOnResolve> : M.$Object<{}, GetRequired, GetOpenProps, GetClosedOnResolve>; type GetRequired = (OBJECT_SCHEMA extends Readonly<{ required: ReadonlyArray; }> ? OBJECT_SCHEMA["required"][number] : never) | (OPTIONS["keepDefaultedPropertiesOptional"] extends true ? never : OBJECT_SCHEMA extends Readonly<{ properties: Readonly>; }> ? { [KEY in keyof OBJECT_SCHEMA["properties"] & string]: OBJECT_SCHEMA["properties"][KEY] extends Readonly<{ default: unknown; }> ? KEY : never; }[keyof OBJECT_SCHEMA["properties"] & string] : never); type GetOpenProps = OBJECT_SCHEMA extends Readonly<{ additionalProperties: JSONSchema; }> ? OBJECT_SCHEMA extends Readonly<{ patternProperties: Record; }> ? AdditionalAndPatternProps : ParseSchema : OBJECT_SCHEMA extends Readonly<{ patternProperties: Record; }> ? PatternProps : M.Any; type GetClosedOnResolve = OBJECT_SCHEMA extends Readonly<{ unevaluatedProperties: false; }> ? true : false; type PatternProps>, OPTIONS extends ParseSchemaOptions> = M.$Union<{ [KEY in keyof PATTERN_PROPERTY_SCHEMAS]: ParseSchema; }[keyof PATTERN_PROPERTY_SCHEMAS]>; type AdditionalAndPatternProps>, OPTIONS extends ParseSchemaOptions> = ADDITIONAL_PROPERTIES_SCHEMA extends boolean ? PatternProps : M.$Union | { [KEY in keyof PATTERN_PROPERTY_SCHEMAS]: ParseSchema; }[keyof PATTERN_PROPERTY_SCHEMAS]>; export {};