aicm
Version:
A TypeScript CLI tool for managing AI IDE rules across different projects and teams
54 lines (53 loc) • 1.97 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.findAicmFiles = findAicmFiles;
exports.discoverPackagesWithAicm = discoverPackagesWithAicm;
const child_process_1 = require("child_process");
const path_1 = __importDefault(require("path"));
const config_1 = require("./config");
/**
* Discover all packages with aicm configurations using git ls-files
*/
function findAicmFiles(rootDir) {
try {
const output = (0, child_process_1.execSync)("git ls-files --cached --others --exclude-standard aicm.json **/aicm.json", {
cwd: rootDir,
encoding: "utf8",
});
return output
.trim()
.split("\n")
.filter(Boolean)
.map((file) => path_1.default.resolve(rootDir, file));
}
catch (_a) {
// Fallback to manual search if git is not available
return [];
}
}
/**
* Discover all packages with aicm configurations
*/
async function discoverPackagesWithAicm(rootDir) {
const aicmFiles = findAicmFiles(rootDir);
const packages = [];
for (const aicmFile of aicmFiles) {
const packageDir = path_1.default.dirname(aicmFile);
const relativePath = path_1.default.relative(rootDir, packageDir);
// Normalize to forward slashes for cross-platform compatibility
const normalizedRelativePath = relativePath.replace(/\\/g, "/");
const config = await (0, config_1.loadConfig)(packageDir);
if (config) {
packages.push({
relativePath: normalizedRelativePath || ".",
absolutePath: packageDir,
config,
});
}
}
// Sort packages by relativePath for deterministic order
return packages.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
}