rxcc
Version:
A tool to pack repository contents to single file for AI consumption
153 lines • 7.58 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import path from "node:path";
import { loadFileConfig, mergeConfigs } from "../../config/configLoad.js";
import { repomixConfigCliSchema, } from "../../config/configSchema.js";
import { pack } from "../../core/packager.js";
import { rethrowValidationErrorIfZodError } from "../../shared/errorHandle.js";
import { logger } from "../../shared/logger.js";
import { printSecurityCheck, printSummary, printTopFiles, } from "../cliPrint.js";
import { Spinner } from "../cliSpinner.js";
import { runMigrationAction } from "./migrationAction.js";
export const runDefaultAction = (directories, cwd, cliOptions) => __awaiter(void 0, void 0, void 0, function* () {
var _a;
logger.trace("Loaded CLI options:", cliOptions);
// Run migration before loading config
yield runMigrationAction(cwd);
// Load the config file
const fileConfig = yield loadFileConfig(cwd, (_a = cliOptions.config) !== null && _a !== void 0 ? _a : null);
logger.trace("Loaded file config:", fileConfig);
// Parse the CLI options into a config
const cliConfig = buildCliConfig(cliOptions);
logger.trace("CLI config:", cliConfig);
// Merge default, file, and CLI configs
const config = mergeConfigs(cwd, fileConfig, cliConfig);
logger.trace("Merged config:", config);
const targetPaths = directories.map((directory) => path.resolve(cwd, directory));
const spinner = new Spinner("Packing files...", cliOptions);
spinner.start();
let packResult;
try {
packResult = yield pack(targetPaths, config, (message) => {
spinner.update(message);
});
}
catch (error) {
spinner.fail("Error during packing");
throw error;
}
spinner.stop("");
if (config.output.topFilesLength > 0) {
printTopFiles(packResult.fileLineCounts, packResult.fileTokenCounts, config.output.topFilesLength);
logger.log("");
}
printSecurityCheck(cwd, packResult.suspiciousFilesResults, config);
printSummary(packResult.totalFiles, packResult.totalTokens, packResult.totalLines, config.output.filePath, packResult.suspiciousFilesResults, config);
return {
packResult,
config,
};
});
/**
* Builds CLI configuration from command-line options.
*
* Note: Due to Commander.js behavior with --no-* flags:
* - When --no-* flags are used (e.g., --no-file-summary), the options explicitly become false
* - When no flag is specified, Commander defaults to true (e.g., options.fileSummary === true)
* - For --no-* flags, we only apply the setting when it's explicitly false to respect config file values
* - This allows the config file to maintain control unless explicitly overridden by CLI
*/
export const buildCliConfig = (options) => {
var _a;
const cliConfig = {};
if (options.output) {
cliConfig.output = { filePath: options.output };
}
if (options.include) {
cliConfig.include = options.include
.split(",")
.map((pattern) => pattern.trim());
}
if (options.ignore) {
cliConfig.ignore = {
customPatterns: options.ignore
.split(",")
.map((pattern) => pattern.trim()),
};
}
// Only apply gitignore setting if explicitly set to false
if (options.gitignore === false) {
cliConfig.ignore = Object.assign(Object.assign({}, cliConfig.ignore), { useGitignore: options.gitignore });
}
// Only apply defaultPatterns setting if explicitly set to false
if (options.defaultPatterns === false) {
cliConfig.ignore = Object.assign(Object.assign({}, cliConfig.ignore), { useDefaultPatterns: options.defaultPatterns });
}
if (options.topFilesLen !== undefined) {
cliConfig.output = Object.assign(Object.assign({}, cliConfig.output), { topFilesLength: options.topFilesLen });
}
if (options.outputShowLineNumbers !== undefined) {
cliConfig.output = Object.assign(Object.assign({}, cliConfig.output), { showLineNumbers: options.outputShowLineNumbers });
}
if (options.copy) {
cliConfig.output = Object.assign(Object.assign({}, cliConfig.output), { copyToClipboard: options.copy });
}
if (options.style) {
cliConfig.output = Object.assign(Object.assign({}, cliConfig.output), { style: options.style.toLowerCase() });
}
if (options.parsableStyle !== undefined) {
cliConfig.output = Object.assign(Object.assign({}, cliConfig.output), { parsableStyle: options.parsableStyle });
}
// Only apply securityCheck setting if explicitly set to false
if (options.securityCheck === false) {
cliConfig.security = { enableSecurityCheck: options.securityCheck };
}
// Only apply fileSummary setting if explicitly set to false
if (options.fileSummary === false) {
cliConfig.output = Object.assign(Object.assign({}, cliConfig.output), { fileSummary: false });
}
// Only apply directoryStructure setting if explicitly set to false
if (options.directoryStructure === false) {
cliConfig.output = Object.assign(Object.assign({}, cliConfig.output), { directoryStructure: false });
}
if (options.removeComments !== undefined) {
cliConfig.output = Object.assign(Object.assign({}, cliConfig.output), { removeComments: options.removeComments });
}
if (options.removeEmptyLines !== undefined) {
cliConfig.output = Object.assign(Object.assign({}, cliConfig.output), { removeEmptyLines: options.removeEmptyLines });
}
if (options.headerText !== undefined) {
cliConfig.output = Object.assign(Object.assign({}, cliConfig.output), { headerText: options.headerText });
}
if (options.compress !== undefined) {
cliConfig.output = Object.assign(Object.assign({}, cliConfig.output), { compress: options.compress });
}
if (options.tokenCountEncoding) {
cliConfig.tokenCount = { encoding: options.tokenCountEncoding };
}
if (options.instructionFilePath) {
cliConfig.output = Object.assign(Object.assign({}, cliConfig.output), { instructionFilePath: options.instructionFilePath });
}
if (options.includeEmptyDirectories) {
cliConfig.output = Object.assign(Object.assign({}, cliConfig.output), { includeEmptyDirectories: options.includeEmptyDirectories });
}
// Only apply gitSortByChanges setting if explicitly set to false
if (options.gitSortByChanges === false) {
cliConfig.output = Object.assign(Object.assign({}, cliConfig.output), { git: Object.assign(Object.assign({}, (_a = cliConfig.output) === null || _a === void 0 ? void 0 : _a.git), { sortByChanges: false }) });
}
try {
return repomixConfigCliSchema.parse(cliConfig);
}
catch (error) {
rethrowValidationErrorIfZodError(error, "Invalid cli arguments");
throw error;
}
};
//# sourceMappingURL=defaultAction.js.map