css-to-tailwind-react 0.3.4 → 0.4.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.
package/dist/cli.js CHANGED
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
@@ -6,8 +39,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
39
  const commander_1 = require("commander");
7
40
  const scanner_1 = require("./scanner");
8
41
  const transformer_1 = require("./transformer");
42
+ const fileWriter_1 = require("./fileWriter");
9
43
  const logger_1 = require("./utils/logger");
10
44
  const config_1 = require("./utils/config");
45
+ const reporter_1 = require("./utils/reporter");
11
46
  const path_1 = __importDefault(require("path"));
12
47
  const program = new commander_1.Command();
13
48
  program
@@ -15,7 +50,10 @@ program
15
50
  .description('Convert traditional CSS into Tailwind CSS utility classes for React')
16
51
  .version('1.0.0')
17
52
  .argument('<directory>', 'Target directory to scan and transform')
18
- .option('--dry-run', 'Show changes without modifying files')
53
+ .option('--dry-run, --preview', 'Show changes without modifying files')
54
+ .option('--diff', 'Print unified diff for each modified file')
55
+ .option('--silent', 'Suppress per-file logs, show only summary')
56
+ .option('--json-report', 'Output structured JSON summary')
19
57
  .option('--verbose', 'Show detailed output')
20
58
  .option('--delete-css', 'Delete CSS files when all rules are converted')
21
59
  .option('--skip-external', 'Skip external CSS files (imports)')
@@ -23,18 +61,23 @@ program
23
61
  .option('--skip-internal', 'Skip internal <style> blocks')
