{"version":3,"file":"cli.mjs","names":["pc","pc"],"sources":["../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js","../src/args.ts","../src/config.ts","../src/git.ts","../src/prompt.ts","../package.json","../src/cli.ts"],"sourcesContent":["let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n","export const args = {\n    cwd: {\n        type: 'string',\n        description: 'Current working directory',\n        alias: 'c',\n        default: process.cwd(),\n    },\n    all: {\n        type: 'boolean',\n        description: 'Delete all branches',\n        alias: 'a',\n        default: false,\n    },\n} as const\n","import type { CommandArgs, IConfig } from './types'\n\nexport function resolveConfig(args: CommandArgs): IConfig {\n    return {\n        cwd: args.cwd,\n        all: args.all,\n    }\n}\n","import type { IBranch, IConfig } from './types'\nimport { x } from 'tinyexec'\n\nasync function git(config: IConfig, args: string): Promise<string> {\n    const result = await x('git', args.split(' '), {\n        nodeOptions: {\n            cwd: config.cwd,\n        },\n    })\n    return result.stdout.trim()\n}\n\nexport async function getCurrentBranch(config: IConfig): Promise<string> {\n    return git(config, 'rev-parse --abbrev-ref HEAD')\n}\n\nexport async function getLocalBranches(config: IConfig): Promise<string[]> {\n    const output = await git(config, 'branch --format=%(refname:short)')\n    return output ? output.split('\\n').filter(Boolean) : []\n}\n\nexport async function getRemoteBranches(config: IConfig): Promise<string[]> {\n    const output = await git(config, 'branch -r --format=%(refname:short)')\n    return output\n        ? output\n                .split('\\n')\n                .filter(Boolean)\n                .filter(b => b.startsWith('origin/') && b !== 'origin/HEAD')\n                .map(b => b.slice('origin/'.length))\n        : []\n}\n\nexport async function getDefaultBranch(config: IConfig): Promise<string> {\n    const result = await x('sh', [\n        '-c',\n        'git ls-remote --symref origin HEAD | sed -n \\'s|ref: refs/heads/||p\\' | awk \\'{print $1}\\'',\n    ], {\n        nodeOptions: {\n            cwd: config.cwd,\n        },\n    })\n\n    return result.stdout.trim()\n}\n\nexport async function getBranches(config: IConfig): Promise<IBranch[]> {\n    const defaultBranch = await getDefaultBranch(config)\n\n    await git(config, `checkout ${defaultBranch}`)\n\n    const locals = await getLocalBranches(config)\n    const remotes = await getRemoteBranches(config)\n\n    const map = new Map<string, IBranch>()\n\n    for (const name of locals) {\n        if (name === defaultBranch)\n            continue\n        map.set(name, { name, location: { local: true, remote: false } })\n    }\n\n    for (const name of remotes) {\n        if (name === defaultBranch)\n            continue\n        const existing = map.get(name)\n        if (existing) {\n            existing.location.remote = true\n        }\n        else {\n            map.set(name, { name, location: { local: false, remote: true } })\n        }\n    }\n\n    return Array.from(map.values())\n}\n\nexport async function deleteBranch(config: IConfig, branch: IBranch): Promise<void> {\n    if (branch.location.local) {\n        await git(config, `branch -D ${branch.name}`)\n    }\n\n    if (branch.location.remote) {\n        await git(config, `push origin --delete ${branch.name}`)\n    }\n}\n","import type { IBranch, IConfig } from './types'\nimport * as process from 'node:process'\nimport { cancel, isCancel, multiselect, progress } from '@clack/prompts'\nimport pc from 'picocolors'\nimport { deleteBranch } from '@/git.ts'\n\nfunction getLocationHint(location: IBranch['location']): string {\n    if (location.local && location.remote)\n        return 'local & remote'\n    if (location.local)\n        return 'local'\n    return 'remote'\n}\n\nexport async function selectBranches(branches: IBranch[]): Promise<IBranch[]> {\n    const options = branches.map(branch => ({\n        value: branch,\n        label: branch.name,\n        hint: getLocationHint(branch.location),\n    }))\n\n    const result = await multiselect({\n        message: 'Select branches to delete (space to select, enter to confirm)',\n        options,\n        required: true,\n    })\n\n    if (isCancel(result)) {\n        cancel('Operation cancelled.')\n        process.exit(1)\n    }\n\n    return result as IBranch[]\n}\n\nexport async function deleteBranches(config: IConfig, branches: IBranch[]): Promise<void> {\n    const bar = progress({\n        indicator: 'timer',\n        style: 'block',\n        max: branches.length,\n    })\n    bar.start('Deleting branches...')\n\n    for (const branch of branches) {\n        bar.advance(1, `Deleting branch... ${pc.red(branch.name)}`)\n        await deleteBranch(config, branch)\n    }\n\n    bar.stop('Deletion completed.')\n}\n","","import process from 'node:process'\nimport { cancel, confirm, intro, isCancel, outro, spinner } from '@clack/prompts'\nimport { createMain, defineCommand } from 'citty'\nimport pc from 'picocolors'\nimport { args } from '@/args.ts'\nimport { resolveConfig } from '@/config.ts'\nimport { getBranches } from '@/git.ts'\nimport { deleteBranches, selectBranches } from '@/prompt.ts'\nimport { description, name, version } from '../package.json'\n\nconst command = defineCommand({\n    meta: {\n        name,\n        version,\n        description,\n    },\n    setup() {\n        intro(pc.bgCyan(` ${name} [v${version}]`))\n    },\n    cleanup() {\n        outro('Done.')\n    },\n    args,\n    async run({ args }) {\n        const config = resolveConfig(args)\n\n        const s = spinner()\n        s.start('Retrieving branch list...')\n        const branches = await getBranches(config)\n\n        if (branches.length === 0) {\n            s.stop('No branches found to delete')\n            process.exit(1)\n        }\n        s.stop(`Find ${pc.red(branches.length)} branches`)\n\n        if (config.all) {\n            await deleteBranches(config, branches)\n        }\n        else {\n            const selected = await selectBranches(branches)\n\n            const confirmed = await confirm({\n                message: `Confirm deletion of the following branches?`,\n            }) as boolean\n\n            if (isCancel(confirmed) || !confirmed) {\n                cancel('Operation cancelled.')\n                process.exit(1)\n            }\n\n            if (confirmed)\n                await deleteBranches(config, selected)\n        }\n    },\n})\n\ncreateMain(command)({})\n"],"x_google_ignoreList":[0],"mappings":"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"}