import { ModelInstanceCreator } from './datastore/datastore'; export declare type Schema = UserSchema & { version: string; }; export declare type UserSchema = { models: SchemaModels; nonModels?: SchemaNonModels; relationships?: RelationshipType; enums: SchemaEnums; modelTopologicalOrdering?: Map; }; export declare type InternalSchema = { namespaces: SchemaNamespaces; version: string; }; export declare type SchemaNamespaces = Record; export declare type SchemaNamespace = UserSchema & { name: string; }; export declare type SchemaModels = Record; export declare type SchemaModel = { name: string; pluralName: string; attributes?: ModelAttributes; fields: ModelFields; syncable?: boolean; }; export declare function isSchemaModel(obj: any): obj is SchemaModel; export declare type SchemaNonModels = Record; export declare type SchemaNonModel = { name: string; fields: ModelFields; }; declare type SchemaEnums = Record; declare type SchemaEnum = { name: string; values: string[]; }; export declare type ModelAssociation = AssociatedWith | TargetNameAssociation; declare type AssociatedWith = { connectionType: 'HAS_MANY' | 'HAS_ONE'; associatedWith: string; }; export declare function isAssociatedWith(obj: any): obj is AssociatedWith; declare type TargetNameAssociation = { connectionType: 'BELONGS_TO'; targetName: string; }; export declare function isTargetNameAssociation(obj: any): obj is TargetNameAssociation; declare type ModelAttributes = ModelAttribute[]; declare type ModelAttribute = { type: string; properties?: Record; }; export declare type ModelFields = Record; export declare enum GraphQLScalarType { ID = 0, String = 1, Int = 2, Float = 3, Boolean = 4, AWSDate = 5, AWSTime = 6, AWSDateTime = 7, AWSTimestamp = 8, AWSEmail = 9, AWSJSON = 10, AWSURL = 11, AWSPhone = 12, AWSIPAddress = 13 } export declare namespace GraphQLScalarType { function getJSType(scalar: keyof Omit): 'string' | 'number' | 'boolean'; } export declare type AuthorizationRule = { identityClaim: string; ownerField: string; provider: 'userPools' | 'oidc' | 'iam' | 'apiKey'; groupClaim: string; groups: [string]; authStrategy: 'owner' | 'groups' | 'private' | 'public'; areSubscriptionsPublic: boolean; }; export declare function isGraphQLScalarType(obj: any): obj is keyof Omit; export declare type ModelFieldType = { model: string; }; export declare function isModelFieldType(obj: any): obj is ModelFieldType; export declare type NonModelFieldType = { nonModel: string; }; export declare function isNonModelFieldType(obj: any): obj is NonModelFieldType; declare type EnumFieldType = { enum: string; }; export declare function isEnumFieldType(obj: any): obj is EnumFieldType; declare type ModelField = { name: string; type: keyof Omit | ModelFieldType | NonModelFieldType | EnumFieldType; isArray: boolean; isRequired?: boolean; association?: ModelAssociation; attributes?: ModelAttributes[]; }; export declare type NonModelTypeConstructor = { new (init: T): T; }; export declare type PersistentModelConstructor = { new (init: ModelInit): T; copyOf(src: T, mutator: (draft: MutableModel) => void): T; }; export declare type TypeConstructorMap = Record | NonModelTypeConstructor>; export declare type PersistentModel = Readonly<{ id: string; } & Record>; export declare type ModelInit = Omit; declare type DeepWritable = { -readonly [P in keyof T]: T[P] extends TypeName ? T[P] : DeepWritable; }; export declare type MutableModel = Omit, 'id'>; export declare type ModelInstanceMetadata = { id: string; _version: number; _lastChangedAt: number; _deleted: boolean; }; export declare enum OpType { INSERT = "INSERT", UPDATE = "UPDATE", DELETE = "DELETE" } export declare type SubscriptionMessage = { opType: OpType; element: T; model: PersistentModelConstructor; condition: PredicatesGroup | null; }; export declare type PredicateExpression = TypeName extends keyof MapTypeToOperands ? (operator: keyof MapTypeToOperands[TypeName], operand: MapTypeToOperands[TypeName][keyof MapTypeToOperands[TypeName]]) => ModelPredicate : never; declare type EqualityOperators = { ne: T; eq: T; }; declare type ScalarNumberOperators = EqualityOperators & { le: T; lt: T; ge: T; gt: T; }; declare type NumberOperators = ScalarNumberOperators & { between: [T, T]; }; declare type StringOperators = ScalarNumberOperators & { beginsWith: T; contains: T; notContains: T; }; declare type BooleanOperators = EqualityOperators; declare type ArrayOperators = { contains: T; notContains: T; }; export declare type AllOperators = NumberOperators & StringOperators & ArrayOperators; declare type MapTypeToOperands = { number: NumberOperators>; string: StringOperators>; boolean: BooleanOperators>; 'number[]': ArrayOperators; 'string[]': ArrayOperators; 'boolean[]': ArrayOperators; }; declare type TypeName = T extends string ? 'string' : T extends number ? 'number' : T extends boolean ? 'boolean' : T extends string[] ? 'string[]' : T extends number[] ? 'number[]' : T extends boolean[] ? 'boolean[]' : never; export declare type PredicateGroups = { and: (predicate: (predicate: ModelPredicate) => ModelPredicate) => ModelPredicate; or: (predicate: (predicate: ModelPredicate) => ModelPredicate) => ModelPredicate; not: (predicate: (predicate: ModelPredicate) => ModelPredicate) => ModelPredicate; }; export declare type ModelPredicate = { [K in keyof M]-?: PredicateExpression>; } & PredicateGroups; export declare type ProducerModelPredicate = (condition: ModelPredicate) => ModelPredicate; export declare type PredicatesGroup = { type: keyof PredicateGroups; predicates: (PredicateObject | PredicatesGroup)[]; }; export declare function isPredicateObj(obj: any): obj is PredicateObject; export declare function isPredicateGroup(obj: any): obj is PredicatesGroup; export declare type PredicateObject = { field: keyof T; operator: keyof AllOperators; operand: any; }; export declare enum QueryOne { FIRST = 0, LAST = 1 } export declare type GraphQLCondition = Partial<{ [field: string]: { [operator: string]: string | number | [number, number]; }; } | { and: [GraphQLCondition]; or: [GraphQLCondition]; not: GraphQLCondition; }>; export declare type PaginationInput = { limit?: number; page?: number; }; export declare type SystemComponent = { setUp(schema: InternalSchema, namespaceResolver: NamespaceResolver, modelInstanceCreator: ModelInstanceCreator, getModelConstructorByModelName: (namsespaceName: string, modelName: string) => PersistentModelConstructor): Promise; }; export declare type NamespaceResolver = (modelConstructor: PersistentModelConstructor) => string; export declare type ControlMessageType = { type: T; data?: any; }; export declare type RelationType = { fieldName: string; modelName: string; relationType: 'HAS_ONE' | 'HAS_MANY' | 'BELONGS_TO'; targetName?: string; associatedWith?: string; }; export declare type RelationshipType = { [modelName: string]: { indexes: string[]; relationTypes: RelationType[]; }; }; export declare type DataStoreConfig = { DataStore?: { conflictHandler?: ConflictHandler; errorHandler?: (error: SyncError) => void; maxRecordsToSync?: number; syncPageSize?: number; fullSyncInterval?: number; }; conflictHandler?: ConflictHandler; errorHandler?: (error: SyncError) => void; maxRecordsToSync?: number; syncPageSize?: number; fullSyncInterval?: number; }; export declare type SyncConflict = { modelConstructor: PersistentModelConstructor; localModel: PersistentModel; remoteModel: PersistentModel; operation: OpType; attempts: number; }; export declare type SyncError = { message: string; errorType: string; errorInfo: string; localModel: PersistentModel; remoteModel: PersistentModel; operation: string; }; export declare const DISCARD: unique symbol; export declare type ConflictHandler = (conflict: SyncConflict) => Promise | PersistentModel | typeof DISCARD; export declare type ErrorHandler = (error: SyncError) => void; export {};