24
62
  .action(async (directory, options) => {
25
63
  const startTime = Date.now();
64
+ const isDryRun = options.dryRun || options.preview || false;
65
+ const showDiff = options.diff || false;
66
+ const isSilent = options.silent || options.jsonReport || false;
67
+ const isJsonReport = options.jsonReport || false;
26
68
  try {
27
- // Set verbose mode for logger
28
69
  logger_1.logger.setVerbose(options.verbose || false);
70
+ logger_1.logger.setSilent(isSilent);
29
71
  logger_1.logger.info('šŸš€ CSS to Tailwind React Converter');
30
72
  logger_1.logger.info(`šŸ“ Target directory: ${path_1.default.resolve(directory)}`);
31
- if (options.dryRun) {
73
+ if (isDryRun) {
32
74
  logger_1.logger.info('šŸ” Dry run mode - no files will be modified');
33
75
  }
34
- // Load Tailwind config
76
+ if (showDiff) {
77
+ logger_1.logger.info('šŸ“‹ Diff mode enabled - showing changes');
78
+ }
35
79
  logger_1.logger.info('āš™ļø Loading Tailwind configuration...');
36
80
  const tailwindConfig = await (0, config_1.loadTailwindConfig)(directory);
37
- // Scan project files
38
81
  logger_1.logger.info('šŸ”Ž Scanning project files...');
39
82
  const files = await (0, scanner_1.scanProject)(directory);
40
83
  logger_1.logger.success(`Found ${files.length} files to process`);
@@ -42,9 +85,8 @@ program
42
85
  logger_1.logger.warn('No supported files found in the target directory');
43
86
  process.exit(0);
44
87
  }
45
- // Transform files
46
- const results = await (0, transformer_1.transformFiles)(files, {
47
- dryRun: options.dryRun || false,
88
+ const { fileResults, stats } = await (0, transformer_1.transformFilesDetailed)(files, {
89
+ dryRun: isDryRun,
48
90
  deleteCss: options.deleteCss || false,
49
91
  skipExternal: options.skipExternal || false,
50
92
  skipInline: options.skipInline || false,
@@ -52,22 +94,63 @@ program
52
94
  tailwindConfig,
53
95
  projectRoot: path_1.default.resolve(directory)
54
96
  });
55
- // Print summary
97
+ const reporter = new reporter_1.Reporter({
98
+ showDiff,
99
+ silent: isSilent,
100
+ verbose: options.verbose || false,
101
+ dryRun: isDryRun,
102
+ projectRoot: path_1.default.resolve(directory)
103
+ });
104
+ for (const result of fileResults) {
105
+ reporter.addFileResult(result);
106
+ }
107
+ reporter.addWarning(stats.warnings);
108
+ if (!isDryRun) {
109
+ logger_1.logger.info('\nšŸ’¾ Writing changes...');
110
+ const writtenCount = await (0, fileWriter_1.writeFiles)(fileResults, {
111
+ dryRun: false,
112
+ projectRoot: path_1.default.resolve(directory)
113
+ });
114
+ if (options.deleteCss) {
115
+ for (const result of fileResults) {
116
+ if (result.hasChanges && result.filePath.endsWith('.css')) {
117
+ const cssContent = result.newContent.trim();
118
+ if (cssContent === '' || cssContent === '/* All CSS converted to Tailwind */') {
119
+ const fs = await Promise.resolve().then(() => __importStar(require('fs')));
120
+ const backupDir = path_1.default.join(path_1.default.resolve(directory), '.css-to-tailwind-backups');
121
+ const relativePath = path_1.default.relative(path_1.default.resolve(directory), result.filePath);
122
+ const backupPath = path_1.default.join(backupDir, relativePath);
123
+ if (!fs.existsSync(backupDir)) {
124
+ fs.mkdirSync(backupDir, { recursive: true });
125
+ }
126
+ const backupDirPath = path_1.default.dirname(backupPath);
127
+ if (!fs.existsSync(backupDirPath)) {
128
+ fs.mkdirSync(backupDirPath, { recursive: true });
129
+ }
130
+ fs.writeFileSync(backupPath, result.originalContent, 'utf-8');
131
+ fs.unlinkSync(result.filePath);
132
+ logger_1.logger.info(`šŸ—‘ļø Deleted ${path_1.default.basename(result.filePath)} (all rules converted)`);
133
+ }
134
+ }
135
+ }
136
+ }
137
+ logger_1.logger.success(`Wrote ${writtenCount} files`);
138
+ }
56
139
  const duration = ((Date.now() - startTime) / 1000).toFixed(2);
57
- console.log('\n' + '='.repeat(50));
58
- logger_1.logger.success('✨ Transformation Complete!');
59
- console.log('='.repeat(50));
60
- console.log(`šŸ“Š Summary:`);
61
- console.log(` Files scanned: ${results.filesScanned}`);
62
- console.log(` Files modified: ${results.filesModified}`);
63
- console.log(` Styles converted: ${results.stylesConverted}`);
64
- console.log(` Classes replaced: ${results.classesReplaced}`);
65
- console.log(` Warnings: ${results.warnings}`);
66
- console.log(` Duration: ${duration}s`);
67
- console.log('='.repeat(50));
68
- if (results.warnings > 0) {
69
- logger_1.logger.warn('Some styles could not be converted. Run with --verbose for details.');
70
- process.exit(0);
140
+ if (isJsonReport) {
141
+ const jsonOutput = reporter.toJSON();
142
+ const output = {
143
+ ...jsonOutput,
144
+ duration: `${duration}s`
145
+ };
146
+ console.log(JSON.stringify(output, null, 2));
147
+ }
148
+ else {
149
+ reporter.print();
150
+ console.log(`\nā±ļø Duration: ${duration}s`);
151
+ }
152
+ if (stats.errors > 0) {
153
+ process.exit(1);
71
154
  }
72
155
  process.exit(0);
73
156
  }
@@ -77,4 +160,4 @@ program
77
160
  }
78
161
  });
79
162
  program.parse();
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlDQUFvQztBQUNwQyx1Q0FBd0M7QUFDeEMsK0NBQStDO0FBQy9DLDJDQUF3QztBQUN4QywyQ0FBb0Q7QUFDcEQsZ0RBQXdCO0FBV3hCLE1BQU0sT0FBTyxHQUFHLElBQUksbUJBQU8sRUFBRSxDQUFDO0FBRTlCLE9BQU87S0FDSixJQUFJLENBQUMsdUJBQXVCLENBQUM7S0FDN0IsV0FBVyxDQUFDLHFFQUFxRSxDQUFDO0tBQ2xGLE9BQU8sQ0FBQyxPQUFPLENBQUM7S0FDaEIsUUFBUSxDQUFDLGFBQWEsRUFBRSx3Q0FBd0MsQ0FBQztLQUNqRSxNQUFNLENBQUMsV0FBVyxFQUFFLHNDQUFzQyxDQUFDO0tBQzNELE1BQU0sQ0FBQyxXQUFXLEVBQUUsc0JBQXNCLENBQUM7S0FDM0MsTUFBTSxDQUFDLGNBQWMsRUFBRSwrQ0FBK0MsQ0FBQztLQUN2RSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsbUNBQW1DLENBQUM7S0FDOUQsTUFBTSxDQUFDLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQztLQUM3QyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsOEJBQThCLENBQUM7S0FDekQsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFpQixFQUFFLE9BQW1CLEVBQUUsRUFBRTtJQUN2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFN0IsSUFBSSxDQUFDO1FBQ0gsOEJBQThCO1FBQzlCLGVBQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsQ0FBQztRQUU1QyxlQUFNLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDbEQsZUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsY0FBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFL0QsSUFB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LENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsZUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVMLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgc2NhblByb2plY3QgfSBmcm9tICcuL3NjYW5uZXInO1xuaW1wb3J0IHsgdHJhbnNmb3JtRmlsZXMgfSBmcm9tICcuL3RyYW5zZm9ybWVyJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vdXRpbHMvbG9nZ2VyJztcbmltcG9ydCB7IGxvYWRUYWlsd2luZENvbmZpZyB9IGZyb20gJy4vdXRpbHMvY29uZmlnJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbnRlcmZhY2UgQ0xJT3B0aW9ucyB7XG4gIGRyeVJ1bj86IGJvb2xlYW47XG4gIHZlcmJvc2U/OiBib29sZWFuO1xuICBkZWxldGVDc3M/OiBib29sZWFuO1xuICBza2lwRXh0ZXJuYWw/OiBib29sZWFuO1xuICBza2lwSW5saW5lPzogYm9vbGVhbjtcbiAgc2tpcEludGVybmFsPzogYm9vbGVhbjtcbn1cblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW1cbiAgLm5hbWUoJ2Nzcy10by10YWlsd2luZC1yZWFjdCcpXG4gIC5kZXNjcmlwdGlvbignQ29udmVydCB0cmFkaXRpb25hbCBDU1MgaW50byBUYWlsd2luZCBDU1MgdXRpbGl0eSBjbGFzc2VzIGZvciBSZWFjdCcpXG4gIC52ZXJzaW9uKCcxLjAuMCcpXG4gIC5hcmd1bWVudCgnPGRpcmVjdG9yeT4nLCAnVGFyZ2V0IGRpcmVjdG9yeSB0byBzY2FuIGFuZCB0cmFuc2Zvcm0nKVxuICAub3B0aW9uKCctLWRyeS1ydW4nLCAnU2hvdyBjaGFuZ2VzIHdpdGhvdXQgbW9kaWZ5aW5nIGZpbGVzJylcbiAgLm9wdGlvbignLS12ZXJib3NlJywgJ1Nob3cgZGV0YWlsZWQgb3V0cHV0JylcbiAgLm9wdGlvbignLS1kZWxldGUtY3NzJywgJ0RlbGV0ZSBDU1MgZmlsZXMgd2hlbiBhbGwgcnVsZXMgYXJlIGNvbnZlcnRlZCcpXG4gIC5vcHRpb24oJy0tc2tpcC1leHRlcm5hbCcsICdTa2lwIGV4dGVybmFsIENTUyBmaWxlcyAoaW1wb3J0cyknKVxuICAub3B0aW9uKCctLXNraXAtaW5saW5lJywgJ1NraXAgaW5saW5lIHN0eWxlcycpXG4gIC5vcHRpb24oJy0tc2tpcC1pbnRlcm5hbCcsICdTa2lwIGludGVybmFsIDxzdHlsZT4gYmxvY2tzJylcbiAgLmFjdGlvbihhc3luYyAoZGlyZWN0b3J5OiBzdHJpbmcsIG9wdGlvbnM6IENMSU9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBTZXQgdmVyYm9zZSBtb2RlIGZvciBsb2dnZXJcbiAgICAgIGxvZ2dlci5zZXRWZXJib3NlKG9wdGlvbnMudmVyYm9zZSB8fCBmYWxzZSk7XG4gICAgICBcbiAgICAgIGxvZ2dlci5pbmZvKCfwn5qAIENTUyB0byBUYWlsd2luZCBSZWFjdCBDb252ZXJ0ZXInKTtcbiAgICAgIGxvZ2dlci5pbmZvKGDwn5OBIFRhcmdldCBkaXJlY3Rvcnk6ICR7cGF0aC5yZXNvbHZlKGRpcmVjdG9yeSl9YCk7XG4gICAgICBcbiAgICAgIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgICAgICBsb2dnZXIuaW5mbygn8J+UjSBEcnkgcnVuIG1vZGUgLSBubyBmaWxlcyB3aWxsIGJlIG1vZGlmaWVkJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIExvYWQgVGFpbHdpbmQgY29uZmlnXG4gICAgICBsb2dnZXIuaW5mbygn4pqZ77iPICBMb2FkaW5nIFRhaWx3aW5kIGNvbmZpZ3VyYXRpb24uLi4nKTtcbiAgICAgIGNvbnN0IHRhaWx3aW5kQ29uZmlnID0gYXdhaXQgbG9hZFRhaWx3aW5kQ29uZmlnKGRpcmVjdG9yeSk7XG4gICAgICBcbiAgICAgIC8vIFNjYW4gcHJvamVjdCBmaWxlc1xuICAgICAgbG9nZ2VyLmluZm8oJ/CflI4gU2Nhbm5pbmcgcHJvamVjdCBmaWxlcy4uLicpO1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBzY2FuUHJvamVjdChkaXJlY3RvcnkpO1xuICAgICAgXG4gICAgICBsb2dnZXIuc3VjY2VzcyhgRm91bmQgJHtmaWxlcy5sZW5ndGh9IGZpbGVzIHRvIHByb2Nlc3NgKTtcbiAgICAgIFxuICAgICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBsb2dnZXIud2FybignTm8gc3VwcG9ydGVkIGZpbGVzIGZvdW5kIGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5Jyk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgIH1cblxuICAgICAgLy8gVHJhbnNmb3JtIGZpbGVzXG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdHJhbnNmb3JtRmlsZXMoZmlsZXMsIHtcbiAgICAgICAgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1biB8fCBmYWxzZSxcbiAgICAgICAgZGVsZXRlQ3NzOiBvcHRpb25zLmRlbGV0ZUNzcyB8fCBmYWxzZSxcbiAgICAgICAgc2tpcEV4dGVybmFsOiBvcHRpb25zLnNraXBFeHRlcm5hbCB8fCBmYWxzZSxcbiAgICAgICAgc2tpcElubGluZTogb3B0aW9ucy5za2lwSW5saW5lIHx8IGZhbHNlLFxuICAgICAgICBza2lwSW50ZXJuYWw6IG9wdGlvbnMuc2tpcEludGVybmFsIHx8IGZhbHNlLFxuICAgICAgICB0YWlsd2luZENvbmZpZyxcbiAgICAgICAgcHJvamVjdFJvb3Q6IHBhdGgucmVzb2x2ZShkaXJlY3RvcnkpXG4gICAgICB9KTtcblxuICAgICAgLy8gUHJpbnQgc3VtbWFyeVxuICAgICAgY29uc3QgZHVyYXRpb24gPSAoKERhdGUubm93KCkgLSBzdGFydFRpbWUpIC8gMTAwMCkudG9GaXhlZCgyKTtcbiAgICAgIFxuICAgICAgY29uc29sZS5sb2coJ1xcbicgKyAnPScucmVwZWF0KDUwKSk7XG4gICAgICBsb2dnZXIuc3VjY2Vzcygn4pyoIFRyYW5zZm9ybWF0aW9uIENvbXBsZXRlIScpO1xuICAgICAgY29uc29sZS5sb2coJz0nLnJlcGVhdCg1MCkpO1xuICAgICAgY29uc29sZS5sb2coYPCfk4ogU3VtbWFyeTpgKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICBGaWxlcyBzY2FubmVkOiAgICAgICR7cmVzdWx0cy5maWxlc1NjYW5uZWR9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgICAgRmlsZXMgbW9kaWZpZWQ6ICAgICAke3Jlc3VsdHMuZmlsZXNNb2RpZmllZH1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICBTdHlsZXMgY29udmVydGVkOiAgICR7cmVzdWx0cy5zdHlsZXNDb252ZXJ0ZWR9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgICAgQ2xhc3NlcyByZXBsYWNlZDogICAke3Jlc3VsdHMuY2xhc3Nlc1JlcGxhY2VkfWApO1xuICAgICAgY29uc29sZS5sb2coYCAgIFdhcm5pbmdzOiAgICAgICAgICAgJHtyZXN1bHRzLndhcm5pbmdzfWApO1xuICAgICAgY29uc29sZS5sb2coYCAgIER1cmF0aW9uOiAgICAgICAgICAgJHtkdXJhdGlvbn1zYCk7XG4gICAgICBjb25zb2xlLmxvZygnPScucmVwZWF0KDUwKSk7XG5cbiAgICAgIGlmIChyZXN1bHRzLndhcm5pbmdzID4gMCkge1xuICAgICAgICBsb2dnZXIud2FybignU29tZSBzdHlsZXMgY291bGQgbm90IGJlIGNvbnZlcnRlZC4gUnVuIHdpdGggLS12ZXJib3NlIGZvciBkZXRhaWxzLicpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICB9XG5cbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCfinYwgVHJhbnNmb3JtYXRpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5wcm9ncmFtLnBhcnNlKCk7XG4iXX0=
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlDQUFvQztBQUNwQyx1Q0FBd0M7QUFDeEMsK0NBQXVEO0FBQ3ZELDZDQUEwQztBQUMxQywyQ0FBd0M7QUFDeEMsMkNBQW9EO0FBQ3BELCtDQUE0QztBQUM1QyxnREFBd0I7QUFleEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsT0FBTztLQUNKLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztLQUM3QixXQUFXLENBQUMscUVBQXFFLENBQUM7S0FDbEYsT0FBTyxDQUFDLE9BQU8sQ0FBQztLQUNoQixRQUFRLENBQUMsYUFBYSxFQUFFLHdDQUF3QyxDQUFDO0tBQ2pFLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxzQ0FBc0MsQ0FBQztLQUN0RSxNQUFNLENBQUMsUUFBUSxFQUFFLDJDQUEyQyxDQUFDO0tBQzdELE1BQU0sQ0FBQyxVQUFVLEVBQUUsMkNBQTJDLENBQUM7S0FDL0QsTUFBTSxDQUFDLGVBQWUsRUFBRSxnQ0FBZ0MsQ0FBQztLQUN6RCxNQUFNLENBQUMsV0FBVyxFQUFFLHNCQUFzQixDQUFDO0tBQzNDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsK0NBQStDLENBQUM7S0FDdkUsTUFBTSxDQUFDLGlCQUFpQixFQUFFLG1DQUFtQyxDQUFDO0tBQzlELE1BQU0sQ0FBQyxlQUFlLEVBQUUsb0JBQW9CLENBQUM7S0FDN0MsTUFBTSxDQUFDLGlCQUFpQixFQUFFLDhCQUE4QixDQUFDO0tBQ3pELE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBaUIsRUFBRSxPQUFtQixFQUFFLEVBQUU7SUFDdkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRTdCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FB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QUFDLEVBQUUsQ0FBQztZQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsZUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVMLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgc2NhblByb2plY3QgfSBmcm9tICcuL3NjYW5uZXInO1xuaW1wb3J0IHsgdHJhbnNmb3JtRmlsZXNEZXRhaWxlZCB9IGZyb20gJy4vdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgd3JpdGVGaWxlcyB9IGZyb20gJy4vZmlsZVdyaXRlcic7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL3V0aWxzL2xvZ2dlcic7XG5pbXBvcnQgeyBsb2FkVGFpbHdpbmRDb25maWcgfSBmcm9tICcuL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBSZXBvcnRlciB9IGZyb20gJy4vdXRpbHMvcmVwb3J0ZXInO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmludGVyZmFjZSBDTElPcHRpb25zIHtcbiAgZHJ5UnVuPzogYm9vbGVhbjtcbiAgcHJldmlldz86IGJvb2xlYW47XG4gIGRpZmY/OiBib29sZWFuO1xuICBzaWxlbnQ/OiBib29sZWFuO1xuICBqc29uUmVwb3J0PzogYm9vbGVhbjtcbiAgdmVyYm9zZT86IGJvb2xlYW47XG4gIGRlbGV0ZUNzcz86IGJvb2xlYW47XG4gIHNraXBFeHRlcm5hbD86IGJvb2xlYW47XG4gIHNraXBJbmxpbmU/OiBib29sZWFuO1xuICBza2lwSW50ZXJuYWw/OiBib29sZWFuO1xufVxuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbVxuICAubmFtZSgnY3NzLXRvLXRhaWx3aW5kLXJlYWN0JylcbiAgLmRlc2NyaXB0aW9uKCdDb252ZXJ0IHRyYWRpdGlvbmFsIENTUyBpbnRvIFRhaWx3aW5kIENTUyB1dGlsaXR5IGNsYXNzZXMgZm9yIFJlYWN0JylcbiAgLnZlcnNpb24oJzEuMC4wJylcbiAgLmFyZ3VtZW50KCc8ZGlyZWN0b3J5PicsICdUYXJnZXQgZGlyZWN0b3J5IHRvIHNjYW4gYW5kIHRyYW5zZm9ybScpXG4gIC5vcHRpb24oJy0tZHJ5LXJ1biwgLS1wcmV2aWV3JywgJ1Nob3cgY2hhbmdlcyB3aXRob3V0IG1vZGlmeWluZyBmaWxlcycpXG4gIC5vcHRpb24oJy0tZGlmZicsICdQcmludCB1bmlmaWVkIGRpZmYgZm9yIGVhY2ggbW9kaWZpZWQgZmlsZScpXG4gIC5vcHRpb24oJy0tc2lsZW50JywgJ1N1cHByZXNzIHBlci1maWxlIGxvZ3MsIHNob3cgb25seSBzdW1tYXJ5JylcbiAgLm9wdGlvbignLS1qc29uLXJlcG9ydCcsICdPdXRwdXQgc3RydWN0dXJlZCBKU09OIHN1bW1hcnknKVxuICAub3B0aW9uKCctLXZlcmJvc2UnLCAnU2hvdyBkZXRhaWxlZCBvdXRwdXQnKVxuICAub3B0aW9uKCctLWRlbGV0ZS1jc3MnLCAnRGVsZXRlIENTUyBmaWxlcyB3aGVuIGFsbCBydWxlcyBhcmUgY29udmVydGVkJylcbiAgLm9wdGlvbignLS1za2lwLWV4dGVybmFsJywgJ1NraXAgZXh0ZXJuYWwgQ1NTIGZpbGVzIChpbXBvcnRzKScpXG4gIC5vcHRpb24oJy0tc2tpcC1pbmxpbmUnLCAnU2tpcCBpbmxpbmUgc3R5bGVzJylcbiAgLm9wdGlvbignLS1za2lwLWludGVybmFsJywgJ1NraXAgaW50ZXJuYWwgPHN0eWxlPiBibG9ja3MnKVxuICAuYWN0aW9uKGFzeW5jIChkaXJlY3Rvcnk6IHN0cmluZywgb3B0aW9uczogQ0xJT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgXG4gICAgY29uc3QgaXNEcnlSdW4gPSBvcHRpb25zLmRyeVJ1biB8fCBvcHRpb25zLnByZXZpZXcgfHwgZmFsc2U7XG4gICAgY29uc3Qgc2hvd0RpZmYgPSBvcHRpb25zLmRpZmYgfHwgZmFsc2U7XG4gICAgY29uc3QgaXNTaWxlbnQgPSBvcHRpb25zLnNpbGVudCB8fCBvcHRpb25zLmpzb25SZXBvcnQgfHwgZmFsc2U7XG4gICAgY29uc3QgaXNKc29uUmVwb3J0ID0gb3B0aW9ucy5qc29uUmVwb3J0IHx8IGZhbHNlO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBsb2dnZXIuc2V0VmVyYm9zZShvcHRpb25zLnZlcmJvc2UgfHwgZmFsc2UpO1xuICAgICAgbG9nZ2VyLnNldFNpbGVudChpc1NpbGVudCk7XG4gICAgICBcbiAgICAgIGxvZ2dlci5pbmZvKCfwn5qAIENTUyB0byBUYWlsd2luZCBSZWFjdCBDb252ZXJ0ZXInKTtcbiAgICAgIGxvZ2dlci5pbmZvKGDwn5OBIFRhcmdldCBkaXJlY3Rvcnk6ICR7cGF0aC5yZXNvbHZlKGRpcmVjdG9yeSl9YCk7XG4gICAgICBcbiAgICAgIGlmIChpc0RyeVJ1bikge1xuICAgICAgICBsb2dnZXIuaW5mbygn8J+UjSBEcnkgcnVuIG1vZGUgLSBubyBmaWxlcyB3aWxsIGJlIG1vZGlmaWVkJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChzaG93RGlmZikge1xuICAgICAgICBsb2dnZXIuaW5mbygn8J+TiyBEaWZmIG1vZGUgZW5hYmxlZCAtIHNob3dpbmcgY2hhbmdlcycpO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuaW5mbygn4pqZ77iPICBMb2FkaW5nIFRhaWx3aW5kIGNvbmZpZ3VyYXRpb24uLi4nKTtcbiAgICAgIGNvbnN0IHRhaWx3aW5kQ29uZmlnID0gYXdhaXQgbG9hZFRhaWx3aW5kQ29uZmlnKGRpcmVjdG9yeSk7XG4gICAgICBcbiAgICAgIGxvZ2dlci5pbmZvKCfwn5SOIFNjYW5uaW5nIHByb2plY3QgZmlsZXMuLi4nKTtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgc2NhblByb2plY3QoZGlyZWN0b3J5KTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoYEZvdW5kICR7ZmlsZXMubGVuZ3RofSBmaWxlcyB0byBwcm9jZXNzYCk7XG4gICAgICBcbiAgICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ05vIHN1cHBvcnRlZCBmaWxlcyBmb3VuZCBpbiB0aGUgdGFyZ2V0IGRpcmVjdG9yeScpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZmlsZVJlc3VsdHMsIHN0YXRzIH0gPSBhd2FpdCB0cmFuc2Zvcm1GaWxlc0RldGFpbGVkKGZpbGVzLCB7XG4gICAgICAgIGRyeVJ1bjogaXNEcnlSdW4sXG4gICAgICAgIGRlbGV0ZUNzczogb3B0aW9ucy5kZWxldGVDc3MgfHwgZmFsc2UsXG4gICAgICAgIHNraXBFeHRlcm5hbDogb3B0aW9ucy5za2lwRXh0ZXJuYWwgfHwgZmFsc2UsXG4gICAgICAgIHNraXBJbmxpbmU6IG9wdGlvbnMuc2tpcElubGluZSB8fCBmYWxzZSxcbiAgICAgICAgc2tpcEludGVybmFsOiBvcHRpb25zLnNraXBJbnRlcm5hbCB8fCBmYWxzZSxcbiAgICAgICAgdGFpbHdpbmRDb25maWcsXG4gICAgICAgIHByb2plY3RSb290OiBwYXRoLnJlc29sdmUoZGlyZWN0b3J5KVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlcG9ydGVyID0gbmV3IFJlcG9ydGVyKHtcbiAgICAgICAgc2hvd0RpZmYsXG4gICAgICAgIHNpbGVudDogaXNTaWxlbnQsXG4gICAgICAgIHZlcmJvc2U6IG9wdGlvbnMudmVyYm9zZSB8fCBmYWxzZSxcbiAgICAgICAgZHJ5UnVuOiBpc0RyeVJ1bixcbiAgICAgICAgcHJvamVjdFJvb3Q6IHBhdGgucmVzb2x2ZShkaXJlY3RvcnkpXG4gICAgICB9KTtcblxuICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgZmlsZVJlc3VsdHMpIHtcbiAgICAgICAgcmVwb3J0ZXIuYWRkRmlsZVJlc3VsdChyZXN1bHQpO1xuICAgICAgfVxuICAgICAgcmVwb3J0ZXIuYWRkV2FybmluZyhzdGF0cy53YXJuaW5ncyk7XG5cbiAgICAgIGlmICghaXNEcnlSdW4pIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1xcbvCfkr4gV3JpdGluZyBjaGFuZ2VzLi4uJyk7XG4gICAgICAgIGNvbnN0IHdyaXR0ZW5Db3VudCA9IGF3YWl0IHdyaXRlRmlsZXMoZmlsZVJlc3VsdHMsIHtcbiAgICAgICAgICBkcnlSdW46IGZhbHNlLFxuICAgICAgICAgIHByb2plY3RSb290OiBwYXRoLnJlc29sdmUoZGlyZWN0b3J5KVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGlmIChvcHRpb25zLmRlbGV0ZUNzcykge1xuICAgICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIGZpbGVSZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0NoYW5nZXMgJiYgcmVzdWx0LmZpbGVQYXRoLmVuZHNXaXRoKCcuY3NzJykpIHtcbiAgICAgICAgICAgICAgY29uc3QgY3NzQ29udGVudCA9IHJlc3VsdC5uZXdDb250ZW50LnRyaW0oKTtcbiAgICAgICAgICAgICAgaWYgKGNzc0NvbnRlbnQgPT09ICcnIHx8IGNzc0NvbnRlbnQgPT09ICcvKiBBbGwgQ1NTIGNvbnZlcnRlZCB0byBUYWlsd2luZCAqLycpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydCgnZnMnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiYWNrdXBEaXIgPSBwYXRoLmpvaW4ocGF0aC5yZXNvbHZlKGRpcmVjdG9yeSksICcuY3NzLXRvLXRhaWx3aW5kLWJhY2t1cHMnKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHBhdGgucmVzb2x2ZShkaXJlY3RvcnkpLCByZXN1bHQuZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhY2t1cFBhdGggPSBwYXRoLmpvaW4oYmFja3VwRGlyLCByZWxhdGl2ZVBhdGgpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhiYWNrdXBEaXIpKSB7XG4gICAgICAgICAgICAgICAgICBmcy5ta2RpclN5bmMoYmFja3VwRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYmFja3VwRGlyUGF0aCA9IHBhdGguZGlybmFtZShiYWNrdXBQYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYmFja3VwRGlyUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgIGZzLm1rZGlyU3luYyhiYWNrdXBEaXJQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhiYWNrdXBQYXRoLCByZXN1bHQub3JpZ2luYWxDb250ZW50LCAndXRmLTgnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBmcy51bmxpbmtTeW5jKHJlc3VsdC5maWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYPCfl5HvuI8gIERlbGV0ZWQgJHtwYXRoLmJhc2VuYW1lKHJlc3VsdC5maWxlUGF0aCl9IChhbGwgcnVsZXMgY29udmVydGVkKWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIuc3VjY2VzcyhgV3JvdGUgJHt3cml0dGVuQ291bnR9IGZpbGVzYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gKChEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSAvIDEwMDApLnRvRml4ZWQoMik7XG5cbiAgICAgIGlmIChpc0pzb25SZXBvcnQpIHtcbiAgICAgICAgY29uc3QganNvbk91dHB1dCA9IHJlcG9ydGVyLnRvSlNPTigpO1xuICAgICAgICBjb25zdCBvdXRwdXQgPSB7XG4gICAgICAgICAgLi4uanNvbk91dHB1dCxcbiAgICAgICAgICBkdXJhdGlvbjogYCR7ZHVyYXRpb259c2BcbiAgICAgICAgfTtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkob3V0cHV0LCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXBvcnRlci5wcmludCgpO1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxu4o+x77iPICBEdXJhdGlvbjogJHtkdXJhdGlvbn1zYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0cy5lcnJvcnMgPiAwKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ+KdjCBUcmFuc2Zvcm1hdGlvbiBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnByb2dyYW0ucGFyc2UoKTtcbiJdfQ==
@@ -1,3 +1,4 @@
1
+ import { FileResult } from './utils/reporter';
1
2
  export interface FileWriteOptions {
2
3
  dryRun: boolean;
3
4
  backup?: boolean;
@@ -5,10 +6,17 @@ export interface FileWriteOptions {
5
6
  export declare class FileWriter {
6
7
  private dryRun;
7
8
  private backupDir;
8
- constructor(options: FileWriteOptions);
9
+ private projectRoot;
10
+ constructor(options: FileWriteOptions & {
11
+ projectRoot?: string;
12
+ });
9
13
  writeFile(filePath: string, content: string, originalContent: string): Promise<boolean>;
10
14
  deleteFile(filePath: string): Promise<boolean>;
15
+ writeResults(results: FileResult[]): Promise<number>;
11
16
  private createBackup;
12
- private showDiff;
13
- static restoreBackups(): void;
17
+ static restoreBackups(projectRoot?: string): void;
14
18
  }
19
+ export declare function writeFiles(results: FileResult[], options: {
20
+ dryRun: boolean;
21
+ projectRoot: string;
22
+ }): Promise<number>;
@@ -4,26 +4,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.FileWriter = void 0;
7
+ exports.writeFiles = writeFiles;
7
8
  const fs_1 = __importDefault(require("fs"));
8
9
  const path_1 = __importDefault(require("path"));
9
- const chalk_1 = __importDefault(require("chalk"));
10
10
  const logger_1 = require("./utils/logger");
11
11
  class FileWriter {
12
12
  constructor(options) {
13
13
  this.dryRun = options.dryRun;
14
- this.backupDir = path_1.default.join(process.cwd(), '.css-to-tailwind-backups');
14
+ this.projectRoot = options.projectRoot || process.cwd();
15
+ this.backupDir = path_1.default.join(this.projectRoot, '.css-to-tailwind-backups');
15
16
  }
16
17
  async writeFile(filePath, content, originalContent) {
17
18
  if (this.dryRun) {
18
- this.showDiff(filePath, originalContent, content);
19
19
  return true;
20
20
  }
21
21
  try {
22
- // Create backup
23
22
  await this.createBackup(filePath, originalContent);
24
- // Write file
25
23
  fs_1.default.writeFileSync(filePath, content, 'utf-8');
26
- logger_1.logger.success(`āœļø Modified: ${path_1.default.relative(process.cwd(), filePath)}`);
24
+ logger_1.logger.success(`āœļø Modified: ${path_1.default.relative(this.projectRoot, filePath)}`);
27
25
  return true;
28
26
  }
29
27
  catch (error) {
@@ -33,15 +31,14 @@ class FileWriter {
33
31
  }
34
32
  async deleteFile(filePath) {
35
33
  if (this.dryRun) {
36
- logger_1.logger.info(`šŸ—‘ļø Would delete: ${path_1.default.relative(process.cwd(), filePath)}`);
34
+ logger_1.logger.info(`šŸ—‘ļø Would delete: ${path_1.default.relative(this.projectRoot, filePath)}`);
37
35
  return true;
38
36
  }
39
37
  try {
40
- // Create backup before deletion
41
38
  const content = fs_1.default.readFileSync(filePath, 'utf-8');
42
39
  await this.createBackup(filePath, content);
43
40
  fs_1.default.unlinkSync(filePath);
44
- logger_1.logger.success(`šŸ—‘ļø Deleted: ${path_1.default.relative(process.cwd(), filePath)}`);
41
+ logger_1.logger.success(`šŸ—‘ļø Deleted: ${path_1.default.relative(this.projectRoot, filePath)}`);
45
42
  return true;
46
43
  }
47
44
  catch (error) {
@@ -49,20 +46,30 @@ class FileWriter {
49
46
  return false;
50
47
  }
51
48
  }
49
+ async writeResults(results) {
50
+ let written = 0;
51
+ for (const result of results) {
52
+ if (result.status === 'error')
53
+ continue;
54
+ if (!result.hasChanges)
55
+ continue;
56
+ const success = await this.writeFile(result.filePath, result.newContent, result.originalContent);
57
+ if (success)
58
+ written++;
59
+ }
60
+ return written;
61
+ }
52
62
  async createBackup(filePath, content) {
53
63
  try {
54
- // Create backup directory if it doesn't exist
55
64
  if (!fs_1.default.existsSync(this.backupDir)) {
56
65
  fs_1.default.mkdirSync(this.backupDir, { recursive: true });
57
66
  }
58
- const relativePath = path_1.default.relative(process.cwd(), filePath);
67
+ const relativePath = path_1.default.relative(this.projectRoot, filePath);
59
68
  const backupPath = path_1.default.join(this.backupDir, relativePath);
60
69
  const backupDir = path_1.default.dirname(backupPath);
61
- // Create subdirectory structure
62
70
  if (!fs_1.default.existsSync(backupDir)) {
63
71
  fs_1.default.mkdirSync(backupDir, { recursive: true });
64
72
  }
65
- // Write backup
66
73
  fs_1.default.writeFileSync(backupPath, content, 'utf-8');
67
74
  logger_1.logger.verbose(`Created backup: ${backupPath}`);
68
75
  }
@@ -70,35 +77,13 @@ class FileWriter {
70
77
  logger_1.logger.warn(`Failed to create backup for ${filePath}:`, error);
71
78
  }
72
79
  }
73
- showDiff(filePath, original, modified) {
74
- const relativePath = path_1.default.relative(process.cwd(), filePath);
75
- logger_1.logger.info(`\nšŸ“„ ${relativePath} (dry-run)`);
76
- const originalLines = original.split('\n');
77
- const modifiedLines = modified.split('\n');
78
- // Simple diff - show first few changed lines
79
- const maxLines = Math.max(originalLines.length, modifiedLines.length);
80
- let changes = 0;
81
- for (let i = 0; i < maxLines && changes < 10; i++) {
82
- const orig = originalLines[i] || '';
83
- const mod = modifiedLines[i] || '';
84
- if (orig !== mod) {
85
- changes++;
86
- console.log(chalk_1.default.red(` - ${orig}`));
87
- console.log(chalk_1.default.green(` + ${mod}`));
88
- }
89
- }
90
- if (changes === 0) {
91
- logger_1.logger.verbose(' (no visible changes)');
92
- }
93
- }
94
- static restoreBackups() {
95
- const backupDir = path_1.default.join(process.cwd(), '.css-to-tailwind-backups');
80
+ static restoreBackups(projectRoot = process.cwd()) {
81
+ const backupDir = path_1.default.join(projectRoot, '.css-to-tailwind-backups');
96
82
  if (!fs_1.default.existsSync(backupDir)) {
97
83
  logger_1.logger.warn('No backups found to restore');
98
84
  return;
99
85
  }
100
86
  logger_1.logger.info('šŸ”„ Restoring files from backup...');
101
- // Recursively restore files
102
87
  const restoreRecursive = (dir) => {
103
88
  const items = fs_1.default.readdirSync(dir);
104
89
  for (const item of items) {
@@ -109,7 +94,7 @@ class FileWriter {
109
94
  }
110
95
  else {
111
96
  const relativePath = path_1.default.relative(backupDir, fullPath);
112
- const originalPath = path_1.default.join(process.cwd(), relativePath);
97
+ const originalPath = path_1.default.join(projectRoot, relativePath);
113
98
  try {
114
99
  fs_1.default.copyFileSync(fullPath, originalPath);
115
100
  logger_1.logger.success(`Restored: ${relativePath}`);
@@ -125,4 +110,14 @@ class FileWriter {
125
110
  }
126
111
  }
127
112
  exports.FileWriter = FileWriter;
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZVdyaXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9maWxlV3JpdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDRDQUFvQjtBQUNwQixnREFBd0I7QUFDeEIsa0RBQTBCO0FBQzFCLDJDQUF3QztBQU94QyxNQUFhLFVBQVU7SUFJckIsWUFBWSxPQUF5QjtRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQWdCLEVBQUUsT0FBZSxFQUFFLGVBQXVCO1FBQ3hFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNsRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxnQkFBZ0I7WUFDaEIsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUVuRCxhQUFhO1lBQ2IsWUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzdDLGVBQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLGNBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsZUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsUUFBUSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7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b0JBQW9CLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUF6SUQsZ0NBeUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vdXRpbHMvbG9nZ2VyJztcblxuZXhwb3J0IGludGVyZmFjZSBGaWxlV3JpdGVPcHRpb25zIHtcbiAgZHJ5UnVuOiBib29sZWFuO1xuICBiYWNrdXA/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgRmlsZVdyaXRlciB7XG4gIHByaXZhdGUgZHJ5UnVuOiBib29sZWFuO1xuICBwcml2YXRlIGJhY2t1cERpcjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEZpbGVXcml0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmRyeVJ1biA9IG9wdGlvbnMuZHJ5UnVuO1xuICAgIHRoaXMuYmFja3VwRGlyID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICcuY3NzLXRvLXRhaWx3aW5kLWJhY2t1cHMnKTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlRmlsZShmaWxlUGF0aDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIG9yaWdpbmFsQ29udGVudDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuZHJ5UnVuKSB7XG4gICAgICB0aGlzLnNob3dEaWZmKGZpbGVQYXRoLCBvcmlnaW5hbENvbnRlbnQsIGNvbnRlbnQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENyZWF0ZSBiYWNrdXBcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlQmFja3VwKGZpbGVQYXRoLCBvcmlnaW5hbENvbnRlbnQpO1xuXG4gICAgICAvLyBXcml0ZSBmaWxlXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBjb250ZW50LCAndXRmLTgnKTtcbiAgICAgIGxvZ2dlci5zdWNjZXNzKGDinI/vuI8gIE1vZGlmaWVkOiAke3BhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgZmlsZVBhdGgpfWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHdyaXRlICR7ZmlsZVBhdGh9OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVGaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5kcnlSdW4pIHtcbiAgICAgIGxvZ2dlci5pbmZvKGDwn5eR77iPICBXb3VsZCBkZWxldGU6ICR7cGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlUGF0aCl9YCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ3JlYXRlIGJhY2t1cCBiZWZvcmUgZGVsZXRpb25cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVCYWNrdXAoZmlsZVBhdGgsIGNvbnRlbnQpO1xuXG4gICAgICBmcy51bmxpbmtTeW5jKGZpbGVQYXRoKTtcbiAgICAgIGxvZ2dlci5zdWNjZXNzKGDwn5eR77iPICBEZWxldGVkOiAke3BhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgZmlsZVBhdGgpfWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSAke2ZpbGVQYXRofTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVCYWNrdXAoZmlsZVBhdGg6IHN0cmluZywgY29udGVudDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENyZWF0ZSBiYWNrdXAgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLmJhY2t1cERpcikpIHtcbiAgICAgICAgZnMubWtkaXJTeW5jKHRoaXMuYmFja3VwRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlUGF0aCk7XG4gICAgICBjb25zdCBiYWNrdXBQYXRoID0gcGF0aC5qb2luKHRoaXMuYmFja3VwRGlyLCByZWxhdGl2ZVBhdGgpO1xuICAgICAgY29uc3QgYmFja3VwRGlyID0gcGF0aC5kaXJuYW1lKGJhY2t1cFBhdGgpO1xuXG4gICAgICAvLyBDcmVhdGUgc3ViZGlyZWN0b3J5IHN0cnVjdHVyZVxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGJhY2t1cERpcikpIHtcbiAgICAgICAgZnMubWtkaXJTeW5jKGJhY2t1cERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdyaXRlIGJhY2t1cFxuICAgICAgZnMud3JpdGVGaWxlU3luYyhiYWNrdXBQYXRoLCBjb250ZW50LCAndXRmLTgnKTtcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBDcmVhdGVkIGJhY2t1cDogJHtiYWNrdXBQYXRofWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGNyZWF0ZSBiYWNrdXAgZm9yICR7ZmlsZVBhdGh9OmAsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dEaWZmKGZpbGVQYXRoOiBzdHJpbmcsIG9yaWdpbmFsOiBzdHJpbmcsIG1vZGlmaWVkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGZpbGVQYXRoKTtcbiAgICBsb2dnZXIuaW5mbyhgXFxu8J+ThCAke3JlbGF0aXZlUGF0aH0gKGRyeS1ydW4pYCk7XG4gICAgXG4gICAgY29uc3Qgb3JpZ2luYWxMaW5lcyA9IG9yaWdpbmFsLnNwbGl0KCdcXG4nKTtcbiAgICBjb25zdCBtb2RpZmllZExpbmVzID0gbW9kaWZpZWQuc3BsaXQoJ1xcbicpO1xuXG4gICAgLy8gU2ltcGxlIGRpZmYgLSBzaG93IGZpcnN0IGZldyBjaGFuZ2VkIGxpbmVzXG4gICAgY29uc3QgbWF4TGluZXMgPSBNYXRoLm1heChvcmlnaW5hbExpbmVzLmxlbmd0aCwgbW9kaWZpZWRMaW5lcy5sZW5ndGgpO1xuICAgIGxldCBjaGFuZ2VzID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4TGluZXMgJiYgY2hhbmdlcyA8IDEwOyBpKyspIHtcbiAgICAgIGNvbnN0IG9yaWcgPSBvcmlnaW5hbExpbmVzW2ldIHx8ICcnO1xuICAgICAgY29uc3QgbW9kID0gbW9kaWZpZWRMaW5lc1tpXSB8fCAnJztcblxuICAgICAgaWYgKG9yaWcgIT09IG1vZCkge1xuICAgICAgICBjaGFuZ2VzKys7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZChgICAtICR7b3JpZ31gKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGAgICsgJHttb2R9YCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzID09PSAwKSB7XG4gICAgICBsb2dnZXIudmVyYm9zZSgnICAobm8gdmlzaWJsZSBjaGFuZ2VzKScpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyByZXN0b3JlQmFja3VwcygpOiB2b2lkIHtcbiAgICBjb25zdCBiYWNrdXBEaXIgPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJy5jc3MtdG8tdGFpbHdpbmQtYmFja3VwcycpO1xuICAgIFxuICAgIGlmICghZnMuZXhpc3RzU3luYyhiYWNrdXBEaXIpKSB7XG4gICAgICBsb2dnZXIud2FybignTm8gYmFja3VwcyBmb3VuZCB0byByZXN0b3JlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nZ2VyLmluZm8oJ/CflIQgUmVzdG9yaW5nIGZpbGVzIGZyb20gYmFja3VwLi4uJyk7XG4gICAgXG4gICAgLy8gUmVjdXJzaXZlbHkgcmVzdG9yZSBmaWxlc1xuICAgIGNvbnN0IHJlc3RvcmVSZWN1cnNpdmUgPSAoZGlyOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gZnMucmVhZGRpclN5bmMoZGlyKTtcblxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKGRpciwgaXRlbSk7XG4gICAgICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhmdWxsUGF0aCk7XG5cbiAgICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIHJlc3RvcmVSZWN1cnNpdmUoZnVsbFBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoYmFja3VwRGlyLCBmdWxsUGF0aCk7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIHJlbGF0aXZlUGF0aCk7XG4gICAgICAgICAgXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZzLmNvcHlGaWxlU3luYyhmdWxsUGF0aCwgb3JpZ2luYWxQYXRoKTtcbiAgICAgICAgICAgIGxvZ2dlci5zdWNjZXNzKGBSZXN0b3JlZDogJHtyZWxhdGl2ZVBhdGh9YCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHJlc3RvcmUgJHtyZWxhdGl2ZVBhdGh9OmAsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVzdG9yZVJlY3Vyc2l2ZShiYWNrdXBEaXIpO1xuICAgIGxvZ2dlci5zdWNjZXNzKCfinIUgUmVzdG9yZSBjb21wbGV0ZScpO1xuICB9XG59XG4iXX0=
113
+ async function writeFiles(results, options) {
114
+ if (options.dryRun) {
115
+ return results.filter(r => r.hasChanges && r.status !== 'error').length;
116
+ }
117
+ const writer = new FileWriter({
118
+ dryRun: false,
119
+ projectRoot: options.projectRoot
120
+ });
121
+ return writer.writeResults(results);
122
+ }
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZVdyaXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9maWxlV3JpdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQXFJQSxnQ0FjQztBQW5KRCw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLDJDQUF3QztBQVF4QyxNQUFhLFVBQVU7SUFLckIsWUFBWSxPQUFvRDtRQUM5RCxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsU0FBUyxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQWdCLEVBQUUsT0FBZSxFQUFFLGVBQXVCO1FBQ3hFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDbkQsWUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzdDLGVBQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLGNBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0UsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGVBQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLFFBQVEsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BELE9BQU8sS0FBSyxDQUFDO1FB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YSxZQUFZLEVBQUUsQ0FBQyxDQUFDO29CQUM5QyxDQUFDO29CQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7d0JBQ2YsZUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsWUFBWSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzVELENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixlQUFNLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGO0FBekhELGdDQXlIQztBQUVNLEtBQUssVUFBVSxVQUFVLENBQzlCLE9BQXFCLEVBQ3JCLE9BQWlEO0lBRWpELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25CLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDMUUsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDO1FBQzVCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO0tBQ2pDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi91dGlscy9sb2dnZXInO1xuaW1wb3J0IHsgRmlsZVJlc3VsdCB9IGZyb20gJy4vdXRpbHMvcmVwb3J0ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVXcml0ZU9wdGlvbnMge1xuICBkcnlSdW46IGJvb2xlYW47XG4gIGJhY2t1cD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBGaWxlV3JpdGVyIHtcbiAgcHJpdmF0ZSBkcnlSdW46IGJvb2xlYW47XG4gIHByaXZhdGUgYmFja3VwRGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcHJvamVjdFJvb3Q6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBGaWxlV3JpdGVPcHRpb25zICYgeyBwcm9qZWN0Um9vdD86IHN0cmluZyB9KSB7XG4gICAgdGhpcy5kcnlSdW4gPSBvcHRpb25zLmRyeVJ1bjtcbiAgICB0aGlzLnByb2plY3RSb290ID0gb3B0aW9ucy5wcm9qZWN0Um9vdCB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIHRoaXMuYmFja3VwRGlyID0gcGF0aC5qb2luKHRoaXMucHJvamVjdFJvb3QsICcuY3NzLXRvLXRhaWx3aW5kLWJhY2t1cHMnKTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlRmlsZShmaWxlUGF0aDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIG9yaWdpbmFsQ29udGVudDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuZHJ5UnVuKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVCYWNrdXAoZmlsZVBhdGgsIG9yaWdpbmFsQ29udGVudCk7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBjb250ZW50LCAndXRmLTgnKTtcbiAgICAgIGxvZ2dlci5zdWNjZXNzKGDinI/vuI8gIE1vZGlmaWVkOiAke3BhdGgucmVsYXRpdmUodGhpcy5wcm9qZWN0Um9vdCwgZmlsZVBhdGgpfWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHdyaXRlICR7ZmlsZVBhdGh9OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVGaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5kcnlSdW4pIHtcbiAgICAgIGxvZ2dlci5pbmZvKGDwn5eR77iPICBXb3VsZCBkZWxldGU6ICR7cGF0aC5yZWxhdGl2ZSh0aGlzLnByb2plY3RSb290LCBmaWxlUGF0aCl9YCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZUJhY2t1cChmaWxlUGF0aCwgY29udGVudCk7XG4gICAgICBmcy51bmxpbmtTeW5jKGZpbGVQYXRoKTtcbiAgICAgIGxvZ2dlci5zdWNjZXNzKGDwn5eR77iPICBEZWxldGVkOiAke3BhdGgucmVsYXRpdmUodGhpcy5wcm9qZWN0Um9vdCwgZmlsZVBhdGgpfWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSAke2ZpbGVQYXRofTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgd3JpdGVSZXN1bHRzKHJlc3VsdHM6IEZpbGVSZXN1bHRbXSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgbGV0IHdyaXR0ZW4gPSAwO1xuICAgIFxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZXJyb3InKSBjb250aW51ZTtcbiAgICAgIGlmICghcmVzdWx0Lmhhc0NoYW5nZXMpIGNvbnRpbnVlO1xuICAgICAgXG4gICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgdGhpcy53cml0ZUZpbGUoXG4gICAgICAgIHJlc3VsdC5maWxlUGF0aCxcbiAgICAgICAgcmVzdWx0Lm5ld0NvbnRlbnQsXG4gICAgICAgIHJlc3VsdC5vcmlnaW5hbENvbnRlbnRcbiAgICAgICk7XG4gICAgICBcbiAgICAgIGlmIChzdWNjZXNzKSB3cml0dGVuKys7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB3cml0dGVuO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVCYWNrdXAoZmlsZVBhdGg6IHN0cmluZywgY29udGVudDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLmJhY2t1cERpcikpIHtcbiAgICAgICAgZnMubWtkaXJTeW5jKHRoaXMuYmFja3VwRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZSh0aGlzLnByb2plY3RSb290LCBmaWxlUGF0aCk7XG4gICAgICBjb25zdCBiYWNrdXBQYXRoID0gcGF0aC5qb2luKHRoaXMuYmFja3VwRGlyLCByZWxhdGl2ZVBhdGgpO1xuICAgICAgY29uc3QgYmFja3VwRGlyID0gcGF0aC5kaXJuYW1lKGJhY2t1cFBhdGgpO1xuXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYmFja3VwRGlyKSkge1xuICAgICAgICBmcy5ta2RpclN5bmMoYmFja3VwRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIH1cblxuICAgICAgZnMud3JpdGVGaWxlU3luYyhiYWNrdXBQYXRoLCBjb250ZW50LCAndXRmLTgnKTtcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBDcmVhdGVkIGJhY2t1cDogJHtiYWNrdXBQYXRofWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGNyZWF0ZSBiYWNrdXAgZm9yICR7ZmlsZVBhdGh9OmAsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgcmVzdG9yZUJhY2t1cHMocHJvamVjdFJvb3Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCkpOiB2b2lkIHtcbiAgICBjb25zdCBiYWNrdXBEaXIgPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICcuY3NzLXRvLXRhaWx3aW5kLWJhY2t1cHMnKTtcbiAgICBcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYmFja3VwRGlyKSkge1xuICAgICAgbG9nZ2VyLndhcm4oJ05vIGJhY2t1cHMgZm91bmQgdG8gcmVzdG9yZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZ2dlci5pbmZvKCfwn5SEIFJlc3RvcmluZyBmaWxlcyBmcm9tIGJhY2t1cC4uLicpO1xuICAgIFxuICAgIGNvbnN0IHJlc3RvcmVSZWN1cnNpdmUgPSAoZGlyOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gZnMucmVhZGRpclN5bmMoZGlyKTtcblxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKGRpciwgaXRlbSk7XG4gICAgICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhmdWxsUGF0aCk7XG5cbiAgICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIHJlc3RvcmVSZWN1cnNpdmUoZnVsbFBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoYmFja3VwRGlyLCBmdWxsUGF0aCk7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxQYXRoID0gcGF0aC5qb2luKHByb2plY3RSb290LCByZWxhdGl2ZVBhdGgpO1xuICAgICAgICAgIFxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmcy5jb3B5RmlsZVN5bmMoZnVsbFBhdGgsIG9yaWdpbmFsUGF0aCk7XG4gICAgICAgICAgICBsb2dnZXIuc3VjY2VzcyhgUmVzdG9yZWQ6ICR7cmVsYXRpdmVQYXRofWApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byByZXN0b3JlICR7cmVsYXRpdmVQYXRofTpgLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJlc3RvcmVSZWN1cnNpdmUoYmFja3VwRGlyKTtcbiAgICBsb2dnZXIuc3VjY2Vzcygn4pyFIFJlc3RvcmUgY29tcGxldGUnKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVGaWxlcyhcbiAgcmVzdWx0czogRmlsZVJlc3VsdFtdLFxuICBvcHRpb25zOiB7IGRyeVJ1bjogYm9vbGVhbjsgcHJvamVjdFJvb3Q6IHN0cmluZyB9XG4pOiBQcm9taXNlPG51bWJlcj4ge1xuICBpZiAob3B0aW9ucy5kcnlSdW4pIHtcbiAgICByZXR1cm4gcmVzdWx0cy5maWx0ZXIociA9PiByLmhhc0NoYW5nZXMgJiYgci5zdGF0dXMgIT09ICdlcnJvcicpLmxlbmd0aDtcbiAgfVxuICBcbiAgY29uc3Qgd3JpdGVyID0gbmV3IEZpbGVXcml0ZXIoeyBcbiAgICBkcnlSdW46IGZhbHNlLCBcbiAgICBwcm9qZWN0Um9vdDogb3B0aW9ucy5wcm9qZWN0Um9vdCBcbiAgfSk7XG4gIFxuICByZXR1cm4gd3JpdGVyLndyaXRlUmVzdWx0cyhyZXN1bHRzKTtcbn1cbiJdfQ==
package/dist/index.d.ts CHANGED
@@ -1,11 +1,13 @@
1
1
  export { scanProject, ScannedFile } from './scanner';
2
- export { transformFiles, TransformOptions, TransformResults } from './transformer';
2
+ export { transformFiles, transformFilesDetailed, TransformOptions, TransformResults, DetailedTransformResults } from './transformer';
3
3
  export { TailwindMapper, CSSProperty, ConversionResult } from './tailwindMapper';
4
4
  export { JSXParser, JSXTransformation, JSXParseResult } from './jsxParser';
5
5
  export { CSSParser, CSSRule, CSSParseResult, UtilityWithVariant, SelectorTarget } from './cssParser';
6
- export { FileWriter, FileWriteOptions } from './fileWriter';
6
+ export { FileWriter, FileWriteOptions, writeFiles } from './fileWriter';
7
7
  export { loadTailwindConfig, TailwindConfig } from './utils/config';
8
8
  export { logger } from './utils/logger';
9
+ export { Reporter, FileResult, SummaryStats, ReporterOptions } from './utils/reporter';
10
+ export { computeUnifiedDiff, formatDiff, computeAndFormatDiff, getChangeStats, DiffResult, DiffHunk, DiffLine } from './utils/diff';
9
11
  export { Breakpoint, MediaQueryInfo, getDefaultBreakpoints, resolveBreakpointsFromConfig, parseMediaQuery, findBreakpointForMinWidth, processMediaQuery, prefixWithBreakpoint } from './utils/breakpointResolver';
10
12
  export { ParsedSelector, PSEUDO_TO_VARIANT, SUPPORTED_PSEUDOS, parseSelector, mapPseudoToVariant, processPseudoSelector, parseMultipleSelectors } from './utils/pseudoSelectorResolver';
11
13
  export { VARIANT_ORDER, isResponsiveVariant, isPseudoVariant, sortVariants, deduplicateVariants, normalizeVariantOrder, assembleUtility, assembleUtilities, mergeUtilities, MergedUtility } from './utils/variantAssembler';
package/dist/index.js CHANGED
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.groupDescendantRulesByParent = exports.transformDescendantSelectors = exports.isHtmlElement = exports.processDescendantSelector = exports.isSimpleSelector = exports.isDescendantSelector = exports.parseDescendantSelector = exports.mergeUtilities = exports.assembleUtilities = exports.assembleUtility = exports.normalizeVariantOrder = exports.deduplicateVariants = exports.sortVariants = exports.isPseudoVariant = exports.isResponsiveVariant = exports.VARIANT_ORDER = exports.parseMultipleSelectors = exports.processPseudoSelector = exports.mapPseudoToVariant = exports.parseSelector = exports.SUPPORTED_PSEUDOS = exports.PSEUDO_TO_VARIANT = exports.prefixWithBreakpoint = exports.processMediaQuery = exports.findBreakpointForMinWidth = exports.parseMediaQuery = exports.resolveBreakpointsFromConfig = exports.getDefaultBreakpoints = exports.logger = exports.loadTailwindConfig = exports.FileWriter = exports.CSSParser = exports.JSXParser = exports.TailwindMapper = exports.transformFiles = exports.scanProject = void 0;
3
+ exports.groupDescendantRulesByParent = exports.transformDescendantSelectors = exports.isHtmlElement = exports.processDescendantSelector = exports.isSimpleSelector = exports.isDescendantSelector = exports.parseDescendantSelector = exports.mergeUtilities = exports.assembleUtilities = exports.assembleUtility = exports.normalizeVariantOrder = exports.deduplicateVariants = exports.sortVariants = exports.isPseudoVariant = exports.isResponsiveVariant = exports.VARIANT_ORDER = exports.parseMultipleSelectors = exports.processPseudoSelector = exports.mapPseudoToVariant = exports.parseSelector = exports.SUPPORTED_PSEUDOS = exports.PSEUDO_TO_VARIANT = exports.prefixWithBreakpoint = exports.processMediaQuery = exports.findBreakpointForMinWidth = exports.parseMediaQuery = exports.resolveBreakpointsFromConfig = exports.getDefaultBreakpoints = exports.getChangeStats = exports.computeAndFormatDiff = exports.formatDiff = exports.computeUnifiedDiff = exports.Reporter = exports.logger = exports.loadTailwindConfig = exports.writeFiles = exports.FileWriter = exports.CSSParser = exports.JSXParser = exports.TailwindMapper = exports.transformFilesDetailed = exports.transformFiles = exports.scanProject = void 0;
4
4
  // Export public API
5
5
  var scanner_1 = require("./scanner");
6
6
  Object.defineProperty(exports, "scanProject", { enumerable: true, get: function () { return scanner_1.scanProject; } });
7
7
  var transformer_1 = require("./transformer");
8
8
  Object.defineProperty(exports, "transformFiles", { enumerable: true, get: function () { return transformer_1.transformFiles; } });
9
+ Object.defineProperty(exports, "transformFilesDetailed", { enumerable: true, get: function () { return transformer_1.transformFilesDetailed; } });
9
10
  var tailwindMapper_1 = require("./tailwindMapper");
10
11
  Object.defineProperty(exports, "TailwindMapper", { enumerable: true, get: function () { return tailwindMapper_1.TailwindMapper; } });
11
12
  var jsxParser_1 = require("./jsxParser");
@@ -14,10 +15,18 @@ var cssParser_1 = require("./cssParser");
14
15
  Object.defineProperty(exports, "CSSParser", { enumerable: true, get: function () { return cssParser_1.CSSParser; } });
15
16
  var fileWriter_1 = require("./fileWriter");
16
17
  Object.defineProperty(exports, "FileWriter", { enumerable: true, get: function () { return fileWriter_1.FileWriter; } });
18
+ Object.defineProperty(exports, "writeFiles", { enumerable: true, get: function () { return fileWriter_1.writeFiles; } });
17
19
  var config_1 = require("./utils/config");
18
20
  Object.defineProperty(exports, "loadTailwindConfig", { enumerable: true, get: function () { return config_1.loadTailwindConfig; } });
19
21
  var logger_1 = require("./utils/logger");
20
22
  Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
23
+ var reporter_1 = require("./utils/reporter");
24
+ Object.defineProperty(exports, "Reporter", { enumerable: true, get: function () { return reporter_1.Reporter; } });
25
+ var diff_1 = require("./utils/diff");
26
+ Object.defineProperty(exports, "computeUnifiedDiff", { enumerable: true, get: function () { return diff_1.computeUnifiedDiff; } });
27
+ Object.defineProperty(exports, "formatDiff", { enumerable: true, get: function () { return diff_1.formatDiff; } });
28
+ Object.defineProperty(exports, "computeAndFormatDiff", { enumerable: true, get: function () { return diff_1.computeAndFormatDiff; } });
29
+ Object.defineProperty(exports, "getChangeStats", { enumerable: true, get: function () { return diff_1.getChangeStats; } });
21
30
  var breakpointResolver_1 = require("./utils/breakpointResolver");
22
31
  Object.defineProperty(exports, "getDefaultBreakpoints", { enumerable: true, get: function () { return breakpointResolver_1.getDefaultBreakpoints; } });
23
32
  Object.defineProperty(exports, "resolveBreakpointsFromConfig", { enumerable: true, get: function () { return breakpointResolver_1.resolveBreakpointsFromConfig; } });
@@ -51,4 +60,4 @@ Object.defineProperty(exports, "isHtmlElement", { enumerable: true, get: functio
51
60
  var jsxDescendantTransformer_1 = require("./jsxDescendantTransformer");
52
61
  Object.defineProperty(exports, "transformDescendantSelectors", { enumerable: true, get: function () { return jsxDescendantTransformer_1.transformDescendantSelectors; } });
53
62
  Object.defineProperty(exports, "groupDescendantRulesByParent", { enumerable: true, get: function () { return jsxDescendantTransformer_1.groupDescendantRulesByParent; } });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0JBQW9CO0FBQ3BCLHFDQUFxRDtBQUE1QyxzR0FBQSxXQUFXLE9BQUE7QUFDcEIsNkNBQW1GO0FBQTFFLDZHQUFBLGNBQWMsT0FBQTtBQUN2QixtREFBaUY7QUFBeEUsZ0hBQUEsY0FBYyxPQUFBO0FBQ3ZCLHlDQUEyRTtBQUFsRSxzR0FBQSxTQUFTLE9BQUE7QUFDbEIseUNBQXFHO0FBQTVGLHNHQUFBLFNBQVMsT0FBQTtBQUNsQiwyQ0FBNEQ7QUFBbkQsd0dBQUEsVUFBVSxPQUFBO0FBQ25CLHlDQUFvRTtBQUEzRCw0R0FBQSxrQkFBa0IsT0FBQTtBQUMzQix5Q0FBd0M7QUFBL0IsZ0dBQUEsTUFBTSxPQUFBO0FBQ2YsaUVBU29DO0FBTmxDLDJIQUFBLHFCQUFxQixPQUFBO0FBQ3JCLGtJQUFBLDRCQUE0QixPQUFBO0FBQzVCLHFIQUFBLGVBQWUsT0FBQTtBQUNmLCtIQUFBLHlCQUF5QixPQUFBO0FBQ3pCLHVIQUFBLGlCQUFpQixPQUFBO0FBQ2pCLDBIQUFBLG9CQUFvQixPQUFBO0FBRXRCLHlFQVF3QztBQU50QywySEFBQSxpQkFBaUIsT0FBQTtBQUNqQiwySEFBQSxpQkFBaUIsT0FBQTtBQUNqQix1SEFBQSxhQUFhLE9BQUE7QUFDYiw0SEFBQSxrQkFBa0IsT0FBQTtBQUNsQiwrSEFBQSxxQkFBcUIsT0FBQTtBQUNyQixnSUFBQSxzQkFBc0IsT0FBQTtBQUV4Qiw2REFXa0M7QUFWaEMsaUhBQUEsYUFBYSxPQUFBO0FBQ2IsdUhBQUEsbUJBQW1CLE9BQUE7QUFDbkIsbUhBQUEsZUFBZSxPQUFBO0FBQ2YsZ0hBQUEsWUFBWSxPQUFBO0FBQ1osdUhBQUEsbUJBQW1CLE9BQUE7QUFDbkIseUhBQUEscUJBQXFCLE9BQUE7QUFDckIsbUhBQUEsZUFBZSxPQUFBO0FBQ2YscUhBQUEsaUJBQWlCLE9BQUE7QUFDakIsa0hBQUEsY0FBYyxPQUFBO0FBR2hCLGlGQVM0QztBQUwxQyxxSUFBQSx1QkFBdUIsT0FBQTtBQUN2QixrSUFBQSxvQkFBb0IsT0FBQTtBQUNwQiw4SEFBQSxnQkFBZ0IsT0FBQTtBQUNoQix1SUFBQSx5QkFBeUIsT0FBQTtBQUN6QiwySEFBQSxhQUFhLE9BQUE7QUFFZix1RUFJb0M7QUFIbEMsd0lBQUEsNEJBQTRCLE9BQUE7QUFFNUIsd0lBQUEsNEJBQTRCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBFeHBvcnQgcHVibGljIEFQSVxuZXhwb3J0IHsgc2NhblByb2plY3QsIFNjYW5uZWRGaWxlIH0gZnJvbSAnLi9zY2FubmVyJztcbmV4cG9ydCB7IHRyYW5zZm9ybUZpbGVzLCBUcmFuc2Zvcm1PcHRpb25zLCBUcmFuc2Zvcm1SZXN1bHRzIH0gZnJvbSAnLi90cmFuc2Zvcm1lcic7XG5leHBvcnQgeyBUYWlsd2luZE1hcHBlciwgQ1NTUHJvcGVydHksIENvbnZlcnNpb25SZXN1bHQgfSBmcm9tICcuL3RhaWx3aW5kTWFwcGVyJztcbmV4cG9ydCB7IEpTWFBhcnNlciwgSlNYVHJhbnNmb3JtYXRpb24sIEpTWFBhcnNlUmVzdWx0IH0gZnJvbSAnLi9qc3hQYXJzZXInO1xuZXhwb3J0IHsgQ1NTUGFyc2VyLCBDU1NSdWxlLCBDU1NQYXJzZVJlc3VsdCwgVXRpbGl0eVdpdGhWYXJpYW50LCBTZWxlY3RvclRhcmdldCB9IGZyb20gJy4vY3NzUGFyc2VyJztcbmV4cG9ydCB7IEZpbGVXcml0ZXIsIEZpbGVXcml0ZU9wdGlvbnMgfSBmcm9tICcuL2ZpbGVXcml0ZXInO1xuZXhwb3J0IHsgbG9hZFRhaWx3aW5kQ29uZmlnLCBUYWlsd2luZENvbmZpZyB9IGZyb20gJy4vdXRpbHMvY29uZmlnJztcbmV4cG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vdXRpbHMvbG9nZ2VyJztcbmV4cG9ydCB7XG4gIEJyZWFrcG9pbnQsXG4gIE1lZGlhUXVlcnlJbmZvLFxuICBnZXREZWZhdWx0QnJlYWtwb2ludHMsXG4gIHJlc29sdmVCcmVha3BvaW50c0Zyb21Db25maWcsXG4gIHBhcnNlTWVkaWFRdWVyeSxcbiAgZmluZEJyZWFrcG9pbnRGb3JNaW5XaWR0aCxcbiAgcHJvY2Vzc01lZGlhUXVlcnksXG4gIHByZWZpeFdpdGhCcmVha3BvaW50XG59IGZyb20gJy4vdXRpbHMvYnJlYWtwb2ludFJlc29sdmVyJztcbmV4cG9ydCB7XG4gIFBhcnNlZFNlbGVjdG9yLFxuICBQU0VVRE9fVE9fVkFSSUFOVCxcbiAgU1VQUE9SVEVEX1BTRVVET1MsXG4gIHBhcnNlU2VsZWN0b3IsXG4gIG1hcFBzZXVkb1RvVmFyaWFudCxcbiAgcHJvY2Vzc1BzZXVkb1NlbGVjdG9yLFxuICBwYXJzZU11bHRpcGxlU2VsZWN0b3JzXG59IGZyb20gJy4vdXRpbHMvcHNldWRvU2VsZWN0b3JSZXNvbHZlcic7XG5leHBvcnQge1xuICBWQVJJQU5UX09SREVSLFxuICBpc1Jlc3BvbnNpdmVWYXJpYW50LFxuICBpc1BzZXVkb1ZhcmlhbnQsXG4gIHNvcnRWYXJpYW50cyxcbiAgZGVkdXBsaWNhdGVWYXJpYW50cyxcbiAgbm9ybWFsaXplVmFyaWFudE9yZGVyLFxuICBhc3NlbWJsZVV0aWxpdHksXG4gIGFzc2VtYmxlVXRpbGl0aWVzLFxuICBtZXJnZVV0aWxpdGllcyxcbiAgTWVyZ2VkVXRpbGl0eVxufSBmcm9tICcuL3V0aWxzL3ZhcmlhbnRBc3NlbWJsZXInO1xuZXhwb3J0IHtcbiAgRGVzY2VuZGFudFNlbGVjdG9yLFxuICBTZWxlY3RvclBhcnQsXG4gIFNlbGVjdG9yVHlwZSxcbiAgcGFyc2VEZXNjZW5kYW50U2VsZWN0b3IsXG4gIGlzRGVzY2VuZGFudFNlbGVjdG9yLFxuICBpc1NpbXBsZVNlbGVjdG9yLFxuICBwcm9jZXNzRGVzY2VuZGFudFNlbGVjdG9yLFxuICBpc0h0bWxFbGVtZW50XG59IGZyb20gJy4vdXRpbHMvZGVzY2VuZGFudFNlbGVjdG9yUmVzb2x2ZXInO1xuZXhwb3J0IHtcbiAgdHJhbnNmb3JtRGVzY2VuZGFudFNlbGVjdG9ycyxcbiAgRGVzY2VuZGFudFRyYW5zZm9ybVJlc3VsdCxcbiAgZ3JvdXBEZXNjZW5kYW50UnVsZXNCeVBhcmVudFxufSBmcm9tICcuL2pzeERlc2NlbmRhbnRUcmFuc2Zvcm1lcic7XG4iXX0=
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0JBQW9CO0FBQ3BCLHFDQUFxRDtBQUE1QyxzR0FBQSxXQUFXLE9BQUE7QUFDcEIsNkNBQXFJO0FBQTVILDZHQUFBLGNBQWMsT0FBQTtBQUFFLHFIQUFBLHNCQUFzQixPQUFBO0FBQy9DLG1EQUFpRjtBQUF4RSxnSEFBQSxjQUFjLE9BQUE7QUFDdkIseUNBQTJFO0FBQWxFLHNHQUFBLFNBQVMsT0FBQTtBQUNsQix5Q0FBcUc7QUFBNUYsc0dBQUEsU0FBUyxPQUFBO0FBQ2xCLDJDQUF3RTtBQUEvRCx3R0FBQSxVQUFVLE9BQUE7QUFBb0Isd0dBQUEsVUFBVSxPQUFBO0FBQ2pELHlDQUFvRTtBQUEzRCw0R0FBQSxrQkFBa0IsT0FBQTtBQUMzQix5Q0FBd0M7QUFBL0IsZ0dBQUEsTUFBTSxPQUFBO0FBQ2YsNkNBQXVGO0FBQTlFLG9HQUFBLFFBQVEsT0FBQTtBQUNqQixxQ0FRc0I7QUFQcEIsMEdBQUEsa0JBQWtCLE9BQUE7QUFDbEIsa0dBQUEsVUFBVSxPQUFBO0FBQ1YsNEdBQUEsb0JBQW9CLE9BQUE7QUFDcEIsc0dBQUEsY0FBYyxPQUFBO0FBS2hCLGlFQVNvQztBQU5sQywySEFBQSxxQkFBcUIsT0FBQTtBQUNyQixrSUFBQSw0QkFBNEIsT0FBQTtBQUM1QixxSEFBQSxlQUFlLE9BQUE7QUFDZiwrSEFBQSx5QkFBeUIsT0FBQTtBQUN6Qix1SEFBQSxpQkFBaUIsT0FBQTtBQUNqQiwwSEFBQSxvQkFBb0IsT0FBQTtBQUV0Qix5RUFRd0M7QUFOdEMsMkhBQUEsaUJBQWlCLE9BQUE7QUFDakIsMkhBQUEsaUJBQWlCLE9BQUE7QUFDakIsdUhBQUEsYUFBYSxPQUFBO0FBQ2IsNEhBQUEsa0JBQWtCLE9BQUE7QUFDbEIsK0hBQUEscUJBQXFCLE9BQUE7QUFDckIsZ0lBQUEsc0JBQXNCLE9BQUE7QUFFeEIsNkRBV2tDO0FBVmhDLGlIQUFBLGFBQWEsT0FBQTtBQUNiLHVIQUFBLG1CQUFtQixPQUFBO0FBQ25CLG1IQUFBLGVBQWUsT0FBQTtBQUNmLGdIQUFBLFlBQVksT0FBQTtBQUNaLHVIQUFBLG1CQUFtQixPQUFBO0FBQ25CLHlIQUFBLHFCQUFxQixPQUFBO0FBQ3JCLG1IQUFBLGVBQWUsT0FBQTtBQUNmLHFIQUFBLGlCQUFpQixPQUFBO0FBQ2pCLGtIQUFBLGNBQWMsT0FBQTtBQUdoQixpRkFTNEM7QUFMMUMscUlBQUEsdUJBQXVCLE9BQUE7QUFDdkIsa0lBQUEsb0JBQW9CLE9BQUE7QUFDcEIsOEhBQUEsZ0JBQWdCLE9BQUE7QUFDaEIsdUlBQUEseUJBQXlCLE9BQUE7QUFDekIsMkhBQUEsYUFBYSxPQUFBO0FBRWYsdUVBSW9DO0FBSGxDLHdJQUFBLDRCQUE0QixPQUFBO0FBRTVCLHdJQUFBLDRCQUE0QixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRXhwb3J0IHB1YmxpYyBBUElcbmV4cG9ydCB7IHNjYW5Qcm9qZWN0LCBTY2FubmVkRmlsZSB9IGZyb20gJy4vc2Nhbm5lcic7XG5leHBvcnQgeyB0cmFuc2Zvcm1GaWxlcywgdHJhbnNmb3JtRmlsZXNEZXRhaWxlZCwgVHJhbnNmb3JtT3B0aW9ucywgVHJhbnNmb3JtUmVzdWx0cywgRGV0YWlsZWRUcmFuc2Zvcm1SZXN1bHRzIH0gZnJvbSAnLi90cmFuc2Zvcm1lcic7XG5leHBvcnQgeyBUYWlsd2luZE1hcHBlciwgQ1NTUHJvcGVydHksIENvbnZlcnNpb25SZXN1bHQgfSBmcm9tICcuL3RhaWx3aW5kTWFwcGVyJztcbmV4cG9ydCB7IEpTWFBhcnNlciwgSlNYVHJhbnNmb3JtYXRpb24sIEpTWFBhcnNlUmVzdWx0IH0gZnJvbSAnLi9qc3hQYXJzZXInO1xuZXhwb3J0IHsgQ1NTUGFyc2VyLCBDU1NSdWxlLCBDU1NQYXJzZVJlc3VsdCwgVXRpbGl0eVdpdGhWYXJpYW50LCBTZWxlY3RvclRhcmdldCB9IGZyb20gJy4vY3NzUGFyc2VyJztcbmV4cG9ydCB7IEZpbGVXcml0ZXIsIEZpbGVXcml0ZU9wdGlvbnMsIHdyaXRlRmlsZXMgfSBmcm9tICcuL2ZpbGVXcml0ZXInO1xuZXhwb3J0IHsgbG9hZFRhaWx3aW5kQ29uZmlnLCBUYWlsd2luZENvbmZpZyB9IGZyb20gJy4vdXRpbHMvY29uZmlnJztcbmV4cG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vdXRpbHMvbG9nZ2VyJztcbmV4cG9ydCB7IFJlcG9ydGVyLCBGaWxlUmVzdWx0LCBTdW1tYXJ5U3RhdHMsIFJlcG9ydGVyT3B0aW9ucyB9IGZyb20gJy4vdXRpbHMvcmVwb3J0ZXInO1xuZXhwb3J0IHsgXG4gIGNvbXB1dGVVbmlmaWVkRGlmZiwgXG4gIGZvcm1hdERpZmYsIFxuICBjb21wdXRlQW5kRm9ybWF0RGlmZiwgXG4gIGdldENoYW5nZVN0YXRzLFxuICBEaWZmUmVzdWx0LFxuICBEaWZmSHVuayxcbiAgRGlmZkxpbmVcbn0gZnJvbSAnLi91dGlscy9kaWZmJztcbmV4cG9ydCB7XG4gIEJyZWFrcG9pbnQsXG4gIE1lZGlhUXVlcnlJbmZvLFxuICBnZXREZWZhdWx0QnJlYWtwb2ludHMsXG4gIHJlc29sdmVCcmVha3BvaW50c0Zyb21Db25maWcsXG4gIHBhcnNlTWVkaWFRdWVyeSxcbiAgZmluZEJyZWFrcG9pbnRGb3JNaW5XaWR0aCxcbiAgcHJvY2Vzc01lZGlhUXVlcnksXG4gIHByZWZpeFdpdGhCcmVha3BvaW50XG59IGZyb20gJy4vdXRpbHMvYnJlYWtwb2ludFJlc29sdmVyJztcbmV4cG9ydCB7XG4gIFBhcnNlZFNlbGVjdG9yLFxuICBQU0VVRE9fVE9fVkFSSUFOVCxcbiAgU1VQUE9SVEVEX1BTRVVET1MsXG4gIHBhcnNlU2VsZWN0b3IsXG4gIG1hcFBzZXVkb1RvVmFyaWFudCxcbiAgcHJvY2Vzc1BzZXVkb1NlbGVjdG9yLFxuICBwYXJzZU11bHRpcGxlU2VsZWN0b3JzXG59IGZyb20gJy4vdXRpbHMvcHNldWRvU2VsZWN0b3JSZXNvbHZlcic7XG5leHBvcnQge1xuICBWQVJJQU5UX09SREVSLFxuICBpc1Jlc3BvbnNpdmVWYXJpYW50LFxuICBpc1BzZXVkb1ZhcmlhbnQsXG4gIHNvcnRWYXJpYW50cyxcbiAgZGVkdXBsaWNhdGVWYXJpYW50cyxcbiAgbm9ybWFsaXplVmFyaWFudE9yZGVyLFxuICBhc3NlbWJsZVV0aWxpdHksXG4gIGFzc2VtYmxlVXRpbGl0aWVzLFxuICBtZXJnZVV0aWxpdGllcyxcbiAgTWVyZ2VkVXRpbGl0eVxufSBmcm9tICcuL3V0aWxzL3ZhcmlhbnRBc3NlbWJsZXInO1xuZXhwb3J0IHtcbiAgRGVzY2VuZGFudFNlbGVjdG9yLFxuICBTZWxlY3RvclBhcnQsXG4gIFNlbGVjdG9yVHlwZSxcbiAgcGFyc2VEZXNjZW5kYW50U2VsZWN0b3IsXG4gIGlzRGVzY2VuZGFudFNlbGVjdG9yLFxuICBpc1NpbXBsZVNlbGVjdG9yLFxuICBwcm9jZXNzRGVzY2VuZGFudFNlbGVjdG9yLFxuICBpc0h0bWxFbGVtZW50XG59IGZyb20gJy4vdXRpbHMvZGVzY2VuZGFudFNlbGVjdG9yUmVzb2x2ZXInO1xuZXhwb3J0IHtcbiAgdHJhbnNmb3JtRGVzY2VuZGFudFNlbGVjdG9ycyxcbiAgRGVzY2VuZGFudFRyYW5zZm9ybVJlc3VsdCxcbiAgZ3JvdXBEZXNjZW5kYW50UnVsZXNCeVBhcmVudFxufSBmcm9tICcuL2pzeERlc2NlbmRhbnRUcmFuc2Zvcm1lcic7XG4iXX0=
@@ -1,5 +1,6 @@
1
1
  import { ScannedFile } from './scanner';
2
2
  import { TailwindConfig } from './utils/config';
3
+ import { FileResult, SummaryStats } from './utils/reporter';
3
4
  export interface TransformOptions {
4
5
  dryRun: boolean;
5
6
  deleteCss: boolean;
@@ -16,4 +17,9 @@ export interface TransformResults {
16
17
  classesReplaced: number;
17
18
  warnings: number;
18
19
  }
20
+ export interface DetailedTransformResults {
21
+ fileResults: FileResult[];
22
+ stats: SummaryStats;
23
+ }
19
24
  export declare function transformFiles(files: ScannedFile[], options: TransformOptions): Promise<TransformResults>;
25
+ export declare function transformFilesDetailed(files: ScannedFile[], options: TransformOptions): Promise<DetailedTransformResults>;