// lib/merge-gitignore.mjs export function mergeGitignore(baseText, addText) { const seen = new Set() const out = [] const push = (line) => { const key = line.trim() if (!key) return // drop blank lines if (seen.has(key)) return // dedupe by trimmed content seen.add(key) out.push(line) } for (const l of baseText.split('\n')) push(l) for (const l of addText.split('\n')) push(l) let text = out.join('\n').replace(/\n+$/,'') + '\n' return text } // CLI entry: node lib/merge-gitignore.mjs // Use pathToFileURL so the guard matches even when the path contains spaces or // non-ASCII chars (import.meta.url is percent-encoded; process.argv[1] is raw). const { pathToFileURL } = await import('node:url') if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) { const [basePath, addPath] = process.argv.slice(2) const { readFileSync, writeFileSync } = await import('node:fs') const base = readFileSync(basePath, 'utf8') const add = readFileSync(addPath, 'utf8') writeFileSync(basePath, mergeGitignore(base, add)) }