@hugeicons/migrate-core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/constants.d.ts +40 -0
  2. package/dist/constants.d.ts.map +1 -0
  3. package/dist/constants.js +117 -0
  4. package/dist/constants.js.map +1 -0
  5. package/dist/data/hugeicons-map.json +41786 -0
  6. package/dist/data/mappings.d.ts +69 -0
  7. package/dist/data/mappings.d.ts.map +1 -0
  8. package/dist/data/mappings.js +402 -0
  9. package/dist/data/mappings.js.map +1 -0
  10. package/dist/engine/analyzer.d.ts +21 -0
  11. package/dist/engine/analyzer.d.ts.map +1 -0
  12. package/dist/engine/analyzer.js +374 -0
  13. package/dist/engine/analyzer.js.map +1 -0
  14. package/dist/engine/detector.d.ts +20 -0
  15. package/dist/engine/detector.d.ts.map +1 -0
  16. package/dist/engine/detector.js +124 -0
  17. package/dist/engine/detector.js.map +1 -0
  18. package/dist/engine/mapper.d.ts +31 -0
  19. package/dist/engine/mapper.d.ts.map +1 -0
  20. package/dist/engine/mapper.js +234 -0
  21. package/dist/engine/mapper.js.map +1 -0
  22. package/dist/engine/reporter.d.ts +11 -0
  23. package/dist/engine/reporter.d.ts.map +1 -0
  24. package/dist/engine/reporter.js +339 -0
  25. package/dist/engine/reporter.js.map +1 -0
  26. package/dist/engine/transformer.d.ts +26 -0
  27. package/dist/engine/transformer.d.ts.map +1 -0
  28. package/dist/engine/transformer.js +874 -0
  29. package/dist/engine/transformer.js.map +1 -0
  30. package/dist/index.d.ts +22 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +56 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/types/index.d.ts +292 -0
  35. package/dist/types/index.d.ts.map +1 -0
  36. package/dist/types/index.js +14 -0
  37. package/dist/types/index.js.map +1 -0
  38. package/package.json +63 -0
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Icon Mapping Engine
3
+ * Resolves source icons to HugeIcons equivalents
4
+ */
5
+ import stringSimilarity from 'string-similarity';
6
+ import { HUGEICONS_PACKAGE, DEFAULT_CONFIDENCE_THRESHOLD, } from '../constants.js';
7
+ import { getExactMapping, getAliasMapping, getAllHugeIconNames, } from '../data/mappings.js';
8
+ /**
9
+ * Generate migration plan from scan result
10
+ */
11
+ export function generatePlan(scanResult, config) {
12
+ const options = {
13
+ style: config.style,
14
+ overrides: config.mapping,
15
+ confidenceThreshold: DEFAULT_CONFIDENCE_THRESHOLD,
16
+ };
17
+ // Collect all unique icons from the scan
18
+ const uniqueIcons = collectUniqueIcons(scanResult);
19
+ // Resolve mappings for each icon
20
+ const mappings = [];
21
+ for (const { library, icon } of uniqueIcons) {
22
+ const result = resolveMapping(library, icon, options);
23
+ mappings.push(result);
24
+ }
25
+ // Calculate summary
26
+ const summary = {
27
+ exact: mappings.filter((m) => m.status === 'exact').length,
28
+ alias: mappings.filter((m) => m.status === 'alias').length,
29
+ fuzzy: mappings.filter((m) => m.status === 'fuzzy').length,
30
+ ambiguous: mappings.filter((m) => m.status === 'ambiguous').length,
31
+ unmapped: mappings.filter((m) => m.status === 'unmapped').length,
32
+ override: mappings.filter((m) => m.status === 'override').length,
33
+ };
34
+ // Collect files to modify
35
+ const filesToModify = new Set();
36
+ let jsxReplacements = 0;
37
+ let importEdits = 0;
38
+ for (const file of scanResult.files) {
39
+ if (file.usages.length > 0) {
40
+ filesToModify.add(file.filePath);
41
+ for (const usage of file.usages) {
42
+ jsxReplacements += usage.count;
43
+ }
44
+ importEdits += file.imports.length;
45
+ }
46
+ }
47
+ return {
48
+ style: options.style,
49
+ mappings,
50
+ summary,
51
+ filesToModify: Array.from(filesToModify),
52
+ changes: {
53
+ jsxReplacements,
54
+ importEdits,
55
+ },
56
+ };
57
+ }
58
+ /**
59
+ * Collect unique icons from scan result
60
+ * Includes ALL imported icons, not just those used in JSX
61
+ */
62
+ function collectUniqueIcons(scanResult) {
63
+ const seen = new Set();
64
+ const result = [];
65
+ for (const file of scanResult.files) {
66
+ // Include ALL imported icons (they might be used as props, object values, etc.)
67
+ for (const imp of file.imports) {
68
+ const key = `${imp.library}:${imp.importedName}`;
69
+ if (!seen.has(key)) {
70
+ seen.add(key);
71
+ result.push({
72
+ library: imp.library,
73
+ icon: imp.importedName,
74
+ });
75
+ }
76
+ }
77
+ // Also include usages (in case there are any that aren't in imports for some reason)
78
+ for (const usage of file.usages) {
79
+ const key = `${usage.library}:${usage.importedName}`;
80
+ if (!seen.has(key)) {
81
+ seen.add(key);
82
+ result.push({
83
+ library: usage.library,
84
+ icon: usage.importedName,
85
+ });
86
+ }
87
+ }
88
+ }
89
+ return result;
90
+ }
91
+ /**
92
+ * Resolve a single icon mapping
93
+ */
94
+ export function resolveMapping(library, iconName, options) {
95
+ const { style, overrides, confidenceThreshold } = options;
96
+ // 1. Check config override first
97
+ if (overrides[iconName]) {
98
+ return {
99
+ source: { library, icon: iconName },
100
+ target: createTarget(overrides[iconName], style),
101
+ status: 'override',
102
+ confidence: 1,
103
+ };
104
+ }
105
+ // 2. Check exact match dictionary
106
+ const exactMatch = getExactMapping(library, iconName);
107
+ if (exactMatch) {
108
+ return {
109
+ source: { library, icon: iconName },
110
+ target: createTarget(exactMatch, style),
111
+ status: 'exact',
112
+ confidence: 1,
113
+ };
114
+ }
115
+ // 3. Check alias list
116
+ const aliasMatch = getAliasMapping(library, iconName);
117
+ if (aliasMatch) {
118
+ return {
119
+ source: { library, icon: iconName },
120
+ target: createTarget(aliasMatch, style),
121
+ status: 'alias',
122
+ confidence: 0.95,
123
+ };
124
+ }
125
+ // 4. Try fuzzy matching
126
+ const fuzzyResult = findFuzzyMatch(iconName, confidenceThreshold);
127
+ if (fuzzyResult) {
128
+ if (fuzzyResult.candidates.length === 1) {
129
+ return {
130
+ source: { library, icon: iconName },
131
+ target: createTarget(fuzzyResult.candidates[0].component, style),
132
+ status: 'fuzzy',
133
+ confidence: fuzzyResult.candidates[0].confidence,
134
+ };
135
+ }
136
+ else if (fuzzyResult.candidates.length > 1) {
137
+ return {
138
+ source: { library, icon: iconName },
139
+ status: 'ambiguous',
140
+ candidates: fuzzyResult.candidates,
141
+ notes: ['Multiple similar icons found. Manual selection required.'],
142
+ };
143
+ }
144
+ }
145
+ // 5. Not found
146
+ return {
147
+ source: { library, icon: iconName },
148
+ status: 'unmapped',
149
+ notes: ['No matching HugeIcon found.'],
150
+ };
151
+ }
152
+ /**
153
+ * Create target object for a HugeIcons component
154
+ */
155
+ function createTarget(componentName, style) {
156
+ return {
157
+ package: HUGEICONS_PACKAGE,
158
+ component: componentName,
159
+ style: style === 'auto' ? undefined : style,
160
+ };
161
+ }
162
+ /**
163
+ * Find fuzzy matches for an icon name
164
+ */
165
+ function findFuzzyMatch(iconName, threshold) {
166
+ const hugeIconNames = getAllHugeIconNames();
167
+ // Normalize the icon name for comparison
168
+ const normalizedInput = normalizeIconName(iconName);
169
+ // Get all matches above threshold
170
+ const matches = stringSimilarity.findBestMatch(normalizedInput, hugeIconNames.map(normalizeIconName));
171
+ const candidates = [];
172
+ // Find all ratings above threshold
173
+ for (let i = 0; i < matches.ratings.length; i++) {
174
+ const rating = matches.ratings[i];
175
+ if (rating.rating >= threshold) {
176
+ candidates.push({
177
+ component: hugeIconNames[i],
178
+ confidence: rating.rating,
179
+ });
180
+ }
181
+ }
182
+ // Sort by confidence
183
+ candidates.sort((a, b) => b.confidence - a.confidence);
184
+ // If we have a clear winner (>0.05 difference from second), return just that
185
+ if (candidates.length >= 1) {
186
+ if (candidates.length === 1 || candidates[0].confidence - candidates[1].confidence > 0.05) {
187
+ return { candidates: [candidates[0]] };
188
+ }
189
+ // Return top candidates for ambiguous cases
190
+ return { candidates: candidates.slice(0, 3) };
191
+ }
192
+ return null;
193
+ }
194
+ /**
195
+ * Normalize icon name for comparison
196
+ */
197
+ function normalizeIconName(name) {
198
+ // Remove common prefixes/suffixes
199
+ let normalized = name
200
+ .replace(/^(fa|lu|hi|fi|bi|ai|bs|cg|di|fc|gi|go|gr|im|io|md|ri|si|tb|ti|vsc|wi)/, '')
201
+ .replace(/Icon$/, '')
202
+ .replace(/Outline$/, '')
203
+ .replace(/Solid$/, '')
204
+ .replace(/Fill$/, '')
205
+ .replace(/Line$/, '')
206
+ .replace(/Sharp$/, '')
207
+ .replace(/Round$/, '');
208
+ // Convert to lowercase for comparison
209
+ normalized = normalized.toLowerCase();
210
+ // Remove common connector characters
211
+ normalized = normalized.replace(/[-_]/g, '');
212
+ return normalized;
213
+ }
214
+ /**
215
+ * Get mapping result for a specific usage
216
+ */
217
+ export function getMappingForUsage(usage, plan) {
218
+ return plan.mappings.find((m) => m.source.library === usage.library && m.source.icon === usage.importedName);
219
+ }
220
+ /**
221
+ * Check if plan is ready to apply (no unmapped/ambiguous)
222
+ */
223
+ export function isPlanReady(plan, strict) {
224
+ const issues = [];
225
+ if (plan.summary.unmapped > 0) {
226
+ issues.push(`${plan.summary.unmapped} unmapped icon(s)`);
227
+ }
228
+ if (plan.summary.ambiguous > 0) {
229
+ issues.push(`${plan.summary.ambiguous} ambiguous mapping(s)`);
230
+ }
231
+ const ready = strict ? issues.length === 0 : true;
232
+ return { ready, issues };
233
+ }
234
+ //# sourceMappingURL=mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../src/engine/mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Report Generator
3
+ * Formats scan, plan, and apply results for output
4
+ */
5
+ import type { ScanResult, MigrationPlan, ApplyResult } from '../types/index.js';
6
+ type ReportFormat = 'text' | 'json' | 'md';
7
+ export declare function formatScanReport(result: ScanResult, projectRoot: string, format: ReportFormat): string;
8
+ export declare function formatPlanReport(plan: MigrationPlan, projectRoot: string, format: ReportFormat): string;
9
+ export declare function formatApplyReport(result: ApplyResult, projectRoot: string, format: ReportFormat): string;
10
+ export {};
11
+ //# sourceMappingURL=reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/engine/reporter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,WAAW,EAKZ,MAAM,mBAAmB,CAAC;AAG3B,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAM3C,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,GACnB,MAAM,CAUR;AAoID,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,GACnB,MAAM,CAUR;AA+GD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,GACnB,MAAM,CAUR"}
@@ -0,0 +1,339 @@
1
+ /**
2
+ * Report Generator
3
+ * Formats scan, plan, and apply results for output
4
+ */
5
+ import chalk from 'chalk';
6
+ import { VERSION, TOOL_NAME } from '../constants.js';
7
+ // ============================================================================
8
+ // Scan Reports
9
+ // ============================================================================
10
+ export function formatScanReport(result, projectRoot, format) {
11
+ switch (format) {
12
+ case 'json':
13
+ return formatScanReportJson(result, projectRoot);
14
+ case 'md':
15
+ return formatScanReportMarkdown(result, projectRoot);
16
+ case 'text':
17
+ default:
18
+ return formatScanReportText(result);
19
+ }
20
+ }
21
+ function formatScanReportText(result) {
22
+ const lines = [];
23
+ lines.push(chalk.bold.cyan(`${TOOL_NAME} v${VERSION}`));
24
+ lines.push('');
25
+ // Scanning summary
26
+ lines.push(chalk.green('✓') + ` Parsed ${result.stats.filesScanned} files`);
27
+ lines.push(chalk.green('✓') + ` Found ${result.detectedLibraries.length} icon libraries`);
28
+ lines.push('');
29
+ // Detected libraries
30
+ if (result.detectedLibraries.length > 0) {
31
+ lines.push(chalk.bold('Detected libraries'));
32
+ for (const lib of result.detectedLibraries) {
33
+ const confidenceColor = getConfidenceColor(lib.confidence);
34
+ const padding = '.'.repeat(Math.max(2, 40 - lib.name.length));
35
+ lines.push(`- ${lib.name} ${chalk.dim(padding)} ${confidenceColor(lib.confidence)} (imports in ${lib.fileCount} files)`);
36
+ }
37
+ lines.push('');
38
+ }
39
+ // Icon usage summary
40
+ lines.push(chalk.bold('Icon usage summary'));
41
+ lines.push(`- Total icon usages ${chalk.dim('...............')} ${result.stats.totalUsages}`);
42
+ lines.push(`- Unique icons ${chalk.dim('...................')} ${result.stats.uniqueIcons}`);
43
+ lines.push(`- Files with icons ${chalk.dim('...............')} ${result.stats.filesWithIcons}`);
44
+ lines.push('');
45
+ // Top icons
46
+ if (result.stats.topIcons.length > 0) {
47
+ lines.push(chalk.bold('Top icons'));
48
+ const topFormatted = result.stats.topIcons
49
+ .slice(0, 5)
50
+ .map((icon, i) => `${i + 1}) ${icon.name} (${icon.count})`)
51
+ .join(' ');
52
+ lines.push(topFormatted);
53
+ lines.push('');
54
+ }
55
+ // Warnings
56
+ if (result.warnings.length > 0) {
57
+ lines.push(chalk.bold('Warnings'));
58
+ for (const warning of result.warnings.slice(0, 10)) {
59
+ lines.push(chalk.yellow('⚠') + ` ${warning.message}`);
60
+ if (warning.filePath) {
61
+ lines.push(chalk.dim(` at ${warning.filePath}${warning.line ? `:${warning.line}` : ''}`));
62
+ }
63
+ }
64
+ if (result.warnings.length > 10) {
65
+ lines.push(chalk.dim(` ... and ${result.warnings.length - 10} more warnings`));
66
+ }
67
+ }
68
+ return lines.join('\n');
69
+ }
70
+ function formatScanReportJson(result, projectRoot) {
71
+ const report = {
72
+ tool: TOOL_NAME,
73
+ version: VERSION,
74
+ timestamp: new Date().toISOString(),
75
+ projectRoot,
76
+ result,
77
+ };
78
+ return JSON.stringify(report, null, 2);
79
+ }
80
+ function formatScanReportMarkdown(result, projectRoot) {
81
+ const lines = [];
82
+ lines.push(`# ${TOOL_NAME} - Scan Report`);
83
+ lines.push('');
84
+ lines.push(`**Version:** ${VERSION}`);
85
+ lines.push(`**Project:** ${projectRoot}`);
86
+ lines.push(`**Date:** ${new Date().toISOString()}`);
87
+ lines.push('');
88
+ lines.push('## Summary');
89
+ lines.push('');
90
+ lines.push(`- **Files scanned:** ${result.stats.filesScanned}`);
91
+ lines.push(`- **Files with icons:** ${result.stats.filesWithIcons}`);
92
+ lines.push(`- **Total usages:** ${result.stats.totalUsages}`);
93
+ lines.push(`- **Unique icons:** ${result.stats.uniqueIcons}`);
94
+ lines.push('');
95
+ if (result.detectedLibraries.length > 0) {
96
+ lines.push('## Detected Libraries');
97
+ lines.push('');
98
+ lines.push('| Library | Confidence | Files |');
99
+ lines.push('|---------|------------|-------|');
100
+ for (const lib of result.detectedLibraries) {
101
+ lines.push(`| ${lib.name} | ${lib.confidence} | ${lib.fileCount} |`);
102
+ }
103
+ lines.push('');
104
+ }
105
+ if (result.stats.topIcons.length > 0) {
106
+ lines.push('## Top Icons');
107
+ lines.push('');
108
+ lines.push('| Icon | Count |');
109
+ lines.push('|------|-------|');
110
+ for (const icon of result.stats.topIcons) {
111
+ lines.push(`| ${icon.name} | ${icon.count} |`);
112
+ }
113
+ lines.push('');
114
+ }
115
+ if (result.warnings.length > 0) {
116
+ lines.push('## Warnings');
117
+ lines.push('');
118
+ for (const warning of result.warnings) {
119
+ lines.push(`- ⚠️ ${warning.message}`);
120
+ if (warning.filePath) {
121
+ lines.push(` - File: \`${warning.filePath}${warning.line ? `:${warning.line}` : ''}\``);
122
+ }
123
+ }
124
+ }
125
+ return lines.join('\n');
126
+ }
127
+ // ============================================================================
128
+ // Plan Reports
129
+ // ============================================================================
130
+ export function formatPlanReport(plan, projectRoot, format) {
131
+ switch (format) {
132
+ case 'json':
133
+ return formatPlanReportJson(plan, projectRoot);
134
+ case 'md':
135
+ return formatPlanReportMarkdown(plan, projectRoot);
136
+ case 'text':
137
+ default:
138
+ return formatPlanReportText(plan);
139
+ }
140
+ }
141
+ function formatPlanReportText(plan) {
142
+ const lines = [];
143
+ lines.push(chalk.bold.cyan(`Migration Plan (style: ${plan.style})`));
144
+ lines.push('');
145
+ // Mapping results
146
+ lines.push(chalk.bold('Mapping results'));
147
+ lines.push(chalk.green('✅') + ` Exact matches ${chalk.dim('.................')} ${plan.summary.exact}`);
148
+ if (plan.summary.override > 0) {
149
+ lines.push(chalk.blue('🔧') + ` Config overrides ${chalk.dim('..............')} ${plan.summary.override}`);
150
+ }
151
+ if (plan.summary.alias > 0) {
152
+ lines.push(chalk.yellow('🟡') + ` Alias/fuzzy matches ${chalk.dim('...........')} ${plan.summary.alias + plan.summary.fuzzy}`);
153
+ }
154
+ if (plan.summary.unmapped > 0) {
155
+ lines.push(chalk.red('❌') + ` Unmapped ${chalk.dim('......................')} ${plan.summary.unmapped}`);
156
+ }
157
+ if (plan.summary.ambiguous > 0) {
158
+ lines.push(chalk.magenta('❓') + ` Ambiguous ${chalk.dim('....................')} ${plan.summary.ambiguous}`);
159
+ }
160
+ lines.push('');
161
+ // Unmapped icons
162
+ const unmapped = plan.mappings.filter((m) => m.status === 'unmapped');
163
+ if (unmapped.length > 0) {
164
+ lines.push(chalk.bold('Unmapped'));
165
+ for (const m of unmapped.slice(0, 10)) {
166
+ lines.push(`- ${m.source.icon} (from ${m.source.library})`);
167
+ }
168
+ if (unmapped.length > 10) {
169
+ lines.push(chalk.dim(` ... and ${unmapped.length - 10} more`));
170
+ }
171
+ lines.push('');
172
+ }
173
+ // Ambiguous icons
174
+ const ambiguous = plan.mappings.filter((m) => m.status === 'ambiguous');
175
+ if (ambiguous.length > 0) {
176
+ lines.push(chalk.bold('Ambiguous (need manual selection)'));
177
+ for (const m of ambiguous.slice(0, 5)) {
178
+ lines.push(`- ${m.source.icon}`);
179
+ if (m.candidates) {
180
+ const candidateList = m.candidates
181
+ .slice(0, 3)
182
+ .map((c) => `${c.component} (${(c.confidence * 100).toFixed(0)}%)`)
183
+ .join(', ');
184
+ lines.push(chalk.dim(` candidates: ${candidateList}`));
185
+ }
186
+ }
187
+ lines.push('');
188
+ }
189
+ // Planned changes
190
+ lines.push(chalk.bold('Planned changes'));
191
+ lines.push(`- Files to modify ${chalk.dim('................')} ${plan.filesToModify.length}`);
192
+ lines.push(`- JSX replacements ${chalk.dim('...............')} ${plan.changes.jsxReplacements}`);
193
+ lines.push(`- Import edits ${chalk.dim('....................')} ${plan.changes.importEdits}`);
194
+ return lines.join('\n');
195
+ }
196
+ function formatPlanReportJson(plan, projectRoot) {
197
+ const report = {
198
+ tool: TOOL_NAME,
199
+ version: VERSION,
200
+ timestamp: new Date().toISOString(),
201
+ projectRoot,
202
+ plan,
203
+ recommendations: generateRecommendations(plan),
204
+ };
205
+ return JSON.stringify(report, null, 2);
206
+ }
207
+ function formatPlanReportMarkdown(plan, projectRoot) {
208
+ const lines = [];
209
+ lines.push(`# ${TOOL_NAME} - Migration Plan`);
210
+ lines.push('');
211
+ lines.push(`**Style:** ${plan.style}`);
212
+ lines.push(`**Project:** ${projectRoot}`);
213
+ lines.push(`**Date:** ${new Date().toISOString()}`);
214
+ lines.push('');
215
+ lines.push('## Mapping Summary');
216
+ lines.push('');
217
+ lines.push('| Status | Count |');
218
+ lines.push('|--------|-------|');
219
+ lines.push(`| ✅ Exact | ${plan.summary.exact} |`);
220
+ lines.push(`| 🔧 Override | ${plan.summary.override} |`);
221
+ lines.push(`| 🟡 Alias | ${plan.summary.alias} |`);
222
+ lines.push(`| 🔍 Fuzzy | ${plan.summary.fuzzy} |`);
223
+ lines.push(`| ❌ Unmapped | ${plan.summary.unmapped} |`);
224
+ lines.push(`| ❓ Ambiguous | ${plan.summary.ambiguous} |`);
225
+ lines.push('');
226
+ lines.push('## Planned Changes');
227
+ lines.push('');
228
+ lines.push(`- **Files to modify:** ${plan.filesToModify.length}`);
229
+ lines.push(`- **JSX replacements:** ${plan.changes.jsxReplacements}`);
230
+ lines.push(`- **Import edits:** ${plan.changes.importEdits}`);
231
+ return lines.join('\n');
232
+ }
233
+ // ============================================================================
234
+ // Apply Reports
235
+ // ============================================================================
236
+ export function formatApplyReport(result, projectRoot, format) {
237
+ switch (format) {
238
+ case 'json':
239
+ return formatApplyReportJson(result, projectRoot);
240
+ case 'md':
241
+ return formatApplyReportMarkdown(result, projectRoot);
242
+ case 'text':
243
+ default:
244
+ return formatApplyReportText(result);
245
+ }
246
+ }
247
+ function formatApplyReportText(result) {
248
+ const lines = [];
249
+ const modeLabel = result.dryRun ? 'dry-run' : 'write';
250
+ lines.push(chalk.bold.cyan(`Apply (${modeLabel})`));
251
+ lines.push('');
252
+ // Summary
253
+ const verb = result.dryRun ? 'Would change' : 'Changed';
254
+ lines.push(`${verb} ${result.summary.filesModified} files`);
255
+ lines.push(`- Total replacements ${chalk.dim('............')} ${result.summary.totalReplacements}`);
256
+ lines.push(`- Total import edits ${chalk.dim('............')} ${result.summary.totalImportEdits}`);
257
+ if (result.summary.errors > 0) {
258
+ lines.push(chalk.red(`- Errors ${chalk.dim('.......................')} ${result.summary.errors}`));
259
+ }
260
+ lines.push('');
261
+ // Show errors if any
262
+ const errors = result.transformations.filter((t) => !t.success);
263
+ if (errors.length > 0) {
264
+ lines.push(chalk.bold.red('Errors'));
265
+ for (const err of errors.slice(0, 5)) {
266
+ lines.push(`- ${err.filePath}: ${err.error}`);
267
+ }
268
+ lines.push('');
269
+ }
270
+ // Backup info
271
+ if (result.backupPath) {
272
+ lines.push(chalk.dim(`Backup created at: ${result.backupPath}`));
273
+ lines.push('');
274
+ }
275
+ // Patch info
276
+ if (result.patch) {
277
+ lines.push(chalk.dim('Patch file generated'));
278
+ }
279
+ return lines.join('\n');
280
+ }
281
+ function formatApplyReportJson(result, projectRoot) {
282
+ const report = {
283
+ tool: TOOL_NAME,
284
+ version: VERSION,
285
+ timestamp: new Date().toISOString(),
286
+ projectRoot,
287
+ result,
288
+ };
289
+ return JSON.stringify(report, null, 2);
290
+ }
291
+ function formatApplyReportMarkdown(result, projectRoot) {
292
+ const lines = [];
293
+ const modeLabel = result.dryRun ? 'Dry Run' : 'Applied';
294
+ lines.push(`# ${TOOL_NAME} - Apply Report (${modeLabel})`);
295
+ lines.push('');
296
+ lines.push(`**Project:** ${projectRoot}`);
297
+ lines.push(`**Date:** ${new Date().toISOString()}`);
298
+ lines.push('');
299
+ lines.push('## Summary');
300
+ lines.push('');
301
+ lines.push(`- **Files modified:** ${result.summary.filesModified}`);
302
+ lines.push(`- **Total replacements:** ${result.summary.totalReplacements}`);
303
+ lines.push(`- **Import edits:** ${result.summary.totalImportEdits}`);
304
+ lines.push(`- **Errors:** ${result.summary.errors}`);
305
+ if (result.backupPath) {
306
+ lines.push('');
307
+ lines.push(`**Backup:** ${result.backupPath}`);
308
+ }
309
+ return lines.join('\n');
310
+ }
311
+ // ============================================================================
312
+ // Helpers
313
+ // ============================================================================
314
+ function getConfidenceColor(confidence) {
315
+ switch (confidence) {
316
+ case 'HIGH':
317
+ return chalk.green;
318
+ case 'MEDIUM':
319
+ return chalk.yellow;
320
+ case 'LOW':
321
+ return chalk.red;
322
+ default:
323
+ return chalk.white;
324
+ }
325
+ }
326
+ function generateRecommendations(plan) {
327
+ const recommendations = [];
328
+ if (plan.summary.unmapped > 0) {
329
+ recommendations.push(`Add mappings for ${plan.summary.unmapped} unmapped icons in hugeicons.migrate.json`);
330
+ }
331
+ if (plan.summary.ambiguous > 0) {
332
+ recommendations.push(`Resolve ${plan.summary.ambiguous} ambiguous mappings manually`);
333
+ }
334
+ if (plan.filesToModify.length > 50) {
335
+ recommendations.push('Consider running migration in batches for large projects');
336
+ }
337
+ return recommendations;
338
+ }
339
+ //# sourceMappingURL=reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/engine/reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Code Transformer
3
+ * AST-based code transformations for migrating icons
4
+ */
5
+ import type { ApplyResult, MigrationPlan, ScanResult } from '../types/index.js';
6
+ interface TransformOptions {
7
+ root: string;
8
+ dryRun: boolean;
9
+ backup: boolean;
10
+ patch: boolean;
11
+ style?: string;
12
+ }
13
+ /**
14
+ * Apply migration plan to source files
15
+ */
16
+ export declare function applyPlan(scanResult: ScanResult, plan: MigrationPlan, options: TransformOptions): Promise<ApplyResult>;
17
+ /**
18
+ * Check git status
19
+ */
20
+ export declare function checkGitStatus(root: string): {
21
+ isRepo: boolean;
22
+ isDirty: boolean;
23
+ modifiedFiles: string[];
24
+ };
25
+ export {};
26
+ //# sourceMappingURL=transformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../src/engine/transformer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,KAAK,EAGV,WAAW,EACX,aAAa,EAGb,UAAU,EACX,MAAM,mBAAmB,CAAC;AAS3B,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,WAAW,CAAC,CAgFtB;AAw4BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,CAe3G"}