import { IfAny, IsNullable, Merge, Mutable, Prettify, UnpackList } from "./utils.js"; import { ItemType, RemoveRelationships } from "./schema.js"; import { FieldsWildcard, HasManyToAnyRelation, PickRelationalFields } from "./fields.js"; import { MappedFunctionFields } from "./functions.js"; //#region src/types/output.d.ts /** * Apply the configured fields query parameter on a given Item type */ type ApplyQueryFields, Fields = UnpackList>, RelationalFields = PickRelationalFields, RelationalKeys extends keyof RelationalFields = (RelationalFields extends never ? never : keyof RelationalFields), FlatFields extends keyof CollectionItem = FieldsWildcard>> = IfAny, Prettify extends infer FF ? MapFlatFields, FlatFields, FF extends Record ? FF : Record> : never, RelationalFields extends never ? never : { [Field in keyof RelationalFields]: Field extends keyof CollectionItem ? Extract> extends infer RelatedCollection ? RelationNullable extends never ? ApplyNestedQueryFields[] | null : ApplyManyToAnyFields[] : ApplyNestedQueryFields> : never : never }>>>; /** * Apply the configured fields query parameter on a many to any relation */ type ApplyManyToAnyFields> = Junction extends object ? PickRelationalFields extends never ? ApplyQueryFields>> : "item" extends keyof PickRelationalFields ? PickRelationalFields["item"] extends infer ItemFields ? Omit, Readonly>>, "item"> & ("collection" extends UnpackList ? { [Scope in keyof ItemFields]: { collection: Scope; item: Scope extends keyof Schema ? ApplyNestedQueryFields : never; } }[keyof ItemFields] : { item: { [Scope in keyof ItemFields]: Scope extends keyof Schema ? ApplyNestedQueryFields : never }[keyof ItemFields]; }) : never : ApplyQueryFields>> : never; /** * wrapper to aid in recursion */ type ApplyNestedQueryFields = Collection extends object ? ApplyQueryFields>> : never; /** * Carry nullability of */ type RelationNullable = IsNullable; /** * Map literal types to actual output types */ type MapFlatFields> = { [F in Fields as F extends keyof FunctionMap ? FunctionMap[F] : F]: F extends keyof FunctionMap ? FunctionOutputType : Extract extends infer A ? A[] extends never[] ? Item[F] : A extends keyof FieldOutputMap ? FieldOutputMap[A] | Exclude : Item[F] : Item[F] }; type JsonPrimitive = null | boolean | number | string; type JsonValue = JsonPrimitive | JsonPrimitive[] | { [key: string]: JsonValue; }; /** * Output map for specific literal types */ type FieldOutputMap = { json: JsonValue; csv: string[]; datetime: string; }; type FunctionOutputType = number; //#endregion export { ApplyManyToAnyFields, ApplyNestedQueryFields, ApplyQueryFields, FieldOutputMap, MapFlatFields, RelationNullable }; //# sourceMappingURL=output.d.ts.map