import type { Property } from '../../domain/model.js';
export interface CodeWriterOptions {
    aggregateName: string;
    apiDirectory: string;
    appDirectory: string;
    boundedContextName: string;
    hasI18n: boolean;
    moduleName: string;
    moduleNames: string;
    srcDirectory: string;
}
export declare class CodeWriter {
    readonly aggregateName: string;
    readonly apiDirectory: string;
    readonly appDirectory: string;
    readonly boundedContextName: string;
    readonly hasI18n: boolean;
    readonly moduleName: string;
    readonly moduleNames: string;
    readonly srcDirectory: string;
    private project;
    private savedFiles;
    constructor(opts: CodeWriterOptions);
    addSeedPermissions(): void;
    declareBackApplicationItemsInModule(): void;
    declareBackBoundedContextModuleInApplicationModule(): void;
    declareFrontBoundedContext(): void;
    declareFrontComponents(): void;
    formatSavedFiles(): Promise<void>;
    generateBackAppBoundedContextReferences(properties: Property[], excluded?: string[]): void;
    generateBackTestingForeignReferences(properties: Property[]): void;
    /**
     * Emit `{bc}-icons.providers.ts` next to `{bc}.navigation.ts`. The aggregator exports a
     * single object literal `{bcCamel}Icons` whose keys are every `lucide*` icon referenced
     * by `NavItem.icon` / `NavSubItem.icon` in the navigation file (root + nested `items[]`),
     * deduplicated and sorted alphabetically. The file is `@aurora-catalyst-generated` and is
     * fully overwritten on each regen — no preservation regions, no incremental prune.
     * No-op when `{bc}.navigation.ts` is missing or has no `{bcCamel}Navigation` declaration.
     */
    generateFrontIconsProviders(srcDirectory: string, boundedContextName: string): void;
    /**
     * Append a NavItem for the current module inside `{bc}.navigation.ts` of the admin dashboard.
     * Idempotent — silently skips if the entry url already exists. No-op when the BC does not
     * use the dashboard (file/variable/items array missing). When `outlineIcon` is provided
     * it becomes the NavItem `icon`.
     */
    generateFrontNavigation(srcDirectory: string, boundedContextName: string, moduleName: string, moduleNames: string, outlineIcon?: string): void;
    /**
     * Ensure `{DASHBOARD_TRANSLATIONS}/navigation/{langCode}.json` contains a key for this module.
     * Key is `toPascalCase(moduleNames)` — must match the `translation: 'navigation.{key}'`
     * used by `generateFrontNavigation`. Missing keys get the PascalCase default placeholder.
     * Writes JSON directly (not TS AST), so it does not flow through Prettier.
     */
    generateFrontNavigationTranslation(langCode: string): void;
    generateFrontRoutes(): void;
    /**
     * Ensure the bounded-context i18n JSON for `langCode` has keys for every non-timestamp,
     * non-id property of the aggregate, plus the fixed module-level keys
     * (`Title`, `{Module}`, `{Module}Details`, `{Module}DetailsDescription`).
     * Target: `{DASHBOARD_TRANSLATIONS}/{bcKebab}/{langCode}.json`. Outer key is the module
     * in kebab-case; inner object is `Record<string, string>` (PascalCase keys).
     * Missing entries get a PascalCase default placeholder; the English helper-text template
     * is written for every language and translated manually afterwards.
     * Writes JSON directly (not TS AST), so it does not flow through Prettier.
     */
    generateFrontTranslations(properties: Property[], langCode: string): void;
    /**
     * Idempotent bootstrap: ensure `nav-main.ts` imports `{bcCamel}Icons` from the aggregator
     * and spreads `...{bcCamel}Icons` into the `provideIcons({...})` argument object. Mutates
     * ONLY the import list and the `provideIcons` argument — never reorders, renames, or removes
     * existing entries. Skips with a warning when `provideIcons` is invoked with anything other
     * than an inline `ObjectLiteralExpression` (developer-customized shape).
     */
    registerBcAggregatorInNavMain(srcDirectory: string, boundedContextName: string): void;
    registerFrontNavigation(): void;
    private getModelArrayArgument;
    private getModuleDecoratorArguments;
    private saveAndTrack;
}
