ccgwz
Version:
Claude Code Git Worktree Zellij - CLI tool for parallel development with git worktrees and Claude Code in zellij panes
94 lines • 2.58 kB
JavaScript
import { execa } from 'execa';
import { ERROR_MESSAGES } from './constants.js';
export async function validateGitRepository() {
try {
await execa('git', ['rev-parse', '--is-inside-work-tree']);
const projectName = await getProjectName();
const currentBranch = await getCurrentBranch();
return {
success: true,
data: {
isRepository: true,
projectName,
currentBranch,
},
};
}
catch {
return {
success: false,
error: ERROR_MESSAGES.NOT_GIT_REPO,
};
}
}
export async function validateZellijRunning() {
try {
const { stdout } = await execa('zellij', ['list-sessions']);
const sessions = stdout
.split('\n')
.filter((line) => line.trim().length > 0)
.filter((line) => !line.includes('No active zellij sessions'));
return {
success: true,
data: {
isRunning: true,
sessions,
},
};
}
catch {
return {
success: false,
error: ERROR_MESSAGES.ZELLIJ_NOT_RUNNING,
};
}
}
export function validatePaneCount(count) {
if (count < 1 || count > 10) {
return {
success: false,
error: ERROR_MESSAGES.INVALID_PANE_COUNT,
};
}
return {
success: true,
data: count,
};
}
export function sanitizeBranchName(name) {
return name
.replace(/[^a-zA-Z0-9-_]/g, '-')
.replace(/^-+|-+$/g, '')
.replace(/-+/g, '-')
.toLowerCase();
}
export function generateUniqueBranchName(baseName, existingNames) {
let counter = 1;
let candidateName = baseName;
while (existingNames.includes(candidateName)) {
candidateName = `${baseName}_${counter.toString().padStart(2, '0')}`;
counter++;
}
return candidateName;
}
async function getProjectName() {
try {
const { stdout } = await execa('git', ['remote', 'get-url', 'origin']);
const match = stdout.match(/\/([^/]+)\.git$/);
return match?.[1] ?? 'unknown-project';
}
catch {
const { stdout } = await execa('basename', [process.cwd()]);
return stdout.trim();
}
}
async function getCurrentBranch() {
try {
const { stdout } = await execa('git', ['branch', '--show-current']);
return stdout.trim();
}
catch {
return 'main';
}
}
//# sourceMappingURL=validation.js.map