/** * GitWand — Résolveur d'imports TS/JS/TSX/JSX * * Résout les conflits dans les blocs d'imports ES/CommonJS/dynamic. * C'est l'un des types de conflits les plus courants en pratique : deux branches * ajoutent des imports différents en tête de fichier. * * Stratégie : * 1. Vérifier que le bloc de conflit est entièrement composé d'imports * (+ lignes vides et commentaires — tolérés) * 2. Parser les imports des trois versions en statements normalisés * 3. Calculer l'union : imports de base + delta ours + delta theirs * 4. Si les deltas sont non-conflictuels → produire le bloc fusionné, trié * 5. Si conflit (même module importé différemment des deux côtés) → null (fallback) * * Formats supportés : * - `import X from 'y'` * - `import { X, Y } from 'y'` * - `import * as X from 'y'` * - `import 'y'` (side-effect import) * - `import type { X } from 'y'` (TypeScript) * - `const X = require('y')` (CommonJS — détecté mais pas déstructuré) * - `export { X } from 'y'` (re-exports) */ /** Un import ES parsé */ export interface ImportStatement { /** Ligne source normalisée (sans whitespace de fin) */ raw: string; /** Module source (ex: 'react', '../utils') */ source: string; /** Type d'import : 'named', 'default', 'namespace', 'side-effect', 'require', 'export' */ kind: "named" | "default" | "namespace" | "side-effect" | "require" | "export" | "unknown"; /** Noms importés pour les named imports (ex: ['useState', 'useEffect']) */ names: string[]; /** `true` si c'est un `import type` TypeScript */ isType: boolean; } /** * Vérifie que toutes les lignes d'un bloc sont des imports/commentaires. */ export declare function isImportBlock(lines: string[]): boolean; /** * Extract the deduped list of module specifiers imported by `content` (C0, * v3.6.0 — the PR-review dependency hop's extraction step; the resolved * import *graph* is explicitly out of scope until v4.0). Pure string work, * reuses the same regexes/`parseImport` as the conflict resolver above. * Scans every line of arbitrary file content (not just a contiguous import * block) — non-import lines are skipped, never throw. */ export declare function extractImportSources(content: string): string[]; /** Résultat du merge d'imports */ export interface ImportMergeResult { /** Lignes fusionnées (null = conflit non résolvable) */ mergedLines: string[] | null; /** Description de la fusion */ reason: string; /** Nombre d'imports fusionnés */ resolvedImports: number; /** Nombre de conflits non résolus */ unresolvedImports: number; } /** * Fusionne deux blocs d'imports. * * @param baseLines - Lignes de la version base (peut être vide pour diff2) * @param oursLines - Lignes de la version ours * @param theirsLines - Lignes de la version theirs */ export declare function tryResolveImportConflict(baseLines: string[], oursLines: string[], theirsLines: string[]): ImportMergeResult; /** Stratégies de tri d'imports configurables */ export type ImportSortStrategy = "default" | "eslint-import" | "type-last"; //# sourceMappingURL=imports.d.ts.map