@exem-ui/migration 0.1.0-next.20260309055529

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/sisteransi@1.0.5/node_modules/sisteransi/src/index.js","../../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js","../src/index.ts","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/node_modules/.pnpm/ansi-regex@6.1.0/node_modules/ansi-regex/index.js","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/node_modules/.pnpm/eastasianwidth@0.2.0/node_modules/eastasianwidth/eastasianwidth.js","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/node_modules/.pnpm/emoji-regex@9.2.2/node_modules/emoji-regex/index.js","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/node_modules/.pnpm/string-width@5.1.2/node_modules/string-width/index.js","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/node_modules/.pnpm/ansi-styles@6.2.1/node_modules/ansi-styles/index.js","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/node_modules/.pnpm/wrap-ansi@8.1.0/node_modules/wrap-ansi/index.js","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/@clack/core/src/utils/settings.ts","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/@clack/core/src/utils/string.ts","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/@clack/core/src/utils/index.ts","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/@clack/core/src/prompts/prompt.ts","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/@clack/core/src/prompts/confirm.ts","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/@clack/core/src/prompts/group-multiselect.ts","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/@clack/core/src/prompts/multi-select.ts","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/@clack/core/src/prompts/password.ts","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/@clack/core/src/prompts/select.ts","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/@clack/core/src/prompts/select-key.ts","../../../node_modules/.pnpm/@clack+core@0.4.2/node_modules/@clack/core/src/prompts/text.ts","../../../node_modules/.pnpm/@clack+prompts@0.10.1/node_modules/node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js","../../../node_modules/.pnpm/@clack+prompts@0.10.1/node_modules/@clack/prompts/src/index.ts","../src/migrations/001-exemble/index.ts","../src/migrations/002-team-fe/index.ts","../src/migrations/index.ts","../src/runner.ts"],"sourcesContent":["'use strict';\n\nconst ESC = '\\x1B';\nconst CSI = `${ESC}[`;\nconst beep = '\\u0007';\n\nconst cursor = {\n to(x, y) {\n if (!y) return `${CSI}${x + 1}G`;\n return `${CSI}${y + 1};${x + 1}H`;\n },\n move(x, y) {\n let ret = '';\n\n if (x < 0) ret += `${CSI}${-x}D`;\n else if (x > 0) ret += `${CSI}${x}C`;\n\n if (y < 0) ret += `${CSI}${-y}A`;\n else if (y > 0) ret += `${CSI}${y}B`;\n\n return ret;\n },\n up: (count = 1) => `${CSI}${count}A`,\n down: (count = 1) => `${CSI}${count}B`,\n forward: (count = 1) => `${CSI}${count}C`,\n backward: (count = 1) => `${CSI}${count}D`,\n nextLine: (count = 1) => `${CSI}E`.repeat(count),\n prevLine: (count = 1) => `${CSI}F`.repeat(count),\n left: `${CSI}G`,\n hide: `${CSI}?25l`,\n show: `${CSI}?25h`,\n save: `${ESC}7`,\n restore: `${ESC}8`\n}\n\nconst scroll = {\n up: (count = 1) => `${CSI}S`.repeat(count),\n down: (count = 1) => `${CSI}T`.repeat(count)\n}\n\nconst erase = {\n screen: `${CSI}2J`,\n up: (count = 1) => `${CSI}1J`.repeat(count),\n down: (count = 1) => `${CSI}J`.repeat(count),\n line: `${CSI}2K`,\n lineEnd: `${CSI}K`,\n lineStart: `${CSI}1K`,\n lines(count) {\n let clear = '';\n for (let i = 0; i < count; i++)\n clear += this.line + (i < count - 1 ? cursor.up() : '');\n if (count)\n clear += cursor.left;\n return clear;\n }\n}\n\nmodule.exports = { cursor, scroll, erase, beep };\n","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","import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport * as p from '@clack/prompts';\nimport pc from 'picocolors';\n\nimport { migrations } from './migrations';\nimport { run } from './runner';\n\nasync function main() {\n const args = process.argv.slice(2);\n\n if (args.includes('--help') || args.includes('-h')) {\n showHelp();\n process.exit(0);\n }\n\n p.intro(pc.bold('@exem-ui/migration'));\n\n // 1. 프로젝트 경로\n const pathArg = args.find((a) => !a.startsWith('-'));\n let targetDir: string;\n\n if (pathArg) {\n targetDir = resolve(pathArg);\n } else {\n const input = await p.text({\n message: '마이그레이션할 프로젝트 경로를 입력하세요',\n placeholder: './my-project',\n validate: (value) => {\n if (!value) {\n return '경로를 입력해주세요.';\n }\n if (!existsSync(resolve(value))) {\n return '해당 경로를 찾을 수 없습니다.';\n }\n },\n });\n if (p.isCancel(input)) {\n p.cancel('취소되었습니다.');\n process.exit(0);\n }\n targetDir = resolve(input);\n }\n\n if (!existsSync(targetDir)) {\n p.cancel(`경로를 찾을 수 없습니다: ${targetDir}`);\n process.exit(1);\n }\n\n // 2. 마이그레이션 선택\n const selected = await p.select({\n message: '실행할 마이그레이션을 선택하세요',\n options: migrations.map((m) => ({\n value: m.id,\n label: `${pc.dim(m.id)} ${m.title}`,\n hint: m.description,\n })),\n });\n\n if (p.isCancel(selected)) {\n p.cancel('취소되었습니다.');\n process.exit(0);\n }\n\n const migration = migrations.find((m) => m.id === selected);\n if (!migration) {\n p.cancel('마이그레이션을 찾을 수 없습니다.');\n process.exit(1);\n }\n\n // 3. 적용 모드\n const apply = args.includes('--apply');\n\n if (!apply) {\n p.log.info(`${pc.dim('dry-run 모드입니다. 실제 적용하려면 --apply 플래그를 추가하세요.')}`);\n }\n\n // 4. 실행\n run(migration, targetDir, apply);\n\n p.outro(pc.dim('마이그레이션 완료'));\n}\n\nfunction showHelp() {\n process.stdout.write(`\n ${pc.bold('@exem-ui/migration')} - 버전별 codemod 마이그레이션 도구\n\n ${pc.yellow('사용법:')}\n npx @exem-ui/migration <프로젝트-경로> ${pc.dim('# 인터랙티브 선택 + dry-run')}\n npx @exem-ui/migration <프로젝트-경로> --apply ${pc.dim('# 인터랙티브 선택 + 실제 적용')}\n\n ${pc.yellow('마이그레이션 목록:')}\n${migrations.map((m) => ` ${pc.cyan(m.id)} ${m.title}`).join('\\n')}\n\n ${pc.yellow('옵션:')}\n --apply 자동 치환을 실제로 적용 (기본: dry-run)\n --help 이 도움말 표시\n\n`);\n}\n\nmain().catch((err) => {\n process.stderr.write(`${pc.red('오류:')} ${err instanceof Error ? err.message : err}\\n`);\n process.exit(1);\n});\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","var eaw = {};\n\nif ('undefined' == typeof module) {\n window.eastasianwidth = eaw;\n} else {\n module.exports = eaw;\n}\n\neaw.eastAsianWidth = function(character) {\n var x = character.charCodeAt(0);\n var y = (character.length == 2) ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {\n x &= 0x3FF;\n y &= 0x3FF;\n codePoint = (x << 10) | y;\n codePoint += 0x10000;\n }\n\n if ((0x3000 == codePoint) ||\n (0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {\n return 'F';\n }\n if ((0x20A9 == codePoint) ||\n (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||\n (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||\n (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||\n (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||\n (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||\n (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {\n return 'H';\n }\n if ((0x1100 <= codePoint && codePoint <= 0x115F) ||\n (0x11A3 <= codePoint && codePoint <= 0x11A7) ||\n (0x11FA <= codePoint && codePoint <= 0x11FF) ||\n (0x2329 <= codePoint && codePoint <= 0x232A) ||\n (0x2E80 <= codePoint && codePoint <= 0x2E99) ||\n (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||\n (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||\n (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||\n (0x3001 <= codePoint && codePoint <= 0x303E) ||\n (0x3041 <= codePoint && codePoint <= 0x3096) ||\n (0x3099 <= codePoint && codePoint <= 0x30FF) ||\n (0x3105 <= codePoint && codePoint <= 0x312D) ||\n (0x3131 <= codePoint && codePoint <= 0x318E) ||\n (0x3190 <= codePoint && codePoint <= 0x31BA) ||\n (0x31C0 <= codePoint && codePoint <= 0x31E3) ||\n (0x31F0 <= codePoint && codePoint <= 0x321E) ||\n (0x3220 <= codePoint && codePoint <= 0x3247) ||\n (0x3250 <= codePoint && codePoint <= 0x32FE) ||\n (0x3300 <= codePoint && codePoint <= 0x4DBF) ||\n (0x4E00 <= codePoint && codePoint <= 0xA48C) ||\n (0xA490 <= codePoint && codePoint <= 0xA4C6) ||\n (0xA960 <= codePoint && codePoint <= 0xA97C) ||\n (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||\n (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||\n (0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n (0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n (0xFE30 <= codePoint && codePoint <= 0xFE52) ||\n (0xFE54 <= codePoint && codePoint <= 0xFE66) ||\n (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||\n (0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n (0x1F200 <= codePoint && codePoint <= 0x1F202) ||\n (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||\n (0x1F240 <= codePoint && codePoint <= 0x1F248) ||\n (0x1F250 <= codePoint && codePoint <= 0x1F251) ||\n (0x20000 <= codePoint && codePoint <= 0x2F73F) ||\n (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||\n (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {\n return 'W';\n }\n if ((0x0020 <= codePoint && codePoint <= 0x007E) ||\n (0x00A2 <= codePoint && codePoint <= 0x00A3) ||\n (0x00A5 <= codePoint && codePoint <= 0x00A6) ||\n (0x00AC == codePoint) ||\n (0x00AF == codePoint) ||\n (0x27E6 <= codePoint && codePoint <= 0x27ED) ||\n (0x2985 <= codePoint && codePoint <= 0x2986)) {\n return 'Na';\n }\n if ((0x00A1 == codePoint) ||\n (0x00A4 == codePoint) ||\n (0x00A7 <= codePoint && codePoint <= 0x00A8) ||\n (0x00AA == codePoint) ||\n (0x00AD <= codePoint && codePoint <= 0x00AE) ||\n (0x00B0 <= codePoint && codePoint <= 0x00B4) ||\n (0x00B6 <= codePoint && codePoint <= 0x00BA) ||\n (0x00BC <= codePoint && codePoint <= 0x00BF) ||\n (0x00C6 == codePoint) ||\n (0x00D0 == codePoint) ||\n (0x00D7 <= codePoint && codePoint <= 0x00D8) ||\n (0x00DE <= codePoint && codePoint <= 0x00E1) ||\n (0x00E6 == codePoint) ||\n (0x00E8 <= codePoint && codePoint <= 0x00EA) ||\n (0x00EC <= codePoint && codePoint <= 0x00ED) ||\n (0x00F0 == codePoint) ||\n (0x00F2 <= codePoint && codePoint <= 0x00F3) ||\n (0x00F7 <= codePoint && codePoint <= 0x00FA) ||\n (0x00FC == codePoint) ||\n (0x00FE == codePoint) ||\n (0x0101 == codePoint) ||\n (0x0111 == codePoint) ||\n (0x0113 == codePoint) ||\n (0x011B == codePoint) ||\n (0x0126 <= codePoint && codePoint <= 0x0127) ||\n (0x012B == codePoint) ||\n (0x0131 <= codePoint && codePoint <= 0x0133) ||\n (0x0138 == codePoint) ||\n (0x013F <= codePoint && codePoint <= 0x0142) ||\n (0x0144 == codePoint) ||\n (0x0148 <= codePoint && codePoint <= 0x014B) ||\n (0x014D == codePoint) ||\n (0x0152 <= codePoint && codePoint <= 0x0153) ||\n (0x0166 <= codePoint && codePoint <= 0x0167) ||\n (0x016B == codePoint) ||\n (0x01CE == codePoint) ||\n (0x01D0 == codePoint) ||\n (0x01D2 == codePoint) ||\n (0x01D4 == codePoint) ||\n (0x01D6 == codePoint) ||\n (0x01D8 == codePoint) ||\n (0x01DA == codePoint) ||\n (0x01DC == codePoint) ||\n (0x0251 == codePoint) ||\n (0x0261 == codePoint) ||\n (0x02C4 == codePoint) ||\n (0x02C7 == codePoint) ||\n (0x02C9 <= codePoint && codePoint <= 0x02CB) ||\n (0x02CD == codePoint) ||\n (0x02D0 == codePoint) ||\n (0x02D8 <= codePoint && codePoint <= 0x02DB) ||\n (0x02DD == codePoint) ||\n (0x02DF == codePoint) ||\n (0x0300 <= codePoint && codePoint <= 0x036F) ||\n (0x0391 <= codePoint && codePoint <= 0x03A1) ||\n (0x03A3 <= codePoint && codePoint <= 0x03A9) ||\n (0x03B1 <= codePoint && codePoint <= 0x03C1) ||\n (0x03C3 <= codePoint && codePoint <= 0x03C9) ||\n (0x0401 == codePoint) ||\n (0x0410 <= codePoint && codePoint <= 0x044F) ||\n (0x0451 == codePoint) ||\n (0x2010 == codePoint) ||\n (0x2013 <= codePoint && codePoint <= 0x2016) ||\n (0x2018 <= codePoint && codePoint <= 0x2019) ||\n (0x201C <= codePoint && codePoint <= 0x201D) ||\n (0x2020 <= codePoint && codePoint <= 0x2022) ||\n (0x2024 <= codePoint && codePoint <= 0x2027) ||\n (0x2030 == codePoint) ||\n (0x2032 <= codePoint && codePoint <= 0x2033) ||\n (0x2035 == codePoint) ||\n (0x203B == codePoint) ||\n (0x203E == codePoint) ||\n (0x2074 == codePoint) ||\n (0x207F == codePoint) ||\n (0x2081 <= codePoint && codePoint <= 0x2084) ||\n (0x20AC == codePoint) ||\n (0x2103 == codePoint) ||\n (0x2105 == codePoint) ||\n (0x2109 == codePoint) ||\n (0x2113 == codePoint) ||\n (0x2116 == codePoint) ||\n (0x2121 <= codePoint && codePoint <= 0x2122) ||\n (0x2126 == codePoint) ||\n (0x212B == codePoint) ||\n (0x2153 <= codePoint && codePoint <= 0x2154) ||\n (0x215B <= codePoint && codePoint <= 0x215E) ||\n (0x2160 <= codePoint && codePoint <= 0x216B) ||\n (0x2170 <= codePoint && codePoint <= 0x2179) ||\n (0x2189 == codePoint) ||\n (0x2190 <= codePoint && codePoint <= 0x2199) ||\n (0x21B8 <= codePoint && codePoint <= 0x21B9) ||\n (0x21D2 == codePoint) ||\n (0x21D4 == codePoint) ||\n (0x21E7 == codePoint) ||\n (0x2200 == codePoint) ||\n (0x2202 <= codePoint && codePoint <= 0x2203) ||\n (0x2207 <= codePoint && codePoint <= 0x2208) ||\n (0x220B == codePoint) ||\n (0x220F == codePoint) ||\n (0x2211 == codePoint) ||\n (0x2215 == codePoint) ||\n (0x221A == codePoint) ||\n (0x221D <= codePoint && codePoint <= 0x2220) ||\n (0x2223 == codePoint) ||\n (0x2225 == codePoint) ||\n (0x2227 <= codePoint && codePoint <= 0x222C) ||\n (0x222E == codePoint) ||\n (0x2234 <= codePoint && codePoint <= 0x2237) ||\n (0x223C <= codePoint && codePoint <= 0x223D) ||\n (0x2248 == codePoint) ||\n (0x224C == codePoint) ||\n (0x2252 == codePoint) ||\n (0x2260 <= codePoint && codePoint <= 0x2261) ||\n (0x2264 <= codePoint && codePoint <= 0x2267) ||\n (0x226A <= codePoint && codePoint <= 0x226B) ||\n (0x226E <= codePoint && codePoint <= 0x226F) ||\n (0x2282 <= codePoint && codePoint <= 0x2283) ||\n (0x2286 <= codePoint && codePoint <= 0x2287) ||\n (0x2295 == codePoint) ||\n (0x2299 == codePoint) ||\n (0x22A5 == codePoint) ||\n (0x22BF == codePoint) ||\n (0x2312 == codePoint) ||\n (0x2460 <= codePoint && codePoint <= 0x24E9) ||\n (0x24EB <= codePoint && codePoint <= 0x254B) ||\n (0x2550 <= codePoint && codePoint <= 0x2573) ||\n (0x2580 <= codePoint && codePoint <= 0x258F) ||\n (0x2592 <= codePoint && codePoint <= 0x2595) ||\n (0x25A0 <= codePoint && codePoint <= 0x25A1) ||\n (0x25A3 <= codePoint && codePoint <= 0x25A9) ||\n (0x25B2 <= codePoint && codePoint <= 0x25B3) ||\n (0x25B6 <= codePoint && codePoint <= 0x25B7) ||\n (0x25BC <= codePoint && codePoint <= 0x25BD) ||\n (0x25C0 <= codePoint && codePoint <= 0x25C1) ||\n (0x25C6 <= codePoint && codePoint <= 0x25C8) ||\n (0x25CB == codePoint) ||\n (0x25CE <= codePoint && codePoint <= 0x25D1) ||\n (0x25E2 <= codePoint && codePoint <= 0x25E5) ||\n (0x25EF == codePoint) ||\n (0x2605 <= codePoint && codePoint <= 0x2606) ||\n (0x2609 == codePoint) ||\n (0x260E <= codePoint && codePoint <= 0x260F) ||\n (0x2614 <= codePoint && codePoint <= 0x2615) ||\n (0x261C == codePoint) ||\n (0x261E == codePoint) ||\n (0x2640 == codePoint) ||\n (0x2642 == codePoint) ||\n (0x2660 <= codePoint && codePoint <= 0x2661) ||\n (0x2663 <= codePoint && codePoint <= 0x2665) ||\n (0x2667 <= codePoint && codePoint <= 0x266A) ||\n (0x266C <= codePoint && codePoint <= 0x266D) ||\n (0x266F == codePoint) ||\n (0x269E <= codePoint && codePoint <= 0x269F) ||\n (0x26BE <= codePoint && codePoint <= 0x26BF) ||\n (0x26C4 <= codePoint && codePoint <= 0x26CD) ||\n (0x26CF <= codePoint && codePoint <= 0x26E1) ||\n (0x26E3 == codePoint) ||\n (0x26E8 <= codePoint && codePoint <= 0x26FF) ||\n (0x273D == codePoint) ||\n (0x2757 == codePoint) ||\n (0x2776 <= codePoint && codePoint <= 0x277F) ||\n (0x2B55 <= codePoint && codePoint <= 0x2B59) ||\n (0x3248 <= codePoint && codePoint <= 0x324F) ||\n (0xE000 <= codePoint && codePoint <= 0xF8FF) ||\n (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||\n (0xFFFD == codePoint) ||\n (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||\n (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||\n (0x1F130 <= codePoint && codePoint <= 0x1F169) ||\n (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||\n (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||\n (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||\n (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {\n return 'A';\n }\n\n return 'N';\n};\n\neaw.characterLength = function(character) {\n var code = this.eastAsianWidth(character);\n if (code == 'F' || code == 'W' || code == 'A') {\n return 2;\n } else {\n return 1;\n }\n};\n\n// Split a string considering surrogate-pairs.\nfunction stringToArray(string) {\n return string.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n}\n\neaw.length = function(string) {\n var characters = stringToArray(string);\n var len = 0;\n for (var i = 0; i < characters.length; i++) {\n len = len + this.characterLength(characters[i]);\n }\n return len;\n};\n\neaw.slice = function(text, start, end) {\n textLen = eaw.length(text)\n start = start ? start : 0;\n end = end ? end : 1;\n if (start < 0) {\n start = textLen + start;\n }\n if (end < 0) {\n end = textLen + end;\n }\n var result = '';\n var eawLen = 0;\n var chars = stringToArray(text);\n for (var i = 0; i < chars.length; i++) {\n var char = chars[i];\n var charLen = eaw.length(char);\n if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n if (eawLen + charLen <= end) {\n result += char;\n } else {\n break;\n }\n }\n eawLen += charLen;\n }\n return result;\n};\n","\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","import stripAnsi from 'strip-ansi';\nimport eastAsianWidth from 'eastasianwidth';\nimport emojiRegex from 'emoji-regex';\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\toptions = {\n\t\tambiguousIsNarrow: true,\n\t\t...options\n\t};\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), ' ');\n\n\tconst ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n\tlet width = 0;\n\n\tfor (const character of string) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (codePoint >= 0x300 && codePoint <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst code = eastAsianWidth.eastAsianWidth(character);\n\t\tswitch (code) {\n\t\t\tcase 'F':\n\t\t\tcase 'W':\n\t\t\t\twidth += 2;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\t\twidth += ambiguousCharacterWidth;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twidth += 1;\n\t\t}\n\t}\n\n\treturn width;\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue: code => {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows[rows.length - 1]));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\t\t\tisInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows[rows.length - 1].trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows[rows.length - 1]);\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst pre = [...rows.join('\\n')];\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replace(/\\r\\n/g, '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n","const actions = ['up', 'down', 'left', 'right', 'space', 'enter', 'cancel'] as const;\nexport type Action = (typeof actions)[number];\n\n/** Global settings for Clack programs, stored in memory */\ninterface InternalClackSettings {\n\tactions: Set<Action>;\n\taliases: Map<string, Action>;\n}\n\nexport const settings: InternalClackSettings = {\n\tactions: new Set(actions),\n\taliases: new Map<string, Action>([\n\t\t// vim support\n\t\t['k', 'up'],\n\t\t['j', 'down'],\n\t\t['h', 'left'],\n\t\t['l', 'right'],\n\t\t['\\x03', 'cancel'],\n\t\t// opinionated defaults!\n\t\t['escape', 'cancel'],\n\t]),\n};\n\nexport interface ClackSettings {\n\t/**\n\t * Set custom global aliases for the default actions.\n\t * This will not overwrite existing aliases, it will only add new ones!\n\t *\n\t * @param aliases - An object that maps aliases to actions\n\t * @default { k: 'up', j: 'down', h: 'left', l: 'right', '\\x03': 'cancel', 'escape': 'cancel' }\n\t */\n\taliases: Record<string, Action>;\n}\n\nexport function updateSettings(updates: ClackSettings) {\n\tfor (const _key in updates) {\n\t\tconst key = _key as keyof ClackSettings;\n\t\tif (!Object.hasOwn(updates, key)) continue;\n\t\tconst value = updates[key];\n\n\t\tswitch (key) {\n\t\t\tcase 'aliases': {\n\t\t\t\tfor (const alias in value) {\n\t\t\t\t\tif (!Object.hasOwn(value, alias)) continue;\n\t\t\t\t\tif (!settings.aliases.has(alias)) {\n\t\t\t\t\t\tsettings.aliases.set(alias, value[alias]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Check if a key is an alias for a default action\n * @param key - The raw key which might match to an action\n * @param action - The action to match\n * @returns boolean\n */\nexport function isActionKey(key: string | Array<string | undefined>, action: Action) {\n\tif (typeof key === 'string') {\n\t\treturn settings.aliases.get(key) === action;\n\t}\n\n\tfor (const value of key) {\n\t\tif (value === undefined) continue;\n\t\tif (isActionKey(value, action)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n","export function diffLines(a: string, b: string) {\n\tif (a === b) return;\n\n\tconst aLines = a.split('\\n');\n\tconst bLines = b.split('\\n');\n\tconst diff: number[] = [];\n\n\tfor (let i = 0; i < Math.max(aLines.length, bLines.length); i++) {\n\t\tif (aLines[i] !== bLines[i]) diff.push(i);\n\t}\n\n\treturn diff;\n}\n","import { stdin, stdout } from 'node:process';\nimport type { Key } from 'node:readline';\nimport * as readline from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { cursor } from 'sisteransi';\nimport { isActionKey } from './settings';\n\nexport * from './string';\nexport * from './settings';\n\nconst isWindows = globalThis.process.platform.startsWith('win');\n\nexport const CANCEL_SYMBOL = Symbol('clack:cancel');\n\nexport function isCancel(value: unknown): value is symbol {\n\treturn value === CANCEL_SYMBOL;\n}\n\nexport function setRawMode(input: Readable, value: boolean) {\n\tconst i = input as typeof stdin;\n\n\tif (i.isTTY) i.setRawMode(value);\n}\n\nexport function block({\n\tinput = stdin,\n\toutput = stdout,\n\toverwrite = true,\n\thideCursor = true,\n} = {}) {\n\tconst rl = readline.createInterface({\n\t\tinput,\n\t\toutput,\n\t\tprompt: '',\n\t\ttabSize: 1,\n\t});\n\treadline.emitKeypressEvents(input, rl);\n\tif (input.isTTY) input.setRawMode(true);\n\n\tconst clear = (data: Buffer, { name, sequence }: Key) => {\n\t\tconst str = String(data);\n\t\tif (isActionKey([str, name, sequence], 'cancel')) {\n\t\t\tif (hideCursor) output.write(cursor.show);\n\t\t\tprocess.exit(0);\n\t\t\treturn;\n\t\t}\n\t\tif (!overwrite) return;\n\t\tconst dx = name === 'return' ? 0 : -1;\n\t\tconst dy = name === 'return' ? -1 : 0;\n\n\t\treadline.moveCursor(output, dx, dy, () => {\n\t\t\treadline.clearLine(output, 1, () => {\n\t\t\t\tinput.once('keypress', clear);\n\t\t\t});\n\t\t});\n\t};\n\tif (hideCursor) output.write(cursor.hide);\n\tinput.once('keypress', clear);\n\n\treturn () => {\n\t\tinput.off('keypress', clear);\n\t\tif (hideCursor) output.write(cursor.show);\n\n\t\t// Prevent Windows specific issues: https://github.com/bombshell-dev/clack/issues/176\n\t\tif (input.isTTY && !isWindows) input.setRawMode(false);\n\n\t\t// @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n\t\trl.terminal = false;\n\t\trl.close();\n\t};\n}\n","import { stdin, stdout } from 'node:process';\nimport readline, { type Key, type ReadLine } from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { Writable } from 'node:stream';\nimport { cursor, erase } from 'sisteransi';\nimport wrap from 'wrap-ansi';\n\nimport { CANCEL_SYMBOL, diffLines, isActionKey, setRawMode, settings } from '../utils';\n\nimport type { ClackEvents, ClackState } from '../types';\nimport type { Action } from '../utils';\n\nexport interface PromptOptions<Self extends Prompt> {\n\trender(this: Omit<Self, 'prompt'>): string | undefined;\n\tplaceholder?: string;\n\tinitialValue?: any;\n\tvalidate?: ((value: any) => string | Error | undefined) | undefined;\n\tinput?: Readable;\n\toutput?: Writable;\n\tdebug?: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport default class Prompt {\n\tprotected input: Readable;\n\tprotected output: Writable;\n\tprivate _abortSignal?: AbortSignal;\n\n\tprivate rl: ReadLine | undefined;\n\tprivate opts: Omit<PromptOptions<Prompt>, 'render' | 'input' | 'output'>;\n\tprivate _render: (context: Omit<Prompt, 'prompt'>) => string | undefined;\n\tprivate _track = false;\n\tprivate _prevFrame = '';\n\tprivate _subscribers = new Map<string, { cb: (...args: any) => any; once?: boolean }[]>();\n\tprotected _cursor = 0;\n\n\tpublic state: ClackState = 'initial';\n\tpublic error = '';\n\tpublic value: any;\n\n\tconstructor(options: PromptOptions<Prompt>, trackValue = true) {\n\t\tconst { input = stdin, output = stdout, render, signal, ...opts } = options;\n\n\t\tthis.opts = opts;\n\t\tthis.onKeypress = this.onKeypress.bind(this);\n\t\tthis.close = this.close.bind(this);\n\t\tthis.render = this.render.bind(this);\n\t\tthis._render = render.bind(this);\n\t\tthis._track = trackValue;\n\t\tthis._abortSignal = signal;\n\n\t\tthis.input = input;\n\t\tthis.output = output;\n\t}\n\n\t/**\n\t * Unsubscribe all listeners\n\t */\n\tprotected unsubscribe() {\n\t\tthis._subscribers.clear();\n\t}\n\n\t/**\n\t * Set a subscriber with opts\n\t * @param event - The event name\n\t */\n\tprivate setSubscriber<T extends keyof ClackEvents>(\n\t\tevent: T,\n\t\topts: { cb: ClackEvents[T]; once?: boolean }\n\t) {\n\t\tconst params = this._subscribers.get(event) ?? [];\n\t\tparams.push(opts);\n\t\tthis._subscribers.set(event, params);\n\t}\n\n\t/**\n\t * Subscribe to an event\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic on<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb });\n\t}\n\n\t/**\n\t * Subscribe to an event once\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic once<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb, once: true });\n\t}\n\n\t/**\n\t * Emit an event with data\n\t * @param event - The event name\n\t * @param data - The data to pass to the callback\n\t */\n\tpublic emit<T extends keyof ClackEvents>(event: T, ...data: Parameters<ClackEvents[T]>) {\n\t\tconst cbs = this._subscribers.get(event) ?? [];\n\t\tconst cleanup: (() => void)[] = [];\n\n\t\tfor (const subscriber of cbs) {\n\t\t\tsubscriber.cb(...data);\n\n\t\t\tif (subscriber.once) {\n\t\t\t\tcleanup.push(() => cbs.splice(cbs.indexOf(subscriber), 1));\n\t\t\t}\n\t\t}\n\n\t\tfor (const cb of cleanup) {\n\t\t\tcb();\n\t\t}\n\t}\n\n\tpublic prompt() {\n\t\treturn new Promise<string | symbol>((resolve, reject) => {\n\t\t\tif (this._abortSignal) {\n\t\t\t\tif (this._abortSignal.aborted) {\n\t\t\t\t\tthis.state = 'cancel';\n\n\t\t\t\t\tthis.close();\n\t\t\t\t\treturn resolve(CANCEL_SYMBOL);\n\t\t\t\t}\n\n\t\t\t\tthis._abortSignal.addEventListener(\n\t\t\t\t\t'abort',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.state = 'cancel';\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst sink = new Writable();\n\t\t\tsink._write = (chunk, encoding, done) => {\n\t\t\t\tif (this._track) {\n\t\t\t\t\tthis.value = this.rl?.line.replace(/\\t/g, '');\n\t\t\t\t\tthis._cursor = this.rl?.cursor ?? 0;\n\t\t\t\t\tthis.emit('value', this.value);\n\t\t\t\t}\n\t\t\t\tdone();\n\t\t\t};\n\t\t\tthis.input.pipe(sink);\n\n\t\t\tthis.rl = readline.createInterface({\n\t\t\t\tinput: this.input,\n\t\t\t\toutput: sink,\n\t\t\t\ttabSize: 2,\n\t\t\t\tprompt: '',\n\t\t\t\tescapeCodeTimeout: 50,\n\t\t\t\tterminal: true,\n\t\t\t});\n\t\t\treadline.emitKeypressEvents(this.input, this.rl);\n\t\t\tthis.rl.prompt();\n\t\t\tif (this.opts.initialValue !== undefined && this._track) {\n\t\t\t\tthis.rl.write(this.opts.initialValue);\n\t\t\t}\n\n\t\t\tthis.input.on('keypress', this.onKeypress);\n\t\t\tsetRawMode(this.input, true);\n\t\t\tthis.output.on('resize', this.render);\n\n\t\t\tthis.render();\n\n\t\t\tthis.once('submit', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(this.value);\n\t\t\t});\n\t\t\tthis.once('cancel', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(CANCEL_SYMBOL);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate onKeypress(char: string, key?: Key) {\n\t\tif (this.state === 'error') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tif (key?.name) {\n\t\t\tif (!this._track && settings.aliases.has(key.name)) {\n\t\t\t\tthis.emit('cursor', settings.aliases.get(key.name));\n\t\t\t}\n\t\t\tif (settings.actions.has(key.name as Action)) {\n\t\t\t\tthis.emit('cursor', key.name as Action);\n\t\t\t}\n\t\t}\n\t\tif (char && (char.toLowerCase() === 'y' || char.toLowerCase() === 'n')) {\n\t\t\tthis.emit('confirm', char.toLowerCase() === 'y');\n\t\t}\n\t\tif (char === '\\t' && this.opts.placeholder) {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\t\t}\n\t\tif (char) {\n\t\t\tthis.emit('key', char.toLowerCase());\n\t\t}\n\n\t\tif (key?.name === 'return') {\n\t\t\tif (!this.value && this.opts.placeholder) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\n\t\t\tif (this.opts.validate) {\n\t\t\t\tconst problem = this.opts.validate(this.value);\n\t\t\t\tif (problem) {\n\t\t\t\t\tthis.error = problem instanceof Error ? problem.message : problem;\n\t\t\t\t\tthis.state = 'error';\n\t\t\t\t\tthis.rl?.write(this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state !== 'error') {\n\t\t\t\tthis.state = 'submit';\n\t\t\t}\n\t\t}\n\n\t\tif (isActionKey([char, key?.name, key?.sequence], 'cancel')) {\n\t\t\tthis.state = 'cancel';\n\t\t}\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.emit('finalize');\n\t\t}\n\t\tthis.render();\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprotected close() {\n\t\tthis.input.unpipe();\n\t\tthis.input.removeListener('keypress', this.onKeypress);\n\t\tthis.output.write('\\n');\n\t\tsetRawMode(this.input, false);\n\t\tthis.rl?.close();\n\t\tthis.rl = undefined;\n\t\tthis.emit(`${this.state}`, this.value);\n\t\tthis.unsubscribe();\n\t}\n\n\tprivate restoreCursor() {\n\t\tconst lines =\n\t\t\twrap(this._prevFrame, process.stdout.columns, { hard: true }).split('\\n').length - 1;\n\t\tthis.output.write(cursor.move(-999, lines * -1));\n\t}\n\n\tprivate render() {\n\t\tconst frame = wrap(this._render(this) ?? '', process.stdout.columns, { hard: true });\n\t\tif (frame === this._prevFrame) return;\n\n\t\tif (this.state === 'initial') {\n\t\t\tthis.output.write(cursor.hide);\n\t\t} else {\n\t\t\tconst diff = diffLines(this._prevFrame, frame);\n\t\t\tthis.restoreCursor();\n\t\t\t// If a single line has changed, only update that line\n\t\t\tif (diff && diff?.length === 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.lines(1));\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tthis.output.write(lines[diffLine]);\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\tthis.output.write(cursor.move(0, lines.length - diffLine - 1));\n\t\t\t\treturn;\n\t\t\t\t// If many lines have changed, rerender everything past the first line\n\t\t\t}\n\t\t\tif (diff && diff?.length > 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.down());\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tconst newLines = lines.slice(diffLine);\n\t\t\t\tthis.output.write(newLines.join('\\n'));\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.output.write(erase.down());\n\t\t}\n\n\t\tthis.output.write(frame);\n\t\tif (this.state === 'initial') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tthis._prevFrame = frame;\n\t}\n}\n","import { cursor } from 'sisteransi';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface ConfirmOptions extends PromptOptions<ConfirmPrompt> {\n\tactive: string;\n\tinactive: string;\n\tinitialValue?: boolean;\n}\nexport default class ConfirmPrompt extends Prompt {\n\tget cursor() {\n\t\treturn this.value ? 0 : 1;\n\t}\n\n\tprivate get _value() {\n\t\treturn this.cursor === 0;\n\t}\n\n\tconstructor(opts: ConfirmOptions) {\n\t\tsuper(opts, false);\n\t\tthis.value = !!opts.initialValue;\n\n\t\tthis.on('value', () => {\n\t\t\tthis.value = this._value;\n\t\t});\n\n\t\tthis.on('confirm', (confirm) => {\n\t\t\tthis.output.write(cursor.move(0, -1));\n\t\t\tthis.value = confirm;\n\t\t\tthis.state = 'submit';\n\t\t\tthis.close();\n\t\t});\n\n\t\tthis.on('cursor', () => {\n\t\t\tthis.value = !this.value;\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface GroupMultiSelectOptions<T extends { value: any }>\n\textends PromptOptions<GroupMultiSelectPrompt<T>> {\n\toptions: Record<string, T[]>;\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n\tselectableGroups?: boolean;\n}\nexport default class GroupMultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: (T & { group: string | boolean })[];\n\tcursor = 0;\n\t#selectableGroups: boolean;\n\n\tgetGroupItems(group: string): T[] {\n\t\treturn this.options.filter((o) => o.group === group);\n\t}\n\n\tisGroupSelected(group: string) {\n\t\tconst items = this.getGroupItems(group);\n\t\treturn items.every((i) => this.value.includes(i.value));\n\t}\n\n\tprivate toggleValue() {\n\t\tconst item = this.options[this.cursor];\n\t\tif (item.group === true) {\n\t\t\tconst group = item.value;\n\t\t\tconst groupedItems = this.getGroupItems(group);\n\t\t\tif (this.isGroupSelected(group)) {\n\t\t\t\tthis.value = this.value.filter(\n\t\t\t\t\t(v: string) => groupedItems.findIndex((i) => i.value === v) === -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.value = [...this.value, ...groupedItems.map((i) => i.value)];\n\t\t\t}\n\t\t\tthis.value = Array.from(new Set(this.value));\n\t\t} else {\n\t\t\tconst selected = this.value.includes(item.value);\n\t\t\tthis.value = selected\n\t\t\t\t? this.value.filter((v: T['value']) => v !== item.value)\n\t\t\t\t: [...this.value, item.value];\n\t\t}\n\t}\n\n\tconstructor(opts: GroupMultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\t\tconst { options } = opts;\n\t\tthis.#selectableGroups = opts.selectableGroups !== false;\n\t\tthis.options = Object.entries(options).flatMap(([key, option]) => [\n\t\t\t{ value: key, group: true, label: key },\n\t\t\t...option.map((opt) => ({ ...opt, group: key })),\n\t\t]) as any;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\tthis.#selectableGroups ? 0 : 1\n\t\t);\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up': {\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right': {\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface MultiSelectOptions<T extends { value: any }> extends PromptOptions<MultiSelectPrompt<T>> {\n\toptions: T[];\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class MultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor].value;\n\t}\n\n\tprivate toggleAll() {\n\t\tconst allSelected = this.value.length === this.options.length;\n\t\tthis.value = allSelected ? [] : this.options.map((v) => v.value);\n\t}\n\n\tprivate toggleValue() {\n\t\tconst selected = this.value.includes(this._value);\n\t\tthis.value = selected\n\t\t\t? this.value.filter((value: T['value']) => value !== this._value)\n\t\t\t: [...this.value, this._value];\n\t}\n\n\tconstructor(opts: MultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\t\tthis.on('key', (char) => {\n\t\t\tif (char === 'a') {\n\t\t\t\tthis.toggleAll();\n\t\t\t}\n\t\t});\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface PasswordOptions extends PromptOptions<PasswordPrompt> {\n\tmask?: string;\n}\nexport default class PasswordPrompt extends Prompt {\n\tvalueWithCursor = '';\n\tprivate _mask = '•';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tget masked() {\n\t\treturn this.value.replaceAll(/./g, this._mask);\n\t}\n\tconstructor({ mask, ...opts }: PasswordOptions) {\n\t\tsuper(opts);\n\t\tthis._mask = mask ?? '•';\n\n\t\tthis.on('finalize', () => {\n\t\t\tthis.valueWithCursor = this.masked;\n\t\t});\n\t\tthis.on('value', () => {\n\t\t\tif (this.cursor >= this.value.length) {\n\t\t\t\tthis.valueWithCursor = `${this.masked}${color.inverse(color.hidden('_'))}`;\n\t\t\t} else {\n\t\t\t\tconst s1 = this.masked.slice(0, this.cursor);\n\t\t\t\tconst s2 = this.masked.slice(this.cursor);\n\t\t\t\tthis.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectOptions<T extends { value: any }> extends PromptOptions<SelectPrompt<T>> {\n\toptions: T[];\n\tinitialValue?: T['value'];\n}\nexport default class SelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor];\n\t}\n\n\tprivate changeValue() {\n\t\tthis.value = this._value.value;\n\t}\n\n\tconstructor(opts: SelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.cursor = this.options.findIndex(({ value }) => value === opts.initialValue);\n\t\tif (this.cursor === -1) this.cursor = 0;\n\t\tthis.changeValue();\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.changeValue();\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectKeyOptions<T extends { value: any }> extends PromptOptions<SelectKeyPrompt<T>> {\n\toptions: T[];\n}\nexport default class SelectKeyPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tconstructor(opts: SelectKeyOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tconst keys = this.options.map(({ value: [initial] }) => initial?.toLowerCase());\n\t\tthis.cursor = Math.max(keys.indexOf(opts.initialValue), 0);\n\n\t\tthis.on('key', (key) => {\n\t\t\tif (!keys.includes(key)) return;\n\t\t\tconst value = this.options.find(({ value: [initial] }) => initial?.toLowerCase() === key);\n\t\t\tif (value) {\n\t\t\t\tthis.value = value.value;\n\t\t\t\tthis.state = 'submit';\n\t\t\t\tthis.emit('submit');\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\nexport interface TextOptions extends PromptOptions<TextPrompt> {\n\tplaceholder?: string;\n\tdefaultValue?: string;\n}\n\nexport default class TextPrompt extends Prompt {\n\tget valueWithCursor() {\n\t\tif (this.state === 'submit') {\n\t\t\treturn this.value;\n\t\t}\n\t\tif (this.cursor >= this.value.length) {\n\t\t\treturn `${this.value}█`;\n\t\t}\n\t\tconst s1 = this.value.slice(0, this.cursor);\n\t\tconst [s2, ...s3] = this.value.slice(this.cursor);\n\t\treturn `${s1}${color.inverse(s2)}${s3.join('')}`;\n\t}\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tconstructor(opts: TextOptions) {\n\t\tsuper(opts);\n\n\t\tthis.on('finalize', () => {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.value = opts.defaultValue;\n\t\t\t}\n\t\t});\n\t}\n}\n","import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","import { stripVTControlCharacters as strip } from 'node:util';\nimport {\n\tConfirmPrompt,\n\tGroupMultiSelectPrompt,\n\tMultiSelectPrompt,\n\tPasswordPrompt,\n\tSelectKeyPrompt,\n\tSelectPrompt,\n\ttype State,\n\tTextPrompt,\n\tblock,\n\tisCancel,\n} from '@clack/core';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport color from 'picocolors';\nimport { cursor, erase } from 'sisteransi';\n\nexport { isCancel } from '@clack/core';\nexport { updateSettings, type ClackSettings } from '@clack/core';\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = s('◆', '*');\nconst S_STEP_CANCEL = s('■', 'x');\nconst S_STEP_ERROR = s('▲', 'x');\nconst S_STEP_SUBMIT = s('◇', 'o');\n\nconst S_BAR_START = s('┌', 'T');\nconst S_BAR = s('│', '|');\nconst S_BAR_END = s('└', '—');\n\nconst S_RADIO_ACTIVE = s('●', '>');\nconst S_RADIO_INACTIVE = s('○', ' ');\nconst S_CHECKBOX_ACTIVE = s('◻', '[•]');\nconst S_CHECKBOX_SELECTED = s('◼', '[+]');\nconst S_CHECKBOX_INACTIVE = s('◻', '[ ]');\nconst S_PASSWORD_MASK = s('▪', '•');\n\nconst S_BAR_H = s('─', '-');\nconst S_CORNER_TOP_RIGHT = s('╮', '+');\nconst S_CONNECT_LEFT = s('├', '+');\nconst S_CORNER_BOTTOM_RIGHT = s('╯', '+');\n\nconst S_INFO = s('●', '•');\nconst S_SUCCESS = s('◆', '*');\nconst S_WARN = s('▲', '!');\nconst S_ERROR = s('■', 'x');\n\nconst symbol = (state: State) => {\n\tswitch (state) {\n\t\tcase 'initial':\n\t\tcase 'active':\n\t\t\treturn color.cyan(S_STEP_ACTIVE);\n\t\tcase 'cancel':\n\t\t\treturn color.red(S_STEP_CANCEL);\n\t\tcase 'error':\n\t\t\treturn color.yellow(S_STEP_ERROR);\n\t\tcase 'submit':\n\t\t\treturn color.green(S_STEP_SUBMIT);\n\t}\n};\n\ninterface LimitOptionsParams<TOption> {\n\toptions: TOption[];\n\tmaxItems: number | undefined;\n\tcursor: number;\n\tstyle: (option: TOption, active: boolean) => string;\n}\n\nconst limitOptions = <TOption>(params: LimitOptionsParams<TOption>): string[] => {\n\tconst { cursor, options, style } = params;\n\n\tconst paramMaxItems = params.maxItems ?? Number.POSITIVE_INFINITY;\n\tconst outputMaxItems = Math.max(process.stdout.rows - 4, 0);\n\t// We clamp to minimum 5 because anything less doesn't make sense UX wise\n\tconst maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n\tlet slidingWindowLocation = 0;\n\n\tif (cursor >= slidingWindowLocation + maxItems - 3) {\n\t\tslidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n\t} else if (cursor < slidingWindowLocation + 2) {\n\t\tslidingWindowLocation = Math.max(cursor - 2, 0);\n\t}\n\n\tconst shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n\tconst shouldRenderBottomEllipsis =\n\t\tmaxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n\treturn options\n\t\t.slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n\t\t.map((option, i, arr) => {\n\t\t\tconst isTopLimit = i === 0 && shouldRenderTopEllipsis;\n\t\t\tconst isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n\t\t\treturn isTopLimit || isBottomLimit\n\t\t\t\t? color.dim('...')\n\t\t\t\t: style(option, i + slidingWindowLocation === cursor);\n\t\t});\n};\n\nexport interface TextOptions {\n\tmessage: string;\n\tplaceholder?: string;\n\tdefaultValue?: string;\n\tinitialValue?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const text = (opts: TextOptions) => {\n\treturn new TextPrompt({\n\t\tvalidate: opts.validate,\n\t\tplaceholder: opts.placeholder,\n\t\tdefaultValue: opts.defaultValue,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst placeholder = opts.placeholder\n\t\t\t\t? color.inverse(opts.placeholder[0]) + color.dim(opts.placeholder.slice(1))\n\t\t\t\t: color.inverse(color.hidden('_'));\n\t\t\tconst value = !this.value ? placeholder : this.valueWithCursor;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${value}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(this.value || opts.placeholder)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(this.value ?? '')\n\t\t\t\t\t)}${this.value?.trim() ? `\\n${color.gray(S_BAR)}` : ''}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface PasswordOptions {\n\tmessage: string;\n\tmask?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const password = (opts: PasswordOptions) => {\n\treturn new PasswordPrompt({\n\t\tvalidate: opts.validate,\n\t\tmask: opts.mask ?? S_PASSWORD_MASK,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.valueWithCursor;\n\t\t\tconst masked = this.masked;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${masked}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(masked)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(color.dim(masked ?? ''))}${\n\t\t\t\t\t\tmasked ? `\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface ConfirmOptions {\n\tmessage: string;\n\tactive?: string;\n\tinactive?: string;\n\tinitialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n\tconst active = opts.active ?? 'Yes';\n\tconst inactive = opts.inactive ?? 'No';\n\treturn new ConfirmPrompt({\n\t\tactive,\n\t\tinactive,\n\t\tinitialValue: opts.initialValue ?? true,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.value ? active : inactive;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(value)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(value)\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${\n\t\t\t\t\t\tthis.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${active}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n\t\t\t\t\t} ${color.dim('/')} ${\n\t\t\t\t\t\t!this.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n\t\t\t\t\t}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<boolean | symbol>;\n};\n\ntype Primitive = Readonly<string | boolean | number>;\n\nexport type Option<Value> = Value extends Primitive\n\t? {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * The optional, user-facing text for this option.\n\t\t\t *\n\t\t\t * By default, the `value` is converted to a string.\n\t\t\t */\n\t\t\tlabel?: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t}\n\t: {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * Required. The user-facing text for this option.\n\t\t\t */\n\t\t\tlabel: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t};\n\nexport interface SelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValue?: Value;\n\tmaxItems?: number;\n}\n\nexport const select = <Value>(opts: SelectOptions<Value>) => {\n\tconst opt = (option: Option<Value>, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tswitch (state) {\n\t\t\tcase 'selected':\n\t\t\t\treturn `${color.dim(label)}`;\n\t\t\tcase 'active':\n\t\t\t\treturn `${color.green(S_RADIO_ACTIVE)} ${label} ${\n\t\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t\t}`;\n\t\t\tcase 'cancelled':\n\t\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t\tdefault:\n\t\t\t\treturn `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t};\n\n\treturn new SelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[this.cursor], 'selected')}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options[this.cursor],\n\t\t\t\t\t\t'cancelled'\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: (item, active) => opt(item, active ? 'active' : 'inactive'),\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport const selectKey = <Value extends string>(opts: SelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'cancelled' = 'inactive'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active') {\n\t\t\treturn `${color.bgCyan(color.gray(` ${option.value} `))} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\treturn `${color.gray(color.bgWhite(color.inverse(` ${option.value} `)))} ${label} ${\n\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t}`;\n\t};\n\n\treturn new SelectKeyPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options.find((opt) => opt.value === this.value) ?? opts.options[0],\n\t\t\t\t\t\t'selected'\n\t\t\t\t\t)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[0], 'cancelled')}\\n${color.gray(\n\t\t\t\t\t\tS_BAR\n\t\t\t\t\t)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i) => opt(option, i === this.cursor ? 'active' : 'inactive'))\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport interface MultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValues?: Value[];\n\tmaxItems?: number;\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const multiselect = <Value>(opts: MultiSelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'active') {\n\t\t\treturn `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new MultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tconst styleOption = (option: Option<Value>, active: boolean) => {\n\t\t\t\tconst selected = this.value.includes(option.value);\n\t\t\t\tif (active && selected) {\n\t\t\t\t\treturn opt(option, 'active-selected');\n\t\t\t\t}\n\t\t\t\tif (selected) {\n\t\t\t\t\treturn opt(option, 'selected');\n\t\t\t\t}\n\t\t\t\treturn opt(option, active ? 'active' : 'inactive');\n\t\t\t};\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tthis.options\n\t\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t\t.join(color.dim(', ')) || color.dim('none')\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title + color.yellow(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport interface GroupMultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Record<string, Option<Value>[]>;\n\tinitialValues?: Value[];\n\trequired?: boolean;\n\tcursorAt?: Value;\n\tselectableGroups?: boolean;\n}\nexport const groupMultiselect = <Value>(opts: GroupMultiSelectOptions<Value>) => {\n\tconst { selectableGroups = true } = opts;\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate:\n\t\t\t| 'inactive'\n\t\t\t| 'active'\n\t\t\t| 'selected'\n\t\t\t| 'active-selected'\n\t\t\t| 'group-active'\n\t\t\t| 'group-active-selected'\n\t\t\t| 'submitted'\n\t\t\t| 'cancelled',\n\t\toptions: Option<Value>[] = []\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tconst isItem = typeof (option as any).group === 'string';\n\t\tconst next = isItem && (options[options.indexOf(option) + 1] ?? { group: true });\n\t\tconst isLast = isItem && (next as any).group === true;\n\t\tconst prefix = isItem ? (selectableGroups ? `${isLast ? S_BAR_END : S_BAR} ` : ' ') : '';\n\n\t\tif (state === 'active') {\n\t\t\treturn `${color.dim(prefix)}${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'group-active') {\n\t\t\treturn `${prefix}${color.cyan(S_CHECKBOX_ACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'group-active-selected') {\n\t\t\treturn `${prefix}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\tconst selectedCheckbox = isItem || selectableGroups ? color.green(S_CHECKBOX_SELECTED) : '';\n\t\t\treturn `${color.dim(prefix)}${selectedCheckbox} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tconst unselectedCheckbox = isItem || selectableGroups ? color.dim(S_CHECKBOX_INACTIVE) : '';\n\t\treturn `${color.dim(prefix)}${unselectedCheckbox} ${color.dim(label)}`;\n\t};\n\n\treturn new GroupMultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tselectableGroups,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t.join(color.dim(', '))}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title}${color.yellow(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport const note = (message = '', title = '') => {\n\tconst lines = `\\n${message}\\n`.split('\\n');\n\tconst titleLen = strip(title).length;\n\tconst len =\n\t\tMath.max(\n\t\t\tlines.reduce((sum, ln) => {\n\t\t\t\tconst line = strip(ln);\n\t\t\t\treturn line.length > sum ? line.length : sum;\n\t\t\t}, 0),\n\t\t\ttitleLen\n\t\t) + 2;\n\tconst msg = lines\n\t\t.map(\n\t\t\t(ln) =>\n\t\t\t\t`${color.gray(S_BAR)} ${color.dim(ln)}${' '.repeat(len - strip(ln).length)}${color.gray(\n\t\t\t\t\tS_BAR\n\t\t\t\t)}`\n\t\t)\n\t\t.join('\\n');\n\tprocess.stdout.write(\n\t\t`${color.gray(S_BAR)}\\n${color.green(S_STEP_SUBMIT)} ${color.reset(title)} ${color.gray(\n\t\t\tS_BAR_H.repeat(Math.max(len - titleLen - 1, 1)) + S_CORNER_TOP_RIGHT\n\t\t)}\\n${msg}\\n${color.gray(S_CONNECT_LEFT + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\\n`\n\t);\n};\n\nexport const cancel = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_END)} ${color.red(message)}\\n\\n`);\n};\n\nexport const intro = (title = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_START)} ${title}\\n`);\n};\n\nexport const outro = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${color.gray(S_BAR_END)} ${message}\\n\\n`);\n};\n\nexport type LogMessageOptions = {\n\tsymbol?: string;\n};\nexport const log = {\n\tmessage: (message = '', { symbol = color.gray(S_BAR) }: LogMessageOptions = {}) => {\n\t\tconst parts = [`${color.gray(S_BAR)}`];\n\t\tif (message) {\n\t\t\tconst [firstLine, ...lines] = message.split('\\n');\n\t\t\tparts.push(`${symbol} ${firstLine}`, ...lines.map((ln) => `${color.gray(S_BAR)} ${ln}`));\n\t\t}\n\t\tprocess.stdout.write(`${parts.join('\\n')}\\n`);\n\t},\n\tinfo: (message: string) => {\n\t\tlog.message(message, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (message: string) => {\n\t\tlog.message(message, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (message: string) => {\n\t\tlog.warn(message);\n\t},\n\terror: (message: string) => {\n\t\tlog.message(message, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nconst prefix = `${color.gray(S_BAR)} `;\nexport const stream = {\n\tmessage: async (\n\t\titerable: Iterable<string> | AsyncIterable<string>,\n\t\t{ symbol = color.gray(S_BAR) }: LogMessageOptions = {}\n\t) => {\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${symbol} `);\n\t\tlet lineWidth = 3;\n\t\tfor await (let chunk of iterable) {\n\t\t\tchunk = chunk.replace(/\\n/g, `\\n${prefix}`);\n\t\t\tif (chunk.includes('\\n')) {\n\t\t\t\tlineWidth = 3 + strip(chunk.slice(chunk.lastIndexOf('\\n'))).length;\n\t\t\t}\n\t\t\tconst chunkLen = strip(chunk).length;\n\t\t\tif (lineWidth + chunkLen < process.stdout.columns) {\n\t\t\t\tlineWidth += chunkLen;\n\t\t\t\tprocess.stdout.write(chunk);\n\t\t\t} else {\n\t\t\t\tprocess.stdout.write(`\\n${prefix}${chunk.trimStart()}`);\n\t\t\t\tlineWidth = 3 + strip(chunk.trimStart()).length;\n\t\t\t}\n\t\t}\n\t\tprocess.stdout.write('\\n');\n\t},\n\tinfo: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.warn(iterable);\n\t},\n\terror: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nexport interface SpinnerOptions {\n\tindicator?: 'dots' | 'timer';\n}\n\nexport const spinner = ({ indicator = 'dots' }: SpinnerOptions = {}) => {\n\tconst frames = unicode ? ['◒', '◐', '◓', '◑'] : ['•', 'o', 'O', '0'];\n\tconst delay = unicode ? 80 : 120;\n\tconst isCI = process.env.CI === 'true';\n\n\tlet unblock: () => void;\n\tlet loop: NodeJS.Timeout;\n\tlet isSpinnerActive = false;\n\tlet _message = '';\n\tlet _prevMessage: string | undefined = undefined;\n\tlet _origin: number = performance.now();\n\n\tconst handleExit = (code: number) => {\n\t\tconst msg = code > 1 ? 'Something went wrong' : 'Canceled';\n\t\tif (isSpinnerActive) stop(msg, code);\n\t};\n\n\tconst errorEventHandler = () => handleExit(2);\n\tconst signalEventHandler = () => handleExit(1);\n\n\tconst registerHooks = () => {\n\t\t// Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n\t\tprocess.on('uncaughtExceptionMonitor', errorEventHandler);\n\t\t// Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n\t\tprocess.on('unhandledRejection', errorEventHandler);\n\t\t// Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n\t\tprocess.on('SIGINT', signalEventHandler);\n\t\tprocess.on('SIGTERM', signalEventHandler);\n\t\tprocess.on('exit', handleExit);\n\t};\n\n\tconst clearHooks = () => {\n\t\tprocess.removeListener('uncaughtExceptionMonitor', errorEventHandler);\n\t\tprocess.removeListener('unhandledRejection', errorEventHandler);\n\t\tprocess.removeListener('SIGINT', signalEventHandler);\n\t\tprocess.removeListener('SIGTERM', signalEventHandler);\n\t\tprocess.removeListener('exit', handleExit);\n\t};\n\n\tconst clearPrevMessage = () => {\n\t\tif (_prevMessage === undefined) return;\n\t\tif (isCI) process.stdout.write('\\n');\n\t\tconst prevLines = _prevMessage.split('\\n');\n\t\tprocess.stdout.write(cursor.move(-999, prevLines.length - 1));\n\t\tprocess.stdout.write(erase.down(prevLines.length));\n\t};\n\n\tconst parseMessage = (msg: string): string => {\n\t\treturn msg.replace(/\\.+$/, '');\n\t};\n\n\tconst formatTimer = (origin: number): string => {\n\t\tconst duration = (performance.now() - origin) / 1000;\n\t\tconst min = Math.floor(duration / 60);\n\t\tconst secs = Math.floor(duration % 60);\n\t\treturn min > 0 ? `[${min}m ${secs}s]` : `[${secs}s]`;\n\t};\n\n\tconst start = (msg = ''): void => {\n\t\tisSpinnerActive = true;\n\t\tunblock = block();\n\t\t_message = parseMessage(msg);\n\t\t_origin = performance.now();\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n`);\n\t\tlet frameIndex = 0;\n\t\tlet indicatorTimer = 0;\n\t\tregisterHooks();\n\t\tloop = setInterval(() => {\n\t\t\tif (isCI && _message === _prevMessage) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearPrevMessage();\n\t\t\t_prevMessage = _message;\n\t\t\tconst frame = color.magenta(frames[frameIndex]);\n\n\t\t\tif (isCI) {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}...`);\n\t\t\t} else if (indicator === 'timer') {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message} ${formatTimer(_origin)}`);\n\t\t\t} else {\n\t\t\t\tconst loadingDots = '.'.repeat(Math.floor(indicatorTimer)).slice(0, 3);\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}${loadingDots}`);\n\t\t\t}\n\n\t\t\tframeIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n\t\t\tindicatorTimer = indicatorTimer < frames.length ? indicatorTimer + 0.125 : 0;\n\t\t}, delay);\n\t};\n\n\tconst stop = (msg = '', code = 0): void => {\n\t\tisSpinnerActive = false;\n\t\tclearInterval(loop);\n\t\tclearPrevMessage();\n\t\tconst step =\n\t\t\tcode === 0\n\t\t\t\t? color.green(S_STEP_SUBMIT)\n\t\t\t\t: code === 1\n\t\t\t\t\t? color.red(S_STEP_CANCEL)\n\t\t\t\t\t: color.red(S_STEP_ERROR);\n\t\t_message = parseMessage(msg ?? _message);\n\t\tif (indicator === 'timer') {\n\t\t\tprocess.stdout.write(`${step} ${_message} ${formatTimer(_origin)}\\n`);\n\t\t} else {\n\t\t\tprocess.stdout.write(`${step} ${_message}\\n`);\n\t\t}\n\t\tclearHooks();\n\t\tunblock();\n\t};\n\n\tconst message = (msg = ''): void => {\n\t\t_message = parseMessage(msg ?? _message);\n\t};\n\n\treturn {\n\t\tstart,\n\t\tstop,\n\t\tmessage,\n\t};\n};\n\nexport type PromptGroupAwaitedReturn<T> = {\n\t[P in keyof T]: Exclude<Awaited<T[P]>, symbol>;\n};\n\nexport interface PromptGroupOptions<T> {\n\t/**\n\t * Control how the group can be canceled\n\t * if one of the prompts is canceled.\n\t */\n\tonCancel?: (opts: { results: Prettify<Partial<PromptGroupAwaitedReturn<T>>> }) => void;\n}\n\ntype Prettify<T> = {\n\t[P in keyof T]: T[P];\n} & {};\n\nexport type PromptGroup<T> = {\n\t[P in keyof T]: (opts: {\n\t\tresults: Prettify<Partial<PromptGroupAwaitedReturn<Omit<T, P>>>>;\n\t}) => undefined | Promise<T[P] | undefined>;\n};\n\n/**\n * Define a group of prompts to be displayed\n * and return a results of objects within the group\n */\nexport const group = async <T>(\n\tprompts: PromptGroup<T>,\n\topts?: PromptGroupOptions<T>\n): Promise<Prettify<PromptGroupAwaitedReturn<T>>> => {\n\tconst results = {} as any;\n\tconst promptNames = Object.keys(prompts);\n\n\tfor (const name of promptNames) {\n\t\tconst prompt = prompts[name as keyof T];\n\t\tconst result = await prompt({ results })?.catch((e) => {\n\t\t\tthrow e;\n\t\t});\n\n\t\t// Pass the results to the onCancel function\n\t\t// so the user can decide what to do with the results\n\t\t// TODO: Switch to callback within core to avoid isCancel Fn\n\t\tif (typeof opts?.onCancel === 'function' && isCancel(result)) {\n\t\t\tresults[name] = 'canceled';\n\t\t\topts.onCancel({ results });\n\t\t\tcontinue;\n\t\t}\n\n\t\tresults[name] = result;\n\t}\n\n\treturn results;\n};\n\nexport type Task = {\n\t/**\n\t * Task title\n\t */\n\ttitle: string;\n\t/**\n\t * Task function\n\t */\n\ttask: (message: (string: string) => void) => string | Promise<string> | void | Promise<void>;\n\n\t/**\n\t * If enabled === false the task will be skipped\n\t */\n\tenabled?: boolean;\n};\n\n/**\n * Define a group of tasks to be executed\n */\nexport const tasks = async (tasks: Task[]) => {\n\tfor (const task of tasks) {\n\t\tif (task.enabled === false) continue;\n\n\t\tconst s = spinner();\n\t\ts.start(task.title);\n\t\tconst result = await task.task(s.message);\n\t\ts.stop(result || task.title);\n\t}\n};\n","import type { Migration } from '../../types';\n\nconst migration: Migration = {\n id: '001',\n title: 'eXemble팀 → @exem-ui 마이그레이션',\n description:\n '@exem/* 패키지 경로 통합, 컴포넌트 API 변경, CSS 토큰 리네이밍을 한 번에 처리합니다.',\n autoRules: [\n // ── 패키지명 치환 (@exem/*) ──\n {\n id: 'pkg-react',\n description: '@exem/react → @exem-ui/react',\n find: /(['\"])@exem\\/react\\1/g,\n replace: '$1@exem-ui/react$1',\n },\n {\n id: 'pkg-icon',\n description: '@exem/icon → @exem-ui/react/icon',\n find: /(['\"])@exem\\/icon\\1/g,\n replace: '$1@exem-ui/react/icon$1',\n },\n {\n id: 'pkg-design-token',\n description: '@exem/design-token → @exem-ui/core',\n find: /(['\"])@exem\\/design-token\\1/g,\n replace: '$1@exem-ui/core$1',\n },\n {\n id: 'pkg-tailwind',\n description: '@exem/tailwindcss3 → @exem-ui/tailwindcss3',\n find: /(['\"])@exem\\/tailwindcss3\\1/g,\n replace: '$1@exem-ui/tailwindcss3$1',\n },\n {\n id: 'pkg-stylesheet',\n description: '@exem/stylesheet → @exem-ui/core/css',\n find: /(['\"])@exem\\/stylesheet\\1/g,\n replace: '$1@exem-ui/core/css$1',\n },\n // ── 일부 프로젝트에서 @exem-fe/* 사용 ──\n {\n id: 'pkg-react-fe',\n description: '@exem-fe/react → @exem-ui/react',\n find: /(['\"])@exem-fe\\/react\\1/g,\n replace: '$1@exem-ui/react$1',\n },\n {\n id: 'pkg-icon-fe',\n description: '@exem-fe/icon → @exem-ui/react/icon',\n find: /(['\"])@exem-fe\\/icon\\1/g,\n replace: '$1@exem-ui/react/icon$1',\n },\n {\n id: 'pkg-design-token-fe',\n description: '@exem-fe/design-token → @exem-ui/core',\n find: /(['\"])@exem-fe\\/design-token\\1/g,\n replace: '$1@exem-ui/core$1',\n },\n {\n id: 'pkg-tailwind-fe',\n description: '@exem-fe/tailwindcss3-plugin → @exem-ui/tailwindcss3',\n find: /(['\"])@exem-fe\\/tailwindcss3-plugin\\1/g,\n replace: '$1@exem-ui/tailwindcss3$1',\n },\n\n // ── Button variant ──\n {\n id: 'btn-variant-text',\n description: 'variant=\"text\" → variant=\"invisible\"',\n find: /variant\\s*=\\s*(['\"])text\\1/g,\n replace: 'variant=$1invisible$1',\n },\n {\n id: 'btn-variant-text-dynamic',\n description: \"variant: 'text' → variant: 'invisible'\",\n find: /variant\\s*:\\s*(['\"])text\\1/g,\n replace: 'variant: $1invisible$1',\n },\n\n // ── ButtonGroup variant ──\n {\n id: 'btngroup-variant-default',\n description: 'ButtonGroup variant=\"default\" → variant=\"contained\"',\n find: /(<ButtonGroup[^>]*?)variant\\s*=\\s*(['\"])default\\2/g,\n replace: '$1variant=$2contained$2',\n },\n {\n id: 'btngroup-variant-icononly',\n description: 'ButtonGroup variant=\"iconOnly\" → iconOnly variant=\"contained\"',\n find: /(<ButtonGroup[^>]*?)variant\\s*=\\s*(['\"])iconOnly\\2/g,\n replace: '$1iconOnly variant=$2contained$2',\n },\n\n // ── Modal ──\n {\n id: 'modal-footer-actions',\n description: 'Modal.FooterActions → Modal.Actions',\n find: /Modal\\.FooterActions/g,\n replace: 'Modal.Actions',\n },\n {\n id: 'modal-footer-actions-type',\n description: 'ModalFooterActionsProps → ModalActionsProps',\n find: /ModalFooterActionsProps/g,\n replace: 'ModalActionsProps',\n },\n {\n id: 'modal-fullsize',\n description: 'size=\"fullSize\" → size=\"fullsize\"',\n find: /size\\s*=\\s*(['\"])fullSize\\1/g,\n replace: 'size=$1fullsize$1',\n },\n\n // ── CSS 토큰 ──\n {\n id: 'token-rounded-circle',\n description: 'rounded-circle → rounded-full',\n find: /rounded-circle/g,\n replace: 'rounded-full',\n },\n {\n id: 'token-surface-primary',\n description: 'surface-primary-* → solid-primary-*',\n find: /surface-primary-(default|hovered|disabled)/g,\n replace: 'solid-primary-$1',\n },\n {\n id: 'token-surface-accent',\n description: 'surface-accent-* → solid-accent-*',\n find: /surface-accent-(default|hovered|disabled)/g,\n replace: 'solid-accent-$1',\n },\n {\n id: 'token-surface-critical',\n description: 'surface-critical-* → solid-critical-*',\n find: /surface-critical-(default|hovered|disabled)/g,\n replace: 'solid-critical-$1',\n },\n {\n id: 'token-material-scroll',\n description: 'material-scroll → component-scroll',\n find: /material-scroll/g,\n replace: 'component-scroll',\n },\n {\n id: 'token-material-tooltip',\n description: 'material-tooltip → component-tooltip',\n find: /material-tooltip/g,\n replace: 'component-tooltip',\n },\n {\n id: 'token-material-toast',\n description: 'material-toast → component-toast',\n find: /material-toast/g,\n replace: 'component-toast',\n },\n {\n id: 'token-interaction-selected',\n description: 'interaction-selected → elevation-accent',\n find: /interaction-selected/g,\n replace: 'elevation-accent',\n },\n ],\n\n manualChecks: [\n {\n id: 'tabs-size-prop',\n description: 'Tabs size prop이 제거됨',\n find: /<Tabs(?![.\\w])[^>]*\\bsize\\s*=/g,\n suggestion: 'size prop을 제거하세요. primary: h-9, secondary: h-8로 고정됩니다.',\n },\n {\n id: 'btngroup-color-prop',\n description: 'ButtonGroup color prop이 제거됨',\n find: /<ButtonGroup[^>]*\\bcolor\\s*=/g,\n suggestion:\n 'color prop을 제거하세요. variant에 따라 자동 결정됩니다 (contained→assistive, outlined→primary).',\n },\n {\n id: 'use-toast-hook',\n description: 'useToast() → toast() 함수로 전환 권장 (deprecated)',\n find: /useToast\\s*\\(/g,\n suggestion: \"import { toast } from '@exem-ui/react' 후 toast(), toast.success() 등 사용\",\n },\n {\n id: 'toast-reactnode-input',\n description: 'toast()에 ReactNode 직접 전달 불가 → toast.custom() 사용',\n find: /toast\\s*\\(\\s*</g,\n suggestion: 'toast(<Component />) → toast.custom(<Component />) 으로 변경하세요.',\n },\n {\n id: 'datepicker-mode',\n description: 'DatePicker mode prop → type prop으로 변경',\n find: /<DatePicker[^>]*\\bmode\\s*=/g,\n suggestion: 'mode=\"single\" → type=\"single\", mode=\"range\" → type=\"range\"',\n },\n {\n id: 'loading-default-size',\n description: 'Loading 기본 size가 medium → large로 변경됨',\n find: /<Loading(?![^>]*\\bsize\\s*=)[^>]*\\/?>/g,\n suggestion: '기존 동작 유지가 필요하면 size=\"medium\"을 명시하세요.',\n },\n {\n id: 'breadcrumb-separator',\n description: 'Breadcrumb.Separator 아이콘 → \"/\" 텍스트로 변경됨',\n find: /<Breadcrumb\\.Separator\\s*\\/?\\s*>/g,\n suggestion:\n '아이콘 유지: <Breadcrumb.Separator><ChevronRightIcon size={16} /></Breadcrumb.Separator>',\n },\n {\n id: 'colorpicker',\n description: 'ColorPicker가 디자인시스템에 포함되지 않음',\n find: /\\bColorPicker\\b/g,\n suggestion: 'ColorPicker 코드를 프로젝트 내부 컴포넌트로 이동하세요.',\n },\n {\n id: 'css-var-radius',\n description: 'CSS 변수 기반 radius(--radius-*)가 고정 px 값으로 변경됨',\n find: /var\\(--radius-/g,\n suggestion:\n 'CSS 변수 대신 Tailwind 클래스(rounded-weak 등)를 사용하세요. 값이 축소되었을 수 있습니다.',\n },\n {\n id: 'elevation-inverse-toast',\n description: 'bg-elevation-inverse (Toast 전용) → bg-component-toast',\n find: /elevation-inverse/g,\n suggestion: 'Toast 배경으로 사용 시 bg-component-toast로 변경. 다른 용도라면 유지.',\n },\n ],\n};\n\nexport default migration;\n","import type { Migration } from '../../types';\n\nconst migration: Migration = {\n id: '002',\n title: 'FE 1팀 → @exem-ui 마이그레이션',\n description:\n '@exem-fe/* 패키지 경로 통합, 컴포넌트 API 변경, CSS 토큰 리네이밍을 한 번에 처리합니다.',\n autoRules: [\n // ── 패키지명 치환 ──\n {\n id: 'pkg-react',\n description: '@exem-fe/react → @exem-ui/react',\n find: /(['\"])@exem-fe\\/react\\1/g,\n replace: '$1@exem-ui/react$1',\n },\n {\n id: 'pkg-icon',\n description: '@exem-fe/icon → @exem-ui/react/icon',\n find: /(['\"])@exem-fe\\/icon\\1/g,\n replace: '$1@exem-ui/react/icon$1',\n },\n {\n id: 'pkg-design-token',\n description: '@exem-fe/design-token → @exem-ui/core',\n find: /(['\"])@exem-fe\\/design-token\\1/g,\n replace: '$1@exem-ui/core$1',\n },\n {\n id: 'pkg-stylesheet',\n description: '@exem-fe/stylesheet → @exem-ui/core/css',\n find: /(['\"])@exem-fe\\/stylesheet(?:\\/css)?\\1/g,\n replace: '$1@exem-ui/core/css$1',\n },\n {\n id: 'pkg-tailwind',\n description: '@exem-fe/tailwindcss-plugin → @exem-ui/tailwindcss3',\n find: /(['\"])@exem-fe\\/tailwindcss(?:3)?-plugin\\1/g,\n replace: '$1@exem-ui/tailwindcss3$1',\n },\n {\n id: 'pkg-ui-react',\n description: '@exem-fe/ui/react → @exem-ui/react',\n find: /(['\"])@exem-fe\\/ui\\/react\\1/g,\n replace: '$1@exem-ui/react$1',\n },\n {\n id: 'pkg-ui-tailwind',\n description: '@exem-fe/ui/tailwind → @exem-ui/tailwindcss3',\n find: /(['\"])@exem-fe\\/ui\\/tailwind\\1/g,\n replace: '$1@exem-ui/tailwindcss3$1',\n },\n\n // ── Button variant ──\n {\n id: 'btn-variant-text',\n description: 'variant=\"text\" → variant=\"invisible\"',\n find: /variant\\s*=\\s*(['\"])text\\1/g,\n replace: 'variant=$1invisible$1',\n },\n {\n id: 'btn-variant-text-dynamic',\n description: \"variant: 'text' → variant: 'invisible'\",\n find: /variant\\s*:\\s*(['\"])text\\1/g,\n replace: 'variant: $1invisible$1',\n },\n\n // ── ButtonGroup variant ──\n {\n id: 'btngroup-variant-default',\n description: 'ButtonGroup variant=\"default\" → variant=\"contained\"',\n find: /(<ButtonGroup[^>]*?)variant\\s*=\\s*(['\"])default\\2/g,\n replace: '$1variant=$2contained$2',\n },\n {\n id: 'btngroup-variant-icononly',\n description: 'ButtonGroup variant=\"iconOnly\" → iconOnly variant=\"contained\"',\n find: /(<ButtonGroup[^>]*?)variant\\s*=\\s*(['\"])iconOnly\\2/g,\n replace: '$1iconOnly variant=$2contained$2',\n },\n\n // ── Modal ──\n {\n id: 'modal-footer-actions',\n description: 'Modal.FooterActions → Modal.Actions',\n find: /Modal\\.FooterActions/g,\n replace: 'Modal.Actions',\n },\n {\n id: 'modal-footer-actions-type',\n description: 'ModalFooterActionsProps → ModalActionsProps',\n find: /ModalFooterActionsProps/g,\n replace: 'ModalActionsProps',\n },\n\n // ── Tooltip size ──\n {\n id: 'tooltip-size-xlarge',\n description: 'size=\"xLarge\" → size=\"xlarge\"',\n find: /size\\s*=\\s*(['\"])xLarge\\1/g,\n replace: 'size=$1xlarge$1',\n },\n\n // ── CSS 토큰 ──\n {\n id: 'token-rounded-circle',\n description: 'rounded-circle → rounded-full',\n find: /rounded-circle/g,\n replace: 'rounded-full',\n },\n {\n id: 'token-surface-primary',\n description: 'surface-primary-* → solid-primary-*',\n find: /surface-primary-(default|hovered|disabled)/g,\n replace: 'solid-primary-$1',\n },\n {\n id: 'token-surface-accent',\n description: 'surface-accent-* → solid-accent-*',\n find: /surface-accent-(default|hovered|disabled)/g,\n replace: 'solid-accent-$1',\n },\n {\n id: 'token-surface-critical',\n description: 'surface-critical-* → solid-critical-*',\n find: /surface-critical-(default|hovered|disabled)/g,\n replace: 'solid-critical-$1',\n },\n {\n id: 'token-material-scroll',\n description: 'material-scroll → component-scroll',\n find: /material-scroll/g,\n replace: 'component-scroll',\n },\n {\n id: 'token-material-tooltip',\n description: 'material-tooltip → component-tooltip',\n find: /material-tooltip/g,\n replace: 'component-tooltip',\n },\n {\n id: 'token-interaction-selected',\n description: 'interaction-selected → elevation-accent',\n find: /interaction-selected/g,\n replace: 'elevation-accent',\n },\n ],\n\n manualChecks: [\n {\n id: 'textfield-no-variant',\n description: '<TextField>에 variant=\"fill\" 또는 variant=\"line\" 추가 필요',\n find: /<TextField(?![.\\w])(?![^>]*variant\\s*=)/g,\n suggestion: '<TextField variant=\"fill\" ...>',\n },\n {\n id: 'textarea-no-variant',\n description: '<TextArea>에 variant=\"fill\" 또는 variant=\"line\" 추가 필요',\n find: /<TextArea(?![.\\w])(?![^>]*variant\\s*=)/g,\n suggestion: '<TextArea variant=\"fill\" ...>',\n },\n {\n id: 'select-no-variant',\n description: '<Select>에 variant=\"fill\" 또는 variant=\"line\" 추가 필요',\n find: /<Select(?!\\.)(?![^>]*variant\\s*=)(?![^>]*>)/g,\n suggestion: '<Select variant=\"fill\" ...>',\n },\n {\n id: 'use-toast-hook',\n description: 'useToast() → toast() 함수로 전환 권장 (deprecated)',\n find: /useToast\\s*\\(/g,\n suggestion:\n \"import { toast } from '@exem-ui/react' 후 toast.success(), toast.error() 등 사용\",\n },\n {\n id: 'toast-options-type',\n description: 'ToastOptions 타입명 변경 확인',\n find: /import\\s+(?:type\\s+)?{[^}]*\\bToastOptions\\b[^}]*}\\s*from\\s*['\"]@exem-fe\\/react['\"]/g,\n suggestion:\n 'sonner의 Options → SonnerToastOptions, 새 ToastOptions는 { title, description, action, close }',\n },\n {\n id: 'segment-ongray',\n description: 'Segment onGray prop 제거됨',\n find: /onGray/g,\n suggestion: 'onGray prop을 제거하세요. 배경색은 bg-elevation-elevation-2로 고정됩니다.',\n },\n {\n id: 'loading-tone',\n description: 'Loading tone prop 제거됨',\n find: /<Loading[^>]*\\btone\\s*=/g,\n suggestion: 'tone prop을 제거하세요. dim prop을 대신 사용하세요.',\n },\n {\n id: 'loading-default-size',\n description: 'Loading 기본 size가 medium → large로 변경됨',\n find: /<Loading(?![^>]*\\bsize\\s*=)[^>]*\\/?>/g,\n suggestion: '기존 동작 유지가 필요하면 size=\"medium\"을 명시하세요.',\n },\n {\n id: 'modal-show-close-icon',\n description: 'Modal.Content의 showCloseIcon → Modal.Header로 이동됨',\n find: /<Modal\\.Content[^>]*showCloseIcon/g,\n suggestion: 'showCloseIcon을 Modal.Content에서 제거하고 Modal.Header에 추가하세요.',\n },\n {\n id: 'table-import',\n description: 'Table 컴포넌트가 디자인시스템에서 제거됨',\n find: /import\\s+(?:type\\s+)?{[^}]*\\bTable\\b[^}]*}\\s*from\\s*['\"]@exem-fe\\/react['\"]/g,\n suggestion: 'Table 관련 코드를 프로젝트 내부 컴포넌트로 이동하세요.',\n },\n {\n id: 'breadcrumb-separator',\n description: 'Breadcrumb.Separator 아이콘 → \"/\" 텍스트로 변경됨',\n find: /<Breadcrumb\\.Separator\\s*\\/?\\s*>/g,\n suggestion:\n '아이콘 유지: <Breadcrumb.Separator><ChevronRightIcon size={16} /></Breadcrumb.Separator>',\n },\n ],\n};\n\nexport default migration;\n","import type { Migration } from '../types';\nimport m001 from './001-exemble';\nimport m002 from './002-team-fe';\n\nexport const migrations: Migration[] = [m001, m002];\n","import { execSync } from 'node:child_process';\nimport { readFileSync, writeFileSync } from 'node:fs';\nimport { relative } from 'node:path';\nimport pc from 'picocolors';\n\nimport type { ChangeEntry, Migration, WarningEntry } from './types';\n\nconst EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.mts'];\nconst IGNORE_DIRS = ['node_modules', 'dist', '.next', '.nuxt', '.output', 'build', '.git'];\n\nfunction collectFiles(dir: string): string[] {\n const files: string[] = [];\n try {\n const extArgs = EXTENSIONS.map((e) => `-name \"*${e}\"`).join(' -o ');\n const ignoreArgs = IGNORE_DIRS.map((d) => `! -path \"*/${d}/*\"`).join(' ');\n const output = execSync(`find \"${dir}\" -type f \\\\( ${extArgs} \\\\) ${ignoreArgs}`, {\n encoding: 'utf-8',\n maxBuffer: 50 * 1024 * 1024,\n });\n for (const line of output.trim().split('\\n')) {\n if (line) {\n files.push(line);\n }\n }\n } catch {\n // no files found\n }\n return files;\n}\n\nfunction applyAutoRules(\n content: string,\n migration: Migration,\n relPath: string,\n autoChanges: ChangeEntry[],\n): string {\n let modified = content;\n for (const rule of migration.autoRules) {\n const regex = new RegExp(rule.find.source, rule.find.flags);\n const matches = modified.match(regex);\n if (matches && matches.length > 0) {\n autoChanges.push({\n file: relPath,\n description: rule.description,\n count: matches.length,\n });\n modified = modified.replace(regex, rule.replace);\n }\n }\n return modified;\n}\n\nfunction collectManualWarnings(\n content: string,\n migration: Migration,\n relPath: string,\n manualWarnings: WarningEntry[],\n): void {\n for (const check of migration.manualChecks) {\n const regex = new RegExp(check.find.source, check.find.flags);\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n if (regex.test(lines[i]!)) {\n manualWarnings.push({\n file: relPath,\n line: i + 1,\n description: check.description,\n suggestion: check.suggestion,\n });\n }\n regex.lastIndex = 0;\n }\n }\n}\n\nfunction printAutoChanges(autoChanges: ChangeEntry[]): void {\n process.stdout.write(`${pc.bold(pc.green('v 자동 치환 항목'))}\\n`);\n process.stdout.write(`${pc.dim('-'.repeat(60))}\\n`);\n\n const grouped = new Map<string, ChangeEntry[]>();\n for (const ch of autoChanges) {\n if (!grouped.has(ch.description)) {\n grouped.set(ch.description, []);\n }\n grouped.get(ch.description)!.push(ch);\n }\n for (const [desc, items] of grouped) {\n const total = items.reduce((s, i) => s + i.count, 0);\n process.stdout.write(\n ` ${pc.green('->')} ${desc} ${pc.dim(`(${total}건, ${items.length}개 파일)`)}\\n`,\n );\n for (const item of items.slice(0, 5)) {\n process.stdout.write(` ${pc.dim(item.file)} ${pc.dim(`(${item.count}건)`)}\\n`);\n }\n if (items.length > 5) {\n process.stdout.write(` ${pc.dim(`... 외 ${items.length - 5}개 파일`)}\\n`);\n }\n }\n process.stdout.write('\\n');\n}\n\nfunction printManualWarnings(manualWarnings: WarningEntry[]): void {\n process.stdout.write(`${pc.bold(pc.yellow('! 수동 확인 필요 항목'))}\\n`);\n process.stdout.write(`${pc.dim('-'.repeat(60))}\\n`);\n\n const grouped = new Map<string, WarningEntry[]>();\n for (const w of manualWarnings) {\n if (!grouped.has(w.description)) {\n grouped.set(w.description, []);\n }\n grouped.get(w.description)!.push(w);\n }\n for (const [desc, items] of grouped) {\n process.stdout.write(` ${pc.yellow('!')} ${desc} ${pc.dim(`(${items.length}건)`)}\\n`);\n process.stdout.write(` ${pc.dim('해결:')} ${items[0]!.suggestion}\\n`);\n for (const item of items.slice(0, 3)) {\n process.stdout.write(` ${pc.dim(`${item.file}:${item.line}`)}\\n`);\n }\n if (items.length > 3) {\n process.stdout.write(` ${pc.dim(`... 외 ${items.length - 3}건`)}\\n`);\n }\n }\n process.stdout.write('\\n');\n}\n\nexport function run(migration: Migration, targetDir: string, apply: boolean): void {\n process.stdout.write(`\\n${pc.bold(`=== [${migration.id}] ${migration.title} ===`)}\\n`);\n process.stdout.write(`${pc.dim('대상:')} ${targetDir}\\n`);\n process.stdout.write(\n `${pc.dim('모드:')} ${apply ? pc.red('실제 적용 (--apply)') : pc.green('미리보기 (dry-run)')}\\n\\n`,\n );\n\n const files = collectFiles(targetDir);\n process.stdout.write(`${pc.dim(`스캔 대상: ${files.length}개 파일`)}\\n\\n`);\n\n const autoChanges: ChangeEntry[] = [];\n const manualWarnings: WarningEntry[] = [];\n let filesModified = 0;\n\n for (const filePath of files) {\n let content: string;\n try {\n content = readFileSync(filePath, 'utf-8');\n } catch {\n continue;\n }\n\n const relPath = relative(targetDir, filePath);\n const modified = applyAutoRules(content, migration, relPath, autoChanges);\n collectManualWarnings(modified, migration, relPath, manualWarnings);\n\n if (modified !== content) {\n filesModified++;\n if (apply) {\n writeFileSync(filePath, modified, 'utf-8');\n }\n }\n }\n\n const totalAutoChanges = autoChanges.reduce((s, c) => s + c.count, 0);\n\n if (autoChanges.length > 0) {\n printAutoChanges(autoChanges);\n }\n\n if (manualWarnings.length > 0) {\n printManualWarnings(manualWarnings);\n }\n\n // ── 요약 ──\n process.stdout.write(`${pc.bold('--- 요약 ---')}\\n`);\n process.stdout.write(\n ` 자동 치환: ${pc.green(`${totalAutoChanges}건`)} (${filesModified}개 파일)\\n`,\n );\n process.stdout.write(` 수동 확인: ${pc.yellow(`${manualWarnings.length}건`)}\\n`);\n\n if (!apply && totalAutoChanges > 0) {\n process.stdout.write(\n `\\n ${pc.cyan('--apply 플래그를 추가하면 자동 치환이 실제로 적용됩니다.')}\\n`,\n );\n }\n\n if (apply && totalAutoChanges > 0) {\n process.stdout.write(`\\n ${pc.green('v 자동 치환이 적용되었습니다.')}\\n`);\n }\n\n process.stdout.write('\\n');\n}\n"],"mappings":"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QAC1BA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,MAAa,QAC1BA,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","names":["x","y","p","ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","e","eaw","module","character","x","y","codePoint","code","stringToArray","characters","len","i","text","start","end","result","eawLen","chars","char","charLen","emojiRegex","stringWidth","options","ambiguousCharacterWidth","width","eastAsianWidth","ANSI_BACKGROUND_OFFSET","wrapAnsi16","offset","wrapAnsi256","wrapAnsi16m","red","green","blue","styles","foregroundColorNames","backgroundColorNames","assembleStyles","codes","groupName","group","styleName","style","hex","matches","colorString","integer","remainder","value","ansiStyles","ESCAPES","END_CODE","ANSI_ESCAPE_BELL","ANSI_CSI","ANSI_OSC","ANSI_SGR_TERMINATOR","ANSI_ESCAPE_LINK","wrapAnsiCode","wrapAnsiHyperlink","uri","wordLengths","wrapWord","rows","word","columns","isInsideEscape","isInsideLinkEscape","visible","index","characterLength","stringVisibleTrimSpacesRight","words","last","exec","returnValue","escapeCode","escapeUrl","lengths","rowLength","remainingColumns","breaksStartingThisLine","row","pre","groups","wrapAnsi","line","actions","settings","isActionKey","key","action","settings","value","diffLines","a","b","aLines","bLines","diff","i","isWindows","CANCEL_SYMBOL","isCancel","setRawMode","input","b","v","a","t","e","s","Prompt","options","trackValue","__publicField","input","stdin","output","stdout","render","signal","opts","event","params","cb","data","cbs","cleanup","subscriber","resolve","reject","CANCEL_SYMBOL","sink","Writable","chunk","encoding","done","readline","setRawMode","cursor","char","key","settings","problem","isActionKey","lines","wrap","frame","diff","diffLines","diffLine","erase","newLines","_selectableGroups","_selectableGroups","e","u","SelectPrompt","Prompt","opts","__publicField","value","key","TextPrompt","Prompt","s1","s2","s3","color","opts","isUnicodeSupported","process","unicode","s","c","fallback","S_STEP_ACTIVE","S_STEP_CANCEL","S_STEP_ERROR","S_STEP_SUBMIT","S_BAR_START","S_BAR","S_BAR_END","S_RADIO_ACTIVE","S_RADIO_INACTIVE","S_CHECKBOX_ACTIVE","S_CHECKBOX_SELECTED","S_CHECKBOX_INACTIVE","S_PASSWORD_MASK","S_BAR_H","S_CORNER_TOP_RIGHT","S_CONNECT_LEFT","S_CORNER_BOTTOM_RIGHT","S_INFO","S_SUCCESS","S_WARN","S_ERROR","symbol","state","color","limitOptions","params","cursor","options","style","paramMaxItems","outputMaxItems","maxItems","slidingWindowLocation","shouldRenderTopEllipsis","shouldRenderBottomEllipsis","option","i","arr","isTopLimit","isBottomLimit","text","opts","TextPrompt","title","placeholder","value","select","opts","opt","option","state","label","color","S_RADIO_ACTIVE","S_RADIO_INACTIVE","SelectPrompt","title","S_BAR","symbol","limitOptions","item","active","S_BAR_END","cancel","message","color","S_BAR_END","intro","title","S_BAR_START","outro","S_BAR","log","symbol","parts","firstLine","lines","ln","S_INFO","S_SUCCESS","S_STEP_SUBMIT","S_WARN","S_ERROR","prefix","import_picocolors","migration","import_picocolors","e","d","migration","pc","w","pc","m","migration","M"]}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@exem-ui/migration",
3
+ "version": "0.1.0-next.20260309055529",
4
+ "description": "Codemod migration CLI for @exem-ui",
5
+ "author": "Exem Design Team",
6
+ "license": "Apache-2.0",
7
+ "type": "module",
8
+ "bin": {
9
+ "exem-ui-migrate": "./dist/index.js"
10
+ },
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "keywords": [
15
+ "migration",
16
+ "codemod",
17
+ "exem",
18
+ "design-system"
19
+ ],
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "https://github.com/CloudMOA/exem-ui.git",
23
+ "directory": "packages/migration"
24
+ },
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "dependencies": {
29
+ "@clack/prompts": "^0.10.0",
30
+ "picocolors": "^1.1.1"
31
+ },
32
+ "devDependencies": {
33
+ "tsup": "^8.5.0",
34
+ "typescript": "^5.3.3"
35
+ },
36
+ "scripts": {
37
+ "build": "tsup",
38
+ "dev": "tsup --watch"
39
+ }
40
+ }