/** * One-way DataLex → DQL v3 migration planner. * * The planner is intentionally conservative. It imports only DataLex business * semantics that can be bound to dbt, writes every migrated governance object * as a draft, and reports every dropped/missing item. dbt-owned descriptions, * fields and types become *suggested* YAML patches rather than a second DQL * catalog. */ export interface DataLexMigrationInput { projectRoot: string; datalexManifestPath: string; dbtManifestPath: string; } export interface DataLexMigrationFile { path: string; content: string; kind: 'domain_declaration' | 'domain_overlay' | 'dbt_yaml_patch' | 'report'; } export interface DataLexMigrationLoss { path: string; reason: string; } export interface DataLexMigrationAmbiguity { path: string; reference: string; candidates: string[]; reason: string; } export interface DataLexMigrationReport { matchedEntities: Array<{ datalex: string; dbtUniqueId: string; dqlEntity: string; }>; droppedDbtMirrors: Array<{ path: string; fields: string[]; }>; draftedObjects: Array<{ kind: 'relationship' | 'contract' | 'conformance'; id: string; }>; losses: DataLexMigrationLoss[]; ambiguities: DataLexMigrationAmbiguity[]; suggestedDbtPatches: string[]; autoCertified: 0; } export interface DataLexMigrationPlan { version: 1; sourceFingerprint: string; datalexManifestPath: string; dbtManifestPath: string; files: DataLexMigrationFile[]; report: DataLexMigrationReport; } /** Create a deterministic, reviewable migration plan without writing files. */ export declare function planDataLexMigration(input: DataLexMigrationInput): DataLexMigrationPlan; /** * Write a reviewed plan idempotently. Existing identical files are left alone; * no dbt project file is ever mutated because suggestions live under * `migrations/datalex/` for explicit review and application. */ export declare function applyDataLexMigration(projectRoot: string, plan: DataLexMigrationPlan): { written: string[]; unchanged: string[]; }; //# sourceMappingURL=datalex-migration.d.ts.map