codemerge-cli 1.3.1 → 1.3.2

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 (89) hide show
  1. package/dist/cli.d.ts +3 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +57 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/help.d.ts +10 -0
  6. package/dist/commands/help.d.ts.map +1 -0
  7. package/dist/commands/help.js +44 -0
  8. package/dist/commands/help.js.map +1 -0
  9. package/dist/commands/init.d.ts +9 -0
  10. package/dist/commands/init.d.ts.map +1 -0
  11. package/dist/commands/init.js +89 -0
  12. package/dist/commands/init.js.map +1 -0
  13. package/dist/commands/use.d.ts +6 -0
  14. package/dist/commands/use.d.ts.map +1 -0
  15. package/dist/commands/use.js +54 -0
  16. package/dist/commands/use.js.map +1 -0
  17. package/dist/commands/version.d.ts +9 -0
  18. package/dist/commands/version.d.ts.map +1 -0
  19. package/dist/commands/version.js +32 -0
  20. package/dist/commands/version.js.map +1 -0
  21. package/dist/commands/watch.d.ts +9 -0
  22. package/dist/commands/watch.d.ts.map +1 -0
  23. package/dist/commands/watch.js +83 -0
  24. package/dist/commands/watch.js.map +1 -0
  25. package/dist/core/codeMerger.d.ts +18 -0
  26. package/dist/core/codeMerger.d.ts.map +1 -0
  27. package/dist/core/codeMerger.js +281 -0
  28. package/dist/core/codeMerger.js.map +1 -0
  29. package/dist/core/config.d.ts +14 -0
  30. package/dist/core/config.d.ts.map +1 -0
  31. package/dist/core/config.js +78 -0
  32. package/dist/core/config.js.map +1 -0
  33. package/dist/core/fileWatcher.d.ts +13 -0
  34. package/dist/core/fileWatcher.d.ts.map +1 -0
  35. package/dist/core/fileWatcher.js +65 -0
  36. package/dist/core/fileWatcher.js.map +1 -0
  37. package/dist/core/httpServer.d.ts +31 -0
  38. package/dist/core/httpServer.d.ts.map +1 -0
  39. package/dist/core/httpServer.js +298 -0
  40. package/dist/core/httpServer.js.map +1 -0
  41. package/dist/core/mergeCache.d.ts +10 -0
  42. package/dist/core/mergeCache.d.ts.map +1 -0
  43. package/dist/core/mergeCache.js +22 -0
  44. package/dist/core/mergeCache.js.map +1 -0
  45. package/dist/types/config.d.ts +19 -0
  46. package/dist/types/config.d.ts.map +1 -0
  47. package/dist/types/config.js +2 -0
  48. package/dist/types/config.js.map +1 -0
  49. package/dist/types/merge.d.ts +95 -0
  50. package/dist/types/merge.d.ts.map +1 -0
  51. package/dist/types/merge.js +2 -0
  52. package/dist/types/merge.js.map +1 -0
  53. package/dist/utils/fileUtils.d.ts +12 -0
  54. package/dist/utils/fileUtils.d.ts.map +1 -0
  55. package/dist/utils/fileUtils.js +47 -0
  56. package/dist/utils/fileUtils.js.map +1 -0
  57. package/dist/utils/logger.d.ts +13 -0
  58. package/dist/utils/logger.d.ts.map +1 -0
  59. package/dist/utils/logger.js +34 -0
  60. package/dist/utils/logger.js.map +1 -0
  61. package/dist/utils/pathUtils.d.ts +10 -0
  62. package/dist/utils/pathUtils.d.ts.map +1 -0
  63. package/dist/utils/pathUtils.js +29 -0
  64. package/dist/utils/pathUtils.js.map +1 -0
  65. package/dist/utils/pattern.d.ts +8 -0
  66. package/dist/utils/pattern.d.ts.map +1 -0
  67. package/dist/utils/pattern.js +90 -0
  68. package/dist/utils/pattern.js.map +1 -0
  69. package/dist/utils/patternUtils.d.ts +8 -0
  70. package/dist/utils/patternUtils.d.ts.map +1 -0
  71. package/dist/utils/patternUtils.js +90 -0
  72. package/dist/utils/patternUtils.js.map +1 -0
  73. package/dist/utils/proccessCmd.d.ts +4 -0
  74. package/dist/utils/proccessCmd.d.ts.map +1 -0
  75. package/dist/utils/proccessCmd.js +29 -0
  76. package/dist/utils/proccessCmd.js.map +1 -0
  77. package/dist/utils/processUtils.d.ts +4 -0
  78. package/dist/utils/processUtils.d.ts.map +1 -0
  79. package/dist/utils/processUtils.js +29 -0
  80. package/dist/utils/processUtils.js.map +1 -0
  81. package/dist/utils/translate.d.ts +2 -0
  82. package/dist/utils/translate.d.ts.map +1 -0
  83. package/dist/utils/translate.js +29 -0
  84. package/dist/utils/translate.js.map +1 -0
  85. package/dist/utils/translateUtils.d.ts +2 -0
  86. package/dist/utils/translateUtils.d.ts.map +1 -0
  87. package/dist/utils/translateUtils.js +29 -0
  88. package/dist/utils/translateUtils.js.map +1 -0
  89. package/package.json +5 -5
