import type { UnionToIntersection, LazyLoader } from '@aws-amplify/data-schema-types'; import type { Authorization, ImpliedAuthFields } from '../Authorization'; import type { ModelField } from '../ModelField'; import type { ModelType, ModelTypeParamShape } from '../ModelType'; import type { GenericModelSchema } from '../ModelSchema'; import type { ModelRelationshipField, ModelRelationshipFieldParamShape } from '../ModelRelationshipField'; import type { PrimaryIndexIrShape } from '../util/'; import type { ResolveSchema, SchemaTypes } from './ResolveSchema'; import type { InjectImplicitModelFields } from './ImplicitFieldInjector'; import type { ModelIdentifier } from './ModelMetadata'; import type { RefType, RefTypeParamShape } from '../RefType'; import type { NonModelTypesShape } from './ExtractNonModelTypes'; import type { CustomType, CustomTypeParamShape } from '../CustomType'; import type { EnumType } from '../EnumType'; import type { CustomOperation, CustomOperationParamShape } from '../CustomOperation'; export type ResolveFieldProperties, NonModelTypes extends NonModelTypesShape, ResolvedSchema = ResolveSchema, IdentifierMeta extends Record = ModelIdentifier>, FieldsWithInjectedImplicitFields = InjectImplicitModelFields, FieldsWithRelationships = ResolveModelsRelationshipAndRefFields> = Intersection>, FilterFieldTypes>, FilterFieldTypes>>; export type ResolveStaticFieldProperties, NonModelTypes extends NonModelTypesShape, ImplicitModelsSchema, ResolvedSchema = ResolveSchema, FieldsWithInjectedImplicitFields = InjectImplicitModelFields, FieldsWithRelationships = ResolveModelsRelationshipAndRefFields> = Intersection>, FilterFieldTypes>>; type GetRelationshipRef, Model = TypeArg['valueRequired'] extends true ? ResolvedModel : ResolvedModel | null | undefined> = LazyLoader; type ResolveRelationshipFieldsForModel = { [FieldName in keyof Schema[ModelName]]: Schema[ModelName][FieldName] extends ModelRelationshipFieldParamShape ? Schema[ModelName][FieldName]['relatedModel'] extends keyof Schema ? GetRelationshipRef : never : Schema[ModelName][FieldName]; }; export type ResolveRef : never, Value = Ref['valueRequired'] extends true ? RefValue : RefValue | null> = ResolveRefValueArrayTraits; /** * Converts the resolved RefType Value type into Array<> according to the * `array` and `arrayRequired` properties of the RefType */ export type ResolveRefValueArrayTraits = Ref['array'] extends false ? Value : Ref['arrayRequired'] extends true ? Array : Array | null; export type ResolveRefsOfCustomType = { [Prop in keyof T]: T[Prop] extends RefType | null ? ResolveRef : T[Prop]; } extends infer Resolved ? ResolveFieldRequirements : never; export type ResolveFieldRequirements = Intersection, ExtractNonNullableFieldsToRequiredFields>; type ResolveModelsRelationshipAndRefFields = { [ModelProp in keyof Schema]: { [FieldProp in keyof Schema[ModelProp]]: Schema[ModelProp][FieldProp] extends RefType | null ? ResolveRef : Schema[ModelProp][FieldProp] extends ModelRelationshipFieldParamShape ? Schema[ModelProp][FieldProp]['relatedModel'] extends keyof Schema ? GetRelationshipRef : never : Schema[ModelProp][FieldProp]; }; }; type FilterFieldTypes = { [ModelProp in keyof Schema]: { [FieldProp in keyof Schema[ModelProp] as Schema[ModelProp][FieldProp] extends undefined ? never : FieldProp]: Schema[ModelProp][FieldProp]; }; }; type ExtractNullableFieldsToOptionalFields = Partial<{ [FieldProp in keyof Fields as null extends Fields[FieldProp] ? FieldProp : never]: null extends Fields[FieldProp] ? Fields[FieldProp] : never; }>; type MarkModelsNullableFieldsOptional = { [ModelProp in keyof Schema]: ExtractNullableFieldsToOptionalFields; }; type ExtractNonNullableFieldsToRequiredFields = { [FieldProp in keyof Fields as null extends Fields[FieldProp] ? never : FieldProp]: null extends Fields[FieldProp] ? never : Fields[FieldProp]; }; type MarkModelsNonNullableFieldsRequired = { [ModelProp in keyof Schema]: ExtractNonNullableFieldsToRequiredFields; }; type Intersection, B = Record, C = Record, D = Record> = A & B & C & D extends infer U ? { [P in keyof U]: U[P]; } : never; export type ModelImpliedAuthFields> = { [ModelKey in keyof Schema['data']['types'] as Schema['data']['types'][ModelKey] extends EnumType ? never : Schema['data']['types'][ModelKey] extends CustomType ? never : Schema['data']['types'][ModelKey] extends CustomOperation ? never : ModelKey]: Schema['data']['types'][ModelKey] extends ModelType ? AllAuthFieldsForModel : object; }; type AllAuthFieldsForModel, Model extends Schema['data']['types'][keyof Schema['data']['types']]> = (Model['authorization'][number] extends never ? Schema['data']['authorization'][number] extends never ? object : ImpliedAuthFields : ImpliedAuthFields) & ImpliedAuthFieldsFromFields; type ImpliedAuthFieldsFromFields = UnionToIntersection | ModelRelationshipField | RefType ? Auth extends Authorization ? ImpliedAuthFields : object : object : object>; export {};