import { TransformerModelBase } from '@aws-amplify/graphql-transformer-core';
import { AppSyncDataSourceType, DataSourceInstance, MutationFieldType, QueryFieldType, SubscriptionFieldType, TransformerBeforeStepContextProvider, TransformerContextProvider, TransformerModelProvider, TransformerPrepareStepContextProvider, TransformerResolverProvider, TransformerSchemaVisitStepContextProvider, TransformerTransformSchemaStepContextProvider, TransformerValidationStepContextProvider } from '@aws-amplify/graphql-transformer-interfaces';
import * as iam from 'aws-cdk-lib/aws-iam';
import * as cdk from 'aws-cdk-lib';
import { DirectiveNode, InputValueDefinitionNode, ObjectTypeDefinitionNode } from 'graphql';
import { ModelTransformerOptions } from './types';
export type Nullable<T> = T | null;
export declare class ModelTransformer extends TransformerModelBase implements TransformerModelProvider {
    private options;
    private ddbTableMap;
    private typesWithModelDirective;
    private resourceGeneratorMap;
    private dataSourceStrategiesProvider;
    private modelDirectiveConfig;
    constructor(options?: ModelTransformerOptions);
    before: (ctx: TransformerBeforeStepContextProvider) => void;
    object: (definition: ObjectTypeDefinitionNode, directive: DirectiveNode, ctx: TransformerSchemaVisitStepContextProvider) => void;
    prepare: (context: TransformerPrepareStepContextProvider) => void;
    transformSchema: (ctx: TransformerTransformSchemaStepContextProvider) => void;
    generateResolvers: (context: TransformerContextProvider) => void;
    generateGetResolver: (ctx: TransformerContextProvider, type: ObjectTypeDefinitionNode, typeName: string, fieldName: string, resolverLogicalId: string) => TransformerResolverProvider;
    generateListResolver: (ctx: TransformerContextProvider, type: ObjectTypeDefinitionNode, typeName: string, fieldName: string, resolverLogicalId: string) => TransformerResolverProvider;
    generateCreateResolver: (ctx: TransformerContextProvider, type: ObjectTypeDefinitionNode, typeName: string, fieldName: string, resolverLogicalId: string) => TransformerResolverProvider;
    generateUpdateResolver: (ctx: TransformerContextProvider, type: ObjectTypeDefinitionNode, typeName: string, fieldName: string, resolverLogicalId: string) => TransformerResolverProvider;
    generateDeleteResolver: (ctx: TransformerContextProvider, type: ObjectTypeDefinitionNode, typeName: string, fieldName: string, resolverLogicalId: string) => TransformerResolverProvider;
    generateOnCreateResolver: (ctx: TransformerContextProvider, typeName: string, fieldName: string, resolverLogicalId: string) => TransformerResolverProvider;
    generateOnUpdateResolver: (ctx: TransformerContextProvider, typeName: string, fieldName: string, resolverLogicalId: string) => TransformerResolverProvider;
    generateOnDeleteResolver: (ctx: TransformerContextProvider, typeName: string, fieldName: string, resolverLogicalId: string) => TransformerResolverProvider;
    generateSyncResolver: (ctx: TransformerContextProvider, type: ObjectTypeDefinitionNode, typeName: string, fieldName: string, resolverLogicalId: string) => TransformerResolverProvider;
    getMutationName: (subscriptionType: SubscriptionFieldType, mutationMap: Set<{
        fieldName: string;
        typeName: string;
        type: MutationFieldType;
        resolverLogicalId: string;
    }>) => string;
    private createQueryFields;
    private createMutationFields;
    private createSubscriptionFields;
    getQueryFieldNames: (type: ObjectTypeDefinitionNode) => Set<{
        fieldName: string;
        typeName: string;
        type: QueryFieldType;
        resolverLogicalId: string;
    }>;
    getMutationFieldNames: (type: ObjectTypeDefinitionNode) => Set<{
        fieldName: string;
        typeName: string;
        type: MutationFieldType;
        resolverLogicalId: string;
    }>;
    getSubscriptionFieldNames: (type: ObjectTypeDefinitionNode) => Set<{
        fieldName: string;
        typeName: string;
        type: SubscriptionFieldType;
        resolverLogicalId: string;
    }>;
    getDataSourceResource: (type: ObjectTypeDefinitionNode) => DataSourceInstance;
    getDataSourceType: () => AppSyncDataSourceType;
    getInputs: (ctx: TransformerTransformSchemaStepContextProvider, type: ObjectTypeDefinitionNode, operation: {
        fieldName: string;
        typeName: string;
        type: QueryFieldType | MutationFieldType | SubscriptionFieldType;
    }) => InputValueDefinitionNode[];
    getOutputType: (ctx: TransformerTransformSchemaStepContextProvider, type: ObjectTypeDefinitionNode, operation: {
        fieldName: string;
        typeName: string;
        type: QueryFieldType | MutationFieldType | SubscriptionFieldType;
    }) => ObjectTypeDefinitionNode;
    createIAMRole: (context: TransformerContextProvider, def: ObjectTypeDefinitionNode, stack: cdk.Stack, tableName: string) => iam.IRole;
    private createNonModelInputs;
    private isModelField;
    private getNonModelInputObjectName;
    private addAutoGeneratableFields;
    private addModelSyncFields;
    private getSubscriptionToMutationsReverseMap;
    ensureModelSortDirectionEnum: (ctx: TransformerValidationStepContextProvider) => void;
    private getOptions;
    private getResourceGenerator;
}
//# sourceMappingURL=graphql-model-transformer.d.ts.map