@@ -0,0 +1,298 @@
1
+ import { createServer } from 'http';
2
+ import { exec } from 'child_process';
3
+ import { promisify } from 'util';
4
+ import { resolve } from 'path';
5
+ import { FileUtils } from '../utils/fileUtils.js';
6
+ import { Logger } from '../utils/logger.js';
7
+ const execAsync = promisify(exec);
8
+ export class HttpServer {
9
+ commandResult = null;
10
+ mergeOptions = null;
11
+ merger = null;
12
+ server = null;
13
+ projectName;
14
+ cache;
15
+ basePath;
16
+ port;
17
+ constructor(port, projectName, cache, basePath = process.cwd()) {
18
+ this.port = port;
19
+ this.projectName = projectName;
20
+ this.cache = cache;
21
+ this.basePath = basePath;
22
+ }
23
+ setMerger = (merger, options) => {
24
+ this.merger = merger;
25
+ this.mergeOptions = options;
26
+ };
27
+ start = async () => {
28
+ return new Promise((resolveFn, rejectFn) => {
29
+ this.server = createServer(this.handleRequest);
30
+ this.server.on('error', (error) => {
31
+ if (error.code === 'EADDRINUSE') {
32
+ Logger.error(`Port ${this.port} is already in use`);
33
+ return rejectFn(error);
34
+ }
35
+ Logger.error(`Server error: ${error.message}`);
36
+ rejectFn(error);
37
+ });
38
+ this.server.listen(this.port, () => resolveFn());
39
+ });
40
+ };
41
+ stop = () => {
42
+ if (!this.server)
43
+ return;
44
+ this.server.close();
45
+ this.server = null;
46
+ };
47
+ handleRequest = (req, res) => {
48
+ const url = req.url || '';
49
+ const method = req.method || 'GET';
50
+ if (url === '/upsert' && method === 'POST')
51
+ return void this.handleUpsertEndpoint(req, res);
52
+ if (url === '/delete-files' && method === 'POST')
53
+ return void this.handleDeleteFilesEndpoint(req, res);
54
+ if (url === '/commit' && method === 'POST')
55
+ return void this.handleCommitEndpoint(req, res);
56
+ if (url === '/selective-content' && method === 'POST')
57
+ return void this.handleSelectiveContentEndpoint(req, res);
58
+ if (url === '/content' || url === '/content/')
59
+ return void this.handleMergeEndpoint(res);
60
+ if (url === '/structure' || url === '/structure/')
61
+ return void this.handleStructureEndpoint(res);
62
+ if (url === '/command-output' || url === '/command-output/')
63
+ return void this.handleCommandOutputEndpoint(res);
64
+ if (url === '/health' || url === '/')
65
+ return void this.handleHealthEndpoint(res);
66
+ this.handleNotFound(res);
67
+ };
68
+ handleStructureEndpoint = async (res) => {
69
+ if (!this.merger) {
70
+ res.writeHead(503, { 'Content-Type': 'application/json' });
71
+ res.end(JSON.stringify({ error: 'Merger not initialized' }));
72
+ return;
73
+ }
74
+ try {
75
+ const structure = await this.merger.getProjectStructure();
76
+ res.writeHead(200, { 'Content-Type': 'application/json' });
77
+ res.end(JSON.stringify(structure));
78
+ }
79
+ catch (error) {
80
+ res.writeHead(500, { 'Content-Type': 'application/json' });
81
+ res.end(JSON.stringify({ error: error instanceof Error ? error.message : 'Failed to generate structure' }));
82
+ }
83
+ };
84
+ handleSelectiveContentEndpoint = (req, res) => {
85
+ let body = '';
86
+ req.on('data', chunk => body += chunk.toString());
87
+ req.on('end', async () => {
88
+ try {
89
+ if (!this.merger) {
90
+ res.writeHead(503, { 'Content-Type': 'application/json' });
91
+ res.end(JSON.stringify({ error: 'Merger not initialized' }));
92
+ return;
93
+ }
94
+ const data = JSON.parse(body);
95
+ if (!data.selectedPaths || !Array.isArray(data.selectedPaths)) {
96
+ res.writeHead(400, { 'Content-Type': 'application/json' });
97
+ res.end(JSON.stringify({ error: 'selectedPaths array is required' }));
98
+ return;
99
+ }
100
+ const result = await this.merger.getSelectiveContent(data.selectedPaths);
101
+ if (!result.success) {
102
+ res.writeHead(500, { 'Content-Type': 'application/json' });
103
+ res.end(JSON.stringify({ error: 'Failed to generate content', details: result.errors }));
104
+ return;
105
+ }
106
+ res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
107
+ res.end(result.content);
108
+ Logger.success(`Generated selective content with ${result.filesProcessed} files`);
109
+ }
110
+ catch (error) {
111
+ res.writeHead(400, { 'Content-Type': 'application/json' });
112
+ res.end(JSON.stringify({ error: error instanceof Error ? error.message : 'Invalid request' }));
113
+ }
114
+ });
115
+ req.on('error', error => {
116
+ res.writeHead(500, { 'Content-Type': 'application/json' });
117
+ res.end(JSON.stringify({ error: error.message }));
118
+ });
119
+ };
120
+ handleUpsertEndpoint = (req, res) => {
121
+ let body = '';
122
+ req.on('data', chunk => body += chunk.toString());
123
+ req.on('end', () => {
124
+ try {
125
+ const data = JSON.parse(body);
126
+ const result = this.processUpsert(data);
127
+ res.writeHead(result.success ? 200 : 400, { 'Content-Type': 'application/json' });
128
+ res.end(JSON.stringify(result));
129
+ if (!result.success)
130
+ return;
131
+ Logger.success(`Upserted ${result.filesProcessed} files`);
132
+ result.results.forEach(r => r.success ? Logger.plain(` ${r.action}: ${r.path}`) : Logger.error(` failed: ${r.path} - ${r.error}`));
133
+ this.executeConfiguredCommand();
134
+ }
135
+ catch (error) {
136
+ res.writeHead(400, { 'Content-Type': 'application/json' });
137
+ res.end(JSON.stringify({ success: false, error: error instanceof Error ? error.message : 'Invalid request' }));
138
+ }
139
+ });
140
+ req.on('error', error => {
141
+ res.writeHead(500, { 'Content-Type': 'application/json' });
142
+ res.end(JSON.stringify({ success: false, error: error.message }));
143
+ });
144
+ };
145
+ handleDeleteFilesEndpoint = (req, res) => {
146
+ let body = '';
147
+ req.on('data', chunk => body += chunk.toString());
148
+ req.on('end', () => {
149
+ try {
150
+ const data = JSON.parse(body);
151
+ const result = this.processDeleteFiles(data);
152
+ res.writeHead(result.success ? 200 : 400, { 'Content-Type': 'application/json' });
153
+ res.end(JSON.stringify(result));
154
+ if (!result.success)
155
+ return;
156
+ Logger.success(`Deleted ${result.filesProcessed} files`);
157
+ result.results.forEach(r => r.success ? Logger.plain(` deleted: ${r.path}`) : Logger.error(` failed: ${r.path} - ${r.error}`));
158
+ }
159
+ catch (error) {
160
+ res.writeHead(400, { 'Content-Type': 'application/json' });
161
+ res.end(JSON.stringify({ success: false, error: error instanceof Error ? error.message : 'Invalid request' }));
162
+ }
163
+ });
164
+ req.on('error', error => {
165
+ res.writeHead(500, { 'Content-Type': 'application/json' });
166
+ res.end(JSON.stringify({ success: false, error: error.message }));
167
+ });
168
+ };
169
+ handleCommitEndpoint = (req, res) => {
170
+ let body = '';
171
+ req.on('data', chunk => body += chunk.toString());
172
+ req.on('end', async () => {
173
+ try {
174
+ const data = JSON.parse(body);
175
+ if (!data.type || !data.message) {
176
+ res.writeHead(400, { 'Content-Type': 'application/json' });
177
+ res.end(JSON.stringify({ success: false, error: 'Commit type and message are required' }));
178
+ return;
179
+ }
180
+ const basePath = data.basePath ? resolve(data.basePath) : this.basePath;
181
+ const cleanType = data.type.replace(/"/g, '\\"');
182
+ const cleanMessage = data.message.replace(/"/g, '\\"');
183
+ const fullMessage = `${cleanType}: ${cleanMessage}`;
184
+ await execAsync('git add .', { cwd: basePath });
185
+ const { stdout, stderr } = await execAsync(`git commit -m "${fullMessage}"`, { cwd: basePath });
186
+ res.writeHead(200, { 'Content-Type': 'application/json' });
187
+ res.end(JSON.stringify({ success: true, output: stdout.trim(), error: stderr ? stderr.trim() : undefined }));
188
+ Logger.success(`Committed changes: ${fullMessage}`);
189
+ }
190
+ catch (error) {
191
+ const err = error;
192
+ const isNoChanges = err.stdout?.includes('nothing to commit') || err.message?.includes('nothing to commit');
193
+ res.writeHead(isNoChanges ? 200 : 500, { 'Content-Type': 'application/json' });
194
+ res.end(JSON.stringify({ success: isNoChanges, output: err.stdout, error: isNoChanges ? 'No changes to commit' : err.message }));
195
+ if (!isNoChanges)
196
+ Logger.error(`Git commit failed: ${err.message}`);
197
+ }
198
+ });
199
+ };
200
+ processUpsert = (data) => {
201
+ if (!data.files || !Array.isArray(data.files)) {
202
+ return { success: false, filesProcessed: 0, errors: ['Invalid request: files array is required'], results: [] };
203
+ }
204
+ const basePath = data.basePath ? resolve(data.basePath) : this.basePath;
205
+ const results = data.files.map(file => {
206
+ if (!file.path || typeof file.content !== 'string')
207
+ return { path: file.path || 'unknown', action: 'created', success: false, error: 'Invalid file entry' };
208
+ const fullPath = resolve(basePath, file.path);
209
+ if (!fullPath.startsWith(basePath))
210
+ return { path: file.path, action: 'created', success: false, error: 'Path outside base directory' };
211
+ try {
212
+ const action = FileUtils.upsert(fullPath, file.content);
213
+ return { path: file.path, action, success: true };
214
+ }
215
+ catch (error) {
216
+ return { path: file.path, action: 'created', success: false, error: error instanceof Error ? error.message : 'Unknown error' };
217
+ }
218
+ });
219
+ const successCount = results.filter(r => r.success).length;
220
+ const errors = results.filter(r => !r.success && r.error).map(r => `${r.path}: ${r.error}`);
221
+ return { success: successCount > 0, filesProcessed: successCount, errors, results };
222
+ };
223
+ processDeleteFiles = (data) => {
224
+ if (!data.files || !Array.isArray(data.files)) {
225
+ return { success: false, filesProcessed: 0, errors: ['Invalid request: files array is required'], results: [] };
226
+ }
227
+ const basePath = data.basePath ? resolve(data.basePath) : this.basePath;
228
+ const results = data.files.map(file => {
229
+ if (!file || typeof file !== 'string')
230
+ return { path: 'unknown', success: false, error: 'Invalid file path' };
231
+ const fullPath = resolve(basePath, file);
232
+ if (!fullPath.startsWith(basePath))
233
+ return { path: file, success: false, error: 'Path outside base directory' };
234
+ try {
235
+ const success = FileUtils.deleteFile(fullPath);
236
+ return { path: file, success, error: success ? undefined : 'File not found' };
237
+ }
238
+ catch (error) {
239
+ return { path: file, success: false, error: error instanceof Error ? error.message : 'Unknown error' };
240
+ }
241
+ });
242
+ const successCount = results.filter(r => r.success).length;
243
+ const errors = results.filter(r => !r.success && r.error !== 'File not found').map(r => `${r.path}: ${r.error}`);
244
+ return { success: successCount > 0 || data.files.length === 0, filesProcessed: successCount, errors, results };
245
+ };
246
+ executeConfiguredCommand = () => {
247
+ const command = this.mergeOptions?.onUpsertCommand;
248
+ if (!command)
249
+ return;
250
+ Logger.info(`Executing upsert command: ${command}`);
251
+ exec(command, (error, stdout, stderr) => {
252
+ const output = stdout + (stderr ? `\nSTDERR:\n${stderr}` : '');
253
+ const success = !error;
254
+ this.commandResult = { timestamp: new Date().toISOString(), command, output: output.trim(), error: error?.message, success };
255
+ success ? Logger.success(`Command executed successfully`) : Logger.error(`Command execution failed: ${error?.message}`);
256
+ });
257
+ };
258
+ handleCommandOutputEndpoint = (res) => {
259
+ res.writeHead(200, { 'Content-Type': 'application/json' });
260
+ res.end(JSON.stringify(this.commandResult || { status: 'no_command_executed' }));
261
+ };
262
+ handleMergeEndpoint = (res) => {
263
+ const content = this.cache.get();
264
+ if (!content) {
265
+ res.writeHead(503, { 'Content-Type': 'application/json' });
266
+ res.end(JSON.stringify({ error: 'Merge not ready yet' }));
267
+ return;
268
+ }
269
+ res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
270
+ res.end(content);
271
+ };
272
+ handleHealthEndpoint = (res) => {
273
+ res.writeHead(200, { 'Content-Type': 'application/json' });
274
+ res.end(JSON.stringify({
275
+ status: 'ok',
276
+ project: this.projectName,
277
+ endpoints: {
278
+ merge: '/content',
279
+ structure: '/structure',
280
+ selectiveContent: '/selective-content',
281
+ upsert: '/upsert',
282
+ deleteFiles: '/delete-files',
283
+ commit: '/commit',
284
+ commandOutput: '/command-output',
285
+ health: '/health'
286
+ },
287
+ mergeReady: this.cache.get() !== null
288
+ }));
289
+ };
290
+ handleNotFound = (res) => {
291
+ res.writeHead(404, { 'Content-Type': 'application/json' });
292
+ res.end(JSON.stringify({
293
+ error: 'Not found',
294
+ availableEndpoints: ['/', '/health', '/content', '/structure', '/selective-content', '/upsert', '/delete-files', '/commit', '/command-output']
295
+ }));
296
+ };
297
+ }
298
+ //# sourceMappingURL=httpServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpServer.js","sourceRoot":"","sources":["../../lib/core/httpServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare class MergeCache {
2
+ private content;
3
+ private lastUpdate;
4
+ set(content: string): void;
5
+ get(): string | null;
6
+ getLastUpdate(): Date | null;
7
+ clear(): void;
8
+ hasContent(): boolean;
9
+ }
10
+ //# sourceMappingURL=mergeCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeCache.d.ts","sourceRoot":"","sources":["../../lib/core/mergeCache.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,UAAU,CAAqB;IAEhC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK1B,GAAG,IAAI,MAAM,GAAG,IAAI;IAIpB,aAAa,IAAI,IAAI,GAAG,IAAI;IAI5B,KAAK,IAAI,IAAI;IAKb,UAAU,IAAI,OAAO;CAG7B"}
@@ -0,0 +1,22 @@
1
+ export class MergeCache {
2
+ content = null;
3
+ lastUpdate = null;
4
+ set(content) {
5
+ this.content = content;
6
+ this.lastUpdate = new Date();
7
+ }
8
+ get() {
9
+ return this.content;
10
+ }
11
+ getLastUpdate() {
12
+ return this.lastUpdate;
13
+ }
14
+ clear() {
15
+ this.content = null;
16
+ this.lastUpdate = null;
17
+ }
18
+ hasContent() {
19
+ return this.content !== null;
20
+ }
21
+ }
22
+ //# sourceMappingURL=mergeCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeCache.js","sourceRoot":"","sources":["../../lib/core/mergeCache.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAU;IACb,OAAO,GAAkB,IAAI,CAAC;IAC9B,UAAU,GAAgB,IAAI,CAAC;IAEhC,GAAG,CAAC,OAAe;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC;IAEM,GAAG;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEM,aAAa;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAEM,UAAU;QACf,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ export interface ConfigFile {
2
+ onStartCommandLogs?: boolean;
3
+ onStartCommand?: string;
4
+ onUpsertCommand?: string;
5
+ includePatterns?: string[];
6
+ ignorePatterns?: string[];
7
+ useGitignore?: boolean;
8
+ projectName?: string;
9
+ outputPath?: string;
10
+ port?: number;
11
+ }
12
+ export interface CommandOptions {
13
+ include?: string;
14
+ ignore?: string;
15
+ output?: string;
16
+ watch?: boolean;
17
+ port?: string;
18
+ }
19
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/types/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/types/config.ts"],"names":[],"mappings":""}
@@ -0,0 +1,95 @@
1
+ export interface MergeOptions {
2
+ includePatterns: string[];
3
+ ignorePatterns: string[];
4
+ onStartCommandLogs?: boolean;
5
+ onStartCommand?: string;
6
+ onUpsertCommand?: string;
7
+ useGitignore: boolean;
8
+ writeOutput: boolean;
9
+ projectName?: string;
10
+ watchDelay: number;
11
+ outputPath: string;
12
+ inputPath: string;
13
+ watch: boolean;
14
+ port: number;
15
+ }
16
+ export interface FileData {
17
+ relativePath: string;
18
+ content: string;
19
+ path: string;
20
+ }
21
+ export interface MergeResult {
22
+ filesProcessed: number;
23
+ outputPath: string;
24
+ success: boolean;
25
+ errors: string[];
26
+ content?: string;
27
+ }
28
+ export interface UpsertFile {
29
+ content: string;
30
+ path: string;
31
+ }
32
+ export interface UpsertRequest {
33
+ files: UpsertFile[];
34
+ basePath?: string;
35
+ }
36
+ export interface UpsertResult {
37
+ filesProcessed: number;
38
+ success: boolean;
39
+ errors: string[];
40
+ results: Array<{
41
+ action: 'created' | 'updated';
42
+ success: boolean;
43
+ error?: string;
44
+ path: string;
45
+ }>;
46
+ }
47
+ export interface CommandOutput {
48
+ timestamp: string;
49
+ success: boolean;
50
+ command: string;
51
+ error?: string;
52
+ output: string;
53
+ }
54
+ export interface ProjectNode {
55
+ type: 'file' | 'directory';
56
+ children?: ProjectNode[];
57
+ lines?: number;
58
+ path: string;
59
+ name: string;
60
+ }
61
+ export interface ProjectStructure {
62
+ fileTypes: Record<string, number>;
63
+ totalDirectories: number;
64
+ totalFiles: number;
65
+ root: ProjectNode;
66
+ }
67
+ export interface SelectiveContentRequest {
68
+ selectedPaths: string[];
69
+ }
70
+ export interface DeleteFilesRequest {
71
+ basePath?: string;
72
+ files: string[];
73
+ }
74
+ export interface DeleteFilesResult {
75
+ filesProcessed: number;
76
+ success: boolean;
77
+ errors: string[];
78
+ results: Array<{
79
+ success: boolean;
80
+ error?: string;
81
+ path: string;
82
+ }>;
83
+ }
84
+ export interface CommitRequest {
85
+ translate?: boolean;
86
+ basePath?: string;
87
+ message: string;
88
+ type: string;
89
+ }
90
+ export interface CommitResult {
91
+ success: boolean;
92
+ output?: string;
93
+ error?: string;
94
+ }
95
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../lib/types/merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../lib/types/merge.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ export declare class FileUtils {
2
+ private static readonly BINARY_EXTENSIONS;
3
+ static read(path: string): string;
4
+ static write(path: string, content: string): void;
5
+ static exists(path: string): boolean;
6
+ static isTextFile(filePath: string): boolean;
7
+ static readJson<T>(path: string): T;
8
+ static upsert(path: string, content: string): 'created' | 'updated';
9
+ static ensureDir(path: string): void;
10
+ static deleteFile(path: string): boolean;
11
+ }
12
+ //# sourceMappingURL=fileUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileUtils.d.ts","sourceRoot":"","sources":["../../lib/utils/fileUtils.ts"],"names":[],"mappings":"AAGA,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAMvC;WAEY,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;WAI1B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;WAI1C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;WAI7B,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;WAKrC,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC;WAK5B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;WAU5D,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;WAI7B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAKhD"}
@@ -0,0 +1,47 @@
1
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, unlinkSync } from 'fs';
2
+ import { dirname } from 'path';
3
+ export class FileUtils {
4
+ static BINARY_EXTENSIONS = [
5
+ '.png', '.jpg', '.jpeg', '.gif', '.ico', '.bmp', '.svg',
6
+ '.pdf', '.zip', '.tar', '.gz', '.rar', '.7z',
7
+ '.exe', '.dll', '.so', '.dylib',
8
+ '.mp3', '.mp4', '.avi', '.mov', '.wmv',
9
+ '.ttf', '.woff', '.woff2', '.eot'
10
+ ];
11
+ static read(path) {
12
+ return readFileSync(path, 'utf-8');
13
+ }
14
+ static write(path, content) {
15
+ writeFileSync(path, content, 'utf-8');
16
+ }
17
+ static exists(path) {
18
+ return existsSync(path);
19
+ }
20
+ static isTextFile(filePath) {
21
+ const lowerPath = filePath.toLowerCase();
22
+ return !this.BINARY_EXTENSIONS.some(ext => lowerPath.endsWith(ext));
23
+ }
24
+ static readJson(path) {
25
+ const content = this.read(path);
26
+ return JSON.parse(content);
27
+ }
28
+ static upsert(path, content) {
29
+ const exists = this.exists(path);
30
+ const dir = dirname(path);
31
+ if (!existsSync(dir))
32
+ mkdirSync(dir, { recursive: true });
33
+ this.write(path, content);
34
+ return exists ? 'updated' : 'created';
35
+ }
36
+ static ensureDir(path) {
37
+ if (!existsSync(path))
38
+ mkdirSync(path, { recursive: true });
39
+ }
40
+ static deleteFile(path) {
41
+ if (!this.exists(path))
42
+ return false;
43
+ unlinkSync(path);
44
+ return true;
45
+ }
46
+ }
47
+ //# sourceMappingURL=fileUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileUtils.js","sourceRoot":"","sources":["../../lib/utils/fileUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,OAAO,SAAS;IACZ,MAAM,CAAU,iBAAiB,GAAG;QAC1C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACvD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK;QAC5C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ;QAC/B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACtC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM;KAClC,CAAC;IAEK,MAAM,CAAC,IAAI,CAAC,IAAY;QAC7B,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,IAAY,EAAE,OAAe;QAC/C,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,IAAY;QAC/B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,QAAgB;QACvC,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAI,IAAY;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;IAClC,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,IAAY,EAAE,OAAe;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1D,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1B,OAAO,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACxC,CAAC;IAEM,MAAM,CAAC,SAAS,CAAC,IAAY;QAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,IAAY;QACnC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACrC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare class Logger {
2
+ private static readonly PREFIX;
3
+ private static readonly PROJECT_PREFIX;
4
+ static info(message: string): void;
5
+ static success(message: string): void;
6
+ static error(message: string): void;
7
+ static warning(message: string): void;
8
+ static project(message: string): void;
9
+ static plain(message: string): void;
10
+ static figlet(text: string): void;
11
+ static table(head: string[], colWidths: number[], data: any[][]): void;
12
+ }
13
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../lib/utils/logger.ts"],"names":[],"mappings":"AAIA,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAkC;IAChE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAqC;WAE7D,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;WAI3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;WAI9B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;WAI5B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;WAI9B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;WAI9B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;WAI5B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;WAI1B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI;CAK9E"}
@@ -0,0 +1,34 @@
1
+ import Table from 'cli-table';
2
+ import figlet from 'figlet';
3
+ import chalk from 'chalk';
4
+ export class Logger {
5
+ static PREFIX = chalk.redBright('[codemerge]');
6
+ static PROJECT_PREFIX = chalk.blueBright('[project-log]');
7
+ static info(message) {
8
+ console.log(`${this.PREFIX} ${chalk.cyan('[info]')} ${message}`);
9
+ }
10
+ static success(message) {
11
+ console.log(`${this.PREFIX} ${chalk.green('[success]')} ${message}`);
12
+ }
13
+ static error(message) {
14
+ console.error(`${this.PREFIX} ${chalk.redBright('[error]')} ${chalk.red(message)}`);
15
+ }
16
+ static warning(message) {
17
+ console.log(`${this.PREFIX} ${chalk.yellowBright('[warn]')} ${chalk.yellow(message)}`);
18
+ }
19
+ static project(message) {
20
+ console.log(`${this.PROJECT_PREFIX} ${message}`);
21
+ }
22
+ static plain(message) {
23
+ console.log(message);
24
+ }
25
+ static figlet(text) {
26
+ console.log(chalk.cyan(figlet.textSync(text)));
27
+ }
28
+ static table(head, colWidths, data) {
29
+ const table = new Table({ head, colWidths });
30
+ data.forEach(item => table.push(item));
31
+ console.log(table.toString());
32
+ }
33
+ }
34
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../lib/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,WAAW,CAAC;AAC9B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,OAAO,MAAM;IACT,MAAM,CAAU,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACxD,MAAM,CAAU,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAEpE,MAAM,CAAC,IAAI,CAAC,OAAe;QAChC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;IAEM,MAAM,CAAC,OAAO,CAAC,OAAe;QACnC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,OAAe;QACjC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;IAEM,MAAM,CAAC,OAAO,CAAC,OAAe;QACnC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IAEM,MAAM,CAAC,OAAO,CAAC,OAAe;QACnC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,IAAI,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,OAAe;QACjC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,IAAY;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,IAAc,EAAE,SAAmB,EAAE,IAAa;QACpE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChC,CAAC"}