import type { AnyOfSchema, AnySchema, BinarySchema, BooleanSchema, ItemSchema, ListSchema, MapSchema, Never, NullSchema, NumberSchema, RecordSchema, ResolveAnySchema, ResolveBinarySchema, ResolveBooleanSchema, ResolveNumberSchema, ResolveStringSchema, ResolvedNullSchema, Schema, SetSchema, StringSchema, TupleSchema } from '../../schema/index.js'; import type { Extends, If, Not, Optional, Overwrite } from '../../types/index.js'; import type { ReadValueOptions } from './options.js'; import type { ChildPaths, ElementPaths, MatchIndexes, MatchKeys } from './pathUtils.js'; import type { Paths } from './paths.js'; /** * Returns the type of formatted values for a given Schema (prior to hiding hidden fields) * * @param Schema Schema * @return Value */ export type DecodedValue = {}> = SCHEMA extends ItemSchema ? ItemSchemaDecodedValue : SCHEMA extends Schema ? SchemaDecodedValue : never; type MustBeDefined = Not>; type OptionalKeys = { [KEY in keyof SCHEMA['attributes']]: If, never, KEY>; }[keyof SCHEMA['attributes']]; type ItemSchemaDecodedValue = {}, MATCHING_KEYS extends string = OPTIONS extends { attributes: string; } ? MatchKeys, OPTIONS['attributes'], ''> : Extract> = ItemSchema extends SCHEMA ? { [KEY: string]: unknown; } : [ MATCHING_KEYS ] extends [never] ? never : Optional<{ [KEY in MATCHING_KEYS]: SchemaDecodedValue, Paths | undefined> : undefined; }>>; }, OPTIONS extends { partial: true; } ? string : OptionalKeys>; type SchemaDecodedValue = {}> = Schema extends SCHEMA ? unknown : (SCHEMA extends AnySchema ? AnySchemaDecodedValue : never) | (SCHEMA extends NullSchema ? If, never, undefined> | ResolvedNullSchema : never) | (SCHEMA extends BooleanSchema ? If, never, undefined> | ResolveBooleanSchema : never) | (SCHEMA extends NumberSchema ? If, never, undefined> | ResolveNumberSchema : never) | (SCHEMA extends StringSchema ? If, never, undefined> | ResolveStringSchema : never) | (SCHEMA extends BinarySchema ? If, never, undefined> | ResolveBinarySchema : never) | (SCHEMA extends SetSchema ? SetSchemaDecodedValue : never) | (SCHEMA extends ListSchema ? ListSchemaDecodedValue : never) | (SCHEMA extends TupleSchema ? TupleSchemaDecodedValue : never) | (SCHEMA extends MapSchema ? MapSchemaDecodedValue : never) | (SCHEMA extends RecordSchema ? RecordSchemaDecodedValue : never) | (SCHEMA extends AnyOfSchema ? AnyOfSchemaDecodedValue : never); type AnySchemaDecodedValue = AnySchema extends SCHEMA ? unknown : ResolveAnySchema; type SetSchemaDecodedValue = {}> = SetSchema extends SCHEMA ? undefined | Set> : If, never, undefined> | Set>>; type ListSchemaDecodedValue = {}, DECODED_ELEMENTS = ListSchema extends SCHEMA ? unknown : SchemaDecodedValue, Paths | undefined> : undefined; }>>> = ListSchema extends SCHEMA ? undefined | unknown[] : [DECODED_ELEMENTS] extends [never] ? never : If, never, undefined> | DECODED_ELEMENTS[]; type TupleSchemaDecodedValue = {}, DECODED_ELEMENTS = TupleSchema extends SCHEMA ? unknown : TupleSchemaDecodedValueRec> = TupleSchema extends SCHEMA ? unknown[] : [DECODED_ELEMENTS] extends [never] ? never : If, never, undefined> | DECODED_ELEMENTS; type TupleSchemaDecodedValueRec = {}, MATCHING_INDEXES extends number = OPTIONS extends { attributes: string; } ? MatchIndexes : number, ELEMENTS extends Schema[] = SCHEMA['elements'], RESULTS extends unknown[] = []> = ELEMENTS extends [...infer ELEMENTS_INIT, infer ELEMENTS_LAST] ? ELEMENTS_LAST extends Schema ? ELEMENTS_INIT extends Schema[] ? TupleSchemaDecodedValueRec, Paths | undefined> : undefined; }>> | (OPTIONS extends { partial: true; } ? undefined : never)), ...RESULTS ] : RESULTS> : never : never : RESULTS; type MapSchemaDecodedValue = {}, MATCHING_KEYS extends string = OPTIONS extends { attributes: string; } ? MatchKeys, OPTIONS['attributes']> : Extract> = MapSchema extends SCHEMA ? undefined | { [KEY: string]: unknown; } : [ MATCHING_KEYS ] extends [never] ? never : If, never, undefined> | Optional<{ [KEY in MATCHING_KEYS]: SchemaDecodedValue, Paths | undefined> : undefined; }>>; }, OPTIONS extends { partial: true; } ? string : OptionalKeys>; type MatchRecordKeys = string extends KEYS ? string : MatchKeys; type RecordChildPaths = undefined extends CHILD_PATHS ? undefined : CHILD_PATHS; type RecordSchemaDecodedValue = {}, MATCHING_KEYS extends string = OPTIONS extends { attributes: string; } ? MatchRecordKeys, OPTIONS['attributes']> : ResolveStringSchema> = RecordSchema extends SCHEMA ? undefined | Record : [ MATCHING_KEYS ] extends [never] ? never : If, never, undefined> | Optional, Paths | undefined> : undefined; }>>>, (SCHEMA['props'] extends { partial: true; } ? string : never) | (OPTIONS extends { partial: true; } ? string : never)>; type AnyOfSchemaDecodedValue = {}> = AnyOfSchema extends SCHEMA ? unknown : If, never, undefined> | AnyOfSchemaDecodedValueRec; type AnyOfSchemaDecodedValueRec = {}, ELEMENTS extends Schema[] = SCHEMA['elements'], RESULTS = never> = ELEMENTS extends [infer ELEMENTS_HEAD, ...infer ELEMENTS_TAIL] ? ELEMENTS_HEAD extends Schema ? ELEMENTS_TAIL extends Schema[] ? AnyOfSchemaDecodedValueRec | undefined> : undefined; }>>> : never : never : [RESULTS] extends [never] ? unknown : RESULTS; export {};