@shutootaki/gwm
Version:
git worktree manager CLI
70 lines • 3.19 kB
JavaScript
import { readFileSync, existsSync } from 'fs';
import { homedir } from 'os';
import { join } from 'path';
import TOML from '@ltd/j-toml';
const DEFAULT_CONFIG = {
worktree_base_path: join(homedir(), 'git-worktrees'),
main_branches: ['main', 'master', 'develop'],
clean_branch: 'ask',
copy_ignored_files: {
enabled: true,
patterns: ['.env', '.env.*', '.env.local', '.env.*.local'],
exclude_patterns: ['.env.example', '.env.sample'],
},
};
export function loadConfig() {
const configPaths = [
join(homedir(), '.config', 'gwm', 'config.toml'),
join(homedir(), '.gwmrc'),
];
for (const configPath of configPaths) {
if (existsSync(configPath)) {
try {
const content = readFileSync(configPath, 'utf8');
const parsed = TOML.parse(content);
const worktreeBasePath = typeof parsed.worktree_base_path === 'string' &&
parsed.worktree_base_path.trim()
? parsed.worktree_base_path
: DEFAULT_CONFIG.worktree_base_path;
const mainBranches = Array.isArray(parsed.main_branches)
? parsed.main_branches.filter((v) => typeof v === 'string' && v.trim() !== '')
: DEFAULT_CONFIG.main_branches;
const cleanBranchRaw = parsed.clean_branch;
const cleanBranch = cleanBranchRaw === 'auto' || cleanBranchRaw === 'never'
? cleanBranchRaw
: 'ask';
// copy_ignored_files設定の読み込み
let copyIgnoredFiles = DEFAULT_CONFIG.copy_ignored_files;
if (parsed.copy_ignored_files &&
typeof parsed.copy_ignored_files === 'object') {
const cif = parsed.copy_ignored_files;
copyIgnoredFiles = {
enabled: typeof cif.enabled === 'boolean'
? cif.enabled
: DEFAULT_CONFIG.copy_ignored_files.enabled,
patterns: Array.isArray(cif.patterns)
? cif.patterns.filter((v) => typeof v === 'string')
: DEFAULT_CONFIG.copy_ignored_files.patterns,
exclude_patterns: Array.isArray(cif.exclude_patterns)
? cif.exclude_patterns.filter((v) => typeof v === 'string')
: DEFAULT_CONFIG.copy_ignored_files.exclude_patterns,
};
}
return {
worktree_base_path: worktreeBasePath,
main_branches: mainBranches.length > 0
? mainBranches
: DEFAULT_CONFIG.main_branches,
clean_branch: cleanBranch,
copy_ignored_files: copyIgnoredFiles,
};
}
catch (error) {
console.error(`Error reading config file ${configPath}:`, error);
continue;
}
}
}
return DEFAULT_CONFIG;
}
//# sourceMappingURL=config.js.map