/**
 * Type-mapping functions: convert a Property into the type string for each context
 * (Sequelize, GraphQL, JavaScript, DTO, Swagger, etc.).
 */
import type { ImportStatement, ModuleDefinitionSchema, Property } from './model.js';
/** Get the effective property name (handles many-to-many → singularNameIds). */
export declare function getPropertyName(property: Property): string;
/**
 * Get the singular name for a relationship property — used to derive stable
 * per-relation identifiers in generated code (e.g. `<rel>Options`,
 * `<rel>Columns` inputs in form components, `<rel>Options$` observables in
 * resolvers).
 *
 * Convention (mirrors what YAML schemas declare):
 * - Many-to-many: `relationship.singularName` is required (e.g. `role` for a
 *   `roleIds` array property).
 * - Many-to-one / one-to-one / one-to-many: `relationship.field` carries the
 *   singular target name (e.g. `boundedContext` for a `boundedContextId` FK);
 *   `singularName` is typically NOT declared on these.
 *
 * Falls back through both. Returns `''` if the property has no relationship —
 * callers should only invoke this for relationship properties.
 */
export declare function getRelationshipSingularName(property: Property): string;
/** Get enum options, uppercased and trimmed. */
export declare function getPropertyEnumOptions(property: Property): string[] | undefined;
/** Get enum options as a single quoted string: 'A','B','C' */
export declare function getPropertyStringEnumOptions(property: Property): string;
/** Generate union literal type for enum: 'ACTIVE' | 'INACTIVE' */
export declare function getEnumUnionLiteralType(property: Property): string;
/** Get the reference key for a relationship (defaults to 'id'). */
export declare function getReferenceKey(property: Property): string;
/** Get the default value for a property, formatted for code output. */
export declare function getDefaultValue(property: Property): unknown;
export declare function getSequelizeType(property: Property): string;
export declare function getJavascriptType(property: Property): string;
export declare function getJavascriptModelType(property: Property): string;
declare function getJavascriptCrudType(property: Property): string;
export declare const getJavascriptCreateType: typeof getJavascriptCrudType;
export declare const getJavascriptUpdateType: typeof getJavascriptCrudType;
export declare const getJavascriptDeleteType: typeof getJavascriptCrudType;
export declare const getJavascriptResponseType: typeof getJavascriptCrudType;
export declare function getGraphqlType(property: Property): string | undefined;
export declare function getGraphqlCreateType(property: Property, resolveModuleName?: (modulePath: string) => null | string, resolveBcName?: (modulePath: string) => null | string): string;
export declare function getGraphqlUpdateType(property: Property, resolveModuleName?: (modulePath: string) => null | string, resolveBcName?: (modulePath: string) => null | string): string;
export declare function getDtoType(property: Property): string;
export declare function getSwaggerType(property: Property): string;
export declare function getColumnDataType(property: Property): string;
/** Get module name (singular) from a relationship modulePath like 'iam/account'. */
export declare function getModuleNameFromPropertyRelationship(modulePath: string): null | string;
/** Get module names (plural) from a relationship modulePath like 'iam/account'. */
export declare function getModuleNamesFromPropertyRelationship(modulePath: string): null | string;
/** Get aggregate name from a relationship modulePath. */
export declare function getAggregateNameFromPropertyRelationship(modulePath: string): null | string;
/** Get bounded context name from a relationship modulePath. */
export declare function getBoundedContextNameFromPropertyRelationship(modulePath: string): null | string;
/**
 * Get the gendered i18n key suffix (`'F'` | `'M'`) for the module referenced
 * by a relationship modulePath. Used by partials that render buttons/toasts
 * about the RELATED module (e.g. "New Tag" inside the User detail page) —
 * the gender must match that module's `front.gender`, not the host module's.
 *
 * Defaults to `'M'` (masculine) when the related schema cannot be loaded or
 * declares no explicit gender.
 */
export declare function getGenderKeyFromPropertyRelationship(modulePath: string): 'F' | 'M';
/** Get aggregate properties from a relationship modulePath. */
export declare function getPropertiesFromPropertyRelationship(modulePath: string): null | Property[];
/** Get full schema from a relationship modulePath. */
export declare function getSchemaFromPropertyRelationship(modulePath: string): ModuleDefinitionSchema | null;
/** CSS column class for a form group field based on property type/length. */
export declare function calculateFormGroupCol(property: Property): string;
/** Whether a property should be rendered (filters out internal i18n fields, etc.). */
export declare function isAllowProperty(moduleName: string, property: Property, options?: {
    allowAutoIncrement?: boolean;
    allowManyToManyRelationShip?: boolean;
    allowOneToManyRelationShip?: boolean;
    allowReadonly?: boolean;
}): boolean;
/** Returns 'I18n' (or 'i18n-' when `kebab`) if the property is i18n, otherwise empty string. */
export declare function addI18nPropertySignature(property: Property, kebab?: boolean): string;
/** Wrapper for getSequelizeType that accepts an optional config argument (ignored). */
export declare function getPropertySequelizeType(property: Property, _config?: unknown): string;
export type FieldSchemaEntry = {
    cardinality: 'many' | 'one';
    kind: 'relation';
    name: string;
    targetAggregate: string;
    targetModulePath: string;
} | {
    decimals?: [number, number];
    enumOptions?: string[];
    kind: 'scalar';
    maxLength?: number;
    name: string;
    nullable?: boolean;
    rules?: {
        minLength: number;
    };
    type: string;
};
export declare function buildFieldSchemaEntries(properties: Property[]): FieldSchemaEntry[];
export declare function buildFieldSchemaImports(entries: FieldSchemaEntry[]): ImportStatement[];
export declare const getDefaultValueProperty: typeof getDefaultValue;
export declare const getDtoTypeProperty: typeof getDtoType;
export declare const getGraphqlTypeProperty: typeof getGraphqlType;
export declare const getJavascriptModelTypeProperty: typeof getJavascriptModelType;
export declare const getPropertyColumnDataType: typeof getColumnDataType;
export declare const getPropertyJavascriptCreateType: typeof getJavascriptCrudType;
export declare const getPropertyJavascriptDeleteType: typeof getJavascriptCrudType;
export declare const getPropertyJavascriptResponseType: typeof getJavascriptCrudType;
export declare const getPropertyJavascriptType: typeof getJavascriptType;
export declare const getPropertyJavascriptUpdateType: typeof getJavascriptCrudType;
export declare const getReferenceKeyProperty: typeof getReferenceKey;
export declare const getSwaggerTypeProperty: typeof getSwaggerType;
export {};
