import type { Call } from 'hotscript'; import type { Always, AnyOfSchema, AnySchema, BinarySchema, BooleanSchema, ItemSchema, ListSchema, MapSchema, Never, NullSchema, NumberSchema, PrimitiveSchema, RecordSchema, ResolveAnySchema, ResolveBinarySchema, ResolveBooleanSchema, ResolveNumberSchema, ResolveStringSchema, ResolvedNullSchema, ResolvedPrimitiveSchema, Schema, SetSchema, StringSchema } from '../../schema/index.js'; import type { Transformer, TypeModifier } from '../../transformers/index.js'; import type { Extends, If, Not, Optional, Overwrite, SelectKeys } from '../../types/index.js'; import type { SchemaExtendedWriteValue, WriteValueOptions } from './options.js'; export type TransformedValue = SCHEMA extends ItemSchema ? ItemSchemaTransformedValue : SCHEMA extends Schema ? SchemaTransformedValue : never; type MustBeDefined = If, true, If, Extends, Not>>>; type OptionalKeys = { [KEY in keyof SCHEMA['attributes']]: If, never, SCHEMA['attributes'][KEY] extends { props: { savedAs: string; }; } ? // '& string' needed for old TS versions SCHEMA['attributes'][KEY]['props']['savedAs'] & string : KEY>; }[keyof SCHEMA['attributes']]; type ItemSchemaTransformedValue = ItemSchema extends SCHEMA ? { [KEY: string]: SchemaTransformedValue>; } : Optional<{ [KEY in OPTIONS extends { mode: 'key'; } ? SelectKeys : keyof SCHEMA['attributes'] as SCHEMA['attributes'][KEY]['props'] extends { savedAs: string; } ? SCHEMA['attributes'][KEY]['props']['savedAs'] : KEY]: SchemaTransformedValue>; }, OptionalKeys>>; type SchemaTransformedValue = Schema extends SCHEMA ? unknown : (SCHEMA extends AnySchema ? AnySchemaTransformedValue : never) | (SCHEMA extends PrimitiveSchema ? PrimitiveSchemaTransformedValue : never) | (SCHEMA extends SetSchema ? SetSchemaTransformedValue : never) | (SCHEMA extends ListSchema ? ListSchemaTransformedValue : never) | (SCHEMA extends MapSchema ? MapSchemaTransformedValue : never) | (SCHEMA extends RecordSchema ? RecordSchemaTransformedValue : never) | (SCHEMA extends AnyOfSchema ? AnyOfSchemaTransformedValue : never); type AnySchemaTransformedValue = AnySchema extends SCHEMA ? unknown : If, never, undefined> | SchemaExtendedWriteValue | (SCHEMA['props'] extends { transform: Transformer; } ? Call, ResolveAnySchema> : ResolveAnySchema); type PrimitiveSchemaTransformedValue = PrimitiveSchema extends SCHEMA ? undefined | SchemaExtendedWriteValue | ResolvedPrimitiveSchema : If, never, undefined> | SchemaExtendedWriteValue | (SCHEMA extends NullSchema ? SCHEMA['props'] extends { transform: Transformer; } ? Call, ResolvedNullSchema> : ResolvedNullSchema : never) | (SCHEMA extends NumberSchema ? SCHEMA['props'] extends { transform: Transformer; } ? Call, ResolveNumberSchema> : ResolveNumberSchema : never) | (SCHEMA extends BooleanSchema ? SCHEMA['props'] extends { transform: Transformer; } ? Call, ResolveBooleanSchema> : ResolveBooleanSchema : never) | (SCHEMA extends StringSchema ? SCHEMA['props'] extends { transform: Transformer; } ? Call, ResolveStringSchema> : ResolveStringSchema : never) | (SCHEMA extends BinarySchema ? SCHEMA['props'] extends { transform: Transformer; } ? Call, ResolveBinarySchema> : ResolveBinarySchema : never); type SetSchemaTransformedValue = SetSchema extends SCHEMA ? If, never, undefined> | SchemaExtendedWriteValue | Set>> : If, never, undefined> | SchemaExtendedWriteValue | Set>>; type ListSchemaTransformedValue = ListSchema extends SCHEMA ? If, never, undefined> | SchemaExtendedWriteValue | unknown[] : If, never, undefined> | SchemaExtendedWriteValue | SchemaTransformedValue>[]; type MapSchemaTransformedValue = MapSchema extends SCHEMA ? If, never, undefined> | SchemaExtendedWriteValue | { [KEY: string]: unknown; } : If, never, undefined> | SchemaExtendedWriteValue | Optional<{ [KEY in OPTIONS extends { mode: 'key'; } ? SelectKeys : keyof SCHEMA['attributes'] as SCHEMA['attributes'][KEY]['props'] extends { savedAs: string; } ? SCHEMA['attributes'][KEY]['props']['savedAs'] : KEY]: SchemaTransformedValue>; }, OptionalKeys>>; type RecordSchemaTransformedValue = RecordSchema extends SCHEMA ? If, never, undefined> | SchemaExtendedWriteValue | Record : If, never, undefined> | SchemaExtendedWriteValue | Optional, string>, SchemaTransformedValue>>, (SCHEMA['props'] extends { partial: true; } ? string : never) | (OPTIONS extends { mode: 'update'; } ? string : never)>; type AnyOfSchemaTransformedValue = AnyOfSchema extends SCHEMA ? unknown : If, never, undefined> | SchemaExtendedWriteValue | MapAnyOfSchemaTransformedValue; type MapAnyOfSchemaTransformedValue = ELEMENTS extends [infer ELEMENTS_HEAD, ...infer ELEMENTS_TAIL] ? ELEMENTS_HEAD extends Schema ? ELEMENTS_TAIL extends Schema[] ? MapAnyOfSchemaTransformedValue> : never : never : [RESULTS] extends [never] ? unknown : RESULTS; export {};