import type { JSONSchema7 } from 'json-schema';
import { DataDomain } from '../DataDomain.js';
import { DomainModel } from '../DomainModel.js';
/**
 * Represents a single message (info, warning, or error) generated during the import process.
 */
export interface ImportMessage {
    level: 'warning' | 'info';
    message: string;
    location?: string;
}
/**
 * A report containing the result of the import process, including the created model
 * and any non-blocking messages.
 */
export interface JsonImportReport {
    /**
     * An array of messages generated during the import process.
     * These can include warnings, info messages, or other non-blocking notifications.
     */
    messages: ImportMessage[];
    /**
     * The model that was created during the import.
     */
    model: DomainModel;
}
/**
 * A structure to hold in-memory JSON schema files for browser-based import.
 */
export interface InMemorySchema {
    /** A virtual path or identifier for the schema, used in `$ref` values. */
    path: string;
    /** The parsed content of the JSON schema file. */
    contents: JSONSchema7;
}
/**
 * Imports JSON Schema definitions into a DataDomain.
 *
 * This class parses a root JSON Schema file, bundles all its dependencies,
 * and translates the object definitions into DomainEntity instances within a specified DomainModel.
 */
export declare class JsonSchemaImporter {
    private domain;
    private model;
    private refMap;
    private messages;
    private enums;
    constructor(domain: DataDomain);
    /**
     * Resets the internal state for a new import operation.
     */
    private resetState;
    /**
     * Centralized reporting for warnings and info messages.
     */
    private report;
    /**
     * Main import method: orchestrates schema bundling, entity creation, and population.
     */
    import(schemas: InMemorySchema[], modelName: string): Promise<JsonImportReport>;
    private isEnum;
    /**
     * Resolves a schema reference from the flat definition/id maps.
     * Supports #/definitions/..., $id, or direct path keys.
     */
    private resolveSchemaRef;
    /**
     * Helper for entity creation, can be extended for custom logic.
     */
    private createEntity;
    /**
     * Generates a meaningful name for inline entities based on their parent context.
     */
    private generateInlineEntityName;
    /**
     * Populates a DomainEntity with its properties, associations, and parent relationships.
     */
    private populateEntity;
    /**
     * Processes the `allOf` keyword, which can contain references (for inheritance)
     * or inline schemas (for composition/mixins).
     */
    private processAllOf;
    /**
     * Recursively analyzes a schema definition to find all contained primitive types and `$ref`s.
     * It's used to understand the nature of a property (is it a primitive, an association, or a mix).
     */
    private collectTypesAndRefs;
    /**
     * Determines whether to create a DomainProperty or a DomainAssociation for a given schema property.
     */
    private createPropertyOrAssociation;
    /**
     * Creates and configures a DomainProperty based on a JSON schema property definition.
     */
    private createDomainProperty;
    /**
     * Maps a JSON Schema type to a DomainPropertyType.
     */
    private mapJsonTypeToDomainType;
    private createEnumProperty;
}
//# sourceMappingURL=JsonSchemaImporter.d.ts.map