import { type PropertyWebBindings } from '../modeling/Bindings.js';
import { DataAssociation } from '../modeling/DataAssociation.js';
import { DataEntity } from '../modeling/DataEntity.js';
import { DataProperty, type DataPropertySchema } from '../modeling/DataProperty.js';
import { IApiAnyShape, IApiArrayShape, IApiDataExample, IApiFileShape, IApiNodeShape, IApiPropertyShape, IApiRecursiveShape, IApiScalarShape, IApiShape, IShapeUnion } from './definitions/Shapes.js';
import { DataValueGenerator } from './DataValueGenerator.js';
/**
 * Serializes Data shapes (DataEntity, DataProperty, DataAssociation) to AMF-related shapes.
 *
 * This is used when defining entities (according to the `DataEntity` schema)
 *  and then we want to translate this into AMF shapes.
 */
export declare class AmfShapeGenerator {
    #private;
    /**
     * Used with data domain value generation for entity properties.
     * Lazily loaded class only when functions are used.
     * This needs to be a class instances because some functions are incremental
     */
    get valueGenerator(): DataValueGenerator;
    /**
     * Serializes the Entity to the AMF node shape.
     *
     * @param input The Property to serialize.
     * @param generatedEntities The list keys of already generated entities. This prohibits recursive shape generation.
     */
    entity(input: DataEntity, generatedEntities?: string[]): IApiNodeShape | IApiRecursiveShape;
    /**
     * Serializes an Entity Property to the AMF property shape.
     *
     * @param input The Property to serialize.
     */
    property(input: DataProperty): IApiPropertyShape;
    /**
     * Serializes an Entity property to the AMF property shape with association
     * targets as defined in the schema configuration.
     *
     * @param input The Property to serialize.
     */
    associationProperty(input: DataAssociation, generatedEntities?: string[]): IApiPropertyShape;
    /**
     * Generates a shape for an association. Most likely you want to use the `associationProperty()` method instead.
     *
     * @param input The data association instance.
     * @returns The range value for the PropertyShape.
     */
    associationShape(input: DataAssociation, generatedEntities?: string[]): IShapeUnion | undefined;
    /**
     * Generates a shape list for an union. Most likely you want to use the `associationProperty()` method instead.
     *
     * @param input The data association instance.
     * @returns The range value for the PropertyShape.
     */
    associationUnion(input: DataAssociation, generatedEntities?: string[]): IShapeUnion | IShapeUnion[] | undefined;
    /**
     * The DataProperty may have both the `schema` and the `bindings`. For AMF shape we read `schema` for
     * default value, examples, and enum values. We also look for the `web`
     * bindings for more detailed definition of a shape.
     *
     * @param input
     * @returns
     */
    protected _readPropertyRange(input: DataProperty): IApiArrayShape | IApiFileShape | IApiScalarShape;
    protected _createAmfSchema(input: DataProperty, schema?: DataPropertySchema, bindings?: PropertyWebBindings): IApiArrayShape | IApiFileShape | IApiScalarShape;
    /**
     * Normally this would be part of generating a scalar schema but the the property is an array this
     * is generated on the array and not on the range.
     *
     * @param result The scalar or array shape.
     * @param schema The property schema
     * @param type The data type of the parent property as set on the `range`
     * @param isArray Whether the DataProperty is multiple
     */
    protected _setShapeSchema(input: DataProperty, result: IApiAnyShape, schema: DataPropertySchema, type: string, isArray?: boolean): void;
    protected _generateArrayShape(input: DataProperty, schema?: DataPropertySchema, bindings?: PropertyWebBindings): IApiArrayShape;
    protected _generateScalarShape(input: DataProperty, schema?: DataPropertySchema, bindings?: PropertyWebBindings): IApiScalarShape;
    protected _generateExamples(examples: string[], type: string): IApiDataExample[];
    protected _generateArrayExamples(examples: string[], type: string): IApiDataExample[];
    protected _generateFileShape(input: DataProperty, schema?: DataPropertySchema, bindings?: PropertyWebBindings): IApiFileShape;
    protected _fillScalarShapeCommonProperties(result: IApiFileShape | IApiScalarShape, input: DataProperty, bindings?: PropertyWebBindings): void;
    protected _updateBaseProperties(input: DataProperty | DataAssociation | DataEntity, target: IApiShape): void;
    protected _recursiveShape(input: DataEntity): IApiRecursiveShape;
    /**
     * Translates generated schema from an array shape to the shape defined in the `items` of the array.
     *
     * @param array The source array.
     * @returns The definition of the `items` of the array.
     */
    refactorArrayToShape(array: IApiArrayShape): IShapeUnion;
    /**
     * Translates the shape to an array shape. This happens when data model property
     * is changed from 'multiple' to not-multiple and back.
     *
     * @param id The key of the parameter or an association
     * @param shape The shape to wrap as an array.
     * @returns Array shape.
     */
    refactorShapeToArray(id: string, shape: IShapeUnion): IApiArrayShape;
}
//# sourceMappingURL=AmfShapeGenerator.d.ts.map