codemerge-cli 1.1.4 → 1.1.6
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/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +74 -19
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/use.d.ts.map +1 -1
- package/dist/commands/use.js +18 -4
- package/dist/commands/use.js.map +1 -1
- package/dist/commands/watch.d.ts +10 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +73 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/core/codeMerger.d.ts +4 -0
- package/dist/core/codeMerger.d.ts.map +1 -1
- package/dist/core/codeMerger.js +97 -5
- package/dist/core/codeMerger.js.map +1 -1
- package/dist/core/config.d.ts +1 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +4 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/fileWatcher.d.ts +13 -0
- package/dist/core/fileWatcher.d.ts.map +1 -0
- package/dist/core/fileWatcher.js +61 -0
- package/dist/core/fileWatcher.js.map +1 -0
- package/dist/core/httpServer.d.ts +15 -0
- package/dist/core/httpServer.d.ts.map +1 -0
- package/dist/core/httpServer.js +76 -0
- package/dist/core/httpServer.js.map +1 -0
- package/dist/core/mergeCache.d.ts +10 -0
- package/dist/core/mergeCache.d.ts.map +1 -0
- package/dist/core/mergeCache.js +22 -0
- package/dist/core/mergeCache.js.map +1 -0
- package/dist/types/config.d.ts +4 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/merge.d.ts +2 -0
- package/dist/types/merge.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/core/fileGenerator.d.ts +0 -12
- package/dist/core/fileGenerator.d.ts.map +0 -1
- package/dist/core/fileGenerator.js +0 -40
- package/dist/core/fileGenerator.js.map +0 -1
- package/dist/core/fileTemplates.d.ts +0 -2
- package/dist/core/fileTemplates.d.ts.map +0 -1
- package/dist/core/fileTemplates.js +0 -2
- package/dist/core/fileTemplates.js.map +0 -1
package/dist/commands/init.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../lib/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../lib/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,qBAAa,WAAW;IACf,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;YAIzB,OAAO;IA8BrB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,eAAe;CAgBxB"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { FileUtils } from '../utils/fileUtils.js';
|
|
2
4
|
import { PathUtils } from '../utils/pathUtils.js';
|
|
3
5
|
import { Logger } from '../utils/logger.js';
|
|
4
6
|
export class InitCommand {
|
|
@@ -9,30 +11,83 @@ export class InitCommand {
|
|
|
9
11
|
try {
|
|
10
12
|
Logger.info('Initializing CodeMerge project...');
|
|
11
13
|
const resolvedPath = PathUtils.resolve(targetPath);
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
Logger.success('Created ' + result.filesCreated + ' files successfully');
|
|
17
|
-
Logger.plain('');
|
|
18
|
-
Logger.plain('Next steps:');
|
|
19
|
-
Logger.plain(' 1. npm install');
|
|
20
|
-
Logger.plain(' 2. npm run build');
|
|
21
|
-
Logger.plain(' 3. npm start use');
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
Logger.warning('Created ' + result.filesCreated + ' files with ' + result.errors.length + ' errors:');
|
|
25
|
-
result.errors.forEach(error => Logger.error(' ' + error));
|
|
26
|
-
if (!options.force) {
|
|
27
|
-
Logger.plain('');
|
|
28
|
-
Logger.plain('Use --force to overwrite existing files');
|
|
29
|
-
}
|
|
14
|
+
const configPath = join(resolvedPath, 'codemerge.json');
|
|
15
|
+
if (!options.force && FileUtils.exists(configPath)) {
|
|
16
|
+
Logger.error('codemerge.json already exists. Use --force to overwrite.');
|
|
17
|
+
process.exit(1);
|
|
30
18
|
}
|
|
19
|
+
const projectName = this.getProjectName(resolvedPath);
|
|
20
|
+
const outputPath = projectName ? `${projectName}-merged.txt` : 'merged-output.txt';
|
|
21
|
+
this.createConfigFile(configPath, outputPath, projectName);
|
|
22
|
+
this.updateGitignore(resolvedPath, outputPath);
|
|
23
|
+
Logger.success('Configuration file created: codemerge.json');
|
|
24
|
+
Logger.plain('Output file added to .gitignore: ' + outputPath);
|
|
25
|
+
Logger.plain('');
|
|
26
|
+
Logger.plain('Next steps:');
|
|
27
|
+
Logger.plain(' 1. Review codemerge.json settings');
|
|
28
|
+
Logger.plain(' 2. Run: codemerge use');
|
|
31
29
|
}
|
|
32
30
|
catch (error) {
|
|
33
31
|
Logger.error(error instanceof Error ? error.message : 'Unexpected error occurred');
|
|
34
32
|
process.exit(1);
|
|
35
33
|
}
|
|
36
34
|
}
|
|
35
|
+
getProjectName(basePath) {
|
|
36
|
+
const packagePath = join(basePath, 'package.json');
|
|
37
|
+
if (!FileUtils.exists(packagePath))
|
|
38
|
+
return null;
|
|
39
|
+
try {
|
|
40
|
+
const pkg = FileUtils.readJson(packagePath);
|
|
41
|
+
if (!pkg.name)
|
|
42
|
+
return null;
|
|
43
|
+
return pkg.name.replace(/^@.*?\//, '').replace(/[^a-zA-Z0-9-_]/g, '-').toLowerCase();
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
createConfigFile(configPath, outputPath, projectName) {
|
|
50
|
+
const config = {
|
|
51
|
+
projectName,
|
|
52
|
+
outputPath,
|
|
53
|
+
watch: false,
|
|
54
|
+
watchDelay: 1500,
|
|
55
|
+
useGitignore: true,
|
|
56
|
+
ignorePatterns: [
|
|
57
|
+
'node_modules/**',
|
|
58
|
+
'.git/**',
|
|
59
|
+
'dist/**',
|
|
60
|
+
'build/**',
|
|
61
|
+
'**/*.log',
|
|
62
|
+
'.env*',
|
|
63
|
+
'**/.DS_Store',
|
|
64
|
+
'coverage/**',
|
|
65
|
+
'.next/**',
|
|
66
|
+
'.nuxt/**'
|
|
67
|
+
],
|
|
68
|
+
includePatterns: [
|
|
69
|
+
'**/*.ts',
|
|
70
|
+
'**/*.js',
|
|
71
|
+
'**/*.tsx',
|
|
72
|
+
'**/*.jsx',
|
|
73
|
+
'**/*.json',
|
|
74
|
+
'**/*.md'
|
|
75
|
+
]
|
|
76
|
+
};
|
|
77
|
+
FileUtils.write(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
78
|
+
}
|
|
79
|
+
updateGitignore(basePath, outputFileName) {
|
|
80
|
+
const gitignorePath = join(basePath, '.gitignore');
|
|
81
|
+
if (!FileUtils.exists(gitignorePath)) {
|
|
82
|
+
FileUtils.write(gitignorePath, outputFileName + '\n');
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const content = readFileSync(gitignorePath, 'utf-8');
|
|
86
|
+
const lines = content.split('\n');
|
|
87
|
+
if (lines.some(line => line.trim() === outputFileName))
|
|
88
|
+
return;
|
|
89
|
+
const newContent = content.endsWith('\n') ? content + outputFileName + '\n' : content + '\n' + outputFileName + '\n';
|
|
90
|
+
FileUtils.write(gitignorePath, newContent);
|
|
91
|
+
}
|
|
37
92
|
}
|
|
38
93
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../lib/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../lib/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../lib/commands/use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../lib/commands/use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,qBAAa,UAAU;IACd,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;YAIzB,OAAO;CA8CtB"}
|
package/dist/commands/use.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CodeMerger } from '../core/codeMerger.js';
|
|
2
2
|
import { Config } from '../core/config.js';
|
|
3
|
+
import { FileWatcher } from '../core/fileWatcher.js';
|
|
3
4
|
import { Logger } from '../utils/logger.js';
|
|
4
5
|
export class UseCommand {
|
|
5
6
|
register(program) {
|
|
@@ -18,14 +19,27 @@ export class UseCommand {
|
|
|
18
19
|
});
|
|
19
20
|
const merger = new CodeMerger(mergeOptions);
|
|
20
21
|
const result = await merger.execute();
|
|
21
|
-
if (result.success) {
|
|
22
|
-
Logger.success('Merged ' + result.filesProcessed + ' files into ' + result.outputPath);
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
22
|
+
if (!result.success) {
|
|
25
23
|
Logger.error('Merge failed:');
|
|
26
24
|
result.errors.forEach(error => Logger.error(' ' + error));
|
|
27
25
|
process.exit(1);
|
|
28
26
|
}
|
|
27
|
+
Logger.success('Merged ' + result.filesProcessed + ' files into ' + result.outputPath);
|
|
28
|
+
if (mergeOptions.watch) {
|
|
29
|
+
const watcher = new FileWatcher(mergeOptions, async () => {
|
|
30
|
+
const result = await merger.execute();
|
|
31
|
+
if (result.success) {
|
|
32
|
+
Logger.success('Merged ' + result.filesProcessed + ' files into ' + result.outputPath);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
watcher.start();
|
|
36
|
+
process.on('SIGINT', () => {
|
|
37
|
+
Logger.plain('\nStopping watcher...');
|
|
38
|
+
watcher.stop();
|
|
39
|
+
process.exit(0);
|
|
40
|
+
});
|
|
41
|
+
Logger.plain('Press Ctrl+C to stop watching');
|
|
42
|
+
}
|
|
29
43
|
}
|
|
30
44
|
catch (error) {
|
|
31
45
|
Logger.error(error instanceof Error ? error.message : 'Unexpected error occurred');
|
package/dist/commands/use.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use.js","sourceRoot":"","sources":["../../lib/commands/use.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAI5C,MAAM,OAAO,UAAU;IACd,QAAQ,CAAC,OAAgB;QAC9B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,wBAAwB,CAAC,CAAC,MAAM,CAAC,qBAAqB,EAAE,8CAA8C,CAAC,CAAC,MAAM,CAAC,sBAAsB,EAAE,oCAAoC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtZ,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,SAAiB,EAAE,OAAuB;QAC9D,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAEtC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;gBACxC,SAAS;gBACT,UAAU,EAAE,OAAO,CAAC,MAAM;gBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;gBACtE,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;aAC1E,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YAEtC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"use.js","sourceRoot":"","sources":["../../lib/commands/use.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
export declare class WatchCommand {
|
|
3
|
+
register(program: Command): void;
|
|
4
|
+
private execute;
|
|
5
|
+
private performInitialMerge;
|
|
6
|
+
private readMergedContent;
|
|
7
|
+
private getProjectName;
|
|
8
|
+
private setupGracefulShutdown;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../lib/commands/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,qBAAa,YAAY;IAChB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;YAIzB,OAAO;YAqCP,mBAAmB;YAenB,iBAAiB;IAK/B,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,qBAAqB;CAW9B"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { basename } from 'path';
|
|
2
|
+
import { HttpServer } from '../core/httpServer.js';
|
|
3
|
+
import { CodeMerger } from '../core/codeMerger.js';
|
|
4
|
+
import { Config } from '../core/config.js';
|
|
5
|
+
import { MergeCache } from '../core/mergeCache.js';
|
|
6
|
+
import { FileWatcher } from '../core/fileWatcher.js';
|
|
7
|
+
import { Logger } from '../utils/logger.js';
|
|
8
|
+
export class WatchCommand {
|
|
9
|
+
register(program) {
|
|
10
|
+
program.command('watch').description('Start HTTP server and watch for file changes').argument('[path]', 'Input path to scan', '.').option('-o, --output <path>', 'Output file path').option('-p, --port <number>', 'Server port', '9876').option('--ignore <patterns>', 'Additional ignore patterns (comma-separated)').option('--include <patterns>', 'Include patterns (comma-separated)').action(this.execute.bind(this));
|
|
11
|
+
}
|
|
12
|
+
async execute(inputPath, options) {
|
|
13
|
+
try {
|
|
14
|
+
Logger.info('Starting watch mode...');
|
|
15
|
+
const config = Config.load(inputPath);
|
|
16
|
+
const mergeOptions = Config.merge(config, {
|
|
17
|
+
inputPath,
|
|
18
|
+
outputPath: options.output,
|
|
19
|
+
watch: true,
|
|
20
|
+
ignorePatterns: options.ignore ? options.ignore.split(',') : undefined,
|
|
21
|
+
includePatterns: options.include ? options.include.split(',') : undefined
|
|
22
|
+
});
|
|
23
|
+
const projectName = this.getProjectName(mergeOptions.outputPath);
|
|
24
|
+
const port = parseInt(options.port || '9876', 10);
|
|
25
|
+
const cache = new MergeCache();
|
|
26
|
+
await this.performInitialMerge(mergeOptions, cache);
|
|
27
|
+
const server = new HttpServer(port, projectName, cache);
|
|
28
|
+
await server.start();
|
|
29
|
+
const watcher = new FileWatcher(mergeOptions, async () => {
|
|
30
|
+
await this.performInitialMerge(mergeOptions, cache);
|
|
31
|
+
});
|
|
32
|
+
watcher.start();
|
|
33
|
+
this.setupGracefulShutdown(server, watcher);
|
|
34
|
+
Logger.success(`Server running at http://localhost:${port}/${projectName}`);
|
|
35
|
+
Logger.plain('Press Ctrl+C to stop');
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
Logger.error(error instanceof Error ? error.message : 'Unexpected error occurred');
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async performInitialMerge(options, cache) {
|
|
43
|
+
const merger = new CodeMerger(options);
|
|
44
|
+
const result = await merger.execute();
|
|
45
|
+
if (!result.success) {
|
|
46
|
+
Logger.error('Initial merge failed');
|
|
47
|
+
result.errors.forEach(error => Logger.error(' ' + error));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const content = await this.readMergedContent(result.outputPath);
|
|
51
|
+
cache.set(content);
|
|
52
|
+
Logger.success(`Merged ${result.filesProcessed} files`);
|
|
53
|
+
}
|
|
54
|
+
async readMergedContent(outputPath) {
|
|
55
|
+
const { readFileSync } = await import('fs');
|
|
56
|
+
return readFileSync(outputPath, 'utf-8');
|
|
57
|
+
}
|
|
58
|
+
getProjectName(outputPath) {
|
|
59
|
+
const fileName = basename(outputPath);
|
|
60
|
+
return fileName.replace(/\.[^/.]+$/, '').replace(/[^a-zA-Z0-9-_]/g, '-').toLowerCase();
|
|
61
|
+
}
|
|
62
|
+
setupGracefulShutdown(server, watcher) {
|
|
63
|
+
const shutdown = () => {
|
|
64
|
+
Logger.plain('\nStopping server and watcher...');
|
|
65
|
+
server.stop();
|
|
66
|
+
watcher.stop();
|
|
67
|
+
process.exit(0);
|
|
68
|
+
};
|
|
69
|
+
process.on('SIGINT', shutdown);
|
|
70
|
+
process.on('SIGTERM', shutdown);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../lib/commands/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,12 @@ export declare class CodeMerger {
|
|
|
4
4
|
constructor(options: MergeOptions);
|
|
5
5
|
execute(): Promise<MergeResult>;
|
|
6
6
|
private collectFiles;
|
|
7
|
+
private getIgnorePatterns;
|
|
8
|
+
private parseGitignore;
|
|
7
9
|
private mergeFiles;
|
|
8
10
|
private generateHeader;
|
|
11
|
+
private generateBreakdown;
|
|
12
|
+
private generateStructure;
|
|
9
13
|
private writeOutput;
|
|
10
14
|
}
|
|
11
15
|
//# sourceMappingURL=codeMerger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeMerger.d.ts","sourceRoot":"","sources":["../../lib/core/codeMerger.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAY,MAAM,mBAAmB,CAAC;AAE7E,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,EAAE,YAAY;IAIpB,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC;YAsB9B,YAAY;
|
|
1
|
+
{"version":3,"file":"codeMerger.d.ts","sourceRoot":"","sources":["../../lib/core/codeMerger.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAY,MAAM,mBAAmB,CAAC;AAE7E,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,EAAE,YAAY;IAIpB,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC;YAsB9B,YAAY;IA+B1B,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,iBAAiB;IA+CzB,OAAO,CAAC,WAAW;CAGpB"}
|
package/dist/core/codeMerger.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { resolve, relative } from 'path';
|
|
1
|
+
import { resolve, relative, join } from 'path';
|
|
2
2
|
import { glob } from 'glob';
|
|
3
3
|
import { FileUtils } from '../utils/fileUtils.js';
|
|
4
4
|
export class CodeMerger {
|
|
@@ -30,10 +30,11 @@ export class CodeMerger {
|
|
|
30
30
|
async collectFiles() {
|
|
31
31
|
const files = [];
|
|
32
32
|
const inputPath = resolve(this.options.inputPath);
|
|
33
|
+
const ignorePatterns = this.getIgnorePatterns(inputPath);
|
|
33
34
|
for (const pattern of this.options.includePatterns) {
|
|
34
35
|
const matchedFiles = await glob(pattern, {
|
|
35
36
|
cwd: inputPath,
|
|
36
|
-
ignore:
|
|
37
|
+
ignore: ignorePatterns,
|
|
37
38
|
nodir: true
|
|
38
39
|
});
|
|
39
40
|
for (const file of matchedFiles) {
|
|
@@ -54,8 +55,42 @@ export class CodeMerger {
|
|
|
54
55
|
}
|
|
55
56
|
return files.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
|
|
56
57
|
}
|
|
58
|
+
getIgnorePatterns(inputPath) {
|
|
59
|
+
const patterns = [...this.options.ignorePatterns];
|
|
60
|
+
if (!this.options.useGitignore)
|
|
61
|
+
return patterns;
|
|
62
|
+
const gitignorePath = join(inputPath, '.gitignore');
|
|
63
|
+
if (!FileUtils.exists(gitignorePath))
|
|
64
|
+
return patterns;
|
|
65
|
+
try {
|
|
66
|
+
const content = FileUtils.read(gitignorePath);
|
|
67
|
+
const gitignorePatterns = this.parseGitignore(content);
|
|
68
|
+
patterns.push(...gitignorePatterns);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
return patterns;
|
|
72
|
+
}
|
|
73
|
+
return patterns;
|
|
74
|
+
}
|
|
75
|
+
parseGitignore(content) {
|
|
76
|
+
return content
|
|
77
|
+
.split('\n')
|
|
78
|
+
.map(line => line.trim())
|
|
79
|
+
.filter(line => line && !line.startsWith('#'))
|
|
80
|
+
.map(line => {
|
|
81
|
+
if (line.endsWith('/'))
|
|
82
|
+
return line + '**';
|
|
83
|
+
if (!line.includes('/') && !line.includes('*'))
|
|
84
|
+
return '**/' + line;
|
|
85
|
+
return line;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
57
88
|
mergeFiles(files) {
|
|
58
|
-
const
|
|
89
|
+
const totalLines = files.reduce((sum, file) => sum + file.content.split('\n').length, 0);
|
|
90
|
+
const totalChars = files.reduce((sum, file) => sum + file.content.length, 0);
|
|
91
|
+
const breakdown = this.generateBreakdown(files);
|
|
92
|
+
const structure = this.generateStructure(files);
|
|
93
|
+
const header = this.generateHeader(files.length, totalLines, totalChars, breakdown, structure);
|
|
59
94
|
const separator = '='.repeat(80);
|
|
60
95
|
const mergedContent = files.map(file => {
|
|
61
96
|
const fileSeparator = '-'.repeat(40);
|
|
@@ -70,15 +105,72 @@ export class CodeMerger {
|
|
|
70
105
|
}).join('\n');
|
|
71
106
|
return [header, separator, '', mergedContent].join('\n');
|
|
72
107
|
}
|
|
73
|
-
generateHeader(fileCount) {
|
|
108
|
+
generateHeader(fileCount, totalLines, totalChars, breakdown, structure) {
|
|
74
109
|
const timestamp = new Date().toISOString();
|
|
75
110
|
return [
|
|
76
111
|
'# Code Merge Output',
|
|
77
112
|
'Generated at: ' + timestamp,
|
|
78
113
|
'Source path: ' + this.options.inputPath,
|
|
79
|
-
'Files processed: ' + fileCount
|
|
114
|
+
'Files processed: ' + fileCount,
|
|
115
|
+
'Total lines: ' + totalLines,
|
|
116
|
+
'Total characters: ' + totalChars,
|
|
117
|
+
'',
|
|
118
|
+
breakdown,
|
|
119
|
+
'',
|
|
120
|
+
structure
|
|
80
121
|
].join('\n');
|
|
81
122
|
}
|
|
123
|
+
generateBreakdown(files) {
|
|
124
|
+
const typeMap = new Map();
|
|
125
|
+
files.forEach(file => {
|
|
126
|
+
const ext = file.relativePath.split('.').pop() || 'unknown';
|
|
127
|
+
const lines = file.content.split('\n').length;
|
|
128
|
+
const current = typeMap.get(ext) || { count: 0, lines: 0 };
|
|
129
|
+
typeMap.set(ext, { count: current.count + 1, lines: current.lines + lines });
|
|
130
|
+
});
|
|
131
|
+
const sorted = Array.from(typeMap.entries()).sort((a, b) => b[1].count - a[1].count);
|
|
132
|
+
const lines = sorted.map(([ext, data]) => ` - ${ext}: ${data.count} files (${data.lines.toLocaleString()} lines)`);
|
|
133
|
+
return ['File types:', ...lines].join('\n');
|
|
134
|
+
}
|
|
135
|
+
generateStructure(files) {
|
|
136
|
+
const tree = {};
|
|
137
|
+
files.forEach(file => {
|
|
138
|
+
const parts = file.relativePath.split(/[/\\]/);
|
|
139
|
+
for (let i = 0; i < parts.length; i++) {
|
|
140
|
+
const path = parts.slice(0, i + 1).join('/');
|
|
141
|
+
const isFile = i === parts.length - 1;
|
|
142
|
+
if (isFile) {
|
|
143
|
+
const dir = i === 0 ? '.' : parts.slice(0, i).join('/');
|
|
144
|
+
if (!tree[dir])
|
|
145
|
+
tree[dir] = [];
|
|
146
|
+
tree[dir].push(file);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
const sortedPaths = Object.keys(tree).sort();
|
|
151
|
+
const lines = ['Project structure & file index:', './'];
|
|
152
|
+
const processed = new Set();
|
|
153
|
+
sortedPaths.forEach(path => {
|
|
154
|
+
const parts = path === '.' ? [] : path.split('/');
|
|
155
|
+
const depth = parts.length;
|
|
156
|
+
parts.forEach((part, index) => {
|
|
157
|
+
const currentPath = parts.slice(0, index + 1).join('/');
|
|
158
|
+
if (!processed.has(currentPath)) {
|
|
159
|
+
const indent = ' '.repeat(index + 1);
|
|
160
|
+
lines.push(`${indent}${part}/`);
|
|
161
|
+
processed.add(currentPath);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
const dirFiles = tree[path].sort((a, b) => a.relativePath.localeCompare(b.relativePath));
|
|
165
|
+
dirFiles.forEach(file => {
|
|
166
|
+
const fileName = file.relativePath.split(/[/\\]/).pop();
|
|
167
|
+
const lineCount = file.content.split('\n').length;
|
|
168
|
+
const indent = ' '.repeat(depth + 1);
|
|
169
|
+
lines.push(`${indent}- ${fileName} (${lineCount.toLocaleString()} lines)`);
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
return lines.join('\n');
|
|
173
|
+
}
|
|
82
174
|
writeOutput(content) {
|
|
83
175
|
FileUtils.write(this.options.outputPath, content);
|
|
84
176
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeMerger.js","sourceRoot":"","sources":["../../lib/core/codeMerger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"codeMerger.js","sourceRoot":"","sources":["../../lib/core/codeMerger.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export declare class Config {
|
|
|
4
4
|
private static readonly CONFIG_FILENAMES;
|
|
5
5
|
private static readonly DEFAULT_IGNORE_PATTERNS;
|
|
6
6
|
private static readonly DEFAULT_INCLUDE_PATTERNS;
|
|
7
|
+
private static readonly DEFAULT_WATCH_DELAY;
|
|
7
8
|
static load(basePath: string): ConfigFile;
|
|
8
9
|
private static parseConfigFile;
|
|
9
10
|
private static loadPackageJsonConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/core/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAGtC;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAW7C;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAO9C;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/core/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAGtC;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAW7C;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAO9C;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAQ;WAErC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAahD,OAAO,CAAC,MAAM,CAAC,eAAe;IAQ9B,OAAO,CAAC,MAAM,CAAC,qBAAqB;WAYtB,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY;CAWtF"}
|
package/dist/core/config.js
CHANGED
|
@@ -26,6 +26,7 @@ export class Config {
|
|
|
26
26
|
'**/*.json',
|
|
27
27
|
'**/*.md'
|
|
28
28
|
];
|
|
29
|
+
static DEFAULT_WATCH_DELAY = 1500;
|
|
29
30
|
static load(basePath) {
|
|
30
31
|
const resolvedPath = PathUtils.resolve(basePath);
|
|
31
32
|
for (const filename of this.CONFIG_FILENAMES) {
|
|
@@ -61,8 +62,10 @@ export class Config {
|
|
|
61
62
|
inputPath: options.inputPath || process.cwd(),
|
|
62
63
|
outputPath: options.outputPath || config.outputPath || 'merged-output.txt',
|
|
63
64
|
watch: options.watch ?? config.watch ?? false,
|
|
65
|
+
watchDelay: options.watchDelay ?? config.watchDelay ?? this.DEFAULT_WATCH_DELAY,
|
|
64
66
|
ignorePatterns: options.ignorePatterns || config.ignorePatterns || this.DEFAULT_IGNORE_PATTERNS,
|
|
65
|
-
includePatterns: options.includePatterns || config.includePatterns || this.DEFAULT_INCLUDE_PATTERNS
|
|
67
|
+
includePatterns: options.includePatterns || config.includePatterns || this.DEFAULT_INCLUDE_PATTERNS,
|
|
68
|
+
useGitignore: options.useGitignore ?? config.useGitignore ?? true
|
|
66
69
|
};
|
|
67
70
|
}
|
|
68
71
|
}
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAKlD,MAAM,OAAO,MAAM;IACT,MAAM,CAAU,gBAAgB,GAAG;QACzC,gBAAgB;QAChB,uBAAuB;KACxB,CAAC;IAEM,MAAM,CAAU,uBAAuB,GAAG;QAChD,iBAAiB;QACjB,SAAS;QACT,SAAS;QACT,UAAU;QACV,UAAU;QACV,OAAO;QACP,cAAc;QACd,aAAa;QACb,UAAU;QACV,UAAU;KACX,CAAC;IAEM,MAAM,CAAU,wBAAwB,GAAG;QACjD,SAAS;QACT,SAAS;QACT,UAAU;QACV,UAAU;QACV,WAAW;QACX,SAAS;KACV,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAKlD,MAAM,OAAO,MAAM;IACT,MAAM,CAAU,gBAAgB,GAAG;QACzC,gBAAgB;QAChB,uBAAuB;KACxB,CAAC;IAEM,MAAM,CAAU,uBAAuB,GAAG;QAChD,iBAAiB;QACjB,SAAS;QACT,SAAS;QACT,UAAU;QACV,UAAU;QACV,OAAO;QACP,cAAc;QACd,aAAa;QACb,UAAU;QACV,UAAU;KACX,CAAC;IAEM,MAAM,CAAU,wBAAwB,GAAG;QACjD,SAAS;QACT,SAAS;QACT,UAAU;QACV,UAAU;QACV,WAAW;QACX,SAAS;KACV,CAAC;IAEM,MAAM,CAAU,mBAAmB,GAAG,IAAI,CAAC;IAE5C,MAAM,CAAC,IAAI,CAAC,QAAgB;QACjC,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEjD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAChD,IAAI,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjC,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,IAAY;QACzC,IAAI,CAAC;YACH,OAAO,SAAS,CAAC,QAAQ,CAAa,IAAI,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,QAAgB;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;YAAE,OAAO,EAAE,CAAC;QAE9C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAM,WAAW,CAAC,CAAC;YACjD,OAAO,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,MAAkB,EAAE,OAA8B;QACpE,OAAO;YACL,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE;YAC7C,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,IAAI,mBAAmB;YAC1E,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,KAAK;YAC7C,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,mBAAmB;YAC/E,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,uBAAuB;YAC/F,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,wBAAwB;YACnG,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI;SAClE,CAAC;IACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { MergeOptions } from '../types/merge.js';
|
|
2
|
+
export declare class FileWatcher {
|
|
3
|
+
private watcher;
|
|
4
|
+
private options;
|
|
5
|
+
private onChange;
|
|
6
|
+
private debounceTimer;
|
|
7
|
+
private changedFiles;
|
|
8
|
+
constructor(options: MergeOptions, onChange: () => Promise<void>);
|
|
9
|
+
start(): void;
|
|
10
|
+
stop(): void;
|
|
11
|
+
private handleFileChange;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=fileWatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileWatcher.d.ts","sourceRoot":"","sources":["../../lib/core/fileWatcher.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,YAAY,CAA0B;gBAElC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAKzD,KAAK,IAAI,IAAI;IAkBb,IAAI,IAAI,IAAI;IAYnB,OAAO,CAAC,gBAAgB;CAwBzB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { resolve } from 'path';
|
|
2
|
+
import chokidar from 'chokidar';
|
|
3
|
+
import { Logger } from '../utils/logger.js';
|
|
4
|
+
export class FileWatcher {
|
|
5
|
+
watcher = null;
|
|
6
|
+
options;
|
|
7
|
+
onChange;
|
|
8
|
+
debounceTimer = null;
|
|
9
|
+
changedFiles = new Set();
|
|
10
|
+
constructor(options, onChange) {
|
|
11
|
+
this.options = options;
|
|
12
|
+
this.onChange = onChange;
|
|
13
|
+
}
|
|
14
|
+
start() {
|
|
15
|
+
if (this.watcher)
|
|
16
|
+
this.stop();
|
|
17
|
+
const outputPath = resolve(this.options.outputPath);
|
|
18
|
+
this.watcher = chokidar.watch(this.options.inputPath, {
|
|
19
|
+
ignored: [...this.options.ignorePatterns, outputPath],
|
|
20
|
+
persistent: true,
|
|
21
|
+
ignoreInitial: true
|
|
22
|
+
});
|
|
23
|
+
this.watcher.on('change', this.handleFileChange.bind(this));
|
|
24
|
+
this.watcher.on('add', this.handleFileChange.bind(this));
|
|
25
|
+
this.watcher.on('unlink', this.handleFileChange.bind(this));
|
|
26
|
+
Logger.info('File watcher started');
|
|
27
|
+
}
|
|
28
|
+
stop() {
|
|
29
|
+
if (this.watcher) {
|
|
30
|
+
this.watcher.close();
|
|
31
|
+
this.watcher = null;
|
|
32
|
+
}
|
|
33
|
+
if (this.debounceTimer) {
|
|
34
|
+
clearTimeout(this.debounceTimer);
|
|
35
|
+
this.debounceTimer = null;
|
|
36
|
+
}
|
|
37
|
+
this.changedFiles.clear();
|
|
38
|
+
}
|
|
39
|
+
handleFileChange(path) {
|
|
40
|
+
const outputPath = resolve(this.options.outputPath);
|
|
41
|
+
const fullPath = resolve(path);
|
|
42
|
+
if (fullPath === outputPath)
|
|
43
|
+
return;
|
|
44
|
+
this.changedFiles.add(path);
|
|
45
|
+
if (this.debounceTimer)
|
|
46
|
+
clearTimeout(this.debounceTimer);
|
|
47
|
+
this.debounceTimer = setTimeout(async () => {
|
|
48
|
+
const files = Array.from(this.changedFiles);
|
|
49
|
+
this.changedFiles.clear();
|
|
50
|
+
Logger.info(`Files changed (${files.length}):`);
|
|
51
|
+
files.forEach(file => Logger.plain(` ${file}`));
|
|
52
|
+
try {
|
|
53
|
+
await this.onChange();
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
Logger.error('Error during file change handling: ' + (error instanceof Error ? error.message : 'Unknown error'));
|
|
57
|
+
}
|
|
58
|
+
}, this.options.watchDelay);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=fileWatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileWatcher.js","sourceRoot":"","sources":["../../lib/core/fileWatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { MergeCache } from './mergeCache.js';
|
|
2
|
+
export declare class HttpServer {
|
|
3
|
+
private server;
|
|
4
|
+
private port;
|
|
5
|
+
private projectName;
|
|
6
|
+
private cache;
|
|
7
|
+
constructor(port: number, projectName: string, cache: MergeCache);
|
|
8
|
+
start(): Promise<void>;
|
|
9
|
+
stop(): void;
|
|
10
|
+
private handleRequest;
|
|
11
|
+
private handleMergeEndpoint;
|
|
12
|
+
private handleHealthEndpoint;
|
|
13
|
+
private handleNotFound;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=httpServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpServer.d.ts","sourceRoot":"","sources":["../../lib/core/httpServer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAa;gBAEd,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU;IAMnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB5B,IAAI,IAAI,IAAI;IAOnB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,cAAc;CAOvB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { createServer } from 'http';
|
|
2
|
+
import { Logger } from '../utils/logger.js';
|
|
3
|
+
export class HttpServer {
|
|
4
|
+
server = null;
|
|
5
|
+
port;
|
|
6
|
+
projectName;
|
|
7
|
+
cache;
|
|
8
|
+
constructor(port, projectName, cache) {
|
|
9
|
+
this.port = port;
|
|
10
|
+
this.projectName = projectName;
|
|
11
|
+
this.cache = cache;
|
|
12
|
+
}
|
|
13
|
+
async start() {
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
this.server = createServer(this.handleRequest.bind(this));
|
|
16
|
+
this.server.on('error', (error) => {
|
|
17
|
+
if (error.code === 'EADDRINUSE') {
|
|
18
|
+
Logger.error(`Port ${this.port} is already in use`);
|
|
19
|
+
reject(error);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
Logger.error('Server error: ' + error.message);
|
|
23
|
+
reject(error);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
this.server.listen(this.port, () => {
|
|
27
|
+
resolve();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
stop() {
|
|
32
|
+
if (this.server) {
|
|
33
|
+
this.server.close();
|
|
34
|
+
this.server = null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
handleRequest(req, res) {
|
|
38
|
+
const url = req.url || '';
|
|
39
|
+
if (url === `/${this.projectName}` || url === `/${this.projectName}/`) {
|
|
40
|
+
this.handleMergeEndpoint(res);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (url === '/health' || url === '/') {
|
|
44
|
+
this.handleHealthEndpoint(res);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
this.handleNotFound(res);
|
|
48
|
+
}
|
|
49
|
+
handleMergeEndpoint(res) {
|
|
50
|
+
const content = this.cache.get();
|
|
51
|
+
if (!content) {
|
|
52
|
+
res.writeHead(503, { 'Content-Type': 'application/json' });
|
|
53
|
+
res.end(JSON.stringify({ error: 'Merge not ready yet' }));
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
|
|
57
|
+
res.end(content);
|
|
58
|
+
}
|
|
59
|
+
handleHealthEndpoint(res) {
|
|
60
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
61
|
+
res.end(JSON.stringify({
|
|
62
|
+
status: 'ok',
|
|
63
|
+
project: this.projectName,
|
|
64
|
+
endpoint: `/${this.projectName}`,
|
|
65
|
+
mergeReady: this.cache.get() !== null
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
handleNotFound(res) {
|
|
69
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
70
|
+
res.end(JSON.stringify({
|
|
71
|
+
error: 'Not found',
|
|
72
|
+
availableEndpoints: ['/', '/health', `/${this.projectName}`]
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# 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 @@
|
|
|
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"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
export interface ConfigFile {
|
|
2
2
|
outputPath?: string;
|
|
3
3
|
watch?: boolean;
|
|
4
|
+
watchDelay?: number;
|
|
4
5
|
ignorePatterns?: string[];
|
|
5
6
|
includePatterns?: string[];
|
|
7
|
+
projectName?: string;
|
|
8
|
+
useGitignore?: boolean;
|
|
6
9
|
}
|
|
7
10
|
export interface CommandOptions {
|
|
8
11
|
output?: string;
|
|
9
12
|
watch?: boolean;
|
|
10
13
|
ignore?: string;
|
|
11
14
|
include?: string;
|
|
15
|
+
port?: string;
|
|
12
16
|
}
|
|
13
17
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/types/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/types/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
package/dist/types/merge.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../lib/types/merge.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../lib/types/merge.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB"}
|
package/package.json
CHANGED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export interface GenerateResult {
|
|
2
|
-
success: boolean;
|
|
3
|
-
filesCreated: number;
|
|
4
|
-
errors: string[];
|
|
5
|
-
}
|
|
6
|
-
export declare class FileGenerator {
|
|
7
|
-
private basePath;
|
|
8
|
-
constructor(basePath: string);
|
|
9
|
-
generate(force?: boolean): GenerateResult;
|
|
10
|
-
private ensureDirectory;
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=fileGenerator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fileGenerator.d.ts","sourceRoot":"","sources":["../../lib/core/fileGenerator.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAIrB,QAAQ,CAAC,KAAK,GAAE,OAAe,GAAG,cAAc;IA2BvD,OAAO,CAAC,eAAe;CAKxB"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { mkdirSync } from 'fs';
|
|
2
|
-
import { join, dirname } from 'path';
|
|
3
|
-
import { FileUtils } from '../utils/fileUtils.js';
|
|
4
|
-
import { FILE_TEMPLATES } from './fileTemplates.js';
|
|
5
|
-
export class FileGenerator {
|
|
6
|
-
basePath;
|
|
7
|
-
constructor(basePath) {
|
|
8
|
-
this.basePath = basePath;
|
|
9
|
-
}
|
|
10
|
-
generate(force = false) {
|
|
11
|
-
const filesCreated = [];
|
|
12
|
-
const errors = [];
|
|
13
|
-
for (const [filePath, content] of Object.entries(FILE_TEMPLATES)) {
|
|
14
|
-
try {
|
|
15
|
-
const fullPath = join(this.basePath, filePath);
|
|
16
|
-
if (!force && FileUtils.exists(fullPath)) {
|
|
17
|
-
errors.push('File already exists: ' + filePath);
|
|
18
|
-
continue;
|
|
19
|
-
}
|
|
20
|
-
this.ensureDirectory(dirname(fullPath));
|
|
21
|
-
FileUtils.write(fullPath, content);
|
|
22
|
-
filesCreated.push(filePath);
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
errors.push('Failed to create ' + filePath + ': ' + (error instanceof Error ? error.message : 'Unknown error'));
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return {
|
|
29
|
-
success: errors.length === 0,
|
|
30
|
-
filesCreated: filesCreated.length,
|
|
31
|
-
errors
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
ensureDirectory(dirPath) {
|
|
35
|
-
if (!FileUtils.exists(dirPath)) {
|
|
36
|
-
mkdirSync(dirPath, { recursive: true });
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=fileGenerator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fileGenerator.js","sourceRoot":"","sources":["../../lib/core/fileGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAQpD,MAAM,OAAO,aAAa;IAChB,QAAQ,CAAS;IAEzB,YAAY,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAEM,QAAQ,CAAC,QAAiB,KAAK;QACpC,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAuB,EAAE,CAAC;YACvF,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC/C,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACzC,MAAM,CAAC,IAAI,CAAC,uBAAuB,GAAG,QAAQ,CAAC,CAAC;oBAChD,SAAS;gBACX,CAAC;gBAED,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACxC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACnC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,mBAAmB,GAAG,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;YAClH,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5B,YAAY,EAAE,YAAY,CAAC,MAAM;YACjC,MAAM;SACP,CAAC;IACJ,CAAC;IAEO,eAAe,CAAC,OAAe;QACrC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fileTemplates.d.ts","sourceRoot":"","sources":["../../lib/core/fileTemplates.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,IAAK,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fileTemplates.js","sourceRoot":"","sources":["../../lib/core/fileTemplates.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC"}
|