import type { $ADD, $APPEND, $DELETE, $PREPEND, $REMOVE, $SUBTRACT, $SUM, ADD, APPEND, DELETE, Extended, GET, PREPEND, REMOVE, SUBTRACT, SUM, Unextended } from '../../../entity/actions/update/symbols/index.js'; import type { Reference, ReferenceExtension } from '../../../entity/actions/update/types.js'; import type { Entity } from '../../../entity/index.js'; import type { Always, AnyOfSchema, AnySchema, ItemSchema, ItemUnextendedValue, ListSchema, MapSchema, Never, NumberExtendedValue, NumberSchema, PrimitiveSchema, RecordSchema, ResolveAnySchema, ResolvePrimitiveSchema, Schema, SchemaExtendedValue, SetExtendedValue, SetSchema } from '../../../schema/index.js'; import type { Paths, ValidValue } from '../../../schema/index.js'; import type { Extends, If, Not, Optional } from '../../../types/index.js'; export type UpdateAttributesInputExtension = ReferenceExtension | { type: '*'; value: Extended<{ [$REMOVE]: true; }>; } | { type: 'number'; value: Extended<{ [$ADD]: number; }> | Extended<{ [$SUM]: [ NumberExtendedValue, NumberExtendedValue ]; }> | Extended<{ [$SUBTRACT]: [ NumberExtendedValue, NumberExtendedValue ]; }>; } | { type: 'set'; value: Extended<{ [$ADD]: SetExtendedValue; } | { [$DELETE]: SetExtendedValue; }>; } | { type: 'list'; value: Extended<{ [$APPEND]: SchemaExtendedValue | SchemaExtendedValue[]; } | { [$PREPEND]: SchemaExtendedValue | SchemaExtendedValue[]; }>; }; type MustBeDefined = If, If>, false, If, Not>, Not>>>>; type OptionalKeys = { [KEY in keyof SCHEMA['attributes']]: If, never, KEY>; }[keyof SCHEMA['attributes']]; type CanBeRemoved = SCHEMA['props'] extends { required: Never; } ? true : false; export type UpdateAttributesInput = Entity extends SCHEMA ? ItemUnextendedValue : ItemSchema extends SCHEMA ? ItemUnextendedValue : SCHEMA extends ItemSchema ? Optional<{ [KEY in keyof SCHEMA['attributes']]: UpdateAttributeInput>; }, OptionalKeys> : SCHEMA extends Entity ? UpdateAttributesInput : never; type NumberUpdate = number | (SCHEMA['props'] extends { big: true; } ? bigint : never); /** * User input of an UPDATE command for a given Schema * * @param Schema Schema * @param RequireDefaults Boolean * @return Any */ export type UpdateAttributeInput = Schema extends SCHEMA ? SchemaExtendedValue | undefined : If, never, undefined> | If, REMOVE, never> | GET<[ ref: AVAILABLE_PATHS, fallback?: ValidValue | Reference ]> | (SCHEMA extends AnySchema ? ResolveAnySchema | unknown : never) | (SCHEMA extends PrimitiveSchema ? ResolvePrimitiveSchema : never) | (SCHEMA extends NumberSchema ? ADD> | SUM | GET<[ ref: AVAILABLE_PATHS, fallback?: NumberUpdate | Reference ]>, NumberUpdate | GET<[ ref: AVAILABLE_PATHS, fallback?: NumberUpdate | Reference ]>> | SUBTRACT | GET<[ ref: AVAILABLE_PATHS, fallback?: NumberUpdate | Reference ]>, NumberUpdate | GET<[ ref: AVAILABLE_PATHS, fallback?: NumberUpdate | Reference ]>> : never) | (SCHEMA extends SetSchema ? Set> | ADD>> | DELETE>> : never) | (SCHEMA extends ListSchema ? Unextended[]> | APPEND[] | Reference ]> | ValidValue[]> | PREPEND[] | Reference ]> | ValidValue[]> : never) | (SCHEMA extends MapSchema ? Unextended> : never) | (SCHEMA extends RecordSchema ? Unextended> : never) | (SCHEMA extends AnyOfSchema ? UpdateAttributeInput : never); export {};