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.
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +57 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/help.d.ts +10 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +44 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +89 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/use.d.ts +6 -0
- package/dist/commands/use.d.ts.map +1 -0
- package/dist/commands/use.js +54 -0
- package/dist/commands/use.js.map +1 -0
- package/dist/commands/version.d.ts +9 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +32 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/commands/watch.d.ts +9 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +83 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/core/codeMerger.d.ts +18 -0
- package/dist/core/codeMerger.d.ts.map +1 -0
- package/dist/core/codeMerger.js +281 -0
- package/dist/core/codeMerger.js.map +1 -0
- package/dist/core/config.d.ts +14 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +78 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/fileWatcher.d.ts +13 -0
- package/dist/core/fileWatcher.d.ts.map +1 -0
- package/dist/core/fileWatcher.js +65 -0
- package/dist/core/fileWatcher.js.map +1 -0
- package/dist/core/httpServer.d.ts +31 -0
- package/dist/core/httpServer.d.ts.map +1 -0
- package/dist/core/httpServer.js +298 -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 +19 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/merge.d.ts +95 -0
- package/dist/types/merge.d.ts.map +1 -0
- package/dist/types/merge.js +2 -0
- package/dist/types/merge.js.map +1 -0
- package/dist/utils/fileUtils.d.ts +12 -0
- package/dist/utils/fileUtils.d.ts.map +1 -0
- package/dist/utils/fileUtils.js +47 -0
- package/dist/utils/fileUtils.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +34 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pathUtils.d.ts +10 -0
- package/dist/utils/pathUtils.d.ts.map +1 -0
- package/dist/utils/pathUtils.js +29 -0
- package/dist/utils/pathUtils.js.map +1 -0
- package/dist/utils/pattern.d.ts +8 -0
- package/dist/utils/pattern.d.ts.map +1 -0
- package/dist/utils/pattern.js +90 -0
- package/dist/utils/pattern.js.map +1 -0
- package/dist/utils/patternUtils.d.ts +8 -0
- package/dist/utils/patternUtils.d.ts.map +1 -0
- package/dist/utils/patternUtils.js +90 -0
- package/dist/utils/patternUtils.js.map +1 -0
- package/dist/utils/proccessCmd.d.ts +4 -0
- package/dist/utils/proccessCmd.d.ts.map +1 -0
- package/dist/utils/proccessCmd.js +29 -0
- package/dist/utils/proccessCmd.js.map +1 -0
- package/dist/utils/processUtils.d.ts +4 -0
- package/dist/utils/processUtils.d.ts.map +1 -0
- package/dist/utils/processUtils.js +29 -0
- package/dist/utils/processUtils.js.map +1 -0
- package/dist/utils/translate.d.ts +2 -0
- package/dist/utils/translate.d.ts.map +1 -0
- package/dist/utils/translate.js +29 -0
- package/dist/utils/translate.js.map +1 -0
- package/dist/utils/translateUtils.d.ts +2 -0
- package/dist/utils/translateUtils.d.ts.map +1 -0
- package/dist/utils/translateUtils.js +29 -0
- package/dist/utils/translateUtils.js.map +1 -0
- package/package.json +5 -5
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../lib/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { readFileSync, readdirSync } from 'fs';
|
|
4
|
+
import { dirname, join, extname } from 'path';
|
|
5
|
+
import { fileURLToPath, pathToFileURL } from 'url';
|
|
6
|
+
import { Logger } from './utils/logger.js';
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = dirname(__filename);
|
|
9
|
+
class CLI {
|
|
10
|
+
program;
|
|
11
|
+
constructor() {
|
|
12
|
+
this.program = new Command();
|
|
13
|
+
this.setupProgram();
|
|
14
|
+
}
|
|
15
|
+
setupProgram() {
|
|
16
|
+
const packagePath = join(__dirname, '../package.json');
|
|
17
|
+
const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
|
|
18
|
+
this.program.name('codemerge').description(packageJson.description).version(packageJson.version);
|
|
19
|
+
}
|
|
20
|
+
async registerCommands() {
|
|
21
|
+
const commandsPath = join(__dirname, 'commands');
|
|
22
|
+
const files = readdirSync(commandsPath).filter(file => extname(file) === '.js');
|
|
23
|
+
for (const file of files) {
|
|
24
|
+
await this.registerCommand(commandsPath, file);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async registerCommand(commandsPath, fileName) {
|
|
28
|
+
try {
|
|
29
|
+
const filePath = join(commandsPath, fileName);
|
|
30
|
+
const fileUrl = pathToFileURL(filePath).href;
|
|
31
|
+
const module = await import(fileUrl);
|
|
32
|
+
const CommandClass = module[Object.keys(module).find(key => key.includes('Command')) || ''];
|
|
33
|
+
if (!CommandClass) {
|
|
34
|
+
Logger.warning(`Skipping ${fileName}: No command class found`);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const commandInstance = new CommandClass();
|
|
38
|
+
if (typeof commandInstance.register !== 'function') {
|
|
39
|
+
Logger.warning(`Skipping ${fileName}: Missing register method`);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
commandInstance.register(this.program);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
Logger.error(`Failed to load ${fileName}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async run() {
|
|
49
|
+
await this.registerCommands();
|
|
50
|
+
this.program.parse(process.argv);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
(async () => {
|
|
54
|
+
const cli = new CLI();
|
|
55
|
+
await cli.run();
|
|
56
|
+
})();
|
|
57
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../lib/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
export declare class HelpCommand {
|
|
3
|
+
register(program: Command): void;
|
|
4
|
+
private execute;
|
|
5
|
+
private displayBanner;
|
|
6
|
+
private displayHelp;
|
|
7
|
+
private displayCommandHelp;
|
|
8
|
+
private getPackageJson;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=help.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../lib/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,qBAAa,WAAW;IACf,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;YAIzB,OAAO;IAUrB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,cAAc;CAIvB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { FileUtils } from '../utils/fileUtils.js';
|
|
2
|
+
import { PathUtils } from '../utils/pathUtils.js';
|
|
3
|
+
import { Logger } from '../utils/logger.js';
|
|
4
|
+
export class HelpCommand {
|
|
5
|
+
register(program) {
|
|
6
|
+
program.command('help').description('Display help information').argument('[command]', 'Command to get help for').action((command) => this.execute(program, command));
|
|
7
|
+
}
|
|
8
|
+
async execute(program, command) {
|
|
9
|
+
try {
|
|
10
|
+
this.displayBanner();
|
|
11
|
+
this.displayHelp(program, command);
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
Logger.error(error instanceof Error ? error.message : 'Unexpected error occurred');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
displayBanner() {
|
|
19
|
+
const packageJson = this.getPackageJson();
|
|
20
|
+
const name = packageJson.name.replace('-', ' ').toUpperCase();
|
|
21
|
+
Logger.figlet(name);
|
|
22
|
+
}
|
|
23
|
+
displayHelp(program, command) {
|
|
24
|
+
if (command) {
|
|
25
|
+
this.displayCommandHelp(program, command);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
program.help();
|
|
29
|
+
}
|
|
30
|
+
displayCommandHelp(program, commandName) {
|
|
31
|
+
const cmd = program.commands.find(c => c.name() === commandName);
|
|
32
|
+
if (cmd) {
|
|
33
|
+
cmd.help();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
Logger.error(`Command '${commandName}' not found`);
|
|
37
|
+
program.help();
|
|
38
|
+
}
|
|
39
|
+
getPackageJson() {
|
|
40
|
+
const packagePath = PathUtils.getPackagePath(import.meta.url, 'package.json');
|
|
41
|
+
return FileUtils.readJson(packagePath);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../lib/commands/help.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAI5C,MAAM,OAAO,WAAW;IACf,QAAQ,CAAC,OAAgB;QAC9B,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAChL,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,OAAgB,EAAE,OAAgB;QACtD,IAAI,CAAC;YACH,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,aAAa;QACnB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAEO,WAAW,CAAC,OAAgB,EAAE,OAAgB;QACpD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IAEO,kBAAkB,CAAC,OAAgB,EAAE,WAAmB;QAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,WAAW,CAAC,CAAC;QACjE,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,CAAC,IAAI,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,YAAY,WAAW,aAAa,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IAEO,cAAc;QACpB,MAAM,WAAW,GAAG,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC9E,OAAO,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../lib/commands/init.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,qBAAa,WAAW;IACf,QAAQ,GAAI,SAAS,OAAO,KAAG,IAAI,CAExC;IAEF,OAAO,CAAC,OAAO,CAuBb;IAEF,OAAO,CAAC,cAAc,CAUpB;IAEF,OAAO,CAAC,gBAAgB,CAyBtB;IAEF,OAAO,CAAC,eAAe,CAWrB;CACH"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { PathUtils } from '../utils/pathUtils.js';
|
|
4
|
+
import { FileUtils } from '../utils/fileUtils.js';
|
|
5
|
+
import { Logger } from '../utils/logger.js';
|
|
6
|
+
export class InitCommand {
|
|
7
|
+
register = (program) => {
|
|
8
|
+
program.command('init').description('Initialize CodeMerge project structure').argument('[path]', 'Target directory', '.').option('-f, --force', 'Overwrite existing files').action(this.execute);
|
|
9
|
+
};
|
|
10
|
+
execute = async (targetPath, options) => {
|
|
11
|
+
try {
|
|
12
|
+
Logger.info('Initializing CodeMerge project...');
|
|
13
|
+
const resolvedPath = PathUtils.resolve(targetPath);
|
|
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);
|
|
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');
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
Logger.error(error instanceof Error ? error.message : 'Unexpected error occurred');
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
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: projectName ?? 'codemerge-project',
|
|
52
|
+
outputPath,
|
|
53
|
+
port: 9876,
|
|
54
|
+
useGitignore: true,
|
|
55
|
+
onStartCommand: '',
|
|
56
|
+
onStartCommandLogs: false,
|
|
57
|
+
onUpsertCommand: '',
|
|
58
|
+
includePatterns: [
|
|
59
|
+
'***.tsx',
|
|
60
|
+
'***.jsx',
|
|
61
|
+
'***.log',
|
|
62
|
+
'package-lock.json',
|
|
63
|
+
'yarn.lock',
|
|
64
|
+
'pnpm-lock.yaml',
|
|
65
|
+
'codemerge.json',
|
|
66
|
+
'merged-output.txt',
|
|
67
|
+
'.env',
|
|
68
|
+
'.env.*',
|
|
69
|
+
'**/.DS_Store',
|
|
70
|
+
'coverage'
|
|
71
|
+
]
|
|
72
|
+
};
|
|
73
|
+
FileUtils.write(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
74
|
+
};
|
|
75
|
+
updateGitignore = (basePath, outputFileName) => {
|
|
76
|
+
const gitignorePath = join(basePath, '.gitignore');
|
|
77
|
+
if (!FileUtils.exists(gitignorePath)) {
|
|
78
|
+
FileUtils.write(gitignorePath, outputFileName + '\n');
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const content = readFileSync(gitignorePath, 'utf-8');
|
|
82
|
+
const lines = content.split('\n');
|
|
83
|
+
if (lines.some(line => line.trim() === outputFileName))
|
|
84
|
+
return;
|
|
85
|
+
const newContent = content.endsWith('\n') ? content + outputFileName + '\n' : content + '\n' + outputFileName + '\n';
|
|
86
|
+
FileUtils.write(gitignorePath, newContent);
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../lib/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../lib/commands/use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,qBAAa,UAAU;IACd,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;YAIzB,OAAO;CAkDtB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { ProcessUtils } from '../utils/processUtils.js';
|
|
2
|
+
import { CodeMerger } from '../core/codeMerger.js';
|
|
3
|
+
import { Config } from '../core/config.js';
|
|
4
|
+
import { FileWatcher } from '../core/fileWatcher.js';
|
|
5
|
+
import { Logger } from '../utils/logger.js';
|
|
6
|
+
export class UseCommand {
|
|
7
|
+
register(program) {
|
|
8
|
+
program.command('use').description('Merge code files into a single output file').argument('[path]', 'Input path to scan', '.').option('-o, --output <path>', 'Output file path').option('-w, --watch', 'Watch for file changes').option('--ignore <patterns>', 'Additional ignore patterns (comma-separated)').option('--include <patterns>', 'Include patterns (comma-separated)').action(this.execute.bind(this));
|
|
9
|
+
}
|
|
10
|
+
async execute(inputPath, options) {
|
|
11
|
+
try {
|
|
12
|
+
Logger.info('Starting code merge...');
|
|
13
|
+
const config = Config.load(inputPath);
|
|
14
|
+
const mergeOptions = Config.merge(config, {
|
|
15
|
+
inputPath,
|
|
16
|
+
outputPath: options.output,
|
|
17
|
+
watch: options.watch,
|
|
18
|
+
ignorePatterns: options.ignore ? options.ignore.split(',') : undefined,
|
|
19
|
+
includePatterns: options.include ? options.include.split(',') : undefined
|
|
20
|
+
});
|
|
21
|
+
if (mergeOptions.onStartCommand) {
|
|
22
|
+
ProcessUtils.runCommand(mergeOptions.onStartCommand, mergeOptions.onStartCommandLogs);
|
|
23
|
+
}
|
|
24
|
+
const merger = new CodeMerger(mergeOptions);
|
|
25
|
+
const result = await merger.execute();
|
|
26
|
+
if (!result.success) {
|
|
27
|
+
Logger.error('Merge failed:');
|
|
28
|
+
result.errors.forEach(error => Logger.error(' ' + error));
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
Logger.success('Merged ' + result.filesProcessed + ' files into ' + result.outputPath);
|
|
32
|
+
if (mergeOptions.watch) {
|
|
33
|
+
const watcher = new FileWatcher(mergeOptions, async () => {
|
|
34
|
+
const result = await merger.execute();
|
|
35
|
+
if (result.success) {
|
|
36
|
+
Logger.success('Merged ' + result.filesProcessed + ' files into ' + result.outputPath);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
watcher.start();
|
|
40
|
+
process.on('SIGINT', () => {
|
|
41
|
+
Logger.plain('\nStopping watcher...');
|
|
42
|
+
watcher.stop();
|
|
43
|
+
process.exit(0);
|
|
44
|
+
});
|
|
45
|
+
Logger.plain('Press Ctrl+C to stop watching');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
Logger.error(error instanceof Error ? error.message : 'Unexpected error occurred');
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=use.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use.js","sourceRoot":"","sources":["../../lib/commands/use.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../lib/commands/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,qBAAa,cAAc;IAClB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;YAIzB,OAAO;IAUrB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,cAAc;CAIvB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { FileUtils } from '../utils/fileUtils.js';
|
|
2
|
+
import { PathUtils } from '../utils/pathUtils.js';
|
|
3
|
+
import { Logger } from '../utils/logger.js';
|
|
4
|
+
export class VersionCommand {
|
|
5
|
+
register(program) {
|
|
6
|
+
program.command('version').description('Display version information').action(() => this.execute());
|
|
7
|
+
}
|
|
8
|
+
async execute() {
|
|
9
|
+
try {
|
|
10
|
+
this.displayBanner();
|
|
11
|
+
this.displayVersion();
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
Logger.error(error instanceof Error ? error.message : 'Unexpected error occurred');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
displayBanner() {
|
|
19
|
+
const packageJson = this.getPackageJson();
|
|
20
|
+
const name = packageJson.name.replace('-', ' ').toUpperCase();
|
|
21
|
+
Logger.figlet(name);
|
|
22
|
+
}
|
|
23
|
+
displayVersion() {
|
|
24
|
+
const packageJson = this.getPackageJson();
|
|
25
|
+
Logger.info(`Version: ${packageJson.version}`);
|
|
26
|
+
}
|
|
27
|
+
getPackageJson() {
|
|
28
|
+
const packagePath = PathUtils.getPackagePath(import.meta.url, 'package.json');
|
|
29
|
+
return FileUtils.readJson(packagePath);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../lib/commands/version.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,OAAO,cAAc;IAClB,QAAQ,CAAC,OAAgB;QAC9B,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACrG,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC;YACH,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,aAAa;QACnB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAEO,cAAc;QACpB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,YAAY,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;IAEO,cAAc;QACpB,MAAM,WAAW,GAAG,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC9E,OAAO,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../lib/commands/watch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,qBAAa,YAAY;IAChB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;YAIzB,OAAO;YAmDP,mBAAmB;IAajC,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,qBAAqB;CAW9B"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { basename, resolve } from 'path';
|
|
2
|
+
import { ProcessUtils } from '../utils/processUtils.js';
|
|
3
|
+
import { FileWatcher } from '../core/fileWatcher.js';
|
|
4
|
+
import { HttpServer } from '../core/httpServer.js';
|
|
5
|
+
import { CodeMerger } from '../core/codeMerger.js';
|
|
6
|
+
import { MergeCache } from '../core/mergeCache.js';
|
|
7
|
+
import { Logger } from '../utils/logger.js';
|
|
8
|
+
import { Config } from '../core/config.js';
|
|
9
|
+
export class WatchCommand {
|
|
10
|
+
register(program) {
|
|
11
|
+
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));
|
|
12
|
+
}
|
|
13
|
+
async execute(inputPath, options) {
|
|
14
|
+
try {
|
|
15
|
+
Logger.info('Starting watch mode...');
|
|
16
|
+
const config = Config.load(inputPath);
|
|
17
|
+
const mergeOptions = Config.merge(config, {
|
|
18
|
+
inputPath,
|
|
19
|
+
outputPath: options.output,
|
|
20
|
+
watch: true,
|
|
21
|
+
writeOutput: false,
|
|
22
|
+
ignorePatterns: options.ignore ? options.ignore.split(',') : undefined,
|
|
23
|
+
includePatterns: options.include ? options.include.split(',') : undefined
|
|
24
|
+
});
|
|
25
|
+
if (mergeOptions.onStartCommand)
|
|
26
|
+
ProcessUtils.runCommand(mergeOptions.onStartCommand, mergeOptions.onStartCommandLogs);
|
|
27
|
+
const projectName = this.getProjectName(mergeOptions.outputPath);
|
|
28
|
+
const port = parseInt(options.port || '9876', 10);
|
|
29
|
+
const cache = new MergeCache();
|
|
30
|
+
const basePath = resolve(mergeOptions.inputPath);
|
|
31
|
+
const merger = new CodeMerger(mergeOptions);
|
|
32
|
+
await this.performInitialMerge(merger, cache);
|
|
33
|
+
const server = new HttpServer(port, projectName, cache, basePath);
|
|
34
|
+
server.setMerger(merger, mergeOptions);
|
|
35
|
+
await server.start();
|
|
36
|
+
const watcher = new FileWatcher(mergeOptions, async () => {
|
|
37
|
+
await this.performInitialMerge(merger, cache);
|
|
38
|
+
});
|
|
39
|
+
watcher.start();
|
|
40
|
+
this.setupGracefulShutdown(server, watcher);
|
|
41
|
+
Logger.success(`Server running at http://localhost:${port}`);
|
|
42
|
+
Logger.plain(` Merge endpoint: http://localhost:${port}/content`);
|
|
43
|
+
Logger.plain(` Structure endpoint: http://localhost:${port}/structure`);
|
|
44
|
+
Logger.plain(` Selective content: http://localhost:${port}/selective-content`);
|
|
45
|
+
Logger.plain(` Upsert endpoint: http://localhost:${port}/upsert`);
|
|
46
|
+
Logger.plain(` Delete files endpoint: http://localhost:${port}/delete-files`);
|
|
47
|
+
Logger.plain(` Commit endpoint: http://localhost:${port}/commit`);
|
|
48
|
+
Logger.plain(` Command output endpoint: http://localhost:${port}/command-output`);
|
|
49
|
+
Logger.plain(` Health endpoint: http://localhost:${port}/health`);
|
|
50
|
+
Logger.plain('Press Ctrl+C to stop');
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
Logger.error(error instanceof Error ? error.message : 'Unexpected error occurred');
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async performInitialMerge(merger, cache) {
|
|
58
|
+
const result = await merger.execute();
|
|
59
|
+
if (!result.success) {
|
|
60
|
+
Logger.error('Initial merge failed');
|
|
61
|
+
result.errors.forEach(error => Logger.error(' ' + error));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (result.content)
|
|
65
|
+
cache.set(result.content);
|
|
66
|
+
Logger.success(`Merged ${result.filesProcessed} files`);
|
|
67
|
+
}
|
|
68
|
+
getProjectName(outputPath) {
|
|
69
|
+
const fileName = basename(outputPath);
|
|
70
|
+
return fileName.replace(/\.[^/.]+$/, '').replace(/[^a-zA-Z0-9-_]/g, '-').toLowerCase();
|
|
71
|
+
}
|
|
72
|
+
setupGracefulShutdown(server, watcher) {
|
|
73
|
+
const shutdown = () => {
|
|
74
|
+
Logger.plain('\nStopping server and watcher...');
|
|
75
|
+
server.stop();
|
|
76
|
+
watcher.stop();
|
|
77
|
+
process.exit(0);
|
|
78
|
+
};
|
|
79
|
+
process.on('SIGINT', shutdown);
|
|
80
|
+
process.on('SIGTERM', shutdown);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# 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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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ProjectStructure, MergeOptions, MergeResult } from '../types/merge.js';
|
|
2
|
+
export declare class CodeMerger {
|
|
3
|
+
private options;
|
|
4
|
+
constructor(options: MergeOptions);
|
|
5
|
+
execute(): Promise<MergeResult>;
|
|
6
|
+
getProjectStructure(): Promise<ProjectStructure>;
|
|
7
|
+
getSelectiveContent(selectedPaths: string[]): Promise<MergeResult>;
|
|
8
|
+
private buildTreeStructure;
|
|
9
|
+
private collectFiles;
|
|
10
|
+
private shouldProcessFile;
|
|
11
|
+
private getIgnorePatterns;
|
|
12
|
+
private mergeFiles;
|
|
13
|
+
private generateHeader;
|
|
14
|
+
private generateBreakdown;
|
|
15
|
+
private generateStructure;
|
|
16
|
+
private writeOutput;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=codeMerger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeMerger.d.ts","sourceRoot":"","sources":["../../lib/core/codeMerger.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAe,YAAY,EAAE,WAAW,EAAY,MAAM,mBAAmB,CAAC;AAE5G,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,EAAE,YAAY;IAIpB,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC;IAwB/B,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IA2BhD,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IA8B/E,OAAO,CAAC,kBAAkB;YAwDZ,YAAY;IAgC1B,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,iBAAiB;IA+CzB,OAAO,CAAC,WAAW;CAGpB"}
|